mirror of
https://github.com/Readarr/Readarr.git
synced 2026-03-12 15:29:59 -04:00
Compare commits
54 Commits
sonarr-pul
...
v0.4.12.27
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
229e0dfe5d | ||
|
|
5173daa265 | ||
|
|
c2f770f242 | ||
|
|
0b7ce67635 | ||
|
|
bc74456944 | ||
|
|
fa460567a7 | ||
|
|
7dfceb307b | ||
|
|
305ad235a5 | ||
|
|
74c20e41bf | ||
|
|
347289b173 | ||
|
|
0ef3d2a5cc | ||
|
|
e5519d60c9 | ||
|
|
3a85b3a060 | ||
|
|
c1cdf44322 | ||
|
|
f861e54139 | ||
|
|
279e1029e0 | ||
|
|
b9ed39175b | ||
|
|
faba3ada95 | ||
|
|
e8647aee05 | ||
|
|
eaf5ce52bc | ||
|
|
73ab2760e4 | ||
|
|
3bb036e8c6 | ||
|
|
6e05456d6a | ||
|
|
8563a42822 | ||
|
|
841d38f4a5 | ||
|
|
9326d88eb6 | ||
|
|
015da61004 | ||
|
|
d02ea4b121 | ||
|
|
7bc9d700f9 | ||
|
|
661d72ef9b | ||
|
|
258a8d1c95 | ||
|
|
d4459b9475 | ||
|
|
a550c6554f | ||
|
|
c1b26eec8d | ||
|
|
ffe5ede55d | ||
|
|
9005860899 | ||
|
|
c67f67109e | ||
|
|
51b9744e25 | ||
|
|
334d824633 | ||
|
|
ae01387ca9 | ||
|
|
4eb13e0938 | ||
|
|
6dbb826f2f | ||
|
|
52dfa57dd7 | ||
|
|
f354b3bc47 | ||
|
|
2d9e6788e6 | ||
|
|
0d121fe9c0 | ||
|
|
892c34fe35 | ||
|
|
24f6007594 | ||
|
|
5028ed4027 | ||
|
|
05f303436b | ||
|
|
5635de96a8 | ||
|
|
ce59f32023 | ||
|
|
6d675a5207 | ||
|
|
b093b23900 |
@@ -9,7 +9,7 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '0.4.4'
|
||||
majorVersion: '0.4.12'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
readarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(readarrVersion)'
|
||||
@@ -1102,19 +1102,19 @@ stages:
|
||||
vmImage: ${{ variables.windowsImage }}
|
||||
steps:
|
||||
- checkout: self # Need history for Sonar analysis
|
||||
- task: SonarCloudPrepare@2
|
||||
- task: SonarCloudPrepare@3
|
||||
env:
|
||||
SONAR_SCANNER_OPTS: ''
|
||||
inputs:
|
||||
SonarCloud: 'SonarCloud'
|
||||
organization: 'readarr'
|
||||
scannerMode: 'CLI'
|
||||
scannerMode: 'cli'
|
||||
configMode: 'manual'
|
||||
cliProjectKey: 'readarrui'
|
||||
cliProjectName: 'ReadarrUI'
|
||||
cliProjectVersion: '$(readarrVersion)'
|
||||
cliSources: './frontend'
|
||||
- task: SonarCloudAnalyze@2
|
||||
- task: SonarCloudAnalyze@3
|
||||
|
||||
- job: Api_Docs
|
||||
displayName: API Docs
|
||||
@@ -1190,12 +1190,12 @@ stages:
|
||||
submodules: true
|
||||
- powershell: Set-Service SCardSvr -StartupType Manual
|
||||
displayName: Enable Windows Test Service
|
||||
- task: SonarCloudPrepare@2
|
||||
- task: SonarCloudPrepare@3
|
||||
condition: eq(variables['System.PullRequest.IsFork'], 'False')
|
||||
inputs:
|
||||
SonarCloud: 'SonarCloud'
|
||||
organization: 'readarr'
|
||||
scannerMode: 'MSBuild'
|
||||
scannerMode: 'dotnet'
|
||||
projectKey: 'Readarr_Readarr'
|
||||
projectName: 'Readarr'
|
||||
projectVersion: '$(readarrVersion)'
|
||||
@@ -1208,10 +1208,10 @@ stages:
|
||||
./build.sh --backend -f net6.0 -r win-x64
|
||||
TEST_DIR=_tests/net6.0/win-x64/publish/ ./test.sh Windows Unit Coverage
|
||||
displayName: Coverage Unit Tests
|
||||
- task: SonarCloudAnalyze@2
|
||||
- task: SonarCloudAnalyze@3
|
||||
condition: eq(variables['System.PullRequest.IsFork'], 'False')
|
||||
displayName: Publish SonarCloud Results
|
||||
- task: reportgenerator@5
|
||||
- task: reportgenerator@5.3.11
|
||||
displayName: Generate Coverage Report
|
||||
inputs:
|
||||
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml'
|
||||
|
||||
@@ -26,6 +26,7 @@ module.exports = (env) => {
|
||||
const config = {
|
||||
mode: isProduction ? 'production' : 'development',
|
||||
devtool: isProduction ? 'source-map' : 'eval-source-map',
|
||||
target: 'web',
|
||||
|
||||
stats: {
|
||||
children: false
|
||||
@@ -181,7 +182,7 @@ module.exports = (env) => {
|
||||
loose: true,
|
||||
debug: false,
|
||||
useBuiltIns: 'entry',
|
||||
corejs: 3
|
||||
corejs: '3.39'
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -76,7 +76,7 @@ function EditImportListExclusionModalContent(props) {
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('MusicbrainzId')}
|
||||
{translate('ForeignId')}
|
||||
</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
|
||||
@@ -45,6 +45,12 @@ export const defaultState = {
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'books.lastSearchTime',
|
||||
label: 'Last Searched',
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
@@ -108,6 +114,12 @@ export const defaultState = {
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'books.lastSearchTime',
|
||||
label: 'Last Searched',
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
|
||||
@@ -131,13 +131,15 @@ class CutoffUnmetConnector extends Component {
|
||||
onSearchSelectedPress = (selected) => {
|
||||
this.props.executeCommand({
|
||||
name: commandNames.BOOK_SEARCH,
|
||||
bookIds: selected
|
||||
bookIds: selected,
|
||||
commandFinished: this.repopulate
|
||||
});
|
||||
};
|
||||
|
||||
onSearchAllCutoffUnmetPress = () => {
|
||||
this.props.executeCommand({
|
||||
name: commandNames.CUTOFF_UNMET_BOOK_SEARCH
|
||||
name: commandNames.CUTOFF_UNMET_BOOK_SEARCH,
|
||||
commandFinished: this.repopulate
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ function CutoffUnmetRow(props) {
|
||||
releaseDate,
|
||||
titleSlug,
|
||||
title,
|
||||
lastSearchTime,
|
||||
disambiguation,
|
||||
isSelected,
|
||||
columns,
|
||||
@@ -68,6 +69,15 @@ function CutoffUnmetRow(props) {
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'books.lastSearchTime') {
|
||||
return (
|
||||
<RelativeDateCellConnector
|
||||
key={name}
|
||||
date={lastSearchTime}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'releaseDate') {
|
||||
return (
|
||||
<RelativeDateCellConnector
|
||||
@@ -105,6 +115,7 @@ CutoffUnmetRow.propTypes = {
|
||||
releaseDate: PropTypes.string.isRequired,
|
||||
titleSlug: PropTypes.string.isRequired,
|
||||
title: PropTypes.string.isRequired,
|
||||
lastSearchTime: PropTypes.string,
|
||||
disambiguation: PropTypes.string,
|
||||
isSelected: PropTypes.bool,
|
||||
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
|
||||
@@ -121,13 +121,15 @@ class MissingConnector extends Component {
|
||||
onSearchSelectedPress = (selected) => {
|
||||
this.props.executeCommand({
|
||||
name: commandNames.BOOK_SEARCH,
|
||||
bookIds: selected
|
||||
bookIds: selected,
|
||||
commandFinished: this.repopulate
|
||||
});
|
||||
};
|
||||
|
||||
onSearchAllMissingPress = () => {
|
||||
this.props.executeCommand({
|
||||
name: commandNames.MISSING_BOOK_SEARCH
|
||||
name: commandNames.MISSING_BOOK_SEARCH,
|
||||
commandFinished: this.repopulate
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ function MissingRow(props) {
|
||||
releaseDate,
|
||||
titleSlug,
|
||||
title,
|
||||
lastSearchTime,
|
||||
disambiguation,
|
||||
isSelected,
|
||||
columns,
|
||||
@@ -77,6 +78,15 @@ function MissingRow(props) {
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'books.lastSearchTime') {
|
||||
return (
|
||||
<RelativeDateCellConnector
|
||||
key={name}
|
||||
date={lastSearchTime}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'actions') {
|
||||
return (
|
||||
<BookSearchCellConnector
|
||||
@@ -104,6 +114,7 @@ MissingRow.propTypes = {
|
||||
releaseDate: PropTypes.string.isRequired,
|
||||
titleSlug: PropTypes.string.isRequired,
|
||||
title: PropTypes.string.isRequired,
|
||||
lastSearchTime: PropTypes.string,
|
||||
disambiguation: PropTypes.string,
|
||||
isSelected: PropTypes.bool,
|
||||
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
|
||||
24
package.json
24
package.json
@@ -25,10 +25,10 @@
|
||||
"defaults"
|
||||
],
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "6.6.0",
|
||||
"@fortawesome/fontawesome-svg-core": "6.6.0",
|
||||
"@fortawesome/free-regular-svg-icons": "6.6.0",
|
||||
"@fortawesome/free-solid-svg-icons": "6.6.0",
|
||||
"@fortawesome/fontawesome-free": "6.7.1",
|
||||
"@fortawesome/fontawesome-svg-core": "6.7.1",
|
||||
"@fortawesome/free-regular-svg-icons": "6.7.1",
|
||||
"@fortawesome/free-solid-svg-icons": "6.7.1",
|
||||
"@fortawesome/react-fontawesome": "0.2.2",
|
||||
"@microsoft/signalr": "6.0.25",
|
||||
"@sentry/browser": "7.119.1",
|
||||
@@ -86,13 +86,13 @@
|
||||
"typescript": "5.1.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.25.8",
|
||||
"@babel/eslint-parser": "7.25.8",
|
||||
"@babel/plugin-proposal-export-default-from": "7.25.8",
|
||||
"@babel/core": "7.26.0",
|
||||
"@babel/eslint-parser": "7.25.9",
|
||||
"@babel/plugin-proposal-export-default-from": "7.25.9",
|
||||
"@babel/plugin-syntax-dynamic-import": "7.8.3",
|
||||
"@babel/preset-env": "7.25.8",
|
||||
"@babel/preset-react": "7.25.7",
|
||||
"@babel/preset-typescript": "7.25.7",
|
||||
"@babel/preset-env": "7.26.0",
|
||||
"@babel/preset-react": "7.26.3",
|
||||
"@babel/preset-typescript": "7.26.0",
|
||||
"@types/lodash": "4.14.195",
|
||||
"@types/react-lazyload": "3.2.3",
|
||||
"@types/redux-actions": "2.6.5",
|
||||
@@ -102,7 +102,7 @@
|
||||
"babel-loader": "9.2.1",
|
||||
"babel-plugin-inline-classnames": "2.0.1",
|
||||
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
|
||||
"core-js": "3.38.1",
|
||||
"core-js": "3.39.0",
|
||||
"css-loader": "6.8.1",
|
||||
"css-modules-typescript-loader": "4.0.1",
|
||||
"eslint": "8.57.1",
|
||||
@@ -142,7 +142,7 @@
|
||||
"worker-loader": "3.0.8"
|
||||
},
|
||||
"volta": {
|
||||
"node": "16.17.0",
|
||||
"node": "20.11.1",
|
||||
"yarn": "1.22.19"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,6 +99,35 @@
|
||||
<RootNamespace Condition="'$(ReadarrProject)'=='true'">$(MSBuildProjectName.Replace('Readarr','NzbDrone'))</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TestProject)'!='true'">
|
||||
<!-- Annotates .NET assemblies with repository information including SHA -->
|
||||
<!-- Sentry uses this to link directly to GitHub at the exact version/file/line -->
|
||||
<!-- This is built-in on .NET 8 and can be removed once the project is updated -->
|
||||
<PackageReference Include="Microsoft.SourceLink.GitHub" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Sentry specific configuration: Only in Release mode -->
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
||||
<!-- https://docs.sentry.io/platforms/dotnet/configuration/msbuild/ -->
|
||||
<!-- OrgSlug, ProjectSlug and AuthToken are required.
|
||||
They can be set below, via argument to 'msbuild -p:' or environment variable -->
|
||||
<SentryOrg></SentryOrg>
|
||||
<SentryProject></SentryProject>
|
||||
<SentryUrl></SentryUrl> <!-- If empty, assumed to be sentry.io -->
|
||||
<SentryAuthToken></SentryAuthToken> <!-- Use env var instead: SENTRY_AUTH_TOKEN -->
|
||||
|
||||
<!-- Upload PDBs to Sentry, enabling stack traces with line numbers and file paths
|
||||
without the need to deploy the application with PDBs -->
|
||||
<SentryUploadSymbols>true</SentryUploadSymbols>
|
||||
|
||||
<!-- Source Link settings -->
|
||||
<!-- https://github.com/dotnet/sourcelink/blob/main/docs/README.md#publishrepositoryurl -->
|
||||
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
||||
<!-- Embeds all source code in the respective PDB. This can make it a bit bigger but since it'll be uploaded
|
||||
to Sentry and not distributed to run on the server, it helps debug crashes while making releases smaller -->
|
||||
<EmbedAllSources>true</EmbedAllSources>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Standard testing packages -->
|
||||
<ItemGroup Condition="'$(TestProject)'=='true'">
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" />
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
<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.4.2" />
|
||||
<PackageVersion Include="IPAddressRange" Version="6.1.0" />
|
||||
<PackageVersion Include="Polly" Version="8.5.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" />
|
||||
@@ -17,14 +18,16 @@
|
||||
<PackageVersion Include="Ical.Net" Version="4.3.1" />
|
||||
<PackageVersion Include="ImpromptuInterface" Version="7.0.1" />
|
||||
<PackageVersion Include="LazyCache" Version="2.4.0" />
|
||||
<PackageVersion Include="Mailkit" Version="3.6.0" />
|
||||
<PackageVersion Include="Mailkit" Version="4.8.0" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="6.0.35" />
|
||||
<PackageVersion Include="Microsoft.Data.SqlClient" Version="2.1.7" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
|
||||
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
|
||||
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||
<PackageVersion Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr22" />
|
||||
<PackageVersion Include="Moq" Version="4.17.2" />
|
||||
@@ -34,28 +37,28 @@
|
||||
<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.8" />
|
||||
<PackageVersion Include="Npgsql" Version="7.0.9" />
|
||||
<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.32" />
|
||||
<PackageVersion Include="PdfSharpCore" Version="1.3.65" />
|
||||
<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="Sentry" Version="4.0.2" />
|
||||
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.5" />
|
||||
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.7" />
|
||||
<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" />
|
||||
<PackageVersion Include="System.Buffers" Version="4.5.1" />
|
||||
<PackageVersion Include="System.Buffers" Version="4.6.0" />
|
||||
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="6.0.1" />
|
||||
<PackageVersion Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||
<PackageVersion Include="System.IO.Abstractions.TestingHelpers" Version="17.0.24" />
|
||||
<PackageVersion Include="System.IO.Abstractions" Version="17.0.24" />
|
||||
<PackageVersion Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
|
||||
<PackageVersion Include="System.Memory" Version="4.5.5" />
|
||||
<PackageVersion Include="System.Memory" Version="4.6.0" />
|
||||
<PackageVersion Include="System.Reflection.TypeExtensions" Version="4.7.0" />
|
||||
<PackageVersion Include="System.Resources.Extensions" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Runtime.Loader" Version="4.3.0" />
|
||||
|
||||
@@ -21,9 +21,28 @@ 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using FluentAssertions;
|
||||
using NLog;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Instrumentation.Sentry;
|
||||
using NzbDrone.Test.Common;
|
||||
|
||||
@@ -27,7 +28,7 @@ namespace NzbDrone.Common.Test.InstrumentationTests
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_subject = new SentryTarget("https://aaaaaaaaaaaaaaaaaaaaaaaaaa@sentry.io/111111");
|
||||
_subject = new SentryTarget("https://aaaaaaaaaaaaaaaaaaaaaaaaaa@sentry.io/111111", Mocker.GetMock<IAppFolderInfo>().Object);
|
||||
}
|
||||
|
||||
private LogEventInfo GivenLogEvent(LogLevel level, Exception ex, string message)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
@@ -317,14 +316,5 @@ 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,17 +42,18 @@ namespace NzbDrone.Common
|
||||
|
||||
public void CreateZip(string path, IEnumerable<string> files)
|
||||
{
|
||||
using (var zipFile = ZipFile.Create(path))
|
||||
_logger.Debug("Creating archive {0}", path);
|
||||
|
||||
using var zipFile = ZipFile.Create(path);
|
||||
|
||||
zipFile.BeginUpdate();
|
||||
|
||||
foreach (var file in files)
|
||||
{
|
||||
zipFile.BeginUpdate();
|
||||
|
||||
foreach (var file in files)
|
||||
{
|
||||
zipFile.Add(file, Path.GetFileName(file));
|
||||
}
|
||||
|
||||
zipFile.CommitUpdate();
|
||||
zipFile.Add(file, Path.GetFileName(file));
|
||||
}
|
||||
|
||||
zipFile.CommitUpdate();
|
||||
}
|
||||
|
||||
private void ExtractZip(string compressedFile, string destination)
|
||||
|
||||
@@ -342,10 +342,11 @@ namespace NzbDrone.Common.Disk
|
||||
|
||||
var isCifs = targetDriveFormat == "cifs";
|
||||
var isBtrfs = sourceDriveFormat == "btrfs" && targetDriveFormat == "btrfs";
|
||||
var isZfs = sourceDriveFormat == "zfs" && targetDriveFormat == "zfs";
|
||||
|
||||
if (mode.HasFlag(TransferMode.Copy))
|
||||
{
|
||||
if (isBtrfs)
|
||||
if (isBtrfs || isZfs)
|
||||
{
|
||||
if (_diskProvider.TryCreateRefLink(sourcePath, targetPath))
|
||||
{
|
||||
@@ -359,7 +360,7 @@ namespace NzbDrone.Common.Disk
|
||||
|
||||
if (mode.HasFlag(TransferMode.Move))
|
||||
{
|
||||
if (isBtrfs)
|
||||
if (isBtrfs || isZfs)
|
||||
{
|
||||
if (isSameMount && _diskProvider.TryRenameFile(sourcePath, targetPath))
|
||||
{
|
||||
|
||||
@@ -39,18 +39,24 @@ 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)
|
||||
bool IsLinkLocal() => ipv4Bytes[0] == 169 && ipv4Bytes[1] == 254;
|
||||
var isLinkLocal = ipv4Bytes[0] == 169 && ipv4Bytes[1] == 254;
|
||||
|
||||
// Class A private range: 10.0.0.0 – 10.255.255.255 (10.0.0.0/8)
|
||||
bool IsClassA() => ipv4Bytes[0] == 10;
|
||||
var isClassA = ipv4Bytes[0] == 10;
|
||||
|
||||
// Class B private range: 172.16.0.0 – 172.31.255.255 (172.16.0.0/12)
|
||||
bool IsClassB() => ipv4Bytes[0] == 172 && ipv4Bytes[1] >= 16 && ipv4Bytes[1] <= 31;
|
||||
var 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)
|
||||
bool IsClassC() => ipv4Bytes[0] == 192 && ipv4Bytes[1] == 168;
|
||||
var isClassC = ipv4Bytes[0] == 192 && ipv4Bytes[1] == 168;
|
||||
|
||||
return IsLinkLocal() || IsClassA() || IsClassC() || IsClassB();
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,10 +60,6 @@ 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;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using NzbDrone.Common.Extensions;
|
||||
|
||||
namespace NzbDrone.Common.Http.Proxy
|
||||
@@ -29,7 +30,8 @@ namespace NzbDrone.Common.Http.Proxy
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(BypassFilter))
|
||||
{
|
||||
var hostlist = BypassFilter.Split(',');
|
||||
var hostlist = BypassFilter.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
|
||||
|
||||
for (var i = 0; i < hostlist.Length; i++)
|
||||
{
|
||||
if (hostlist[i].StartsWith("*"))
|
||||
@@ -41,7 +43,7 @@ namespace NzbDrone.Common.Http.Proxy
|
||||
return hostlist;
|
||||
}
|
||||
|
||||
return new string[] { };
|
||||
return Array.Empty<string>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
RegisterDebugger();
|
||||
}
|
||||
|
||||
RegisterSentry(updateApp);
|
||||
RegisterSentry(updateApp, appFolderInfo);
|
||||
|
||||
if (updateApp)
|
||||
{
|
||||
@@ -62,7 +62,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
LogManager.ReconfigExistingLoggers();
|
||||
}
|
||||
|
||||
private static void RegisterSentry(bool updateClient)
|
||||
private static void RegisterSentry(bool updateClient, IAppFolderInfo appFolderInfo)
|
||||
{
|
||||
string dsn;
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
: "https://31e00a6c63ea42c8b5fe70358526a30d@sentry.servarr.com/4";
|
||||
}
|
||||
|
||||
var target = new SentryTarget(dsn)
|
||||
var target = new SentryTarget(dsn, appFolderInfo)
|
||||
{
|
||||
Name = "sentryTarget",
|
||||
Layout = "${message}"
|
||||
|
||||
@@ -9,6 +9,7 @@ using NLog;
|
||||
using NLog.Common;
|
||||
using NLog.Targets;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using Sentry;
|
||||
|
||||
namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
@@ -99,7 +100,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
public bool FilterEvents { get; set; }
|
||||
public bool SentryEnabled { get; set; }
|
||||
|
||||
public SentryTarget(string dsn)
|
||||
public SentryTarget(string dsn, IAppFolderInfo appFolderInfo)
|
||||
{
|
||||
_sdk = SentrySdk.Init(o =>
|
||||
{
|
||||
@@ -107,9 +108,33 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
o.AttachStacktrace = true;
|
||||
o.MaxBreadcrumbs = 200;
|
||||
o.Release = $"{BuildInfo.AppName}@{BuildInfo.Release}";
|
||||
o.BeforeSend = x => SentryCleanser.CleanseEvent(x);
|
||||
o.BeforeBreadcrumb = x => SentryCleanser.CleanseBreadcrumb(x);
|
||||
o.SetBeforeSend(x => SentryCleanser.CleanseEvent(x));
|
||||
o.SetBeforeBreadcrumb(x => SentryCleanser.CleanseBreadcrumb(x));
|
||||
o.Environment = BuildInfo.Branch;
|
||||
|
||||
// Crash free run statistics (sends a ping for healthy and for crashes sessions)
|
||||
o.AutoSessionTracking = false;
|
||||
|
||||
// Caches files in the event device is offline
|
||||
// Sentry creates a 'sentry' sub directory, no need to concat here
|
||||
o.CacheDirectoryPath = appFolderInfo.GetAppDataPath();
|
||||
|
||||
// default environment is production
|
||||
if (!RuntimeInfo.IsProduction)
|
||||
{
|
||||
if (RuntimeInfo.IsDevelopment)
|
||||
{
|
||||
o.Environment = "development";
|
||||
}
|
||||
else if (RuntimeInfo.IsTesting)
|
||||
{
|
||||
o.Environment = "testing";
|
||||
}
|
||||
else
|
||||
{
|
||||
o.Environment = "other";
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
InitializeScope();
|
||||
@@ -127,7 +152,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
{
|
||||
SentrySdk.ConfigureScope(scope =>
|
||||
{
|
||||
scope.User = new User
|
||||
scope.User = new SentryUser
|
||||
{
|
||||
Id = HashUtil.AnonymousToken()
|
||||
};
|
||||
@@ -169,9 +194,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
|
||||
private void OnError(Exception ex)
|
||||
{
|
||||
var webException = ex as WebException;
|
||||
|
||||
if (webException != null)
|
||||
if (ex is WebException webException)
|
||||
{
|
||||
var response = webException.Response as HttpWebResponse;
|
||||
var statusCode = response?.StatusCode;
|
||||
@@ -290,13 +313,21 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
}
|
||||
}
|
||||
|
||||
var level = LoggingLevelMap[logEvent.Level];
|
||||
var sentryEvent = new SentryEvent(logEvent.Exception)
|
||||
{
|
||||
Level = LoggingLevelMap[logEvent.Level],
|
||||
Level = level,
|
||||
Logger = logEvent.LoggerName,
|
||||
Message = logEvent.FormattedMessage
|
||||
};
|
||||
|
||||
if (level is SentryLevel.Fatal && logEvent.Exception is not null)
|
||||
{
|
||||
// Usages of 'fatal' here indicates the process will crash. In Sentry this is represented with
|
||||
// the 'unhandled' exception flag
|
||||
logEvent.Exception.SetSentryMechanism("Logger.Fatal", "Logger.Fatal was called", false);
|
||||
}
|
||||
|
||||
sentryEvent.SetExtras(extras);
|
||||
sentryEvent.SetFingerprint(fingerPrint);
|
||||
|
||||
|
||||
@@ -6,4 +6,5 @@ public class AuthOptions
|
||||
public bool? Enabled { get; set; }
|
||||
public string Method { get; set; }
|
||||
public string Required { get; set; }
|
||||
public bool? TrustCgnatIpAddresses { get; set; }
|
||||
}
|
||||
|
||||
@@ -21,10 +21,10 @@ namespace NzbDrone.Common
|
||||
{
|
||||
if (OsInfo.IsWindows)
|
||||
{
|
||||
return obj.CleanFilePath().Normalize().ToLower().GetHashCode();
|
||||
return obj.CleanFilePath().ToLower().GetHashCode();
|
||||
}
|
||||
|
||||
return obj.CleanFilePath().Normalize().GetHashCode();
|
||||
return obj.CleanFilePath().GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DryIoc.dll" />
|
||||
<PackageReference Include="IPAddressRange" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" />
|
||||
|
||||
@@ -178,8 +178,9 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
VerifyWarning(item);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void paused_item_should_have_required_properties()
|
||||
[TestCase("pausedDL")]
|
||||
[TestCase("stoppedDL")]
|
||||
public void paused_item_should_have_required_properties(string state)
|
||||
{
|
||||
var torrent = new QBittorrentTorrent
|
||||
{
|
||||
@@ -188,7 +189,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 0.7,
|
||||
Eta = 8640000,
|
||||
State = "pausedDL",
|
||||
State = state,
|
||||
Label = "",
|
||||
SavePath = ""
|
||||
};
|
||||
@@ -200,6 +201,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
[TestCase("queuedUP")]
|
||||
[TestCase("uploading")]
|
||||
[TestCase("stalledUP")]
|
||||
@@ -397,8 +399,9 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
result.OutputPath.FullPath.Should().Be(Path.Combine(torrent.SavePath, "Droned.S01.12"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void api_261_should_use_content_path()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void api_261_should_use_content_path(string state)
|
||||
{
|
||||
var torrent = new QBittorrentTorrent
|
||||
{
|
||||
@@ -407,7 +410,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 0.7,
|
||||
Eta = 8640000,
|
||||
State = "pausedUP",
|
||||
State = state,
|
||||
Label = "",
|
||||
SavePath = @"C:\Torrents".AsOsAgnostic(),
|
||||
ContentPath = @"C:\Torrents\Droned.S01.12".AsOsAgnostic()
|
||||
@@ -684,44 +687,96 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_removable_and_should_not_allow_move_files_if_max_ratio_is_not_set()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_and_should_not_allow_move_files_if_max_ratio_is_not_set(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_after_rounding_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
GivenCompletedTorrent(state, ratio: 1.1006066990976857f);
|
||||
|
||||
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_just_under_max_ratio_reached_after_rounding_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
GivenCompletedTorrent(state, ratio: 0.9999f);
|
||||
|
||||
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)
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f, ratioLimit: 0.8f);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f, ratioLimit: 0.8f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_removable_if_overridden_max_ratio_not_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_after_rounding_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f);
|
||||
GivenCompletedTorrent(state, ratio: 1.1006066990976857f, ratioLimit: 1.1f);
|
||||
|
||||
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_just_under_overridden_max_ratio_reached_after_rounding_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f);
|
||||
GivenCompletedTorrent(state, ratio: 0.9999f, ratioLimit: 1.0f);
|
||||
|
||||
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)
|
||||
{
|
||||
GivenGlobalSeedLimits(0.2f);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 0.5f, ratioLimit: 0.8f);
|
||||
GivenCompletedTorrent(state, ratio: 0.5f, ratioLimit: 0.8f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
@@ -739,33 +794,36 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_seedingtime_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_seedingtime_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 40);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20, seedingTimeLimit: 10);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20, seedingTimeLimit: 10);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_removable_if_overridden_max_seedingtime_not_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_if_overridden_max_seedingtime_not_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 30, seedingTimeLimit: 40);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 30, seedingTimeLimit: 40);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
@@ -783,66 +841,72 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_inactive_seedingtime_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_inactive_seedingtime_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 40);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20, inactiveSeedingTimeLimit: 10, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(15)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent(state, 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();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_removable_if_overridden_max_inactive_seedingtime_not_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_if_overridden_max_inactive_seedingtime_not_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 30, inactiveSeedingTimeLimit: 40, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(30)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent(state, 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();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_but_ratio_not_and_paused()
|
||||
[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)
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f, 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f, seedingTime: 30);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f, seedingTime: 30);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_but_ratio_not_and_paused()
|
||||
[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)
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f, maxInactiveSeedingTime: 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent(state, ratio: 1.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_fetch_details_twice()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_fetch_details_twice(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 30);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
@@ -854,8 +918,9 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
.Verify(p => p.GetTorrentProperties(It.IsAny<string>(), It.IsAny<QBittorrentSettings>()), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_get_category_from_the_category_if_set()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_get_category_from_the_category_if_set(string state)
|
||||
{
|
||||
const string category = "music-readarr";
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
@@ -867,7 +932,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 1.0,
|
||||
Eta = 8640000,
|
||||
State = "pausedUP",
|
||||
State = state,
|
||||
Category = category,
|
||||
SavePath = "",
|
||||
Ratio = 1.0f
|
||||
@@ -879,8 +944,9 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.Category.Should().Be(category);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_get_category_from_the_label_if_the_category_is_not_available()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_get_category_from_the_label_if_the_category_is_not_available(string state)
|
||||
{
|
||||
const string category = "music-readarr";
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
@@ -892,7 +958,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 1.0,
|
||||
Eta = 8640000,
|
||||
State = "pausedUP",
|
||||
State = state,
|
||||
Label = category,
|
||||
SavePath = "",
|
||||
Ratio = 1.0f
|
||||
|
||||
@@ -478,6 +478,37 @@ 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")]
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace NzbDrone.Core.Test.Http
|
||||
{
|
||||
private HttpProxySettings GetProxySettings()
|
||||
{
|
||||
return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com", true, null, null);
|
||||
return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com,172.16.0.0/12", true, null, null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -23,6 +23,7 @@ namespace NzbDrone.Core.Test.Http
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://eu.httpbin.org/get")).Should().BeTrue();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://google.com/get")).Should().BeTrue();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://localhost:8654/get")).Should().BeTrue();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.21.0.1:8989/api/v3/indexer/schema")).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -31,6 +32,7 @@ namespace NzbDrone.Core.Test.Http
|
||||
var settings = GetProxySettings();
|
||||
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://bing.com/get")).Should().BeFalse();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.3.0.1:8989/api/v3/indexer/schema")).Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 = "2024-12-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class BookInfoProxyFixture : CoreTest<BookInfoProxy>
|
||||
{
|
||||
private MetadataProfile _metadataProfile;
|
||||
|
||||
@@ -15,7 +15,7 @@ using NzbDrone.Test.Common;
|
||||
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class BookInfoProxySearchFixture : CoreTest<BookInfoProxy>
|
||||
{
|
||||
[SetUp]
|
||||
|
||||
@@ -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", 48517161)]
|
||||
[TestCase("9780439554930", 3)]
|
||||
public void successful_book_search(string title, int expected)
|
||||
{
|
||||
var result = Subject.Search(title);
|
||||
|
||||
@@ -21,14 +21,14 @@ namespace NzbDrone.Core.Test.UpdateTests
|
||||
public void no_update_when_version_higher()
|
||||
{
|
||||
UseRealHttp();
|
||||
Subject.GetLatestUpdate("nightly", new Version(10, 0)).Should().BeNull();
|
||||
Subject.GetLatestUpdate("develop", new Version(10, 0)).Should().BeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void finds_update_when_version_lower()
|
||||
{
|
||||
UseRealHttp();
|
||||
Subject.GetLatestUpdate("nightly", new Version(0, 1)).Should().NotBeNull();
|
||||
Subject.GetLatestUpdate("develop", new Version(0, 1)).Should().NotBeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -42,10 +42,9 @@ namespace NzbDrone.Core.Test.UpdateTests
|
||||
[Test]
|
||||
public void should_get_recent_updates()
|
||||
{
|
||||
const string branch = "nightly";
|
||||
const string branch = "develop";
|
||||
UseRealHttp();
|
||||
var recent = Subject.GetRecentUpdates(branch, new Version(0, 1), null);
|
||||
var recentWithChanges = recent.Where(c => c.Changes != null);
|
||||
|
||||
recent.Should().NotBeEmpty();
|
||||
recent.Should().OnlyContain(c => c.Hash.IsNotNullOrWhiteSpace());
|
||||
|
||||
@@ -66,12 +66,19 @@ namespace NzbDrone.Core.Backup
|
||||
{
|
||||
_logger.ProgressInfo("Starting Backup");
|
||||
|
||||
var backupFolder = GetBackupFolder(backupType);
|
||||
|
||||
_diskProvider.EnsureFolder(_backupTempFolder);
|
||||
_diskProvider.EnsureFolder(GetBackupFolder(backupType));
|
||||
_diskProvider.EnsureFolder(backupFolder);
|
||||
|
||||
if (!_diskProvider.FolderWritable(backupFolder))
|
||||
{
|
||||
throw new UnauthorizedAccessException($"Backup folder {backupFolder} is not writable");
|
||||
}
|
||||
|
||||
var dateNow = DateTime.Now;
|
||||
var backupFilename = $"readarr_backup_v{BuildInfo.Version}_{dateNow:yyyy.MM.dd_HH.mm.ss}.zip";
|
||||
var backupPath = Path.Combine(GetBackupFolder(backupType), backupFilename);
|
||||
var backupPath = Path.Combine(backupFolder, backupFilename);
|
||||
|
||||
Cleanup();
|
||||
|
||||
|
||||
@@ -102,9 +102,9 @@ namespace NzbDrone.Core.Books
|
||||
_logger.Error("ReadarrId {0} was not found, it may have been removed from Goodreads.", newAuthor.Metadata.Value.ForeignAuthorId);
|
||||
|
||||
throw new ValidationException(new List<ValidationFailure>
|
||||
{
|
||||
new ValidationFailure("MusicbrainzId", "An author with this ID was not found", newAuthor.Metadata.Value.ForeignAuthorId)
|
||||
});
|
||||
{
|
||||
new ("ForeignAuthorId", "An author with this ID was not found", newAuthor.Metadata.Value.ForeignAuthorId)
|
||||
});
|
||||
}
|
||||
|
||||
author.ApplyChanges(newAuthor);
|
||||
|
||||
@@ -53,6 +53,7 @@ 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; }
|
||||
@@ -60,7 +61,7 @@ namespace NzbDrone.Core.Configuration
|
||||
string PostgresMainDb { get; }
|
||||
string PostgresLogDb { get; }
|
||||
string PostgresCacheDb { get; }
|
||||
string Theme { get; }
|
||||
bool TrustCgnatIpAddresses { get; }
|
||||
}
|
||||
|
||||
public class ConfigFileProvider : IConfigFileProvider
|
||||
@@ -253,7 +254,21 @@ namespace NzbDrone.Core.Configuration
|
||||
}
|
||||
|
||||
public string UiFolder => BuildInfo.IsDebug ? Path.Combine("..", "UI") : "UI";
|
||||
public string InstanceName => _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName);
|
||||
|
||||
public string InstanceName
|
||||
{
|
||||
get
|
||||
{
|
||||
var instanceName = _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName);
|
||||
|
||||
if (instanceName.Contains(BuildInfo.AppName, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return instanceName;
|
||||
}
|
||||
|
||||
return BuildInfo.AppName;
|
||||
}
|
||||
}
|
||||
|
||||
public bool UpdateAutomatically => _updateOptions.Automatically ?? GetValueBoolean("UpdateAutomatically", OsInfo.IsWindows, false);
|
||||
|
||||
@@ -462,5 +477,7 @@ namespace NzbDrone.Core.Configuration
|
||||
{
|
||||
SetValue("ApiKey", GenerateApiKey());
|
||||
}
|
||||
|
||||
public bool TrustCgnatIpAddresses => _authOptions.TrustCgnatIpAddresses ?? GetValueBoolean("TrustCgnatIpAddresses", false, persist: false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -404,6 +404,12 @@ 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);
|
||||
|
||||
@@ -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 == "pausedUP" && HasReachedSeedLimit(torrent, config);
|
||||
item.CanMoveFiles = item.CanBeRemoved = torrent.State is "pausedUP" or "stoppedUP" && HasReachedSeedLimit(torrent, config);
|
||||
|
||||
switch (torrent.State)
|
||||
{
|
||||
@@ -248,7 +248,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
item.Message = "qBittorrent is reporting an error";
|
||||
break;
|
||||
|
||||
case "pausedDL": // torrent is paused and has NOT finished downloading
|
||||
case "stoppedDL": // torrent is stopped and has NOT finished downloading
|
||||
case "pausedDL": // torrent is paused and has NOT finished downloading (qBittorrent < 5)
|
||||
item.Status = DownloadItemStatus.Paused;
|
||||
break;
|
||||
|
||||
@@ -259,7 +260,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
item.Status = DownloadItemStatus.Queued;
|
||||
break;
|
||||
|
||||
case "pausedUP": // torrent is paused and has finished downloading
|
||||
case "pausedUP": // torrent is paused and has finished downloading (qBittorent < 5)
|
||||
case "stoppedUP": // torrent is stopped 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
|
||||
@@ -618,14 +620,14 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
if (torrent.RatioLimit >= 0)
|
||||
{
|
||||
if (torrent.Ratio >= torrent.RatioLimit)
|
||||
if (torrent.RatioLimit - torrent.Ratio <= 0.001f)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (torrent.RatioLimit == -2 && config.MaxRatioEnabled)
|
||||
{
|
||||
if (Math.Round(torrent.Ratio, 2) >= config.MaxRatio)
|
||||
if (config.MaxRatio - torrent.Ratio <= 0.001f)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -26,8 +26,6 @@ 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
request.AddFormParameter("paused", false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
|
||||
{
|
||||
request.AddFormParameter("paused", true);
|
||||
}
|
||||
@@ -178,7 +178,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
request.AddFormParameter("paused", false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
|
||||
{
|
||||
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 && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.NotFound)
|
||||
if (ex.InnerException is HttpException httpException && 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 && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.Forbidden)
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.Forbidden)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -266,22 +266,6 @@ 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")
|
||||
|
||||
@@ -246,14 +246,20 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
request.AddFormParameter("category", settings.MusicCategory);
|
||||
}
|
||||
|
||||
// Note: ForceStart is handled by separate api call
|
||||
if ((QBittorrentState)settings.InitialState == QBittorrentState.Start)
|
||||
// Avoid extraneous API version check if initial state is ForceStart
|
||||
if ((QBittorrentState)settings.InitialState is QBittorrentState.Start or QBittorrentState.Stop)
|
||||
{
|
||||
request.AddFormParameter("paused", false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
|
||||
{
|
||||
request.AddFormParameter("paused", true);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.SequentialOrder)
|
||||
@@ -291,7 +297,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 && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.NotFound)
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -313,7 +319,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 && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.Conflict)
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.Conflict)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -322,22 +328,6 @@ 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")
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
using NzbDrone.Core.Annotations;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
public enum QBittorrentState
|
||||
{
|
||||
[FieldOption(Label = "Started")]
|
||||
Start = 0,
|
||||
|
||||
[FieldOption(Label = "Force Started")]
|
||||
ForceStart = 1,
|
||||
Pause = 2
|
||||
|
||||
[FieldOption(Label = "Stopped")]
|
||||
Stop = 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,20 +263,7 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
status.OutputRootFolders = new List<OsPath> { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, category.FullPath) };
|
||||
}
|
||||
|
||||
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";
|
||||
}
|
||||
status.RemovesCompletedDownloads = RemovesCompletedDownloads(config);
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -518,6 +505,43 @@ 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;
|
||||
|
||||
@@ -30,6 +30,8 @@ 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
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Net;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Cache;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
@@ -208,7 +209,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||
|
||||
private void AuthenticateClient(HttpRequestBuilder requestBuilder, TransmissionSettings settings, bool reauthenticate = false)
|
||||
{
|
||||
var authKey = string.Format("{0}:{1}", requestBuilder.BaseUrl, settings.Password);
|
||||
var authKey = $"{requestBuilder.BaseUrl}:{settings.Password}";
|
||||
|
||||
var sessionId = _authSessionIDCache.Find(authKey);
|
||||
|
||||
@@ -220,24 +221,26 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||
authLoginRequest.SuppressHttpError = true;
|
||||
|
||||
var response = _httpClient.Execute(authLoginRequest);
|
||||
if (response.StatusCode == HttpStatusCode.MovedPermanently)
|
||||
{
|
||||
var url = response.Headers.GetSingleValue("Location");
|
||||
|
||||
throw new DownloadClientException("Remote site redirected to " + url);
|
||||
}
|
||||
else if (response.StatusCode == HttpStatusCode.Conflict)
|
||||
switch (response.StatusCode)
|
||||
{
|
||||
sessionId = response.Headers.GetSingleValue("X-Transmission-Session-Id");
|
||||
case HttpStatusCode.MovedPermanently:
|
||||
var url = response.Headers.GetSingleValue("Location");
|
||||
|
||||
if (sessionId == null)
|
||||
{
|
||||
throw new DownloadClientException("Remote host did not return a Session Id.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new DownloadClientAuthenticationException("Failed to authenticate with Transmission.");
|
||||
throw new DownloadClientException("Remote site redirected to " + url);
|
||||
case HttpStatusCode.Forbidden:
|
||||
throw new DownloadClientException($"Failed to authenticate with Transmission. It may be necessary to add {BuildInfo.AppName}'s IP address to RPC whitelist.");
|
||||
case HttpStatusCode.Conflict:
|
||||
sessionId = response.Headers.GetSingleValue("X-Transmission-Session-Id");
|
||||
|
||||
if (sessionId == null)
|
||||
{
|
||||
throw new DownloadClientException("Remote host did not return a Session Id.");
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
throw new DownloadClientAuthenticationException("Failed to authenticate with Transmission.");
|
||||
}
|
||||
|
||||
_logger.Debug("Transmission authentication succeeded.");
|
||||
|
||||
@@ -4,24 +4,24 @@ namespace NzbDrone.Core.Exceptions
|
||||
{
|
||||
public class AuthorNotFoundException : NzbDroneException
|
||||
{
|
||||
public string MusicBrainzId { get; set; }
|
||||
public string ForeignAuthorId { get; set; }
|
||||
|
||||
public AuthorNotFoundException(string musicbrainzId)
|
||||
: base(string.Format("Author with id {0} was not found, it may have been removed from the metadata server.", musicbrainzId))
|
||||
public AuthorNotFoundException(string foreignAuthorId)
|
||||
: base($"Author with id {foreignAuthorId} was not found, it may have been removed from the metadata server.")
|
||||
{
|
||||
MusicBrainzId = musicbrainzId;
|
||||
ForeignAuthorId = foreignAuthorId;
|
||||
}
|
||||
|
||||
public AuthorNotFoundException(string musicbrainzId, string message, params object[] args)
|
||||
public AuthorNotFoundException(string foreignAuthorId, string message, params object[] args)
|
||||
: base(message, args)
|
||||
{
|
||||
MusicBrainzId = musicbrainzId;
|
||||
ForeignAuthorId = foreignAuthorId;
|
||||
}
|
||||
|
||||
public AuthorNotFoundException(string musicbrainzId, string message)
|
||||
public AuthorNotFoundException(string foreignAuthorId, string message)
|
||||
: base(message)
|
||||
{
|
||||
MusicBrainzId = musicbrainzId;
|
||||
ForeignAuthorId = foreignAuthorId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,24 +4,24 @@ namespace NzbDrone.Core.Exceptions
|
||||
{
|
||||
public class BookNotFoundException : NzbDroneException
|
||||
{
|
||||
public string MusicBrainzId { get; set; }
|
||||
public string ForeignBookId { get; set; }
|
||||
|
||||
public BookNotFoundException(string musicbrainzId)
|
||||
: base(string.Format("Book with id {0} was not found, it may have been removed from metadata server.", musicbrainzId))
|
||||
public BookNotFoundException(string foreignBookId)
|
||||
: base($"Book with id {foreignBookId} was not found, it may have been removed from metadata server.")
|
||||
{
|
||||
MusicBrainzId = musicbrainzId;
|
||||
ForeignBookId = foreignBookId;
|
||||
}
|
||||
|
||||
public BookNotFoundException(string musicbrainzId, string message, params object[] args)
|
||||
public BookNotFoundException(string foreignBookId, string message, params object[] args)
|
||||
: base(message, args)
|
||||
{
|
||||
MusicBrainzId = musicbrainzId;
|
||||
ForeignBookId = foreignBookId;
|
||||
}
|
||||
|
||||
public BookNotFoundException(string musicbrainzId, string message)
|
||||
public BookNotFoundException(string foreignBookId, string message)
|
||||
: base(message)
|
||||
{
|
||||
MusicBrainzId = musicbrainzId;
|
||||
ForeignBookId = foreignBookId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,24 +4,24 @@ namespace NzbDrone.Core.Exceptions
|
||||
{
|
||||
public class EditionNotFoundException : NzbDroneException
|
||||
{
|
||||
public string MusicBrainzId { get; set; }
|
||||
public string ForeignEditionId { get; set; }
|
||||
|
||||
public EditionNotFoundException(string musicbrainzId)
|
||||
: base(string.Format("Edition with id {0} was not found, it may have been removed from metadata server.", musicbrainzId))
|
||||
public EditionNotFoundException(string foreignEditionId)
|
||||
: base($"Edition with id {foreignEditionId} was not found, it may have been removed from metadata server.")
|
||||
{
|
||||
MusicBrainzId = musicbrainzId;
|
||||
ForeignEditionId = foreignEditionId;
|
||||
}
|
||||
|
||||
public EditionNotFoundException(string musicbrainzId, string message, params object[] args)
|
||||
public EditionNotFoundException(string foreignEditionId, string message, params object[] args)
|
||||
: base(message, args)
|
||||
{
|
||||
MusicBrainzId = musicbrainzId;
|
||||
ForeignEditionId = foreignEditionId;
|
||||
}
|
||||
|
||||
public EditionNotFoundException(string musicbrainzId, string message)
|
||||
public EditionNotFoundException(string foreignEditionId, string message)
|
||||
: base(message)
|
||||
{
|
||||
MusicBrainzId = musicbrainzId;
|
||||
ForeignEditionId = foreignEditionId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using NetTools;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Http.Proxy;
|
||||
using NzbDrone.Core.Configuration;
|
||||
@@ -52,7 +54,15 @@ namespace NzbDrone.Core.Http
|
||||
//We are utilizing the WebProxy implementation here to save us having to re-implement it. This way we use Microsofts implementation
|
||||
var proxy = new WebProxy(proxySettings.Host + ":" + proxySettings.Port, proxySettings.BypassLocalAddress, proxySettings.BypassListAsArray);
|
||||
|
||||
return proxy.IsBypassed((Uri)url);
|
||||
return proxy.IsBypassed((Uri)url) || IsBypassedByIpAddressRange(proxySettings.BypassListAsArray, url.Host);
|
||||
}
|
||||
|
||||
private static bool IsBypassedByIpAddressRange(string[] bypassList, string host)
|
||||
{
|
||||
return bypassList.Any(bypass =>
|
||||
IPAddressRange.TryParse(bypass, out var ipAddressRange) &&
|
||||
IPAddress.TryParse(host, out var ipAddress) &&
|
||||
ipAddressRange.Contains(ipAddress));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.Name;
|
||||
report.AuthorGoodreadsId ??= remoteBook.AuthorMetadata.Value.ForeignAuthorId;
|
||||
}
|
||||
catch (BookNotFoundException)
|
||||
{
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace NzbDrone.Core.Indexers.FileList
|
||||
var url = new HttpUri(_settings.BaseUrl)
|
||||
.CombinePath("download.php")
|
||||
.AddQueryParam("id", torrentId)
|
||||
.AddQueryParam("passkey", _settings.Passkey);
|
||||
.AddQueryParam("passkey", _settings.Passkey.Trim());
|
||||
|
||||
return url.FullUri;
|
||||
}
|
||||
|
||||
@@ -653,5 +653,47 @@
|
||||
"Clone": "Близо",
|
||||
"DockerUpdater": "актуализирайте контейнера на докера, за да получите актуализацията",
|
||||
"InstallLatest": "Инсталирайте най-новите",
|
||||
"OnLatestVersion": "Вече е инсталирана най-новата версия на {appName}"
|
||||
"OnLatestVersion": "Вече е инсталирана най-новата версия на {appName}",
|
||||
"BlocklistAndSearch": "Списък за блокиране и търсене",
|
||||
"BlocklistMultipleOnlyHint": "Списък за блокиране без търсене на заместители",
|
||||
"BlocklistAndSearchHint": "Започнете търсене на заместител след блокиране",
|
||||
"BlocklistAndSearchMultipleHint": "Започнете търсене на заместители след блокиране",
|
||||
"DoNotBlocklistHint": "Премахване без блокиране",
|
||||
"Database": "База данни",
|
||||
"DoNotBlocklist": "Не блокирайте",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Автоматично търсене и опит за изтегляне на различна версия, когато неуспешната версия е била взета от интерактивно търсене",
|
||||
"DownloadClientDelugeSettingsDirectoryHelpText": "Незадължителна локация за изтеглянията, оставете празно, за да използвате мястото по подразбиране на Deluge",
|
||||
"CustomFormatsSettingsTriggerInfo": "Персонализиран формат ще бъде приложен към издание или файл, когато съвпада с поне един от всеки от избраните различни типове условия.",
|
||||
"AutomaticAdd": "Автоматично добавяне",
|
||||
"BlocklistOnly": "Само списък за блокиране",
|
||||
"BlocklistOnlyHint": "Списък за блокиране без търсене на заместител",
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "Директория за вече завършените изтегляния",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Незадължителна локация за преместване на вече завършените изтегляния, оставете празно, за да използвате мястото по подразбиране на Deluge",
|
||||
"Library": "Библиотека",
|
||||
"ApplicationURL": "URL адрес на приложението",
|
||||
"ApplicationUrlHelpText": "Външният URL на това приложение, включително http(s)://, порт и базов URL",
|
||||
"CustomFormatsSpecificationFlag": "Флаг",
|
||||
"BypassIfAboveCustomFormatScore": "Пропусни, ако е над рейтинга на персонализирания формат",
|
||||
"AppUpdated": "{appName} Актуализиран",
|
||||
"AppUpdatedVersion": "{appName} е актуализиранa до версия `{version}`, за да получите най-новите промени, ще трябва да презаредите {appName}",
|
||||
"CatalogNumber": "каталожен номер",
|
||||
"AutoAdd": "Автоматично добавяне",
|
||||
"CustomFormatsSpecificationRegularExpression": "Регулярни изрази",
|
||||
"CustomFormatsSpecificationRegularExpressionHelpText": "Персонализираният формат RegEx не е чувствителен към главни и малки букви",
|
||||
"Label": "Етикет",
|
||||
"AutomaticUpdatesDisabledDocker": "Автоматичните актуализации не се поддържат директно при използване на механизма за актуализация на Docker. Ще трябва да актуализирате Image-a на контейнера извън {appName} или да използвате скрипт",
|
||||
"NoCutoffUnmetItems": "Няма неизпълнени елементи за прекъсване",
|
||||
"Publisher": "Издател",
|
||||
"Series": "Сериали",
|
||||
"Theme": "Тема",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Активиране на пропускане, когато изданието има резултат, по-висок от конфигурирания минимален резултат за потребителски формат",
|
||||
"MinimumCustomFormatScoreHelpText": "Минимална резултат на персонализирания формат, необходима за пропускане на забавянето за предпочитания протокол",
|
||||
"DownloadClientDelugeSettingsDirectory": "Директория за изтегляне",
|
||||
"AuthenticationMethodHelpTextWarning": "Моля, изберете валиден метод за удостоверяване",
|
||||
"AuthenticationMethod": "Метод за удостоверяване",
|
||||
"AuthenticationRequiredHelpText": "Променете за кои заявки се изисква удостоверяване. Не променяйте, освен ако не разбирате рисковете.",
|
||||
"AuthenticationRequired": "Изисква се удостоверяване",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Въведете нова парола",
|
||||
"ApplyChanges": "Прилагане на промените",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Потвърдете новата парола"
|
||||
}
|
||||
|
||||
@@ -784,5 +784,21 @@
|
||||
"DisabledForLocalAddresses": "Desactivat per a adreces locals",
|
||||
"Enabled": "Habilitat",
|
||||
"External": "Extern",
|
||||
"ApiKey": "Clau API"
|
||||
"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",
|
||||
"Install": "Instal·la",
|
||||
"PasswordConfirmation": "Confirmeu la contrasenya",
|
||||
"PreviouslyInstalled": "Instal·lat anteriorment",
|
||||
"AddNewItem": "Afegeix un nou element"
|
||||
}
|
||||
|
||||
@@ -13,26 +13,26 @@
|
||||
"60MinutesSixty": "60 minut: {0}",
|
||||
"About": "O aplikaci",
|
||||
"AddListExclusion": "Přidat vyloučení seznamu",
|
||||
"AddingTag": "Přidání značky",
|
||||
"AddingTag": "Přidávání štítku",
|
||||
"AgeWhenGrabbed": "Stáří (kdy bylo získáno)",
|
||||
"AlreadyInYourLibrary": "Již máte ve své knihovně",
|
||||
"AlternateTitles": "Alternativní název",
|
||||
"Analytics": "Analýzy",
|
||||
"AnalyticsEnabledHelpText": "Odesílejte anonymní informace o použití a chybách na servery {appName}u. To zahrnuje informace o vašem prohlížeči, které stránky {appName} WebUI používáte, hlášení chyb a také verzi operačního systému a běhového prostředí. Tyto informace použijeme k upřednostnění funkcí a oprav chyb.",
|
||||
"AppDataDirectory": "Adresář AppData",
|
||||
"ApplyTags": "Použít značky",
|
||||
"ApplyTags": "Použít štítky",
|
||||
"Authentication": "Ověřování",
|
||||
"AuthenticationMethodHelpText": "Vyžadovat uživatelské jméno a heslo pro přístup k {appName}",
|
||||
"AuthenticationMethodHelpText": "Vyžadovat uživatelské jméno a heslo pro přístup k {appName}u",
|
||||
"AuthorClickToChangeBook": "Kliknutím změníte film",
|
||||
"AutoRedownloadFailedHelpText": "Automatické vyhledání a pokus o stažení jiného vydání",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Filmy odstraněné z disku jsou automaticky sledovány v {appName}u",
|
||||
"Automatic": "Automatický",
|
||||
"BackupFolderHelpText": "Relativní cesty budou v adresáři AppData společnosti {appName}",
|
||||
"BackupNow": "Ihned zálohovat",
|
||||
"BackupNow": "Zálohovat nyní",
|
||||
"BackupRetentionHelpText": "Automatické zálohy starší než doba uchovávání budou automaticky vyčištěny",
|
||||
"Backups": "Zálohy",
|
||||
"BindAddress": "Vázat adresu",
|
||||
"BindAddressHelpText": "Platná IP adresa, localhost nebo '*' pro všechna rozhraní",
|
||||
"BindAddressHelpText": "Platná IP adresa, localhost nebo ‚*‘ pro všechna rozhraní",
|
||||
"BindAddressHelpTextWarning": "Vyžaduje restart, aby se projevilo",
|
||||
"BookIsDownloading": "Film se stahuje",
|
||||
"BookIsDownloadingInterp": "Film se stahuje - {0}% {1}",
|
||||
@@ -41,8 +41,8 @@
|
||||
"Calendar": "Kalendář",
|
||||
"CalendarWeekColumnHeaderHelpText": "Zobrazuje se nad každým sloupcem, když je aktivní zobrazení týden",
|
||||
"Cancel": "Zrušit",
|
||||
"CancelPendingTask": "Opravdu chcete zrušit tento nevyřízený úkol?",
|
||||
"CertificateValidation": "Ověření certifikátu",
|
||||
"CancelPendingTask": "Opravdu chcete zrušit tento úkol čekající na vyřízení?",
|
||||
"CertificateValidation": "Ověřování certifikátu",
|
||||
"CertificateValidationHelpText": "Změňte přísnost ověřování certifikátů HTTPS. Neměňte, pokud nerozumíte rizikům.",
|
||||
"ChangeFileDate": "Změnit datum souboru",
|
||||
"ChangeHasNotBeenSavedYet": "Změna ještě nebyla uložena",
|
||||
@@ -51,7 +51,7 @@
|
||||
"ChmodFolderHelpTextWarning": "Funguje to pouze v případě, že je uživatel souboru {appName} vlastníkem souboru. Je lepší zajistit, aby stahovací klient správně nastavil oprávnění.",
|
||||
"ChownGroupHelpText": "Název skupiny nebo gid. Použijte gid pro vzdálené systémy souborů.",
|
||||
"ChownGroupHelpTextWarning": "Funguje to pouze v případě, že je uživatel souboru {appName} vlastníkem souboru. Je lepší zajistit, aby stahovací klient používal stejnou skupinu jako {appName}.",
|
||||
"Clear": "Vyčistit",
|
||||
"Clear": "Vymazat",
|
||||
"ClickToChangeQuality": "Kliknutím změníte kvalitu",
|
||||
"ClientPriority": "Priorita klienta",
|
||||
"CloneIndexer": "Klonovat indexátor",
|
||||
@@ -68,7 +68,7 @@
|
||||
"CutoffHelpText": "Jakmile je této kvality dosaženo, {appName} již nebude stahovat filmy",
|
||||
"CutoffUnmet": "Mezní hodnota nesplněna",
|
||||
"DatabaseMigration": "Migrace databáze",
|
||||
"Dates": "Termíny",
|
||||
"Dates": "Data",
|
||||
"DelayProfile": "Profil zpoždění",
|
||||
"DelayProfiles": "Profily zpoždění",
|
||||
"DelayingDownloadUntilInterp": "Zpoždění stahování do {0} o {1}",
|
||||
@@ -429,8 +429,8 @@
|
||||
"UsenetDelay": "Usenet Zpoždění",
|
||||
"UsenetDelayHelpText": "Zpoždění v minutách čekání před uvolněním z Usenetu",
|
||||
"Username": "Uživatelské jméno",
|
||||
"BranchUpdate": "Pobočka, která se má použít k aktualizaci {appName}",
|
||||
"BranchUpdateMechanism": "Pobočka používaná mechanismem externí aktualizace",
|
||||
"BranchUpdate": "Větev použitá k aktualizaci {appName}u",
|
||||
"BranchUpdateMechanism": "Větev použitá externím aktualizačním mechanismem",
|
||||
"Version": "Verze",
|
||||
"WeekColumnHeader": "Záhlaví sloupce týdne",
|
||||
"Year": "Rok",
|
||||
@@ -593,12 +593,12 @@
|
||||
"NoChange": "Žádná změna",
|
||||
"RemovingTag": "Odebírání značky",
|
||||
"SetTags": "Nastavit značky",
|
||||
"ApplyTagsHelpTextAdd": "Přidat: Přidá značky k již existujícímu seznamu",
|
||||
"ApplyTagsHelpTextAdd": "Přidat: Přidat štítky do existujícího seznamu štítků",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Jak použít značky na vybrané klienty pro stahování",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Jak použít značky na vybrané seznamy k importu",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Jak použít značky na vybrané indexery",
|
||||
"ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané značky",
|
||||
"ApplyTagsHelpTextReplace": "Nahradit: Nahradit značky zadanými značkami (prázdné pole vymaže všechny značky)",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Jak použít štítky na vybrané indexery",
|
||||
"ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané štítky",
|
||||
"ApplyTagsHelpTextReplace": "Nahradit: Nahradit štítky zadanými štítky (prázdné pole vymaže všechny štítky)",
|
||||
"DeleteSelectedDownloadClients": "Odstranit klienta pro stahování",
|
||||
"DeleteSelectedIndexersMessageText": "Opravdu chcete smazat {count} vybraný(ch) indexer(ů)?",
|
||||
"Yes": "Ano",
|
||||
@@ -618,9 +618,9 @@
|
||||
"FreeSpace": "Volný prostor",
|
||||
"System": "Systém",
|
||||
"TotalSpace": "Celkový prostor",
|
||||
"ConnectionLost": "Spojení ztraceno",
|
||||
"ConnectionLost": "Ztráta spojení",
|
||||
"ConnectionLostReconnect": "{appName} se pokusí připojit automaticky, nebo můžete kliknout na tlačítko znovunačtení níže.",
|
||||
"ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude třebaho znovu načíst.",
|
||||
"ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude potřeba ho znovu načíst.",
|
||||
"Large": "Velký",
|
||||
"LastDuration": "lastDuration",
|
||||
"Ui": "UI",
|
||||
@@ -630,7 +630,7 @@
|
||||
"NextExecution": "Další spuštění",
|
||||
"ClickToChangeReleaseGroup": "Kliknutím změníte skupinu vydání",
|
||||
"ApplicationURL": "URL aplikace",
|
||||
"ApplicationUrlHelpText": "Externí adresa URL této aplikace včetně http(s)://, portu a základní adresy URL",
|
||||
"ApplicationUrlHelpText": "Externí adresa URL této aplikace včetně http(s)://, portu a základu URL",
|
||||
"Continuing": "Pokračující",
|
||||
"AutomaticUpdatesDisabledDocker": "Automatické aktualizace nejsou při použití aktualizačního mechanismu Docker přímo podporovány. Obraz kontejneru je nutné aktualizovat mimo {appName} nebo použít skript",
|
||||
"AppUpdated": "{appName} aktualizován",
|
||||
@@ -688,7 +688,7 @@
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Opětovné stažení z interaktivního vyhledávání selhalo",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Automaticky vyhledat a pokusit se o stažení jiného vydání, pokud bylo neúspěšné vydání zachyceno z interaktivního vyhledávání",
|
||||
"SelectDropdown": "'Vybrat...",
|
||||
"CustomFilter": "Vlastní filtry",
|
||||
"CustomFilter": "Vlastní filtr",
|
||||
"SelectQuality": "Vyberte kvalitu",
|
||||
"IndexerFlags": "Příznaky indexeru",
|
||||
"InteractiveSearchModalHeader": "Interaktivní vyhledávání",
|
||||
@@ -702,13 +702,13 @@
|
||||
"ConnectionSettingsUrlBaseHelpText": "Přidá předponu do {connectionName} url, jako např. {url}",
|
||||
"AuthBasic": "Základní (vyskakovací okno prohlížeče)",
|
||||
"AuthenticationMethod": "Metoda ověřování",
|
||||
"AuthenticationMethodHelpTextWarning": "Prosím vyberte platnou metodu ověřování",
|
||||
"AuthenticationRequired": "Vyžadované ověření",
|
||||
"AuthenticationRequiredHelpText": "Změnit, pro které požadavky je vyžadováno ověření. Pokud nerozumíte rizikům, neměňte je.",
|
||||
"AuthenticationMethodHelpTextWarning": "Vyberte platnou metodu ověřování",
|
||||
"AuthenticationRequired": "Vyžadováno ověření",
|
||||
"AuthenticationRequiredHelpText": "Změnit, pro které požadavky je vyžadováno ověření. Neměňte, pokud nerozumíte rizikům.",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrďte nové heslo",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Vložte nové heslo",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Vložte nové uživatelské jméno",
|
||||
"AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName} povolení ověření. Ověřování z místních adres můžete volitelně zakázat.",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Zadejte nové heslo",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Zadejte nové uživatelské jméno",
|
||||
"AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName}, aby bylo povoleno ověřování. Volitelně můžete zakázat ověřování z místních adres.",
|
||||
"BlocklistOnlyHint": "Blokovat a nehledat náhradu",
|
||||
"Enabled": "Povoleno",
|
||||
"ApiKey": "Klíč API",
|
||||
@@ -724,5 +724,36 @@
|
||||
"InstallLatest": "Nainstalujte nejnovější",
|
||||
"CurrentlyInstalled": "Aktuálně nainstalováno",
|
||||
"UnmappedFiles": "Nezmapované složky",
|
||||
"AptUpdater": "K instalaci aktualizace použijte apt"
|
||||
"AptUpdater": "K instalaci aktualizace používat apt",
|
||||
"Author": "Autor",
|
||||
"Book": "Kniha",
|
||||
"AllowFingerprinting": "Povol Digitální Otisk (Fingerprinting)",
|
||||
"AllowedLanguages": "Povolené Jazyky",
|
||||
"ASIN": "ASIN",
|
||||
"AllAuthorBooks": "Všechny Knihy Autora",
|
||||
"AllBooks": "Všechny Knihy",
|
||||
"AllExpandedCollapseAll": "Sbalit Všechny",
|
||||
"AllExpandedExpandAll": "Rozbal Všechny",
|
||||
"AnyEditionOkHelpText": "Readarr automaticky přepne edici, která nejlépe odpovídá staženým souborům",
|
||||
"AllowFingerprintingHelpText": "Použít digitální otisk (fingerprinting) ke zlepšení přesnosti párování knih",
|
||||
"AllowFingerprintingHelpTextWarning": "To vyžaduje, aby Readarr četl části souboru, což zpomaluje skenování a může způsobit vysokou aktivitu disku nebo sítě.",
|
||||
"AddImportListExclusionHelpText": "Zabránit přidání knihy do Readarr pomocí Importovaných Seznamů nebo Obnovení Autora",
|
||||
"AllowAuthorChangeClickToChangeAuthor": "Klikni pro změnu autora",
|
||||
"BlocklistOnly": "Pouze seznam blokování",
|
||||
"DoNotBlocklistHint": "Odstraň bez přidání do seznamu blokování",
|
||||
"External": "Externí",
|
||||
"Implementation": "Implementace",
|
||||
"DoNotBlocklist": "Nepřidávat do Seznamu blokování",
|
||||
"DownloadClientDelugeSettingsDirectory": "Adresář stahování",
|
||||
"BlocklistAndSearchHint": "Začne hledat náhradu po blokaci",
|
||||
"BlocklistAndSearchMultipleHint": "Začne vyhledávat náhrady po blokaci",
|
||||
"ChangeCategoryHint": "Změní stahování do kategorie „Post-Import“ z aplikace Download Client",
|
||||
"DeleteSelected": "Smazat vybrané",
|
||||
"ClickToChangeIndexerFlags": "Kliknutím změníte značky indexeru",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Zda použít rozvržení obsahu nakonfigurované v qBittorrentu, původní rozvržení z torrentu nebo vždy vytvořit podsložku (qBittorrent 4.3.2+)",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Rozvržení obsahu",
|
||||
"CustomFormatsSpecificationRegularExpression": "Běžný výraz",
|
||||
"ChangeCategoryMultipleHint": "Změní stahování do kategorie „Post-Import“ z aplikace Download Client",
|
||||
"FailedToFetchSettings": "Nepodařilo se načíst nastavení",
|
||||
"NoCutoffUnmetItems": "Žádné neodpovídající nesplněné položky"
|
||||
}
|
||||
|
||||
@@ -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-bibliotek",
|
||||
"AppDataDirectory": "AppData-mappe",
|
||||
"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",
|
||||
"CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er. Ændr kun dette hvis du forstå risiciene.",
|
||||
"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": "Afskåret ude",
|
||||
"CutoffUnmet": "Grænse ikke opnået",
|
||||
"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 '{0}'?",
|
||||
"DeleteBackupMessageText": "Er du sikker på, at du vil slette sikkerhedskopien »{name}«?",
|
||||
"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 slette downloadklienten '{0}'?",
|
||||
"DeleteDownloadClientMessageText": "Er du sikker på, at du vil fjerne downloadklienten »{name}«?",
|
||||
"DeleteEmptyFolders": "Slet tomme mapper",
|
||||
"DeleteEmptyFoldersHelpText": "Slet tomme filmmapper under diskscanning, og når filmfiler slettes",
|
||||
"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 '{0}'?",
|
||||
"DeleteImportListMessageText": "Er du sikker på, at du vil slette listen »{name}«?",
|
||||
"DeleteIndexer": "Slet Indexer",
|
||||
"DeleteIndexerMessageText": "Er du sikker på, at du vil slette indeksøren '{0}'?",
|
||||
"DeleteIndexerMessageText": "Er du sikker på, at du vil slette indeksøren »{name}«?",
|
||||
"DeleteMetadataProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}",
|
||||
"DeleteNotification": "Slet underretning",
|
||||
"DeleteNotificationMessageText": "Er du sikker på, at du vil slette underretningen '{0}'?",
|
||||
"DeleteNotificationMessageText": "Er du sikker på, at du vil slette notifikationen »{name}«?",
|
||||
"DeleteQualityProfile": "Slet kvalitetsprofil",
|
||||
"DeleteQualityProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}",
|
||||
"DeleteReleaseProfile": "Slet forsinkelsesprofil",
|
||||
"DeleteQualityProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen »{name}«?",
|
||||
"DeleteReleaseProfile": "Slet udgivelsesprofil",
|
||||
"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": "Grab Release",
|
||||
"GrabRelease": "Hent udgivelse",
|
||||
"GrabReleaseMessageText": "{appName} var ikke i stand til at bestemme, hvilken film denne udgivelse var til. {appName} kan muligvis ikke automatisk importere denne udgivelse. Vil du hente '{0}'?",
|
||||
"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": "Remote Path Mappings",
|
||||
"RemotePathMappings": "Sammenkædning med fjernsti",
|
||||
"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 en gang startet uden genstart af {appName}.",
|
||||
"ThisCannotBeCancelled": "Dette kan ikke annulleres når først det er startet uden at du deaktiverer alle dine indeksører.",
|
||||
"UnselectAll": "Fravælg alle",
|
||||
"UpdateSelected": "Opdatering valgt",
|
||||
"Wanted": "Ønskede",
|
||||
@@ -549,7 +549,7 @@
|
||||
"MoveFiles": "Flyt filer",
|
||||
"Label": "Etiket",
|
||||
"HardlinkCopyFiles": "Hardlink/Kopir Filer",
|
||||
"CustomFormatScore": "Bruger Tilpasset Format score",
|
||||
"CustomFormatScore": "Brugerdefineret formats resultat",
|
||||
"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 tyktarm",
|
||||
"ColonReplacement": "Udskiftning af kolon",
|
||||
"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 {0} element {1} fra køen?",
|
||||
"RemoveSelectedItemQueueMessageText": "Er du sikker på, at du vil fjerne 1 element 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, eller du kan klikke genindlæs forneden.",
|
||||
"ConnectionLost": "Forbindelse mistet",
|
||||
"ConnectionLostReconnect": "{appName} vil prøve at tilslutte automatisk. Ellers 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 {0} element {1} fra køen?",
|
||||
"RemoveQueueItemConfirmation": "Er du sikker på, at du vil fjerne »{sourceTitle}« fra køen?",
|
||||
"ImportLists": "Lister",
|
||||
"ListsSettingsSummary": "Lister",
|
||||
"CustomFilter": "Bruger Tilpassede Filtere",
|
||||
@@ -668,5 +668,7 @@
|
||||
"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"
|
||||
"OnLatestVersion": "Den seneste version af {appName} er allerede installeret",
|
||||
"WouldYouLikeToRestoreBackup": "Vil du gendanne sikkerhedskopien »{name}«?",
|
||||
"MetadataProfile": "metadataprofil"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"PreviewRename": "Umbenennen",
|
||||
"PreviewRename": "Vorschau Umbenennung",
|
||||
"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 Readarr sind Benutzername und Passwort erforderlich",
|
||||
"AuthenticationMethodHelpText": "Für den Zugriff auf {appName} 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",
|
||||
@@ -55,9 +55,9 @@
|
||||
"CompletedDownloadHandling": "Download-Handhabung abgeschlossen",
|
||||
"ConnectSettings": "Verbindungseinstellungen",
|
||||
"Connections": "Verbindungen",
|
||||
"CopyUsingHardlinksHelpText": "Hardlinks erstellen wenn Torrents die noch geseeded werden kopiert werden sollen",
|
||||
"CopyUsingHardlinksHelpText": "Hardlinks ermöglichen es Readarr, seeding Torrents in den Serienordner zu importieren, ohne zusätzlichen Speicherplatz zu beanspruchen oder den gesamten Inhalt der Datei zu kopieren. Hardlinks funktionieren nur, wenn Quelle und Ziel auf demselben Volume liegen",
|
||||
"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 Filmordner für fehlende Filme beim Scan erstellen",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Leere Autorenordner für fehlende Autoren 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": "Downloader",
|
||||
"DownloadClients": "Download Clients",
|
||||
"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": "Automatisch hinzufügen",
|
||||
"EnableAutomaticAdd": "Automatisches Hinzufügen aktivieren",
|
||||
"EnableAutomaticSearch": "Automatische Suche einschalten",
|
||||
"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",
|
||||
"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",
|
||||
"EnableInteractiveSearch": "Interaktive Suche einschalten",
|
||||
"EnableRSS": "RSS aktivieren",
|
||||
"EnableSSL": "SSL",
|
||||
"EnableSslHelpText": " Erfordert einen Neustart als Administrator",
|
||||
"Ended": "Beendet",
|
||||
"ErrorLoadingContents": "Fehler beim laden der Inhalte",
|
||||
"ErrorLoadingContents": "Fehler beim Laden von Inhalten",
|
||||
"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": "Global",
|
||||
"Global": "Weltweit",
|
||||
"GoToInterp": "Zu {0} gehen",
|
||||
"Grab": "Erfasse",
|
||||
"Grab": "Holen",
|
||||
"GrabID": "Erfass ID",
|
||||
"GrabRelease": "Release erfassen",
|
||||
"GrabRelease": "Release holen",
|
||||
"GrabReleaseMessageText": "Das Release konnte keinem Film zugeordnet werden. Ein automatischer Import wird nicht möglich sein. Trotzdem '{0}' erfassen?",
|
||||
"GrabSelected": "Auswahl erfassen",
|
||||
"GrabSelected": "Auswahl abrufen",
|
||||
"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": "Extra Dateien importieren",
|
||||
"ImportExtraFiles": "Zusätzliche 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": "Nicht beobachtete einbeziehen",
|
||||
"IncludeUnmonitored": "Unüberwachte einbeziehen",
|
||||
"Indexer": "Indexer",
|
||||
"IndexerPriority": "Priorität",
|
||||
"IndexerSettings": "Indexer Einstellungen",
|
||||
"IndexerPriority": "Indexer-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": "Log Level",
|
||||
"LogLevel": "Protokollstufe",
|
||||
"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": "Verfahren",
|
||||
"MediaInfo": "Medien Information",
|
||||
"MediaManagementSettings": "Medienverwaltungs Einstellungen",
|
||||
"Mechanism": "Mechanismus",
|
||||
"MediaInfo": "Medieninfo",
|
||||
"MediaManagementSettings": "Einstellungen zur Medienverwaltung",
|
||||
"Message": "Nachricht",
|
||||
"MetadataSettings": "Metadaten Einstellungen",
|
||||
"MetadataSettings": "Einstellungen für Metadaten",
|
||||
"MinimumAge": "Mindestalter",
|
||||
"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",
|
||||
"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",
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "Importieren verhindern wenn weniger als dieser Wert als freier Speicher zur Verfügung steht",
|
||||
"MinimumLimits": "Mindest Grenzen",
|
||||
"MinimumLimits": "Minimale Grenzen",
|
||||
"Missing": "Fehlend",
|
||||
"Mode": "Modus",
|
||||
"Monitored": "Beobachtet",
|
||||
"Monitored": "Überwacht",
|
||||
"MoreInfo": "Mehr Infos",
|
||||
"MustContain": "Muss beinhalten",
|
||||
"MustNotContain": "Darf nicht beinhalten",
|
||||
"MustContain": "Muss enthalten",
|
||||
"MustNotContain": "Darf nicht enthalten",
|
||||
"Name": "Name",
|
||||
"NamingSettings": "Bennenungs Einstellungen",
|
||||
"NamingSettings": "Benennungseinstellungen",
|
||||
"New": "Neu",
|
||||
"NoBackupsAreAvailable": "Es sind keine Backups vorhanden",
|
||||
"NoBackupsAreAvailable": "Keine Sicherungen verfügbar",
|
||||
"NoHistory": "Kein Verlauf.",
|
||||
"NoLeaveIt": "Nein, nicht ändern",
|
||||
"NoLimitForAnyRuntime": "Keine Begrenzung der Laufzeiten",
|
||||
"NoLogFiles": "Keine Log-Dateien",
|
||||
"NoMinimumForAnyRuntime": "Kein Minimum für Laufzeiten",
|
||||
"NoLeaveIt": "Nein, lass es",
|
||||
"NoLimitForAnyRuntime": "Kein Limit für beliebige Laufzeit",
|
||||
"NoLogFiles": "Keine Logdateien",
|
||||
"NoMinimumForAnyRuntime": "Kein Minimum für beliebige Laufzeit",
|
||||
"NoUpdatesAreAvailable": "Es sind keine Updates verfügbar",
|
||||
"None": "Keine",
|
||||
"NotificationTriggers": "Benachrichtigungs Auslöser",
|
||||
"NotificationTriggers": "Benachrichtigungs-Auslöser",
|
||||
"OnGrabHelpText": "Erfassen",
|
||||
"OnHealthIssueHelpText": "Zustandsproblem",
|
||||
"OnRenameHelpText": "Umbennenen",
|
||||
"OnRenameHelpText": "Umbenennen",
|
||||
"OnUpgradeHelpText": "Upgrade",
|
||||
"OpenBrowserOnStart": "Browser beim Start öffnen",
|
||||
"Options": "Optionen",
|
||||
"Original": "Orginal",
|
||||
"Overview": "Übersicht",
|
||||
"PackageVersion": "Paket Version",
|
||||
"Original": "Original",
|
||||
"Overview": "Überblick",
|
||||
"PackageVersion": "Paketversion",
|
||||
"PageSize": "Einträge pro Seite",
|
||||
"PageSizeHelpText": "Anzahl der Einträge pro Seite",
|
||||
"Password": "Passwort",
|
||||
"Path": "Pfad",
|
||||
"Permissions": "Rechte",
|
||||
"Permissions": "Berechtigungen",
|
||||
"Port": "Port",
|
||||
"PortHelpTextWarning": "Erfordert einen Neustart",
|
||||
"PortNumber": "Port Nummer",
|
||||
"PosterSize": "Plakatgröße",
|
||||
"PortNumber": "Portnummer",
|
||||
"PosterSize": "Postergröße",
|
||||
"Profiles": "Profile",
|
||||
"Proper": "Korrekt",
|
||||
"PropersAndRepacks": "Propers und Repacks",
|
||||
@@ -267,23 +267,23 @@
|
||||
"ReleaseGroup": "Release-Gruppe",
|
||||
"ReleaseRejected": "Release abgelehnt",
|
||||
"ReleaseWillBeProcessedInterp": "Release wird verarbeitet {0}",
|
||||
"Reload": "Neuladen",
|
||||
"Reload": "Neu laden",
|
||||
"RemotePathMappings": "Remote-Pfadzuordnungen",
|
||||
"Remove": "Entfernen",
|
||||
"RemoveCompletedDownloadsHelpText": "Importierte Downloads aus dem Downloader Verlauf entfernen",
|
||||
"RemoveCompletedDownloadsHelpText": "Entferne importierte Downloads aus der Download-Client-Historie",
|
||||
"RemoveFailedDownloadsHelpText": "Fehlgeschlagene Downloads aus dem Downloader Verlauf entfernen",
|
||||
"RemoveFilter": "Filter entfernen",
|
||||
"RemoveFromDownloadClient": "Aus dem Download Client entfernen",
|
||||
"RemoveFromQueue": "Aus der Warteschlage entfernen",
|
||||
"RemoveFromQueue": "Aus der Warteschlange entfernen",
|
||||
"RemoveHelpTextWarning": "Dies wird den Download und alle bereits heruntergeladenen Dateien aus dem Downloader entfernen.",
|
||||
"RemoveSelected": "Auswahl entfernen",
|
||||
"RemoveSelected": "Ausgewählte 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 sortieren",
|
||||
"ReplaceIllegalCharacters": "Sonderzeichen ersetzen",
|
||||
"RequiredHelpText": "Das Release mus mindesten eines der Begriffe beinhalten ( Groß-/Kleinschreibung wird nicht beachtet )",
|
||||
"RenameBooksHelpText": "Wenn das Umbenennen deaktiviert ist, wird der vorhandene Dateiname benutzt",
|
||||
"Reorder": "Neu anordnen",
|
||||
"ReplaceIllegalCharacters": "Illegale Zeichen ersetzen",
|
||||
"RequiredHelpText": "Diese {0}-Bedingung muss übereinstimmen, damit das benutzerdefinierte Format angewendet wird. Andernfalls reicht eine einzelne {0}-Übereinstimmung aus.",
|
||||
"RequiredPlaceHolder": "Neue Beschränkung hinzufügen",
|
||||
"RescanAfterRefreshHelpTextWarning": "Wenn nicht \"Immer (Always)\" ausgewählt wird, werden Dateiänderungen nicht automatisch erkannt",
|
||||
"RescanAuthorFolderAfterRefresh": "Nach dem Aktualisieren den Autorordner neu scannen",
|
||||
@@ -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": "Stammordner",
|
||||
"RootFolders": "Stammordner",
|
||||
"RssSyncIntervalHelpText": "Intervall in Minuten. Zum deaktivieren auf 0 setzen ( Dies wird das automatische Release erfassen deaktivieren )",
|
||||
"RootFolder": "Root-Ordner",
|
||||
"RootFolders": "Root-Ordner",
|
||||
"RssSyncIntervalHelpText": "Intervall in Minuten. Setze auf null, um es zu deaktivieren (dies stoppt alle automatischen Release-Abfragen)",
|
||||
"SSLCertPassword": "SSL Zertifikat Passwort",
|
||||
"SSLCertPath": "Pfad zum SSL Zertifikat",
|
||||
"SSLPort": "SSL Port",
|
||||
"Scheduled": "Geplant",
|
||||
"ScriptPath": "Script Pfad",
|
||||
"Search": "Suche",
|
||||
"SearchAll": "Suche alle",
|
||||
"SearchForMissing": "Suche fehlende",
|
||||
"SearchSelected": "Auswahl suchen",
|
||||
"ScriptPath": "Skript-Pfad",
|
||||
"Search": "Suchen",
|
||||
"SearchAll": "Alle durchsuchen",
|
||||
"SearchForMissing": "Suche nach fehlenden Episoden",
|
||||
"SearchSelected": "Ausgewählte durchsuchen",
|
||||
"Security": "Sicherheit",
|
||||
"SendAnonymousUsageData": "Sende anonyme Nutzungsdaten",
|
||||
"SetPermissions": "Rechte setzen",
|
||||
"SetPermissionsLinuxHelpText": "Soll CHMOD ausgeführt werden wenn Datien importiert/umbenannt werden?",
|
||||
"SetPermissions": "Berechtigungen festlegen",
|
||||
"SetPermissionsLinuxHelpText": "Soll chmod beim Importieren/Umbenennen von Dateien ausgeführt 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ätsdefinition anzeigen",
|
||||
"ShowQualityProfileHelpText": "Qualitätsprofil unter dem Plakat anzeigen",
|
||||
"ShowRelativeDates": "Relatives Datum anzeigen",
|
||||
"ShowRelativeDatesHelpText": "Relatives (z.B.: Heute, gestern, etc) oder absolutes Datum 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",
|
||||
"ShowSearch": "Suche anzeigen",
|
||||
"ShowSearchActionHelpText": "Suchbutton anzeigen beim draufzeigen",
|
||||
"ShowSizeOnDisk": "Belegter Speicherplatz anzeigen",
|
||||
"ShowSizeOnDisk": "Größe auf der Festplatte anzeigen",
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Wird in der Wochenansicht über jeder Spalte angezeigt",
|
||||
"Size": " Größe",
|
||||
"SkipFreeSpaceCheck": "Prüfung des freien Speichers überspringen",
|
||||
@@ -345,8 +345,8 @@
|
||||
"Status": "Status",
|
||||
"StatusEndedEnded": "Beendet",
|
||||
"Style": "Stil",
|
||||
"SuccessMyWorkIsDoneNoFilesToRename": "Fertig! Keine weiteren Dateien zum umbennenen.",
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Fertig! Keine weiteren Dateien zum umbennenen.",
|
||||
"SuccessMyWorkIsDoneNoFilesToRename": "Fertig! Keine weiteren Dateien zum Umbenennen.",
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Fertig! Keine weiteren Dateien zum retaggen.",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "Der Indexer unterstützt kein RSS",
|
||||
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Der Indexer unterstützt keine Suchen",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Wird für automatische Suchen genutzt die vom Benutzer oder von {appName} gestartet werden",
|
||||
@@ -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": "Gruppe entfernen",
|
||||
"Ungroup": "Gruppierung aufheben",
|
||||
"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": "Stufe",
|
||||
"Level": "Level",
|
||||
"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 der Importliste",
|
||||
"ImportListExclusions": "Ausschlüsse aus der Importliste",
|
||||
"ImportLists": "Importlisten",
|
||||
"ImportListSettings": "Allgemeine Importlisten-Einstellungen",
|
||||
"ImportListSpecificSettings": "Listenspezifische Einstellungen importieren",
|
||||
@@ -531,8 +531,7 @@
|
||||
"MetadataProfile": "Metadaten Profil",
|
||||
"MetadataProfileIdHelpText": "Metadaten Profil Listenelemente sollten hinzugefügt werden mit",
|
||||
"MetadataProfiles": "Metadaten Profile",
|
||||
"MonitoringOptions": "Beobachtungsoptionen",
|
||||
"MusicbrainzId": "MusicBrainz Id",
|
||||
"MonitoringOptions": "Überwachungsoptionen",
|
||||
"WatchRootFoldersForFileChanges": "Beobachte Stammverzeichnis auf Dateiänderungen",
|
||||
"OnDownloadFailure": "Bei fehlgeschlagenem Download",
|
||||
"OnDownloadFailureHelpText": "Bei fehlgeschlagenem Download",
|
||||
@@ -556,7 +555,7 @@
|
||||
"FutureDays": "Zukünftige Tage",
|
||||
"FutureDaysHelpText": "Tage die iCal-Feed in die Zukunft schauen soll",
|
||||
"FutureBooks": "Zukünftige Bücher",
|
||||
"GeneralSettingsSummary": "Port, SSL, Benutzername/Passwort, Proxy, Analytik und Updates",
|
||||
"GeneralSettingsSummary": "Port, SSL, Benutzername/Kennwort, Proxy, Analyse 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",
|
||||
@@ -569,7 +568,7 @@
|
||||
"BookList": "Buchliste",
|
||||
"Continuing": "Fortsetzung",
|
||||
"ExistingItems": "Existierende Artikel",
|
||||
"ForeignIdHelpText": "Die Musicbrainz Id des Autors/Buches die ausgeschlossen werden soll",
|
||||
"ForeignIdHelpText": "Die Fremd-ID des Autors/Buchs, der/das ausgeschlossen werden soll",
|
||||
"IndexersSettingsSummary": "Indexer- und Releasebeschränkungen",
|
||||
"ISBN": "ISBN",
|
||||
"IsExpandedHideFileInfo": "Dateiinformationen verstecken",
|
||||
@@ -595,23 +594,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": "Metadaten Quelle",
|
||||
"MetadataSource": "Metadatenquelle",
|
||||
"MetadataSourceHelpText": "Alternative Metadaten Quelle (Leer lassen für Standard)",
|
||||
"MusicBrainzRecordingID": "MusicBrainz Aufnahme Id",
|
||||
"MusicBrainzReleaseID": "MusicBrainz Veröffentlichung Id",
|
||||
"MusicBrainzTrackID": "MusicBrainz Titel Id",
|
||||
"OnGrab": "Bei Erfassung",
|
||||
"OnGrab": "Bei Abruf",
|
||||
"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": "Veröffentlichungsprofile",
|
||||
"ReleaseProfiles": "Release-Profile",
|
||||
"RootFolderPathHelpText": "Die Elemente im Stammverzeichnis werden hinzugefügt zu",
|
||||
"SearchMonitored": "Suche beobachtete",
|
||||
"SearchMonitored": "Suche überwachte Episoden",
|
||||
"ShowName": "Zeige Name",
|
||||
"SkipRedownload": "Überspringe erneuten Download",
|
||||
"SkipRedownload": "Neu-Download überspringen",
|
||||
"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 +621,7 @@
|
||||
"DefaultQualityProfileIdHelpText": "Standard Qualitätsprofil für Autoren, die in diesem Ordner gefunden werden",
|
||||
"DefaultReadarrTags": "Standard Readarr Tags",
|
||||
"DeleteBookFile": "Buchdatei löschen",
|
||||
"OnHealthIssue": "Bei Zustandsproblem",
|
||||
"OnHealthIssue": "Bei Gesundheitsproblem",
|
||||
"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 +643,7 @@
|
||||
"Disabled": "Deaktiviert",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Kein Download Client verfügbar",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Kommunikation mit {0} nicht möglich.",
|
||||
"DownloadClientsSettingsSummary": "Download Clients, Downloadverarbeitung und Remote-Pfadzuordnungen",
|
||||
"DownloadClientsSettingsSummary": "Download Clients, Download-Verwaltung 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 +692,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": "Beobachten",
|
||||
"Monitor": "Überwachen",
|
||||
"MusicBrainzAuthorID": "MusicBranz Künstler Id",
|
||||
"MusicBrainzBookID": "MusicBrainz Titel Id",
|
||||
"WriteAudioTags": "Audiodateien mit Metadaten versehen",
|
||||
@@ -701,7 +700,7 @@
|
||||
"SearchForAllMissingBooks": "Suche nach allen fehlenden Alben",
|
||||
"SearchForMonitoredBooks": "Suche nach beobachteten Alben",
|
||||
"SelectedCountAuthorsSelectedInterp": "{0} Künstler ausgewählt",
|
||||
"SizeLimit": "Grössenlimit",
|
||||
"SizeLimit": "Größenlimit",
|
||||
"TheBooksFilesWillBeDeleted": "Die Dateien des Albums werden gelöscht.",
|
||||
"MediaManagement": "Medienverwaltung",
|
||||
"Metadata": "Metadaten",
|
||||
@@ -742,7 +741,7 @@
|
||||
"SearchFiltered": "Suche gefilterte",
|
||||
"AddList": "Liste hinzufügen",
|
||||
"InstanceName": "Instanzname",
|
||||
"InstanceNameHelpText": "Instanzname im Browser-Tab und für Syslog-Anwendungsname",
|
||||
"InstanceNameHelpText": "Instanzname im Tab und für den Syslog-App-Namen",
|
||||
"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 +755,7 @@
|
||||
"MonitorBook": "Buch überwachen",
|
||||
"MinimumPages": "Mindestseiten",
|
||||
"MassBookSearch": "Massensuche nach Büchern",
|
||||
"MediaManagementSettingsSummary": "Namensgebung, Dateimanagement-Einstellungen und Root-Ordner",
|
||||
"MediaManagementSettingsSummary": "Einstellungen zu Benennung, Dateiverwaltung und Root-Ordnern",
|
||||
"MinimumPopularity": "Mindestpolularität",
|
||||
"MinPagesHelpText": "Bücher mit weniger Seiten als dieses ignorieren",
|
||||
"MinPopularityHelpText": "Popularität ist Durchschnittsbewertung * Anzahl der Stimmen",
|
||||
@@ -854,7 +853,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": "Minimum der eigenen Formate Bewertungspunkte",
|
||||
"MinimumCustomFormatScore": "Mindestwert für benutzerdefinierte Formate",
|
||||
"CustomFormatScore": "Eigenes Format Bewertungspunkte",
|
||||
"CloneCustomFormat": "Benutzerdefiniertes Format klonen",
|
||||
"Conditions": "Bedingungen",
|
||||
@@ -862,8 +861,8 @@
|
||||
"CustomFormat": "Benutzerdefiniertes Format",
|
||||
"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": "Eigenes Format exportieren",
|
||||
"DeleteFormatMessageText": "Bist du sicher, dass du das Format-Tag '{0}' löschen möchtest?",
|
||||
"ExportCustomFormat": "Benutzerdefiniertes 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.",
|
||||
@@ -874,16 +873,16 @@
|
||||
"DataFutureBooks": "Überwachung von Alben die noch nicht veröffentlicht wurden",
|
||||
"DeleteCustomFormat": "Benutzerdefiniertes Format löschen",
|
||||
"DeleteCustomFormatMessageText": "Bist du sicher, dass du das benutzerdefinierte Format '{name}' wirklich löschen willst?",
|
||||
"IncludeCustomFormatWhenRenamingHelpText": "In {Custom Formats} umbennenungs Format",
|
||||
"IncludeCustomFormatWhenRenamingHelpText": "In {Custom Formats} Umbenennungs-Format",
|
||||
"ResetTitles": "Titel zurücksetzen",
|
||||
"UnableToLoadCustomFormats": "Eigene Formate konnten nicht geladen werden",
|
||||
"ImportListMissingRoot": "Fehlendes Stammverzeichnis für Importlist(en): {0}",
|
||||
"ImportListMultipleMissingRoots": "Mehrere Stammverzeichnisse fehlen für Importlist: {0}",
|
||||
"IndexerDownloadClientHelpText": "Wähle aus, welcher Download-Client für diesen Indexer verwendet wird",
|
||||
"IndexerDownloadClientHelpText": "Gib an, welcher Download-Client für Abrufe von diesem 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, klicken zum anzeigen",
|
||||
"HideAdvanced": "Erweiterte Ansicht",
|
||||
"HiddenClickToShow": "Versteckt, zum Anzeigen anklicken",
|
||||
"HideAdvanced": "Erweiterte Einstellungen ausblenden",
|
||||
"ShowAdvanced": "Erweitert anzeigen",
|
||||
"ShownClickToHide": "Angezeigt, zum Ausblenden klicken",
|
||||
"ColonReplacement": "Doppelpunktersatz",
|
||||
@@ -909,20 +908,20 @@
|
||||
"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 Events gefunden",
|
||||
"NoEventsFound": "Keine Ereignisse gefunden",
|
||||
"NoImportListsFound": "Keine Einspiel-Listen gefunden",
|
||||
"NoIndexersFound": "Keine Indexer gefunden",
|
||||
"RemoveCompletedDownloads": "Entferne abgeschlossene Downloads",
|
||||
"RemoveDownloadsAlert": "Die Einstellungen zum Entfernen wurden in die individuellen Download Client Einstellungen in der obigen Tabelle verschoben.",
|
||||
"RemoveDownloadsAlert": "Die Entfernen-Einstellungen wurden in die einzelnen Download-Client-Einstellungen in der Tabelle oben verschoben.",
|
||||
"RemovingTag": "Tag entfernen",
|
||||
"Yes": "Ja",
|
||||
"BlocklistReleaseHelpText": "Dieses Release nicht automatisch erneut erfassen",
|
||||
"RemoveFailedDownloads": "Fehlgeschlagene Downloads entfernen",
|
||||
"BlocklistReleases": "Release sperren",
|
||||
"DeleteConditionMessageText": "Bist du sicher, dass du die Bedingung '{0}' löschen willst?",
|
||||
"DeleteConditionMessageText": "Bist du sicher, dass du die Bedingung '{name}' löschen möchtest?",
|
||||
"Negated": "Negiert",
|
||||
"ResetQualityDefinitions": "Qualitätsdefinitionen zurücksetzen",
|
||||
"RemoveSelectedItem": "Entferne ausgewählten Eintrag",
|
||||
"RemoveSelectedItem": "Ausgewähltes Element entfernen",
|
||||
"RemoveSelectedItems": "Markierte Einträge löschen",
|
||||
"Required": "Erforderlich",
|
||||
"RedownloadFailed": "Download fehlgeschlagen",
|
||||
@@ -936,7 +935,7 @@
|
||||
"ApplyTagsHelpTextRemove": "Entfernen: Entferne die hinterlegten Tags",
|
||||
"ApplyTagsHelpTextReplace": "Ersetzen: Ersetze die Tags mit den eingegebenen Tags (keine Tags eingeben um alle Tags zu löschen)",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Wie Tags zu den selektierten Downloadclients hinzugefügt werden können",
|
||||
"CountIndexersSelected": "{0} Indexer ausgewählt",
|
||||
"CountIndexersSelected": "{selectedCount} Indexer(s) ausgewählt",
|
||||
"DeleteSelectedDownloadClients": "Lösche Download Client(s)",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Download-Clients löschen möchten?",
|
||||
"DeleteSelectedIndexers": "Lösche Indexer",
|
||||
@@ -956,19 +955,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": "Wegen Fehlern sind keine Applikationen verfügbar",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Alle Benachrichtigungen sind aufgrund von Fehlern nicht verfügbar",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {0}",
|
||||
"TotalSpace": "Gesamter Speicherplatz",
|
||||
"Ui": "Benutzeroberfläche",
|
||||
"FreeSpace": "Freier Speicher",
|
||||
"FreeSpace": "Freier Platz",
|
||||
"Large": "Groß",
|
||||
"LastExecution": "Letzte Ausführung",
|
||||
"LastWriteTime": "Zuletzt beschrieben",
|
||||
"LastWriteTime": "Letzte Schreibzeit",
|
||||
"Library": "Bibliothek",
|
||||
"Location": "Speicherort",
|
||||
"Location": "Standort",
|
||||
"Small": "Klein",
|
||||
"ConnectionLost": "Verbindung unterbrochen",
|
||||
"Events": "Events",
|
||||
"Events": "Ereignisse",
|
||||
"LastDuration": "Letzte Dauer",
|
||||
"RecentChanges": "Kürzliche Änderungen",
|
||||
"System": "System",
|
||||
@@ -987,8 +986,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 beobachtet",
|
||||
"Retention": "Aufbewahrung ( Retention )",
|
||||
"Unmonitored": "Nicht überwacht",
|
||||
"Retention": "Aufbewahrung",
|
||||
"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 +996,14 @@
|
||||
"BlocklistOnly": "Nur der Sperrliste hinzufügen",
|
||||
"BlocklistOnlyHint": "Der Sperrliste hinzufügen, ohne nach Alternative zu suchen",
|
||||
"ChangeCategory": "Kategorie wechseln",
|
||||
"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 )",
|
||||
"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)",
|
||||
"DeleteImportListExclusion": "Importlisten Ausschluss löschen",
|
||||
"IndexerFlags": "Indexer-Flags",
|
||||
"CountAuthorsSelected": "{selectedCount} Künstler ausgewählt",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Vorschläge: sub, nfo, srt, jpg",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Beispiele: '.sub, .nfo' oder 'sub,nfo'",
|
||||
"DownloadClient": "Downloader",
|
||||
"ShowMonitoredHelpText": "Beobachtungsstatus unter dem Plakat anzeigen",
|
||||
"ShowMonitoredHelpText": "Überwachungsstatus unter dem Poster anzeigen",
|
||||
"CountDownloadClientsSelected": "{count} Download-Client(s) ausgewählt",
|
||||
"CountImportListsSelected": "{selectedCount} Künstler ausgewählt",
|
||||
"CustomFormatsSpecificationRegularExpression": "Regulären Ausdruck",
|
||||
@@ -1013,8 +1012,8 @@
|
||||
"AutoRedownloadFailed": "Erneuter Download fehlgeschlagen",
|
||||
"SourceTitle": "Quellentitel",
|
||||
"Tags": "Tags",
|
||||
"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",
|
||||
"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",
|
||||
"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 +1023,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 {0} Einträge aus der Warteschlange entfernen willst?",
|
||||
"RemoveQueueItemConfirmation": "Bist du sicher, dass du '{sourceTitle}' aus der Warteschlange entfernen möchtest?",
|
||||
"SelectDropdown": "Auswählen...",
|
||||
"SelectQuality": "Qualität auswählen",
|
||||
"SelectReleaseGroup": "Wähle Release-Gruppe",
|
||||
"ShowMonitored": "Beobachtete anzeigen",
|
||||
"DeleteSelected": "Markierte löschen",
|
||||
"ShowMonitored": "Überwachter Status anzeigen",
|
||||
"DeleteSelected": "Ausgewählte 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 +1044,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 Verzeichnis abgeschlossen",
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "Verschieben, wenn abgeschlossen Verzeichnis",
|
||||
"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 Speicherort für Downloads. Lassen Sie das Feld leer, um den standardmäßigen rTorrent-Speicherort zu verwenden",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Optionaler Ort, an den abgeschlossene Downloads verschoben werden, leer lassen, um den Standard-Deluge-Ort zu verwenden",
|
||||
"ApiKey": "API-Schlüssel",
|
||||
"AuthBasic": "Basis (Browser-Popup)",
|
||||
"AuthForm": "Formulare (Anmeldeseite)",
|
||||
@@ -1059,18 +1058,64 @@
|
||||
"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": "Gib ein neues Passwort ein",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Gib einen neuen Benutzernamen ein",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Neues Passwort eingeben",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Neuen Benutzernamen eingeben",
|
||||
"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": "Jetzt updaten",
|
||||
"OnLatestVersion": "Die aktuellste Version ist bereits installiert",
|
||||
"InstallLatest": "Neueste Version installieren",
|
||||
"OnLatestVersion": "Die neueste Version von {appName} 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} wurde so konfiguriert, dass ein externer Update Mechanismus benutzt wird",
|
||||
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden."
|
||||
"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')",
|
||||
"RemotePathMappingsInfo": "Remote Path Mappings sind nur in seltenen Fällen erforderlich. Wenn {app} und dein Download-Client auf demselben System laufen, ist es besser, die Pfade anzupassen. Weitere Informationen findest du im [Wiki]({wikiLink}).",
|
||||
"WhySearchesCouldBeFailing": "Klicke hier, um herauszufinden, warum die Suchen fehlschlagen könnten",
|
||||
"SkipRedownloadHelpText": "Verhindert, dass Readarr versucht, alternative Releases für die entfernten Elemente herunterzuladen",
|
||||
"OnAuthorAdded": "Beim Hinzufügen des Autors",
|
||||
"OnAuthorAddedHelpText": "Beim Hinzufügen des Autors",
|
||||
"SelectBook": "Buch auswählen",
|
||||
"SelectEdition": "Wähle Edition",
|
||||
"LastSearched": "Letzte Suche"
|
||||
}
|
||||
|
||||
@@ -597,7 +597,6 @@
|
||||
"MonitorNewItemsHelpText": "Ποια νέα βιβλία πρέπει να παρακολουθούνται",
|
||||
"MusicBrainzRecordingID": "Αναγνωριστικό ηχογράφησης MusicBrainz",
|
||||
"MusicBrainzBookID": "Αναγνωριστικό βιβλίου MusicBrainz",
|
||||
"MusicbrainzId": "Musicbrainz Id",
|
||||
"MusicBrainzAuthorID": "MusicBrainz Αναγνωριστικό συγγραφέα",
|
||||
"NoName": "Να μην εμφανίζεται το όνομα",
|
||||
"NoTagsHaveBeenAddedYet": "Δεν έχουν προστεθεί ακόμη ετικέτες. Προσθέστε ετικέτες για να συνδέσετε τους συγγραφείς με προφίλ καθυστέρησης, περιορισμούς ή ειδοποιήσεις. Κάντε κλικ στο {0} για να μάθετε περισσότερα σχετικά με τις ετικέτες στο Readarr.",
|
||||
|
||||
@@ -394,7 +394,7 @@
|
||||
"ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "For more information on the individual indexers, click on the info buttons.",
|
||||
"ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "For more information on the individual lists, click on the info buttons.",
|
||||
"ForeignId": "Foreign ID",
|
||||
"ForeignIdHelpText": "The Musicbrainz Id of the author/book to exclude",
|
||||
"ForeignIdHelpText": "The Foreign Id of the author/book to exclude",
|
||||
"Formats": "Formats",
|
||||
"FreeSpace": "Free Space",
|
||||
"FutureBooks": "Future Books",
|
||||
@@ -518,6 +518,7 @@
|
||||
"Large": "Large",
|
||||
"LastDuration": "Last Duration",
|
||||
"LastExecution": "Last Execution",
|
||||
"LastSearched": "Last Searched",
|
||||
"LastWriteTime": "Last Write Time",
|
||||
"LatestBook": "Latest Book",
|
||||
"LaunchBrowserHelpText": " Open a web browser and navigate to Readarr homepage on app start.",
|
||||
@@ -619,7 +620,6 @@
|
||||
"MusicBrainzRecordingID": "MusicBrainz Recording ID",
|
||||
"MusicBrainzReleaseID": "MusicBrainz Release ID",
|
||||
"MusicBrainzTrackID": "MusicBrainz Track ID",
|
||||
"MusicbrainzId": "Musicbrainz Id",
|
||||
"MustContain": "Must Contain",
|
||||
"MustNotContain": "Must Not Contain",
|
||||
"NETCore": ".NET Core",
|
||||
|
||||
@@ -955,7 +955,6 @@
|
||||
"IgnoredMetaHelpText": "Los libros serán ignorados si contienen uno o más de los siguientes términos (insensible a mayúsculas)",
|
||||
"IsExpandedHideBooks": "Esconder libros",
|
||||
"LogSQL": "Registro SQL",
|
||||
"MusicbrainzId": "ID de MusicBrainz",
|
||||
"OnBookTagUpdate": "En actualización de etiqueta de libro",
|
||||
"PasswordHelpText": "Contraseña del servidor de contenido de Calibre",
|
||||
"OnAuthorAddedHelpText": "En autor añadido",
|
||||
@@ -975,7 +974,7 @@
|
||||
"CalibreLibrary": "Biblioteca de Calibre",
|
||||
"DeleteMetadataProfile": "Eliminar el perfil de metadatos",
|
||||
"PathHelpText": "Carpeta raíz que contiene tu biblitoteca de libros",
|
||||
"ForeignIdHelpText": "La ID de Musicbrainz del autor/libro a excluir",
|
||||
"ForeignIdHelpText": "La ID foránea del autor/libro a excluir",
|
||||
"HostHelpText": "Host del servidor de contenido de Calibre",
|
||||
"MetadataProviderSource": "Fuente del proveedor de metadatos",
|
||||
"MonitorAuthor": "Monitorizar autor",
|
||||
@@ -1117,5 +1116,6 @@
|
||||
"InstallLatest": "Instala el último",
|
||||
"InstallMajorVersionUpdate": "Instalar actualización",
|
||||
"InstallMajorVersionUpdateMessage": "Esta actualización instalará una nueva versión principal y podría no ser compatible con tu sistema. ¿Estás seguro que quieres instalar esta actualización?",
|
||||
"InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información."
|
||||
"InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información.",
|
||||
"LastSearched": "Último buscado"
|
||||
}
|
||||
|
||||
@@ -1 +1,12 @@
|
||||
{}
|
||||
{
|
||||
"20MinutesTwenty": "۲۰ دقیقه: {0}",
|
||||
"ApiKey": "کلید API",
|
||||
"Usenet": "Usenet",
|
||||
"45MinutesFourtyFive": "۴۵ دقیقه: {0}",
|
||||
"60MinutesSixty": "۶۰ دقیقه: {0}",
|
||||
"About": "درباره",
|
||||
"Actions": "اقدامات",
|
||||
"Docker": "Docker",
|
||||
"Torrents": "تورنت ها",
|
||||
"Activity": "فعالیت"
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -328,11 +328,11 @@
|
||||
"ShortDateFormat": "Format de date courte",
|
||||
"ShowCutoffUnmetIconHelpText": "Afficher l'icône des fichiers lorsque la limite n'a pas été atteinte",
|
||||
"ShowDateAdded": "Afficher la date d'ajout",
|
||||
"ShowMonitored": "Afficher le chemin",
|
||||
"ShowMonitoredHelpText": "Afficher l'état de surveillance sous le poster",
|
||||
"ShowMonitored": "Afficher l'état de surveillance",
|
||||
"ShowMonitoredHelpText": "Affiche l'état de surveillance sous le poster",
|
||||
"ShowPath": "Afficher le chemin",
|
||||
"ShowQualityProfile": "Afficher le profil de qualité",
|
||||
"ShowQualityProfileHelpText": "Afficher le profil de qualité sous l'affiche",
|
||||
"ShowQualityProfileHelpText": "Affiche le profil de qualité sous l'affiche",
|
||||
"ShowRelativeDates": "Afficher les dates relatives",
|
||||
"ShowRelativeDatesHelpText": "Afficher les dates relatives (Aujourd'hui/Hier/etc) ou absolues",
|
||||
"ShowSearch": "Afficher la recherche",
|
||||
@@ -456,7 +456,7 @@
|
||||
"ReleaseTitle": "Titre de la version",
|
||||
"ShowBookTitleHelpText": "Affiche le titre du livre sous l'affiche",
|
||||
"ShowReleaseDate": "Afficher la date de sortie",
|
||||
"ShowTitle": "Montrer le titre",
|
||||
"ShowTitle": "Afficher le titre",
|
||||
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "Le dossier '{0}' et son contenu vont être supprimés.",
|
||||
"ReplaceIllegalCharactersHelpText": "Remplacer les caractères illégaux. Si non coché, Readarr les supprimera",
|
||||
"Level": "Niveau",
|
||||
@@ -862,7 +862,6 @@
|
||||
"ManageIndexers": "Gérer les indexeurs",
|
||||
"ManageLists": "Gérer les listes",
|
||||
"ManualDownload": "Téléchargement manuel",
|
||||
"MusicbrainzId": "Identifiant Musicbrainz",
|
||||
"PastDays": "Jours passés",
|
||||
"TrackNumber": "Numéro de piste",
|
||||
"IsExpandedShowFileInfo": "Afficher les informations sur le fichier",
|
||||
@@ -1117,5 +1116,6 @@
|
||||
"PreviouslyInstalled": "Installé précédemment",
|
||||
"Script": "Script",
|
||||
"UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName},",
|
||||
"InstallMajorVersionUpdateMessage": "Cette mise à jour installera une nouvelle version majeure et pourrait ne pas être compatible avec votre système. Êtes-vous sûr de vouloir installer cette mise à jour ?"
|
||||
"InstallMajorVersionUpdateMessage": "Cette mise à jour installera une nouvelle version majeure et pourrait ne pas être compatible avec votre système. Êtes-vous sûr de vouloir installer cette mise à jour ?",
|
||||
"LastSearched": "Dernière recherche"
|
||||
}
|
||||
|
||||
@@ -561,7 +561,6 @@
|
||||
"MusicBrainzRecordingID": "MusicBrainz felvételi azonosító",
|
||||
"MusicBrainzReleaseID": "MusicBrainz kiadási azonosító",
|
||||
"MusicBrainzTrackID": "MusicBrainz zeneszám azonosítója",
|
||||
"MusicbrainzId": "MusicBrainz azonosító",
|
||||
"NETCore": ".NET Mag",
|
||||
"AnalyticsEnabledHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
|
||||
"DeleteRootFolderMessageText": "Biztosan törli a(z) \"{name}\" gyökérmappát?",
|
||||
|
||||
@@ -725,7 +725,7 @@
|
||||
"AppUpdated": "{appName} Aggiornato",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Tutti i risultati sono nascosti dal filtro applicato",
|
||||
"AutoRedownloadFailed": "Download fallito",
|
||||
"AddListExclusion": "Aggiungi Lista esclusioni",
|
||||
"AddListExclusion": "Aggiungi elenco esclusioni",
|
||||
"Location": "Posizione",
|
||||
"ListsSettingsSummary": "Liste",
|
||||
"RecentChanges": "Cambiamenti Recenti",
|
||||
@@ -858,7 +858,6 @@
|
||||
"EditSelectedIndexers": "Modifica Indicizzatori Selezionati",
|
||||
"IsExpandedHideFileInfo": "Nascondi info file",
|
||||
"LogSQL": "Log SQL",
|
||||
"MusicbrainzId": "ID MusicBrainz",
|
||||
"MonitoredAuthorIsUnmonitored": "Autore non monitorato",
|
||||
"Monitoring": "Monitorando",
|
||||
"BookProgressBarText": "{bookCount} / {totalBookCount} (File: {bookFileCount})",
|
||||
@@ -911,5 +910,7 @@
|
||||
"OnLatestVersion": "L'ultima versione di {appName} è già installata",
|
||||
"PreviouslyInstalled": "Precedentemente Installato",
|
||||
"Script": "Script",
|
||||
"UpdateAppDirectlyLoadError": "Impossibile aggiornare {appName} direttamente,"
|
||||
"UpdateAppDirectlyLoadError": "Impossibile aggiornare {appName} direttamente,",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Riesecuzione del download non riuscita dalla ricerca interattiva",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Cerca automaticamente e tenta di scaricare una versione diversa quando il rilascio non riuscito è stato acquisito dalla ricerca interattiva"
|
||||
}
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
"MinimumAge": "최소 연령",
|
||||
"TimeFormat": "시간 형식",
|
||||
"Title": "표제",
|
||||
"TorrentDelay": "급류 지연",
|
||||
"TorrentDelayHelpText": "급류를 잡기 전에 대기하는 데 몇 분이 걸립니다.",
|
||||
"Torrents": "급류",
|
||||
"TorrentDelay": "토렌트 지연",
|
||||
"TorrentDelayHelpText": "토렌트를 잡기 전에 대기까지 소요되는 지연 (분)",
|
||||
"Torrents": "토렌트",
|
||||
"TotalFileSize": "총 파일 크기",
|
||||
"UILanguage": "UI 언어",
|
||||
"UILanguageHelpText": "{appName}가 UI에 사용할 언어",
|
||||
@@ -639,5 +639,118 @@
|
||||
"DockerUpdater": "Docker 컨테이너를 업데이트하여 업데이트를 받으십시오.",
|
||||
"ExternalUpdater": "{appName}는 외부 업데이트 메커니즘을 사용하도록 구성됩니다.",
|
||||
"OnLatestVersion": "최신 버전의 {appName}가 이미 설치되어 있습니다.",
|
||||
"UpdateAppDirectlyLoadError": "{appName}를 직접 업데이트 할 수 없습니다."
|
||||
"UpdateAppDirectlyLoadError": "{appName}를 직접 업데이트 할 수 없습니다.",
|
||||
"ApiKeyValidationHealthCheckMessage": "API 키를 {length}자 이상으로 업데이트하세요. 설정 또는 구성 파일을 통해 이 작업을 수행할 수 있습니다.",
|
||||
"AppUpdated": "{appName} 업데이트",
|
||||
"AppUpdatedVersion": "{appName}이 버전 `{version}`으로 업데이트되었습니다. 최신 변경 사항을 받으려면 {appName}을 다시 로드해야 합니다",
|
||||
"WouldYouLikeToRestoreBackup": "'{name}' 백업을 복원하시겠습니까?",
|
||||
"UseSSL": "SSL 사용",
|
||||
"AutomaticAdd": "자동 추가",
|
||||
"BlocklistAndSearch": "차단 목록 및 검색",
|
||||
"BlocklistAndSearchHint": "차단 목록에 추가한 후 대체 항목 검색 시작",
|
||||
"BlocklistAndSearchMultipleHint": "차단 목록에 추가한 후 대체 항목 검색 시작",
|
||||
"RemoveCompletedDownloads": "완료된 다운로드 제거",
|
||||
"DeleteCondition": "조건 삭제",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "상호작용 검색에서 재다운로드를 실패함",
|
||||
"CustomFormatsSettingsTriggerInfo": "사용자 정의 형식은 선택한 다양한 조건 유형 중 하나 이상과 일치할 경우 출시 또는 파일에 적용됩니다.",
|
||||
"DoNotBlocklistHint": "차단 목록에 추가하지 않고 제거",
|
||||
"ResetDefinitions": "정의 초기화",
|
||||
"Loading": "로딩중",
|
||||
"NoCutoffUnmetItems": "조건 미충족 항목 없음",
|
||||
"AuthenticationRequiredWarning": "인증 없이 원격 액세스를 방지하기 위해 {appName}은(는) 이제 인증을 활성화해야 합니다. 선택적으로 로컬 주소에서 인증을 비활성화할 수 있습니다.",
|
||||
"DeleteRemotePathMappingMessageText": "정말로 이 원격 경로 매핑을 삭제하시겠습니까?",
|
||||
"ApplyChanges": "변경 사항 적용",
|
||||
"Label": "라벨",
|
||||
"SkipRedownload": "재다운로드 건너뛰기",
|
||||
"Duration": "기간",
|
||||
"ReplaceWithSpaceDash": "공백 대시로 바꾸기",
|
||||
"ReplaceWithSpaceDashSpace": "공백 대시 공백으로 바꾸기",
|
||||
"Started": "시작됨",
|
||||
"DeleteSelected": "선택된 것을 삭제",
|
||||
"AuthenticationRequiredHelpText": "필수 인증을 요청하는 변경 사항. 위험을 이해하지 못한다면 변경하지 마세요.",
|
||||
"Required": "필수",
|
||||
"ClickToChangeReleaseGroup": "출시 그룹을 변경하려면 클릭",
|
||||
"ConnectionSettingsUrlBaseHelpText": "{connectionName} url에 {url}와(과) 같은 접두사를 추가합니다",
|
||||
"DeleteImportList": "가져오기 목록 삭제",
|
||||
"ColonReplacement": "콜론 바꾸기",
|
||||
"RemoveQueueItemRemovalMethodHelpTextWarning": "'다운로드 클라이언트에서 제거'를 선택하면 다운로드 및 파일이 다운로드 클라이언트에서 제거됩니다.",
|
||||
"RemoveFailed": "제거 실패",
|
||||
"ResetTitles": "제목 초기화",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "API를 호출한 앱에서 제공하는 사용자 에이전트",
|
||||
"ApplicationURL": "애플리케이션 URL",
|
||||
"ApplicationUrlHelpText": "이 애플리케이션의 외부 URL - http(s)://, port 및 URL 기반 포함",
|
||||
"Author": "저작자",
|
||||
"ClickToChangeIndexerFlags": "인덱서 플래그를 변경하려면 클릭",
|
||||
"NotificationsPlexSettingsAuthToken": "인증 토큰",
|
||||
"SelectIndexerFlags": "인덱서 플래그 선택",
|
||||
"ThereWasAnErrorLoadingThisItem": "이 항목을 로드하는 중에 오류가 발생했습니다",
|
||||
"SmartReplace": "지능형 바꾸기",
|
||||
"AutomaticUpdatesDisabledDocker": "Docker 업데이트 메커니즘을 사용할 때는 자동 업데이트가 직접 지원되지 않습니다. {appName} 외부에서 컨테이너 이미지를 업데이트하거나 스크립트를 사용해야 합니다",
|
||||
"BlocklistOnly": "차단 목록만",
|
||||
"BlocklistOnlyHint": "대체 항목을 검색하지 않고 차단 목록에 추가",
|
||||
"BypassIfHighestQuality": "최고 품질일 경우 무시",
|
||||
"ChangeCategory": "카테고리 변경",
|
||||
"ChangeCategoryMultipleHint": "다운로드 클라이언트에서 다운로드를 '가져오기 이후 카테고리'로 변경",
|
||||
"ChownGroup": "chown 그룹",
|
||||
"CloneCondition": "조건 복제",
|
||||
"IndexerIdHelpText": "프로필이 적용되는 인덱서를 지정하세요",
|
||||
"MinimumCustomFormatScoreHelpText": "선호하는 프로토콜의 지연을 우회하는 데 필요한 최소 사용자 정의 형식 점수",
|
||||
"ReplaceWithDash": "대시로 바꾸기",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "콘텐츠 레이아웃",
|
||||
"CustomFormatsSpecificationFlag": "국기",
|
||||
"Database": "데이터베이스",
|
||||
"DoNotBlocklist": "차단 목록에 추가하지 않음",
|
||||
"DownloadClientDelugeSettingsDirectory": "다운로드 디렉토리",
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "완료 후 이동할 디렉토리",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "완료된 다운로드를 이동할 선택적 위치. 기본 Deluge 위치를 사용하려면 비워두세요",
|
||||
"DownloadClientDelugeSettingsDirectoryHelpText": "다운로드를 이동할 선택적 위치. 기본 Deluge 위치를 사용하려면 비워두세요",
|
||||
"External": "외부",
|
||||
"Install": "설치",
|
||||
"IsShowingMonitoredUnmonitorSelected": "선택 항목 모니터링 해제",
|
||||
"Large": "크게",
|
||||
"RemoveCompleted": "제거 완료",
|
||||
"RemoveDownloadsAlert": "제거 설정은 위 표의 개별 다운로드 클라이언트 설정으로 이동되었습니다.",
|
||||
"RemoveQueueItem": "제거 - {sourceTitle}",
|
||||
"RemoveQueueItemRemovalMethod": "제거 방식",
|
||||
"RemoveQueueItemsRemovalMethodHelpTextWarning": "'다운로드 클라이언트에서 제거'를 선택하면 다운로드 및 파일이 다운로드 클라이언트에서 제거됩니다.",
|
||||
"RemoveSelectedItem": "선택한 항목 제거",
|
||||
"RemoveSelectedItems": "선택한 항목 제거",
|
||||
"ResetQualityDefinitions": "품질 정의 초기화",
|
||||
"Script": "스크립트",
|
||||
"SelectReleaseGroup": "출시 그룹 선택",
|
||||
"SizeLimit": "크기 제한",
|
||||
"Theme": "테마",
|
||||
"WhatsNew": "새로운 소식?",
|
||||
"AuthenticationMethod": "인증 방식",
|
||||
"AuthenticationMethodHelpTextWarning": "인증 방식을 선택해주세요",
|
||||
"AuthenticationRequired": "인증 필수",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "새 비밀번호 확인",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "새 비밀번호를 입력하세요",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "새 사용자이름을 입력하세요",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "대화형 검색에서 실패한 출시가 잡혔을 때 다른 출시를 자동으로 검색하여 다운로드 시도",
|
||||
"BlocklistMultipleOnlyHint": "대체 항목을 검색하지 않고 차단 목록에 추가",
|
||||
"ChangeCategoryHint": "다운로드 클라이언트에서 다운로드를 '가져오기 이후 카테고리'로 변경",
|
||||
"DeleteSelectedImportLists": "가져오기 목록 삭제",
|
||||
"NoResultsFound": "결과를 찾을 수 없습니다",
|
||||
"PasswordConfirmation": "비밀번호 확인",
|
||||
"Rejections": "거부",
|
||||
"ReleaseProfiles": "출시 프로필",
|
||||
"RemoveFailedDownloads": "실패한 다운로드 제거",
|
||||
"RemoveFromDownloadClientHint": "다운로드 클라이언트에서 다운로드 및 파일을 제거합니다",
|
||||
"RemoveMultipleFromDownloadClientHint": "다운로드 클라이언트에서 다운로드 및 파일을 제거합니다",
|
||||
"ResetDefinitionTitlesHelpText": "정의 제목과 값을 초기화하세요",
|
||||
"ResetQualityDefinitionsMessageText": "품질 정의를 초기화하시겠습니까?",
|
||||
"SetIndexerFlags": "인덱서 플래그 설정",
|
||||
"ShownClickToHide": "표시됨, 숨기려면 클릭",
|
||||
"Small": "작게",
|
||||
"CustomFormatsSpecificationRegularExpression": "일반 표현",
|
||||
"CustomFormatsSpecificationRegularExpressionHelpText": "사용자 정의 형식 정규표현식은 대소문자를 구분하지 않습니다",
|
||||
"DeleteRootFolder": "루트 폴더 삭제",
|
||||
"WriteTagsNo": "절대",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "구성된 최소 사용자 정의 형식 점수보다 출시 점수가 높을 경우 무시를 활성화합니다",
|
||||
"DashOrSpaceDashDependingOnName": "이름에 따라 대시 또는 띄어쓰고 대시",
|
||||
"BypassIfAboveCustomFormatScore": "사용자 정의 형식 점수보다 높으면 무시",
|
||||
"ThemeHelpText": "애플리케이션 UI 테마 변경, '자동' 테마는 OS 테마를 사용하여 라이트 또는 다크 모드를 설정합니다. Theme.Park에서 영감을 받음",
|
||||
"ThereWasAnErrorLoadingThisPage": "이 페이지를 로드하는 중ㅇ 오류가 발생했습니다",
|
||||
"WhySearchesCouldBeFailing": "검색이 실패하는 이유를 알아보려면 여기를 클릭하세요"
|
||||
}
|
||||
|
||||
@@ -202,5 +202,9 @@
|
||||
"Reason": "Sesong",
|
||||
"Clone": "Lukk",
|
||||
"AptUpdater": "Bruk apt til å installere oppdateringen",
|
||||
"BuiltIn": "Bygget inn"
|
||||
"BuiltIn": "Bygget inn",
|
||||
"FailedLoadingSearchResults": "Kunne ikke laste søkeresultat, vennligst prøv igjen.",
|
||||
"IgnoredPlaceHolder": "Legg til ny begrensning",
|
||||
"RequiredPlaceHolder": "Legg til ny begrensning",
|
||||
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Kunne ikke legge til ny ekstern stimapping, vennligst prøv igjen."
|
||||
}
|
||||
|
||||
@@ -584,7 +584,6 @@
|
||||
"MusicBrainzBookID": "ID do livro no MusicBrainz",
|
||||
"MusicBrainzRecordingID": "ID da gravação no MusicBrainz",
|
||||
"MusicBrainzTrackID": "ID da faixa no MusicBrainz",
|
||||
"MusicbrainzId": "ID do MusicBrainz",
|
||||
"NETCore": ".NET Core",
|
||||
"LogSQL": "Registar SQL",
|
||||
"LogSqlHelpText": "Registar todas as consultas de SQL do {appName}",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"Monitored": "Monitorado",
|
||||
"URLBase": "URL base",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Não foi possível adicionar um novo cliente de download. Tente novamente.",
|
||||
"UnableToAddANewImportListExclusionPleaseTryAgain": "Não foi possível adicionar uma nova exclusão da lista de importação. Tente novamente.",
|
||||
"UnableToAddANewImportListExclusionPleaseTryAgain": "Não foi possível adicionar uma nova exclusão à lista de importação. Tente novamente.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Não foi possível adicionar um novo indexador. Tente novamente.",
|
||||
"UnableToAddANewListPleaseTryAgain": "Não foi possível adicionar uma nova lista. Tente novamente.",
|
||||
"UnableToAddANewMetadataProfilePleaseTryAgain": "Não foi possível adicionar um novo perfil de metadados, tente novamente.",
|
||||
@@ -25,20 +25,20 @@
|
||||
"AlreadyInYourLibrary": "Já está na sua biblioteca",
|
||||
"AlternateTitles": "Títulos alternativos",
|
||||
"Analytics": "Análises",
|
||||
"AnalyticsEnabledHelpText": "Envie informações anônimas de uso e erro para os servidores do Readarr. Isso inclui informações sobre seu navegador, quais páginas da interface Web do Readarr você usa, relatórios de erros, e a versão do sistema operacional e do tempo de execução. Usaremos essas informações para priorizar recursos e correções de bugs.",
|
||||
"AnalyticsEnabledHelpText": "Envie informações anônimas de uso e erro para os servidores do Readarr. Isso inclui informações sobre seu navegador, quais páginas da interface Web do Readarr você usa, relatórios de erros, a versão do sistema operacional e do tempo de execução. Usaremos essas informações para priorizar recursos e correções de bugs.",
|
||||
"AppDataDirectory": "Diretório AppData",
|
||||
"ApplyTags": "Aplicar Tags",
|
||||
"ApplyTags": "Aplicar etiquetas",
|
||||
"Authentication": "Autenticação",
|
||||
"AuthenticationMethodHelpText": "Exigir Nome de Usuário e Senha para acessar {appName}",
|
||||
"AuthenticationMethodHelpText": "Exigir nome de usuário e senha para acessar o {appName}",
|
||||
"AuthorClickToChangeBook": "Clique para alterar o livro",
|
||||
"AutoRedownloadFailedHelpText": "Procurar e tentar baixar automaticamente uma versão diferente",
|
||||
"AutoRedownloadFailedHelpText": "Procurar e tentar baixar automaticamente um lançamento diferente",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Livros excluídos do disco deixam de ser monitorados no Readarr automaticamente",
|
||||
"Automatic": "Automático",
|
||||
"BackupFolderHelpText": "Os caminhos relativos estarão no diretório AppData do Readarr",
|
||||
"BackupNow": "Fazer backup agora",
|
||||
"BackupRetentionHelpText": "Backups automáticos anteriores ao período de retenção serão limpos automaticamente",
|
||||
"BackupRetentionHelpText": "Backups automáticos anteriores ao período de retenção serão excluídos automaticamente",
|
||||
"Backups": "Backups",
|
||||
"BindAddress": "Fixar endereço",
|
||||
"BindAddress": "Vincular endereço",
|
||||
"BindAddressHelpText": "Endereço IP válido, localhost ou '*' para todas as interfaces",
|
||||
"BindAddressHelpTextWarning": "Requer reiniciar para ter efeito",
|
||||
"BookIsDownloading": "O livro está baixando",
|
||||
@@ -75,14 +75,14 @@
|
||||
"Cancel": "Cancelar",
|
||||
"CancelPendingTask": "Tem certeza que deseja cancelar esta tarefa pendente?",
|
||||
"CertificateValidation": "Validação de certificado",
|
||||
"CertificateValidationHelpText": "Altere a rigidez da validação da certificação HTTPS. Não mude a menos que você entenda os riscos.",
|
||||
"CertificateValidationHelpText": "Alterar a rigidez da validação da certificação HTTPS. Não mude a menos que você entenda os riscos.",
|
||||
"ChangeFileDate": "Alterar data do arquivo",
|
||||
"ChangeHasNotBeenSavedYet": "Mudar o que não foi salvo ainda",
|
||||
"ChmodFolder": "Fazer chmod de pasta",
|
||||
"ChmodFolder": "Fazer chmod na pasta",
|
||||
"ChmodFolderHelpText": "Octal, aplicado durante a importação/renomeação de pastas e arquivos de mídia (sem bits de execução)",
|
||||
"ChmodFolderHelpTextWarning": "Isso só funciona se o usuário que está executando o Readarr for o proprietário do arquivo. É melhor garantir que o cliente de download defina as permissões corretamente.",
|
||||
"ChmodFolderHelpTextWarning": "Isso só funciona se o usuário que executa o Readarr for o proprietário do arquivo. É melhor garantir que o cliente de download defina as permissões corretamente.",
|
||||
"ChownGroupHelpText": "Nome do grupo ou gid. Use gid para sistemas de arquivos remotos.",
|
||||
"ChownGroupHelpTextWarning": "Isso só funciona se o usuário que está executando o Readarr for o proprietário do arquivo. É melhor garantir que o cliente de download use o mesmo grupo que o Readarr.",
|
||||
"ChownGroupHelpTextWarning": "Isso só funciona se o usuário que executa o Readarr for o proprietário do arquivo. É melhor garantir que o cliente de download use o mesmo grupo que o Readarr.",
|
||||
"Clear": "Limpar",
|
||||
"ClickToChangeQuality": "Clique para alterar a qualidade",
|
||||
"ClientPriority": "Prioridade do cliente",
|
||||
@@ -98,14 +98,14 @@
|
||||
"CreateEmptyAuthorFoldersHelpText": "Criar pastas de autor ausente durante a verificação do disco",
|
||||
"CreateGroup": "Criar grupo",
|
||||
"CutoffHelpText": "Assim que esta qualidade for alcançada, o Readarr não baixará mais livros",
|
||||
"CutoffUnmet": "Corte Não Alcançado",
|
||||
"CutoffUnmet": "Limite não atingido",
|
||||
"DatabaseMigration": "Migração de banco de dados",
|
||||
"Dates": "Datas",
|
||||
"DelayProfile": "Perfil de atraso",
|
||||
"DelayProfiles": "Perfis de atraso",
|
||||
"DelayingDownloadUntilInterp": "Atrasando o download até {0} às {1}",
|
||||
"Delete": "Excluir",
|
||||
"DeleteBackup": "Excluir Backup",
|
||||
"DeleteBackup": "Excluir backup",
|
||||
"DeleteBackupMessageText": "Tem certeza de que deseja excluir o backup '{name}'?",
|
||||
"DeleteDelayProfile": "Excluir perfil de atraso",
|
||||
"DeleteDelayProfileMessageText": "Tem certeza de que deseja excluir este perfil de atraso?",
|
||||
@@ -123,12 +123,12 @@
|
||||
"DeleteNotificationMessageText": "Tem certeza de que deseja excluir a notificação '{name}'?",
|
||||
"DeleteQualityProfile": "Excluir perfil de qualidade",
|
||||
"DeleteQualityProfileMessageText": "Tem certeza de que deseja excluir o perfil de qualidade '{name}'?",
|
||||
"DeleteReleaseProfile": "Excluir Perfil de Lançamento",
|
||||
"DeleteReleaseProfileMessageText": "Tem certeza de que deseja excluir este Perfil de Lançamento?",
|
||||
"DeleteRootFolderMessageText": "Tem certeza de que deseja excluir a pasta raiz '{name}'?",
|
||||
"DeleteReleaseProfile": "Excluir perfil de lançamento",
|
||||
"DeleteReleaseProfileMessageText": "Tem certeza de que deseja excluir este perfil de lançamento?",
|
||||
"DeleteRootFolderMessageText": "Tem certeza de que deseja excluir a pasta raiz \"{name}\"?",
|
||||
"DeleteSelectedBookFiles": "Excluir arquivos do livro selecionado",
|
||||
"DeleteSelectedBookFilesMessageText": "Tem certeza de que deseja excluir os arquivos do livro selecionado?",
|
||||
"DeleteTag": "Excluir Etiqueta",
|
||||
"DeleteTag": "Excluir etiqueta",
|
||||
"DeleteTagMessageText": "Tem certeza de que deseja excluir a tag \"{0}\"?",
|
||||
"DestinationPath": "Caminho de destino",
|
||||
"DetailedProgressBarHelpText": "Mostrar texto na barra de progresso",
|
||||
@@ -149,7 +149,7 @@
|
||||
"FailedDownloadHandling": "Falha no gerenciamento de download",
|
||||
"FileDateHelpText": "Alterar a data do arquivo ao importar/verificar novamente",
|
||||
"FileManagement": "Gerenciamento de arquivo",
|
||||
"FileNames": "Nomes de arquivo",
|
||||
"FileNames": "Nomes de arquivos",
|
||||
"Filename": "Nome do arquivo",
|
||||
"Files": "Arquivos",
|
||||
"FirstDayOfWeek": "Primeiro dia da semana",
|
||||
@@ -167,7 +167,7 @@
|
||||
"IconForCutoffUnmet": "Ícone para limite não atendido",
|
||||
"IconTooltip": "Agendado",
|
||||
"IgnoredAddresses": "Endereços ignorados",
|
||||
"IgnoredHelpText": "O lançamento será rejeitado se contiver um ou mais destes termos (sem distinção entre maiúsculas e minúsculas)",
|
||||
"IgnoredHelpText": "O lançamento será rejeitado se contiver um ou mais destes termos (não diferencia maiúsculas e minúsculas)",
|
||||
"IgnoredPlaceHolder": "Adicionar nova restrição",
|
||||
"IllRestartLater": "Reiniciarei mais tarde",
|
||||
"ImportExtraFiles": "Importar arquivos adicionais",
|
||||
@@ -194,7 +194,7 @@
|
||||
"Local": "Local",
|
||||
"LogFiles": "Arquivos de registro",
|
||||
"LogLevel": "Nível de registro",
|
||||
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "O registro em log deve ser habilitado apenas temporariamente",
|
||||
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "O registro em log para rastreamento deve ser habilitado apenas temporariamente",
|
||||
"Logging": "Registro em log",
|
||||
"LongDateFormat": "Formato longo de data",
|
||||
"MIA": "Ausentes",
|
||||
@@ -203,7 +203,7 @@
|
||||
"MarkAsFailedMessageText": "Tem certeza que deseja marcar \"{0}\" como falhado?",
|
||||
"MaximumLimits": "Limites máximos",
|
||||
"MaximumSize": "Tamanho máximo",
|
||||
"MaximumSizeHelpText": "Tamanho máximo para um lançamento ser baixado, em MB. Defina como zero para definir como ilimitado.",
|
||||
"MaximumSizeHelpText": "Tamanho máximo, em MB, para obter um lançamento. Zero significa ilimitado.",
|
||||
"Mechanism": "Mecanismo",
|
||||
"MediaInfo": "Informações da mídia",
|
||||
"MediaManagementSettings": "Configurações de gerenciamento de mídia",
|
||||
@@ -292,7 +292,7 @@
|
||||
"RemoveFromQueue": "Remover da fila",
|
||||
"RemoveHelpTextWarning": "Isso removerá o download e o(s) arquivo(s) do cliente de download.",
|
||||
"RemoveSelected": "Remover Selecionado",
|
||||
"RemoveTagExistingTag": "Tag existente",
|
||||
"RemoveTagExistingTag": "Etiqueta existente",
|
||||
"RemoveTagRemovingTag": "Removendo tag",
|
||||
"RemovedFromTaskQueue": "Removido da Fila de Tarefas",
|
||||
"RenameBooksHelpText": "O Readarr usará o nome de arquivo existente se a renomeação estiver deshabilitada",
|
||||
@@ -333,7 +333,7 @@
|
||||
"SetPermissionsLinuxHelpTextWarning": "Se você não tiver certeza do que essas configurações fazem, não as altere.",
|
||||
"Settings": "Configurações",
|
||||
"ShortDateFormat": "Formato de Data Curta",
|
||||
"ShowCutoffUnmetIconHelpText": "Mostrar ícone para arquivos quando o limite não foi atingindo",
|
||||
"ShowCutoffUnmetIconHelpText": "Mostrar ícone para arquivos cujo limite não foi atingido",
|
||||
"ShowDateAdded": "Mostrar Data de Adição",
|
||||
"ShowMonitored": "Mostrar Monitorados",
|
||||
"ShowMonitoredHelpText": "Mostrar status monitorado sob o pôster",
|
||||
@@ -360,7 +360,7 @@
|
||||
"StartTypingOrSelectAPathBelow": "Comece a digitar ou selecione um caminho abaixo",
|
||||
"StartupDirectory": "Diretório de Inicialização",
|
||||
"Status": "Status",
|
||||
"StatusEndedEnded": "Terminado",
|
||||
"StatusEndedEnded": "Finalizado",
|
||||
"Style": "Estilo",
|
||||
"SuccessMyWorkIsDoneNoFilesToRename": "Êba, já terminei! Não há arquivos a renomear.",
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Êba, já terminei! Não há novas tags a adicionar a arquivos.",
|
||||
@@ -393,7 +393,7 @@
|
||||
"UnableToLoadDownloadClients": "Não foi possível carregar os clientes de download",
|
||||
"UnableToLoadGeneralSettings": "Não foi possível carregar as configurações gerais",
|
||||
"UnableToLoadHistory": "Não foi possível carregar o histórico.",
|
||||
"UnableToLoadImportListExclusions": "Não foi possível carregar Importar exclusões de lista",
|
||||
"UnableToLoadImportListExclusions": "Não foi possível carregar as exclusões da lista de importação",
|
||||
"UnableToLoadIndexerOptions": "Não foi possível carregar as opções do indexador",
|
||||
"UnableToLoadIndexers": "Não foi possível carregar os indexadores",
|
||||
"UnableToLoadLists": "Não foi possível carregar as listas",
|
||||
@@ -427,7 +427,7 @@
|
||||
"UsenetDelay": "Atraso da Usenet",
|
||||
"UsenetDelayHelpText": "Atraso em minutos para esperar antes de pegar um lançamento da Usenet",
|
||||
"Username": "Nome do usuário",
|
||||
"BranchUpdate": "Ramificação para atualizar o Readarr",
|
||||
"BranchUpdate": "Ramificação para atualizar o {appName}",
|
||||
"BranchUpdateMechanism": "Ramificação usada pelo mecanismo de atualização externo",
|
||||
"Version": "Versão",
|
||||
"WeekColumnHeader": "Cabeçalho da Coluna da Semana",
|
||||
@@ -451,7 +451,7 @@
|
||||
"TheBooksFilesWillBeDeleted": "Os arquivos do livro serão excluídos.",
|
||||
"TagsHelpText": "Aplica-se a autores com pelo menos uma tag correspondente. Deixe em branco para aplicar a todos os autores",
|
||||
"StatusEndedDeceased": "Falecido",
|
||||
"StatusEndedContinuing": "Continuação",
|
||||
"StatusEndedContinuing": "Continuando",
|
||||
"SslCertPasswordHelpTextWarning": "Requer reinício para ter efeito",
|
||||
"SpecificBook": "Livro específico",
|
||||
"SkipSecondarySeriesBooks": "Ignorar livros de série secundária",
|
||||
@@ -479,7 +479,7 @@
|
||||
"SearchForAllCutoffUnmetBooks": "Pesquisar todos os livros com Limite não atingido",
|
||||
"SearchBoxPlaceHolder": "Por ex. Guerra e Paz, goodreads:656, isbn:067003469X, asin:B00JCDK5ME",
|
||||
"SearchBook": "Pesquisar livro",
|
||||
"RootFolderPathHelpText": "Os itens da pasta raiz serão adicionados a",
|
||||
"RootFolderPathHelpText": "Os itens da lista da Pasta raiz serão adicionados a",
|
||||
"RescanAfterRefreshHelpText": "Verificar novamente a pasta de autor após atualizar o autor",
|
||||
"ReplaceIllegalCharactersHelpText": "Substituir caracteres ilegais. Se desmarcada, o Readarr irá removê-los",
|
||||
"RenameBooks": "Renomear livros",
|
||||
@@ -504,7 +504,6 @@
|
||||
"OnBookRetagHelpText": "Ao adicionar nova tag ao livro",
|
||||
"NoTagsHaveBeenAddedYet": "Você ainda não adicionou tags. Adicione tags para vincular autores a perfis de atraso, restrições ou notificações. Clique em {0} para saber mais sobre tags no Readarr.",
|
||||
"NETCore": ".NET Core",
|
||||
"MusicbrainzId": "ID do MusicBrainz",
|
||||
"MusicBrainzTrackID": "ID da faixa no MusicBrainz",
|
||||
"MusicBrainzReleaseID": "ID do lançamento no MusicBrainz",
|
||||
"MusicBrainzRecordingID": "ID da gravação no MusicBrainz",
|
||||
@@ -548,7 +547,7 @@
|
||||
"IsCalibreLibraryHelpText": "Usar o Servidor de Conteúdo do Calibre para gerenciar a biblioteca",
|
||||
"IndexerIdHelpText": "Especificar a qual indexador o perfil se aplica",
|
||||
"ImportLists": "Listas de importação",
|
||||
"ImportListSettings": "Configurações gerais de Importar listas",
|
||||
"ImportListSettings": "Configurações gerais de listas de importação",
|
||||
"ImportListExclusions": "Importar exclusões de lista",
|
||||
"ImportFailures": "Falhas na importação",
|
||||
"IgnoreDeletedBooks": "Ignorar livros excluídos",
|
||||
@@ -560,7 +559,7 @@
|
||||
"FutureDaysHelpText": "Próximos dias a exibir no feed do iCal",
|
||||
"FutureDays": "Próximos dias",
|
||||
"FutureBooks": "Próximos livros",
|
||||
"ForeignIdHelpText": "A ID do Musicbrainz para o autor/livro a excluir",
|
||||
"ForeignIdHelpText": "A identificação estrangeira do autor/livro a ser excluída",
|
||||
"FirstBook": "Primeiro livro",
|
||||
"FilterSentryEventsHelpText": "Filtrar eventos de erro de usuário conhecidos para que não sejam enviados para análise",
|
||||
"FilterPlaceHolder": "Filtrar Livro",
|
||||
@@ -571,7 +570,7 @@
|
||||
"EntityName": "Nome da entidade",
|
||||
"EndedAllBooksDownloaded": "Terminado (todos os livros baixados)",
|
||||
"EnabledHelpText": "Marque para habilitar o perfil de lançamento",
|
||||
"EnableProfile": "Habilitar Perfil",
|
||||
"EnableProfile": "Habilitar perfil",
|
||||
"EnableAutomaticAddHelpText": "Adicionar autor/livros ao Readarr ao sincronizar pela interface ou pelo Readarr",
|
||||
"EmbedMetadataInBookFiles": "Incorporar metadados nos arquivos do livro",
|
||||
"EmbedMetadataHelpText": "Pedir ao Calibre para gravar metadados no arquivo do livro",
|
||||
@@ -682,9 +681,9 @@
|
||||
"TooManyBooks": "Livros ausentes ou muitos? Modifique ou crie um novo",
|
||||
"BlocklistRelease": "Lançamento na lista de bloqueio",
|
||||
"NoHistoryBlocklist": "Não há lista de bloqueio no histórico",
|
||||
"Blocklist": "Lista de Bloqueio",
|
||||
"Blocklist": "Lista de bloqueio",
|
||||
"RemoveFromBlocklist": "Remover da lista de bloqueio",
|
||||
"UnableToLoadBlocklist": "Incapaz de carregar a lista de bloqueio",
|
||||
"UnableToLoadBlocklist": "Não foi possível carregar a lista de bloqueio",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Ramo {0} não é um ramo válido de lançamentos do Readarr, você não irá receber atualizações",
|
||||
"Time": "Tempo",
|
||||
"IgnoredMetaHelpText": "Livros irão ser ignorados se eles conterem um ou mais termos (não diferenciando maiúscula de minuscula)",
|
||||
@@ -708,7 +707,7 @@
|
||||
"CalibreContentServerText": "Usando um Servidor de Conteúdo do Calibre (não o Calibre Web) permite ao Readarr adicione livros a sua biblioteca Calibre e ativar conversões entre formatos",
|
||||
"AddedAuthorSettings": "Adicionado Configurações de Autor",
|
||||
"MonitoringOptionsHelpText": "Quais livros devem ser monitorados após o autor ser adicionado (ajuste único)",
|
||||
"MonitorNewItems": "Monitorar Novos Livros",
|
||||
"MonitorNewItems": "Monitorar novos livros",
|
||||
"MonitorNewItemsHelpText": "Quais novos livros devem ser monitorados",
|
||||
"CalibreNotCalibreWeb": "Readarr pode interagir com o servidor de conteúdo do Calibre. Ele não pode usar o Caliber-Web, que é um software não relacionado.",
|
||||
"ImportListSpecificSettings": "Importar configurações específicas da lista",
|
||||
@@ -734,9 +733,9 @@
|
||||
"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",
|
||||
"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",
|
||||
"AppDataLocationHealthCheckMessage": "Não será possível atualizar para evitar a exclusão de AppData na Atualização",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa interativa habilitada, o Readarr não fornecerá resultados de pesquisa interativas",
|
||||
"ConnectSettingsSummary": "Notificações, conexões com servidores/reprodutores de mídia e scripts personalizados",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Todos os clientes de download estão indisponíveis devido a falhas",
|
||||
"DownloadClientsSettingsSummary": "Clientes de download, gerenciamento de download e mapeamentos de caminhos remotos",
|
||||
"Yesterday": "Ontem",
|
||||
@@ -760,18 +759,18 @@
|
||||
"GeneralSettingsSummary": "Porta, SSL, nome de usuário/senha, proxy, análises e atualizações",
|
||||
"HealthNoIssues": "Nenhum problema com sua configuração",
|
||||
"ImportListStatusCheckAllClientMessage": "Todas as listas estão indisponíveis devido a falhas",
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "Todos os indexadores compatíveis com rss estão temporariamente indisponíveis devido a erros recentes do indexador",
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "Todos os indexadores compatíveis com RSS estão temporariamente indisponíveis devido a erros recentes do indexador",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Todos os indexadores com capacidade de pesquisa estão temporariamente indisponíveis devido a erros recentes do indexador",
|
||||
"ItsEasyToAddANewAuthorOrBookJustStartTypingTheNameOfTheItemYouWantToAdd": "É fácil adicionar um novo autor ou livro, basta começar a digitar o nome do item que deseja adicionar",
|
||||
"MetadataSettingsSummary": "Criar arquivos de metadados ao importar livros ou atualizar o autor",
|
||||
"ListsSettingsSummary": "Importar Listas",
|
||||
"ListsSettingsSummary": "Listas de importação",
|
||||
"ImportListStatusCheckSingleClientMessage": "Listas indisponíveis devido a falhas: {0}",
|
||||
"ImportMechanismHealthCheckMessage": "Habilitar Gerenciamento de Download Concluído",
|
||||
"IndexerJackettAll": "Indexadores usando o Jackett 'all' endpoint sem suporte: {0}",
|
||||
"ImportMechanismHealthCheckMessage": "Habilitar gerenciamento de download concluído",
|
||||
"IndexerJackettAll": "Indexadores que usam o ponto de extremidade \"all\" (tudo) incompatível do Jackett: {0}",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a falhas por mais de 6 horas",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "Indexadores indisponíveis devido a falhas por mais de 6 horas: {0}",
|
||||
"IndexerPriorityHelpText": "Prioridade do Indexador de 1 (Mais Alta) a 50 (Mais Baixa). Padrão: 25. Usado ao obter lançamentos como um desempate para lançamentos iguais, Readarr ainda usará todos os indexadores habilitados para sincronização e pesquisa de RSS.",
|
||||
"IndexerRssHealthCheckNoIndexers": "Nenhum indexador disponível com sincronização RSS habilitada, Readarr não pegará novos lançamentos automaticamente",
|
||||
"IndexerPriorityHelpText": "Prioridade do indexador, de 1 (mais alta) a 50 (mais baixa). Padrão: 25. Usado como um desempate ao obter lançamentos, o Readarr ainda usará todos os indexadores habilitados para sincronização RSS e pesquisa.",
|
||||
"IndexerRssHealthCheckNoIndexers": "Nenhum indexador disponível com a sincronização RSS habilitada, o Readarr não obterá novos lançamentos automaticamente",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Nenhum indexador disponível com a pesquisa automática habilitada, o Readarr não fornecerá nenhum resultado de pesquisa automática",
|
||||
"IndexersSettingsSummary": "Indexadores e restrições de lançamento",
|
||||
"IndexerStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a falhas",
|
||||
@@ -863,19 +862,19 @@
|
||||
"ChooseImportMethod": "Escolha o método de importação",
|
||||
"ClickToChangeReleaseGroup": "Clique para alterar o grupo de lançamento",
|
||||
"BypassIfAboveCustomFormatScore": "Ignorar se estiver acima da pontuação do formato personalizado",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Ativar ignorar quando a versão tiver uma pontuação maior que a pontuação mínima configurada do formato personalizado",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Ignorar quando o lançamento tiver uma pontuação mais alta que a pontuação mínima configurada do formato personalizado",
|
||||
"BypassIfHighestQuality": "Ignorar se a qualidade é mais alta",
|
||||
"BypassIfHighestQualityHelpText": "Ignorar o atraso quando o lançamento tiver a qualidade habilitada mais alta no perfil de qualidade",
|
||||
"CustomFormatScore": "Pontuação do formato personalizado",
|
||||
"MinimumCustomFormatScore": "Pontuação mínima de formato personalizado",
|
||||
"MinimumCustomFormatScoreHelpText": "Pontuação mínima de formato personalizado necessária para ignorar o atraso do protocolo preferido",
|
||||
"MinimumCustomFormatScore": "Pontuação mínima do formato personalizado",
|
||||
"MinimumCustomFormatScoreHelpText": "Pontuação mínima do formato personalizado necessária para ignorar o atraso do protocolo preferido",
|
||||
"ApiKeyValidationHealthCheckMessage": "Atualize sua chave de API para ter pelo menos {0} caracteres. Você pode fazer isso através das configurações ou do arquivo de configuração",
|
||||
"DeleteFormat": "Excluir Formato",
|
||||
"DataFutureBooks": "Monitorar livros que ainda não foram lançados",
|
||||
"DeleteFormatMessageText": "Tem certeza de que deseja excluir a tag de formato '{0}'?",
|
||||
"IncludeCustomFormatWhenRenamingHelpText": "\"Incluir no formato de renomeação {Custom Formats}\"",
|
||||
"IndexerTagsHelpText": "Use este indexador apenas para autores com pelo menos uma tag correspondente. Deixe em branco para usar com todos os autores.",
|
||||
"MinFormatScoreHelpText": "Pontuação mínima de formato personalizado permitida para download",
|
||||
"MinFormatScoreHelpText": "Pontuação mínima do formato personalizado permitida para download",
|
||||
"RecycleBinUnableToWriteHealthCheck": "Não é possível gravar na pasta da lixeira configurada: {0}. Certifique-se de que este caminho exista e seja gravável pelo usuário executando o Readarr",
|
||||
"Clone": "Clonar",
|
||||
"CloneCustomFormat": "Clonar formato personalizado",
|
||||
@@ -889,7 +888,7 @@
|
||||
"ExportCustomFormat": "Exportar formato personalizado",
|
||||
"Formats": "Formatos",
|
||||
"Loading": "carregando",
|
||||
"NegateHelpText": "Se marcado, o formato personalizado não será aplicado se esta condição {0} corresponder.",
|
||||
"NegateHelpText": "Se marcado, o formato personalizado não será aplicado se a condição {0} corresponder.",
|
||||
"ThereWasAnErrorLoadingThisItem": "Ocorreu um erro ao carregar este item",
|
||||
"ThereWasAnErrorLoadingThisPage": "Ocorreu um erro ao carregar esta página",
|
||||
"UpgradesAllowed": "Atualizações Permitidas",
|
||||
@@ -915,7 +914,7 @@
|
||||
"ReplaceWithSpaceDashSpace": "Substituir com Espaço, Traço e Espaço",
|
||||
"DeleteRemotePathMapping": "Excluir mapeamento de caminho remoto",
|
||||
"BlocklistReleases": "Lançamentos na lista de bloqueio",
|
||||
"CloneCondition": "Clonar Condição",
|
||||
"CloneCondition": "Clonar condição",
|
||||
"DeleteConditionMessageText": "Tem certeza de que deseja excluir a condição '{name}'?",
|
||||
"DeleteRemotePathMappingMessageText": "Tem certeza de que deseja excluir este mapeamento de caminho remoto?",
|
||||
"DeleteCondition": "Excluir condição",
|
||||
@@ -928,7 +927,7 @@
|
||||
"Required": "Necessário",
|
||||
"ResetQualityDefinitions": "Redefinir definições de qualidade",
|
||||
"ResetQualityDefinitionsMessageText": "Tem certeza de que deseja redefinir as definições de qualidade?",
|
||||
"BlocklistReleaseHelpText": "Impede que o Readarr obtenha automaticamente esses arquivos novamente",
|
||||
"BlocklistReleaseHelpText": "Impede que o Readarr obtenha esses arquivos novamente de forma automática",
|
||||
"NoCutoffUnmetItems": "Nenhum item com limite não atingido",
|
||||
"NoEventsFound": "Não foram encontrados eventos",
|
||||
"NoMissingItems": "Nenhum item ausente",
|
||||
@@ -956,23 +955,23 @@
|
||||
"ManageImportLists": "Gerenciar listas de importação",
|
||||
"RemoveCompleted": "Remoção Concluída",
|
||||
"AutoAdd": "Adicionar automaticamente",
|
||||
"AutomaticAdd": "Adição Automática",
|
||||
"ApplyChanges": "Aplicar Mudanças",
|
||||
"ApplyTagsHelpTextAdd": "Adicionar: Adicione as tags à lista existente de tags",
|
||||
"ApplyTagsHelpTextRemove": "Remover: Remove as tags inseridas",
|
||||
"ApplyTagsHelpTextReplace": "Substituir: Substitua as tags pelas tags inseridas (não digite nenhuma tag para limpar todas as tags)",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Como aplicar tags aos clientes de download selecionados",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Como aplicar tags às listas de importação selecionadas",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Como aplicar tags aos indexadores selecionados",
|
||||
"AutomaticAdd": "Adição automática",
|
||||
"ApplyChanges": "Aplicar mudanças",
|
||||
"ApplyTagsHelpTextAdd": "Adicionar: adicione as etiquetas à lista existente de etiquetas",
|
||||
"ApplyTagsHelpTextRemove": "Remover: remove as etiquetas inseridas",
|
||||
"ApplyTagsHelpTextReplace": "Substituir: substitui as etiquetas atuais pelas inseridas (deixe em branco para limpar todas as etiquetas)",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Como aplicar etiquetas aos clientes de download selecionados",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Como aplicar etiquetas às listas de importação selecionadas",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Como aplicar etiquetas aos indexadores selecionados",
|
||||
"CountDownloadClientsSelected": "{selectedCount} cliente(s) de download selecionado(s)",
|
||||
"DeleteSelectedIndexersMessageText": "Tem certeza de que deseja excluir {count} indexadores selecionados?",
|
||||
"DeleteSelectedIndexersMessageText": "Tem certeza de que deseja excluir o(s) {count} indexador(es) selecionado(s)?",
|
||||
"DeleteSelectedDownloadClients": "Excluir cliente(s) de download",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Tem certeza de que deseja excluir {count} cliente(s) de download selecionado(s)?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Tem certeza de que deseja excluir o(s) {count} cliente(s) de download selecionado(s)?",
|
||||
"DeleteSelectedImportLists": "Excluir lista(s) de importação",
|
||||
"DeleteSelectedImportListsMessageText": "Tem certeza de que deseja excluir {count} lista(s) de importação selecionada(s)?",
|
||||
"DeleteSelectedImportListsMessageText": "Tem certeza de que deseja excluir a(s) {count} lista(s) de importação selecionada(s)?",
|
||||
"DeleteSelectedIndexers": "Excluir indexador(es)",
|
||||
"DownloadClientTagHelpText": "Use este cliente de download apenas para autores com pelo menos uma tag correspondente. Deixe em branco para usar com todos os autores.",
|
||||
"ExistingTag": "Tag existente",
|
||||
"ExistingTag": "Etiqueta existente",
|
||||
"No": "Não",
|
||||
"RemoveCompletedDownloads": "Remover downloads concluídos",
|
||||
"RemovingTag": "Removendo a tag",
|
||||
@@ -981,7 +980,7 @@
|
||||
"Activity": "Atividade",
|
||||
"Bookshelf": "Prateleira",
|
||||
"Events": "Eventos",
|
||||
"FreeSpace": "Espaço Livre",
|
||||
"FreeSpace": "Espaço livre",
|
||||
"NextExecution": "Próxima Execução",
|
||||
"Small": "Pequeno",
|
||||
"TotalSpace": "Espaço Total",
|
||||
@@ -990,7 +989,7 @@
|
||||
"AddNew": "Adicionar Novo",
|
||||
"Backup": "Backup",
|
||||
"Large": "Grande",
|
||||
"LastDuration": "Última Duração",
|
||||
"LastDuration": "Última duração",
|
||||
"LastExecution": "Última Execução",
|
||||
"LastWriteTime": "Hora da Última Gravação",
|
||||
"Library": "Biblioteca",
|
||||
@@ -1002,10 +1001,10 @@
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "Alguns resultados estão ocultos pelo filtro aplicado",
|
||||
"NoResultsFound": "Nenhum resultado encontrado",
|
||||
"ConnectionLostReconnect": "{appName} tentará se conectar automaticamente ou você pode clicar em recarregar abaixo.",
|
||||
"AutomaticUpdatesDisabledDocker": "As atualizações automáticas não têm suporte direto ao usar o mecanismo de atualização do Docker. Você precisará atualizar a imagem do contêiner fora de {appName} ou usar um script",
|
||||
"AutomaticUpdatesDisabledDocker": "As atualizações automáticas não têm suporte direto ao usar o mecanismo de atualização do Docker. Você precisará atualizar a imagem do contêiner fora do {appName} ou usar um script",
|
||||
"WouldYouLikeToRestoreBackup": "Gostaria de restaurar o backup '{name}'?",
|
||||
"AppUpdated": "{appName} atualizado",
|
||||
"AppUpdatedVersion": "{appName} foi atualizado para a versão `{version}`. Para obter as alterações mais recentes, você precisará recarregar {appName}",
|
||||
"AppUpdatedVersion": "O {appName} foi atualizado para a versão `{version}`. Para obter as alterações mais recentes, recarregue o {appName}",
|
||||
"ConnectionLost": "Conexão perdida",
|
||||
"ConnectionLostToBackend": "{appName} perdeu a conexão com o backend e precisará ser recarregado para restaurar a funcionalidade.",
|
||||
"CountAuthorsSelected": "{selectedCount} autor(es) selecionado(s)",
|
||||
@@ -1016,16 +1015,16 @@
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "O cliente de download {0} está configurado para remover downloads concluídos. Isso pode resultar na remoção dos downloads do seu cliente antes que {1} possa importá-los.",
|
||||
"OnAuthorAdded": "Sobre o Autor Adicionado",
|
||||
"OnAuthorAddedHelpText": "Sobre o Autor Adicionado",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Exemplos: '.sub, .nfo' or 'sub,nfo'",
|
||||
"ExtraFileExtensionsHelpText": "Lista separada por vírgulas de arquivos extras para importar (.nfo será importado como .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Exemplos: \".sub, .nfo\" ou \"sub,nfo\"",
|
||||
"ExtraFileExtensionsHelpText": "Lista separada por vírgulas de arquivos adicionais a importar (.nfo será importado como .nfo-orig)",
|
||||
"DeleteSelected": "Excluir Selecionado",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Layout de Conteúdo",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Layout de conteúdo",
|
||||
"InvalidUILanguage": "Sua UI está definida com um idioma inválido, corrija-a e salve suas configurações",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Seja para usar o layout de conteúdo configurado do qBittorrent, o layout original do torrent ou sempre criar uma subpasta (qBittorrent 4.3.2+)",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Se devemos usar o layout de conteúdo configurado do qBittorrent, o layout original do torrent ou sempre criar uma subpasta (qBittorrent 4.3.2+)",
|
||||
"SourceTitle": "Título da Fonte",
|
||||
"AutoRedownloadFailed": "Falha no Novo Download",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Falha no Novo Download da Pesquisa Interativa",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Procure e tente baixar automaticamente uma versão diferente quando a versão com falha for obtida da pesquisa interativa",
|
||||
"AutoRedownloadFailed": "Falha no novo download",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Falha no novo download usando a pesquisa interativa",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Procurar e tentar baixar automaticamente um lançamento diferente quando for obtido um lançamento com falha na pesquisa interativa",
|
||||
"BlocklistAndSearchMultipleHint": "Iniciar pesquisas por substitutos após adicionar à lista de bloqueio",
|
||||
"BlocklistMultipleOnlyHint": "Adicionar à lista de bloqueio sem procurar por substitutos",
|
||||
"BlocklistOnly": "Apenas adicionar à lista de bloqueio",
|
||||
@@ -1060,7 +1059,7 @@
|
||||
"CustomFilter": "Filtro Personalizado",
|
||||
"LabelIsRequired": "Rótulo é requerido",
|
||||
"ConnectionSettingsUrlBaseHelpText": "Adiciona um prefixo ao URL {connectionName}, como {url}",
|
||||
"InteractiveSearchModalHeader": "Pesquisa Interativa",
|
||||
"InteractiveSearchModalHeader": "Pesquisa interativa",
|
||||
"DownloadClientDelugeSettingsDirectory": "Diretório de Download",
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "Mover para o Diretório Quando Concluído",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Local opcional para mover os downloads concluídos, deixe em branco para usar o local padrão do Deluge",
|
||||
@@ -1079,7 +1078,7 @@
|
||||
"Rejections": "Rejeições",
|
||||
"SelectIndexerFlags": "Selecionar Sinalizadores do Indexador",
|
||||
"SetIndexerFlags": "Definir Sinalizadores de Indexador",
|
||||
"IndexerFlags": "Sinalizadores do Indexador",
|
||||
"IndexerFlags": "Sinalizadores do indexador",
|
||||
"CustomFormatsSettingsTriggerInfo": "Um formato personalizado será aplicado a um lançamento ou arquivo quando corresponder a pelo menos um dos diferentes tipos de condição escolhidos.",
|
||||
"IndexerSettingsSeedTime": "Tempo de semeação",
|
||||
"IndexerSettingsSeedRatio": "Proporção de semeação",
|
||||
@@ -1096,11 +1095,11 @@
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirme a nova senha",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Digite uma nova senha",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Digite um novo nome de usuário",
|
||||
"AuthenticationRequiredWarning": "Para evitar o acesso remoto sem autenticação, {appName} agora exige que a autenticação esteja habilitada. Opcionalmente, você pode desabilitar a autenticação de endereços locais.",
|
||||
"AuthenticationRequiredWarning": "Para evitar o acesso remoto sem autenticação, o {appName} agora exige que a autenticação esteja habilitada. Opcionalmente, você pode desabilitar a autenticação para endereços locais.",
|
||||
"DisabledForLocalAddresses": "Desabilitado para endereços locais",
|
||||
"Enabled": "Habilitado",
|
||||
"External": "Externo",
|
||||
"ApiKey": "Chave API",
|
||||
"ApiKey": "Chave da API",
|
||||
"PasswordConfirmation": "Confirmação Da Senha",
|
||||
"AptUpdater": "Usar apt para instalar atualizações",
|
||||
"BuiltIn": "Embutido",
|
||||
@@ -1112,10 +1111,11 @@
|
||||
"Script": "Script",
|
||||
"UpdateAppDirectlyLoadError": "Incapaz de atualizar o {appName} diretamente,",
|
||||
"CurrentlyInstalled": "Atualmente instalado",
|
||||
"DockerUpdater": "Atualize o contêiner docker para receber a atualização",
|
||||
"DockerUpdater": "Atualize o contêiner do Docker para receber a atualização",
|
||||
"ExternalUpdater": "O {appName} está configurado para usar um mecanismo de atualização externo",
|
||||
"FailedToFetchSettings": "Falha ao buscar configurações",
|
||||
"FailedToFetchSettings": "Falha ao obter configurações",
|
||||
"FailedToFetchUpdates": "Falha ao buscar atualizações",
|
||||
"InstallMajorVersionUpdateMessage": "Esta atualização instalará uma nova versão principal e pode não ser compatível com o seu sistema. Tem certeza de que deseja instalar esta atualização?",
|
||||
"InstallMajorVersionUpdateMessageLink": "Verifique [{domain}]({url}) para obter mais informações."
|
||||
"InstallMajorVersionUpdateMessageLink": "Verifique [{domain}]({url}) para obter mais informações.",
|
||||
"LastSearched": "Última Pesquisa"
|
||||
}
|
||||
|
||||
@@ -676,7 +676,7 @@
|
||||
"Medium": "Средний",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Все уведомления недоступны из-за ошибок",
|
||||
"TotalSpace": "Общее сводное место",
|
||||
"Ui": "Пользовательский интерфейс",
|
||||
"Ui": "Интерфейс",
|
||||
"Backup": "Резервное копирование",
|
||||
"Events": "События",
|
||||
"FreeSpace": "Свободное место",
|
||||
|
||||
@@ -196,5 +196,9 @@
|
||||
"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."
|
||||
"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ý"
|
||||
}
|
||||
|
||||
@@ -520,7 +520,6 @@
|
||||
"MonitoringOptions": "Bevakar Alternativ",
|
||||
"MusicBrainzAuthorID": "MusicBrainz Författar ID",
|
||||
"MusicBrainzBookID": "MusicBrainz Bok ID",
|
||||
"MusicbrainzId": "Musicbrainz Id",
|
||||
"MusicBrainzRecordingID": "MusicBrainz Inspelnings ID",
|
||||
"MissingBooksAuthorMonitored": "Saknade Böcker (Författare bevakad)",
|
||||
"PasswordHelpText": "Calibre innehållsserver lösenord",
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
"AddingTag": "Etiket ekleniyor",
|
||||
"AnalyticsEnabledHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
"Columns": "Sütunlar",
|
||||
"DeleteIndexer": "Dizinleyiciyi Sil",
|
||||
"DeleteIndexer": "İndeksleyiciyi Sil",
|
||||
"DeleteRootFolderMessageText": "Dizin oluşturucuyu '{0}' silmek istediğinizden emin misiniz?",
|
||||
"Ended": "Bitti",
|
||||
"Ended": "Biten",
|
||||
"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 (yakalandığında)",
|
||||
"AgeWhenGrabbed": "Yıl (alındığında)",
|
||||
"AlreadyInYourLibrary": "Kütüphanenizde mevcut",
|
||||
"AlternateTitles": "Alternatif Başlıklar",
|
||||
"Analytics": "Analitik",
|
||||
"Analytics": "Analiz",
|
||||
"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}'a erişmek için Kullanıcı Adı ve Şifre gerektir",
|
||||
"AuthenticationMethodHelpText": "{appName}'e erişmek için Kullanıcı Adı ve Parola gereklidir",
|
||||
"AuthorClickToChangeBook": "Filmi değiştirmek için tıklayın",
|
||||
"AutoRedownloadFailedHelpText": "Otomatik olarak farklı bir Yayın arayın ve indirmeye çalışın",
|
||||
"AutoRedownloadFailedHelpText": "Farklı bir sürümü otomatik olarak ara ve indirmeyi dene",
|
||||
"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 olan otomatik yedeklemeler otomatik olarak temizlenecektir",
|
||||
"BackupNow": "Şimdi Yedekle",
|
||||
"BackupRetentionHelpText": "Saklama süresinden daha eski 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 Atla",
|
||||
"BypassProxyForLocalAddresses": "Yerel Adresler için Proxy'yi Kullanma",
|
||||
"Calendar": "Takvim",
|
||||
"CalendarWeekColumnHeaderHelpText": "Aktif görünüm hafta olduğunda her bir sütunun üzerinde gösterilir",
|
||||
"Cancel": "Vazgeç",
|
||||
"CancelPendingTask": "Bu bekleyen görevi iptal etmek istediğinizden emin misiniz?",
|
||||
"CertificateValidation": "Sertifika Doğrulama",
|
||||
"CancelPendingTask": "Bekleyen görevi iptal etmek istediğinizden emin misiniz?",
|
||||
"CertificateValidation": "Sertifika Doğrulaması",
|
||||
"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",
|
||||
@@ -87,7 +87,7 @@
|
||||
"DeleteImportListExclusion": "İçe Aktarma Listesi Hariç Tutmasını Sil",
|
||||
"DeleteImportListExclusionMessageText": "Bu içe aktarma listesi hariç tutma işlemini silmek istediğinizden emin misiniz?",
|
||||
"DeleteImportListMessageText": "'{name}' listesini silmek istediğinizden emin misiniz?",
|
||||
"DeleteIndexerMessageText": "'{name}' dizinleyicisini silmek istediğinizden emin misiniz?",
|
||||
"DeleteIndexerMessageText": "'{name}' indeksleyicisini silmek istediğinizden emin misiniz?",
|
||||
"DeleteMetadataProfileMessageText": "Kalite profilini silmek istediğinizden emin misiniz {0}",
|
||||
"DeleteNotification": "Bildirimi Sil",
|
||||
"DeleteNotificationMessageText": "'{name}' bildirimini silmek istediğinizden emin misiniz?",
|
||||
@@ -103,23 +103,23 @@
|
||||
"DetailedProgressBar": "Ayrıntılı İlerleme Çubuğu",
|
||||
"DetailedProgressBarHelpText": "İlerleme çubuğundaki metni göster",
|
||||
"DiskSpace": "Disk Alanı",
|
||||
"Docker": "Liman işçisi",
|
||||
"DownloadClient": "İstemciyi İndir",
|
||||
"DownloadClientSettings": "İstemci Ayarlarını İndir",
|
||||
"Docker": "Docker",
|
||||
"DownloadClient": "İndirme İstemcisi",
|
||||
"DownloadClientSettings": "İndirme İstemcisi Ayarlarını",
|
||||
"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}",
|
||||
"DownloadPropersAndRepacksHelpTexts1": "Propers / Repacks'e otomatik olarak yükseltme yapılıp yapılmayacağı",
|
||||
"DownloadWarningCheckDownloadClientForMoreDetails": "İndirme uyarısı: Daha fazla ayrıntı için indirme istemcisini kontrol edin",
|
||||
"Edit": "Düzenle",
|
||||
"Edition": "Baskı",
|
||||
"Edition": "Versiyon",
|
||||
"Enable": "etkinleştirme",
|
||||
"EnableAutomaticAdd": "Otomatik Eklemeyi Etkinleştir",
|
||||
"EnableAutomaticSearch": "Otomatik Aramayı Etkinleştir",
|
||||
"EnableColorImpairedMode": "Renk Bozukluğu Modunu Etkinleştir",
|
||||
"EnableColorImpairedModeHelpText": "Renk bozukluğu olan kullanıcıların renk kodlu bilgileri daha iyi ayırt etmesine olanak tanıyan değiştirilmiş stil",
|
||||
"EnableColorImpairedModeHelpText": "Renk engelli kullanıcıların renkleri daha iyi ayırt edebilmelerini sağlamak için 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ştirin",
|
||||
"EnableHelpText": "Bu meta veri türü için meta veri dosyası oluşturmayı etkinleştir",
|
||||
"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 idare",
|
||||
"FileManagement": "Dosya Yönetimi",
|
||||
"FileNames": "Dosya Adları",
|
||||
"Filename": "Dosya adı",
|
||||
"Files": "Dosyalar",
|
||||
"FirstDayOfWeek": "Haftanın ilk günü",
|
||||
"Fixed": "Sabit",
|
||||
"FirstDayOfWeek": "Haftanın İlk Günü",
|
||||
"Fixed": "Düzeltilen",
|
||||
"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 Yakalama",
|
||||
"GrabRelease": "Yayın Alma",
|
||||
"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 Kap",
|
||||
"GrabSelected": "Seçilenleri Al",
|
||||
"HasPendingChangesNoChanges": "Değişiklikler yok",
|
||||
"HasPendingChangesSaveChanges": "Değişiklikleri Kaydet",
|
||||
"History": "Geçmiş",
|
||||
"Host": "Ana bilgisayar",
|
||||
"Host": "Sunucu",
|
||||
"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,14 +166,14 @@
|
||||
"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 aktarılıyor",
|
||||
"Importing": "İçe Aktarma",
|
||||
"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",
|
||||
"Indexer": "Dizinleyici",
|
||||
"IndexerPriority": "Dizinleyici Önceliği",
|
||||
"IndexerSettings": "Dizinleyici Ayarları",
|
||||
"Indexers": "Dizinleyiciler",
|
||||
"Indexer": "İndeksleyici",
|
||||
"IndexerPriority": "İndeksleyici Önceliği",
|
||||
"IndexerSettings": "İndeksleyici Ayarları",
|
||||
"Indexers": "İndeksleyiciler",
|
||||
"Interval": "Periyot",
|
||||
"IsCutoffCutoff": "Ayırmak",
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Bu kalite karşılanana veya aşılana kadar yükseltin",
|
||||
@@ -182,33 +182,33 @@
|
||||
"LaunchBrowserHelpText": " Bir web tarayıcısı açın ve uygulama başlangıcında {appName} ana sayfasına gidin.",
|
||||
"LoadingBookFilesFailed": "Film dosyaları yüklenemedi",
|
||||
"Local": "Yerel",
|
||||
"LogFiles": "Log dosyaları",
|
||||
"LogLevel": "Günlük Düzeyi",
|
||||
"LogFiles": "Log Kayıtları",
|
||||
"LogLevel": "Log Seviyesi",
|
||||
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "İzleme günlük kaydı yalnızca geçici olarak etkinleştirilmelidir",
|
||||
"Logging": "Loglama",
|
||||
"Logs": "Kütükler",
|
||||
"Logs": "Kayıtlar",
|
||||
"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": "En büyük boy",
|
||||
"MaximumSize": "Maksimum Boyut",
|
||||
"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": "İşleyiş",
|
||||
"Mechanism": "Teknik",
|
||||
"MediaInfo": "Medya bilgisi",
|
||||
"MediaManagementSettings": "Medya Yönetimi Ayarları",
|
||||
"Message": "İleti",
|
||||
"Message": "Mesaj",
|
||||
"MetadataSettings": "Meta Veri Ayarları",
|
||||
"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.",
|
||||
"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.",
|
||||
"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,9 +217,9 @@
|
||||
"NoBackupsAreAvailable": "Kullanılabilir yedek yok",
|
||||
"NoLeaveIt": "Hayır, Bırak",
|
||||
"NoLimitForAnyRuntime": "Herhangi bir çalışma zamanı için sınır yok",
|
||||
"NoLogFiles": "Günlük dosyası yok",
|
||||
"NoLogFiles": "Log kayıt dosyası henüz oluşturulmadı",
|
||||
"NoMinimumForAnyRuntime": "Herhangi bir çalışma süresi için minimum değer yok",
|
||||
"NoUpdatesAreAvailable": "Güncelleme yok",
|
||||
"NoUpdatesAreAvailable": "Güncelleme bulunamadı",
|
||||
"NotificationTriggers": "Bildirim Tetikleyicileri",
|
||||
"OnGrabHelpText": "Yakalandığında",
|
||||
"OnHealthIssueHelpText": "Sağlık Sorunu Hakkında",
|
||||
@@ -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": "Liman",
|
||||
"Port": "Port No",
|
||||
"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": "Sırada",
|
||||
"Queue": "Kuyruk",
|
||||
"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 Temizleme",
|
||||
"RecyclingBinCleanup": "Geri Dönüşüm Kutusu Temizle",
|
||||
"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": "Yasadışı Karakterleri Değiştirin",
|
||||
"ReplaceIllegalCharacters": "Geçersiz 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 periyot. Devre dışı bırakmak için sıfıra ayarlayın (tüm otomatik yayın yakalamayı durduracaktı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)",
|
||||
"SSLCertPassword": "SSL Sertifika Parolası",
|
||||
"SSLCertPath": "SSL Sertifika Yolu",
|
||||
"SSLPort": "SSL Bağlantı Noktası",
|
||||
@@ -333,8 +333,8 @@
|
||||
"ShowPath": "Yolu Göster",
|
||||
"ShowQualityProfile": "Kalite Profilini Göster",
|
||||
"ShowQualityProfileHelpText": "Poster altında kalite profilini göster",
|
||||
"ShowRelativeDates": "Göreli Tarihleri Göster",
|
||||
"ShowRelativeDatesHelpText": "Göreli (Bugün / Dün / vb.) Veya mutlak tarihleri göster",
|
||||
"ShowRelativeDates": "İlgili Tarihleri Göster",
|
||||
"ShowRelativeDatesHelpText": "Göreceli (Bugün/Dün/vb.) veya mutlak tarihleri göster",
|
||||
"ShowSearch": "Aramayı Göster",
|
||||
"ShowSearchActionHelpText": "Fareyle üzerine gelindiğinde arama düğmesini göster",
|
||||
"ShowSizeOnDisk": "Diskte Boyutu Göster",
|
||||
@@ -346,7 +346,7 @@
|
||||
"SorryThatBookCannotBeFound": "Maalesef o film bulunamıyor.",
|
||||
"Source": "Kaynak",
|
||||
"SourcePath": "Kaynak Yolu",
|
||||
"SslCertPasswordHelpText": "Pfx dosyasının şifresi",
|
||||
"SslCertPasswordHelpText": "Pfx dosyası için şifre",
|
||||
"SslCertPathHelpText": "Pfx dosyasının yolu",
|
||||
"SslPortHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
"StandardBookFormat": "Standart Film Formatı",
|
||||
@@ -354,7 +354,7 @@
|
||||
"StartupDirectory": "Başlangıç Dizini",
|
||||
"Status": "Durum",
|
||||
"StatusEndedEnded": "Bitti",
|
||||
"Style": "Tarz",
|
||||
"Style": "Stil",
|
||||
"SuccessMyWorkIsDoneNoFilesToRename": "Başarılı! İşim bitti, yeniden adlandırılacak dosya yok.",
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Başarılı! İşim bitti, yeniden adlandırılacak dosya yok.",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS, bu indeksleyici ile desteklenmiyor",
|
||||
@@ -366,7 +366,7 @@
|
||||
"Tasks": "Görevler",
|
||||
"TestAll": "Tümünü Test Et",
|
||||
"TestAllClients": "Tüm İstemcileri Test Et",
|
||||
"TestAllIndexers": "Tüm Dizinleyicileri Test Et",
|
||||
"TestAllIndexers": "İndeksleyicileri 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ı",
|
||||
@@ -382,7 +382,7 @@
|
||||
"URLBase": "URL Tabanı",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Yeni bir indirme istemcisi eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewImportListExclusionPleaseTryAgain": "Yeni bir liste dışlaması eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Yeni bir dizinleyici eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Yeni bir indeksleyici eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewListPleaseTryAgain": "Yeni bir liste eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewMetadataProfilePleaseTryAgain": "Yeni bir kaliteli profil eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Yeni bir bildirim eklenemiyor, lütfen tekrar deneyin.",
|
||||
@@ -397,7 +397,7 @@
|
||||
"UnableToLoadHistory": "Geçmiş yüklenemiyor",
|
||||
"UnableToLoadImportListExclusions": "Hariç Tutulanlar Listesi yüklenemiyor",
|
||||
"UnableToLoadIndexerOptions": "Dizin oluşturucu seçenekleri yüklenemiyor",
|
||||
"UnableToLoadIndexers": "Dizinleyiciler yüklenemiyor",
|
||||
"UnableToLoadIndexers": "İndeksleyiciler yüklenemiyor",
|
||||
"UnableToLoadLists": "Listeler yüklenemiyor",
|
||||
"UnableToLoadMediaManagementSettings": "Medya Yönetimi ayarları yüklenemiyor",
|
||||
"UnableToLoadMetadata": "Meta Veriler yüklenemiyor",
|
||||
@@ -429,20 +429,20 @@
|
||||
"UsenetDelay": "Usenet Gecikmesi",
|
||||
"UsenetDelayHelpText": "Usenet'ten bir yayın almadan önce beklemek için dakika cinsinden gecikme",
|
||||
"Username": "Kullanıcı adı",
|
||||
"BranchUpdate": "{appName}'ı güncellemek için kullanılacak dal",
|
||||
"BranchUpdateMechanism": "Harici güncelleme mekanizması tarafından kullanılan dal",
|
||||
"BranchUpdate": "{appName} uygulamasını güncellemek için kullanılacak şube",
|
||||
"BranchUpdateMechanism": "Harici güncelleme mekanizması tarafından kullanılan şube",
|
||||
"Version": "Sürüm",
|
||||
"WeekColumnHeader": "Hafta Sütun Başlığı",
|
||||
"Year": "Yıl",
|
||||
"YesCancel": "Evet İptal",
|
||||
"DownloadClientCheckDownloadingToRoot": "İndirme istemcisi {0}, indirmeleri kök klasöre yerleştirir {1}. Bir kök klasöre indirmemelisiniz.",
|
||||
"NotAvailable": "Müsait değil",
|
||||
"ReleaseTitle": "Yayin Başlığı",
|
||||
"ReleaseTitle": "Yayın Başlığı",
|
||||
"ShowReleaseDate": "Çıkış Tarihini Göster",
|
||||
"ReplaceIllegalCharactersHelpText": "Geçersiz karakterleri değiştirin. İşaretli değilse, {appName} onları kaldıracaktır.",
|
||||
"BookAvailableButMissing": "Film Mevcut, ancak Eksik",
|
||||
"NotMonitored": "Takip Edilmeyen",
|
||||
"OutputPath": "Çıkış yolu",
|
||||
"OutputPath": "İndirilen Yol",
|
||||
"Progress": "İlerleme",
|
||||
"ShowBookTitleHelpText": "Film başlığını posterin altında göster",
|
||||
"ShowTitle": "Başlığı göster",
|
||||
@@ -462,7 +462,7 @@
|
||||
"Time": "Zaman",
|
||||
"UnableToLoadBlocklist": "Kara liste yüklenemiyor",
|
||||
"Wanted": "Arananlar",
|
||||
"Blocklist": "Kara liste",
|
||||
"Blocklist": "Engellenenler listesi",
|
||||
"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, analitikler ve güncellemeler",
|
||||
"ImportListStatusCheckAllClientMessage": "Hatalar nedeniyle tüm listeler kullanılamıyor",
|
||||
"GeneralSettingsSummary": "Port, SSL, kullanıcı adı/şifre, proxy, analizler ve güncellemeler",
|
||||
"ImportListStatusCheckAllClientMessage": "Hatalar nedeniyle tüm indeksleyiciler 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",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "6 saatten uzun süren arızalar nedeniyle tüm indeksleyiciler kullanılamıyor",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "6 saatten uzun süredir yaşanan arızalar nedeniyle dizinleyiciler kullanılamıyor: {0}",
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "Son indeksleyici hataları nedeniyle tüm rss özellikli indeksleyiciler geçici olarak kullanılamıyor",
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "Son zamanlardaki indeksleyici hataları nedeniyle tüm rss uyumlu 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 indeksleyici hataları nedeniyle arama özellikli indeksleyicilerin tümü geçici olarak kullanılamıyor",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Son zamanlardaki indeksleyici hataları nedeniyle tüm arama yeteneğine sahip indeksleyiciler 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",
|
||||
"IndexersSettingsSummary": "İndeksleyiciler ve yayımlama kısıtlamaları",
|
||||
"IndexerStatusCheckAllClientMessage": "Hatalar nedeniyle tüm indeksleyiciler kullanılamıyor",
|
||||
"IndexerStatusCheckSingleClientMessage": "Hatalar nedeniyle dizinleyiciler kullanılamıyor: {0}",
|
||||
"MediaManagement": "Medya işletme",
|
||||
"MediaManagement": "Medya Yönetimi",
|
||||
"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": "Yakalandığında",
|
||||
"OnGrab": "Alındığı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": "Sına",
|
||||
"Test": "Test Et",
|
||||
"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 Biçim Puanı",
|
||||
"CustomFormatScore": "Özel Format 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 Verildi",
|
||||
"UpgradesAllowed": "Yükseltmelere İzin Ver",
|
||||
"CustomFormat": "Özel Format",
|
||||
"CustomFormatSettings": "Özel Biçim Ayarları",
|
||||
"DeleteCustomFormatMessageText": "'{name}' özel biçimini silmek istediğinizden emin misiniz?",
|
||||
"DeleteCustomFormatMessageText": "'{name}' özel formatı silmek istediğinizden emin misiniz?",
|
||||
"DeleteFormatMessageText": "{0} biçim etiketini silmek istediğinizden emin misiniz?",
|
||||
"ExportCustomFormat": "Özel Formatı Dışa Aktar",
|
||||
"Formats": "Formatlar",
|
||||
@@ -595,7 +595,7 @@
|
||||
"ApplyTagsHelpTextRemove": "Kaldır: Girilen etiketleri kaldırın",
|
||||
"ApplyTagsHelpTextReplace": "Değiştir: Etiketleri girilen etiketlerle değiştirin (tüm etiketleri kaldırmak için etiket girmeyin)",
|
||||
"DeleteSelectedDownloadClients": "İndirme İstemcilerini Sil",
|
||||
"DeleteSelectedIndexers": "Dizinleyicileri Sil",
|
||||
"DeleteSelectedIndexers": "İndeksleyicileri Sil",
|
||||
"ExistingTag": "Mevcut etiket",
|
||||
"No": "Hayır",
|
||||
"NoChange": "Değişiklik yok",
|
||||
@@ -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": "yer",
|
||||
"Location": "Klasör Yolu",
|
||||
"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": "Etkinlikler",
|
||||
"Events": "Olaylar",
|
||||
"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 gizlenir",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Tüm sonuçlar uygulanan filtre tarafından gizlendi",
|
||||
"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; en son değişikliklerin etkin olabilmesi için {appName} uygulamasını yeniden başlatmanız gerekli",
|
||||
"AppUpdatedVersion": "{appName}, `{version}` sürümüne güncellendi; 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",
|
||||
@@ -652,10 +652,10 @@
|
||||
"ClickToChangeReleaseGroup": "Yayım grubunu değiştirmek için tıklayın",
|
||||
"CloneCondition": "Klon Durumu",
|
||||
"CustomFilter": "Özel Filtre",
|
||||
"AutoRedownloadFailed": "Yeniden İndirme Başarısız",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Başarısız indirmeler, etkileşimli aramada bulunduğunda otomatik olarak farklı bir versiyonu arayın ve indirmeyi deneyin",
|
||||
"AutoRedownloadFailed": "Başarısız İndirmeleri Yenile",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Etkileşimli aramadan başarısız bir sürüm alındığında otomatik olarak farklı bir sürümü arayın ve indirmeye çalışın",
|
||||
"ChangeCategoryHint": "İndirme İstemcisi'nden indirme işlemini 'İçe Aktarma Sonrası Kategorisi' olarak değiştirir",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Etkileşimli Aramadan Yeniden İndirme Başarısız Oldu",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Etkileşimli Arama'dan Başarısız İndirmeleri Yenile",
|
||||
"AutomaticAdd": "Otomatik Ekle",
|
||||
"DeleteCondition": "Koşulu Sil",
|
||||
"DeleteSelectedImportListsMessageText": "Seçilen {count} içe aktarma listesini silmek istediğinizden emin misiniz?",
|
||||
@@ -664,7 +664,7 @@
|
||||
"DeleteSelectedImportLists": "İçe Aktarma Listelerini Sil",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Seçilen {count} indirme istemcisini silmek istediğinizden emin misiniz?",
|
||||
"DeleteRootFolder": "Kök Klasörü Sil",
|
||||
"DeleteSelectedIndexersMessageText": "Seçilen {count} dizinleyiciyi silmek istediğinizden emin misiniz?",
|
||||
"DeleteSelectedIndexersMessageText": "Seçilen {count} indeksleyiciyi silmek istediğinizden emin misiniz?",
|
||||
"DoNotBlocklist": "Engelleme Listesine Eklemeyin",
|
||||
"DoNotBlocklistHint": "Engellenenler listesine eklemeden kaldır",
|
||||
"CustomFormatsSettingsTriggerInfo": "Bir yayına veya dosyaya, seçilen farklı koşul türlerinden en az biriyle eşleştiğinde Özel Format uygulanacaktır.",
|
||||
@@ -678,11 +678,11 @@
|
||||
"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 yakalamak için hangi indirme istemcisinin kullanılacağını belirtin",
|
||||
"IndexerDownloadClientHelpText": "Bu indeksleyiciden almak için hangi indirme istemcisinin kullanılacağını belirtin",
|
||||
"ManageDownloadClients": "İndirme İstemcilerini Yönet",
|
||||
"ManageIndexers": "Dizinleyicileri Yönet",
|
||||
"ManageIndexers": "İndeksleyicileri Yönet",
|
||||
"NoHistoryBlocklist": "Geçmiş engellenenler listesi yok",
|
||||
"NoIndexersFound": "Dizinleyici bulunamadı",
|
||||
"NoIndexersFound": "İndeksleyici bulunamadı",
|
||||
"InstanceName": "Örnek isim",
|
||||
"ListRefreshInterval": "Liste Yenileme Aralığı",
|
||||
"Label": "Etiket",
|
||||
@@ -697,7 +697,7 @@
|
||||
"Implementation": "Uygula",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Geçersiz indirme istemcilerine sahip dizinleyiciler: {0}.",
|
||||
"LabelIsRequired": "Etiket gerekli",
|
||||
"EditSelectedIndexers": "Seçili Dizinleyicileri Düzenle",
|
||||
"EditSelectedIndexers": "Seçili İndeksleyicileri Düzenle",
|
||||
"ManageImportLists": "İçe Aktarma Listelerini Yönet",
|
||||
"IgnoreDownload": "İndirmeyi Yoksay",
|
||||
"IgnoreDownloadHint": "{appName}'in bu indirmeyi daha fazla işlemesini durdurur",
|
||||
@@ -710,7 +710,7 @@
|
||||
"RemoveCompleted": "Tamamlananları Kaldır",
|
||||
"RemoveFailedDownloads": "Başarısız İndirmeleri Kaldır",
|
||||
"ResetDefinitions": "Tanımları Sıfırla",
|
||||
"NotificationsPlexSettingsAuthToken": "Kimlik Doğrulama Jetonu",
|
||||
"NotificationsPlexSettingsAuthToken": "Kimlik Doğrulama Token'ı",
|
||||
"NotificationsSettingsUpdateMapPathsFrom": "Harita Yolları",
|
||||
"NotificationsPlexSettingsAuthenticateWithPlexTv": "Plex.tv ile kimlik doğrulaması yapın",
|
||||
"NotificationsSettingsUpdateLibrary": "Kitaplığı Güncelle",
|
||||
@@ -722,8 +722,8 @@
|
||||
"RemoveDownloadsAlert": "Kaldırma ayarları, yukarıdaki tabloda bireysel İndirme İstemcisi ayarlarına taşınmıştır.",
|
||||
"RemoveSelectedItem": "Seçilen Öğeyi Kaldır",
|
||||
"ResetQualityDefinitions": "Kalite Tanımlarını Sıfırla",
|
||||
"SelectIndexerFlags": "Dizinleyici Bayraklarını Seçin",
|
||||
"SetIndexerFlags": "Dizinleyici Bayraklarını Ayarla",
|
||||
"SelectIndexerFlags": "İndeksleyici Bayraklarını Seçin",
|
||||
"SetIndexerFlags": "İndeksleyici Bayraklarını Ayarla",
|
||||
"WouldYouLikeToRestoreBackup": "'{name}' yedeğini geri yüklemek ister misiniz?",
|
||||
"ThereWasAnErrorLoadingThisPage": "Sayfa yüklenirken bir hata oluştu",
|
||||
"Theme": "Tema",
|
||||
@@ -746,12 +746,12 @@
|
||||
"UpdateAvailable": "Yeni güncelleme mevcut",
|
||||
"ThemeHelpText": "Uygulama Kullanıcı Arayüzü Temasını Değiştirin, 'Otomatik' Teması, Açık veya Koyu modu ayarlamak için İşletim Sistemi Temanızı kullanacaktır. Theme.Park'tan ilham alındı",
|
||||
"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 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",
|
||||
"ClickToChangeIndexerFlags": "İndeksleyici bayraklarını değiştirmek için tıklayın",
|
||||
"IndexerFlags": "İndeksleyici 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",
|
||||
"IndexerSettingsSeedTime": "Seed Süresi",
|
||||
"IndexerSettingsSeedRatio": "Seed Oranı",
|
||||
"IndexerSettingsSeedTimeHelpText": "Bir torrentin durmadan önce seed edilmesi gereken süre. Boş bırakılırsa indirme istemcisinin varsayılan ayarını kullanır",
|
||||
"IndexerSettingsSeedTimeHelpText": "Bir torrentin durdurulmadan önce ulaşması gereken oran, boş bırakıldığında uygulamanın varsayılanı kullanılı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 öğe yüklenirken bir hata oluştu",
|
||||
"ErrorLoadingContent": "Bu içerik 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ı Açılır Penceresi)",
|
||||
"AuthForm": "Formlar (Giriş Sayfası)",
|
||||
"AuthForm": "Form (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,19 +830,39 @@
|
||||
"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": "Şu anda Yüklü",
|
||||
"CurrentlyInstalled": "Şuan Kurulu",
|
||||
"ExternalUpdater": "{appName}, harici bir güncelleme mekanizması kullanacak şekilde yapılandırıldı",
|
||||
"FailedToFetchUpdates": "Güncellemeler getirilemedi",
|
||||
"PreviouslyInstalled": "Önceden Yüklenmiş",
|
||||
"Script": "Hazır Metin",
|
||||
"PreviouslyInstalled": "Daha Önce Kurulmuş",
|
||||
"Script": "Komut Dosyası",
|
||||
"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ü zaten kurulu"
|
||||
"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",
|
||||
"LogRotation": "Günlük Döndürme",
|
||||
"FilterSentryEventsHelpText": "Bilinen kullanıcı hatası olaylarının Analitik olarak gönderilmesini filtreleyin",
|
||||
"LogRotateHelpText": "Günlük klasöründe saklanacak maksimum günlük dosyası sayısı",
|
||||
"FilterAnalyticsEvents": "Analitik Olayları Filtrele",
|
||||
"ConsoleLogLevel": "Konsol Günlük Düzeyi",
|
||||
"LastSearched": "Son Aranan"
|
||||
}
|
||||
|
||||
@@ -482,7 +482,7 @@
|
||||
"AllExpandedExpandAll": "全部展开",
|
||||
"Duration": "时长",
|
||||
"Filters": "过滤器",
|
||||
"AppDataLocationHealthCheckMessage": "无法更新,以防止在更新时删除 AppData",
|
||||
"AppDataLocationHealthCheckMessage": "为防止在更新时删除 AppData,更新将无法进行",
|
||||
"FileWasDeletedByViaUI": "文件已通过 UI 删除",
|
||||
"IndexerJackettAll": "使用 Jackett 不受支持的“全部”终点的索引器:{0}",
|
||||
"SizeLimit": "尺寸限制",
|
||||
@@ -647,7 +647,6 @@
|
||||
"ImportListSettings": "常规导入列表设置",
|
||||
"ImportListSpecificSettings": "导入列表特定设置",
|
||||
"IndexerIdHelpText": "指定配置文件应用于哪个索引器",
|
||||
"MusicbrainzId": "Musicbrainz ID",
|
||||
"MusicBrainzRecordingID": "MusicBrainz 唱片ID",
|
||||
"MusicBrainzReleaseID": "MusicBrainz发行ID",
|
||||
"MusicBrainzAuthorID": "MusicBrainz作者ID",
|
||||
@@ -1116,5 +1115,7 @@
|
||||
"InstallMajorVersionUpdateMessage": "此更新将安装新的主要版本,这可能与您的系统不兼容。您确定要安装此更新吗?",
|
||||
"InstallMajorVersionUpdateMessageLink": "请查看 [{domain}]({url}) 以获取更多信息。",
|
||||
"PreviouslyInstalled": "上次安装",
|
||||
"UpdateAppDirectlyLoadError": "无法直接更新{appName},"
|
||||
"UpdateAppDirectlyLoadError": "无法直接更新{appName},",
|
||||
"FailedToFetchSettings": "设置同步失败",
|
||||
"LastSearched": "最近搜索"
|
||||
}
|
||||
|
||||
6
src/NzbDrone.Core/Localization/Core/zh_Hans.json
Normal file
6
src/NzbDrone.Core/Localization/Core/zh_Hans.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"Analytics": "分析",
|
||||
"About": "关于",
|
||||
"Username": "用户名",
|
||||
"Activity": "111"
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"About": "關於",
|
||||
"Actions": "執行",
|
||||
"Actions": "動作",
|
||||
"All": "全部",
|
||||
"AddingTag": "新增標籤",
|
||||
"Analytics": "分析",
|
||||
"AddList": "新增列表",
|
||||
"AddList": "加入清單",
|
||||
"ExportCustomFormat": "新增自定義格式",
|
||||
"Blocklist": "封鎖清單",
|
||||
"Branch": "分支",
|
||||
@@ -110,7 +110,7 @@
|
||||
"Ui": "UI",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "無法加入新的條件,請重新嘗試。",
|
||||
"UnableToAddANewRootFolderPleaseTryAgain": "無法加入新的自動標籤,請重新嘗試。",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "無法加入新的條件,請重新嘗試。",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "無法加入新的索引器,請重新嘗試。",
|
||||
"Grab": "抓取",
|
||||
"Hostname": "Hostname",
|
||||
"Label": "標籤",
|
||||
@@ -143,5 +143,33 @@
|
||||
"AuthForm": "表單(登入頁面)",
|
||||
"ApiKey": "API密鑰",
|
||||
"AuthBasic": "基礎(瀏覽器彈出視窗)",
|
||||
"Enabled": "啟用"
|
||||
"Enabled": "啟用",
|
||||
"BuiltIn": "內建",
|
||||
"Reason": "季",
|
||||
"AptUpdater": "使用apt安裝更新",
|
||||
"BranchUpdate": "用於更新{appName}的分支",
|
||||
"UnableToLoadIndexers": "無法載入索引器",
|
||||
"UnselectAll": "取消全選",
|
||||
"UISettings": "使用者介面設定",
|
||||
"UILanguage": "使用者介面語言",
|
||||
"Version": "版本",
|
||||
"Uptime": "上線時間",
|
||||
"UnableToLoadTags": "無法載入標籤",
|
||||
"UnableToLoadUISettings": "無法載入 UI 設定",
|
||||
"UpdateAppDirectlyLoadError": "無法直接更新 {appName},",
|
||||
"UnableToLoadHistory": "無法載入歷史記錄",
|
||||
"AutoRedownloadFailed": "失敗時重新下載",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "失敗時重新下載來自手動搜索的資源",
|
||||
"AuthenticationMethodHelpTextWarning": "請選擇一個有效的驗證方式",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "確認新密碼",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "請輸入新密碼",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "請輸入新用戶名",
|
||||
"AuthenticationMethod": "驗證方式",
|
||||
"AuthenticationRequired": "需要驗證",
|
||||
"AuthenticationRequiredHelpText": "更改需要進行驗證的請求。除非你了解其中的風險,否則請勿修改。",
|
||||
"AuthenticationRequiredWarning": "為防止未經認證的遠程訪問,{appName} 現需要啟用身份認證。您可以選擇禁用本地地址的身份認證。",
|
||||
"IgnoredPlaceHolder": "加入新的限制",
|
||||
"RequiredPlaceHolder": "加入新的限制",
|
||||
"RedownloadFailed": "失敗時重新下載",
|
||||
"UnableToAddANewRemotePathMappingPleaseTryAgain": "無法加入新的遠程路徑對應,請重試。"
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<PackageReference Include="Dapper" />
|
||||
<PackageReference Include="Diacritical.Net" />
|
||||
<PackageReference Include="LazyCache" />
|
||||
<PackageReference Include="Microsoft.Data.SqlClient" />
|
||||
<PackageReference Include="Polly" />
|
||||
<PackageReference Include="System.Text.Json" />
|
||||
<PackageReference Include="System.Text.Encoding.CodePages" />
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation.Validators;
|
||||
using NzbDrone.Common.Extensions;
|
||||
|
||||
namespace NzbDrone.Core.Validation
|
||||
@@ -10,10 +9,5 @@ namespace NzbDrone.Core.Validation
|
||||
{
|
||||
return ruleBuilder.Must(x => x.IsValidIpAddress()).WithMessage("Must contain wildcard (*) or a valid IP Address");
|
||||
}
|
||||
|
||||
public static IRuleBuilderOptions<T, string> NotListenAllIp4Address<T>(this IRuleBuilder<T, string> ruleBuilder)
|
||||
{
|
||||
return ruleBuilder.SetValidator(new RegularExpressionValidator(@"^(?!0\.0\.0\.0)")).WithMessage("Use * instead of 0.0.0.0");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
Url = new Uri("https://github.com/Readarr/Readarr/blob/develop/LICENSE.md")
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ using Readarr.Api.V1.Author;
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class AuthorEditorFixture : IntegrationTest
|
||||
{
|
||||
private void GivenExistingAuthor()
|
||||
|
||||
@@ -7,7 +7,7 @@ using NUnit.Framework;
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class AuthorFixture : IntegrationTest
|
||||
{
|
||||
[Test]
|
||||
|
||||
@@ -4,7 +4,7 @@ using NUnit.Framework;
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class AuthorLookupFixture : IntegrationTest
|
||||
{
|
||||
[TestCase("Robert Harris", "Robert Harris")]
|
||||
|
||||
@@ -6,7 +6,7 @@ using Readarr.Api.V1.Blocklist;
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class BlocklistFixture : IntegrationTest
|
||||
{
|
||||
private AuthorResource _author;
|
||||
|
||||
@@ -9,7 +9,7 @@ using Readarr.Api.V1.Books;
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class CalendarFixture : IntegrationTest
|
||||
{
|
||||
public ClientBase<BookResource> Calendar;
|
||||
|
||||
@@ -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 = "2024-12-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class CutoffUnmetFixture : IntegrationTest
|
||||
{
|
||||
[SetUp]
|
||||
|
||||
@@ -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 = "2024-12-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class MissingFixture : IntegrationTest
|
||||
{
|
||||
[SetUp]
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace Readarr.Api.V1.Books
|
||||
public DateTime? Added { get; set; }
|
||||
public AddBookOptions AddOptions { get; set; }
|
||||
public string RemoteCover { get; set; }
|
||||
public DateTime? LastSearchTime { get; set; }
|
||||
public List<EditionResource> Editions { get; set; }
|
||||
|
||||
//Hiding this so people don't think its usable (only used to set the initial state)
|
||||
@@ -80,6 +81,7 @@ namespace Readarr.Api.V1.Books
|
||||
Links = model.Links.Concat(selectedEdition?.Links ?? new List<Links>()).ToList(),
|
||||
Ratings = selectedEdition?.Ratings ?? new Ratings(),
|
||||
Added = model.Added,
|
||||
LastSearchTime = model.LastSearchTime
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ namespace Readarr.Api.V1.Config
|
||||
|
||||
SharedValidator.RuleFor(c => c.BindAddress)
|
||||
.ValidIpAddress()
|
||||
.NotListenAllIp4Address()
|
||||
.When(c => c.BindAddress != "*" && c.BindAddress != "localhost");
|
||||
|
||||
SharedValidator.RuleFor(c => c.Port).ValidPort();
|
||||
|
||||
@@ -44,6 +44,7 @@ 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
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace Readarr.Api.V1.System.Backup
|
||||
}
|
||||
|
||||
[RestDeleteById]
|
||||
public void DeleteBackup(int id)
|
||||
public object DeleteBackup(int id)
|
||||
{
|
||||
var backup = GetBackup(id);
|
||||
|
||||
@@ -67,6 +67,8 @@ namespace Readarr.Api.V1.System.Backup
|
||||
}
|
||||
|
||||
_diskProvider.DeleteFile(path);
|
||||
|
||||
return new { };
|
||||
}
|
||||
|
||||
[HttpPost("restore/{id:int}")]
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"description": "Readarr API docs",
|
||||
"license": {
|
||||
"name": "GPL-3.0",
|
||||
"url": "https://github.com/Readarr/Readarr/blob/develop/LICENSE"
|
||||
"url": "https://github.com/Readarr/Readarr/blob/develop/LICENSE.md"
|
||||
},
|
||||
"version": "1.0.0"
|
||||
},
|
||||
@@ -9445,6 +9445,11 @@
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"lastSearchTime": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"nullable": true
|
||||
},
|
||||
"editions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
@@ -10706,6 +10711,9 @@
|
||||
"backupRetention": {
|
||||
"type": "integer",
|
||||
"format": "int32"
|
||||
},
|
||||
"trustCgnatIpAddresses": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
|
||||
@@ -27,10 +27,13 @@ namespace NzbDrone.Http.Authentication
|
||||
if (_authenticationRequired == AuthenticationRequiredType.DisabledForLocalAddresses)
|
||||
{
|
||||
if (context.Resource is HttpContext httpContext &&
|
||||
IPAddress.TryParse(httpContext.GetRemoteIP(), out var ipAddress) &&
|
||||
ipAddress.IsLocalAddress())
|
||||
IPAddress.TryParse(httpContext.GetRemoteIP(), out var ipAddress))
|
||||
{
|
||||
context.Succeed(requirement);
|
||||
if (ipAddress.IsLocalAddress() ||
|
||||
(_configService.TrustCgnatIpAddresses && ipAddress.IsCgnatIpAddress()))
|
||||
{
|
||||
context.Succeed(requirement);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user