Compare commits

..

59 Commits

Author SHA1 Message Date
abcasada
f7bf21df68 Update help text for Tags usage in Applications 2024-01-26 19:13:12 +02:00
Bogdan
d764e3405d New: (Torznab) Internal and Scene tags 2024-01-26 09:58:22 +02:00
Bogdan
16baceb784 New: Option to disable Email encryption
* New: Option to disable Email encryption

(cherry picked from commit 7be5732a3a6679120b0f01bd1eb1207194f57f5e)

* Fix possible NullRef in Email Encryption migration

(cherry picked from commit 271266b10ac51ee6dd7a7024d346b631bd5397c2)
2024-01-24 11:37:01 +02:00
Bogdan
5d2b80d15a Fixed: (SubsPlease) Parse release size from magnet links 2024-01-23 10:59:59 +02:00
Bogdan
a20a81f424 New: Category filter for Indexers 2024-01-23 09:00:49 +02:00
Bogdan
ebb66e9086 Update database migration version translation token 2024-01-23 08:50:05 +02:00
Bogdan
cb8797693e Fixed: Sorting by name in Manage Applications and Download Client modals 2024-01-23 08:40:32 +02:00
Stevie Robinson
255c6335ae New: Add sorting to Manage Applications and Download Client modals
(cherry picked from commit 91053ca51ded804739f94ee936c1376a755dbe11)
2024-01-23 08:38:47 +02:00
Bogdan
155cd53dcd Fix translations for manage applications and download clients 2024-01-23 08:29:59 +02:00
Weblate
ae70a96c10 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Dani Talens <databio@gmail.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Julian Baquero <julian-baquero@upc.edu.co>
Co-authored-by: MaddionMax <kovacs.tamas@ius.hu>
Co-authored-by: Magyar <kochnorbert@icloud.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: blabla <romcrack56@gmail.com>
Co-authored-by: brn <barantsenkul@gmail.com>
Co-authored-by: fordas <fordas15@gmail.com>
Co-authored-by: horvi28 <horvi28@gmail.com>
Co-authored-by: wilfriedarma <wilfriedarma.collet@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/tr/
Translation: Servarr/Prowlarr
2024-01-23 08:15:51 +02:00
Bogdan
16c0daf090 Fix value types for EnhancedSelectInputConnector 2024-01-22 13:24:00 +02:00
Bogdan
34c78c5a9d Fixed: (BTN) Disable ID-based searches for episodes with absolute episode number
Release name searches are not supported, so it's better to prevent an useless request.
2024-01-22 11:48:32 +02:00
Bogdan
dd5b108ffd Fixed: (BTN) Allow ID-based with text search query 2024-01-21 17:13:12 +02:00
Servarr
0b83986255 Automated API Docs update 2024-01-21 07:54:16 +02:00
Bogdan
2bd25fb6f3 Reorder sync fields for App Profiles 2024-01-21 07:47:48 +02:00
Bogdan
0f5eb5d3a3 Bump version to 1.13.1 2024-01-21 07:47:48 +02:00
Bogdan
c9434c61e3 Transpile logical assignment operators with babel 2024-01-21 03:58:55 +02:00
Mark McDowall
ee969b7a06 New: Log warning if less than 1 GB free space during update
(cherry picked from commit e66ba84fc0b5b120dd4e87f6b8ae1b3c038ee72b)
2024-01-21 03:58:28 +02:00
Bogdan
cfdf88a1e2 Add exceptions to logs for indexers and apps 2024-01-20 04:49:16 +02:00
bakerboy448
70a5dae293 Fixed: Don't lowercase UrlBase in ConfigFileProvider
UrlBase should honour the case it is given.

(cherry picked from commit e1de523c89f7649e64f520b090bbdb2f56cc4b85)
(cherry picked from commit 9ccefe00951d2959ef79bdaa5731d95f97162d46)

Co-authored-by: Marty Zalega <marty@zalega.me>
2024-01-20 01:34:20 +02:00
Bogdan
b53f8d4552 Bump version to 1.13.0 2024-01-18 05:23:29 +02:00
Weblate
9668e91b21 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Dani Talens <databio@gmail.com>
Co-authored-by: Deleted User <noreply+2593@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pl/
Translation: Servarr/Prowlarr
2024-01-17 23:01:59 +02:00
Bogdan
49857693c0 Fix count in GGn fixture after allowing only torrents 2024-01-17 11:14:00 +02:00
Bogdan
850315ad1c Fixed: (GGn) Improve titles and allow only torrents 2024-01-17 10:45:02 +02:00
Mark McDowall
86124d4319 New: Optional directory setting for Aria2
(cherry picked from commit fd17df0dd03a5feb088c3241a247eac20f0e8c6c)
2024-01-17 07:49:51 +02:00
Bogdan
4f28d583d7 Throw download as failed for invalid magnet links 2024-01-17 07:40:17 +02:00
Stevie Robinson
01f3930211 Sort Custom Filters
(cherry picked from commit e4b5d559df2d5f3d55e16aae5922509e84f31e64)
2024-01-17 07:38:23 +02:00
Weblate
7c7114c87a Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Dani Talens <databio@gmail.com>
Co-authored-by: Daniele Prevedello <dprevedello86@gmail.com>
Co-authored-by: DimitriDR <dimitridroeck@gmail.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: Trooper57 <igorkcs@gmail.com>
Co-authored-by: Watashi <drazy24@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: crayon3shawn <crayon3shawn@gmail.com>
Co-authored-by: hansaudun <hans@n5.no>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/nb_NO/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_TW/
Translation: Servarr/Prowlarr
2024-01-16 05:11:12 +02:00
Bogdan
ef8e6d774b Fix typo 2024-01-16 05:10:20 +02:00
Bogdan
2960fc37d9 Fixed: (FL) Improve error message for service unavailable 2024-01-16 04:58:17 +02:00
Qstick
8bddf753bb Bump Inno version to 6.2.2
(cherry picked from commit c5992ed944b2d4f2f41a08ac407c0f013da61ea6)

Build report can get sent before installer finished

(cherry picked from commit 60d9aacac64b39fd22d43e8b1ca4641bd60a9b48)
2024-01-14 21:44:58 +02:00
Bogdan
cff24b3fd4 Bump version to 1.12.2 2024-01-14 07:13:34 +02:00
Bogdan
031d81330d Fixed: Filter history by multiple event types in PG 2024-01-12 22:11:45 +02:00
Bogdan
6201b42fbd New: Refresh button for indexer stats 2024-01-12 15:26:32 +02:00
Bogdan
7022054dd7 New: Indexer ID as column
Fixes #1948
2024-01-12 14:58:27 +02:00
ilike2burnthing
c9b663247c Empty Torznab ApiKeyWhiteList 2024-01-12 05:55:09 +02:00
Bogdan
0b0a0cfa5b New: (HDBits) Filter by origins 2024-01-10 22:39:43 +02:00
Weblate
3c0fea8b7c Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Aitzol Garmendia <aitzolgarmendia@gmail.com>
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Bradley BARBIER <bradley.barbier@outlook.fr>
Co-authored-by: Dani Talens <databio@gmail.com>
Co-authored-by: DimitriDR <dimitridroeck@gmail.com>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: RicardoVelaC <ricardovelac@gmail.com>
Co-authored-by: reloxx <reloxx@interia.pl>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/cs/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/id/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ja/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ko/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/lv/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ru/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/tr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/uk/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_TW/
Translation: Servarr/Prowlarr
2024-01-09 20:59:04 +02:00
Bogdan
ac97952fd7 Fixed: (HDBits) Strip non-word chars from search query
Co-authored-by: Kyle Sanderson <kyle.leet@gmail.com>
2024-01-08 22:24:35 +02:00
Bogdan
c3e40c0564 Log web exceptions in test connection 2024-01-08 21:31:08 +02:00
Servarr
ce615a77c2 Automated API Docs update 2024-01-08 01:29:38 +02:00
Bogdan
0f6dfe389c Fix CS in History 2024-01-08 01:21:44 +02:00
Bogdan
25d94a9286 New: History custom filters
Co-authored-by: Mark McDowall <mark@mcdowall.ca>
2024-01-08 00:53:40 +02:00
Bogdan
52a690b41a Fixed: Filter history by multiple event types 2024-01-07 19:04:22 +02:00
Bogdan
56c8c3d6c6 Bump version to 1.12.1 2024-01-07 11:10:04 +02:00
Weblate
5cee8990b3 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Aitzol Garmendia <aitzolgarmendia@gmail.com>
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Dani Talens <databio@gmail.com>
Co-authored-by: HuaBing <admin@hbcraft.cn>
Co-authored-by: JJonttuu <oikeaihminen@protonmail.com>
Co-authored-by: Juan Lores <juan.lores@gmail.com>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: Piotr Komborski <piotr+github@kombor.ski>
Co-authored-by: RicardoVelaC <ricardovelac@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: boan51204 <je.991707@gmail.com>
Co-authored-by: 饶志华 <879467666@qq.com>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pl/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_CN/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_TW/
Translation: Servarr/Prowlarr
2024-01-05 18:38:00 -06:00
Bogdan
9679e88717 Update end date for RED freeload event 2024-01-04 23:32:37 +02:00
Bogdan
f4203993ba New: (MAM) Book title and author returned in response 2024-01-03 11:29:06 +02:00
Bogdan
4be0715fe3 New: (MAM) Filter releases by Min/Max size 2024-01-03 11:21:40 +02:00
Bogdan
f9c9d4a0e0 Fixed: (GGn) Improve title, timezone, MST, min/max size filters
Hiding torrents of type link
And some minor refactoring around the passkey fetching and parsing.
2024-01-03 10:49:25 +02:00
Weblate
bf47380f7b Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Fixer <ygj59783@zslsz.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Mario Rodriguez <mario2423@gmail.com>
Co-authored-by: Norbi <kovinor123@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt_BR/
Translation: Servarr/Prowlarr
2024-01-01 14:10:25 +02:00
Mark McDowall
e27a46f578 Fixed: Disable SSL on start if certificate path is not set
(cherry picked from commit 4e19fec123900b8ba1252b640f26f2a4983683ff)
2024-01-01 08:07:46 +02:00
Weblate
af4e69f8fb Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Fixer <ygj59783@zslsz.com>
Co-authored-by: Koch Norbert <kochnorbert@icloud.com>
Co-authored-by: Pietro Ribeiro <xxb1exuv6@mozmail.com>
Co-authored-by: SunStorm <me@sunstorm.rocks>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: chiral-lab <jan.eltner@googlemail.com>
Co-authored-by: chrizl <chrizl@gmail.com>
Co-authored-by: resi23 <x-resistant-x@gmx.de>
Co-authored-by: slammingdeath <sebastianbrudny97@gmail.com>
Co-authored-by: ube <ube@alienautopsy.net>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pl/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/sv/
Translation: Servarr/Prowlarr
2023-12-31 10:48:13 +02:00
Weblate
1b2106d4f0 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Fixer <ygj59783@zslsz.com>
Co-authored-by: Koch Norbert <kochnorbert@icloud.com>
Co-authored-by: Pietro Ribeiro <xxb1exuv6@mozmail.com>
Co-authored-by: SunStorm <me@sunstorm.rocks>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: chiral-lab <jan.eltner@googlemail.com>
Co-authored-by: chrizl <chrizl@gmail.com>
Co-authored-by: resi23 <x-resistant-x@gmx.de>
Co-authored-by: slammingdeath <sebastianbrudny97@gmail.com>
Co-authored-by: ube <ube@alienautopsy.net>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pl/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/sv/
Translation: Servarr/Prowlarr
2023-12-31 10:39:03 +02:00
Weblate
bdfbda3805 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Koch Norbert <kochnorbert@icloud.com>
Co-authored-by: Pietro Ribeiro <xxb1exuv6@mozmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: chrizl <chrizl@gmail.com>
Co-authored-by: resi23 <x-resistant-x@gmx.de>
Co-authored-by: slammingdeath <sebastianbrudny97@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pl/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt/
Translation: Servarr/Prowlarr
2023-12-31 07:26:54 +02:00
Stevie Robinson
cb98b10468 Translate fields on the backend
(cherry picked from commit 48b12f5b00429a7cd218d23f0544641b0da62a06)
2023-12-31 07:16:38 +02:00
Mark McDowall
ae1bc8366c New: Add qBittorrent option for Content Layout
(cherry picked from commit 4b22200708ca120cfdcf9cb796be92183adb95d1)
2023-12-31 06:46:16 +02:00
Bogdan
67eeb4373c Fixed: Ignore empty tags when adding items to Flood
(cherry picked from commit 0a5200766ea80fc1c97bfa497cdfed31b9af687f)
2023-12-31 06:39:20 +02:00
Bogdan
9d40a64be4 Bump version to 1.12.0 2023-12-31 06:36:27 +02:00
114 changed files with 2142 additions and 821 deletions

View File

@@ -9,7 +9,7 @@ variables:
testsFolder: './_tests'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
majorVersion: '1.11.4'
majorVersion: '1.13.1'
minorVersion: $[counter('minorVersion', 1)]
prowlarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
@@ -17,7 +17,7 @@ variables:
sentryUrl: 'https://sentry.servarr.com'
dotnetVersion: '6.0.417'
nodeVersion: '16.X'
innoVersion: '6.2.0'
innoVersion: '6.2.2'
windowsImage: 'windows-2022'
linuxImage: 'ubuntu-20.04'
macImage: 'macOS-11'
@@ -1206,6 +1206,7 @@ stages:
- stage: Report_Out
dependsOn:
- Analyze
- Installer
- Unit_Test
- Integration
- Automation

View File

@@ -254,7 +254,7 @@ InstallInno()
ProgressStart "Installing portable Inno Setup"
rm -rf _inno
curl -s --output innosetup.exe "https://files.jrsoftware.org/is/6/innosetup-${INNOVERSION:-6.2.0}.exe"
curl -s --output innosetup.exe "https://files.jrsoftware.org/is/6/innosetup-${INNOVERSION:-6.2.2}.exe"
mkdir _inno
./innosetup.exe //portable=1 //silent //currentuser //dir=.\\_inno
rm innosetup.exe

View File

