Compare commits

...

74 Commits

Author SHA1 Message Date
Robin Dadswell
0b79d3000d Retirement announcement 2025-06-27 11:17:54 +01:00
Bogdan
0f3e716044 Fixed: Don't treat metadata errors as missing author/book entities 2025-06-16 21:36:01 +03:00
Bogdan
f53c4dc017 Fixed: Don't delete files when books are deleted from the metadata 2025-06-15 22:13:26 +03:00
Bogdan
f48eac7e36 Bump version to 0.4.19 2025-06-15 09:22:48 +03:00
Bogdan
7cc02f95af Fix filename for class 2025-06-10 13:21:32 +03:00
Bogdan
1f92bf6679 Fix fullscreen automation screenshots 2025-06-10 13:16:08 +03:00
Taloth Saldono
a8d4aa6770 Used ReflectionOnly and/or public types where possible to avoid loading related assemblies unnecessarily. 2025-06-08 10:38:03 +03:00
Bogdan
7661b5bc87 Bump version to 0.4.18 2025-06-08 10:31:09 +03:00
Weblate
200ef600cd Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Fixer <ygj59783@zslsz.com>
Co-authored-by: Ilbebino <tommasobellandi08@gmail.com>
Co-authored-by: NanderTGA <nander.roobaert@gmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/sk/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/uk/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/zh_Hans/
Translation: Servarr/Readarr
2025-06-07 18:16:49 +03:00
Bogdan
ad6228983b Skip failing tests 2025-06-03 11:18:20 +03:00
Servarr
582ec9f7ce Automated API Docs update 2025-06-02 00:04:28 +03:00
Taloth Saldono
525e855038 Fixed: Return remote image links for RemotePoster and RemoteCover
(cherry picked from commit 4219cdb3644f96e1e8f3178fe0a50430c1004506)

Fixes #4101
Closes #212
2025-06-01 23:55:06 +03:00
Weblate
7a629ed044 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Hugoren Martinako <aumpfbahn@gmail.com>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Youngzheimer <me@youngzheimer.com>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ko/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/nb_NO/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt/
Translation: Servarr/Readarr
2025-05-04 21:07:53 +03:00
Bogdan
7f501322dd Bump version to 0.4.17 2025-05-04 21:07:14 +03:00
Samuel Mercer
18bca0b228 Fixed: Displayed root folder path getting truncated when adding an author with a long name 2025-05-01 13:53:47 +03:00
Bogdan
9ddac60b47 Bump version to 0.4.16 2025-04-20 09:01:31 +03:00
Bogdan
bd8bc0b35b Pass messages with arguments to NLog in LoggerExtensions 2025-04-13 13:17:00 +03:00
Bogdan
ae623f4481 Fixed: Use template for log messages in Import Books 2025-04-13 12:55:42 +03:00
Bogdan
e67d133bb6 Mark as template for log progress messages 2025-04-13 12:55:42 +03:00
Weblate
772ea95ce4 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Hugoren Martinako <aumpfbahn@gmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: fordas <fordas15@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ar/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/bg/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/cs/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/da/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/el/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/he/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/hi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/hr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/is/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ja/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ko/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/nb_NO/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pl/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ro/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ru/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/sk/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/sv/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/th/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/tr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/uk/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/vi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/zh_CN/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/zh_TW/
Translation: Servarr/Readarr
2025-04-13 10:09:39 +03:00
Bogdan
5459a7bb7e Bump version to 0.4.15 2025-04-13 09:48:49 +03:00
Servarr
614f98f9b4 Automated API Docs update 2025-04-08 22:09:31 +03:00
Bogdan
55763dae43 Fixed disabled options for SelectInput 2025-04-08 21:53:35 +03:00
Bogdan
a362dab503 Console warnings for missing translations on development builds
(cherry picked from commit 67a1ecb0fea4e6c7dfdb68fbe3ef30d4c22398d8)

Closes #3863
2025-04-08 21:53:35 +03:00
Mark McDowall
dba9fbf254 Fixed: Trying to add an author when root folders hadn't populated
(cherry picked from commit a6d0dddaf7fa51f334e32d4fd49486d06fb6ba65)
2025-04-08 21:41:48 +03:00
Bogdan
59a7605385 Improve validation message for AuthorFolderAsRootFolderValidator
(cherry picked from commit a117001de673e80abd90d54a34a7c86292b3a649)
2025-04-08 21:41:48 +03:00
Mark McDowall
f819e582cf New: Author folder hint when selecting a root folder while adding a new author
(cherry picked from commit dd09f31abb4dd3f699bcff0a47577075300c70ee)

Fix AuthorFolderAsRootFolderValidator

(cherry picked from commit 0ce81e1ab69d43fde382cc4ae22cd46fe626dea7)
2025-04-08 21:41:48 +03:00
Weblate
0972d41bf8 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Hugoren Martinako <aumpfbahn@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ca/
Translation: Servarr/Readarr
2025-04-08 17:28:32 +03:00
Servarr
05d2335bfe Automated API Docs update 2025-04-08 17:27:23 +03:00
Bogdan
5b4f54a959 Prevent NullRef for cases when media covers have nullable urls
(cherry picked from commit a26df9e9afa8d925c2ad62c126d4edebec7e4e54)

Closes #2981
2025-04-08 16:30:39 +03:00
Taloth Saldono
bb5ad605fd Fixed: Posters not always showing when searching for new authors
(cherry picked from commit 10dc884fa87a8337e9f0622c269adede0b262029)

Co-authored-by: optimous012

Closes #145
2025-04-08 16:30:33 +03:00
Bogdan
52c3a95e63 Bump browserslist-db 2025-04-08 15:52:06 +03:00
Mark McDowall
52c5460537 New: Prevent Remote Path Mapping local folder being set to System folder or '/'
(cherry picked from commit 0f904e091702a2ac53771ee3aeb5aafe62688035)
2025-04-08 15:48:56 +03:00
Mark McDowall
280cec3d0e Fixed: Set output encoding to UTF-8 when running external processes
(cherry picked from commit f8e57b09856278a6d0c65f18704e96a33459687d)
2025-04-08 15:46:48 +03:00
Mark McDowall
f10c2c01d8 Update WikiUrl type in API docs
(cherry picked from commit 9bd619ccfe074abe396bbf043a36a5be18a7ba4b)
2025-04-08 15:46:26 +03:00
Bogdan
2b6a328dac Bump Selenium.WebDriver.ChromeDriver 2025-04-08 15:46:14 +03:00
Bogdan
4078525f67 Log delete statements only once 2025-04-08 15:45:20 +03:00
Bogdan
214e4270ac Fixed: Disallow tags creation with empty label 2025-04-08 15:45:10 +03:00
Bogdan
5396dd3e8e Bump linux agent to ubuntu-22.04 2025-04-02 00:11:18 +03:00
Bogdan
d5d4996c40 Bump version to 0.4.14 2025-03-30 10:29:09 +03:00
Weblate
8b2223a9c4 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/cs/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/da/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ko/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ro/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ru/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/tr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/uk/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/vi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/zh_CN/
Translation: Servarr/Readarr
2025-03-28 10:48:17 +02:00
Lasidar
2a3e7f8dae Improve Author status details in UI 2025-03-28 10:46:55 +02:00
Bogdan
6406ed6289 Fixed: Include Book for history/since
Fixes #4011
2025-03-27 19:54:30 +02:00
Bogdan
d5b0831b0f Improve appearance for loading errors on author details 2025-03-26 12:49:19 +02:00
Bogdan
8d72d5dbab Convert QualityProfileName to TypeScript 2025-03-26 12:45:53 +02:00
Bogdan
74d1ab84e2 Bump browserslist-db 2025-03-26 12:35:30 +02:00
Mark McDowall
7341d20c51 Fixed: Deleting author folder fails when files/folders aren't instantly removed
(cherry picked from commit c84699ed5d5a2f59f236c26a8999d25a1102ec02)
2025-03-26 12:35:30 +02:00
Bogdan
5abf4f2992 Cleanup unused sorting fields for bulk manage providers
(cherry picked from commit 6115236d3853f70a18b73aef15ebe4e18ab48e40)
2025-03-26 12:35:30 +02:00
Bogdan
cc90050c77 New: Display indexer in download failed details
(cherry picked from commit a324052debf63a8db73a2f3c79201864892bb62c)
2025-03-26 12:35:30 +02:00
Bogdan
7ba8f8baee Fixed: Inherit indexer, size and release group for marked as failed history
(cherry picked from commit e08c9d5501e65aabce3456b2dd7571867508d88f)
2025-03-26 12:35:30 +02:00
Mark McDowall
70aec175ef Improve logging when login fails due to CryptographicException
(cherry picked from commit 1449941471cbb8885e9298317b9a30f2576d7941)
2025-03-26 12:35:30 +02:00
Bogdan
080dd301f3 Fixed: Priority validation for indexers and download clients
(cherry picked from commit f0e320f3aa501f120721503b8256f464a31be783)
2025-03-26 12:35:30 +02:00
Mark McDowall
bab45481db Fixed: Allow tables to scroll on tablets in portrait mode
(cherry picked from commit 5fb632eb46cf77ea4f61d407f6429d9c32dba766)
2025-03-26 12:35:30 +02:00
Mark McDowall
3e1e03e0ce Fixed: Drop downs flickering in some cases
(cherry picked from commit 3b024443c5447b7638a69a99809bf44b2419261f)
2025-03-26 12:35:30 +02:00
Bogdan
bb599d6dc9 Bump Npgsql, System.Memory and System.ValueTuple 2025-03-26 12:35:25 +02:00
Weblate
c94685842f Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: fordas <fordas15@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ko/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ru/
Translation: Servarr/Readarr
2025-03-26 12:17:43 +02:00
Bogdan
5966f6da51 Bump version to 0.4.13 2025-03-09 11:51:20 +02:00
Bogdan
229e0dfe5d Bump SixLabors.ImageSharp and Polly 2025-03-07 23:33:05 +02:00
Bogdan
5173daa265 Bump version to 0.4.12 2025-03-02 19:06:49 +02:00
Bogdan
c2f770f242 Fixed: Instance name must contain application name 2025-03-01 13:36:36 +02:00
Bogdan
0b7ce67635 Use develop branch for update package tests 2025-02-23 22:12:25 +02:00
Weblate
bc74456944 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/bg/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/tr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/zh_CN/
Translation: Servarr/Readarr
2025-02-18 12:00:58 +02:00
Bogdan
fa460567a7 New: Bypass IP addresses ranges in proxies
(cherry picked from commit 402db9128c214d4c5af6583643cb49d3aa7a28b5)

Closes #3690
2025-02-18 11:55:14 +02:00
bakerboy448
7dfceb307b Fixed: Trim spaces and empty values in Proxy Bypass List
(cherry picked from commit 846333ddf0d9da775c80d004fdb9b41e700ef359)

Closes #3688
2025-02-18 11:52:30 +02:00
Weblate
305ad235a5 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fi/
Translation: Servarr/Readarr
2025-02-16 18:39:51 +02:00
Servarr
74c20e41bf Automated API Docs update 2025-02-16 18:01:02 +02:00
ManiMatter
347289b173 New: Last Searched column on Wanted screens 2025-02-16 17:55:01 +02:00
Bogdan
0ef3d2a5cc Fix download links for FileList when passkey contains spaces 2025-02-16 12:21:34 +02:00
Mark McDowall
e5519d60c9 Upgrade node to 20.11.1
(cherry picked from commit c6071f6d81a968d3ed7c6bf4bae035961b54d128)
2025-02-13 12:42:57 +02:00
Weblate
3a85b3a060 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Craze <christian.strey@gmail.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Lizandra Candido da Silva <lizandra.c.s@gmail.com>
Co-authored-by: Mailme Dashite <mailmedashite@protonmail.com>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: ahgharaghani <ah.gharaghani@gmail.com>
Co-authored-by: fordas <fordas15@gmail.com>
Co-authored-by: warkurre86 <tom.novo.86@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/bg/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/cs/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fa/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ko/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/nb_NO/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/zh_Hans/
Translation: Servarr/Readarr
2025-02-07 19:14:45 -06:00
Bogdan
c1cdf44322 Bump version to 0.4.11 2025-01-26 14:59:57 +02:00
Bogdan
f861e54139 Rename MusicbrainzId references to ForeignId 2025-01-20 16:45:27 +02:00
jcassette
279e1029e0 New: reflink support for ZFS
(cherry picked from commit a840bb542362d58006b6cc27affd58ee6b965b80)
2025-01-19 17:18:38 +02:00
Bogdan
b9ed39175b Bump version to 0.4.10 2025-01-19 17:15:27 +02:00
150 changed files with 1925 additions and 648 deletions

View File

