mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2026-04-17 21:44:48 -04:00
Compare commits
116 Commits
v1.26.0.48
...
v1.32.1.49
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
015db4a916 | ||
|
|
49268f3b8d | ||
|
|
f02a6f3e2c | ||
|
|
46b6124b97 | ||
|
|
53bc97b3be | ||
|
|
b09d4927cc | ||
|
|
328f3c0423 | ||
|
|
635e76526a | ||
|
|
790feed5ab | ||
|
|
59b5d2fc78 | ||
|
|
d5b12cf51a | ||
|
|
2d584f7eb6 | ||
|
|
0f1d647cd7 | ||
|
|
d6e8d89be4 | ||
|
|
8672129d5a | ||
|
|
44bdff8b8f | ||
|
|
4df8fc02f1 | ||
|
|
e101129cff | ||
|
|
147e732c9c | ||
|
|
a12381fb1d | ||
|
|
3a4de9cca1 | ||
|
|
43c988d951 | ||
|
|
a036e0fc37 | ||
|
|
56b9da16cf | ||
|
|
887c262589 | ||
|
|
12ff612775 | ||
|
|
0d3d27e46f | ||
|
|
d1846fde61 | ||
|
|
e6901506a0 | ||
|
|
08b4eddbc5 | ||
|
|
979db70e68 | ||
|
|
22834a852a | ||
|
|
f0540a5f8b | ||
|
|
1f7ac7d7d6 | ||
|
|
8ac68240ad | ||
|
|
b463a3f54b | ||
|
|
e15e57329e | ||
|
|
d8354408a4 | ||
|
|
6d2d49f7bd | ||
|
|
37610eec40 | ||
|
|
ed51208116 | ||
|
|
26e4dcad65 | ||
|
|
6eb21a02a1 | ||
|
|
8c2d5a404d | ||
|
|
3b83a00eaf | ||
|
|
a5a86a6f86 | ||
|
|
e7ed09a43d | ||
|
|
547bc2e58c | ||
|
|
8eb674c8d7 | ||
|
|
2c3621d25e | ||
|
|
2648f2c639 | ||
|
|
f4d621063b | ||
|
|
73494c462c | ||
|
|
36f6896f30 | ||
|
|
e01741a69e | ||
|
|
1dbff1235e | ||
|
|
1a9ad6b363 | ||
|
|
c88249300c | ||
|
|
7b8e352d87 | ||
|
|
81f7a6cbab | ||
|
|
523e46af2a | ||
|
|
2b4a6def2a | ||
|
|
9097c0ef6d | ||
|
|
4321c1d40c | ||
|
|
bb2548a08d | ||
|
|
3a9b841fad | ||
|
|
31203d1370 | ||
|
|
c8a910eaf4 | ||
|
|
9ab3c3e6c7 | ||
|
|
4659cb706a | ||
|
|
500759bf1f | ||
|
|
43c7c43257 | ||
|
|
9c2fced391 | ||
|
|
52ec5b6ff6 | ||
|
|
b46e657976 | ||
|
|
51fd30ba10 | ||
|
|
5fbb347108 | ||
|
|
54d3d44620 | ||
|
|
5ca18683ca | ||
|
|
6bdf5f5d69 | ||
|
|
7cba7152f1 | ||
|
|
cf012eb001 | ||
|
|
6b8a7993ff | ||
|
|
c6440bb21b | ||
|
|
b95eac98b9 | ||
|
|
0eb19ce834 | ||
|
|
4b8016d95d | ||
|
|
31d8d2419a | ||
|
|
d29ccd7749 | ||
|
|
e789f4ec54 | ||
|
|
58d495d618 | ||
|
|
f3328863e1 | ||
|
|
a23d792781 | ||
|
|
f066cf399d | ||
|
|
61e863cb31 | ||
|
|
b2afbc6872 | ||
|
|
aace65f88e | ||
|
|
9ab2d8b444 | ||
|
|
bc314061ef | ||
|
|
87b3dcd780 | ||
|
|
f3b99f68f6 | ||
|
|
c4a90e8ba4 | ||
|
|
41320ca2dc | ||
|
|
b8b32f8708 | ||
|
|
30c4bb24e8 | ||
|
|
b447db5d08 | ||
|
|
299001a513 | ||
|
|
2871f1f2a2 | ||
|
|
a9b93df0c9 | ||
|
|
2726787ee9 | ||
|
|
b917932f19 | ||
|
|
06ae85e6d1 | ||
|
|
b1c7e98664 | ||
|
|
62479737a7 | ||
|
|
8e69415d64 | ||
|
|
222dfb1821 |
@@ -9,7 +9,7 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '1.26.0'
|
||||
majorVersion: '1.32.1'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
prowlarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
|
||||
@@ -1169,12 +1169,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: 'prowlarr'
|
||||
scannerMode: 'MSBuild'
|
||||
scannerMode: 'dotnet'
|
||||
projectKey: 'Prowlarr_Prowlarr'
|
||||
projectName: 'Prowlarr'
|
||||
projectVersion: '$(prowlarrVersion)'
|
||||
@@ -1187,10 +1187,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'
|
||||
|
||||
9
docs.sh
9
docs.sh
@@ -3,15 +3,16 @@ set -e
|
||||
|
||||
FRAMEWORK="net6.0"
|
||||
PLATFORM=$1
|
||||
ARCHITECTURE="${2:-x64}"
|
||||
|
||||
if [ "$PLATFORM" = "Windows" ]; then
|
||||
RUNTIME="win-x64"
|
||||
RUNTIME="win-$ARCHITECTURE"
|
||||
elif [ "$PLATFORM" = "Linux" ]; then
|
||||
RUNTIME="linux-x64"
|
||||
RUNTIME="linux-$ARCHITECTURE"
|
||||
elif [ "$PLATFORM" = "Mac" ]; then
|
||||
RUNTIME="osx-x64"
|
||||
RUNTIME="osx-$ARCHITECTURE"
|
||||
else
|
||||
echo "Platform must be provided as first arguement: Windows, Linux or Mac"
|
||||
echo "Platform must be provided as first argument: Windows, Linux or Mac"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ module.exports = (env) => {
|
||||
const config = {
|
||||
mode: isProduction ? 'production' : 'development',
|
||||
devtool: isProduction ? 'source-map' : 'eval-source-map',
|
||||
target: 'web',
|
||||
|
||||
stats: {
|
||||
children: false
|
||||
@@ -169,7 +170,7 @@ module.exports = (env) => {
|
||||
loose: true,
|
||||
debug: false,
|
||||
useBuiltIns: 'entry',
|
||||
corejs: 3
|
||||
corejs: '3.39'
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -20,6 +20,8 @@ import HintedSelectInputSelectedValue from './HintedSelectInputSelectedValue';
|
||||
import TextInput from './TextInput';
|
||||
import styles from './EnhancedSelectInput.css';
|
||||
|
||||
const MINIMUM_DISTANCE_FROM_EDGE = 10;
|
||||
|
||||
function isArrowKey(keyCode) {
|
||||
return keyCode === keyCodes.UP_ARROW || keyCode === keyCodes.DOWN_ARROW;
|
||||
}
|
||||
@@ -137,18 +139,9 @@ class EnhancedSelectInput extends Component {
|
||||
// Listeners
|
||||
|
||||
onComputeMaxHeight = (data) => {
|
||||
const {
|
||||
top,
|
||||
bottom
|
||||
} = data.offsets.reference;
|
||||
|
||||
const windowHeight = window.innerHeight;
|
||||
|
||||
if ((/^botton/).test(data.placement)) {
|
||||
data.styles.maxHeight = windowHeight - bottom;
|
||||
} else {
|
||||
data.styles.maxHeight = top;
|
||||
}
|
||||
data.styles.maxHeight = windowHeight - MINIMUM_DISTANCE_FROM_EDGE;
|
||||
|
||||
return data;
|
||||
};
|
||||
@@ -460,6 +453,10 @@ class EnhancedSelectInput extends Component {
|
||||
order: 851,
|
||||
enabled: true,
|
||||
fn: this.onComputeMaxHeight
|
||||
},
|
||||
preventOverflow: {
|
||||
enabled: true,
|
||||
boundariesElement: 'viewport'
|
||||
}
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -257,6 +257,7 @@ class HistoryRow extends Component {
|
||||
key={parameter.key}
|
||||
title={parameter.title}
|
||||
value={data[parameter.key]}
|
||||
queryType={data.queryType}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
import React from 'react';
|
||||
import Link from 'Components/Link/Link';
|
||||
import { HistoryQueryType } from 'typings/History';
|
||||
import styles from './HistoryRowParameter.css';
|
||||
|
||||
interface HistoryRowParameterProps {
|
||||
title: string;
|
||||
value: string;
|
||||
queryType: HistoryQueryType;
|
||||
}
|
||||
|
||||
function HistoryRowParameter(props: HistoryRowParameterProps) {
|
||||
const { title, value } = props;
|
||||
const { title, value, queryType } = props;
|
||||
|
||||
const type = title.toLowerCase();
|
||||
|
||||
@@ -18,7 +20,13 @@ function HistoryRowParameter(props: HistoryRowParameterProps) {
|
||||
link = <Link to={`https://imdb.com/title/${value}/`}>{value}</Link>;
|
||||
} else if (type === 'tmdb') {
|
||||
link = (
|
||||
<Link to={`https://www.themoviedb.org/movie/${value}`}>{value}</Link>
|
||||
<Link
|
||||
to={`https://www.themoviedb.org/${
|
||||
queryType === 'tvsearch' ? 'tv' : 'movie'
|
||||
}/${value}`}
|
||||
>
|
||||
{value}
|
||||
</Link>
|
||||
);
|
||||
} else if (type === 'tvdb') {
|
||||
link = (
|
||||
|
||||
@@ -68,6 +68,7 @@ function IndexerHistoryRow(props: IndexerHistoryRowProps) {
|
||||
key={parameter.key}
|
||||
title={parameter.title}
|
||||
value={data[parameter.key as keyof HistoryData].toString()}
|
||||
queryType={data.queryType}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
|
||||
@@ -17,7 +17,7 @@ export async function fetchTranslations(): Promise<boolean> {
|
||||
translations = data.Strings;
|
||||
|
||||
resolve(true);
|
||||
} catch (error) {
|
||||
} catch {
|
||||
resolve(false);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
import ModelBase from 'App/ModelBase';
|
||||
|
||||
export type HistoryQueryType =
|
||||
| 'search'
|
||||
| 'tvsearch'
|
||||
| 'movie'
|
||||
| 'book'
|
||||
| 'music';
|
||||
|
||||
export interface HistoryData {
|
||||
source: string;
|
||||
host: string;
|
||||
@@ -7,7 +14,7 @@ export interface HistoryData {
|
||||
offset: number;
|
||||
elapsedTime: number;
|
||||
query: string;
|
||||
queryType: string;
|
||||
queryType: HistoryQueryType;
|
||||
}
|
||||
|
||||
interface History extends ModelBase {
|
||||
|
||||
28
package.json
28
package.json
@@ -23,10 +23,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",
|
||||
"@juggle/resize-observer": "3.4.0",
|
||||
"@microsoft/signalr": "6.0.25",
|
||||
@@ -81,30 +81,30 @@
|
||||
"redux-thunk": "2.4.2",
|
||||
"reselect": "4.1.8",
|
||||
"stacktrace-js": "2.0.2",
|
||||
"typescript": "5.1.6"
|
||||
"typescript": "5.7.2"
|
||||
},
|
||||
"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-document-title": "2.0.10",
|
||||
"@types/react-router-dom": "5.3.3",
|
||||
"@types/react-text-truncate": "0.19.0",
|
||||
"@types/react-window": "1.8.8",
|
||||
"@types/webpack-livereload-plugin": "2.3.6",
|
||||
"@typescript-eslint/eslint-plugin": "6.21.0",
|
||||
"@typescript-eslint/parser": "6.21.0",
|
||||
"@typescript-eslint/eslint-plugin": "8.18.1",
|
||||
"@typescript-eslint/parser": "8.18.1",
|
||||
"are-you-es5": "2.1.2",
|
||||
"autoprefixer": "10.4.20",
|
||||
"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.7.3",
|
||||
"css-modules-typescript-loader": "4.0.1",
|
||||
"eslint": "8.57.1",
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
<PropertyGroup Condition="'$(IsOSX)' == 'true' and
|
||||
'$(RuntimeIdentifier)' == ''">
|
||||
<_UsingDefaultRuntimeIdentifier>true</_UsingDefaultRuntimeIdentifier>
|
||||
<RuntimeIdentifier>osx-x64</RuntimeIdentifier>
|
||||
<RuntimeIdentifier>osx-$(Architecture)</RuntimeIdentifier>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ namespace NzbDrone.Common.Test.InstrumentationTests
|
||||
[TestCase(@"https://anthelion.me/api.php?api_key=2b51db35e1910123321025a12b9933d2&o=json&t=movie&q=&tmdb=&imdb=&cat=&limit=100&offset=0")]
|
||||
[TestCase(@"https://avistaz.to/api/v1/jackett/auth: username=mySecret&password=mySecret&pid=mySecret")]
|
||||
[TestCase(@"https://www.sharewood.tv/api/2b51db35e1910123321025a12b9933d2/last-torrents")]
|
||||
[TestCase(@"https://example.org/rss/torrents?rsskey=2b51db35e1910123321025a12b9933d2&search=")]
|
||||
|
||||
// Indexer and Download Client Responses
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -189,6 +189,25 @@ namespace NzbDrone.Common.Disk
|
||||
}
|
||||
|
||||
var fi = new FileInfo(path);
|
||||
|
||||
try
|
||||
{
|
||||
// If the file is a symlink, resolve the target path and get the size of the target file.
|
||||
if (fi.Attributes.HasFlag(FileAttributes.ReparsePoint))
|
||||
{
|
||||
var targetPath = fi.ResolveLinkTarget(true)?.FullName;
|
||||
|
||||
if (targetPath != null)
|
||||
{
|
||||
fi = new FileInfo(targetPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
Logger.Trace(ex, "Unable to resolve symlink target for {0}", path);
|
||||
}
|
||||
|
||||
return fi.Length;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
private static readonly Regex[] CleansingRules =
|
||||
{
|
||||
// Url
|
||||
new (@"(?<=[?&: ;])(apikey|api_key|(?:(?:access|api)[-_]?)?token|pass(?:key|wd)?|auth|authkey|user|u?id|api|[a-z_]*apikey|account|pid|pwd)=(?<secret>[^&=""]+?)(?=[ ""&=]|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
new (@"(?<=[?&: ;])(apikey|api_key|(?:(?:access|api)[-_]?)?token|pass(?:key|wd)?|auth|authkey|rsskey|user|u?id|api|[a-z_]*apikey|account|pid|pwd)=(?<secret>[^&=""]+?)(?=[ ""&=]|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
new (@"(?<=[?& ;])[^=]*?(_?(?<!use|get_)token|username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$|;)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
new (@"rss(24h)?\.torrentleech\.org/(?!rss)(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
new (@"torrentleech\.org/rss/download/[0-9]+/(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
using System.Text;
|
||||
using NLog;
|
||||
using NLog.Layouts.ClefJsonLayout;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
|
||||
namespace NzbDrone.Common.Instrumentation;
|
||||
|
||||
public class CleansingClefLogLayout : CompactJsonLayout
|
||||
{
|
||||
protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target)
|
||||
{
|
||||
base.RenderFormattedMessage(logEvent, target);
|
||||
|
||||
if (RuntimeInfo.IsProduction)
|
||||
{
|
||||
var result = CleanseLogMessage.Cleanse(target.ToString());
|
||||
target.Clear();
|
||||
target.Append(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System.Text;
|
||||
using NLog;
|
||||
using NLog.Layouts;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
|
||||
namespace NzbDrone.Common.Instrumentation;
|
||||
|
||||
public class CleansingConsoleLogLayout : SimpleLayout
|
||||
{
|
||||
public CleansingConsoleLogLayout(string format)
|
||||
: base(format)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target)
|
||||
{
|
||||
base.RenderFormattedMessage(logEvent, target);
|
||||
|
||||
if (RuntimeInfo.IsProduction)
|
||||
{
|
||||
var result = CleanseLogMessage.Cleanse(target.ToString());
|
||||
target.Clear();
|
||||
target.Append(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ using NLog.Targets;
|
||||
|
||||
namespace NzbDrone.Common.Instrumentation
|
||||
{
|
||||
public class NzbDroneFileTarget : FileTarget
|
||||
public class CleansingFileTarget : FileTarget
|
||||
{
|
||||
protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target)
|
||||
{
|
||||
@@ -3,7 +3,6 @@ using System.Diagnostics;
|
||||
using System.IO;
|
||||
using NLog;
|
||||
using NLog.Config;
|
||||
using NLog.Layouts.ClefJsonLayout;
|
||||
using NLog.Targets;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
@@ -13,9 +12,11 @@ namespace NzbDrone.Common.Instrumentation
|
||||
{
|
||||
public static class NzbDroneLogger
|
||||
{
|
||||
private const string FILE_LOG_LAYOUT = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
|
||||
public const string ConsoleLogLayout = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
|
||||
public static CompactJsonLayout ClefLogLayout = new CompactJsonLayout();
|
||||
private const string FileLogLayout = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
|
||||
private const string ConsoleFormat = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
|
||||
|
||||
private static readonly CleansingConsoleLogLayout CleansingConsoleLayout = new (ConsoleFormat);
|
||||
private static readonly CleansingClefLogLayout ClefLogLayout = new ();
|
||||
|
||||
private static bool _isConfigured;
|
||||
|
||||
@@ -119,11 +120,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
? formatEnumValue
|
||||
: ConsoleLogFormat.Standard;
|
||||
|
||||
coloredConsoleTarget.Layout = logFormat switch
|
||||
{
|
||||
ConsoleLogFormat.Clef => ClefLogLayout,
|
||||
_ => ConsoleLogLayout
|
||||
};
|
||||
ConfigureConsoleLayout(coloredConsoleTarget, logFormat);
|
||||
|
||||
var loggingRule = new LoggingRule("*", level, coloredConsoleTarget);
|
||||
|
||||
@@ -140,7 +137,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
|
||||
private static void RegisterAppFile(IAppFolderInfo appFolderInfo, string name, string fileName, int maxArchiveFiles, LogLevel minLogLevel)
|
||||
{
|
||||
var fileTarget = new NzbDroneFileTarget();
|
||||
var fileTarget = new CleansingFileTarget();
|
||||
|
||||
fileTarget.Name = name;
|
||||
fileTarget.FileName = Path.Combine(appFolderInfo.GetLogFolder(), fileName);
|
||||
@@ -153,7 +150,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
fileTarget.MaxArchiveFiles = maxArchiveFiles;
|
||||
fileTarget.EnableFileDelete = true;
|
||||
fileTarget.ArchiveNumbering = ArchiveNumberingMode.Rolling;
|
||||
fileTarget.Layout = FILE_LOG_LAYOUT;
|
||||
fileTarget.Layout = FileLogLayout;
|
||||
|
||||
var loggingRule = new LoggingRule("*", minLogLevel, fileTarget);
|
||||
|
||||
@@ -172,7 +169,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
fileTarget.ConcurrentWrites = false;
|
||||
fileTarget.ConcurrentWriteAttemptDelay = 50;
|
||||
fileTarget.ConcurrentWriteAttempts = 100;
|
||||
fileTarget.Layout = FILE_LOG_LAYOUT;
|
||||
fileTarget.Layout = FileLogLayout;
|
||||
|
||||
var loggingRule = new LoggingRule("*", LogLevel.Trace, fileTarget);
|
||||
|
||||
@@ -217,6 +214,15 @@ namespace NzbDrone.Common.Instrumentation
|
||||
{
|
||||
return GetLogger(obj.GetType());
|
||||
}
|
||||
|
||||
public static void ConfigureConsoleLayout(ColoredConsoleTarget target, ConsoleLogFormat format)
|
||||
{
|
||||
target.Layout = format switch
|
||||
{
|
||||
ConsoleLogFormat.Clef => NzbDroneLogger.ClefLogLayout,
|
||||
_ => NzbDroneLogger.CleansingConsoleLayout
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public enum ConsoleLogFormat
|
||||
|
||||
@@ -119,7 +119,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
o.Environment = BuildInfo.Branch;
|
||||
|
||||
// Crash free run statistics (sends a ping for healthy and for crashes sessions)
|
||||
o.AutoSessionTracking = true;
|
||||
o.AutoSessionTracking = false;
|
||||
|
||||
// Caches files in the event device is offline
|
||||
// Sentry creates a 'sentry' sub directory, no need to concat here
|
||||
@@ -148,7 +148,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
_debounce = new SentryDebounce();
|
||||
|
||||
// initialize to true and reconfigure later
|
||||
// Otherwise it will default to false and any errors occuring
|
||||
// Otherwise it will default to false and any errors occurring
|
||||
// before config file gets read will not be filtered
|
||||
FilterEvents = true;
|
||||
SentryEnabled = true;
|
||||
@@ -207,9 +207,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;
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -5,17 +5,18 @@
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DryIoc.dll" Version="5.4.3" />
|
||||
<PackageReference Include="IPAddressRange" Version="6.0.0" />
|
||||
<PackageReference Include="IPAddressRange" Version="6.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog" Version="5.3.3" />
|
||||
<PackageReference Include="NLog" Version="5.3.4" />
|
||||
<PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.0" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.12" />
|
||||
<PackageReference Include="Npgsql" Version="7.0.8" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.15" />
|
||||
<PackageReference Include="Npgsql" Version="7.0.9" />
|
||||
<PackageReference Include="Sentry" Version="4.0.2" />
|
||||
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageReference Include="System.Text.Json" Version="6.0.10" />
|
||||
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
||||
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.1" />
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using System.Data.SQLite;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Datastore.Converters;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.Datastore.Converters;
|
||||
|
||||
[TestFixture]
|
||||
public class TimeSpanConverterFixture : CoreTest<TimeSpanConverter>
|
||||
{
|
||||
private SQLiteParameter _param;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_param = new SQLiteParameter();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_string_when_saving_timespan_to_db()
|
||||
{
|
||||
var span = TimeSpan.FromMilliseconds(10);
|
||||
|
||||
Subject.SetValue(_param, span);
|
||||
_param.Value.Should().Be(span.ToString());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_timespan_when_getting_string_from_db()
|
||||
{
|
||||
var span = TimeSpan.FromMilliseconds(10);
|
||||
|
||||
Subject.Parse(span.ToString()).Should().Be(span);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_zero_timespan_for_db_null_value_when_getting_from_db()
|
||||
{
|
||||
Subject.Parse(null).Should().Be(TimeSpan.Zero);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Datastore;
|
||||
|
||||
namespace NzbDrone.Core.Test.Datastore;
|
||||
|
||||
[TestFixture]
|
||||
public class DatabaseVersionParserFixture
|
||||
{
|
||||
[TestCase("3.44.2", 3, 44, 2)]
|
||||
public void should_parse_sqlite_database_version(string serverVersion, int majorVersion, int minorVersion, int buildVersion)
|
||||
{
|
||||
var version = DatabaseVersionParser.ParseServerVersion(serverVersion);
|
||||
|
||||
version.Should().NotBeNull();
|
||||
version.Major.Should().Be(majorVersion);
|
||||
version.Minor.Should().Be(minorVersion);
|
||||
version.Build.Should().Be(buildVersion);
|
||||
}
|
||||
|
||||
[TestCase("14.8 (Debian 14.8-1.pgdg110+1)", 14, 8, null)]
|
||||
[TestCase("16.3 (Debian 16.3-1.pgdg110+1)", 16, 3, null)]
|
||||
[TestCase("16.3 - Percona Distribution", 16, 3, null)]
|
||||
[TestCase("17.0 - Percona Server", 17, 0, null)]
|
||||
public void should_parse_postgres_database_version(string serverVersion, int majorVersion, int minorVersion, int? buildVersion)
|
||||
{
|
||||
var version = DatabaseVersionParser.ParseServerVersion(serverVersion);
|
||||
|
||||
version.Should().NotBeNull();
|
||||
version.Major.Should().Be(majorVersion);
|
||||
version.Minor.Should().Be(minorVersion);
|
||||
|
||||
if (buildVersion.HasValue)
|
||||
{
|
||||
version.Build.Should().Be(buildVersion.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,7 +122,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AnimeBytesTests
|
||||
|
||||
var fifthTorrentInfo = releases.ElementAt(28) as TorrentInfo;
|
||||
|
||||
fifthTorrentInfo.Title.Should().Be("[-ZR-] Dr. STONE: STONE WARS S02 [Web][MKV][h264][1080p][AAC 2.0][Dual Audio][Softsubs (-ZR-)]");
|
||||
fifthTorrentInfo.Title.Should().Be("[-ZR-] Dr. STONE: STONE WARS 2021 S02 [Web][MKV][h264][1080p][AAC 2.0][Dual Audio][Softsubs (-ZR-)]");
|
||||
fifthTorrentInfo.DownloadProtocol.Should().Be(DownloadProtocol.Torrent);
|
||||
fifthTorrentInfo.DownloadUrl.Should().Be("https://animebytes.tv/torrent/944509/download/somepass");
|
||||
fifthTorrentInfo.InfoUrl.Should().Be("https://animebytes.tv/torrent/944509/group");
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests
|
||||
torrentInfo.InfoUrl.Should().Be("https://avistaz.to/torrent/187240-japan-sinks-people-of-hope-2021-s01e05-720p-nf-web-dl-ddp20-x264-seikel");
|
||||
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
|
||||
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-11-14 21:26:21"));
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-11-14 22:26:21"));
|
||||
torrentInfo.Size.Should().Be(935127615);
|
||||
torrentInfo.InfoHash.Should().Be("a879261d4e6e792402f92401141a21de70d51bf2");
|
||||
torrentInfo.MagnetUrl.Should().Be(null);
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests
|
||||
torrentInfo.InfoUrl.Should().Be("https://exoticaz.to/torrent/64040-ssis-419-my-first-experience-is-yua-mikami-from-the-day-i-lost-my-virginity-i-was-devoted-to-sex");
|
||||
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
|
||||
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-06-11 09:04:50"));
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-06-11 10:04:50"));
|
||||
torrentInfo.Size.Should().Be(7085405541);
|
||||
torrentInfo.InfoHash.Should().Be("asdjfiasdf54asd7f4a2sdf544asdf");
|
||||
torrentInfo.MagnetUrl.Should().Be(null);
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests
|
||||
torrentInfo.InfoUrl.Should().Be("https://privatehd.to/torrent/78506-godzilla-2014-2160p-uhd-bluray-remux-hdr-hevc-atmos-triton");
|
||||
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
|
||||
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-03-21 04:24:49"));
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-03-21 05:24:49"));
|
||||
torrentInfo.Size.Should().Be(69914591044);
|
||||
torrentInfo.InfoHash.Should().Be("a879261d4e6e792402f92401141a21de70d51bf2");
|
||||
torrentInfo.MagnetUrl.Should().Be(null);
|
||||
|
||||
@@ -26,15 +26,15 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
Subject.Definition = new IndexerDefinition()
|
||||
Subject.Definition = new IndexerDefinition
|
||||
{
|
||||
Name = "HdBits",
|
||||
Settings = new HDBitsSettings() { ApiKey = "fakekey" }
|
||||
Settings = new HDBitsSettings { ApiKey = "fakekey" }
|
||||
};
|
||||
|
||||
_movieSearchCriteria = new MovieSearchCriteria
|
||||
{
|
||||
Categories = new int[] { 2000, 2010 },
|
||||
Categories = new[] { 2000, 2010 },
|
||||
ImdbId = "0076759"
|
||||
};
|
||||
}
|
||||
@@ -52,7 +52,7 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests
|
||||
var torrents = (await Subject.Fetch(_movieSearchCriteria)).Releases;
|
||||
|
||||
torrents.Should().HaveCount(2);
|
||||
torrents.First().Should().BeOfType<HDBitsInfo>();
|
||||
torrents.First().Should().BeOfType<TorrentInfo>();
|
||||
|
||||
var first = torrents.First() as TorrentInfo;
|
||||
|
||||
|
||||
@@ -46,8 +46,8 @@ namespace NzbDrone.Core.Test.IndexerTests.RedactedTests
|
||||
|
||||
torrentInfo.Title.Should().Be("Red Hot Chili Peppers - Californication (1999) [Album] [US / Reissue 2020] [FLAC 24bit Lossless / Vinyl]");
|
||||
torrentInfo.DownloadProtocol.Should().Be(DownloadProtocol.Torrent);
|
||||
torrentInfo.DownloadUrl.Should().Be("https://redacted.ch/ajax.php?action=download&id=3892313");
|
||||
torrentInfo.InfoUrl.Should().Be("https://redacted.ch/torrents.php?id=16720&torrentid=3892313");
|
||||
torrentInfo.DownloadUrl.Should().Be("https://redacted.sh/ajax.php?action=download&id=3892313");
|
||||
torrentInfo.InfoUrl.Should().Be("https://redacted.sh/torrents.php?id=16720&torrentid=3892313");
|
||||
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
|
||||
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-12-17 08:02:35"));
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace NzbDrone.Core.Applications
|
||||
|
||||
foreach (var application in applications)
|
||||
{
|
||||
if (blockedApplications.TryGetValue(application.Definition.Id, out var blockedApplicationStatus))
|
||||
if (blockedApplications.TryGetValue(application.Definition.Id, out var blockedApplicationStatus) && blockedApplicationStatus.DisabledTill.HasValue)
|
||||
{
|
||||
_logger.Debug("Temporarily ignoring application {0} till {1} due to recent failures.", application.Definition.Name, blockedApplicationStatus.DisabledTill.Value.ToLocalTime());
|
||||
continue;
|
||||
|
||||
@@ -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 = $"prowlarr_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();
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@ namespace NzbDrone.Core.Configuration
|
||||
string PostgresPassword { get; }
|
||||
string PostgresMainDb { get; }
|
||||
string PostgresLogDb { get; }
|
||||
bool TrustCgnatIpAddresses { get; }
|
||||
}
|
||||
|
||||
public class ConfigFileProvider : IConfigFileProvider
|
||||
@@ -273,7 +274,7 @@ namespace NzbDrone.Core.Configuration
|
||||
{
|
||||
var instanceName = _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName);
|
||||
|
||||
if (instanceName.ContainsIgnoreCase(BuildInfo.AppName))
|
||||
if (instanceName.Contains(BuildInfo.AppName, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return instanceName;
|
||||
}
|
||||
@@ -479,5 +480,7 @@ namespace NzbDrone.Core.Configuration
|
||||
SetValue("ApiKey", GenerateApiKey());
|
||||
_eventAggregator.PublishEvent(new ApiKeyChangedEvent());
|
||||
}
|
||||
|
||||
public bool TrustCgnatIpAddresses => _authOptions.TrustCgnatIpAddresses ?? GetValueBoolean("TrustCgnatIpAddresses", false, persist: false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,6 +183,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);
|
||||
|
||||
@@ -2,18 +2,17 @@ using System;
|
||||
using System.Data;
|
||||
using Dapper;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Converters
|
||||
{
|
||||
public class DapperTimeSpanConverter : SqlMapper.TypeHandler<TimeSpan>
|
||||
{
|
||||
public override void SetValue(IDbDataParameter parameter, TimeSpan value)
|
||||
{
|
||||
parameter.Value = value.ToString();
|
||||
}
|
||||
namespace NzbDrone.Core.Datastore.Converters;
|
||||
|
||||
public override TimeSpan Parse(object value)
|
||||
{
|
||||
return TimeSpan.Parse((string)value);
|
||||
}
|
||||
public class TimeSpanConverter : SqlMapper.TypeHandler<TimeSpan>
|
||||
{
|
||||
public override void SetValue(IDbDataParameter parameter, TimeSpan value)
|
||||
{
|
||||
parameter.Value = value.ToString();
|
||||
}
|
||||
|
||||
public override TimeSpan Parse(object value)
|
||||
{
|
||||
return value is string str ? TimeSpan.Parse(str) : TimeSpan.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ using System;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Data.SQLite;
|
||||
using System.Text.RegularExpressions;
|
||||
using Dapper;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Instrumentation;
|
||||
@@ -52,9 +51,8 @@ namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
using var db = _datamapperFactory();
|
||||
var dbConnection = db as DbConnection;
|
||||
var version = Regex.Replace(dbConnection.ServerVersion, @"\(.*?\)", "");
|
||||
|
||||
return new Version(version);
|
||||
return DatabaseVersionParser.ParseServerVersion(dbConnection.ServerVersion);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
16
src/NzbDrone.Core/Datastore/DatabaseVersionParser.cs
Normal file
16
src/NzbDrone.Core/Datastore/DatabaseVersionParser.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace NzbDrone.Core.Datastore;
|
||||
|
||||
public static class DatabaseVersionParser
|
||||
{
|
||||
private static readonly Regex VersionRegex = new (@"^[^ ]+", RegexOptions.Compiled);
|
||||
|
||||
public static Version ParseServerVersion(string serverVersion)
|
||||
{
|
||||
var match = VersionRegex.Match(serverVersion);
|
||||
|
||||
return match.Success ? new Version(match.Value) : null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using Dapper;
|
||||
using FluentMigrator;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Migration(042)]
|
||||
public class myanonamouse_freeleech_wedge_options : NzbDroneMigrationBase
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Execute.WithConnection(MigrateIndexersToWedgeOptions);
|
||||
}
|
||||
|
||||
private void MigrateIndexersToWedgeOptions(IDbConnection conn, IDbTransaction tran)
|
||||
{
|
||||
var updated = new List<object>();
|
||||
|
||||
using (var cmd = conn.CreateCommand())
|
||||
{
|
||||
cmd.Transaction = tran;
|
||||
cmd.CommandText = "SELECT \"Id\", \"Settings\" FROM \"Indexers\" WHERE \"Implementation\" = 'MyAnonamouse'";
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
var id = reader.GetInt32(0);
|
||||
var settings = Json.Deserialize<JObject>(reader.GetString(1));
|
||||
|
||||
if (settings.ContainsKey("freeleech") && settings.Value<JToken>("freeleech").Type == JTokenType.Boolean)
|
||||
{
|
||||
var optionValue = settings.Value<bool>("freeleech") switch
|
||||
{
|
||||
true => 2, // Required
|
||||
_ => 0 // Never
|
||||
};
|
||||
|
||||
settings.Remove("freeleech");
|
||||
settings.Add("useFreeleechWedge", optionValue);
|
||||
}
|
||||
|
||||
updated.Add(new
|
||||
{
|
||||
Id = id,
|
||||
Settings = settings.ToJson()
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var updateSql = "UPDATE \"Indexers\" SET \"Settings\" = @Settings WHERE \"Id\" = @Id";
|
||||
conn.Execute(updateSql, updated, transaction: tran);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -109,7 +109,6 @@ namespace NzbDrone.Core.Datastore
|
||||
|
||||
SqlMapper.RemoveTypeMap(typeof(DateTime));
|
||||
SqlMapper.AddTypeHandler(new DapperUtcConverter());
|
||||
SqlMapper.AddTypeHandler(new DapperTimeSpanConverter());
|
||||
SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<Dictionary<string, string>>());
|
||||
SqlMapper.AddTypeHandler(new CookieConverter());
|
||||
SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<List<int>>());
|
||||
@@ -123,6 +122,9 @@ namespace NzbDrone.Core.Datastore
|
||||
SqlMapper.RemoveTypeMap(typeof(Guid));
|
||||
SqlMapper.RemoveTypeMap(typeof(Guid?));
|
||||
SqlMapper.AddTypeHandler(new GuidConverter());
|
||||
SqlMapper.RemoveTypeMap(typeof(TimeSpan));
|
||||
SqlMapper.RemoveTypeMap(typeof(TimeSpan?));
|
||||
SqlMapper.AddTypeHandler(new TimeSpanConverter());
|
||||
SqlMapper.AddTypeHandler(new CommandConverter());
|
||||
SqlMapper.AddTypeHandler(new SystemVersionConverter());
|
||||
}
|
||||
|
||||
@@ -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.");
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace NzbDrone.Core.Download
|
||||
|
||||
foreach (var client in clients)
|
||||
{
|
||||
if (blockedClients.TryGetValue(client.Definition.Id, out var downloadClientStatus))
|
||||
if (blockedClients.TryGetValue(client.Definition.Id, out var downloadClientStatus) && downloadClientStatus.DisabledTill.HasValue)
|
||||
{
|
||||
_logger.Debug("Temporarily ignoring download client {0} till {1} due to recent failures.", client.Definition.Name, downloadClientStatus.DisabledTill.Value.ToLocalTime());
|
||||
continue;
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
||||
private readonly IHttpRequestBuilderFactory _cloudRequestBuilder;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public SystemTimeCheck(IHttpClient client, IProwlarrCloudRequestBuilder cloudRequestBuilder, ILocalizationService localizationService, Logger logger)
|
||||
public SystemTimeCheck(IHttpClient client, IProwlarrCloudRequestBuilder cloudRequestBuilder, Logger logger, ILocalizationService localizationService)
|
||||
: base(localizationService)
|
||||
{
|
||||
_client = client;
|
||||
@@ -29,19 +29,26 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
||||
return new HealthCheck(GetType());
|
||||
}
|
||||
|
||||
var request = _cloudRequestBuilder.Create()
|
||||
.Resource("/time")
|
||||
.Build();
|
||||
|
||||
var response = _client.Execute(request);
|
||||
var result = Json.Deserialize<ServiceTimeResponse>(response.Content);
|
||||
var systemTime = DateTime.UtcNow;
|
||||
|
||||
// +/- more than 1 day
|
||||
if (Math.Abs(result.DateTimeUtc.Subtract(systemTime).TotalDays) >= 1)
|
||||
try
|
||||
{
|
||||
_logger.Error("System time mismatch. SystemTime: {0} Expected Time: {1}. Update system time", systemTime, result.DateTimeUtc);
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, _localizationService.GetLocalizedString("SystemTimeCheckMessage"));
|
||||
var request = _cloudRequestBuilder.Create()
|
||||
.Resource("/time")
|
||||
.Build();
|
||||
|
||||
var response = _client.Execute(request);
|
||||
var result = Json.Deserialize<ServiceTimeResponse>(response.Content);
|
||||
var systemTime = DateTime.UtcNow;
|
||||
|
||||
// +/- more than 1 day
|
||||
if (Math.Abs(result.DateTimeUtc.Subtract(systemTime).TotalDays) >= 1)
|
||||
{
|
||||
_logger.Error("System time mismatch. SystemTime: {0} Expected Time: {1}. Update system time", systemTime, result.DateTimeUtc);
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, _localizationService.GetLocalizedString("SystemTimeHealthCheckMessage"), "#system-time-off");
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.Warn(e, "Unable to verify system time");
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType());
|
||||
|
||||
@@ -301,6 +301,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
};
|
||||
private static readonly HashSet<string> ExcludedFileExtensions = new (StringComparer.OrdinalIgnoreCase) { ".mka", ".mds", ".md5", ".nfo", ".sfv", ".ass", ".mks", ".srt", ".ssa", ".sup", ".jpeg", ".jpg", ".png", ".otf", ".ttf" };
|
||||
|
||||
private static readonly string[] PropertiesSeparator = { " | ", " / " };
|
||||
|
||||
private readonly AnimeBytesSettings _settings;
|
||||
|
||||
public AnimeBytesParser(AnimeBytesSettings settings)
|
||||
@@ -324,6 +326,11 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
var response = STJson.Deserialize<AnimeBytesResponse>(indexerResponse.Content);
|
||||
|
||||
if (response.Error.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
throw new IndexerException(indexerResponse, "Unexpected response from indexer request: {0}", response.Error);
|
||||
}
|
||||
|
||||
if (response.Matches == 0)
|
||||
{
|
||||
return releaseInfos.ToArray();
|
||||
@@ -393,38 +400,48 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
var minimumSeedTime = 259200 + (int)(size / (int)Math.Pow(1024, 3) * 18000);
|
||||
|
||||
var propertyList = WebUtility.HtmlDecode(torrent.Property)
|
||||
.Split(new[] { " | ", " / " }, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)
|
||||
.Split(PropertiesSeparator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)
|
||||
.ToList();
|
||||
|
||||
propertyList.RemoveAll(p => ExcludedProperties.Any(p.ContainsIgnoreCase));
|
||||
var properties = propertyList.ToHashSet();
|
||||
|
||||
if (torrent.Files.Any(f => f.FileName.ContainsIgnoreCase("Remux")))
|
||||
{
|
||||
var resolutionProperty = properties.FirstOrDefault(RemuxResolutions.ContainsIgnoreCase);
|
||||
|
||||
if (resolutionProperty.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
properties.Add($"{resolutionProperty} Remux");
|
||||
}
|
||||
}
|
||||
|
||||
if (properties.Any(p => p.StartsWithIgnoreCase("M2TS")))
|
||||
if (properties.Any(p => p.StartsWith("M2TS", StringComparison.Ordinal)))
|
||||
{
|
||||
properties.Add("BR-DISK");
|
||||
}
|
||||
|
||||
if (_settings.ExcludeRaw &&
|
||||
properties.Any(p => p.StartsWithIgnoreCase("RAW") || p.Contains("BR-DISK")))
|
||||
var isBluRayDisk = properties.Any(p => p.Equals("RAW", StringComparison.Ordinal) || p.StartsWith("M2TS", StringComparison.Ordinal) || p.StartsWith("ISO", StringComparison.Ordinal));
|
||||
|
||||
if (_settings.ExcludeRaw && isBluRayDisk)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
properties = properties
|
||||
.Select(property =>
|
||||
{
|
||||
if (isBluRayDisk)
|
||||
{
|
||||
property = Regex.Replace(property, @"\b(H\.?265)\b", "HEVC", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
property = Regex.Replace(property, @"\b(H\.?264)\b", "AVC", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
}
|
||||
|
||||
if (torrent.Files.Any(f => f.FileName.ContainsIgnoreCase("Remux"))
|
||||
&& RemuxResolutions.ContainsIgnoreCase(property))
|
||||
{
|
||||
property += " Remux";
|
||||
}
|
||||
|
||||
return property;
|
||||
})
|
||||
.ToHashSet();
|
||||
|
||||
int? season = null;
|
||||
int? episode = null;
|
||||
|
||||
var releaseInfo = _settings.EnableSonarrCompatibility && categoryName == "Anime" ? "S01" : "";
|
||||
var editionTitle = torrent.EditionData.EditionTitle;
|
||||
var editionTitle = torrent.EditionData?.EditionTitle;
|
||||
|
||||
if (editionTitle.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
@@ -569,7 +586,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
if (_settings.UseFilenameForSingleEpisodes)
|
||||
{
|
||||
var files = torrent.Files;
|
||||
var files = torrent.Files.ToList();
|
||||
|
||||
if (files.Count > 1)
|
||||
{
|
||||
@@ -607,11 +624,13 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
}
|
||||
}
|
||||
|
||||
var useYearInTitle = year is > 0 && torrent.Files.Any(f => f.FileName.Contains(year.Value.ToString()));
|
||||
|
||||
foreach (var title in synonyms)
|
||||
{
|
||||
var releaseTitle = groupName is "Movie" or "Live Action Movie" ?
|
||||
$"{releaseGroup}{title} {year} {infoString}" :
|
||||
$"{releaseGroup}{title} {releaseInfo} {infoString}";
|
||||
$"{releaseGroup}{title}{(useYearInTitle ? $" {year}" : string.Empty)} {releaseInfo} {infoString}";
|
||||
|
||||
var guid = new Uri(details + "?nh=" + HashUtil.CalculateMd5(title));
|
||||
|
||||
@@ -650,7 +669,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var advancedSeasonRegex = new Regex(@"\b(?:(?<season>\d+)(?:st|nd|rd|th) Season|Season (?<season>\d+))\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
var seasonCharactersRegex = new Regex(@"(I{2,})$", RegexOptions.Compiled);
|
||||
var seasonNumberRegex = new Regex(@"\b(?<!Part[- ._])(?:S)?(?<season>[2-9])$", RegexOptions.Compiled);
|
||||
var seasonNumberRegex = new Regex(@"\b(?<!Part[- ._])(?<!\d[/])(?:S)?(?<season>[2-9])$", RegexOptions.Compiled);
|
||||
|
||||
foreach (var title in titles)
|
||||
{
|
||||
@@ -755,7 +774,9 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
public int Matches { get; set; }
|
||||
|
||||
[JsonPropertyName("Groups")]
|
||||
public AnimeBytesGroup[] Groups { get; set; }
|
||||
public IReadOnlyCollection<AnimeBytesGroup> Groups { get; set; }
|
||||
|
||||
public string Error { get; set; }
|
||||
}
|
||||
|
||||
public class AnimeBytesGroup
|
||||
@@ -783,16 +804,16 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
public string Image { get; set; }
|
||||
|
||||
[JsonPropertyName("SynonymnsV2")]
|
||||
public Dictionary<string, string> Synonymns { get; set; }
|
||||
public IReadOnlyDictionary<string, string> Synonymns { get; set; }
|
||||
|
||||
[JsonPropertyName("Description")]
|
||||
public string Description { get; set; }
|
||||
|
||||
[JsonPropertyName("Tags")]
|
||||
public List<string> Tags { get; set; }
|
||||
public IReadOnlyCollection<string> Tags { get; set; }
|
||||
|
||||
[JsonPropertyName("Torrents")]
|
||||
public List<AnimeBytesTorrent> Torrents { get; set; }
|
||||
public IReadOnlyCollection<AnimeBytesTorrent> Torrents { get; set; }
|
||||
}
|
||||
|
||||
public class AnimeBytesTorrent
|
||||
@@ -831,7 +852,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
public int FileCount { get; set; }
|
||||
|
||||
[JsonPropertyName("FileList")]
|
||||
public List<AnimeBytesFile> Files { get; set; }
|
||||
public IReadOnlyCollection<AnimeBytesFile> Files { get; set; }
|
||||
|
||||
[JsonPropertyName("UploadTime")]
|
||||
public string UploadTime { get; set; }
|
||||
|
||||
@@ -3,7 +3,6 @@ using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Html.Parser;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
@@ -44,46 +43,19 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
return new AnimeTorrentsParser(Settings, Capabilities.Categories);
|
||||
}
|
||||
|
||||
protected override async Task DoLogin()
|
||||
{
|
||||
UpdateCookies(null, null);
|
||||
|
||||
var loginUrl = Settings.BaseUrl + "login.php";
|
||||
|
||||
var loginPage = await ExecuteAuth(new HttpRequest(loginUrl));
|
||||
|
||||
var requestBuilder = new HttpRequestBuilder(loginUrl)
|
||||
{
|
||||
LogResponseContent = true,
|
||||
AllowAutoRedirect = true
|
||||
};
|
||||
|
||||
var authLoginRequest = requestBuilder
|
||||
.Post()
|
||||
.SetCookies(loginPage.GetCookies())
|
||||
.AddFormParameter("username", Settings.Username)
|
||||
.AddFormParameter("password", Settings.Password)
|
||||
.AddFormParameter("form", "login")
|
||||
.AddFormParameter("rememberme[]", "1")
|
||||
.SetHeader("Content-Type", "application/x-www-form-urlencoded")
|
||||
.SetHeader("Referer", loginUrl)
|
||||
.Build();
|
||||
|
||||
var response = await ExecuteAuth(authLoginRequest);
|
||||
|
||||
if (response.Content == null || !response.Content.Contains("logout.php"))
|
||||
{
|
||||
throw new IndexerAuthException("AnimeTorrents authentication failed");
|
||||
}
|
||||
|
||||
UpdateCookies(response.GetCookies(), DateTime.Now.AddDays(30));
|
||||
|
||||
_logger.Debug("AnimeTorrents authentication succeeded");
|
||||
}
|
||||
|
||||
protected override bool CheckIfLoginNeeded(HttpResponse httpResponse)
|
||||
{
|
||||
return httpResponse.Content.Contains("Access Denied!") || httpResponse.Content.Contains("login.php");
|
||||
if (httpResponse.Content.Contains("Access Denied!") || httpResponse.Content.Contains("login.php"))
|
||||
{
|
||||
throw new IndexerAuthException("AnimeTorrents authentication with cookies failed.");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override IDictionary<string, string> GetCookies()
|
||||
{
|
||||
return CookieUtil.CookieHeaderToDictionary(Settings.Cookie);
|
||||
}
|
||||
|
||||
private IndexerCapabilities SetCapabilities()
|
||||
@@ -119,6 +91,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
caps.Categories.AddCategoryMapping(17, NewznabStandardCategory.BooksComics, "Doujinshi");
|
||||
caps.Categories.AddCategoryMapping(18, NewznabStandardCategory.BooksComics, "Doujinshi 18+");
|
||||
caps.Categories.AddCategoryMapping(19, NewznabStandardCategory.Audio, "OST");
|
||||
caps.Categories.AddCategoryMapping(20, NewznabStandardCategory.AudioAudiobook, "Audiobooks");
|
||||
|
||||
return caps;
|
||||
}
|
||||
@@ -291,7 +264,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
var qTitleLink = row.QuerySelector("td:nth-of-type(2) a:nth-of-type(1)");
|
||||
var title = qTitleLink?.TextContent.Trim();
|
||||
|
||||
// If we search an get no results, we still get a table just with no info.
|
||||
// If we search and get no results, we still get a table just with no info.
|
||||
if (title.IsNullOrWhiteSpace())
|
||||
{
|
||||
break;
|
||||
@@ -306,6 +279,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
var connections = row.QuerySelector("td:nth-of-type(8)").TextContent.Trim().Split('/', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);
|
||||
var seeders = ParseUtil.CoerceInt(connections[0]);
|
||||
var leechers = ParseUtil.CoerceInt(connections[1]);
|
||||
var grabs = ParseUtil.CoerceInt(connections[2]);
|
||||
|
||||
var categoryLink = row.QuerySelector("td:nth-of-type(1) a")?.GetAttribute("href") ?? string.Empty;
|
||||
var categoryId = ParseUtil.GetArgumentFromQueryString(categoryLink, "cat");
|
||||
@@ -327,17 +302,17 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
PublishDate = publishedDate,
|
||||
Size = ParseUtil.GetBytes(row.QuerySelector("td:nth-of-type(6)").TextContent.Trim()),
|
||||
Seeders = seeders,
|
||||
Peers = ParseUtil.CoerceInt(connections[1]) + seeders,
|
||||
Grabs = ParseUtil.CoerceInt(connections[2]),
|
||||
Peers = leechers + seeders,
|
||||
Grabs = grabs,
|
||||
DownloadVolumeFactor = downloadVolumeFactor,
|
||||
UploadVolumeFactor = 1,
|
||||
Genres = row.QuerySelectorAll("td:nth-of-type(2) a.tortags").Select(t => t.TextContent.Trim()).ToList()
|
||||
};
|
||||
|
||||
var uLFactorImg = row.QuerySelector("img[alt*=\"x Multiplier Torrent\"]");
|
||||
if (uLFactorImg != null)
|
||||
var uploadFactor = row.QuerySelector("img[alt*=\"x Multiplier Torrent\"]")?.GetAttribute("alt");
|
||||
if (uploadFactor != null)
|
||||
{
|
||||
release.UploadVolumeFactor = ParseUtil.CoerceDouble(uLFactorImg.GetAttribute("alt").Split('x')[0]);
|
||||
release.UploadVolumeFactor = ParseUtil.CoerceDouble(uploadFactor.Split('x')[0]);
|
||||
}
|
||||
|
||||
releaseInfos.Add(release);
|
||||
@@ -349,7 +324,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
}
|
||||
|
||||
public class AnimeTorrentsSettings : UserPassTorrentBaseSettings
|
||||
public class AnimeTorrentsSettings : CookieTorrentBaseSettings
|
||||
{
|
||||
public AnimeTorrentsSettings()
|
||||
{
|
||||
@@ -360,7 +335,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
[FieldDefinition(4, Label = "Freeleech Only", Type = FieldType.Checkbox, HelpText = "Show freeleech torrents only")]
|
||||
public bool FreeleechOnly { get; set; }
|
||||
|
||||
[FieldDefinition(5, Label = "Downloadable Only", Type = FieldType.Checkbox, HelpText = "Search downloadable torrents only (enable this only if your account class is Newbie)")]
|
||||
[FieldDefinition(5, Label = "Downloadable Only", Type = FieldType.Checkbox, HelpText = "Search downloadable torrents only (enable this only if your account class is Newbie)", Advanced = true)]
|
||||
public bool DownloadableOnly { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,6 +84,6 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public class AvistaZParser : AvistazParserBase
|
||||
{
|
||||
protected override string TimezoneOffset => "+02:00";
|
||||
protected override string TimezoneOffset => "+01:00";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
{
|
||||
public class AvistazParserBase : IParseIndexerResponse
|
||||
{
|
||||
protected virtual string TimezoneOffset => "-04:00"; // Avistaz does not specify a timezone & returns server time
|
||||
protected virtual string TimezoneOffset => "-05:00"; // Avistaz does not specify a timezone & returns server time
|
||||
private readonly HashSet<string> _hdResolutions = new () { "1080p", "1080i", "720p" };
|
||||
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
return FilterReleasesByQuery(cleanReleases, searchCriteria).ToList();
|
||||
}
|
||||
|
||||
private IndexerCapabilities SetCapabilities()
|
||||
private static IndexerCapabilities SetCapabilities()
|
||||
{
|
||||
var caps = new IndexerCapabilities
|
||||
{
|
||||
@@ -69,7 +69,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
},
|
||||
Flags = new List<IndexerFlag>
|
||||
{
|
||||
IndexerFlag.Internal
|
||||
IndexerFlag.Internal,
|
||||
IndexerFlag.Exclusive,
|
||||
}
|
||||
};
|
||||
|
||||
@@ -91,7 +92,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
_capabilities = capabilities;
|
||||
}
|
||||
|
||||
private IEnumerable<IndexerRequest> GetPagedRequests(SearchCriteriaBase searchCriteria, string term, string imdbId = null, int tmdbId = 0)
|
||||
private IEnumerable<IndexerRequest> GetPagedRequests(SearchCriteriaBase searchCriteria, string searchTerm, string imdbId = null, int tmdbId = 0)
|
||||
{
|
||||
var body = new Dictionary<string, object>
|
||||
{
|
||||
@@ -128,9 +129,9 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
body.Add("tmdb_id", tmdbId);
|
||||
}
|
||||
|
||||
if (term.IsNotNullOrWhiteSpace())
|
||||
if (searchTerm.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
body.Add("search", term);
|
||||
body.Add("search", searchTerm.Trim());
|
||||
}
|
||||
|
||||
var cats = _capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories);
|
||||
@@ -198,7 +199,16 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
pageableRequests.Add(GetPagedRequests(searchCriteria, searchCriteria.SanitizedTvSearchString, searchCriteria.FullImdbId));
|
||||
var searchTerm = searchCriteria.SanitizedTvSearchString;
|
||||
|
||||
if (searchCriteria.Season is > 0 &&
|
||||
searchCriteria.Episode.IsNotNullOrWhiteSpace() &&
|
||||
DateTime.TryParseExact($"{searchCriteria.Season} {searchCriteria.Episode}", "yyyy MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var showDate))
|
||||
{
|
||||
searchTerm = $"{searchCriteria.SanitizedSearchTerm} {showDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}";
|
||||
}
|
||||
|
||||
pageableRequests.Add(GetPagedRequests(searchCriteria, searchTerm, searchCriteria.FullImdbId));
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
@@ -275,13 +285,6 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
var details = row.InfoUrl;
|
||||
var link = row.DownloadLink;
|
||||
|
||||
var flags = new HashSet<IndexerFlag>();
|
||||
|
||||
if (row.Internal)
|
||||
{
|
||||
flags.Add(IndexerFlag.Internal);
|
||||
}
|
||||
|
||||
var release = new TorrentInfo
|
||||
{
|
||||
Title = row.Name,
|
||||
@@ -291,7 +294,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
Guid = details,
|
||||
Categories = _categories.MapTrackerCatDescToNewznab(row.Category),
|
||||
PublishDate = DateTime.Parse(row.CreatedAt, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal),
|
||||
IndexerFlags = flags,
|
||||
IndexerFlags = GetIndexerFlags(row),
|
||||
Size = row.Size,
|
||||
Grabs = row.Grabs,
|
||||
Seeders = row.Seeders,
|
||||
@@ -319,6 +322,23 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private static HashSet<IndexerFlag> GetIndexerFlags(BeyondHDTorrent item)
|
||||
{
|
||||
var flags = new HashSet<IndexerFlag>();
|
||||
|
||||
if (item.Internal)
|
||||
{
|
||||
flags.Add(IndexerFlag.Internal);
|
||||
}
|
||||
|
||||
if (item.Exclusive)
|
||||
{
|
||||
flags.Add(IndexerFlag.Exclusive);
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
}
|
||||
|
||||
@@ -478,6 +498,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public bool Limited { get; set; }
|
||||
|
||||
public bool Exclusive { get; set; }
|
||||
|
||||
public bool Internal { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
|
||||
Guid = $"BTN-{torrent.TorrentID}",
|
||||
InfoUrl = $"{protocol}//broadcasthe.net/torrents.php?id={torrent.GroupID}&torrentid={torrent.TorrentID}",
|
||||
DownloadUrl = RegexProtocol.Replace(torrent.DownloadURL, protocol),
|
||||
Title = CleanReleaseName(torrent.ReleaseName),
|
||||
Title = GetTitle(torrent),
|
||||
Categories = _categories.MapTrackerCatToNewznab(torrent.Resolution),
|
||||
InfoHash = torrent.InfoHash,
|
||||
Size = torrent.Size,
|
||||
@@ -136,9 +136,17 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
|
||||
return releaseInfos;
|
||||
}
|
||||
|
||||
private string CleanReleaseName(string releaseName)
|
||||
private static string GetTitle(BroadcastheNetTorrent torrent)
|
||||
{
|
||||
return releaseName.Replace("\\", "");
|
||||
var releaseName = torrent.ReleaseName.Replace("\\", "");
|
||||
|
||||
if (torrent.Container.ToUpperInvariant() is "M2TS" or "ISO")
|
||||
{
|
||||
releaseName = Regex.Replace(releaseName, @"\b(H\.?265)\b", "HEVC", RegexOptions.Compiled);
|
||||
releaseName = Regex.Replace(releaseName, @"\b(H\.?264)\b", "AVC", RegexOptions.Compiled);
|
||||
}
|
||||
|
||||
return releaseName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
private readonly IndexerCapabilitiesCategories _categories;
|
||||
|
||||
protected override string TimezoneOffset => "+02:00";
|
||||
protected override string TimezoneOffset => "+01:00";
|
||||
|
||||
public ExoticaZParser(IndexerCapabilitiesCategories categories)
|
||||
{
|
||||
|
||||
@@ -101,7 +101,7 @@ public class FileListParser : IParseIndexerResponse
|
||||
var url = new HttpUri(_settings.BaseUrl)
|
||||
.CombinePath("/download.php")
|
||||
.AddQueryParam("id", torrentId.ToString())
|
||||
.AddQueryParam("passkey", _settings.Passkey);
|
||||
.AddQueryParam("passkey", _settings.Passkey.Trim());
|
||||
|
||||
return url.FullUri;
|
||||
}
|
||||
|
||||
@@ -95,3 +95,8 @@ public class GazelleIndexResponse
|
||||
public string Authkey { get; set; }
|
||||
public string Passkey { get; set; }
|
||||
}
|
||||
|
||||
public class GazelleErrorResponse
|
||||
{
|
||||
public string Error { get; init; }
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using System.Net;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Indexers.Exceptions;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
@@ -32,7 +33,9 @@ public class GazelleParser : IParseIndexerResponse
|
||||
// Remove cookie cache
|
||||
CookiesUpdater(null, null);
|
||||
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request");
|
||||
STJson.TryDeserialize<GazelleErrorResponse>(indexerResponse.Content, out var errorResponse);
|
||||
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}");
|
||||
}
|
||||
|
||||
if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value))
|
||||
|
||||
@@ -7,6 +7,7 @@ using Newtonsoft.Json;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers.Definitions.Gazelle;
|
||||
@@ -148,7 +149,9 @@ public class GreatPosterWallParser : GazelleParser
|
||||
throw new IndexerException(indexerResponse, $"Redirected to {indexerResponse.HttpResponse.RedirectUrl} from indexer request");
|
||||
}
|
||||
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request");
|
||||
STJson.TryDeserialize<GazelleErrorResponse>(indexerResponse.Content, out var errorResponse);
|
||||
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}");
|
||||
}
|
||||
|
||||
if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value))
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
return new HDBitsParser(Settings, Capabilities.Categories);
|
||||
}
|
||||
|
||||
private IndexerCapabilities SetCapabilities()
|
||||
private static IndexerCapabilities SetCapabilities()
|
||||
{
|
||||
var caps = new IndexerCapabilities
|
||||
{
|
||||
@@ -43,6 +43,11 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
MovieSearchParams = new List<MovieSearchParam>
|
||||
{
|
||||
MovieSearchParam.Q, MovieSearchParam.ImdbId
|
||||
},
|
||||
Flags = new List<IndexerFlag>
|
||||
{
|
||||
IndexerFlag.Internal,
|
||||
IndexerFlag.Exclusive,
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -85,6 +85,9 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
[JsonProperty(PropertyName = "type_origin")]
|
||||
public int TypeOrigin { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName = "type_exclusive")]
|
||||
public int TypeExclusive { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName = "imdb")]
|
||||
public ImdbInfo ImdbInfo { get; set; }
|
||||
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
{
|
||||
public class HDBitsInfo : TorrentInfo
|
||||
{
|
||||
public bool? Internal { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -62,16 +62,8 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
}
|
||||
|
||||
var id = result.Id;
|
||||
var internalRelease = result.TypeOrigin == 1;
|
||||
|
||||
var flags = new HashSet<IndexerFlag>();
|
||||
|
||||
if (internalRelease)
|
||||
{
|
||||
flags.Add(IndexerFlag.Internal);
|
||||
}
|
||||
|
||||
releaseInfos.Add(new HDBitsInfo
|
||||
releaseInfos.Add(new TorrentInfo
|
||||
{
|
||||
Guid = $"HDBits-{id}",
|
||||
Title = GetTitle(result),
|
||||
@@ -85,28 +77,43 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
Files = (int)result.NumFiles,
|
||||
Peers = result.Leechers + result.Seeders,
|
||||
PublishDate = result.Added.ToUniversalTime(),
|
||||
Internal = internalRelease,
|
||||
Year = result.ImdbInfo?.Year ?? 0,
|
||||
ImdbId = result.ImdbInfo?.Id ?? 0,
|
||||
TvdbId = result.TvdbInfo?.Id ?? 0,
|
||||
DownloadVolumeFactor = GetDownloadVolumeFactor(result),
|
||||
UploadVolumeFactor = GetUploadVolumeFactor(result),
|
||||
IndexerFlags = flags
|
||||
IndexerFlags = GetIndexerFlags(result)
|
||||
});
|
||||
}
|
||||
|
||||
return releaseInfos.ToArray();
|
||||
}
|
||||
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
|
||||
private string GetTitle(TorrentQueryResponse item)
|
||||
{
|
||||
return _settings.UseFilenames && item.FileName.IsNotNullOrWhiteSpace()
|
||||
// Use release name for XXX content and full discs
|
||||
return item.TypeCategory != 7 && item.TypeMedium != 1 && _settings.UseFilenames && item.FileName.IsNotNullOrWhiteSpace()
|
||||
? item.FileName.Replace(".torrent", "", StringComparison.InvariantCultureIgnoreCase)
|
||||
: item.Name;
|
||||
}
|
||||
|
||||
private static HashSet<IndexerFlag> GetIndexerFlags(TorrentQueryResponse item)
|
||||
{
|
||||
var flags = new HashSet<IndexerFlag>();
|
||||
|
||||
if (item.TypeOrigin == 1)
|
||||
{
|
||||
flags.Add(IndexerFlag.Internal);
|
||||
}
|
||||
|
||||
if (item.TypeExclusive == 1)
|
||||
{
|
||||
flags.Add(IndexerFlag.Exclusive);
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
private double GetDownloadVolumeFactor(TorrentQueryResponse item)
|
||||
{
|
||||
if (item.FreeLeech == "yes")
|
||||
@@ -153,5 +160,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
|
||||
return url.FullUri;
|
||||
}
|
||||
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -403,10 +403,13 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
private static string CleanTitle(string title)
|
||||
{
|
||||
// drop invalid chars that seems to have cropped up in some titles. #6582
|
||||
// Drop invalid chars that seems to have cropped up in some titles. #6582
|
||||
title = Regex.Replace(title, @"[\u0000-\u0008\u000A-\u001F\u0100-\uFFFF]", string.Empty, RegexOptions.Compiled);
|
||||
title = Regex.Replace(title, @"[\(\[\{]REQ(UEST(ED)?)?[\)\]\}]", string.Empty, RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
// Drop languages between brackets conflicting with anime release group parsing
|
||||
title = Regex.Replace(title, @"^\[[a-z0-9 ._-]+\][-._ ](?<title>.*-[a-z0-9]+)$", "${title}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
return title.Trim(' ', '-', ':');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
protected override bool CheckIfLoginNeeded(HttpResponse httpResponse)
|
||||
{
|
||||
return httpResponse.Content.Contains("You do not have permission to access this page.");
|
||||
return !httpResponse.Content.Contains("logout.php");
|
||||
}
|
||||
|
||||
private IndexerCapabilities SetCapabilities()
|
||||
|
||||
@@ -23,7 +23,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
public class Knaben : TorrentIndexerBase<NoAuthTorrentBaseSettings>
|
||||
{
|
||||
public override string Name => "Knaben";
|
||||
public override string[] IndexerUrls => new[] { "https://knaben.eu/" };
|
||||
public override string[] IndexerUrls => new[] { "https://knaben.org/" };
|
||||
public override string[] LegacyUrls => new[] { "https://knaben.eu/" };
|
||||
public override string Description => "Knaben is a Public torrent meta-search engine";
|
||||
public override IndexerPrivacy Privacy => IndexerPrivacy.Public;
|
||||
public override IndexerCapabilities Capabilities => SetCapabilities();
|
||||
@@ -145,7 +146,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public class KnabenRequestGenerator : IIndexerRequestGenerator
|
||||
{
|
||||
private const string API_SEARCH_ENDPOINT = "https://api.knaben.eu/v1";
|
||||
private const string ApiSearchEndpoint = "https://api.knaben.org/v1";
|
||||
|
||||
private readonly IndexerCapabilities _capabilities;
|
||||
|
||||
@@ -226,7 +227,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
body.Add("categories", categories.Select(int.Parse).Distinct().ToArray());
|
||||
}
|
||||
|
||||
var request = new HttpRequest(API_SEARCH_ENDPOINT, HttpAccept.Json)
|
||||
var request = new HttpRequest(ApiSearchEndpoint, HttpAccept.Json)
|
||||
{
|
||||
Headers =
|
||||
{
|
||||
|
||||
@@ -19,7 +19,6 @@ using NzbDrone.Core.Indexers.Exceptions;
|
||||
using NzbDrone.Core.Indexers.Settings;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
@@ -385,11 +384,6 @@ public class MTeamTpParser : IParseIndexerResponse
|
||||
MinimumSeedTime = 172800 // 2 days
|
||||
};
|
||||
|
||||
if (torrent.Imdb.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
release.ImdbId = ParseUtil.GetImdbId(torrent.Imdb.TrimEnd('/').Split('/').LastOrDefault()).GetValueOrDefault();
|
||||
}
|
||||
|
||||
if (torrent.Status?.CreatedDate != null &&
|
||||
DateTime.TryParseExact($"{torrent.Status.CreatedDate} +08:00", "yyyy-MM-dd HH:mm:ss zzz", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var publishDate))
|
||||
{
|
||||
|
||||
@@ -16,6 +16,7 @@ using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Exceptions;
|
||||
using NzbDrone.Core.Indexers.Exceptions;
|
||||
using NzbDrone.Core.Indexers.Settings;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
@@ -36,8 +37,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
public override bool SupportsPagination => true;
|
||||
public override int PageSize => 100;
|
||||
public override IndexerCapabilities Capabilities => SetCapabilities();
|
||||
|
||||
private readonly ICacheManager _cacheManager;
|
||||
private static readonly Regex TorrentIdRegex = new Regex(@"tor/download.php\?tid=(?<id>\d+)$");
|
||||
|
||||
public MyAnonamouse(IIndexerHttpClient httpClient, IEventAggregator eventAggregator, IIndexerStatusService indexerStatusService, IConfigService configService, Logger logger, ICacheManager cacheManager)
|
||||
: base(httpClient, eventAggregator, indexerStatusService, configService, logger)
|
||||
@@ -59,39 +60,66 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var downloadLink = link.RemoveQueryParam("canUseToken");
|
||||
|
||||
if (Settings.Freeleech && bool.TryParse(link.GetQueryParam("canUseToken"), out var canUseToken) && canUseToken)
|
||||
if (Settings.UseFreeleechWedge is (int)MyAnonamouseFreeleechWedgeAction.Preferred or (int)MyAnonamouseFreeleechWedgeAction.Required &&
|
||||
bool.TryParse(link.GetQueryParam("canUseToken"), out var canUseToken) && canUseToken)
|
||||
{
|
||||
_logger.Debug("Attempting to use freeleech token for {0}", downloadLink.AbsoluteUri);
|
||||
_logger.Debug("Attempting to use freeleech wedge for {0}", downloadLink.AbsoluteUri);
|
||||
|
||||
var idMatch = TorrentIdRegex.Match(downloadLink.AbsoluteUri);
|
||||
if (idMatch.Success)
|
||||
if (int.TryParse(link.GetQueryParam("tid"), out var torrentId) && torrentId > 0)
|
||||
{
|
||||
var id = int.Parse(idMatch.Groups["id"].Value);
|
||||
var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
||||
var freeleechUrl = Settings.BaseUrl + $"json/bonusBuy.php/{timestamp}";
|
||||
|
||||
var freeleechRequest = new HttpRequestBuilder(freeleechUrl)
|
||||
var freeleechRequestBuilder = new HttpRequestBuilder(freeleechUrl)
|
||||
.Accept(HttpAccept.Json)
|
||||
.AddQueryParam("spendtype", "personalFL")
|
||||
.AddQueryParam("torrentid", id)
|
||||
.AddQueryParam("timestamp", timestamp.ToString())
|
||||
.Build();
|
||||
.AddQueryParam("torrentid", torrentId)
|
||||
.AddQueryParam("timestamp", timestamp.ToString());
|
||||
|
||||
var indexerReq = new IndexerRequest(freeleechRequest);
|
||||
var response = await FetchIndexerResponse(indexerReq).ConfigureAwait(false);
|
||||
var resource = Json.Deserialize<MyAnonamouseBuyPersonalFreeleechResponse>(response.Content);
|
||||
freeleechRequestBuilder.LogResponseContent = true;
|
||||
|
||||
var cookies = GetCookies();
|
||||
|
||||
if (cookies != null && cookies.Any())
|
||||
{
|
||||
freeleechRequestBuilder.SetCookies(cookies);
|
||||
}
|
||||
|
||||
var freeleechRequest = freeleechRequestBuilder.Build();
|
||||
|
||||
var freeleechResponse = await _httpClient.ExecuteProxiedAsync(freeleechRequest, Definition).ConfigureAwait(false);
|
||||
|
||||
var resource = Json.Deserialize<MyAnonamouseBuyPersonalFreeleechResponse>(freeleechResponse.Content);
|
||||
|
||||
if (resource.Success)
|
||||
{
|
||||
_logger.Debug("Successfully to used freeleech token for torrentid {0}", id);
|
||||
_logger.Debug("Successfully used freeleech wedge for torrentid {0}.", torrentId);
|
||||
}
|
||||
else if (resource.Error.IsNotNullOrWhiteSpace() && resource.Error.ContainsIgnoreCase("This Torrent is VIP"))
|
||||
{
|
||||
_logger.Debug("{0} is already VIP, continuing downloading: {1}", torrentId, resource.Error);
|
||||
}
|
||||
else if (resource.Error.IsNotNullOrWhiteSpace() && resource.Error.ContainsIgnoreCase("This is already a personal freeleech"))
|
||||
{
|
||||
_logger.Debug("{0} is already a personal freeleech, continuing downloading: {1}", torrentId, resource.Error);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Debug("Failed to use freeleech token: {0}", resource.Error);
|
||||
_logger.Warn("Failed to purchase freeleech wedge for {0}: {1}", torrentId, resource.Error);
|
||||
|
||||
if (Settings.UseFreeleechWedge == (int)MyAnonamouseFreeleechWedgeAction.Preferred)
|
||||
{
|
||||
_logger.Debug("'Use Freeleech Wedge' option set to preferred, continuing downloading: '{0}'", downloadLink.AbsoluteUri);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ReleaseUnavailableException($"Failed to buy freeleech wedge and 'Use Freeleech Wedge' is set to required, aborting download: '{downloadLink.AbsoluteUri}'");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Debug("Could not get torrent id from link {0}, skipping freeleech", downloadLink.AbsoluteUri);
|
||||
_logger.Warn("Could not get torrent id from link {0}, skipping use of freeleech wedge.", downloadLink.AbsoluteUri);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -294,14 +322,21 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
parameters.Set("tor[srchIn][filenames]", "true");
|
||||
}
|
||||
|
||||
var catList = _capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories);
|
||||
if (_settings.SearchLanguages.Any())
|
||||
{
|
||||
foreach (var (language, index) in _settings.SearchLanguages.Select((value, index) => (value, index)))
|
||||
{
|
||||
parameters.Set($"tor[browse_lang][{index}]", language.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
var catList = _capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories).Distinct().ToList();
|
||||
|
||||
if (catList.Any())
|
||||
{
|
||||
var index = 0;
|
||||
foreach (var cat in catList)
|
||||
foreach (var (category, index) in catList.Select((value, index) => (value, index)))
|
||||
{
|
||||
parameters.Set("tor[cat][" + index + "]", cat);
|
||||
index++;
|
||||
parameters.Set($"tor[cat][{index}]", category);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -441,6 +476,11 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
return releaseInfos.ToArray();
|
||||
}
|
||||
|
||||
if (jsonResponse.Data == null)
|
||||
{
|
||||
throw new IndexerException(indexerResponse, "Unexpected response content from indexer request: {0}", jsonResponse.Message ?? "Check the logs for more information.");
|
||||
}
|
||||
|
||||
var hasUserVip = HasUserVip(httpResponse.GetCookies());
|
||||
|
||||
foreach (var item in jsonResponse.Data)
|
||||
@@ -523,7 +563,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
.CombinePath("/tor/download.php")
|
||||
.AddQueryParam("tid", torrentId);
|
||||
|
||||
if (_settings.Freeleech && canUseToken)
|
||||
if (_settings.UseFreeleechWedge is (int)MyAnonamouseFreeleechWedgeAction.Preferred or (int)MyAnonamouseFreeleechWedgeAction.Required && canUseToken)
|
||||
{
|
||||
url = url.AddQueryParam("canUseToken", "true");
|
||||
}
|
||||
@@ -548,8 +588,11 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
_logger.Debug("Fetching user data: {0}", request.Url.FullUri);
|
||||
|
||||
var response = _httpClient.ExecuteProxied(request, _definition);
|
||||
|
||||
var jsonResponse = JsonConvert.DeserializeObject<MyAnonamouseUserDataResponse>(response.Content);
|
||||
|
||||
_logger.Trace("Current user class: '{0}'", jsonResponse.UserClass);
|
||||
|
||||
return jsonResponse.UserClass?.Trim();
|
||||
},
|
||||
TimeSpan.FromHours(1));
|
||||
@@ -579,6 +622,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
SearchInDescription = false;
|
||||
SearchInSeries = false;
|
||||
SearchInFilenames = false;
|
||||
SearchLanguages = Array.Empty<int>();
|
||||
UseFreeleechWedge = (int)MyAnonamouseFreeleechWedgeAction.Never;
|
||||
}
|
||||
|
||||
[FieldDefinition(2, Type = FieldType.Textbox, Label = "Mam Id", HelpText = "Mam Session Id (Created Under Preferences -> Security)")]
|
||||
@@ -587,18 +632,21 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
[FieldDefinition(3, Type = FieldType.Select, Label = "Search Type", SelectOptions = typeof(MyAnonamouseSearchType), HelpText = "Specify the desired search type")]
|
||||
public int SearchType { get; set; }
|
||||
|
||||
[FieldDefinition(4, Type = FieldType.Checkbox, Label = "Use Freeleech Wedges", HelpText = "Use freeleech wedges to make grabbed torrents personal freeleech")]
|
||||
public bool Freeleech { get; set; }
|
||||
|
||||
[FieldDefinition(5, Type = FieldType.Checkbox, Label = "Search in description", HelpText = "Search text in the description")]
|
||||
[FieldDefinition(4, Type = FieldType.Checkbox, Label = "Search in description", HelpText = "Search text in the description")]
|
||||
public bool SearchInDescription { get; set; }
|
||||
|
||||
[FieldDefinition(6, Type = FieldType.Checkbox, Label = "Search in series", HelpText = "Search text in the series")]
|
||||
[FieldDefinition(5, Type = FieldType.Checkbox, Label = "Search in series", HelpText = "Search text in the series")]
|
||||
public bool SearchInSeries { get; set; }
|
||||
|
||||
[FieldDefinition(7, Type = FieldType.Checkbox, Label = "Search in filenames", HelpText = "Search text in the filenames")]
|
||||
[FieldDefinition(6, Type = FieldType.Checkbox, Label = "Search in filenames", HelpText = "Search text in the filenames")]
|
||||
public bool SearchInFilenames { get; set; }
|
||||
|
||||
[FieldDefinition(7, Type = FieldType.Select, Label = "Search Languages", SelectOptions = typeof(MyAnonamouseSearchLanguages), HelpText = "Specify the desired languages. If unspecified, all options are used.")]
|
||||
public IEnumerable<int> SearchLanguages { get; set; }
|
||||
|
||||
[FieldDefinition(8, Type = FieldType.Select, Label = "Use Freeleech Wedges", SelectOptions = typeof(MyAnonamouseFreeleechWedgeAction), HelpText = "Use freeleech wedges to make grabbed torrents personal freeleech")]
|
||||
public int UseFreeleechWedge { get; set; }
|
||||
|
||||
public override NzbDroneValidationResult Validate()
|
||||
{
|
||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||
@@ -626,6 +674,210 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
NotVip = 5,
|
||||
}
|
||||
|
||||
public enum MyAnonamouseSearchLanguages
|
||||
{
|
||||
[FieldOption(Label="English")]
|
||||
English = 1,
|
||||
|
||||
[FieldOption(Label="Afrikaans")]
|
||||
Afrikaans = 17,
|
||||
|
||||
[FieldOption(Label="Arabic")]
|
||||
Arabic = 32,
|
||||
|
||||
[FieldOption(Label="Bengali")]
|
||||
Bengali = 35,
|
||||
|
||||
[FieldOption(Label="Bosnian")]
|
||||
Bosnian = 51,
|
||||
|
||||
[FieldOption(Label="Bulgarian")]
|
||||
Bulgarian = 18,
|
||||
|
||||
[FieldOption(Label="Burmese")]
|
||||
Burmese = 6,
|
||||
|
||||
[FieldOption(Label="Cantonese")]
|
||||
Cantonese = 44,
|
||||
|
||||
[FieldOption(Label="Catalan")]
|
||||
Catalan = 19,
|
||||
|
||||
[FieldOption(Label="Chinese")]
|
||||
Chinese = 2,
|
||||
|
||||
[FieldOption(Label="Croatian")]
|
||||
Croatian = 49,
|
||||
|
||||
[FieldOption(Label="Czech")]
|
||||
Czech = 20,
|
||||
|
||||
[FieldOption(Label="Danish")]
|
||||
Danish = 21,
|
||||
|
||||
[FieldOption(Label="Dutch")]
|
||||
Dutch = 22,
|
||||
|
||||
[FieldOption(Label="Estonian")]
|
||||
Estonian = 61,
|
||||
|
||||
[FieldOption(Label="Farsi")]
|
||||
Farsi = 39,
|
||||
|
||||
[FieldOption(Label="Finnish")]
|
||||
Finnish = 23,
|
||||
|
||||
[FieldOption(Label="French")]
|
||||
French = 36,
|
||||
|
||||
[FieldOption(Label="German")]
|
||||
German = 37,
|
||||
|
||||
[FieldOption(Label="Greek")]
|
||||
Greek = 26,
|
||||
|
||||
[FieldOption(Label="Greek, Ancient")]
|
||||
GreekAncient = 59,
|
||||
|
||||
[FieldOption(Label="Gujarati")]
|
||||
Gujarati = 3,
|
||||
|
||||
[FieldOption(Label="Hebrew")]
|
||||
Hebrew = 27,
|
||||
|
||||
[FieldOption(Label="Hindi")]
|
||||
Hindi = 8,
|
||||
|
||||
[FieldOption(Label="Hungarian")]
|
||||
Hungarian = 28,
|
||||
|
||||
[FieldOption(Label="Icelandic")]
|
||||
Icelandic = 63,
|
||||
|
||||
[FieldOption(Label="Indonesian")]
|
||||
Indonesian = 53,
|
||||
|
||||
[FieldOption(Label="Irish")]
|
||||
Irish = 56,
|
||||
|
||||
[FieldOption(Label="Italian")]
|
||||
Italian = 43,
|
||||
|
||||
[FieldOption(Label="Japanese")]
|
||||
Japanese = 38,
|
||||
|
||||
[FieldOption(Label="Javanese")]
|
||||
Javanese = 12,
|
||||
|
||||
[FieldOption(Label="Kannada")]
|
||||
Kannada = 5,
|
||||
|
||||
[FieldOption(Label="Korean")]
|
||||
Korean = 41,
|
||||
|
||||
[FieldOption(Label="Lithuanian")]
|
||||
Lithuanian = 50,
|
||||
|
||||
[FieldOption(Label="Latin")]
|
||||
Latin = 46,
|
||||
|
||||
[FieldOption(Label="Latvian")]
|
||||
Latvian = 62,
|
||||
|
||||
[FieldOption(Label="Malay")]
|
||||
Malay = 33,
|
||||
|
||||
[FieldOption(Label="Malayalam")]
|
||||
Malayalam = 58,
|
||||
|
||||
[FieldOption(Label="Manx")]
|
||||
Manx = 57,
|
||||
|
||||
[FieldOption(Label="Marathi")]
|
||||
Marathi = 9,
|
||||
|
||||
[FieldOption(Label="Norwegian")]
|
||||
Norwegian = 48,
|
||||
|
||||
[FieldOption(Label="Polish")]
|
||||
Polish = 45,
|
||||
|
||||
[FieldOption(Label="Portuguese")]
|
||||
Portuguese = 34,
|
||||
|
||||
[FieldOption(Label="Brazilian Portuguese (BP)")]
|
||||
BrazilianPortuguese = 52,
|
||||
|
||||
[FieldOption(Label="Punjabi")]
|
||||
Punjabi = 14,
|
||||
|
||||
[FieldOption(Label="Romanian")]
|
||||
Romanian = 30,
|
||||
|
||||
[FieldOption(Label="Russian")]
|
||||
Russian = 16,
|
||||
|
||||
[FieldOption(Label="Scottish Gaelic")]
|
||||
ScottishGaelic = 24,
|
||||
|
||||
[FieldOption(Label="Sanskrit")]
|
||||
Sanskrit = 60,
|
||||
|
||||
[FieldOption(Label="Serbian")]
|
||||
Serbian = 31,
|
||||
|
||||
[FieldOption(Label="Slovenian")]
|
||||
Slovenian = 54,
|
||||
|
||||
[FieldOption(Label="Spanish")]
|
||||
Spanish = 4,
|
||||
|
||||
[FieldOption(Label="Castilian Spanish")]
|
||||
CastilianSpanish = 55,
|
||||
|
||||
[FieldOption(Label="Swedish")]
|
||||
Swedish = 40,
|
||||
|
||||
[FieldOption(Label="Tagalog")]
|
||||
Tagalog = 29,
|
||||
|
||||
[FieldOption(Label="Tamil")]
|
||||
Tamil = 11,
|
||||
|
||||
[FieldOption(Label="Telugu")]
|
||||
Telugu = 10,
|
||||
|
||||
[FieldOption(Label="Thai")]
|
||||
Thai = 7,
|
||||
|
||||
[FieldOption(Label="Turkish")]
|
||||
Turkish = 42,
|
||||
|
||||
[FieldOption(Label="Ukrainian")]
|
||||
Ukrainian = 25,
|
||||
|
||||
[FieldOption(Label="Urdu")]
|
||||
Urdu = 15,
|
||||
|
||||
[FieldOption(Label="Vietnamese")]
|
||||
Vietnamese = 13,
|
||||
|
||||
[FieldOption(Label="Other")]
|
||||
Other = 47,
|
||||
}
|
||||
|
||||
public enum MyAnonamouseFreeleechWedgeAction
|
||||
{
|
||||
[FieldOption(Label = "Never", Hint = "Do not buy as freeleech")]
|
||||
Never = 0,
|
||||
|
||||
[FieldOption(Label = "Preferred", Hint = "Buy and use wedge if possible")]
|
||||
Preferred = 1,
|
||||
|
||||
[FieldOption(Label = "Required", Hint = "Abort download if unable to buy wedge")]
|
||||
Required = 2,
|
||||
}
|
||||
|
||||
public class MyAnonamouseTorrent
|
||||
{
|
||||
public int Id { get; set; }
|
||||
@@ -655,7 +907,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
public class MyAnonamouseResponse
|
||||
{
|
||||
public string Error { get; set; }
|
||||
public List<MyAnonamouseTorrent> Data { get; set; }
|
||||
public IReadOnlyCollection<MyAnonamouseTorrent> Data { get; set; }
|
||||
public string Message { get; set; }
|
||||
}
|
||||
|
||||
public class MyAnonamouseBuyPersonalFreeleechResponse
|
||||
@@ -666,7 +919,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public class MyAnonamouseUserDataResponse
|
||||
{
|
||||
[JsonProperty(PropertyName = "class")]
|
||||
[JsonProperty(PropertyName = "classname")]
|
||||
public string UserClass { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -322,7 +322,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
ApiKey = "";
|
||||
}
|
||||
|
||||
[FieldDefinition(4, Label = "ApiKey", HelpText = "IndexerNebulanceSettingsApiKeyHelpText")]
|
||||
[FieldDefinition(2, Label = "ApiKey", HelpText = "IndexerNebulanceSettingsApiKeyHelpText", Privacy = PrivacyLevel.ApiKey)]
|
||||
public string ApiKey { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
parameters.Set("tvdbid", searchCriteria.TvdbId.Value.ToString());
|
||||
}
|
||||
|
||||
if (searchCriteria.TmdbId.HasValue && capabilities.TvSearchTvdbAvailable)
|
||||
if (searchCriteria.TmdbId.HasValue && capabilities.TvSearchTmdbAvailable)
|
||||
{
|
||||
parameters.Set("tmdbid", searchCriteria.TmdbId.Value.ToString());
|
||||
}
|
||||
|
||||
@@ -42,7 +42,8 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
|
||||
RuleFor(c => c.VipExpiration).Must(c => c.IsFutureDate())
|
||||
.When(c => c.VipExpiration.IsNotNullOrWhiteSpace())
|
||||
.WithMessage("Must be a future date");
|
||||
.WithMessage("Must be a future date")
|
||||
.AsWarning();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -129,26 +129,14 @@ public class NorBits : TorrentIndexerBase<NorBitsSettings>
|
||||
}
|
||||
};
|
||||
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=49", NewznabStandardCategory.MoviesUHD, "Filmer - UHD-2160p");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=19", NewznabStandardCategory.MoviesHD, "Filmer - HD-1080p/i");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=20", NewznabStandardCategory.MoviesHD, "Filmer - HD-720p");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=22", NewznabStandardCategory.MoviesSD, "Filmer - SD");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=49", NewznabStandardCategory.TVUHD, "TV - UHD-2160p");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=19", NewznabStandardCategory.TVHD, "TV - HD-1080p/i");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=20", NewznabStandardCategory.TVHD, "TV - HD-720p");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=22", NewznabStandardCategory.TVSD, "TV - SD");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=1", NewznabStandardCategory.Movies, "Filmer");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=2", NewznabStandardCategory.TV, "TV");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=3", NewznabStandardCategory.PC, "Programmer");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=4", NewznabStandardCategory.Console, "Spill");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=42", NewznabStandardCategory.AudioMP3, "Musikk - 192");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=43", NewznabStandardCategory.AudioMP3, "Musikk - 256");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=44", NewznabStandardCategory.AudioMP3, "Musikk - 320");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=45", NewznabStandardCategory.AudioMP3, "Musikk - VBR");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=46", NewznabStandardCategory.AudioLossless, "Musikk - Lossless");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=5", NewznabStandardCategory.Audio, "Musikk");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=6", NewznabStandardCategory.Books, "Tidsskrift");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=7", NewznabStandardCategory.AudioAudiobook, "Lydbøker");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=8&sub2_cat[]=19", NewznabStandardCategory.AudioVideo, "Musikkvideoer - HD-1080p/i");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=8&sub2_cat[]=20", NewznabStandardCategory.AudioVideo, "Musikkvideoer - HD-720p");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=8&sub2_cat[]=22", NewznabStandardCategory.AudioVideo, "Musikkvideoer - SD");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=8", NewznabStandardCategory.AudioVideo, "Musikkvideoer");
|
||||
caps.Categories.AddCategoryMapping("main_cat[]=40", NewznabStandardCategory.AudioOther, "Podcasts");
|
||||
|
||||
return caps;
|
||||
@@ -190,7 +178,7 @@ public class NorBitsRequestGenerator : IIndexerRequestGenerator
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(term))
|
||||
{
|
||||
searchTerm = "search=" + term.UrlEncode(Encoding.GetEncoding(28591));
|
||||
searchTerm = "search=" + term.UrlEncode(Encoding.UTF8);
|
||||
}
|
||||
|
||||
searchUrl += "?" + searchTerm + "&" + parameters.GetQueryString();
|
||||
@@ -277,20 +265,17 @@ public class NorBitsParser : IParseIndexerResponse
|
||||
|
||||
foreach (var row in rows)
|
||||
{
|
||||
var link = _settings.BaseUrl + row.QuerySelector("td:nth-of-type(2) > a[href*=\"download.php?id=\"]")?.GetAttribute("href").TrimStart('/');
|
||||
var link = _settings.BaseUrl + row.QuerySelector("td:nth-of-type(2) > a[href*=\"download.php?id=\"]")?.GetAttribute("href")?.TrimStart('/');
|
||||
var qDetails = row.QuerySelector("td:nth-of-type(2) > a[href*=\"details.php?id=\"]");
|
||||
|
||||
var title = qDetails?.GetAttribute("title").Trim();
|
||||
var details = _settings.BaseUrl + qDetails?.GetAttribute("href").TrimStart('/');
|
||||
var title = qDetails?.GetAttribute("title")?.Trim();
|
||||
var details = _settings.BaseUrl + qDetails?.GetAttribute("href")?.TrimStart('/');
|
||||
|
||||
var mainCategory = row.QuerySelector("td:nth-of-type(1) > div > a[href*=\"main_cat[]\"]")?.GetAttribute("href")?.Split('?').Last();
|
||||
var secondCategory = row.QuerySelector("td:nth-of-type(1) > div > a[href*=\"sub2_cat[]\"]")?.GetAttribute("href")?.Split('?').Last();
|
||||
var catQuery = row.QuerySelector("td:nth-of-type(1) a[href*=\"main_cat[]\"]")?.GetAttribute("href")?.Split('?').Last().Split('&', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
|
||||
var category = catQuery?.FirstOrDefault(x => x.StartsWith("main_cat[]=", StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
var categoryList = new[] { mainCategory, secondCategory };
|
||||
var cat = string.Join("&", categoryList.Where(c => !string.IsNullOrWhiteSpace(c)));
|
||||
|
||||
var seeders = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(9)").TextContent);
|
||||
var leechers = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(10)").TextContent);
|
||||
var seeders = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(9)")?.TextContent);
|
||||
var leechers = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(10)")?.TextContent);
|
||||
|
||||
var release = new TorrentInfo
|
||||
{
|
||||
@@ -298,7 +283,7 @@ public class NorBitsParser : IParseIndexerResponse
|
||||
InfoUrl = details,
|
||||
DownloadUrl = link,
|
||||
Title = title,
|
||||
Categories = _categories.MapTrackerCatToNewznab(cat),
|
||||
Categories = _categories.MapTrackerCatToNewznab(category),
|
||||
Size = ParseUtil.GetBytes(row.QuerySelector("td:nth-of-type(7)")?.TextContent),
|
||||
Files = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(3) > a")?.TextContent.Trim()),
|
||||
Grabs = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(8)")?.FirstChild?.TextContent.Trim()),
|
||||
|
||||
@@ -8,6 +8,7 @@ using FluentValidation;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers.Definitions.Gazelle;
|
||||
@@ -252,7 +253,9 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK)
|
||||
{
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request");
|
||||
STJson.TryDeserialize<GazelleErrorResponse>(indexerResponse.Content, out var errorResponse);
|
||||
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}");
|
||||
}
|
||||
|
||||
if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value))
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Configuration;
|
||||
@@ -15,6 +16,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
public override bool SupportsSearch => true;
|
||||
public override bool SupportsPagination => true;
|
||||
public override int PageSize => 50;
|
||||
public override TimeSpan RateLimit => TimeSpan.FromSeconds(4);
|
||||
|
||||
public override IndexerCapabilities Capabilities => SetCapabilities();
|
||||
|
||||
|
||||
@@ -56,6 +56,19 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
{
|
||||
foreach (var torrent in result.Torrents)
|
||||
{
|
||||
// skip non-freeleech results when freeleech only is set
|
||||
var downloadVolumeFactor = torrent.FreeleechType?.ToUpperInvariant() switch
|
||||
{
|
||||
"FREELEECH" => 0,
|
||||
"HALF LEECH" => 0.5,
|
||||
_ => 1
|
||||
};
|
||||
|
||||
if (_settings.FreeleechOnly && downloadVolumeFactor != 0.0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var id = torrent.Id;
|
||||
var title = torrent.ReleaseName;
|
||||
|
||||
@@ -94,12 +107,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
ImdbId = result.ImdbId.IsNotNullOrWhiteSpace() ? int.Parse(result.ImdbId) : 0,
|
||||
Scene = torrent.Scene,
|
||||
IndexerFlags = flags,
|
||||
DownloadVolumeFactor = torrent.FreeleechType?.ToUpperInvariant() switch
|
||||
{
|
||||
"FREELEECH" => 0,
|
||||
"HALF LEECH" => 0.5,
|
||||
_ => 1
|
||||
},
|
||||
DownloadVolumeFactor = downloadVolumeFactor,
|
||||
UploadVolumeFactor = 1,
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 345600,
|
||||
|
||||
@@ -8,6 +8,7 @@ using FluentValidation;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers.Definitions.Gazelle;
|
||||
@@ -24,7 +25,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
public class Redacted : TorrentIndexerBase<RedactedSettings>
|
||||
{
|
||||
public override string Name => "Redacted";
|
||||
public override string[] IndexerUrls => new[] { "https://redacted.ch/" };
|
||||
public override string[] IndexerUrls => new[] { "https://redacted.sh/" };
|
||||
public override string[] LegacyUrls => new[] { "https://redacted.ch/" };
|
||||
public override string Description => "REDActed (Aka.PassTheHeadPhones) is one of the most well-known music trackers.";
|
||||
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
||||
public override IndexerCapabilities Capabilities => SetCapabilities();
|
||||
@@ -251,7 +253,9 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK)
|
||||
{
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request");
|
||||
STJson.TryDeserialize<GazelleErrorResponse>(indexerResponse.Content, out var errorResponse);
|
||||
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}");
|
||||
}
|
||||
|
||||
if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value))
|
||||
|
||||
@@ -933,6 +933,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
caps.Categories.AddCategoryMapping(1224, NewznabStandardCategory.AudioLossless, "|- Авторская песня (lossless)");
|
||||
caps.Categories.AddCategoryMapping(1225, NewznabStandardCategory.AudioMP3, "|- Авторская песня (lossy)");
|
||||
caps.Categories.AddCategoryMapping(1226, NewznabStandardCategory.Audio, "|- Менестрели и ролевики (lossy и lossless)");
|
||||
caps.Categories.AddCategoryMapping(782, NewznabStandardCategory.Audio, "Лейбл- и сцен-паки. Неофициальные сборники и ремастеринги. AI-музыка");
|
||||
caps.Categories.AddCategoryMapping(577, NewznabStandardCategory.Audio, "|- AI-Music - музыка ИИ, нейросетей (lossy и lossless)");
|
||||
caps.Categories.AddCategoryMapping(1842, NewznabStandardCategory.AudioLossless, "Label Packs (lossless)");
|
||||
caps.Categories.AddCategoryMapping(1648, NewznabStandardCategory.AudioMP3, "Label packs, Scene packs (lossy)");
|
||||
caps.Categories.AddCategoryMapping(134, NewznabStandardCategory.AudioLossless, "|- Неофициальные сборники и ремастеринги (lossless)");
|
||||
@@ -1292,7 +1294,6 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
caps.Categories.AddCategoryMapping(650, NewznabStandardCategory.PCMobileOther, "Игры для мобильных устройств");
|
||||
caps.Categories.AddCategoryMapping(2149, NewznabStandardCategory.PCMobileAndroid, "|- Игры для Android");
|
||||
caps.Categories.AddCategoryMapping(2420, NewznabStandardCategory.ConsoleOther, "|- Игры для Oculus Quest");
|
||||
caps.Categories.AddCategoryMapping(1001, NewznabStandardCategory.PC, "|- Игры для Java");
|
||||
caps.Categories.AddCategoryMapping(1004, NewznabStandardCategory.PCMobileOther, "|- Игры для Symbian");
|
||||
caps.Categories.AddCategoryMapping(1002, NewznabStandardCategory.PCMobileOther, "|- Игры для Windows Mobile");
|
||||
caps.Categories.AddCategoryMapping(240, NewznabStandardCategory.OtherMisc, "Игровое видео");
|
||||
@@ -1308,7 +1309,6 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
caps.Categories.AddCategoryMapping(1379, NewznabStandardCategory.PC, "|- Операционные системы (Linux, Unix)");
|
||||
caps.Categories.AddCategoryMapping(1381, NewznabStandardCategory.PC, "|- Программное обеспечение (Linux, Unix)");
|
||||
caps.Categories.AddCategoryMapping(1473, NewznabStandardCategory.PC, "|- Другие ОС и ПО под них");
|
||||
caps.Categories.AddCategoryMapping(1195, NewznabStandardCategory.PC, "Тестовые диски для настройки аудио/видео аппаратуры");
|
||||
caps.Categories.AddCategoryMapping(1013, NewznabStandardCategory.PC, "Системные программы");
|
||||
caps.Categories.AddCategoryMapping(1028, NewznabStandardCategory.PC, "|- Работа с жёстким диском");
|
||||
caps.Categories.AddCategoryMapping(1029, NewznabStandardCategory.PC, "|- Резервное копирование");
|
||||
@@ -1350,6 +1350,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
caps.Categories.AddCategoryMapping(1018, NewznabStandardCategory.PC, "|- Шаблоны для сайтов и CMS");
|
||||
caps.Categories.AddCategoryMapping(1058, NewznabStandardCategory.PC, "|- Разное (Веб-разработка и программирование)");
|
||||
caps.Categories.AddCategoryMapping(1016, NewznabStandardCategory.PC, "Программы для работы с мультимедиа и 3D");
|
||||
caps.Categories.AddCategoryMapping(1195, NewznabStandardCategory.PC, "|- Тестовые диски для настройки аудио/видео аппаратуры");
|
||||
caps.Categories.AddCategoryMapping(1079, NewznabStandardCategory.PC, "|- Программные комплекты");
|
||||
caps.Categories.AddCategoryMapping(1080, NewznabStandardCategory.PC, "|- Плагины для программ компании Adobe");
|
||||
caps.Categories.AddCategoryMapping(1081, NewznabStandardCategory.PC, "|- Графические редакторы");
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Text.RegularExpressions;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers.Definitions.Gazelle;
|
||||
using NzbDrone.Core.Indexers.Exceptions;
|
||||
@@ -78,7 +79,9 @@ public class SecretCinemaParser : IParseIndexerResponse
|
||||
// Remove cookie cache
|
||||
CookiesUpdater(null, null);
|
||||
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request");
|
||||
STJson.TryDeserialize<GazelleErrorResponse>(indexerResponse.Content, out var errorResponse);
|
||||
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}");
|
||||
}
|
||||
|
||||
if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value))
|
||||
|
||||
@@ -262,7 +262,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
return jsonResponse.Resource.Select(torrent => new TorrentInfo
|
||||
{
|
||||
Guid = torrent.Id.ToString(),
|
||||
Guid = torrent.Url,
|
||||
Title = CleanTitle(torrent.Name),
|
||||
Description = torrent.ShortDescription,
|
||||
Size = torrent.Size,
|
||||
|
||||
@@ -7,6 +7,7 @@ using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers.Exceptions;
|
||||
using NzbDrone.Core.Indexers.Settings;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
@@ -52,7 +53,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public override IParseIndexerResponse GetParser()
|
||||
{
|
||||
return new TorrentDayParser(Settings, Capabilities.Categories);
|
||||
return new TorrentDayParser(Settings, Capabilities.Categories, _logger);
|
||||
}
|
||||
|
||||
protected override IDictionary<string, string> GetCookies()
|
||||
@@ -228,15 +229,29 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
private readonly TorrentDaySettings _settings;
|
||||
private readonly IndexerCapabilitiesCategories _categories;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public TorrentDayParser(TorrentDaySettings settings, IndexerCapabilitiesCategories categories)
|
||||
public TorrentDayParser(TorrentDaySettings settings, IndexerCapabilitiesCategories categories, Logger logger)
|
||||
{
|
||||
_settings = settings;
|
||||
_categories = categories;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
|
||||
{
|
||||
if (indexerResponse.HttpResponse.HasHttpRedirect)
|
||||
{
|
||||
_logger.Warn("Redirected to {0} from indexer request", indexerResponse.HttpResponse.RedirectUrl);
|
||||
|
||||
if (indexerResponse.HttpResponse.RedirectUrl.ContainsIgnoreCase("/login.php"))
|
||||
{
|
||||
throw new IndexerException(indexerResponse, "We are being redirected to the login page. Most likely your session expired or was killed. Recheck your cookie and try testing the indexer.");
|
||||
}
|
||||
|
||||
throw new IndexerException(indexerResponse, "Redirected to {0} from indexer request", indexerResponse.HttpResponse.RedirectUrl);
|
||||
}
|
||||
|
||||
var torrentInfos = new List<TorrentInfo>();
|
||||
|
||||
var rows = JsonConvert.DeserializeObject<dynamic>(indexerResponse.Content);
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using FluentValidation.Results;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
@@ -44,6 +46,13 @@ namespace NzbDrone.Core.Indexers.Definitions.TorrentRss
|
||||
}
|
||||
}
|
||||
|
||||
protected override Task<ValidationFailure> TestConnection()
|
||||
{
|
||||
UpdateCookies(null, null);
|
||||
|
||||
return base.TestConnection();
|
||||
}
|
||||
|
||||
private IndexerDefinition GetDefinition(string name, string description, TorrentRssIndexerSettings settings)
|
||||
{
|
||||
return new IndexerDefinition
|
||||
|
||||
@@ -121,8 +121,15 @@ public class XSpeeds : TorrentIndexerBase<XSpeedsSettings>
|
||||
caps.Categories.AddCategoryMapping(112, NewznabStandardCategory.MoviesOther, "Anime Movies");
|
||||
caps.Categories.AddCategoryMapping(111, NewznabStandardCategory.MoviesOther, "Anime TV");
|
||||
caps.Categories.AddCategoryMapping(150, NewznabStandardCategory.PC, "Apps");
|
||||
caps.Categories.AddCategoryMapping(80, NewznabStandardCategory.AudioAudiobook, "Audiobooks");
|
||||
caps.Categories.AddCategoryMapping(48, NewznabStandardCategory.Books, "Books Magazines");
|
||||
caps.Categories.AddCategoryMapping(156, NewznabStandardCategory.TV, "AV1");
|
||||
caps.Categories.AddCategoryMapping(156, NewznabStandardCategory.Movies, "AV1");
|
||||
caps.Categories.AddCategoryMapping(159, NewznabStandardCategory.Movies, "Movie Boxsets AV1");
|
||||
caps.Categories.AddCategoryMapping(158, NewznabStandardCategory.Movies, "Movies AV1");
|
||||
caps.Categories.AddCategoryMapping(157, NewznabStandardCategory.TV, "TV AV1");
|
||||
caps.Categories.AddCategoryMapping(160, NewznabStandardCategory.TV, "TV Boxsets AV1");
|
||||
caps.Categories.AddCategoryMapping(153, NewznabStandardCategory.Books, "Books");
|
||||
caps.Categories.AddCategoryMapping(154, NewznabStandardCategory.AudioAudiobook, "Audiobooks");
|
||||
caps.Categories.AddCategoryMapping(155, NewznabStandardCategory.Books, "Books & Magazines");
|
||||
caps.Categories.AddCategoryMapping(68, NewznabStandardCategory.MoviesOther, "Cams/TS");
|
||||
caps.Categories.AddCategoryMapping(140, NewznabStandardCategory.TVDocumentary, "Documentary");
|
||||
caps.Categories.AddCategoryMapping(10, NewznabStandardCategory.MoviesDVD, "DVDR");
|
||||
@@ -154,6 +161,7 @@ public class XSpeeds : TorrentIndexerBase<XSpeedsSettings>
|
||||
caps.Categories.AddCategoryMapping(146, NewznabStandardCategory.MoviesSD, "Movies SD");
|
||||
caps.Categories.AddCategoryMapping(13, NewznabStandardCategory.Audio, "Music");
|
||||
caps.Categories.AddCategoryMapping(135, NewznabStandardCategory.AudioLossless, "Music/FLAC");
|
||||
caps.Categories.AddCategoryMapping(151, NewznabStandardCategory.Audio, "Karaoke");
|
||||
caps.Categories.AddCategoryMapping(136, NewznabStandardCategory.Audio, "Music Boxset");
|
||||
caps.Categories.AddCategoryMapping(148, NewznabStandardCategory.AudioVideo, "Music Videos");
|
||||
caps.Categories.AddCategoryMapping(9, NewznabStandardCategory.Other, "Other");
|
||||
|
||||
@@ -650,7 +650,7 @@ namespace NzbDrone.Core.Indexers
|
||||
{
|
||||
foreach (var cookie in Cookies)
|
||||
{
|
||||
request.HttpRequest.Cookies.Add(cookie.Key, cookie.Value);
|
||||
request.HttpRequest.Cookies[cookie.Key] = cookie.Value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -761,7 +761,7 @@ namespace NzbDrone.Core.Indexers
|
||||
|
||||
if (releases.Releases.Empty())
|
||||
{
|
||||
return new ValidationFailure(string.Empty, "Query successful, but no results were returned from your indexer. This may be an issue with the indexer, your indexer category settings, or other indexer settings such as search freeleech only etc.");
|
||||
return new ValidationFailure(string.Empty, "Query successful, but no results were returned from your indexer. This may be an issue with the indexer, your indexer category settings, or other indexer settings such as search freeleech only etc. See the FAQ for details.");
|
||||
}
|
||||
}
|
||||
catch (IndexerAuthException ex)
|
||||
|
||||
@@ -242,7 +242,7 @@ namespace NzbDrone.Core.Indexers
|
||||
|
||||
foreach (var indexer in indexers)
|
||||
{
|
||||
if (blockedIndexers.TryGetValue(indexer.Definition.Id, out var blockedIndexerStatus))
|
||||
if (blockedIndexers.TryGetValue(indexer.Definition.Id, out var blockedIndexerStatus) && blockedIndexerStatus.DisabledTill.HasValue)
|
||||
{
|
||||
_logger.Debug("Temporarily ignoring indexer {0} till {1} due to recent failures.", indexer.Definition.Name, blockedIndexerStatus.DisabledTill.Value.ToLocalTime());
|
||||
continue;
|
||||
|
||||
@@ -63,6 +63,7 @@ namespace NzbDrone.Core.Indexers
|
||||
}
|
||||
|
||||
public static IndexerFlag Internal => new ("internal", "Uploader is an internal release group");
|
||||
public static IndexerFlag Exclusive => new ("exclusive", "An exclusive release that must not be uploaded anywhere else");
|
||||
public static IndexerFlag FreeLeech => new ("freeleech", "Download doesn't count toward ratio");
|
||||
public static IndexerFlag NeutralLeech => new ("neutralleech", "Download and upload doesn't count toward ratio");
|
||||
public static IndexerFlag HalfLeech => new ("halfleech", "Release counts 50% to ratio");
|
||||
|
||||
@@ -95,7 +95,7 @@ namespace NzbDrone.Core.Instrumentation
|
||||
|
||||
private void ReconfigureFile()
|
||||
{
|
||||
foreach (var target in LogManager.Configuration.AllTargets.OfType<NzbDroneFileTarget>())
|
||||
foreach (var target in LogManager.Configuration.AllTargets.OfType<CleansingFileTarget>())
|
||||
{
|
||||
target.MaxArchiveFiles = _configFileProvider.LogRotate;
|
||||
target.ArchiveAboveSize = _configFileProvider.LogSizeLimit.Megabytes();
|
||||
@@ -120,11 +120,7 @@ namespace NzbDrone.Core.Instrumentation
|
||||
{
|
||||
var format = _configFileProvider.ConsoleLogFormat;
|
||||
|
||||
consoleTarget.Layout = format switch
|
||||
{
|
||||
ConsoleLogFormat.Clef => NzbDroneLogger.ClefLogLayout,
|
||||
_ => NzbDroneLogger.ConsoleLogLayout
|
||||
};
|
||||
NzbDroneLogger.ConfigureConsoleLayout(consoleTarget, format);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
"SelectAll": "اختر الكل",
|
||||
"SendAnonymousUsageData": "إرسال بيانات الاستخدام المجهولة",
|
||||
"Style": "أسلوب",
|
||||
"SystemTimeCheckMessage": "توقف وقت النظام بأكثر من يوم واحد. قد لا تعمل المهام المجدولة بشكل صحيح حتى يتم تصحيح الوقت",
|
||||
"SystemTimeHealthCheckMessage": "توقف وقت النظام بأكثر من يوم واحد. قد لا تعمل المهام المجدولة بشكل صحيح حتى يتم تصحيح الوقت",
|
||||
"TableOptionsColumnsMessage": "اختر الأعمدة المرئية والترتيب الذي تظهر به",
|
||||
"TagCannotBeDeletedWhileInUse": "لا يمكن حذفه أثناء الاستخدام",
|
||||
"Tasks": "مهام",
|
||||
@@ -370,5 +370,10 @@
|
||||
"ErrorRestoringBackup": "خطأ في استعادة النسخة الاحتياطية",
|
||||
"ExternalUpdater": "تم تكوين {appName} لاستخدام آلية تحديث خارجية",
|
||||
"InstallLatest": "تثبيت الأحدث",
|
||||
"AptUpdater": "استخدم apt لتثبيت التحديث"
|
||||
"AptUpdater": "استخدم apt لتثبيت التحديث",
|
||||
"Clone": "قريب",
|
||||
"Stats": "الحالة",
|
||||
"CurrentlyInstalled": "مثبتة حاليا",
|
||||
"Season": "السبب",
|
||||
"Mixed": "ثابت"
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
"SSLPort": "SSL порт",
|
||||
"Status": "Състояние",
|
||||
"System": "Система",
|
||||
"SystemTimeCheckMessage": "Системното време е изключено с повече от 1 ден. Планираните задачи може да не се изпълняват правилно, докато времето не бъде коригирано",
|
||||
"SystemTimeHealthCheckMessage": "Системното време е изключено с повече от 1 ден. Планираните задачи може да не се изпълняват правилно, докато времето не бъде коригирано",
|
||||
"TestAll": "Тествайте всички",
|
||||
"Title": "Заглавие",
|
||||
"Today": "Днес",
|
||||
@@ -370,5 +370,22 @@
|
||||
"RestartReloadNote": "Забележка: {appName} автоматично ще рестартира и презареди потребителския интерфейс по време на процеса на възстановяване.",
|
||||
"UpdateAppDirectlyLoadError": "Не може да се актуализира {appName} директно,",
|
||||
"AptUpdater": "Използвайте apt, за да инсталирате актуализацията",
|
||||
"InstallLatest": "Инсталирайте най-новите"
|
||||
"InstallLatest": "Инсталирайте най-новите",
|
||||
"Clone": "Близо",
|
||||
"ActiveApps": "Активни приложения",
|
||||
"ActiveIndexers": "Активни индиксатори",
|
||||
"AddApplication": "добави приложение",
|
||||
"Season": "Причина",
|
||||
"CurrentlyInstalled": "Понастоящем инсталиран",
|
||||
"DownloadClientSettingsAddPaused": "Добави на пауза",
|
||||
"Encoding": "Кодиране",
|
||||
"Episode": "епизод",
|
||||
"Applications": "Приложения",
|
||||
"Publisher": "Издател",
|
||||
"Id": "ИН",
|
||||
"Theme": "Тема",
|
||||
"Label": "Етикет",
|
||||
"Categories": "Категории",
|
||||
"Album": "албум",
|
||||
"Artist": "изпълнител"
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
"Priority": "Prioritat",
|
||||
"SendAnonymousUsageData": "Envia dades d'ús anònimes",
|
||||
"SetTags": "Estableix etiquetes",
|
||||
"SystemTimeCheckMessage": "L'hora del sistema està apagada durant més d'1 dia. És possible que les tasques programades no s'executin correctament fins que no es corregeixi l'hora",
|
||||
"SystemTimeHealthCheckMessage": "L'hora del sistema està apagada durant més d'1 dia. És possible que les tasques programades no s'executin correctament fins que no es corregeixi l'hora",
|
||||
"TableOptions": "Opcions de taula",
|
||||
"TableOptionsColumnsMessage": "Trieu quines columnes són visibles i en quin ordre apareixen",
|
||||
"Columns": "Columnes",
|
||||
@@ -499,5 +499,7 @@
|
||||
"TheLogLevelDefault": "El nivell de registre per defecte és \"Info\" i es pot canviar a [Configuració general](/configuració/general)",
|
||||
"UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,",
|
||||
"WouldYouLikeToRestoreBackup": "Voleu restaurar la còpia de seguretat '{name}'?",
|
||||
"InstallLatest": "Instal·la l'últim"
|
||||
"InstallLatest": "Instal·la l'últim",
|
||||
"CurrentlyInstalled": "Instal·lat actualment",
|
||||
"DownloadClientSettingsAddPaused": "Afegeix pausats"
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"Add": "Přidat",
|
||||
"CertificateValidation": "Ověření certifikátu",
|
||||
"DeleteBackupMessageText": "Opravdu chcete odstranit zálohu '{name}'?",
|
||||
"CertificateValidation": "Ověřování certifikátu",
|
||||
"DeleteBackupMessageText": "Opravdu chcete odstranit zálohu ‚{name}‘?",
|
||||
"YesCancel": "Ano, zrušit",
|
||||
"About": "O aplikaci",
|
||||
"Component": "Komponenta",
|
||||
@@ -18,12 +18,12 @@
|
||||
"Usenet": "Usenet",
|
||||
"AddDownloadClient": "Přidat klienta pro stahování",
|
||||
"Backups": "Zálohy",
|
||||
"CancelPendingTask": "Opravdu chcete zrušit tento nevyřízený úkol?",
|
||||
"CancelPendingTask": "Opravdu chcete zrušit tento úkol čekající na vyřízení?",
|
||||
"MovieIndexScrollBottom": "Rejstřík filmů: Posun dolů",
|
||||
"ProxyType": "Typ serveru proxy",
|
||||
"Reddit": "Reddit",
|
||||
"ErrorLoadingContents": "Chyba při načítání obsahu",
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Všechny indexery nejsou k dispozici z důvodu selhání po dobu delší než 6 hodin",
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Všechny indexery jsou nedostupné z důvodu selhání déle než 6 hodin",
|
||||
"RemovedFromTaskQueue": "Odebráno z fronty úkolů",
|
||||
"ResetAPIKey": "Resetovat klíč API",
|
||||
"SSLCertPassword": "Heslo SSL Cert",
|
||||
@@ -35,27 +35,27 @@
|
||||
"Warn": "Varovat",
|
||||
"Wiki": "Wiki",
|
||||
"Connections": "Připojení",
|
||||
"DeleteDownloadClientMessageText": "Opravdu chcete odstranit klienta pro stahování '{name}'?",
|
||||
"Details": "Detaily",
|
||||
"DeleteDownloadClientMessageText": "Opravdu chcete odstranit klienta pro stahování ‚{name}‘?",
|
||||
"Details": "Podrobnosti",
|
||||
"Disabled": "Zakázáno",
|
||||
"Docker": "Přístavní dělník",
|
||||
"Docker": "Docker",
|
||||
"Donations": "Dary",
|
||||
"DownloadClientSettings": "Stáhněte si nastavení klienta",
|
||||
"DownloadClientStatusAllClientHealthCheckMessage": "Všichni klienti pro stahování nejsou kvůli chybám k dispozici",
|
||||
"DownloadClientStatusSingleClientHealthCheckMessage": "Stahování klientů není k dispozici z důvodu selhání: {downloadClientNames}",
|
||||
"DownloadClientSettings": "Nastavení klienta pro stahování",
|
||||
"DownloadClientStatusAllClientHealthCheckMessage": "Všichni klienti pro stahování jsou nedostupní z důvodu selhání",
|
||||
"DownloadClientStatusSingleClientHealthCheckMessage": "Klienti pro stahování jsou nedostupní z důvodu selhání: {downloadClientNames}",
|
||||
"Folder": "Složka",
|
||||
"Grabs": "Urvat",
|
||||
"Grabs": "Získané",
|
||||
"NoIssuesWithYourConfiguration": "Žádné problémy s vaší konfigurací",
|
||||
"HideAdvanced": "Skrýt pokročilé",
|
||||
"Host": "Hostitel",
|
||||
"Hostname": "Název hostitele",
|
||||
"IncludeHealthWarningsHelpText": "Zahrnout zdravotní varování",
|
||||
"IncludeHealthWarningsHelpText": "Včetně varování ohledně zdraví",
|
||||
"Indexer": "Indexer",
|
||||
"IndexerFlags": "Příznaky indexeru",
|
||||
"IndexerPriority": "Priorita indexování",
|
||||
"IndexerPriorityHelpText": "Priorita indexování od 1 (nejvyšší) do 50 (nejnižší). Výchozí: 25.",
|
||||
"IndexerPriority": "Priorita indexeru",
|
||||
"IndexerPriorityHelpText": "Priorita indexeru od 1 (Nejvyšší) do 50 (Nejnižší). Výchozí: 25.",
|
||||
"Indexers": "Indexery",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Všechny indexery nejsou k dispozici z důvodu selhání",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Všechny indexery jsou nedostupné z důvodu selhání",
|
||||
"LastWriteTime": "Čas posledního zápisu",
|
||||
"Level": "Úroveň",
|
||||
"LogLevel": "Úroveň protokolu",
|
||||
@@ -69,23 +69,23 @@
|
||||
"UnselectAll": "Odznačit vše",
|
||||
"UpdateStartupNotWritableHealthCheckMessage": "Aktualizaci nelze nainstalovat, protože spouštěcí složku „{startupFolder}“ nelze zapisovat uživatelem „{userName}“.",
|
||||
"Version": "Verze",
|
||||
"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.",
|
||||
"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 webového rozhraní {appName}u 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 určení priorit funkcí a oprav chyb.",
|
||||
"ApiKey": "Klíč API",
|
||||
"AppDataDirectory": "Adresář AppData",
|
||||
"AppDataLocationHealthCheckMessage": "Aktualizace nebude možná, aby se zabránilo odstranění AppData při aktualizaci",
|
||||
"ApplicationStatusCheckAllClientMessage": "Všechny seznamy nejsou k dispozici z důvodu selhání",
|
||||
"ApplicationStatusCheckSingleClientMessage": "Seznamy nejsou k dispozici z důvodu selhání: {0}",
|
||||
"ApplicationStatusCheckAllClientMessage": "Všechny aplikace jsou nedostupné z důvodu selhání",
|
||||
"ApplicationStatusCheckSingleClientMessage": "Aplikace nedostupné z důvodu selhání: {0}",
|
||||
"Apply": "Použít",
|
||||
"Branch": "Větev",
|
||||
"BranchUpdate": "Pobočka, která se má použít k aktualizaci {appName}",
|
||||
"EditIndexer": "Upravit indexátor",
|
||||
"BranchUpdate": "Větev použitá k aktualizaci {appName}u",
|
||||
"EditIndexer": "Upravit indexer",
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "Další informace o jednotlivých klientech pro stahování získáte kliknutím na informační tlačítka.",
|
||||
"General": "Všeobecné",
|
||||
"CloseCurrentModal": "Zavřít aktuální modální",
|
||||
"General": "Obecné",
|
||||
"CloseCurrentModal": "Zavřít aktuální modální okno",
|
||||
"Columns": "Sloupce",
|
||||
"ConnectionLost": "Spojení ztraceno",
|
||||
"ConnectionLost": "Ztráta spojení",
|
||||
"ConnectSettings": "Nastavení připojení",
|
||||
"Custom": "Zvyk",
|
||||
"Custom": "Vlastní",
|
||||
"Error": "Chyba",
|
||||
"Failed": "Selhalo",
|
||||
"FeatureRequests": "Žádosti o funkce",
|
||||
@@ -93,9 +93,9 @@
|
||||
"Files": "Soubory",
|
||||
"Filter": "Filtr",
|
||||
"Fixed": "Pevný",
|
||||
"FocusSearchBox": "Zaostřovací vyhledávací pole",
|
||||
"FocusSearchBox": "Zaměřit vyhledávací pole",
|
||||
"GeneralSettingsSummary": "Port, SSL, uživatelské jméno / heslo, proxy, analytika a aktualizace",
|
||||
"History": "Dějiny",
|
||||
"History": "Historie",
|
||||
"HomePage": "Domovská stránka",
|
||||
"SettingsEnableColorImpairedModeHelpText": "Upravený styl umožňující uživatelům s barevným postižením lépe rozlišovat barevně kódované informace",
|
||||
"SettingsLongDateFormat": "Long Date Format",
|
||||
@@ -105,8 +105,8 @@
|
||||
"Tasks": "Úkoly",
|
||||
"Test": "Test",
|
||||
"UnableToLoadTags": "Značky nelze načíst",
|
||||
"IndexerProxyStatusAllUnavailableHealthCheckMessage": "Všechny indexery nejsou k dispozici z důvodu selhání",
|
||||
"ApplyTags": "Použít značky",
|
||||
"IndexerProxyStatusAllUnavailableHealthCheckMessage": "Všechny proxy indexerů jsou nedostupné z důvodu selhání",
|
||||
"ApplyTags": "Použít štítky",
|
||||
"MoreInfo": "Více informací",
|
||||
"System": "Systém",
|
||||
"Enabled": "Povoleno",
|
||||
@@ -121,7 +121,7 @@
|
||||
"NoLinks": "Žádné odkazy",
|
||||
"Presets": "Předvolby",
|
||||
"Priority": "Přednost",
|
||||
"Grabbed": "Popadl",
|
||||
"Grabbed": "Získáno",
|
||||
"Health": "Zdraví",
|
||||
"LogLevelTraceHelpTextWarning": "Trasování protokolování by mělo být povoleno pouze dočasně",
|
||||
"ProxyBadRequestHealthCheckMessage": "Nepodařilo se otestovat proxy. StatusCode: {statusCode}",
|
||||
@@ -171,19 +171,19 @@
|
||||
"UseProxy": "Použij proxy",
|
||||
"Username": "Uživatelské jméno",
|
||||
"Yesterday": "Včera",
|
||||
"AutomaticSearch": "Vyhledat automaticky",
|
||||
"BackupFolderHelpText": "Relativní cesty budou v adresáři AppData společnosti {appName}",
|
||||
"AutomaticSearch": "Automatické vyhledávání",
|
||||
"BackupFolderHelpText": "Relativní cesty budou v adresáři AppData {appName}u",
|
||||
"BackupIntervalHelpText": "Interval mezi automatickými zálohami",
|
||||
"BackupNow": "Ihned zálohovat",
|
||||
"BackupNow": "Zálohovat nyní",
|
||||
"BackupRetentionHelpText": "Automatické zálohy starší než doba uchovávání budou automaticky vyčištěny",
|
||||
"BeforeUpdate": "Před zálohováním",
|
||||
"BeforeUpdate": "Před aktualizací",
|
||||
"BindAddress": "Vázat adresu",
|
||||
"BindAddressHelpText": "Platná IP adresa, localhost nebo '*' pro všechna rozhraní",
|
||||
"BranchUpdateMechanism": "Větev používaná externím aktualizačním mechanismem",
|
||||
"BindAddressHelpText": "Platná IP adresa, localhost nebo ‚*‘ pro všechna rozhraní",
|
||||
"BranchUpdateMechanism": "Větev použitá externím aktualizačním mechanismem",
|
||||
"BypassProxyForLocalAddresses": "Obcházení proxy serveru pro místní adresy",
|
||||
"DeleteIndexerProxyMessageText": "Opravdu chcete smazat značku „{0}“?",
|
||||
"DeleteTag": "Smazat značku",
|
||||
"IndexerProxyStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání: {indexerProxyNames}",
|
||||
"DeleteIndexerProxyMessageText": "Opravdu chcete odstranit proxy indexeru ‚{name}‘?",
|
||||
"DeleteTag": "Odstranit štítek",
|
||||
"IndexerProxyStatusUnavailableHealthCheckMessage": "Proxy indexerů nedostupné z důvodu selhání: {indexerProxyNames}",
|
||||
"Name": "název",
|
||||
"New": "Nový",
|
||||
"Protocol": "Protokol",
|
||||
@@ -201,9 +201,9 @@
|
||||
"BackupsLoadError": "Nelze načíst zálohy",
|
||||
"DownloadClientsLoadError": "Nelze načíst klienty pro stahování",
|
||||
"UnableToLoadGeneralSettings": "Nelze načíst obecná nastavení",
|
||||
"DeleteNotification": "Smazat oznámení",
|
||||
"DeleteNotification": "Odstranit oznámení",
|
||||
"EnableAutomaticSearch": "Povolit automatické vyhledávání",
|
||||
"EnableInteractiveSearchHelpText": "Bude použito při použití interaktivního vyhledávání",
|
||||
"EnableInteractiveSearchHelpText": "Použije se při interaktivním vyhledávání",
|
||||
"GeneralSettings": "Obecné nastavení",
|
||||
"InteractiveSearch": "Interaktivní vyhledávání",
|
||||
"Interval": "Interval",
|
||||
@@ -221,51 +221,51 @@
|
||||
"Restore": "Obnovit",
|
||||
"SettingsShowRelativeDates": "Zobrazit relativní data",
|
||||
"SettingsShowRelativeDatesHelpText": "Zobrazit relativní (dnes / včera / atd.) Nebo absolutní data",
|
||||
"SystemTimeCheckMessage": "Systémový čas je vypnutý o více než 1 den. Naplánované úlohy nemusí fungovat správně, dokud nebude čas opraven",
|
||||
"AddingTag": "Přidání značky",
|
||||
"SystemTimeHealthCheckMessage": "Systémový čas je vypnutý o více než 1 den. Naplánované úlohy nemusí fungovat správně, dokud nebude čas opraven",
|
||||
"AddingTag": "Přidávání štítku",
|
||||
"Age": "Stáří",
|
||||
"All": "Vše",
|
||||
"AllIndexersHiddenDueToFilter": "Všechny filmy jsou skryty kvůli použitému filtru.",
|
||||
"AllIndexersHiddenDueToFilter": "Všechny indexery jsou skryty kvůli použitému filtru.",
|
||||
"Analytics": "Analýzy",
|
||||
"EnableRss": "Povolit RSS",
|
||||
"NoChange": "Žádná změna",
|
||||
"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",
|
||||
"Automatic": "Automatický",
|
||||
"Backup": "Záloha",
|
||||
"Cancel": "Zrušit",
|
||||
"CertificateValidationHelpText": "Změňte, jak přísné je ověření certifikace HTTPS",
|
||||
"CertificateValidationHelpText": "Změňte přísnost ověřování certifikace HTTPS",
|
||||
"ChangeHasNotBeenSavedYet": "Změna ještě nebyla uložena",
|
||||
"Clear": "Vyčistit",
|
||||
"Clear": "Vymazat",
|
||||
"ClientPriority": "Priorita klienta",
|
||||
"CloneProfile": "Klonovat profil",
|
||||
"Close": "Zavřít",
|
||||
"CouldNotConnectSignalR": "Nelze se připojit k SignalR, uživatelské rozhraní se neaktualizuje",
|
||||
"CustomFilters": "Vlastní filtry",
|
||||
"Date": "datum",
|
||||
"Dates": "Termíny",
|
||||
"Date": "Datum",
|
||||
"Dates": "Data",
|
||||
"DatabaseMigration": "Migrace databáze",
|
||||
"Delete": "Vymazat",
|
||||
"DeleteApplicationMessageText": "Opravdu chcete smazat oznámení „{0}“?",
|
||||
"Delete": "Odstranit",
|
||||
"DeleteApplicationMessageText": "Opravdu chcete odstranit aplikaci ‚{name}‘?",
|
||||
"DeleteBackup": "Odstranit zálohu",
|
||||
"DeleteDownloadClient": "Odstranit staženého klienta",
|
||||
"DeleteNotificationMessageText": "Opravdu chcete smazat oznámení '{name}'?",
|
||||
"DeleteTagMessageText": "Opravdu chcete smazat značku „{0}“?",
|
||||
"Discord": "Svár",
|
||||
"DownloadClient": "Stáhnout klienta",
|
||||
"DownloadClients": "Stáhnout klienty",
|
||||
"DeleteDownloadClient": "Odstranit klienta pro stahování",
|
||||
"DeleteNotificationMessageText": "Opravdu chcete odstranit oznámení ‚{name}‘?",
|
||||
"DeleteTagMessageText": "Opravdu chcete odstranit štítek ‚{label}‘?",
|
||||
"Discord": "Discord",
|
||||
"DownloadClient": "Klient pro stahování",
|
||||
"DownloadClients": "Klienti pro stahování",
|
||||
"Edit": "Upravit",
|
||||
"Enable": "Umožnit",
|
||||
"EnableAutomaticSearchHelpText": "Použije se, když se automatické vyhledávání provádí pomocí uživatelského rozhraní nebo {appName}",
|
||||
"Enable": "Povolit",
|
||||
"EnableAutomaticSearchHelpText": "Použije se při automatickém vyhledávání prostřednictvím uživatelského rozhraní nebo pomocí {appName}",
|
||||
"EnableInteractiveSearch": "Povolit interaktivní vyhledávání",
|
||||
"EnableSSL": "Povolit SSL",
|
||||
"EnableSslHelpText": " Vyžaduje restartování spuštěné jako správce, aby se projevilo",
|
||||
"Events": "Události",
|
||||
"EventType": "Typ události",
|
||||
"Exception": "Výjimka",
|
||||
"ExistingTag": "Stávající značka",
|
||||
"ExistingTag": "Stávající štítek",
|
||||
"IllRestartLater": "Restartuji později",
|
||||
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání po dobu delší než 6 hodin: {indexerNames}",
|
||||
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání déle než 6 hodin: {indexerNames}",
|
||||
"IndexerStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání: {indexerNames}",
|
||||
"SettingsTimeFormat": "Časový formát",
|
||||
"ShowAdvanced": "Zobrazit pokročilé",
|
||||
@@ -307,9 +307,9 @@
|
||||
"UnsavedChanges": "Neuložené změny",
|
||||
"UpdateAutomaticallyHelpText": "Automaticky stahovat a instalovat aktualizace. Stále budete moci instalovat ze systému: Aktualizace",
|
||||
"NetCore": ".NET Core",
|
||||
"Filters": "Filtr",
|
||||
"HistoryCleanupDaysHelpText": "Nastavením na 0 zakážete automatické čištění",
|
||||
"HistoryCleanupDaysHelpTextWarning": "Soubory v koši starší než vybraný počet dní budou automaticky vyčištěny",
|
||||
"Filters": "Filtry",
|
||||
"HistoryCleanupDaysHelpText": "Nastavte na 0 pro zakázání automatického čištění",
|
||||
"HistoryCleanupDaysHelpTextWarning": "Položky historie starší než vybraný počet dní se vyčistí automaticky",
|
||||
"MaintenanceRelease": "Údržbové vydání: opravy chyb a další vylepšení. Další podrobnosti najdete v GitHub Commit History",
|
||||
"OnGrab": "Chyť",
|
||||
"OnHealthIssue": "K otázce zdraví",
|
||||
@@ -319,10 +319,10 @@
|
||||
"No": "Ne",
|
||||
"UnableToLoadIndexers": "Nelze načíst indexery",
|
||||
"Yes": "Ano",
|
||||
"GrabReleases": "Uchopte uvolnění",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Indexery nedostupné z důvodu selhání po dobu delší než 6 hodin: {0}",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "Všechny indexery nejsou k dispozici z důvodu selhání po dobu delší než 6 hodin",
|
||||
"Ended": "Skončil",
|
||||
"GrabReleases": "Získat vydání",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Aplikace nedostupné z důvodu selhání déle než 6 hodin: {0}",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "Všechny aplikace jsou nedostupné z důvodu selhání déle než 6 hodin",
|
||||
"Ended": "Ukončeno",
|
||||
"LastDuration": "lastDuration",
|
||||
"LastExecution": "Poslední poprava",
|
||||
"NextExecution": "Další spuštění",
|
||||
@@ -331,47 +331,47 @@
|
||||
"Replace": "Nahradit",
|
||||
"OnLatestVersion": "Nejnovější verze aplikace {appName} je již nainstalována",
|
||||
"More": "Více",
|
||||
"ApplyTagsHelpTextAdd": "Přidat: Přidá značky k již existujícímu seznamu",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Jak použít značky na vybrané filmy",
|
||||
"DeleteSelectedDownloadClients": "Odstranit klienta pro stahování",
|
||||
"DeleteSelectedIndexersMessageText": "Opravdu chcete smazat {count} vybraný(ch) indexer(ů)?",
|
||||
"DeleteSelectedApplicationsMessageText": "Opravdu chcete odstranit indexer „{0}“?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Opravdu chcete smazat {count} vybraných klientů pro stahování?",
|
||||
"ApplyTagsHelpTextAdd": "Přidat: Přidat štítky do existujícího seznamu štítků",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Jak použít štítky na vybrané aplikace",
|
||||
"DeleteSelectedDownloadClients": "Odstranit klienty pro stahování",
|
||||
"DeleteSelectedIndexersMessageText": "Opravdu chcete odstranit {count} vybraných indexerů?",
|
||||
"DeleteSelectedApplicationsMessageText": "Opravdu chcete odstranit {count} vybraných aplikací?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Opravdu chcete odstranit {count} vybraných klientů pro stahování?",
|
||||
"Year": "Rok",
|
||||
"ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané značky",
|
||||
"DownloadClientPriorityHelpText": "Upřednostněte více klientů pro stahování. Round-Robin se používá pro klienty se stejnou prioritou.",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Jak použít značky na vybrané indexery",
|
||||
"ApplyTagsHelpTextReplace": "Nahradit: Nahradit značky zadanými značkami (prázdné pole vymaže všechny značky)",
|
||||
"ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané štítky",
|
||||
"DownloadClientPriorityHelpText": "Upřednostněte více klientů pro stahování. Pro klienty se stejnou prioritou se používá funkce Round-Robin.",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Jak použít štítky na vybrané indexery",
|
||||
"ApplyTagsHelpTextReplace": "Nahradit: Nahradit štítky zadanými štítky (prázdné pole vymaže všechny štítky)",
|
||||
"Track": "Stopa",
|
||||
"Genre": "Žánry",
|
||||
"Genre": "Žánr",
|
||||
"ConnectionLostReconnect": "{appName} se pokusí připojit automaticky, nebo můžete kliknout na tlačítko znovunačtení níže.",
|
||||
"RecentChanges": "Nedávné změny",
|
||||
"WhatsNew": "Co je nového?",
|
||||
"DeleteAppProfileMessageText": "Opravdu chcete smazat kvalitní profil {0}",
|
||||
"ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude třebaho znovu načíst.",
|
||||
"DeleteAppProfileMessageText": "Opravdu chcete odstranit profil aplikace ‚{name}‘?",
|
||||
"ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude potřeba ho znovu načíst.",
|
||||
"minutes": "Minut",
|
||||
"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",
|
||||
"ApplyChanges": "Použít změny",
|
||||
"ApiKeyValidationHealthCheckMessage": "Aktualizujte svůj klíč API tak, aby měl alespoň {length} znaků. Můžete to provést prostřednictvím nastavení nebo konfiguračního souboru",
|
||||
"AppUpdated": "{appName} aktualizován",
|
||||
"AddDownloadClientImplementation": "Přidat klienta pro stahování - {implementationName}",
|
||||
"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.",
|
||||
"AddDownloadClientImplementation": "Přidat klienta pro stahování – {implementationName}",
|
||||
"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.",
|
||||
"AddCustomFilter": "Přidat vlastní filtr",
|
||||
"AddConnection": "Přidat spojení",
|
||||
"AddConnectionImplementation": "Přidat spojení - {implementationName}",
|
||||
"AddIndexerImplementation": "Přidat indexer - {implementationName}",
|
||||
"AddConnectionImplementation": "Přidat spojení – {implementationName}",
|
||||
"AddIndexerImplementation": "Přidat indexer – {implementationName}",
|
||||
"Publisher": "Vydavatel",
|
||||
"Categories": "Kategorie",
|
||||
"Notification": "Oznámení",
|
||||
"AddApplicationImplementation": "Přidat spojení - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Přidat indexátor - {implementationName}",
|
||||
"AddApplicationImplementation": "Přidat aplikaci – {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Přidat proxy server indexeru – {implementationName}",
|
||||
"Artist": "Umělec",
|
||||
"EditIndexerImplementation": "Upravit indexer - {implementationName}",
|
||||
"Episode": "epizoda",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Všechny seznamy nejsou k dispozici z důvodu selhání",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Seznamy nejsou k dispozici z důvodu selhání: {notificationNames}",
|
||||
"Episode": "Epizoda",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Všechna oznámení jsou nedostupná z důvodu selhání",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Oznámení nedostupná z důvodu selhání: {notificationNames}",
|
||||
"Application": "Aplikace",
|
||||
"AppUpdatedVersion": "{appName} byl aktualizován na verzi `{version}`, abyste získali nejnovější změny, musíte znovu načíst {appName}",
|
||||
"Encoding": "Kódování",
|
||||
@@ -382,49 +382,49 @@
|
||||
"Album": "Album",
|
||||
"Applications": "Aplikace",
|
||||
"Connect": "Oznámení",
|
||||
"EditConnectionImplementation": "Přidat spojení - {implementationName}",
|
||||
"EditConnectionImplementation": "Upravit připojení - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Upravit klienta pro stahování - {implementationName}",
|
||||
"AuthForm": "Formuláře (přihlašovací stránka)",
|
||||
"Clone": "Klonovat",
|
||||
"DefaultNameCopiedProfile": "{name} - Kopírovat",
|
||||
"DisabledForLocalAddresses": "Zakázáno pro místní adresy",
|
||||
"EditApplicationImplementation": "Přidat spojení - {implementationName}",
|
||||
"EditApplicationImplementation": "Upravit aplikaci - {implementationName}",
|
||||
"None": "Žádný",
|
||||
"ResetAPIKeyMessageText": "Opravdu chcete resetovat klíč API?",
|
||||
"Database": "Databáze",
|
||||
"CountDownloadClientsSelected": "{count} vybraných klientů ke stahování",
|
||||
"CountDownloadClientsSelected": "{count} vybraných klientů pro stahování",
|
||||
"CountIndexersSelected": "{count} vybraných indexerů",
|
||||
"EditIndexerProxyImplementation": "Přidat indexátor - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Upravit proxy indexeru - {implementationName}",
|
||||
"AuthBasic": "Základní (vyskakovací okno prohlížeče)",
|
||||
"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.",
|
||||
"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.",
|
||||
"RestartProwlarr": "Restartujte {appName}",
|
||||
"Duration": "Trvání",
|
||||
"EditSelectedDownloadClients": "Upravit vybrané klienty pro stahování",
|
||||
"EditSelectedIndexers": "Upravit vybrané indexery",
|
||||
"AuthenticationMethod": "Metoda ověřování",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Vložte nové heslo",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Vložte nové uživatelské jméno",
|
||||
"AuthenticationMethodHelpTextWarning": "Prosím vyberte platnou metodu ověřování",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Zadejte nové heslo",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Zadejte nové uživatelské jméno",
|
||||
"AuthenticationMethodHelpTextWarning": "Vyberte platnou metodu ověřování",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrďte nové heslo",
|
||||
"days": "dnů",
|
||||
"Id": "ID",
|
||||
"CountApplicationsSelected": "Vybráno {0} kolekcí",
|
||||
"IndexerHDBitsSettingsCodecs": "Kodek",
|
||||
"CountApplicationsSelected": "{count} vybraných aplikací",
|
||||
"IndexerHDBitsSettingsCodecs": "Kodeky",
|
||||
"IndexerHDBitsSettingsMediums": "Střední",
|
||||
"Directory": "Adresář",
|
||||
"CustomFilter": "Vlastní filtry",
|
||||
"CustomFilter": "Vlastní filtr",
|
||||
"ProxyValidationBadRequest": "Nepodařilo se otestovat proxy. StatusCode: {statusCode}",
|
||||
"Default": "Výchozí",
|
||||
"GrabRelease": "Uchopte uvolnění",
|
||||
"GrabRelease": "Získat vydání",
|
||||
"Category": "Kategorie",
|
||||
"BlackholeFolderHelpText": "Složka do které {appName} uloží {extension} soubor",
|
||||
"DownloadClientSettingsUrlBaseHelpText": "Přidá předponu do {connectionName} url, jako např. {url}",
|
||||
"BlackholeFolderHelpText": "Složka, do které {appName} uloží soubor {extension}",
|
||||
"DownloadClientSettingsUrlBaseHelpText": "Přidá předponu k url {clientName}, například {url}",
|
||||
"Any": "Jakákoliv",
|
||||
"BuiltIn": "Vestavěný",
|
||||
"Script": "Skript",
|
||||
"PublishedDate": "Datum zveřejnění",
|
||||
"AllSearchResultsHiddenByFilter": "Všechny výsledky jsou schovány použitým filtrem",
|
||||
"DockerUpdater": "aktualizujte kontejner dockeru, abyste aktualizaci obdrželi",
|
||||
"AllSearchResultsHiddenByFilter": "Všechny výsledky vyhledávání jsou skryty použitým filtrem.",
|
||||
"DockerUpdater": "Aktualizujte kontejner dockeru, abyste získali aktualizaci",
|
||||
"Download": "Stažení",
|
||||
"ErrorRestoringBackup": "Chyba při obnovování zálohy",
|
||||
"ExternalUpdater": "{appName} je nakonfigurován pro použití externího aktualizačního mechanismu",
|
||||
@@ -432,6 +432,206 @@
|
||||
"NoEventsFound": "Nebyly nalezeny žádné události",
|
||||
"RestartReloadNote": "Poznámka: {appName} se během procesu obnovy automaticky restartuje a znovu načte uživatelské rozhraní.",
|
||||
"UpdateAppDirectlyLoadError": "{appName} nelze aktualizovat přímo,",
|
||||
"AptUpdater": "K instalaci aktualizace použijte apt",
|
||||
"InstallLatest": "Nainstalujte nejnovější"
|
||||
"AptUpdater": "K instalaci aktualizace používat apt",
|
||||
"InstallLatest": "Nainstalujte nejnovější",
|
||||
"Stats": "Postavení",
|
||||
"CurrentlyInstalled": "Aktuálně nainstalováno",
|
||||
"Mixed": "Pevný",
|
||||
"ActiveIndexers": "Aktivní indexery",
|
||||
"ActiveApps": "Aktivní aplikace",
|
||||
"AppSettingsSummary": "Aplikace a nastavení pro konfiguraci interakce {appName}u s vašimi programy PVR",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Pokud je torrent blokován pomocí hash, nemusí být u některých indexerů správně odmítnut během RSS/vyhledávání. Povolení této funkce umožní jeho odmítnutí po zachycení torrentu, ale před jeho odesláním klientovi.",
|
||||
"ApplicationsLoadError": "Nelze načíst seznam aplikací",
|
||||
"AppProfileInUse": "Používaný profil aplikace",
|
||||
"AppsMinimumSeedersHelpText": "Minimální počet seederů požadovaných aplikacemi pro indexer, výchozí hodnota synchronizačního profilu je prázdná",
|
||||
"AverageGrabs": "Průměrné získání",
|
||||
"AverageQueries": "Průměrné dotazy",
|
||||
"AdvancedSettingsShownClickToHide": "Rozšířená nastavení jsou zobrazená, klikněte pro skrytí",
|
||||
"AdvancedSettingsHiddenClickToShow": "Rozšířená nastavení jsou skrytá, klikněte pro zobrazení",
|
||||
"AppsMinimumSeeders": "Minimální počet seederů aplikací",
|
||||
"AddNewIndexer": "Přidat nový indexer",
|
||||
"AddToDownloadClient": "Přidat vydání do klienta pro stahování",
|
||||
"AddIndexerProxy": "Přidat proxy server indexeru",
|
||||
"AppProfileSelectHelpText": "Profily aplikace slouží k ovládání nastavení RSS, automatického vyhledávání a interaktivního vyhledávání při synchronizaci aplikace",
|
||||
"BookSearch": "Vyhledávání knihy",
|
||||
"ClearHistory": "Vymazat historii",
|
||||
"Auth": "Ověřování",
|
||||
"ConnectSettingsSummary": "Oznámení a vlastní skripty",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Opravdu chcete odstranit ‚{name}‘ z {appName}u?",
|
||||
"AuthQueries": "Ověřovací dotazy",
|
||||
"CountIndexersAvailable": "{count} dostupných indexerů",
|
||||
"ApplicationTagsHelpText": "Synchronizovat s touto aplikací indexery, které mají jeden nebo více shodných štítků. Pokud zde nejsou uvedeny žádné štítky, nebude synchronizace žádných indexerů znemožněna kvůli jejich štítkům.",
|
||||
"ApplicationTagsHelpTextWarning": "Štítky je potřeba používat opatrně, mohou mít nechtěné účinky. Aplikace se štítkem se bude synchronizovat pouze s indexery se stejným štítkem.",
|
||||
"BasicSearch": "Základní vyhledávání",
|
||||
"ClearHistoryMessageText": "Opravdu chcete vymazat celou historii {appName}u?",
|
||||
"AddDownloadClientToProwlarr": "Přidání klienta pro stahování umožňuje {appName} odesílat vydání přímo z uživatelského rozhraní při ručním vyhledávání.",
|
||||
"AddRemoveOnly": "Pouze přidat a odebrat",
|
||||
"AudioSearch": "Vyhledávání audia",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Synchronizovat odmítnuté blokované hashe torrentů při získávání",
|
||||
"Apps": "Aplikace",
|
||||
"ClickToChangeQueryOptions": "Kliknutím změníte možnosti dotazu",
|
||||
"Author": "Autor",
|
||||
"AverageResponseTimesMs": "Průměrné doby odezvy indexerů (ms)",
|
||||
"Book": "Kniha",
|
||||
"BookSearchTypes": "Typy vyhledávání knihy",
|
||||
"AddApplication": "Přidat aplikaci",
|
||||
"AddSyncProfile": "Přidat synchronizační profil",
|
||||
"AddedToDownloadClient": "Vydání přidáno do klienta",
|
||||
"AddCategory": "Přidat kategorii",
|
||||
"AreYouSureYouWantToDeleteCategory": "Opravdu chcete odstranit namapovanou kategorii?",
|
||||
"DownloadClientRTorrentSettingsUrlPath": "Cesta URL",
|
||||
"DefaultCategory": "Výchozí kategorie",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "Přidá předponu do Flood API, například {url}",
|
||||
"DownloadClientFreeboxSettingsApiUrl": "URL API",
|
||||
"DownloadClientSettingsInitialState": "Počáteční stav",
|
||||
"DownloadClientSettingsPriorityItemHelpText": "Priorita použitá při získávání položek",
|
||||
"FailedToFetchSettings": "Nepodařilo se načíst nastavení",
|
||||
"GrabTitle": "Získat název",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "Tato volba vyžaduje NzbGet verze alespoň 16.0",
|
||||
"EnableRssHelpText": "Povolit kanál RSS pro indexer",
|
||||
"DeleteApplication": "Odstranit aplikaci",
|
||||
"DeleteSelectedApplications": "Odstranit vybrané aplikace",
|
||||
"DeleteSelectedIndexers": "Odstranit vybrané indexery",
|
||||
"DevelopmentSettings": "Nastavení pro vývoj",
|
||||
"DisabledUntil": "Zakázáno do",
|
||||
"DownloadClientCategory": "Kategorie klienta pro stahování",
|
||||
"DownloadClientDelugeSettingsUrlBaseHelpText": "Přidá předponu do url adresy json deluge, viz {url}",
|
||||
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Volitelná sdílená složka pro stahování, ponechte prázdné pro použití výchozího umístění Download Station",
|
||||
"DownloadClientFloodSettingsAdditionalTags": "Další štítky",
|
||||
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Přidá vlastnosti médií jako štítky. Nápovědy jsou příklady.",
|
||||
"DownloadClientFloodSettingsTagsHelpText": "Počáteční štítky stahování. Aby bylo stahování rozpoznáno, musí mít všechny počáteční štítky. Tím se zabrání konfliktům s nesouvisejícími stahováními.",
|
||||
"DownloadClientFreeboxSettingsAppId": "ID aplikace",
|
||||
"DownloadClientFreeboxSettingsAppToken": "Token aplikace",
|
||||
"DownloadClientFreeboxSettingsAppTokenHelpText": "Token aplikace získaný při vytváření přístupu k Freebox API (tj. ‚app_token‘)",
|
||||
"DownloadClientFreeboxSettingsHostHelpText": "Název hostitele nebo IP adresa hostitele Freeboxu, výchozí hodnota je ‚{url}‘ (funguje pouze ve stejné síti)",
|
||||
"DownloadClientFreeboxSettingsPortHelpText": "Port použitý pro přístup k rozhraní Freeboxu, výchozí hodnota je ‚{port}‘",
|
||||
"DownloadClientPneumaticSettingsNzbFolder": "Složka Nzb",
|
||||
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Tato složka bude muset být dostupná z XBMC",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Rozvržení obsahu",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Stahovat v postupném pořadí (qBittorrent 4.1.0+)",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrder": "Postupné pořadí",
|
||||
"DownloadClientRTorrentSettingsAddStoppedHelpText": "Povolení přidá torrenty a magnety do rTorrentu v zastaveném stavu. To může způsobit poškození souborů magnet.",
|
||||
"DownloadClientRTorrentSettingsDirectoryHelpText": "Volitelné umístění pro stahování, ponechte prázdné pro použití výchozího umístění rTorrentu",
|
||||
"DownloadClientSettingsAddPaused": "Přidat pozastavené",
|
||||
"DownloadClientSettingsDefaultCategorySubFolderHelpText": "Výchozí záložní kategorie, pokud pro vydání neexistuje žádná namapovaná kategorie. Přidáním kategorie specifické pro {appName} se zabrání konfliktům s nesouvisejícími stahováními, která nejsou {appName}. Použití kategorie je nepovinné, ale důrazně se doporučuje. Vytvoří podadresář [kategorie] ve výstupním adresáři.",
|
||||
"DownloadClientSettingsUseSslHelpText": "Při připojení k {clientName} použít zabezpečené připojení",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "Volitelné umístění pro stahování, ponechte prázdné pro použití výchozího umístění Transmission",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Přidá předponu k url {clientName} rpc, např. {url}, výchozí hodnota je ‚{defaultUrl}‘",
|
||||
"DownloadClientsSettingsSummary": "Konfigurace klientů pro stahování pro integraci do vyhledávání v uživatelském rozhraní {appName}",
|
||||
"ElapsedTime": "Uplynulý čas",
|
||||
"EnableIndexer": "Povolit indexer",
|
||||
"External": "Externí",
|
||||
"FullSync": "Úplná synchronizace",
|
||||
"HealthMessagesInfoBox": "Další informace o příčině těchto zpráv o kontrole zdraví najdete kliknutím na odkaz wiki (ikona knihy) na konci řádku nebo kontrolou [logů]({link}). Pokud máte potíže s interpretací těchto zpráv, můžete se obrátit na naši podporu, a to na níže uvedených odkazech.",
|
||||
"Implementation": "Implementace",
|
||||
"DeleteClientCategory": "Odstranit kategorii klienta pro stahování",
|
||||
"DownloadClientRTorrentSettingsAddStopped": "Přidat zastavené",
|
||||
"DeleteIndexerProxy": "Odstranit proxy indexerů",
|
||||
"Description": "Popis",
|
||||
"IncludeManualGrabsHelpText": "Včetně ručních získání provedených v {appName}",
|
||||
"GoToApplication": "Přejít na aplikaci",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "Volitelné umístění pro stahování, ponechte prázdné pro použití výchozího umístění Aria2",
|
||||
"DownloadClientPneumaticSettingsStrmFolderHelpText": "Soubory .strm v této složce budou importovány pomocí drone",
|
||||
"Destination": "Cíl",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Stahovat nejprve první a poslední kusy (qBittorrent 4.1.0+)",
|
||||
"DeleteSelectedIndexer": "Odstranit vybraný indexer",
|
||||
"DownloadClientPneumaticSettingsStrmFolder": "Složka Strm",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Nejprve první a poslední",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Definujte základní adresu URL Freebox API s verzí API, např. ‚{url}‘, výchozí hodnota je ‚{defaultApiUrl}‘",
|
||||
"HistoryCleanup": "Vyčištění historie",
|
||||
"DownloadClientFreeboxSettingsAppIdHelpText": "ID aplikace zadané při vytváření přístupu k Freebox API (tj. ‚app_id‘)",
|
||||
"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+)",
|
||||
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Počáteční stav torrentů přidaných do qBittorrentu. Pamatujte, že vynucené torrenty nedodržují omezení týkající se seedů",
|
||||
"DownloadClientQbittorrentSettingsUseSslHelpText": "Používat zabezpečené připojení. Viz Možnosti -> WebUI -> Webové uživatelské rozhraní -> ‚Použít HTTPS místo HTTP‘ v qBittorrentu.",
|
||||
"FilterPlaceHolder": "Hledat indexery",
|
||||
"FoundCountReleases": "Nalezeno {itemCount} vydání",
|
||||
"DownloadClientRTorrentSettingsUrlPathHelpText": "Cesta ke koncovému bodu XMLRPC, viz {url}. Při použití ruTorrentu je to obvykle RPC2 nebo [cesta k ruTorrentu]{url2}.",
|
||||
"DownloadClientSettingsDefaultCategoryHelpText": "Výchozí záložní kategorie, pokud pro vydání neexistuje žádná namapovaná kategorie. Přidáním kategorie specifické pro {appName} se zabrání konfliktům s nesouvisejícími stahováními, která nejsou {appName}. Použití kategorie je nepovinné, ale důrazně se doporučuje.",
|
||||
"DownloadClientSettingsInitialStateHelpText": "Počáteční stav pro torrenty přidané do {clientName}",
|
||||
"EditCategory": "Upravit kategorii",
|
||||
"HistoryDetails": "Podrobnosti o historii",
|
||||
"Donate": "Darovat",
|
||||
"DownloadClientSettingsDestinationHelpText": "Ručně určuje cíl stahování, pro použití výchozího nastavení nechte prázdné",
|
||||
"EnabledRedirected": "Povoleno, Přesměrováno",
|
||||
"EditSyncProfile": "Upravit profil synchronizace",
|
||||
"DeleteAppProfile": "Odstranit profil aplikace",
|
||||
"IndexerSettingsAppsMinimumSeeders": "Minimální počet seederů aplikací",
|
||||
"UsenetBlackholeNzbFolder": "Složka Nzb",
|
||||
"SearchIndexers": "Hledat indexery",
|
||||
"IndexerSettingsAppsMinimumSeedersHelpText": "Minimální počet seederů požadovaných aplikacemi pro indexer, výchozí hodnota synchronizačního profilu je prázdná",
|
||||
"IndexerProxy": "Proxy indexeru",
|
||||
"IndexerBeyondHDSettingsRssKeyHelpText": "Klíč RSS ze stránky (Naleznete v Moje zabezpečení => Klíč RSS)",
|
||||
"IndexerHDBitsSettingsCodecsHelpText": "Pokud není zadáno, použijí se všechny možnosti.",
|
||||
"IndexerHDBitsSettingsUsernameHelpText": "Uživatelské jméno stránky",
|
||||
"IndexerAvistazSettingsUsernameHelpTextWarning": "Rozhraní API v tomto indexeru mohou používat pouze hodnosti člen a vyšší.",
|
||||
"IndexerBeyondHDSettingsApiKeyHelpText": "Klíč API ze stránky (Naleznete v Moje zabezpečení => Klíč API)",
|
||||
"IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání",
|
||||
"IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání",
|
||||
"IndexerProxies": "Proxy indexeru",
|
||||
"IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání",
|
||||
"IndexerHistoryLoadError": "Chyba při načítání historie indexeru",
|
||||
"IndexerId": "ID indexeru",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Indexery nemají žádnou definici a nebudou fungovat: {indexerNames}. Odeberte je a (nebo) znovu přidejte do {appName}.",
|
||||
"IndexerAlphaRatioSettingsExcludeSceneHelpText": "Vyloučit vydání SCENE z výsledků",
|
||||
"IndexerAlreadySetup": "Alespoň jedna instance indexeru je již nastavena",
|
||||
"IndexerAvistazSettingsPasswordHelpText": "Heslo stránky",
|
||||
"IndexerAvistazSettingsPidHelpText": "PID ze stránky Můj účet nebo Můj profil",
|
||||
"IndexerAvistazSettingsUsernameHelpText": "Uživatelské jméno stránky",
|
||||
"IndexerBeyondHDSettingsLimitedOnly": "Pouze omezené",
|
||||
"IndexerBeyondHDSettingsLimitedOnlyHelpText": "Hledat pouze freeleech (Omezené nahrávání)",
|
||||
"IndexerCategories": "Kategorie indexeru",
|
||||
"IndexerDisabled": "Indexer zakázán",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexery s neplatnými klienty pro stahování: {indexerNames}.",
|
||||
"IndexerDownloadClientHelpText": "Určete, který klient pro stahování se použije pro grabování v rámci {appName} z tohoto indexeru",
|
||||
"IndexerFailureRate": "Míra selhání indexeru",
|
||||
"IndexerFileListSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání",
|
||||
"IndexerFileListSettingsPasskeyHelpText": "Přístupový klíč stránky (Jedná se o alfanumerický řetězec v url adrese trackeru zobrazené v klientovi pro stahování)",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpText": "Klíč API ze stránky (Naleznete v Nastavení => Nastavení přístupu)",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNames": "Hledat názvy skupin",
|
||||
"IndexerHDBitsSettingsFreeleechOnlyHelpText": "Zobrazit pouze freeleech vydání",
|
||||
"IndexerHDBitsSettingsOriginsHelpText": "Pokud není zadáno, použijí se všechny možnosti.",
|
||||
"IndexerHDBitsSettingsUseFilenames": "Použít názvy souborů",
|
||||
"IndexerHealthCheckNoIndexers": "Nejsou povoleny žádné indexery, {appName} nevrátí výsledky vyhledávání",
|
||||
"IndexerIPTorrentsSettingsCookieUserAgent": "Uživatelský agent cookie",
|
||||
"IndexerIPTorrentsSettingsCookieUserAgentHelpText": "Uživatelský agent přidružený cookie použitý z prohlížeče",
|
||||
"IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání",
|
||||
"IndexerNebulanceSettingsApiKeyHelpText": "Klíč API z Nastavení uživatele > Klíče API. Klíč musí mít oprávnění Seznam a Stáhnout",
|
||||
"IndexerNewznabSettingsAdditionalParametersHelpText": "Dodatečné parametry Newznab",
|
||||
"IndexerNewznabSettingsApiKeyHelpText": "Klíč API stránky",
|
||||
"IndexerObsoleteCheckMessage": "Indexery jsou zastaralé nebo byly aktualizovány: {0}. Odeberte je a (nebo) znovu přidejte do {appName}",
|
||||
"IndexerOrpheusSettingsApiKeyHelpText": "Klíč API ze stránky (Naleznete v Nastavení => Nastavení přístupu)",
|
||||
"IndexerPassThePopcornSettingsApiUserHelpText": "Tato nastavení naleznete v nastavení zabezpečení PassThePopcorn (Upravit profil > Zabezpečení).",
|
||||
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání",
|
||||
"IndexerRedactedSettingsApiKeyHelpText": "Klíč API ze stránky (Naleznete v Nastavení => Nastavení přístupu)",
|
||||
"IndexerRss": "RSS indexeru",
|
||||
"LastFailure": "Poslední selhání",
|
||||
"IndexerSettingsAdditionalParameters": "Dodatečné parametry",
|
||||
"IndexerSettingsApiPath": "Cesta k API",
|
||||
"IndexerSettingsApiUser": "Uživatel API",
|
||||
"IndexerAuth": "Ověření indexeru",
|
||||
"IndexerInfo": "Informace o indexeru",
|
||||
"IndexerName": "Název indexeru",
|
||||
"IndexerDetails": "Podrobnosti indexeru",
|
||||
"IndexerHDBitsSettingsPasskeyHelpText": "Přístupový klíč z Podrobnosti o uživateli",
|
||||
"IndexerQuery": "Dotaz na indexer",
|
||||
"IndexerAlphaRatioSettingsExcludeScene": "Vyloučit SCENE",
|
||||
"IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání",
|
||||
"IndexerBeyondHDSettingsSearchTypes": "Hledat typy",
|
||||
"IndexerBeyondHDSettingsSearchTypesHelpText": "Vyberte typy vydání, které vás zajímají. Pokud není vybrán žádný, použijí se všechny možnosti.",
|
||||
"IndexerFileListSettingsUsernameHelpText": "Uživatelské jméno stránky",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Musí mít oprávnění Uživatel a Torrenty",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Hledat vydání podle názvů skupin",
|
||||
"IndexerHDBitsSettingsMediumsHelpText": "Pokud není zadáno, použijí se všechny možnosti.",
|
||||
"IndexerHDBitsSettingsUseFilenamesHelpText": "Zaškrtněte tuto možnost, pokud chcete používat názvy souborů torrentů jako názvy vydání",
|
||||
"IndexerNewznabSettingsVipExpirationHelpText": "Zadejte datum (rrrr-mm-dd) pro vypršení VIP nebo prázdné, {appName} bude upozorňovat 1 týden před vypršením VIP",
|
||||
"IndexerNzbIndexSettingsApiKeyHelpText": "Klíč API stránky",
|
||||
"IndexerPassThePopcornSettingsApiKeyHelpText": "Klíč API stránky",
|
||||
"IndexerMTeamTpSettingsApiKeyHelpText": "Klíč API ze stránky (Naleznete v Uživatelský ovládací panel => Zabezpečení => Laboratoř)",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnly": "Pouze Golden Popcorn",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Hledat pouze vydání Golden Popcorn",
|
||||
"IndexerSettingsApiPathHelpText": "Cesta k api, obvykle {url}",
|
||||
"IndexerAvistazSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání",
|
||||
"InitialFailure": "Úvodní selhání",
|
||||
"IndexerTorrentSyndikatSettingsApiKeyHelpText": "Klíč API stránky",
|
||||
"SearchTypes": "Hledat typy"
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"CustomFilters": "Bruger Tilpassede Filtere",
|
||||
"ConnectSettingsSummary": "Notifikationer, forbindelser til medieservere/-afspillere og brugerdefinerede scripts",
|
||||
"Connections": "Forbindelser",
|
||||
"ConnectionLost": "Forbindelse Mistet",
|
||||
"ConnectionLost": "Forbindelse mistet",
|
||||
"Connect": "Notifikationer",
|
||||
"Component": "Komponent",
|
||||
"Columns": "Kolonner",
|
||||
@@ -57,7 +57,7 @@
|
||||
"MIA": "MIA",
|
||||
"ResetAPIKey": "Nulstil API-nøgle",
|
||||
"SettingsTimeFormat": "Tidsformat",
|
||||
"SystemTimeCheckMessage": "Systemtiden er slukket mere end 1 dag. Planlagte opgaver kører muligvis ikke korrekt, før tiden er rettet",
|
||||
"SystemTimeHealthCheckMessage": "Systemtiden er slukket mere end 1 dag. Planlagte opgaver kører muligvis ikke korrekt, før tiden er rettet",
|
||||
"UnsavedChanges": "Ugemte ændringer",
|
||||
"Updates": "Opdateringer",
|
||||
"MoreInfo": "Mere info",
|
||||
@@ -101,12 +101,12 @@
|
||||
"CloseCurrentModal": "Luk Nuværende Modal",
|
||||
"CouldNotConnectSignalR": "Kunne ikke oprette forbindelse til SignalR, UI opdateres ikke",
|
||||
"DeleteApplicationMessageText": "Er du sikker på, at du vil slette underretningen '{0}'?",
|
||||
"DeleteDownloadClientMessageText": "Er du sikker på, at du vil slette downloadklienten '{0}'?",
|
||||
"DeleteDownloadClientMessageText": "Er du sikker på, at du vil fjerne downloadklienten »{name}«?",
|
||||
"DeleteIndexerProxyMessageText": "Er du sikker på, at du vil slette tagget '{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}«?",
|
||||
"DeleteTag": "Slet tag",
|
||||
"DeleteTagMessageText": "Er du sikker på, at du vil slette tagget '{0}'?",
|
||||
"DeleteTagMessageText": "Er du sikker på, at du vil slette etiketten »{label}«?",
|
||||
"Discord": "Discord",
|
||||
"Docker": "Docker",
|
||||
"Donations": "Donationer",
|
||||
@@ -266,7 +266,7 @@
|
||||
"Status": "Status",
|
||||
"DownloadClientsLoadError": "Kunne ikke indlæse downloadklienter",
|
||||
"UpdateStartupTranslocationHealthCheckMessage": "Kan ikke installere opdatering, fordi startmappen '{startupFolder}' er i en App Translocation-mappe.",
|
||||
"UpdateMechanismHelpText": "Brug den indbyggede opdateringsfunktion eller et script",
|
||||
"UpdateMechanismHelpText": "Brug {appName}s indbyggede opdateringsfunktion eller et script",
|
||||
"View": "Udsigt",
|
||||
"Warn": "Advare",
|
||||
"AddingTag": "Tilføjer tag",
|
||||
@@ -302,12 +302,12 @@
|
||||
"InteractiveSearch": "Interaktiv søgning",
|
||||
"LogFiles": "Logfiler",
|
||||
"ApiKey": "API-nøgle",
|
||||
"AppDataDirectory": "AppData-bibliotek",
|
||||
"AppDataDirectory": "AppData-mappe",
|
||||
"CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er",
|
||||
"ChangeHasNotBeenSavedYet": "Ændring er endnu ikke gemt",
|
||||
"ConnectSettings": "Forbind indstillinger",
|
||||
"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}«?",
|
||||
"DeleteDownloadClient": "Slet Download Client",
|
||||
"MaintenanceRelease": "Vedligeholdelsesfrigivelse: fejlrettelser og andre forbedringer. Se Github Commit History for flere detaljer",
|
||||
"Filters": "Filter",
|
||||
@@ -360,7 +360,7 @@
|
||||
"DeleteAppProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}",
|
||||
"RecentChanges": "Seneste ændringer",
|
||||
"WhatsNew": "Hvad er nyt?",
|
||||
"ConnectionLostReconnect": "Radarr vil prøve at tilslutte automatisk, eller du kan klikke genindlæs forneden.",
|
||||
"ConnectionLostReconnect": "{appName} vil prøve at tilslutte automatisk. Ellers du kan klikke genindlæs forneden.",
|
||||
"minutes": "Protokoller",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Alle lister er utilgængelige på grund af fejl",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Lister utilgængelige på grund af fejl: {notificationNames}",
|
||||
@@ -375,7 +375,7 @@
|
||||
"AddConnection": "Tilføj forbindelse",
|
||||
"EditConnectionImplementation": "Tilføj forbindelse - {implementationName}",
|
||||
"AddApplicationImplementation": "Tilføj forbindelse - {implementationName}",
|
||||
"AddIndexerImplementation": "Tilføj betingelse - {implementationName}",
|
||||
"AddIndexerImplementation": "Tilføj indeksør - {implementationName}",
|
||||
"ApplyChanges": "Anvend ændringer",
|
||||
"AddDownloadClientImplementation": "Tilføj downloadklient - {implementationName}",
|
||||
"Album": "album",
|
||||
@@ -394,7 +394,7 @@
|
||||
"IndexerHDBitsSettingsMediums": "Medium",
|
||||
"CustomFilter": "Bruger Tilpassede Filtere",
|
||||
"ProxyValidationBadRequest": "Kunne ikke teste proxy. Statuskode: {statusCode}",
|
||||
"GrabRelease": "Grab Release",
|
||||
"GrabRelease": "Hent udgivelse",
|
||||
"Script": "Manuskript",
|
||||
"BuiltIn": "Indbygget",
|
||||
"PublishedDate": "Udgivelsesdato",
|
||||
@@ -410,5 +410,23 @@
|
||||
"ExternalUpdater": "{appName} er konfigureret til at bruge en ekstern opdateringsmekanisme",
|
||||
"RestartReloadNote": "Bemærk: {appName} genstarter automatisk og genindlæser brugergrænsefladen under gendannelsesprocessen.",
|
||||
"UpdateAppDirectlyLoadError": "Kan ikke opdatere {appName} direkte,",
|
||||
"InstallLatest": "Installer senest"
|
||||
"InstallLatest": "Installer senest",
|
||||
"Clone": "Luk",
|
||||
"CurrentlyInstalled": "Aktuelt installeret",
|
||||
"Stats": "Status",
|
||||
"Mixed": "Fast",
|
||||
"PrioritySettings": "Prioritet: {priority}",
|
||||
"WouldYouLikeToRestoreBackup": "Vil du gendanne sikkerhedskopien »{name}«?",
|
||||
"AppProfileSelectHelpText": "App-profiler bruges til at styre indstillinger for RSS, automatisk søgning og interaktiv søgning ved synkronisering med applikationer",
|
||||
"ActiveIndexers": "Aktive indeksører",
|
||||
"TheLogLevelDefault": "Logniveauet er som standard 'Info' og kan ændres under [Generelle indstillinger](/settings/general)",
|
||||
"AddedToDownloadClient": "Udgivelse føjet til klient",
|
||||
"AdvancedSettingsHiddenClickToShow": "Avancerede indstillinger er skjult. Klik for at vise",
|
||||
"AdvancedSettingsShownClickToHide": "Avancerede indstillinger vises. Klik for at skjule",
|
||||
"ApiKeyValidationHealthCheckMessage": "Opdater din API-nøgle til at være på mindste {length} karakterer. Dette kan gøres i indstillingerne eller i konfigurationsfilen",
|
||||
"AppProfileInUse": "App-profil i brug",
|
||||
"Episode": "afsnit",
|
||||
"Artist": "kunstner",
|
||||
"Id": "ID",
|
||||
"Encoding": "Indkodning"
|
||||
}
|
||||
|
||||
@@ -87,13 +87,13 @@
|
||||
"Delete": "Löschen",
|
||||
"DeleteAppProfile": "App-Profil löschen",
|
||||
"DeleteApplication": "Applikation löschen",
|
||||
"DeleteApplicationMessageText": "Wirklich die Applikation '{0}' löschen?",
|
||||
"DeleteApplicationMessageText": "Bist du sicher, dass du die Anwendung „{name}“ löschen möchtest?",
|
||||
"DeleteBackup": "Sicherung löschen",
|
||||
"DeleteBackupMessageText": "Soll das Backup '{name}' wirklich gelöscht werden?",
|
||||
"DeleteDownloadClient": "Download-Client löschen",
|
||||
"DeleteDownloadClientMessageText": "Bist du sicher, dass du den Download Client '{name}' wirklich löschen willst?",
|
||||
"DeleteIndexerProxy": "Indexer Proxy löschen",
|
||||
"DeleteIndexerProxyMessageText": "Tag '{0}' wirklich löschen?",
|
||||
"DeleteIndexerProxyMessageText": "Bist du sicher, dass du den Indexer-Proxy „{name}“ löschen möchtest?",
|
||||
"DeleteNotification": "Benachrichtigung löschen",
|
||||
"DeleteNotificationMessageText": "Bist du sicher, dass du die Benachrichtigung '{name}' wirklich löschen willst?",
|
||||
"DeleteTag": "Tag löschen",
|
||||
@@ -109,7 +109,7 @@
|
||||
"DownloadClientSettings": "Downloader Einstellungen",
|
||||
"DownloadClientStatusAllClientHealthCheckMessage": "Alle Download Clients sind aufgrund von Fehlern nicht verfügbar",
|
||||
"DownloadClientStatusSingleClientHealthCheckMessage": "Download Clients aufgrund von Fehlern nicht verfügbar: {downloadClientNames}",
|
||||
"DownloadClients": "Downloader",
|
||||
"DownloadClients": "Download Clients",
|
||||
"DownloadClientsSettingsSummary": "Download der Client-Konfigurationen für die Integration in die {appName} UI-Suche",
|
||||
"Duration": "Dauer",
|
||||
"Edit": "Bearbeiten",
|
||||
@@ -118,10 +118,10 @@
|
||||
"ElapsedTime": "Vergangene Zeit",
|
||||
"Enable": "Aktivieren",
|
||||
"EnableAutomaticSearch": "Automatische Suche einschalten",
|
||||
"EnableAutomaticSearchHelpText": "Wird für automatische Suchen genutzt die vom Benutzer oder von {appName} gestartet werden",
|
||||
"EnableAutomaticSearchHelpText": "Wird verwendet, wenn die automatische Suche über die Benutzeroberfläche oder durch {appName} durchgeführt wird.",
|
||||
"EnableIndexer": "Indexer aktivieren",
|
||||
"EnableInteractiveSearch": "Interaktive Suche einschalten",
|
||||
"EnableInteractiveSearchHelpText": "Wird bei der manuellen Suche benutzt",
|
||||
"EnableInteractiveSearchHelpText": "Wird verwendet, wenn die interaktive Suche verwendet wird",
|
||||
"EnableRss": "RSS aktivieren",
|
||||
"EnableRssHelpText": "RSS-Feed für Indexer aktivieren",
|
||||
"EnableSSL": "SSL",
|
||||
@@ -131,13 +131,13 @@
|
||||
"Encoding": "Codierung",
|
||||
"Ended": "Beendet",
|
||||
"Error": "Fehler",
|
||||
"ErrorLoadingContents": "Fehler beim laden der Inhalte",
|
||||
"EventType": "Event Typ",
|
||||
"Events": "Events",
|
||||
"ErrorLoadingContents": "Fehler beim Laden von Inhalten",
|
||||
"EventType": "Ereignistyp",
|
||||
"Events": "Ereignisse",
|
||||
"Exception": "Ausnahme",
|
||||
"ExistingTag": "Vorhandener Tag",
|
||||
"Failed": "Fehlgeschlagen",
|
||||
"FeatureRequests": "Funktionsanfragen",
|
||||
"FeatureRequests": "Feature Anfragen",
|
||||
"Filename": "Dateiname",
|
||||
"Files": "Dateien",
|
||||
"Filter": "Filter",
|
||||
@@ -153,19 +153,19 @@
|
||||
"GeneralSettingsSummary": "Port, SSL, Benutzername/Passwort, Proxy, Analytik und Updates",
|
||||
"GrabReleases": "Release erfassen",
|
||||
"GrabTitle": "Titel holen",
|
||||
"Grabbed": "Erfasste",
|
||||
"Grabbed": "Geholt",
|
||||
"Grabs": "Erfasse",
|
||||
"Health": "Zustandsüberwachung",
|
||||
"Health": "Gesundheit",
|
||||
"NoIssuesWithYourConfiguration": "Keine Probleme mit deiner Konfiguration",
|
||||
"HideAdvanced": "Erweiterte Ansicht",
|
||||
"HideAdvanced": "Erweiterte Einstellungen ausblenden",
|
||||
"History": "Verlauf",
|
||||
"HistoryCleanup": "Verlaufsbereinigung",
|
||||
"HistoryCleanupDaysHelpText": "Auf 0 setzen um das automatische leeren des Papierkorbs zu deaktivieren",
|
||||
"HistoryCleanupDaysHelpTextWarning": "Datien im Papierkorb die älter sind als der gewählte Wert, werden endgültig gelöscht",
|
||||
"HomePage": "Startseite",
|
||||
"HomePage": "Hauptseite",
|
||||
"Host": "Host",
|
||||
"Hostname": "Hostname",
|
||||
"Id": "Id",
|
||||
"Id": "ID",
|
||||
"IgnoredAddresses": "Ignorierte Adressen",
|
||||
"IllRestartLater": "Später neustarten",
|
||||
"IncludeHealthWarningsHelpText": "Zustandswarnung",
|
||||
@@ -176,12 +176,12 @@
|
||||
"IndexerFlags": "Indexer-Flags",
|
||||
"IndexerHealthCheckNoIndexers": "Keine Indexer aktiviert, {appName} wird keine Suchergebnisse zurückgeben",
|
||||
"IndexerInfo": "Indexer-Info",
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Alle Indexer sind wegen über 6 Stunden langen bestehender Fehler nicht verfügbar",
|
||||
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Indexer wegen über 6 Stunden langen bestehenden Fehlern nicht verfügbar: {indexerNames}",
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Alle Indexer sind aufgrund von Fehlern länger als 6 Stunden nicht verfügbar",
|
||||
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Indexer sind aufgrund von Fehlern länger als 6 Stunden nicht verfügbar: {indexerNames}",
|
||||
"IndexerName": "Indexer-Name",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Indexer haben keine Definition und werden nicht funktionieren: {indexerNames}. Bitte entferne und (oder) füge diese neu zu {appName} hinzu",
|
||||
"IndexerObsoleteCheckMessage": "Indexer sind nicht mehr verfügbar oder wurden aktualiiert: {0}. Bitte enfernen und (oder) neu zu {appName} hinzufügen",
|
||||
"IndexerPriority": "Priorität",
|
||||
"IndexerPriority": "Indexer-Priorität",
|
||||
"IndexerPriorityHelpText": "Indexer Priorität von 1 (höchste) bis 50 (niedrigste). Standard: 25.",
|
||||
"IndexerProxies": "Indexer-Proxies",
|
||||
"IndexerProxy": "Indexer-Proxy",
|
||||
@@ -192,27 +192,27 @@
|
||||
"IndexerSettingsSummary": "Konfiguration verschiedener globaler Indexer Einstellungen, einschließlich Proxies.",
|
||||
"IndexerSite": "Indexer-Seite",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Alle Indexer sind aufgrund von Fehlern nicht verfügbar",
|
||||
"IndexerStatusUnavailableHealthCheckMessage": "Indexer aufgrund von Fehlern nicht verfügbar: {indexerNames}",
|
||||
"IndexerTagsHelpText": "Benutze Tags, um Indexer-Proxies zu spezifizieren, mit welchen Apps der Indexer synchronisiert oder um Indexer zu organisieren.",
|
||||
"IndexerStatusUnavailableHealthCheckMessage": "Indexer nicht verfügbar aufgrund von Fehlern: {indexerNames}",
|
||||
"IndexerTagsHelpText": "Verwende Tags, um Indexer-Proxys oder die Apps, mit denen der Indexer synchronisiert wird, anzugeben.",
|
||||
"IndexerVipExpiredHealthCheckMessage": "Die VIP Indexer Vorteile sind abgelaufen: {indexerNames}",
|
||||
"IndexerVipExpiringHealthCheckMessage": "Die Indexer VIP Vorteile verfallen bald: {indexerNames}",
|
||||
"Indexers": "Indexer",
|
||||
"Info": "Info",
|
||||
"InstanceName": "Instanzname",
|
||||
"InstanceNameHelpText": "Instanzname im Browser-Tab und für Syslog-Anwendungsname",
|
||||
"InstanceNameHelpText": "Instanzname im Tab und für den Syslog-App-Namen",
|
||||
"InteractiveSearch": "Interaktive Suche",
|
||||
"Interval": "Intervall",
|
||||
"KeyboardShortcuts": "Tastenkürzel",
|
||||
"Language": "Sprache",
|
||||
"LastDuration": "Letzte Dauer",
|
||||
"LastExecution": "Letzte Ausführung",
|
||||
"LastWriteTime": "Zuletzt beschrieben",
|
||||
"LastWriteTime": "Letzte Schreibzeit",
|
||||
"LaunchBrowserHelpText": " Öffne die Startseite von {appName} im Webbrowser nach dem Start.",
|
||||
"Level": "Stufe",
|
||||
"Level": "Level",
|
||||
"Link": "Links",
|
||||
"LogFiles": "Protokolle",
|
||||
"LogLevel": "Log Level",
|
||||
"LogLevelTraceHelpTextWarning": "Trace logging sollte nur kurzzeitig aktiviert werden",
|
||||
"LogFiles": "Protokolldateien",
|
||||
"LogLevel": "Protokollstufe",
|
||||
"LogLevelTraceHelpTextWarning": "Die Trace-Protokollierung sollte nur vorübergehend aktiviert werden",
|
||||
"Logging": "Protokollierung",
|
||||
"Logs": "Protokolle",
|
||||
"MIA": "MIA",
|
||||
@@ -220,7 +220,7 @@
|
||||
"Manual": "Manuell",
|
||||
"MappedDrivesRunningAsService": "Zugeordnete Netzlaufwerke sind nicht verfügbar, wenn {appName} als Windows-Dienst ausgeführt wird. Bitte lesen Sie die FAQ für weitere Informationen",
|
||||
"MassEditor": "Masseneditor",
|
||||
"Mechanism": "Verfahren",
|
||||
"Mechanism": "Mechanismus",
|
||||
"Message": "Nachricht",
|
||||
"MinimumSeeders": "Mindest-Seeder",
|
||||
"MinimumSeedersHelpText": "Minimale Anzahl an Seedern die von der Anwendung benötigt werden um den Indexer zu holen",
|
||||
@@ -236,47 +236,47 @@
|
||||
"New": "Neu",
|
||||
"NextExecution": "Nächste Ausführung",
|
||||
"No": "Nein",
|
||||
"NoBackupsAreAvailable": "Es sind keine Backups vorhanden",
|
||||
"NoBackupsAreAvailable": "Keine Sicherungen verfügbar",
|
||||
"NoChange": "Keine Änderung",
|
||||
"NoChanges": "Keine Änderungen",
|
||||
"NoLeaveIt": "Nein, nicht ändern",
|
||||
"NoLeaveIt": "Nein, lass es",
|
||||
"NoLinks": "Keine Links",
|
||||
"NoLogFiles": "Keine Log-Dateien",
|
||||
"NoLogFiles": "Keine Logdateien",
|
||||
"NoSearchResultsFound": "Keine Suchergebnisse gefunden. Versuchen Sie unten eine erneute Suche durchzuführen.",
|
||||
"NoTagsHaveBeenAddedYet": "Es wurden noch keine Tags erstellt",
|
||||
"NoTagsHaveBeenAddedYet": "Es wurden noch keine Tags hinzugefügt",
|
||||
"NoUpdatesAreAvailable": "Es sind keine Updates verfügbar",
|
||||
"NotSupported": "Nicht unterstützt",
|
||||
"Notification": "Benachrichtigungen",
|
||||
"NotificationTriggers": "Benachrichtigungs Auslöser",
|
||||
"NotificationTriggersHelpText": "Auslöser für diese Benachrichtigung auswählen",
|
||||
"NotificationTriggers": "Benachrichtigungs-Auslöser",
|
||||
"NotificationTriggersHelpText": "Wähle aus, welche Ereignisse diese Benachrichtigung auslösen sollen",
|
||||
"Notifications": "Benachrichtigungen",
|
||||
"OAuthPopupMessage": "Dein Browser blockiert Pop-ups",
|
||||
"Ok": "OK",
|
||||
"Ok": "Ok",
|
||||
"OnApplicationUpdate": "Bei Anwendungsaktualisierung",
|
||||
"OnApplicationUpdateHelpText": "Bei Anwendungsaktualisierung",
|
||||
"OnGrab": "Bei Erfassung",
|
||||
"OnHealthIssue": "Bei Zustandsproblem",
|
||||
"OnGrab": "Bei Release-Grabs",
|
||||
"OnHealthIssue": "Bei Gesundheitsproblem",
|
||||
"OnHealthIssueHelpText": "Zustandsproblem",
|
||||
"OpenBrowserOnStart": "Browser beim Start öffnen",
|
||||
"OpenThisModal": "Dieses Modal öffnen",
|
||||
"Options": "Optionen",
|
||||
"PackageVersion": "Paket Version",
|
||||
"PackageVersion": "Paketversion",
|
||||
"PageSize": "Einträge pro Seite",
|
||||
"PageSizeHelpText": "Anzahl der Einträge pro Seite",
|
||||
"Parameters": "Parameter",
|
||||
"Password": "Passwort",
|
||||
"Peers": "Peers",
|
||||
"PendingChangesDiscardChanges": "Änderungen verwerfen und schließen",
|
||||
"PendingChangesMessage": "Es gibt noch ungespeicherte Änderungen, bist du sicher, dass du die Seite verlassen möchtest?",
|
||||
"PendingChangesStayReview": "Auf der Seite bleiben",
|
||||
"PendingChangesDiscardChanges": "Änderungen verwerfen und verlassen",
|
||||
"PendingChangesMessage": "Du hast ungespeicherte Änderungen, bist du sicher, dass du diese Seite verlassen möchtest?",
|
||||
"PendingChangesStayReview": "Bleiben und Änderungen überprüfen",
|
||||
"Port": "Port",
|
||||
"PortNumber": "Port Nummer",
|
||||
"PortNumber": "Portnummer",
|
||||
"Presets": "Voreinstellungen",
|
||||
"Priority": "Priorität",
|
||||
"Privacy": "Privatsphäre",
|
||||
"Private": "Privat",
|
||||
"Protocol": "Protokoll",
|
||||
"ProwlarrSupportsAnyDownloadClient": "Jeder Downloader der den Newznab-Standard verwendet oder unten aufgelistet ist wird untertützt.",
|
||||
"ProwlarrSupportsAnyDownloadClient": "{appName} unterstützt jeden der unten aufgeführten Download-Clients.",
|
||||
"ProwlarrSupportsAnyIndexer": "{appName} unterstützt alle Indexer, welcher den Newznab/Torznab Standard implementiert (verwende 'Generic Newznab' (für Usenet) oder 'Generic Torznab' (für Torrents)) und darüber hinaus viele weitere Indexer. Wählen Sie im Folgenden Ihren Indexer aus der Liste.",
|
||||
"Proxies": "Proxies",
|
||||
"Proxy": "Proxy",
|
||||
@@ -294,7 +294,7 @@
|
||||
"Queue": "Warteschlange",
|
||||
"Queued": "In Warteschlange",
|
||||
"Rss": "RSS",
|
||||
"RssIsNotSupportedWithThisIndexer": "RSS wird von diesem Indexer nicht unterstützt",
|
||||
"RssIsNotSupportedWithThisIndexer": "RSS wird mit diesem Indexer nicht unterstützt",
|
||||
"RawSearchSupported": "Raw-Suche unterstützt",
|
||||
"ReadTheWikiForMoreInformation": "Lesen Sie das Wiki für weitere Informationen",
|
||||
"Reddit": "Reddit",
|
||||
@@ -304,7 +304,7 @@
|
||||
"RefreshMovie": "Film aktualisieren",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Zweig {0} ist kein gültiger {appName}-Release-Zweig. Sie erhalten keine Updates",
|
||||
"ReleaseStatus": "Releasestatus",
|
||||
"Reload": "Neuladen",
|
||||
"Reload": "Neu laden",
|
||||
"Remove": "Entfernen",
|
||||
"RemoveFilter": "Filter entfernen",
|
||||
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlange entfernt",
|
||||
@@ -319,7 +319,7 @@
|
||||
"Restore": "Wiederherstellen",
|
||||
"RestoreBackup": "Sicherung wiederherstellen",
|
||||
"Result": "Ergebnis",
|
||||
"Retention": "Aufbewahrung ( Retention )",
|
||||
"Retention": "Aufbewahrung",
|
||||
"SSLCertPassword": "SSL Zertifikat Passwort",
|
||||
"SSLCertPasswordHelpText": "Passwort für die PFX Datei",
|
||||
"SSLCertPath": "Pfad zum SSL Zertifikat",
|
||||
@@ -329,8 +329,8 @@
|
||||
"SaveChanges": "Änderungen speichern",
|
||||
"SaveSettings": "Einstellungen speichern",
|
||||
"Scheduled": "Geplant",
|
||||
"ScriptPath": "Script Pfad",
|
||||
"Search": "Suche",
|
||||
"ScriptPath": "Skript-Pfad",
|
||||
"Search": "Suchen",
|
||||
"SearchCapabilities": "Suchfähigkeiten",
|
||||
"SearchIndexers": "Indexer suchen",
|
||||
"SearchType": "Suchtyp",
|
||||
@@ -360,7 +360,7 @@
|
||||
"SettingsTimeFormat": "Zeitformat",
|
||||
"ShowAdvanced": "Erweitert anzeigen",
|
||||
"ShowSearch": "Suche anzeigen",
|
||||
"ShowSearchHelpText": "Suchbutton anzeigen beim draufzeigen",
|
||||
"ShowSearchHelpText": "Suchschaltfläche beim Überfahren anzeigen",
|
||||
"Shutdown": "Herunterfahren",
|
||||
"Size": "Größe",
|
||||
"Sort": "Sortieren",
|
||||
@@ -379,12 +379,12 @@
|
||||
"SyncProfile": "Sync-Profile",
|
||||
"SyncProfiles": "Sync-Profile",
|
||||
"System": "System",
|
||||
"SystemTimeCheckMessage": "Die Systemzeit ist um einen Tag versetzt. Bis die Zeit korrigiert wurde, könnten die geplanten Aufgaben nicht korrekt ausgeführt werden",
|
||||
"SystemTimeHealthCheckMessage": "Die Systemzeit ist um einen Tag versetzt. Bis die Zeit korrigiert wurde, könnten die geplanten Aufgaben nicht korrekt ausgeführt werden",
|
||||
"TVSearchTypes": "Suchtyp",
|
||||
"TableOptions": "Tabellen Optionen",
|
||||
"TableOptions": "Tabellenoptionen",
|
||||
"TableOptionsColumnsMessage": "Wähle aus welche Spalten angezeigt werden und in welcher Reihenfolge",
|
||||
"TagCannotBeDeletedWhileInUse": "Kann während der Benutzung nicht gelöscht werden",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tag wird nicht benutzt und kann gelöscht werden",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tag wird nicht verwendet und kann gelöscht werden",
|
||||
"Tags": "Tags",
|
||||
"TagsHelpText": "Wird auf Filme mit mindestens einem passenden Tag angewandt",
|
||||
"TagsSettingsSummary": "Sehen Sie sich alle Tags und deren Verwendung an. Nicht verwendete Tags können entfernt werden",
|
||||
@@ -394,8 +394,8 @@
|
||||
"TestAllApps": "Alle Apps testen",
|
||||
"TestAllClients": "Prüfe alle Clients",
|
||||
"TestAllIndexers": "Prüfe alle Indexer",
|
||||
"OnLatestVersion": "Die aktuellste Version ist bereits installiert",
|
||||
"ThemeHelpText": "Ändere das UI-Theme der Anwendung. Das 'Auto'-Theme verwendet dein Betriebssystem-Theme, um den hellen oder dunklen Modus einzustellen. Inspiriert von {0}",
|
||||
"OnLatestVersion": "Die neueste Version von {appName} ist bereits installiert",
|
||||
"ThemeHelpText": "Ändere das UI-Design der Anwendung, das 'Auto'-Design verwendet das Betriebssystem-Design, um den Hell- oder Dunkelmodus festzulegen. Inspiriert von {inspiredBy}.",
|
||||
"Time": "Zeit",
|
||||
"Title": "Titel",
|
||||
"Today": "Heute",
|
||||
@@ -406,7 +406,7 @@
|
||||
"Type": "Typ",
|
||||
"UI": "Oberfläche",
|
||||
"UILanguage": "Oberflächen Sprache ( UI Language )",
|
||||
"UILanguageHelpText": "Sprache für die gesamte Oberfläche",
|
||||
"UILanguageHelpText": "Sprache, die {appName} für die Benutzeroberfläche verwenden wird",
|
||||
"UILanguageHelpTextWarning": "Webseite muss neu geladen werden",
|
||||
"UISettings": "Benutzeroberflächen Einstellungen",
|
||||
"UISettingsSummary": "Optionen für Datum, Sprache und Farbbeinträchtigungen",
|
||||
@@ -421,7 +421,7 @@
|
||||
"ApplicationsLoadError": "Anwendungsliste kann nicht geladen werden",
|
||||
"BackupsLoadError": "Sicherungen können nicht geladen werden",
|
||||
"UnableToLoadDevelopmentSettings": "Entwicklereinstellungen konnten nicht geladen werden",
|
||||
"DownloadClientsLoadError": "Downloader konnten nicht geladen werden",
|
||||
"DownloadClientsLoadError": "Download Clients können nicht geladen werden",
|
||||
"UnableToLoadGeneralSettings": "Allgemeine Einstellungen konnten nicht geladen werden",
|
||||
"UnableToLoadHistory": "Verlauf konnte nicht geladen werden",
|
||||
"UnableToLoadIndexerProxies": "Indexer-Proxies können nicht geladen werden",
|
||||
@@ -454,14 +454,14 @@
|
||||
"YesCancel": "Ja Abbrechen",
|
||||
"Yesterday": "Gestern",
|
||||
"OnHealthRestoredHelpText": "Bei Wiederherstellung des Zustands",
|
||||
"OnHealthRestored": "Bei Wiederherstellung des Zustands",
|
||||
"OnHealthRestored": "Bei Wiederherstellung der Gesundheit",
|
||||
"StopSelecting": "Auswahl stoppen",
|
||||
"ApplicationURL": "Anwendungs-URL",
|
||||
"ApplicationUrlHelpText": "Die externe URL dieser Anwendung, einschließlich http(s)://, Port und URL-Basis",
|
||||
"ApplyChanges": "Änderungen anwenden",
|
||||
"CountIndexersSelected": "{count} Indexer ausgewählt",
|
||||
"DeleteSelectedDownloadClients": "Lösche Download Client(s)",
|
||||
"DeleteSelectedApplicationsMessageText": "Indexer '{0}' wirklich löschen?",
|
||||
"DeleteSelectedApplicationsMessageText": "Bist du sicher, dass du {count} ausgewählte Anwendung(en) löschen möchtest?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Download-Clients löschen möchten?",
|
||||
"DeleteSelectedIndexersMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte(n) Indexer löschen möchten?",
|
||||
"EditSelectedDownloadClients": "Ausgewählte Download Clienten bearbeiten",
|
||||
@@ -485,7 +485,7 @@
|
||||
"More": "Mehr",
|
||||
"Publisher": "Herausgeber",
|
||||
"Track": "Trace",
|
||||
"UpdateAvailableHealthCheckMessage": "Neue Version verfügbar",
|
||||
"UpdateAvailableHealthCheckMessage": "Ein neues Update ist verfügbar: {version}",
|
||||
"Year": "Jahr",
|
||||
"Album": "Album",
|
||||
"Artist": "Interpret",
|
||||
@@ -498,8 +498,8 @@
|
||||
"minutes": "Minuten",
|
||||
"DeleteAppProfileMessageText": "Qualitätsprofil '{0}' wirklich löschen?",
|
||||
"AddConnection": "Verbindung hinzufügen",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Wegen Fehlern sind keine Applikationen verfügbar",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {notificationNames}",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Alle Benachrichtigungen sind aufgrund von Fehlern nicht verfügbar",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Benachrichtigungen nicht verfügbar wegen Fehlern: {notificationNames}",
|
||||
"AuthBasic": "Basis (Browser-Popup)",
|
||||
"AuthForm": "Formulare (Anmeldeseite)",
|
||||
"DisabledForLocalAddresses": "Für lokale Adressen deaktiviert",
|
||||
@@ -518,7 +518,7 @@
|
||||
"ActiveApps": "Aktive Apps",
|
||||
"ActiveIndexers": "Aktive Indexer",
|
||||
"AppsMinimumSeeders": "Apps Mindestanzahl von Seedern",
|
||||
"ApplicationTagsHelpText": "Synchronisiere Indexer für diese Anwendung die keine passenden Tags oder mindestens 1 passendes Tag haben",
|
||||
"ApplicationTagsHelpText": "Indexer mit dieser Anwendung synchronisieren, die mindestens einen übereinstimmenden Tag haben. Wenn hier keine Tags aufgeführt sind, wird kein Indexer aufgrund seiner Tags von der Synchronisierung ausgeschlossen.",
|
||||
"ApplicationTagsHelpTextWarning": "Tags sollten mit Vorsicht verwendet werden, da sie ungewollte Effekte haben können. Eine Anwendung mit einem Tag synchronisiert nur Indexer die den Gleichen Tag haben.",
|
||||
"AddApplicationImplementation": "Anwendung hinzufügen - {implementationName}",
|
||||
"AddConnectionImplementation": "Verbindung hinzufügen - {implementationName}",
|
||||
@@ -529,18 +529,18 @@
|
||||
"AuthenticationRequiredWarning": "Um unberechtigte Fernzugriffe zu vermeiden benötigt {appName} jetzt , dass Authentifizierung eingeschaltet ist. Du kannst Authentifizierung optional für lokale Adressen ausschalten.",
|
||||
"AuthenticationRequired": "Authentifizierung benötigt",
|
||||
"AuthenticationRequiredHelpText": "Ändern, welche anfragen Authentifizierung benötigen. Ändere nichts wenn du dir nicht des Risikos bewusst bist.",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Gib einen neuen Benutzernamen ein",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Neuen Benutzernamen eingeben",
|
||||
"AuthenticationMethodHelpTextWarning": "Bitte wähle eine gültige Authentifizierungsmethode aus",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Gib ein neues Passwort ein",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Neues Passwort eingeben",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Neues Passwort bestätigen",
|
||||
"DefaultNameCopiedProfile": "{name} – Kopieren",
|
||||
"AuthenticationMethod": "Authentifizierungsmethode",
|
||||
"Clone": "Klonen",
|
||||
"CountDownloadClientsSelected": "{count} Download-Client(s) ausgewählt",
|
||||
"EditConnectionImplementation": "Verbindung hinzufügen - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Download-Client hinzufügen - {implementationName}",
|
||||
"EditConnectionImplementation": "Verbindung bearbeiten - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Download Client bearbeiten - {implementationName}",
|
||||
"IndexerTagsHelpTextWarning": "Tags sollten mit Vorsicht verwendet werden, da sie ungewollte Effekte haben können. Eine Anwendung mit einem Tag synchronisiert nur Indexer die den Gleichen Tag haben.",
|
||||
"EditIndexerImplementation": "Indexer hinzufügen - {implementationName}",
|
||||
"EditIndexerImplementation": "Indexer bearbeiten - {implementationName}",
|
||||
"EditApplicationImplementation": "Anwendung hinzufügen - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Indexer Proxy hinzufügen - {implementationName}",
|
||||
"CountApplicationsSelected": "{count} Ausgewählte Sammlung(en)",
|
||||
@@ -563,14 +563,14 @@
|
||||
"IndexerBeyondHDSettingsSearchTypes": "Suchtyp",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "Fügt der Flood-API ein Präfix hinzu, z. B. {url}",
|
||||
"DownloadClientFreeboxSettingsApiUrl": "API-URL",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Definieren Sie die Freebox-API-Basis-URL mit der API-Version, z. B. „{url}“, standardmäßig ist „{defaultApiUrl}“.",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Definiere die Freebox-API-Basis-URL mit der API-Version, z. B. '{url}', standardmäßig '{defaultApiUrl}'.",
|
||||
"DownloadClientRTorrentSettingsUrlPathHelpText": "Pfad zum XMLRPC-Endpunkt, siehe {url}. Dies ist normalerweise RPC2 oder [Pfad zu ruTorrent]{url2}, wenn ruTorrent verwendet wird.",
|
||||
"DownloadClientSettingsAddPaused": "Pausiert hinzufügen",
|
||||
"SelectDownloadClientModalTitle": "{modalTitle} – Wähle Download-Client",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Erster und Letzter Erster",
|
||||
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Ausgangszustand für zu qBittorrent hinzugefügte Torrents. Beachten Sie, dass erzwungene Torrents nicht den Seed-Beschränkungen unterliegen",
|
||||
"IndexerSettingsAppsMinimumSeeders": "Apps Mindestanzahl von Seedern",
|
||||
"IndexerHDBitsSettingsMediums": "Medium",
|
||||
"IndexerHDBitsSettingsMediums": "Medien",
|
||||
"Destination": "Ziel",
|
||||
"Directory": "Verzeichnis",
|
||||
"DownloadClientDelugeSettingsUrlBaseHelpText": "Fügt der Deluge-JSON-URL ein Präfix hinzu, siehe {url}",
|
||||
@@ -590,7 +590,7 @@
|
||||
"DownloadClientRTorrentSettingsAddStoppedHelpText": "Durch die Aktivierung werden Torrents und Magnete im gestoppten Zustand zu rTorrent hinzugefügt. Dadurch können Magnetdateien beschädigt werden.",
|
||||
"DownloadClientRTorrentSettingsDirectoryHelpText": "Optionaler Speicherort für Downloads. Lassen Sie das Feld leer, um den standardmäßigen rTorrent-Speicherort zu verwenden",
|
||||
"DownloadClientRTorrentSettingsUrlPath": "URL-Pfad",
|
||||
"IndexerHDBitsSettingsCodecs": "Codec",
|
||||
"IndexerHDBitsSettingsCodecs": "Codecs",
|
||||
"IndexerSettingsVipExpiration": "VIP Ablaufdatum",
|
||||
"TorrentBlackholeSaveMagnetFilesHelpText": "Speichern Sie den Magnet-Link, wenn keine .torrent-Datei verfügbar ist (nur nützlich, wenn der Download-Client in einer Datei gespeicherte Magnete unterstützt)",
|
||||
"TorrentBlackholeTorrentFolder": "Torrent-Ordner",
|
||||
@@ -605,9 +605,9 @@
|
||||
"TorrentBlackholeSaveMagnetFiles": "Speicher Magnetdateien",
|
||||
"TorrentBlackholeSaveMagnetFilesExtension": "Speicher die Magnet-Dateienerweiterung",
|
||||
"Default": "Standard",
|
||||
"GrabRelease": "Release erfassen",
|
||||
"GrabRelease": "Release holen",
|
||||
"Script": "Skript",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexer mit ungültigen Downloader: {indexerNames}.",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexer mit ungültigen Download-Clients: {indexerNames}.",
|
||||
"Any": "Beliebig",
|
||||
"BuiltIn": "Eingebaut",
|
||||
"PublishedDate": "Veröffentlichungsdatum",
|
||||
@@ -615,14 +615,196 @@
|
||||
"AllSearchResultsHiddenByFilter": "Alle Ergebnisse werden durch den angewendeten Filter ausgeblendet",
|
||||
"DockerUpdater": "Aktualisieren Sie den Docker-Container, um das Update zu erhalten",
|
||||
"Download": "Herunterladen",
|
||||
"ErrorRestoringBackup": "Fehler beim Wiederherstellen",
|
||||
"ExternalUpdater": "{appName} wurde so konfiguriert, dass ein externer Update Mechanismus benutzt wird",
|
||||
"NoEventsFound": "Keine Events gefunden",
|
||||
"ErrorRestoringBackup": "Fehler beim Wiederherstellen der Sicherung",
|
||||
"ExternalUpdater": "{appName} ist so konfiguriert, dass es einen externen Aktualisierungsmechanismus verwendet",
|
||||
"NoEventsFound": "Keine Ereignisse gefunden",
|
||||
"RestartReloadNote": "Hinweis: {appName} startet während des Wiederherstellungsvorgangs automatisch neu und lädt die Benutzeroberfläche neu.",
|
||||
"TheLogLevelDefault": "Die Protokollebene ist standardmäßig auf „Info“ eingestellt und kann unter „Allgemeine Einstellungen“ (/settings/general) geändert werden.",
|
||||
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden.",
|
||||
"UpdaterLogFiles": "Updater-Protokolldateien",
|
||||
"WouldYouLikeToRestoreBackup": "Willst du das Backup '{name}' wiederherstellen?",
|
||||
"AptUpdater": "Verwenden Sie apt, um das Update zu installieren",
|
||||
"InstallLatest": "Jetzt updaten"
|
||||
"InstallLatest": "Neueste Version installieren",
|
||||
"CurrentlyInstalled": "Derzeit installiert",
|
||||
"Mixed": "Gemischt",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Inhaltslayout",
|
||||
"FailedToFetchSettings": "Einstellungen können nicht abgerufen werden",
|
||||
"External": "Extern",
|
||||
"FailedToFetchUpdates": "Updates konnten nicht abgerufen werden",
|
||||
"IndexerSettingsSeedRatio": "Seed-Verhältnis",
|
||||
"Install": "Installieren",
|
||||
"ManualGrab": "Manuelles Greifen",
|
||||
"OverrideGrabModalTitle": "Überschreiben und Abrufen - {title}",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Ob das konfigurierte Inhaltslayout von qBittorrent, das ursprüngliche Layout des Torrents oder immer ein Unterordner erstellt werden soll (qBittorrent 4.3.2+)",
|
||||
"HealthMessagesInfoBox": "Weitere Informationen zur Ursache dieser Gesundheitsprüfungsnachrichten findest du, indem du auf den Wiki-Link (Buch-Symbol) am Ende der Zeile klickst oder deine [Protokolle]({link}) überprüfst. Wenn du Schwierigkeiten hast, diese Nachrichten zu interpretieren, kannst du unseren Support kontaktieren, über die Links unten.",
|
||||
"IndexerHDBitsSettingsMediumsHelpText": "Wenn nicht angegeben, werden alle Optionen verwendet.",
|
||||
"InvalidUILanguage": "Die UI ist auf eine ungültige Sprache eingestellt, korrigiere sie und speichere die Einstellungen",
|
||||
"LogFilesLocation": "Protokolldateien befinden sich unter: {location}",
|
||||
"Logout": "Abmelden",
|
||||
"NoHistoryFound": "Keine Historie gefunden",
|
||||
"PasswordConfirmation": "Passwortbestätigung",
|
||||
"InfoUrl": "Info-URL",
|
||||
"LogSizeLimit": "Protokollgrößenlimit",
|
||||
"LogSizeLimitHelpText": "Maximale Protokolldateigröße in MB, bevor archiviert wird. Standard ist 1MB.",
|
||||
"NotificationsEmailSettingsUseEncryption": "Verschlüsselung verwenden",
|
||||
"NotificationsTelegramSettingsIncludeAppName": "{appName} im Titel einfügen",
|
||||
"NotificationsTelegramSettingsIncludeAppNameHelpText": "Optional den Nachrichtentitel mit {appName} voranstellen, um Benachrichtigungen von verschiedenen Anwendungen zu unterscheiden",
|
||||
"LabelIsRequired": "Label ist erforderlich",
|
||||
"Menu": "Menü",
|
||||
"IndexerHDBitsSettingsCodecsHelpText": "Wenn nicht angegeben, werden alle Optionen verwendet.",
|
||||
"IndexerSettingsCookie": "Cookie",
|
||||
"IndexerSettingsSeedTime": "Seed-Zeit",
|
||||
"IndexerSettingsAdditionalParameters": "Zusätzliche Parameter",
|
||||
"IndexerSettingsApiPath": "API-Pfad",
|
||||
"IndexerSettingsApiPathHelpText": "Pfad zur API, normalerweise {url}",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Fügt der {clientName}-rpc-URL ein Präfix hinzu, z. B. {url}, standardmäßig '{defaultUrl}'",
|
||||
"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",
|
||||
"InstallMajorVersionUpdate": "Update installieren",
|
||||
"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}).",
|
||||
"NotificationsEmailSettingsUseEncryptionHelpText": "Ob bevorzugt Verschlüsselung verwendet werden soll, wenn auf dem Server konfiguriert, ob immer Verschlüsselung über SSL (nur Port 465) oder StartTLS (anderer Port) verwendet wird oder keine Verschlüsselung verwendet wird",
|
||||
"PackageVersionInfo": "{packageVersion} von {packageAuthor}",
|
||||
"PreviouslyInstalled": "Früher installiert",
|
||||
"PrioritySettings": "Priorität: {priority}",
|
||||
"SeedRatio": "Seed-Verhältnis",
|
||||
"SeedTime": "Seed-Zeit",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Wenn ein Torrent durch einen Hash blockiert wird, wird er möglicherweise nicht korrekt abgelehnt während RSS/Recherche für einige Indexer. Diese Option aktiviert die Ablehnung des Torrents nach dem Abrufen, aber bevor er an den Client gesendet wird.",
|
||||
"IndexerHDBitsSettingsOriginsHelpText": "Wenn nicht angegeben, werden alle Optionen verwendet.",
|
||||
"IndexerSettingsGrabLimit": "Grab-Limit",
|
||||
"IndexerBeyondHDSettingsLimitedOnlyHelpText": "Nur nach Freeleech suchen (Begrenztes UL)",
|
||||
"IndexerFileListSettingsPasskeyHelpText": "Site Passkey (Dies ist die alphanumerische Zeichenfolge in der Tracker-URL, die in deinem Download-Client angezeigt wird)",
|
||||
"IndexerIPTorrentsSettingsCookieUserAgent": "Cookie-Benutzer-Agent",
|
||||
"DownloadClientSettingsDefaultCategorySubFolderHelpText": "Standard-Fallback-Kategorie, wenn für eine Veröffentlichung keine zugeordnete Kategorie existiert. Das Hinzufügen einer für {appName} spezifischen Kategorie vermeidet Konflikte mit nicht verwandten {appName}-Downloads. Die Verwendung einer Kategorie ist optional, aber dringend empfohlen. Eine [Kategorie]-Unterverzeichnis wird im Ausgabeverzeichnis erstellt.",
|
||||
"IndexerBeyondHDSettingsRssKeyHelpText": "RSS-Schlüssel von der Website (zu finden unter Mein Sicherheitsbereich => RSS-Schlüssel)",
|
||||
"IndexerHDBitsSettingsUseFilenamesHelpText": "Aktiviere diese Option, wenn du Torrent-Dateinamen als Releasetitel verwenden möchtest",
|
||||
"IndexerSettingsAppsMinimumSeedersHelpText": "Minimale benötigte Seeder von den Anwendungen, damit der Indexer greifen kann; leer ist die Standardeinstellung des Sync-Profils",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpText": "API-Schlüssel von der Seite (Zu finden unter Einstellungen => Zugriffseinstellungen)",
|
||||
"IndexerPassThePopcornSettingsApiUserHelpText": "Diese Einstellungen findest du in deinen PassThePopcorn-Sicherheitseinstellungen (Profil bearbeiten > Sicherheit).",
|
||||
"IndexerSettingsQueryLimitHelpText": "Die maximale Anzahl an Queries, die {appName} der Seite gemäß der jeweiligen Einheit erlauben wird",
|
||||
"IndexerRedactedSettingsApiKeyHelpText": "API-Schlüssel von der Seite (Zu finden unter Einstellungen => Zugriffseinstellungen)",
|
||||
"IndexerSettingsQueryLimit": "Query Limit",
|
||||
"PackSeedTimeHelpText": "Die Zeit, die ein Pack (Season oder Diskographie)-Torrent gesät werden soll, bevor er gestoppt wird. Leer ist die Standardeinstellung der App",
|
||||
"TotalIndexerSuccessfulGrabs": "Gesamtanzahl erfolgreicher Indexer-Suchanfragen",
|
||||
"ProwlarrDownloadClientsInAppOnlyAlert": "Download-Clients sind nur für In-App-Suchen in {appName} und synchronisieren sich nicht mit Apps. Es sind keine Pläne vorgesehen, eine solche Funktionalität hinzuzufügen.",
|
||||
"TotalUserAgentGrabs": "Gesamtanzahl der User-Agent-Grabs",
|
||||
"DefaultCategory": "Standardkategorie",
|
||||
"IndexerDownloadClientHelpText": "Gib an, welcher Download-Client für Grab-Vorgänge, die innerhalb von {appName} von diesem Indexer durchgeführt werden, verwendet wird",
|
||||
"IndexerHistoryLoadError": "Fehler beim Laden der Indexer-Historie",
|
||||
"IndexerNzbIndexSettingsApiKeyHelpText": "Website-API-Key",
|
||||
"IndexerPassThePopcornSettingsApiKeyHelpText": "Website-API-Key",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Sucher nur Golden Popcorn Releases",
|
||||
"IndexerSettingsCookieHelpText": "Website Cookie",
|
||||
"IndexerSettingsPackSeedTimeIndexerHelpText": "Die Zeit, die ein Pack (Season oder Diskographie)-Torrent gesät werden soll, bevor er gestoppt wird. Leer ist die Standardeinstellung der App",
|
||||
"SearchAllIndexers": "Alle Indexer durchsuchen",
|
||||
"SearchCountIndexers": "Suche {count} Indexer(s)",
|
||||
"SeedTimeHelpText": "Die Zeit, die ein Torrent gesät werden soll, bevor er gestoppt wird. Leer ist die Standardeinstellung der App",
|
||||
"IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Suche nur Freeleech-Releases",
|
||||
"IndexerNewznabSettingsVipExpirationHelpText": "Gib das Datum (yyyy-mm-dd) für das VIP-Ablaufdatum ein oder lasse es leer, {appName} benachrichtigt eine Woche vor Ablauf des VIP",
|
||||
"ProxyValidationUnableToConnect": "Kann nicht mit dem Proxy verbunden werden: {exceptionMessage}. Überprüfe das Protokoll rund um diesen Fehler für Details",
|
||||
"IndexerId": "Indexer ID",
|
||||
"OnGrabHelpText": "Bei Release Grab",
|
||||
"AuthQueries": "Authentifizierungsanfragen",
|
||||
"PackSeedTime": "Pack-Seed-Zeit",
|
||||
"DeleteSelectedApplications": "Ausgewählte Anwendungen löschen",
|
||||
"DownloadClientSettingsDefaultCategoryHelpText": "Standard-Fallback-Kategorie, wenn für eine Veröffentlichung keine zugeordnete Kategorie existiert. Das Hinzufügen einer für {appName} spezifischen Kategorie vermeidet Konflikte mit nicht verwandten {appName}-Downloads. Die Verwendung einer Kategorie ist optional, aber dringend empfohlen.",
|
||||
"FoundCountReleases": "{itemCount} Veröffentlichungen gefunden",
|
||||
"IncludeManualGrabsHelpText": "Manuelle Abrufe, die innerhalb von {appName} gemacht wurden, einbeziehen",
|
||||
"IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Nur nach Freeleech-Veröffentlichungen suchen",
|
||||
"IndexerBeyondHDSettingsApiKeyHelpText": "API-Schlüssel von der Website (zu finden in „Meine Sicherheit“ => „API-Schlüssel“)",
|
||||
"IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Nur nach Freeleech-Releases suchen",
|
||||
"IndexerBeyondHDSettingsRefundOnlyHelpText": "Nur nach Rückerstattungen suchen",
|
||||
"IndexerDisabled": "Indexer deaktiviert",
|
||||
"IndexerFileListSettingsFreeleechOnlyHelpText": "Suche nur Freeleech-Releases",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Suche Veröffentlichungen nach Gruppennamen",
|
||||
"IndexerNebulanceSettingsApiKeyHelpText": "API-Schlüssel aus den Benutzereinstellungen > API-Schlüssel. Der Schlüssel muss List- und Download-Berechtigungen haben",
|
||||
"IndexerSettingsGrabLimitHelpText": "Die maximale Anzahl an Grabs, die {appName} der Seite erlauben wird, wie von der jeweiligen Einheit festgelegt",
|
||||
"IndexerSettingsLimitsUnit": "Limits-Einheit",
|
||||
"IndexerSettingsLimitsUnitHelpText": "Die Zeiteinheit zur Berechnung der Limits pro Indexer",
|
||||
"IndexerStatus": "Indexer Status",
|
||||
"LastFailure": "Letzter Fehler",
|
||||
"ManageApplications": "Applikationen verwalten",
|
||||
"NoApplicationsFound": "Keine Applikationen gefunden",
|
||||
"NoIndexerCategories": "Keine Kategorien für diesen Indexer gefunden",
|
||||
"NoIndexerHistory": "Keine Historie für diesen Indexer gefunden",
|
||||
"Open": "Offen",
|
||||
"OverrideAndAddToDownloadClient": "Überschreiben und zum Download-Client hinzufügen",
|
||||
"PreferMagnetUrl": "Magnet URL bevorzugen",
|
||||
"PreferMagnetUrlHelpText": "Wenn aktiviert, wird dieser Indexer die Verwendung von Magnet-URLs für Grabs bevorzugen, mit Rückfall auf Torrent-Links",
|
||||
"RssQueries": "RSS Anfragen",
|
||||
"TotalHostGrabs": "Gesamtanzahl der Host-Grabs",
|
||||
"TotalHostQueries": "Gesamtanzahl der Host-Suchanfragen",
|
||||
"SeedRatioHelpText": "Das Verhältnis, das ein Torrent erreichen sollte, bevor er gestoppt wird. Leer ist die Standardeinstellung der App",
|
||||
"AverageGrabs": "Durchschnittliche Abrufe",
|
||||
"AverageQueries": "Durchschnittliche Anfragen",
|
||||
"SelectedCountOfCountReleases": "Ausgewählt {selectedCount} von {itemCount} Releases",
|
||||
"NewznabUrl": "Newznab Url",
|
||||
"QueryType": "Abfragetyp",
|
||||
"DisabledUntil": "Deaktiviert bis",
|
||||
"MappedCategories": "Zuordnete Kategorien",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Bist du sicher, dass du „{name}“ aus {appName} löschen möchtest?",
|
||||
"TotalIndexerQueries": "Gesamtanzahl der Indexer-Suchanfragen",
|
||||
"ProwlarrDownloadClientsAlert": "Wenn du beabsichtigst, direkt innerhalb von {appName} zu suchen, musst du Download-Clients hinzufügen. Andernfalls musst du sie hier nicht hinzufügen. Für Suchen aus deinen Apps werden stattdessen die dort konfigurierten Download-Clients verwendet.",
|
||||
"AppsMinimumSeedersHelpText": "Mindestanzahl an Seedern, die von der Anwendung für den Indexer erforderlich ist, um herunterzuladen. Leer bedeutet, dass das Standardprofil der Synchronisierung verwendet wird",
|
||||
"CountIndexersAvailable": "{count} Indexer verfügbar",
|
||||
"DeleteClientCategory": "Download-Client-Kategorie löschen",
|
||||
"DeleteSelectedIndexer": "Ausgewählten Indexer löschen",
|
||||
"TotalGrabs": "Gesamtanzahl der Grabs",
|
||||
"DownloadClientCategory": "Download-Client-Kategorie",
|
||||
"EditCategory": "Kategorie bearbeiten",
|
||||
"IndexerSettingsApiUser": "API Benutzer",
|
||||
"RssFeed": "RSS Feed",
|
||||
"InitialFailure": "Initialer Fehler",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Blockierte Torrent-Hashes beim Abrufen synchron ablehnen",
|
||||
"DeleteSelectedIndexers": "Ausgewählte Indexer löschen",
|
||||
"IndexerHDBitsSettingsPasskeyHelpText": "Passkey aus den Benutzerdetails",
|
||||
"IndexerSettingsPasskey": "Pass Key",
|
||||
"ClickToChangeQueryOptions": "Klicken, um Abfrageoptionen zu ändern",
|
||||
"IndexerCategories": "Indexer-Kategorien",
|
||||
"SearchQueries": "Suchanfragen",
|
||||
"IndexerAlphaRatioSettingsExcludeScene": "SCENE ausschließen",
|
||||
"IndexerAlphaRatioSettingsExcludeSceneHelpText": "SCENE-Veröffentlichungen aus den Ergebnissen ausschließen",
|
||||
"IndexerBeyondHDSettingsRefundOnly": "Nur Rückerstattung",
|
||||
"IndexerFileListSettingsUsernameHelpText": "Website-Benutzername",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Muss Benutzer- und Torrents-Berechtigungen haben",
|
||||
"IndexerHDBitsSettingsFreeleechOnlyHelpText": "Zeige nur Freeleech-Releases",
|
||||
"IndexerHDBitsSettingsUsernameHelpText": "Webseite-Benutzername",
|
||||
"IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Suche nur Freeleech-Releases",
|
||||
"IndexerNewznabSettingsApiKeyHelpText": "Website API Key",
|
||||
"IndexerOrpheusSettingsApiKeyHelpText": "API-Schlüssel von der Seite (Zu finden unter Einstellungen => Zugriffseinstellungen)",
|
||||
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Suche nur Freeleech-Releases",
|
||||
"IndexerTorrentSyndikatSettingsApiKeyHelpText": "Website-API-Schlüssel",
|
||||
"AreYouSureYouWantToDeleteCategory": "Bist du sicher, dass du die zugeordnete Kategorie löschen möchtest?",
|
||||
"DownloadClientSettingsPriorityItemHelpText": "Priorität, die beim Abrufen von Elementen verwendet werden soll",
|
||||
"GoToApplication": "Zur Anwendung gehen",
|
||||
"HistoryDetails": "Historie-Details",
|
||||
"IndexerBeyondHDSettingsLimitedOnly": "Nur begrenzt",
|
||||
"IndexerHDBitsSettingsOrigins": "Ursprünge",
|
||||
"IndexerHDBitsSettingsUseFilenames": "Verwende Dateinamen",
|
||||
"IndexerIPTorrentsSettingsCookieUserAgentHelpText": "User-Agent, der mit dem Cookie aus dem Browser verwendet wird",
|
||||
"IndexerNewznabSettingsAdditionalParametersHelpText": "Zusätzliche Newznab-Parameter",
|
||||
"IndexerSettingsPackSeedTime": "Pack-Seed-Zeit",
|
||||
"IndexerSettingsRssKey": "RSS Schlüssel",
|
||||
"IndexerMTeamTpSettingsApiKeyHelpText": "API-Schlüssel von der Seite (Zu finden im Benutzersteuerungsfeld => Sicherheit => Labor)",
|
||||
"IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Suche nur Freeleech-Releases",
|
||||
"IndexerSettingsFreeleechOnly": "Nur Freeleech",
|
||||
"IndexerSettingsPreferMagnetUrl": "Magnet-URL bevorzugen",
|
||||
"IndexerSettingsPreferMagnetUrlHelpText": "Wenn aktiviert, bevorzugt dieser Indexer die Verwendung von Magnet-URLs für Grabs mit Rückfall auf Torrent-Links",
|
||||
"TorznabUrl": "Torznab Url",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnly": "Nur Golden Popcorn",
|
||||
"IndexerSettingsBaseUrl": "Basis Url",
|
||||
"IndexerAvistazSettingsFreeleechOnlyHelpText": "Nur nach Freeleech-Veröffentlichungen suchen",
|
||||
"IndexerAvistazSettingsPasswordHelpText": "Website-Passwort",
|
||||
"IndexerAvistazSettingsPidHelpText": "PID aus der „Mein Konto“- oder „Mein Profil“-Seite",
|
||||
"IndexerAvistazSettingsUsernameHelpText": "Website-Benutzername",
|
||||
"IndexerAvistazSettingsUsernameHelpTextWarning": "Nur Mitglieder mit Rang „Mitglied“ und höher können die API auf diesem Indexer nutzen.",
|
||||
"IndexerBeyondHDSettingsRewindOnly": "Nur zurückspulen",
|
||||
"IndexerBeyondHDSettingsRewindOnlyHelpText": "Nur Rückwärtssuche",
|
||||
"IndexerBeyondHDSettingsSearchTypesHelpText": "Wähle die Arten von Veröffentlichungen aus, die dich interessieren. Wenn keine ausgewählt sind, werden alle Optionen verwendet.",
|
||||
"IndexerFailureRate": "Indexer-Fehlerrate",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNames": "Suche Gruppennamen",
|
||||
"IndexerSettingsBaseUrlHelpText": "Wähle die Basis-Url aus, die {appName} für Anfragen an die Seite verwenden soll",
|
||||
"RepeatSearch": "Suche wiederholen",
|
||||
"AverageResponseTimesMs": "Durchschnittliche Indexer-Antwortzeiten (ms)",
|
||||
"BasicSearch": "Einfache Suche"
|
||||
}
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
"SSLCertPath": "Διαδρομή πιστοποίησης SSL",
|
||||
"StartTypingOrSelectAPathBelow": "Ξεκινήστε να πληκτρολογείτε ή επιλέξτε μια διαδρομή παρακάτω",
|
||||
"Style": "Στυλ",
|
||||
"SystemTimeCheckMessage": "Ο χρόνος συστήματος είναι απενεργοποιημένος για περισσότερο από 1 ημέρα. Οι προγραμματισμένες εργασίες ενδέχεται να μην εκτελούνται σωστά έως ότου διορθωθεί η ώρα",
|
||||
"SystemTimeHealthCheckMessage": "Ο χρόνος συστήματος είναι απενεργοποιημένος για περισσότερο από 1 ημέρα. Οι προγραμματισμένες εργασίες ενδέχεται να μην εκτελούνται σωστά έως ότου διορθωθεί η ώρα",
|
||||
"TableOptions": "Επιλογές πίνακα",
|
||||
"TableOptionsColumnsMessage": "Επιλέξτε ποιες στήλες είναι ορατές και με ποια σειρά εμφανίζονται",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Η ετικέτα δεν χρησιμοποιείται και μπορεί να διαγραφεί",
|
||||
@@ -538,5 +538,7 @@
|
||||
"UpdateAppDirectlyLoadError": "Δεν είναι δυνατή η απευθείας ενημέρωση του {appName},",
|
||||
"DockerUpdater": "ενημερώστε το κοντέινερ για να λάβετε την ενημέρωση",
|
||||
"AptUpdater": "Χρησιμοποιήστε το apt για να εγκαταστήσετε την ενημέρωση",
|
||||
"InstallLatest": "Εγκατάσταση πιο πρόσφατου"
|
||||
"InstallLatest": "Εγκατάσταση πιο πρόσφατου",
|
||||
"CurrentlyInstalled": "Εγκατεστημένο αυτήν τη στιγμή",
|
||||
"Mixed": "Σταθερός"
|
||||
}
|
||||
|
||||
@@ -143,6 +143,7 @@
|
||||
"CountDownloadClientsSelected": "{count} download client(s) selected",
|
||||
"CountIndexersAvailable": "{count} indexer(s) available",
|
||||
"CountIndexersSelected": "{count} indexer(s) selected",
|
||||
"CurrentlyInstalled": "Currently Installed",
|
||||
"Custom": "Custom",
|
||||
"CustomFilter": "Custom Filter",
|
||||
"CustomFilters": "Custom Filters",
|
||||
@@ -570,6 +571,7 @@
|
||||
"PreferMagnetUrl": "Prefer Magnet URL",
|
||||
"PreferMagnetUrlHelpText": "When enabled, this indexer will prefer the use of magnet URLs for grabs with fallback to torrent links",
|
||||
"Presets": "Presets",
|
||||
"PreviouslyInstalled": "Previously Installed",
|
||||
"Priority": "Priority",
|
||||
"PrioritySettings": "Priority: {priority}",
|
||||
"Privacy": "Privacy",
|
||||
@@ -706,7 +708,7 @@
|
||||
"SyncProfile": "Sync Profile",
|
||||
"SyncProfiles": "Sync Profiles",
|
||||
"System": "System",
|
||||
"SystemTimeCheckMessage": "System time is off by more than 1 day. Scheduled tasks may not run correctly until the time is corrected",
|
||||
"SystemTimeHealthCheckMessage": "System time is off by more than 1 day. Scheduled tasks may not run correctly until the time is corrected",
|
||||
"TVSearchTypes": "TV Search Types",
|
||||
"TableOptions": "Table Options",
|
||||
"TableOptionsColumnsMessage": "Choose which columns are visible and which order they appear in",
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
"Cancel": "Cancelar",
|
||||
"Apply": "Aplicar",
|
||||
"Age": "Antigüedad",
|
||||
"SystemTimeCheckMessage": "El reloj del sistema está retrasado más de un día. Las tareas de mantenimiento no se ejecutarán correctamente hasta que se haya corregido",
|
||||
"SystemTimeHealthCheckMessage": "El reloj del sistema está retrasado más de un día. Las tareas de mantenimiento no se ejecutarán correctamente hasta que se haya corregido",
|
||||
"UnsavedChanges": "Cambios sin guardar",
|
||||
"ShowSearchHelpText": "Muestra el botón de búsqueda al pasar por encima",
|
||||
"ShowSearch": "Mostrar búsqueda",
|
||||
@@ -804,5 +804,7 @@
|
||||
"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?",
|
||||
"InstallMajorVersionUpdate": "Instalar actualización",
|
||||
"InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información.",
|
||||
"FailedToFetchSettings": "Error al recuperar la configuración"
|
||||
"FailedToFetchSettings": "Error al recuperar la configuración",
|
||||
"CurrentlyInstalled": "Actualmente instalado",
|
||||
"PreviouslyInstalled": "Previamente instalado"
|
||||
}
|
||||
|
||||
@@ -1 +1,4 @@
|
||||
{}
|
||||
{
|
||||
"ApiKey": "کلید API",
|
||||
"NetCore": ".NET"
|
||||
}
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"LogLevel": "Lokikirjauksen laajuus",
|
||||
"MovieIndexScrollTop": "Elokuvakirjasto: vieritä ylös",
|
||||
"Apply": "Käytä",
|
||||
"ClientPriority": "Lataustyökalun painotus",
|
||||
"IndexerPriorityHelpText": "Tietolähteen painotus, 1– 50 (korkein-alin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen kaappauspäätökseen. Kaikkia käytössä olevia tietolähteitä käytetään edelleen RSS-synkronointiin ja hakuun.",
|
||||
"ClientPriority": "Latauspalvelun painotus",
|
||||
"IndexerPriorityHelpText": "Hakupalvelun painotus, 1– 50 (korkein-alin). Oletusarvo on 25.",
|
||||
"Manual": "Manuaalinen",
|
||||
"Add": "Lisää",
|
||||
"Reload": "Lataa uudelleen",
|
||||
"Indexers": "Tietolähteet",
|
||||
"Indexers": "Hakupalvelut",
|
||||
"MovieIndexScrollBottom": "Elokuvakirjasto: vieritä alas",
|
||||
"SSLCertPassword": "SSL-varmenteen salasana",
|
||||
"Style": "Ulkoasu",
|
||||
@@ -25,15 +25,15 @@
|
||||
"SettingsTimeFormat": "Kellonajan esitys",
|
||||
"Message": "Viesti",
|
||||
"Seeders": "Jakajat",
|
||||
"TestAll": "Kaikkien testaus",
|
||||
"AddDownloadClient": "Lisää lataustyökalu",
|
||||
"TestAll": "Koesta kaikki",
|
||||
"AddDownloadClient": "Lisää latauspalvelu",
|
||||
"CustomFilters": "Omat suodattimet",
|
||||
"DeleteTag": "Poista tunniste",
|
||||
"EnableRss": "Käytä RSS-syötettä",
|
||||
"Filter": "Suodatus",
|
||||
"Fixed": "Korjattu",
|
||||
"FocusSearchBox": "Kohdista hakukenttä",
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "Saat yksittäisestä lataustyökalusta lisätietoja painamalla sen ohessa olevaa \"Lisätietoja\"-painiketta.",
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "Saat lisätietoja yksittäisistä latauspalveluista painamalla niiden ohessa olevia lisätietopainikkeita.",
|
||||
"HideAdvanced": "Piilota lisäasetukset",
|
||||
"History": "Historia",
|
||||
"MIA": "Puuttuu",
|
||||
@@ -45,21 +45,21 @@
|
||||
"Refresh": "Päivitä",
|
||||
"RefreshMovie": "Päivitä elokuva",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "\"{0}\" ei ole kelvollinen {appName}-julkaisuhaara ja tämän vuoksi et saa päivityksiä.",
|
||||
"RestartRequiredHelpTextWarning": "Käyttöönotto vaatii in uudelleenkäynnistyksen.",
|
||||
"RestartRequiredHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.",
|
||||
"Result": "Tulos",
|
||||
"Settings": "Asetukset",
|
||||
"SettingsLongDateFormat": "Pitkän päiväyksen esitys",
|
||||
"SettingsShortDateFormat": "Lyhyen päiväyksen esitys",
|
||||
"UnselectAll": "Tyhjennä valinnat",
|
||||
"UpdateStartupTranslocationHealthCheckMessage": "Päivitystä ei voida asentaa, koska käynnistyskansio \"{startupFolder}\" sijaitsee \"App Translocation\" -kansiossa.",
|
||||
"UpdateUiNotWritableHealthCheckMessage": "Päivityksen asennus ei onnistu, koska käyttäjällä \"{userName}\" ei ole kirjoitusoikeutta käyttöliittymäkansioon \"{uiFolder}\".",
|
||||
"UpdateUiNotWritableHealthCheckMessage": "Päivityksen asennus ei onnistu, koska käyttäjällä {userName} ei ole kirjoitusoikeutta käyttöliittymäkansioon \"{uiFolder}\".",
|
||||
"UpdateMechanismHelpText": "Käytä {appName}in sisäänrakennettua päivitystoimintoa tai komentosarjaa.",
|
||||
"Enable": "Käytä",
|
||||
"UI": "Käyttöliittymä",
|
||||
"Usenet": "Usenet",
|
||||
"BackupNow": "Varmuuskopioi nyt",
|
||||
"NoBackupsAreAvailable": "Varmuuskopioita ei ole käytettävissä",
|
||||
"UpdateStartupNotWritableHealthCheckMessage": "Päivitystä ei voida asentaa, koska käyttäjällä \"{userName}\" ei ole kirjoitusoikeutta käynnistyskansioon \"{startupFolder}\".",
|
||||
"UpdateStartupNotWritableHealthCheckMessage": "Päivitystä ei voida asentaa, koska käyttäjällä {userName} ei ole kirjoitusoikeutta käynnistyskansioon \"{startupFolder}\".",
|
||||
"Updates": "Päivitykset",
|
||||
"UpdateScriptPathHelpText": "Polku komentosarjaan, joka käsittelee puretun päivitystiedoston ja hoitaa asennuksen loppuosuuden.",
|
||||
"Uptime": "Käyttöaika",
|
||||
@@ -70,12 +70,12 @@
|
||||
"NoTagsHaveBeenAddedYet": "Tunnisteita ei ole vielä lisätty.",
|
||||
"ApplyTags": "Tunnistetoimenpide",
|
||||
"Authentication": "Tunnistautuminen",
|
||||
"AuthenticationMethodHelpText": "Vaadi {appName}in käyttöön käyttäjätunnus ja salasana",
|
||||
"AuthenticationMethodHelpText": "Vaadi {appName}in käyttöön käyttäjätunnus ja salasana.",
|
||||
"BindAddressHelpText": "Toimiva IP-osoite, localhost tai * (tähti) kaikille verkkoliitännöille.",
|
||||
"Close": "Sulje",
|
||||
"DeleteNotification": "Poista ilmoitus",
|
||||
"DeleteNotification": "Poista ilmoituspalvelu",
|
||||
"Docker": "Docker",
|
||||
"DownloadClient": "Lataustyökalu",
|
||||
"DownloadClient": "Latauspalvelu",
|
||||
"Language": "Kieli",
|
||||
"Search": "Haku",
|
||||
"Details": "Tiedot",
|
||||
@@ -88,14 +88,14 @@
|
||||
"Logs": "Lokitiedot",
|
||||
"Mechanism": "Mekanismi",
|
||||
"Name": "Nimi",
|
||||
"NoLinks": "Ei linkkejä",
|
||||
"NoLinks": "Kytköksiä ei ole",
|
||||
"Peers": "Vertaiset",
|
||||
"Presets": "Esiasetukset",
|
||||
"Priority": "Painotus",
|
||||
"Protocol": "Protokolla",
|
||||
"ProxyBadRequestHealthCheckMessage": "Välityspalvelintesti epäonnistui. Tilakoodi: {statusCode}.",
|
||||
"ProxyFailedToTestHealthCheckMessage": "Välityspalvelintesti epäonnistui: {url}",
|
||||
"ProxyResolveIpHealthCheckMessage": "Määritetyn välityspalvelimen \"{0}\" IP-osoitteen selvitys epäonnistui.",
|
||||
"ProxyResolveIpHealthCheckMessage": "Määritetyn välityspalvelimen \"{proxyHostName}\" IP-osoitteen selvitys epäonnistui.",
|
||||
"ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.",
|
||||
"ProxyType": "Välityspalvelimen tyyppi",
|
||||
"ProxyUsernameHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.",
|
||||
@@ -111,18 +111,18 @@
|
||||
"RestartNow": "Käynnistä uudelleen nyt",
|
||||
"Restore": "Palauta",
|
||||
"Rss": "RSS",
|
||||
"RssIsNotSupportedWithThisIndexer": "RSS-syötettä ei ole käytettävissä tälle tietolähteelle",
|
||||
"RssIsNotSupportedWithThisIndexer": "Tämän hakupalvelun kanssa ei voida käyttää RSS-syötettä.",
|
||||
"ScriptPath": "Komentosarjan sijainti",
|
||||
"Security": "Suojaus",
|
||||
"SuggestTranslationChange": "Ehdota käännösmuutosta",
|
||||
"System": "Järjestelmä",
|
||||
"SystemTimeCheckMessage": "Järjestelmän ajassa on ainakin vuorokauden heitto eivätkä ajoitetut tehtävät tämän vuoksi toimi oikein ennen kuin se on korjattu.",
|
||||
"TagCannotBeDeletedWhileInUse": "Tunnistetta ei voi poistaa, koska se on käytössä",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tunnistetta ei ole määritetty millekään kohteelle, joten sen voi poistaa.",
|
||||
"SystemTimeHealthCheckMessage": "Järjestelmän aika on ainakin vuorokauden pielessä, eivätkä ajoitetut tehtävät toimi oikein ennen kuin se on korjattu.",
|
||||
"TagCannotBeDeletedWhileInUse": "Tunnistetta ei voida poistaa kun se on käytössä.",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tunniste ei ole käytössä ja voidaan poistaa.",
|
||||
"TagsSettingsSummary": "Täältä näet kaikki tunnisteet käyttökohteineen ja voit poistaa käyttämättömät tunnisteet.",
|
||||
"Tasks": "Tehtävät",
|
||||
"Test": "Testaa",
|
||||
"TestAllClients": "Lataustyökalujen testaus",
|
||||
"Test": "Koesta",
|
||||
"TestAllClients": "Koesta palvelut",
|
||||
"Time": "Aika",
|
||||
"Title": "Nimike",
|
||||
"Tomorrow": "Huomenna",
|
||||
@@ -130,31 +130,31 @@
|
||||
"Torrents": "Torrentit",
|
||||
"Type": "Tyyppi",
|
||||
"UILanguage": "Käyttöliittymän kieli",
|
||||
"UnableToAddANewApplicationPleaseTryAgain": "Uuden sovelluksen lisäys epäonnistui. Yritä uudelleen.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Uuden tietolähteen lisäys epäonnistui. Yritä uudelleen.",
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Uuden tiedonhaun välityspalvelimen lisäys epäonnistui. Yritä uudelleen.",
|
||||
"BackupsLoadError": "Varmuuskopioiden lataus epäonnistui",
|
||||
"DownloadClientsLoadError": "Lataustyökalujen lataus ei onistu",
|
||||
"UnableToLoadGeneralSettings": "Virhe ladattaessa yleisiä asetuksia",
|
||||
"UnableToAddANewApplicationPleaseTryAgain": "Virhe lisättäessä sovellusta. Yritä uudelleen.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Uuden hakupalvelun lisääminen epäonnistui. Yritä uudelleen.",
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Virhe lisättäessä tiedonhaun välityspalvelinta. Yritä uudelleen.",
|
||||
"BackupsLoadError": "Virhe ladattaessa varmuuskopioita.",
|
||||
"DownloadClientsLoadError": "Virhe ladattaessa latauspalveluita.",
|
||||
"UnableToLoadGeneralSettings": "Yleisasetusten lataus epäonnistui",
|
||||
"UpdateAutomaticallyHelpText": "Lataa ja asenna päivitykset automaattisesti. Voit myös edelleen suorittaa asennuksen järjestelmäasetusten päivitykset-osiosta.",
|
||||
"Added": "Lisäysaika",
|
||||
"AddIndexer": "Lisää tietolähde",
|
||||
"AddIndexer": "Lisää hakupalvelu",
|
||||
"AddingTag": "Tunniste lisätään",
|
||||
"Age": "Ikä",
|
||||
"All": "Kaikki",
|
||||
"AllIndexersHiddenDueToFilter": "Aktiivinen suodatin on piilottanut kaikki tietolähteet.",
|
||||
"AllIndexersHiddenDueToFilter": "Aktiivinen suodatin on piilottanut kaikki hakupalvelut.",
|
||||
"Analytics": "Analytiikka",
|
||||
"AnalyticsEnabledHelpText": "Lähetä nimettömiä käyttö- ja virhetietoja {appName}in palvelimille. Tämä sisältää tietoja selaimestasi, käyttöliittymän sivujen käytöstä, virheraportoinnista, käyttöjärjestelmästä ja suoritusalustasta. Käytämme näitä tietoja ominaisuuksien ja vikakorjausten painotukseen.",
|
||||
"ApiKey": "Rajapinnan avain",
|
||||
"AppDataDirectory": "AppData-kansio",
|
||||
"DatabaseMigration": "Tietokannan siirto",
|
||||
"Delete": "Poista",
|
||||
"DeleteIndexerProxyMessageText": "Haluatko varmasti poistaa tietolähdevälityspalvelimen \"{name}\"?",
|
||||
"DeleteIndexerProxyMessageText": "Haluatko varmasti poistaa hakupalveluvälityspalvelimen \"{name}\"?",
|
||||
"DeleteNotificationMessageText": "Haluatko varmasti poistaa ilmoituspalvelun \"{name}\"?",
|
||||
"Disabled": "Ei käytössä",
|
||||
"DownloadClients": "Lataustyökalut",
|
||||
"DownloadClientSettings": "Lataustyökalujen asetukset",
|
||||
"DownloadClientStatusAllClientHealthCheckMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä",
|
||||
"DownloadClients": "Latauspalvelut",
|
||||
"DownloadClientSettings": "Latauspalveluasetukset",
|
||||
"DownloadClientStatusAllClientHealthCheckMessage": "Latauspalveluita ei ole ongelmien vuoksi käytettävissä",
|
||||
"Mode": "Tila",
|
||||
"MoreInfo": "Lisätietoja",
|
||||
"SelectAll": "Valitse kaikki",
|
||||
@@ -166,16 +166,16 @@
|
||||
"Shutdown": "Sammuta",
|
||||
"Size": "Koko",
|
||||
"Sort": "Järjestys",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Uuden lataustyökalun lisäys epäonnistui. Yitä uudelleen.",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Latauspalvelun lisääminen epäonnistui. Yritä uudelleen.",
|
||||
"AppDataLocationHealthCheckMessage": "Päivityksiä ei sallita, jotta AppData-kansion poistaminen päivityksen yhteydessä voidaan estää",
|
||||
"UnableToLoadHistory": "Historian lataus epäonnistui.",
|
||||
"UnableToLoadNotifications": "Virhe ladattaessa kytköksiä",
|
||||
"UnableToLoadTags": "Tunnisteiden lataus ei onnistu",
|
||||
"UnableToLoadUISettings": "Virhe ladattaesssa käyttöliittymän asetuksia",
|
||||
"UnableToLoadHistory": "Virhe ladattaessa historiaa.",
|
||||
"UnableToLoadNotifications": "Virhe ladattaessa ilmoituspalveluita.",
|
||||
"UnableToLoadTags": "Virhe ladattaessa tunnisteita.",
|
||||
"UnableToLoadUISettings": "Virhe ladattaessa käyttöliittymäasetuksia.",
|
||||
"UnsavedChanges": "Muutoksia ei ole tallennettu",
|
||||
"Yesterday": "Eilen",
|
||||
"ConnectionLost": "Ei yhteyttä",
|
||||
"DeleteDownloadClientMessageText": "Haluatko varmasti poistaa lataustyökalun \"{name}\"?",
|
||||
"ConnectionLost": "Yhteys menetettiin",
|
||||
"DeleteDownloadClientMessageText": "Haluatko varmasti poistaa latauspalvelun \"{name}\"?",
|
||||
"DeleteTagMessageText": "Haluatko varmasti poistaa tunnisteen \"{label}\"?",
|
||||
"Discord": "Discord",
|
||||
"Donations": "Lahjoitukset",
|
||||
@@ -202,18 +202,18 @@
|
||||
"SettingsShowRelativeDates": "Suhteellisten päiväysten esitys",
|
||||
"SettingsShowRelativeDatesHelpText": "Korvaa absoluuttiset päiväykset suhteellisilla päiväyksillä (tänään/eilen/yms.).",
|
||||
"ShowSearch": "Näytä haku",
|
||||
"Source": "Lähdekoodi",
|
||||
"Source": "Lähde",
|
||||
"SSLPort": "SSL-portti",
|
||||
"StartTypingOrSelectAPathBelow": "Aloita kirjoitus tai valitse sijainti alta",
|
||||
"StartupDirectory": "Käynnistyskansio",
|
||||
"TableOptions": "Taulukkonäkymän asetukset",
|
||||
"TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys",
|
||||
"TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille tietolähteille. Käytä kaikille jättämällä tyhjäksi.",
|
||||
"UnableToAddANewAppProfilePleaseTryAgain": "Uuden sovellusprofiilin lisäys epäonnistui. Yritä uudelleen.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Kytköksen lisäys epäonnistui. Yritä uudelleen.",
|
||||
"TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille hakupalveluille.",
|
||||
"UnableToAddANewAppProfilePleaseTryAgain": "Virhe lisättäessä sovellusprofiilia. Yritä uudelleen.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Ilmoituspalvelun lisääminen epäonnistui. Yritä uudelleen.",
|
||||
"Version": "Versio",
|
||||
"View": "Näkymä",
|
||||
"Warn": "Varoitus",
|
||||
"Warn": "Varoita",
|
||||
"Wiki": "Wiki",
|
||||
"Port": "Portti",
|
||||
"Automatic": "Automaattinen",
|
||||
@@ -221,39 +221,39 @@
|
||||
"Backup": "Varmuuskopiointi",
|
||||
"BackupFolderHelpText": "Suhteelliset tiedostosijainnit ovat {appName}in AppData-kansiossa.",
|
||||
"BackupIntervalHelpText": "Tietokannan ja asetusten automaattisen varmuuskopioinnin ajoitus.",
|
||||
"BackupRetentionHelpText": "Säilytysjaksoa vanhemmat varmuuskopiot siivotaan automaattisesti.",
|
||||
"BackupRetentionHelpText": "Säilytysaikaa vanhemmat varmuuskopiot siivotaan automaattisesti.",
|
||||
"Backups": "Varmuuskopiot",
|
||||
"BeforeUpdate": "Ennen päivitystä",
|
||||
"BindAddress": "Sidososoite",
|
||||
"Branch": "Haara",
|
||||
"BranchUpdate": "{appName}in versiopäivityksiin käytettävä kehityshaara",
|
||||
"BranchUpdate": "{appName}in versiopäivityksiin käytettävä kehityshaara.",
|
||||
"BranchUpdateMechanism": "Ulkoisen päivitysratkaisun käyttämä kehityshaara.",
|
||||
"BypassProxyForLocalAddresses": "Ohjaa paikalliset osoitteet välityspalvelimen ohi",
|
||||
"Cancel": "Peruuta",
|
||||
"CancelPendingTask": "Haluatko varmasti perua tämän odottavan tehtävän?",
|
||||
"CancelPendingTask": "Haluatko varmasti perua odottavan tehtävän?",
|
||||
"CertificateValidation": "Varmenteen vahvistus",
|
||||
"CertificateValidationHelpText": "Muuta HTTPS-varmennevahvistuksen tarkkuutta. Älä muuta, jollet ymmärrä tähän liittyviä riskejä.",
|
||||
"CertificateValidationHelpText": "Määritä HTTPS-varmennevahvistuksen tiukkuus. Älä muuta, jos et ymmärrä riskejä.",
|
||||
"ChangeHasNotBeenSavedYet": "Muutosta ei ole vielä tallennettu",
|
||||
"Clear": "Tyhjennä",
|
||||
"CloneProfile": "Monista profiili",
|
||||
"CloseCurrentModal": "Sulje nykyinen ikkuna",
|
||||
"Columns": "Sarakkeet",
|
||||
"Component": "Komponentti",
|
||||
"Connections": "Yhteydet",
|
||||
"ConnectSettings": "Kytkösasetukset",
|
||||
"CouldNotConnectSignalR": "SignalR-kirjastoa ei tavoitettu, eikä käyttöliittymää päivitetä",
|
||||
"Connections": "Ilmoituspalvelut",
|
||||
"ConnectSettings": "Ilmoituspavelun asetukset",
|
||||
"CouldNotConnectSignalR": "SignalR-kirjastoa ei tavoitettu, eikä käyttöliittymä päivity.",
|
||||
"Custom": "Mukautettu",
|
||||
"DeleteApplicationMessageText": "Haluatko varmasti poistaa sovelluksen \"{name}\"?",
|
||||
"DeleteBackup": "Poista varmuuskopio",
|
||||
"DeleteBackupMessageText": "Haluatko varmasti poistaa varmuuskopion \"{name}\"?",
|
||||
"DeleteDownloadClient": "Poista lataustyökalu",
|
||||
"DownloadClientStatusSingleClientHealthCheckMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä: {downloadClientNames}",
|
||||
"EditIndexer": "Muokkaa tietolähdettä",
|
||||
"DeleteDownloadClient": "Poista latauspalvelu",
|
||||
"DownloadClientStatusSingleClientHealthCheckMessage": "Latauspalveluita ei ole ongelmien vuoksi käytettävissä: {downloadClientNames}",
|
||||
"EditIndexer": "Muokkaa hakupalvelua",
|
||||
"EnableAutomaticSearch": "Käytä automaattihakua",
|
||||
"EnableInteractiveSearch": "Käytä manuaalihakuun",
|
||||
"EnableInteractiveSearchHelpText": "Profiilia käytetään manuaalihakuun.",
|
||||
"EnableSSL": "SSL-salaus",
|
||||
"EnableSslHelpText": " Käyttöönotto vaatii uudelleenkäynnistyksen järjestelmänvavojan oikeuksilla.",
|
||||
"EnableSslHelpText": " Käyttöönotto vaatii uudelleenkäynnistyksen järjestelmänvalvojan oikeuksilla.",
|
||||
"Error": "Virhe",
|
||||
"ErrorLoadingContents": "Virhe ladattaessa sisältöjä",
|
||||
"Events": "Tapahtumat",
|
||||
@@ -268,26 +268,26 @@
|
||||
"Grabs": "Kaappaukset",
|
||||
"Health": "Terveys",
|
||||
"Level": "Taso",
|
||||
"NoIssuesWithYourConfiguration": "Kokoonpanossasi ei ole ongelmia",
|
||||
"NoIssuesWithYourConfiguration": "Kokoonpanossasi ei ole ongelmia.",
|
||||
"HomePage": "Verkkosivusto",
|
||||
"Host": "Osoite",
|
||||
"Hostname": "Osoite",
|
||||
"IncludeHealthWarningsHelpText": "Sisällytä kuntovaroitukset",
|
||||
"Indexer": "Tietolähde",
|
||||
"IndexerFlags": "Tietolähteen liput",
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Mikään tietolähde ei ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi.",
|
||||
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Tietolähteet eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi: {indexerNames}",
|
||||
"IndexerPriority": "Tietolähteiden painotus",
|
||||
"Indexer": "Hakupalvelu",
|
||||
"IndexerFlags": "Hakupalvelun liput",
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Mikään hakupalvelu ei ole käytettävissä yli kuusi tuntia kestäneiden virheiden vuoksi.",
|
||||
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Hakupalvelut eivät ole käytettävissä yli kuusi tuntia kestäneiden virheiden vuoksi: {indexerNames}.",
|
||||
"IndexerPriority": "Hakupalveluiden painotus",
|
||||
"IndexerProxyStatusAllUnavailableHealthCheckMessage": "Välityspalvelimet eivät ole käytettävissä virheiden vuoksi",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi",
|
||||
"IndexerStatusUnavailableHealthCheckMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi: {indexerNames}",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Hakupalvelut eivät ole virheiden vuoksi käytettävissä.",
|
||||
"IndexerStatusUnavailableHealthCheckMessage": "Hakupalvelut eivät ole virheiden vuoksi käytettävissä: {indexerNames}.",
|
||||
"NoChange": "Ei muutosta",
|
||||
"NoLogFiles": "Lokitiedostoja ei ole",
|
||||
"SSLCertPasswordHelpText": "PFX-tiedoston salasana",
|
||||
"SSLCertPath": "SSL-varmenteen sijainti",
|
||||
"SSLCertPathHelpText": "PFX-tiedoston sijainti",
|
||||
"Status": "Tila",
|
||||
"NotificationTriggers": "Laukaisimet",
|
||||
"NotificationTriggers": "Ilmoituksen laukaisijat",
|
||||
"NoUpdatesAreAvailable": "Päivityksiä ei ole saatavilla",
|
||||
"OAuthPopupMessage": "Selaimesi estää ponnahdukset",
|
||||
"Ok": "Ok",
|
||||
@@ -303,46 +303,46 @@
|
||||
"RestoreBackup": "Palauta varmuuskopio",
|
||||
"Retention": "Säilytys",
|
||||
"UILanguageHelpText": "{appName}in käyttöliittymän kieli.",
|
||||
"UILanguageHelpTextWarning": "Selaimen sivupäivitys vaaditaan",
|
||||
"UILanguageHelpTextWarning": "Vaatii selaimen sivupäivityksen (F5).",
|
||||
"UISettings": "Käyttöliittymän asetukset",
|
||||
"DownloadClientsSettingsSummary": "{appName}in käyttöliittymästä suoritettavien hakujen yhteydessä käytettävät lataustyökalumääritykset.",
|
||||
"ProwlarrSupportsAnyDownloadClient": "{appName} tukee alla listatuja lataustyökaluja.",
|
||||
"AddDownloadClientToProwlarr": "Lisäämällä lataustyökalun {appName} voi käynnistää lataukset suoraan käyttöliittymästä manuaalisen haun yhteydessä.",
|
||||
"RedirectHelpText": "Uudelleenohjaa tietolähteeltä saapuvat latauspyynnöt ja välitä kaappaus suoraan välittämättä sitä {appName}in välityksellä.",
|
||||
"DownloadClientsSettingsSummary": "{appName}in käyttöliittymästä suoritettavien hakujen yhteydessä käytettävät latauspalvelut.",
|
||||
"ProwlarrSupportsAnyDownloadClient": "{appName} tukee kaikkia alla listatuja latauspalveluita.",
|
||||
"AddDownloadClientToProwlarr": "Lisäämällä latauspalvelun {appName} voi lähettää julkaisut suoraan käyttöliittymästä manuaalihaun tuloksista.",
|
||||
"RedirectHelpText": "Uudelleenohjaa hakupalvelulta saapuvat latauspyynnöt ja välitä kaappaus suoraan välittämättä sitä {appName}in kautta.",
|
||||
"FullSync": "Täysi synkronointi",
|
||||
"SyncLevelFull": "Täysi synkronointi: Pitää sovelluksen tietolähteet täysin synkronoituna. Tietolähteisiin {appName}issa tehdyt muutokset synkronoidaan etäsovelluksen kanssa ja kaikki etäsovelluksessa tehdyt muutokset korvataan seuraavan synkronoinnin yhteydessä.",
|
||||
"EnableIndexer": "Tietolähteen tila",
|
||||
"FilterPlaceHolder": "Suodata tietolähteitä",
|
||||
"IndexerHealthCheckNoIndexers": "Yhtään tietolähdettä ei ole käytössä, eikä {appName} tämän vuoksi löydä tuloksia.",
|
||||
"IndexerObsoleteCheckMessage": "Tietolähteet ovat poistuneet tai ne ovat muuttuneet: {0}. Poista ja/tai lisää ne {appName}iin uudelleen.",
|
||||
"SyncLevelFull": "Täysi synkronointi: Pitää sovelluksen hakupalvelut täysin synkronoituna. Hakupalveluihin {appName}issa tehdyt muutokset synkronoidaan etäsovelluksen kanssa ja kaikki etäsovelluksessa tehdyt muutokset korvataan seuraavan synkronoinnin yhteydessä.",
|
||||
"EnableIndexer": "Ota hakupalvelu käyttöön",
|
||||
"FilterPlaceHolder": "Suodata palveluita",
|
||||
"IndexerHealthCheckNoIndexers": "Yhtään hakupalvelua ei ole käytössä, eikä {appName} tämän vuoksi löydä tuloksia.",
|
||||
"IndexerObsoleteCheckMessage": "Hakupalvelut ovat poistuneet tai ne ovat muuttuneet: {0}. Poista tai lisää ne {appName}iin uudelleen.",
|
||||
"IndexerProxy": "Tiedonhaun välityspalvelin",
|
||||
"IndexerSettingsSummary": "Määritä useita globaaleita tietolähdeasetuksia, kuten välityspalvelimia.",
|
||||
"IndexerVipExpiringHealthCheckMessage": "Tietolähteen VIP-edut erääntyvät pian: {indexerNames}",
|
||||
"ProwlarrSupportsAnyIndexer": "{appName} tukee Newznab- ja Torznab-yhteensopivien tietolähteiden ohella myös useita muita lähteitä vaihtoehdoilla \"Yleinen Newznab\" (Usenetille) ja 'Yleinen Torznab' (torrenteille).",
|
||||
"SettingsIndexerLogging": "Tehostettu tietolähteiden valvonta",
|
||||
"IndexerSettingsSummary": "Määritä useita globaaleita hakupalveluasetuksia, kuten välityspalvelimia.",
|
||||
"IndexerVipExpiringHealthCheckMessage": "Hakupalvelun VIP-edut päättyvät pian: {indexerNames}.",
|
||||
"ProwlarrSupportsAnyIndexer": "{appName} tukee Newznab- ja Torznab-yhteensopivien hakupalveluiden ohella myös useita muita palveluita vaihtoehdoilla \"Yleinen Newznab\" (Usenetille) ja 'Yleinen Torznab' (torrenteille).",
|
||||
"SettingsIndexerLogging": "Tehostettu hakupalveluiden valvonta",
|
||||
"AddIndexerProxy": "Lisää tiedonhaun välityspalvelin",
|
||||
"UISettingsSummary": "Kalenterin, päiväyksen ja kellonajan sekä kielen ja heikentyneelle värinäölle sopivan tilan asetukset.",
|
||||
"SettingsIndexerLoggingHelpText": "Kirjaa tarkempia tietoja tietolähteiden toiminnasta, mukaanlukien vastaukset",
|
||||
"SettingsIndexerLoggingHelpText": "Kirjaa tarkempia tietoja hakupalveluiden toiminnasta, mukaanlukien vastaukset",
|
||||
"IndexerTagsHelpText": "Tunnisteilla voit kohdistaa tiedonhaun välityspalvelimia ja määrittää mihin sovelluksiin ne synkronoidaan.",
|
||||
"UnableToLoadAppProfiles": "Sovellusprofiilien lataus epäonnistui",
|
||||
"AppProfileSelectHelpText": "Sovellusprofiilieilla määritetään tietolähteelle sovellussynkronoinnin yhteydessä aktivoitavat hakutavat (RSS/automaatti/manuaali).",
|
||||
"IndexerQuery": "Tietolähteen kysely",
|
||||
"IndexerRss": "Tietolähteen RSS",
|
||||
"SearchIndexers": "Etsi tietolähteistä",
|
||||
"UnableToLoadAppProfiles": "Virhe ladattaessa sovellusprofiileja.",
|
||||
"AppProfileSelectHelpText": "Sovellusprofiilieilla määritetään hakupalvelulle sovellussynkronoinnin yhteydessä aktivoitavat hakutavat (RSS/automaatti/manuaali).",
|
||||
"IndexerQuery": "Hakupalvelukysely",
|
||||
"IndexerRss": "Hakupalvelun RSS",
|
||||
"SearchIndexers": "Etsi hakupalveluista",
|
||||
"AddRemoveOnly": "Ainoastaan lisää/poista",
|
||||
"IndexerVipExpiredHealthCheckMessage": "Tietolähteen VIP-edut ovat erääntyneet: {indexerNames}",
|
||||
"IndexerVipExpiredHealthCheckMessage": "Hakupalvelun VIP-edut ovat päättyneet: {indexerNames}.",
|
||||
"MaintenanceRelease": "Huoltojulkaisu: korjauksia ja muita parannuksia. Lue lisää Githubin muutoshistoriasta.",
|
||||
"Query": "Kysely",
|
||||
"Redirect": "Uudelleenohjaus",
|
||||
"RestartProwlarr": "Käynnistä {appName} uudelleen",
|
||||
"SyncLevel": "Synkronoinnin laajuus",
|
||||
"SyncLevelAddRemove": "Vain lisäys/poisto: Kun {appName}in tietolähteitä lisätään tai poistetaan, päivittyy myös etäsovellus.",
|
||||
"SyncAppIndexers": "Synkronoi tietolähteet",
|
||||
"TestAllApps": "Testaa kaikki sovellukset",
|
||||
"UnableToLoadIndexerProxies": "Tiedonhaun välityspalvelimia ei voitu ladata",
|
||||
"AddedToDownloadClient": "Julkaisu lisättiin lataustyökaluun",
|
||||
"AddNewIndexer": "Lisää uusi tietolähde",
|
||||
"AddToDownloadClient": "Lisää julkaisu lataustyökaluun",
|
||||
"SyncLevelAddRemove": "Vain lisäys/poisto: Kun {appName}in hakupalveluita lisätään tai poistetaan, päivittyy myös tämä etäsovellus.",
|
||||
"SyncAppIndexers": "Synkronoi sovelluksiin",
|
||||
"TestAllApps": "Koesta sovellukset",
|
||||
"UnableToLoadIndexerProxies": "Virhe ladattaessa tiedonhaun välityspalvelimia.",
|
||||
"AddedToDownloadClient": "Julkaisu lisättiin latauspalveluun",
|
||||
"AddNewIndexer": "Lisää uusi hakupalvelu",
|
||||
"AddToDownloadClient": "Lisää julkaisu latauspalveluun",
|
||||
"NoSearchResultsFound": "Tuloksia ei löytynyt. Yritä uutta hakua alta.",
|
||||
"Notification": "Ilmoitus",
|
||||
"DeleteIndexerProxy": "Poista tiedonhaun välityspalvelin",
|
||||
@@ -351,7 +351,7 @@
|
||||
"SettingsLogRotate": "Lokitiedostojen kierrätys",
|
||||
"SettingsLogSql": "Kirjaa SQL",
|
||||
"SettingsSqlLoggingHelpText": "Kirjaa kaikki {appName}in SQL-kyselyt",
|
||||
"ConnectSettingsSummary": "Ilmoitukset, kuten viestintä mediapalvelimille ja soittimille, sekä omat komentosarjat.",
|
||||
"ConnectSettingsSummary": "Yhteydet ilmoituspalveluihin ja mukautetut komentosarjat.",
|
||||
"DevelopmentSettings": "Kehittäjäasetukset",
|
||||
"Description": "Kuvaus",
|
||||
"Id": "ID",
|
||||
@@ -365,16 +365,16 @@
|
||||
"Category": "Kategoria",
|
||||
"ClearHistory": "Tyhjennä historia",
|
||||
"ClearHistoryMessageText": "Haluatko varmasti tyhjentää kaiken {appName}-historian?",
|
||||
"Connect": "Kytkökset",
|
||||
"EnableRssHelpText": "Käytä tietolähteelle RSS-syötettä.",
|
||||
"Connect": "Ilmoituspalvelut",
|
||||
"EnableRssHelpText": "Käytä hakupalvelulle RSS-syötettä.",
|
||||
"DeleteApplication": "Poista sovellus",
|
||||
"DeleteAppProfile": "Poista sovellusprofiili",
|
||||
"IndexerProxies": "Tiedonhaun välityspalvelimet",
|
||||
"IndexerAuth": "Tietolähteen todennus",
|
||||
"Notifications": "Kytkökset",
|
||||
"NotificationTriggersHelpText": "Valitse tämän ilmoituksen laukaisevat tapahtumat.",
|
||||
"IndexerProxies": "Hakupalveluiden välityspalvelimet",
|
||||
"IndexerAuth": "Hakupalvelun todennus",
|
||||
"Notifications": "Ilmoituspalvelut",
|
||||
"NotificationTriggersHelpText": "Valitse ilmoituksen laukaisevat tapahtumat.",
|
||||
"Stats": "Tilastot",
|
||||
"UnableToLoadDevelopmentSettings": "Kehittäjäasetusten lataus epäonnistui",
|
||||
"UnableToLoadDevelopmentSettings": "Virhe ladattaessa kehittäjäasetuksia.",
|
||||
"AppSettingsSummary": "Sovellukset ja asetukset, joilla määritetään miten {appName} viestii PVR-sovellustesi kanssa.",
|
||||
"Privacy": "Yksityisyys",
|
||||
"NetCore": ".NET",
|
||||
@@ -387,54 +387,54 @@
|
||||
"Filters": "Suodattimet",
|
||||
"OnGrab": "Kun julkaisu kaapataan",
|
||||
"OnHealthIssue": "Vakausongelmat",
|
||||
"HistoryCleanupDaysHelpText": "Arvo \"0\" (nolla) poistaa automaattisen tyhjennyksen käytöstä.",
|
||||
"HistoryCleanupDaysHelpText": "Poista automaattinen tyhjennys käytöstä asettamalla arvoksi 0.",
|
||||
"HistoryCleanupDaysHelpTextWarning": "Tässä määritettyä aikaa vanhemmat tiedostot poistetaan automaattisesti roskakorista pysyvästi.",
|
||||
"TestAllIndexers": "Tietolähteiden testaus",
|
||||
"TestAllIndexers": "Koesta palvelut",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti rajapinnan kanssa viestinyt sovellus.",
|
||||
"Categories": "Kategoriat",
|
||||
"Database": "Tietokanta",
|
||||
"HistoryCleanup": "Historian siivous",
|
||||
"IndexerAlreadySetup": "Tietolähteestä on määritetty jo ainakin yksi instanssi",
|
||||
"IndexerInfo": "Tietolähteen tiedot",
|
||||
"MassEditor": "Joukkoeditori",
|
||||
"IndexerAlreadySetup": "Hakupalvelusta on määritetty jo ainakin yksi instanssi.",
|
||||
"IndexerInfo": "Hakupalvelun tiedot",
|
||||
"MassEditor": "Massamuokkaus",
|
||||
"OnApplicationUpdate": "Kun sovellus päivitetään",
|
||||
"OnApplicationUpdateHelpText": "Kun sovellus päivitetään",
|
||||
"Proxies": "Välityspalvelimet",
|
||||
"Public": "Julkinen",
|
||||
"SemiPrivate": "Osittain yksityinen",
|
||||
"ApplicationsLoadError": "Sovelluslistausta ei voitu ladata",
|
||||
"ApplicationsLoadError": "Virhe ladattaessa sovelluslistaa.",
|
||||
"Url": "URL",
|
||||
"Website": "Verkkosivusto",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Tietolähteillä ei ole määritystä, eivätkä ne toimi: {indexerNames}. Poista ja/tai lisää {appName}iin uudelleen",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Hakupalveluiden määritykset puuttuvat, eivätkä ne toimi: {indexerNames}. Poista tai lisää ne {appName}iin uudelleen.",
|
||||
"Private": "Yksityinen",
|
||||
"QueryResults": "Kyselyn tulokset",
|
||||
"Application": "Sovellus",
|
||||
"GrabReleases": "Kaappaa julkaisu(t)",
|
||||
"Link": "Linkki",
|
||||
"SearchTypes": "Mitä etsitään",
|
||||
"UnableToLoadIndexers": "Tietolähteiden lataus epäonnistui",
|
||||
"SearchTypes": "Etsittävät tyypit",
|
||||
"UnableToLoadIndexers": "Virhe ladattaessa hakupalveluita.",
|
||||
"Yes": "Kyllä",
|
||||
"MappedDrivesRunningAsService": "Yhdistetyt verkkoasemat eivät ole käytettävissä kun sovellus suoritetaan Windows-palveluna. Saat lisätietoja UKK:sta.",
|
||||
"No": "Ei",
|
||||
"BookSearchTypes": "Kirjojen hakutyypit",
|
||||
"IndexerDetails": "Tietolähteen tiedot",
|
||||
"IndexerName": "Tietolähteen nimi",
|
||||
"IndexerSite": "Tietolähteen sivusto",
|
||||
"MovieSearchTypes": "Elokuvien hakutyypit",
|
||||
"MusicSearchTypes": "Musiikin hakutyypit",
|
||||
"BookSearchTypes": "Etsittävät kirjatyypit",
|
||||
"IndexerDetails": "Hakupalvelun tiedot",
|
||||
"IndexerName": "Hakupalvelun nimi",
|
||||
"IndexerSite": "Hakupalvelun sivusto",
|
||||
"MovieSearchTypes": "Etsittävät elokuvatyypit",
|
||||
"MusicSearchTypes": "Etsittävät musiikkityypit",
|
||||
"NotSupported": "Ei tuettu",
|
||||
"RawSearchSupported": "Raakahaku tuettu",
|
||||
"SearchCapabilities": "Hakuominaisuudet",
|
||||
"TVSearchTypes": "Televisiosarjojen hakutyypit",
|
||||
"TVSearchTypes": "Etsittävät sarja-/jaksotyypit",
|
||||
"MinimumSeeders": "Jakajien vähimmäismäärä",
|
||||
"MinimumSeedersHelpText": "Sovelluksen edellyttämä jakajien vähimmäismäärä tietolähteestä kaappaukseen.",
|
||||
"MinimumSeedersHelpText": "Sovelluksen edellyttämä hakupalvelusta kaapattavien kohteiden jakajien (seed) vähimmäismäärä.",
|
||||
"SyncProfile": "Synkronointiprofiili",
|
||||
"SyncProfiles": "Synkronointiprofiilit",
|
||||
"AddSyncProfile": "Lisää synkronointiprofiili",
|
||||
"EditSyncProfile": "Muokkaa synkronointiprofiilia",
|
||||
"InstanceName": "Instanssin nimi",
|
||||
"InstanceNameHelpText": "Instanssin nimi välilehdellä ja järjestelmälokissa.",
|
||||
"ThemeHelpText": "Vaihda sovelluksen käyttöliittymän ulkoasua. \"Automaattinen\" vaihtaa vaalean ja tumman tilan välillä käyttöjärjestelmän teeman mukaan. Innoittanut Theme.Park.",
|
||||
"ThemeHelpText": "Vaihda sovelluksen käyttöliittymän ulkoasua. \"Automaattinen\" vaihtaa vaalean ja tumman tilan välillä käyttöjärjestelmän teeman mukaan. Innoittanut {inspiredBy}.",
|
||||
"Duration": "Kesto",
|
||||
"ElapsedTime": "Kulunut aika",
|
||||
"EnabledRedirected": "Kulunut, uudelleenohjattu",
|
||||
@@ -449,38 +449,38 @@
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "Sovellukset eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi.",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Sovellukset eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi: {0}",
|
||||
"AreYouSureYouWantToDeleteCategory": "Haluatko varmasti poistaa kohdistetun kategorian?",
|
||||
"DeleteClientCategory": "Poista lataustyökalukategoria",
|
||||
"DownloadClientCategory": "Lataustyökalukategoria",
|
||||
"DeleteClientCategory": "Poista latauspalvelukategoria",
|
||||
"DownloadClientCategory": "Latauspalvelukategoria",
|
||||
"MappedCategories": "Kohdistetut kategoriat",
|
||||
"AuthenticationRequired": "Vaadi tunnistautuminen",
|
||||
"Remove": "Poista",
|
||||
"Replace": "Korvaa",
|
||||
"OnLatestVersion": "{appName}in uusin versio on jo asennettu",
|
||||
"OnLatestVersion": "Uusin {appName}-versio on jo asennettu",
|
||||
"ApplicationURL": "Sovelluksen URL",
|
||||
"ApplicationUrlHelpText": "Tämän sovelluksen ulkoinen URL-osoite, johon sisältyy http(s)://, portti ja URL-perusta.",
|
||||
"Track": "Valvo",
|
||||
"CountIndexersSelected": "{count} tietolähde(ttä) on valittu",
|
||||
"DeleteSelectedDownloadClients": "Poista lataustyökalu(t)",
|
||||
"CountIndexersSelected": "{count} hakupalvelu(a) on valittu",
|
||||
"DeleteSelectedDownloadClients": "Poista valitut latauspalvelu(t)",
|
||||
"DeleteSelectedApplicationsMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) sovellu(sta/ksen)?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valit(n/tua) lataustyökalu(n/a)?",
|
||||
"DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) tietoläh(teen/dettä)?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valittua latauspalvelua?",
|
||||
"DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) hakupalvelu(n/a)?",
|
||||
"Publisher": "Julkasija",
|
||||
"SelectIndexers": "Valitse tietolähteet",
|
||||
"SelectIndexers": "Palveluiden monivalinta",
|
||||
"Year": "Vuosi",
|
||||
"Genre": "Lajityyppi",
|
||||
"More": "Lisää",
|
||||
"Season": "Kausi",
|
||||
"ApplyTagsHelpTextAdd": "– \"Lisää\" syötetyt tunnisteet aiempiin tunnisteisiin",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Tunnisteiden käyttäminen valituille sovelluksille",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituissa tietolähteissä",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Tunnisteiden käyttö valituille sovelluksille:",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituille hakupalveluille:",
|
||||
"ApplyTagsHelpTextRemove": "- \"Poista\" tyhjentää syötetyt tunnisteet",
|
||||
"ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi",
|
||||
"DownloadClientPriorityHelpText": "Lautaustyökalujen painotus, 1– 50 (korkein-alin). Oletusarvo on 1 ja tasaveroiset erotetaan Round-Robin-tekniikalla.",
|
||||
"ApplyTagsHelpTextReplace": "– \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi.",
|
||||
"DownloadClientPriorityHelpText": "Useiden latauspalveluiden painotus, 1–50 (korkein-alin). Oletusarvo on 1 ja tasaveroiset erotetaan Round-Robin-tekniikalla.",
|
||||
"Album": "Albumi",
|
||||
"Artist": "Esittäjä",
|
||||
"Author": "Kirjailija",
|
||||
"Book": "Kirja",
|
||||
"UpdateAvailableHealthCheckMessage": "Uusi päivitys on saatavilla",
|
||||
"UpdateAvailableHealthCheckMessage": "Uusi päivitys on saatavilla: {version}",
|
||||
"Episode": "Jakso",
|
||||
"Label": "Nimi",
|
||||
"Theme": "Teema",
|
||||
@@ -490,44 +490,44 @@
|
||||
"WhatsNew": "Mikä on uutta?",
|
||||
"ConnectionLostToBackend": "{appName} kadotti yhteyden taustajärjestelmään ja se on käynnistettävä uudelleen.",
|
||||
"minutes": "minuuttia",
|
||||
"AddConnection": "Lisää yhteys",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Mikään ilmoituspavelu ei ole ongelmien vuoksi käytettävissä.",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Ilmoitukset eivät ole ongelmien vuoksi käytettävissä: {notificationNames}",
|
||||
"AuthBasic": "Perus (ponnahdusikkuna)",
|
||||
"AddConnection": "Lisää ilmoituspavelu",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Ilmoituspalvelut eivät ole ongelmien vuoksi käytettävissä.",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Ilmoituspalvelut eivät ole ongelmien vuoksi käytettävissä: {notificationNames}.",
|
||||
"AuthBasic": "Perus (selaimen ponnahdus)",
|
||||
"AuthForm": "Lomake (kirjautumissivu)",
|
||||
"DisabledForLocalAddresses": "Ei käytössä paikallisille osoitteille",
|
||||
"DisabledForLocalAddresses": "Ei käytössä paikallisissa osoitteissa",
|
||||
"None": "Ei mitään",
|
||||
"ResetAPIKeyMessageText": "Haluatko varmasti korvata rajapinnan avaimen uudella?",
|
||||
"TotalIndexerSuccessfulGrabs": "Onnistuneiden tietolähdekaappausten kokonaismäärä",
|
||||
"TotalIndexerSuccessfulGrabs": "Onnistuneiden hakupalvelukaappausten kokonaismäärä",
|
||||
"AppUpdated": "{appName} on päivitetty",
|
||||
"AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on käynnistettävä uudelleen.",
|
||||
"IndexerDownloadClientHelpText": "Määritä tämän tietolähteen kanssa käytettävä lataustyökalu.",
|
||||
"AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt todennuksen käyttöönoton. Todennus voidaan poistaa käytöstä paikallisille osoitteille.",
|
||||
"IndexerDownloadClientHelpText": "Määritä {appName}in käyttöliittymässä tästä hakupalvelusta kaapattaessa käytettävä latauspalvelu.",
|
||||
"AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt tunnistautumisen käyttöönoton. Paikallisilta osoitteilta se voidaan valinnaisesti poistaa käytöstä.",
|
||||
"TotalGrabs": "Kaappausten kokonaismäärä",
|
||||
"AddDownloadClientImplementation": "Lisäätään lataustyökalua - {implementationName}",
|
||||
"AddIndexerImplementation": "Lisätään tietolähdettä - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Lisätään latauspalvelua – {implementationName}",
|
||||
"AddIndexerImplementation": "Lisätään hakupalvelua – {implementationName}",
|
||||
"OnGrabHelpText": "Kun julkaisu kaapataan",
|
||||
"ManageDownloadClients": "Hallitse lataustyökaluja",
|
||||
"NoDownloadClientsFound": "Lataustyökaluja ei löytynyt",
|
||||
"CountDownloadClientsSelected": "{count} lataustyökalu(a) on valittu",
|
||||
"EditSelectedDownloadClients": "Muokkaa valittuja lataustyökaluja",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Tietolähteet virheellisillä lataustyökaluilla: {indexerNames}.",
|
||||
"AddIndexerProxyImplementation": "Lisää tiedonhaun välityspalvelin - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Muokkaa tiedonhaun välityspalvelinta - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Muokataan lataustyökalua - {implementationName}",
|
||||
"ManageDownloadClients": "Hallitse palveluita",
|
||||
"NoDownloadClientsFound": "Latauspalveluita ei löytynyt",
|
||||
"CountDownloadClientsSelected": "{count} latauspalvelu(a) on valittu",
|
||||
"EditSelectedDownloadClients": "Muokkaa valittuja latauspalveluita",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Hakupalvelut virheellisillä latauspalveluilla: {indexerNames}.",
|
||||
"AddIndexerProxyImplementation": "Lisätään tiedonhaun välityspalvelinta – {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Muokataan tiedonhaun välityspalvelinta – {implementationName}",
|
||||
"EditDownloadClientImplementation": "Muokataan latauspalvelua – {implementationName}",
|
||||
"AddCustomFilter": "Lisää oma suodatin",
|
||||
"ApplyChanges": "Toteuta muutokset",
|
||||
"EditSelectedIndexers": "Muokkaa valittuja sisältölähteitä",
|
||||
"NoHistoryFound": "Historiaa ei löytynyt",
|
||||
"NoIndexersFound": "Tietolähteitä ei löytynyt",
|
||||
"NoIndexersFound": "Palveluita ei löytynyt",
|
||||
"StopSelecting": "Lopeta valitseminen",
|
||||
"EditConnectionImplementation": "Muokataan kytköstä - {implementationName}",
|
||||
"AddConnectionImplementation": "Lisätään kytköstä - {implementationName}",
|
||||
"EditConnectionImplementation": "Muokataan ilmoituspalvelua – {implementationName}",
|
||||
"AddConnectionImplementation": "Lisätään ilmoituspavelua – {implementationName}",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Sisällön rakenne",
|
||||
"EditIndexerImplementation": "Muokataan tietolähdettä - {implementationName}",
|
||||
"EditIndexerImplementation": "Muokataan hakupalvelua – {implementationName}",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Syötä uusi käyttäjätunnus",
|
||||
"DefaultNameCopiedProfile": "{name} - Kopioi",
|
||||
"AppsMinimumSeedersHelpText": "Sovellusten edellyttämä tietolähteestä kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.",
|
||||
"DefaultNameCopiedProfile": "{name} (kopio)",
|
||||
"AppsMinimumSeedersHelpText": "Sovellusten edellyttämä hakupalvelusta kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.",
|
||||
"TotalHostGrabs": "Isännän kaappausten kokonaismäärä",
|
||||
"IncludeManualGrabsHelpText": "Sisällytä {appName}in käyttöliittymästä tehdyt manuaalikaappaukset.",
|
||||
"AuthenticationRequiredHelpText": "Valitse mitkä pyynnöt vaativat tunnistautumisen. Älä muuta, jos et ymmärrä riskejä.",
|
||||
@@ -537,47 +537,47 @@
|
||||
"AuthenticationMethod": "Tunnistautumistapa",
|
||||
"Clone": "Monista",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Vahvista uusi salasana",
|
||||
"EditApplicationImplementation": "Muokataan sovellusta - {implementationName}",
|
||||
"AddApplicationImplementation": "Lisätään sovellusta - {implementationName}",
|
||||
"EditApplicationImplementation": "Muokataan sovellusta – {implementationName}",
|
||||
"AddApplicationImplementation": "Lisätään sovellusta – {implementationName}",
|
||||
"InvalidUILanguage": "Käytöliittymän kielivalinta on virheellinen. Korjaa se ja tallenna asetukset.",
|
||||
"SeedRatio": "Jakosuhde",
|
||||
"SeedTime": "Jakoaika",
|
||||
"days": "päivää",
|
||||
"HistoryDetails": "Historiatiedot",
|
||||
"IndexerDisabled": "Tietolähde ei ole käytössä",
|
||||
"IndexerDisabled": "Hakupalvelu ei ole käytössä",
|
||||
"AdvancedSettingsShownClickToHide": "Lisäasetukset näytetään, piilota painamalla tästä.",
|
||||
"AdvancedSettingsHiddenClickToShow": "Lisäasetukset on piilotettu, näytä painamalla tästä.",
|
||||
"AppsMinimumSeeders": "Sovellusten vähimmäisjakajat",
|
||||
"AppsMinimumSeeders": "Jakajien vähimmäismäärä",
|
||||
"BasicSearch": "Perushaku",
|
||||
"CountApplicationsSelected": "{count} sovellus(ta) on valittu",
|
||||
"DeleteSelectedApplications": "Poista valitut sovellukset",
|
||||
"DeleteSelectedIndexer": "Poista valittu tietolähde",
|
||||
"DeleteSelectedIndexers": "Poista valitut tietolähteet",
|
||||
"DeleteSelectedIndexer": "Poista valittu hakupalvelu",
|
||||
"DeleteSelectedIndexers": "Poista valitut hakupalvelut",
|
||||
"Implementation": "Toteutus",
|
||||
"IndexerCategories": "Tietolähdekategoriat",
|
||||
"IndexerStatus": "Tietolähteen tila",
|
||||
"IndexerCategories": "Hakupalvelukategoriat",
|
||||
"IndexerStatus": "Hakupalvelun tila",
|
||||
"ManageApplications": "Hallitse sovelluksia",
|
||||
"NewznabUrl": "Newznab URL",
|
||||
"PackSeedTime": "Koosteen jakoaika",
|
||||
"PackSeedTime": "Paketin jakoaika",
|
||||
"PackSeedTimeHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.",
|
||||
"QueryType": "Kyselyn tyyppi",
|
||||
"SearchAllIndexers": "Etsi kaikista tietolähteistä",
|
||||
"SearchAllIndexers": "Etsi kaikista hakupalveluista",
|
||||
"SeedRatioHelpText": "Jakosuhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä sovelluksen oletusta jättämällä tyhjäksi.",
|
||||
"TorznabUrl": "Torznab URL",
|
||||
"ApiKeyValidationHealthCheckMessage": "Muuta rajapinnan (API) avain ainakin {length} merkin pituiseksi. Voit tehdä tämän asetuksista tai muokkaamalla asetustiedostoa.",
|
||||
"OnHealthRestored": "Terveystilan vakautuessa",
|
||||
"OnHealthRestoredHelpText": "Terveystilan vakautuessa",
|
||||
"TotalHostQueries": "Isännän kyselyiden kokonaismäärä",
|
||||
"TotalIndexerQueries": "Tietolähteen kyselyiden kokonaismäärä",
|
||||
"TotalIndexerQueries": "Hakupalvelun kyselyiden kokonaismäärä",
|
||||
"GoToApplication": "Siirry sovellukseen",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Haluatko varmasti poistaa tietolähteen \"{name}\" sovelluksesta {appName}?",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Haluatko varmasti poistaa hakupalvelun \"{name}\" sovelluksesta {appName}?",
|
||||
"AuthQueries": "Todennuskyselyt",
|
||||
"ApplicationTagsHelpText": "Sovellukseen synkronoidaan yhdellä tai useammalla vastaavalla tunnisteella merkityt tietolähteet. Jos tässä ei ole tunnisteita, ei tietolähteitä synkronoida niiden tunnisteiden vuoksi.",
|
||||
"ApplicationTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkittyyn sovellukseen synkronoidaan vain samalla tunnisteella merkityt tietolähteet.",
|
||||
"AverageResponseTimesMs": "Tietolähteiden keskimääräiset vasteajat (ms)",
|
||||
"CountIndexersAvailable": "{count} tietolähde(ttä) on käytettävissä",
|
||||
"FoundCountReleases": "Löytyi {itemCount} julkaisua",
|
||||
"IndexerTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkitty tietolähde synkronoidaan vain samalla tunnisteella merkittyyn sovellukseen.",
|
||||
"ApplicationTagsHelpText": "Sovellukseen synkronoidaan yhdellä tai useammalla vastaavalla tunnisteella merkityt hakupalvelut. Jos tässä ei ole tunnisteita, ei palveluiden synkronointia estetä tunnisteiden perusteella.",
|
||||
"ApplicationTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkittyyn sovellukseen synkronoidaan vain samalla tunnisteella merkityt hakupalvelut.",
|
||||
"AverageResponseTimesMs": "hakupalveluiden keskimääräiset vasteajat (ms)",
|
||||
"CountIndexersAvailable": "{count} hakupalvelu(a) on käytettävissä",
|
||||
"FoundCountReleases": "Löydettiin {itemCount} julkaisua",
|
||||
"IndexerTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkitty hakupalvelu synkronoidaan vain samalla tunnisteella merkittyihin sovelluksiin.",
|
||||
"LastFailure": "Edellinen virhe",
|
||||
"SelectedCountOfCountReleases": "Valittu {selectedCount}/{itemCount} julkaisua",
|
||||
"TotalQueries": "Kyselyiden kokonaismäärä",
|
||||
@@ -587,118 +587,118 @@
|
||||
"AddApplication": "Lisää sovellus",
|
||||
"AddCategory": "Lisää kategoria",
|
||||
"EditCategory": "Muokkaa kategoriaa",
|
||||
"IndexerId": "Tietolähteen ID",
|
||||
"ActiveIndexers": "Aktiiviset tietolähteet",
|
||||
"NoIndexerCategories": "Tietolähteelle ei löytynyt kategorioita",
|
||||
"IndexerId": "Hakupalvelun ID",
|
||||
"ActiveIndexers": "Aktiiviset hakupalvelut",
|
||||
"NoIndexerCategories": "Hakupalvelulle ei löytynyt kategorioita",
|
||||
"ActiveApps": "Aktiiviset sovellukset",
|
||||
"NoIndexerHistory": "Tietolähteelle ei löytynyt historiaa",
|
||||
"NoIndexerHistory": "Hakupalvelulle ei löytynyt historiaa",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Määrittää käytetäänkö qBittorrentista määritettyä rakennetta, torrentin alkuperäistä rakennetta vai luodaanko uusi alikansio (qBittorrent 4.3.2+).",
|
||||
"External": "Ulkoinen",
|
||||
"IndexerFailureRate": "Tietolähteen virhetaajuus",
|
||||
"IndexerHistoryLoadError": "Virhe ladattaessa tietolähteen historiaa",
|
||||
"IndexerFailureRate": "Hakupalvelun virhetaajuus",
|
||||
"IndexerHistoryLoadError": "Virhe ladattaessa hakupalvelun historiaa",
|
||||
"InitialFailure": "Alkuperäinen virhe",
|
||||
"PasswordConfirmation": "Salasanan vahvistus",
|
||||
"RepeatSearch": "Toista haku",
|
||||
"SearchCountIndexers": "Etsi {count} tietolähteestä",
|
||||
"SearchCountIndexers": "Etsi {count} hakupalvelusta",
|
||||
"SearchQueries": "Hakukyselyt",
|
||||
"SeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä sovelluksen oletusta jättämällä tyhjäksi.",
|
||||
"RssQueries": "RSS-kyselyt",
|
||||
"TotalUserAgentQueries": "Käyttäjäagentin kyselyiden kokonaismäärä",
|
||||
"NotificationsEmailSettingsUseEncryption": "Käytä salausta",
|
||||
"NotificationsEmailSettingsUseEncryptionHelpText": "Määrittää suositaanko salausta, jos se on määritetty palvelimelle, käytetäänkö aina SSL- (vain portti 465) tai StartTLS-salausta (kaikki muut portit), voi käytetäänkö salausta lainkaan.",
|
||||
"ManageClients": "Hallitse työkaluja",
|
||||
"ManageClients": "Hallitse palveluita",
|
||||
"NoApplicationsFound": "Sovelluksia ei löytynyt",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "Valinnainen latuasten tallennussijainti. Käytä Aria2-oletusta jättämällä tyhjäksi.",
|
||||
"UrlBaseHelpText": "Lisää {appName}in URL-osoitteeseen jälkiliitteen, esim. \"http://[osoite]:[portti]/[URL-perusta]\". Oletusarvo on tyhjä.",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä Aria2:n oletusta jättämällä tyhjäksi.",
|
||||
"UrlBaseHelpText": "Käänteisen välityspalvelimen tukea varten. Oletusarvo on tyhjä.",
|
||||
"Donate": "Lahjoita",
|
||||
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Lisää median ominaisuuksia tunnisteina. Vihjeet ovat esimerkkejä.",
|
||||
"DownloadClientRTorrentSettingsDirectoryHelpText": "Valinnainen latuasten tallennussijainti. Käytä Aria2-oletusta jättämällä tyhjäksi.",
|
||||
"DownloadClientSettingsUseSslHelpText": "Muodosta {clientName} -yhteys käyttäen salattua yhteyttä.",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "Vaihtoehtoinen latauskansio. Käytä Transmissionin oletusta jättämällä tyhjäksi.",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Lisää etuliite lataustyökalun {clientName} RPC-URL-osoitteeseen. Esimerkiksi {url}. Oletus on \"{defaultUrl}\".",
|
||||
"IndexerSettingsAppsMinimumSeedersHelpText": "Sovellusten edellyttämä tietolähteestä kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.",
|
||||
"DownloadClientRTorrentSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä rTorrentin oletusta jättämällä tyhjäksi.",
|
||||
"DownloadClientSettingsUseSslHelpText": "Muodosta {clientName}-yhteys käyttäen salattua yhteyttä.",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä Transmissionin oletusta jättämällä tyhjäksi.",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Lisää latauspalvelun {clientName} RPC-URL-osoitteeseen etuliitteen, esim. \"{url}\". Oletus on \"{defaultUrl}\".",
|
||||
"IndexerSettingsAppsMinimumSeedersHelpText": "Sovellusten edellyttämä hakupalvelusta kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.",
|
||||
"Menu": "Valikko",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Hylkää estetyt torrent-hajautusarvot kaapattaessa",
|
||||
"IndexerBeyondHDSettingsSearchTypes": "Mitä etsitään",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Synkronoi estetyt torrent-hajautusarvot kaapattaessa",
|
||||
"IndexerBeyondHDSettingsSearchTypes": "Etsittävät tyypit",
|
||||
"IndexerSettingsSeedRatio": "Jakosuhde",
|
||||
"IndexerSettingsSeedTime": "Jakoaika",
|
||||
"IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi.",
|
||||
"IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi.",
|
||||
"IndexerSettingsVipExpiration": "VIP-erääntyy",
|
||||
"Destination": "Kohde",
|
||||
"Directory": "Kansio",
|
||||
"DownloadClientFloodSettingsTagsHelpText": "Latauksen alkuperäiset tunnisteet. Jotta se voidaa tunnistaa, on latauksella oltava sen alkuperäiset tunnisteet. Tämä välttää ristiriidat muiden latausten kanssa.",
|
||||
"DownloadClientFreeboxSettingsApiUrl": "Rajapinnan URL-osoite",
|
||||
"DownloadClientFloodSettingsTagsHelpText": "Latauksen alkuperäiset tunnisteet, jotka tarvitaan sen tunnistamiseen. Tämä välttää ristiriidat muiden latausten kanssa.",
|
||||
"DownloadClientFreeboxSettingsApiUrl": "Rajapinnan URL",
|
||||
"DownloadClientFreeboxSettingsAppTokenHelpText": "Freebox-rajapinnan käyttöoikeutta määritettäessä saatu app_token-tietue.",
|
||||
"DownloadClientFreeboxSettingsHostHelpText": "Freeboxin isäntänimi tai IP-osoite. Oletus on \"{url}\" (toimii vain samassa verkossa).",
|
||||
"DownloadClientPneumaticSettingsStrmFolder": "Strm-kansio",
|
||||
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Tila, jossa torrentit lisätään qBittorrentiin. Huomioi, että pakotetut torrentit eivät noudata nopeusrajoituksia.",
|
||||
"DownloadClientSettingsAddPaused": "Lisää pysäytettynä",
|
||||
"DownloadClientSettingsAddPaused": "Lisää keskeytettynä",
|
||||
"DownloadClientSettingsDestinationHelpText": "Määrittää manuaalisen tallennuskohteen. Käytä oletusta jättämällä tyhjäksi.",
|
||||
"DownloadClientSettingsInitialState": "Virheellinen tila",
|
||||
"DownloadClientSettingsInitialStateHelpText": "Lataustyökaluun {clientName} lisättyjen torrentien aloitustila.",
|
||||
"DownloadClientSettingsInitialState": "Aloitustila",
|
||||
"DownloadClientSettingsInitialStateHelpText": "Latauspalveluun {clientName} lisättyjen torrentien aloitustila.",
|
||||
"IndexerHDBitsSettingsCodecs": "Koodekit",
|
||||
"IndexerHDBitsSettingsCodecsHelpText": "Jos ei määritetty, käytetään kaikkia vaihtoehtoja.",
|
||||
"IndexerHDBitsSettingsMediums": "Mediatyypit",
|
||||
"IndexerHDBitsSettingsMediums": "Muodot",
|
||||
"IndexerHDBitsSettingsMediumsHelpText": "Jos ei määritetty, käytetään kaikkia vaihtoehtoja.",
|
||||
"IndexerHDBitsSettingsOriginsHelpText": "Jos ei määritetty, käytetään kaikkia vaihtoehtoja.",
|
||||
"IndexerSettingsAdditionalParameters": "Muut parametrit",
|
||||
"IndexerSettingsApiPath": "API:n polku",
|
||||
"IndexerSettingsApiPathHelpText": "Polku API:in (yleensä {url}).",
|
||||
"IndexerSettingsApiPath": "Rajapinnan sijainti",
|
||||
"IndexerSettingsApiPathHelpText": "Rajapinnan sijainti, yleensä \"{url}\".",
|
||||
"IndexerSettingsCookie": "Eväste",
|
||||
"IndexerSettingsPackSeedTime": "Koosteen jakoaika",
|
||||
"IndexerSettingsPackSeedTime": "Paketin jakoaika",
|
||||
"IndexerSettingsPackSeedTimeIndexerHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.",
|
||||
"IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.",
|
||||
"IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa hakupalvelun sääntöjä.",
|
||||
"SecretToken": "Salainen tunniste",
|
||||
"TorrentBlackholeSaveMagnetFiles": "Tallenna magnet-tiedostot",
|
||||
"UseSsl": "Käytä SSL-salausta",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein etsittäessä joiltakin tietolähteiltä RSS-syötteen tai haun välityksellä. Tämä mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, mutta ennen välitystä lataustyökalulle.",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein joidenkin hakupalveluiden RSS-syötteestä tai hausta. Tämän käyttöönotto mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, kuitenkin ennen kuin niitä välitetään latauspalvelulle.",
|
||||
"BlackholeFolderHelpText": "Kansio, jonne {appName} tallentaa {extension}-tiedoston.",
|
||||
"DownloadClientDelugeSettingsUrlBaseHelpText": "Lisää etuliitteen Delugen JSON-URL-osoitteeseen (ks. {url}).",
|
||||
"DownloadClientDelugeSettingsUrlBaseHelpText": "Lisää Delugen JSON-URL-osoitteeseen etuliitteen, ks. \"{url})\".",
|
||||
"DownloadClientFloodSettingsAdditionalTags": "Lisätunnisteet",
|
||||
"DownloadClientPneumaticSettingsStrmFolderHelpText": "Tämän kansion .strm-tiedostot tuodaan droonilla.",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Lataa tiedostot järjestyksessä (qBittorrent 4.1.0+).",
|
||||
"UsenetBlackholeNzbFolder": "NZB-kansio",
|
||||
"XmlRpcPath": "XML RPC -sijainti",
|
||||
"DownloadClientSettingsUrlBaseHelpText": "Lisää etuliite lataustuökalun {clientName} URL-osoitteeseen, kuten {url}.",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "Lisää etuliitteen Flood-rajapintaan (esim. {url}).",
|
||||
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Valinnainen jaettu kansio latauksille. Download Stationin oletussijaintia jättämällä tyhjäksi.",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Määritä Freebox-rajapinnan perus-URL rajapinnan versiolla. Esimerkiksi \"{url}\". Oletus on \"{defaultApiUrl}\".",
|
||||
"DownloadClientSettingsUrlBaseHelpText": "Lisää lataustuökalun {clientName} URL-osoitteeseen etuliitteen, esim. \"{url}\".",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "Lisää Flood-rajapintaan etuliitteen, esim. \"{url}\".",
|
||||
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Vaihtoehtoinen jaettu kansio latauksille. Käytä Download Stationin oletussijaintia jättämällä tyhjäksi.",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Määritä Freebox-rajapinnan perus-URL rajapinnan versiolla, esim. \"{url}\". Oletus on \"{defaultApiUrl}\".",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Ensimmäinen ja viimeinen ensin",
|
||||
"DownloadClientFreeboxSettingsAppId": "Sovellustunniste",
|
||||
"DownloadClientFreeboxSettingsPortHelpText": "Freebox-liittymän portti. Oletus on \"{port}\".",
|
||||
"DownloadClientFreeboxSettingsAppId": "Sovelluksen ID",
|
||||
"DownloadClientFreeboxSettingsPortHelpText": "Freebox-liittymän portti. Oletus on {port}.",
|
||||
"DownloadClientPneumaticSettingsNzbFolder": "NZB-kansio",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrder": "Peräkkäinen järjestys",
|
||||
"CustomFilter": "Oma suodatin",
|
||||
"DownloadClientFreeboxSettingsAppIdHelpText": "Freebox-rajapinnan käyttöoikeutta määritettäessä käytettävä App ID -sovellustunniste.",
|
||||
"DownloadClientFreeboxSettingsAppToken": "Sovellustietue",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "Tämä vaatii vähintään NzbGet-version 16.0.",
|
||||
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Tämän kansion on oltava tavoitettavissa XBMC:stä.",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Aloita lataamalla ensimmäinen ja viimeinen osa (qBittorrent 4.1.0+).",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "Tämä vaatii vähintään NzbGetin version 16.0.",
|
||||
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Tämän kansion on oltava Kodin tavoitettavissa.",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Lataa ensimmäinen ja viimeinen osa ensin (qBittorrent 4.1.0+).",
|
||||
"DownloadClientQbittorrentSettingsUseSslHelpText": "Käytä suojattua yhteyttä. Katso qBittorentin asetusten \"Selainkäyttö\"-osion \"Käytä HTTPS:ää HTTP:n sijaan\" -asetus.",
|
||||
"DownloadClientRTorrentSettingsAddStopped": "Lisää pysäytettynä",
|
||||
"DownloadClientRTorrentSettingsUrlPath": "URL-sijainti",
|
||||
"TorrentBlackholeSaveMagnetFilesHelpText": "Tallenna magnet-linkki, jos .torrent-tiedostoa ei ole käytettävissä (hyödyllinen vain lataustyökalun tukiessa tiedostoon tallennettuja magnet-linkkejä).",
|
||||
"TorrentBlackholeSaveMagnetFilesHelpText": "Tallenna magnet-linkki, jos .torrent-tiedostoa ei ole käytettävissä (hyödyllinen vain latauspalvelun tukiessa tiedostoon tallennettuja magnet-linkkejä).",
|
||||
"TorrentBlackholeTorrentFolder": "Torrent-kansio",
|
||||
"TorrentBlackholeSaveMagnetFilesExtension": "Tallennettujen magnet-tiedostojen pääte",
|
||||
"TorrentBlackholeSaveMagnetFilesExtension": "Tallenna magnet-tiedostojen pääte",
|
||||
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Magnet-linkeille käytettävä tiedostopääte. Oletus on \".magnet\".",
|
||||
"LabelIsRequired": "Nimi on pakollinen",
|
||||
"Default": "Oletus",
|
||||
"GrabRelease": "Kaappaa julkaisu",
|
||||
"OverrideGrabModalTitle": "Ohita ja sieppaa - {title}",
|
||||
"OverrideGrabModalTitle": "Ohitetaan ja kaapataan – {title}",
|
||||
"PrioritySettings": "Painotus: {priority}",
|
||||
"SelectDownloadClientModalTitle": "{modalTitle} - Valitse lataustyökalu",
|
||||
"SelectDownloadClientModalTitle": "{modalTitle} – Valitse latauspalvelu",
|
||||
"ProxyValidationBadRequest": "Välityspalvelintesti epäonnistui. Tilakoodi: {statusCode}.",
|
||||
"ProxyValidationUnableToConnect": "Tietolähdettä ei tavoiteta: {exceptionMessage}. Etsi tietoja tämän virheen lähellä olevista lokimerkinnöistä.",
|
||||
"ManualGrab": "Manuaalinen kaappaus",
|
||||
"OverrideAndAddToDownloadClient": "Ohita ja lisää latausjonoon",
|
||||
"ProxyValidationUnableToConnect": "Välityspalvelinta ei tavoiteta: {exceptionMessage}. Saat lisätietoja virheen lähellä olevista lokimerkinnöistä.",
|
||||
"ManualGrab": "Manuaalikaappaus",
|
||||
"OverrideAndAddToDownloadClient": "Ohita ja lisää etälatauspalveluun",
|
||||
"BuiltIn": "Sisäänrakennettu",
|
||||
"Any": "Mikä vain",
|
||||
"Script": "Skripti",
|
||||
"Any": "Mikä tahansa",
|
||||
"Script": "Komentosarja",
|
||||
"InfoUrl": "Tietojen URL",
|
||||
"PublishedDate": "Julkaisupäivä",
|
||||
"Redirected": "Uudelleenohjaus",
|
||||
"Redirected": "Uudelleenohjattu",
|
||||
"AllSearchResultsHiddenByFilter": "Aktiivinen suodatin piilottaa kaikki tulokset.",
|
||||
"HealthMessagesInfoBox": "Saat lisätietoja näiden vakausviestien syistä painamalla rivin lopussa olevaa wikilinkkiä (kirjakuvake) tai tarkastelemalla [lokitietoja]({link}). Mikäli kohtaat ongelmia näiden viestien tulkinnassa, tavoitat tukemme alla olevilla linkkeillä.",
|
||||
"HealthMessagesInfoBox": "Saat lisätietoja näiden vakausviestien syistä painamalla rivin lopussa olevaa wikilinkkiä (kirjakuvake) tai tarkastelemalla [lokitietoja]({link}). Mikäli et osaa tulkita näitä viestejä, tavoitat tukemme alla olevilla linkeillä.",
|
||||
"PackageVersionInfo": "{packageVersion} julkaisijalta {packageAuthor}",
|
||||
"ErrorRestoringBackup": "Virhe palautettaessa varmuuskopiota",
|
||||
"ExternalUpdater": "{appName} on määritetty käyttämään ulkoista päivitysratkaisua.",
|
||||
@@ -714,5 +714,97 @@
|
||||
"UpdateAppDirectlyLoadError": "{appName}ia ei voida päivittää suoraan,",
|
||||
"UpdaterLogFiles": "Päivittäjän lokitiedostot",
|
||||
"WouldYouLikeToRestoreBackup": "Haluatko palauttaa varmuuskopion \"{name}\"?",
|
||||
"InstallLatest": "Asenna uusin"
|
||||
"InstallLatest": "Asenna uusin",
|
||||
"CurrentlyInstalled": "Nyt asennettu",
|
||||
"PreviouslyInstalled": "Aiemmin asennettu",
|
||||
"Mixed": "Sekoitettu",
|
||||
"IndexerSettingsAppsMinimumSeeders": "Jakajien vähimmäismäärä",
|
||||
"FailedToFetchSettings": "Asetusten nouto epäonnistui",
|
||||
"IndexerAlphaRatioSettingsExcludeSceneHelpText": "Älä huomioi tulosten SCENE-julkaisuja.",
|
||||
"DownloadClientRTorrentSettingsUrlPathHelpText": "Polku XMLRPC-päätteeseen, ks. \"{url}\". Käytettäessä ruTorrentia tämä on yleensä RPC2 tai [ruTorrentin sijainti]{url2}.",
|
||||
"InstallMajorVersionUpdateMessageLink": "Saat lisätietoja osoitteesta [{domain}]({url}).",
|
||||
"Install": "Asenna",
|
||||
"NotificationsTelegramSettingsIncludeAppName": "Sisällytä {appName} otsikkoon",
|
||||
"InstallMajorVersionUpdate": "Asenna päivitys",
|
||||
"InstallMajorVersionUpdateMessage": "Tämä päivitys asentaa uuden pääversion, joka ei välttämättä ole yhteensopiva laitteistosi kanssa. Haluatko varmasti asentaa päivityksen?",
|
||||
"NotificationsTelegramSettingsIncludeAppNameHelpText": "Ilmoitukset voidaan tarvittaessa erottaa muista sovelluksista lisäämällä niiden eteen \"{appName}\".",
|
||||
"DownloadClientRTorrentSettingsAddStoppedHelpText": "Tämä lisää torrentit ja magnet-linkit rTorentiin pysäytetyssä tilassa. Tämä saattaa rikkoa margnet-tiedostot.",
|
||||
"DownloadClientSettingsPriorityItemHelpText": "Kaapatuille kohteille käytettävä painotus.",
|
||||
"LogSizeLimit": "Lokin kokorajoitus",
|
||||
"LogSizeLimitHelpText": "Lokitiedoston enimmäiskoko ennen pakkausta. Oletusarvo on 1 Mt.",
|
||||
"IndexerAlphaRatioSettingsExcludeScene": "Ohita SCENE-julkaisut",
|
||||
"AverageGrabs": "Kaappausten keskiarvo",
|
||||
"AverageQueries": "Kyselyiden keskiarvo",
|
||||
"IndexerNewznabSettingsAdditionalParametersHelpText": "Muut Newznab-parametrit",
|
||||
"IndexerNewznabSettingsVipExpirationHelpText": "Syötä VIP-tilan päättymispäivä (yyyy-mm-dd) tai jätä tyhjäksi. {appName} ilmoittaa viikko ennen VIP-tilan päättymistä.",
|
||||
"IndexerSettingsQueryLimitHelpText": "Kyselyiden enimmäismäärä, jonka {appName} sallii hakupalvelulle.",
|
||||
"IndexerHDBitsSettingsPasskeyHelpText": "Pääsyavain käyttäjätiedoista",
|
||||
"DefaultCategory": "Oletuskategoria",
|
||||
"ClickToChangeQueryOptions": "Muuta kyselyasetuksia painamalla tästä.",
|
||||
"IndexerSettingsQueryLimit": "Kyselyrajoitus",
|
||||
"IndexerAvistazSettingsPidHelpText": "PID \"My Account\" tai \"My Profile\" -sivulta.",
|
||||
"IndexerAvistazSettingsUsernameHelpTextWarning": "Vain vähintään jäsen-tasoinen käyttäjä voi käyttää tämän hakupalvelun rajapintaa.",
|
||||
"IndexerBeyondHDSettingsLimitedOnly": "Vain rajoitetut",
|
||||
"IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Etsi vain Freeleech-julkaisuja.",
|
||||
"IndexerFileListSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Avaimella on oltava \"User\" ja \"Torrents\" oikeudet.",
|
||||
"IndexerHDBitsSettingsUseFilenames": "Käytä tiedostonimiä",
|
||||
"IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.",
|
||||
"IndexerIPTorrentsSettingsCookieUserAgent": "Evästeen käyttäjäagentti",
|
||||
"IndexerIPTorrentsSettingsCookieUserAgentHelpText": "Evästeeseen liitetty selaimen käyttäjäagentti.",
|
||||
"IndexerPassThePopcornSettingsApiKeyHelpText": "Sivuston rajapinnan avain",
|
||||
"IndexerOrpheusSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"Settings\" > \"Access Settings\".",
|
||||
"Open": "Avaa",
|
||||
"PreferMagnetUrl": "Suosi magnet-URL:eja",
|
||||
"ProwlarrDownloadClientsAlert": "Latauspalvelut on määritettävä tässä vain, jos hakuja aiotaan tehdä suoraan {appName}ista. Sovelluksien hauille käytetään niiden omien asetusten latauspalvelumäärityksiä.",
|
||||
"IndexerSettingsLimitsUnitHelpText": "Hakupalveluiden aikarajoituksiin käytettävä yksikkö.",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNames": "Etsi ryhmien nimillä",
|
||||
"DownloadClientSettingsDefaultCategoryHelpText": "Oletusarvoinen varakategoria julkaisuille, joilla ei ole kategoriaa. {appName}-kategorian lisääminen välttää ristiriidat ei-{appName} latausten kanssa. Kategoria on valinnainen, mutta erittäin suositeltava.",
|
||||
"IndexerAvistazSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.",
|
||||
"PreferMagnetUrlHelpText": "Hakupalvelu käyttää kaappaukseen ensisijaisesti magnet-linkkejä ja varmistuksena torrent-linkkejä.",
|
||||
"ProwlarrDownloadClientsInAppOnlyAlert": "Latauspalvelut ovat vain {appName}in sisäisiä hakuja varten, eikä niitä synkronoida muihin sovelluksiin (ominaisuutta ole myöskään suunnitteilla).",
|
||||
"DownloadClientSettingsDefaultCategorySubFolderHelpText": "Oletusarvoinen varakategoria julkaisuille, joilla ei ole kategoriaa. {appName}-kategorian lisääminen välttää ristiriidat ei-{appName} latausten kanssa. Kategoria on valinnainen, mutta erittäin suositeltava. Luo kohdekansioon [kategoria]-alikansion.",
|
||||
"IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.",
|
||||
"IndexerAvistazSettingsUsernameHelpText": "Sivuston käyttäjätunnus",
|
||||
"IndexerBeyondHDSettingsRefundOnly": "Vain \"Refund\"",
|
||||
"IndexerBeyondHDSettingsRefundOnlyHelpText": "Etsi vain Refund-julkaisuja.",
|
||||
"IndexerBeyondHDSettingsRewindOnly": "Vain \"Rewind\"",
|
||||
"IndexerBeyondHDSettingsRewindOnlyHelpText": "Etsi vain Rewind-julkaisuja.",
|
||||
"IndexerBeyondHDSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"My Security\" > \"API Key\".",
|
||||
"IndexerBeyondHDSettingsSearchTypesHelpText": "Valitse halutut julkaisutyypit. Jos mitään ei ole valittu käytetään kaikkia.",
|
||||
"IndexerFileListSettingsPasskeyHelpText": "Sivuston pääsyavain. Tämä on latauspalvelussasi näkyvä trakkerin URL-osoitteen aakkosnumeerinen osa.",
|
||||
"IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"Settings\" > \"Access Settings\".",
|
||||
"IndexerFileListSettingsUsernameHelpText": "Sivuston käyttäjätunnus",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Etsi julkaisuja ryhmien nimillä.",
|
||||
"IndexerHDBitsSettingsFreeleechOnlyHelpText": "Näytä vain Freeleech-julkaisut.",
|
||||
"IndexerNzbIndexSettingsApiKeyHelpText": "Sivuston rajapinnan avain",
|
||||
"IndexerHDBitsSettingsOrigins": "Alkuperä",
|
||||
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.",
|
||||
"IndexerHDBitsSettingsUseFilenamesHelpText": "Käsittele torrentien tiedostonimiä julkaisujen nimikkeinä.",
|
||||
"IndexerHDBitsSettingsUsernameHelpText": "Sivuston käyttäjätunnus",
|
||||
"IndexerSettingsGrabLimitHelpText": "Kaappausten enimmäismäärä, jonka {appName} sallii hakupalvelulle.",
|
||||
"IndexerRedactedSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"Settings\" > \"Access Settings\".",
|
||||
"IndexerSettingsApiUser": "Rajapinnan käyttäjä",
|
||||
"IndexerSettingsBaseUrl": "Perus-URL",
|
||||
"IndexerSettingsBaseUrlHelpText": "Määritä verkkotunnus, jota {appName} käyttää sivustolle lähetettäville pyynnöille.",
|
||||
"IndexerPassThePopcornSettingsApiUserHelpText": "Nämä löytyvät PassThePopcorn-tilin asetuksista, kohdasta \"Edit Profile\" > \"Security\".",
|
||||
"IndexerSettingsPasskey": "Pääsyavain",
|
||||
"IndexerBeyondHDSettingsLimitedOnlyHelpText": "Etsi vain Freeleech-julkaisuja (rajoitettu UL).",
|
||||
"IndexerBeyondHDSettingsRssKeyHelpText": "Sivuston RSS-avain. Löytyy kohdasta \"My Security\" > \"RSS-avain\".",
|
||||
"IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.",
|
||||
"IndexerNewznabSettingsApiKeyHelpText": "Sivuston rajapinnan avain",
|
||||
"IndexerNebulanceSettingsApiKeyHelpText": "Rajapinnan avain kohdasta \"Settings\" > \"Api Keys\".\nAvaimella on oltava \"List\" ja \"Download\" oikeudet.",
|
||||
"IndexerSettingsGrabLimit": "Kaappausrajoitus",
|
||||
"IndexerSettingsLimitsUnit": "Rajoitusten yksikkö",
|
||||
"IndexerSettingsRssKey": "RSS-avain",
|
||||
"IndexerMTeamTpSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"Control Panel\" > \"Security\" > \"Laboratory\".",
|
||||
"IndexerSettingsPreferMagnetUrlHelpText": "Hakupalvelu käyttää kaappaukseen ensisijaisesti magnet-linkkejä ja varmistuksena torrent-linkkejä.",
|
||||
"IndexerTorrentSyndikatSettingsApiKeyHelpText": "Sivuston rajapinnan avain",
|
||||
"IndexerSettingsPreferMagnetUrl": "Suosi magnet-URL:eja",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnly": "Vain \"Golden Popcorn\"",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Etsi vain ns. kultaisella pocornilla merkittyjä julkaisuja.",
|
||||
"IndexerSettingsFreeleechOnly": "Vain \"Freeleech\"",
|
||||
"IndexerSettingsCookieHelpText": "Jos sivusto vaatii kirjautumisevästeen, se on noudettava selaimen kautta.",
|
||||
"IndexerAvistazSettingsPasswordHelpText": "Sivuston salasana"
|
||||
}
|
||||
|
||||
@@ -114,10 +114,10 @@
|
||||
"Level": "Niveau",
|
||||
"KeyboardShortcuts": "Raccourcis clavier",
|
||||
"NoIssuesWithYourConfiguration": "Aucun problème avec votre configuration",
|
||||
"SystemTimeCheckMessage": "L'heure du système est décalée de plus d'un jour. Les tâches planifiées peuvent ne pas s'exécuter correctement tant que l'heure ne sera pas corrigée",
|
||||
"SystemTimeHealthCheckMessage": "L'heure du système est décalée de plus d'un jour. Les tâches planifiées peuvent ne pas s'exécuter correctement tant que l'heure ne sera pas corrigée",
|
||||
"SettingsShowRelativeDates": "Afficher les dates relatives",
|
||||
"UnsavedChanges": "Modifications non enregistrées",
|
||||
"ShowSearchHelpText": "Afficher le bouton de recherche au survol",
|
||||
"ShowSearchHelpText": "Affiche le bouton de recherche au survol",
|
||||
"ShowSearch": "Afficher la recherche",
|
||||
"SettingsTimeFormat": "Format de l'heure",
|
||||
"SettingsShowRelativeDatesHelpText": "Afficher les dates relatives (aujourd'hui, hier, etc.) ou absolues",
|
||||
@@ -384,7 +384,7 @@
|
||||
"HistoryCleanupDaysHelpTextWarning": "Les fichiers dans la corbeille plus anciens que le nombre de jours sélectionné seront nettoyés automatiquement",
|
||||
"OnGrab": "Récupéré à la sortie",
|
||||
"OnHealthIssue": "Lors de problème de santé",
|
||||
"TestAllIndexers": "Testez tous les indexeurs",
|
||||
"TestAllIndexers": "Tester tous les indexeurs",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent fourni par l'application qui a appelé l'API",
|
||||
"Database": "Base de données",
|
||||
"HistoryCleanup": "Nettoyage de l'historique",
|
||||
@@ -799,5 +799,12 @@
|
||||
"IndexerSettingsPreferMagnetUrlHelpText": "Si activé, cet indexeur privilégiera si possible l'usage de liens de type magnet aux liens torrent",
|
||||
"PreferMagnetUrl": "Privilégier les liens de type magnet",
|
||||
"IndexerAvistazSettingsPidHelpText": "PID de la page Mon compte ou Mon profil",
|
||||
"IndexerAvistazSettingsPasswordHelpText": "Mot de passe du site"
|
||||
"IndexerAvistazSettingsPasswordHelpText": "Mot de passe du site",
|
||||
"PreferMagnetUrlHelpText": "Si activé, cet indexeur privilégiera si possible l'usage de liens de type magnet aux liens torrent",
|
||||
"PreviouslyInstalled": "Installé précédemment",
|
||||
"CurrentlyInstalled": "Actuellement installé",
|
||||
"IndexerSettingsPreferMagnetUrl": "URL de préférence Magnet",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnly": "Popcorn doré uniquement",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Rechercher uniquement les versions Golden Popcorn",
|
||||
"IndexerAvistazSettingsUsernameHelpTextWarning": "Seuls les membres de rang et supérieur peuvent utiliser l'API sur cet indexeur."
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
"SettingsShowRelativeDates": "הצג תאריכים יחסית",
|
||||
"SuggestTranslationChange": "הצע שינוי בתרגום",
|
||||
"System": "מערכת",
|
||||
"SystemTimeCheckMessage": "זמן המערכת אינו פעיל יותר מיום אחד. משימות מתוזמנות עשויות שלא לפעול כראוי עד לתיקון הזמן",
|
||||
"SystemTimeHealthCheckMessage": "זמן המערכת אינו פעיל יותר מיום אחד. משימות מתוזמנות עשויות שלא לפעול כראוי עד לתיקון הזמן",
|
||||
"TableOptionsColumnsMessage": "בחר אילו עמודות גלויות ובאיזה סדר הן יופיעו",
|
||||
"TagCannotBeDeletedWhileInUse": "לא ניתן למחוק בזמן השימוש",
|
||||
"TagIsNotUsedAndCanBeDeleted": "לא משתמשים בתג וניתן למחוק אותו",
|
||||
@@ -427,5 +427,10 @@
|
||||
"ExternalUpdater": "{appName} מוגדר להשתמש במנגנון עדכון חיצוני",
|
||||
"RestartReloadNote": "הערה: {appName} יופעל מחדש אוטומטית וטען מחדש את ממשק המשתמש במהלך תהליך השחזור.",
|
||||
"UpdateAppDirectlyLoadError": "לא ניתן לעדכן את {appName} ישירות,",
|
||||
"AptUpdater": "השתמש ב- apt כדי להתקין את העדכון"
|
||||
"AptUpdater": "השתמש ב- apt כדי להתקין את העדכון",
|
||||
"Clone": "סגור",
|
||||
"CurrentlyInstalled": "מותקן כעת",
|
||||
"Stats": "סטָטוּס",
|
||||
"Season": "סיבה",
|
||||
"Mixed": "תוקן"
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
"Source": "स्रोत",
|
||||
"StartupDirectory": "स्टार्टअप निर्देशिका",
|
||||
"SuggestTranslationChange": "अनुवाद परिवर्तन का सुझाव दें",
|
||||
"SystemTimeCheckMessage": "सिस्टम का समय 1 दिन से अधिक बंद है। जब तक समय सही नहीं होगा तब तक शेड्यूल किए गए कार्य सही तरीके से नहीं चल सकते हैं",
|
||||
"SystemTimeHealthCheckMessage": "सिस्टम का समय 1 दिन से अधिक बंद है। जब तक समय सही नहीं होगा तब तक शेड्यूल किए गए कार्य सही तरीके से नहीं चल सकते हैं",
|
||||
"TableOptionsColumnsMessage": "चुनें कि कौन से कॉलम दिखाई दे रहे हैं और वे किस क्रम में दिखाई देते हैं",
|
||||
"TagsSettingsSummary": "सभी टैग देखें और उनका उपयोग कैसे किया जाता है। अप्रयुक्त टैग को हटाया जा सकता है",
|
||||
"TestAll": "सभी का परीक्षण करें",
|
||||
@@ -368,5 +368,10 @@
|
||||
"NoEventsFound": "कोई घटना नहीं मिली",
|
||||
"RestartReloadNote": "नोट: रैडियर स्वचालित रूप से पुनः आरंभ करेगा और पुनर्स्थापना प्रक्रिया के दौरान UI को फिर से लोड करेगा।",
|
||||
"UpdateAppDirectlyLoadError": "सीधे {appName} अद्यतन करने में असमर्थ,",
|
||||
"InstallLatest": "नवीनतम स्थापित करें"
|
||||
"InstallLatest": "नवीनतम स्थापित करें",
|
||||
"Clone": "बंद करे",
|
||||
"CurrentlyInstalled": "वर्तमान में स्थापित है",
|
||||
"Mixed": "फिक्स्ड",
|
||||
"Season": "कारण",
|
||||
"Stats": "स्थिति"
|
||||
}
|
||||
|
||||
@@ -211,5 +211,6 @@
|
||||
"UnableToAddANewApplicationPleaseTryAgain": "Neuspješno dodavanje nove obavijesti, molimo pokušaj ponovno.",
|
||||
"EditApplicationImplementation": "Dodaj Vezu - {implementationName}",
|
||||
"AptUpdater": "Koristi apt kako bi instalirao ažuriranje",
|
||||
"EditIndexerProxyImplementation": "Dodaj Indexer - {implementationName}"
|
||||
"EditIndexerProxyImplementation": "Dodaj Indexer - {implementationName}",
|
||||
"Clone": "Zatvori"
|
||||
}
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
"TagIsNotUsedAndCanBeDeleted": "A címke nincs használatban, törölhető",
|
||||
"TagCannotBeDeletedWhileInUse": "Használat közben nem törölhető",
|
||||
"TableOptionsColumnsMessage": "Válasszd ki, mely oszlopok legyenek láthatóak, és milyen sorrendben jelenjenek meg",
|
||||
"SystemTimeCheckMessage": "A rendszeridő több mint 1 napja nem frissült. Előfordulhat, hogy az ütemezett feladatok az idő kijavításáig nem futnak megfelelően",
|
||||
"SystemTimeHealthCheckMessage": "A rendszeridő több mint 1 napja nem frissült. Előfordulhat, hogy az ütemezett feladatok az idő kijavításáig nem futnak megfelelően",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Az összes indexer elérhetetlen hiba miatt",
|
||||
"Indexers": "Indexerek",
|
||||
"IndexerPriorityHelpText": "Indexelő prioritás 1-től (legmagasabb) 50-ig (legalacsonyabb). Alapértelmezés: 25.",
|
||||
@@ -595,5 +595,7 @@
|
||||
"RestartReloadNote": "Megjegyzés: A {appName} automatikusan újraindítja és újratölti a felületet a visszaállítási folyamatban.",
|
||||
"UpdateAppDirectlyLoadError": "Nem lehetséges közvetlenül frissíteni a {appName}-t",
|
||||
"WouldYouLikeToRestoreBackup": "Szeretné visszaállítani a(z) „{name}” biztonsági másolatot?",
|
||||
"InstallLatest": "Legfrissebb telepítése"
|
||||
"InstallLatest": "Legfrissebb telepítése",
|
||||
"CurrentlyInstalled": "Jelenleg telepítve",
|
||||
"PreviouslyInstalled": "Korábban telepítve"
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ApplicationURL": "URL Aplikasi",
|
||||
"ApplicationUrlHelpText": "URL eksternal aplikasi termasuk http(s)://, port, dan dasar URL",
|
||||
"AddDownloadClient": "Tambahkan Klien Pengunduhan",
|
||||
"AddDownloadClient": "Tambahkan Download Client",
|
||||
"Added": "Ditambahkan",
|
||||
"AddIndexer": "Tambahkan Pengindeks",
|
||||
"Age": "Usia",
|
||||
@@ -86,5 +86,8 @@
|
||||
"IndexerHDBitsSettingsCodecs": "Codec",
|
||||
"ProxyValidationBadRequest": "Gagal menguji proxy. Kode Status: {statusCode}",
|
||||
"AllSearchResultsHiddenByFilter": "Seluruh hasil disembunyikan karena penyaringan yang diterapkan",
|
||||
"AptUpdater": "Gunakan apt untuk memasang pembaruan"
|
||||
"AptUpdater": "Gunakan apt untuk memasang pembaruan",
|
||||
"Clone": "Tutup",
|
||||
"EnableSSL": "Aktifkan RSS",
|
||||
"CurrentlyInstalled": "Saat Ini Terpasang"
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user