@@ -2,6 +2,8 @@ const loose = true;
module.exports = {
plugins: [
'@babel/plugin-transform-logical-assignment-operators',
// Stage 1
'@babel/plugin-proposal-export-default-from',
['@babel/plugin-transform-optional-chaining', { loose }],

View File

@@ -1,4 +1,5 @@
import SortDirection from 'Helpers/Props/SortDirection';
import { FilterBuilderProp } from './AppState';
export interface Error {
responseJSON: {
@@ -20,6 +21,10 @@ export interface PagedAppSectionState {
pageSize: number;
}
export interface AppSectionFilterState<T> {
filterBuilderProps: FilterBuilderProp<T>[];
}
export interface AppSectionSchemaState<T> {
isSchemaFetching: boolean;
isSchemaPopulated: boolean;

View File

@@ -1,8 +1,12 @@
import AppSectionState from 'App/State/AppSectionState';
import AppSectionState, {
AppSectionFilterState,
} from 'App/State/AppSectionState';
import Column from 'Components/Table/Column';
import History from 'typings/History';
interface HistoryAppState extends AppSectionState<History> {
interface HistoryAppState
extends AppSectionState<History>,
AppSectionFilterState<History> {
pageSize: number;
columns: Column[];
}

View File

@@ -3,6 +3,7 @@ import AppSectionState, {
AppSectionItemState,
AppSectionSaveState,
} from 'App/State/AppSectionState';
import { IndexerCategory } from 'Indexer/Indexer';
import Application from 'typings/Application';
import DownloadClient from 'typings/DownloadClient';
import Notification from 'typings/Notification';
@@ -25,6 +26,11 @@ export interface DownloadClientAppState
AppSectionDeleteState,
AppSectionSaveState {}
export interface IndexerCategoryAppState
extends AppSectionState<IndexerCategory>,
AppSectionDeleteState,
AppSectionSaveState {}
export interface NotificationAppState
extends AppSectionState<Notification>,
AppSectionDeleteState {}
@@ -35,6 +41,7 @@ interface SettingsAppState {
appProfiles: AppProfileAppState;
applications: ApplicationAppState;
downloadClients: DownloadClientAppState;
indexerCategories: IndexerCategoryAppState;
notifications: NotificationAppState;
ui: UiSettingsAppState;
}

View File

@@ -0,0 +1,41 @@
import React from 'react';
import { useSelector } from 'react-redux';
import { createSelector } from 'reselect';
import AppState from 'App/State/AppState';
import { IndexerCategory } from 'Indexer/Indexer';
import FilterBuilderRowValue from './FilterBuilderRowValue';
import FilterBuilderRowValueProps from './FilterBuilderRowValueProps';
const indexerCategoriesSelector = createSelector(
(state: AppState) => state.settings.indexerCategories,
(categories) => categories.items
);
function CategoryFilterBuilderRowValue(props: FilterBuilderRowValueProps) {
const categories: IndexerCategory[] = useSelector(indexerCategoriesSelector);
const tagList = categories.reduce(
(acc: { id: number; name: string }[], element) => {
acc.push({
id: element.id,
name: `${element.name} (${element.id})`,
});
if (element.subCategories && element.subCategories.length > 0) {
element.subCategories.forEach((subCat) => {
acc.push({
id: subCat.id,
name: `${subCat.name} (${subCat.id})`,
});
});
}
return acc;
},
[]
);
return <FilterBuilderRowValue {...props} tagList={tagList} />;
}
export default CategoryFilterBuilderRowValue;

View File

@@ -5,8 +5,10 @@ import IconButton from 'Components/Link/IconButton';
import { filterBuilderTypes, filterBuilderValueTypes, icons } from 'Helpers/Props';
import AppProfileFilterBuilderRowValueConnector from './AppProfileFilterBuilderRowValueConnector';
import BoolFilterBuilderRowValue from './BoolFilterBuilderRowValue';
import CategoryFilterBuilderRowValue from './CategoryFilterBuilderRowValue';
import DateFilterBuilderRowValue from './DateFilterBuilderRowValue';
import FilterBuilderRowValueConnector from './FilterBuilderRowValueConnector';
import HistoryEventTypeFilterBuilderRowValue from './HistoryEventTypeFilterBuilderRowValue';
import IndexerFilterBuilderRowValueConnector from './IndexerFilterBuilderRowValueConnector';
import PrivacyFilterBuilderRowValue from './PrivacyFilterBuilderRowValue';
import ProtocolFilterBuilderRowValue from './ProtocolFilterBuilderRowValue';
@@ -55,9 +57,15 @@ function getRowValueConnector(selectedFilterBuilderProp) {
case filterBuilderValueTypes.BOOL:
return BoolFilterBuilderRowValue;
case filterBuilderValueTypes.CATEGORY:
return CategoryFilterBuilderRowValue;
case filterBuilderValueTypes.DATE:
return DateFilterBuilderRowValue;
case filterBuilderValueTypes.HISTORY_EVENT_TYPE:
return HistoryEventTypeFilterBuilderRowValue;
case filterBuilderValueTypes.INDEXER:
return IndexerFilterBuilderRowValueConnector;

View File

@@ -0,0 +1,16 @@
import { FilterBuilderProp } from 'App/State/AppState';
interface FilterBuilderRowOnChangeProps {
name: string;
value: unknown[];
}
interface FilterBuilderRowValueProps {
filterType?: string;
filterValue: string | number | object | string[] | number[] | object[];
selectedFilterBuilderProp: FilterBuilderProp<unknown>;
sectionItem: unknown[];
onChange: (payload: FilterBuilderRowOnChangeProps) => void;
}
export default FilterBuilderRowValueProps;

View File

@@ -0,0 +1,39 @@
import React from 'react';
import translate from 'Utilities/String/translate';
import FilterBuilderRowValue from './FilterBuilderRowValue';
import FilterBuilderRowValueProps from './FilterBuilderRowValueProps';
const EVENT_TYPE_OPTIONS = [
{
id: 1,
get name() {
return translate('Grabbed');
},
},
{
id: 3,
get name() {
return translate('IndexerRss');
},
},
{
id: 2,
get name() {
return translate('IndexerQuery');
},
},
{
id: 4,
get name() {
return translate('IndexerAuth');
},
},
];
function HistoryEventTypeFilterBuilderRowValue(
props: FilterBuilderRowValueProps
) {
return <FilterBuilderRowValue {...props} tagList={EVENT_TYPE_OPTIONS} />;
}
export default HistoryEventTypeFilterBuilderRowValue;

View File

@@ -30,22 +30,24 @@ function CustomFiltersModalContent(props) {
<ModalBody>
{
customFilters.map((customFilter) => {
return (
<CustomFilter
key={customFilter.id}
id={customFilter.id}
label={customFilter.label}
filters={customFilter.filters}
selectedFilterKey={selectedFilterKey}
isDeleting={isDeleting}
deleteError={deleteError}
dispatchSetFilter={dispatchSetFilter}
dispatchDeleteCustomFilter={dispatchDeleteCustomFilter}
onEditPress={onEditCustomFilter}
/>
);
})
customFilters
.sort((a, b) => a.label.localeCompare(b.label))
.map((customFilter) => {
return (
<CustomFilter
key={customFilter.id}
id={customFilter.id}
label={customFilter.label}
filters={customFilter.filters}
selectedFilterKey={selectedFilterKey}
isDeleting={isDeleting}
deleteError={deleteError}
dispatchSetFilter={dispatchSetFilter}
dispatchDeleteCustomFilter={dispatchDeleteCustomFilter}
onEditPress={onEditCustomFilter}
/>
);
})
}
<div className={styles.addButtonContainer}>

View File

@@ -147,7 +147,7 @@ EnhancedSelectInputConnector.propTypes = {
provider: PropTypes.string.isRequired,
providerData: PropTypes.object.isRequired,
name: PropTypes.string.isRequired,
value: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.arrayOf(PropTypes.string), PropTypes.arrayOf(PropTypes.number)]).isRequired,
values: PropTypes.arrayOf(PropTypes.object).isRequired,
selectOptionsProviderAction: PropTypes.string,
onChange: PropTypes.func.isRequired,

View File

@@ -40,18 +40,26 @@ class FilterMenuContent extends Component {
}
{
customFilters.map((filter) => {
return (
<FilterMenuItem
key={filter.id}
filterKey={filter.id}
selectedFilterKey={selectedFilterKey}
onPress={onFilterSelect}
>
{filter.label}
</FilterMenuItem>
);
})
customFilters.length > 0 ?
<MenuItemSeparator /> :
null
}
{
customFilters
.sort((a, b) => a.label.localeCompare(b.label))
.map((filter) => {
return (
<FilterMenuItem
key={filter.id}
filterKey={filter.id}
selectedFilterKey={selectedFilterKey}
onPress={onFilterSelect}
>
{filter.label}
</FilterMenuItem>
);
})
}
{

View File

@@ -2,9 +2,10 @@ export const BOOL = 'bool';
export const BYTES = 'bytes';
export const DATE = 'date';
export const DEFAULT = 'default';
export const HISTORY_EVENT_TYPE = 'historyEventType';
export const INDEXER = 'indexer';
export const PROTOCOL = 'protocol';
export const PRIVACY = 'privacy';
export const APP_PROFILE = 'appProfile';
export const MOVIE_STATUS = 'movieStatus';
export const CATEGORY = 'category';
export const TAG = 'tag';

View File

@@ -15,6 +15,7 @@ import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptions
import TablePager from 'Components/Table/TablePager';
import { align, icons, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import HistoryFilterModal from './HistoryFilterModal';
import HistoryOptionsConnector from './HistoryOptionsConnector';
import HistoryRowConnector from './HistoryRowConnector';
@@ -63,6 +64,7 @@ class History extends Component {
columns,
selectedFilterKey,
filters,
customFilters,
totalRecords,
onFilterSelect,
onFirstPagePress,
@@ -108,7 +110,8 @@ class History extends Component {
alignMenu={align.RIGHT}
selectedFilterKey={selectedFilterKey}
filters={filters}
customFilters={[]}
customFilters={customFilters}
filterModalConnectorComponent={HistoryFilterModal}
onFilterSelect={onFilterSelect}
/>
</PageToolbarSection>
@@ -193,8 +196,9 @@ History.propTypes = {
indexersError: PropTypes.object,
items: PropTypes.arrayOf(PropTypes.object).isRequired,
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
selectedFilterKey: PropTypes.string.isRequired,
selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
filters: PropTypes.arrayOf(PropTypes.object).isRequired,
customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,
totalRecords: PropTypes.number,
onFilterSelect: PropTypes.func.isRequired,
onFirstPagePress: PropTypes.func.isRequired,

View File

@@ -6,6 +6,7 @@ import * as commandNames from 'Commands/commandNames';
import withCurrentPage from 'Components/withCurrentPage';
import { executeCommand } from 'Store/Actions/commandActions';
import * as historyActions from 'Store/Actions/historyActions';
import { createCustomFiltersSelector } from 'Store/Selectors/createClientSideCollectionSelector';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
import History from './History';
@@ -14,13 +15,15 @@ function createMapStateToProps() {
return createSelector(
(state) => state.history,
(state) => state.indexers,
createCustomFiltersSelector('history'),
createCommandExecutingSelector(commandNames.CLEAR_HISTORY),
(history, indexers, isHistoryClearing) => {
(history, indexers, customFilters, isHistoryClearing) => {
return {
isIndexersFetching: indexers.isFetching,
isIndexersPopulated: indexers.isPopulated,
indexersError: indexers.error,
isHistoryClearing,
customFilters,
...history
};
}

View File

@@ -0,0 +1,54 @@
import React, { useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { createSelector } from 'reselect';
import AppState from 'App/State/AppState';
import FilterModal from 'Components/Filter/FilterModal';
import { setHistoryFilter } from 'Store/Actions/historyActions';
function createHistorySelector() {
return createSelector(
(state: AppState) => state.history.items,
(queueItems) => {
return queueItems;
}
);
}
function createFilterBuilderPropsSelector() {
return createSelector(
(state: AppState) => state.history.filterBuilderProps,
(filterBuilderProps) => {
return filterBuilderProps;
}
);
}
interface HistoryFilterModalProps {
isOpen: boolean;
}
export default function HistoryFilterModal(props: HistoryFilterModalProps) {
const sectionItems = useSelector(createHistorySelector());
const filterBuilderProps = useSelector(createFilterBuilderPropsSelector());
const customFilterType = 'history';
const dispatch = useDispatch();
const dispatchSetFilter = useCallback(
(payload: unknown) => {
dispatch(setHistoryFilter(payload));
},
[dispatch]
);
return (
<FilterModal
// TODO: Don't spread all the props
{...props}
sectionItems={sectionItems}
filterBuilderProps={filterBuilderProps}
customFilterType={customFilterType}
dispatchSetFilter={dispatchSetFilter}
/>
);
}

View File

@@ -11,6 +11,12 @@
flex: 0 0 60px;
}
.id {
composes: cell;
flex: 0 0 60px;
}
.sortName {
composes: cell;

View File

@@ -8,6 +8,7 @@ interface CssExports {
'cell': string;
'checkInput': string;
'externalLink': string;
'id': string;
'minimumSeeders': string;
'packSeedTime': string;
'priority': string;

View File

@@ -34,7 +34,7 @@ function IndexerIndexRow(props: IndexerIndexRowProps) {
const { indexerId, columns, isSelectMode, onCloneIndexerPress } = props;
const { indexer, appProfile, status, longDateFormat, timeFormat } =
useSelector(createIndexerIndexItemSelector(props.indexerId));
useSelector(createIndexerIndexItemSelector(indexerId));
const {
id,
@@ -148,12 +148,24 @@ function IndexerIndexRow(props: IndexerIndexRowProps) {
);
}
if (name === 'id') {
return (
<VirtualTableRowCell key={name} className={styles[name]}>
<IndexerTitleLink
indexerId={indexerId}
title={`${indexerId}`}
onCloneIndexerPress={onCloneIndexerPress}
/>
</VirtualTableRowCell>
);
}
if (name === 'sortName') {
return (
<VirtualTableRowCell key={name} className={styles[name]}>
<IndexerTitleLink
indexerId={indexerId}
indexerName={indexerName}
title={indexerName}
onCloneIndexerPress={onCloneIndexerPress}
/>
</VirtualTableRowCell>

View File

@@ -4,6 +4,12 @@
flex: 0 0 60px;
}
.id {
composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css';
flex: 0 0 60px;
}
.sortName {
composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css';

View File

@@ -5,6 +5,7 @@ interface CssExports {
'added': string;
'appProfileId': string;
'capabilities': string;
'id': string;
'minimumSeeders': string;
'packSeedTime': string;
'priority': string;

View File

@@ -1,17 +1,16 @@
import PropTypes from 'prop-types';
import React, { useCallback, useState } from 'react';
import Link from 'Components/Link/Link';
import IndexerInfoModal from './Info/IndexerInfoModal';
import styles from './IndexerTitleLink.css';
interface IndexerTitleLinkProps {
indexerName: string;
indexerId: number;
title: string;
onCloneIndexerPress(id: number): void;
}
function IndexerTitleLink(props: IndexerTitleLinkProps) {
const { indexerName, indexerId, onCloneIndexerPress } = props;
const { title, indexerId, onCloneIndexerPress } = props;
const [isIndexerInfoModalOpen, setIsIndexerInfoModalOpen] = useState(false);
@@ -26,7 +25,7 @@ function IndexerTitleLink(props: IndexerTitleLinkProps) {
return (
<div>
<Link className={styles.link} onPress={onIndexerInfoPress}>
{indexerName}
{title}
</Link>
<IndexerInfoModal
@@ -39,8 +38,4 @@ function IndexerTitleLink(props: IndexerTitleLinkProps) {
);
}
IndexerTitleLink.propTypes = {
indexerName: PropTypes.string.isRequired,
};
export default IndexerTitleLink;

View File

@@ -12,8 +12,9 @@ import FilterMenu from 'Components/Menu/FilterMenu';
import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody';
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import { align, kinds } from 'Helpers/Props';
import { align, icons, kinds } from 'Helpers/Props';
import {
fetchIndexerStats,
setIndexerStatsFilter,
@@ -194,6 +195,10 @@ function IndexerStats() {
dispatch(fetchIndexerStats());
}, [dispatch]);
const onRefreshPress = useCallback(() => {
dispatch(fetchIndexerStats());
}, [dispatch]);
const onFilterSelect = useCallback(
(value: string) => {
dispatch(setIndexerStatsFilter({ selectedFilterKey: value }));
@@ -219,8 +224,17 @@ function IndexerStats() {
}, 0) ?? 0;
return (
<PageContent>
<PageContent title={translate('Stats')}>
<PageToolbar>
<PageToolbarSection>
<PageToolbarButton
label={translate('Refresh')}
iconName={icons.REFRESH}
isSpinning={isFetching}
onPress={onRefreshPress}
/>
</PageToolbarSection>
<PageToolbarSection alignContent={align.RIGHT} collapseButtons={false}>
<FilterMenu
alignMenu={align.RIGHT}

View File

@@ -285,7 +285,7 @@ class SearchIndex extends Component {
const hasNoIndexer = !totalItems;
return (
<PageContent>
<PageContent title={translate('Search')}>
<PageToolbar>
<PageToolbarSection
alignContent={align.RIGHT}

View File

@@ -62,7 +62,7 @@ class Applications extends Component {
return (
<FieldSet legend={translate('Applications')}>
<PageSectionContent
errorMessage={translate('UnableToLoadApplicationList')}
errorMessage={translate('ApplicationsLoadError')}
{...otherProps}
>
<div className={styles.applications}>

View File

@@ -14,9 +14,11 @@ import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import useSelectState from 'Helpers/Hooks/useSelectState';
import { kinds } from 'Helpers/Props';
import SortDirection from 'Helpers/Props/SortDirection';
import {
bulkDeleteApplications,
bulkEditApplications,
setManageApplicationsSort,
} from 'Store/Actions/settingsActions';
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
import { SelectStateInputProps } from 'typings/props';
@@ -62,6 +64,8 @@ const COLUMNS = [
interface ManageApplicationsModalContentProps {
onModalClose(): void;
sortKey?: string;
sortDirection?: SortDirection;
}
function ManageApplicationsModalContent(
@@ -76,6 +80,8 @@ function ManageApplicationsModalContent(
isSaving,
error,
items,
sortKey,
sortDirection,
}: ApplicationAppState = useSelector(
createClientSideCollectionSelector('settings.applications')
);
@@ -96,6 +102,13 @@ function ManageApplicationsModalContent(
const selectedCount = selectedIds.length;
const onSortPress = useCallback(
(value: string) => {
dispatch(setManageApplicationsSort({ sortKey: value }));
},
[dispatch]
);
const onDeletePress = useCallback(() => {
setIsDeleteModalOpen(true);
}, [setIsDeleteModalOpen]);
@@ -201,6 +214,9 @@ function ManageApplicationsModalContent(
allSelected={allSelected}
allUnselected={allUnselected}
onSelectAllChange={onSelectAllChange}
sortKey={sortKey}
sortDirection={sortDirection}
onSortPress={onSortPress}
>
<TableBody>
{items.map((item) => {

View File

@@ -84,7 +84,7 @@ class DownloadClientSettings extends Component {
/>
<PageToolbarButton
label={translate('ManageDownloadClients')}
label={translate('ManageClients')}
iconName={icons.MANAGE}
onPress={this.onManageDownloadClientsPress}
/>

View File

@@ -61,7 +61,7 @@ class DownloadClients extends Component {
return (
<FieldSet legend={translate('DownloadClients')}>
<PageSectionContent
errorMessage={translate('UnableToLoadDownloadClients')}
errorMessage={translate('DownloadClientsLoadError')}
{...otherProps}
>
<div className={styles.downloadClients}>

View File

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

View File

@@ -97,20 +97,6 @@ class EditAppProfileModalContent extends Component {
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('EnableInteractiveSearch')}
</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="enableInteractiveSearch"
{...enableInteractiveSearch}
helpText={translate('EnableInteractiveSearchHelpText')}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('EnableAutomaticSearch')}
@@ -125,6 +111,20 @@ class EditAppProfileModalContent extends Component {
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('EnableInteractiveSearch')}
</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="enableInteractiveSearch"
{...enableInteractiveSearch}
helpText={translate('EnableInteractiveSearchHelpText')}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('MinimumSeeders')}

View File

@@ -6,6 +6,8 @@ import getSectionState from 'Utilities/State/getSectionState';
import { set, updateServerSideCollection } from '../baseActions';
function createFetchServerSideCollectionHandler(section, url, fetchDataAugmenter) {
const [baseSection] = section.split('.');
return function(getState, payload, dispatch) {
dispatch(set({ section, isFetching: true }));
@@ -25,10 +27,13 @@ function createFetchServerSideCollectionHandler(section, url, fetchDataAugmenter
const {
selectedFilterKey,
filters,
customFilters
filters
} = sectionState;
const customFilters = getState().customFilters.items.filter((customFilter) => {
return customFilter.type === section || customFilter.type === baseSection;
});
const selectedFilters = findSelectedFilters(selectedFilterKey, filters, customFilters);
selectedFilters.forEach((filter) => {
@@ -37,7 +42,8 @@ function createFetchServerSideCollectionHandler(section, url, fetchDataAugmenter
const promise = createAjaxRequest({
url,
data
data,
traditional: true
}).request;
promise.done((response) => {

View File

@@ -1,4 +1,5 @@
import { createAction } from 'redux-actions';
import { sortDirections } from 'Helpers/Props';
import createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';
import createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
@@ -7,6 +8,7 @@ import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHand
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
import createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';
import createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';
import createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';
import createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';
import createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';
import { createThunk } from 'Store/thunks';
@@ -30,9 +32,10 @@ export const CANCEL_SAVE_APPLICATION = 'settings/applications/cancelSaveApplicat
export const DELETE_APPLICATION = 'settings/applications/deleteApplication';
export const TEST_APPLICATION = 'settings/applications/testApplication';
export const CANCEL_TEST_APPLICATION = 'settings/applications/cancelTestApplication';
export const TEST_ALL_APPLICATIONS = 'indexers/testAllApplications';
export const TEST_ALL_APPLICATIONS = 'settings/applications/testAllApplications';
export const BULK_EDIT_APPLICATIONS = 'settings/applications/bulkEditApplications';
export const BULK_DELETE_APPLICATIONS = 'settings/applications/bulkDeleteApplications';
export const SET_MANAGE_APPLICATIONS_SORT = 'settings/applications/setManageApplicationsSort';
//
// Action Creators
@@ -49,6 +52,7 @@ export const cancelTestApplication = createThunk(CANCEL_TEST_APPLICATION);
export const testAllApplications = createThunk(TEST_ALL_APPLICATIONS);
export const bulkEditApplications = createThunk(BULK_EDIT_APPLICATIONS);
export const bulkDeleteApplications = createThunk(BULK_DELETE_APPLICATIONS);
export const setManageApplicationsSort = createAction(SET_MANAGE_APPLICATIONS_SORT);
export const setApplicationValue = createAction(SET_APPLICATION_VALUE, (payload) => {
return {
@@ -88,7 +92,14 @@ export default {
isTesting: false,
isTestingAll: false,
items: [],
pendingChanges: {}
pendingChanges: {},
sortKey: 'name',
sortDirection: sortDirections.ASCENDING,
sortPredicates: {
name: function(item) {
return item.name.toLowerCase();
}
}
},
//
@@ -121,7 +132,10 @@ export default {
return selectedSchema;
});
}
},
[SET_MANAGE_APPLICATIONS_SORT]: createSetClientSideCollectionSortReducer(section)
}
};

View File

@@ -1,4 +1,5 @@
import { createAction } from 'redux-actions';
import { sortDirections } from 'Helpers/Props';
import createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';
import createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
@@ -7,6 +8,7 @@ import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHand
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
import createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';
import createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';
import createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';
import createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';
import createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';
import { createThunk } from 'Store/thunks';
@@ -34,6 +36,7 @@ export const CANCEL_TEST_DOWNLOAD_CLIENT = 'settings/downloadClients/cancelTestD
export const TEST_ALL_DOWNLOAD_CLIENTS = 'settings/downloadClients/testAllDownloadClients';
export const BULK_EDIT_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkEditDownloadClients';
export const BULK_DELETE_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkDeleteDownloadClients';
export const SET_MANAGE_DOWNLOAD_CLIENTS_SORT = 'settings/downloadClients/setManageDownloadClientsSort';
//
// Action Creators
@@ -50,6 +53,7 @@ export const cancelTestDownloadClient = createThunk(CANCEL_TEST_DOWNLOAD_CLIENT)
export const testAllDownloadClients = createThunk(TEST_ALL_DOWNLOAD_CLIENTS);
export const bulkEditDownloadClients = createThunk(BULK_EDIT_DOWNLOAD_CLIENTS);
export const bulkDeleteDownloadClients = createThunk(BULK_DELETE_DOWNLOAD_CLIENTS);
export const setManageDownloadClientsSort = createAction(SET_MANAGE_DOWNLOAD_CLIENTS_SORT);
export const setDownloadClientValue = createAction(SET_DOWNLOAD_CLIENT_VALUE, (payload) => {
return {
@@ -89,7 +93,14 @@ export default {
isTesting: false,
isTestingAll: false,
items: [],
pendingChanges: {}
pendingChanges: {},
sortKey: 'name',
sortDirection: sortDirections.ASCENDING,
sortPredicates: {
name: function(item) {
return item.name.toLowerCase();
}
}
},
//
@@ -147,7 +158,10 @@ export default {
return selectedSchema;
});
}
},
[SET_MANAGE_DOWNLOAD_CLIENTS_SORT]: createSetClientSideCollectionSortReducer(section)
}
};

View File

@@ -1,5 +1,5 @@
import { createAction } from 'redux-actions';
import { filterTypes, sortDirections } from 'Helpers/Props';
import { filterBuilderTypes, filterBuilderValueTypes, filterTypes, sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
@@ -159,6 +159,27 @@ export const defaultState = {
}
]
}
],
filterBuilderProps: [
{
name: 'eventType',
label: () => translate('EventType'),
type: filterBuilderTypes.EQUAL,
valueType: filterBuilderValueTypes.HISTORY_EVENT_TYPE
},
{
name: 'indexerIds',
label: () => translate('Indexer'),
type: filterBuilderTypes.EQUAL,
valueType: filterBuilderValueTypes.INDEXER
},
{
name: 'successful',
label: () => translate('Successful'),
type: filterBuilderTypes.EQUAL,
valueType: filterBuilderValueTypes.BOOL
}
]
};

View File

@@ -1,6 +1,6 @@
import _ from 'lodash';
import { createAction } from 'redux-actions';
import { sortDirections } from 'Helpers/Props';
import { filterTypePredicates, sortDirections } from 'Helpers/Props';
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
@@ -69,6 +69,28 @@ export const filterPredicates = {
item.fields.find((field) => field.name === 'vipExpiration')?.value ?? null;
return dateFilterPredicate(vipExpiration, filterValue, type);
},
categories: function(item, filterValue, type) {
const predicate = filterTypePredicates[type];
const { categories = [] } = item.capabilities || {};
const categoryList = categories
.filter((category) => category.id < 100000)
.reduce((acc, element) => {
acc.push(element.id);
if (element.subCategories && element.subCategories.length > 0) {
element.subCategories.forEach((subCat) => {
acc.push(subCat.id);
});
}
return acc;
}, []);
return predicate(categoryList, filterValue);
}
};

View File

@@ -37,12 +37,18 @@ export const defaultState = {
isVisible: true,
isModifiable: false
},
{
name: 'id',
columnLabel: () => translate('IndexerId'),
label: () => translate('Id'),
isSortable: true,
isVisible: false
},
{
name: 'sortName',
label: () => translate('IndexerName'),
isSortable: true,
isVisible: true,
isModifiable: false
isVisible: true
},
{
name: 'protocol',
@@ -180,6 +186,12 @@ export const defaultState = {
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.APP_PROFILE
},
{
name: 'categories',
label: () => translate('Categories'),
type: filterBuilderTypes.ARRAY,
valueType: filterBuilderValueTypes.CATEGORY
},
{
name: 'tags',
label: () => translate('Tags'),

View File

@@ -74,8 +74,9 @@ export const defaultState = {
valueType: filterBuilderValueTypes.TAG
}
],
selectedFilterKey: 'all',
customFilters: []
selectedFilterKey: 'all'
};
export const persistState = [

View File

@@ -22,9 +22,9 @@ class About extends Component {
isNetCore,
isDocker,
runtimeVersion,
migrationVersion,
databaseVersion,
databaseType,
migrationVersion,
appData,
startupPath,
mode,
@@ -66,13 +66,13 @@ class About extends Component {
}
<DescriptionListItem
title={translate('DBMigration')}
data={migrationVersion}
title={translate('Database')}
data={`${titleCase(databaseType)} ${databaseVersion}`}
/>
<DescriptionListItem
title={translate('Database')}
data={`${titleCase(databaseType)} ${databaseVersion}`}
title={translate('DatabaseMigration')}
data={migrationVersion}
/>
<DescriptionListItem

View File

@@ -92,6 +92,10 @@ namespace NzbDrone.Common.Http
{
data = new XElement("base64", Convert.ToBase64String(bytes));
}
else if (value is Dictionary<string, string> d)
{
data = new XElement("struct", d.Select(p => new XElement("member", new XElement("name", p.Key), new XElement("value", p.Value))));
}
else
{
throw new InvalidOperationException($"Unhandled argument type {value.GetType().Name}");

View File

@@ -0,0 +1,151 @@
using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Common.Serializer;
using NzbDrone.Core.Datastore.Migration;
using NzbDrone.Core.Notifications.Email;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Datastore.Migration
{
[TestFixture]
public class email_encryptionFixture : MigrationTest<email_encryption>
{
[Test]
public void should_convert_do_not_require_encryption_to_auto()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Notifications").Row(new
{
OnGrab = true,
OnHealthIssue = true,
IncludeHealthWarnings = true,
Name = "Mail Prowlarr",
Implementation = "Email",
Tags = "[]",
Settings = new EmailSettings38
{
Server = "smtp.gmail.com",
Port = 563,
To = new List<string> { "dont@email.me" },
RequireEncryption = false
}.ToJson(),
ConfigContract = "EmailSettings"
});
});
var items = db.Query<NotificationDefinition39>("SELECT * FROM \"Notifications\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("Email");
items.First().ConfigContract.Should().Be("EmailSettings");
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Preferred);
}
[Test]
public void should_convert_require_encryption_to_always()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Notifications").Row(new
{
OnGrab = true,
OnHealthIssue = true,
IncludeHealthWarnings = true,
Name = "Mail Prowlarr",
Implementation = "Email",
Tags = "[]",
Settings = new EmailSettings38
{
Server = "smtp.gmail.com",
Port = 563,
To = new List<string> { "dont@email.me" },
RequireEncryption = true
}.ToJson(),
ConfigContract = "EmailSettings"
});
});
var items = db.Query<NotificationDefinition39>("SELECT * FROM \"Notifications\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("Email");
items.First().ConfigContract.Should().Be("EmailSettings");
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Always);
}
[Test]
public void should_use_defaults_when_settings_are_empty()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Notifications").Row(new
{
OnGrab = true,
OnHealthIssue = true,
IncludeHealthWarnings = true,
Name = "Mail Prowlarr",
Implementation = "Email",
Tags = "[]",
Settings = new { }.ToJson(),
ConfigContract = "EmailSettings"
});
});
var items = db.Query<NotificationDefinition39>("SELECT * FROM \"Notifications\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("Email");
items.First().ConfigContract.Should().Be("EmailSettings");
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Preferred);
}
}
public class NotificationDefinition39
{
public int Id { get; set; }
public string Implementation { get; set; }
public string ConfigContract { get; set; }
public EmailSettings39 Settings { get; set; }
public string Name { get; set; }
public bool OnGrab { get; set; }
public bool OnHealthIssue { get; set; }
public bool OnHealthRestored { get; set; }
public bool OnApplicationUpdate { get; set; }
public bool SupportsOnGrab { get; set; }
public bool IncludeManualGrabs { get; set; }
public bool SupportsOnHealthIssue { get; set; }
public bool SupportsOnHealthRestored { get; set; }
public bool IncludeHealthWarnings { get; set; }
public bool SupportsOnApplicationUpdate { get; set; }
public List<int> Tags { get; set; }
}
public class EmailSettings38
{
public string Server { get; set; }
public int Port { get; set; }
public bool RequireEncryption { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string From { get; set; }
public IEnumerable<string> To { get; set; }
public IEnumerable<string> Cc { get; set; }
public IEnumerable<string> Bcc { get; set; }
}
public class EmailSettings39
{
public string Server { get; set; }
public int Port { get; set; }
public int UseEncryption { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string From { get; set; }
public IEnumerable<string> To { get; set; }
public IEnumerable<string> Cc { get; set; }
public IEnumerable<string> Bcc { get; set; }
}
}

View File

@@ -1,4 +1,5 @@
using System;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Net.Http;
@@ -21,10 +22,10 @@ namespace NzbDrone.Core.Test.IndexerTests.GazelleGamesTests
[SetUp]
public void Setup()
{
Subject.Definition = new IndexerDefinition()
Subject.Definition = new IndexerDefinition
{
Name = "GazelleGames",
Settings = new GazelleGamesSettings() { Apikey = "somekey" }
Settings = new GazelleGamesSettings { Apikey = "somekey" }
};
}
@@ -37,20 +38,20 @@ namespace NzbDrone.Core.Test.IndexerTests.GazelleGamesTests
.Setup(o => o.ExecuteProxiedAsync(It.Is<HttpRequest>(v => v.Method == HttpMethod.Get), Subject.Definition))
.Returns<HttpRequest, IndexerDefinition>((r, d) => Task.FromResult(new HttpResponse(r, new HttpHeader { { "Content-Type", "application/json" } }, new CookieCollection(), recentFeed)));
var releases = (await Subject.Fetch(new BasicSearchCriteria { Categories = new int[] { 2000 } })).Releases;
var releases = (await Subject.Fetch(new BasicSearchCriteria { Categories = new[] { 2000 } })).Releases;
releases.Should().HaveCount(1464);
releases.Should().HaveCount(1462);
releases.First().Should().BeOfType<TorrentInfo>();
var torrentInfo = releases.First() as TorrentInfo;
torrentInfo.Title.Should().Be("Microsoft_Flight_Simulator-HOODLUM");
torrentInfo.Title.Should().Be("Microsoft_Flight_Simulator-HOODLUM (2020) [Windows / Multi-Language / Full ISO]");
torrentInfo.DownloadProtocol.Should().Be(DownloadProtocol.Torrent);
torrentInfo.DownloadUrl.Should().Be("https://gazellegames.net/torrents.php?action=download&id=303216&authkey=prowlarr&torrent_pass=");
torrentInfo.InfoUrl.Should().Be("https://gazellegames.net/torrents.php?id=84781&torrentid=303216");
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-07-25 6:39:11").ToUniversalTime());
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-07-25 06:39:11", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal));
torrentInfo.Size.Should().Be(80077617780);
torrentInfo.InfoHash.Should().Be(null);
torrentInfo.MagnetUrl.Should().Be(null);
@@ -74,7 +75,7 @@ namespace NzbDrone.Core.Test.IndexerTests.GazelleGamesTests
.Setup(o => o.ExecuteProxiedAsync(It.Is<HttpRequest>(v => v.Method == HttpMethod.Get), Subject.Definition))
.Returns<HttpRequest, IndexerDefinition>((r, d) => Task.FromResult(new HttpResponse(r, new HttpHeader { { "Content-Type", "application/json" } }, new CookieCollection(), recentFeed)));
var releases = (await Subject.Fetch(new BasicSearchCriteria { Categories = new int[] { 2000 } })).Releases;
var releases = (await Subject.Fetch(new BasicSearchCriteria { Categories = new[] { 2000 } })).Releases;
releases.Should().HaveCount(0);
}

View File

@@ -0,0 +1,111 @@
using System;
using FizzWare.NBuilder;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Notifications.Email;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test.NotificationTests.EmailTests
{
[TestFixture]
public class EmailSettingsValidatorFixture : CoreTest<EmailSettingsValidator>
{
private EmailSettings _emailSettings;
private TestValidator<EmailSettings> _validator;
[SetUp]
public void Setup()
{
_validator = new TestValidator<EmailSettings>
{
v => v.RuleFor(s => s).SetValidator(Subject)
};
_emailSettings = Builder<EmailSettings>.CreateNew()
.With(s => s.Server = "someserver")
.With(s => s.Port = 567)
.With(s => s.UseEncryption = (int)EmailEncryptionType.Always)
.With(s => s.From = "dont@email.me")
.With(s => s.To = new string[] { "dont@email.me" })
.Build();
}
[Test]
public void should_be_valid_if_all_settings_valid()
{
_validator.Validate(_emailSettings).IsValid.Should().BeTrue();
}
[Test]
public void should_not_be_valid_if_port_is_out_of_range()
{
_emailSettings.Port = 900000;
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[Test]
public void should_not_be_valid_if_server_is_empty()
{
_emailSettings.Server = "";
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[Test]
public void should_not_be_valid_if_from_is_empty()
{
_emailSettings.From = "";
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[TestCase("prowlarr")]
[TestCase("email.me")]
[Ignore("Allowed coz some email servers allow arbitrary source, we probably need to support 'Name <email>' syntax")]
public void should_not_be_valid_if_from_is_invalid(string email)
{
_emailSettings.From = email;
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[TestCase("prowlarr")]
[TestCase("email.me")]
public void should_not_be_valid_if_to_is_invalid(string email)
{
_emailSettings.To = new string[] { email };
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[TestCase("prowlarr")]
[TestCase("email.me")]
public void should_not_be_valid_if_cc_is_invalid(string email)
{
_emailSettings.Cc = new string[] { email };
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[TestCase("prowlarr")]
[TestCase("email.me")]
public void should_not_be_valid_if_bcc_is_invalid(string email)
{
_emailSettings.Bcc = new string[] { email };
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[Test]
public void should_not_be_valid_if_to_bcc_cc_are_all_empty()
{
_emailSettings.To = Array.Empty<string>();
_emailSettings.Cc = Array.Empty<string>();
_emailSettings.Bcc = Array.Empty<string>();
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
}
}

View File

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

View File

@@ -252,11 +252,11 @@ namespace NzbDrone.Core.Applications
if (webException.Message.Contains("502") || webException.Message.Contains("503") ||
webException.Message.Contains("timed out"))
{
_logger.Warn("{0} server is currently unavailable. {1}", this, webException.Message);
_logger.Warn(webException, "{0} server is currently unavailable. {1}", this, webException.Message);
}
else
{
_logger.Warn("{0} {1}", this, webException.Message);
_logger.Warn(webException, "{0} {1}", this, webException.Message);
}
}
catch (TooManyRequestsException ex)
@@ -264,12 +264,12 @@ namespace NzbDrone.Core.Applications
var minimumBackOff = ex.RetryAfter != TimeSpan.Zero ? ex.RetryAfter : TimeSpan.FromHours(1);
_applicationStatusService.RecordFailure(application.Definition.Id, minimumBackOff);
_logger.Warn("API Request Limit reached for {0}", this);
_logger.Warn(ex, "API Request Limit reached for {0}", this);
}
catch (HttpException ex)
{
_applicationStatusService.RecordFailure(application.Definition.Id);
_logger.Warn("{0} {1}", this, ex.Message);
_logger.Warn(ex, "{0} {1}", this, ex.Message);
}
catch (Exception ex)
{
@@ -301,11 +301,11 @@ namespace NzbDrone.Core.Applications
if (webException.Message.Contains("502") || webException.Message.Contains("503") ||
webException.Message.Contains("timed out"))
{
_logger.Warn("{0} server is currently unavailable. {1}", this, webException.Message);
_logger.Warn(webException, "{0} server is currently unavailable. {1}", this, webException.Message);
}
else
{
_logger.Warn("{0} {1}", this, webException.Message);
_logger.Warn(webException, "{0} {1}", this, webException.Message);
}
}
catch (TooManyRequestsException ex)
@@ -313,12 +313,12 @@ namespace NzbDrone.Core.Applications
var minimumBackOff = ex.RetryAfter != TimeSpan.Zero ? ex.RetryAfter : TimeSpan.FromHours(1);
_applicationStatusService.RecordFailure(application.Definition.Id, minimumBackOff);
_logger.Warn("API Request Limit reached for {0}", this);
_logger.Warn(ex, "API Request Limit reached for {0}", this);
}
catch (HttpException ex)
{
_applicationStatusService.RecordFailure(application.Definition.Id);
_logger.Warn("{0} {1}", this, ex.Message);
_logger.Warn(ex, "{0} {1}", this, ex.Message);
}
catch (Exception ex)
{

View File

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

View File

@@ -0,0 +1,50 @@
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(039)]
public class email_encryption : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Execute.WithConnection(ChangeEncryption);
}
private void ChangeEncryption(IDbConnection conn, IDbTransaction tran)
{
var updated = new List<object>();
using (var getEmailCmd = conn.CreateCommand())
{
getEmailCmd.Transaction = tran;
getEmailCmd.CommandText = "SELECT \"Id\", \"Settings\" FROM \"Notifications\" WHERE \"Implementation\" = 'Email'";
using (var reader = getEmailCmd.ExecuteReader())
{
while (reader.Read())
{
var id = reader.GetInt32(0);
var settings = Json.Deserialize<JObject>(reader.GetString(1));
settings["useEncryption"] = settings.Value<bool?>("requireEncryption") ?? false ? 1 : 0;
settings["requireEncryption"] = null;
updated.Add(new
{
Settings = settings.ToJson(),
Id = id
});
}
}
}
var updateSql = "UPDATE \"Notifications\" SET \"Settings\" = @Settings WHERE \"Id\" = @Id";
conn.Execute(updateSql, updated, transaction: tran);
}
}
}

View File

@@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using System.Xml.XPath;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http;
using NzbDrone.Core.Download.Extensions;
@@ -95,8 +96,14 @@ namespace NzbDrone.Core.Download.Clients.Aria2
public string AddUri(Aria2Settings settings, string magnet)
{
var response = ExecuteRequest(settings, "aria2.addUri", GetToken(settings), new List<string> { magnet });
var options = new Dictionary<string, string>();
if (settings.Directory.IsNotNullOrWhiteSpace())
{
options.Add("dir", settings.Directory);
}
var response = ExecuteRequest(settings, "aria2.addUri", GetToken(settings), new List<string> { magnet }, options);
var gid = response.GetStringResponse();
return gid;
@@ -104,8 +111,16 @@ namespace NzbDrone.Core.Download.Clients.Aria2
public string AddTorrent(Aria2Settings settings, byte[] torrent)
{
var response = ExecuteRequest(settings, "aria2.addTorrent", GetToken(settings), torrent);
// Aria2's second parameter is an array of URIs and needs to be sent if options are provided, this satisfies that requirement.
var emptyListOfUris = new List<string>();
var options = new Dictionary<string, string>();
if (settings.Directory.IsNotNullOrWhiteSpace())
{
options.Add("dir", settings.Directory);
}
var response = ExecuteRequest(settings, "aria2.addTorrent", GetToken(settings), torrent, emptyListOfUris, options);
var gid = response.GetStringResponse();
return gid;

View File

@@ -41,6 +41,9 @@ namespace NzbDrone.Core.Download.Clients.Aria2
[FieldDefinition(4, Label = "Secret token", Type = FieldType.Password, Privacy = PrivacyLevel.Password)]
public string SecretToken { get; set; }
[FieldDefinition(5, Label = "Directory", Type = FieldType.Textbox, HelpText = "DownloadClientAriaSettingsDirectoryHelpText")]
public string Directory { get; set; }
public NzbDroneValidationResult Validate()
{
return new NzbDroneValidationResult(Validator.Validate(this));

View File

@@ -4,6 +4,7 @@ using System.Linq;
using FluentValidation.Results;
using NLog;
using NzbDrone.Common.Disk;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Download.Clients.Flood.Models;
using NzbDrone.Core.Indexers;
@@ -56,7 +57,7 @@ namespace NzbDrone.Core.Download.Clients.Flood
}
}
return result;
return result.Where(t => t.IsNotNullOrWhiteSpace());
}
public override string Name => "Flood";

View File

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

View File

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

View File

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

View File

@@ -171,9 +171,7 @@ namespace NzbDrone.Core.Download
}
catch (FormatException ex)
{
_logger.Error(ex, "Failed to parse magnetlink for release '{0}': '{1}'", release.Title, magnetUrl);
return null;
throw new ReleaseDownloadException("Failed to parse magnetlink for release '{0}': '{1}'", ex, release.Title, magnetUrl);
}
if (hash != null)

View File

@@ -32,7 +32,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
var parameters = new BroadcastheNetTorrentQuery();
var searchString = searchCriteria.SearchTerm ?? string.Empty;
var searchTerm = searchCriteria.SearchTerm ?? string.Empty;
var btnResults = searchCriteria.Limit.GetValueOrDefault();
if (btnResults == 0)
@@ -50,9 +50,10 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
{
parameters.Tvrage = $"{searchCriteria.RId}";
}
else if (searchString.IsNotNullOrWhiteSpace())
if (searchTerm.IsNotNullOrWhiteSpace())
{
parameters.Search = searchString.Replace(" ", "%");
parameters.Search = searchTerm.Replace(" ", "%");
}
// If only the season/episode is searched for then change format to match expected format
@@ -84,6 +85,11 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
parameters.Category = "Episode";
pageableRequests.Add(GetPagedRequests(parameters, btnResults, btnOffset));
}
else if (searchTerm.IsNotNullOrWhiteSpace() && int.TryParse(searchTerm, out _) && (searchCriteria.TvdbId > 0 || searchCriteria.RId > 0))
{
// Disable ID-based searches for episodes with absolute episode number
return new IndexerPageableRequestChain();
}
else
{
// Neither a season only search nor daily nor standard, fall back to query
@@ -104,7 +110,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
var parameters = new BroadcastheNetTorrentQuery();
var searchString = searchCriteria.SearchTerm ?? "";
var searchTerm = searchCriteria.SearchTerm ?? string.Empty;
var btnResults = searchCriteria.Limit.GetValueOrDefault();
if (btnResults == 0)
@@ -114,9 +120,9 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
var btnOffset = searchCriteria.Offset.GetValueOrDefault(0);
if (searchString.IsNotNullOrWhiteSpace())
if (searchTerm.IsNotNullOrWhiteSpace())
{
parameters.Search = searchString.Replace(" ", "%");
parameters.Search = searchTerm.Replace(" ", "%");
}
pageableRequests.Add(GetPagedRequests(parameters, btnResults, btnOffset));

View File

@@ -38,3 +38,8 @@ public class FileListTorrent
[JsonPropertyName("small_description")]
public string SmallDescription { get; set; }
}
public class FileListErrorResponse
{
public string Error { get; set; }
}

View File

@@ -28,9 +28,14 @@ public class FileListParser : IParseIndexerResponse
throw new IndexerException(indexerResponse, "Unexpected response status {0} code from indexer request", indexerResponse.HttpResponse.StatusCode);
}
if (indexerResponse.Content.StartsWith("{\"error\"") && STJson.TryDeserialize<FileListErrorResponse>(indexerResponse.Content, out var errorResponse))
{
throw new IndexerException(indexerResponse, "Unexpected response from indexer request: {0}", errorResponse.Error);
}
if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value))
{
throw new IndexerException(indexerResponse, $"Unexpected response header {indexerResponse.HttpResponse.Headers.ContentType} from indexer request, expected {HttpAccept.Json.Value}");
throw new IndexerException(indexerResponse, "Unexpected response header {0} from indexer request, expected {1}", indexerResponse.HttpResponse.Headers.ContentType, HttpAccept.Json.Value);
}
var releaseInfos = new List<ReleaseInfo>();

View File

@@ -1,13 +1,16 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using FluentValidation;
using FluentValidation.Results;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http;
using NzbDrone.Common.Serializer;
using NzbDrone.Core.Annotations;
@@ -16,6 +19,7 @@ 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;
@@ -24,7 +28,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public class GazelleGames : TorrentIndexerBase<GazelleGamesSettings>
{
public override string Name => "GazelleGames";
public override string[] IndexerUrls => new string[] { "https://gazellegames.net/" };
public override string[] IndexerUrls => new[] { "https://gazellegames.net/" };
public override string Description => "GazelleGames (GGn) is a Private Torrent Tracker for GAMES";
public override string Language => "en-US";
public override Encoding Encoding => Encoding.UTF8;
@@ -38,7 +42,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public override IIndexerRequestGenerator GetRequestGenerator()
{
return new GazelleGamesRequestGenerator() { Settings = Settings, Capabilities = Capabilities, HttpClient = _httpClient };
return new GazelleGamesRequestGenerator(Settings, Capabilities);
}
public override IParseIndexerResponse GetParser()
@@ -48,14 +52,13 @@ namespace NzbDrone.Core.Indexers.Definitions
private IndexerCapabilities SetCapabilities()
{
var caps = new IndexerCapabilities
{
};
var caps = new IndexerCapabilities();
// Apple
caps.Categories.AddCategoryMapping("Mac", NewznabStandardCategory.ConsoleOther, "Mac");
caps.Categories.AddCategoryMapping("iOS", NewznabStandardCategory.PCMobileiOS, "iOS");
caps.Categories.AddCategoryMapping("Apple Bandai Pippin", NewznabStandardCategory.ConsoleOther, "Apple Bandai Pippin");
caps.Categories.AddCategoryMapping("Apple II", NewznabStandardCategory.ConsoleOther, "Apple II");
// Google
caps.Categories.AddCategoryMapping("Android", NewznabStandardCategory.PCMobileAndroid, "Android");
@@ -78,6 +81,7 @@ namespace NzbDrone.Core.Indexers.Definitions
caps.Categories.AddCategoryMapping("Nintendo GameCube", NewznabStandardCategory.ConsoleOther, "Nintendo GameCube");
caps.Categories.AddCategoryMapping("Pokemon Mini", NewznabStandardCategory.ConsoleOther, "Pokemon Mini");
caps.Categories.AddCategoryMapping("SNES", NewznabStandardCategory.ConsoleOther, "SNES");
caps.Categories.AddCategoryMapping("Switch", NewznabStandardCategory.ConsoleOther, "Switch");
caps.Categories.AddCategoryMapping("Virtual Boy", NewznabStandardCategory.ConsoleOther, "Virtual Boy");
caps.Categories.AddCategoryMapping("Wii", NewznabStandardCategory.ConsoleWii, "Wii");
caps.Categories.AddCategoryMapping("Wii U", NewznabStandardCategory.ConsoleWiiU, "Wii U");
@@ -178,31 +182,62 @@ namespace NzbDrone.Core.Indexers.Definitions
caps.Categories.AddCategoryMapping("Retro - Other", NewznabStandardCategory.ConsoleOther, "Retro - Other");
// special categories (real categories/not platforms)
caps.Categories.AddCategoryMapping("OST", NewznabStandardCategory.AudioOther, "OST");
caps.Categories.AddCategoryMapping("Applications", NewznabStandardCategory.PC0day, "Applications");
caps.Categories.AddCategoryMapping("E-Books", NewznabStandardCategory.BooksEBook, "E-Books");
caps.Categories.AddCategoryMapping(1, NewznabStandardCategory.PCGames, "Games");
caps.Categories.AddCategoryMapping(2, NewznabStandardCategory.PC0day, "Applications");
caps.Categories.AddCategoryMapping(3, NewznabStandardCategory.BooksEBook, "E-Books");
caps.Categories.AddCategoryMapping(4, NewznabStandardCategory.AudioOther, "OST");
return caps;
}
protected override async Task Test(List<ValidationFailure> failures)
{
((GazelleGamesRequestGenerator)GetRequestGenerator()).FetchPasskey();
await base.Test(failures);
await FetchPasskey().ConfigureAwait(false);
await base.Test(failures).ConfigureAwait(false);
}
private async Task FetchPasskey()
{
var request = new HttpRequestBuilder($"{Settings.BaseUrl.Trim().TrimEnd('/')}/api.php")
.Accept(HttpAccept.Json)
.SetHeader("X-API-Key", Settings.Apikey)
.AddQueryParam("request", "quick_user")
.Build();
var indexResponse = await _httpClient.ExecuteAsync(request).ConfigureAwait(false);
var index = Json.Deserialize<GazelleGamesUserResponse>(indexResponse.Content);
if (index == null ||
string.IsNullOrWhiteSpace(index.Status) ||
index.Status != "success" ||
string.IsNullOrWhiteSpace(index.Response.PassKey))
{
throw new IndexerAuthException("Failed to authenticate with GazelleGames.");
}
// Set passkey on settings so it can be used to generate the download URL
Settings.Passkey = index.Response.PassKey;
}
}
public class GazelleGamesRequestGenerator : IIndexerRequestGenerator
{
public GazelleGamesSettings Settings { get; set; }
public IndexerCapabilities Capabilities { get; set; }
public IIndexerHttpClient HttpClient { get; set; }
private readonly GazelleGamesSettings _settings;
private readonly IndexerCapabilities _capabilities;
public GazelleGamesRequestGenerator(GazelleGamesSettings settings, IndexerCapabilities capabilities)
{
_settings = settings;
_capabilities = capabilities;
}
public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
{
var pageableRequests = new IndexerPageableRequestChain();
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)));
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria)));
return pageableRequests;
}
@@ -211,7 +246,7 @@ namespace NzbDrone.Core.Indexers.Definitions
{
var pageableRequests = new IndexerPageableRequestChain();
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)));
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria)));
return pageableRequests;
}
@@ -220,7 +255,7 @@ namespace NzbDrone.Core.Indexers.Definitions
{
var pageableRequests = new IndexerPageableRequestChain();
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)));
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria)));
return pageableRequests;
}
@@ -229,7 +264,7 @@ namespace NzbDrone.Core.Indexers.Definitions
{
var pageableRequests = new IndexerPageableRequestChain();
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)));
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria)));
return pageableRequests;
}
@@ -238,61 +273,72 @@ namespace NzbDrone.Core.Indexers.Definitions
{
var pageableRequests = new IndexerPageableRequestChain();
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)));
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria)));
return pageableRequests;
}
public void FetchPasskey()
private IEnumerable<IndexerRequest> GetRequest(List<KeyValuePair<string, string>> parameters)
{
// GET on index for the passkey
var request = RequestBuilder().Resource("api.php?request=quick_user").Build();
var indexResponse = HttpClient.Execute(request);
var index = Json.Deserialize<GazelleGamesUserResponse>(indexResponse.Content);
if (index == null ||
string.IsNullOrWhiteSpace(index.Status) ||
index.Status != "success" ||
string.IsNullOrWhiteSpace(index.Response.PassKey))
{
throw new Exception("Failed to authenticate with GazelleGames.");
}
// Set passkey on settings so it can be used to generate the download URL
Settings.Passkey = index.Response.PassKey;
}
private IEnumerable<IndexerRequest> GetRequest(string parameters)
{
var req = RequestBuilder()
.Resource($"api.php?{parameters}")
var request = RequestBuilder()
.Resource($"/api.php?{parameters.GetQueryString()}")
.Build();
yield return new IndexerRequest(req);
yield return new IndexerRequest(request);
}
private HttpRequestBuilder RequestBuilder()
{
return new HttpRequestBuilder($"{Settings.BaseUrl.Trim().TrimEnd('/')}")
return new HttpRequestBuilder($"{_settings.BaseUrl.Trim().TrimEnd('/')}")
.Resource("/api.php")
.Accept(HttpAccept.Json)
.SetHeader("X-API-Key", Settings.Apikey);
.SetHeader("X-API-Key", _settings.Apikey);
}
private string GetBasicSearchParameters(string searchTerm, int[] categories)
private List<KeyValuePair<string, string>> GetBasicSearchParameters(string searchTerm, SearchCriteriaBase searchCriteria)
{
var parameters = "request=search&search_type=torrents&empty_groups=filled&order_by=time&order_way=desc";
if (!string.IsNullOrWhiteSpace(searchTerm))
var parameters = new List<KeyValuePair<string, string>>
{
var searchType = Settings.SearchGroupNames ? "groupname" : "searchstr";
{ "request", "search" },
{ "search_type", "torrents" },
{ "empty_groups", "filled" },
{ "order_by", "time" },
{ "order_way", "desc" }
};
parameters += string.Format("&{1}={0}", searchTerm.Replace(".", " "), searchType);
if (searchTerm.IsNotNullOrWhiteSpace())
{
parameters.Add(
_settings.SearchGroupNames ? "groupname" : "searchstr",
searchTerm.Replace(".", " "));
}
if (categories != null)
if (searchCriteria.Categories != null)
{
foreach (var cat in Capabilities.Categories.MapTorznabCapsToTrackers(categories))
var categoryMappings = _capabilities.Categories
.MapTorznabCapsToTrackers(searchCriteria.Categories)
.Distinct()
.Where(x => !x.IsAllDigits())
.ToList();
categoryMappings.ForEach(category => parameters.Add("artistcheck[]", category));
}
if (searchCriteria.MinSize is > 0)
{
var minSize = searchCriteria.MinSize.Value / 1024L / 1024L;
if (minSize > 0)
{
parameters += string.Format("&artistcheck[]={0}", cat);
parameters.Add("sizesmall", minSize.ToString());
}
}
if (searchCriteria.MaxSize is > 0)
{
var maxSize = searchCriteria.MaxSize.Value / 1024L / 1024L;
if (maxSize > 0)
{
parameters.Add("sizeslarge", maxSize.ToString());
}
}
@@ -329,66 +375,63 @@ namespace NzbDrone.Core.Indexers.Definitions
}
var jsonResponse = new HttpResponse<GazelleGamesResponse>(indexerResponse.HttpResponse);
if (jsonResponse.Resource.Status != "success" ||
string.IsNullOrWhiteSpace(jsonResponse.Resource.Status) ||
jsonResponse.Resource.Response == null)
jsonResponse.Resource.Response is not JObject response)
{
return torrentInfos;
}
Dictionary<string, GazelleGamesGroup> response;
var groups = response.ToObject<Dictionary<int, GazelleGamesGroup>>(JsonSerializer.Create(Json.GetSerializerSettings()));
try
foreach (var group in groups)
{
response = ((JObject)jsonResponse.Resource.Response).ToObject<Dictionary<string, GazelleGamesGroup>>();
}
catch
{
return torrentInfos;
}
foreach (var result in response)
{
Dictionary<string, GazelleGamesTorrent> torrents;
try
{
torrents = ((JObject)result.Value.Torrents).ToObject<Dictionary<string, GazelleGamesTorrent>>();
}
catch
if (group.Value.Torrents is not JObject groupTorrents)
{
continue;
}
if (result.Value.Torrents != null)
var torrents = groupTorrents
.ToObject<Dictionary<int, GazelleGamesTorrent>>(JsonSerializer.Create(Json.GetSerializerSettings()))
.Where(t => t.Value.TorrentType.ToUpperInvariant() == "TORRENT")
.ToList();
var categories = group.Value.Artists
.SelectMany(a => _categories.MapTrackerCatDescToNewznab(a.Name))
.Distinct()
.ToArray();
foreach (var torrent in torrents)
{
var categories = result.Value.Artists.Select(a => a.Name);
var torrentId = torrent.Key;
var infoUrl = GetInfoUrl(group.Key, torrentId);
foreach (var torrent in torrents)
if (categories.Length == 0)
{
var id = int.Parse(torrent.Key);
var infoUrl = GetInfoUrl(result.Key, id);
var release = new TorrentInfo()
{
Guid = infoUrl,
Title = torrent.Value.ReleaseTitle,
Files = torrent.Value.FileCount,
Grabs = torrent.Value.Snatched,
Size = long.Parse(torrent.Value.Size),
DownloadUrl = GetDownloadUrl(id),
InfoUrl = infoUrl,
Seeders = torrent.Value.Seeders,
Categories = _categories.MapTrackerCatDescToNewznab(categories.FirstOrDefault()),
Peers = torrent.Value.Leechers + torrent.Value.Seeders,
PublishDate = torrent.Value.Time.ToUniversalTime(),
DownloadVolumeFactor = torrent.Value.FreeTorrent == GazelleGamesFreeTorrent.FreeLeech || torrent.Value.FreeTorrent == GazelleGamesFreeTorrent.Neutral || torrent.Value.LowSeedFL ? 0 : 1,
UploadVolumeFactor = torrent.Value.FreeTorrent == GazelleGamesFreeTorrent.Neutral ? 0 : 1
};
torrentInfos.Add(release);
categories = _categories.MapTrackerCatToNewznab(torrent.Value.CategoryId.ToString()).ToArray();
}
var release = new TorrentInfo
{
Guid = infoUrl,
InfoUrl = infoUrl,
DownloadUrl = GetDownloadUrl(torrentId),
Title = GetTitle(group.Value, torrent.Value),
Categories = categories,
Files = torrent.Value.FileCount,
Size = long.Parse(torrent.Value.Size),
Grabs = torrent.Value.Snatched,
Seeders = torrent.Value.Seeders,
Peers = torrent.Value.Leechers + torrent.Value.Seeders,
PublishDate = torrent.Value.Time.ToUniversalTime(),
Scene = torrent.Value.Scene == 1,
DownloadVolumeFactor = torrent.Value.FreeTorrent is GazelleGamesFreeTorrent.FreeLeech or GazelleGamesFreeTorrent.Neutral || torrent.Value.LowSeedFL ? 0 : 1,
UploadVolumeFactor = torrent.Value.FreeTorrent == GazelleGamesFreeTorrent.Neutral ? 0 : 1,
MinimumSeedTime = 288000 // Minimum of 3 days and 8 hours (80 hours in total)
};
torrentInfos.Add(release);
}
}
@@ -399,6 +442,54 @@ namespace NzbDrone.Core.Indexers.Definitions
.ToArray();
}
private static string GetTitle(GazelleGamesGroup group, GazelleGamesTorrent torrent)
{
var title = WebUtility.HtmlDecode(torrent.ReleaseTitle);
if (group.Year is > 0 && !title.Contains(group.Year.ToString()))
{
title += $" ({group.Year})";
}
if (torrent.RemasterTitle.IsNotNullOrWhiteSpace())
{
title += $" [{$"{torrent.RemasterTitle} {torrent.RemasterYear}".Trim()}]";
}
var flags = new List<string>
{
$"{torrent.Format} {torrent.Encoding}".Trim()
};
if (group.Artists is { Count: > 0 })
{
flags.AddIfNotNull(group.Artists.Select(a => a.Name).Join(", "));
}
flags.AddIfNotNull(torrent.Language);
flags.AddIfNotNull(torrent.Region);
flags.AddIfNotNull(torrent.Miscellaneous);
if (torrent.Dupable == 1)
{
flags.Add("Trumpable");
}
flags = flags.Where(x => x.IsNotNullOrWhiteSpace()).ToList();
if (flags.Any())
{
title += $" [{string.Join(" / ", flags)}]";
}
if (torrent.GameDoxType.IsNotNullOrWhiteSpace())
{
title += $" [{torrent.GameDoxType.Trim()}]";
}
return title;
}
private string GetDownloadUrl(int torrentId)
{
// AuthKey is required but not checked, just pass in a dummy variable
@@ -413,7 +504,7 @@ namespace NzbDrone.Core.Indexers.Definitions
return url.FullUri;
}
private string GetInfoUrl(string groupId, int torrentId)
private string GetInfoUrl(int groupId, int torrentId)
{
var url = new HttpUri(_settings.BaseUrl)
.CombinePath("/torrents.php")
@@ -444,7 +535,7 @@ namespace NzbDrone.Core.Indexers.Definitions
Passkey = "";
}
[FieldDefinition(2, Label = "API Key", HelpText = "API Key from the Site (Found in Settings => Access Settings), Must have User Permissions", Privacy = PrivacyLevel.ApiKey)]
[FieldDefinition(2, Label = "API Key", HelpText = "API Key from the Site (Found in Settings => Access Settings)", HelpTextWarning = "Must have User and Torrents permissions", Privacy = PrivacyLevel.ApiKey)]
public string Apikey { get; set; }
[FieldDefinition(3, Label = "Search Group Names", Type = FieldType.Checkbox, HelpText = "Search Group Names Only")]
@@ -466,8 +557,9 @@ namespace NzbDrone.Core.Indexers.Definitions
public class GazelleGamesGroup
{
public List<GazelleGamesArtist> Artists { get; set; }
public ReadOnlyCollection<GazelleGamesArtist> Artists { get; set; }
public object Torrents { get; set; }
public int? Year { get; set; }
}
public class GazelleGamesArtist
@@ -478,16 +570,30 @@ namespace NzbDrone.Core.Indexers.Definitions
public class GazelleGamesTorrent
{
public int CategoryId { get; set; }
public string Format { get; set; }
public string Encoding { get; set; }
public string Language { get; set; }
public string Region { get; set; }
public string RemasterYear { get; set; }
public string RemasterTitle { get; set; }
public string ReleaseTitle { get; set; }
public string Miscellaneous { get; set; }
public int Scene { get; set; }
public int Dupable { get; set; }
public DateTime Time { get; set; }
public string TorrentType { get; set; }
public int FileCount { get; set; }
public string Size { get; set; }
public int? Snatched { get; set; }
public int Seeders { get; set; }
public int Leechers { get; set; }
public string ReleaseTitle { get; set; }
public DateTime Time { get; set; }
public int FileCount { get; set; }
public GazelleGamesFreeTorrent FreeTorrent { get; set; }
public bool PersonalFL { get; set; }
public bool LowSeedFL { get; set; }
[JsonProperty("GameDOXType")]
public string GameDoxType { get; set; }
}
public class GazelleGamesUserResponse
@@ -503,9 +609,9 @@ namespace NzbDrone.Core.Indexers.Definitions
public enum GazelleGamesFreeTorrent
{
Normal,
FreeLeech,
Neutral,
Either
Normal = 0,
FreeLeech = 1,
Neutral = 2,
Either = 3
}
}