@@ -1,3 +1,23 @@
# Announcement: Retirement of Readarr
We would like to announce that the [Readarr project](<https://github.com/Readarr/Readarr>) has been retired. This difficult decision was made due to a combination of factors: the project's metadata has become unusable, we no longer have the time to remake or repair it, and the community effort to transition to using Open Library as the source has stalled without much progress.
Third-party metadata mirrors exist, but as we're not involved with them at all, we cannot provide support for them. Use of them is entirely at your own risk. The most popular mirror appears to be [rreading-glasses](<https://github.com/blampe/rreading-glasses>).
Without anyone to take over Readarr development, we expect it to wither away, so we still encourage you to seek alternatives to Readarr.
## Key Points:
- **Effective Immediately**: The retirement takes effect immediately. Please stay tuned for any possible further communications.
- **Support Window**: We will provide support during a brief transition period to help with troubleshooting non metadata related issues.
- **Alternative Solutions**: Users are encouraged to explore and adopt any other possible solutions as alternatives to Readarr.
- **Opportunities for Revival**: We are open to someone taking over and revitalizing the project. If you are interested, please get in touch.
- **Gratitude**: We extend our deepest gratitude to all the contributors and community members who supported Readarr over the years.
Thank you for being part of the Readarr journey. For any inquiries or assistance during this transition, please contact our team.
Sincerely,
The Servarr Team
# Readarr
[![Build Status](https://dev.azure.com/Readarr/Readarr/_apis/build/status/Readarr.Readarr?branchName=develop)](https://dev.azure.com/Readarr/Readarr/_build/latest?definitionId=1&branchName=develop)

View File

@@ -9,7 +9,7 @@ variables:
testsFolder: './_tests'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
majorVersion: '0.4.9'
majorVersion: '0.4.19'
minorVersion: $[counter('minorVersion', 1)]
readarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(readarrVersion)'
@@ -19,7 +19,7 @@ variables:
nodeVersion: '20.X'
innoVersion: '6.2.0'
windowsImage: 'windows-2022'
linuxImage: 'ubuntu-20.04'
linuxImage: 'ubuntu-22.04'
macImage: 'macOS-13'
trigger:

View File

@@ -165,7 +165,8 @@ function HistoryDetails(props) {
if (eventType === 'downloadFailed') {
const {
message
message,
indexer
} = data;
return (
@@ -177,11 +178,21 @@ function HistoryDetails(props) {
/>
{
!!message &&
indexer ?
<DescriptionListItem
title={translate('Indexer')}
data={indexer}
/> :
null
}
{
message ?
<DescriptionListItem
title={translate('Message')}
data={message}
/>
/> :
null
}
</DescriptionList>
);

View File

@@ -1,5 +1,7 @@
import ModelBase from 'App/ModelBase';
export type AuthorStatus = 'continuing' | 'ended';
interface Author extends ModelBase {
added: string;
genres: string[];
@@ -10,6 +12,7 @@ interface Author extends ModelBase {
metadataProfileId: number;
rootFolderPath: string;
sortName: string;
status: AuthorStatus;
tags: number[];
authorName: string;
isSaving?: boolean;

View File

@@ -0,0 +1,21 @@
import { AuthorStatus } from 'Author/Author';
import { icons } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
export function getAuthorStatusDetails(status: AuthorStatus) {
let statusDetails = {
icon: icons.AUTHOR_CONTINUING,
title: translate('StatusEndedContinuing'),
message: translate('ContinuingMoreBooksAreExpected'),
};
if (status === 'ended') {
statusDetails = {
icon: icons.AUTHOR_ENDED,
title: translate('StatusEndedEnded'),
message: translate('ContinuingNoAdditionalBooksAreExpected'),
};
}
return statusDetails;
}

View File

@@ -7,6 +7,7 @@ import AuthorHistoryTable from 'Author/History/AuthorHistoryTable';
import MonitoringOptionsModal from 'Author/MonitoringOptions/MonitoringOptionsModal';
import BookEditorFooter from 'Book/Editor/BookEditorFooter';
import BookFileEditorTable from 'BookFile/Editor/BookFileEditorTable';
import Alert from 'Components/Alert';
import IconButton from 'Components/Link/IconButton';
import Link from 'Components/Link/Link';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
@@ -17,7 +18,7 @@ import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
import SwipeHeaderConnector from 'Components/Swipe/SwipeHeaderConnector';
import { align, icons } from 'Helpers/Props';
import { align, icons, kinds } from 'Helpers/Props';
import InteractiveSearchFilterMenuConnector from 'InteractiveSearch/InteractiveSearchFilterMenuConnector';
import InteractiveSearchTable from 'InteractiveSearch/InteractiveSearchTable';
import OrganizePreviewModalConnector from 'Organize/OrganizePreviewModalConnector';
@@ -412,22 +413,25 @@ class AuthorDetails extends Component {
<div className={styles.contentContainer}>
{
!isPopulated && !booksError && !bookFilesError &&
<LoadingIndicator />
!isPopulated && !booksError && !bookFilesError ?
<LoadingIndicator /> :
null
}
{
!isFetching && booksError &&
<div>
!isFetching && booksError ?
<Alert kind={kinds.DANGER}>
{translate('LoadingBooksFailed')}
</div>
</Alert> :
null
}
{
!isFetching && bookFilesError &&
<div>
!isFetching && bookFilesError ?
<Alert kind={kinds.DANGER}>
{translate('LoadingBookFilesFailed')}
</div>
</Alert> :
null
}
{

View File

@@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import TextTruncate from 'react-text-truncate';
import AuthorPoster from 'Author/AuthorPoster';
import { getAuthorStatusDetails } from 'Author/AuthorStatus';
import HeartRating from 'Components/HeartRating';
import Icon from 'Components/Icon';
import Label from 'Components/Label';
@@ -11,7 +12,7 @@ import MonitorToggleButton from 'Components/MonitorToggleButton';
import Popover from 'Components/Tooltip/Popover';
import Tooltip from 'Components/Tooltip/Tooltip';
import { icons, kinds, sizes, tooltipPositions } from 'Helpers/Props';
import QualityProfileNameConnector from 'Settings/Profiles/Quality/QualityProfileNameConnector';
import QualityProfileName from 'Settings/Profiles/Quality/QualityProfileName';
import fonts from 'Styles/Variables/fonts';
import formatBytes from 'Utilities/Number/formatBytes';
import stripHtml from 'Utilities/String/stripHtml';
@@ -87,11 +88,11 @@ class AuthorDetailsHeader extends Component {
titleWidth
} = this.state;
const statusDetails = getAuthorStatusDetails(status);
const fanartUrl = getFanartUrl(images);
const marqueeWidth = titleWidth - (isSmallScreen ? 85 : 160);
const continuing = status === 'continuing';
let bookFilesCountMessage = translate('BookFilesCountMessage');
if (bookFileCount === 1) {
@@ -213,7 +214,7 @@ class AuthorDetailsHeader extends Component {
<span className={styles.qualityProfileName}>
{
<QualityProfileNameConnector
<QualityProfileName
qualityProfileId={qualityProfileId}
/>
}
@@ -236,16 +237,16 @@ class AuthorDetailsHeader extends Component {
<Label
className={styles.detailsLabel}
title={continuing ? translate('ContinuingMoreBooksAreExpected') : translate('ContinuingNoAdditionalBooksAreExpected')}
title={statusDetails.message}
size={sizes.LARGE}
>
<Icon
name={continuing ? icons.AUTHOR_CONTINUING : icons.AUTHOR_ENDED}
name={statusDetails.icon}
size={17}
/>
<span className={styles.qualityProfileName}>
{continuing ? 'Continuing' : 'Deceased'}
{statusDetails.title}
</span>
</Label>

View File

@@ -1,5 +1,6 @@
import PropTypes from 'prop-types';
import React from 'react';
import { getAuthorStatusDetails } from 'Author/AuthorStatus';
import Icon from 'Components/Icon';
import VirtualTableRowCell from 'Components/Table/Cells/TableRowCell';
import { icons } from 'Helpers/Props';
@@ -15,6 +16,8 @@ function AuthorStatusCell(props) {
...otherProps
} = props;
const statusDetails = getAuthorStatusDetails(status);
return (
<Component
className={className}
@@ -28,8 +31,8 @@ function AuthorStatusCell(props) {
<Icon
className={styles.statusIcon}
name={status === 'ended' ? icons.AUTHOR_ENDED : icons.AUTHOR_CONTINUING}
title={status === 'ended' ? translate('StatusEndedDeceased') : translate('StatusEndedContinuing')}
name={statusDetails.icon}
title={`${statusDetails.title}: ${statusDetails.message}`}
/>
</Component>
);

View File

@@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import Button from 'Components/Link/Button';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './NoAuthor.css';
function NoAuthor(props) {
@@ -31,7 +32,7 @@ function NoAuthor(props) {
to="/settings/mediamanagement"
kind={kinds.PRIMARY}
>
Add Root Folder
{translate('AddRootFolder')}
</Button>
</div>
@@ -40,7 +41,7 @@ function NoAuthor(props) {
to="/add/search"
kind={kinds.PRIMARY}
>
Add New Author
{translate('AddNewAuthor')}
</Button>
</div>
</div>

View File

@@ -1,12 +1,11 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import AuthorNameLink from 'Author/AuthorNameLink';
import { getAuthorStatusDetails } from 'Author/AuthorStatus';
import Icon from 'Components/Icon';
import MonitorToggleButton from 'Components/MonitorToggleButton';
import VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell';
import VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell';
import { icons } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import BookshelfBook from './BookshelfBook';
import styles from './BookshelfRow.css';
@@ -30,6 +29,8 @@ class BookshelfRow extends Component {
onBookMonitoredPress
} = this.props;
const statusDetails = getAuthorStatusDetails(status);
return (
<>
<VirtualTableSelectCell
@@ -52,8 +53,8 @@ class BookshelfRow extends Component {
<VirtualTableRowCell className={styles.status}>
<Icon
className={styles.statusIcon}
name={status === 'ended' ? icons.AUTHOR_ENDED : icons.AUTHOR_CONTINUING}
title={status === 'ended' ? translate('StatusEndedEnded') : translate('StatusEndedContinuing')}
name={statusDetails.icon}
title={statusDetails.title}
/>
</VirtualTableRowCell>

View File

@@ -20,6 +20,8 @@ import HintedSelectInputSelectedValue from './HintedSelectInputSelectedValue';
import TextInput from './TextInput';
import styles from './EnhancedSelectInput.css';
const MINIMUM_DISTANCE_FROM_EDGE = 10;
function isArrowKey(keyCode) {
return keyCode === keyCodes.UP_ARROW || keyCode === keyCodes.DOWN_ARROW;
}
@@ -137,18 +139,9 @@ class EnhancedSelectInput extends Component {
// Listeners
onComputeMaxHeight = (data) => {
const {
top,
bottom
} = data.offsets.reference;
const windowHeight = window.innerHeight;
if ((/^botton/).test(data.placement)) {
data.styles.maxHeight = windowHeight - bottom;
} else {
data.styles.maxHeight = top;
}
data.styles.maxHeight = windowHeight - MINIMUM_DISTANCE_FROM_EDGE;
return data;
};
@@ -457,6 +450,10 @@ class EnhancedSelectInput extends Component {
order: 851,
enabled: true,
fn: this.onComputeMaxHeight
},
preventOverflow: {
enabled: true,
boundariesElement: 'viewport'
}
}}
>

View File

@@ -28,8 +28,7 @@ function createMapStateToProps() {
if (includeNoChange) {
values.unshift({
key: 'noChange',
value: '',
name: translate('NoChange'),
value: translate('NoChange'),
isDisabled: includeNoChangeDisabled,
isMissing: false
});
@@ -39,7 +38,6 @@ function createMapStateToProps() {
values.push({
key: '',
value: '',
name: '',
isDisabled: true,
isHidden: true
});
@@ -56,8 +54,7 @@ function createMapStateToProps() {
values.push({
key: ADD_NEW_KEY,
value: '',
name: 'Add a new path'
value: 'Add a new path'
});
return {
@@ -105,6 +102,27 @@ class RootFolderSelectInputConnector extends Component {
}
}
componentDidUpdate(prevProps) {
const {
name,
value,
values,
onChange
} = this.props;
if (prevProps.values === values) {
return;
}
if (!value && values.length && values.some((v) => !!v.key && v.key !== ADD_NEW_KEY)) {
const defaultValue = values[0];
if (defaultValue.key !== ADD_NEW_KEY) {
onChange({ name, value: defaultValue.key });
}
}
}
//
// Render

View File

@@ -13,6 +13,15 @@
}
}
.value {
display: flex;
}
.authorFolder {
flex: 0 0 auto;
color: var(--disabledColor);
}
.freeSpace {
margin-left: 15px;
color: var(--darkGray);

View File

@@ -1,10 +1,12 @@
// This file is automatically generated.
// Please do not change this file!
interface CssExports {
'authorFolder': string;
'freeSpace': string;
'isMissing': string;
'isMobile': string;
'optionText': string;
'value': string;
}
export const cssExports: CssExports;
export default cssExports;

View File

@@ -7,18 +7,24 @@ import styles from './RootFolderSelectInputOption.css';
function RootFolderSelectInputOption(props) {
const {
id,
value,
name,
freeSpace,
authorFolder,
isMissing,
isMobile,
isWindows,
...otherProps
} = props;
const text = value === '' ? name : `${name} [${value}]`;
const slashCharacter = isWindows ? '\\' : '/';
const text = name === '' ? value : `[${name}] ${value}`;
return (
<EnhancedSelectInputOption
id={id}
isMobile={isMobile}
{...otherProps}
>
@@ -27,7 +33,18 @@ function RootFolderSelectInputOption(props) {
isMobile && styles.isMobile
)}
>
<div>{text}</div>
<div className={styles.value}>
{text}
{
authorFolder && id !== 'addNew' ?
<div className={styles.authorFolder}>
{slashCharacter}
{authorFolder}
</div> :
null
}
</div>
{
freeSpace == null ?
@@ -50,11 +67,18 @@ function RootFolderSelectInputOption(props) {
}
RootFolderSelectInputOption.propTypes = {
id: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
value: PropTypes.string.isRequired,
freeSpace: PropTypes.number,
authorFolder: PropTypes.string,
isMissing: PropTypes.bool,
isMobile: PropTypes.bool.isRequired
isMobile: PropTypes.bool.isRequired,
isWindows: PropTypes.bool
};
RootFolderSelectInputOption.defaultProps = {
name: ''
};
export default RootFolderSelectInputOption;

View File

@@ -7,12 +7,22 @@
overflow: hidden;
}
.path {
.pathContainer {
@add-mixin truncate;
display: flex;
flex: 1 0 0;
}
.path {
flex: 0 1 auto;
}
.authorFolder {
@add-mixin truncate;
flex: 0 1 auto;
color: var(--disabledColor);
}
.freeSpace {
flex: 0 0 auto;
margin-left: 15px;

View File

@@ -1,8 +1,10 @@
// This file is automatically generated.
// Please do not change this file!
interface CssExports {
'authorFolder': string;
'freeSpace': string;
'path': string;
'pathContainer': string;
'selectedValue': string;
}
export const cssExports: CssExports;

View File

@@ -9,19 +9,34 @@ function RootFolderSelectInputSelectedValue(props) {
name,
value,
freeSpace,
authorFolder,
includeFreeSpace,
isWindows,
...otherProps
} = props;
const text = value === '' ? name : `${name} [${value}]`;
const slashCharacter = isWindows ? '\\' : '/';
const text = name === '' ? value : `[${name}] ${value}`;
return (
<EnhancedSelectInputSelectedValue
className={styles.selectedValue}
{...otherProps}
>
<div className={styles.path}>
{text}
<div className={styles.pathContainer}>
<div className={styles.path}>
{text}
</div>
{
authorFolder ?
<div className={styles.authorFolder}>
{slashCharacter}
{authorFolder}
</div> :
null
}
</div>
{
@@ -38,10 +53,13 @@ RootFolderSelectInputSelectedValue.propTypes = {
name: PropTypes.string,
value: PropTypes.string,
freeSpace: PropTypes.number,
authorFolder: PropTypes.string,
isWindows: PropTypes.bool,
includeFreeSpace: PropTypes.bool.isRequired
};
RootFolderSelectInputSelectedValue.defaultProps = {
name: '',
includeFreeSpace: true
};

View File

@@ -52,6 +52,7 @@ class SelectInput extends Component {
const {
key,
value: optionValue,
isDisabled: optionIsDisabled = false,
...otherOptionProps
} = option;
@@ -59,6 +60,7 @@ class SelectInput extends Component {
<option
key={key}
value={key}
disabled={optionIsDisabled}
{...otherOptionProps}
>
{typeof optionValue === 'function' ? optionValue() : optionValue}

View File

@@ -83,13 +83,6 @@
}
@media only screen and (max-width: $breakpointMedium) {
.modal.small,
.modal.medium {
width: 90%;
}
}
@media only screen and (max-width: $breakpointSmall) {
.modalContainer {
position: fixed;
}

View File

@@ -4,7 +4,7 @@
line-height: 1.52857143;
}
@media only screen and (max-width: $breakpointSmall) {
@media only screen and (max-width: $breakpointMedium) {
.cell {
white-space: nowrap;
}

View File

@@ -7,7 +7,7 @@
white-space: nowrap;
}
@media only screen and (max-width: $breakpointSmall) {
@media only screen and (max-width: $breakpointMedium) {
.cell {
white-space: nowrap;
}

View File

@@ -10,7 +10,7 @@
border-collapse: collapse;
}
@media only screen and (max-width: $breakpointSmall) {
@media only screen and (max-width: $breakpointMedium) {
.tableContainer {
min-width: 100%;
width: fit-content;

View File

@@ -9,7 +9,7 @@
margin-left: 10px;
}
@media only screen and (max-width: $breakpointSmall) {
@media only screen and (max-width: $breakpointMedium) {
.headerCell {
white-space: nowrap;
}

View File

@@ -60,7 +60,7 @@
height: 25px;
}
@media only screen and (max-width: $breakpointSmall) {
@media only screen and (max-width: $breakpointMedium) {
.pager {
flex-wrap: wrap;
}

View File

@@ -9,7 +9,7 @@
margin-left: 10px;
}
@media only screen and (max-width: $breakpointSmall) {
@media only screen and (max-width: $breakpointMedium) {
.headerCell {
white-space: nowrap;
}

View File

@@ -35,11 +35,12 @@
.message {
margin-top: 30px;
text-align: center;
font-weight: 300;
font-size: $largeFontSize;
}
.helpText {
margin-bottom: 10px;
font-weight: 300;
font-size: 24px;
}

View File

@@ -82,7 +82,8 @@ class AddNewItem extends Component {
render() {
const {
error,
items
items,
hasExistingAuthors
} = this.props;
const term = this.state.term;
@@ -186,7 +187,8 @@ class AddNewItem extends Component {
}
{
!term &&
term ?
null :
<div className={styles.message}>
<div className={styles.helpText}>
{translate('ItsEasyToAddANewAuthorOrBookJustStartTypingTheNameOfTheItemYouWantToAdd')}
@@ -199,6 +201,24 @@ class AddNewItem extends Component {
</div>
}
{
!term && !hasExistingAuthors ?
<div className={styles.message}>
<div className={styles.noAuthorsText}>
You haven't added any authors yet, do you want to add an existing library location (Root Folder) and update?
</div>
<div>
<Button
to="/settings/mediamanagement"
kind={kinds.PRIMARY}
>
{translate('AddRootFolder')}
</Button>
</div>
</div> :
null
}
<div />
</PageContentBody>
</PageContent>
@@ -213,6 +233,7 @@ AddNewItem.propTypes = {
isAdding: PropTypes.bool.isRequired,
addError: PropTypes.object,
items: PropTypes.arrayOf(PropTypes.object).isRequired,
hasExistingAuthors: PropTypes.bool.isRequired,
onSearchChange: PropTypes.func.isRequired,
onClearSearch: PropTypes.func.isRequired
};

View File

@@ -10,13 +10,15 @@ import AddNewItem from './AddNewItem';
function createMapStateToProps() {
return createSelector(
(state) => state.search,
(state) => state.authors.items.length,
(state) => state.router.location,
(search, location) => {
(search, existingAuthorsCount, location) => {
const { params } = parseUrl(location.search);
return {
...search,
term: params.term,
...search
hasExistingAuthors: existingAuthorsCount > 0
};
}
);

View File

@@ -9,6 +9,7 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddAuthorOptionsForm from '../Common/AddAuthorOptionsForm.js';
import styles from './AddNewAuthorModalContent.css';
@@ -54,7 +55,7 @@ class AddNewAuthorModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Add new Author
{translate('AddNewAuthor')}
</ModalHeader>
<ModalBody>
@@ -133,7 +134,7 @@ class AddNewAuthorModalContent extends Component {
AddNewAuthorModalContent.propTypes = {
authorName: PropTypes.string.isRequired,
disambiguation: PropTypes.string.isRequired,
disambiguation: PropTypes.string,
overview: PropTypes.string,
images: PropTypes.arrayOf(PropTypes.object).isRequired,
isAdding: PropTypes.bool.isRequired,

View File

@@ -4,6 +4,7 @@ import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { addAuthor, setAuthorAddDefault } from 'Store/Actions/searchActions';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
import createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';
import selectSettings from 'Store/Selectors/selectSettings';
import AddNewAuthorModalContent from './AddNewAuthorModalContent';
@@ -12,7 +13,8 @@ function createMapStateToProps() {
(state) => state.search,
(state) => state.settings.metadataProfiles,
createDimensionsSelector(),
(searchState, metadataProfiles, dimensions) => {
createSystemStatusSelector(),
(searchState, metadataProfiles, dimensions, systemStatus) => {
const {
isAdding,
addError,
@@ -32,6 +34,7 @@ function createMapStateToProps() {
isSmallScreen: dimensions.isSmallScreen,
validationErrors,
validationWarnings,
isWindows: systemStatus.isWindows,
...settings
};
}

View File

@@ -78,6 +78,7 @@ class AddNewAuthorSearchResult extends Component {
status,
overview,
ratings,
folder,
images,
isExistingAuthor,
isSmallScreen
@@ -205,6 +206,7 @@ class AddNewAuthorSearchResult extends Component {
disambiguation={disambiguation}
year={year}
overview={overview}
folder={folder}
images={images}
onModalClose={this.onAddAuthorModalClose}
/>
@@ -222,6 +224,7 @@ AddNewAuthorSearchResult.propTypes = {
status: PropTypes.string.isRequired,
overview: PropTypes.string,
ratings: PropTypes.object.isRequired,
folder: PropTypes.string.isRequired,
images: PropTypes.arrayOf(PropTypes.object).isRequired,
isExistingAuthor: PropTypes.bool.isRequired,
isSmallScreen: PropTypes.bool.isRequired

View File

@@ -10,6 +10,7 @@ import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import stripHtml from 'Utilities/String/stripHtml';
import translate from 'Utilities/String/translate';
import AddAuthorOptionsForm from '../Common/AddAuthorOptionsForm.js';
import styles from './AddNewBookModalContent.css';
@@ -58,7 +59,7 @@ class AddNewBookModalContent extends Component {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Add new Book
{translate('AddNewBook')}
</ModalHeader>
<ModalBody>

View File

@@ -4,6 +4,7 @@ import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { addBook, setBookAddDefault } from 'Store/Actions/searchActions';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
import createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';
import selectSettings from 'Store/Selectors/selectSettings';
import AddNewBookModalContent from './AddNewBookModalContent';
@@ -13,7 +14,8 @@ function createMapStateToProps() {
(state) => state.search,
(state) => state.settings.metadataProfiles,
createDimensionsSelector(),
(isExistingAuthor, searchState, metadataProfiles, dimensions) => {
createSystemStatusSelector(),
(isExistingAuthor, searchState, metadataProfiles, dimensions, systemStatus) => {
const {
isAdding,
addError,
@@ -33,6 +35,7 @@ function createMapStateToProps() {
isSmallScreen: dimensions.isSmallScreen,
validationErrors,
validationWarnings,
isWindows: systemStatus.isWindows,
...settings
};
}

View File

@@ -203,6 +203,7 @@ class AddNewBookSearchResult extends Component {
disambiguation={disambiguation}
authorName={author.authorName}
overview={overview}
folder={author.folder}
images={images}
onModalClose={this.onAddBookModalClose}
/>

View File

@@ -39,7 +39,9 @@ class AddAuthorOptionsForm extends Component {
includeNoneMetadataProfile,
includeSpecificBookMonitor,
showMetadataProfile,
folder,
tags,
isWindows,
onInputChange,
...otherProps
} = this.props;
@@ -54,6 +56,15 @@ class AddAuthorOptionsForm extends Component {
<FormInputGroup
type={inputTypes.ROOT_FOLDER_SELECT}
name="rootFolderPath"
valueOptions={{
authorFolder: folder,
isWindows
}}
selectedValueOptions={{
authorFolder: folder,
isWindows
}}
helpText={translate('AddNewAuthorRootFolderHelpText', { folder })}
onChange={onInputChange}
{...rootFolderPath}
/>
@@ -179,8 +190,14 @@ AddAuthorOptionsForm.propTypes = {
showMetadataProfile: PropTypes.bool.isRequired,
includeNoneMetadataProfile: PropTypes.bool.isRequired,
includeSpecificBookMonitor: PropTypes.bool.isRequired,
folder: PropTypes.string.isRequired,
tags: PropTypes.object.isRequired,
isWindows: PropTypes.bool.isRequired,
onInputChange: PropTypes.func.isRequired
};
AddAuthorOptionsForm.defaultProps = {
includeSpecificBookMonitor: false
};
export default AddAuthorOptionsForm;

View File

@@ -10,11 +10,11 @@ import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import Column from 'Components/Table/Column';
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,
@@ -35,7 +35,7 @@ type OnSelectedChangeCallback = React.ComponentProps<
typeof ManageDownloadClientsModalRow
>['onSelectedChange'];
const COLUMNS = [
const COLUMNS: Column[] = [
{
name: 'name',
label: () => translate('Name'),
@@ -82,8 +82,6 @@ const COLUMNS = [
interface ManageDownloadClientsModalContentProps {
onModalClose(): void;
sortKey?: string;
sortDirection?: SortDirection;
}
function ManageDownloadClientsModalContent(

View File

@@ -76,7 +76,7 @@ function EditImportListExclusionModalContent(props) {
<FormGroup>
<FormLabel>
{translate('MusicbrainzId')}
{translate('ForeignId')}
</FormLabel>
<FormInputGroup

View File

@@ -10,11 +10,11 @@ import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import Column from 'Components/Table/Column';
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 {
bulkDeleteIndexers,
bulkEditIndexers,
@@ -35,7 +35,7 @@ type OnSelectedChangeCallback = React.ComponentProps<
typeof ManageIndexersModalRow
>['onSelectedChange'];
const COLUMNS = [
const COLUMNS: Column[] = [
{
name: 'name',
label: () => translate('Name'),
@@ -82,8 +82,6 @@ const COLUMNS = [
interface ManageIndexersModalContentProps {
onModalClose(): void;
sortKey?: string;
sortDirection?: SortDirection;
}
function ManageIndexersModalContent(props: ManageIndexersModalContentProps) {

View File

@@ -0,0 +1,18 @@
import React from 'react';
import { useSelector } from 'react-redux';
import { createQualityProfileSelectorForHook } from 'Store/Selectors/createQualityProfileSelector';
import translate from 'Utilities/String/translate';
interface QualityProfileNameProps {
qualityProfileId: number;
}
function QualityProfileName({ qualityProfileId }: QualityProfileNameProps) {
const qualityProfile = useSelector(
createQualityProfileSelectorForHook(qualityProfileId)
);
return <span>{qualityProfile?.name ?? translate('Unknown')}</span>;
}
export default QualityProfileName;

View File

@@ -1,31 +0,0 @@
import PropTypes from 'prop-types';
import React from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import createQualityProfileSelector from 'Store/Selectors/createQualityProfileSelector';
function createMapStateToProps() {
return createSelector(
createQualityProfileSelector(),
(qualityProfile) => {
return {
name: qualityProfile.name
};
}
);
}
function QualityProfileNameConnector({ name, ...otherProps }) {
return (
<span>
{name}
</span>
);
}
QualityProfileNameConnector.propTypes = {
qualityProfileId: PropTypes.number.isRequired,
name: PropTypes.string.isRequired
};
export default connect(createMapStateToProps)(QualityProfileNameConnector);

View File

@@ -45,6 +45,12 @@ export const defaultState = {
isSortable: true,
isVisible: true
},
{
name: 'books.lastSearchTime',
label: 'Last Searched',
isSortable: true,
isVisible: false
},
{
name: 'actions',
columnLabel: 'Actions',
@@ -108,6 +114,12 @@ export const defaultState = {
isSortable: true,
isVisible: true
},
{
name: 'books.lastSearchTime',
label: 'Last Searched',
isSortable: true,
isVisible: false
},
{
name: 'actions',
columnLabel: 'Actions',

View File

@@ -27,6 +27,12 @@ export default function translate(
key: string,
tokens: Record<string, string | number | boolean> = {}
) {
const { isProduction = true } = window.Readarr;
if (!isProduction && !(key in translations)) {
console.warn(`Missing translation for key: ${key}`);
}
const translation = translations[key] || key;
tokens.appName = 'Readarr';

View File

@@ -131,13 +131,15 @@ class CutoffUnmetConnector extends Component {
onSearchSelectedPress = (selected) => {
this.props.executeCommand({
name: commandNames.BOOK_SEARCH,
bookIds: selected
bookIds: selected,
commandFinished: this.repopulate
});
};
onSearchAllCutoffUnmetPress = () => {
this.props.executeCommand({
name: commandNames.CUTOFF_UNMET_BOOK_SEARCH
name: commandNames.CUTOFF_UNMET_BOOK_SEARCH,
commandFinished: this.repopulate
});
};

View File

@@ -16,6 +16,7 @@ function CutoffUnmetRow(props) {
releaseDate,
titleSlug,
title,
lastSearchTime,
disambiguation,
isSelected,
columns,
@@ -68,6 +69,15 @@ function CutoffUnmetRow(props) {
);
}
if (name === 'books.lastSearchTime') {
return (
<RelativeDateCellConnector
key={name}
date={lastSearchTime}
/>
);
}
if (name === 'releaseDate') {
return (
<RelativeDateCellConnector
@@ -105,6 +115,7 @@ CutoffUnmetRow.propTypes = {
releaseDate: PropTypes.string.isRequired,
titleSlug: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
lastSearchTime: PropTypes.string,
disambiguation: PropTypes.string,
isSelected: PropTypes.bool,
columns: PropTypes.arrayOf(PropTypes.object).isRequired,

View File

@@ -121,13 +121,15 @@ class MissingConnector extends Component {
onSearchSelectedPress = (selected) => {
this.props.executeCommand({
name: commandNames.BOOK_SEARCH,
bookIds: selected
bookIds: selected,
commandFinished: this.repopulate
});
};
onSearchAllMissingPress = () => {
this.props.executeCommand({
name: commandNames.MISSING_BOOK_SEARCH
name: commandNames.MISSING_BOOK_SEARCH,
commandFinished: this.repopulate
});
};

View File

@@ -16,6 +16,7 @@ function MissingRow(props) {
releaseDate,
titleSlug,
title,
lastSearchTime,
disambiguation,
isSelected,
columns,
@@ -77,6 +78,15 @@ function MissingRow(props) {
);
}
if (name === 'books.lastSearchTime') {
return (
<RelativeDateCellConnector
key={name}
date={lastSearchTime}
/>
);
}
if (name === 'actions') {
return (
<BookSearchCellConnector
@@ -104,6 +114,7 @@ MissingRow.propTypes = {
releaseDate: PropTypes.string.isRequired,
titleSlug: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
lastSearchTime: PropTypes.string,
disambiguation: PropTypes.string,
isSelected: PropTypes.bool,
columns: PropTypes.arrayOf(PropTypes.object).isRequired,

View File

@@ -7,5 +7,6 @@ interface Window {
theme: string;
urlBase: string;
version: string;
isProduction: boolean;
};
}

View File

@@ -142,7 +142,7 @@
"worker-loader": "3.0.8"
},
"volta": {
"node": "16.17.0",
"node": "20.11.1",
"yarn": "1.22.19"
}
}

View File

@@ -9,7 +9,8 @@
<PackageVersion Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" />
<PackageVersion Include="Equ" Version="2.3.0" />
<PackageVersion Include="FluentAssertions" Version="5.10.3" />
<PackageVersion Include="Polly" Version="8.5.1" />
<PackageVersion Include="IPAddressRange" Version="6.1.0" />
<PackageVersion Include="Polly" Version="8.5.2" />
<PackageVersion Include="Servarr.FluentMigrator.Runner" Version="3.3.2.9" />
<PackageVersion Include="Servarr.FluentMigrator.Runner.SQLite" Version="3.3.2.9" />
<PackageVersion Include="Servarr.FluentMigrator.Runner.Postgres" Version="3.3.2.9" />
@@ -36,7 +37,7 @@
<PackageVersion Include="NLog.Extensions.Logging" Version="5.2.3" />
<PackageVersion Include="NLog" Version="5.1.4" />
<PackageVersion Include="NLog.Targets.Syslog" Version="7.0.0" />
<PackageVersion Include="Npgsql" Version="7.0.9" />
<PackageVersion Include="Npgsql" Version="7.0.10" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
<PackageVersion Include="NUnit" Version="3.14.0" />
<PackageVersion Include="NunitXml.TestLogger" Version="3.0.117" />
@@ -44,10 +45,10 @@
<PackageVersion Include="RestSharp.Serializers.SystemTextJson" Version="106.15.0" />
<PackageVersion Include="RestSharp" Version="106.15.0" />
<PackageVersion Include="Selenium.Support" Version="3.141.0" />
<PackageVersion Include="Selenium.WebDriver.ChromeDriver" Version="91.0.4472.10100" />
<PackageVersion Include="Selenium.WebDriver.ChromeDriver" Version="134.0.6998.16500" />
<PackageVersion Include="Sentry" Version="4.0.2" />
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.6" />
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.7" />
<PackageVersion Include="StyleCop.Analyzers" Version="1.1.118" />
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.6.2" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" />
@@ -57,7 +58,7 @@
<PackageVersion Include="System.IO.Abstractions.TestingHelpers" Version="17.0.24" />
<PackageVersion Include="System.IO.Abstractions" Version="17.0.24" />
<PackageVersion Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
<PackageVersion Include="System.Memory" Version="4.6.0" />
<PackageVersion Include="System.Memory" Version="4.6.2" />
<PackageVersion Include="System.Reflection.TypeExtensions" Version="4.7.0" />
<PackageVersion Include="System.Resources.Extensions" Version="6.0.0" />
<PackageVersion Include="System.Runtime.Loader" Version="4.3.0" />
@@ -65,7 +66,7 @@
<PackageVersion Include="System.ServiceProcess.ServiceController" Version="6.0.1" />
<PackageVersion Include="System.Text.Encoding.CodePages" Version="6.0.0" />
<PackageVersion Include="System.Text.Json" Version="6.0.10" />
<PackageVersion Include="System.ValueTuple" Version="4.5.0" />
<PackageVersion Include="System.ValueTuple" Version="4.6.1" />
<PackageVersion Include="TagLibSharp-Lidarr" Version="2.2.0.19" />
</ItemGroup>
</Project>
</Project>

View File

@@ -40,15 +40,16 @@ namespace NzbDrone.Automation.Test
var service = ChromeDriverService.CreateDefaultService();
// Timeout as windows automation tests seem to take alot longer to get going
driver = new ChromeDriver(service, options, new TimeSpan(0, 3, 0));
driver = new ChromeDriver(service, options, TimeSpan.FromMinutes(3));
driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);
driver.Manage().Window.FullScreen();
_runner = new NzbDroneRunner(LogManager.GetCurrentClassLogger(), null);
_runner.KillAll();
_runner.Start(true);
driver.Url = "http://localhost:8787";
driver.Navigate().GoToUrl("http://localhost:8787");
var page = new PageBase(driver);
page.WaitForNoSpinner();
@@ -68,7 +69,7 @@ namespace NzbDrone.Automation.Test
{
try
{
var image = ((ITakesScreenshot)driver).GetScreenshot();
var image = (driver as ITakesScreenshot).GetScreenshot();
image.SaveAsFile($"./{name}_test_screenshot.png", ScreenshotImageFormat.Png);
}
catch (Exception ex)

View File

@@ -1,19 +1,17 @@
using System;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
namespace NzbDrone.Automation.Test.PageModel
{
public class PageBase
{
private readonly RemoteWebDriver _driver;
private readonly IWebDriver _driver;
public PageBase(RemoteWebDriver driver)
public PageBase(IWebDriver driver)
{
_driver = driver;
driver.Manage().Window.Maximize();
}
public IWebElement FindByClass(string className, int timeout = 5)

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.IO.Abstractions;
using System.Linq;
using System.Threading;
using NLog;
using NzbDrone.Common.EnsureThat;
using NzbDrone.Common.EnvironmentInfo;
@@ -306,9 +307,26 @@ namespace NzbDrone.Common.Disk
{
Ensure.That(path, () => path).IsValidPath(PathValidationType.CurrentOs);
var files = GetFiles(path, recursive);
var files = GetFiles(path, recursive).ToList();
files.ToList().ForEach(RemoveReadOnly);
files.ForEach(RemoveReadOnly);
var attempts = 0;
while (attempts < 3 && files.Any())
{
EmptyFolder(path);
if (GetFiles(path, recursive).Any())
{
// Wait for IO operations to complete after emptying the folder since they aren't always
// instantly removed and it can lead to false positives that files are still present.
Thread.Sleep(3000);
}
attempts++;
files = GetFiles(path, recursive).ToList();
}
_fileSystem.Directory.Delete(path, recursive);
}

View File

@@ -342,10 +342,11 @@ namespace NzbDrone.Common.Disk
var isCifs = targetDriveFormat == "cifs";
var isBtrfs = sourceDriveFormat == "btrfs" && targetDriveFormat == "btrfs";
var isZfs = sourceDriveFormat == "zfs" && targetDriveFormat == "zfs";
if (mode.HasFlag(TransferMode.Copy))
{
if (isBtrfs)
if (isBtrfs || isZfs)
{
if (_diskProvider.TryCreateRefLink(sourcePath, targetPath))
{
@@ -359,7 +360,7 @@ namespace NzbDrone.Common.Disk
if (mode.HasFlag(TransferMode.Move))
{
if (isBtrfs)
if (isBtrfs || isZfs)
{
if (isSameMount && _diskProvider.TryRenameFile(sourcePath, targetPath))
{

View File

@@ -108,6 +108,15 @@ namespace NzbDrone.Common.Extensions
return Directory.GetParent(cleanPath)?.FullName;
}
public static string GetCleanPath(this string path)
{
var cleanPath = OsInfo.IsWindows
? PARENT_PATH_END_SLASH_REGEX.Replace(path, "")
: path.TrimEnd(Path.DirectorySeparatorChar);
return cleanPath;
}
public static bool IsParentPath(this string parentPath, string childPath)
{
if (parentPath != "/" && !parentPath.EndsWith(":\\"))

View File

@@ -1,3 +1,4 @@
using System;
using NzbDrone.Common.Extensions;
namespace NzbDrone.Common.Http.Proxy
@@ -29,7 +30,8 @@ namespace NzbDrone.Common.Http.Proxy
{
if (!string.IsNullOrWhiteSpace(BypassFilter))
{
var hostlist = BypassFilter.Split(',');
var hostlist = BypassFilter.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
for (var i = 0; i < hostlist.Length; i++)
{
if (hostlist[i].StartsWith("*"))
@@ -41,7 +43,7 @@ namespace NzbDrone.Common.Http.Proxy
return hostlist;
}
return new string[] { };
return Array.Empty<string>();
}
}

View File

@@ -4,27 +4,27 @@ namespace NzbDrone.Common.Instrumentation.Extensions
{
public static class LoggerExtensions
{
[MessageTemplateFormatMethod("message")]
public static void ProgressInfo(this Logger logger, string message, params object[] args)
{
var formattedMessage = string.Format(message, args);
LogProgressMessage(logger, LogLevel.Info, formattedMessage);
LogProgressMessage(logger, LogLevel.Info, message, args);
}
[MessageTemplateFormatMethod("message")]
public static void ProgressDebug(this Logger logger, string message, params object[] args)
{
var formattedMessage = string.Format(message, args);
LogProgressMessage(logger, LogLevel.Debug, formattedMessage);
LogProgressMessage(logger, LogLevel.Debug, message, args);
}
[MessageTemplateFormatMethod("message")]
public static void ProgressTrace(this Logger logger, string message, params object[] args)
{
var formattedMessage = string.Format(message, args);
LogProgressMessage(logger, LogLevel.Trace, formattedMessage);
LogProgressMessage(logger, LogLevel.Trace, message, args);
}
private static void LogProgressMessage(Logger logger, LogLevel level, string message)
private static void LogProgressMessage(Logger logger, LogLevel level, string message, object[] parameters)
{
var logEvent = new LogEventInfo(level, logger.Name, message);
var logEvent = new LogEventInfo(level, logger.Name, null, message, parameters);
logEvent.Properties.Add("Status", "");
logger.Log(logEvent);

View File

@@ -6,6 +6,7 @@ using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using NLog;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Model;
@@ -117,7 +118,9 @@ namespace NzbDrone.Common.Processes
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true,
RedirectStandardInput = true
RedirectStandardInput = true,
StandardOutputEncoding = Encoding.UTF8,
StandardErrorEncoding = Encoding.UTF8
};
if (environmentVariables != null)

View File

@@ -6,6 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DryIoc.dll" />
<PackageReference Include="IPAddressRange" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" />
<PackageReference Include="NLog.Extensions.Logging" />

View File

@@ -17,7 +17,7 @@ namespace NzbDrone.Common.Reflection
public static List<Type> ImplementationsOf<T>(this Assembly assembly)
{
return assembly.GetTypes().Where(c => typeof(T).IsAssignableFrom(c)).ToList();
return assembly.GetExportedTypes().Where(c => typeof(T).IsAssignableFrom(c)).ToList();
}
public static bool IsSimpleType(this Type type)
@@ -68,7 +68,7 @@ namespace NzbDrone.Common.Reflection
public static Type FindTypeByName(this Assembly assembly, string name)
{
return assembly.GetTypes().SingleOrDefault(c => c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));
return assembly.GetExportedTypes().SingleOrDefault(c => c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));
}
public static bool HasAttribute<TAttribute>(this Type type)

View File

@@ -12,7 +12,7 @@ namespace NzbDrone.Core.Test.Http
{
private HttpProxySettings GetProxySettings()
{
return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com", true, null, null);
return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com,172.16.0.0/12", true, null, null);
}
[Test]
@@ -23,6 +23,7 @@ namespace NzbDrone.Core.Test.Http
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://eu.httpbin.org/get")).Should().BeTrue();
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://google.com/get")).Should().BeTrue();
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://localhost:8654/get")).Should().BeTrue();
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.21.0.1:8989/api/v3/indexer/schema")).Should().BeTrue();
}
[Test]
@@ -31,6 +32,7 @@ namespace NzbDrone.Core.Test.Http
var settings = GetProxySettings();
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://bing.com/get")).Should().BeFalse();
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.3.0.1:8989/api/v3/indexer/schema")).Should().BeFalse();
}
}
}

View File

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

View File

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

View File

@@ -21,14 +21,14 @@ namespace NzbDrone.Core.Test.UpdateTests
public void no_update_when_version_higher()
{
UseRealHttp();
Subject.GetLatestUpdate("nightly", new Version(10, 0)).Should().BeNull();
Subject.GetLatestUpdate("develop", new Version(10, 0)).Should().BeNull();
}
[Test]
public void finds_update_when_version_lower()
{
UseRealHttp();
Subject.GetLatestUpdate("nightly", new Version(0, 1)).Should().NotBeNull();
Subject.GetLatestUpdate("develop", new Version(0, 1)).Should().NotBeNull();
}
[Test]
@@ -42,10 +42,9 @@ namespace NzbDrone.Core.Test.UpdateTests
[Test]
public void should_get_recent_updates()
{
const string branch = "nightly";
const string branch = "develop";
UseRealHttp();
var recent = Subject.GetRecentUpdates(branch, new Version(0, 1), null);
var recentWithChanges = recent.Where(c => c.Changes != null);
recent.Should().NotBeEmpty();
recent.Should().OnlyContain(c => c.Hash.IsNotNullOrWhiteSpace());

View File

@@ -102,9 +102,9 @@ namespace NzbDrone.Core.Books
_logger.Error("ReadarrId {0} was not found, it may have been removed from Goodreads.", newAuthor.Metadata.Value.ForeignAuthorId);
throw new ValidationException(new List<ValidationFailure>
{
new ValidationFailure("MusicbrainzId", "An author with this ID was not found", newAuthor.Metadata.Value.ForeignAuthorId)
});
{
new ("ForeignAuthorId", "An author with this ID was not found", newAuthor.Metadata.Value.ForeignAuthorId)
});
}
author.ApplyChanges(newAuthor);

View File

@@ -222,7 +222,7 @@ namespace NzbDrone.Core.Books
protected override void DeleteEntity(Author local, bool deleteFiles)
{
_authorService.DeleteAuthor(local.Id, true);
_authorService.DeleteAuthor(local.Id, deleteFiles);
}
protected override List<Book> GetRemoteChildren(Author local, Author remote)

View File

@@ -239,7 +239,7 @@ namespace NzbDrone.Core.Books
protected override void DeleteEntity(Book local, bool deleteFiles)
{
_bookService.DeleteBook(local.Id, true);
_bookService.DeleteBook(local.Id, deleteFiles);
}
protected override List<Edition> GetRemoteChildren(Book local, Book remote)

View File

@@ -126,7 +126,7 @@ namespace NzbDrone.Core.Books
if (ShouldDelete(local))
{
_logger.Warn($"{typeof(TEntity).Name} {local} not found in metadata and is being deleted");
DeleteEntity(local, true);
DeleteEntity(local, false);
return false;
}
else

View File

@@ -254,7 +254,21 @@ namespace NzbDrone.Core.Configuration
}
public string UiFolder => BuildInfo.IsDebug ? Path.Combine("..", "UI") : "UI";
public string InstanceName => _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName);
public string InstanceName
{
get
{
var instanceName = _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName);
if (instanceName.Contains(BuildInfo.AppName, StringComparison.OrdinalIgnoreCase))
{
return instanceName;
}
return BuildInfo.AppName;
}
}
public bool UpdateAutomatically => _updateOptions.Automatically ?? GetValueBoolean("UpdateAutomatically", OsInfo.IsWindows, false);

View File

@@ -264,7 +264,7 @@ namespace NzbDrone.Core.Datastore
protected void Delete(SqlBuilder builder)
{
var sql = builder.AddDeleteTemplate(typeof(TModel)).LogQuery();
var sql = builder.AddDeleteTemplate(typeof(TModel));
using (var conn = _database.OpenConnection())
{

View File

@@ -40,6 +40,7 @@ namespace NzbDrone.Core.Datastore
Environment.SetEnvironmentVariable("No_Expand", "true");
Environment.SetEnvironmentVariable("No_SQLiteXmlConfigFile", "true");
Environment.SetEnvironmentVariable("No_PreLoadSQLite", "true");
Environment.SetEnvironmentVariable("No_SQLiteFunctions", "true");
}
public DbFactory(IMigrationController migrationController,

View File

@@ -4,24 +4,24 @@ namespace NzbDrone.Core.Exceptions
{
public class AuthorNotFoundException : NzbDroneException
{
public string MusicBrainzId { get; set; }
public string ForeignAuthorId { get; set; }
public AuthorNotFoundException(string musicbrainzId)
: base(string.Format("Author with id {0} was not found, it may have been removed from the metadata server.", musicbrainzId))
public AuthorNotFoundException(string foreignAuthorId)
: base($"Author with id {foreignAuthorId} was not found, it may have been removed from the metadata server.")
{
MusicBrainzId = musicbrainzId;
ForeignAuthorId = foreignAuthorId;
}
public AuthorNotFoundException(string musicbrainzId, string message, params object[] args)
public AuthorNotFoundException(string foreignAuthorId, string message, params object[] args)
: base(message, args)
{
MusicBrainzId = musicbrainzId;
ForeignAuthorId = foreignAuthorId;
}
public AuthorNotFoundException(string musicbrainzId, string message)
public AuthorNotFoundException(string foreignAuthorId, string message)
: base(message)
{
MusicBrainzId = musicbrainzId;
ForeignAuthorId = foreignAuthorId;
}
}
}

View File

@@ -4,24 +4,24 @@ namespace NzbDrone.Core.Exceptions
{
public class BookNotFoundException : NzbDroneException
{
public string MusicBrainzId { get; set; }
public string ForeignBookId { get; set; }
public BookNotFoundException(string musicbrainzId)
: base(string.Format("Book with id {0} was not found, it may have been removed from metadata server.", musicbrainzId))
public BookNotFoundException(string foreignBookId)
: base($"Book with id {foreignBookId} was not found, it may have been removed from metadata server.")
{
MusicBrainzId = musicbrainzId;
ForeignBookId = foreignBookId;
}
public BookNotFoundException(string musicbrainzId, string message, params object[] args)
public BookNotFoundException(string foreignBookId, string message, params object[] args)
: base(message, args)
{
MusicBrainzId = musicbrainzId;
ForeignBookId = foreignBookId;
}
public BookNotFoundException(string musicbrainzId, string message)
public BookNotFoundException(string foreignBookId, string message)
: base(message)
{
MusicBrainzId = musicbrainzId;
ForeignBookId = foreignBookId;
}
}
}

View File

@@ -4,24 +4,24 @@ namespace NzbDrone.Core.Exceptions
{
public class EditionNotFoundException : NzbDroneException
{
public string MusicBrainzId { get; set; }
public string ForeignEditionId { get; set; }
public EditionNotFoundException(string musicbrainzId)
: base(string.Format("Edition with id {0} was not found, it may have been removed from metadata server.", musicbrainzId))
public EditionNotFoundException(string foreignEditionId)
: base($"Edition with id {foreignEditionId} was not found, it may have been removed from metadata server.")
{
MusicBrainzId = musicbrainzId;
ForeignEditionId = foreignEditionId;
}
public EditionNotFoundException(string musicbrainzId, string message, params object[] args)
public EditionNotFoundException(string foreignEditionId, string message, params object[] args)
: base(message, args)
{
MusicBrainzId = musicbrainzId;
ForeignEditionId = foreignEditionId;
}
public EditionNotFoundException(string musicbrainzId, string message)
public EditionNotFoundException(string foreignEditionId, string message)
: base(message)
{
MusicBrainzId = musicbrainzId;
ForeignEditionId = foreignEditionId;
}
}
}

View File

@@ -10,6 +10,9 @@ namespace NzbDrone.Core.History
{
public const string DOWNLOAD_CLIENT = "downloadClient";
public const string RELEASE_SOURCE = "releaseSource";
public const string RELEASE_GROUP = "releaseGroup";
public const string SIZE = "size";
public const string INDEXER = "indexer";
public EntityHistory()
{

View File

@@ -116,6 +116,7 @@ namespace NzbDrone.Core.History
{
var builder = Builder()
.Join<EntityHistory, Author>((h, a) => h.AuthorId == a.Id)
.LeftJoin<EntityHistory, Book>((h, b) => h.BookId == b.Id)
.Where<EntityHistory>(x => x.Date >= date);
if (eventType.HasValue)
@@ -123,9 +124,10 @@ namespace NzbDrone.Core.History
builder.Where<EntityHistory>(h => h.EventType == eventType);
}
return _database.QueryJoined<EntityHistory, Author>(builder, (history, author) =>
return _database.QueryJoined<EntityHistory, Author, Book>(builder, (history, author, book) =>
{
history.Author = author;
history.Book = book;
return history;
}).OrderBy(h => h.Date).ToList();
}

View File

@@ -263,7 +263,9 @@ namespace NzbDrone.Core.History
history.Data.Add("DownloadClient", message.DownloadClient);
history.Data.Add("DownloadClientName", message.TrackedDownload?.DownloadItem.DownloadClientInfo.Name);
history.Data.Add("Message", message.Message);
history.Data.Add("Size", message.TrackedDownload?.DownloadItem.TotalSize.ToString());
history.Data.Add("ReleaseGroup", message.TrackedDownload?.RemoteBook?.ParsedBookInfo?.ReleaseGroup ?? message.Data.GetValueOrDefault(EntityHistory.RELEASE_GROUP));
history.Data.Add("Size", message.TrackedDownload?.DownloadItem.TotalSize.ToString() ?? message.Data.GetValueOrDefault(EntityHistory.SIZE));
history.Data.Add("Indexer", message.TrackedDownload?.RemoteBook?.Release?.Indexer ?? message.Data.GetValueOrDefault(EntityHistory.INDEXER));
_historyRepository.Insert(history);
}
@@ -373,6 +375,7 @@ namespace NzbDrone.Core.History
history.Data.Add("Message", message.Message);
history.Data.Add("ReleaseGroup", message.TrackedDownload?.RemoteBook?.ParsedBookInfo?.ReleaseGroup);
history.Data.Add("Size", message.TrackedDownload?.DownloadItem.TotalSize.ToString());
history.Data.Add("Indexer", message.TrackedDownload?.RemoteBook?.Release?.Indexer);
historyToAdd.Add(history);
}

View File

@@ -1,5 +1,7 @@
using System;
using System.Linq;
using System.Net;
using NetTools;
using NzbDrone.Common.Http;
using NzbDrone.Common.Http.Proxy;
using NzbDrone.Core.Configuration;
@@ -52,7 +54,15 @@ namespace NzbDrone.Core.Http
//We are utilizing the WebProxy implementation here to save us having to re-implement it. This way we use Microsofts implementation
var proxy = new WebProxy(proxySettings.Host + ":" + proxySettings.Port, proxySettings.BypassLocalAddress, proxySettings.BypassListAsArray);
return proxy.IsBypassed((Uri)url);
return proxy.IsBypassed((Uri)url) || IsBypassedByIpAddressRange(proxySettings.BypassListAsArray, url.Host);
}
private static bool IsBypassedByIpAddressRange(string[] bypassList, string host)
{
return bypassList.Any(bypass =>
IPAddressRange.TryParse(bypass, out var ipAddressRange) &&
IPAddress.TryParse(host, out var ipAddress) &&
ipAddressRange.Contains(ipAddress));
}
}
}

View File

@@ -77,7 +77,7 @@ namespace NzbDrone.Core.Indexers.FileList
var url = new HttpUri(_settings.BaseUrl)
.CombinePath("download.php")
.AddQueryParam("id", torrentId)
.AddQueryParam("passkey", _settings.Passkey);
.AddQueryParam("passkey", _settings.Passkey.Trim());
return url.FullUri;
}

View File

@@ -653,5 +653,7 @@
"UnmappedFiles": "المجلدات غير المعينة",
"UpdateAppDirectlyLoadError": "تعذر تحديث {appName} مباشرة ،",
"Clone": "قريب",
"BuiltIn": "مدمج"
"BuiltIn": "مدمج",
"AddNewAuthorRootFolderHelpText": "سيتم إنشاء المجلد الفرعي \"{folder}\" تلقائيًا",
"AddRootFolder": "إضافة مجلد جذر"
}

View File

@@ -653,5 +653,49 @@
"Clone": "Близо",
"DockerUpdater": "актуализирайте контейнера на докера, за да получите актуализацията",
"InstallLatest": "Инсталирайте най-новите",
"OnLatestVersion": "Вече е инсталирана най-новата версия на {appName}"
"OnLatestVersion": "Вече е инсталирана най-новата версия на {appName}",
"BlocklistAndSearch": "Списък за блокиране и търсене",
"BlocklistMultipleOnlyHint": "Списък за блокиране без търсене на заместители",
"BlocklistAndSearchHint": "Започнете търсене на заместител след блокиране",
"BlocklistAndSearchMultipleHint": "Започнете търсене на заместители след блокиране",
"DoNotBlocklistHint": "Премахване без блокиране",
"Database": "База данни",
"DoNotBlocklist": "Не блокирайте",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Автоматично търсене и опит за изтегляне на различна версия, когато неуспешната версия е била взета от интерактивно търсене",
"DownloadClientDelugeSettingsDirectoryHelpText": "Незадължителна локация за изтеглянията, оставете празно, за да използвате мястото по подразбиране на Deluge",
"CustomFormatsSettingsTriggerInfo": "Персонализиран формат ще бъде приложен към издание или файл, когато съвпада с поне един от всеки от избраните различни типове условия.",
"AutomaticAdd": "Автоматично добавяне",
"BlocklistOnly": "Само списък за блокиране",
"BlocklistOnlyHint": "Списък за блокиране без търсене на заместител",
"DownloadClientDelugeSettingsDirectoryCompleted": "Директория за вече завършените изтегляния",
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Незадължителна локация за преместване на вече завършените изтегляния, оставете празно, за да използвате мястото по подразбиране на Deluge",
"Library": "Библиотека",
"ApplicationURL": "URL адрес на приложението",
"ApplicationUrlHelpText": "Външният URL на това приложение, включително http(s)://, порт и базов URL",
"CustomFormatsSpecificationFlag": "Флаг",
"BypassIfAboveCustomFormatScore": "Пропусни, ако е над рейтинга на персонализирания формат",
"AppUpdated": "{appName} Актуализиран",
"AppUpdatedVersion": "{appName} е актуализиранa до версия `{version}`, за да получите най-новите промени, ще трябва да презаредите {appName}",
"CatalogNumber": "каталожен номер",
"AutoAdd": "Автоматично добавяне",
"CustomFormatsSpecificationRegularExpression": "Регулярни изрази",
"CustomFormatsSpecificationRegularExpressionHelpText": "Персонализираният формат RegEx не е чувствителен към главни и малки букви",
"Label": "Етикет",
"AutomaticUpdatesDisabledDocker": "Автоматичните актуализации не се поддържат директно при използване на механизма за актуализация на Docker. Ще трябва да актуализирате Image-a на контейнера извън {appName} или да използвате скрипт",
"NoCutoffUnmetItems": "Няма неизпълнени елементи за прекъсване",
"Publisher": "Издател",
"Series": "Сериали",
"Theme": "Тема",
"BypassIfAboveCustomFormatScoreHelpText": "Активиране на пропускане, когато изданието има резултат, по-висок от конфигурирания минимален резултат за потребителски формат",
"MinimumCustomFormatScoreHelpText": "Минимална резултат на персонализирания формат, необходима за пропускане на забавянето за предпочитания протокол",
"DownloadClientDelugeSettingsDirectory": "Директория за изтегляне",
"AuthenticationMethodHelpTextWarning": "Моля, изберете валиден метод за удостоверяване",
"AuthenticationMethod": "Метод за удостоверяване",
"AuthenticationRequiredHelpText": "Променете за кои заявки се изисква удостоверяване. Не променяйте, освен ако не разбирате рисковете.",
"AuthenticationRequired": "Изисква се удостоверяване",
"AuthenticationRequiredPasswordHelpTextWarning": "Въведете нова парола",
"ApplyChanges": "Прилагане на промените",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Потвърдете новата парола",
"AddNewAuthorRootFolderHelpText": "Подпапката „{0}“ ще бъде създадена автоматично",
"AddRootFolder": "Добавяне на коренна папка"
}

View File

@@ -242,7 +242,7 @@
"PackageVersion": "Versió del paquet",
"PageSize": "Mida de la pàgina",
"PageSizeHelpText": "Nombre d'elements per mostrar a cada pàgina",
"Proper": "Proper",
"Proper": "Correcte",
"ProxyBypassFilterHelpText": "Utilitzeu ',' com a separador i '*.' com a comodí per als subdominis",
"ProxyCheckBadRequestMessage": "No s'ha pogut provar el servidor intermediari. Codi d'estat: {0}",
"ProxyCheckFailedToTestMessage": "No s'ha pogut provar el servidor intermediari: {0}",
@@ -316,7 +316,7 @@
"URLBase": "Base URL",
"Backups": "Còpies de seguretat",
"Connections": "Connexions",
"CopyUsingHardlinksHelpText": "Utilitzeu els enllaços durs quan intenteu copiar fitxers de torrents que encara s'estan sembrant",
"CopyUsingHardlinksHelpText": "Els enllaços durs permeten a Readarr importar torrents de sembra a la carpeta de la sèrie sense prendre espai de disc extra o copiar tot el contingut del fitxer. Els enllaços durs només funcionaran si l'origen i la destinació estan en el mateix volum",
"DeleteBackup": "Suprimeix la còpia de seguretat",
"DeleteBackupMessageText": "Esteu segur que voleu suprimir la còpia de seguretat '{name}'?",
"DeleteDownloadClient": "Suprimeix el client de descàrrega",
@@ -336,7 +336,7 @@
"IgnoredAddresses": "Adreces ignorades",
"IgnoredPlaceHolder": "Afegeix una nova restricció",
"ImportExtraFiles": "Importa fitxers addicionals",
"ImportFailedInterp": "ImportFailedInterp",
"ImportFailedInterp": "Importació fallida: {0}",
"IncludeHealthWarningsHelpText": "Inclou advertències de salut",
"NotificationTriggers": "Activadors de notificacions",
"NoUpdatesAreAvailable": "No hi ha actualitzacions disponibles",
@@ -428,52 +428,52 @@
"BlocklistRelease": "Publicació de la llista de bloqueig",
"HasPendingChangesNoChanges": "Sense Canvis",
"ManualImportSelectEdition": "Importació manual - Seleccioneu la pel·lícula",
"MissingFromDisk": "{appName} no ha pogut trobar el fitxer al disc, de manera que el fitxer es desenllaçarà de la pel·lícula a la base de dades",
"MissingFromDisk": "Readarr no ha pogut trobar el fitxer al disc, de manera que el fitxer es desenllaçarà de la pel·lícula a la base de dades",
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS no és compatible amb aquest indexador",
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "S'utilitzarà quan es realitzin cerques automàtiques mitjançant la interfície d'usuari o per {appName}",
"CutoffHelpText": "Un cop s'assoleixi aquesta qualitat, {appName} ja no baixarà pel·lícules",
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "S'utilitzarà quan es realitzin cerques automàtiques mitjançant la interfície d'usuari o per Readarr",
"CutoffHelpText": "Un cop s'assoleixi aquesta qualitat, Readarr ja no baixarà pel·lícules",
"ResetAPIKeyMessageText": "Esteu segur que voleu restablir la clau API?",
"PropersAndRepacks": "Propietats i Repacks",
"RemotePathMappingCheckFolderPermissions": "{appName} pot veure però no accedir al directori de descàrregues {0}. Error de permisos probable.",
"RemotePathMappingCheckFolderPermissions": "Readarr pot veure però no accedir al directori de descàrregues {1}. Error de permisos probable.",
"RescanAuthorFolderAfterRefresh": "Torna a escanejar la carpeta de pel·lícules després de l'actualització",
"RescanAfterRefreshHelpText": "Torneu a escanejar la carpeta de la pel·lícula després d'actualitzar la pel·lícula",
"RestartReadarr": "Reinicia {appName}",
"RestartReadarr": "Reinicia Readarr",
"ShowRelativeDatesHelpText": "Mostra dates relatives (avui/ahir/etc) o absolutes",
"ShowSearchActionHelpText": "Mostra el botó de cerca al passar el cursor",
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "La carpeta de pel·lícules '{0}' i tot el seu contingut es suprimiran.",
"UrlBaseHelpTextWarning": "Cal reiniciar perquè tingui efecte",
"ApplicationURL": "URL de l'aplicació",
"ApplicationUrlHelpText": "URL extern de l'aplicació, inclòs http(s)://, port i URL base",
"BackupFolderHelpText": "Els camins relatius estaran sota el directori AppData del {appName}",
"BackupFolderHelpText": "Els camins relatius estaran sota el directori AppData de Readarr",
"CancelPendingTask": "Esteu segur que voleu cancel·lar aquesta tasca pendent?",
"ChownGroupHelpTextWarning": "Això només funciona si l'usuari que executa {appName} és el propietari del fitxer. És millor assegurar-se que el client de descàrrega utilitza el mateix grup que {appName}.",
"ChownGroupHelpTextWarning": "Això només funciona si l'usuari que executa Readarr és el propietari del fitxer. És millor assegurar-se que el client de descàrrega utilitza el mateix grup que Readarr.",
"ConnectSettingsSummary": "Notificacions, connexions a servidors/reproductors multimèdia i scripts personalitzats",
"DeleteEmptyFoldersHelpText": "Suprimeix les carpetes de pel·lícules buides durant l'exploració del disc i quan s'esborren els fitxers de pel·lícules",
"DeleteImportListMessageText": "Esteu segur que voleu suprimir la llista '{name}'?",
"DeleteMetadataProfileMessageText": "Esteu segur que voleu suprimir el perfil de qualitat {0}",
"DeleteMetadataProfileMessageText": "Esteu segur que voleu suprimir el perfil de metadades {name}?",
"ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Per obtenir més informació sobre els clients de baixada individuals, feu clic als botons de més informació.",
"ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Per obtenir més informació sobre els indexadors individuals, feu clic als botons d'informació.",
"ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Per obtenir més informació sobre les llistes d'importació individuals, feu clic als botons d'informació.",
"IndexerPriorityHelpText": "Prioritat de l'indexador d'1 (la més alta) a 50 (la més baixa). Per defecte: 25. S'utilitza quan s'agafa llançaments com a desempat per a versions iguals, {appName} encara utilitzarà tots els indexadors habilitats per a la sincronització i la cerca RSS",
"IndexerRssHealthCheckNoIndexers": "No hi ha indexadors disponibles amb la sincronització RSS activada, {appName} no capturarà les noves versions automàticament",
"IndexerSearchCheckNoAutomaticMessage": "No hi ha indexadors disponibles amb la cerca automàtica activada, {appName} no proporcionarà cap resultat de cerca automàtica",
"IndexerSearchCheckNoInteractiveMessage": "No hi ha indexadors amb la cerca interactiva activada, {appName} no obtindrà cap resultat de cerca",
"IndexerPriorityHelpText": "Prioritat de l'indexador d'1 (la més alta) a 50 (la més baixa). Per defecte: 25. Usada per a desempatar llançaments iguals quan es capturen, Readarr continuarà usant tots els indexadores habilitats per a Sincronització d'RSS i Cerca.",
"IndexerRssHealthCheckNoIndexers": "No hi ha indexadors disponibles amb la sincronització RSS activada, Readarr no capturarà les noves versions automàticament",
"IndexerSearchCheckNoAutomaticMessage": "No hi ha indexadors disponibles amb la cerca automàtica activada, Readarr no proporcionarà cap resultat de cerca automàtica",
"IndexerSearchCheckNoInteractiveMessage": "No hi ha indexadors amb la cerca interactiva activada, Readarr no obtindrà cap resultat de cerca",
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Actualitzeu fins que s'assoleixi o superi aquesta qualitat",
"IsTagUsedCannotBeDeletedWhileInUse": "No es pot suprimir mentre està en ús",
"LaunchBrowserHelpText": " Obriu un navegador web i navegueu a la pàgina d'inici de {appName} a l'inici de l'aplicació.",
"LaunchBrowserHelpText": " Obriu un navegador web i navegueu a la pàgina d'inici de Readarr a l'inici de l'aplicació.",
"LoadingBookFilesFailed": "No s'han pogut carregar els fitxers de pel·lícules",
"NoHistory": "Sense història",
"NoHistory": "Sense història.",
"OnBookFileDeleteForUpgradeHelpText": "Al suprimir el fitxer de pel·lícula per a l'actualització",
"OnBookFileDeleteHelpText": "Al suprimir fitxer de pel·lícula",
"ReleaseBranchCheckOfficialBranchMessage": "La branca {0} no és una branca de llançament de {appName} vàlida, no rebreu actualitzacions",
"ReleaseBranchCheckOfficialBranchMessage": "La branca {0} no és una branca de llançament de Readarr vàlida, no rebreu actualitzacions",
"ReleaseDate": "Dates de llançament",
"RemotePathMappingCheckDownloadPermissions": "{appName} pot veure però no accedir a la pel·lícula baixada {0}. Error de permisos probable.",
"RemotePathMappingCheckFilesGenericPermissions": "El client de baixada {0} ha informat de fitxers a {1} però {appName} no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.",
"RemotePathMappingCheckGenericPermissions": "El client de baixada {0} col·loca les baixades a {1} però {appName} no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.",
"ReplaceIllegalCharactersHelpText": "Substitueix caràcters il·legals. Si no es marca, {appName} els eliminarà",
"RemotePathMappingCheckDownloadPermissions": "Readarr pot veure però no accedir a la pel·lícula baixada {0}. Error de permisos probable.",
"RemotePathMappingCheckFilesGenericPermissions": "El client de baixada {0} ha informat de fitxers a {1} però Readarr no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.",
"RemotePathMappingCheckGenericPermissions": "El client de baixada {0} col·loca les baixades a {1} però Readarr no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.",
"ReplaceIllegalCharactersHelpText": "Substitueix caràcters il·legals. Si no es marca, Readarr els eliminarà",
"RssSyncIntervalHelpText": "Interval en minuts. Establiu a zero per desactivar (això aturarà tota captura automàtica de llançaments)",
"SelectedCountBooksSelectedInterp": "S'han seleccionat {0} pel·lícules",
"SettingsRemotePathMappingLocalPathHelpText": "Camí que {appName} hauria d'utilitzar per accedir al camí remot localment",
"SettingsRemotePathMappingLocalPathHelpText": "Camí que Readarr hauria d'utilitzar per accedir al camí remot localment",
"ShortDateFormat": "Format de data curta",
"ShowBookTitleHelpText": "Mostra el títol de la pel·lícula sota el cartell",
"ShowRelativeDates": "Mostra les dates relatives",
@@ -491,34 +491,34 @@
"UserAgentProvidedByTheAppThatCalledTheAPI": "Agent d'usuari proporcionat per l'aplicació per fer peticions a l'API",
"BranchUpdateMechanism": "Branca utilitzada pel mecanisme d'actualització extern",
"WriteTagsNo": "Mai",
"RestartReloadNote": "Nota: {appName} es reiniciarà i tornarà a carregar automàticament la interfície d'usuari durant el procés de restauració.",
"RestartReloadNote": "Nota: Readarr es reiniciarà i tornarà a carregar automàticament la interfície d'usuari durant el procés de restauració.",
"Series": "Sèries",
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Es mostra a sobre de cada columna quan la setmana és la visualització activa",
"SorryThatAuthorCannotBeFound": "Ho sentim, aquesta pel·lícula no s'ha trobat.",
"SorryThatBookCannotBeFound": "Ho sentim, aquesta pel·lícula no s'ha trobat.",
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "S'utilitzarà quan s'utilitzi la cerca interactiva",
"ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Això s'aplicarà a tots els indexadors, si us plau, seguiu les regles establertes per ells",
"UnableToLoadHistory": "No es pot carregar l'historial",
"UnableToLoadHistory": "No es pot carregar l'historial.",
"IconTooltip": "Programat",
"ReadarrTags": "Etiquetes de {appName}",
"ReadarrTags": "Etiquetes de Readarr",
"DownloadPropersAndRepacksHelpTexts1": "Si s'ha d'actualitzar automàticament o no a Propers/Repacks",
"GrabReleaseMessageText": "{appName} no ha pogut determinar per a quina pel·lícula era aquest llançament. És possible que {appName} no pugui importar automàticament aquesta versió. Voleu capturar \"{0}\"?",
"GrabReleaseMessageText": "Readarr no ha pogut determinar per a quina pel·lícula era aquest llançament. És possible que Readarr no pugui importar automàticament aquesta versió. Voleu capturar '{0}'?",
"IsCutoffCutoff": "Requisit",
"MountCheckMessage": "El muntatge que conté una ruta de pel·lícula es munta com a només de lectura: ",
"RescanAfterRefreshHelpTextWarning": "{appName} no detectarà automàticament els canvis als fitxers quan no estigui configurat com a \"Sempre\"",
"RescanAfterRefreshHelpTextWarning": "Readarr no detectarà automàticament els canvis als fitxers quan no estigui configurat com a \"Sempre\"",
"ShowUnknownAuthorItems": "Mostra elements de pel·lícula desconeguda",
"Size": " Mida",
"SkipFreeSpaceCheckWhenImportingHelpText": "Utilitzeu-lo quan {appName} no pugui detectar espai lliure a la carpeta arrel de la pel·lícula",
"SkipFreeSpaceCheckWhenImportingHelpText": "Utilitzeu-lo quan Readarr no pugui detectar espai lliure a la carpeta arrel de la pel·lícula",
"StandardBookFormat": "Format de pel·lícula estàndard",
"UnableToAddANewImportListExclusionPleaseTryAgain": "No es pot afegir una nova llista d'exclusió, torneu-ho a provar.",
"UnableToLoadReleaseProfiles": "No es poden carregar els perfils de retard",
"UnmonitoredHelpText": "Inclou pel·lícules no monitorades al canal iCal",
"UpdateAll": "Actualitzar-ho tot",
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Les pel·lícules suprimides del disc no es descarten automàticament al {appName}",
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Les pel·lícules suprimides del disc no es descarten automàticament al Readarr",
"ChownGroupHelpText": "Nom del grup o gid. Utilitzeu gid per a sistemes de fitxers remots.",
"AuthorClickToChangeBook": "Feu clic per canviar la pel·lícula",
"ChmodFolderHelpTextWarning": "Això només funciona si l'usuari que executa {appName} és el propietari del fitxer. És millor assegurar-se que el client de descàrrega estableixi correctament els permisos.",
"CopyUsingHardlinksHelpTextWarning": "De tant en tant, els bloquejos de fitxers poden impedir reanomenar els fitxers que s'estan sembrant. Podeu desactivar temporalment la compartició i utilitzar la funció de reanomenar de {appName} com a solució.",
"ChmodFolderHelpTextWarning": "Això només funciona si l'usuari que executa Readarr és el propietari del fitxer. És millor assegurar-se que el client de descàrrega estableixi correctament els permisos.",
"CopyUsingHardlinksHelpTextWarning": "De tant en tant, els bloquejos de fitxers poden impedir reanomenar els fitxers que s'estan sembrant. Podeu desactivar temporalment la compartició i utilitzar la funció de reanomenar de Readarr com a solució.",
"CouldntFindAnyResultsForTerm": "No s'ha pogut trobar cap resultat per a '{0}'",
"CreateEmptyAuthorFolders": "Creeu carpetes buides per a les pel·lícules",
"CreateEmptyAuthorFoldersHelpText": "Creeu carpetes de pel·lícules que falten durant l'exploració del disc",
@@ -531,32 +531,32 @@
"ImportExtraFilesHelpText": "Importeu fitxers addicionals coincidents (subtítols, nfo, etc.) després d'importar un fitxer de pel·lícula",
"ImportListExclusions": "Suprimeix l'exclusió de la llista d'importació",
"LongDateFormat": "Format de data llarga",
"MaximumSizeHelpText": "Mida màxima per a una versió que es pot capturar en MB. Establiu a zero per establir-lo en il·limitat",
"MaximumSizeHelpText": "Mida màxima per a una versió que es pot capturar en MB. Establiu a zero per establir-lo en il·limitat,",
"MetadataProfile": "perfil de metadades",
"MetadataProfiles": "perfil de metadades",
"OnBookFileDelete": "Al suprimir fitxer de pel·lícula",
"OnBookFileDeleteForUpgrade": "Al suprimir el fitxer de pel·lícula per a l'actualització",
"ReadarrSupportsAnyDownloadClient": "{appName} admet molts clients de baixada de torrent i usenet populars.",
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "{appName} admet qualsevol indexador que utilitzi l'estàndard Newznab, així com altres indexadors que s'enumeren a continuació.",
"ReadarrSupportsAnyDownloadClient": "Readarr admet molts clients de baixada de torrent i usenet populars.",
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "Readarr admet qualsevol indexador que utilitzi l'estàndard Newznab, així com altres indexadors que s'enumeren a continuació.",
"RecycleBinHelpText": "Els fitxers de pel·lícula aniran aquí quan se suprimeixin en lloc de suprimir-se permanentment",
"RenameBooksHelpText": "{appName} utilitzarà el nom del fitxer existent si el reanomenat està desactivat",
"RequiredHelpText": "El llançament ha de contenir almenys un d'aquests termes (no distingeix entre majúscules i minúscules)",
"UILanguageHelpText": "Idioma que utilitzarà {appName} per a la interfície d'usuari",
"RenameBooksHelpText": "Readarr utilitzarà el nom del fitxer existent si el reanomenat està desactivat",
"RequiredHelpText": "Aquesta condició {0} ha de coincidir amb el format personalitzat a aplicar. En cas contrari, una única coincidència {0} és suficient.",
"UILanguageHelpText": "Idioma que utilitzarà Readarr per a la interfície d'usuari",
"UnableToAddANewRootFolderPleaseTryAgain": "No es pot afegir un indexador nou, torneu-ho a provar.",
"UnableToLoadMetadataProfiles": "No es poden carregar els perfils de qualitat",
"UpdateMechanismHelpText": "Utilitzeu l'actualitzador integrat de {appName} o un script",
"UpdateMechanismHelpText": "Utilitzeu l'actualitzador integrat de Readarr o un script",
"UpdateSelected": "Actualització seleccionada",
"Database": "Base de dades",
"DeleteQualityProfileMessageText": "Esteu segur que voleu suprimir el perfil de qualitat '{name}'?",
"DeleteReleaseProfile": "Suprimeix el perfil de llançament",
"DeleteReleaseProfileMessageText": "Esteu segur que voleu suprimir aquest perfil de retard?",
"DeleteRootFolderMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?",
"DeleteRootFolderMessageText": "Esteu segur que voleu suprimir la carpeta arrel '{name}'?",
"DeleteSelectedBookFiles": "Suprimeix els fitxers de pel·lícules seleccionats",
"DeleteSelectedBookFilesMessageText": "Esteu segur que voleu suprimir els fitxers de pel·lícules seleccionats?",
"IncludeUnknownAuthorItemsHelpText": "Mostra elements sense pel·lícula a la cua. Això podria incloure pel·lícules eliminades o qualsevol altra cosa de la categoria de {appName}",
"IncludeUnknownAuthorItemsHelpText": "Mostra elements sense pel·lícula a la cua. Això podria incloure pel·lícules eliminades o qualsevol altra cosa de la categoria de Readarr",
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "El registre de traça només s'hauria d'habilitar temporalment",
"PortHelpTextWarning": "Cal reiniciar perquè tingui efecte",
"RemotePathMappingCheckImportFailed": "{appName} no ha pogut importar una pel·lícula. Comproveu els vostres registres per obtenir més informació.",
"RemotePathMappingCheckImportFailed": "Readarr no ha pogut importar una pel·lícula. Comproveu els vostres registres per obtenir més informació.",
"RemoveTagExistingTag": "Etiqueta existent",
"RemoveTagRemovingTag": "S'està eliminant l'etiqueta",
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "La cerca no és compatible amb aquest indexador",
@@ -564,9 +564,9 @@
"RequiredPlaceHolder": "Afegeix una nova restricció",
"20MinutesTwenty": "20 minuts: {0}",
"AlternateTitles": "Títols alternatius",
"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 Readarr. Això inclou informació sobre el vostre navegador, quines pàgines de l'interfície de Readarr 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.",
"AnalyticsEnabledHelpTextWarning": "Cal reiniciar perquè tingui efecte",
"AuthenticationMethodHelpText": "Requereix nom d'usuari i contrasenya per accedir al radar",
"AuthenticationMethodHelpText": "Requereix el nom d'usuari i la contrasenya per accedir a {appName}",
"CalendarWeekColumnHeaderHelpText": "Es mostra a sobre de cada columna quan la setmana és la visualització activa",
"45MinutesFourtyFive": "45 minuts: {0}",
"60MinutesSixty": "60 minuts: {0}",
@@ -584,13 +584,13 @@
"BypassIfHighestQuality": "Bypass si és de màxima qualitat",
"MinimumCustomFormatScore": "Puntuació mínima de format personalitzat",
"CustomFormatScore": "Puntuació de format personalitzat",
"EnableRssHelpText": "S'utilitzarà quan {appName} cerqui publicacions periòdicament mitjançant RSS Sync",
"EnableRssHelpText": "S'utilitzarà quan Readarr cerqui publicacions periòdicament mitjançant RSS Sync",
"ImportListMultipleMissingRoots": "Falten diverses carpetes arrel per a les llistes d'importació: {0}",
"IndexerDownloadClientHelpText": "Especifiqueu quin client de baixada s'utilitza per a capturar des d'aquest indexador",
"ThemeHelpText": "Canvieu el tema de la interfície d'usuari de l'aplicació, el tema \"Automàtic\" utilitzarà el tema del vostre sistema operatiu per configurar el mode clar o fosc. Inspirat en Theme.Park",
"UnableToLoadCustomFormats": "No es poden carregar formats personalitzats",
"DeleteCustomFormat": "Suprimeix el format personalitzat",
"DeleteFormatMessageText": "Esteu segur que voleu suprimir l'etiqueta de format {0} ?",
"DeleteFormatMessageText": "Esteu segur que voleu suprimir l'etiqueta de format '{0}'?",
"ExportCustomFormat": "Exporta el format personalitzat",
"Formats": "Formats",
"IncludeCustomFormatWhenRenamingHelpText": "Inclou en {Custom Formats} el format de canvi de nom",
@@ -607,8 +607,8 @@
"CustomFormat": "Format personalitzat",
"CustomFormatSettings": "Configuració de formats personalitzats",
"CustomFormats": "Formats personalitzats",
"CutoffFormatScoreHelpText": "Un cop s'arribi a aquesta puntuació de format personalitzat, {appName} ja no baixarà pel·lícules",
"DeleteCustomFormatMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?",
"CutoffFormatScoreHelpText": "Un cop s'arribi a aquesta puntuació de format personalitzat, Readarr ja no baixarà pel·lícules",
"DeleteCustomFormatMessageText": "Esteu segur que voleu suprimir el format personalitzat {name}?",
"ImportListMissingRoot": "Falta la carpeta arrel per a les llistes d'importació: {0}",
"IndexerTagsHelpText": "Utilitzeu aquest indexador només per a pel·lícules amb almenys una etiqueta coincident. Deixeu-ho en blanc per utilitzar-ho amb totes les pel·lícules.",
"ColonReplacement": "Substitució de dos punts",
@@ -711,7 +711,7 @@
"DownloadClientDelugeSettingsDirectoryCompleted": "Directori al qual es mou quan s'hagi completat",
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Ubicació opcional de les baixades completades, deixeu-lo en blanc per utilitzar la ubicació predeterminada de Deluge",
"DownloadClientDelugeSettingsDirectoryHelpText": "Ubicació opcional de les baixades completades, deixeu-lo en blanc per utilitzar la ubicació predeterminada de Deluge",
"WhatsNew": "Novetats",
"WhatsNew": "Què hi ha de nou?",
"SelectDropdown": "Seleccioneu...",
"NoCutoffUnmetItems": "No hi ha elements de tall no assolits",
"ApplyTagsHelpTextHowToApplyAuthors": "Com aplicar etiquetes a les pel·lícules seleccionades",
@@ -723,13 +723,13 @@
"ResetQualityDefinitions": "Restableix les definicions de qualitat",
"Small": "Petita",
"TotalSpace": "Espai total",
"BlocklistReleaseHelpText": "Impedeix que {appName} torni a capturar aquesta versió automàticament",
"BlocklistReleaseHelpText": "Impedeix que Readarr torni a capturar aquesta versió automàticament",
"CatalogNumber": "número de catàleg",
"LastWriteTime": "La darrera hora d'escriptura",
"NextExecution": "Propera execució",
"RemoveCompleted": "S'ha eliminat",
"SelectReleaseGroup": "Seleccioneu grup de llançament",
"CountDownloadClientsSelected": "{count} client(s) de baixada seleccionat(s)",
"CountDownloadClientsSelected": "{selectedCount} client(s) de baixada seleccionat(s)",
"Authors": "Autor",
"FreeSpace": "Espai lliure",
"ExtraFileExtensionsHelpText": "Llista separada per comes de fitxers addicionals per importar (.nfo s'importarà com a .nfo-orig)",
@@ -740,7 +740,7 @@
"RemoveFailed": "Ha fallat l'eliminació",
"ImportLists": "llista d'importació",
"RemovingTag": "S'està eliminant l'etiqueta",
"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ó",
"ApiKeyValidationHealthCheckMessage": "Actualitzeu la vostra clau de l'API perquè tingui almenys {0} caràcters. Podeu fer-ho mitjançant la configuració o el fitxer de configuració",
"ExtraFileExtensionsHelpTextsExamples": "Exemples: '.sub, .nfo' o 'sub,nfo'",
"SourceTitle": "Títol de la font",
"NoEventsFound": "No s'han trobat esdeveniments",
@@ -750,9 +750,9 @@
"RecentChanges": "Canvis recents",
"Rejections": "Rebutjats",
"StatusEndedContinuing": "Continua",
"DeleteBookFileMessageText": "Esteu segur que voleu suprimir '{path}'?",
"DeleteBookFileMessageText": "Esteu segur que voleu suprimir '{0}'?",
"DownloadClientTagHelpText": "Utilitzeu aquest indexador només per a pel·lícules amb almenys una etiqueta coincident. Deixeu-ho en blanc per utilitzar-ho amb totes les pel·lícules.",
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El client de baixada {downloadClientName} està configurat per eliminar les baixades completades. Això pot provocar que les baixades s'eliminin del vostre client abans que {1} pugui importar-les.",
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El client de baixada {0} està configurat per eliminar les baixades completades. Això pot provocar que les baixades s'eliminin del vostre client abans que {1} pugui importar-les.",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Cerqueu i intenteu baixar automàticament una versió diferent quan es trobi una versió fallida a la cerca interactiva",
"FailedLoadingSearchResults": "No s'han pogut carregar els resultats de la cerca, torneu-ho a provar.",
"IndexerFlags": "Indicadors de l'indexador",
@@ -796,5 +796,331 @@
"Script": "Script",
"UnmappedFiles": "Carpetes sense mapejar",
"UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,",
"AddMissing": "Afegeix faltants"
"AddMissing": "Afegeix faltants",
"Install": "Instal·la",
"PasswordConfirmation": "Confirmeu la contrasenya",
"PreviouslyInstalled": "Instal·lat anteriorment",
"AddNewItem": "Afegeix un nou element",
"ErrorLoadingContent": "S'ha produït un error en carregar aquest contingut",
"DashOrSpaceDashDependingOnName": "Traç o guió d'espai depenent del nom",
"EnabledHelpText": "Marqueu-ho per a habilitar el perfil de la versió",
"IgnoreDownload": "Ignora la baixada",
"IgnoreDownloadHint": "Atura {appName} de processar aquesta baixada més",
"IgnoreDownloads": "Ignora les baixades",
"IgnoreDownloadsHint": "Atura {appName} de processar aquestes baixades més",
"IndexerIdHelpText": "Especifiqueu a quin indexador s'aplica el perfil",
"LabelIsRequired": "L'etiqueta és necessària",
"MediaManagementSettingsSummary": "Nomenat, configuració de la gestió de fitxers i carpetes arrel",
"MetadataSource": "Font de les metadades",
"NotificationsPlexSettingsAuthenticateWithPlexTv": "Autentica amb Plex.tv",
"RemoveCompletedDownloads": "Elimina les baixades completes",
"RemoveFailedDownloads": "Elimina les baixades fallides",
"RemoveFromDownloadClientHint": "Elimina la baixada i el(s) fitxer(s) del client de baixada",
"RemoveMultipleFromDownloadClientHint": "Elimina les baixades i els fitxers del client de baixada",
"IndexerSettingsSeedTime": "Temps de la llavor",
"IndexerSettingsSeedTimeHelpText": "El temps en què s'ha de sembrar un torrent abans d'aturar-lo, el buit utilitza el valor per defecte del client de baixada",
"IndexerSettingsSeedRatio": "Ràtio de la llavor",
"ResetQualityDefinitionsMessageText": "Esteu segur que voleu restablir les definicions de qualitat?",
"SelectIndexerFlags": "Selecciona les banderes de l'indexador",
"ShowBanners": "Mostra els bàners",
"SkipRedownload": "Omet que es torni a descarregar",
"SmartReplace": "Reemplaçament intel·ligent",
"UseSSL": "Usa SSL",
"WhySearchesCouldBeFailing": "Feu clic aquí per saber per què les cerques podrien estar fallant",
"ThereWasAnErrorLoadingThisItem": "S'ha produït un error en carregar aquest element",
"SearchMonitored": "Cerca monitorats",
"DeleteSelected": "Suprimeix els seleccionats",
"AllExpandedExpandAll": "Expandeix-ho tot",
"CustomFormatsSettingsTriggerInfo": "Un format personalitzat s'aplicarà a un llançament o fitxer quan coincideixi almenys amb un de cada un dels diferents tipus de condició escollits.",
"InstallMajorVersionUpdate": "Instal·la l'actualització",
"InstallMajorVersionUpdateMessage": "Aquesta actualització instal·larà una nova versió principal i pot no ser compatible amb el vostre sistema. Esteu segur que voleu instal·lar aquesta actualització?",
"NotificationsPlexSettingsAuthToken": "Testimoni d'autenticació",
"Unknown": "Desconegut",
"IsShowingMonitoredMonitorSelected": "Monitor seleccionat",
"IsShowingMonitoredUnmonitorSelected": "Unmonitor seleccionat",
"NotificationsSettingsUpdateMapPathsFromHelpText": "Camí de {appName}, utilitzat per modificar els camins de sèries quan {serviceName} veu la ubicació del camí de la biblioteca diferent de {appName} (requereix 'Biblioteca d'actualització')",
"NotificationsSettingsUpdateMapPathsToHelpText": "Camí de {serviceName}, utilitzat per modificar els camins de sèries quan {serviceName} veu la ubicació del camí de la biblioteca diferent de {appName} (requereix 'Biblioteca d'actualització')",
"NoMissingItems": "No falten elements",
"InstallMajorVersionUpdateMessageLink": "Si us plau, comproveu [{domain}]({url}) per a més informació.",
"RemoveQueueItemsRemovalMethodHelpTextWarning": "'Elimina del client de baixada' eliminarà les baixades i els fitxers del client de baixada.",
"Monitoring": "Monitorant",
"RemoveSelectedItemBlocklistMessageText": "Esteu segur que voleu eliminar els elements seleccionats de la llista de bloqueigs?",
"NotificationsSettingsUseSslHelpText": "Connecta a {serviceName} a través d'HTTPS en lloc d'HTTP",
"RemoveQueueItemRemovalMethod": "Mètode d'eliminació",
"RemoveQueueItemRemovalMethodHelpTextWarning": "'Elimina des del client de baixada' eliminarà la baixada i el(s) fitxer(s) del client de baixada.",
"LastSearched": "Darrera cerca",
"NotificationsSettingsUpdateMapPathsFrom": "Mapear els camins des de",
"NotificationsSettingsUpdateMapPathsTo": "Mapear els camins a",
"RemoveQueueItem": "Elimina - {sourceTitle}",
"SetIndexerFlags": "Estableix els indicadors de l'indexador",
"NotificationsSettingsUpdateLibrary": "Actualitza la biblioteca",
"IndexerSettingsSeedRatioHelpText": "Ràtio a la qual ha d'arribar un torrent abans d'aturar-se, buit utilitza el valor per defecte del client de baixada. La relació ha de ser com a mínim 1.0 i seguir les regles dels indexadors",
"FailedToFetchSettings": "No s'ha pogut recuperar la configuració",
"MonitoringOptions": "Opcions de monitoratge",
"RootFolderPathHelpText": "Els elements de la llista del directori arrel s'afegiran a",
"ThereWasAnErrorLoadingThisPage": "S'ha produït un error en carregar aquesta pàgina",
"BookEditor": "Editor de llibres",
"BookProgressBarText": "{bookCount} / {totalBookCount} (Files: {bookFileCount})",
"ConsoleLogLevel": "Nivell de registre de la consola",
"Country": "País",
"DataFutureBooks": "Controla els llibres que encara no s'han publicat",
"EmbedMetadataInBookFiles": "Incrusta les metadades als fitxers de llibre",
"ForeignId": "ID estranger",
"GoToAuthorListing": "Ves a la llista d'autors",
"HasMonitoredBooksNoMonitoredBooksForThisAuthor": "No hi ha llibres supervisats per a aquest autor",
"HideBooks": "Oculta els llibres",
"ISBN": "ISBN",
"IgnoreDeletedBooks": "Ignora els llibres eliminats",
"IfYouDontAddAnImportListExclusionAndTheAuthorHasAMetadataProfileOtherThanNoneThenThisBookMayBeReaddedDuringTheNextAuthorRefresh": "Si no afegeixes una exclusió de llista d'importació i l'autor té un perfil de metadades distint de 'Cap', llavors aquest llibre pot ser de nou afegit durant el següent refresc d'autor.",
"IgnoredMetaHelpText": "Els llibres s'ignoraran si contenen un o més termes (insensible a majúscules i minúscules)",
"MassBookSearchWarning": "Esteu segur que voleu realitzar una cerca massiva de llibres per {0} llibres?",
"InteractiveSearchModalHeaderBookAuthor": "Cerca interactiva - {bookTitle} per {authorName}",
"IsCalibreLibraryHelpText": "Usa el servidor de contingut del Calibre per manipular la biblioteca",
"IsExpandedHideBooks": "Oculta els llibres",
"IsExpandedShowBooks": "Mostra els llibres",
"IsInUseCantDeleteAQualityProfileThatIsAttachedToAnAuthorOrImportList": "No es pot suprimir un perfil de qualitat que està adjuntat a un autor o llista d'importació",
"Iso639-3": "Codis de llengua ISO 639-3, o 'null', separats per comes",
"LibraryHelpText": "Nom de la biblioteca del servidor de contingut del Calibre. Deixeu-ho en blanc per defecte.",
"LogRotation": "Rotació del registre",
"LogSqlHelpText": "Registra totes les consultes SQL des de Readarr",
"MassBookSearch": "Cerca massiva de llibres",
"MetadataConsumers": "Consumidors de metadades",
"MetadataSourceHelpText": "Font alternativa de metadades (Deixa en blanc per defecte)",
"BookNaming": "Nom del llibre",
"CalibreLibrary": "Biblioteca del Calibre",
"OnImportFailure": "En importar fallada",
"OnAuthorAdded": "En afegir l'autor",
"SendMetadataToCalibre": "Envia les metadades al Calibre",
"SeriesNumber": "Número de sèrie",
"SeriesTotal": "Sèries ({0})",
"AllowFingerprintingHelpTextWarning": "Això requereix que el Readarr llegeixi parts del fitxer que alentiran els escanejos i poden causar una alta activitat de disc o de xarxa.",
"AuthorProgressBarText": "{availableBookCount} / {bookCount} (Total: {totalBookCount}, Fitxers: {bookFileCount})",
"AutomaticallySwitchEdition": "Canvia l'edició automàticament",
"BackupIntervalHelpText": "Interval per a fer una còpia de seguretat de la base de dades de Readarr i de la configuració",
"CalibreContentServer": "Servidor de contingut del Calibre",
"CalibreContentServerText": "L'ús d'un Servidor de Contingut Calibre (no Calibre Web) permet a Readarr afegir llibres a la vostra biblioteca Calibre i activar les conversions entre formats",
"CalibrePassword": "Contrasenya del Calibre",
"CalibreUsername": "Nom d'usuari del Calibre",
"CountIndexersSelected": "{selectedCount} indexador(s) seleccionat",
"DataListMonitorAll": "Controla els autors i tots els llibres de cada autor inclosos a la llista d'importació",
"DataMissingBooks": "Monitoritza els llibres que encara no tenen fitxers o que encara no s'han publicat",
"DefaultMonitorOptionHelpText": "Quins llibres s'han de controlar en afegir-los inicialment per als autors detectats en aquesta carpeta",
"DefaultQualityProfileIdHelpText": "Perfil de qualitat per defecte per als autors detectats en aquesta carpeta",
"EditList": "Edita la llista",
"EmbedMetadataHelpText": "Digues al Calibre que escrigui les metadades al fitxer de llibre real",
"ExistingBooks": "Llibres existents",
"ForeignIdHelpText": "L'identificador estranger de l'autor/llibre a excloure",
"FutureDaysHelpText": "Dies per a l'alimentació iCal per mirar al futur",
"ImportFailures": "Importa fallades",
"ImportListSpecificSettings": "Importa la configuració específica de la llista",
"ItsEasyToAddANewAuthorOrBookJustStartTypingTheNameOfTheItemYouWantToAdd": "És fàcil afegir un Autor nou o un Llibre simplement començar a escriure el nom de l'element que voleu afegir",
"LatestBook": "Últim llibre",
"MinPagesHelpText": "Ignora els llibres amb menys pàgines que això",
"MinPopularityHelpText": "La popularitat és la qualificació mitjana * nombre de vots",
"MinimumPopularity": "Popularitat mínima",
"MissingBooks": "Llibres que falten",
"MonitorAuthor": "Autor del monitor",
"MonitorBook": "Llibre del monitor",
"MonitorBookExistingOnlyWarning": "Aquest és un ajust ajustat de la configuració supervisada per a cada llibre. Utilitzeu l'opció d'Autor/Edita per controlar què passa amb els llibres acabats d'afegir",
"MonitorNewBooks": "Monitora els llibres nous",
"MonitorNewItemsHelpText": "Quins llibres nous s'han de controlar",
"MonitoredAuthorIsMonitored": "L'autor està monitoritzat",
"MonitoredAuthorIsUnmonitored": "L'autor no està monitoritzat",
"MonitoringOptionsHelpText": "Quins llibres s'han de controlar després d'afegir l'autor (ajust d'un sol cop)",
"MusicBrainzBookID": "ID del llibre MusicBrainz",
"MusicBrainzReleaseID": "ID de llançament del MusicBrainz",
"MusicBrainzTrackID": "ID de la pista MusicBrainz",
"NameLastFirst": "Cognom Nom",
"NewBooks": "Llibres nous",
"NoName": "No mostris el nom",
"OnAuthorAddedHelpText": "En afegir l'autor",
"OnAuthorDelete": "En suprimir l'autor",
"OnAuthorDeleteHelpText": "En suprimir l'autor",
"OnBookDeleteHelpText": "En suprimir el llibre",
"OnBookRetagHelpText": "En reetiquetar el llibre",
"OnDownloadFailure": "A la fallada de baixada",
"OnDownloadFailureHelpText": "A la fallada de baixada",
"OnImportFailureHelpText": "En importar fallada",
"OnReleaseImport": "En publicar la importació",
"OnReleaseImportHelpText": "En publicar la importació",
"OutputFormatHelpText": "Opcionalment, demaneu al Calibre que es converteixi a altres formats en importar. Llista separada per comes.",
"PathHelpText": "Carpeta arrel que conté la biblioteca de llibres",
"PathHelpTextWarning": "Això ha de ser diferent del directori on el vostre client de baixada posa fitxers",
"PortHelpText": "Port del servidor de contingut del Calibre",
"PreviewRetag": "Reetiqueta de la vista prèvia",
"QualityProfileIdHelpText": "Els elements de la llista de perfils de qualitat s'han d'afegir amb",
"ReadarrSupportsMultipleListsForImportingBooksAndAuthorsIntoTheDatabase": "Readarr admet múltiples llistes per importar llibres i autors a la base de dades.",
"RecycleBinUnableToWriteHealthCheck": "No s'ha pogut escriure a la carpeta de contenidors de reciclatge configurada: {0}. Assegureu-vos que aquest camí existeix i que l'usuari que executa el Readarr pot escriure",
"RefreshAuthor": "Actualitza l'autor",
"RefreshBook": "Actualitza el llibre",
"RefreshInformation": "Actualitza la informació",
"RemotePathMappingsInfo": "Remote Path Mappings són molt rarament necessaris, si {app} i el vostre client de descàrrega estan en el mateix sistema, és millor que coincideixi amb els vostres camins. Per a més informació, vegeu el [wiki]({wikiLink}).",
"SearchForMonitoredBooks": "Cerca llibres monitoritzats",
"SearchForNewItems": "Cerca elements nous",
"SelectBook": "Selecciona el llibre",
"SelectEdition": "Selecciona l'edició",
"ShouldMonitorExisting": "Controla els llibres existents",
"ShouldSearchHelpText": "Cerca indexadors per als elements nous afegits. Utilitza amb precaució per a llistes grans.",
"ShowBookCount": "Mostra el recompte de llibres",
"ShowTitleHelpText": "Mostra el nom de l'autor sota el cartell",
"StatusEndedDeceased": "Defunció",
"TooManyBooks": "Falten o hi ha massa llibres? Modifica o crea un nou",
"UnableToLoadMetadataProviderSettings": "No s'ha pogut carregar la configuració del proveïdor de metadades",
"UrlBaseHelpText": "Afegeix un prefix a l'URL del Calibre, p. ex. http://[host]:[port]/[urlBase]",
"ShouldMonitorExistingHelpText": "Controla automàticament els llibres d'aquesta llista que ja són a Readarr",
"ShowBannersHelpText": "Mostra els bàners en lloc dels noms",
"ShowLastBook": "Mostra l'últim llibre",
"ShowName": "Mostra el nom",
"SkipBooksWithNoISBNOrASIN": "Omet els llibres sense ISBN ni ASIN",
"SkipPartBooksAndSets": "Omet els llibres de parts i els conjunts",
"SkipSecondarySeriesBooks": "Omet els llibres de les sèries secundàries",
"SpecificBook": "Llibre específic",
"FileDetails": "Detalls del fitxer",
"FilesTotal": "Fitxers ({0})",
"FilterAnalyticsEvents": "Filtra els esdeveniments d'anàlisi",
"FilterAuthor": "Filtra l'autor",
"FilterSentryEventsHelpText": "Filtra els esdeveniments d'error d'usuari coneguts perquè s'enviïn com a Analytics",
"IsExpandedShowFileInfo": "Mostra la informació del fitxer",
"IsInUseCantDeleteAMetadataProfileThatIsAttachedToAnAuthorOrImportList": "No es pot suprimir un perfil de metadades que està adjuntat a un autor o a una llista d'importació",
"PasswordHelpText": "Contrasenya del servidor de contingut del Calibre",
"PastDays": "Dies passats",
"WriteTagsAll": "Tots els fitxers; només importació inicial",
"TagsHelpText": "Aplica als autors amb almenys una etiqueta coincident. Deixa en blanc per aplicar a tots els autors",
"TotalBookCountBooksTotalBookFileCountBooksWithFilesInterp": "{0} llibres en total. {1} llibres amb fitxers.",
"TrackNumber": "Número de pista",
"TrackTitle": "Títol de la pista",
"WatchLibraryForChangesHelpText": "Torna a explorar automàticament quan els fitxers canviïn en una carpeta arrel",
"WatchRootFoldersForFileChanges": "Vigila les carpetes arrel per als canvis de fitxer",
"WriteAudioTagsScrub": "Neteja les etiquetes existents",
"WriteAudioTagsScrubHelp": "Elimina les etiquetes existents dels fitxers, deixant només les afegides pel Readarr.",
"LogSQL": "Log SQL",
"AnyEditionOkHelpText": "Readarr canviarà automàticament a l'edició que coincideixi millor amb els fitxers baixats",
"AudioFileMetadata": "Escriu les metadades als fitxers d'àudio",
"AuthorEditor": "Editor de l'autor",
"AuthorFolderFormat": "Format de carpeta d'autor",
"EntityName": "Nom de l'entitat",
"FilterPlaceHolder": "Filtra el llibre",
"UsernameHelpText": "Nom d'usuari del servidor de contingut del Calibre",
"OnBookDelete": "En suprimir el llibre",
"BypassIfHighestQualityHelpText": "Evita el retard quan el llançament tingui la qualitat més alta habilitada en el perfil de qualitat",
"CountImportListsSelected": "{selectedCount} llista(es) d'importació seleccionada",
"DataNone": "No es controlarà cap llibre",
"IsExpandedHideFileInfo": "Amaga la informació del fitxer",
"NoTagsHaveBeenAddedYet": "No s'han afegit etiquetes encara. Afegeix etiquetes per enllaçar autors amb perfils de retard, restriccions o notificacions. Feu clic a {0} per obtenir més informació sobre les etiquetes a Readarr.",
"DeleteMetadataProfile": "Suprimeix el perfil de metadades",
"FutureBooks": "Llibres futurs",
"FutureDays": "Dies de futur",
"MetadataProfileIdHelpText": "Els elements de la llista de perfils de metadades s'han d'afegir amb",
"NameFirstLast": "Nom Cognom",
"DownloadPropersAndRepacksHelpTexts2": "Usa 'No prefereixis' per ordenar per puntuació de paraules preferida sobre propers/repacks",
"IndexerIdHelpTextWarning": "L'ús d'un indexador específic amb paraules preferides pot conduir a versions duplicades",
"LogRotateHelpText": "Nombre màxim de fitxers de registre a mantenir desats a la carpeta de registres",
"MetadataProviderSource": "Font del proveïdor de metadades",
"MissingBooksAuthorMonitored": "Llibres que falten (controlat per l'autor)",
"MissingBooksAuthorNotMonitored": "Llibres que falten (Autor no supervisat)",
"MonitoredHelpText": "Readarr cercarà i descarregarà un llibre",
"UseCalibreContentServer": "Usa el servidor de contingut del Calibre",
"MonitorNewItems": "Monitora els llibres nous",
"SearchForAllCutoffUnmetBooks": "Cerca tots els llibres retallats i no satisfets",
"SearchForAllMissingBooks": "Cerca tots els llibres que falten",
"TheFollowingFilesWillBeDeleted": "S'eliminaran els següents fitxers:",
"TagsSettingsSummary": "Gestiona les etiquetes d'autor, perfil, restricció i notificació",
"WriteAudioTags": "Etiqueta els fitxers d'àudio amb metadades",
"AddImportListExclusionHelpText": "Evita que el llibre s'afegeixi al Readarr mitjançant la importació de llistes o l'actualització de l'autor",
"BookStudio": "Book Studio",
"BookTitle": "Títol del llibre",
"Books": "Llibres",
"DataListMonitorSpecificBook": "Autors de monitors, però només monitoritza els llibres inclosos explícitament a la llista",
"OnBookTagUpdate": "En actualitzar l'etiqueta del llibre",
"CalibreNotCalibreWeb": "Readarr pot interactuar amb el servidor de continguts de Calibre. No pot utilitzar Calibre-Web, que és programari no relacionat.",
"ShouldMonitorHelpText": "Monitora els autors i llibres nous afegits d'aquesta llista",
"MusicBrainzRecordingID": "ID d'enregistrament del MusicBrainz",
"AllAuthorBooks": "Tots els autors",
"EditionsHelpText": "Canvia l'edició d'aquest llibre",
"BooksTotal": "Llibres ({0})",
"CountAuthorsSelected": "{selectedCount} autors seleccionats",
"DataNewAllBooks": "Monitora tots els llibres nous",
"LoadingEditionsFailed": "Ha fallat la càrrega d'edicions",
"MetadataSettingsSummary": "Crea fitxers de metadades quan s'importin llibres o s'actualitzi l'autor",
"SearchBoxPlaceHolder": "P. ex. Guerra i pau, goodreads:656, isbn:067003469X, asin:B00JCDK5ME",
"SkipRedownloadHelpText": "Evita que el Readarr intenti baixar versions alternatives per als elements eliminats",
"CalibreMetadata": "Metadades del Calibre",
"Bookshelf": "Prestatge",
"DataListMonitorNone": "No vigilar autors ni llibres",
"ImportListSettings": "Configuració general de la llista d'importació",
"AuthorIndex": "Índex de l'autor",
"AuthorNameHelpText": "El nom de l'autor/llibre a excloure (pot ser qualsevol cosa significativa)",
"BookIndex": "Índex del llibre",
"BookList": "Llista de llibres",
"CalibreHost": "Amfitrió del Calibre",
"CalibrePort": "Port del Calibre",
"CalibreSettings": "Paràmetres del Calibre",
"CalibreUrlBase": "Base d'url del Calibre",
"UpdateCovers": "Actualitza les converses",
"UpdateCoversHelpText": "Estableix les portades del llibre al Calibre perquè coincideixin amb les del Readarr",
"UseSslHelpText": "Usa SSL per a connectar al servidor de contingut Calibre",
"WriteBookTagsHelpTextWarning": "En seleccionar Tots els fitxers s'alteraran els fitxers existents quan s'importin.",
"WriteTagsNew": "Només per a baixades noves",
"AddedAuthorSettings": "Configuració de l'autor afegit",
"DefaultMetadataProfileIdHelpText": "Perfil predeterminat de metadades per als autors detectats en aquesta carpeta",
"ContinuingMoreBooksAreExpected": "S'esperen més llibres",
"DataNewBooks": "Supervisa els llibres nous publicats després del llibre més nou existent",
"AllowAuthorChangeClickToChangeAuthor": "Feu clic per canviar l'autor",
"AllowedLanguages": "Llengües permeses",
"ContinuingNoAdditionalBooksAreExpected": "No s'espera cap llibre addicional",
"DeleteBookFile": "Suprimeix el fitxer de llibre",
"ConvertToFormat": "Converteix a format",
"DataAllBooks": "Controla tots els llibres",
"DataExistingBooks": "Controla els llibres que tenen fitxers o que encara no s'han publicat",
"DeleteFormat": "Suprimeix el format",
"DeleteFilesHelpText": "Suprimeix els fitxers del llibre i la carpeta de l'autor",
"DiscNumber": "Número de disc",
"EndedAllBooksDownloaded": "Ended (Tots els llibres baixats)",
"FirstBook": "Primer llibre",
"HostHelpText": "Servidor de contingut del Calibre",
"MonitorExistingBooks": "Monitora els llibres existents",
"MusicBrainzAuthorID": "ID de l'autor del MusicBrainz",
"NameStyle": "Estil del nom de l'autor",
"PastDaysHelpText": "Dies per a l'alimentació iCal per a mirar el passat",
"DataFirstBook": "Fes el seguiment del primer llibre. Tots els altres llibres seran ignorats",
"DataLatestBook": "Controla els últims llibres i futurs",
"DataNewNone": "No vigila cap llibre nou",
"DefaultReadarrTags": "Etiquetes del lector per defecte",
"DefaultTagsHelpText": "Etiquetes de Readarr per defecte per als autors detectats en aquesta carpeta",
"DiscCount": "Comptador de discs",
"EditAuthor": "Edita l'autor",
"EditBook": "Edita el llibre",
"ExistingItems": "Elements existents",
"ManualDownload": "Baixada manual",
"MinimumPages": "Pàgines mínimes",
"CollapseMultipleBooks": "Redueix diversos llibres",
"CollapseMultipleBooksHelpText": "Redueix diversos llibres que es publiquen el mateix dia",
"ContinuingAllBooksDownloaded": "Continuant (tots els llibres baixats)",
"Development": "Desenvolupament",
"EnableAutomaticAddHelpText": "Afegeix autor/llibres al Readarr quan es realitzin sincronitzacions a través de la IU o per Readarr",
"RenameBooks": "Canvia el nom dels llibres",
"SearchBook": "Cerca al llibre",
"SelectedCountAuthorsSelectedInterp": "{0} Autor/s seleccionat/s",
"SetReadarrTags": "Estableix les etiquetes del Readarr",
"SkipBooksWithMissingReleaseDate": "Omet els llibres amb la data de publicació que manca",
"TheBooksFilesWillBeDeleted": "S'eliminaran els fitxers del llibre.",
"UpdatingIsDisabledInsideADockerContainerUpdateTheContainerImageInstead": "L'actualització està desactivada dins d'un contenidor d'acobladors. Actualitza la imatge del contenidor.",
"WriteTagsSync": "Tots els fitxers; mantén la sincronització amb Goodreads",
"ASIN": "ASIN",
"BookAvailableButMissing": "Llibre disponible, però desaparegut",
"CalibreOutputFormat": "Format de sortida del Calibre",
"CalibreOutputProfile": "Perfil de sortida del Calibre",
"BookFilesCountMessage": "No hi ha fitxers de llibre",
"BookMonitoring": "Seguiment del llibre",
"AllBooks": "Tots els llibres",
"AllowFingerprinting": "Permet la impressió digital",
"AllowFingerprintingHelpText": "Utilitza l'empremta digital per millorar la precisió de la coincidència de llibres",
"ExistingTagsScrubbed": "Etiquetes existents rastrejades",
"NETCore": ".NET Core",
"WriteMetadataTags": "Escriu les etiquetes de les metadades",
"AddNewAuthorRootFolderHelpText": "La subcarpeta '{folder}' es crearà automàticament",
"AddRootFolder": "Afegeix una carpeta arrel",
"Book": "Llibre",
"AddNewBook": "Afegeix nou llibre",
"AddNewAuthor": "Afegeix nou autor"
}

View File

@@ -726,5 +726,39 @@
"UnmappedFiles": "Nezmapované složky",
"AptUpdater": "K instalaci aktualizace používat apt",
"Author": "Autor",
"Book": "Kniha"
"Book": "Kniha",
"AllowFingerprinting": "Povol Digitální Otisk (Fingerprinting)",
"AllowedLanguages": "Povolené Jazyky",
"ASIN": "ASIN",
"AllAuthorBooks": "Všechny Knihy Autora",
"AllBooks": "Všechny Knihy",
"AllExpandedCollapseAll": "Sbalit Všechny",
"AllExpandedExpandAll": "Rozbal Všechny",
"AnyEditionOkHelpText": "Readarr automaticky přepne edici, která nejlépe odpovídá staženým souborům",
"AllowFingerprintingHelpText": "Použít digitální otisk (fingerprinting) ke zlepšení přesnosti párování knih",
"AllowFingerprintingHelpTextWarning": "To vyžaduje, aby Readarr četl části souboru, což zpomaluje skenování a může způsobit vysokou aktivitu disku nebo sítě.",
"AddImportListExclusionHelpText": "Zabránit přidání knihy do Readarr pomocí Importovaných Seznamů nebo Obnovení Autora",
"AllowAuthorChangeClickToChangeAuthor": "Klikni pro změnu autora",
"BlocklistOnly": "Pouze seznam blokování",
"DoNotBlocklistHint": "Odstraň bez přidání do seznamu blokování",
"External": "Externí",
"Implementation": "Implementace",
"DoNotBlocklist": "Nepřidávat do Seznamu blokování",
"DownloadClientDelugeSettingsDirectory": "Adresář stahování",
"BlocklistAndSearchHint": "Začne hledat náhradu po blokaci",
"BlocklistAndSearchMultipleHint": "Začne vyhledávat náhrady po blokaci",
"ChangeCategoryHint": "Změní stahování do kategorie „Post-Import“ z aplikace Download Client",
"DeleteSelected": "Smazat vybrané",
"ClickToChangeIndexerFlags": "Kliknutím změníte značky indexeru",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Zda použít rozvržení obsahu nakonfigurované v qBittorrentu, původní rozvržení z torrentu nebo vždy vytvořit podsložku (qBittorrent 4.3.2+)",
"DownloadClientQbittorrentSettingsContentLayout": "Rozvržení obsahu",
"CustomFormatsSpecificationRegularExpression": "Běžný výraz",
"ChangeCategoryMultipleHint": "Změní stahování do kategorie „Post-Import“ z aplikace Download Client",
"FailedToFetchSettings": "Nepodařilo se načíst nastavení",
"NoCutoffUnmetItems": "Žádné neodpovídající nesplněné položky",
"DownloadClientDelugeSettingsDirectoryCompleted": "Adresář kam přesunout po dokončení",
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Nepovinné - umístění kam přesunout dokončená stahování, pokud ponecháte prázné, použije se výchozí umístění Deluge",
"DownloadClientDelugeSettingsDirectoryHelpText": "Nepovinné - umístění stahovaných souborů, pokud ponecháte prázné, použije se výchozí umístění Deluge",
"AddNewAuthorRootFolderHelpText": "Podsložka '{folder}' bude vytvořena automaticky",
"AddRootFolder": "Přidat kořenový adresář"
}

View File

@@ -670,5 +670,8 @@
"ExternalUpdater": "{appName} er konfigureret til at bruge en ekstern opdateringsmekanisme",
"OnLatestVersion": "Den seneste version af {appName} er allerede installeret",
"WouldYouLikeToRestoreBackup": "Vil du gendanne sikkerhedskopien »{name}«?",
"MetadataProfile": "metadataprofil"
"MetadataProfile": "metadataprofil",
"Unknown": "Ukendt",
"AddRootFolder": "Tilføj rodmappe",
"AddNewAuthorRootFolderHelpText": "Undermappen '{0}' oprettes automatisk"
}

View File

@@ -55,7 +55,7 @@
"CompletedDownloadHandling": "Download-Handhabung abgeschlossen",
"ConnectSettings": "Verbindungseinstellungen",
"Connections": "Verbindungen",
"CopyUsingHardlinksHelpText": "Hardlinks erstellen wenn Torrents die noch geseeded werden kopiert werden sollen",
"CopyUsingHardlinksHelpText": "Hardlinks ermöglichen es Readarr, seeding Torrents in den Serienordner zu importieren, ohne zusätzlichen Speicherplatz zu beanspruchen oder den gesamten Inhalt der Datei zu kopieren. Hardlinks funktionieren nur, wenn Quelle und Ziel auf demselben Volume liegen",
"CopyUsingHardlinksHelpTextWarning": "Dateisperren Gelegentlich kann es vorkommen, dass Dateisperren das Umbenennen von Dateien verhindern, die gerade geseeded werden. Sie können das Seeding vorübergehend deaktivieren und die Umbenennungsfunktion von Readarr als Workaround verwenden.",
"CreateEmptyAuthorFoldersHelpText": "Leere Autorenordner für fehlende Autoren beim Scan erstellen",
"CreateGroup": "Gruppe erstellen",
@@ -217,7 +217,7 @@
"NotificationTriggers": "Benachrichtigungs-Auslöser",
"OnGrabHelpText": "Erfassen",
"OnHealthIssueHelpText": "Zustandsproblem",
"OnRenameHelpText": "Umbennenen",
"OnRenameHelpText": "Umbenennen",
"OnUpgradeHelpText": "Upgrade",
"OpenBrowserOnStart": "Browser beim Start öffnen",
"Options": "Optionen",
@@ -280,10 +280,10 @@
"RemoveTagExistingTag": "Vorhandener Tag",
"RemoveTagRemovingTag": "Tag entfernen",
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlange entfernt",
"RenameBooksHelpText": "Wenn das umbennen deaktiviert ist, wird der vorhandene Dateiname benutzt",
"RenameBooksHelpText": "Wenn das Umbenennen deaktiviert ist, wird der vorhandene Dateiname benutzt",
"Reorder": "Neu anordnen",
"ReplaceIllegalCharacters": "Illegale Zeichen ersetzen",
"RequiredHelpText": "Das Release mus mindesten eines der Begriffe beinhalten ( Groß-/Kleinschreibung wird nicht beachtet )",
"RequiredHelpText": "Diese {0}-Bedingung muss übereinstimmen, damit das benutzerdefinierte Format angewendet wird. Andernfalls reicht eine einzelne {0}-Übereinstimmung aus.",
"RequiredPlaceHolder": "Neue Beschränkung hinzufügen",
"RescanAfterRefreshHelpTextWarning": "Wenn nicht \"Immer (Always)\" ausgewählt wird, werden Dateiänderungen nicht automatisch erkannt",
"RescanAuthorFolderAfterRefresh": "Nach dem Aktualisieren den Autorordner neu scannen",
@@ -345,8 +345,8 @@
"Status": "Status",
"StatusEndedEnded": "Beendet",
"Style": "Stil",
"SuccessMyWorkIsDoneNoFilesToRename": "Fertig! Keine weiteren Dateien zum umbennenen.",
"SuccessMyWorkIsDoneNoFilesToRetag": "Fertig! Keine weiteren Dateien zum umbennenen.",
"SuccessMyWorkIsDoneNoFilesToRename": "Fertig! Keine weiteren Dateien zum Umbenennen.",
"SuccessMyWorkIsDoneNoFilesToRetag": "Fertig! Keine weiteren Dateien zum retaggen.",
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "Der Indexer unterstützt kein RSS",
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Der Indexer unterstützt keine Suchen",
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Wird für automatische Suchen genutzt die vom Benutzer oder von {appName} gestartet werden",
@@ -532,7 +532,6 @@
"MetadataProfileIdHelpText": "Metadaten Profil Listenelemente sollten hinzugefügt werden mit",
"MetadataProfiles": "Metadaten Profile",
"MonitoringOptions": "Überwachungsoptionen",
"MusicbrainzId": "MusicBrainz Id",
"WatchRootFoldersForFileChanges": "Beobachte Stammverzeichnis auf Dateiänderungen",
"OnDownloadFailure": "Bei fehlgeschlagenem Download",
"OnDownloadFailureHelpText": "Bei fehlgeschlagenem Download",
@@ -569,7 +568,7 @@
"BookList": "Buchliste",
"Continuing": "Fortsetzung",
"ExistingItems": "Existierende Artikel",
"ForeignIdHelpText": "Die Musicbrainz Id des Autors/Buches die ausgeschlossen werden soll",
"ForeignIdHelpText": "Die Fremd-ID des Autors/Buchs, der/das ausgeschlossen werden soll",
"IndexersSettingsSummary": "Indexer- und Releasebeschränkungen",
"ISBN": "ISBN",
"IsExpandedHideFileInfo": "Dateiinformationen verstecken",
@@ -862,7 +861,7 @@
"CustomFormat": "Benutzerdefiniertes Format",
"CustomFormats": "Eigene Formate",
"CutoffFormatScoreHelpText": "Sobald diese eigener Format Bewertung erreicht wird, werden keine neuen Releases erfasst",
"DeleteFormatMessageText": "Bist du sicher, dass du das Formatierungstag {0} löschen willst?",
"DeleteFormatMessageText": "Bist du sicher, dass du das Format-Tag '{0}' löschen möchtest?",
"ExportCustomFormat": "Benutzerdefiniertes Format exportieren",
"Formats": "Formate",
"MinFormatScoreHelpText": "Mindester eigener Format Score bis zum Download",
@@ -874,7 +873,7 @@
"DataFutureBooks": "Überwachung von Alben die noch nicht veröffentlicht wurden",
"DeleteCustomFormat": "Benutzerdefiniertes Format löschen",
"DeleteCustomFormatMessageText": "Bist du sicher, dass du das benutzerdefinierte Format '{name}' wirklich löschen willst?",
"IncludeCustomFormatWhenRenamingHelpText": "In {Custom Formats} umbennenungs Format",
"IncludeCustomFormatWhenRenamingHelpText": "In {Custom Formats} Umbenennungs-Format",
"ResetTitles": "Titel zurücksetzen",
"UnableToLoadCustomFormats": "Eigene Formate konnten nicht geladen werden",
"ImportListMissingRoot": "Fehlendes Stammverzeichnis für Importlist(en): {0}",
@@ -919,7 +918,7 @@
"BlocklistReleaseHelpText": "Dieses Release nicht automatisch erneut erfassen",
"RemoveFailedDownloads": "Fehlgeschlagene Downloads entfernen",
"BlocklistReleases": "Release sperren",
"DeleteConditionMessageText": "Bist du sicher, dass du die Bedingung '{0}' löschen willst?",
"DeleteConditionMessageText": "Bist du sicher, dass du die Bedingung '{name}' löschen möchtest?",
"Negated": "Negiert",
"ResetQualityDefinitions": "Qualitätsdefinitionen zurücksetzen",
"RemoveSelectedItem": "Ausgewähltes Element entfernen",
@@ -936,7 +935,7 @@
"ApplyTagsHelpTextRemove": "Entfernen: Entferne die hinterlegten Tags",
"ApplyTagsHelpTextReplace": "Ersetzen: Ersetze die Tags mit den eingegebenen Tags (keine Tags eingeben um alle Tags zu löschen)",
"ApplyTagsHelpTextHowToApplyDownloadClients": "Wie Tags zu den selektierten Downloadclients hinzugefügt werden können",
"CountIndexersSelected": "{0} Indexer ausgewählt",
"CountIndexersSelected": "{selectedCount} Indexer(s) ausgewählt",
"DeleteSelectedDownloadClients": "Lösche Download Client(s)",
"DeleteSelectedDownloadClientsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Download-Clients löschen möchten?",
"DeleteSelectedIndexers": "Lösche Indexer",
@@ -1110,5 +1109,16 @@
"NoCutoffUnmetItems": "Keine nicht erfüllten Cutoff-Elemente",
"DashOrSpaceDashDependingOnName": "Dash oder Space Dash je nach Name",
"NotificationsSettingsUpdateMapPathsFromHelpText": "{appName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')",
"NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')"
"NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')",
"RemotePathMappingsInfo": "Remote Path Mappings sind nur in seltenen Fällen erforderlich. Wenn {app} und dein Download-Client auf demselben System laufen, ist es besser, die Pfade anzupassen. Weitere Informationen findest du im [Wiki]({wikiLink}).",
"WhySearchesCouldBeFailing": "Klicke hier, um herauszufinden, warum die Suchen fehlschlagen könnten",
"SkipRedownloadHelpText": "Verhindert, dass Readarr versucht, alternative Releases für die entfernten Elemente herunterzuladen",
"OnAuthorAdded": "Beim Hinzufügen des Autors",
"OnAuthorAddedHelpText": "Beim Hinzufügen des Autors",
"SelectBook": "Buch auswählen",
"SelectEdition": "Wähle Edition",
"LastSearched": "Letzte Suche",
"Unknown": "Unbekannt",
"AddRootFolder": "Stammverzeichnis hinzufügen",
"AddNewAuthorRootFolderHelpText": "'{folder}' Unterordner wird automatisch erstellt werden"
}

View File

@@ -597,7 +597,6 @@
"MonitorNewItemsHelpText": "Ποια νέα βιβλία πρέπει να παρακολουθούνται",
"MusicBrainzRecordingID": "Αναγνωριστικό ηχογράφησης MusicBrainz",
"MusicBrainzBookID": "Αναγνωριστικό βιβλίου MusicBrainz",
"MusicbrainzId": "Musicbrainz Id",
"MusicBrainzAuthorID": "MusicBrainz Αναγνωριστικό συγγραφέα",
"NoName": "Να μην εμφανίζεται το όνομα",
"NoTagsHaveBeenAddedYet": "Δεν έχουν προστεθεί ακόμη ετικέτες. Προσθέστε ετικέτες για να συνδέσετε τους συγγραφείς με προφίλ καθυστέρησης, περιορισμούς ή ειδοποιήσεις. Κάντε κλικ στο {0} για να μάθετε περισσότερα σχετικά με τις ετικέτες στο Readarr.",
@@ -1021,5 +1020,7 @@
"Script": "Γραφή",
"UpdateAppDirectlyLoadError": "Δεν είναι δυνατή η απευθείας ενημέρωση του {appName},",
"ExternalUpdater": "Το {appName} έχει ρυθμιστεί να χρησιμοποιεί έναν εξωτερικό μηχανισμό ενημέρωσης",
"InstallLatest": "Εγκατάσταση πιο πρόσφατου"
"InstallLatest": "Εγκατάσταση πιο πρόσφατου",
"AddNewAuthorRootFolderHelpText": "Ο υποφάκελος \"{0}\" θα δημιουργηθεί αυτόματα",
"AddRootFolder": "Προσθήκη φακέλου ρίζας"
}

View File

@@ -11,7 +11,11 @@
"AddListExclusion": "Add List Exclusion",
"AddMissing": "Add missing",
"AddNew": "Add New",
"AddNewBook": "Add New Book",
"AddNewAuthor": "Add New Author",
"AddNewAuthorRootFolderHelpText": "'{folder}' subfolder will be created automatically",
"AddNewItem": "Add New Item",
"AddRootFolder": "Add Root Folder",
"AddedAuthorSettings": "Added Author Settings",
"AddingTag": "Adding tag",
"AgeWhenGrabbed": "Age (when grabbed)",
@@ -394,7 +398,7 @@
"ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "For more information on the individual indexers, click on the info buttons.",
"ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "For more information on the individual lists, click on the info buttons.",
"ForeignId": "Foreign ID",
"ForeignIdHelpText": "The Musicbrainz Id of the author/book to exclude",
"ForeignIdHelpText": "The Foreign Id of the author/book to exclude",
"Formats": "Formats",
"FreeSpace": "Free Space",
"FutureBooks": "Future Books",
@@ -518,6 +522,7 @@
"Large": "Large",
"LastDuration": "Last Duration",
"LastExecution": "Last Execution",
"LastSearched": "Last Searched",
"LastWriteTime": "Last Write Time",
"LatestBook": "Latest Book",
"LaunchBrowserHelpText": " Open a web browser and navigate to Readarr homepage on app start.",
@@ -619,7 +624,6 @@
"MusicBrainzRecordingID": "MusicBrainz Recording ID",
"MusicBrainzReleaseID": "MusicBrainz Release ID",
"MusicBrainzTrackID": "MusicBrainz Track ID",
"MusicbrainzId": "Musicbrainz Id",
"MustContain": "Must Contain",
"MustNotContain": "Must Not Contain",
"NETCore": ".NET Core",
@@ -1063,6 +1067,7 @@
"UnableToLoadTheCalendar": "Unable to load the calendar",
"UnableToLoadUISettings": "Unable to load UI settings",
"Ungroup": "Ungroup",
"Unknown": "Unknown",
"UnmappedFiles": "Unmapped Files",
"Unmonitored": "Unmonitored",
"UnmonitoredHelpText": "Include unmonitored books in the iCal feed",

View File

@@ -237,7 +237,7 @@
"PosterSize": "Tamaño de póster",
"PreviewRename": "Previsualizar renombrado",
"Profiles": "Perfiles",
"Proper": "Proper",
"Proper": "Correcto",
"PropersAndRepacks": "Propers y Repacks",
"Protocol": "Protocolo",
"ProtocolHelpText": "Elige qué protocolo(s) usar y cuál se prefiere cuando se elige entre lanzamientos equivalentes",
@@ -423,7 +423,7 @@
"UsenetDelay": "Retraso de usenet",
"UsenetDelayHelpText": "Retraso en minutos a esperar antes de capturar un lanzamiento desde usenet",
"Username": "Usuario",
"BranchUpdate": "Rama a utilizar para actualizar Readarr",
"BranchUpdate": "Rama a utilizar para actualizar {appName}",
"BranchUpdateMechanism": "Rama usada por el mecanismo de actualización externo",
"Version": "Versión",
"WeekColumnHeader": "Cabecera de columna de semana",
@@ -564,7 +564,7 @@
"Label": "Etiqueta",
"MissingFromDisk": "Readarr no pudo encontrar el archivo en el disco, por lo que el archivo fue desvinculado del libro en la base de datos",
"RemotePathMappingCheckDownloadPermissions": "Readarr puede ver pero no acceder al libro descargado {0}. Probablemente sea un error de permisos.",
"RemotePathMappingCheckFolderPermissions": "Readarr puede ver pero no acceder al directorio de descarga {0}. Probablemente sea un error de permisos.",
"RemotePathMappingCheckFolderPermissions": "Readarr puede ver pero no acceder al directorio de descarga {1}. Probablemente sea un error de permisos.",
"RemotePathMappingCheckFilesGenericPermissions": "El cliente de descarga {0} informó de la existencia de archivos en {1} pero Readarr no puede ver este directorio. Puede que tengas que ajustar los permisos de la carpeta.",
"RemotePathMappingCheckGenericPermissions": "El cliente de descarga {0} coloca las descargas en {1} pero Readarr no puede ver este directorio. Puede que tengas que ajustar los permisos de la carpeta.",
"RemotePathMappingCheckImportFailed": "Readarr falló al importar un libro. Comprueba tus registros para más detalles.",
@@ -855,13 +855,13 @@
"NotificationsSettingsUseSslHelpText": "Conectar a {serviceName} sobre HTTPS en vez de HTTP",
"Rejections": "Rechazados",
"SelectIndexerFlags": "Seleccionar indicadores del indexador",
"RecycleBinUnableToWriteHealthCheck": "No se pudo escribir en la carpeta configurada de la papelera de reciclaje: {path}. Asegúrate de que esta ruta existe y es modificable por el usuario que ejecuta {appName}",
"RecycleBinUnableToWriteHealthCheck": "No se pudo escribir en la carpeta configurada de la papelera de reciclaje: {0}. Asegúrate de que esta ruta existe y es modificable por el usuario que ejecuta Readarr",
"SearchForAllMissingBooks": "Buscar todos los episodios perdidos",
"IndexerIdHelpText": "Especifica a qué indexador se aplica el perfil",
"ProfilesSettingsSummary": "Perfiles de calidad, de retraso de idioma y de lanzamiento",
"DataExistingBooks": "Monitoriza libros que no tienen archivos o que no se han lanzado aún",
"MonitoredAuthorIsMonitored": "El artista no está vigilado",
"RemotePathMappingsInfo": "Los mapeos de ruta remota son muy raramente solicitados, si {appName} y tu cliente de descarga están en el mismo sistema es mejor coincidir sus rutas. Para más información consulta la [wiki]({wikiLink}).",
"RemotePathMappingsInfo": "Los mapeos de ruta remota son muy raramente requeridos, si {app} y tu cliente de descarga están en el mismo sistema es mejor coincidir sus rutas. Para más información consulta la [wiki]({wikiLink}).",
"ShowBannersHelpText": "Muestra carteles en lugar de nombres",
"DefaultTagsHelpText": "Etiquetas predeterminadas de Readarr para los autores detectados en esta carpeta",
"UseSSL": "Usar SSL",
@@ -955,7 +955,6 @@
"IgnoredMetaHelpText": "Los libros serán ignorados si contienen uno o más de los siguientes términos (insensible a mayúsculas)",
"IsExpandedHideBooks": "Esconder libros",
"LogSQL": "Registro SQL",
"MusicbrainzId": "ID de MusicBrainz",
"OnBookTagUpdate": "En actualización de etiqueta de libro",
"PasswordHelpText": "Contraseña del servidor de contenido de Calibre",
"OnAuthorAddedHelpText": "En autor añadido",
@@ -975,7 +974,7 @@
"CalibreLibrary": "Biblioteca de Calibre",
"DeleteMetadataProfile": "Eliminar el perfil de metadatos",
"PathHelpText": "Carpeta raíz que contiene tu biblitoteca de libros",
"ForeignIdHelpText": "La ID de Musicbrainz del autor/libro a excluir",
"ForeignIdHelpText": "La ID foránea del autor/libro a excluir",
"HostHelpText": "Host del servidor de contenido de Calibre",
"MetadataProviderSource": "Fuente del proveedor de metadatos",
"MonitorAuthor": "Monitorizar autor",
@@ -1117,5 +1116,11 @@
"InstallLatest": "Instala el último",
"InstallMajorVersionUpdate": "Instalar actualización",
"InstallMajorVersionUpdateMessage": "Esta actualización instalará una nueva versión principal y podría no ser compatible con tu sistema. ¿Estás seguro que quieres instalar esta actualización?",
"InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información."
"InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información.",
"LastSearched": "Último buscado",
"Unknown": "Desconocido",
"AddNewBook": "Añadir Nuevo Libro",
"AddNewAuthor": "Añadir Nuevo Autor",
"AddNewAuthorRootFolderHelpText": "La subcarpeta '{folder}' será creada automáticamente",
"AddRootFolder": "Añadir Carpeta Raíz"
}

View File

@@ -1 +1,12 @@
{}
{
"20MinutesTwenty": "۲۰ دقیقه: {0}",
"ApiKey": "کلید API",
"Usenet": "Usenet",
"45MinutesFourtyFive": "۴۵ دقیقه: {0}",
"60MinutesSixty": "۶۰ دقیقه: {0}",
"About": "درباره",
"Actions": "اقدامات",
"Docker": "Docker",
"Torrents": "تورنت ها",
"Activity": "فعالیت"
}

View File

@@ -166,10 +166,10 @@
"IncludeHealthWarningsHelpText": "Sisällytä kuntovaroitukset",
"IncludeUnknownAuthorItemsHelpText": "Näytä jonossa kohteet, joille ei ole kirjailijaa. Tämä voi sisältää poistettuja kirjailijoita tai mitä tahansa muuta Readarrille luokiteltua.",
"IncludeUnmonitored": "Sisällytä valvomattomat",
"Indexer": "Tietolähde",
"IndexerPriority": "Tietolähteiden painotus",
"Indexer": "Hakupalvelu",
"IndexerPriority": "Hakupalveluiden painotus",
"IndexerSettings": "Hakupalveluasetukset",
"Indexers": "Tietolähteet",
"Indexers": "Hakupalvelut",
"Interval": "Ajoitus",
"IsCutoffCutoff": "Katkaista",
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Päivitä, kunnes tämä laatu saavutetaan tai ylitetään",
@@ -359,10 +359,10 @@
"TagIsNotUsedAndCanBeDeleted": "Tunniste ei ole käytössä ja voidaan poistaa.",
"Tags": "Tunnisteet",
"Tasks": "Tehtävät",
"TestAll": "Kaikkien testaus",
"TestAllClients": "Koesta latauspalvelut",
"TestAllIndexers": "Tietolähteiden testaus",
"TestAllLists": "Kaikkien listojen testaus",
"TestAll": "Koesta kaikki",
"TestAllClients": "Koesta palvelut",
"TestAllIndexers": "Koesta palvelut",
"TestAllLists": "Koesta listat",
"ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Tämä koskee kaikkia hakupalveluita. Noudata niiden asettamia sääntöjä.",
"TimeFormat": "Kellonajan esitys",
"Title": "Nimike",
@@ -375,37 +375,37 @@
"UILanguageHelpTextWarning": "Vaatii selaimen sivupäivityksen (F5).",
"UISettings": "Käyttöliittymän asetukset",
"URLBase": "URL-perusta",
"UnableToAddANewDownloadClientPleaseTryAgain": "Latauspalvelun lisääminen epäonnistui. Yritä uudelleen.",
"UnableToAddANewImportListExclusionPleaseTryAgain": "Uuden luettelon poissulkemisen lisääminen epäonnistui, yritä uudelleen.",
"UnableToAddANewIndexerPleaseTryAgain": "Uuden hakupalvelun lisääminen epäonnistui. Yritä uudelleen.",
"UnableToAddANewListPleaseTryAgain": "Tuontilistan lisäys epäonnistui. Yritä uudelleen.",
"UnableToAddANewDownloadClientPleaseTryAgain": "Virhe lisättäessä latauspalvelua. Yritä uudelleen.",
"UnableToAddANewImportListExclusionPleaseTryAgain": "Virhe lisättäessä listapoikkeusta. Yritä uudelleen.",
"UnableToAddANewIndexerPleaseTryAgain": "Virhe lisättäessä hakupalvelua. Yritä uudelleen.",
"UnableToAddANewListPleaseTryAgain": "Virhe lisättäessä tuontilistaa. Yritä uudelleen.",
"UnableToAddANewMetadataProfilePleaseTryAgain": "Uutta laatuprofiilia ei voi lisätä, yritä uudelleen.",
"UnableToAddANewNotificationPleaseTryAgain": "Ilmoituspalvelun lisääminen epäonnistui. Yritä uudelleen.",
"UnableToAddANewQualityProfilePleaseTryAgain": "Laatuprofiilin lisäys epäonnistui. Yritä uudelleen.",
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Etäsijainnin kohdistuksen lisäys epäonnistui. Yritä uudelleen.",
"UnableToAddANewRootFolderPleaseTryAgain": "Uutta mukautettua muotoa ei voi lisätä, yritä uudelleen.",
"UnableToLoadBackups": "Varmuuskopioinnin lataus epäonnistui",
"UnableToAddANewNotificationPleaseTryAgain": "Virhe lisättäessä ilmoituspalvelua. Yritä uudelleen.",
"UnableToAddANewQualityProfilePleaseTryAgain": "Virhe lisättäessä laatuprofiilia. Yritä uudelleen.",
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Virhe lisättäessä etäsijainnin kohdistusta. Yritä uudelleen.",
"UnableToAddANewRootFolderPleaseTryAgain": "Virhe lisättäessä juurikansiota. Yritä uudelleen.",
"UnableToLoadBackups": "Virhe ladattaessa varmuuskopioita.",
"UnableToLoadDelayProfiles": "Viiveprofiilien lataus epäonnistui",
"UnableToLoadDownloadClientOptions": "Latauspalveluasetusten lataus epäonnistui",
"UnableToLoadDownloadClients": "Latauspalveluiden lataus epäonnistui",
"UnableToLoadGeneralSettings": "Yleisasetusten lataus epäonnistui",
"UnableToLoadHistory": "Historian lataus epäonnistui",
"UnableToLoadImportListExclusions": "Tuontilistapoikkeusten lataus epäonnistui",
"UnableToLoadIndexerOptions": "Hakupalveluasetusten lataus epäonnistui",
"UnableToLoadIndexers": "Tietolähteiden lataus epäonnistui",
"UnableToLoadLists": "Listojen lataus epäonnistui",
"UnableToLoadMediaManagementSettings": "Mediatiedostojen hallinta-asetusten lataus epäonnistui",
"UnableToLoadMetadata": "Metatietojen lataus epäonnistui",
"UnableToLoadNamingSettings": "Nimeämisasetusten lataus epäonnistui",
"UnableToLoadDownloadClientOptions": "Virhe ladattaessa latauspalveluasetuksia.",
"UnableToLoadDownloadClients": "Virhe ladattaessa latauspalveluita.",
"UnableToLoadGeneralSettings": "Virhe ladattaessa yleisasetuksia.",
"UnableToLoadHistory": "Virhe ladattaessa historiaa.",
"UnableToLoadImportListExclusions": "Virhe ladattaessa tuontilistapoikkeuksia. Yritä uudelleen.",
"UnableToLoadIndexerOptions": "Virhe ladattaessa hakupalveluasetuksia.",
"UnableToLoadIndexers": "Virhe ladattaessa hakupalveluita.",
"UnableToLoadLists": "Virhe ladattaessa listoja.",
"UnableToLoadMediaManagementSettings": "Virhe ladattaessa mediatiedostojen hallinta-asetuksia.",
"UnableToLoadMetadata": "Virhe ladattaessa metatietoja.",
"UnableToLoadNamingSettings": "Virhe ladattaessa nimeämisasetuksia.",
"UnableToLoadNotifications": "Ilmoituspalveluiden lataus epäonnistui",
"UnableToLoadQualities": "Laatujen lataus epäonnistui",
"UnableToLoadQualityDefinitions": "Laatumääritysten lataus epäonnistui",
"UnableToLoadQualityProfiles": "Laatuprofiilien lataus epäonnistui",
"UnableToLoadReleaseProfiles": "Julkaisuprofiilien lataus epäonnistui",
"UnableToLoadRemotePathMappings": "Etäsijaintien kohdistusten lataus epäonnistui",
"UnableToLoadRootFolders": "Juurikansioiden lataus epäonnistui",
"UnableToLoadQualities": "Virhe ladattaessa laatuja.",
"UnableToLoadQualityDefinitions": "Virhe ladattaessa laatumäärityksiä.",
"UnableToLoadQualityProfiles": "Virhe ladattaessa laatuprofiileja.",
"UnableToLoadReleaseProfiles": "Virhe ladattaessa julkaisuprofiileja.",
"UnableToLoadRemotePathMappings": "Virhe ladattaessa etäsijaintien kohdistuksia.",
"UnableToLoadRootFolders": "Virhe ladattaessa juurikansioita.",
"UnableToLoadTags": "Tunnisteiden lataus epäonnistui",
"UnableToLoadTheCalendar": "Kalenterin lataus epäonnistui",
"UnableToLoadTheCalendar": "Virhe ladattaessa kalenteria.",
"UnableToLoadUISettings": "Käyttöliittymäasetusten lataus epäonnistui",
"Ungroup": "Pura ryhmä",
"Unmonitored": "Valvomattomat",
@@ -434,7 +434,7 @@
"LoadingBooksFailed": "Kirjojen lataus epäonnistui",
"ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.",
"SslCertPathHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.",
"UnableToLoadMetadataProfiles": "Metatietoprofiilien lataus epäonnistui",
"UnableToLoadMetadataProfiles": "Virhe ladattaessa metatietoprofiileja.",
"DownloadClientCheckDownloadingToRoot": "Latauspalvelu {0} tallentaa lataukset juurikansioon \"{1}\", mutta niitä ei tulisi tallentaa sinne.",
"ReplaceIllegalCharactersHelpText": "Korvaa laittomat merkit vaihtoehtoisella merkinnällä. Jos ei valittu, Readarr poistaa ne.",
"OutputPath": "Tallennussijainti",
@@ -556,9 +556,9 @@
"HostHelpText": "Calibre-sisältöpalvelimen osoite.",
"ImportListStatusCheckAllClientMessage": "Mitkään listat eivät ole virheiden vuoksi käytettävissä",
"ImportListStatusCheckSingleClientMessage": "Listat eivät ole virheiden vuoksi käytettävissä: {0}",
"IndexerPriorityHelpText": "Hakupalvelun painotus, 1 50 (korkein-alin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen kaappauspäätökseen. Kaikkia käytössä olevia Hakupalveluita käytetään edelleen RSS-synkronointiin ja hakuun.",
"IndexerLongTermStatusCheckSingleClientMessage": "Tietolähteet eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi: {0}",
"IndexerLongTermStatusCheckAllClientMessage": "Mikään tietolähde ei ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi.",
"IndexerPriorityHelpText": "Hakupalvelun painotus, 1 50 (korkein-alin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen kaappauspäätökseen. Readarr käyttää edelleen kaikkia käytössä olevia hakupalveluita RSS-synkronointiin ja hakuun.",
"IndexerLongTermStatusCheckSingleClientMessage": "Hakupalvelut eivät ole käytettävissä yli kuusi tuntia kestäneiden virheiden vuoksi: {0}.",
"IndexerLongTermStatusCheckAllClientMessage": "Mikään hakupalvelu ei ole käytettävissä yli kuusi tuntia kestäneiden virheiden vuoksi.",
"IndexerSearchCheckNoInteractiveMessage": "Manuaalihaulle ei ole määritetty hakupalveluita, eikä Readarr sen vuoksi löydä sillä tuloksia.",
"IsCalibreLibraryHelpText": "Hallinnoi kirjastoa Calibren sisältöpalvelimen avulla.",
"IsInUseCantDeleteAMetadataProfileThatIsAttachedToAnAuthorOrImportList": "Kirjailijaan tai tuontilistaan liitettyä metatietoprofiilia ei voi poistaa.",
@@ -569,10 +569,10 @@
"MetadataProfileIdHelpText": "Metatietoprofiili, joka listalta lisätyille kohteille tulee asettaa.",
"MetadataSourceHelpText": "Vaihtoehtoinen metatietolähde. Käytä oletusta jättämällä tyhjäksi.",
"MissingBooks": "Puuttuvat kirjat",
"MissingBooksAuthorMonitored": "Puuttuvat kirjat (kirjailijaa valvotaan)",
"MissingBooksAuthorNotMonitored": "Puuttuvat kirjat (kirjailijaa ei valvota)",
"MissingBooksAuthorMonitored": "Kirjoja puuttuu (kirjailijaa valvotaan)",
"MissingBooksAuthorNotMonitored": "Kirjoja puuttuu (kirjailijaa ei valvota)",
"MonitorBookExistingOnlyWarning": "Tämä on kirjakohtaisen valvonnan kertaluontoinen määritys. Määritä Kirjailija/Muokkaa-valinnalla mitä uusille kirjalisäyksille tehdään.",
"MonitorNewItems": "Valvo uusia kirjoja",
"MonitorNewItems": "Uusien kirjojen valvonta",
"MonitorNewItemsHelpText": "Uusien kirjojen valvontatapa.",
"MonitoringOptionsHelpText": "Mitkä kirjat asetetaan valvottaviksi kirjailijan lisäyksen yhteydessä (kertaluontoinen määritys).",
"OutputFormatHelpText": "Voit halutessasi pyytää Calibrea muuntamaan kirjat eri muotoihin tuonnin yhteydessä. Pilkulla eroteltu lista.",
@@ -610,7 +610,7 @@
"ImportMechanismHealthCheckMessage": "Käytä valmistuneiden latausten käsittelyä",
"IndexerJackettAll": "Jackettin ei-tuettua \"all\"-päätettä käyttävät hakupalvelut: {0}",
"IndexersSettingsSummary": "Hakupalvelut ja julkaisurajoitukset.",
"IndexerStatusCheckAllClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi",
"IndexerStatusCheckAllClientMessage": "Hakupalvelut eivät ole virheiden vuoksi käytettävissä.",
"MediaManagement": "Median hallinta",
"Metadata": "Metatiedot",
"OnBookFileDeleteHelpText": "Kun kirjatiedosto poistetaan",
@@ -640,7 +640,7 @@
"TimeLeft": "Aikaa jäljellä",
"ConnectSettingsSummary": "Yhteydet ilmoituspalveluihin, mediapalvelimiin ja soittimiin, sekä mukautetut komentosarjat.",
"DownloadClientCheckNoneAvailableMessage": "Latauspalveluita ei ole käytettävissä",
"DownloadClientCheckUnableToCommunicateMessage": "Viestintä latauspalvelun \"{0}\" kanssa epäonnistui.",
"DownloadClientCheckUnableToCommunicateMessage": "Virhe viestittäessä latauspalvelun \"{0}\" kanssa.",
"DownloadClientStatusCheckSingleClientMessage": "Latauspalveluita ei ole ongelmien vuoksi käytettävissä: {0}",
"FailedToLoadQueue": "Jonon lataus epäonnistui",
"FileWasDeletedByUpgrade": "Tiedosto poistettiin päivityksen tuontia varten.",
@@ -679,7 +679,7 @@
"InstanceName": "Instanssin nimi",
"InstanceNameHelpText": "Instanssin nimi välilehdellä ja järjestelmälokissa.",
"MonitorExistingBooks": "Valvo olemassa olevia kirjoja",
"MonitorNewBooks": "Valvo uusia kirjoja",
"MonitorNewBooks": "Uusien kirjojen valvonta",
"RenameFiles": "Nimeä tiedostot uudelleen",
"Test": "Testaa",
"AllowFingerprintingHelpText": "Tarkenna kirjojen tunnistustarkkuutta piiloleimauksen avulla.",
@@ -702,8 +702,7 @@
"ImportListSettings": "Tuontilistojen yleisasetukset",
"ImportListSpecificSettings": "Tuotilistakohtaiset asetukset",
"IsShowingMonitoredMonitorSelected": "Valvo valittuja",
"IsShowingMonitoredUnmonitorSelected": "Lopeta valittujen valvonta",
"MusicbrainzId": "MusicBrainz-tunniste",
"IsShowingMonitoredUnmonitorSelected": "Lopeta valvonta",
"MusicBrainzRecordingID": "Taltioinnin MusicBrainz ID",
"ShouldSearchHelpText": "Etsi hakupalveluista hiljattain lisättyjä kohteita. Käytä suurten listojen kanssa varoen.",
"OnDownloadFailure": "Latauksen epäonnistuessa",
@@ -715,7 +714,7 @@
"ReleaseProfiles": "Julkaisuprofiilit",
"ShowBannersHelpText": "Korvaa nimet bannerikuvilla.",
"StatusEndedContinuing": "Jatkuu",
"UnableToLoadMetadataProviderSettings": "Metatietolädeasetusten lataus epäonnistui",
"UnableToLoadMetadataProviderSettings": "Virhe ladattaessa metatietopalveluasetuksia.",
"UnmappedFiles": "Kohdistamattomat tiedostot",
"UpdatingIsDisabledInsideADockerContainerUpdateTheContainerImageInstead": "Päivittäminen ei ole Docker-säiliössä käytettävissä. Päivitä sen sijaan säiliön kuva.",
"WatchRootFoldersForFileChanges": "Valvo juurikansioiden tiedostomuutoksia",
@@ -735,11 +734,11 @@
"ManualDownload": "Manuaalinen lataus",
"PastDaysHelpText": "Päivien määrä, jonka verran menneisyyteen iCal-syötettä seurataan.",
"DiscNumber": "Levynumero",
"ForeignIdHelpText": "Ohitettavan kirjailijan tai kirjan MusicBrainz-tunniste.",
"ForeignIdHelpText": "Ohitettavan kirjailijan tai kirjan vieras tunniste.",
"IsExpandedShowFileInfo": "Näytä tiedostojen tiedot",
"ApplicationUrlHelpText": "Tämän sovelluksen ulkoinen URL-osoite, johon sisältyy http(s)://, portti ja URL-perusta.",
"CollapseMultipleBooksHelpText": "Tiivistä useat samana päivänä julkaistavat kirjat.",
"DataFirstBook": "Seuraa ensimmäisiä kirjoja. Muita kirjoja ei huomioida.",
"DataFirstBook": "Valvo ensimmäisiä kirjoja. Muita kirjoja ei huomioida.",
"DataListMonitorSpecificBook": "Valvo kirjailijoita, mutta vain erikseen listalle lisättyjä kirjoja.",
"DataNone": "Kirjoja ei valvota",
"EndedAllBooksDownloaded": "Päättynyt (kaikki kirjat on ladattu)",
@@ -834,11 +833,11 @@
"ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituille hakupalveluille:",
"ApplyTagsHelpTextRemove": " \"Poista\" tyhjentää syötetyt tunnisteet.",
"ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi",
"CountIndexersSelected": "{selectedCount} tietolähde(ttä) on valittu",
"CountIndexersSelected": "{selectedCount} hakupalvelu(a) on valittu",
"DeleteSelectedDownloadClients": "Poista valitut latauspalvelu(t)",
"DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valittua latauspalvelua?",
"DeleteSelectedIndexers": "Poista tietoläh(de/teet)",
"DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) tietoläh(teen/dettä)?",
"DeleteSelectedIndexers": "Poista hakupalvelu(t)",
"DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) hakupalvelu(n/a)?",
"DownloadClientTagHelpText": "Tätä latauspalvelua käytetään vain vähintään yhdellä täsmäävällä tunnisteella merkityille kirjailijoille. Käytä kaikille jättämällä tyhjäksi.",
"ExistingTag": "Tunniste on jo olemassa",
"NoChange": "Ei muutosta",
@@ -891,12 +890,12 @@
"DeleteRemotePathMappingMessageText": "Haluatko varmasti poistaa tämän etäsijainnin kohdistuksen?",
"ManageDownloadClients": "Hallitse latauspalveluita",
"ManageIndexers": "Hallitse hakupalveluita",
"NoIndexersFound": "Tietolähteitä ei löytynyt",
"NoIndexersFound": "Hakupalveluita ei löytynyt",
"RemoveCompletedDownloads": "Poista valmistuneet lataukset",
"RemoveFailedDownloads": "Poista epäonnistuneet lataukset",
"MediaManagementSettingsSummary": "Tiedostojen nimeämis- ja hallinta-asetukset, sekä kirjaston juurikansiot.",
"Clone": "Monista",
"Monitoring": "Valvotaan",
"Monitoring": "Valvonta",
"DeleteCondition": "Poista ehto",
"MinimumCustomFormatScoreHelpText": "Mukautetun muodon vähimmäispisteytys, jolla ensisijaisen protokollan viiveen ohitus sallitaan.",
"SetReadarrTags": "Määritä Readarr-tunnisteet",
@@ -921,11 +920,11 @@
"BypassIfAboveCustomFormatScore": "Ohita, jos ylittää mukautetun muodon pisteytyksen",
"ASIN": "ASIN",
"AutoAdd": "Automaattilisäys",
"ManageImportLists": "Tuontilistojen hallinta",
"ManageImportLists": "Hallitse listoja",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Etsi ja lataa uusi vastaava julkaisu, kun epäonnistunut lataus on valittu manuaalihaun tuloksista.",
"BypassIfAboveCustomFormatScoreHelpText": "Käytä ohitusta, kun julkaisun pisteytys on määritetyn mukautetun muodon vähimmäispisteytystä korkeampi.",
"ApiKeyValidationHealthCheckMessage": "Muuta rajapinnan (API) avain ainakin {0} merkin pituiseksi. Voit tehdä tämän asetuksista tai muokkaamalla asetustiedostoa.",
"ManageLists": "Listojen hallunta",
"ManageLists": "Hallitse listoja",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Määrittää käytetäänkö qBittorrentista määritettyä rakennetta, torrentin alkuperäistä rakennetta vai luodaanko uusi alikansio (qBittorrent 4.3.2+).",
"Implementation": "Toteutus",
"SourceTitle": "Lähteen nimike",
@@ -938,7 +937,7 @@
"StatusEndedDeceased": "Kuollut",
"OnAuthorDeleteHelpText": "Kun kirjailija poistetaan",
"ListRefreshInterval": "Listan päivityksen ajoitus",
"MonitorAuthor": "Valvo kirjailijaa",
"MonitorAuthor": "Kirjailijoiden valvonta",
"EditAuthor": "Muokkaa kirjailijaa",
"NameStyle": "Kirjailijan nimen tyyli",
"MonitoredAuthorIsUnmonitored": "Kirjailijaa ei valvota",
@@ -989,7 +988,7 @@
"RemoveQueueItemConfirmation": "Haluatko varmasti poistaa kohteen \"{sourceTitle}\" jonosta?",
"SelectReleaseGroup": "Aseta julkaisuryhmä",
"BlocklistOnly": "Vain esto",
"IndexerFlags": "Tietolähteen liput",
"IndexerFlags": "Hakupalvelun liput",
"NotificationsSettingsUpdateMapPathsFrom": "Kohdista sijainnit lähteeseen",
"NotificationsSettingsUpdateMapPathsFromHelpText": "{appName}-sijainti, jonka perusteella esittäjien sijainteja muutetaan kun {serviceName} näkemä kirjastosijainti poikkeaa {appName}in sijainnista (vaatii \"Päivitä kirjasto\" -asetuksen).",
"NotificationsSettingsUpdateMapPathsTo": "Kohdista sijainnit kohteeseen",
@@ -1009,7 +1008,7 @@
"LabelIsRequired": "Nimi on pakollinen",
"IndexerSettingsSeedRatio": "Jakosuhde",
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Vaihtoehtoinen sijainti, johon valmistuneet lataukset siirretään. Käytä Delugen oletusta jättämällä tyhjäksi.",
"IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.",
"IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa hakupalvelun sääntöjä.",
"IndexerSettingsSeedTime": "Jakoaika",
"IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi.",
"FailedLoadingSearchResults": "Hakutulosten lataus epäonnistui. Yritä uudelleen.",
@@ -1031,13 +1030,13 @@
"DisabledForLocalAddresses": "Ei käytössä paikallisissa osoitteissa",
"ReadarrSupportsMultipleListsForImportingBooksAndAuthorsIntoTheDatabase": "Readarr tukee useita listoja, joiden avulla kirjoja ja kirjailijoita voidaan tuoda tietokantaan.",
"BuiltIn": "Sisäänrakennettu",
"CurrentlyInstalled": "Tällä hetkellä asennettu versio",
"CurrentlyInstalled": "Nyt asennettu",
"DockerUpdater": "Hanki päivitys päivittämällä Docker-säiliö",
"ExternalUpdater": "{appName} on määritetty käyttämään ulkoista päivitysratkaisua.",
"FailedToFetchUpdates": "Päivitysten nouto epäonnistui",
"InstallLatest": "Asenna uusin",
"OnLatestVersion": "Uusin {appName}-versio on jo asennettu",
"PreviouslyInstalled": "Edellinen asennettu versio",
"OnLatestVersion": "{appName}in uusin versio on jo asennettu",
"PreviouslyInstalled": "Aiemmin asennettu",
"Script": "Komentosarja",
"UpdateAppDirectlyLoadError": "{appName}ia ei voida päivittää suoraan,",
"AptUpdater": "Asenna päivitys APT-työkalun avulla",
@@ -1092,13 +1091,13 @@
"MinPagesHelpText": "Ohita kirjat, joiden sivumäärä on tätä pienempi.",
"MinPopularityHelpText": "Suosio on arvioiden keskiarvo kerrottuna äänimäärällä.",
"MinimumPopularity": "Suosion vähimmäistaso",
"MonitorBook": "Valvo kirjaa",
"MonitorBook": "Kirjojen valvonta",
"NewBooks": "Uusia kirjoja",
"NoName": "Älä näytä nimeä",
"OnBookDelete": "Kun kirja poistetaan",
"OnBookDeleteHelpText": "Kun kirja poistetaan",
"OnBookRetagHelpText": "Kun kirjan tagit muuttuvat",
"PreviewRetag": "Esikatsele tagimuutoksia",
"PreviewRetag": "Tagauksen esikatselu",
"RefreshBook": "Päivitä kirja",
"SearchBook": "Etsi kirjaa",
"SearchBoxPlaceHolder": "esim. War and Peace, goodreads:656, isbn:067003469X, asin:B00JCDK5ME",
@@ -1117,5 +1116,11 @@
"ExistingItems": "Olemassa olevat kohteet",
"ConvertToFormat": "Muunna muotoon",
"DownloadPropersAndRepacksHelpTexts2": "\"Älä suosi\" käyttää Proper-/Repack-julkaisujen sijaan haluttua sanapisteytystä.",
"IgnoreDeletedBooks": "Ohita poistetut kirjat"
"IgnoreDeletedBooks": "Ohita poistetut kirjat",
"LastSearched": "Edellinen haku",
"Unknown": "Tuntematon",
"AddNewAuthorRootFolderHelpText": "Alikansio \"{folder}\" luodaan automaattisesti.",
"AddRootFolder": "Lisää juurikansio",
"AddNewBook": "Lisää uusi kirja",
"AddNewAuthor": "Lisää uusi kirjailija"
}

View File

@@ -862,7 +862,6 @@
"ManageIndexers": "Gérer les indexeurs",
"ManageLists": "Gérer les listes",
"ManualDownload": "Téléchargement manuel",
"MusicbrainzId": "Identifiant Musicbrainz",
"PastDays": "Jours passés",
"TrackNumber": "Numéro de piste",
"IsExpandedShowFileInfo": "Afficher les informations sur le fichier",
@@ -1117,5 +1116,9 @@
"PreviouslyInstalled": "Installé précédemment",
"Script": "Script",
"UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName},",
"InstallMajorVersionUpdateMessage": "Cette mise à jour installera une nouvelle version majeure et pourrait ne pas être compatible avec votre système. Êtes-vous sûr de vouloir installer cette mise à jour ?"
"InstallMajorVersionUpdateMessage": "Cette mise à jour installera une nouvelle version majeure et pourrait ne pas être compatible avec votre système. Êtes-vous sûr de vouloir installer cette mise à jour ?",
"LastSearched": "Dernière recherche",
"Unknown": "Inconnu",
"AddNewAuthorRootFolderHelpText": "Le sous-dossier « {folder} » sera créé automatiquement",
"AddRootFolder": "Ajouter un dossier racine"
}

View File

@@ -687,5 +687,7 @@
"Script": "תַסרִיט",
"UnmappedFiles": "תיקיות לא ממופות",
"UpdateAppDirectlyLoadError": "לא ניתן לעדכן את {appName} ישירות,",
"Clone": "סגור"
"Clone": "סגור",
"AddNewAuthorRootFolderHelpText": "תיקיית המשנה '{0}' תיווצר באופן אוטומטי",
"AddRootFolder": "הוסף תיקיית שורש"
}

View File

@@ -650,5 +650,7 @@
"OnLatestVersion": "रेडर का नवीनतम संस्करण पहले से ही स्थापित है",
"Script": "लिपि",
"UpdateAppDirectlyLoadError": "सीधे {appName} अद्यतन करने में असमर्थ,",
"Clone": "बंद करे"
"Clone": "बंद करे",
"AddNewAuthorRootFolderHelpText": "'{0}' सबफ़ोल्डर स्वचालित रूप से बनाया जाएगा",
"AddRootFolder": "रूट फ़ोल्डर जोड़ें"
}

View File

@@ -229,5 +229,6 @@
"DeleteSelectedBookFilesMessageText": "Jeste li sigurni da želite obrisati ovaj profil odgode?",
"Clone": "Zatvori",
"BuiltIn": "Ugrađeno",
"AptUpdater": "Koristi apt kako bi instalirao ažuriranje"
"AptUpdater": "Koristi apt kako bi instalirao ažuriranje",
"AddRootFolder": "Dodaj Korijensku Mapu"
}

View File

@@ -561,7 +561,6 @@
"MusicBrainzRecordingID": "MusicBrainz felvételi azonosító",
"MusicBrainzReleaseID": "MusicBrainz kiadási azonosító",
"MusicBrainzTrackID": "MusicBrainz zeneszám azonosítója",
"MusicbrainzId": "MusicBrainz azonosító",
"NETCore": ".NET Mag",
"AnalyticsEnabledHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
"DeleteRootFolderMessageText": "Biztosan törli a(z) \"{name}\" gyökérmappát?",
@@ -1085,5 +1084,8 @@
"OnLatestVersion": "A {appName} legújabb verziója már telepítva van",
"PreviouslyInstalled": "Korábban telepítve",
"Script": "Szkript",
"UpdateAppDirectlyLoadError": "Nem lehetséges közvetlenül frissíteni a {appName}-t"
"UpdateAppDirectlyLoadError": "Nem lehetséges közvetlenül frissíteni a {appName}-t",
"Unknown": "Ismeretlen",
"AddNewAuthorRootFolderHelpText": "A „{folder}” almappa automatikusan létrejön",
"AddRootFolder": "Gyökérmappa hozzáadása"
}

View File

@@ -652,5 +652,7 @@
"OnLatestVersion": "Nýjasta útgáfan af {appName} er þegar uppsett",
"Script": "Handrit",
"UnmappedFiles": "Ókortlagðar möppur",
"UpdateAppDirectlyLoadError": "Ekki er hægt að uppfæra {appName} beint,"
"UpdateAppDirectlyLoadError": "Ekki er hægt að uppfæra {appName} beint,",
"AddNewAuthorRootFolderHelpText": "„{0}“ undirmöppan verður búin til sjálfkrafa",
"AddRootFolder": "Bæta við rótarmöppu"
}

View File

@@ -725,7 +725,7 @@
"AppUpdated": "{appName} Aggiornato",
"AllResultsAreHiddenByTheAppliedFilter": "Tutti i risultati sono nascosti dal filtro applicato",
"AutoRedownloadFailed": "Download fallito",
"AddListExclusion": "Aggiungi elenco esclusioni",
"AddListExclusion": "Aggiungi lista esclusioni",
"Location": "Posizione",
"ListsSettingsSummary": "Liste",
"RecentChanges": "Cambiamenti Recenti",
@@ -858,7 +858,6 @@
"EditSelectedIndexers": "Modifica Indicizzatori Selezionati",
"IsExpandedHideFileInfo": "Nascondi info file",
"LogSQL": "Log SQL",
"MusicbrainzId": "ID MusicBrainz",
"MonitoredAuthorIsUnmonitored": "Autore non monitorato",
"Monitoring": "Monitorando",
"BookProgressBarText": "{bookCount} / {totalBookCount} (File: {bookFileCount})",
@@ -911,5 +910,12 @@
"OnLatestVersion": "L'ultima versione di {appName} è già installata",
"PreviouslyInstalled": "Precedentemente Installato",
"Script": "Script",
"UpdateAppDirectlyLoadError": "Impossibile aggiornare {appName} direttamente,"
"UpdateAppDirectlyLoadError": "Impossibile aggiornare {appName} direttamente,",
"AutoRedownloadFailedFromInteractiveSearch": "Riesecuzione del download non riuscita dalla ricerca interattiva",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Cerca automaticamente e tenta di scaricare una versione diversa quando il rilascio non riuscito è stato acquisito dalla ricerca interattiva",
"Unknown": "Sconosciuto",
"AddNewAuthorRootFolderHelpText": "La sottocartella '{0}' verrà creata automaticamente",
"AddRootFolder": "Aggiungi Cartella Radice",
"AddNewBook": "Aggiungi nuovo libro",
"AddNewAuthor": "Aggiungi nuovo autore"
}

View File

@@ -651,5 +651,7 @@
"CurrentlyInstalled": "現在インストール中",
"DockerUpdater": "Dockerコンテナを更新して、更新を受信します",
"ExternalUpdater": "{appName}は、外部更新メカニズムを使用するように構成されています",
"OnLatestVersion": "{appName}の最新バージョンはすでにインストールされています"
"OnLatestVersion": "{appName}の最新バージョンはすでにインストールされています",
"AddRootFolder": "ルートフォルダを追加する",
"AddNewAuthorRootFolderHelpText": "'{0}'サブフォルダは自動的に作成されます"
}

View File

@@ -4,8 +4,8 @@
"AlternateTitles": "대체 제목",
"Analytics": "해석학",
"DownloadPropersAndRepacksHelpTexts1": "Propers / Repacks로 자동 업그레이드할지 여부",
"20MinutesTwenty": "120 분 : {0}",
"45MinutesFourtyFive": "60 분 : {0}",
"20MinutesTwenty": "20분 : {0}",
"45MinutesFourtyFive": "45분 : {0}",
"ChownGroupHelpText": "그룹 이름 또는 gid. 원격 파일 시스템에 gid를 사용하십시오.",
"DeleteReleaseProfile": "지연 프로필 삭제",
"DeleteIndexer": "인덱서 삭제",
@@ -644,5 +644,143 @@
"AppUpdated": "{appName} 업데이트",
"AppUpdatedVersion": "{appName}이 버전 `{version}`으로 업데이트되었습니다. 최신 변경 사항을 받으려면 {appName}을 다시 로드해야 합니다",
"WouldYouLikeToRestoreBackup": "'{name}' 백업을 복원하시겠습니까?",
"UseSSL": "SSL 사용"
"UseSSL": "SSL 사용",
"AutomaticAdd": "자동 추가",
"BlocklistAndSearch": "차단 목록 및 검색",
"BlocklistAndSearchHint": "차단 목록에 추가한 후 대체 항목 검색 시작",
"BlocklistAndSearchMultipleHint": "차단 목록에 추가한 후 대체 항목 검색 시작",
"RemoveCompletedDownloads": "완료된 다운로드 제거",
"DeleteCondition": "조건 삭제",
"AutoRedownloadFailedFromInteractiveSearch": "상호작용 검색에서 재다운로드를 실패함",
"CustomFormatsSettingsTriggerInfo": "사용자 정의 형식은 선택한 다양한 조건 유형 중 하나 이상과 일치할 경우 출시 또는 파일에 적용됩니다.",
"DoNotBlocklistHint": "차단 목록에 추가하지 않고 제거",
"ResetDefinitions": "정의 초기화",
"Loading": "로딩중",
"NoCutoffUnmetItems": "조건 미충족 항목 없음",
"AuthenticationRequiredWarning": "인증 없이 원격 액세스를 방지하기 위해 {appName}은(는) 이제 인증을 활성화해야 합니다. 선택적으로 로컬 주소에서 인증을 비활성화할 수 있습니다.",
"DeleteRemotePathMappingMessageText": "정말로 이 원격 경로 매핑을 삭제하시겠습니까?",
"ApplyChanges": "변경 사항 적용",
"Label": "라벨",
"SkipRedownload": "재다운로드 건너뛰기",
"Duration": "기간",
"ReplaceWithSpaceDash": "공백 대시로 바꾸기",
"ReplaceWithSpaceDashSpace": "공백 대시 공백으로 바꾸기",
"Started": "시작됨",
"DeleteSelected": "선택된 것을 삭제",
"AuthenticationRequiredHelpText": "필수 인증을 요청하는 변경 사항. 위험을 이해하지 못한다면 변경하지 마세요.",
"Required": "필수",
"ClickToChangeReleaseGroup": "출시 그룹을 변경하려면 클릭",
"ConnectionSettingsUrlBaseHelpText": "{connectionName} url에 {url}와(과) 같은 접두사를 추가합니다",
"DeleteImportList": "가져오기 목록 삭제",
"ColonReplacement": "콜론 바꾸기",
"RemoveQueueItemRemovalMethodHelpTextWarning": "'다운로드 클라이언트에서 제거'를 선택하면 다운로드 및 파일이 다운로드 클라이언트에서 제거됩니다.",
"RemoveFailed": "제거 실패",
"ResetTitles": "제목 초기화",
"UserAgentProvidedByTheAppThatCalledTheAPI": "API를 호출한 앱에서 제공하는 사용자 에이전트",
"ApplicationURL": "애플리케이션 URL",
"ApplicationUrlHelpText": "이 애플리케이션의 외부 URL - http(s)://, port 및 URL 기반 포함",
"Author": "저작자",
"ClickToChangeIndexerFlags": "인덱서 플래그를 변경하려면 클릭",
"NotificationsPlexSettingsAuthToken": "인증 토큰",
"SelectIndexerFlags": "인덱서 플래그 선택",
"ThereWasAnErrorLoadingThisItem": "이 항목을 로드하는 중에 오류가 발생했습니다",
"SmartReplace": "지능형 바꾸기",
"AutomaticUpdatesDisabledDocker": "Docker 업데이트 메커니즘을 사용할 때는 자동 업데이트가 직접 지원되지 않습니다. {appName} 외부에서 컨테이너 이미지를 업데이트하거나 스크립트를 사용해야 합니다",
"BlocklistOnly": "차단 목록만",
"BlocklistOnlyHint": "대체 항목을 검색하지 않고 차단 목록에 추가",
"BypassIfHighestQuality": "최고 품질일 경우 무시",
"ChangeCategory": "카테고리 변경",
"ChangeCategoryMultipleHint": "다운로드 클라이언트에서 다운로드를 '가져오기 이후 카테고리'로 변경",
"ChownGroup": "chown 그룹",
"CloneCondition": "조건 복제",
"IndexerIdHelpText": "프로필이 적용되는 인덱서를 지정하세요",
"MinimumCustomFormatScoreHelpText": "선호하는 프로토콜의 지연을 우회하는 데 필요한 최소 사용자 정의 형식 점수",
"ReplaceWithDash": "대시로 바꾸기",
"DownloadClientQbittorrentSettingsContentLayout": "콘텐츠 레이아웃",
"CustomFormatsSpecificationFlag": "국기",
"Database": "데이터베이스",
"DoNotBlocklist": "차단 목록에 추가하지 않음",
"DownloadClientDelugeSettingsDirectory": "다운로드 디렉토리",
"DownloadClientDelugeSettingsDirectoryCompleted": "완료 후 이동할 디렉토리",
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "완료된 다운로드를 이동할 선택적 위치. 기본 Deluge 위치를 사용하려면 비워두세요",
"DownloadClientDelugeSettingsDirectoryHelpText": "다운로드를 이동할 선택적 위치. 기본 Deluge 위치를 사용하려면 비워두세요",
"External": "외부",
"Install": "설치",
"IsShowingMonitoredUnmonitorSelected": "선택 항목 모니터링 해제",
"Large": "크게",
"RemoveCompleted": "제거 완료",
"RemoveDownloadsAlert": "제거 설정은 위 표의 개별 다운로드 클라이언트 설정으로 이동되었습니다.",
"RemoveQueueItem": "제거 - {sourceTitle}",
"RemoveQueueItemRemovalMethod": "제거 방식",
"RemoveQueueItemsRemovalMethodHelpTextWarning": "'다운로드 클라이언트에서 제거'를 선택하면 다운로드 및 파일이 다운로드 클라이언트에서 제거됩니다.",
"RemoveSelectedItem": "선택한 항목 제거",
"RemoveSelectedItems": "선택한 항목 제거",
"ResetQualityDefinitions": "품질 정의 초기화",
"Script": "스크립트",
"SelectReleaseGroup": "출시 그룹 선택",
"SizeLimit": "크기 제한",
"Theme": "테마",
"WhatsNew": "새로운 소식?",
"AuthenticationMethod": "인증 방식",
"AuthenticationMethodHelpTextWarning": "인증 방식을 선택해주세요",
"AuthenticationRequired": "인증 필수",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "새 비밀번호 확인",
"AuthenticationRequiredPasswordHelpTextWarning": "새 비밀번호를 입력하세요",
"AuthenticationRequiredUsernameHelpTextWarning": "새 사용자이름을 입력하세요",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "대화형 검색에서 실패한 출시가 잡혔을 때 다른 출시를 자동으로 검색하여 다운로드 시도",
"BlocklistMultipleOnlyHint": "대체 항목을 검색하지 않고 차단 목록에 추가",
"ChangeCategoryHint": "다운로드 클라이언트에서 다운로드를 '가져오기 이후 카테고리'로 변경",
"DeleteSelectedImportLists": "가져오기 목록 삭제",
"NoResultsFound": "결과를 찾을 수 없습니다",
"PasswordConfirmation": "비밀번호 확인",
"Rejections": "거부",
"ReleaseProfiles": "출시 프로필",
"RemoveFailedDownloads": "실패한 다운로드 제거",
"RemoveFromDownloadClientHint": "다운로드 클라이언트에서 다운로드 및 파일을 제거합니다",
"RemoveMultipleFromDownloadClientHint": "다운로드 클라이언트에서 다운로드 및 파일을 제거합니다",
"ResetDefinitionTitlesHelpText": "정의 제목과 값을 초기화하세요",
"ResetQualityDefinitionsMessageText": "품질 정의를 초기화하시겠습니까?",
"SetIndexerFlags": "인덱서 플래그 설정",
"ShownClickToHide": "표시됨, 숨기려면 클릭",
"Small": "작게",
"CustomFormatsSpecificationRegularExpression": "일반 표현",
"CustomFormatsSpecificationRegularExpressionHelpText": "사용자 정의 형식 정규표현식은 대소문자를 구분하지 않습니다",
"DeleteRootFolder": "루트 폴더 삭제",
"WriteTagsNo": "절대",
"BypassIfAboveCustomFormatScoreHelpText": "구성된 최소 사용자 정의 형식 점수보다 출시 점수가 높을 경우 무시를 활성화합니다",
"DashOrSpaceDashDependingOnName": "이름에 따라 대시 또는 띄어쓰고 대시",
"BypassIfAboveCustomFormatScore": "사용자 정의 형식 점수보다 높으면 무시",
"ThemeHelpText": "애플리케이션 UI 테마 변경, '자동' 테마는 OS 테마를 사용하여 라이트 또는 다크 모드를 설정합니다. Theme.Park에서 영감을 받음",
"ThereWasAnErrorLoadingThisPage": "이 페이지를 로드하는 중ㅇ 오류가 발생했습니다",
"WhySearchesCouldBeFailing": "검색이 실패하는 이유를 알아보려면 여기를 클릭하세요",
"AllExpandedExpandAll": "모두 펼치기",
"RootFolderPathHelpText": "루트 폴더 목록 항목이 다음에 추가됩니다:",
"AllExpandedCollapseAll": "모두 접기",
"IsShowingMonitoredMonitorSelected": "선택 모니터링 설정",
"NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName} 경로는 {serviceName}이 라이브러리 경로 위치를 {appName}와 다르게 볼 때 시리즈 경로를 수정하는 데 사용됨 (라이브러리 업데이트 필요)",
"NotificationsSettingsUpdateMapPathsFromHelpText": "{appName} 경로는 {serviceName}이 라이브러리 경로 위치를 {appName}와 다르게 볼 때 시리즈 경로를 수정하는 데 사용됨 (라이브러리 업데이트 필요)",
"InvalidUILanguage": "UI가 잘못된 언어로 설정되어 있습니다, 수정하고 설정을 저장하세요",
"IndexerSettingsSeedRatio": "시드 비율",
"EnabledHelpText": "출시 프로필을 활성화하려면 체크하세요",
"ErrorLoadingContent": "이 콘텐트를 로드하는 중 오류가 발생했습니다",
"NotificationsSettingsUpdateMapPathsFrom": "다음 위치부터 경로 매핑하기",
"Unknown": "알 수 없음",
"Negated": "부정",
"NoDownloadClientsFound": "다운로드 클라이언트를 찾을 수 없음",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "qBittorrent의 구성된 콘텐츠 레이아웃을 사용할지, 토런트의 원래 레이아웃을 사용할지, 항상 하위 폴더를 생성할지(qBittorrent 4.3.2+)",
"FailedToFetchSettings": "설정을 가져오는데 실패함",
"FailedToFetchUpdates": "업데이트를 가져오는데 실패함",
"IndexerDownloadClientHelpText": "이 인덱서에서 가져온 것을 가져오는 데 사용되는 다운로드 클라이언트를 지정하세요",
"IndexerSettingsSeedRatioHelpText": "토렌드가 멈추기 전에 도달해야 하는 비율, 비어 있을 경우 다운로드 클라이언트의 기본값을 사용합니다. 비율은 최소 1.0이어야 하며 인덱서 규칙을 따라야 합니다",
"IndexerSettingsSeedTimeHelpText": "토렌드가 중지되기 전에 시드되어야 하는 시간, 비어 있을 경우 다운로드 클라이언트의 기본값을 사용합니다",
"Monitoring": "모니터링 중",
"NoEventsFound": "이벤트가 없음",
"Other": "기타",
"IgnoreDownloadHint": "{appName}가 이 다운로드를 더 이상 처리하지 못하도록 합니다",
"NotificationsSettingsUpdateMapPathsTo": "지도 경로",
"Series": "시리즈",
"IgnoreDownloadsHint": "{appName}가 이러한 다운로드를 더 이상 처리하지 않도록 중지합니다",
"InstallMajorVersionUpdateMessageLink": "상세 내용은 [{domain}]({url})을 확인하세요.",
"AddNewAuthorRootFolderHelpText": "'{folder}' 하위 폴더가 자동으로 생성됩니다",
"AddRootFolder": "루트 폴더 추가"
}

View File

@@ -202,5 +202,12 @@
"Reason": "Sesong",
"Clone": "Lukk",
"AptUpdater": "Bruk apt til å installere oppdateringen",
"BuiltIn": "Bygget inn"
"BuiltIn": "Bygget inn",
"FailedLoadingSearchResults": "Kunne ikke laste søkeresultat, vennligst prøv igjen.",
"IgnoredPlaceHolder": "Legg til ny begrensning",
"RequiredPlaceHolder": "Legg til ny begrensning",
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Kunne ikke legge til ny ekstern stimapping, vennligst prøv igjen.",
"AddNewAuthorRootFolderHelpText": "Undermappa \"{folder}\" vil bli automatisk laget",
"AddRootFolder": "Legg til rotmappe",
"History": "Historikk"
}

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