View File

@@ -17,7 +17,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
public IEnumerable<int> Category { get; set; }
public IEnumerable<int> Codec { get; set; }
public IEnumerable<int> Medium { get; set; }
public int? Origin { get; set; }
public IEnumerable<int> Origin { get; set; }
[JsonProperty(PropertyName = "imdb")]
public ImdbInfo ImdbInfo { get; set; }

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http;
@@ -26,7 +27,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
if (imdbId == 0 && searchCriteria.SearchTerm.IsNotNullOrWhiteSpace())
{
query.Search = searchCriteria.SanitizedSearchTerm;
query.Search = Regex.Replace(searchCriteria.SanitizedSearchTerm, "[\\W]+", " ").Trim();
}
if (imdbId != 0)
@@ -122,8 +123,20 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
query.Username = Settings.Username;
query.Passkey = Settings.ApiKey;
query.Codec = Settings.Codecs.ToArray();
query.Medium = Settings.Mediums.ToArray();
if (Settings.Codecs.Any())
{
query.Codec = Settings.Codecs.ToArray();
}
if (Settings.Mediums.Any())
{
query.Medium = Settings.Mediums.ToArray();
}
if (Settings.Origins.Any())
{
query.Origin = Settings.Origins.ToArray();
}
if (searchCriteria.Categories?.Length > 0)
{

View File

@@ -24,6 +24,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
{
Codecs = Array.Empty<int>();
Mediums = Array.Empty<int>();
Origins = Array.Empty<int>();
FreeleechOnly = false;
UseFilenames = true;
}
@@ -34,16 +35,19 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
[FieldDefinition(3, Label = "API Key", HelpText = "Site API Key", Privacy = PrivacyLevel.ApiKey)]
public string ApiKey { get; set; }
[FieldDefinition(4, Label = "Codecs", Type = FieldType.Select, SelectOptions = typeof(HdBitsCodec), Advanced = true, HelpText = "If unspecified, all options are used.")]
[FieldDefinition(4, Label = "Codecs", Type = FieldType.Select, SelectOptions = typeof(HdBitsCodec), HelpText = "If unspecified, all options are used.", Advanced = true)]
public IEnumerable<int> Codecs { get; set; }
[FieldDefinition(5, Label = "Mediums", Type = FieldType.Select, SelectOptions = typeof(HdBitsMedium), Advanced = true, HelpText = "If unspecified, all options are used.")]
[FieldDefinition(5, Label = "Mediums", Type = FieldType.Select, SelectOptions = typeof(HdBitsMedium), HelpText = "If unspecified, all options are used.", Advanced = true)]
public IEnumerable<int> Mediums { get; set; }
[FieldDefinition(6, Label = "Freeleech Only", Type = FieldType.Checkbox, Advanced = true, HelpText = "Show freeleech releases only")]
[FieldDefinition(6, Label = "Origins", Type = FieldType.Select, SelectOptions = typeof(HdBitsOrigin), HelpText = "If unspecified, all options are used.", Advanced = true)]
public IEnumerable<int> Origins { get; set; }
[FieldDefinition(7, Label = "Freeleech Only", Type = FieldType.Checkbox, HelpText = "Show freeleech releases only", Advanced = true)]
public bool FreeleechOnly { get; set; }
[FieldDefinition(7, Label = "Use Filenames", Type = FieldType.Checkbox, HelpText = "Check this option if you want to use torrent filenames as release titles")]
[FieldDefinition(8, Label = "Use Filenames", Type = FieldType.Checkbox, HelpText = "Check this option if you want to use torrent filenames as release titles")]
public bool UseFilenames { get; set; }
public override NzbDroneValidationResult Validate()
@@ -79,4 +83,12 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
[FieldOption("WEB-DL")]
WebDl = 6
}
public enum HdBitsOrigin
{
[FieldOption("Undefined")]
Undefined = 0,
[FieldOption("Internal")]
Internal = 1
}
}

View File

@@ -244,17 +244,17 @@ namespace NzbDrone.Core.Indexers.Definitions
if (Settings.SearchInDescription)
{
parameters.Add("tor[srchIn][description]", "true");
parameters.Set("tor[srchIn][description]", "true");
}
if (Settings.SearchInSeries)
{
parameters.Add("tor[srchIn][series]", "true");
parameters.Set("tor[srchIn][series]", "true");
}
if (Settings.SearchInFilenames)
{
parameters.Add("tor[srchIn][filenames]", "true");
parameters.Set("tor[srchIn][filenames]", "true");
}
var catList = Capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories);
@@ -263,13 +263,28 @@ namespace NzbDrone.Core.Indexers.Definitions
var index = 0;
foreach (var cat in catList)
{
parameters.Add("tor[cat][" + index + "]", cat);
parameters.Set("tor[cat][" + index + "]", cat);
index++;
}
}
else
{
parameters.Add("tor[cat][]", "0");
parameters.Set("tor[cat][]", "0");
}
if (searchCriteria.MinSize is > 0)
{
parameters.Set("tor[minSize]", searchCriteria.MinSize.Value.ToString());
}
if (searchCriteria.MaxSize is > 0)
{
parameters.Set("tor[maxSize]", searchCriteria.MaxSize.Value.ToString());
}
if (searchCriteria.MinSize is > 0 || searchCriteria.MaxSize is > 0)
{
parameters.Set("tor[unit]", "1");
}
var searchUrl = Settings.BaseUrl + "tor/js/loadSearchJSONbasic.php";
@@ -394,6 +409,8 @@ namespace NzbDrone.Core.Indexers.Definitions
release.Title = item.Title;
release.Description = item.Description;
release.BookTitle = item.Title;
if (item.AuthorInfo != null)
{
var authorInfo = JsonConvert.DeserializeObject<Dictionary<string, string>>(item.AuthorInfo);
@@ -402,6 +419,7 @@ namespace NzbDrone.Core.Indexers.Definitions
if (author.IsNotNullOrWhiteSpace())
{
release.Title += " by " + author;
release.Author = author;
}
}

View File

@@ -426,7 +426,7 @@ namespace NzbDrone.Core.Indexers.Definitions
[FieldDefinition(3, Label = "Use Freeleech Tokens", Type = FieldType.Checkbox, HelpText = "Use freeleech tokens when available")]
public bool UseFreeleechToken { get; set; }
[FieldDefinition(4, Label = "Freeload Only", Type = FieldType.Checkbox, Advanced = true, HelpTextWarning = "Search freeload torrents only. End date: 6 January 2024, 23:59 UTC.")]
[FieldDefinition(4, Label = "Freeload Only", Type = FieldType.Checkbox, Advanced = true, HelpTextWarning = "Search freeload torrents only. End date: 31 January 2024, 23:59 UTC.")]
public bool FreeloadOnly { get; set; }
public override NzbDroneValidationResult Validate()

View File

@@ -6,6 +6,7 @@ using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Indexers.Exceptions;
@@ -43,12 +44,12 @@ namespace NzbDrone.Core.Indexers.Definitions
public override IIndexerRequestGenerator GetRequestGenerator()
{
return new SubsPleaseRequestGenerator { Settings = Settings, Capabilities = Capabilities };
return new SubsPleaseRequestGenerator(Settings);
}
public override IParseIndexerResponse GetParser()
{
return new SubsPleaseParser(Settings, Capabilities.Categories);
return new SubsPleaseParser(Settings);
}
private IndexerCapabilities SetCapabilities()
@@ -74,12 +75,16 @@ namespace NzbDrone.Core.Indexers.Definitions
public class SubsPleaseRequestGenerator : IIndexerRequestGenerator
{
public NoAuthTorrentBaseSettings Settings { get; set; }
public IndexerCapabilities Capabilities { get; set; }
private readonly NoAuthTorrentBaseSettings _settings;
public SubsPleaseRequestGenerator(NoAuthTorrentBaseSettings settings)
{
_settings = settings;
}
private IEnumerable<IndexerRequest> GetSearchRequests(string term)
{
var searchUrl = $"{Settings.BaseUrl.TrimEnd('/')}/api/?";
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/api/?";
var searchTerm = Regex.Replace(term, "\\[?SubsPlease\\]?\\s*", string.Empty, RegexOptions.IgnoreCase).Trim();
@@ -104,7 +109,7 @@ namespace NzbDrone.Core.Indexers.Definitions
private IEnumerable<IndexerRequest> GetRssRequest()
{
var searchUrl = $"{Settings.BaseUrl.TrimEnd('/')}/api/?";
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/api/?";
var queryParameters = new NameValueCollection
{
@@ -119,16 +124,12 @@ namespace NzbDrone.Core.Indexers.Definitions
public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
{
var pageableRequests = new IndexerPageableRequestChain();
return pageableRequests;
return new IndexerPageableRequestChain();
}
public IndexerPageableRequestChain GetSearchRequests(MusicSearchCriteria searchCriteria)
{
var pageableRequests = new IndexerPageableRequestChain();
return pageableRequests;
return new IndexerPageableRequestChain();
}
public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
@@ -166,13 +167,13 @@ namespace NzbDrone.Core.Indexers.Definitions
public class SubsPleaseParser : IParseIndexerResponse
{
private readonly NoAuthTorrentBaseSettings _settings;
private readonly IndexerCapabilitiesCategories _categories;
private static readonly Regex RegexSize = new (@"\&xl=(?<size>\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
public SubsPleaseParser(NoAuthTorrentBaseSettings settings, IndexerCapabilitiesCategories categories)
private readonly NoAuthTorrentBaseSettings _settings;
public SubsPleaseParser(NoAuthTorrentBaseSettings settings)
{
_settings = settings;
_categories = categories;
}
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
@@ -216,28 +217,11 @@ namespace NzbDrone.Core.Indexers.Definitions
}
// Ex: [SubsPlease] Shingeki no Kyojin (The Final Season) - 64 (1080p)
release.Title += $"[SubsPlease] {value.Show} - {value.Episode} ({d.Res}p)";
release.Title += $"[SubsPlease] {value.Show} - {value.Episode} ({d.Resolution}p)";
release.MagnetUrl = d.Magnet;
release.DownloadUrl = null;
release.Guid = d.Magnet;
// The API doesn't tell us file size, so give an estimate based on resolution
if (string.Equals(d.Res, "1080"))
{
release.Size = 1395864371; // 1.3GB
}
else if (string.Equals(d.Res, "720"))
{
release.Size = 734003200; // 700MB
}
else if (string.Equals(d.Res, "480"))
{
release.Size = 367001600; // 350MB
}
else
{
release.Size = 1073741824; // 1GB
}
release.Size = GetReleaseSize(d);
torrentInfos.Add(release);
}
@@ -246,6 +230,30 @@ namespace NzbDrone.Core.Indexers.Definitions
return torrentInfos.ToArray();
}
private static long GetReleaseSize(SubPleaseDownloadInfo info)
{
if (info.Magnet.IsNotNullOrWhiteSpace())
{
var sizeMatch = RegexSize.Match(info.Magnet);
if (sizeMatch.Success &&
long.TryParse(sizeMatch.Groups["size"].Value, out var releaseSize)
&& releaseSize > 0)
{
return releaseSize;
}
}
// The API doesn't tell us file size, so give an estimate based on resolution
return info.Resolution switch
{
"1080" => 1.3.Gigabytes(),
"720" => 700.Megabytes(),
"480" => 350.Megabytes(),
_ => 1.Gigabytes()
};
}
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
}
@@ -265,7 +273,8 @@ namespace NzbDrone.Core.Indexers.Definitions
public class SubPleaseDownloadInfo
{
public string Res { get; set; }
[JsonProperty("res")]
public string Resolution { get; set; }
public string Magnet { get; set; }
}
}

View File

@@ -277,6 +277,18 @@ namespace NzbDrone.Core.Indexers.Torznab
flags.Add(IndexerFlag.FreeLeech);
}
var tags = TryGetMultipleTorznabAttributes(item, "tag");
if (tags.Any(t => t.EqualsIgnoreCase("internal")))
{
flags.Add(IndexerFlag.Internal);
}
if (tags.Any(t => t.EqualsIgnoreCase("scene")))
{
flags.Add(IndexerFlag.Scene);
}
return flags;
}

View File

@@ -1,3 +1,4 @@
using System;
using System.Linq;
using System.Text.RegularExpressions;
using FluentValidation;
@@ -10,10 +11,7 @@ namespace NzbDrone.Core.Indexers.Torznab
{
public class TorznabSettingsValidator : AbstractValidator<TorznabSettings>
{
private static readonly string[] ApiKeyWhiteList =
{
"hd4free.xyz",
};
private static readonly string[] ApiKeyWhiteList = Array.Empty<string>();
private static bool ShouldHaveApiKey(TorznabSettings settings)
{

View File

@@ -388,11 +388,11 @@ namespace NzbDrone.Core.Indexers
if (webException.Message.Contains("502") || webException.Message.Contains("503") ||
webException.Message.Contains("504") || webException.Message.Contains("timed out"))
{
_logger.Warn("{0} server is currently unavailable. {1} {2}", this, url, webException.Message);
_logger.Warn(webException, "{0} server is currently unavailable. {1} {2}", this, url, webException.Message);
}
else
{
_logger.Warn("{0} {1} {2}", this, url, webException.Message);
_logger.Warn(webException, "{0} {1} {2}", this, url, webException.Message);
}
}
catch (TooManyRequestsException ex)
@@ -402,7 +402,7 @@ namespace NzbDrone.Core.Indexers
var retryTime = ex.RetryAfter != TimeSpan.Zero ? ex.RetryAfter : minimumBackoff;
_indexerStatusService.RecordFailure(Definition.Id, retryTime);
_logger.Warn("Request Limit reached for {0}. Disabled for {1}", this, retryTime);
_logger.Warn(ex, "Request Limit reached for {0}. Disabled for {1}", this, retryTime);
}
catch (HttpException ex)
{
@@ -411,18 +411,18 @@ namespace NzbDrone.Core.Indexers
if (ex.Response.HasHttpServerError)
{
_logger.Warn("Unable to connect to {0} at [{1}]. Indexer's server is unavailable. Try again later. {2}", this, url, ex.Message);
_logger.Warn(ex, "Unable to connect to {0} at [{1}]. Indexer's server is unavailable. Try again later. {2}", this, url, ex.Message);
}
else
{
_logger.Warn("{0} {1}", this, ex.Message);
_logger.Warn(ex, "{0} {1}", this, ex.Message);
}
}
catch (RequestLimitReachedException ex)
{
result.Queries.Add(new IndexerQueryResult { Response = ex.Response.HttpResponse });
_indexerStatusService.RecordFailure(Definition.Id, minimumBackoff);
_logger.Warn("Request Limit reached for {0}. Disabled for {1}", this, minimumBackoff);
_logger.Warn(ex, "Request Limit reached for {0}. Disabled for {1}", this, minimumBackoff);
}
catch (IndexerAuthException ex)
{
@@ -733,7 +733,7 @@ namespace NzbDrone.Core.Indexers
}
catch (WebException webException)
{
_logger.Warn("Unable to connect to indexer.");
_logger.Warn(webException, "Unable to connect to indexer.");
if (webException.Status is WebExceptionStatus.NameResolutionFailure or WebExceptionStatus.ConnectFailure)
{

View File

@@ -82,7 +82,7 @@
"ConnectSettings": "ربط الإعدادات",
"CouldNotConnectSignalR": "تعذر الاتصال بـ SignalR ، لن يتم تحديث واجهة المستخدم",
"Dates": "تواريخ",
"DBMigration": "ترحيل DB",
"DatabaseMigration": "ترحيل DB",
"Delete": "حذف",
"Details": "تفاصيل",
"Donations": "التبرعات",
@@ -257,7 +257,7 @@
"Tags": "العلامات",
"TagsHelpText": "ينطبق على الأفلام التي تحتوي على علامة مطابقة واحدة على الأقل",
"UISettings": "إعدادات واجهة المستخدم",
"UnableToLoadDownloadClients": "تعذر تحميل عملاء التنزيل",
"DownloadClientsLoadError": "تعذر تحميل عملاء التنزيل",
"UnableToLoadTags": "تعذر تحميل العلامات",
"UnableToLoadUISettings": "تعذر تحميل إعدادات واجهة المستخدم",
"UpdateCheckStartupTranslocationMessage": "لا يمكن تثبيت التحديث لأن مجلد بدء التشغيل \"{0}\" موجود في مجلد App Translocation.",

View File

@@ -35,7 +35,7 @@
"CustomFilters": "Персонализирани филтри",
"Date": "Дата",
"Dates": "Дати",
"DBMigration": "DB миграция",
"DatabaseMigration": "DB миграция",
"Delete": "Изтрий",
"DeleteDownloadClient": "Изтриване на клиент за изтегляне",
"DeleteDownloadClientMessageText": "Наистина ли искате да изтриете клиента за изтегляне '{0}'?",
@@ -188,7 +188,7 @@
"Priority": "Приоритет",
"SettingsLongDateFormat": "Формат с дълга дата",
"SettingsShowRelativeDates": "Показване на относителни дати",
"UnableToLoadDownloadClients": "Клиентите за изтегляне не могат да се заредят",
"DownloadClientsLoadError": "Клиентите за изтегляне не могат да се заредят",
"Logging": "Регистрация",
"Exception": "Изключение",
"MovieIndexScrollBottom": "Индекс на филма: Превъртане отдолу",

View File

@@ -1,5 +1,5 @@
{
"Add": "Afegiu",
"Add": "Afegeix",
"Actions": "Accions",
"AcceptConfirmationModal": "Accepta el modal de confirmació",
"About": "Quant a",
@@ -19,7 +19,7 @@
"ScriptPath": "Camí de l'script",
"Search": "Cerca",
"Files": "Fitxers",
"SettingsEnableColorImpairedModeHelpText": "Estil alternat per permetre als usuaris amb problemes de color distingir millor la informació codificada per colors",
"SettingsEnableColorImpairedModeHelpText": "Estil alternat per a permetre als usuaris amb problemes de color distingir millor la informació codificada per colors",
"TagIsNotUsedAndCanBeDeleted": "L'etiqueta no està en ús i es pot suprimir",
"TagsSettingsSummary": "Consulta totes les etiquetes i com s'utilitzen. Les etiquetes no utilitzades es poden eliminar",
"Tasks": "Tasques",
@@ -33,18 +33,18 @@
"AddDownloadClient": "Afegeix un client de descàrrega",
"Added": "Afegit",
"Age": "Edat",
"All": "Tots",
"All": "Tot",
"Analytics": "Anàlisi",
"ApiKey": "Clau API",
"AppDataDirectory": "Directori AppData",
"AppDataLocationHealthCheckMessage": "No es podrà actualitzar per evitar que s'eliminin AppData a l'actualització",
"AppDataLocationHealthCheckMessage": "No es podrà actualitzar per a evitar que s'eliminin AppData a l'actualització",
"Authentication": "Autenticació",
"Torrents": "Torrents",
"Type": "Tipus",
"UILanguageHelpTextWarning": "Es requereix una recàrrega del navegador",
"UISettings": "Configuració de la interfície",
"UnableToLoadBackups": "No es poden carregar còpies de seguretat",
"UnableToLoadDownloadClients": "No es poden carregar els clients de baixada",
"DownloadClientsLoadError": "No es poden carregar els clients de baixada",
"UnableToLoadTags": "No es poden carregar les etiquetes",
"UnableToLoadUISettings": "No es pot carregar la configuració de la IU",
"UnselectAll": "Desseleccioneu-ho tot",
@@ -78,11 +78,11 @@
"Reddit": "Reddit",
"System": "Sistema",
"Username": "Nom d'usuari",
"Duration": "durada",
"Duration": "Durada",
"EditIndexer": "Edita l'indexador",
"EnableAutomaticSearch": "Activa la cerca automàtica",
"Enabled": "Habilitat",
"Error": "error",
"Error": "Error",
"ErrorLoadingContents": "S'ha produït un error en carregar el contingut",
"Events": "Esdeveniments",
"ExistingTag": "Etiqueta existent",
@@ -143,7 +143,7 @@
"SettingsShortDateFormat": "Format de data curta",
"BindAddress": "Adreça d'enllaç",
"Database": "Base de dades",
"Ended": "S'ha acabat",
"Ended": "Acabat",
"SettingsTimeFormat": "Format horari",
"YesCancel": "Si, cancel·la",
"Automatic": "Automàtic",
@@ -168,11 +168,11 @@
"CustomFilters": "Filtres personalitzats",
"Date": "Data",
"Dates": "Dates",
"DBMigration": "Migració de BD",
"DatabaseMigration": "Migració de BD",
"Delete": "Suprimeix",
"DeleteNotificationMessageText": "Esteu segur que voleu suprimir la notificació '{0}'?",
"DeleteNotificationMessageText": "Esteu segur que voleu suprimir la notificació '{name}'?",
"DeleteTag": "Suprimeix l'etiqueta",
"DeleteTagMessageText": "Esteu segur que voleu suprimir l'etiqueta '{0}'?",
"DeleteTagMessageText": "Esteu segur que voleu suprimir l'etiqueta '{label}'?",
"Details": "Detalls",
"Disabled": "Desactivat",
"DownloadClientStatusCheckAllClientMessage": "Tots els clients de descàrrega no estan disponibles a causa d'errors",
@@ -251,7 +251,7 @@
"Level": "Nivell",
"LogFiles": "Fitxers de registre",
"Logging": "Registre",
"MappedDrivesRunningAsService": "Les unitats de xarxa assignades no estan disponibles quan s'executen com a servei de Windows. Si us plau, consulteu les PMF per obtenir més informació",
"MappedDrivesRunningAsService": "Les unitats de xarxa assignades no estan disponibles quan s'executen com a servei de Windows. Si us plau, consulteu les PMF per a obtenir més informació",
"Mechanism": "Mecanisme",
"MIA": "MIA",
"Wiki": "Wiki",
@@ -260,9 +260,9 @@
"Branch": "Branca",
"Connections": "Connexions",
"ConnectSettings": "Configuració de connexió",
"DeleteBackupMessageText": "Esteu segur que voleu suprimir la còpia de seguretat '{0}'?",
"DeleteBackupMessageText": "Esteu segur que voleu suprimir la còpia de seguretat '{name}'?",
"DeleteDownloadClient": "Suprimeix el client de descàrrega",
"DeleteDownloadClientMessageText": "Esteu segur que voleu suprimir el client de baixada '{0}'?",
"DeleteDownloadClientMessageText": "Esteu segur que voleu suprimir el client de baixada '{name}'?",
"Discord": "Discord",
"Docker": "Docker",
"Donations": "Donacions",
@@ -300,10 +300,10 @@
"View": "Visualitza",
"Yesterday": "Ahir",
"ApplicationStatusCheckSingleClientMessage": "Llistes no disponibles a causa d'errors: {0}",
"AnalyticsEnabledHelpText": "Envieu informació anònima d'ús i errors als servidors de {appName}. Això inclou informació sobre el vostre navegador, quines pàgines {appName} WebUI feu servir, informes d'errors, així com el sistema operatiu i la versió del temps d'execució. Utilitzarem aquesta informació per prioritzar les funcions i les correccions d'errors.",
"AnalyticsEnabledHelpText": "Envieu informació anònima d'ús i errors als servidors de {appName}. Això inclou informació sobre el vostre navegador, quines pàgines {appName} WebUI feu servir, informes d'errors, així com el sistema operatiu i la versió de l'entorn d'execució. Utilitzarem aquesta informació per a prioritzar les funcions i les correccions d'errors.",
"HistoryCleanupDaysHelpTextWarning": "Els fitxers de la paperera de reciclatge més antics que el nombre de dies seleccionat es netejaran automàticament",
"UnableToAddANewAppProfilePleaseTryAgain": "No es pot afegir un perfil de qualitat nou, torneu-ho a provar.",
"BackupFolderHelpText": "Els camins relatius estaran sota el directori AppData del {appName}",
"BackupFolderHelpText": "Els camins relatius estaran sota el directori AppData de {appName}",
"AllIndexersHiddenDueToFilter": "Totes les pel·lícules estan ocultes a causa del filtre aplicat.",
"EnableRss": "Activa RSS",
"Grabs": "Captura",
@@ -312,11 +312,11 @@
"Application": "Aplicacions",
"Applications": "Aplicacions",
"ApplicationStatusCheckAllClientMessage": "Totes les llistes no estan disponibles a causa d'errors",
"AuthenticationMethodHelpText": "Requereix nom d'usuari i contrasenya per accedir al radar",
"AuthenticationMethodHelpText": "Es requereix nom d'usuari i contrasenya per a accedir a {appName}",
"ApplicationLongTermStatusCheckAllClientMessage": "Tots els indexadors no estan disponibles a causa d'errors durant més de 6 hores",
"ApplicationLongTermStatusCheckSingleClientMessage": "Els indexadors no estan disponibles a causa d'errors durant més de 6 hores: {0}",
"BindAddressHelpText": "Adreça IP vàlida, localhost o '*' per a totes les interfícies",
"BranchUpdate": "Branca que s'utilitza per actualitzar {appName}",
"BranchUpdate": "Branca que s'utilitza per a actualitzar {appName}",
"Connect": "Notificacions",
"DeleteApplicationMessageText": "Esteu segur que voleu suprimir la notificació '{0}'?",
"DeleteIndexerProxyMessageText": "Esteu segur que voleu suprimir la llista '{0}'?",
@@ -347,35 +347,85 @@
"ApplicationUrlHelpText": "URL extern d'aquesta aplicació, inclòs http(s)://, port i URL base",
"ApplyTagsHelpTextAdd": "Afegeix: afegeix les etiquetes a la llista d'etiquetes existent",
"ApplyTagsHelpTextHowToApplyApplications": "Com aplicar etiquetes a les pel·lícules seleccionades",
"ApplyTagsHelpTextHowToApplyIndexers": "Com aplicar etiquetes a les pel·lícules seleccionades",
"ApplyTagsHelpTextHowToApplyIndexers": "Com aplicar etiquetes als indexadors seleccionats",
"ApplyTagsHelpTextRemove": "Eliminar: elimina les etiquetes introduïdes",
"DeleteSelectedApplicationsMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?",
"Label": "Etiqueta",
"ApplyTagsHelpTextReplace": "Substituïu: substituïu les etiquetes per les etiquetes introduïdes (no introduïu cap etiqueta per esborrar totes les etiquetes)",
"DeleteSelectedDownloadClients": "Suprimeix el client de descàrrega",
"ApplyTagsHelpTextReplace": "Substitució: substituïu les etiquetes per les etiquetes introduïdes (no introduïu cap etiqueta per a esborrar totes les etiquetes)",
"DeleteSelectedDownloadClients": "Suprimeix el(s) client(s) de baixada",
"Genre": "Gèneres",
"DeleteSelectedDownloadClientsMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?",
"DeleteSelectedIndexersMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?",
"DeleteSelectedDownloadClientsMessageText": "Esteu segur que voleu suprimir {count} client(s) de baixada seleccionat(s)?",
"DeleteSelectedIndexersMessageText": "Esteu segur que voleu suprimir {count} indexador(s) seleccionat(s)?",
"DownloadClientPriorityHelpText": "Prioritzeu diversos clients de baixada. S'utilitza round-robin per a clients amb la mateixa prioritat.",
"More": "Més",
"Season": "temporada",
"Season": "Temporada",
"Theme": "Tema",
"Track": "Traça",
"Year": "Any",
"UpdateAvailable": "Nova actualització disponible",
"ConnectionLostReconnect": "Radarr intentarà connectar-se automàticament, o podeu fer clic a recarregar.",
"ConnectionLostToBackend": "Radarr ha perdut la connexió amb el backend i s'haurà de tornar a carregar per restaurar la funcionalitat.",
"ConnectionLostReconnect": "{appName} intentarà connectar-se automàticament, o podeu fer clic a recarregar.",
"ConnectionLostToBackend": "{appName} ha perdut la connexió amb el backend i s'haurà de tornar a carregar per a restaurar la funcionalitat.",
"RecentChanges": "Canvis recents",
"WhatsNew": "Que hi ha de nou?",
"minutes": "Minuts",
"DeleteAppProfileMessageText": "Esteu segur que voleu suprimir el perfil de qualitat {0}",
"NotificationStatusSingleClientHealthCheckMessage": "Llistes no disponibles a causa d'errors: {0}",
"AddConnection": "Edita la col·lecció",
"NotificationStatusAllClientHealthCheckMessage": "Totes les llistes no estan disponibles a causa d'errors",
"AddConnection": "Afegeix una connexió",
"NotificationStatusAllClientHealthCheckMessage": "Totes les notificacions no estan disponibles a causa d'errors",
"AuthBasic": "Basic (finestra emergent del navegador)",
"AuthForm": "Formularis (pàgina d'inici de sessió)",
"DisabledForLocalAddresses": "Desactivat per a adreces locals",
"None": "Cap",
"ResetAPIKeyMessageText": "Esteu segur que voleu restablir la clau de l'API?",
"RestartProwlarr": "Reinicia {appName}"
"RestartProwlarr": "Reinicia {appName}",
"AuthenticationRequired": "Autenticació necessària",
"CountDownloadClientsSelected": "{count} client(s) de baixada seleccionat(s)",
"NoDownloadClientsFound": "No s'han trobat clients de baixada",
"AuthenticationRequiredWarning": "Per a evitar l'accés remot sense autenticació, ara {appName} requereix que l'autenticació estigui activada. Opcionalment, podeu desactivar l'autenticació des d'adreces locals.",
"AppUpdatedVersion": "{appName} s'ha actualitzat a la versió `{version}`, per tal d'obtenir els darrers canvis, haureu de tornar a carregar {appName}",
"AppUpdated": "{appName} Actualitzada",
"ApplyChanges": "Aplica els canvis",
"Implementation": "Implementació",
"OnHealthRestored": "Al resoldre les incidències",
"ManageDownloadClients": "Gestiona els clients de descàrrega",
"AuthenticationRequiredHelpText": "Canvia per a quines sol·licituds cal autenticar. No canvieu tret que entengueu els riscos.",
"CountIndexersSelected": "S'han seleccionat {count} indexador(s)",
"EditDownloadClientImplementation": "Edita el client de baixada - {implementationName}",
"EditIndexerImplementation": "Edita l'indexador - {implementationName}",
"EditSelectedDownloadClients": "Editeu els clients de descàrrega seleccionats",
"EditSelectedIndexers": "Edita els indexadors seleccionats",
"IndexerDownloadClientHealthCheckMessage": "Indexadors amb clients de baixada no vàlids: {0}.",
"AddCustomFilter": "Afegeix un filtre personalitzat",
"AddDownloadClientImplementation": "Afegeix un client de descàrrega - {implementationName}",
"AddIndexerImplementation": "Afegeix un indexador - {implementationName}",
"AddConnectionImplementation": "Afegeix una connexió - {implementationName}",
"InvalidUILanguage": "La vostra IU està configurada en un idioma no vàlid, corregiu-lo i deseu la configuració",
"NoHistoryFound": "No s'ha trobat cap historial",
"NoIndexersFound": "No s'han trobat indexadors",
"OnHealthRestoredHelpText": "Al resoldre les incidències",
"AuthenticationMethod": "Mètode d'autenticació",
"AuthenticationMethodHelpTextWarning": "Seleccioneu un mètode d'autenticació vàlid",
"AuthenticationRequiredPasswordHelpTextWarning": "Introduïu una contrasenya nova",
"DefaultNameCopiedProfile": "{name} - Còpia",
"DownloadClientQbittorrentSettingsContentLayout": "Disseny de contingut",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Si s'utilitza el disseny de contingut de qBittorrent s'utilitza el disseny original del torrent o es crea una subcarpeta (qBittorrent 4.3.2+)",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmeu la nova contrasenya",
"AuthenticationRequiredUsernameHelpTextWarning": "Introduïu un nom d'usuari nou",
"Categories": "Categories",
"ApiKeyValidationHealthCheckMessage": "Actualitzeu la vostra clau de l'API perquè tingui almenys {length} caràcters. Podeu fer-ho mitjançant la configuració o el fitxer de configuració",
"Episode": "Episodi",
"EditApplicationImplementation": "Edita la notificació - {implementationName}",
"EditConnectionImplementation": "Afegeix una connexió - {implementationName}",
"EditIndexerProxyImplementation": "Edita l'indexador - {implementationName}",
"days": "dies",
"Album": "àlbum",
"Artist": "artista",
"AddApplicationImplementation": "Afegeix una condició - {implementationName}",
"AddIndexerProxyImplementation": "Afegeix un indexador - {implementationName}",
"Category": "Categoria",
"Clone": "Clona",
"Yes": "Si",
"No": "No",
"StopSelecting": "Deixa de seleccionar",
"External": "Extern"
}

View File

@@ -199,7 +199,7 @@
"SSLCertPath": "Cesta certifikátu SSL",
"SSLCertPathHelpText": "Cesta k souboru pfx",
"UnableToLoadBackups": "Nelze načíst zálohy",
"UnableToLoadDownloadClients": "Nelze načíst klienty pro stahování",
"DownloadClientsLoadError": "Nelze načíst klienty pro stahování",
"UnableToLoadGeneralSettings": "Nelze načíst obecná nastavení",
"DeleteNotification": "Smazat oznámení",
"EnableAutomaticSearch": "Povolit automatické vyhledávání",
@@ -244,7 +244,7 @@
"CustomFilters": "Vlastní filtry",
"Date": "datum",
"Dates": "Termíny",
"DBMigration": "Migrace databáze",
"DatabaseMigration": "Migrace databáze",
"Delete": "Vymazat",
"DeleteApplicationMessageText": "Opravdu chcete smazat oznámení „{0}“?",
"DeleteBackup": "Odstranit zálohu",
@@ -405,5 +405,6 @@
"AuthenticationRequiredPasswordHelpTextWarning": "Vložte nové heslo",
"AuthenticationRequiredUsernameHelpTextWarning": "Vložte nové uživatelské jméno",
"AuthenticationMethodHelpTextWarning": "Prosím vyberte platnou metodu ověřování",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrďte nové heslo"
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrďte nové heslo",
"days": "dnů"
}

View File

@@ -53,7 +53,7 @@
"Disabled": "deaktiveret",
"Add": "Tilføj",
"AddDownloadClient": "Tilføj downloadklient",
"DBMigration": "DB Migration",
"DatabaseMigration": "DB Migration",
"MIA": "MIA",
"ResetAPIKey": "Nulstil API-nøgle",
"SettingsTimeFormat": "Tidsformat",
@@ -264,7 +264,7 @@
"SSLPort": "SSL-port",
"StartupDirectory": "Startmappe",
"Status": "Status",
"UnableToLoadDownloadClients": "Kunne ikke indlæse downloadklienter",
"DownloadClientsLoadError": "Kunne ikke indlæse downloadklienter",
"UpdateCheckStartupTranslocationMessage": "Kan ikke installere opdatering, fordi startmappen '{0}' er i en App Translocation-mappe.",
"UpdateMechanismHelpText": "Brug den indbyggede opdateringsfunktion eller et script",
"View": "Udsigt",

View File

@@ -17,11 +17,11 @@
"Age": "Alter",
"All": "Alle",
"AllIndexersHiddenDueToFilter": "Alle Indexer sind durch den ausgewählten Filter ausgeblendet.",
"Analytics": "Analytik",
"AnalyticsEnabledHelpText": "Sende anonyme Nutzungs- und Fehlerinformationen an die Server von {appName}. Dazu gehören Informationen über Browser, welche Seiten der {appName}-Weboberfläche aufgerufen wurden, Fehlerberichte sowie Betriebssystem- und Laufzeitversion. Wir werden diese Informationen verwenden, um Funktionen und Fehlerbehebungen zu priorisieren.",
"Analytics": "Analysen",
"AnalyticsEnabledHelpText": "Senden Sie anonyme Nutzungs- und Fehlerinformationen an die Server von {appName}. Dazu gehören Informationen zu Ihrem Browser, welche {appName}-WebUI-Seiten Sie verwenden, Fehlerberichte sowie Betriebssystem- und Laufzeitversion. Wir werden diese Informationen verwenden, um Funktionen und Fehlerbehebungen zu priorisieren.",
"ApiKey": "API-Schlüssel",
"ApiKeyValidationHealthCheckMessage": "Bitte den API Schlüssel korrigieren, dieser muss mindestens {0} Zeichen lang sein. Die Änderung kann über die Einstellungen oder die Konfigurationsdatei erfolgen",
"AppDataDirectory": "AppData Ordner",
"AppDataDirectory": "AppData-Verzeichnis",
"AppDataLocationHealthCheckMessage": "Ein Update ist nicht möglich, um das Löschen von AppData beim Update zu verhindern",
"AppProfileInUse": "App-Profil im Einsatz",
"AppProfileSelectHelpText": "App-Profile werden verwendet, um die Einstellungen für RSS, automatische Suche und interaktive Suche bei der Anwendungssynchronisierung zu steuern",
@@ -33,54 +33,54 @@
"ApplicationStatusCheckSingleClientMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {0}",
"Applications": "Anwendungen",
"Apply": "Anwenden",
"ApplyTags": "Tags setzen",
"ApplyTags": "Schlagworte anwenden",
"Apps": "Anwendungen",
"AudioSearch": "Audio Suche",
"Auth": "Authentifizierung",
"Authentication": "Authentifizierung",
"AuthenticationMethodHelpText": "Für den Zugriff auf {appName} sind Benutzername und Passwort erforderlich",
"AuthenticationMethodHelpText": "Für den Zugriff auf {appName} sind Benutzername und Passwort erforderlich.",
"Automatic": "Automatisch",
"AutomaticSearch": "Automatische Suche",
"Backup": "Backups",
"BackupFolderHelpText": "Relative Pfade befinden sich unter {appName}s AppData Ordner",
"BackupIntervalHelpText": "Intervall zum sichern der Datenbank und Einstellungen",
"Backup": "Sicherung",
"BackupFolderHelpText": "Relative Pfade befinden sich im AppData-Verzeichnis von {appName}",
"BackupIntervalHelpText": "Intervall zwischen automatischen Sicherungen",
"BackupNow": "Jetzt sichern",
"BackupRetentionHelpText": "Automatische Backups, die älter als die Aufbewahrungsfrist sind, werden automatisch gelöscht",
"BackupRetentionHelpText": "Automatische Backups, die älter als der Aufbewahrungszeitraum sind, werden automatisch bereinigt",
"Backups": "Sicherungen",
"BeforeUpdate": "Vor dem Update",
"BindAddress": "Adresse binden",
"BindAddressHelpText": "Gültige IP Adresse oder \"*\" für alle Netzwerke",
"BindAddressHelpText": "Gültige IP-Adresse, localhost oder „*“ für alle Schnittstellen",
"BookSearch": "Buch Suche",
"BookSearchTypes": "Buch-Suchtypen",
"Branch": "Git-Branch",
"Branch": "Branch",
"BranchUpdate": "Verwendeter Branch zur Aktualisierung von {appName}",
"BranchUpdateMechanism": "Git-Branch für den externen Updateablauf",
"BypassProxyForLocalAddresses": "Proxy für lokale Adressen umgehen",
"Cancel": "Abbrechen",
"CancelPendingTask": "Diese laufende Aufgabe wirklich abbrechen?",
"CancelPendingTask": "Möchten Sie diese ausstehende Aufgabe wirklich abbrechen?",
"Categories": "Kategorien",
"Category": "Kategorie",
"CertificateValidation": "Zertifikat Validierung",
"CertificateValidation": "Zertifikatsvalidierung",
"CertificateValidationHelpText": "Ändere wie streng die Validierung der HTTPS-Zertifizierung ist",
"ChangeHasNotBeenSavedYet": "Änderung wurde noch nicht gespeichert",
"Clear": "Leeren",
"ClearHistory": "Verlauf leeren",
"ClearHistoryMessageText": "Wirklich den ganzen {appName} Verlauf löschen?",
"ClientPriority": "Priorität",
"CloneProfile": "Profil kopieren",
"CloneProfile": "Profil klonen",
"Close": "Schließen",
"CloseCurrentModal": "Momentanes Modal schließen",
"Columns": "Spalten",
"Component": "Komponente",
"Connect": "Benachrichtigungen",
"ConnectSettings": "Eintellungen für Verbindungen",
"ConnectSettings": "Verbindungseinstellungen",
"ConnectSettingsSummary": "Benachrichtigungen und eigene Scripte",
"ConnectionLost": "Verbindung unterbrochen",
"Connections": "Verbindungen",
"CouldNotConnectSignalR": "Es konnte keine Verbindung zu SignalR hergestellt werden, die Benutzeroberfläche wird nicht aktualisiert",
"Custom": "Benutzerdefiniert",
"CustomFilters": "Eigene Filter",
"DBMigration": "DB Migration",
"CustomFilters": "Benutzerdefinierte Filter",
"DatabaseMigration": "DB Migration",
"Database": "Datenbank",
"Date": "Datum",
"Dates": "Termine",
@@ -88,24 +88,24 @@
"DeleteAppProfile": "App-Profil löschen",
"DeleteApplication": "Applikation löschen",
"DeleteApplicationMessageText": "Wirklich die Applikation '{0}' löschen?",
"DeleteBackup": "Backup löschen",
"DeleteBackupMessageText": "Backup '{0}' wirkich löschen?",
"DeleteDownloadClient": "Downloader löschen",
"DeleteDownloadClientMessageText": "Downloader '{0}' wirklich löschen?",
"DeleteBackup": "Sicherung löschen",
"DeleteBackupMessageText": "Sind Sie sicher, dass Sie die Sicherung „{name}“ löschen möchten?",
"DeleteDownloadClient": "Download-Client löschen",
"DeleteDownloadClientMessageText": "Sind Sie sicher, dass Sie den Download-Client „{name}“ löschen möchten?",
"DeleteIndexerProxy": "Indexer Proxy löschen",
"DeleteIndexerProxyMessageText": "Tag '{0}' wirklich löschen?",
"DeleteNotification": "Benachrichtigung löschen",
"DeleteNotificationMessageText": "Benachrichtigung '{0}' wirklich löschen?",
"DeleteNotificationMessageText": "Sind Sie sicher, dass Sie die Benachrichtigung „{name}“ löschen möchten?",
"DeleteTag": "Tag löschen",
"DeleteTagMessageText": "Tag '{0}' wirklich löschen?",
"DeleteTagMessageText": "Sind Sie sicher, dass Sie das Tag „{label}“ löschen möchten?",
"Description": "Beschreibung",
"Details": "Details",
"Details": "Einzelheiten",
"DevelopmentSettings": "Entwicklungseinstellungen",
"Disabled": "Deaktiviert",
"Discord": "Discord",
"Docker": "Docker",
"Donations": "Spenden",
"DownloadClient": "Downloader",
"DownloadClient": "Download Client",
"DownloadClientSettings": "Downloader Einstellungen",
"DownloadClientStatusCheckAllClientMessage": "Alle Download Clients sind aufgrund von Fehlern nicht verfügbar",
"DownloadClientStatusCheckSingleClientMessage": "Download Clients aufgrund von Fehlern nicht verfügbar: {0}",
@@ -307,17 +307,17 @@
"Reload": "Neuladen",
"Remove": "Entfernen",
"RemoveFilter": "Filter entfernen",
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlage entfernt",
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlange entfernt",
"RemovingTag": "Tag entfernen",
"Replace": "Ersetzen",
"Reset": "Zurücksetzen",
"ResetAPIKey": "API-Schlüssel zurücksetzen",
"Restart": "Neustarten",
"Restart": "Neu starten",
"RestartNow": "Jetzt neustarten",
"RestartProwlarr": "{appName} Neustarten",
"RestartRequiredHelpTextWarning": "Erfordert einen Neustart",
"RestartRequiredHelpTextWarning": "Erfordert einen Neustart, damit die Aktion wirksam wird",
"Restore": "Wiederherstellen",
"RestoreBackup": "Backup einspielen",
"RestoreBackup": "Sicherung wiederherstellen",
"Result": "Ergebnis",
"Retention": "Aufbewahrung ( Retention )",
"SSLCertPassword": "SSL Zertifikat Passwort",
@@ -339,8 +339,8 @@
"Seeders": "Seeders",
"SelectAll": "Alle wählen",
"SemiPrivate": "Halbprivat",
"SendAnonymousUsageData": "Anonyme Nutzungsdaten übertragen",
"SetTags": "Tags setzen",
"SendAnonymousUsageData": "Sende anonyme Nutzungsdaten",
"SetTags": "Tags festlegen",
"Settings": "Einstellungen",
"SettingsConsoleLogLevel": "Konsolen Log Level",
"SettingsEnableColorImpairedMode": "Farbbeeinträchtigter Modus aktivieren",
@@ -358,7 +358,7 @@
"SettingsShowRelativeDatesHelpText": "Relatives (z.B.: Heute, gestern, etc) oder absolutes Datum anzeigen",
"SettingsSqlLoggingHelpText": "Log alle SQL Abfragen von {appName}",
"SettingsTimeFormat": "Zeitformat",
"ShowAdvanced": "Einfache Ansicht",
"ShowAdvanced": "Erweitert anzeigen",
"ShowSearch": "Suche anzeigen",
"ShowSearchHelpText": "Suchbutton anzeigen beim draufzeigen",
"Shutdown": "Herunterfahren",
@@ -366,7 +366,7 @@
"Sort": "Sortieren",
"Source": "Quelle",
"StartTypingOrSelectAPathBelow": "Eingeben oder unten auswählen",
"Started": "gestartet",
"Started": "Gestartet",
"StartupDirectory": "Start-Verzeichnis",
"Stats": "Statistiken",
"Status": "Status",
@@ -387,13 +387,13 @@
"TagIsNotUsedAndCanBeDeleted": "Tag wird nicht benutzt und kann gelöscht werden",
"Tags": "Tags",
"TagsHelpText": "Wird auf Filme mit mindestens einem passenden Tag angewandt",
"TagsSettingsSummary": "Alle Tags und deren Benutzung anzeigen. Unbenutzte Tags können entfernt werden",
"TagsSettingsSummary": "Sehen Sie sich alle Tags und deren Verwendung an. Nicht verwendete Tags können entfernt werden",
"Tasks": "Aufgaben",
"Test": "Testen",
"TestAll": "Alle testen",
"Test": "Prüfen",
"TestAll": "Alle prüfen",
"TestAllApps": "Alle Apps testen",
"TestAllClients": "Alle testen",
"TestAllIndexers": "Alle testen",
"TestAllClients": "Prüfe alle Clients",
"TestAllIndexers": "Prüfe alle Indexer",
"TheLatestVersionIsAlreadyInstalled": "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}",
"Time": "Zeit",
@@ -418,10 +418,10 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Der neue Indexer konnte nicht hinzugefügt werden, bitte erneut probieren.",
"UnableToAddANewNotificationPleaseTryAgain": "Die neue Benachrichtigung konnte nicht hinzugefügt werden, bitte erneut probieren.",
"UnableToLoadAppProfiles": "App-Profile können nicht geladen werden",
"UnableToLoadApplicationList": "Anwendungsliste kann nicht geladen werden",
"UnableToLoadBackups": "Backups konnten nicht geladen werden",
"ApplicationsLoadError": "Anwendungsliste kann nicht geladen werden",
"UnableToLoadBackups": "Sicherungen können nicht geladen werden",
"UnableToLoadDevelopmentSettings": "Entwicklereinstellungen konnten nicht geladen werden",
"UnableToLoadDownloadClients": "Downloader konnten nicht geladen werden",
"DownloadClientsLoadError": "Downloader konnten nicht geladen werden",
"UnableToLoadGeneralSettings": "Allgemeine Einstellungen konnten nicht geladen werden",
"UnableToLoadHistory": "Verlauf konnte nicht geladen werden",
"UnableToLoadIndexerProxies": "Indexer-Proxies können nicht geladen werden",
@@ -429,41 +429,41 @@
"UnableToLoadNotifications": "Benachrichtigungen konnten nicht geladen werden",
"UnableToLoadTags": "Tags konnten nicht geladen werden",
"UnableToLoadUISettings": "Oberflächen Einstellungen konnten nicht geladen werden",
"UnsavedChanges": "Ungespeicherte Änderungen",
"UnselectAll": "Keine wählen",
"UpdateAutomaticallyHelpText": "Updates automatisch herunteraden und installieren. Es kann weiterhin unter \"System -> Updates\" ein manuelles Update angestoßen werden",
"UnsavedChanges": "Nicht gespeicherte Änderungen",
"UnselectAll": "Alle abwählen",
"UpdateAutomaticallyHelpText": "Updates automatisch herunterladen und installieren. Sie können weiterhin über System: Updates installieren",
"UpdateCheckStartupNotWritableMessage": "Update kann nicht installiert werden, da der Startordner '{0}' vom Benutzer '{1}' nicht beschreibbar ist.",
"UpdateCheckStartupTranslocationMessage": "Update kann nicht installiert werden, da sich der Startordner '{0}' in einem App Translocation-Ordner befindet.",
"UpdateCheckUINotWritableMessage": "Update kann nicht installiert werden, da der Benutzeroberflächenordner '{0}' vom Benutzer '{1}' nicht beschreibbar ist.",
"UpdateMechanismHelpText": "Benutze {appName}'s Built-In Updater oder ein Script",
"UpdateMechanismHelpText": "Verwenden Sie den integrierten Updater von {appName} oder ein Skript",
"UpdateScriptPathHelpText": "Pfad zu einem benutzerdefinierten Skript, das ein extrahiertes Update-Paket übernimmt und den Rest des Update-Prozesses abwickelt",
"Updates": "Updates",
"Uptime": "Laufzeit",
"Updates": "Aktualisierung",
"Uptime": "Betriebszeit",
"Url": "Url",
"UrlBaseHelpText": "Für Reverse-Proxy-Unterstützung. Die Standardeinstellung leer",
"UseProxy": "Proxy benutzen",
"UrlBaseHelpText": "Für die Reverse-Proxy-Unterstützung ist der Standardwert leer",
"UseProxy": "Verwende Proxy",
"Usenet": "Usenet",
"UserAgentProvidedByTheAppThatCalledTheAPI": "UserAgent von der App welcher die API aufgerufen hat",
"Username": "Benutzername",
"Username": "Nutzername",
"Version": "Version",
"View": "Ansicht",
"Warn": "Warnung",
"Warn": "Achtung",
"Website": "Webseite",
"Wiki": "Wiki",
"Yes": "Ja",
"YesCancel": "Ja, abbrechen",
"YesCancel": "Ja Abbrechen",
"Yesterday": "Gestern",
"OnHealthRestoredHelpText": "Bei Wiederherstellung des Zustands",
"OnHealthRestored": "Bei Wiederherstellung des Zustands",
"StopSelecting": "Auswahl stoppen",
"ApplicationURL": "Anwendungs-URL",
"ApplicationUrlHelpText": "Die externe URL der Anwendung inklusive http(s)://, Port und URL-Basis",
"ApplicationUrlHelpText": "Die externe URL dieser Anwendung, einschließlich http(s)://, Port und URL-Basis",
"ApplyChanges": "Änderungen anwenden",
"CountIndexersSelected": "{0} Indexer ausgewählt",
"CountIndexersSelected": "{count} Indexer ausgewählt",
"DeleteSelectedDownloadClients": "Lösche Download Client(s)",
"DeleteSelectedApplicationsMessageText": "Indexer '{0}' wirklich löschen?",
"DeleteSelectedDownloadClientsMessageText": "Indexer '{0}' wirklich löschen?",
"DeleteSelectedIndexersMessageText": "Indexer '{0}' wirklich löschen?",
"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",
"Implementation": "Integration",
"ManageDownloadClients": "Verwalte Download Clienten",
@@ -471,11 +471,11 @@
"NoIndexersFound": "Keine Indexer gefunden",
"Theme": "Design",
"Season": "Staffel",
"ApplyTagsHelpTextAdd": "Hinzufügen: Füge neu Tags zu den existierenden Tags hinzu",
"ApplyTagsHelpTextAdd": "Hinzufügen: Fügen Sie die Tags der vorhandenen Tag-Liste hinzu",
"ApplyTagsHelpTextHowToApplyApplications": "Wie werden Tags zu ausgewählten Autoren zugeteilt",
"ApplyTagsHelpTextHowToApplyIndexers": "Wie werden Tags zu ausgewählten Indexern zugeteilt",
"ApplyTagsHelpTextRemove": "Entfernen: Eingegebene Tags entfernen",
"ApplyTagsHelpTextReplace": "Ersetzen: Nur eingegebene Tags übernehmen und vorhandene entfernen( keine Tags eingeben um alle zu entfernen )",
"ApplyTagsHelpTextHowToApplyIndexers": "So wenden Sie Tags auf die ausgewählten Indexer an",
"ApplyTagsHelpTextRemove": "Entfernen: Die eingegebenen Tags entfernen",
"ApplyTagsHelpTextReplace": "Ersetzen: Ersetzen Sie die Tags durch die eingegebenen Tags (geben Sie keine Tags ein, um alle Tags zu löschen).",
"DownloadClientPriorityHelpText": "Priorisiere mehrere Downloader. Rundlauf-Verfahren wird für Downloader mit der gleichen Priorität verwendet.",
"EditSelectedIndexers": "Ausgewähle Indexer bearbeiten",
"SelectIndexers": "Indexer suchen",
@@ -491,20 +491,20 @@
"Artist": "Künstler",
"Author": "Autor",
"Book": "Buch",
"ConnectionLostReconnect": "Radarr wird automatisch versuchen zu verbinden oder klicke unten auf neuladen.",
"ConnectionLostToBackend": "Radarr hat die Verbindung zum Backend verloren und muss neugeladen werden.",
"ConnectionLostReconnect": "{appName} wird versuchen, automatisch eine Verbindung herzustellen, oder Sie können unten auf „Neu laden“ klicken.",
"ConnectionLostToBackend": "{appName} hat die Verbindung zum Backend verloren und muss neu geladen werden, um die Funktionalität wiederherzustellen.",
"RecentChanges": "Kürzliche Änderungen",
"WhatsNew": "Was gibt's Neues?",
"WhatsNew": "Was ist neu?",
"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: {0}",
"AuthBasic": "Einfach (Browser Popup)",
"AuthForm": "Formular (Login Seite)",
"DisabledForLocalAddresses": "Für Lokale Adressen deaktivieren",
"AuthBasic": "Basis (Browser-Popup)",
"AuthForm": "Formulare (Anmeldeseite)",
"DisabledForLocalAddresses": "Für lokale Adressen deaktiviert",
"None": "Keine",
"ResetAPIKeyMessageText": "Bist du sicher, dass du den API-Schlüssel zurücksetzen willst?",
"ResetAPIKeyMessageText": "Sind Sie sicher, dass Sie Ihren API-Schlüssel zurücksetzen möchten?",
"AddCustomFilter": "Eigenen Filter hinzufügen",
"AddApplication": "Application hinzufügen",
"AddCategory": "Kategorie hinzufügen",
@@ -532,5 +532,15 @@
"AuthenticationRequiredUsernameHelpTextWarning": "Gib einen neuen Benutzernamen ein",
"AuthenticationMethodHelpTextWarning": "Bitte wähle eine gültige Authentifizierungsmethode aus",
"AuthenticationRequiredPasswordHelpTextWarning": "Gib ein neues Passwort ein",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Neues Passwort bestätigen"
"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}",
"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}",
"EditApplicationImplementation": "Anwendung hinzufügen - {implementationName}",
"EditIndexerProxyImplementation": "Indexer Proxy hinzufügen - {implementationName}"
}

View File

@@ -122,7 +122,7 @@
"ChangeHasNotBeenSavedYet": "Η αλλαγή δεν έχει αποθηκευτεί ακόμα",
"CloneProfile": "Προφίλ κλώνου",
"CloseCurrentModal": "Κλείσιμο τρέχοντος modal",
"DBMigration": "Μετεγκατάσταση DB",
"DatabaseMigration": "Μετεγκατάσταση DB",
"DeleteApplicationMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε την ειδοποίηση \"{0}\";",
"DeleteBackupMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το αντίγραφο ασφαλείας \"{0}\";",
"DeleteIndexerProxyMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη λίστα \"{0}\";",
@@ -235,7 +235,7 @@
"Security": "Ασφάλεια",
"Tasks": "Καθήκοντα",
"UnableToLoadBackups": "Δεν είναι δυνατή η φόρτωση αντιγράφων ασφαλείας",
"UnableToLoadDownloadClients": "Δεν είναι δυνατή η φόρτωση πελατών λήψης",
"DownloadClientsLoadError": "Δεν είναι δυνατή η φόρτωση πελατών λήψης",
"UpdateMechanismHelpText": "Χρησιμοποιήστε το ενσωματωμένο πρόγραμμα ενημέρωσης του {appName} ή ένα script",
"AnalyticsEnabledHelpText": "Στείλτε ανώνυμες πληροφορίες χρήσης και σφάλματος στους διακομιστές του {appName}. Αυτό περιλαμβάνει πληροφορίες στο πρόγραμμα περιήγησής σας, ποιες σελίδες {appName} WebUI χρησιμοποιείτε, αναφορά σφαλμάτων καθώς και έκδοση λειτουργικού συστήματος και χρόνου εκτέλεσης. Θα χρησιμοποιήσουμε αυτές τις πληροφορίες για να δώσουμε προτεραιότητα σε λειτουργίες και διορθώσεις σφαλμάτων.",
"AppDataDirectory": "Κατάλογος AppData",
@@ -363,7 +363,7 @@
"QueryOptions": "Επιλογές ερωτήματος",
"SearchIndexers": "Αναζήτηση ευρετηρίων",
"SearchType": "Τύπος αναζήτησης",
"UnableToLoadApplicationList": "Δεν είναι δυνατή η φόρτωση της λίστας εφαρμογών",
"ApplicationsLoadError": "Δεν είναι δυνατή η φόρτωση της λίστας εφαρμογών",
"AddRemoveOnly": "Μόνο προσθήκη και αφαίρεση",
"ProwlarrSupportsAnyDownloadClient": "Το {appName} υποστηρίζει οποιοδήποτε από τα προγράμματα-πελάτες λήψης που αναφέρονται παρακάτω.",
"Query": "Ερώτηση",

View File

@@ -35,7 +35,7 @@
"AnalyticsEnabledHelpText": "Send anonymous usage and error information to {appName}'s servers. This includes information on your browser, which {appName} WebUI pages you use, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes.",
"ApiKey": "API Key",
"ApiKeyValidationHealthCheckMessage": "Please update your API key to be at least {0} characters long. You can do this via settings or the config file",
"AppDataDirectory": "AppData directory",
"AppDataDirectory": "AppData Directory",
"AppDataLocationHealthCheckMessage": "Updating will not be possible to prevent deleting AppData on Update",
"AppProfileInUse": "App Profile in Use",
"AppProfileSelectHelpText": "App profiles are used to control RSS, Automatic Search and Interactive Search settings on application sync",
@@ -47,11 +47,12 @@
"ApplicationLongTermStatusCheckSingleClientMessage": "Applications unavailable due to failures for more than 6 hours: {0}",
"ApplicationStatusCheckAllClientMessage": "All applications are unavailable due to failures",
"ApplicationStatusCheckSingleClientMessage": "Applications unavailable due to failures: {0}",
"ApplicationTagsHelpText": "Sync Indexers to this application that have no tags or that have 1 or more matching tags",
"ApplicationTagsHelpText": "Sync Indexers to this application that have one or more matching tags. If no tags are listed here, then no indexers will be prevented from syncing due to their tags.",
"ApplicationTagsHelpTextWarning": "Tags should be used with caution, they can have unintended effects. An app with a tag will only sync with indexers having the same tag.",
"ApplicationURL": "Application URL",
"ApplicationUrlHelpText": "This application's external URL including http(s)://, port and URL base",
"Applications": "Applications",
"ApplicationsLoadError": "Unable to load application list",
"Apply": "Apply",
"ApplyChanges": "Apply Changes",
"ApplyTags": "Apply Tags",
@@ -133,8 +134,8 @@
"CountIndexersSelected": "{count} indexer(s) selected",
"Custom": "Custom",
"CustomFilters": "Custom Filters",
"DBMigration": "DB Migration",
"Database": "Database",
"DatabaseMigration": "Database Migration",
"Date": "Date",
"Dates": "Dates",
"DefaultNameCopiedProfile": "{name} - Copy",
@@ -171,12 +172,16 @@
"Docker": "Docker",
"Donations": "Donations",
"DownloadClient": "Download Client",
"DownloadClientAriaSettingsDirectoryHelpText": "Optional location to put downloads in, leave blank to use the default Aria2 location",
"DownloadClientCategory": "Download Client Category",
"DownloadClientPriorityHelpText": "Prioritize multiple Download Clients. Round-Robin is used for clients with the same priority.",
"DownloadClientQbittorrentSettingsContentLayout": "Content Layout",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Whether to use qBittorrent's configured content layout, the original layout from the torrent or always create a subfolder (qBittorrent 4.3.2+)",
"DownloadClientSettings": "Download Client Settings",
"DownloadClientStatusCheckAllClientMessage": "All download clients are unavailable due to failures",
"DownloadClientStatusCheckSingleClientMessage": "Download clients unavailable due to failures: {0}",
"DownloadClients": "Download Clients",
"DownloadClientsLoadError": "Unable to load download clients",
"DownloadClientsSettingsSummary": "Download clients configuration for integration into {appName} UI search",
"Duration": "Duration",
"Edit": "Edit",
@@ -198,7 +203,7 @@
"EnableInteractiveSearch": "Enable Interactive Search",
"EnableInteractiveSearchHelpText": "Will be used when interactive search is used",
"EnableRss": "Enable RSS",
"EnableRssHelpText": "Enable Rss feed for Indexer",
"EnableRssHelpText": "Enable RSS feed for Indexer",
"EnableSSL": "Enable SSL",
"EnableSslHelpText": " Requires restart running as administrator to take effect",
"Enabled": "Enabled",
@@ -246,7 +251,7 @@
"HomePage": "Home Page",
"Host": "Host",
"Hostname": "Hostname",
"Id": "Id",
"Id": "ID",
"IgnoredAddresses": "Ignored Addresses",
"IllRestartLater": "I'll restart later",
"Implementation": "Implementation",
@@ -264,6 +269,7 @@
"IndexerFlags": "Indexer Flags",
"IndexerHealthCheckNoIndexers": "No indexers enabled, {appName} will not return search results",
"IndexerHistoryLoadError": "Error loading indexer history",
"IndexerId": "Indexer ID",
"IndexerInfo": "Indexer Info",
"IndexerLongTermStatusCheckAllClientMessage": "All indexers are unavailable due to failures for more than 6 hours",
"IndexerLongTermStatusCheckSingleClientMessage": "Indexers unavailable due to failures for more than 6 hours: {0}",
@@ -277,7 +283,7 @@
"IndexerProxyStatusCheckAllClientMessage": "All proxies are unavailable due to failures",
"IndexerProxyStatusCheckSingleClientMessage": "Proxies unavailable due to failures: {0}",
"IndexerQuery": "Indexer Query",
"IndexerRss": "Indexer Rss",
"IndexerRss": "Indexer RSS",
"IndexerSettingsSummary": "Configure various global Indexer settings including Proxies.",
"IndexerSite": "Indexer Site",
"IndexerStatus": "Indexer Status",
@@ -313,6 +319,7 @@
"MIA": "MIA",
"MaintenanceRelease": "Maintenance Release: bug fixes and other improvements. See Github Commit History for more details",
"ManageApplications": "Manage Applications",
"ManageClients": "Manage Clients",
"ManageDownloadClients": "Manage Download Clients",
"Manual": "Manual",
"MappedCategories": "Mapped Categories",
@@ -336,6 +343,7 @@
"NewznabUrl": "Newznab Url",
"NextExecution": "Next Execution",
"No": "No",
"NoApplicationsFound": "No applications found",
"NoBackupsAreAvailable": "No backups are available",
"NoChange": "No Change",
"NoChanges": "No Changes",
@@ -358,6 +366,8 @@
"NotificationTriggers": "Notification Triggers",
"NotificationTriggersHelpText": "Select which events should trigger this notification",
"Notifications": "Notifications",
"NotificationsEmailSettingsUseEncryption": "Use Encryption",
"NotificationsEmailSettingsUseEncryptionHelpText": "Whether to prefer using encryption if configured on the server, to always use encryption via SSL (Port 465 only) or StartTLS (any other port) or to never use encryption",
"OAuthPopupMessage": "Pop-ups are being blocked by your browser",
"Ok": "Ok",
"OnApplicationUpdate": "On Application Update",
@@ -498,7 +508,7 @@
"Source": "Source",
"StartTypingOrSelectAPathBelow": "Start typing or select a path below",
"Started": "Started",
"StartupDirectory": "Startup directory",
"StartupDirectory": "Startup Directory",
"Stats": "Stats",
"Status": "Status",
"StopSelecting": "Stop Selecting",
@@ -561,10 +571,8 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Unable to add a new indexer proxy, please try again.",
"UnableToAddANewNotificationPleaseTryAgain": "Unable to add a new notification, please try again.",
"UnableToLoadAppProfiles": "Unable to load app profiles",
"UnableToLoadApplicationList": "Unable to load application list",
"UnableToLoadBackups": "Unable to load backups",
"UnableToLoadDevelopmentSettings": "Unable to load Development settings",
"UnableToLoadDownloadClients": "Unable to load download clients",
"UnableToLoadGeneralSettings": "Unable to load General settings",
"UnableToLoadHistory": "Unable to load history",
"UnableToLoadIndexerProxies": "Unable to load Indexer Proxies",

View File

@@ -12,8 +12,8 @@
"Edit": "Editar",
"DownloadClientStatusCheckSingleClientMessage": "Gestores de descargas no disponibles debido a errores: {0}",
"DownloadClientStatusCheckAllClientMessage": "Los gestores de descargas no están disponibles debido a errores",
"DownloadClients": "Gestores de Descargas",
"Delete": "Borrar",
"DownloadClients": "Clientes de descarga",
"Delete": "Eliminar",
"Dates": "Fechas",
"Date": "Fecha",
"CustomFilters": "Filtros Personalizados",
@@ -79,7 +79,7 @@
"Failed": "Fallido",
"EventType": "Tipo de Evento",
"DownloadClientsSettingsSummary": "Configuración del cliente de descargas para la integración en {appName} UI search",
"DownloadClient": "Gestor de Descargas",
"DownloadClient": "Cliente de descarga",
"Details": "Detalles",
"ConnectSettingsSummary": "Notificaciones y scripts personalizados",
"Warn": "Advertencia",
@@ -132,13 +132,13 @@
"Fixed": "Arreglado",
"EnableSslHelpText": " Requiere reiniciar la aplicación como administrador para que surta efecto",
"Enable": "Habilitar",
"DownloadClientSettings": "Ajustes de Gestor de Descargas",
"DownloadClientSettings": "Opciones del cliente de descarga",
"Docker": "Docker",
"DeleteTag": "Borrar Etiqueta",
"DeleteNotification": "Borrar Notificación",
"DeleteDownloadClient": "Borrar Gestor de Descargas",
"DeleteBackup": "Borrar Backup",
"DBMigration": "Migración de DB",
"DeleteTag": "Eliminar Etiqueta",
"DeleteNotification": "Borrar Notificacion",
"DeleteDownloadClient": "Borrar cliente de descarga",
"DeleteBackup": "Eliminar copia de seguridad",
"DatabaseMigration": "Migración de DB",
"CloneProfile": "Clonar Perfil",
"ClientPriority": "Prioridad del Cliente",
"ChangeHasNotBeenSavedYet": "El cambio aún no se ha guardado",
@@ -171,7 +171,7 @@
"UpdateAutomaticallyHelpText": "Descargar e instalar actualizaciones automáticamente. Se podrán instalar desde Sistema: Actualizaciones también",
"UnableToLoadTags": "No se pueden cargar las Etiquetas",
"UnableToLoadNotifications": "No se pueden cargar las Notificaciones",
"UnableToLoadDownloadClients": "No se puden cargar los gestores de descargas",
"DownloadClientsLoadError": "No se puden cargar los gestores de descargas",
"UISettings": "Ajustes del UI",
"Torrents": "Torrents",
"TestAllClients": "Comprobar Todos los Gestores",
@@ -320,7 +320,7 @@
"Filters": "Filtros",
"HistoryCleanupDaysHelpText": "Ajustar a 0 para desactivar la limpieza automática",
"HistoryCleanupDaysHelpTextWarning": "Los archivos en la papelera de reciclaje más antiguos que el número de días seleccionado serán limpiados automáticamente",
"OnGrab": "Al Capturar",
"OnGrab": "Al Capturar lanzamiento",
"OnHealthIssue": "En Problema de Salud",
"TestAllIndexers": "Comprobar Todos los Indexers",
"NotificationTriggersHelpText": "Seleccione qué eventos deben activar esta notificación",
@@ -351,7 +351,7 @@
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent proporcionado por la aplicación llamó a la API",
"InstanceName": "Nombre de Instancia",
"InstanceNameHelpText": "Nombre de instancia en pestaña y para nombre de aplicación en Syslog",
"Database": "Base de Datos",
"Database": "Base de datos",
"Duration": "Duración",
"LastDuration": "Duración",
"LastExecution": "Última ejecución",
@@ -373,8 +373,8 @@
"Label": "Etiqueta",
"Theme": "Tema",
"ApplyTagsHelpTextAdd": "Añadir: Añadir a las etiquetas la lista existente de etiquetas",
"DeleteSelectedApplicationsMessageText": "Seguro que quieres eliminar el indexer '{0}'?",
"DeleteSelectedDownloadClients": "Borrar Gestor de Descargas",
"DeleteSelectedApplicationsMessageText": "¿Estás seguro que quieres eliminar {count} aplicación(es) seleccionada(s)?",
"DeleteSelectedDownloadClients": "Borrar gestor de descarga(s)",
"DeleteSelectedIndexersMessageText": "¿Está seguro de querer eliminar {count} indexador(es) seleccionado(s)?",
"DeleteSelectedDownloadClientsMessageText": "¿Está seguro de querer eliminar {count} cliente(s) de descarga seleccionado(s)?",
"ApplyTagsHelpTextHowToApplyApplications": "Cómo añadir etiquetas a las películas seleccionadas",
@@ -426,12 +426,12 @@
"EditIndexerProxyImplementation": "Agregar Condición - { implementationName}",
"AppUpdated": "{appName} Actualizada",
"AppUpdatedVersion": "{appName} ha sido actualizado a la versión `{version}`, para obtener los cambios más recientes, necesitaras recargar {appName}",
"AddApplicationImplementation": "Agregar Condición - { implementationName}",
"AddApplicationImplementation": "Agregar aplicación - { implementationName}",
"AddConnectionImplementation": "Añadir Conexión - {implementationName}",
"AddIndexerImplementation": "Agregar Condición - { implementationName}",
"AddIndexerProxyImplementation": "Agregar Condición - { implementationName}",
"EditApplicationImplementation": "Agregar Condición - { implementationName}",
"EditConnectionImplementation": "Agregar Condición - { implementationName}",
"EditConnectionImplementation": "Editar conexión - {implementationName}",
"AddDownloadClientImplementation": "Añadir Cliente de Descarga - {implementationName}",
"AuthenticationMethod": "Método de autenticación",
"AuthenticationMethodHelpTextWarning": "Por favor selecciona un método válido de autenticación",
@@ -460,10 +460,10 @@
"DeleteAppProfile": "Eliminar Perfil de Aplicación",
"AddSyncProfile": "Agregar Perfil de Sincronización",
"AppSettingsSummary": "Aplicaciones y configuraciones para determinar como {appName} interactúa con sus programas de PVR",
"AddCategory": "Agregar Categoría",
"AddCategory": "Agregar categoría",
"AppProfileSelectHelpText": "Los perfiles de la aplicación se usan para controlar la configuración por aplicación de RSS, Búsqueda Automática y Búsqueda Interactiva",
"ActiveApps": "Aplicaciones Activas",
"ActiveIndexers": "Indexadores Activos",
"ActiveApps": "Aplicaciones activas",
"ActiveIndexers": "Indexadores activos",
"AudioSearch": "Búsqueda de Música",
"Auth": "Autenticación",
"BasicSearch": "Búsqueda Básica",
@@ -492,5 +492,29 @@
"Id": "Id",
"EditCategory": "Editar categoría",
"EditSyncProfile": "Editar perfil de sincronización",
"EnableIndexer": "Habilitar indexador"
"EnableIndexer": "Habilitar indexador",
"InvalidUILanguage": "Su interfaz de usuario está configurada en un idioma no válido, corríjalo y guarde la configuración",
"DownloadClientQbittorrentSettingsContentLayout": "Diseño del contenido",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Si usar el diseño de contenido configurado de qBittorrent, el diseño original del torrent o siempre crear una subcarpeta (qBittorrent 4.3.2+)",
"EnableRssHelpText": "Habilitar feed RSS para el indexador",
"days": "días",
"ElapsedTime": "Tiempo transcurrido",
"GrabTitle": "Capturar título",
"SearchAllIndexers": "Buscar en todos los Indexadores",
"Website": "Sitio web",
"Redirect": "Redirección",
"RssQueries": "Consultas RSS",
"SeedRatio": "Ratio de siembra",
"RssFeed": "Feed RSS",
"SearchType": "Tipo de búsqueda",
"RepeatSearch": "Repetir búsqueda",
"SeedRatioHelpText": "El ratio que un torrent debe alcanzar antes de detenerse, si está vacío se usará el valor por defecto",
"SeedTime": "Tiempo de siembra",
"SearchTypes": "Tipos de búsquedas",
"DeleteIndexerProxy": "Eliminar proxy indexador",
"OnGrabHelpText": "Al Capturar lanzamiento",
"SeedTimeHelpText": "El ratio que un torrent debe alcanzar antes de detenerse, si está vacío se usará el valor por defecto",
"IndexerTagsHelpTextWarning": "Las etiquetas deben utilizarse con cuidado, pueden tener efectos involuntarios. Una aplicación con una etiqueta solo sincronizara con Indexadores que tengan la misma etiqueta.",
"TVSearchTypes": "Tipos de búsquedas",
"DownloadClientAriaSettingsDirectoryHelpText": "Ubicación opcional en la que poner las descargas, dejar en blanco para usar la ubicación de Aria2 predeterminada"
}

View File

@@ -1,11 +1,11 @@
{
"IndexerProxyStatusCheckSingleClientMessage": "Välityspalvelimet eivät ole käytettävissä virheiden vuoksi: {0}",
"Logging": "Kirjaus",
"LogLevel": "Kirjauksen taso",
"Logging": "Lokikirjaus",
"LogLevel": "Lokikirjauksen laajuus",
"MovieIndexScrollTop": "Elokuvakirjasto: vieritä ylös",
"Apply": "Käytä",
"ClientPriority": "Lataustyökalun painotus",
"IndexerPriorityHelpText": "Tietolähteen painotus: 1 (korkein) - 50 (matalin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen sieppauspäätökseen. Kaikkia käytössä olevia tietolähteitä käytetään edelleen RSS-synkronointiin ja hakuun.",
"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.",
"Manual": "Manuaalinen",
"Add": "Lisää",
"Reload": "Lataa uudelleen",
@@ -25,67 +25,67 @@
"SettingsTimeFormat": "Kellonajan esitys",
"Message": "Viesti",
"Seeders": "Jakajat",
"TestAll": "Testaa kaikki",
"TestAll": "Kaikkien testaus",
"AddDownloadClient": "Lisää lataustyökalu",
"CustomFilters": "Mukautetut suodattimet",
"CustomFilters": "Omat suodattimet",
"DeleteTag": "Poista tunniste",
"EnableRss": "RSS-syöte",
"Filter": "Suodata",
"EnableRss": "Käytä RSS-syötettä",
"Filter": "Suodatus",
"Fixed": "Korjattu",
"FocusSearchBox": "Kohdista hakukenttä",
"ForMoreInformationOnTheIndividualDownloadClients": "Lue lisää lataustyökalusta painamalla 'Lisätietoja'.",
"HideAdvanced": "Piilota edistyneet",
"ForMoreInformationOnTheIndividualDownloadClients": "Saat yksittäisestä lataustyökalusta lisätietoja painamalla sen ohessa olevaa \"Lisätietoja\"-painiketta.",
"HideAdvanced": "Piilota lisäasetukset",
"History": "Historia",
"MIA": "Puuttuu",
"New": "Uusi",
"PageSizeHelpText": "Sivulla näytettävien kohteiden määrä",
"New": "Uutta",
"PageSizeHelpText": "Sivukohtainen kohdemäärä.",
"Proxy": "Välityspalvelin",
"ProxyBypassFilterHelpText": "Käytä erottimena ',' ja '*.' jokerimerkkinä aliverkkotunnuksille (esim. www.esimerkki.fi,*.esimerkki.fi)",
"ProxyBypassFilterHelpText": "Käytä aliverkkotunnusten erottimena pilkkua (,) ja jokerimerkkinä tähteä ja pistettä (*.). Esimerkkejä: www.esimerkki.fi,*.esimerkki.fi.",
"Reddit": "Reddit",
"Refresh": "Päivitä",
"RefreshMovie": "Päivitä elokuva",
"ReleaseBranchCheckOfficialBranchMessage": "'{0}' ei ole kelvollinen {appName}-julkaisuhaara, et saa päivityksiä sen kautta",
"RestartRequiredHelpTextWarning": "Käyttöönotto vaatii uudelleenkäynnistyksen.",
"ReleaseBranchCheckOfficialBranchMessage": "\"{0}\" ei ole kelvollinen {appName}-julkaisuhaara ja tämän vuoksi et saa päivityksiä.",
"RestartRequiredHelpTextWarning": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.",
"Result": "Tulos",
"Settings": "Asetukset",
"SettingsLongDateFormat": "Pitkän päiväyksen esitys",
"SettingsShortDateFormat": "Lyhyen päiväyksen esitys",
"UnselectAll": "Poista kaikkien valinta",
"UnselectAll": "Tyhjennä valinnat",
"UpdateCheckStartupTranslocationMessage": "Päivitystä ei voi asentaa, koska käynnistyskansio '{0}' sijaitsee 'App Translocation' -kansiossa.",
"UpdateCheckUINotWritableMessage": "Päivitystä ei voi asentaa, koska käyttäjällä '{1}' ei ole kirjoitusoikeutta käyttöliittymäkansioon '{0}'.",
"UpdateMechanismHelpText": "Käytä {appName}in sisäänrakennettua päivitystoimintoa tai omaa komentosarjaasi.",
"UpdateCheckUINotWritableMessage": "Päivityksen asennus ei onnistu, koska käyttäjällä \"{1}\" ei ole kirjoitusoikeutta käyttöliittymäkansioon \"{0}\".",
"UpdateMechanismHelpText": "Käytä {appName}in sisäänrakennettua päivitystoimintoa tai komentosarjaa.",
"Enable": "Käytä",
"UI": "Käyttöliittymä",
"UrlBaseHelpText": "Käänteisen välityspalvelimen tuki (esim. \"http://[host]:[port]/[urlBase]\"). Käytä oletusta jättämällä tyhjäksi.",
"UrlBaseHelpText": "Lisää {appName}in URL-osoitteeseen jälkiliitteen, esim. \"http://[osoite]:[portti]/[URL-perusta]\". Oletusarvo on tyhjä.",
"Usenet": "Usenet",
"BackupNow": "Varmuuskopioi nyt",
"NoBackupsAreAvailable": "Varmuuskopioita ei ole saatavilla",
"UpdateCheckStartupNotWritableMessage": "Päivitystä ei voi asentaa, koska käyttäjällä '{1}' ei ole kirjoitusoikeutta käynnistyskansioon '{0}'.",
"NoBackupsAreAvailable": "Varmuuskopioita ei ole käytettävissä",
"UpdateCheckStartupNotWritableMessage": "Päivitystä ei voida asentaa, koska käyttäjällä \"{1}\" ei ole kirjoitusoikeutta käynnistyskansioon \"{0}\".",
"Updates": "Päivitykset",
"UpdateScriptPathHelpText": "Polku komentosarjaan, joka käsittelee puretun päivitystiedoston ja hoitaa asennuksen loppuosuuden.",
"Uptime": "Käyttöaika",
"URLBase": "URL-perusta",
"UseProxy": "Käytä välityspalvelinta",
"Username": "Käyttäjätunnus",
"YesCancel": "Kyllä, peruuta",
"YesCancel": "Kyllä, peru",
"NoTagsHaveBeenAddedYet": "Tunnisteita ei ole vielä lisätty.",
"ApplyTags": "Tunnistetoimenpide",
"Authentication": "Todennus",
"AuthenticationMethodHelpText": "Vaadi käyttäjätunnus ja salasana {appName}in käyttöön.",
"BindAddressHelpText": "Toimiva IP-osoite, \"localhost\" tai \"*\" (tähti) kaikille verkkoliitännöille.",
"Authentication": "Tunnistautuminen",
"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 kytkentä",
"DeleteNotification": "Poista ilmoitus",
"Docker": "Docker",
"DownloadClient": "Lataustyökalu",
"Language": "Kieli",
"Search": "Haku",
"Details": "Tiedot",
"InteractiveSearch": "Vuorovaikutteinen haku",
"Interval": "Aikaväli",
"InteractiveSearch": "Manuaalihaku",
"Interval": "Ajoitus",
"KeyboardShortcuts": "Pikanäppäimet",
"LastWriteTime": "Viimeisin kirjoitusaika",
"LastWriteTime": "Viimeksi tallennettu",
"LogFiles": "Lokitiedostot",
"LogLevelTraceHelpTextWarning": "Jäljityskirjausta tulisi käyttää vain väliaikaisesti",
"LogLevelTraceHelpTextWarning": "Jäljityskirjausta tulee käyttää vain tilapäisesti.",
"Logs": "Lokitiedot",
"Mechanism": "Mekanismi",
"Name": "Nimi",
@@ -94,14 +94,14 @@
"Presets": "Esiasetukset",
"Priority": "Painotus",
"Protocol": "Protokolla",
"ProxyCheckBadRequestMessage": "Välityspalvelintesti epäonnistui. Tilakoodi: {0}",
"ProxyCheckBadRequestMessage": "Välityspalvelintesti epäonnistui. Tilakoodi: {0}.",
"ProxyCheckFailedToTestMessage": "Välityspalvelintesti epäonnistui: {0}",
"ProxyCheckResolveIpMessage": "Määritetyn välityspalvelimen \"{0}\" IP-osoitteen selvitys epäonnistui.",
"ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee syöttää vain tarvittaessa. Muussa tapauksessa jätä kentät tyhjiksi.",
"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 syöttää vain tarvittaessa. Muussa tapauksessa jätä kentät tyhjiksi.",
"ProxyUsernameHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.",
"Queue": "Jono",
"ReadTheWikiForMoreInformation": "Lue lisätietoja Wikistä",
"ReadTheWikiForMoreInformation": "Wikistä löydät lisää tietoja",
"ReleaseStatus": "Julkaisutila",
"RemovedFromTaskQueue": "Poistettu tehtäväjonosta",
"RemoveFilter": "Poista suodatin",
@@ -117,15 +117,15 @@
"Security": "Suojaus",
"SuggestTranslationChange": "Ehdota käännösmuutosta",
"System": "Järjestelmä",
"SystemTimeCheckMessage": "Järjestelmän aika on pielessä yli vuorokauden. Ajoitetut tehtävät eivät luultavasti toimi oikein ennen sen korjausta.",
"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.",
"TagsSettingsSummary": "Täältä näet kaikki tunnisteet käyttökohteineen ja voit poistaa sellaiset tunnisteet, joita ei ole määritetty millekään kohteelle.",
"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": "Kokeile",
"TestAllClients": "Testaa kaikki lataustyökalut",
"Test": "Testaa",
"TestAllClients": "Lataustyökalujen testaus",
"Time": "Aika",
"Title": "Nimi",
"Title": "Nimike",
"Tomorrow": "Huomenna",
"Torrent": "Torrent",
"Torrents": "Torrentit",
@@ -133,29 +133,29 @@
"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 tietolähdevälityspalvelimen lisäys epäonnistui. Yritä uudelleen.",
"UnableToLoadBackups": "Varmuuskopioiden lataus epäonnistui.",
"UnableToLoadDownloadClients": "Lataustyökalujen lataus eonnistui.",
"UnableToAddANewIndexerProxyPleaseTryAgain": "Uuden tiedonhaun välityspalvelimen lisäys epäonnistui. Yritä uudelleen.",
"UnableToLoadBackups": "Varmuuskopioiden lataus epäonnistui",
"DownloadClientsLoadError": "Lataustyökalujen lataus ei onistu",
"UnableToLoadGeneralSettings": "Yleisten asetusten lataus epäonnistui.",
"UpdateAutomaticallyHelpText": "Lataa ja asenna päivitykset automaattisesti. Voit edelleen asentaa ne myös lähteestä System:Updates.",
"Added": "Lisätty",
"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",
"AddingTag": "Tunniste lisätään",
"Age": "Ikä",
"All": "Kaikki",
"AllIndexersHiddenDueToFilter": "Aktiivinen suodatin on piilottanut kaikki tietolähteet.",
"Analytics": "Analytiikka",
"AnalyticsEnabledHelpText": "Lähetä nimettömiä käyttö- ja virhetietoja palvelimillemme. 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.",
"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": "API-avain",
"AppDataDirectory": "AppData-kansio",
"DBMigration": "Tietokannan siirto",
"DatabaseMigration": "Tietokannan siirto",
"Delete": "Poista",
"DeleteIndexerProxyMessageText": "Haluatko varmasti poistaa välityspalvelimen '{0}'?",
"DeleteNotificationMessageText": "Haluatko varmasti poistaa kytkennän '{0}'?",
"DeleteIndexerProxyMessageText": "Haluatko varmasti poistaa tietolähdevälityspalvelimen \"{name}\"?",
"DeleteNotificationMessageText": "Haluatko varmasti poistaa ilmoituspalvelun \"{name}\"?",
"Disabled": "Ei käytössä",
"DownloadClients": "Lataustyökalut",
"DownloadClientSettings": "Lataustyökalujen asetukset",
"DownloadClientStatusCheckAllClientMessage": "Yhtään lataustyökalua ei ole virheiden vuoksi käytettävissä",
"DownloadClientStatusCheckAllClientMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä",
"Mode": "Tila",
"MoreInfo": "Lisätietoja",
"SelectAll": "Valitse kaikki",
@@ -166,68 +166,68 @@
"ShowSearchHelpText": "Näytä hakupainike osoitettaessa.",
"Shutdown": "Sammuta",
"Size": "Koko",
"Sort": "Järjestä",
"Sort": "Järjestys",
"UnableToAddANewDownloadClientPleaseTryAgain": "Uuden lataustyökalun lisäys epäonnistui. Yitä uudelleen.",
"AppDataLocationHealthCheckMessage": "Päivitystä ei sallita, jotta AppData-kansion poisto päivityksen yhteydessä voidaan estää.",
"AppDataLocationHealthCheckMessage": "Päivityksiä ei sallita, jotta AppData-kansion poistaminen päivityksen yhteydessä voidaan estää.",
"UnableToLoadHistory": "Historian lataus epäonnistui.",
"UnableToLoadNotifications": "Kytkentöjen lataus epäonnistui.",
"UnableToLoadTags": "Tunnisteiden lataus eonnistui.",
"UnableToLoadTags": "Tunnisteiden lataus ei onnistu",
"UnableToLoadUISettings": "Käyttöliittymän asetuksien lataus epäonnistui.",
"UnsavedChanges": "Tallentamattomia muutoksia",
"UnsavedChanges": "Muutoksia ei ole tallennettu",
"Yesterday": "Eilen",
"ConnectionLost": "Yhteys on katkennut",
"DeleteDownloadClientMessageText": "Haluatko varmasti poistaa lataustyökalun '{0}'?",
"DeleteTagMessageText": "Haluatko varmasti poistaa tunnisteen '{0}'?",
"ConnectionLost": "Ei yhteyttä",
"DeleteDownloadClientMessageText": "Haluatko varmasti poistaa lataustyökalun \"{name}\"?",
"DeleteTagMessageText": "Haluatko varmasti poistaa tunnisteen \"{label}\"?",
"Discord": "Discord",
"Donations": "Lahjoitukset",
"Edit": "Muokkaa",
"EnableAutomaticSearchHelpText": "Profiilia käytetään automaattihauille, jotka suoritetaan käyttöliittymästä tai {appName}in toimesta.",
"Enabled": "Käytössä",
"EventType": "Tapahtumatyyppi",
"EventType": "Tapahtuman tyyppi",
"Exception": "Poikkeus",
"FeatureRequests": "Kehitysehdotukset",
"Grabbed": "Siepattu",
"Grabbed": "Kaapattu",
"IgnoredAddresses": "Ohitetut osoitteet",
"IllRestartLater": "Käynnistän uudelleen myöhemmin",
"Info": "Tiedot",
"Info": "Informatiivinen",
"LaunchBrowserHelpText": " Avaa {appName}in verkkokäyttöliittymä verkkoselaimeen sovelluksen käynnistyksen yhteydessä.",
"NoChanges": "Ei muutoksia",
"NoChanges": "Muutoksia ei ole",
"NoLeaveIt": "Ei, anna olla",
"PendingChangesMessage": "On tallentamattomia muutoksia. Haluatko varmasti poistua sivulta?",
"PendingChangesMessage": "Olet tehnyt muutoksia, joita ei ole vielä tallennettu. Haluatko varmasti poistua sivulta?",
"PendingChangesStayReview": "Älä poistu ja tarkista muutokset",
"Save": "Tallenna",
"SaveChanges": "Tallenna muutokset",
"SaveSettings": "Tallenna asetukset",
"Scheduled": "Ajoitettu",
"SettingsEnableColorImpairedModeHelpText": "Vaihtoehtoinen tyyli, joka auttaa erottamaan värikoodatut tiedot paremmin",
"Scheduled": "Ajoitukset",
"SettingsEnableColorImpairedModeHelpText": "Vaihtoehtoinen tyyli, joka auttaa erottamaan värikoodatut tiedot paremmin.",
"SettingsShowRelativeDates": "Suhteellisten päiväysten esitys",
"SettingsShowRelativeDatesHelpText": "Näytä suhteutetut (tänään/eilen/yms.) absoluuttisten sijaan",
"ShowSearch": "Näytä haku",
"Source": "Lähde",
"Source": "Lähdekoodi",
"SSLPort": "SSL-portti",
"StartTypingOrSelectAPathBelow": "Aloita kirjoitus tai valitse sijainti alta",
"StartupDirectory": "Käynnistyskansio",
"TableOptions": "Taulukkoasetukset",
"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": "Kytkennän lisäys epäonnistui. Yritä uudelleen.",
"Version": "Versio",
"View": "Näytä",
"Warn": "Varoita",
"View": "Näkymä",
"Warn": "Varoitus",
"Wiki": "Wiki",
"Port": "Portti",
"Automatic": "Automaattinen",
"AutomaticSearch": "Automaattihaku",
"Backup": "Varmuuskopio",
"BackupFolderHelpText": "Suhteelliset polut kohdistuvat sovelluksen AppData-kansioon.",
"BackupIntervalHelpText": "Automaattisen varmuuskopioinnin aikaväli",
"BackupRetentionHelpText": "Säilytysjaksoa vanhemmat automaattiset varmuuskopiot poistetaan automaattisesti.",
"Backup": "Varmuuskopiointi",
"BackupFolderHelpText": "Suhteelliset tiedostosijainnit ovat {appName}in AppData-kansiossa.",
"BackupIntervalHelpText": "Tietokannan ja asetusten automaattisen varmuuskopioinnin ajoitus.",
"BackupRetentionHelpText": "Säilytysjaksoa vanhemmat varmuuskopiot siivotaan automaattisesti.",
"Backups": "Varmuuskopiot",
"BeforeUpdate": "Ennen päivitystä",
"BindAddress": "Sidososoite",
"Branch": "Kehityshaara",
"BranchUpdate": "Sovelluksen versiopäivityksiin käytettävä kehityshaara.",
"Branch": "Haara",
"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",
@@ -236,29 +236,29 @@
"CertificateValidationHelpText": "Muuta HTTPS-varmennevahvistuksen tarkkuutta. Älä muuta, jollet ymmärrä tähän liittyviä riskejä.",
"ChangeHasNotBeenSavedYet": "Muutosta ei ole vielä tallennettu",
"Clear": "Tyhjennä",
"CloneProfile": "Kloonaa profiili",
"CloneProfile": "Monista profiili",
"CloseCurrentModal": "Sulje nykyinen ikkuna",
"Columns": "Sarakkeet",
"Component": "Komponentti",
"Connections": "Kytkennät",
"ConnectSettings": "Kytkentöjen asetukset",
"Connections": "Yhteydet",
"ConnectSettings": "Kytkösasetukset",
"CouldNotConnectSignalR": "SignalR-kirjastoa ei tavoitettu, eikä käyttöliittymää päivitetä",
"Custom": "Mukautettu",
"DeleteApplicationMessageText": "Haluatko varmasti poistaa sovelluksen \"{0}\"?",
"DeleteApplicationMessageText": "Haluatko varmasti poistaa sovelluksen \"{name}\"?",
"DeleteBackup": "Poista varmuuskopio",
"DeleteBackupMessageText": "Haluatko varmasti poistaa varmuuskopion '{0}'?",
"DeleteBackupMessageText": "Haluatko varmasti poistaa varmuuskopion \"{name}\"?",
"DeleteDownloadClient": "Poista lataustyökalu",
"DownloadClientStatusCheckSingleClientMessage": "Lataustyökalut eivät ole virheiden vuoksi käytettävissä: {0}",
"DownloadClientStatusCheckSingleClientMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä: {0}",
"EditIndexer": "Muokkaa tietolähdettä",
"EnableAutomaticSearch": "Automaattihaku",
"EnableInteractiveSearch": "Vuorovaikutteinen haku",
"EnableInteractiveSearchHelpText": "Profiilia käytetään vuorovaikutteisen haun yhteydessä.",
"EnableAutomaticSearch": "Käytä automaattihakua",
"EnableInteractiveSearch": "Käytä manuaalihakua",
"EnableInteractiveSearchHelpText": "Profiilia käytetään manuaalihakuun.",
"EnableSSL": "SSL-salaus",
"EnableSslHelpText": " Käyttöönotto edellyttää uudelleenkäynnistystä järjestelmänvalvojan oikeuksilla.",
"EnableSslHelpText": " Käyttöönotto vaatii uudelleenkäynnistyksen järjestelmänvavojan oikeuksilla.",
"Error": "Virhe",
"ErrorLoadingContents": "Sisällönlatauksen virhe",
"ErrorLoadingContents": "Virhe ladattaessa sisältöjä",
"Events": "Tapahtumat",
"ExistingTag": "Olemassa oleva tunniste",
"ExistingTag": "Tunniste on jo olemassa",
"Failed": "Epäonnistui",
"Filename": "Tiedostonimi",
"Files": "Tiedostot",
@@ -266,10 +266,10 @@
"General": "Yleiset",
"GeneralSettings": "Yleiset asetukset",
"GeneralSettingsSummary": "Portti, SSL-salaus, käyttäjänimi ja salasana, välityspalvelin, analytiikka ja päivitykset.",
"Grabs": "Sieppaukset",
"Health": "Kunto",
"Grabs": "Kaappaukset",
"Health": "Terveys",
"Level": "Taso",
"HealthNoIssues": "Kokoonpanossasi ei ole ongelmia.",
"HealthNoIssues": "Kokoonpanossasi ei ole ongelmia",
"HomePage": "Verkkosivusto",
"Host": "Osoite",
"Hostname": "Osoite",
@@ -283,7 +283,7 @@
"IndexerStatusCheckAllClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi",
"IndexerStatusCheckSingleClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi: {0}",
"NoChange": "Ei muutosta",
"NoLogFiles": "Ei lokitiedostoja",
"NoLogFiles": "Lokitiedostoja ei ole",
"SSLCertPasswordHelpText": "PFX-tiedoston salasana",
"SSLCertPath": "SSL-varmenteen sijainti",
"SSLCertPathHelpText": "PFX-tiedoston sijainti",
@@ -292,31 +292,31 @@
"NoUpdatesAreAvailable": "Päivityksiä ei ole saatavilla",
"OAuthPopupMessage": "Selaimesi estää ponnahdukset",
"Ok": "Ok",
"OnHealthIssueHelpText": "Kuntoon liittyvä ongelma",
"OnHealthIssueHelpText": "Vakausongelmat",
"OpenBrowserOnStart": "Avaa selain käynnistettäessä",
"OpenThisModal": "Avaa tämä ikkuna",
"Options": "Valinnat",
"PackageVersion": "Pakettiversio",
"Options": "Asetukset",
"PackageVersion": "Paketin versio",
"PageSize": "Sivun koko",
"Password": "Salasana",
"PendingChangesDiscardChanges": "Hylkää muutokset ja poistu",
"PortNumber": "Portti",
"PortNumber": "Portin numero",
"RestoreBackup": "Palauta varmuuskopio",
"Retention": "Säilytys",
"UILanguageHelpText": "Käyttöliittymä näytetään tällä kielellä.",
"UILanguageHelpTextWarning": "Käyttöönotto vaatii selaimen sivupäivityksen.",
"UILanguageHelpText": "{appName}in käyttöliittymän kieli.",
"UILanguageHelpTextWarning": "Selaimen sivupäivitys vaaditaan",
"UISettings": "Käyttöliittymän asetukset",
"DownloadClientsSettingsSummary": "{appName}in käyttöliittymästä suoritettavien hakujen yhteydessä käytettävien lataustyökalujen määritykset.",
"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 ohjaa sieppaus suoraan sen sijaan, että se välitettäisiin Prowlarin kautta.",
"RedirectHelpText": "Uudelleenohjaa tietolähteeltä saapuvat latauspyynnöt ja välitä kaappaus suoraan välittämättä sitä {appName}in välityksellä.",
"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 vanhentuneita tai niitä on päivitetty: {0}. Poista ja/tai lisää ne Prowlariin uudelleen.",
"IndexerProxy": "Tietolähteen välityspalvelin",
"IndexerObsoleteCheckMessage": "Tietolähteet ovat poistuneet tai ne ovat muuttuneet: {0}. Poista ja/tai lisää ne {appName}iin uudelleen.",
"IndexerProxy": "Tiedonhaun välityspalvelin",
"IndexerSettingsSummary": "Määritä useita globaaleita tietolähdeasetuksia, kuten välityspalvelimia.",
"IndexerVipCheckExpiringClientMessage": "Tietolähteen VIP-edut erääntyvät pian: {0}",
"ProwlarrSupportsAnyIndexer": "{appName} tukee Newznab- ja Torznab-yhteensopivien tietolähteiden ohella myös useita muita lähteitä vaihtoehdoilla \"Yleinen Newznab\" (Usenetille) ja 'Yleinen Torznab' (torrenteille).",
@@ -324,15 +324,15 @@
"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",
"IndexerTagsHelpText": "Tunnisteiden avulla voit määrittää tiedonhaun välityspalvelimet, mihin sovelluksiin tietolähteet synkronoidaan tai yksikertaisesti järjestellä tietolähteitäsi.",
"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/vuorovaikutteinen).",
"AppProfileSelectHelpText": "Sovellusprofiilieilla määritetään tietolähteelle sovellussynkronoinnin yhteydessä aktivoitavat hakutavat (RSS/automaatti/manuaali).",
"IndexerQuery": "Tietolähteen kysely",
"IndexerRss": "Tietolähteen RSS-syöte",
"IndexerRss": "Tietolähteen RSS",
"SearchIndexers": "Etsi tietolähteistä",
"AddRemoveOnly": "Ainoastaan lisää/poista",
"IndexerVipCheckExpiredClientMessage": "Tietolähteen VIP-edut ovat erääntyneet: {0}",
"MaintenanceRelease": "Huoltojulkaisu: Korjauksia ja muita parannuksia. Lue lisää Githubin historiasta muutoshistoriasta.",
"MaintenanceRelease": "Huoltojulkaisu: korjauksia ja muita parannuksia. Lue lisää Githubin muutoshistoriasta.",
"Query": "Kysely",
"Redirect": "Uudelleenohjaus",
"RestartProwlarr": "Käynnistä {appName} uudelleen",
@@ -340,7 +340,7 @@
"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": "Tietolähdevälityspalvelimien lataus epäonnistui",
"UnableToLoadIndexerProxies": "Tiedonhaun välityspalvelimia ei voitu ladata",
"AddedToDownloadClient": "Julkaisu lisättiin lataustyökaluun",
"AddNewIndexer": "Lisää uusi tietolähde",
"AddToDownloadClient": "Lisää julkaisu lataustyökaluun",
@@ -352,28 +352,28 @@
"SettingsLogRotate": "Lokitiedostojen kierrätys",
"SettingsLogSql": "Kirjaa SQL",
"SettingsSqlLoggingHelpText": "Kirjaa kaikki {appName}in SQL-kyselyt",
"ConnectSettingsSummary": "Ilmoitukset ja omat komentosarjat.",
"ConnectSettingsSummary": "Ilmoitukset, kuten viestintä mediapalvelimille ja soittimille, sekä omat komentosarjat.",
"DevelopmentSettings": "Kehittäjäasetukset",
"Description": "Kuvaus",
"Id": "Tunniste",
"SettingsConsoleLogLevel": "Valvontalokin taso",
"Id": "ID",
"SettingsConsoleLogLevel": "Valvontalokin laajuus",
"SettingsFilterSentryEvents": "Suodata analytiikan tapahtumia",
"SettingsFilterSentryEventsHelpText": "Suodata tunnetut käyttäjävirheet pois analytiikkalähetyksistä",
"Applications": "Sovellukset",
"AppProfileInUse": "Sovellusprofiili on käytössä",
"Apps": "Sovellukset",
"Auth": "Todennus",
"Category": "Luokitus",
"Category": "Kategoria",
"ClearHistory": "Tyhjennä historia",
"ClearHistoryMessageText": "Haluatko varmasti tyhjentää kaiken {appName}-historian?",
"Connect": "Kytkennät",
"EnableRssHelpText": "Tietolähde sisällytetään RSS-syötteeseen.",
"EnableRssHelpText": "Käytä tietolähteelle RSS-syötettä.",
"DeleteApplication": "Poista sovellus",
"DeleteAppProfile": "Poista sovellusprofiili",
"IndexerProxies": "Tietolähteiden välityspalvelimet",
"IndexerProxies": "Tiedonhaun välityspalvelimet",
"IndexerAuth": "Tietolähteen todennus",
"Notifications": "Kytkennät",
"NotificationTriggersHelpText": "Valitse tapahtumat, jotka aiheuttavat ilmoituksen.",
"NotificationTriggersHelpText": "Valitse tämän ilmoituksen laukaisevat tapahtumat.",
"Stats": "Tilastot",
"UnableToLoadDevelopmentSettings": "Kehittäjäasetusten lataus epäonnistui",
"AppSettingsSummary": "Sovellukset ja asetukset, joilla määritetään miten {appName} viestii PVR-sovellustesi kanssa.",
@@ -386,11 +386,11 @@
"QueryOptions": "Kyselyasetukset",
"TvSearch": "Etsi televisiosarjoja",
"Filters": "Suodattimet",
"OnGrab": "Kun elokuva siepataan",
"OnHealthIssue": "Kun havaitaan kuntoon liittyvä ongelma",
"HistoryCleanupDaysHelpText": "Poista automaattinen tyhjennys käytöstä asettamalla arvoksi '0'.",
"OnGrab": "Kun julkaisu kaapataan",
"OnHealthIssue": "Vakausongelmat",
"HistoryCleanupDaysHelpText": "Arvo \"0\" (nolla) poistaa automaattityhjennyksen käytöstä.",
"HistoryCleanupDaysHelpTextWarning": "Tässä määritettyä aikaa vanhemmat tiedostot poistetaan automaattisesti roskakorista pysyvästi.",
"TestAllIndexers": "Testaa tietolähteet",
"TestAllIndexers": "Tietolähteiden testaus",
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti sovellus, joka kommunikoi API:n kanssa",
"Categories": "Kategoriat",
"Database": "Tietokanta",
@@ -403,14 +403,14 @@
"Proxies": "Välityspalvelimet",
"Public": "Julkinen",
"SemiPrivate": "Osittain yksityinen",
"UnableToLoadApplicationList": "Sovelluslistausta ei voitu ladata",
"ApplicationsLoadError": "Sovelluslistausta ei voitu ladata",
"Url": "URL",
"Website": "Verkkosivusto",
"IndexerNoDefCheckMessage": "Tietolähteillä ei ole määritystä, eivätkä ne toimi: {0}. Poista ja/tai lisää {appName}iin uudelleen",
"Private": "Yksityinen",
"QueryResults": "Kyselyn tulokset",
"Application": "Sovellus",
"GrabReleases": "Sieppaa julkaisu(t)",
"GrabReleases": "Kaappaa julkaisu(t)",
"Link": "Linkki",
"SearchTypes": "Mitä etsitään",
"UnableToLoadIndexers": "Tietolähteiden lataus epäonnistui",
@@ -434,18 +434,18 @@
"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 ulkoasu. \"Automaattinen\" vaihtaa vaalean ja tumman tilan välillä järjestelmän teeman mukaan. Innoittanut Theme.Park.",
"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ä järjestelmän teeman mukaan. Innoittanut Theme.Park.",
"Duration": "Kesto",
"ElapsedTime": "Kulunut aika",
"EnabledRedirected": "Kulunut, uudelleenohjattu",
"Ended": "Päättynyt",
"GrabTitle": "Sieppaa nimike",
"GrabTitle": "Kaappaa nimike",
"LastExecution": "Edellinen suoritus",
"LastDuration": "Edellinen kesto",
"NextExecution": "Seuraava suoritus",
"Parameters": "Parametrit",
"Queued": "Jonossa",
"Queued": "Lisätty jonoon",
"Started": "Alkoi",
"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}",
@@ -453,30 +453,30 @@
"DeleteClientCategory": "Poista lataustyökalukategoria",
"DownloadClientCategory": "Lataustyökalukategoria",
"MappedCategories": "Kartoitetut kategoriat",
"AuthenticationRequired": "Todennus vaaditaan",
"AuthenticationRequired": "Vaadi tunnistautuminen",
"Remove": "Poista",
"Replace": "Korvaa",
"TheLatestVersionIsAlreadyInstalled": "{appName}in uusin versio on jo asennettu",
"ApplicationURL": "Sovelluksen URL-osoite",
"ApplicationUrlHelpText": "Sovelluksen ulkoinen URL-osoite, johon sisältyy http(s)://, portti ja URL-perusta.",
"Track": "Jäljitys",
"CountIndexersSelected": "{0} valittua tietolähdettä",
"DeleteSelectedDownloadClients": "Poista lataustyökalu",
"DeleteSelectedApplicationsMessageText": "Haluatko varmasti poistaa tietolähteen '{0}'?",
"DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa tietolähteen '{0}'?",
"DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa tietolähteen '{0}'?",
"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)",
"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ä)?",
"Publisher": "Julkasija",
"SelectIndexers": "Etsi tietolähteistä",
"SelectIndexers": "Valitse tietolähteet",
"Year": "Vuosi",
"Genre": "Tyylilajit",
"Genre": "Lajityyppi",
"More": "Lisää",
"Season": "Kausi",
"ApplyTagsHelpTextAdd": " 'Lisää' syötetyt tunnisteet aiempiin tunnisteisiin",
"ApplyTagsHelpTextHowToApplyApplications": "Tunnistetoimenpiteiden selitykset:",
"ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteisiin kohdistettavat toimenpiteet:",
"ApplyTagsHelpTextRemove": "- \"Poista\" tyhjentää syötetyt tunnisteet.",
"ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi.",
"DownloadClientPriorityHelpText": "Tietolähteen painotus: 1 (korkein) - 50 (matalin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen sieppauspäätökseen. Kaikkia käytössä olevia tietolähteitä käytetään edelleen RSS-synkronointiin ja hakuun.",
"ApplyTagsHelpTextAdd": " \"Lisää\" syötetyt tunnisteet aiempiin tunnisteisiin",
"ApplyTagsHelpTextHowToApplyApplications": "Tunnisteiden käyttäminen valituille sovelluksille",
"ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituissa tietolähteissä",
"ApplyTagsHelpTextRemove": "- \"Poista\" tyhjentää syötetyt tunnisteet",
"ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi",
"DownloadClientPriorityHelpText": "Määritä useiden lataustyökalujen painotus. Tasaveroiset lataajat erotetaan Round-Robin-tekniikalla.",
"Album": "Albumi",
"Artist": "Esittäjä",
"Author": "Kirjailija",
@@ -485,24 +485,124 @@
"Episode": "Jakso",
"Label": "Tunniste",
"Theme": "Teema",
"ConnectionLostReconnect": "{appName} pyrkii ajoittain muodostamaan yhteyden automaattisesti tai sitä voidaan yrittää manuaalisesti painamalla alta \"Lataa uudelleen\".",
"DeleteAppProfileMessageText": "Haluatko varmasti poistaa laatuprofiilin '{0}'?",
"RecentChanges": "Viimeaikaiset muutokset",
"WhatsNew": "Mikä on uutta?",
"ConnectionLostToBackend": "{appName} kadotti yhteyden taustajärjestelmään ja käytettävyyden palauttamiseksi se on ladattava uudelleen.",
"minutes": "Minuuttia",
"ConnectionLostReconnect": "{appName} pyrkii ajoittain muodostamaan yhteyden automaattisesti tai voit painaa alta \"Lataa uudelleen\".",
"DeleteAppProfileMessageText": "Haluatko varmasti poistaa sovellusprofiilin \"{name}\"?",
"RecentChanges": "Viimeisimmät muutokset",
"WhatsNew": "Mi uutta?",
"ConnectionLostToBackend": "{appName} kadotti yhteyden taustajärjestelmään ja se on käynnistettävä uudelleen.",
"minutes": "minuuttia",
"AddConnection": "Lisää yhteys",
"NotificationStatusAllClientHealthCheckMessage": "Sovellukset eivät ole käytettävissä virheiden vuoksi",
"NotificationStatusSingleClientHealthCheckMessage": "Sovellukset eivät ole käytettävissä virheiden vuoksi: {0}",
"AuthBasic": "Perus (selaimen ponnahdus)",
"NotificationStatusAllClientHealthCheckMessage": "Kaikki ilmoitukset eivät ole ongelmien vuoksi käytettävissä",
"NotificationStatusSingleClientHealthCheckMessage": "Ilmoitukset eivät ole ongelmien vuoksi käytettävissä: {0}",
"AuthBasic": "Perus (ponnahdusikkuna)",
"AuthForm": "Lomake (kirjautumissivu)",
"DisabledForLocalAddresses": "Ei käytetä paikallisille osoittelle",
"DisabledForLocalAddresses": "Ei käytössä paikallisille osoitteille",
"None": "Ei mitään",
"ResetAPIKeyMessageText": "Haluatko varmasti uudistaa API-avaimesi?",
"TotalIndexerSuccessfulGrabs": "Onnistuneiden tietolähdesieppausten kokonaismäärä",
"TotalIndexerSuccessfulGrabs": "Onnistuneiden tietolähdekaappausten kokonaismäärä",
"AppUpdated": "{appName} on päivitetty",
"AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on ladattava uudelleen.",
"IndexerDownloadClientHelpText": "Määritä tämän tietolähteen kanssa käytettävä lataustyökalu",
"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.",
"TotalGrabs": "Sieppausten kokonaismäärä"
"TotalGrabs": "Kaappausten kokonaismäärä",
"AddDownloadClientImplementation": "Lisäätään lataustyökalua - {implementationName}",
"AddIndexerImplementation": "Lisätään tietolähdettä - {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: {0}.",
"AddIndexerProxyImplementation": "Lisää tiedonhaun välityspalvelin - {implementationName}",
"EditIndexerProxyImplementation": "Muokkaa tiedonhaun välityspalvelinta - {implementationName}",
"EditDownloadClientImplementation": "Muokataan lataustyökalua - {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",
"StopSelecting": "Lopeta valitseminen",
"EditConnectionImplementation": "Muokataan kytköstä - {implementationName}",
"AddConnectionImplementation": "Lisätään kytköstä - {implementationName}",
"DownloadClientQbittorrentSettingsContentLayout": "Sisällön rakenne",
"EditIndexerImplementation": "Muokataan tietolähdettä - {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.",
"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ä.",
"TotalUserAgentGrabs": "Käyttäjäagentin kaappausten kokonaismäärä",
"AuthenticationMethodHelpTextWarning": "Valitse sopiva tunnistautumistapa",
"AuthenticationRequiredPasswordHelpTextWarning": "Syötä uusi salasana",
"AuthenticationMethod": "Tunnistautumistapa",
"Clone": "Monista",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Vahvista uusi salasana",
"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ä",
"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",
"BasicSearch": "Perushaku",
"CountApplicationsSelected": "{count} sovellus(ta) on valittu",
"DeleteSelectedApplications": "Poista valitut sovellukset",
"DeleteSelectedIndexer": "Poista valittu tietolähde",
"DeleteSelectedIndexers": "Poista valitut tietolähteet",
"Implementation": "Toteutus",
"IndexerCategories": "Tietolähdekategoriat",
"IndexerStatus": "Tietolähteen tila",
"ManageApplications": "Hallitse sovelluksia",
"NewznabUrl": "Newznab URL",
"PackSeedTime": "Koosteen 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ä",
"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 API-avaimesi ainakin {0} 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ä",
"GoToApplication": "Siirry sovellukseen",
"AreYouSureYouWantToDeleteIndexer": "Haluatko varmasti poistaa tietolähteen \"{name}\" sovelluksesta {appName}?",
"AuthQueries": "Todennuskyselyt",
"ApplicationTagsHelpText": "Sovellukseen synkronoidaan joko tunnisteettomat tietolähteet tai vastaavilla tunnisteilla merkityt tietolähteet.",
"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.",
"LastFailure": "Edellinen virhe",
"SelectedCountOfCountReleases": "Valittu {selectedCount}/{itemCount} julkaisua",
"TotalQueries": "Kyselyiden kokonaismäärä",
"RssFeed": "RSS-syöte",
"VipExpiration": "VIP-erääntyy",
"DisabledUntil": "Poistettu käytöstä kunnes",
"AddApplication": "Lisää sovellus",
"AddCategory": "Lisää kategoria",
"EditCategory": "Muokkaa kategoriaa",
"IndexerId": "Tietolähteen ID",
"ActiveIndexers": "Aktiiviset tietolähteet",
"NoIndexerCategories": "Tietolähteelle ei löytynyt kategorioita",
"ActiveApps": "Aktiiviset sovellukset",
"NoIndexerHistory": "Tietolähteelle 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",
"InitialFailure": "Alkuperäinen virhe",
"PasswordConfirmation": "Salasanan vahvistus",
"RepeatSearch": "Toista haku",
"SearchCountIndexers": "Etsi {count} tietolähteestä",
"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ä"
}

View File

@@ -12,7 +12,7 @@
"Events": "Événements",
"Edit": "Modifier",
"DownloadClientStatusCheckAllClientMessage": "Aucun client de téléchargement n'est disponible en raison d'échecs",
"DownloadClients": "Clients de téléchargement",
"DownloadClients": "Clients de télécharg.",
"Dates": "Dates",
"Date": "Date",
"Delete": "Supprimer",
@@ -28,14 +28,14 @@
"About": "À propos",
"IndexerStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison d'échecs : {0}",
"DownloadClientStatusCheckSingleClientMessage": "Clients de Téléchargement indisponibles en raison d'échecs: {0}",
"SetTags": "Définir des balises",
"SetTags": "Définir des étiquettes",
"ReleaseStatus": "Statut de la version",
"UpdateCheckUINotWritableMessage": "Impossible d'installer la mise à jour car le dossier d'interface utilisateur '{0}' n'est pas accessible en écriture par l'utilisateur '{1}'.",
"UpdateCheckStartupTranslocationMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{0}' se trouve dans un dossier App Translocation.",
"UpdateCheckStartupNotWritableMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{0}' n'est pas accessible en écriture par l'utilisateur '{1}'.",
"UnselectAll": "Tout désélectionner",
"UISettingsSummary": "Date, langue, et perceptions des couleurs",
"TagsSettingsSummary": "Voir toutes les balises et comment elles sont utilisées. Les balises inutilisées peuvent être supprimées",
"TagsSettingsSummary": "Voir toutes les étiquettes et comment elles sont utilisées. Les étiquettes inutilisées peuvent être supprimées",
"Style": "Style",
"Status": "État",
"Sort": "Trier",
@@ -107,7 +107,7 @@
"Reload": "Recharger",
"Peers": "Peers",
"PageSize": "Pagination",
"Ok": "Ok",
"Ok": "OK",
"OAuthPopupMessage": "Les pop-ups sont bloquées par votre navigateur",
"Name": "Nom",
"Message": "Message",
@@ -158,11 +158,11 @@
"Enable": "Activer",
"DownloadClientSettings": "Télécharger les paramètres client",
"Docker": "Docker",
"DeleteTag": "Supprimer le tag",
"DeleteTag": "Supprimer l'étiquette",
"DeleteNotification": "Supprimer la notification",
"DeleteDownloadClient": "Supprimer le client de téléchargement",
"DeleteBackup": "Supprimer la sauvegarde",
"DBMigration": "Migration de la base de données",
"DatabaseMigration": "Migration de la base de données",
"ConnectSettings": "Paramètres de connexion",
"BackupFolderHelpText": "Les chemins correspondants seront sous le répertoire AppData de {appName}",
"IllRestartLater": "Je redémarrerai plus tard",
@@ -213,7 +213,7 @@
"UnableToLoadTags": "Impossible de charger les étiquettes",
"UnableToLoadHistory": "Impossible de charger l'historique",
"UnableToLoadGeneralSettings": "Impossible de charger les paramètres généraux",
"UnableToLoadDownloadClients": "Impossible de charger les clients de téléchargement",
"DownloadClientsLoadError": "Impossible de charger les clients de téléchargement",
"UnableToLoadBackups": "Impossible de charger les sauvegardes",
"UnableToAddANewNotificationPleaseTryAgain": "Impossible d'ajouter une nouvelle notification, veuillez réessayer.",
"UnableToAddANewIndexerPleaseTryAgain": "Impossible d'ajouter un nouvel indexeur, veuillez réessayer.",
@@ -282,7 +282,7 @@
"CloseCurrentModal": "Fermer cette fenêtre modale",
"AddingTag": "Ajout d'une étiquette",
"OnHealthIssueHelpText": "Sur un problème de santé",
"AcceptConfirmationModal": "Accepter les modalités d'utilisations",
"AcceptConfirmationModal": "Accepter les modalités d'utilisation",
"OpenThisModal": "Ouvrir cette fenêtre modale",
"IndexerLongTermStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison de pannes pendant plus de 6 heures : {0}",
"IndexerLongTermStatusCheckAllClientMessage": "Tous les indexeurs sont indisponibles en raison d'échecs de plus de 6 heures",
@@ -400,7 +400,7 @@
"SearchType": "Type de recherche",
"Categories": "Catégories",
"MassEditor": "Éditer en masse",
"UnableToLoadApplicationList": "Impossible de charger la liste des applications",
"ApplicationsLoadError": "Impossible de charger la liste des applications",
"Website": "Site internet",
"AudioSearch": "Recherche de musique",
"BookSearch": "Recherche de livres",
@@ -482,7 +482,7 @@
"Author": "Auteur",
"AverageResponseTimesMs": "Temps de réponse moyen des indexeurs (ms)",
"IndexerFailureRate": "Taux d'échec de l'indexeur",
"Label": "Label",
"Label": "Libel",
"More": "Plus",
"Publisher": "Éditeur",
"Season": "Saison",
@@ -595,11 +595,13 @@
"AuthenticationRequiredUsernameHelpTextWarning": "Saisir un nouveau nom d'utilisateur",
"Clone": "Cloner",
"PackSeedTime": "Temps de Seed",
"ApplicationTagsHelpText": "Synchroniser les indexeurs avec cette application qui n'ont aucune balise ou qui ont une ou plusieurs balises correspondantes",
"ApplicationTagsHelpText": "Synchroniser les indexeurs avec cette application qui n'ont aucune étiquette ou qui ont une ou plusieurs étiquettes correspondantes",
"OnHealthRestored": "Sur la santé restaurée",
"OnHealthRestoredHelpText": "Sur la santé restaurée",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmer le nouveau mot de passe",
"PasswordConfirmation": "Confirmation du mot de passe",
"NoIndexerCategories": "Aucune catégorie disponible pour cet indexeur",
"InvalidUILanguage": "Votre interface utilisateur est définie sur une langue non valide, corrigez-la et enregistrez vos paramètres"
"InvalidUILanguage": "Votre interface utilisateur est définie sur une langue non valide, corrigez-la et enregistrez vos paramètres",
"DownloadClientQbittorrentSettingsContentLayout": "Disposition du contenu",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Utiliser la disposition du contenu configurée par qBittorrent, la disposition originale du torrent ou toujours créer un sous-dossier (qBittorrent 4.3.2+)"
}

View File

@@ -31,7 +31,7 @@
"SettingsEnableColorImpairedModeHelpText": "סגנון שונה כדי לאפשר למשתמשים לקויי צבע להבחין טוב יותר במידע המקודד בצבע",
"SettingsLongDateFormat": "פורמט תאריך ארוך",
"SettingsShortDateFormat": "פורמט תאריך קצר",
"UnableToLoadDownloadClients": "לא ניתן לטעון לקוחות הורדות",
"DownloadClientsLoadError": "לא ניתן לטעון לקוחות הורדות",
"UnableToAddANewNotificationPleaseTryAgain": "לא ניתן להוסיף התראה חדשה, נסה שוב.",
"UnableToLoadGeneralSettings": "לא ניתן לטעון את ההגדרות הכלליות",
"About": "אודות",
@@ -272,7 +272,7 @@
"CloneProfile": "פרופיל שיבוט",
"Close": "סגור",
"CloseCurrentModal": "סגור את המודול הנוכחי",
"DBMigration": "הגירת DB",
"DatabaseMigration": "הגירת DB",
"Delete": "לִמְחוֹק",
"DeleteNotification": "מחק הודעה",
"DeleteNotificationMessageText": "האם אתה בטוח שברצונך למחוק את ההודעה '{0}'?",

View File

@@ -120,7 +120,7 @@
"New": "नया",
"CustomFilters": "कस्टम फ़िल्टर",
"Dates": "खजूर",
"DBMigration": "DB प्रवासन",
"DatabaseMigration": "DB प्रवासन",
"DeleteApplicationMessageText": "क्या आप वाकई '{0}' की सूचना हटाना चाहते हैं?",
"DeleteBackup": "बैकअप हटाएं",
"DeleteBackupMessageText": "क्या आप वाकई '{0}' बैकअप हटाना चाहते हैं?",
@@ -294,7 +294,7 @@
"RestartNow": "अब पुनःचालू करें",
"SettingsEnableColorImpairedMode": "रंग-बिगड़ा मोड सक्षम करें",
"UnableToAddANewNotificationPleaseTryAgain": "नई अधिसूचना जोड़ने में असमर्थ, कृपया पुनः प्रयास करें।",
"UnableToLoadDownloadClients": "डाउनलोड क्लाइंट लोड करने में असमर्थ",
"DownloadClientsLoadError": "डाउनलोड क्लाइंट लोड करने में असमर्थ",
"UnableToLoadGeneralSettings": "सामान्य सेटिंग्स लोड करने में असमर्थ",
"UnableToLoadNotifications": "सूचनाएं लोड करने में असमर्थ",
"UpdateCheckStartupNotWritableMessage": "अपडेट स्थापित नहीं किया जा सकता क्योंकि स्टार्टअप फ़ोल्डर '{0}' उपयोगकर्ता '{1}' द्वारा लिखने योग्य नहीं है।",

View File

@@ -1,7 +1,7 @@
{
"About": "Névjegy",
"Analytics": "Analitika",
"AddIndexer": "Indexer hozzáadása",
"AddIndexer": "Indexe hozzáadása",
"AddingTag": "Címke hozzáadása",
"Error": "Hiba",
"DeleteTag": "Címke Törlése",
@@ -9,88 +9,88 @@
"EnableAutomaticSearch": "Engedélyezd az Automatikus Keresést",
"Enable": "Aktiválás",
"EditIndexer": "Indexer Szerkesztése",
"Edit": "Szerkesztés",
"Edit": "Szerkeszt",
"DownloadClientStatusCheckSingleClientMessage": "Letöltőkliens hiba miatt nem elérhető: {0}",
"DownloadClientStatusCheckAllClientMessage": "Az összes letöltőkliens elérhetetlen, hiba miatt",
"DownloadClientsSettingsSummary": "Letöltőkliens konfigurációja a {appName} felhasználói felület keresésbe történő integráláshoz",
"DownloadClientSettings": "Letöltőkliens Beállítások",
"DownloadClients": "Letöltőkliensek",
"DownloadClient": "Letöltési Kliens",
"DownloadClients": "Letöltő kliensek",
"DownloadClient": "Letöltési kliens",
"Docker": "Docker",
"Disabled": "Letiltott",
"Details": "Részletek",
"Disabled": "Tiltva",
"Details": "részletek",
"DeleteTagMessageText": "Biztosan törlöd a(z) „{0}” címkét?",
"DeleteNotificationMessageText": "Biztosan törlöd a(z) „{0}” értesítést?",
"DeleteNotification": "Értesítés Törlése",
"DeleteDownloadClientMessageText": "Biztosan törlöd a(z) „{0}” letöltő klienst?",
"DeleteDownloadClient": "Letöltőkliens Törlése",
"DeleteBackupMessageText": "Biztosan törlöd a(z) „{0}” biztonsági mentést?",
"DeleteBackup": "Biztonsági Mentés Törlése",
"DeleteDownloadClient": "Letöltőkliens törlése",
"DeleteBackupMessageText": "Biztosan törli a '{name}' biztonsági mentést?",
"DeleteBackup": "Biztonsági Mentés törlése",
"Delete": "Törlés",
"DBMigration": "DB Migráció",
"DatabaseMigration": "DB Migráció",
"Dates": "Dátumok",
"Date": "Dátum",
"CustomFilters": "Egyéni Szűrők",
"ConnectSettingsSummary": "Értesítések és egyéni szkriptek",
"ConnectSettings": "Kapcsolódási Beállítások",
"ConnectSettings": "Csatlakozási beállítások",
"Connections": "Kapcsolatok",
"ConnectionLost": "Kapcsolódás Elveszett",
"ConnectionLost": "A kapcsolat megszakadt",
"Connect": "Értesítések",
"Component": "Komponens",
"Component": "Összetevő",
"Columns": "Oszlopok",
"CloseCurrentModal": "Aktuális Mód Bezárása",
"Close": "Bezárás",
"CloneProfile": "Profil Klónozása",
"ClientPriority": "Kliens Prioritás",
"CloneProfile": "Profil klónozása",
"ClientPriority": "Kliens prioritás",
"Clear": "Törölni",
"ChangeHasNotBeenSavedYet": "A változások még nem lettek elmentve",
"CertificateValidationHelpText": "Módosítsa a HTTPS tanúsítás szigorúságát",
"CertificateValidation": "Tanúsítvány érvényesítése",
"CancelPendingTask": "Biztosan törlöd ezt a függőben lévő feladatot?",
"CancelPendingTask": "Biztosan törölni szeretné ezt a függőben lévő feladatot?",
"Cancel": "Mégse",
"BypassProxyForLocalAddresses": "Proxy megkerülése a helyi hálózatos címekhez",
"BranchUpdateMechanism": "A külső frissítési mechanizmus által használt ágazat",
"BranchUpdateMechanism": "Külső frissítési mechanizmus által használt ág",
"BranchUpdate": "Ágazattípus a {appName} frissítéseihez",
"Branch": "Ágazat",
"BindAddressHelpText": "Érvényes IP-cím, localhost vagy '*' minden interfészhez",
"BindAddress": "Kapcsolási Cím",
"BeforeUpdate": "Alkalmazásfrissítés előtt",
"BindAddress": "Kötési cím",
"BeforeUpdate": "Frissítés előtt",
"Backups": "Biztonsági mentések",
"BackupRetentionHelpText": "A megőrzési idől régebbi automatikus biztonsági másolatok automatikusan törlésre kerülnek",
"BackupNow": "Biztonsági Mentés Most",
"BackupIntervalHelpText": "Időeltérés a biztonsági mentések között",
"BackupRetentionHelpText": "A megőrzési időszaknál régebbi automatikus biztonsági másolatok automatikusan törlődnek",
"BackupNow": "Biztonsági Mentés",
"BackupIntervalHelpText": "Az automatikus biztonsági mentések közötti időköz",
"BackupFolderHelpText": "Az elérési útvonalak a {appName} AppData könyvtárában lesznek",
"Backup": "Biztonsági Mentés",
"Backup": "Biztonsági mentés",
"AutomaticSearch": "Automatikus keresés",
"Automatic": "Automatikus",
"AnalyticsEnabledHelpText": "Küldjön névtelen használati és hibainformációkat a {appName} szervereire. Ez magában foglalja a böngészőjéről szóló információkat, mely {appName} WebUI oldalakat használja, a hibajelentést, valamint az operációs rendszer adatait. Ezeket az információkat a funkciók és a hibajavítások rangsorolására használjuk fel.",
"AuthenticationMethodHelpText": "Felhasználónév és Jelszó szükséges a {appName}-hoz való hozzáféréshez",
"AnalyticsEnabledHelpText": "Névtelen használati és hibainformáció küldése {appName} szervereinek. Ez magában foglalja a böngészővel kapcsolatos információkat, a használt {appName} WebUI oldalakat, a hibajelentéseket, valamint az operációs rendszert és a futásidejű verziót. Ezeket az információkat a funkciók és a hibajavítások fontossági sorrendjének meghatározására fogjuk használni.",
"AuthenticationMethodHelpText": "Felhasználónév és jelszó szükséges a(z) {appName} eléréséhez",
"Authentication": "Hitelesítés",
"ApplyTags": "Címkék alkalmazása",
"Age": "Kor",
"ApiKey": "API Kulcs",
"All": "Összes",
"AcceptConfirmationModal": "Változás Megerősítése",
"Apply": "Alkalmazás",
"AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges anélkül hogy az AppData ne törlődjön",
"AppDataDirectory": "AppData Mappa",
"Apply": "Alkamaz",
"AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges az alkalmazás adatok törlése nélkül",
"AppDataDirectory": "AppData Könyvtár",
"Added": "Hozzáadva",
"Actions": "Teendők",
"History": "Történet",
"History": "Előzmény",
"HideAdvanced": "Haladó Elrejtése",
"HealthNoIssues": "Nincs hiba a konfigurációval",
"Health": "Állapot",
"Health": "Egészség",
"GeneralSettingsSummary": "Port, SSL, felhasználónév / jelszó, proxy, elemzések, és frissítések",
"ForMoreInformationOnTheIndividualDownloadClients": "Ha többet szeretnél megtudni a különböző letöltési kliensekről, kattints az információs gombokra.",
"Folder": "Mappa",
"FocusSearchBox": "Fókusz Keresőmező",
"Fixed": "Kijavítva",
"Fixed": "Rögzített",
"FilterPlaceHolder": "Filmek Keresése",
"Filter": "Szűrő",
"Files": "Fájl",
"Filename": "Fájlnév",
"Failed": "Sikertelen",
"ExistingTag": "Meglévő Címke",
"Files": "Fájlok",
"Filename": "Fájl név",
"Failed": "Nem sikerült",
"ExistingTag": "Létező címke",
"Exception": "Kivétel",
"EventType": "Események Típusa",
"Events": "Események",
@@ -136,13 +136,13 @@
"Save": "Mentés",
"RSSIsNotSupportedWithThisIndexer": "Az RSS nem támogatott ezzel az indexerrel",
"Retention": "Visszatartás",
"Result": "Eredmények",
"Result": "Eredmény",
"RestoreBackup": "Biztonsági mentés visszaállítása",
"Restore": "Visszaállítás",
"Restore": "Visszaállít",
"RestartRequiredHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
"RestartProwlarr": "{appName} Újraindítása",
"RestartNow": "Újraindítás Most",
"Restart": "Újraindítás",
"Restart": "Újrakezd",
"ResetAPIKey": "API Kulcs visszaállítása",
"Reset": "Visszaállítás",
"RemovingTag": "Címke eltávolítása",
@@ -177,53 +177,53 @@
"PageSizeHelpText": "Az egyes oldalakon megjelenítendő elemek száma",
"PageSize": "Oldal mérete",
"PackageVersion": "Csomagverzió",
"Options": "Opciók",
"Options": "Lehetőségek",
"OpenThisModal": "Nyissa meg ezt a modált",
"OpenBrowserOnStart": "Indításkor nyissa meg a böngészőt",
"OnHealthIssueHelpText": "Állapotprobléma",
"Ok": "Ok",
"OAuthPopupMessage": "A böngésződ blokkolja az előugró ablakokat",
"NoUpdatesAreAvailable": "Nincsenek elérhető frissítések",
"NoTagsHaveBeenAddedYet": "Még nem adtál hozzá címkéket",
"NoLogFiles": "Nincsen log fájl",
"NoLeaveIt": "Nem, hagyd így",
"NoChanges": "Nincsenek változások",
"NoChange": "Nincs változtatás",
"NoBackupsAreAvailable": "Nincs elérhető biztonsági mentés",
"NoUpdatesAreAvailable": "Nem érhetők el frissítések",
"NoTagsHaveBeenAddedYet": "Még nem adtak hozzá címkéket",
"NoLogFiles": "Nincsenek naplófájlok",
"NoLeaveIt": "Nem, Hagyd",
"NoChanges": "Nincs változás",
"NoChange": "Nincs változás",
"NoBackupsAreAvailable": "Nincsenek biztonsági mentések",
"New": "Új",
"NetCore": ".NET",
"Name": "Név",
"MovieIndexScrollTop": "Film Index: Görgess fel",
"MovieIndexScrollBottom": "Film Index: Görgess le",
"MoreInfo": "Több Információ",
"MoreInfo": "Több információ",
"Mode": "Mód",
"MIA": "MIA",
"Message": "Üzenet",
"Mechanism": "Mechanizmus",
"Manual": "Manuális",
"MaintenanceRelease": "Karbantartási frissítés: hibajavítások és egyéb fejlesztések. További részletekért lásd: Github Commit History",
"Logs": "Logok",
"LogLevelTraceHelpTextWarning": "A nyomkövetést csak ideiglenesen szabad engedélyezni",
"LogLevel": "Log Szint",
"Mechanism": "Gépezet",
"Manual": "Kézi",
"MaintenanceRelease": "Karbantartási kiadás: hibajavítások és egyéb fejlesztések. További részletekért lásd: Github Commit History",
"Logs": "Naplók",
"LogLevelTraceHelpTextWarning": "A nyomkövetési naplózást csak ideiglenesen szabad engedélyezni",
"LogLevel": "Napló szint",
"Logging": "Loggolás",
"LogFiles": "Log Fájlok",
"LogFiles": "Naplófájlok",
"Level": "Szint",
"LaunchBrowserHelpText": " Nyisson meg egy böngészőt, és az alkalmazás indításakor lépjen a {appName} kezdőlapjára.",
"LastWriteTime": "Utolsó írási idő",
"Language": "Nyelv",
"KeyboardShortcuts": "Gyorsbillentyűk",
"KeyboardShortcuts": "Gyorsbillentyűket",
"Interval": "Intervallum",
"InteractiveSearch": "Interaktív Keresés",
"Info": "Infó",
"IndexerStatusCheckSingleClientMessage": "Indexerek elérhetetlenek a következő hiba miatt: {0}",
"Hostname": "Hosztnév",
"Host": "Hoszt",
"Grabbed": "Megfogva",
"Grabbed": "Megragadta",
"GeneralSettings": "Általános Beállítások",
"General": "Általános",
"UnableToLoadHistory": "Nem sikerült betölteni az előzményeket",
"UnableToLoadGeneralSettings": "Nem sikerült betölteni az általános beállításokat",
"UnableToLoadDownloadClients": "Nem sikerült betölteni a letöltőkliens(eke)t",
"DownloadClientsLoadError": "Nem sikerült betölteni a letöltőkliens(eke)t",
"UnableToLoadBackups": "Biztonsági mentés(ek) betöltése sikertelen",
"UnableToAddANewNotificationPleaseTryAgain": "Nem lehet új értesítést hozzáadni, próbálkozz újra.",
"UnableToAddANewIndexerPleaseTryAgain": "Nem lehet új indexert hozzáadni, próbálkozz újra.",
@@ -239,13 +239,13 @@
"Title": "Cím",
"Time": "Idő",
"TestAllClients": "Összes kliens tesztelése",
"TestAll": "Összes tesztelése",
"TestAll": "Összes Tesztelése",
"Test": "Teszt",
"Tasks": "Feladatok",
"TagsSettingsSummary": "Tekintse meg az összes címkét és azok használatát. A használatlan címkék eltávolíthatók",
"TagsHelpText": "Legalább egy megfelelő címkével rendelkező filmekre vonatkozik",
"Tags": "Címkék",
"TagIsNotUsedAndCanBeDeleted": "A címkét nincs használatban, és törölhető",
"TagIsNotUsedAndCanBeDeleted": "A címke nincs használatban, törölhető",
"TagCannotBeDeletedWhileInUse": "Használat közben nem törölhető",
"TableOptionsColumnsMessage": "Válasszd ki, mely oszlopok legyenek láthatóak, és milyen sorrendben jelenjenek meg",
"SystemTimeCheckMessage": "A rendszeridő több mint 1 napja nem frissült. Előfordulhat, hogy az ütemezett feladatok az idő kijavításáig nem futnak megfelelően",
@@ -257,9 +257,9 @@
"Indexer": "Indexelő",
"IncludeHealthWarningsHelpText": "Tartalmazza a Állapot Figyelmeztetéseket",
"IllRestartLater": "Később Újraindítom",
"IgnoredAddresses": "Ignorált Címek",
"YesCancel": "Igen, Mégsem",
"Warn": "Figyelmeztet",
"IgnoredAddresses": "Ignorált címek",
"YesCancel": "Igen, elvet",
"Warn": "Figyelmeztetés",
"View": "Nézet",
"Version": "Verzió",
"Username": "Felhasználónév",
@@ -270,7 +270,7 @@
"Uptime": "Üzemidő",
"UpdateScriptPathHelpText": "Keresse meg az egyéni parancsfájl elérési útját, amely kibontott frissítési csomagot vesz fel, és kezeli a frissítési folyamat fennmaradó részét",
"Updates": "Frissítések",
"UpdateMechanismHelpText": "Használja a {appName} beépített frissítőjét vagy egy szkriptet",
"UpdateMechanismHelpText": "Használja a {appName} beépített frissítőjét vagy szkriptt",
"UpdateCheckUINotWritableMessage": "Nem lehet telepíteni a frissítést, mert a(z) „{0}” felhasználói felület mappát nem írhatja a „{1}” felhasználó.",
"UpdateCheckStartupTranslocationMessage": "Nem lehet telepíteni a frissítést, mert a (z) „{0}” indítási mappa az Alkalmazások Transzlokációs mappájában található.",
"UpdateCheckStartupNotWritableMessage": "A frissítés nem telepíthető, mert a (z) „{0}” indítási mappát a „{1}” felhasználó nem írhatja.",
@@ -280,10 +280,10 @@
"UnableToLoadUISettings": "Nem sikerült betölteni a felhasználói felület beállításait",
"UnableToLoadTags": "Nem sikerült betölteni a címkéket",
"UnableToLoadNotifications": "Nem sikerült betölteni az Értesítéseket",
"TableOptions": "Táblázat beállításai",
"TableOptions": "Táblázat Beállítások",
"ShowSearch": "Keresés(ek) megjelenítése",
"SetTags": "Címkék beállítása",
"NotificationTriggers": "Értesítés(ek) kiváltója",
"NotificationTriggers": "Értesítési triggerek",
"IndexerLongTermStatusCheckSingleClientMessage": "Az összes indexer elérhetetlen több mint 6 órája, meghibásodás miatt: {0}",
"IndexerLongTermStatusCheckAllClientMessage": "Az összes indexer elérhetetlen több mint 6 órája, meghibásodás miatt",
"SettingsLogSql": "SQL naplózás",
@@ -327,12 +327,12 @@
"Redirect": "Átirányítás",
"Reddit": "Reddit",
"HomePage": "Kezdőlap",
"FeatureRequests": "Funkció kérése",
"FeatureRequests": "Funkciókérés",
"Discord": "Discord",
"AppProfileSelectHelpText": "Az alkalmazásprofilok az RSS vezérlésére szolgálnak, Automatikus keresés és Interaktív keresés beállításai az alkalmazás szinkronizálásakor",
"UnableToAddANewApplicationPleaseTryAgain": "Nem lehet új alkalmazást hozzáadni, próbálkozzon újra.",
"UnableToAddANewAppProfilePleaseTryAgain": "Nem lehet új alkalmazásprofilt hozzáadni, próbálkozzon újra.",
"AddDownloadClient": "Letöltőkliens hozzáadása",
"AddDownloadClient": "Letöltési kliens hozzáadása",
"Applications": "Alkalmazások",
"AppProfileInUse": "Használatban lévő alkalmazásprofil",
"Apps": "Appok",
@@ -347,7 +347,7 @@
"Encoding": "Kódolás",
"Grabs": "Megfogások",
"Id": "Azonosító",
"NotificationTriggersHelpText": "Válaszd ki, hogy mely események indítsák el ezt az értesítést",
"NotificationTriggersHelpText": "Válassza ki, hogy mely események váltsák ki ezt az értesítést",
"Presets": "Előbeállítások",
"Privacy": "Titkosítás",
"Query": "Lekérdezés",
@@ -405,7 +405,7 @@
"QueryResults": "Lekérdezési eredmények",
"SemiPrivate": "Fél-Privát",
"TestAllIndexers": "Indexerek tesztelése",
"UnableToLoadApplicationList": "Nem sikerült betölteni az alkalmazáslistát",
"ApplicationsLoadError": "Nem sikerült betölteni az alkalmazáslistát",
"Url": "URL",
"UserAgentProvidedByTheAppThatCalledTheAPI": "Az API-t hívó alkalmazás biztosítja a User-Agent szolgáltatást",
"Website": "Weboldal",
@@ -444,8 +444,8 @@
"LastDuration": "Utolsó időtartam",
"LastExecution": "Utolsó végrehajtás",
"Parameters": "Paraméterek",
"Queued": "Sorba helyezve",
"Started": "Elkezdődött",
"Queued": "Sorban",
"Started": "Elindult",
"NextExecution": "Következő végrehajtás",
"ApplicationLongTermStatusCheckSingleClientMessage": "Az alkamazások elérhetetlenek több mint 6 órája az alábbi hiba miatt: {0}",
"ApplicationLongTermStatusCheckAllClientMessage": "Az összes alkalmazás elérhetetlen több mint 6 órája meghibásodás miatt",
@@ -454,21 +454,21 @@
"MappedCategories": "Térképezett kategóriák",
"DownloadClientCategory": "Letöltési kliens kategória",
"AuthenticationRequired": "Azonosítás szükséges",
"AuthenticationRequiredHelpText": "Módosítsd, hogy mely kérésekhez van szükség hitelesítésre. Ne változtasson, hacsak nem érti a kockázatokat.",
"AuthenticationRequiredWarning": "A hitelesítés nélküli távoli hozzáférés megakadályozása érdekében a {appName}nak mostantól engedélyezni kell a hitelesítést. Konfigurálja a hitelesítési módszert és a hitelesítési adatokat. Opcionálisan letilthatja a helyi címekről történő hitelesítést. További információkért tekintsd meg a GYIK-et.",
"AuthenticationRequiredHelpText": "Módosítsa, hogy mely kérésekhez van szükség hitelesítésre. Ne változtasson, hacsak nem érti a kockázatokat.",
"AuthenticationRequiredWarning": "A hitelesítés nélküli távoli hozzáférés megakadályozása érdekében a(z) {appName} alkalmazásnak engedélyeznie kell a hitelesítést. Opcionálisan letilthatja a helyi címekről történő hitelesítést.",
"TheLatestVersionIsAlreadyInstalled": "A {appName} legújabb verziója már telepítva van",
"Remove": "Eltávolítás",
"Replace": "Kicserél",
"ApplicationURL": "Alkalmazás URL",
"ApplicationUrlHelpText": "Az alkalmazás külső URL-címe, beleértve a http(s)://-t, a portot és az URL-alapot",
"ApplicationUrlHelpText": "Ennek az alkalmazásnak a külső URL-címe, beleértve a http-eket",
"More": "Több",
"Publisher": "Kiadó",
"ApplyChanges": "Változások alkalmazása",
"ApplyTagsHelpTextReplace": "Csere: Cserélje ki a címkéket a beírt címkékre (az összes címke törléséhez ne adjon meg címkéket)",
"EditSelectedIndexers": "Kiválasztott indexelők szerkesztése",
"ApplyTagsHelpTextAdd": "Hozzáadás: Új címkék hozzáadása a meglévő címkékhez",
"ApplyTagsHelpTextAdd": "Hozzáadás: Adja hozzá a címkéket a meglévő címkék listájához",
"ApplyTagsHelpTextHowToApplyApplications": "Hogyan adjunk hozzá címkéket a kiválasztott filmhez",
"ApplyTagsHelpTextHowToApplyIndexers": "Hogyan adjunk hozzá címkéket a kiválasztott filmhez",
"ApplyTagsHelpTextHowToApplyIndexers": "Címkék alkalmazása a kiválasztott indexelőkre",
"ApplyTagsHelpTextRemove": "Eltávolítás: Távolítsa el a beírt címkéket",
"CountIndexersSelected": "{0} Indexelő(k) kiválasztva",
"DeleteSelectedDownloadClients": "Letöltőkliens Törlése",
@@ -494,14 +494,45 @@
"WhatsNew": "Mi az újdonság?",
"ConnectionLostToBackend": "A Radarr elvesztette kapcsolatát a háttérrendszerrel, a funkciók helyreállításához frissíts.",
"minutes": "percek",
"AddConnection": "Gyűjtemény módosítása",
"NotificationStatusAllClientHealthCheckMessage": "Összes alkalmazás elérhetetlen hiba miatt",
"AddConnection": "Csatlakozás hozzáadása",
"NotificationStatusAllClientHealthCheckMessage": "Az összes értesítés nem érhető el hibák miatt",
"NotificationStatusSingleClientHealthCheckMessage": "Az alkalmazás nem áll rendelkezésre az alábbi hibák miatt: {0}",
"AuthBasic": "Alap (Böngésző felugró ablak)",
"AuthForm": "Felhasználó (Bejelentkezési oldal)",
"AuthBasic": "Alap (böngésző előugró ablak)",
"AuthForm": "Űrlapok (bejelentkezési oldal)",
"DisabledForLocalAddresses": "Letiltva a helyi címeknél",
"None": "Nincs",
"None": "Egyik sem",
"ResetAPIKeyMessageText": "Biztos hogy vissza szeretnéd állítani az API-Kulcsod?",
"AuthenticationRequiredPasswordHelpTextWarning": "Adjon meg új jelszót",
"AuthenticationRequiredUsernameHelpTextWarning": "Adjon meg új felhasználónevet"
"AuthenticationRequiredUsernameHelpTextWarning": "Adjon meg új felhasználónevet",
"AppUpdated": "{appName} frissítve",
"AddApplication": "Alkalmazás hozzáadása",
"AddCustomFilter": "Egyéni szűrő hozzáadása",
"Clone": "Klón",
"Implementation": "Végrehajtás",
"AddConnectionImplementation": "Csatlakozás hozzáadása - {implementationName}",
"AddDownloadClientImplementation": "Letöltési kliens hozzáadása {implementationName}",
"AddIndexerImplementation": "Indexelő hozzáadása - {implementationName}",
"ActiveApps": "Aktív alkalmazások",
"ActiveIndexers": "Indexerek",
"AuthenticationMethod": "Hitelesítési Módszer",
"AuthenticationMethodHelpTextWarning": "Kérjük, válasszon érvényes hitelesítési módot",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Erősítsd meg az új jelszót",
"DefaultNameCopiedProfile": "{name} - Másolat",
"EditConnectionImplementation": "Kapcsolat szerkesztése - {implementationName}",
"EditIndexerProxyImplementation": "Indexelő hozzáadása - {megvalósítás neve}",
"AddApplicationImplementation": "Csatlakozás hozzáadása - {implementationName}",
"AddIndexerProxyImplementation": "Indexelő hozzáadása - {implementationName}",
"EditIndexerImplementation": "Indexelő szerkesztése {implementationName}",
"EditApplicationImplementation": "Csatlakozás hozzáadása - {megvalósítás neve}",
"EditDownloadClientImplementation": "Letöltési kliens szerkesztése {implementationName}",
"NoIndexersFound": "Nem található indexelő",
"NoDownloadClientsFound": "Nem találhatók letöltő kliensek",
"AdvancedSettingsShownClickToHide": "Haladó beállítások megjelenítve, kattints az elrejtéshez",
"AdvancedSettingsHiddenClickToShow": "Haladó beállítások rejtve, kattints a megjelenítéshez",
"AppUpdatedVersion": "{appName} frissítve lett `{version}` verzióra, ahhoz hogy a legutóbbi változtatások életbelépjenek, töltsd újra a {appName}-t",
"AddCategory": "Kategória hozzáadása",
"External": "Külső",
"NoHistoryFound": "Nem található előzmény",
"InvalidUILanguage": "A felhasználói felület érvénytelen nyelvre van állítva, javítsa ki, és mentse el a beállításait",
"ManageDownloadClients": "Letöltési kliensek kezelése"
}

View File

@@ -78,5 +78,8 @@
"AuthenticationRequiredPasswordHelpTextWarning": "Masukkan sandi baru",
"AuthenticationRequiredUsernameHelpTextWarning": "Masukkan nama pengguna baru",
"AuthenticationRequiredWarning": "Untuk mencegah akses jarak jauh tanpa autentikasi, {appName} kini mewajibkan pengaktifkan autentikasi. Kamu dapat menonaktifkan autentikasi dari jaringan lokal.",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Konfirmasi sandi baru"
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Konfirmasi sandi baru",
"days": "hari",
"minutes": "menit",
"Link": "Tautan"
}

View File

@@ -65,7 +65,7 @@
"Type": "Tegund",
"UnableToAddANewApplicationPleaseTryAgain": "Ekki er hægt að bæta við nýrri tilkynningu. Reyndu aftur.",
"UnableToLoadBackups": "Ekki er hægt að hlaða afrit",
"UnableToLoadDownloadClients": "Ekki er hægt að hlaða niður viðskiptavinum",
"DownloadClientsLoadError": "Ekki er hægt að hlaða niður viðskiptavinum",
"UnableToLoadGeneralSettings": "Ekki er hægt að hlaða almennar stillingar",
"UnableToLoadHistory": "Ekki er hægt að hlaða sögu",
"UnableToLoadNotifications": "Ekki er hægt að hlaða tilkynningar",
@@ -199,7 +199,7 @@
"CouldNotConnectSignalR": "Gat ekki tengst SignalR, HÍ mun ekki uppfæra",
"CustomFilters": "Sérsniðin síur",
"Dates": "Dagsetningar",
"DBMigration": "DB fólksflutningar",
"DatabaseMigration": "DB fólksflutningar",
"Delete": "Eyða",
"DeleteApplicationMessageText": "Ertu viss um að þú viljir eyða tilkynningunni „{0}“?",
"DeleteBackup": "Eyða afritun",

View File

@@ -17,7 +17,7 @@
"Grabbed": "Preso",
"Clear": "Cancella",
"AppDataLocationHealthCheckMessage": "L'aggiornamento non sarà possibile per evitare la cancellazione di AppData durante l'aggiornamento",
"Analytics": "Analitica",
"Analytics": "Statistiche",
"Added": "Aggiunto",
"About": "Info",
"Updates": "Aggiornamenti",
@@ -76,7 +76,7 @@
"Date": "Data",
"CustomFilters": "Filtri Personalizzati",
"Connect": "Notifiche",
"Connections": "Collegamenti",
"Connections": "Connessioni",
"ConnectSettingsSummary": "Notifiche e script personalizzati",
"BackupNow": "Esegui backup ora",
"Backup": "Backup",
@@ -84,28 +84,28 @@
"Actions": "Azioni",
"Age": "Età",
"Close": "Chiudi",
"CloneProfile": "Clona il Profilo",
"ClientPriority": "Priorità del Client",
"CloneProfile": "Copia Profilo",
"ClientPriority": "Priorità Client",
"ChangeHasNotBeenSavedYet": "Il cambio non è stato ancora salvato",
"CertificateValidationHelpText": "Cambia quanto è rigorosa la convalida del certificato HTTPS",
"CertificateValidation": "Convalida del Certificato",
"Cancel": "Annulla",
"BypassProxyForLocalAddresses": "Evita il Proxy per gli Indirizzi Locali",
"Branch": "Ramo",
"BindAddressHelpText": "Indirizzo IP valido, localhost o '*' per tutte le interfacce di rete",
"BindAddress": "Indirizzo di Bind",
"BindAddressHelpText": "Indirizzi IP validi, localhost o '*' per tutte le interfacce",
"BindAddress": "Indirizzo di Ascolto",
"Backups": "Backups",
"BackupRetentionHelpText": "I backup automatici più vecchi del periodo di conservazione verranno eliminati automaticamente",
"BackupIntervalHelpText": "Intervallo tra i backup automatici",
"BackupRetentionHelpText": "I backup più vecchi del periodo specificato saranno cancellati automaticamente",
"BackupIntervalHelpText": "Intervallo fra i backup automatici",
"BackupFolderHelpText": "I percorsi relativi saranno nella cartella AppData di {appName}",
"Automatic": "Automatico",
"AuthenticationMethodHelpText": "Richiedi Nome Utente e Password per accedere a {appName}",
"AuthenticationMethodHelpText": "Inserisci Username e Password per accedere a {appName}",
"Authentication": "Autenticazione",
"ApplyTags": "Applica Etichette",
"Apply": "Applica",
"AppDataDirectory": "Cartella AppData",
"ApiKey": "Chiave API",
"AnalyticsEnabledHelpText": "Invia informazioni anonime sull'uso e sugli errori ai server di {appName}. Questo include informazioni sul tuo browser, quali pagine della WebUI di {appName} utilizzi, la segnalazione di errori così come il sistema operativo e la versione di runtime. Useremo queste informazioni per dare priorità alle funzionalità e alle correzioni dei bug.",
"AnalyticsEnabledHelpText": "Inviare informazioni anonime sull'utilizzo e sugli errori ai server di {appName}. Ciò include informazioni sul tuo browser, quali pagine dell'interfaccia di {appName} usi, la segnalazione di errori così come la versione del sistema operativo e del runtime. Utilizzeremo queste informazioni per dare priorità alle nuove funzioni e alle correzioni di bug.",
"Warn": "Attenzione",
"Type": "Tipo",
"Title": "Titolo",
@@ -136,11 +136,11 @@
"DownloadClientSettings": "Impostazioni del Client di Download",
"Docker": "Docker",
"DeleteTag": "Elimina Etichetta",
"DeleteNotification": "Cancella la Notifica",
"DeleteDownloadClient": "Cancella il Client di Download",
"DeleteNotification": "Cancella Notifica",
"DeleteDownloadClient": "Cancella Client di Download",
"DeleteBackup": "Cancella Backup",
"DBMigration": "Migrazione DB",
"ConnectSettings": "Impostazioni di Connessione",
"DatabaseMigration": "Migrazione DB",
"ConnectSettings": "Impostazioni Collegamento",
"ConnectionLost": "Connessione Persa",
"Component": "Componente",
"Columns": "Colonne",
@@ -222,7 +222,7 @@
"DeleteTagMessageText": "Sei sicuro di voler eliminare l'etichetta '{0}'?",
"DeleteNotificationMessageText": "Sei sicuro di voler eliminare la notifica '{0}'?",
"DeleteDownloadClientMessageText": "Sei sicuro di voler eliminare il client di download '{0}'?",
"BeforeUpdate": "Prima di aggiornare",
"BeforeUpdate": "Prima dell'aggiornamento",
"Usenet": "Usenet",
"Uptime": "Tempo di attività",
"YesCancel": "Si, Cancella",
@@ -232,7 +232,7 @@
"UrlBaseHelpText": "Per il supporto al reverse proxy, di default è vuoto",
"URLBase": "Base Url",
"UpdateScriptPathHelpText": "Percorso verso uno script personalizzato che prende un pacchetto di aggiornamento estratto e gestisce il resto del processo di aggiornamento",
"UpdateMechanismHelpText": "Usa l'aggiornamento integrato in {appName} o uno script",
"UpdateMechanismHelpText": "Usa il sistema di aggiornamento interno di {appName} o uno script",
"UpdateAutomaticallyHelpText": "Scarica e installa automaticamente gli aggiornamenti. Sarai comunque in grado in installarli da Sistema: Aggiornamenti",
"UnsavedChanges": "Modifiche non salvate",
"UnableToLoadUISettings": "Impossibile caricare le impostazioni interfaccia",
@@ -240,7 +240,7 @@
"UnableToLoadNotifications": "Impossibile caricare le Notifiche",
"UnableToLoadHistory": "Impossibile caricare la storia",
"UnableToLoadGeneralSettings": "Impossibile caricare le impostazioni Generali",
"UnableToLoadDownloadClients": "Impossibile caricare i client di download",
"DownloadClientsLoadError": "Impossibile caricare i client di download",
"UnableToLoadBackups": "Impossibile caricare i backup",
"UnableToAddANewNotificationPleaseTryAgain": "Impossibile aggiungere una nuova notifica, riprova.",
"UnableToAddANewIndexerPleaseTryAgain": "Impossibile aggiungere un nuovo Indicizzatore, riprova.",
@@ -293,7 +293,7 @@
"EnableIndexer": "Abilita Indicizzatore",
"AddNewIndexer": "Aggiungi nuovo Indicizzatore",
"IndexerAuth": "Autenticazione dell'Indicizzatore",
"AddDownloadClient": "Aggiungi Downloader",
"AddDownloadClient": "Aggiungi Client di Download",
"Category": "Categoria",
"ClearHistory": "Cancella cronologia",
"ClearHistoryMessageText": "Sei sicuro di voler cancellare tutta la cronologia di {appName}?",
@@ -374,7 +374,7 @@
"SyncLevel": "Livello Sincronizzazione",
"IndexerProxy": "Proxy dell'Indicizzatore",
"Proxies": "Proxy",
"UnableToLoadApplicationList": "Impossibile careicare la lista applicazioni",
"ApplicationsLoadError": "Impossibile careicare la lista applicazioni",
"Website": "Sito",
"Privacy": "Privacy",
"SettingsIndexerLogging": "Logging Migliorato dell'Indicizzatore",
@@ -451,8 +451,8 @@
"Started": "Iniziato",
"AreYouSureYouWantToDeleteCategory": "Vuoi davvero cancellare la categoria mappata?",
"AuthenticationRequired": "Autenticazione richiesta",
"AuthenticationRequiredHelpText": "Cambia a quali richieste l'autenticazione verrà richiesta. Non cambiare se non comprendi i rischi.",
"AuthenticationRequiredWarning": "Per impedire accessi remoti senza autenticazione, {appName} ora richiede che l'autenticazione venga attivata. Puoi disattivare l'autenticazione per indirizzi privati.",
"AuthenticationRequiredHelpText": "Cambia a quali richieste l'autenticazione verrà chiesta. Non cambiare se non comprendi i rischi.",
"AuthenticationRequiredWarning": "Per prevenire accessi remoti non autorizzati, {appName} da ora richiede che l'autenticazione sia abilitata. Opzionalmente puoi disabilitare l'autenticazione per gli indirizzi di rete locali.",
"DeleteClientCategory": "Cancella categoria del client di download",
"DownloadClientCategory": "Categoria client di download",
"MappedCategories": "Categorie mappate",
@@ -498,9 +498,22 @@
"AddConnection": "Aggiungi Connessione",
"NotificationStatusAllClientHealthCheckMessage": "Tutte le applicazioni non sono disponibili a causa di errori",
"NotificationStatusSingleClientHealthCheckMessage": "Applicazioni non disponibili a causa di errori: {0}",
"AuthForm": "Moduli (Pagina di Accesso)",
"AuthForm": "Form (Pagina di Login)",
"DisabledForLocalAddresses": "Disabilitato per Indirizzi Locali",
"None": "Nessuna",
"ResetAPIKeyMessageText": "Sei sicuro di voler reimpostare la tua chiave API?",
"AuthBasic": "Base (Popup del Browser)"
"AuthBasic": "Base (Popup del Browser)",
"EditSelectedDownloadClients": "Modifica i Client di Download Selezionati",
"AppUpdated": "{appName} Aggiornato",
"AddCustomFilter": "Aggiungi Filtro Personalizzato",
"AddConnectionImplementation": "Aggiungi Connessione - {implementationName}",
"AddDownloadClientImplementation": "Aggiungi un Client di Download - {implementationName}",
"AddIndexerImplementation": "Aggiungi indicizzatore - {implementationName}",
"AuthenticationRequiredUsernameHelpTextWarning": "Inserisci username",
"AuthenticationMethod": "Metodo di Autenticazione",
"AuthenticationMethodHelpTextWarning": "Selezione un metodo di autenticazione valido",
"AuthenticationRequiredPasswordHelpTextWarning": "Inserisci la nuova password",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Conferma la nuova password",
"Clone": "Copia",
"DefaultNameCopiedProfile": "{name} - Copia"
}

View File

@@ -100,7 +100,7 @@
"TagCannotBeDeletedWhileInUse": "使用中は削除できません",
"TagIsNotUsedAndCanBeDeleted": "タグは使用されておらず、削除できます",
"TestAll": "すべてテスト",
"UnableToLoadDownloadClients": "ダウンロードクライアントを読み込めません",
"DownloadClientsLoadError": "ダウンロードクライアントを読み込めません",
"UnableToLoadGeneralSettings": "一般設定を読み込めません",
"UpdateAutomaticallyHelpText": "アップデートを自動的にダウンロードしてインストールします。 SystemUpdatesから引き続きインストールできます。",
"Updates": "更新",
@@ -141,7 +141,7 @@
"UI": "UI",
"CouldNotConnectSignalR": "SignalRに接続できませんでした。UIは更新されません",
"Custom": "カスタム",
"DBMigration": "DB移行",
"DatabaseMigration": "DB移行",
"Delete": "削除",
"DeleteApplicationMessageText": "通知「{0}」を削除してもよろしいですか?",
"DeleteBackup": "バックアップを削除する",
@@ -352,5 +352,6 @@
"AuthForm": "フォーム(ログインページ)",
"DisabledForLocalAddresses": "ローカルアドレスでは無効",
"None": "なし",
"ResetAPIKeyMessageText": "APIキーをリセットしてもよろしいですか"
"ResetAPIKeyMessageText": "APIキーをリセットしてもよろしいですか",
"RestartProwlarr": "{appName}を再起動します"
}

View File

@@ -26,7 +26,7 @@
"Connections": "연결",
"CouldNotConnectSignalR": "SignalR에 연결할 수 없습니다. UI가 업데이트되지 않습니다.",
"Custom": "사용자 지정",
"DBMigration": "DB 마이그레이션",
"DatabaseMigration": "DB 마이그레이션",
"DeleteBackupMessageText": "백업 '{0}'을(를) 삭제하시겠습니까?",
"BackupNow": "지금 백업",
"Authentication": "인증",
@@ -160,7 +160,7 @@
"Title": "표제",
"Today": "오늘",
"UILanguageHelpTextWarning": "브라우저 새로 고침 필요",
"UnableToLoadDownloadClients": "다운로드 클라이언트를로드 할 수 없습니다.",
"DownloadClientsLoadError": "다운로드 클라이언트를로드 할 수 없습니다.",
"UnableToLoadHistory": "기록을로드 할 수 없습니다.",
"UnableToLoadTags": "태그를로드 할 수 없습니다.",
"UnableToLoadUISettings": "UI 설정을로드 할 수 없습니다.",
@@ -352,5 +352,6 @@
"DisabledForLocalAddresses": "로컬 주소에 대해 비활성화됨",
"None": "없음",
"ResetAPIKeyMessageText": "API 키를 재설정하시겠습니까?",
"StopSelecting": "선택 취소"
"StopSelecting": "선택 취소",
"RestartProwlarr": "{appName} 다시 시작"
}

View File

@@ -5,5 +5,16 @@
"Add": "Pievienot",
"AddDownloadClient": "Pievienot Lejupielādes Klientu",
"AddConnection": "Pievienot Savienojumu",
"AddConnectionImplementation": "Pievienot Savienojumu - {implementationName}"
"AddConnectionImplementation": "Pievienot Savienojumu - {implementationName}",
"New": "Jauns",
"Connect": "Paziņojumi",
"Notification": "Paziņojumi",
"Notifications": "Paziņojumi",
"EditConnectionImplementation": "Pievienot Savienojumu - {implementationName}",
"EditIndexerImplementation": "Pievienot Nosacījumu - {implementationName}",
"EditApplicationImplementation": "Pievienot Savienojumu - {implementationName}",
"AddIndexerImplementation": "Pievienot Nosacījumu - {implementationName}",
"AddIndexerProxyImplementation": "Pievienot Nosacījumu - {implementationName}",
"AddApplicationImplementation": "Pievienot Savienojumu - {implementationName}",
"EditIndexerProxyImplementation": "Pievienot Nosacījumu - {implementationName}"
}

View File

@@ -1,5 +1,5 @@
{
"Add": "Legge til",
"Add": "Legg til",
"AddDownloadClient": "Legg til nedlastingsklient",
"Added": "La til",
"AddingTag": "Legger til tag",

View File

@@ -81,7 +81,7 @@
"CouldNotConnectSignalR": "Kan geen verbinding maken met SignalR, gebruikersinterface wordt niet bijgewerkt",
"Custom": "Aangepast",
"CustomFilters": "Aangepaste Filters",
"DBMigration": "DB Migratie",
"DatabaseMigration": "DB Migratie",
"Database": "Databasis",
"Date": "Datum",
"Dates": "Datum en tijd",
@@ -388,7 +388,7 @@
"UnableToLoadAppProfiles": "Kan app-profielen niet laden",
"UnableToLoadBackups": "Kon geen veiligheidskopieën laden",
"UnableToLoadDevelopmentSettings": "Kan ontwikkelingsinstellingen niet laden",
"UnableToLoadDownloadClients": "Downloaders kunnen niet worden geladen",
"DownloadClientsLoadError": "Downloaders kunnen niet worden geladen",
"UnableToLoadGeneralSettings": "Kon Algemene instellingen niet inladen",
"UnableToLoadHistory": "Kon geschiedenis niet laden",
"UnableToLoadIndexerProxies": "Kan Indexeerder-proxy's niet laden",
@@ -452,8 +452,8 @@
"NotificationStatusSingleClientHealthCheckMessage": "Applicaties onbeschikbaar door fouten",
"AddConnection": "Voeg connectie toe",
"NotificationStatusAllClientHealthCheckMessage": "Alle applicaties onbeschikbaar door fouten",
"AuthBasic": "Basis (Browser Pop-up)",
"AuthForm": "Formulier (Login Pagina)",
"AuthBasic": "Basic (Browser Pop-up)",
"AuthForm": "Formulier (inlogpagina)",
"DisabledForLocalAddresses": "Uitgeschakeld voor lokale adressen",
"None": "Geen",
"ResetAPIKeyMessageText": "Bent u zeker dat u uw API-sleutel wilt resetten?",
@@ -476,5 +476,11 @@
"EditIndexerProxyImplementation": "Indexeerder toevoegen - {implementationName}",
"AuthenticationMethod": "Authenticatiemethode",
"AuthenticationRequired": "Verificatie vereist",
"AuthenticationMethodHelpTextWarning": "Selecteer een geldige verificatie methode"
"AuthenticationMethodHelpTextWarning": "Selecteer een geldige verificatie methode",
"AuthenticationRequiredHelpText": "Pas aan welke requests verificatie nodig hebben. Pas niets aan als je de risico's niet begrijpt.",
"AuthenticationRequiredPasswordHelpTextWarning": "Voer een nieuw wachtwoord in",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Bevestig het nieuwe wachtwoord",
"AuthenticationRequiredUsernameHelpTextWarning": "Voeg een nieuwe gebruikersnaam in",
"AuthenticationRequiredWarning": "Om toegang zonder authenticatie te voorkomen vereist {appName} nu verificatie. Je kan dit optioneel uitschakelen voor lokale adressen.",
"Episode": "aflevering"
}

View File

@@ -6,7 +6,7 @@
"Analytics": "Analityka",
"All": "Wszystkie",
"Added": "Dodane",
"Actions": "Aktywności",
"Actions": "Akcje",
"About": "O",
"Logging": "Logowanie",
"EnableSslHelpText": " Wymaga ponownego uruchomienia jako administrator, aby odniosło skutek",
@@ -22,7 +22,7 @@
"Automatic": "Automatyczny",
"ApplyTags": "Zastosuj tagi",
"BackupIntervalHelpText": "Odstęp czasu między automatycznymi kopiami zapasowymi",
"Close": "Blisko",
"Close": "Zamknij",
"CloseCurrentModal": "Zamknij bieżący tryb",
"Delete": "Usunąć",
"Discord": "Niezgoda",
@@ -54,7 +54,7 @@
"ApiKey": "Klucz API",
"UI": "UI",
"AcceptConfirmationModal": "Zaakceptuj tryb potwierdzenia",
"AddIndexer": "Dodaj indeksator",
"AddIndexer": "Dodaj indekser",
"AddingTag": "Dodawanie tagu",
"Age": "Wiek",
"CertificateValidationHelpText": "Zmień ścisłą walidację certyfikatu HTTPS",
@@ -121,7 +121,7 @@
"Custom": "Zwyczaj",
"Date": "Data",
"Dates": "Daktyle",
"DBMigration": "Migracja bazy danych",
"DatabaseMigration": "Migracja bazy danych",
"DeleteApplicationMessageText": "Czy na pewno chcesz usunąć powiadomienie „{0}”?",
"DeleteBackup": "Usuń kopię zapasową",
"DeleteBackupMessageText": "Czy na pewno chcesz usunąć kopię zapasową „{0}”?",
@@ -262,7 +262,7 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Nie można dodać nowego indeksatora, spróbuj ponownie.",
"UnableToAddANewNotificationPleaseTryAgain": "Nie można dodać nowego powiadomienia, spróbuj ponownie.",
"UnableToLoadBackups": "Nie można załadować kopii zapasowych",
"UnableToLoadDownloadClients": "Nie można załadować klientów pobierania",
"DownloadClientsLoadError": "Nie można załadować klientów pobierania",
"UnableToLoadGeneralSettings": "Nie można załadować ustawień ogólnych",
"UnableToLoadHistory": "Nie można załadować historii",
"UnableToLoadTags": "Nie można załadować tagów",
@@ -375,5 +375,7 @@
"None": "Żaden",
"AuthBasic": "Podstawowe (wyskakujące okienko przeglądarki)",
"ResetAPIKeyMessageText": "Czy na pewno chcesz zresetować swój klucz API?",
"RestartProwlarr": "Zrestartuj {appName}"
"RestartProwlarr": "Zrestartuj {appName}",
"AddConnectionImplementation": "Dodaj Connection - {implementationName}",
"AddDownloadClientImplementation": "Dodaj klienta pobierania - {implementationName}"
}

View File

@@ -120,7 +120,7 @@
"Clear": "Limpar",
"Cancel": "Cancelar",
"BackupNow": "Criar cópia de segurança",
"Backup": "Cópia de segurança",
"Backup": "Backup",
"Apply": "Aplicar",
"Analytics": "Análises",
"All": "Todos",
@@ -170,7 +170,7 @@
"DeleteNotification": "Eliminar notificação",
"DeleteDownloadClient": "Eliminar cliente de transferências",
"DeleteBackup": "Eliminar cópia de segurança",
"DBMigration": "Migração da base de dados",
"DatabaseMigration": "Migração da base de dados",
"ConnectSettings": "Definições de ligação",
"CloneProfile": "Clonar perfil",
"ChangeHasNotBeenSavedYet": "A mudança ainda não foi guardada",
@@ -181,7 +181,7 @@
"BindAddressHelpText": "Endereço de IP válido, localhost ou \"*\" para todas as interfaces",
"BindAddress": "Endereço de vínculo",
"Backups": "Cópias de segurança",
"BackupFolderHelpText": "Caminhos relativos estarão na pasta AppData do {appName}",
"BackupFolderHelpText": "Caminhos relativos estarão no diretório AppData do {appName}",
"BackupIntervalHelpText": "Intervalo entre cópias de segurança automáticas",
"BackupRetentionHelpText": "Cópias de segurança automáticas anteriores ao período de retenção serão eliminadas automaticamente",
"ClientPriority": "Prioridade do cliente",
@@ -268,7 +268,7 @@
"UnableToLoadNotifications": "Não foi possível carregar as notificações",
"UnableToLoadHistory": "Não foi possível carregar o histórico",
"UnableToLoadGeneralSettings": "Não foi possível carregar as definições gerais",
"UnableToLoadDownloadClients": "Não foi possível carregar os clientes de transferências",
"DownloadClientsLoadError": "Não foi possível carregar os clientes de transferências",
"UnableToAddANewDownloadClientPleaseTryAgain": "Não foi possível adicionar um novo cliente de transferências, tenta novamente.",
"UnableToLoadBackups": "Não foi possível carregar as cópias de segurança",
"UnableToAddANewNotificationPleaseTryAgain": "Não foi possível adicionar uma nova notificação, tenta novamente.",
@@ -390,7 +390,7 @@
"InstanceName": "Nome da Instancia",
"InstanceNameHelpText": "Nome da instância na aba e nome da aplicação para Syslog",
"UnableToLoadIndexerProxies": "Incapaz de ler o indexador de proxies",
"UnableToLoadApplicationList": "Não foi possível carregar a lista de aplicações",
"ApplicationsLoadError": "Não foi possível carregar a lista de aplicações",
"ApplicationLongTermStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a erros á mais de 6 horas",
"ApplicationLongTermStatusCheckSingleClientMessage": "Indexadores indisponíveis devido a erros à mais de 6 horas: {0}",
"Duration": "Duração",
@@ -472,5 +472,8 @@
"EditSelectedDownloadClients": "Editar Clientes de Transferência Selecionados",
"Album": "álbum",
"Artist": "artista",
"DefaultNameCopiedProfile": "{name} - Copiar"
"DefaultNameCopiedProfile": "{name} - Copiar",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmar nova senha",
"AdvancedSettingsHiddenClickToShow": "Definições avançadas ocultas, clique para mostrar",
"AddCategory": "Adicionar Categoria"
}

View File

@@ -93,7 +93,7 @@
"CouldNotConnectSignalR": "Não é possível conectar ao SignalR, a interface não atualizará",
"Custom": "Personalizado",
"CustomFilters": "Filtros personalizados",
"DBMigration": "Migração de banco de dados",
"DatabaseMigration": "Migração de banco de dados",
"Database": "Banco de dados",
"Date": "Data",
"Dates": "Datas",
@@ -110,7 +110,7 @@
"DeleteIndexerProxyMessageText": "Tem certeza de que deseja excluir o proxy do indexador '{name}'?",
"DeleteNotification": "Excluir notificação",
"DeleteNotificationMessageText": "Tem certeza de que deseja excluir a notificação '{name}'?",
"DeleteTag": "Excluir tag",
"DeleteTag": "Excluir Etiqueta",
"DeleteTagMessageText": "Tem certeza de que deseja excluir a tag '{label}'?",
"Description": "Descrição",
"Details": "Detalhes",
@@ -139,7 +139,7 @@
"EnableInteractiveSearch": "Ativar pesquisa interativa",
"EnableInteractiveSearchHelpText": "Será usado com a pesquisa interativa",
"EnableRss": "Habilitar RSS",
"EnableRssHelpText": "Habilitar feed RSS para o indexador",
"EnableRssHelpText": "Habilitar feed RSS para indexador",
"EnableSSL": "Habilitar SSL",
"EnableSslHelpText": " Requer a reinicialização com a execução como administrador para fazer efeito",
"Enabled": "Habilitado",
@@ -461,10 +461,10 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Não foi possível adicionar um novo proxy indexador, tente novamente.",
"UnableToAddANewNotificationPleaseTryAgain": "Não foi possível adicionar uma nova notificação. Tente novamente.",
"UnableToLoadAppProfiles": "Não foi possível carregar os perfis de aplicativos",
"UnableToLoadApplicationList": "Não é possível carregar a lista de aplicativos",
"ApplicationsLoadError": "Não é possível carregar a lista de aplicativos",
"UnableToLoadBackups": "Não foi possível carregar os backups",
"UnableToLoadDevelopmentSettings": "Não foi possível carregar as configurações de desenvolvimento",
"UnableToLoadDownloadClients": "Não foi possível carregar os clientes de download",
"DownloadClientsLoadError": "Não foi possível carregar os clientes de download",
"UnableToLoadGeneralSettings": "Não foi possível carregar as configurações gerais",
"UnableToLoadHistory": "Não foi possível carregar o histórico",
"UnableToLoadIndexerProxies": "Não foi possível carregar proxies do indexador",
@@ -601,5 +601,9 @@
"NoIndexerCategories": "Nenhuma categoria encontrada para este indexador",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirme a nova senha",
"PasswordConfirmation": "Confirmação Da Senha",
"InvalidUILanguage": "Sua UI está definida com um idioma inválido, corrija-a e salve suas configurações"
"InvalidUILanguage": "Sua UI está definida com um idioma inválido, corrija-a e salve suas configurações",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Seja para usar o layout de conteúdo configurado do qBittorrent, o layout original do torrent ou sempre criar uma subpasta (qBittorrent 4.3.2+)",
"DownloadClientQbittorrentSettingsContentLayout": "Layout de Conteúdo",
"IndexerId": "ID do Indexador",
"DownloadClientAriaSettingsDirectoryHelpText": "Local opcional para colocar downloads, deixe em branco para usar o local padrão do Aria2"
}

View File

@@ -179,7 +179,7 @@
"Today": "Astăzi",
"UnableToAddANewNotificationPleaseTryAgain": "Imposibil de adăugat o nouă notificare, încercați din nou.",
"UnableToLoadBackups": "Imposibil de încărcat copiile de rezervă",
"UnableToLoadDownloadClients": "Nu se pot încărca clienții de descărcare",
"DownloadClientsLoadError": "Nu se pot încărca clienții de descărcare",
"URLBase": "Baza URL",
"UrlBaseHelpText": "Pentru suport proxy invers, implicit este gol",
"Usenet": "Usenet",
@@ -228,7 +228,7 @@
"ChangeHasNotBeenSavedYet": "Modificarea nu a fost încă salvată",
"CloneProfile": "Clonați profil",
"NoLeaveIt": "Nu, lasă-l",
"DBMigration": "Migrarea BD",
"DatabaseMigration": "Migrarea BD",
"DeleteBackupMessageText": "Sigur doriți să ștergeți copia de siguranță „{0}”?",
"DeleteTagMessageText": "Sigur doriți să ștergeți eticheta '{label}'?",
"EnableInteractiveSearch": "Activați căutarea interactivă",

View File

@@ -118,7 +118,7 @@
"CustomFilters": "Настраиваемые фильтры",
"Date": "Дата",
"Dates": "Даты",
"DBMigration": "Перенос БД",
"DatabaseMigration": "Перенос БД",
"DeleteNotification": "Удалить уведомление",
"DeleteNotificationMessageText": "Вы уверены, что хотите удалить уведомление '{name}'?",
"DeleteTag": "Удалить тэг",
@@ -256,7 +256,7 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Не удалось добавить новый индексатор, повторите попытку.",
"UnableToAddANewNotificationPleaseTryAgain": "Невозможно добавить новое уведомление, попробуйте еще раз.",
"UnableToLoadBackups": "Невозможно загрузить резервные копии",
"UnableToLoadDownloadClients": "Невозможно загрузить загрузчики",
"DownloadClientsLoadError": "Невозможно загрузить загрузчики",
"UnableToLoadGeneralSettings": "Невозможно загрузить общие настройки",
"UnableToLoadNotifications": "Невозможно загрузить уведомления",
"UnableToLoadUISettings": "Не удалось загрузить настройки пользовательского интерфейса",
@@ -419,5 +419,6 @@
"AuthenticationMethod": "Способ авторизации",
"AuthenticationRequiredPasswordHelpTextWarning": "Введите новый пароль",
"AuthenticationRequiredUsernameHelpTextWarning": "Введите новое имя пользователя",
"RestartProwlarr": "Перезапустить {appName}"
"RestartProwlarr": "Перезапустить {appName}",
"AuthenticationRequiredWarning": "Чтобы предотвратить удаленный доступ без авторизации, {appName} теперь требует, чтобы авторизация была включена. При желании вы можете отключить авторизацию с локальных адресов."
}

View File

@@ -13,10 +13,10 @@
"Filter": "Filter",
"Files": "Filer",
"Events": "Händelser",
"Edit": "Redigera",
"Edit": "Ändra",
"DownloadClientStatusCheckSingleClientMessage": "Otillgängliga nedladdningsklienter på grund av misslyckade anslutningsförsök: {0}",
"DownloadClientStatusCheckAllClientMessage": "Samtliga nedladdningsklienter är otillgängliga på grund av misslyckade anslutningsförsök",
"DownloadClients": "Nedladdningsklienter",
"DownloadClients": "Nerladdningsklienter",
"Delete": "Radera",
"Dates": "Datum",
"Date": "Datum",
@@ -169,7 +169,7 @@
"BindAddress": "Bindningsadress",
"Branch": "Gren",
"CloseCurrentModal": "Stäng nuvarande modal",
"DBMigration": "DB Migration",
"DatabaseMigration": "DB Migration",
"DeleteApplicationMessageText": "Är du säker på att du vill radera aviseringen '{0}'?",
"Discord": "Discord",
"Donations": "Donationer",
@@ -196,7 +196,7 @@
"IncludeHealthWarningsHelpText": "Inkludera hälsovarningar",
"IndexerFlags": "Indexerflaggor",
"AddDownloadClient": "Lägg till nedladdningsklient",
"AddIndexer": "Lägg till indexerare",
"AddIndexer": "Lägg till index",
"AddingTag": "Lägg till tagg",
"Enabled": "Aktiverad",
"Exception": "Undantag",
@@ -308,7 +308,7 @@
"ApplicationStatusCheckAllClientMessage": "Samtliga listor otillgängliga på grund av fel",
"LogLevel": "Loggnivå",
"NoLogFiles": "Inga loggfiler",
"UnableToLoadDownloadClients": "Det gick inte att ladda nedladdningsklienter",
"DownloadClientsLoadError": "Det gick inte att ladda nedladdningsklienter",
"UpdateMechanismHelpText": "Använd {appName}s inbyggda uppdaterare eller ett skript",
"AddDownloadClientToProwlarr": "Lägg till en nedladdningsklient tillåter {appName} att sända nyutgåvor direkt från UI:t samtidigt som en manuell sökning genomförs.",
"UnableToLoadIndexerProxies": "Kunde inte ladda Indexer Proxies",
@@ -394,7 +394,7 @@
"No": "Nej",
"ApplicationLongTermStatusCheckAllClientMessage": "Alla indexerare är inte tillgängliga på grund av fel i mer än 6 timmar",
"ApplicationLongTermStatusCheckSingleClientMessage": "Indexatorer är inte tillgängliga på grund av misslyckanden i mer än sex timmar: {0}",
"Duration": "Tid",
"Duration": "Längd",
"Ended": "Avslutad",
"LastDuration": "lastDuration",
"LastExecution": "Senaste avrättningen",
@@ -437,5 +437,6 @@
"AuthForm": "Blanketter (inloggningssida)",
"DisabledForLocalAddresses": "Inaktiverad för lokala adresser",
"None": "Ingen",
"ResetAPIKeyMessageText": "Är du säker på att du vill nollställa din API-nyckel?"
"ResetAPIKeyMessageText": "Är du säker på att du vill nollställa din API-nyckel?",
"AddCustomFilter": "Lägg till anpassat filter"
}

View File

@@ -58,7 +58,7 @@
"UILanguageHelpTextWarning": "จำเป็นต้องโหลดเบราว์เซอร์ใหม่",
"UnableToAddANewIndexerPleaseTryAgain": "ไม่สามารถเพิ่มตัวสร้างดัชนีใหม่ได้โปรดลองอีกครั้ง",
"UnableToAddANewIndexerProxyPleaseTryAgain": "ไม่สามารถเพิ่มตัวสร้างดัชนีใหม่ได้โปรดลองอีกครั้ง",
"UnableToLoadDownloadClients": "ไม่สามารถโหลดไคลเอนต์ดาวน์โหลด",
"DownloadClientsLoadError": "ไม่สามารถโหลดไคลเอนต์ดาวน์โหลด",
"UpdateCheckUINotWritableMessage": "ไม่สามารถติดตั้งการอัปเดตเนื่องจากโฟลเดอร์ UI \"{0}\" ไม่สามารถเขียนได้โดยผู้ใช้ \"{1}\"",
"Updates": "อัปเดต",
"UpdateScriptPathHelpText": "พา ธ ไปยังสคริปต์แบบกำหนดเองที่ใช้แพ็กเกจโปรแกรมปรับปรุงที่แยกออกมาและจัดการส่วนที่เหลือของกระบวนการอัพเดต",
@@ -139,7 +139,7 @@
"CustomFilters": "ตัวกรองที่กำหนดเอง",
"Date": "วันที่",
"Dates": "วันที่",
"DBMigration": "การย้ายฐานข้อมูล",
"DatabaseMigration": "การย้ายฐานข้อมูล",
"Delete": "ลบ",
"DeleteApplicationMessageText": "แน่ใจไหมว่าต้องการลบการแจ้งเตือน \"{0}\"",
"DeleteBackup": "ลบข้อมูลสำรอง",

View File

@@ -21,7 +21,7 @@
"Files": "Dosyalar",
"Filename": "Dosya adı",
"AppDataLocationHealthCheckMessage": "Güncellemede AppData'nın silinmesini önlemek için güncelleme mümkün olmayacak",
"Actions": "Etkiler",
"Actions": "Eylemler",
"About": "Hakkında",
"View": "Görünüm",
"Updates": "Güncellemeler",
@@ -106,7 +106,7 @@
"DeleteTag": "Etiketi Sil",
"BindAddressHelpText": "Tüm arayüzler için geçerli IP4 adresi veya '*'",
"ConnectSettings": "Bağlantı Ayarları",
"DBMigration": "DB Geçişi",
"DatabaseMigration": "DB Geçişi",
"DeleteApplicationMessageText": "'{0}' bildirimini silmek istediğinizden emin misiniz?",
"DeleteBackup": "Yedeklemeyi Sil",
"DeleteBackupMessageText": "'{0}' yedeğini silmek istediğinizden emin misiniz?",
@@ -301,7 +301,7 @@
"UpdateAutomaticallyHelpText": "Güncellemeleri otomatik olarak indirin ve yükleyin. Yine de Sistem'den yükleyebileceksiniz: Güncellemeler",
"UpdateMechanismHelpText": "{appName}'ın yerleşik güncelleyicisini veya bir komut dosyasını kullanın",
"ShowSearch": "Aramayı Göster",
"UnableToLoadDownloadClients": "İndirme istemcileri yüklenemiyor",
"DownloadClientsLoadError": "İndirme istemcileri yüklenemiyor",
"UnableToLoadGeneralSettings": "Genel ayarlar yüklenemiyor",
"Automatic": "Otomatik",
"AutomaticSearch": "Otomatik Arama",
@@ -360,5 +360,14 @@
"Categories": "Kategoriler",
"Application": "Uygulamalar",
"Episode": "bölüm",
"AddConnection": "Bağlantı Ekle"
"AddConnection": "Bağlantı Ekle",
"AddApplicationImplementation": "Koşul Ekle - {implementationName}",
"AddIndexerImplementation": "Koşul Ekle - {implementationName}",
"AddIndexerProxyImplementation": "Koşul Ekle - {implementationName}",
"EditConnectionImplementation": "Koşul Ekle - {implementationName}",
"AddConnectionImplementation": "Koşul Ekle - {implementationName}",
"RestartProwlarr": "{appName}'ı yeniden başlatın",
"EditApplicationImplementation": "Koşul Ekle - {implementationName}",
"EditIndexerImplementation": "Koşul Ekle - {implementationName}",
"EditIndexerProxyImplementation": "Koşul Ekle - {implementationName}"
}

View File

@@ -29,7 +29,7 @@
"Database": "База даних",
"Date": "Дата",
"Dates": "Дати",
"DBMigration": "Міграція БД",
"DatabaseMigration": "Міграція БД",
"DeleteBackup": "Видалити резервну копію",
"DeleteBackupMessageText": "Ви впевнені, що хочете видалити резервну копію '{0}'?",
"DeleteDownloadClient": "Видалити клієнт завантаження",
@@ -72,7 +72,7 @@
"SSLCertPasswordHelpText": "Пароль для файлу pfx",
"TestAll": "Перевірити все",
"Type": "Тип",
"UnableToLoadDownloadClients": "Не вдалося завантажити клієнти для завантаження",
"DownloadClientsLoadError": "Не вдалося завантажити клієнти для завантаження",
"UnableToLoadGeneralSettings": "Не вдалося завантажити загальні налаштування",
"UnableToLoadHistory": "Не вдалося завантажити історію",
"UnableToLoadIndexers": "Не вдалося завантажити індексатори",
@@ -368,5 +368,13 @@
"DisabledForLocalAddresses": "Відключено для локальних адрес",
"None": "Жодного",
"ResetAPIKeyMessageText": "Ви впевнені, що хочете скинути свій ключ API?",
"AddConnection": "Редагувати колекцію"
"AddConnection": "Редагувати колекцію",
"RestartProwlarr": "Перезавантажити {appName}",
"EditApplicationImplementation": "Додати умому",
"EditConnectionImplementation": "Додати умому",
"EditIndexerImplementation": "Додати умому",
"AddConnectionImplementation": "Додати умому",
"AddApplicationImplementation": "Додати умому",
"AddIndexerImplementation": "Додати умому",
"AddIndexerProxyImplementation": "Додати умому"
}

View File

@@ -6,7 +6,7 @@
"CustomFilters": "Bộ lọc tùy chỉnh",
"Date": "Ngày",
"Dates": "ngày",
"DBMigration": "Di chuyển DB",
"DatabaseMigration": "Di chuyển DB",
"NoBackupsAreAvailable": "Không có bản sao lưu nào",
"NoChanges": "Không thay đổi",
"NoLeaveIt": "Không để nó",
@@ -215,7 +215,7 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Không thể thêm trình chỉ mục mới, vui lòng thử lại.",
"UnableToAddANewNotificationPleaseTryAgain": "Không thể thêm thông báo mới, vui lòng thử lại.",
"UnableToLoadBackups": "Không thể tải các bản sao lưu",
"UnableToLoadDownloadClients": "Không thể tải ứng dụng khách tải xuống",
"DownloadClientsLoadError": "Không thể tải ứng dụng khách tải xuống",
"UnableToLoadGeneralSettings": "Không thể tải Cài đặt chung",
"UnableToLoadHistory": "Không thể tải lịch sử",
"UnableToLoadNotifications": "Không thể tải thông báo",

View File

@@ -92,7 +92,7 @@
"CouldNotConnectSignalR": "无法连接至SignalR不会升级UI",
"Custom": "自定义",
"CustomFilters": "自定义过滤器",
"DBMigration": "数据库迁移版本",
"DatabaseMigration": "数据库迁移版本",
"Database": "数据库",
"Date": "日期",
"Dates": "日期",
@@ -451,10 +451,9 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "无法添加搜刮器,请稍后重试。",
"UnableToAddANewNotificationPleaseTryAgain": "无法添加新通知,请稍后重试。",
"UnableToLoadAppProfiles": "无法加载应用配置",
"UnableToLoadApplicationList": "123",
"UnableToLoadBackups": "无法加载备份",
"UnableToLoadDevelopmentSettings": "无法加载开发设置",
"UnableToLoadDownloadClients": "无法加载下载客户端",
"DownloadClientsLoadError": "无法加载下载客户端",
"UnableToLoadGeneralSettings": "无法加载通用设置",
"UnableToLoadHistory": "无法加载历史记录",
"UnableToLoadIndexerProxies": "无法加载索引器代理",
@@ -495,7 +494,7 @@
"ApplyTagsHelpTextAdd": "添加: 添加标签至已有的标签列表中",
"CountDownloadClientsSelected": "已选择 {count} 个下载客户端",
"CountIndexersSelected": "已选择 {count} 个索引器",
"DeleteSelectedDownloadClientsMessageText": "您确定要删除{count}选定的下载客户端吗?",
"DeleteSelectedDownloadClientsMessageText": "您确定要删除 {count}选定的下载客户端吗?",
"DeleteSelectedIndexersMessageText": "您确定要删除{count}选定的索引器吗?",
"EditSelectedDownloadClients": "编辑选定的下载客户端",
"Implementation": "执行",
@@ -600,5 +599,8 @@
"PackSeedTime": "做种时间",
"PasswordConfirmation": "确认密码",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "确认新密码",
"InvalidUILanguage": "语言"
"InvalidUILanguage": "您的UI设置为无效语言请纠正并保存设置",
"NoIndexerCategories": "没有找到此索引器的分类",
"DownloadClientQbittorrentSettingsContentLayout": "内容布局",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "是否使用 qBittorrent 配置的内容布局使用种子的原始布局或始终创建子文件夹qBittorrent 4.3.2+"
}

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