Compare commits

...

73 Commits

Author SHA1 Message Date
advplyr f3f5f3b9bd Version bump v2.25.1 2025-06-14 17:57:19 -05:00
advplyr b515c6c746 Remove mediaProgresses duplicate check 2025-06-14 17:56:35 -05:00
advplyr 35e196238a Version bump v2.25.0 2025-06-14 17:18:53 -05:00
advplyr 2dc93258f1 Merge pull request #4364 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-06-13 17:32:53 -05:00
thehijacker 5123f7d240 Translated using Weblate (Slovenian)
Currently translated at 100.0% (1107 of 1107 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sl/
2025-06-14 00:29:31 +02:00
Usama Khalil 06d3bd76a8 Translated using Weblate (Arabic)
Currently translated at 100.0% (1107 of 1107 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ar/
2025-06-14 00:29:31 +02:00
Ivan Smoliakov 52196afd99 Translated using Weblate (Russian)
Currently translated at 100.0% (1107 of 1107 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-06-14 00:29:30 +02:00
ugyes 3e44ee6f50 Translated using Weblate (Hungarian)
Currently translated at 100.0% (1107 of 1107 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2025-06-14 00:29:29 +02:00
Максим Горпиніч 9841826e10 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1107 of 1107 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-06-14 00:29:29 +02:00
Dawid Kuźnicki def93d18ec Translated using Weblate (Polish)
Currently translated at 76.9% (850 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-06-14 00:29:28 +02:00
Rekentek 387a3d05b4 Translated using Weblate (Dutch)
Currently translated at 98.5% (1089 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nl/
2025-06-14 00:29:28 +02:00
Daniel Schosser 398d04fc08 Translated using Weblate (German)
Currently translated at 100.0% (1105 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-06-14 00:29:27 +02:00
David Havndrup Munch c5e5e516af Translated using Weblate (Danish)
Currently translated at 98.9% (1093 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2025-06-14 00:29:27 +02:00
Plazec 1c6f99b876 Translated using Weblate (Czech)
Currently translated at 99.7% (1102 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-06-14 00:29:26 +02:00
Grzegorz Orlowski d0af82e71a Translated using Weblate (Polish)
Currently translated at 76.9% (850 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-06-14 00:29:25 +02:00
Usama Khalil 76e7616439 Translated using Weblate (Arabic)
Currently translated at 100.0% (1105 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ar/
2025-06-14 00:29:25 +02:00
max grakov fe99a269bc Translated using Weblate (Russian)
Currently translated at 100.0% (1105 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-06-14 00:29:24 +02:00
thehijacker 5315f65023 Translated using Weblate (Slovenian)
Currently translated at 100.0% (1105 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sl/
2025-06-14 00:29:24 +02:00
Максим Горпиніч c2809808c3 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1105 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-06-14 00:29:23 +02:00
Anders Norman 204ac4f204 Translated using Weblate (Norwegian Bokmål)
Currently translated at 92.6% (1024 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2025-06-14 00:29:22 +02:00
Arieh Kellermann accd5d1096 Translated using Weblate (German)
Currently translated at 100.0% (1105 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-06-14 00:29:22 +02:00
advplyr 5025c6a3ea Merge pull request #4383 from JKubovy/improve-podcast-episode-search
Use fuse.js for podcast episode search
2025-06-13 17:29:13 -05:00
advplyr 6d0d1415e4 Add fuse.basic.min.js in libs instead of full npm package, use lower threshold for quick matching 2025-06-13 17:23:24 -05:00
advplyr 514f5c2409 Merge pull request #4394 from Vito0912/feat/addISBNAudible
Added the ISBN for Audible providers (returned data)
2025-06-13 16:21:32 -05:00
advplyr 2cc58b2c8a Merge pull request #4404 from advplyr/podcast_useragents
Update podcast episode downloads to have a fallback user agent string
2025-06-12 17:40:42 -05:00
advplyr 777a055fcd Update podcast episode downloads to have a fallback user agent string 2025-06-12 17:31:12 -05:00
advplyr b45085d2d6 Update podcast episode download user agent to fix #4401 2025-06-12 17:19:24 -05:00
advplyr 22f6e86a12 Fix pathexists filepath back to posix 2025-06-11 16:37:07 -05:00
advplyr dc6783ea76 Merge pull request #4398 from advplyr/pathexists_user_access
Update pathexists endpoint to check user has access to library
2025-06-11 16:31:14 -05:00
advplyr a6f10ca48e Update upload endpoint to check user has access to library 2025-06-11 16:14:51 -05:00
advplyr aac01d6d9a Update pathexists endpoint to check user has access to library 2025-06-11 16:04:18 -05:00
Vito0912 a617994207 added isbn 2025-06-11 08:12:23 +02:00
advplyr 7a33a412fc Merge pull request #4393 from advplyr/fix_pathexists_join
Fix filesystem pathexists path join
2025-06-10 17:20:23 -05:00
advplyr 0135b3560c Fix filesystem pathexists path join 2025-06-10 17:02:42 -05:00
advplyr 6968a5c02a Merge pull request #4378 from Vito0912/feat/PodcastNots
Notifications for failed rss feeds and disabled rss feeds
2025-06-09 16:25:19 -05:00
advplyr 5e2bb0b12c Fix notification js docs and update description/defaults 2025-06-09 16:21:05 -05:00
advplyr 7122756e58 Update notification description grammar 2025-06-09 15:51:14 -05:00
advplyr 8ecc912c2d Merge pull request #4388 from advplyr/book_author_secondary_sort
Update book library sort by author to use title as secondary sort #4380
2025-06-08 17:38:45 -05:00
advplyr c8cea4e6af Update book library sort by author to use title as secondary sort #4380 2025-06-08 17:28:19 -05:00
advplyr 0c5d05d319 Fix chapter table on audiobook tools page uneven column widths 2025-06-07 17:10:23 -05:00
advplyr 4a3eb7727b Merge pull request #4385 from advplyr/clean_duplicate_mediaprogress
Update cleanDatabase to remove duplicate mediaProgresses
2025-06-06 17:17:43 -05:00
advplyr 81640464ba Update cleanDatabase to remove duplicate mediaProgresses 2025-06-06 17:05:07 -05:00
Jan Kubovy eda7036f70 Use fuse.js for podcast episode search
Replace levenshtein distance with fuse.js fuzzy searching library. Search in episode's title and subtitle
2025-06-06 10:43:52 +00:00
advplyr e669a8d378 Merge pull request #4370 from Vito0912/feat/MaxFailedEpisodeChecks-
Adds ENV for MaxFailedEpisodeChecks
2025-06-05 15:06:27 -05:00
advplyr 8e01859075 Cast PODCAST_DOWNLOAD_TIMEOUT and MAX_FAILED_EPISODE_CHECKS env vars to numbers 2025-06-05 14:31:12 -05:00
Vito0912 f0525d4f0d abc is hard 2025-06-05 14:09:35 +02:00
Vito0912 84c9c6cb50 move to global 2025-06-05 14:07:35 +02:00
Vito0912 346df3680c local strings 2025-06-05 14:02:29 +02:00
Vito0912 6aa7c8a3d8 added notification 2025-06-05 13:34:18 +02:00
advplyr 704c6f7bde Merge pull request #4374 from Vito0912/feat/allowBase64Images
Corrects removing of attachments for Trix
2025-06-04 16:36:46 -05:00
advplyr f01055f6e6 Merge pull request #4373 from Vito0912/feat/maybeFixPodcast
Potential fix/new knowledge for hangig podcasts
2025-06-04 16:33:40 -05:00
Vito0912 759c58d3f7 remove any attachment 2025-06-04 16:38:01 +02:00
Vito0912 357176b301 catch timeout 2025-06-04 16:15:18 +02:00
Vito0912 9bb4dc3ab0 potential fix 2025-06-04 10:58:44 +02:00
Vito0912 709c33f27a ensure proper type 2025-06-04 10:05:16 +02:00
Vito0912 4d846e225a Adds ENV for MaxFailedEpisodeChecks 2025-06-04 10:02:17 +02:00
advplyr 5dc6d613bd Merge pull request #4361 from Vito0912/feat/encoderSettings
Fix: Audiobook m4b advanced encoder ignore
2025-06-02 16:53:28 -05:00
advplyr 63ccdb68f0 Fix m4b encoder backup file overwriting the encoded file when they have the same filename 2025-06-02 16:50:03 -05:00
Vito0912 424ef1aec3 prettier 2 2025-06-02 19:34:25 +02:00
Vito0912 b6995ba5d1 prettier 2025-06-02 19:33:50 +02:00
Vito0912 9968743a93 fix wrong display and ignored values 2025-06-02 19:32:52 +02:00
advplyr c377b57601 Version bump v2.24.0 2025-06-01 16:00:16 -05:00
advplyr 262d0b46e3 Merge pull request #4350 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-06-01 15:40:16 -05:00
Charlie 32fc4f6555 Translated using Weblate (French)
Currently translated at 99.9% (1104 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2025-06-01 15:57:47 +02:00
DR 81572adab6 Translated using Weblate (Hebrew)
Currently translated at 76.4% (845 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/he/
2025-06-01 00:37:34 +02:00
kuci-JK 1ad2e71fd5 Translated using Weblate (Czech)
Currently translated at 98.9% (1093 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-06-01 00:37:33 +02:00
FiendFEARing db66b9eaeb Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1105 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-06-01 00:37:32 +02:00
Simple16 28c2e62e61 Translated using Weblate (Russian)
Currently translated at 100.0% (1105 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-06-01 00:37:32 +02:00
Tommaso Bellandi 96401c377c Translated using Weblate (Italian)
Currently translated at 100.0% (1105 of 1105 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2025-06-01 00:37:31 +02:00
advplyr 9d45880b37 Merge pull request #4355 from advplyr/sanitize_html_description
Sanitize media item & episode description on update
2025-05-31 17:37:18 -05:00
advplyr 9052ceedd3 Sanitize media item & episode description on update 2025-05-31 17:01:58 -05:00
advplyr 4968864498 Fix safari specific issue with line clamp on description #4348 2025-05-30 17:33:15 -05:00
advplyr f44c2d9e11 Merge pull request #4349 from advplyr/trix_prevent_attachments
Update rich text editor to prevent pasting in images from the browser
2025-05-29 17:37:31 -05:00
43 changed files with 567 additions and 153 deletions
+2 -4
View File
@@ -318,10 +318,8 @@ export default {
} }
}, },
handleAttachmentAdd(event) { handleAttachmentAdd(event) {
// Prevent pasting in images from the browser // Prevent pasting in images/any files from the browser
if (!event.attachment.file) { event.attachment.remove()
event.attachment.remove()
}
} }
}, },
mounted() { mounted() {
@@ -143,10 +143,18 @@ export default {
localStorage.setItem('embedMetadataCodec', val) localStorage.setItem('embedMetadataCodec', val)
}, },
getEncodingOptions() { getEncodingOptions() {
return { if (this.showAdvancedView) {
codec: this.selectedCodec || 'aac', return {
bitrate: this.selectedBitrate || '128k', codec: this.customCodec || this.selectedCodec || 'aac',
channels: this.selectedChannels || 2 bitrate: this.customBitrate || this.selectedBitrate || '128k',
channels: this.customChannels || this.selectedChannels || 2
}
} else {
return {
codec: this.selectedCodec || 'aac',
bitrate: this.selectedBitrate || '128k',
channels: this.selectedChannels || 2
}
} }
}, },
setPreset() { setPreset() {
+1 -1
View File
@@ -248,4 +248,4 @@ export default {
transform: scale(0); transform: scale(0);
} }
} }
</style> </style>
@@ -109,4 +109,4 @@ export default {
} }
} }
} }
</script> </script>
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "audiobookshelf-client", "name": "audiobookshelf-client",
"version": "2.23.0", "version": "2.25.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "audiobookshelf-client", "name": "audiobookshelf-client",
"version": "2.23.0", "version": "2.25.1",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@nuxtjs/axios": "^5.13.6", "@nuxtjs/axios": "^5.13.6",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "audiobookshelf-client", "name": "audiobookshelf-client",
"version": "2.23.0", "version": "2.25.1",
"buildNumber": 1, "buildNumber": 1,
"description": "Self-hosted audiobook and podcast client", "description": "Self-hosted audiobook and podcast client",
"main": "index.js", "main": "index.js",
+10 -8
View File
@@ -28,14 +28,14 @@
<div class="flex justify-center flex-wrap lg:flex-nowrap gap-4"> <div class="flex justify-center flex-wrap lg:flex-nowrap gap-4">
<div class="w-full max-w-2xl border border-white/10 bg-bg"> <div class="w-full max-w-2xl border border-white/10 bg-bg">
<div class="flex py-2 px-4"> <div class="flex py-2 px-4">
<div class="w-1/3 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelMetaTag }}</div> <div class="w-28 min-w-28 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelMetaTag }}</div>
<div class="w-2/3 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelValue }}</div> <div class="grow text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelValue }}</div>
</div> </div>
<div class="w-full max-h-72 overflow-auto"> <div class="w-full max-h-72 overflow-auto">
<template v-for="(value, key, index) in metadataObject"> <template v-for="(value, key, index) in metadataObject">
<div :key="key" class="flex py-1 px-4 text-sm" :class="index % 2 === 0 ? 'bg-primary/25' : ''"> <div :key="key" class="flex py-1 px-4 text-sm" :class="index % 2 === 0 ? 'bg-primary/25' : ''">
<div class="w-1/3 font-semibold">{{ key }}</div> <div class="w-28 min-w-28 font-semibold">{{ key }}</div>
<div class="w-2/3"> <div class="grow">
{{ value }} {{ value }}
</div> </div>
</div> </div>
@@ -45,18 +45,18 @@
<div class="w-full max-w-2xl border border-white/10 bg-bg"> <div class="w-full max-w-2xl border border-white/10 bg-bg">
<div class="flex py-2 px-4 bg-primary/25"> <div class="flex py-2 px-4 bg-primary/25">
<div class="grow text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelChapterTitle }}</div> <div class="grow text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelChapterTitle }}</div>
<div class="w-24 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelStart }}</div> <div class="w-16 min-w-16 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelStart }}</div>
<div class="w-24 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelEnd }}</div> <div class="w-16 min-w-16 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelEnd }}</div>
</div> </div>
<div class="w-full max-h-72 overflow-auto"> <div class="w-full max-h-72 overflow-auto">
<p v-if="!metadataChapters.length" class="py-5 text-center text-gray-200">{{ $strings.MessageNoChapters }}</p> <p v-if="!metadataChapters.length" class="py-5 text-center text-gray-200">{{ $strings.MessageNoChapters }}</p>
<template v-for="(chapter, index) in metadataChapters"> <template v-for="(chapter, index) in metadataChapters">
<div :key="index" class="flex py-1 px-4 text-sm" :class="index % 2 === 1 ? 'bg-primary/25' : ''"> <div :key="index" class="flex py-1 px-4 text-sm" :class="index % 2 === 1 ? 'bg-primary/25' : ''">
<div class="grow font-semibold">{{ chapter.title }}</div> <div class="grow font-semibold">{{ chapter.title }}</div>
<div class="w-24"> <div class="w-16 min-w-16">
{{ $secondsToTimestamp(chapter.start) }} {{ $secondsToTimestamp(chapter.start) }}
</div> </div>
<div class="w-24"> <div class="w-16 min-w-16">
{{ $secondsToTimestamp(chapter.end) }} {{ $secondsToTimestamp(chapter.end) }}
</div> </div>
</div> </div>
@@ -356,6 +356,8 @@ export default {
const encodeOptions = this.$refs.encoderOptionsCard.getEncodingOptions() const encodeOptions = this.$refs.encoderOptionsCard.getEncodingOptions()
this.encodingOptions = encodeOptions
const queryParams = new URLSearchParams(encodeOptions) const queryParams = new URLSearchParams(encodeOptions)
this.processing = true this.processing = true
+11
View File
@@ -819,6 +819,17 @@ export default {
-webkit-line-clamp: 4; -webkit-line-clamp: 4;
max-height: calc(6 * 1lh); max-height: calc(6 * 1lh);
} }
/* Safari-specific fix for the description clamping */
@supports (-webkit-touch-callout: none) {
#item-description {
position: relative;
display: block;
overflow: hidden;
max-height: calc(6 * 1lh);
}
}
#item-description.show-full { #item-description.show-full {
-webkit-line-clamp: unset; -webkit-line-clamp: unset;
max-height: 999rem; max-height: 999rem;
+3 -1
View File
@@ -514,7 +514,7 @@
"LabelPublishers": "الناشرون", "LabelPublishers": "الناشرون",
"LabelRSSFeedCustomOwnerEmail": "البريد الالكتروني المخصص للمالك", "LabelRSSFeedCustomOwnerEmail": "البريد الالكتروني المخصص للمالك",
"LabelRSSFeedCustomOwnerName": "الاسم المخصص للمالك", "LabelRSSFeedCustomOwnerName": "الاسم المخصص للمالك",
"LabelRSSFeedOpen": "فتح تغذية RSS", "LabelRSSFeedOpen": "موجز RSS مفتوح",
"LabelRSSFeedPreventIndexing": "منع الفهرسة", "LabelRSSFeedPreventIndexing": "منع الفهرسة",
"LabelRSSFeedSlug": "اسم تعريف تغذية RSS", "LabelRSSFeedSlug": "اسم تعريف تغذية RSS",
"LabelRSSFeedURL": "رابط تغذية RSS", "LabelRSSFeedURL": "رابط تغذية RSS",
@@ -918,6 +918,8 @@
"NotificationOnBackupCompletedDescription": "يتم تشغيله عند اكتمال النسخ الاحتياطي", "NotificationOnBackupCompletedDescription": "يتم تشغيله عند اكتمال النسخ الاحتياطي",
"NotificationOnBackupFailedDescription": "يتم تشغيله عند فشل النسخ الاحتياطي", "NotificationOnBackupFailedDescription": "يتم تشغيله عند فشل النسخ الاحتياطي",
"NotificationOnEpisodeDownloadedDescription": "يتم تشغيله عند تنزيل حلقة بودكاست تلقائيًا", "NotificationOnEpisodeDownloadedDescription": "يتم تشغيله عند تنزيل حلقة بودكاست تلقائيًا",
"NotificationOnRSSFeedDisabledDescription": "يتم تشغيله عندما يتم تعطيل تنزيلات الحلقة التلقائية بسبب الكثير من المحاولات الفاشلة",
"NotificationOnRSSFeedFailedDescription": "يتم تشغيله عند فشل طلب تغذية RSS في تنزيل حلقة تلقائية",
"NotificationOnTestDescription": "حدث لاختبار نظام الإشعارات", "NotificationOnTestDescription": "حدث لاختبار نظام الإشعارات",
"PlaceholderNewCollection": "اسم المجموعة الجديدة", "PlaceholderNewCollection": "اسم المجموعة الجديدة",
"PlaceholderNewFolderPath": "مسار المجلد الجديد", "PlaceholderNewFolderPath": "مسار المجلد الجديد",
+17 -8
View File
@@ -154,7 +154,7 @@
"HeaderListeningSessions": "Poslechové relace", "HeaderListeningSessions": "Poslechové relace",
"HeaderListeningStats": "Statistiky poslechu", "HeaderListeningStats": "Statistiky poslechu",
"HeaderLogin": "Přihlásit", "HeaderLogin": "Přihlásit",
"HeaderLogs": "Záznamy", "HeaderLogs": "Logy",
"HeaderManageGenres": "Spravovat žánry", "HeaderManageGenres": "Spravovat žánry",
"HeaderManageTags": "Spravovat štítky", "HeaderManageTags": "Spravovat štítky",
"HeaderMapDetails": "Podrobnosti mapování", "HeaderMapDetails": "Podrobnosti mapování",
@@ -177,6 +177,7 @@
"HeaderPlaylist": "Seznam skladeb", "HeaderPlaylist": "Seznam skladeb",
"HeaderPlaylistItems": "Položky seznamu přehrávání", "HeaderPlaylistItems": "Položky seznamu přehrávání",
"HeaderPodcastsToAdd": "Podcasty k přidání", "HeaderPodcastsToAdd": "Podcasty k přidání",
"HeaderPresets": "Předvolba",
"HeaderPreviewCover": "Náhled obálky", "HeaderPreviewCover": "Náhled obálky",
"HeaderRSSFeedGeneral": "Podrobnosti o RSS", "HeaderRSSFeedGeneral": "Podrobnosti o RSS",
"HeaderRSSFeedIsOpen": "Informační kanál RSS je otevřený", "HeaderRSSFeedIsOpen": "Informační kanál RSS je otevřený",
@@ -513,9 +514,9 @@
"LabelPublishers": "Vydavatelé", "LabelPublishers": "Vydavatelé",
"LabelRSSFeedCustomOwnerEmail": "Vlastní e-mail vlastníka", "LabelRSSFeedCustomOwnerEmail": "Vlastní e-mail vlastníka",
"LabelRSSFeedCustomOwnerName": "Vlastní jméno vlastníka", "LabelRSSFeedCustomOwnerName": "Vlastní jméno vlastníka",
"LabelRSSFeedOpen": "Otevření RSS kanálu", "LabelRSSFeedOpen": "RSS kanál otevřen",
"LabelRSSFeedPreventIndexing": "Zabránit indexování", "LabelRSSFeedPreventIndexing": "Zabránit indexování",
"LabelRSSFeedSlug": "RSS kanál Slug", "LabelRSSFeedSlug": "Klíčové slovo kanálu RSS",
"LabelRSSFeedURL": "URL RSS kanálu", "LabelRSSFeedURL": "URL RSS kanálu",
"LabelRandomly": "Náhodně", "LabelRandomly": "Náhodně",
"LabelReAddSeriesToContinueListening": "Znovu přidat sérii k pokračování poslechu", "LabelReAddSeriesToContinueListening": "Znovu přidat sérii k pokračování poslechu",
@@ -530,6 +531,7 @@
"LabelReleaseDate": "Datum vydání", "LabelReleaseDate": "Datum vydání",
"LabelRemoveAllMetadataAbs": "Odebrat všechny soubory metadata.abs", "LabelRemoveAllMetadataAbs": "Odebrat všechny soubory metadata.abs",
"LabelRemoveAllMetadataJson": "Smazat všechny soubory metadata.json", "LabelRemoveAllMetadataJson": "Smazat všechny soubory metadata.json",
"LabelRemoveAudibleBranding": "Odebrat úvod a závěr Audible z kapitol",
"LabelRemoveCover": "Odstranit obálku", "LabelRemoveCover": "Odstranit obálku",
"LabelRemoveMetadataFile": "Odstranit soubory metadat ve složkách položek knihovny", "LabelRemoveMetadataFile": "Odstranit soubory metadat ve složkách položek knihovny",
"LabelRemoveMetadataFileHelp": "Odstraníte všechny soubory metadata.json a metadata.abs ve svých složkách {0}.", "LabelRemoveMetadataFileHelp": "Odstraníte všechny soubory metadata.json a metadata.abs ve svých složkách {0}.",
@@ -549,7 +551,7 @@
"LabelSeries": "Série", "LabelSeries": "Série",
"LabelSeriesName": "Název série", "LabelSeriesName": "Název série",
"LabelSeriesProgress": "Průběh série", "LabelSeriesProgress": "Průběh série",
"LabelServerLogLevel": "Úroveň protokolu serveru", "LabelServerLogLevel": "Úroveň Logování serveru",
"LabelServerYearReview": "Přehled roku na serveru ({0})", "LabelServerYearReview": "Přehled roku na serveru ({0})",
"LabelSetEbookAsPrimary": "Nastavit jako primární", "LabelSetEbookAsPrimary": "Nastavit jako primární",
"LabelSetEbookAsSupplementary": "Nastavit jako doplňkové", "LabelSetEbookAsSupplementary": "Nastavit jako doplňkové",
@@ -705,6 +707,8 @@
"LabelYourProgress": "Váš pokrok", "LabelYourProgress": "Váš pokrok",
"MessageAddToPlayerQueue": "Přidat do fronty přehrávače", "MessageAddToPlayerQueue": "Přidat do fronty přehrávače",
"MessageAppriseDescription": "Abyste mohli používat tuto funkci, musíte mít spuštěnou instanci <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> nebo API, které bude zpracovávat stejné požadavky. <br />Adresa URL API Apprise by měla být úplná URL cesta pro odeslání oznámení, např. pokud je vaše instance API obsluhována na adrese <code>http://192.168.1.1:8337</code> pak byste měli zadat <code>http://192.168.1.1:8337/notify</code>.", "MessageAppriseDescription": "Abyste mohli používat tuto funkci, musíte mít spuštěnou instanci <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> nebo API, které bude zpracovávat stejné požadavky. <br />Adresa URL API Apprise by měla být úplná URL cesta pro odeslání oznámení, např. pokud je vaše instance API obsluhována na adrese <code>http://192.168.1.1:8337</code> pak byste měli zadat <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Ujistěte se, že používáte ASIN ze správného regionu Audible a ne z Amazonu.",
"MessageAuthenticationOIDCChangesRestart": "Po uložení restartujte server, aby se změny OIDC použily.",
"MessageBackupsDescription": "Zálohy zahrnují uživatele, průběh uživatele, podrobnosti o položkách knihovny, nastavení serveru a obrázky uložené v <code>/metadata/items</code> a <code>/metadata/authors</code>. Zálohy <strong>ne</strong> zahrnují všechny soubory uložené ve složkách knihovny.", "MessageBackupsDescription": "Zálohy zahrnují uživatele, průběh uživatele, podrobnosti o položkách knihovny, nastavení serveru a obrázky uložené v <code>/metadata/items</code> a <code>/metadata/authors</code>. Zálohy <strong>ne</strong> zahrnují všechny soubory uložené ve složkách knihovny.",
"MessageBackupsLocationEditNote": "Poznámka: Změna umístění záloh nepřesune ani nezmění existující zálohy", "MessageBackupsLocationEditNote": "Poznámka: Změna umístění záloh nepřesune ani nezmění existující zálohy",
"MessageBackupsLocationNoEditNote": "Poznámka: Umístění záloh je nastavené z proměnných prostředí a nelze zde změnit.", "MessageBackupsLocationNoEditNote": "Poznámka: Umístění záloh je nastavené z proměnných prostředí a nelze zde změnit.",
@@ -723,6 +727,7 @@
"MessageChapterErrorStartGteDuration": "Neplatný čas začátku, musí být kratší než doba trvání audioknihy", "MessageChapterErrorStartGteDuration": "Neplatný čas začátku, musí být kratší než doba trvání audioknihy",
"MessageChapterErrorStartLtPrev": "Neplatný čas začátku, musí být větší nebo roven času začátku předchozí kapitoly", "MessageChapterErrorStartLtPrev": "Neplatný čas začátku, musí být větší nebo roven času začátku předchozí kapitoly",
"MessageChapterStartIsAfter": "Začátek kapitoly přesahuje konec audioknihy", "MessageChapterStartIsAfter": "Začátek kapitoly přesahuje konec audioknihy",
"MessageChaptersNotFound": "Kapitoly nenalezeny",
"MessageCheckingCron": "Kontrola cronu...", "MessageCheckingCron": "Kontrola cronu...",
"MessageConfirmCloseFeed": "Opravdu chcete zavřít tento kanál?", "MessageConfirmCloseFeed": "Opravdu chcete zavřít tento kanál?",
"MessageConfirmDeleteBackup": "Opravdu chcete smazat zálohu pro {0}?", "MessageConfirmDeleteBackup": "Opravdu chcete smazat zálohu pro {0}?",
@@ -779,12 +784,13 @@
"MessageForceReScanDescription": "znovu prohledá všechny soubory jako při novém skenování. ID3 tagy zvukových souborů OPF soubory a textové soubory budou skenovány jako nové.", "MessageForceReScanDescription": "znovu prohledá všechny soubory jako při novém skenování. ID3 tagy zvukových souborů OPF soubory a textové soubory budou skenovány jako nové.",
"MessageImportantNotice": "Důležité upozornění!", "MessageImportantNotice": "Důležité upozornění!",
"MessageInsertChapterBelow": "Vložit kapitolu níže", "MessageInsertChapterBelow": "Vložit kapitolu níže",
"MessageInvalidAsin": "Neplatný ASIN",
"MessageItemsSelected": "{0} vybraných položek", "MessageItemsSelected": "{0} vybraných položek",
"MessageItemsUpdated": "{0} položky byly aktualizovány", "MessageItemsUpdated": "{0} položky byly aktualizovány",
"MessageJoinUsOn": "Přidejte se k nám", "MessageJoinUsOn": "Přidejte se k nám",
"MessageLoading": "Načítá se...", "MessageLoading": "Načítá se...",
"MessageLoadingFolders": "Načítám složky...", "MessageLoadingFolders": "Načítám složky...",
"MessageLogsDescription": "Protokoly se ukládají do souborů JSON v <code>/metadata/logs</code>. Protokoly o pádech jsou uloženy v <code>/metadata/logs/crash_logs.txt</code>.", "MessageLogsDescription": "Logy se ukládají do souborů JSON v <code>/metadata/logs</code>. Logy o pádech jsou uloženy v <code>/metadata/logs/crash_logs.txt</code>.",
"MessageM4BFailed": "M4B se nezdařil!", "MessageM4BFailed": "M4B se nezdařil!",
"MessageM4BFinished": "M4B dokončen!", "MessageM4BFinished": "M4B dokončen!",
"MessageMapChapterTitles": "Mapování názvů kapitol ke stávajícím kapitolám audioknihy bez úpravy časových razítek", "MessageMapChapterTitles": "Mapování názvů kapitol ke stávajícím kapitolám audioknihy bez úpravy časových razítek",
@@ -808,11 +814,11 @@
"MessageNoEpisodes": "Žádné epizody", "MessageNoEpisodes": "Žádné epizody",
"MessageNoFoldersAvailable": "Nejsou k dispozici žádné složky", "MessageNoFoldersAvailable": "Nejsou k dispozici žádné složky",
"MessageNoGenres": "Žádné žánry", "MessageNoGenres": "Žádné žánry",
"MessageNoIssues": "Žádné výtisk", "MessageNoIssues": "Žádné problémy",
"MessageNoItems": "Žádné položky", "MessageNoItems": "Žádné položky",
"MessageNoItemsFound": "Nebyly nalezeny žádné položky", "MessageNoItemsFound": "Nebyly nalezeny žádné položky",
"MessageNoListeningSessions": "Žádné poslechové relace", "MessageNoListeningSessions": "Žádné poslechové relace",
"MessageNoLogs": "Žádné protokoly", "MessageNoLogs": "Žádné logy",
"MessageNoMediaProgress": "Žádný průběh médií", "MessageNoMediaProgress": "Žádný průběh médií",
"MessageNoNotifications": "Žádná oznámení", "MessageNoNotifications": "Žádná oznámení",
"MessageNoPodcastFeed": "Neplatný podcast: Žádný kanál", "MessageNoPodcastFeed": "Neplatný podcast: Žádný kanál",
@@ -850,6 +856,7 @@
"MessageScheduleRunEveryWeekdayAtTime": "Spusť každý {0} v {1}", "MessageScheduleRunEveryWeekdayAtTime": "Spusť každý {0} v {1}",
"MessageSearchResultsFor": "Výsledky hledání pro", "MessageSearchResultsFor": "Výsledky hledání pro",
"MessageSelected": "{0} vybráno", "MessageSelected": "{0} vybráno",
"MessageSeriesSequenceCannotContainSpaces": "Sekvence série nesmí obsahovat mezery",
"MessageServerCouldNotBeReached": "Server je nedostupný", "MessageServerCouldNotBeReached": "Server je nedostupný",
"MessageSetChaptersFromTracksDescription": "Nastavit kapitoly jako kapitolu a název kapitoly jako název zvukového souboru", "MessageSetChaptersFromTracksDescription": "Nastavit kapitoly jako kapitolu a název kapitoly jako název zvukového souboru",
"MessageShareExpirationWillBe": "Expiruje <strong>{0}</strong>", "MessageShareExpirationWillBe": "Expiruje <strong>{0}</strong>",
@@ -968,6 +975,8 @@
"ToastCachePurgeFailed": "Nepodařilo se vyčistit mezipaměť", "ToastCachePurgeFailed": "Nepodařilo se vyčistit mezipaměť",
"ToastCachePurgeSuccess": "Vyrovnávací paměť úspěšně vyčištěna", "ToastCachePurgeSuccess": "Vyrovnávací paměť úspěšně vyčištěna",
"ToastChaptersHaveErrors": "Kapitoly obsahují chyby", "ToastChaptersHaveErrors": "Kapitoly obsahují chyby",
"ToastChaptersInvalidShiftAmountLast": "Nesprávná délka posunu. Čas začátku poslední kapitoly by přesáhl dobu trvání této audioknihy.",
"ToastChaptersInvalidShiftAmountStart": "Nesprávná délka posunu. První kapitola by měla nulovou nebo zápornou délku a byla by přepsána druhou kapitolou. Zvětšete počáteční délku druhé kapitoly.",
"ToastChaptersMustHaveTitles": "Kapitoly musí mít názvy", "ToastChaptersMustHaveTitles": "Kapitoly musí mít názvy",
"ToastChaptersRemoved": "Kapitoly odstraněny", "ToastChaptersRemoved": "Kapitoly odstraněny",
"ToastChaptersUpdated": "Kapitola aktualizována", "ToastChaptersUpdated": "Kapitola aktualizována",
@@ -1088,7 +1097,7 @@
"ToastUnlinkOpenIdFailed": "Chyba při odpárování uživatele z OpenID", "ToastUnlinkOpenIdFailed": "Chyba při odpárování uživatele z OpenID",
"ToastUnlinkOpenIdSuccess": "Uživatel odpárován z uživatele z OpenID", "ToastUnlinkOpenIdSuccess": "Uživatel odpárován z uživatele z OpenID",
"ToastUploaderFilepathExistsError": "Soubor \"{0}\" na serveru již existuje", "ToastUploaderFilepathExistsError": "Soubor \"{0}\" na serveru již existuje",
"ToastUploaderItemExistsInSubdirectoryError": "Položka \"{0}\" používá podsložku nahrávané cesty.", "ToastUploaderItemExistsInSubdirectoryError": "Položka \"{0}\" používá podadresář cesty pro nahrání.",
"ToastUserDeleteFailed": "Nepodařilo se smazat uživatele", "ToastUserDeleteFailed": "Nepodařilo se smazat uživatele",
"ToastUserDeleteSuccess": "Uživatel smazán", "ToastUserDeleteSuccess": "Uživatel smazán",
"ToastUserPasswordChangeSuccess": "Heslo bylo změněno úspěšně", "ToastUserPasswordChangeSuccess": "Heslo bylo změněno úspěšně",
+1 -1
View File
@@ -513,7 +513,7 @@
"LabelPublishers": "Forlag", "LabelPublishers": "Forlag",
"LabelRSSFeedCustomOwnerEmail": "Brugerdefineret ejerens e-mail", "LabelRSSFeedCustomOwnerEmail": "Brugerdefineret ejerens e-mail",
"LabelRSSFeedCustomOwnerName": "Brugerdefineret ejerens navn", "LabelRSSFeedCustomOwnerName": "Brugerdefineret ejerens navn",
"LabelRSSFeedOpen": "Åben RSS-feed", "LabelRSSFeedOpen": "RSS-feed åbent",
"LabelRSSFeedPreventIndexing": "Forhindrer indeksering", "LabelRSSFeedPreventIndexing": "Forhindrer indeksering",
"LabelRSSFeedSlug": "RSS-feed-slug", "LabelRSSFeedSlug": "RSS-feed-slug",
"LabelRSSFeedURL": "RSS-feed-URL", "LabelRSSFeedURL": "RSS-feed-URL",
+2 -2
View File
@@ -514,7 +514,7 @@
"LabelPublishers": "Herausgeber", "LabelPublishers": "Herausgeber",
"LabelRSSFeedCustomOwnerEmail": "Benutzerdefinierte Eigentümer-E-Mail", "LabelRSSFeedCustomOwnerEmail": "Benutzerdefinierte Eigentümer-E-Mail",
"LabelRSSFeedCustomOwnerName": "Benutzerdefinierter Name des Eigentümers", "LabelRSSFeedCustomOwnerName": "Benutzerdefinierter Name des Eigentümers",
"LabelRSSFeedOpen": "RSS Feed offen", "LabelRSSFeedOpen": "RSS Feed öffnen",
"LabelRSSFeedPreventIndexing": "Indizierung verhindern", "LabelRSSFeedPreventIndexing": "Indizierung verhindern",
"LabelRSSFeedSlug": "RSS-Feed-Schlagwort", "LabelRSSFeedSlug": "RSS-Feed-Schlagwort",
"LabelRSSFeedURL": "RSS-Feed-URL", "LabelRSSFeedURL": "RSS-Feed-URL",
@@ -858,7 +858,7 @@
"MessageSelected": "{0} ausgewählt", "MessageSelected": "{0} ausgewählt",
"MessageSeriesSequenceCannotContainSpaces": "Serie Abfolge kann keine Leerzeichen enthalten", "MessageSeriesSequenceCannotContainSpaces": "Serie Abfolge kann keine Leerzeichen enthalten",
"MessageServerCouldNotBeReached": "Server kann nicht erreicht werden", "MessageServerCouldNotBeReached": "Server kann nicht erreicht werden",
"MessageSetChaptersFromTracksDescription": "Kaitelerstellung basiert auf den existierenden einzelnen Audiodateien. Pro existierende Audiodatei wird 1 Kapitel erstellt, wobei deren Kapitelname aus dem Audiodateinamen extrahiert wird", "MessageSetChaptersFromTracksDescription": "Kapitelerstellung basiert auf den existierenden einzelnen Audiodateien. Pro existierende Audiodatei wird 1 Kapitel erstellt, wobei deren Kapitelname aus dem Audiodateinamen extrahiert wird",
"MessageShareExpirationWillBe": "Läuft am <strong>{0}</strong> ab", "MessageShareExpirationWillBe": "Läuft am <strong>{0}</strong> ab",
"MessageShareExpiresIn": "Läuft in {0} ab", "MessageShareExpiresIn": "Läuft in {0} ab",
"MessageShareURLWillBe": "Der Freigabe Link wird <strong>{0}</strong> sein", "MessageShareURLWillBe": "Der Freigabe Link wird <strong>{0}</strong> sein",
+2
View File
@@ -918,6 +918,8 @@
"NotificationOnBackupCompletedDescription": "Triggered when a backup is completed", "NotificationOnBackupCompletedDescription": "Triggered when a backup is completed",
"NotificationOnBackupFailedDescription": "Triggered when a backup fails", "NotificationOnBackupFailedDescription": "Triggered when a backup fails",
"NotificationOnEpisodeDownloadedDescription": "Triggered when a podcast episode is auto-downloaded", "NotificationOnEpisodeDownloadedDescription": "Triggered when a podcast episode is auto-downloaded",
"NotificationOnRSSFeedDisabledDescription": "Triggered when automatic episode downloads are disabled due to too many failed attempts",
"NotificationOnRSSFeedFailedDescription": "Triggered when the RSS feed request fails for an automatic episode download",
"NotificationOnTestDescription": "Event for testing the notification system", "NotificationOnTestDescription": "Event for testing the notification system",
"PlaceholderNewCollection": "New collection name", "PlaceholderNewCollection": "New collection name",
"PlaceholderNewFolderPath": "New folder path", "PlaceholderNewFolderPath": "New folder path",
+8
View File
@@ -530,6 +530,7 @@
"LabelReleaseDate": "Date de parution", "LabelReleaseDate": "Date de parution",
"LabelRemoveAllMetadataAbs": "Supprimer tous les fichiers metadata.abs", "LabelRemoveAllMetadataAbs": "Supprimer tous les fichiers metadata.abs",
"LabelRemoveAllMetadataJson": "Supprimer tous les fichiers metadata.json", "LabelRemoveAllMetadataJson": "Supprimer tous les fichiers metadata.json",
"LabelRemoveAudibleBranding": "Supprimer lintro et la fin Audible des chapitres",
"LabelRemoveCover": "Supprimer la couverture", "LabelRemoveCover": "Supprimer la couverture",
"LabelRemoveMetadataFile": "Supprimer les fichiers de métadonnées dans les dossiers des éléments de la bibliothèque", "LabelRemoveMetadataFile": "Supprimer les fichiers de métadonnées dans les dossiers des éléments de la bibliothèque",
"LabelRemoveMetadataFileHelp": "Supprimer tous les fichiers metadata.json et metadata.abs de vos dossiers {0}.", "LabelRemoveMetadataFileHelp": "Supprimer tous les fichiers metadata.json et metadata.abs de vos dossiers {0}.",
@@ -705,6 +706,8 @@
"LabelYourProgress": "Votre progression", "LabelYourProgress": "Votre progression",
"MessageAddToPlayerQueue": "Ajouter en file dattente", "MessageAddToPlayerQueue": "Ajouter en file dattente",
"MessageAppriseDescription": "Nécessite une instance d<a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API Apprise</a> pour utiliser cette fonctionnalité ou une api qui prend en charge les mêmes requêtes.<br />LURL de lAPI Apprise doit comprendre le chemin complet pour envoyer la notification. Par exemple, si votre instance écoute sur <code>http://192.168.1.1:8337</code> alors vous devez mettre <code>http://192.168.1.1:8337/notify</code>.", "MessageAppriseDescription": "Nécessite une instance d<a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API Apprise</a> pour utiliser cette fonctionnalité ou une api qui prend en charge les mêmes requêtes.<br />LURL de lAPI Apprise doit comprendre le chemin complet pour envoyer la notification. Par exemple, si votre instance écoute sur <code>http://192.168.1.1:8337</code> alors vous devez mettre <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Assurez-vous dutiliser lASIN de la bonne région Audible, et non dAmazon.",
"MessageAuthenticationOIDCChangesRestart": "Redémarrez votre serveur après avoir enregistré pour appliquer les modifications OIDC.",
"MessageBackupsDescription": "Les sauvegardes incluent les utilisateurs, la progression des utilisateurs, les détails des éléments de la bibliothèque, les paramètres du serveur et les images stockées dans <code>/metadata/items</code> & <code>/metadata/authors</code>. Les sauvegardes <strong>nincluent pas</strong> les fichiers stockés dans les dossiers de votre bibliothèque.", "MessageBackupsDescription": "Les sauvegardes incluent les utilisateurs, la progression des utilisateurs, les détails des éléments de la bibliothèque, les paramètres du serveur et les images stockées dans <code>/metadata/items</code> & <code>/metadata/authors</code>. Les sauvegardes <strong>nincluent pas</strong> les fichiers stockés dans les dossiers de votre bibliothèque.",
"MessageBackupsLocationEditNote": "Remarque: Mettre à jour l'emplacement de sauvegarde ne déplacera pas ou ne modifiera pas les sauvegardes existantes", "MessageBackupsLocationEditNote": "Remarque: Mettre à jour l'emplacement de sauvegarde ne déplacera pas ou ne modifiera pas les sauvegardes existantes",
"MessageBackupsLocationNoEditNote": "Remarque: lemplacement de sauvegarde est défini via une variable denvironnement et ne peut pas être modifié ici.", "MessageBackupsLocationNoEditNote": "Remarque: lemplacement de sauvegarde est défini via une variable denvironnement et ne peut pas être modifié ici.",
@@ -723,6 +726,7 @@
"MessageChapterErrorStartGteDuration": "Horodatage invalide car il doit débuter avant la fin du livre", "MessageChapterErrorStartGteDuration": "Horodatage invalide car il doit débuter avant la fin du livre",
"MessageChapterErrorStartLtPrev": "Horodatage invalide car il doit débuter au moins après le précédent chapitre", "MessageChapterErrorStartLtPrev": "Horodatage invalide car il doit débuter au moins après le précédent chapitre",
"MessageChapterStartIsAfter": "Le premier chapitre est situé au début de votre livre audio", "MessageChapterStartIsAfter": "Le premier chapitre est situé au début de votre livre audio",
"MessageChaptersNotFound": "Chapitres non trouvés",
"MessageCheckingCron": "Vérification du cron…", "MessageCheckingCron": "Vérification du cron…",
"MessageConfirmCloseFeed": "Êtes-vous sûr·e de vouloir fermer ce flux?", "MessageConfirmCloseFeed": "Êtes-vous sûr·e de vouloir fermer ce flux?",
"MessageConfirmDeleteBackup": "Êtes-vous sûr·e de vouloir supprimer la sauvegarde de « {0} » ?", "MessageConfirmDeleteBackup": "Êtes-vous sûr·e de vouloir supprimer la sauvegarde de « {0} » ?",
@@ -779,6 +783,7 @@
"MessageForceReScanDescription": "analysera de nouveau tous les fichiers. Les étiquettes ID3 des fichiers audio, les fichiers OPF et les fichiers texte seront analysés comme sils étaient nouveaux.", "MessageForceReScanDescription": "analysera de nouveau tous les fichiers. Les étiquettes ID3 des fichiers audio, les fichiers OPF et les fichiers texte seront analysés comme sils étaient nouveaux.",
"MessageImportantNotice": "Information importante !", "MessageImportantNotice": "Information importante !",
"MessageInsertChapterBelow": "Insérer le chapitre ci-dessous", "MessageInsertChapterBelow": "Insérer le chapitre ci-dessous",
"MessageInvalidAsin": "ASIN invalide",
"MessageItemsSelected": "{0} éléments sélectionnés", "MessageItemsSelected": "{0} éléments sélectionnés",
"MessageItemsUpdated": "{0} éléments mis à jour", "MessageItemsUpdated": "{0} éléments mis à jour",
"MessageJoinUsOn": "Rejoignez-nous sur", "MessageJoinUsOn": "Rejoignez-nous sur",
@@ -850,6 +855,7 @@
"MessageScheduleRunEveryWeekdayAtTime": "Exécuté tous les {0} à {1}", "MessageScheduleRunEveryWeekdayAtTime": "Exécuté tous les {0} à {1}",
"MessageSearchResultsFor": "Résultats de recherche pour", "MessageSearchResultsFor": "Résultats de recherche pour",
"MessageSelected": "{0} sélectionnés", "MessageSelected": "{0} sélectionnés",
"MessageSeriesSequenceCannotContainSpaces": "La séquence de séries ne peut pas contenir despaces",
"MessageServerCouldNotBeReached": "Serveur inaccessible", "MessageServerCouldNotBeReached": "Serveur inaccessible",
"MessageSetChaptersFromTracksDescription": "Positionne un chapitre par fichier audio, avec le titre du fichier comme titre de chapitre", "MessageSetChaptersFromTracksDescription": "Positionne un chapitre par fichier audio, avec le titre du fichier comme titre de chapitre",
"MessageShareExpirationWillBe": "Expire le <strong>{0}</strong>", "MessageShareExpirationWillBe": "Expire le <strong>{0}</strong>",
@@ -968,6 +974,8 @@
"ToastCachePurgeFailed": "Échec de la purge du cache", "ToastCachePurgeFailed": "Échec de la purge du cache",
"ToastCachePurgeSuccess": "Cache purgé avec succès", "ToastCachePurgeSuccess": "Cache purgé avec succès",
"ToastChaptersHaveErrors": "Les chapitres contiennent des erreurs", "ToastChaptersHaveErrors": "Les chapitres contiennent des erreurs",
"ToastChaptersInvalidShiftAmountLast": "Durée de décalage non valide. Lheure de début du dernier chapitre pourrait dépasser la durée de ce livre audio.",
"ToastChaptersInvalidShiftAmountStart": "Durée de décalage non valide. Le premier chapitre aurait une longueur nulle ou négative et serait écrasé par le second. Augmentez la durée de début du second chapitre.",
"ToastChaptersMustHaveTitles": "Les chapitre doivent avoir un titre", "ToastChaptersMustHaveTitles": "Les chapitre doivent avoir un titre",
"ToastChaptersRemoved": "Chapitres supprimés", "ToastChaptersRemoved": "Chapitres supprimés",
"ToastChaptersUpdated": "Chapitres mis à jour", "ToastChaptersUpdated": "Chapitres mis à jour",
+118 -48
View File
@@ -10,6 +10,8 @@
"ButtonApplyChapters": "החל פרקים", "ButtonApplyChapters": "החל פרקים",
"ButtonAuthors": "סופרים", "ButtonAuthors": "סופרים",
"ButtonBack": "חזור", "ButtonBack": "חזור",
"ButtonBatchEditPopulateFromExisting": "מלא משדות קיימים",
"ButtonBatchEditPopulateMapDetails": "מלא פרטי מפה",
"ButtonBrowseForFolder": "עיין בתיקייה", "ButtonBrowseForFolder": "עיין בתיקייה",
"ButtonCancel": "ביטול", "ButtonCancel": "ביטול",
"ButtonCancelEncode": "בטל קידוד", "ButtonCancelEncode": "בטל קידוד",
@@ -29,7 +31,9 @@
"ButtonEdit": "ערוך", "ButtonEdit": "ערוך",
"ButtonEditChapters": "ערוך פרקים", "ButtonEditChapters": "ערוך פרקים",
"ButtonEditPodcast": "ערוך פודקאסט", "ButtonEditPodcast": "ערוך פודקאסט",
"ButtonEnable": "הפעל", "ButtonEnable": "אפשר",
"ButtonFireAndFail": "שלח בכישלון",
"ButtonFireOnTest": "שלח באירוע בדיקה",
"ButtonForceReScan": "סרוק מחדש בכוח", "ButtonForceReScan": "סרוק מחדש בכוח",
"ButtonFullPath": "נתיב מלא", "ButtonFullPath": "נתיב מלא",
"ButtonHide": "הסתר", "ButtonHide": "הסתר",
@@ -37,7 +41,7 @@
"ButtonIssues": "תקלות", "ButtonIssues": "תקלות",
"ButtonJumpBackward": "דלג אחורה", "ButtonJumpBackward": "דלג אחורה",
"ButtonJumpForward": "דלג קדימה", "ButtonJumpForward": "דלג קדימה",
"ButtonLatest": "חדש ביותר", "ButtonLatest": "אחרון",
"ButtonLibrary": "ספרייה", "ButtonLibrary": "ספרייה",
"ButtonLogout": "התנתק", "ButtonLogout": "התנתק",
"ButtonLookup": "חפש", "ButtonLookup": "חפש",
@@ -70,7 +74,7 @@
"ButtonReScan": "סרוק מחדש", "ButtonReScan": "סרוק מחדש",
"ButtonRead": "קרא", "ButtonRead": "קרא",
"ButtonReadLess": "קרא פחות", "ButtonReadLess": "קרא פחות",
"ButtonReadMore": "קרא יותר", "ButtonReadMore": "קרא עוד",
"ButtonRefresh": "רענן", "ButtonRefresh": "רענן",
"ButtonRemove": "הסר", "ButtonRemove": "הסר",
"ButtonRemoveAll": "הסר הכל", "ButtonRemoveAll": "הסר הכל",
@@ -86,7 +90,9 @@
"ButtonSaveTracklist": "שמור רשימת רצועות", "ButtonSaveTracklist": "שמור רשימת רצועות",
"ButtonScan": "סרוק", "ButtonScan": "סרוק",
"ButtonScanLibrary": "סרוק ספרייה", "ButtonScanLibrary": "סרוק ספרייה",
"ButtonSearch": "חפש", "ButtonScrollLeft": "גלול שמאלה",
"ButtonScrollRight": "גלול ימינה",
"ButtonSearch": "חיפוש",
"ButtonSelectFolderPath": "בחר נתיב לתיקייה", "ButtonSelectFolderPath": "בחר נתיב לתיקייה",
"ButtonSeries": "סדרה", "ButtonSeries": "סדרה",
"ButtonSetChaptersFromTracks": "קבע פרקים לפי הרצועות", "ButtonSetChaptersFromTracks": "קבע פרקים לפי הרצועות",
@@ -96,7 +102,7 @@
"ButtonStartM4BEncode": "התחל קידוד M4B", "ButtonStartM4BEncode": "התחל קידוד M4B",
"ButtonStartMetadataEmbed": "התחל הטמעת מטא-נתונים", "ButtonStartMetadataEmbed": "התחל הטמעת מטא-נתונים",
"ButtonStats": "סטטיסטיקות", "ButtonStats": "סטטיסטיקות",
"ButtonSubmit": "שלח", "ButtonSubmit": "שליחה",
"ButtonTest": "בדיקה", "ButtonTest": "בדיקה",
"ButtonUnlinkOpenId": "נתק OpenID", "ButtonUnlinkOpenId": "נתק OpenID",
"ButtonUpload": "העלה", "ButtonUpload": "העלה",
@@ -122,26 +128,26 @@
"HeaderChapters": "פרקים", "HeaderChapters": "פרקים",
"HeaderChooseAFolder": "בחר תיקייה", "HeaderChooseAFolder": "בחר תיקייה",
"HeaderCollection": "אוסף", "HeaderCollection": "אוסף",
"HeaderCollectionItems": "פריטי אוסף", "HeaderCollectionItems": "פרטי אוסף",
"HeaderCover": "כריכה", "HeaderCover": "כריכה",
"HeaderCurrentDownloads": "הורדות נוכחיות", "HeaderCurrentDownloads": "הורדות נוכחיות",
"HeaderCustomMessageOnLogin": "הודעה מותאמת אישית בהתחברות", "HeaderCustomMessageOnLogin": "הודעה מותאמת אישית בהתחברות",
"HeaderCustomMetadataProviders": "ספקי מטא-נתונים מותאמים אישית", "HeaderCustomMetadataProviders": "ספקי מטא-נתונים מותאמים אישית",
"HeaderDetails": "פרטים", "HeaderDetails": "פרטים",
"HeaderDownloadQueue": "תור הורדה", "HeaderDownloadQueue": "תור הורדה",
"HeaderEbookFiles": "קבצי ספר אלקטרוני", "HeaderEbookFiles": "קבצי Ebook",
"HeaderEmail": "אימייל", "HeaderEmail": "אימייל",
"HeaderEmailSettings": "הגדרות אימייל", "HeaderEmailSettings": "הגדרות אימייל",
"HeaderEpisodes": "פרקים", "HeaderEpisodes": "פרקים",
"HeaderEreaderDevices": "התקני קריאה דיגיטליים", "HeaderEreaderDevices": "התקני קריאה דיגיטליים",
"HeaderEreaderSettings": "הגדרות התקני קריאה דיגיטליים", "HeaderEreaderSettings": "הגדרות קורא אלקטרוני",
"HeaderFiles": "קבצים", "HeaderFiles": "קבצים",
"HeaderFindChapters": "מצא פרקים", "HeaderFindChapters": "מצא פרקים",
"HeaderIgnoredFiles": "קבצים שנתעלמו", "HeaderIgnoredFiles": "קבצים שנתעלמו",
"HeaderItemFiles": "קבצי פריט", "HeaderItemFiles": "קבצי פריט",
"HeaderItemMetadataUtils": "כלי מטא-נתונים", "HeaderItemMetadataUtils": "כלי מטא-נתונים",
"HeaderLastListeningSession": "הפעלת האזנה אחרונה", "HeaderLastListeningSession": "הפעלת האזנה אחרונה",
"HeaderLatestEpisodes": "הפרקים העדכניים ביותר", "HeaderLatestEpisodes": "פרקים אחרונים",
"HeaderLibraries": "ספריות", "HeaderLibraries": "ספריות",
"HeaderLibraryFiles": "קבצי ספרייה", "HeaderLibraryFiles": "קבצי ספרייה",
"HeaderLibraryStats": "סטטיסטיקות ספרייה", "HeaderLibraryStats": "סטטיסטיקות ספרייה",
@@ -171,8 +177,9 @@
"HeaderPlaylist": "רשימת השמעה", "HeaderPlaylist": "רשימת השמעה",
"HeaderPlaylistItems": "פריטי רשימת השמעה", "HeaderPlaylistItems": "פריטי רשימת השמעה",
"HeaderPodcastsToAdd": "פודקאסטים להוספה", "HeaderPodcastsToAdd": "פודקאסטים להוספה",
"HeaderPresets": "קביעות מוגדרות מראש",
"HeaderPreviewCover": "תצוגה מקדימה של כריכה", "HeaderPreviewCover": "תצוגה מקדימה של כריכה",
"HeaderRSSFeedGeneral": "פרטי ערוץ RSS", "HeaderRSSFeedGeneral": "פרטי RSS",
"HeaderRSSFeedIsOpen": "ערוץ RSS פתוח", "HeaderRSSFeedIsOpen": "ערוץ RSS פתוח",
"HeaderRSSFeeds": "ערוצי RSS", "HeaderRSSFeeds": "ערוצי RSS",
"HeaderRemoveEpisode": "הסר פרק", "HeaderRemoveEpisode": "הסר פרק",
@@ -188,14 +195,15 @@
"HeaderSettingsExperimental": "תכונות ניסיוניות", "HeaderSettingsExperimental": "תכונות ניסיוניות",
"HeaderSettingsGeneral": "כללי", "HeaderSettingsGeneral": "כללי",
"HeaderSettingsScanner": "סורק", "HeaderSettingsScanner": "סורק",
"HeaderSettingsWebClient": "מערך",
"HeaderSleepTimer": "טיימר שינה", "HeaderSleepTimer": "טיימר שינה",
"HeaderStatsLargestItems": "הפריטים הגדולים ביותר", "HeaderStatsLargestItems": "הפריטים הגדולים ביותר",
"HeaderStatsLongestItems": "הפריטים הארוכים ביותר (בשעות)", "HeaderStatsLongestItems": "הפריטים הארוכים ביותר (בשעות)",
"HeaderStatsMinutesListeningChart": "דקות האזנה (בימים האחרונים)", "HeaderStatsMinutesListeningChart": "דקות האזנה (7 ימים אחרונים)",
"HeaderStatsRecentSessions": פעלות אחרונות", "HeaderStatsRecentSessions": אזנות אחרונות",
"HeaderStatsTop10Authors": "10 היוצרים המובילים", "HeaderStatsTop10Authors": "10 היוצרים המובילים",
"HeaderStatsTop5Genres": "הז'אנרים המובילים 5", "HeaderStatsTop5Genres": "הז'אנרים המובילים 5",
"HeaderTableOfContents": "תוכן העניינים", "HeaderTableOfContents": "תוכן עניינים",
"HeaderTools": "כלים", "HeaderTools": "כלים",
"HeaderUpdateAccount": "עדכן חשבון", "HeaderUpdateAccount": "עדכן חשבון",
"HeaderUpdateAuthor": "עדכן יוצר", "HeaderUpdateAuthor": "עדכן יוצר",
@@ -212,15 +220,17 @@
"LabelAccountTypeAdmin": "מנהל", "LabelAccountTypeAdmin": "מנהל",
"LabelAccountTypeGuest": "אורח", "LabelAccountTypeGuest": "אורח",
"LabelAccountTypeUser": "משתמש", "LabelAccountTypeUser": "משתמש",
"LabelActivities": "פעילויות",
"LabelActivity": "פעילות", "LabelActivity": "פעילות",
"LabelAddToCollection": "הוסף לאוסף", "LabelAddToCollection": "הוסף לאוסף",
"LabelAddToCollectionBatch": "הוסף {0} ספרים לאוסף", "LabelAddToCollectionBatch": "הוסף {0} ספרים לאוסף",
"LabelAddToPlaylist": "הוסף לרשימת השמעה", "LabelAddToPlaylist": "הוסף לרשימת השמעה",
"LabelAddToPlaylistBatch": "הוסף {0} פריטים לרשימת השמעה", "LabelAddToPlaylistBatch": "הוסף {0} פריטים לרשימת השמעה",
"LabelAddedAt": "נוסף בתאריך", "LabelAddedAt": "נוסף ב-",
"LabelAddedDate": "נוסף ב-{0}", "LabelAddedDate": "נוסף ב-{0}",
"LabelAdminUsersOnly": "רק מנהלים", "LabelAdminUsersOnly": "רק מנהלים",
"LabelAll": "הכל", "LabelAll": "הכל",
"LabelAllEpisodesDownloaded": "כל הפרקים הורדו",
"LabelAllUsers": "כל המשתמשים", "LabelAllUsers": "כל המשתמשים",
"LabelAllUsersExcludingGuests": "כל המשתמשים, ללא אורחים", "LabelAllUsersExcludingGuests": "כל המשתמשים, ללא אורחים",
"LabelAllUsersIncludingGuests": "כל המשתמשים כולל אורחים", "LabelAllUsersIncludingGuests": "כל המשתמשים כולל אורחים",
@@ -230,10 +240,10 @@
"LabelAudioBitrate": "קצב סיביות (לדוגמא 128k)", "LabelAudioBitrate": "קצב סיביות (לדוגמא 128k)",
"LabelAudioChannels": "ערוצי קול (1 או 2)", "LabelAudioChannels": "ערוצי קול (1 או 2)",
"LabelAudioCodec": "קידוד קול", "LabelAudioCodec": "קידוד קול",
"LabelAuthor": "יוצר", "LabelAuthor": "סופר",
"LabelAuthorFirstLast": "יוצר (שם פרטי שם משפחה)", "LabelAuthorFirstLast": "סופר (שם, משפחה)",
"LabelAuthorLastFirst": "יוצר (שם משפחה, שם פרטי)", "LabelAuthorLastFirst": "סופר (משפחה, שם)",
"LabelAuthors": "יוצרים", "LabelAuthors": "סופרים",
"LabelAutoDownloadEpisodes": "הורד פרקים באופן אוטומטי", "LabelAutoDownloadEpisodes": "הורד פרקים באופן אוטומטי",
"LabelAutoFetchMetadata": "חפש והורד מטא-נתונים באופן אוטומטי", "LabelAutoFetchMetadata": "חפש והורד מטא-נתונים באופן אוטומטי",
"LabelAutoFetchMetadataHelp": "מחפש ומוריד מטא-נתונים לשדות כותרת, יוצר וסדרה כדי לשפר את תהליך ההעלאה. ייתכן שיהיה צורך להתאים מטא-נתונים נוסף לאחר ההעלאה.", "LabelAutoFetchMetadataHelp": "מחפש ומוריד מטא-נתונים לשדות כותרת, יוצר וסדרה כדי לשפר את תהליך ההעלאה. ייתכן שיהיה צורך להתאים מטא-נתונים נוסף לאחר ההעלאה.",
@@ -242,36 +252,48 @@
"LabelAutoRegister": "הרשמה אוטומטית", "LabelAutoRegister": "הרשמה אוטומטית",
"LabelAutoRegisterDescription": "יצירת משתמשים חדשים אוטומטית לאחר התחברות", "LabelAutoRegisterDescription": "יצירת משתמשים חדשים אוטומטית לאחר התחברות",
"LabelBackToUser": "חזרה למשתמש", "LabelBackToUser": "חזרה למשתמש",
"LabelBackupAudioFiles": "גיבוי קבצי שמע",
"LabelBackupLocation": "מיקום גיבוי", "LabelBackupLocation": "מיקום גיבוי",
"LabelBackupsEnableAutomaticBackups": "הפעל גיבויים אוטומטיים", "LabelBackupsEnableAutomaticBackups": "גיבויים אוטומטיים",
"LabelBackupsEnableAutomaticBackupsHelp": "גיבויים שמורים ב /metadata/backups", "LabelBackupsEnableAutomaticBackupsHelp": "גיבויים שמורים ב /metadata/backups",
"LabelBackupsMaxBackupSize": "גודל הגיבוי המרבי (בג'יגה-בייט)", "LabelBackupsMaxBackupSize": "גודל הגיבוי המרבי (בג'יגה-בייט) (0 - ללא הגבלה)",
"LabelBackupsMaxBackupSizeHelp": "כהגנה על עצמך מפני תצורה שגויה, הגיבויים ייכשלו אם הם יעברו את הגודל שהוגדר.", "LabelBackupsMaxBackupSizeHelp": "כהגנה על עצמך מפני תצורה שגויה, הגיבויים ייכשלו אם הם יעברו את הגודל שהוגדר.",
"LabelBackupsNumberToKeep": "מספר הגיבויים לשמירה", "LabelBackupsNumberToKeep": "מספר הגיבויים לשמירה",
"LabelBackupsNumberToKeepHelp": "רק גיבוי אחד יוסר בכל פעם, לכן אם יש לך כבר יותר מגיבוי אחד יש להסיר אותם באופן ידני.", "LabelBackupsNumberToKeepHelp": "רק גיבוי אחד יוסר בכל פעם, לכן אם יש לך כבר יותר מגיבוי אחד יש להסיר אותם באופן ידני.",
"LabelBitrate": "קצב סיביות", "LabelBitrate": "קצב סיביות",
"LabelBonus": "בונוס",
"LabelBooks": "ספרים", "LabelBooks": "ספרים",
"LabelButtonText": "טקסט לחצן", "LabelButtonText": "טקסט לחצן",
"LabelByAuthor": "על ידי {0}",
"LabelChangePassword": "שינוי סיסמה", "LabelChangePassword": "שינוי סיסמה",
"LabelChannels": "ערוצים", "LabelChannels": "ערוצים",
"LabelChapterCount": "{0} פרקים",
"LabelChapterTitle": "כותרת הפרק", "LabelChapterTitle": "כותרת הפרק",
"LabelChapters": "פרקים", "LabelChapters": "פרקים",
"LabelChaptersFound": "פרקים שנמצאו", "LabelChaptersFound": "פרקים שנמצאו",
"LabelClickForMoreInfo": "לחץ למידע נוסף", "LabelClickForMoreInfo": "לחץ למידע נוסף",
"LabelClickToUseCurrentValue": "לחץ לשימוש בערך הנוכחי",
"LabelClosePlayer": "סגור נגן", "LabelClosePlayer": "סגור נגן",
"LabelCollapseSeries": "צמצום סדרה", "LabelCodec": "Coded",
"LabelCollapseSeries": "הסתר סדרה",
"LabelCollapseSubSeries": "הסתר תת סדרה",
"LabelCollection": "אוסף", "LabelCollection": "אוסף",
"LabelCollections": "אוספים", "LabelCollections": "אוספים",
"LabelComplete": "מלא", "LabelComplete": "הושלם",
"LabelConfirmPassword": "אישור סיסמה", "LabelConfirmPassword": "אישור סיסמה",
"LabelContinueListening": "המשך האזנה", "LabelContinueListening": "המשך האזנה",
"LabelContinueReading": "המשך קריאה", "LabelContinueReading": "המשך קריאה",
"LabelContinueSeries": "המשך סדרה", "LabelContinueSeries": "המשך סדרה",
"LabelCover": "כריכה", "LabelCover": "כריכה",
"LabelCoverImageURL": "כתובת התמונה ברשת", "LabelCoverImageURL": "כתובת התמונה ברשת",
"LabelCoverProvider": "ספק כריכה",
"LabelCreatedAt": "נוצר בתאריך", "LabelCreatedAt": "נוצר בתאריך",
"LabelCronExpression": "ביטוי cron",
"LabelCurrent": "נוכחי", "LabelCurrent": "נוכחי",
"LabelCurrently": "כעת:", "LabelCurrently": "כעת:",
"LabelCustomCronExpression": "ביטוי cron מותאם אישית:",
"LabelDatetime": "Datetime",
"LabelDays": "ימים",
"LabelDeleteFromFileSystemCheckbox": "מחיקה מהמערכת הקבצים (הסר סימון למחיקה רק ממסד הנתונים)", "LabelDeleteFromFileSystemCheckbox": "מחיקה מהמערכת הקבצים (הסר סימון למחיקה רק ממסד הנתונים)",
"LabelDescription": "תיאור", "LabelDescription": "תיאור",
"LabelDeselectAll": "הסר בחירת כל הפריטים", "LabelDeselectAll": "הסר בחירת כל הפריטים",
@@ -282,51 +304,83 @@
"LabelDiscFromFilename": "דיסק משם הקובץ", "LabelDiscFromFilename": "דיסק משם הקובץ",
"LabelDiscFromMetadata": "דיסק מהמטא-נתונים", "LabelDiscFromMetadata": "דיסק מהמטא-נתונים",
"LabelDiscover": "גלה", "LabelDiscover": "גלה",
"LabelDownload": "הורד", "LabelDownload": "הורדה",
"LabelDownloadNEpisodes": "הורד {0} פרקים", "LabelDownloadNEpisodes": "הורד {0} פרקים",
"LabelDownloadable": "ניתן להורדה",
"LabelDuration": "משך", "LabelDuration": "משך",
"LabelDurationComparisonExactMatch": "(התאמה מדוייקת)",
"LabelDurationComparisonLonger": "({0} ארוך יותר)",
"LabelDurationComparisonShorter": "({0} קצר יותר)",
"LabelDurationFound": "משך נמצא:", "LabelDurationFound": "משך נמצא:",
"LabelEbook": "ספר אלקטרוני", "LabelEbook": "ספר אלקטרוני",
"LabelEbooks": "ספרים אלקטרוניים", "LabelEbooks": "ספרים אלקטרוניים",
"LabelEdit": "עריכה", "LabelEdit": "עריכה",
"LabelEmail": "דואר אלקטרוני", "LabelEmail": "דואר אלקטרוני",
"LabelEmailSettingsFromAddress": "מאת", "LabelEmailSettingsFromAddress": "מאת",
"LabelEmailSettingsRejectUnauthorized": "דחה תעודות לא מאושרות",
"LabelEmailSettingsRejectUnauthorizedHelp": "השבתת אימות תעודת SSL עלולה לחשוף את החיבור שלך לסיכוני אבטחה, כגון התקפות \"אדם באמצע\". השבת אפשרות זו רק אם אתה מבין את ההשלכות ובוטח בשרת הדואר שאליו אתה מתחבר.",
"LabelEmailSettingsSecure": "מאובטח", "LabelEmailSettingsSecure": "מאובטח",
"LabelEmailSettingsSecureHelp": "אם מופעל, החיבור ישתמש ב-TLS בעת ההתחברות לשרת. אם לא, אז TLS יהיה בשימוש אם השרת תומך בהרחבת STARTTLS. ברוב המקרים מומלץ להפעיל את הגדרה זו אם אתה מתחבר לפורט 465. לפורט 587 או 25, השאר כבוי. (from nodemailer.com/smtp/#authentication)", "LabelEmailSettingsSecureHelp": "אם מופעל, החיבור ישתמש ב-TLS בעת ההתחברות לשרת. אם לא, אז TLS יהיה בשימוש אם השרת תומך בהרחבת STARTTLS. ברוב המקרים מומלץ להפעיל את הגדרה זו אם אתה מתחבר לפורט 465. לפורט 587 או 25, השאר כבוי. (from nodemailer.com/smtp/#authentication)",
"LabelEmailSettingsTestAddress": "כתובת לבדיקה", "LabelEmailSettingsTestAddress": "כתובת לבדיקה",
"LabelEmbeddedCover": "כריכה מוטמעת", "LabelEmbeddedCover": "כריכה מוטמעת",
"LabelEnable": "הפעל", "LabelEnable": "אפשר",
"LabelEnd": "סיום", "LabelEncodingBackupLocation": "גיבוי של קבצי אודיו מקוריים יישמר ב:",
"LabelEncodingChaptersNotEmbedded": "פרקים אינם מוטבעים בספרי אודיו מרובי רצועות.",
"LabelEncodingClearItemCache": "הקפד לנקות מטמון פריטים מעת לעת.",
"LabelEncodingFinishedM4B": "קובץ M4B סופי יישמר בתיקייה ה-audiobook ב:",
"LabelEncodingInfoEmbedded": "מטה דאטה יוטמע ברצועות השמע בתוך תיקיית ה-audiobook.",
"LabelEncodingStartedNavigation": "לאחר שהמשימה תתחיל אפשר לנווט לדף אחר.",
"LabelEncodingTimeWarning": "קידוד יכול להימשך עד 30 דקות.",
"LabelEncodingWarningAdvancedSettings": "אזהרה: אל תעדכן את ההגדרות האלה אלא אם כן אתה מכיר את אפשרויות קידוד ffmpeg.",
"LabelEncodingWatcherDisabled": "אם ה-watcher כבוי, יש לסרוק את הספר מחדש לאחר מכן.",
"LabelEnd": "סוף",
"LabelEndOfChapter": "סוף הפרק",
"LabelEpisode": "פרק", "LabelEpisode": "פרק",
"LabelEpisodeNotLinkedToRssFeed": "פרק לא מקושר לערוץ RSS",
"LabelEpisodeNumber": "פרק #{0}",
"LabelEpisodeTitle": "כותרת הפרק", "LabelEpisodeTitle": "כותרת הפרק",
"LabelEpisodeType": "סוג הפרק", "LabelEpisodeType": "סוג הפרק",
"LabelEpisodeUrlFromRssFeed": "קישור פרק מערוץ RSS",
"LabelEpisodes": "פרקים",
"LabelEpisodic": "ארעי",
"LabelExample": "דוגמה", "LabelExample": "דוגמה",
"LabelExpandSeries": "הרחב סדרה",
"LabelExpandSubSeries": "הרחב תת סדרה",
"LabelExplicit": "בוטה", "LabelExplicit": "בוטה",
"LabelExplicitChecked": "בוטה (מסומן)",
"LabelExplicitUnchecked": "לא בוטה (לא מסומן)",
"LabelExportOPML": "ייצוא OPML",
"LabelFeedURL": "כתובת ערוץ", "LabelFeedURL": "כתובת ערוץ",
"LabelFetchingMetadata": "מושך מטא-נתונים", "LabelFetchingMetadata": "מושך מטא-נתונים",
"LabelFile": "קובץ", "LabelFile": "קובץ",
"LabelFileBirthtime": "זמן יצירת הקובץ", "LabelFileBirthtime": "זמן יצירת הקובץ",
"LabelFileModified": "הקובץ שונה", "LabelFileBornDate": "נוצר {0}",
"LabelFilename": "שם הקובץ", "LabelFileModified": "קובץ נערך",
"LabelFileModifiedDate": "שונה {0}",
"LabelFilename": "שם קובץ",
"LabelFilterByUser": "סינון לפי משתמש", "LabelFilterByUser": "סינון לפי משתמש",
"LabelFindEpisodes": "מצא פרקים", "LabelFindEpisodes": "מצא פרקים",
"LabelFinished": "הושלם", "LabelFinished": "הושלם",
"LabelFolder": "תיקייה", "LabelFolder": "תיקייה",
"LabelFolders": "תיקיות", "LabelFolders": "תיקיות",
"LabelFontBold": "מודגש", "LabelFontBold": "מודגש",
"LabelFontBoldness": "עובי פונט",
"LabelFontFamily": "משפחת הפונטים", "LabelFontFamily": "משפחת הפונטים",
"LabelFontItalic": "נטוי", "LabelFontItalic": "נטוי",
"LabelFontScale": "קנה מידה של הפונט", "LabelFontScale": "גודל פונט",
"LabelFontStrikethrough": "קו חוצה", "LabelFontStrikethrough": "קו חוצה",
"LabelFormat": "תבנית", "LabelFormat": "תבנית",
"LabelGenre": "ז'אנר", "LabelFull": "מלא",
"LabelGenres": "ז'אנרים", "LabelGenre": "סגנון",
"LabelGenres": "סגנונות",
"LabelHardDeleteFile": "מחיקה חזקה של הקובץ", "LabelHardDeleteFile": "מחיקה חזקה של הקובץ",
"LabelHasEbook": "ספר אלקטרוני קיים", "LabelHasEbook": "קיים ספר אלקטרוני",
"LabelHasSupplementaryEbook": "קיים ספר אלקטרוני נלווה", "LabelHasSupplementaryEbook": "קיים ספר אלקטרוני משלים",
"LabelHideSubtitles": "הסתר תת כותרות",
"LabelHighestPriority": "העדיפות הגבוהה ביותר", "LabelHighestPriority": "העדיפות הגבוהה ביותר",
"LabelHost": "מארח", "LabelHost": "מארח",
"LabelHour": "שעה", "LabelHour": "שעה",
"LabelHours": "שעות",
"LabelIcon": "סמל", "LabelIcon": "סמל",
"LabelImageURLFromTheWeb": "כתובת התמונה מהרשת", "LabelImageURLFromTheWeb": "כתובת התמונה מהרשת",
"LabelInProgress": "בתהליך", "LabelInProgress": "בתהליך",
@@ -341,25 +395,30 @@
"LabelIntervalEvery6Hours": "כל 6 שעות", "LabelIntervalEvery6Hours": "כל 6 שעות",
"LabelIntervalEveryDay": "כל יום", "LabelIntervalEveryDay": "כל יום",
"LabelIntervalEveryHour": "כל שעה", "LabelIntervalEveryHour": "כל שעה",
"LabelIntervalEveryMinute": "כל דקה",
"LabelInvert": "הפוך", "LabelInvert": "הפוך",
"LabelItem": "פריט", "LabelItem": "פריט",
"LabelJumpBackwardAmount": "כמות הרצה לאחור",
"LabelJumpForwardAmount": "כמות הרצה קדימה",
"LabelLanguage": "שפה", "LabelLanguage": "שפה",
"LabelLanguageDefaultServer": "שפת ברירת המחדל של השרת", "LabelLanguageDefaultServer": "שפת ברירת המחדל של השרת",
"LabelLanguages": "שפות",
"LabelLastBookAdded": "הספר האחרון שנוסף", "LabelLastBookAdded": "הספר האחרון שנוסף",
"LabelLastBookUpdated": "הספר האחרון שעודכן", "LabelLastBookUpdated": "הספר האחרון שעודכן",
"LabelLastSeen": "נראה לאחרונה", "LabelLastSeen": "נראה לאחרונה",
"LabelLastTime": "הזמן האחרון", "LabelLastTime": "הזמן האחרון",
"LabelLastUpdate": "עדכון אחרון", "LabelLastUpdate": "עדכון אחרון",
"LabelLayout": "פריסה", "LabelLayout": "Layout",
"LabelLayoutSinglePage": "דף בודד", "LabelLayoutSinglePage": "עמוד יחיד",
"LabelLayoutSplitPage": "פיצול הדף", "LabelLayoutSplitPage": "פיצול הדף",
"LabelLess": "פחות", "LabelLess": "פחות",
"LabelLibrariesAccessibleToUser": "ספריות נגישות למשתמש", "LabelLibrariesAccessibleToUser": "ספריות נגישות למשתמש",
"LabelLibrary": "ספרייה", "LabelLibrary": "ספרייה",
"LabelLibraryFilterSublistEmpty": "לא {0}",
"LabelLibraryItem": "פריט ספרייה", "LabelLibraryItem": "פריט ספרייה",
"LabelLibraryName": "שם הספרייה", "LabelLibraryName": "שם הספרייה",
"LabelLimit": "מגבלה", "LabelLimit": "מגבלה",
"LabelLineSpacing": יווח שורות", "LabelLineSpacing": "מרווח שורה",
"LabelListenAgain": "האזן שוב", "LabelListenAgain": "האזן שוב",
"LabelLogLevelDebug": "דיבוג", "LabelLogLevelDebug": "דיבוג",
"LabelLogLevelInfo": "מידע", "LabelLogLevelInfo": "מידע",
@@ -368,6 +427,10 @@
"LabelLowestPriority": "העדיפות הנמוכה ביותר", "LabelLowestPriority": "העדיפות הנמוכה ביותר",
"LabelMatchExistingUsersBy": "התאם משתמשים קיימים לפי", "LabelMatchExistingUsersBy": "התאם משתמשים קיימים לפי",
"LabelMatchExistingUsersByDescription": "משמש לחיבור משתמשים קיימים. לאחר החיבור, המשתמשים יותאמו לפי זיהוי ייחודי מספק ה-SSO שלך", "LabelMatchExistingUsersByDescription": "משמש לחיבור משתמשים קיימים. לאחר החיבור, המשתמשים יותאמו לפי זיהוי ייחודי מספק ה-SSO שלך",
"LabelMaxEpisodesToDownload": "מספר פרקים מקסימלי להורדה. 0 - ללא הגבלה.",
"LabelMaxEpisodesToDownloadPerCheck": "מספר פרקים חדשים מקסימלי להורדה בכל בדיקה",
"LabelMaxEpisodesToKeep": "מספר פרקים מקסימלי לשמור",
"LabelMaxEpisodesToKeepHelp": "ערך של 0 קובע ללא מגבלה. לאחר הורדה אוטומטית של פרק חדש יימחק את הפרק הישן ביותר אם יש לך יותר מ-X פרקים. פעולה זו תמחק רק פרק אחד לכל הורדה חדשה.",
"LabelMediaPlayer": "נגן מדיה", "LabelMediaPlayer": "נגן מדיה",
"LabelMediaType": "סוג מדיה", "LabelMediaType": "סוג מדיה",
"LabelMetaTag": "תג מטא", "LabelMetaTag": "תג מטא",
@@ -375,6 +438,7 @@
"LabelMetadataOrderOfPrecedenceDescription": "מקורות המטא-נתונים עם עדיפות גבוהה יחליפו מקורות עם עדיפות נמוכה יותר", "LabelMetadataOrderOfPrecedenceDescription": "מקורות המטא-נתונים עם עדיפות גבוהה יחליפו מקורות עם עדיפות נמוכה יותר",
"LabelMetadataProvider": "ספק מטא-נתונים", "LabelMetadataProvider": "ספק מטא-נתונים",
"LabelMinute": "דקה", "LabelMinute": "דקה",
"LabelMinutes": "דקות",
"LabelMissing": "חסר", "LabelMissing": "חסר",
"LabelMissingEbook": "אין ספר אלקטרוני", "LabelMissingEbook": "אין ספר אלקטרוני",
"LabelMissingSupplementaryEbook": "אין ספר אלקטרוני נלווה", "LabelMissingSupplementaryEbook": "אין ספר אלקטרוני נלווה",
@@ -387,10 +451,11 @@
"LabelNarrators": "מספרים", "LabelNarrators": "מספרים",
"LabelNew": "חדש", "LabelNew": "חדש",
"LabelNewPassword": "סיסמה חדשה", "LabelNewPassword": "סיסמה חדשה",
"LabelNewestAuthors": "הסופרים החדשים ביותר", "LabelNewestAuthors": "הסופרים האחרונים",
"LabelNewestEpisodes": "הפרקים החדשים ביותר", "LabelNewestEpisodes": "הפרקים החדשים ביותר",
"LabelNextBackupDate": "תאריך הגיבוי הבא", "LabelNextBackupDate": "תאריך הגיבוי הבא",
"LabelNextScheduledRun": "הרצה מתוזמנת הבאה", "LabelNextScheduledRun": "הרצה מתוזמנת הבאה",
"LabelNoCustomMetadataProviders": "אין ספקי מטא-נתונים מותאמים אישית",
"LabelNoEpisodesSelected": "לא נבחרו פרקים", "LabelNoEpisodesSelected": "לא נבחרו פרקים",
"LabelNotFinished": "לא הושלם", "LabelNotFinished": "לא הושלם",
"LabelNotStarted": "לא התחיל", "LabelNotStarted": "לא התחיל",
@@ -405,7 +470,9 @@
"LabelNotificationsMaxQueueSize": "גודל התור המרבי לאירועי התראה", "LabelNotificationsMaxQueueSize": "גודל התור המרבי לאירועי התראה",
"LabelNotificationsMaxQueueSizeHelp": "האירועים מוגבלים לשליחה אחת לשנייה. האירועים יתעלמו אם התור מלא. הגדרה זו נועדה למנוע ספאם התראות.", "LabelNotificationsMaxQueueSizeHelp": "האירועים מוגבלים לשליחה אחת לשנייה. האירועים יתעלמו אם התור מלא. הגדרה זו נועדה למנוע ספאם התראות.",
"LabelNumberOfBooks": "מספר הספרים", "LabelNumberOfBooks": "מספר הספרים",
"LabelNumberOfEpisodes": "מספר הפרקים", "LabelNumberOfEpisodes": "# פרקים",
"LabelOpenIDAdvancedPermsClaimDescription": "שם OpenID claim המכילה הרשאות מתקדמות לפעולות משתמש בתוך האפליקציה, אשר יחולו על תפקידים שאינם מנהלי מערכת (<b>אם הוגדרה</b>). אם התביעה חסרה בתגובה, הגישה ל-ABS תידחה. אם אפשרות אחת חסרה, היא תטופל כ-<code>false</code> יש לוודא שטענת ספק הזהויות תואמת את המבנה הצפוי:",
"LabelOpenIDClaims": "השאר את האפשרויות הבאות ריקות כדי להשבית הקצאת קבוצות והרשאות מתקדמת, ולאחר מכן להקצות אוטומטית את קבוצת 'משתמש'.",
"LabelOpenRSSFeed": "פתח ערוץ RSS", "LabelOpenRSSFeed": "פתח ערוץ RSS",
"LabelOverwrite": "לשכפל", "LabelOverwrite": "לשכפל",
"LabelPassword": "סיסמה", "LabelPassword": "סיסמה",
@@ -433,13 +500,15 @@
"LabelProvider": "ספק", "LabelProvider": "ספק",
"LabelPubDate": "תאריך פרסום", "LabelPubDate": "תאריך פרסום",
"LabelPublishYear": "שנת הפרסום", "LabelPublishYear": "שנת הפרסום",
"LabelPublishedDate": "פורסם {0}",
"LabelPublisher": "מוציא לאור", "LabelPublisher": "מוציא לאור",
"LabelRSSFeedCustomOwnerEmail": "אימייל בעלים מותאם אישית", "LabelRSSFeedCustomOwnerEmail": "אימייל בעלים מותאם אישית",
"LabelRSSFeedCustomOwnerName": "שם בעלים מותאם אישית", "LabelRSSFeedCustomOwnerName": "שם בעלים מותאם אישית",
"LabelRSSFeedOpen": "פתח ערוץ RSS", "LabelRSSFeedOpen": "ערוץ RSS פתוח",
"LabelRSSFeedPreventIndexing": "מנע רישום", "LabelRSSFeedPreventIndexing": "מנע רישום",
"LabelRSSFeedSlug": "Slug של ערוץ ה-RSS", "LabelRSSFeedSlug": "Slug של ערוץ ה-RSS",
"LabelRSSFeedURL": "כתובת ערוץ ה-RSS", "LabelRSSFeedURL": "כתובת ערוץ ה-RSS",
"LabelRandomly": "באופן אקראי",
"LabelRead": "קריאה", "LabelRead": "קריאה",
"LabelReadAgain": "קרא שוב", "LabelReadAgain": "קרא שוב",
"LabelReadEbookWithoutProgress": "קרא/י ספר אלקטרוני ללא שמירת התקדמות", "LabelReadEbookWithoutProgress": "קרא/י ספר אלקטרוני ללא שמירת התקדמות",
@@ -465,7 +534,7 @@
"LabelSeriesProgress": "התקדמות בסדרה", "LabelSeriesProgress": "התקדמות בסדרה",
"LabelServerYearReview": "השנה בסקירה של השרת ({0})", "LabelServerYearReview": "השנה בסקירה של השרת ({0})",
"LabelSetEbookAsPrimary": "קבע כראשי", "LabelSetEbookAsPrimary": "קבע כראשי",
"LabelSetEbookAsSupplementary": "קבע כספר אלקטרוני נלווה", "LabelSetEbookAsSupplementary": "קבע כמשלים",
"LabelSettingsAudiobooksOnly": "רק ספרי קול", "LabelSettingsAudiobooksOnly": "רק ספרי קול",
"LabelSettingsAudiobooksOnlyHelp": "הפעלת ההגדרה הזו תתעלם מקבצי ספרים אלקטרוניים אלא אם כן הם נמצאים בתיקיית ספרי קול, שבמקרה זה יקבעו כספרים אלקטרוניים נלווים", "LabelSettingsAudiobooksOnlyHelp": "הפעלת ההגדרה הזו תתעלם מקבצי ספרים אלקטרוניים אלא אם כן הם נמצאים בתיקיית ספרי קול, שבמקרה זה יקבעו כספרים אלקטרוניים נלווים",
"LabelSettingsBookshelfViewHelp": "עיצוב סקאומורפי עם מדפי עץ", "LabelSettingsBookshelfViewHelp": "עיצוב סקאומורפי עם מדפי עץ",
@@ -500,7 +569,7 @@
"LabelShowAll": "הצג הכל", "LabelShowAll": "הצג הכל",
"LabelSize": "גודל", "LabelSize": "גודל",
"LabelSleepTimer": "טיימר שינה", "LabelSleepTimer": "טיימר שינה",
"LabelStart": "התחלה", "LabelStart": "התחל",
"LabelStartTime": "זמן התחלה", "LabelStartTime": "זמן התחלה",
"LabelStarted": "התחיל", "LabelStarted": "התחיל",
"LabelStartedAt": "התחיל ב", "LabelStartedAt": "התחיל ב",
@@ -576,8 +645,8 @@
"LabelViewQueue": "הצג תור נגן", "LabelViewQueue": "הצג תור נגן",
"LabelVolume": "עוצמת קול", "LabelVolume": "עוצמת קול",
"LabelWeekdaysToRun": "ימי השבוע להרצה", "LabelWeekdaysToRun": "ימי השבוע להרצה",
"LabelYearReviewHide": "הסתר שנת סקירה", "LabelYearReviewHide": "הסתר סקירת שנה",
"LabelYearReviewShow": "הצג שנת סקירה", "LabelYearReviewShow": "הצג סקירת שנה",
"LabelYourAudiobookDuration": "משך הספר הקולי שלך", "LabelYourAudiobookDuration": "משך הספר הקולי שלך",
"LabelYourBookmarks": "הסימניות שלך", "LabelYourBookmarks": "הסימניות שלך",
"LabelYourPlaylists": "הפלייליסטים שלך", "LabelYourPlaylists": "הפלייליסטים שלך",
@@ -628,8 +697,8 @@
"MessageDownloadingEpisode": "מוריד פרק", "MessageDownloadingEpisode": "מוריד פרק",
"MessageDragFilesIntoTrackOrder": "גרור קבצים לסדר ההשמעה נכון", "MessageDragFilesIntoTrackOrder": "גרור קבצים לסדר ההשמעה נכון",
"MessageEmbedFinished": "ההטמעה הושלמה!", "MessageEmbedFinished": "ההטמעה הושלמה!",
"MessageEpisodesQueuedForDownload": "{0} פרקים בתור להורדה", "MessageEpisodesQueuedForDownload": "{0} פרק/ים בתור להורדה",
"MessageFeedURLWillBe": "כתובת URL של העדכון תהיה {0}", "MessageFeedURLWillBe": "כתובת ה- URL של הערוץ תהיה {0}",
"MessageFetching": "מושך...", "MessageFetching": "מושך...",
"MessageForceReScanDescription": "תבוצע סריקה מחדש כמו סריקה חדש מאפס, תגי ID3 של קבצי קול, קבצי OPF, וקבצי טקסט ייסרקו כחדשים.", "MessageForceReScanDescription": "תבוצע סריקה מחדש כמו סריקה חדש מאפס, תגי ID3 של קבצי קול, קבצי OPF, וקבצי טקסט ייסרקו כחדשים.",
"MessageImportantNotice": "הודעה חשובה!", "MessageImportantNotice": "הודעה חשובה!",
@@ -644,7 +713,7 @@
"MessageMapChapterTitles": "מפה שמות פרקים לפרקי הספר השמורים שלך ללא שינוי תגי זמן", "MessageMapChapterTitles": "מפה שמות פרקים לפרקי הספר השמורים שלך ללא שינוי תגי זמן",
"MessageMarkAllEpisodesFinished": "סמן את כל הפרקים כהסתיימו", "MessageMarkAllEpisodesFinished": "סמן את כל הפרקים כהסתיימו",
"MessageMarkAllEpisodesNotFinished": "סמן את כל הפרקים כלא הסתיימו", "MessageMarkAllEpisodesNotFinished": "סמן את כל הפרקים כלא הסתיימו",
"MessageMarkAsFinished": "סמן כהסתיים", "MessageMarkAsFinished": "סמן כהושלם",
"MessageMarkAsNotFinished": "סמן כלא הסתיים", "MessageMarkAsNotFinished": "סמן כלא הסתיים",
"MessageMatchBooksDescription": "ינסה להתאים ספרים בספריית הספרים שלך עם ספר מספק החיפוש הנבחר וימלא פרטים ריקים ותמונות כריכה. לא יחליף פרטים קיימים.", "MessageMatchBooksDescription": "ינסה להתאים ספרים בספריית הספרים שלך עם ספר מספק החיפוש הנבחר וימלא פרטים ריקים ותמונות כריכה. לא יחליף פרטים קיימים.",
"MessageNoAudioTracks": "אין רצועות שמע", "MessageNoAudioTracks": "אין רצועות שמע",
@@ -674,7 +743,7 @@
"MessageNoSeries": "אין סדרות", "MessageNoSeries": "אין סדרות",
"MessageNoTags": "אין תגיות", "MessageNoTags": "אין תגיות",
"MessageNoTasksRunning": "אין משימות פעילות", "MessageNoTasksRunning": "אין משימות פעילות",
"MessageNoUpdatesWereNecessary": "לא היה צורך בעדכונים", "MessageNoUpdatesWereNecessary": "לא נדרש עדכון",
"MessageNoUserPlaylists": "אין לך רשימות השמעה", "MessageNoUserPlaylists": "אין לך רשימות השמעה",
"MessageNotYetImplemented": "עדיין לא מיושם", "MessageNotYetImplemented": "עדיין לא מיושם",
"MessageOr": "או", "MessageOr": "או",
@@ -682,6 +751,7 @@
"MessagePlayChapter": "הקשב לתחילת הפרק", "MessagePlayChapter": "הקשב לתחילת הפרק",
"MessagePlaylistCreateFromCollection": "צור רשימת השמעה מאוסף", "MessagePlaylistCreateFromCollection": "צור רשימת השמעה מאוסף",
"MessagePodcastHasNoRSSFeedForMatching": "לפודקאסט אין כתובת URL של ערוץ RSS להתאמה", "MessagePodcastHasNoRSSFeedForMatching": "לפודקאסט אין כתובת URL של ערוץ RSS להתאמה",
"MessagePodcastSearchField": "הזן מונח חיפוש או כתובת URL של ערוץ RSS",
"MessageQuickMatchDescription": "ממלא פרטים ריקים וכריכות עם התוצאה הראשונה מ '{0}'. לא ימחק פרטים אלא אם הגדרת השרת 'העדף מטה-נתונים מותאמים' מופעלת.", "MessageQuickMatchDescription": "ממלא פרטים ריקים וכריכות עם התוצאה הראשונה מ '{0}'. לא ימחק פרטים אלא אם הגדרת השרת 'העדף מטה-נתונים מותאמים' מופעלת.",
"MessageRemoveChapter": "הסר פרק", "MessageRemoveChapter": "הסר פרק",
"MessageRemoveEpisodes": "הסר {0} פרקים", "MessageRemoveEpisodes": "הסר {0} פרקים",
@@ -708,7 +778,7 @@
"NoteChangeRootPassword": "המשתמש root הוא המשתמש היחיד שיכולה להיות לו סיסמה ריקה", "NoteChangeRootPassword": "המשתמש root הוא המשתמש היחיד שיכולה להיות לו סיסמה ריקה",
"NoteChapterEditorTimes": "הערה: זמן ההתחלה של הפרק הראשון חייב להישאר 0:00 וזמן ההתחלה של הפרק האחרון לא יכול לחרוג מהזמן של ספר השמע.", "NoteChapterEditorTimes": "הערה: זמן ההתחלה של הפרק הראשון חייב להישאר 0:00 וזמן ההתחלה של הפרק האחרון לא יכול לחרוג מהזמן של ספר השמע.",
"NoteFolderPicker": "הערה: תיקיות שכבר מופו לא יוצגו", "NoteFolderPicker": "הערה: תיקיות שכבר מופו לא יוצגו",
"NoteRSSFeedPodcastAppsHttps": "אזהרה: רוב יישומי הפודקאסט דורשים שכתובת ה-URL ערוץ ה-RSS תשתמש ב-HTTPS", "NoteRSSFeedPodcastAppsHttps": "אזהרה: רוב אפליקציות הפודקאסטים ידרשו שכתובת האתר של ערוץ ה-RSS תשתמש ב-HTTPS",
"NoteRSSFeedPodcastAppsPubDate": "אזהרה: פרק אחד או יותר לא מכילים תאריך פרסום. חלק מיישומי הפודקאסט דורשים זאת.", "NoteRSSFeedPodcastAppsPubDate": "אזהרה: פרק אחד או יותר לא מכילים תאריך פרסום. חלק מיישומי הפודקאסט דורשים זאת.",
"NoteUploaderFoldersWithMediaFiles": "תיקיות עם קבצי מדיה יעובדו כפריטי ספריה נפרדים.", "NoteUploaderFoldersWithMediaFiles": "תיקיות עם קבצי מדיה יעובדו כפריטי ספריה נפרדים.",
"NoteUploaderOnlyAudioFiles": "אם מועלים רק קבצי שמע, כל קובץ שמע יעובד כספר שמע נפרד.", "NoteUploaderOnlyAudioFiles": "אם מועלים רק קבצי שמע, כל קובץ שמע יעובד כספר שמע נפרד.",
@@ -741,7 +811,7 @@
"ToastCollectionUpdateSuccess": "האוסף עודכן בהצלחה", "ToastCollectionUpdateSuccess": "האוסף עודכן בהצלחה",
"ToastItemCoverUpdateSuccess": "כריכת הפריט עודכנה בהצלחה", "ToastItemCoverUpdateSuccess": "כריכת הפריט עודכנה בהצלחה",
"ToastItemDetailsUpdateSuccess": "פרטי הפריט עודכנו בהצלחה", "ToastItemDetailsUpdateSuccess": "פרטי הפריט עודכנו בהצלחה",
"ToastItemMarkedAsFinishedFailed": "סימון כפריט כהושלם נכשל", "ToastItemMarkedAsFinishedFailed": "סימון כפריט שהושלם נכשל",
"ToastItemMarkedAsFinishedSuccess": "הפריט סומן כהושלם בהצלחה", "ToastItemMarkedAsFinishedSuccess": "הפריט סומן כהושלם בהצלחה",
"ToastItemMarkedAsNotFinishedFailed": "סימון כפריט שלא הושלם נכשל", "ToastItemMarkedAsNotFinishedFailed": "סימון כפריט שלא הושלם נכשל",
"ToastItemMarkedAsNotFinishedSuccess": "הפריט סומן כלא הושלם בהצלחה", "ToastItemMarkedAsNotFinishedSuccess": "הפריט סומן כלא הושלם בהצלחה",
+55 -4
View File
@@ -11,7 +11,7 @@
"ButtonAuthors": "Szerzők", "ButtonAuthors": "Szerzők",
"ButtonBack": "Vissza", "ButtonBack": "Vissza",
"ButtonBatchEditPopulateFromExisting": "Létezőből feltöltés", "ButtonBatchEditPopulateFromExisting": "Létezőből feltöltés",
"ButtonBatchEditPopulateMapDetails": "", "ButtonBatchEditPopulateMapDetails": "A térkép részleteinek feltöltése",
"ButtonBrowseForFolder": "Mappa keresése", "ButtonBrowseForFolder": "Mappa keresése",
"ButtonCancel": "Mégse", "ButtonCancel": "Mégse",
"ButtonCancelEncode": "Kódolás megszakítása", "ButtonCancelEncode": "Kódolás megszakítása",
@@ -177,6 +177,7 @@
"HeaderPlaylist": "Lejátszási lista", "HeaderPlaylist": "Lejátszási lista",
"HeaderPlaylistItems": "Lejátszási lista elemek", "HeaderPlaylistItems": "Lejátszási lista elemek",
"HeaderPodcastsToAdd": "Hozzáadandó podcastok", "HeaderPodcastsToAdd": "Hozzáadandó podcastok",
"HeaderPresets": "Alapbeállítások",
"HeaderPreviewCover": "Borító előnézete", "HeaderPreviewCover": "Borító előnézete",
"HeaderRSSFeedGeneral": "RSS részletek", "HeaderRSSFeedGeneral": "RSS részletek",
"HeaderRSSFeedIsOpen": "RSS hírcsatorna nyitva van", "HeaderRSSFeedIsOpen": "RSS hírcsatorna nyitva van",
@@ -219,6 +220,7 @@
"LabelAccountTypeAdmin": "Adminisztrátor", "LabelAccountTypeAdmin": "Adminisztrátor",
"LabelAccountTypeGuest": "Vendég", "LabelAccountTypeGuest": "Vendég",
"LabelAccountTypeUser": "Felhasználó", "LabelAccountTypeUser": "Felhasználó",
"LabelActivities": "Tevékenységek",
"LabelActivity": "Tevékenység", "LabelActivity": "Tevékenység",
"LabelAddToCollection": "Hozzáadás a gyűjteményhez", "LabelAddToCollection": "Hozzáadás a gyűjteményhez",
"LabelAddToCollectionBatch": "{0} könyv hozzáadása a gyűjteményhez", "LabelAddToCollectionBatch": "{0} könyv hozzáadása a gyűjteményhez",
@@ -228,6 +230,7 @@
"LabelAddedDate": "{0} Hozzáadva", "LabelAddedDate": "{0} Hozzáadva",
"LabelAdminUsersOnly": "Csak admin felhasználók", "LabelAdminUsersOnly": "Csak admin felhasználók",
"LabelAll": "Összes", "LabelAll": "Összes",
"LabelAllEpisodesDownloaded": "Minden epizód letöltve",
"LabelAllUsers": "Minden felhasználó", "LabelAllUsers": "Minden felhasználó",
"LabelAllUsersExcludingGuests": "Minden felhasználó, vendégek kivételével", "LabelAllUsersExcludingGuests": "Minden felhasználó, vendégek kivételével",
"LabelAllUsersIncludingGuests": "Minden felhasználó, beleértve a vendégeket is", "LabelAllUsersIncludingGuests": "Minden felhasználó, beleértve a vendégeket is",
@@ -251,7 +254,7 @@
"LabelBackToUser": "Vissza a felhasználóhoz", "LabelBackToUser": "Vissza a felhasználóhoz",
"LabelBackupAudioFiles": "Audiófájlok biztonsági mentése", "LabelBackupAudioFiles": "Audiófájlok biztonsági mentése",
"LabelBackupLocation": "Biztonsági másolat helye", "LabelBackupLocation": "Biztonsági másolat helye",
"LabelBackupsEnableAutomaticBackups": "Automatikus biztonsági másolatok engedélyezése", "LabelBackupsEnableAutomaticBackups": "Automatikus biztonsági másolatok",
"LabelBackupsEnableAutomaticBackupsHelp": "Biztonsági másolatok mentése a /metadata/backups mappába", "LabelBackupsEnableAutomaticBackupsHelp": "Biztonsági másolatok mentése a /metadata/backups mappába",
"LabelBackupsMaxBackupSize": "Maximális biztonsági másolat méret (GB-ban) (0-tól végtelenig)", "LabelBackupsMaxBackupSize": "Maximális biztonsági másolat méret (GB-ban) (0-tól végtelenig)",
"LabelBackupsMaxBackupSizeHelp": "A rossz konfiguráció elleni védelem érdekében a biztonsági másolatok meghiúsulnak, ha meghaladják a beállított méretet.", "LabelBackupsMaxBackupSizeHelp": "A rossz konfiguráció elleni védelem érdekében a biztonsági másolatok meghiúsulnak, ha meghaladják a beállított méretet.",
@@ -283,6 +286,7 @@
"LabelContinueSeries": "Sorozat folytatása", "LabelContinueSeries": "Sorozat folytatása",
"LabelCover": "Borító", "LabelCover": "Borító",
"LabelCoverImageURL": "Borítókép URL", "LabelCoverImageURL": "Borítókép URL",
"LabelCoverProvider": "Borító Szolgáltató",
"LabelCreatedAt": "Létrehozás ideje", "LabelCreatedAt": "Létrehozás ideje",
"LabelCronExpression": "Cron kifejezés", "LabelCronExpression": "Cron kifejezés",
"LabelCurrent": "Jelenlegi", "LabelCurrent": "Jelenlegi",
@@ -391,7 +395,8 @@
"LabelIntervalEvery6Hours": "Minden 6 órában", "LabelIntervalEvery6Hours": "Minden 6 órában",
"LabelIntervalEveryDay": "Minden nap", "LabelIntervalEveryDay": "Minden nap",
"LabelIntervalEveryHour": "Minden órában", "LabelIntervalEveryHour": "Minden órában",
"LabelInvert": "Megfordítás", "LabelIntervalEveryMinute": "Minden percben",
"LabelInvert": "Inverz",
"LabelItem": "Elem", "LabelItem": "Elem",
"LabelJumpBackwardAmount": "Visszafelé ugrás mennyisége", "LabelJumpBackwardAmount": "Visszafelé ugrás mennyisége",
"LabelJumpForwardAmount": "Előre ugrás mennyisége", "LabelJumpForwardAmount": "Előre ugrás mennyisége",
@@ -486,6 +491,7 @@
"LabelPersonalYearReview": "Az éved összefoglalása ({0})", "LabelPersonalYearReview": "Az éved összefoglalása ({0})",
"LabelPhotoPathURL": "Fénykép útvonal/URL", "LabelPhotoPathURL": "Fénykép útvonal/URL",
"LabelPlayMethod": "Lejátszási módszer", "LabelPlayMethod": "Lejátszási módszer",
"LabelPlaybackRateIncrementDecrement": "Lejátszási sebesség növelés/csökkentés értéke",
"LabelPlayerChapterNumberMarker": "{0} a {1} -ből", "LabelPlayerChapterNumberMarker": "{0} a {1} -ből",
"LabelPlaylists": "Lejátszási listák", "LabelPlaylists": "Lejátszási listák",
"LabelPodcast": "Podcast", "LabelPodcast": "Podcast",
@@ -508,7 +514,7 @@
"LabelPublishers": "Kiadók", "LabelPublishers": "Kiadók",
"LabelRSSFeedCustomOwnerEmail": "Egyéni tulajdonos e-mail", "LabelRSSFeedCustomOwnerEmail": "Egyéni tulajdonos e-mail",
"LabelRSSFeedCustomOwnerName": "Egyéni tulajdonos neve", "LabelRSSFeedCustomOwnerName": "Egyéni tulajdonos neve",
"LabelRSSFeedOpen": "RSS hírcsatorna nyitva", "LabelRSSFeedOpen": "RSS-hírcsatorna nyitva",
"LabelRSSFeedPreventIndexing": "Indexelés megakadályozása", "LabelRSSFeedPreventIndexing": "Indexelés megakadályozása",
"LabelRSSFeedSlug": "RSS hírcsatorna slug", "LabelRSSFeedSlug": "RSS hírcsatorna slug",
"LabelRSSFeedURL": "RSS hírcsatorna URL", "LabelRSSFeedURL": "RSS hírcsatorna URL",
@@ -525,6 +531,7 @@
"LabelReleaseDate": "Megjelenés dátuma", "LabelReleaseDate": "Megjelenés dátuma",
"LabelRemoveAllMetadataAbs": "Az összes metadata.abs fájl eltávolítása", "LabelRemoveAllMetadataAbs": "Az összes metadata.abs fájl eltávolítása",
"LabelRemoveAllMetadataJson": "Az összes metadata.json fájl eltávolítása", "LabelRemoveAllMetadataJson": "Az összes metadata.json fájl eltávolítása",
"LabelRemoveAudibleBranding": "Audible intro és outro eltávolítása a fejezetekből",
"LabelRemoveCover": "Borító eltávolítása", "LabelRemoveCover": "Borító eltávolítása",
"LabelRemoveMetadataFile": "Metaadatfájlok eltávolítása a könyvtár elemek mappáiból", "LabelRemoveMetadataFile": "Metaadatfájlok eltávolítása a könyvtár elemek mappáiból",
"LabelRemoveMetadataFileHelp": "A metadata.json és metadata.abs fájlokat eltávolítása a {0} mappáidból.", "LabelRemoveMetadataFileHelp": "A metadata.json és metadata.abs fájlokat eltávolítása a {0} mappáidból.",
@@ -554,6 +561,8 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorfikus dizájn fa polcokkal", "LabelSettingsBookshelfViewHelp": "Skeuomorfikus dizájn fa polcokkal",
"LabelSettingsChromecastSupport": "Chromecast támogatás", "LabelSettingsChromecastSupport": "Chromecast támogatás",
"LabelSettingsDateFormat": "Dátumformátum", "LabelSettingsDateFormat": "Dátumformátum",
"LabelSettingsEnableWatcher": "Változások automatikus vizsgálata a könyvtárakban",
"LabelSettingsEnableWatcherForLibrary": "Változások automatikus vizsgálata a könyvtárban",
"LabelSettingsEnableWatcherHelp": "Engedélyezi az automatikus elem hozzáadás/frissítés funkciót, amikor fájlváltozásokat észlel. *Szerver újraindítása szükséges", "LabelSettingsEnableWatcherHelp": "Engedélyezi az automatikus elem hozzáadás/frissítés funkciót, amikor fájlváltozásokat észlel. *Szerver újraindítása szükséges",
"LabelSettingsEpubsAllowScriptedContent": "Szkriptelt tartalmak engedélyezése epub-okban", "LabelSettingsEpubsAllowScriptedContent": "Szkriptelt tartalmak engedélyezése epub-okban",
"LabelSettingsEpubsAllowScriptedContentHelp": "Megengedi, hogy az epub fájlok szkripteket hajtsanak végre. Ezt a beállítást kikapcsolva ajánlott tartani, kivéve, ha megbízik az epub fájlok forrásában.", "LabelSettingsEpubsAllowScriptedContentHelp": "Megengedi, hogy az epub fájlok szkripteket hajtsanak végre. Ezt a beállítást kikapcsolva ajánlott tartani, kivéve, ha megbízik az epub fájlok forrásában.",
@@ -597,6 +606,7 @@
"LabelSlug": "Rövid cím", "LabelSlug": "Rövid cím",
"LabelSortAscending": "Emelkedő", "LabelSortAscending": "Emelkedő",
"LabelSortDescending": "Csökkenő", "LabelSortDescending": "Csökkenő",
"LabelSortPubDate": "Rendezés megjelenés dátuma szerint",
"LabelStart": "Kezdés", "LabelStart": "Kezdés",
"LabelStartTime": "Kezdési idő", "LabelStartTime": "Kezdési idő",
"LabelStarted": "Elkezdődött", "LabelStarted": "Elkezdődött",
@@ -697,12 +707,17 @@
"LabelYourProgress": "Haladásod", "LabelYourProgress": "Haladásod",
"MessageAddToPlayerQueue": "Hozzáadás a lejátszó sorhoz", "MessageAddToPlayerQueue": "Hozzáadás a lejátszó sorhoz",
"MessageAppriseDescription": "Ennek a funkció használatához futtatnia kell egy <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> példányt vagy egy olyan API-t, amely kezeli ezeket a kéréseket. <br />Az Apprise API URL-nek a teljes URL útvonalat kell tartalmaznia az értesítés elküldéséhez, például, ha az API példánya a <code>http://192.168.1.1:8337</code> címen szolgáltatva, akkor <code>http://192.168.1.1:8337/notify</code> értéket kell megadnia.", "MessageAppriseDescription": "Ennek a funkció használatához futtatnia kell egy <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> példányt vagy egy olyan API-t, amely kezeli ezeket a kéréseket. <br />Az Apprise API URL-nek a teljes URL útvonalat kell tartalmaznia az értesítés elküldéséhez, például, ha az API példánya a <code>http://192.168.1.1:8337</code> címen szolgáltatva, akkor <code>http://192.168.1.1:8337/notify</code> értéket kell megadnia.",
"MessageAsinCheck": "Győződjön meg róla, hogy az ASIN-t a megfelelő Audible régióból használja, nem az Amazonból.",
"MessageAuthenticationOIDCChangesRestart": "A mentés után indítsa újra a szervert az OIDC módosítások alkalmazásához.",
"MessageBackupsDescription": "A biztonsági másolatok tartalmazzák a felhasználókat, a felhasználói haladást, a könyvtári elem részleteit, a szerver beállításait és a képeket, amelyek a <code>/metadata/items</code> és <code>/metadata/authors</code> mappákban vannak tárolva. A biztonsági másolatok <strong>nem</strong> tartalmazzák a könyvtári mappákban tárolt fájlokat.", "MessageBackupsDescription": "A biztonsági másolatok tartalmazzák a felhasználókat, a felhasználói haladást, a könyvtári elem részleteit, a szerver beállításait és a képeket, amelyek a <code>/metadata/items</code> és <code>/metadata/authors</code> mappákban vannak tárolva. A biztonsági másolatok <strong>nem</strong> tartalmazzák a könyvtári mappákban tárolt fájlokat.",
"MessageBackupsLocationEditNote": "Megjegyzés: A biztonsági mentés helyének frissítése nem mozgatja vagy módosítja a meglévő biztonsági mentéseket", "MessageBackupsLocationEditNote": "Megjegyzés: A biztonsági mentés helyének frissítése nem mozgatja vagy módosítja a meglévő biztonsági mentéseket",
"MessageBackupsLocationNoEditNote": "Megjegyzés: A biztonsági mentés helye egy környezeti változóval van beállítva, és itt nem módosítható.", "MessageBackupsLocationNoEditNote": "Megjegyzés: A biztonsági mentés helye egy környezeti változóval van beállítva, és itt nem módosítható.",
"MessageBackupsLocationPathEmpty": "A biztonsági mentés helyének elérési útvonala nem lehet üres", "MessageBackupsLocationPathEmpty": "A biztonsági mentés helyének elérési útvonala nem lehet üres",
"MessageBatchEditPopulateMapDetailsAllHelp": "Az engedélyezett mezők feltöltése az összes elem adatával. A több értéket tartalmazó mezők összevonásra kerülnek",
"MessageBatchEditPopulateMapDetailsItemHelp": "A térkép engedélyezett adatmezőinek feltöltése ezen elem adataival",
"MessageBatchQuickMatchDescription": "A Gyors egyeztetés megpróbálja hozzáadni a hiányzó borítókat és metaadatokat a kiválasztott elemekhez. Engedélyezze az alábbi opciókat, hogy a Gyors egyeztetés felülírhassa a meglévő borítókat és/vagy metaadatokat.", "MessageBatchQuickMatchDescription": "A Gyors egyeztetés megpróbálja hozzáadni a hiányzó borítókat és metaadatokat a kiválasztott elemekhez. Engedélyezze az alábbi opciókat, hogy a Gyors egyeztetés felülírhassa a meglévő borítókat és/vagy metaadatokat.",
"MessageBookshelfNoCollections": "Még nem készített gyűjteményeket", "MessageBookshelfNoCollections": "Még nem készített gyűjteményeket",
"MessageBookshelfNoCollectionsHelp": "A gyűjtemények nyilvánosak. Minden, a könyvtárhoz hozzáféréssel rendelkező felhasználó láthatja őket.",
"MessageBookshelfNoRSSFeeds": "Nincsenek nyitott RSS hírcsatornák", "MessageBookshelfNoRSSFeeds": "Nincsenek nyitott RSS hírcsatornák",
"MessageBookshelfNoResultsForFilter": "Nincs eredmény a \"{0}: {1}\" szűrőre", "MessageBookshelfNoResultsForFilter": "Nincs eredmény a \"{0}: {1}\" szűrőre",
"MessageBookshelfNoResultsForQuery": "Nincs eredmény a lekérdezéshez", "MessageBookshelfNoResultsForQuery": "Nincs eredmény a lekérdezéshez",
@@ -712,6 +727,7 @@
"MessageChapterErrorStartGteDuration": "Érvénytelen kezdési idő, kevesebbnek kell lennie, mint a hangoskönyv időtartama", "MessageChapterErrorStartGteDuration": "Érvénytelen kezdési idő, kevesebbnek kell lennie, mint a hangoskönyv időtartama",
"MessageChapterErrorStartLtPrev": "Érvénytelen kezdési idő, nagyobbnak kell lennie, mint az előző fejezet kezdési ideje", "MessageChapterErrorStartLtPrev": "Érvénytelen kezdési idő, nagyobbnak kell lennie, mint az előző fejezet kezdési ideje",
"MessageChapterStartIsAfter": "A fejezet kezdete a hangoskönyv végét követi", "MessageChapterStartIsAfter": "A fejezet kezdete a hangoskönyv végét követi",
"MessageChaptersNotFound": "Fejezetek nem találhatók",
"MessageCheckingCron": "Cron ellenőrzése...", "MessageCheckingCron": "Cron ellenőrzése...",
"MessageConfirmCloseFeed": "Biztosan be szeretné zárni ezt a hírcsatornát?", "MessageConfirmCloseFeed": "Biztosan be szeretné zárni ezt a hírcsatornát?",
"MessageConfirmDeleteBackup": "Biztosan törölni szeretné a(z) {0} biztonsági másolatot?", "MessageConfirmDeleteBackup": "Biztosan törölni szeretné a(z) {0} biztonsági másolatot?",
@@ -768,6 +784,7 @@
"MessageForceReScanDescription": "minden fájlt újra szkennel, mint egy friss szkennelés. Az audiofájlok ID3 címkéi, OPF fájlok és szövegfájlok újként lesznek szkennelve.", "MessageForceReScanDescription": "minden fájlt újra szkennel, mint egy friss szkennelés. Az audiofájlok ID3 címkéi, OPF fájlok és szövegfájlok újként lesznek szkennelve.",
"MessageImportantNotice": "Fontos közlemény!", "MessageImportantNotice": "Fontos közlemény!",
"MessageInsertChapterBelow": "Fejezet beszúrása alulra", "MessageInsertChapterBelow": "Fejezet beszúrása alulra",
"MessageInvalidAsin": "Érvénytelen ASIN",
"MessageItemsSelected": "{0} kiválasztott elem", "MessageItemsSelected": "{0} kiválasztott elem",
"MessageItemsUpdated": "{0} frissített elem", "MessageItemsUpdated": "{0} frissített elem",
"MessageJoinUsOn": "Csatlakozzon hozzánk a", "MessageJoinUsOn": "Csatlakozzon hozzánk a",
@@ -813,6 +830,7 @@
"MessageNoTasksRunning": "Nincsenek futó feladatok", "MessageNoTasksRunning": "Nincsenek futó feladatok",
"MessageNoUpdatesWereNecessary": "Nem volt szükség frissítésekre", "MessageNoUpdatesWereNecessary": "Nem volt szükség frissítésekre",
"MessageNoUserPlaylists": "Nincsenek felhasználói lejátszási listák", "MessageNoUserPlaylists": "Nincsenek felhasználói lejátszási listák",
"MessageNoUserPlaylistsHelp": "A lejátszási listák személyesek. Csak az a felhasználó láthatja őket, aki létrehozta őket.",
"MessageNotYetImplemented": "Még nem implementált", "MessageNotYetImplemented": "Még nem implementált",
"MessageOpmlPreviewNote": "Megjegyzés: Ez egy előnézeti kép az elemzett OPML fájlról. A podcast tényleges címe az RSS hírcsatornából származik.", "MessageOpmlPreviewNote": "Megjegyzés: Ez egy előnézeti kép az elemzett OPML fájlról. A podcast tényleges címe az RSS hírcsatornából származik.",
"MessageOr": "vagy", "MessageOr": "vagy",
@@ -835,8 +853,10 @@
"MessageRestoreBackupConfirm": "Biztosan vissza szeretné állítani a biztonsági másolatot, amely ekkor készült:", "MessageRestoreBackupConfirm": "Biztosan vissza szeretné állítani a biztonsági másolatot, amely ekkor készült:",
"MessageRestoreBackupWarning": "A biztonsági mentés visszaállítása felülírja az egész adatbázist, amely a /config mappában található, valamint a borítóképeket a /metadata/items és /metadata/authors mappákban.<br /><br />A biztonsági mentések nem módosítják a könyvtár mappáiban található fájlokat. Ha engedélyezte a szerverbeállításokat a borítóképek és a metaadatok könyvtármappákban való tárolására, akkor ezek nem kerülnek biztonsági mentésre vagy felülírásra.<br /><br />A szerver használó összes kliens automatikusan frissül.", "MessageRestoreBackupWarning": "A biztonsági mentés visszaállítása felülírja az egész adatbázist, amely a /config mappában található, valamint a borítóképeket a /metadata/items és /metadata/authors mappákban.<br /><br />A biztonsági mentések nem módosítják a könyvtár mappáiban található fájlokat. Ha engedélyezte a szerverbeállításokat a borítóképek és a metaadatok könyvtármappákban való tárolására, akkor ezek nem kerülnek biztonsági mentésre vagy felülírásra.<br /><br />A szerver használó összes kliens automatikusan frissül.",
"MessageScheduleLibraryScanNote": "A legtöbb felhasználó számára ajánlott ezt a funkciót kikapcsolva hagyni, és engedélyezni a mappafigyelő beállítást. A mappafigyelő automatikusan észleli a könyvtári mappák változásait. A mappafigyelő nem működik minden fájlrendszernél (mint például az NFS), ezért helyette ütemezett könyvtárellenőrzéseket lehet használni.", "MessageScheduleLibraryScanNote": "A legtöbb felhasználó számára ajánlott ezt a funkciót kikapcsolva hagyni, és engedélyezni a mappafigyelő beállítást. A mappafigyelő automatikusan észleli a könyvtári mappák változásait. A mappafigyelő nem működik minden fájlrendszernél (mint például az NFS), ezért helyette ütemezett könyvtárellenőrzéseket lehet használni.",
"MessageScheduleRunEveryWeekdayAtTime": "Futás minden {1} óra {0}-kor",
"MessageSearchResultsFor": "Keresési eredmények", "MessageSearchResultsFor": "Keresési eredmények",
"MessageSelected": "{0} kiválasztva", "MessageSelected": "{0} kiválasztva",
"MessageSeriesSequenceCannotContainSpaces": "Sorozat sorrend nem tartalmazhat szóközt",
"MessageServerCouldNotBeReached": "A szervert nem lehet elérni", "MessageServerCouldNotBeReached": "A szervert nem lehet elérni",
"MessageSetChaptersFromTracksDescription": "Fejezetek beállítása minden egyes hangfájlt egy fejezetként használva, és a fejezet címét a hangfájl neveként", "MessageSetChaptersFromTracksDescription": "Fejezetek beállítása minden egyes hangfájlt egy fejezetként használva, és a fejezet címét a hangfájl neveként",
"MessageShareExpirationWillBe": "A lejárat: <strong>{0}</strong>", "MessageShareExpirationWillBe": "A lejárat: <strong>{0}</strong>",
@@ -861,6 +881,7 @@
"MessageTaskNoFilesToScan": "Nincs beolvasandó fájl", "MessageTaskNoFilesToScan": "Nincs beolvasandó fájl",
"MessageTaskOpmlImport": "OPML import", "MessageTaskOpmlImport": "OPML import",
"MessageTaskOpmlImportDescription": "Podcastok létrehozása {0} RSS hírcsatornából", "MessageTaskOpmlImportDescription": "Podcastok létrehozása {0} RSS hírcsatornából",
"MessageTaskOpmlImportFeed": "OPML import hírcsatorna",
"MessageTaskOpmlImportFeedDescription": "RSS feed „{0}” importálása", "MessageTaskOpmlImportFeedDescription": "RSS feed „{0}” importálása",
"MessageTaskOpmlImportFeedFailed": "Nem sikerült letölteni a podcast feedet", "MessageTaskOpmlImportFeedFailed": "Nem sikerült letölteni a podcast feedet",
"MessageTaskOpmlImportFeedPodcastDescription": "„{0}” podcast létrehozása", "MessageTaskOpmlImportFeedPodcastDescription": "„{0}” podcast létrehozása",
@@ -869,6 +890,7 @@
"MessageTaskOpmlImportFinished": "{0} podcast hozzáadva", "MessageTaskOpmlImportFinished": "{0} podcast hozzáadva",
"MessageTaskOpmlParseFailed": "Az OPML fájl elemzése nem sikerült", "MessageTaskOpmlParseFailed": "Az OPML fájl elemzése nem sikerült",
"MessageTaskOpmlParseFastFail": "Érvénytelen OPML fájl: <opml> tag nem található VAGY nem találtak <outline> taget", "MessageTaskOpmlParseFastFail": "Érvénytelen OPML fájl: <opml> tag nem található VAGY nem találtak <outline> taget",
"MessageTaskOpmlParseNoneFound": "Nem található feed az OPML fájlban",
"MessageTaskScanItemsAdded": "{0} hozzáadva", "MessageTaskScanItemsAdded": "{0} hozzáadva",
"MessageTaskScanItemsMissing": "{0} hiányzik", "MessageTaskScanItemsMissing": "{0} hiányzik",
"MessageTaskScanItemsUpdated": "{0} frissítve", "MessageTaskScanItemsUpdated": "{0} frissítve",
@@ -896,6 +918,8 @@
"NotificationOnBackupCompletedDescription": "A biztonsági mentés befejezésekor aktiválódik", "NotificationOnBackupCompletedDescription": "A biztonsági mentés befejezésekor aktiválódik",
"NotificationOnBackupFailedDescription": "A biztonsági mentés sikertelensége esetén aktiválódik", "NotificationOnBackupFailedDescription": "A biztonsági mentés sikertelensége esetén aktiválódik",
"NotificationOnEpisodeDownloadedDescription": "Egy podcast epizód automatikus letöltésekor aktiválódik", "NotificationOnEpisodeDownloadedDescription": "Egy podcast epizód automatikus letöltésekor aktiválódik",
"NotificationOnRSSFeedDisabledDescription": "Akkor lép működésbe, ha az automatikus epizódletöltés a túl sok sikertelen próbálkozás miatt letiltásra kerül",
"NotificationOnRSSFeedFailedDescription": "Akkor aktiválódik, ha az RSS feed kérés sikertelen az automatikus epizódletöltésnél",
"NotificationOnTestDescription": "Esemény az értesítési rendszer teszteléséhez", "NotificationOnTestDescription": "Esemény az értesítési rendszer teszteléséhez",
"PlaceholderNewCollection": "Új gyűjtemény neve", "PlaceholderNewCollection": "Új gyűjtemény neve",
"PlaceholderNewFolderPath": "Új mappa útvonala", "PlaceholderNewFolderPath": "Új mappa útvonala",
@@ -940,8 +964,11 @@
"ToastBackupRestoreFailed": "A biztonsági mentés visszaállítása sikertelen", "ToastBackupRestoreFailed": "A biztonsági mentés visszaállítása sikertelen",
"ToastBackupUploadFailed": "A biztonsági mentés feltöltése sikertelen", "ToastBackupUploadFailed": "A biztonsági mentés feltöltése sikertelen",
"ToastBackupUploadSuccess": "Biztonsági mentés feltöltve", "ToastBackupUploadSuccess": "Biztonsági mentés feltöltve",
"ToastBatchApplyDetailsToItemsSuccess": "Tételekre alkalmazott részletek",
"ToastBatchDeleteFailed": "A tömeges törlés nem sikerült", "ToastBatchDeleteFailed": "A tömeges törlés nem sikerült",
"ToastBatchDeleteSuccess": "Sikeres tömeges törlés", "ToastBatchDeleteSuccess": "Sikeres tömeges törlés",
"ToastBatchQuickMatchFailed": "Tömeges Gyors Egyeztetés sikertelen!",
"ToastBatchQuickMatchStarted": "{0} könyv Tömeges Gyors Egyeztetése elkezdődött!",
"ToastBatchUpdateFailed": "Kötegelt frissítés sikertelen", "ToastBatchUpdateFailed": "Kötegelt frissítés sikertelen",
"ToastBatchUpdateSuccess": "Kötegelt frissítés sikeres", "ToastBatchUpdateSuccess": "Kötegelt frissítés sikeres",
"ToastBookmarkCreateFailed": "Könyvjelző létrehozása sikertelen", "ToastBookmarkCreateFailed": "Könyvjelző létrehozása sikertelen",
@@ -950,9 +977,12 @@
"ToastCachePurgeFailed": "A gyorsítótár törlése sikertelen", "ToastCachePurgeFailed": "A gyorsítótár törlése sikertelen",
"ToastCachePurgeSuccess": "A gyorsítótár sikeresen törölve", "ToastCachePurgeSuccess": "A gyorsítótár sikeresen törölve",
"ToastChaptersHaveErrors": "A fejezetek hibákat tartalmaznak", "ToastChaptersHaveErrors": "A fejezetek hibákat tartalmaznak",
"ToastChaptersInvalidShiftAmountLast": "Érvénytelen eltolási érték. Az utolsó fejezet kezdési időpontja túlnyúlna a hangoskönyv időtartamán.",
"ToastChaptersInvalidShiftAmountStart": "Érvénytelen eltolási érték. Az első fejezet hossza nulla vagy negatív lenne, és a második fejezet felülírná. Növelje a második fejezet kezdő időtartamát.",
"ToastChaptersMustHaveTitles": "A fejezeteknek címekkel kell rendelkezniük", "ToastChaptersMustHaveTitles": "A fejezeteknek címekkel kell rendelkezniük",
"ToastChaptersRemoved": "Fejezetek eltávolítva", "ToastChaptersRemoved": "Fejezetek eltávolítva",
"ToastChaptersUpdated": "Fejezetek frissítve", "ToastChaptersUpdated": "Fejezetek frissítve",
"ToastCollectionItemsAddFailed": "A tétel(ek) hozzáadása gyűjteményhez sikertelen",
"ToastCollectionRemoveSuccess": "Gyűjtemény eltávolítva", "ToastCollectionRemoveSuccess": "Gyűjtemény eltávolítva",
"ToastCollectionUpdateSuccess": "Gyűjtemény frissítve", "ToastCollectionUpdateSuccess": "Gyűjtemény frissítve",
"ToastCoverUpdateFailed": "A borító frissítése nem sikerült", "ToastCoverUpdateFailed": "A borító frissítése nem sikerült",
@@ -967,6 +997,7 @@
"ToastEncodeCancelFailed": "A kódolás törlése sikertelen volt", "ToastEncodeCancelFailed": "A kódolás törlése sikertelen volt",
"ToastEncodeCancelSucces": "Kódolás törölve", "ToastEncodeCancelSucces": "Kódolás törölve",
"ToastEpisodeDownloadQueueClearFailed": "Nem sikerült törölni a várólistát", "ToastEpisodeDownloadQueueClearFailed": "Nem sikerült törölni a várólistát",
"ToastEpisodeDownloadQueueClearSuccess": "Epizód letöltési várólista törölve",
"ToastEpisodeUpdateSuccess": "{0} epizód frissítve", "ToastEpisodeUpdateSuccess": "{0} epizód frissítve",
"ToastErrorCannotShare": "Ezen az eszközön nem lehet natívan megosztani", "ToastErrorCannotShare": "Ezen az eszközön nem lehet natívan megosztani",
"ToastFailedToLoadData": "Sikertelen adatbetöltés", "ToastFailedToLoadData": "Sikertelen adatbetöltés",
@@ -974,6 +1005,7 @@
"ToastFailedToShare": "Nem sikerült megosztani", "ToastFailedToShare": "Nem sikerült megosztani",
"ToastFailedToUpdate": "Nem sikerült frissíteni", "ToastFailedToUpdate": "Nem sikerült frissíteni",
"ToastInvalidImageUrl": "Érvénytelen a kép URL címe", "ToastInvalidImageUrl": "Érvénytelen a kép URL címe",
"ToastInvalidMaxEpisodesToDownload": "A letölthető epizódok száma érvénytelen",
"ToastInvalidUrl": "Érvénytelen URL", "ToastInvalidUrl": "Érvénytelen URL",
"ToastItemCoverUpdateSuccess": "Elem borítója frissítve", "ToastItemCoverUpdateSuccess": "Elem borítója frissítve",
"ToastItemDeletedFailed": "Nem sikerült törölni az elemet", "ToastItemDeletedFailed": "Nem sikerült törölni az elemet",
@@ -1011,8 +1043,11 @@
"ToastNoUpdatesNecessary": "Nincs szükség frissítésre", "ToastNoUpdatesNecessary": "Nincs szükség frissítésre",
"ToastNotificationCreateFailed": "Értesítés létrehozása sikertelen", "ToastNotificationCreateFailed": "Értesítés létrehozása sikertelen",
"ToastNotificationDeleteFailed": "Értesítés törlése sikertelen", "ToastNotificationDeleteFailed": "Értesítés törlése sikertelen",
"ToastNotificationFailedMaximum": "A sikertelen kísérletek maximális száma >= 0 kell, hogy legyen",
"ToastNotificationQueueMaximum": "Az értesítési sor maximális száma >= 0 kell, hogy legyen",
"ToastNotificationSettingsUpdateSuccess": "Értesítési beállítások frissítve", "ToastNotificationSettingsUpdateSuccess": "Értesítési beállítások frissítve",
"ToastNotificationTestTriggerFailed": "Nem sikerült a tesztértesítést elindítani", "ToastNotificationTestTriggerFailed": "Nem sikerült a tesztértesítést elindítani",
"ToastNotificationTestTriggerSuccess": "Kiváltott tesztértesítés",
"ToastNotificationUpdateSuccess": "Értesítés frissítve", "ToastNotificationUpdateSuccess": "Értesítés frissítve",
"ToastPlaylistCreateFailed": "Lejátszási lista létrehozása sikertelen", "ToastPlaylistCreateFailed": "Lejátszási lista létrehozása sikertelen",
"ToastPlaylistCreateSuccess": "Lejátszási lista létrehozva", "ToastPlaylistCreateSuccess": "Lejátszási lista létrehozva",
@@ -1020,6 +1055,7 @@
"ToastPlaylistUpdateSuccess": "Lejátszási lista frissítve", "ToastPlaylistUpdateSuccess": "Lejátszási lista frissítve",
"ToastPodcastCreateFailed": "Podcast létrehozása sikertelen", "ToastPodcastCreateFailed": "Podcast létrehozása sikertelen",
"ToastPodcastCreateSuccess": "A podcast sikeresen létrehozva", "ToastPodcastCreateSuccess": "A podcast sikeresen létrehozva",
"ToastPodcastGetFeedFailed": "Nem sikerült podcast feedet kapni",
"ToastPodcastNoEpisodesInFeed": "Nincsenek epizódok az RSS hírcsatornában", "ToastPodcastNoEpisodesInFeed": "Nincsenek epizódok az RSS hírcsatornában",
"ToastPodcastNoRssFeed": "A podcastnak nincs RSS-hírcsatornája", "ToastPodcastNoRssFeed": "A podcastnak nincs RSS-hírcsatornája",
"ToastProgressIsNotBeingSynced": "Az előrehaladás nem szinkronizálódik, a lejátszás újraindul", "ToastProgressIsNotBeingSynced": "Az előrehaladás nem szinkronizálódik, a lejátszás újraindul",
@@ -1032,10 +1068,18 @@
"ToastRemoveFailed": "Sikertelen eltávolítás", "ToastRemoveFailed": "Sikertelen eltávolítás",
"ToastRemoveItemFromCollectionFailed": "Tétel eltávolítása a gyűjteményből sikertelen", "ToastRemoveItemFromCollectionFailed": "Tétel eltávolítása a gyűjteményből sikertelen",
"ToastRemoveItemFromCollectionSuccess": "Tétel eltávolítva a gyűjteményből", "ToastRemoveItemFromCollectionSuccess": "Tétel eltávolítva a gyűjteményből",
"ToastRemoveItemsWithIssuesFailed": "Nem sikerült eltávolítani a hibás könyvtárelemeket",
"ToastRemoveItemsWithIssuesSuccess": "Hibás könyvtárelemek eltávolítva",
"ToastRenameFailed": "Sikertelen átnevezés", "ToastRenameFailed": "Sikertelen átnevezés",
"ToastRescanFailed": "Sikertelen újrakeresés a következőnél: {0}",
"ToastRescanRemoved": "A teljes újrabeolvasás befejezve, elem eltávolítva",
"ToastRescanUpToDate": "A teljes újrabeolvasás befejezve, elem naprakész volt",
"ToastRescanUpdated": "A teljes újrabeolvasás befejezve, elem frissítve",
"ToastScanFailed": "Nem sikerült beolvasni a könyvtárelemet",
"ToastSelectAtLeastOneUser": "Válasszon legalább egy felhasználót", "ToastSelectAtLeastOneUser": "Válasszon legalább egy felhasználót",
"ToastSendEbookToDeviceFailed": "E-könyv küldése az eszközre sikertelen", "ToastSendEbookToDeviceFailed": "E-könyv küldése az eszközre sikertelen",
"ToastSendEbookToDeviceSuccess": "E-könyv elküldve az eszközre \"{0}\"", "ToastSendEbookToDeviceSuccess": "E-könyv elküldve az eszközre \"{0}\"",
"ToastSeriesSubmitFailedSameName": "Nem lehet két azonos nevű sorozatot hozzáadni",
"ToastSeriesUpdateFailed": "Sorozat frissítése sikertelen", "ToastSeriesUpdateFailed": "Sorozat frissítése sikertelen",
"ToastSeriesUpdateSuccess": "Sorozat frissítése sikeres", "ToastSeriesUpdateSuccess": "Sorozat frissítése sikeres",
"ToastServerSettingsUpdateSuccess": "Szerver beállítások frissítve", "ToastServerSettingsUpdateSuccess": "Szerver beállítások frissítve",
@@ -1043,6 +1087,8 @@
"ToastSessionDeleteFailed": "Munkamenet törlése sikertelen", "ToastSessionDeleteFailed": "Munkamenet törlése sikertelen",
"ToastSessionDeleteSuccess": "Munkamenet törölve", "ToastSessionDeleteSuccess": "Munkamenet törölve",
"ToastSleepTimerDone": "Alvásidőzítő kész... zZzzZZz", "ToastSleepTimerDone": "Alvásidőzítő kész... zZzzZZz",
"ToastSlugMustChange": "A Slug érvénytelen karaktereket tartalmaz",
"ToastSlugRequired": "Slug szükséges",
"ToastSocketConnected": "Socket csatlakoztatva", "ToastSocketConnected": "Socket csatlakoztatva",
"ToastSocketDisconnected": "Socket lecsatlakoztatva", "ToastSocketDisconnected": "Socket lecsatlakoztatva",
"ToastSocketFailedToConnect": "A Socket csatlakoztatása sikertelen", "ToastSocketFailedToConnect": "A Socket csatlakoztatása sikertelen",
@@ -1050,9 +1096,14 @@
"ToastSortingPrefixesUpdateSuccess": "Rendezési előtagok frissítése ({0} elem)", "ToastSortingPrefixesUpdateSuccess": "Rendezési előtagok frissítése ({0} elem)",
"ToastTitleRequired": "A cím kötelező", "ToastTitleRequired": "A cím kötelező",
"ToastUnknownError": "Ismeretlen hiba", "ToastUnknownError": "Ismeretlen hiba",
"ToastUnlinkOpenIdFailed": "Nem sikerült leválasztani a felhasználót az OpenID-ről",
"ToastUnlinkOpenIdSuccess": "Felhasználó leválasztva az OpenID-ről",
"ToastUploaderFilepathExistsError": "A \"{0}\" fájl elérési útja már létezik a szerveren",
"ToastUploaderItemExistsInSubdirectoryError": "A „{0}” elem a feltöltési útvonal egy alkönyvtárát használja.",
"ToastUserDeleteFailed": "Felhasználó törlése sikertelen", "ToastUserDeleteFailed": "Felhasználó törlése sikertelen",
"ToastUserDeleteSuccess": "Felhasználó törölve", "ToastUserDeleteSuccess": "Felhasználó törölve",
"ToastUserPasswordChangeSuccess": "Jelszó sikeresen megváltoztatva", "ToastUserPasswordChangeSuccess": "Jelszó sikeresen megváltoztatva",
"ToastUserPasswordMismatch": "A jelszavak nem egyeznek",
"ToastUserPasswordMustChange": "Az új jelszó nem egyezik a régi jelszóval", "ToastUserPasswordMustChange": "Az új jelszó nem egyezik a régi jelszóval",
"ToastUserRootRequireName": "Egy root felhasználónevet kell megadnia" "ToastUserRootRequireName": "Egy root felhasználónevet kell megadnia"
} }
+2
View File
@@ -708,6 +708,7 @@
"MessageAddToPlayerQueue": "Aggiungi alla coda di riproduzione", "MessageAddToPlayerQueue": "Aggiungi alla coda di riproduzione",
"MessageAppriseDescription": "Per utilizzare questa funzione è necessario disporre di un'istanza di <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> in esecuzione o un'API che gestirà quelle stesse richieste. <br />L'API Url dovrebbe essere il percorso URL completo per inviare la notifica, ad esempio se la tua istanza API è servita cosi .<code>http://192.168.1.1:8337</code> Allora dovrai mettere <code>http://192.168.1.1:8337/notify</code>.", "MessageAppriseDescription": "Per utilizzare questa funzione è necessario disporre di un'istanza di <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> in esecuzione o un'API che gestirà quelle stesse richieste. <br />L'API Url dovrebbe essere il percorso URL completo per inviare la notifica, ad esempio se la tua istanza API è servita cosi .<code>http://192.168.1.1:8337</code> Allora dovrai mettere <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Assicurati di utilizzare l'ASIN della regione Audible corretta, non di Amazon.", "MessageAsinCheck": "Assicurati di utilizzare l'ASIN della regione Audible corretta, non di Amazon.",
"MessageAuthenticationOIDCChangesRestart": "Riavvia il tuo server dopo aver salvato per applicare le modifiche OIDC.",
"MessageBackupsDescription": "I backup includono utenti, progressi degli utenti, dettagli sugli elementi della libreria, impostazioni del server e immagini archiviate in <code>/metadata/items</code> & <code>/metadata/authors</code>. I backup non includono i file archiviati nelle cartelle della libreria.", "MessageBackupsDescription": "I backup includono utenti, progressi degli utenti, dettagli sugli elementi della libreria, impostazioni del server e immagini archiviate in <code>/metadata/items</code> & <code>/metadata/authors</code>. I backup non includono i file archiviati nelle cartelle della libreria.",
"MessageBackupsLocationEditNote": "Nota: l'aggiornamento della posizione di backup non sposterà o modificherà i backup esistenti", "MessageBackupsLocationEditNote": "Nota: l'aggiornamento della posizione di backup non sposterà o modificherà i backup esistenti",
"MessageBackupsLocationNoEditNote": "Nota: la posizione del backup viene impostata tramite una variabile di ambiente e non può essere modificata qui.", "MessageBackupsLocationNoEditNote": "Nota: la posizione del backup viene impostata tramite una variabile di ambiente e non può essere modificata qui.",
@@ -855,6 +856,7 @@
"MessageScheduleRunEveryWeekdayAtTime": "Esegui ogni {0} alle {1}", "MessageScheduleRunEveryWeekdayAtTime": "Esegui ogni {0} alle {1}",
"MessageSearchResultsFor": "cerca risultati per", "MessageSearchResultsFor": "cerca risultati per",
"MessageSelected": "{0} selezionati", "MessageSelected": "{0} selezionati",
"MessageSeriesSequenceCannotContainSpaces": "La sequenza della serie non può contenere spazi",
"MessageServerCouldNotBeReached": "Impossibile raggiungere il server", "MessageServerCouldNotBeReached": "Impossibile raggiungere il server",
"MessageSetChaptersFromTracksDescription": "Impostare i capitoli utilizzando ciascun file audio come capitolo e il titolo del capitolo come nome del file audio", "MessageSetChaptersFromTracksDescription": "Impostare i capitoli utilizzando ciascun file audio come capitolo e il titolo del capitolo come nome del file audio",
"MessageShareExpirationWillBe": "Scadrà tra <strong>{0}</strong>", "MessageShareExpirationWillBe": "Scadrà tra <strong>{0}</strong>",
+8 -2
View File
@@ -394,6 +394,7 @@
"LabelIntervalEvery6Hours": "Iedere 6 uur", "LabelIntervalEvery6Hours": "Iedere 6 uur",
"LabelIntervalEveryDay": "Iedere dag", "LabelIntervalEveryDay": "Iedere dag",
"LabelIntervalEveryHour": "Ieder uur", "LabelIntervalEveryHour": "Ieder uur",
"LabelIntervalEveryMinute": "Elke minuut",
"LabelInvert": "Omdraaien", "LabelInvert": "Omdraaien",
"LabelItem": "Onderdeel", "LabelItem": "Onderdeel",
"LabelJumpBackwardAmount": "Terugspoelen hoeveelheid", "LabelJumpBackwardAmount": "Terugspoelen hoeveelheid",
@@ -424,7 +425,7 @@
"LabelLookForNewEpisodesAfterDate": "Zoek naar nieuwe afleveringen na deze datum", "LabelLookForNewEpisodesAfterDate": "Zoek naar nieuwe afleveringen na deze datum",
"LabelLowestPriority": "Laagste Prioriteit", "LabelLowestPriority": "Laagste Prioriteit",
"LabelMatchExistingUsersBy": "Bestaande gebruikers matchen op", "LabelMatchExistingUsersBy": "Bestaande gebruikers matchen op",
"LabelMatchExistingUsersByDescription": "Wordt gebruikt om bestaande gebruikers te verbinden. Zodra ze verbonden zijn, worden gebruikers gekoppeld aan een unieke id van uw SSO-provider.", "LabelMatchExistingUsersByDescription": "Wordt gebruikt om bestaande gebruikers te verbinden. Zodra ze verbonden zijn, worden gebruikers gekoppeld aan een unieke id van uw SSO-provider",
"LabelMaxEpisodesToDownload": "Maximale # afleveringen om te downloaden. Gebruik 0 voor ongelimiteerd.", "LabelMaxEpisodesToDownload": "Maximale # afleveringen om te downloaden. Gebruik 0 voor ongelimiteerd.",
"LabelMaxEpisodesToDownloadPerCheck": "Maximale # nieuwe afleveringen om te downloaden per check", "LabelMaxEpisodesToDownloadPerCheck": "Maximale # nieuwe afleveringen om te downloaden per check",
"LabelMaxEpisodesToKeep": "Maximale # afleveringen om te houden", "LabelMaxEpisodesToKeep": "Maximale # afleveringen om te houden",
@@ -529,6 +530,7 @@
"LabelReleaseDate": "Verschijningsdatum", "LabelReleaseDate": "Verschijningsdatum",
"LabelRemoveAllMetadataAbs": "Verwijder alle metadata.abs bestanden", "LabelRemoveAllMetadataAbs": "Verwijder alle metadata.abs bestanden",
"LabelRemoveAllMetadataJson": "Verwijder alle metadata.json bestanden", "LabelRemoveAllMetadataJson": "Verwijder alle metadata.json bestanden",
"LabelRemoveAudibleBranding": "Verwijder Audible intro en outro uit hoofdstukken",
"LabelRemoveCover": "Verwijder cover", "LabelRemoveCover": "Verwijder cover",
"LabelRemoveMetadataFile": "Verwijder metadata bestanden in bibliotheek item folders", "LabelRemoveMetadataFile": "Verwijder metadata bestanden in bibliotheek item folders",
"LabelRemoveMetadataFileHelp": "Verwijder alle metadata.json en metadata.abs bestanden in uw {0} folders.", "LabelRemoveMetadataFileHelp": "Verwijder alle metadata.json en metadata.abs bestanden in uw {0} folders.",
@@ -558,6 +560,8 @@
"LabelSettingsBookshelfViewHelp": "Skeumorphisch design met houten planken", "LabelSettingsBookshelfViewHelp": "Skeumorphisch design met houten planken",
"LabelSettingsChromecastSupport": "Chromecast ondersteuning", "LabelSettingsChromecastSupport": "Chromecast ondersteuning",
"LabelSettingsDateFormat": "Datum format", "LabelSettingsDateFormat": "Datum format",
"LabelSettingsEnableWatcher": "Bibliotheken automatisch scannen op wijzigingen",
"LabelSettingsEnableWatcherForLibrary": "Bibliotheek automatisch scannen op wijzigingen",
"LabelSettingsEnableWatcherHelp": "Zorgt voor het automatisch toevoegen/bijwerken van onderdelen als bestandswijzigingen worden gedetecteerd. *Vereist herstarten van server", "LabelSettingsEnableWatcherHelp": "Zorgt voor het automatisch toevoegen/bijwerken van onderdelen als bestandswijzigingen worden gedetecteerd. *Vereist herstarten van server",
"LabelSettingsEpubsAllowScriptedContent": "Sta scripted content toe in epubs", "LabelSettingsEpubsAllowScriptedContent": "Sta scripted content toe in epubs",
"LabelSettingsEpubsAllowScriptedContentHelp": "Sta toe dat epub-bestanden scripts uitvoeren. Het wordt aanbevolen om deze instelling uitgeschakeld te houden, tenzij u de bron van de epub-bestanden vertrouwt.", "LabelSettingsEpubsAllowScriptedContentHelp": "Sta toe dat epub-bestanden scripts uitvoeren. Het wordt aanbevolen om deze instelling uitgeschakeld te houden, tenzij u de bron van de epub-bestanden vertrouwt.",
@@ -719,6 +723,7 @@
"MessageChapterErrorStartGteDuration": "Ongeldig: starttijd moet kleiner zijn dan duur van audioboek", "MessageChapterErrorStartGteDuration": "Ongeldig: starttijd moet kleiner zijn dan duur van audioboek",
"MessageChapterErrorStartLtPrev": "Ongeldig: starttijd moet be groter zijn dan of equal aan starttijd van vorig hoofdstuk", "MessageChapterErrorStartLtPrev": "Ongeldig: starttijd moet be groter zijn dan of equal aan starttijd van vorig hoofdstuk",
"MessageChapterStartIsAfter": "Start van hoofdstuk is na het einde van je audioboek", "MessageChapterStartIsAfter": "Start van hoofdstuk is na het einde van je audioboek",
"MessageChaptersNotFound": "Hoofdstukken niet gevonden",
"MessageCheckingCron": "Cron aan het checken...", "MessageCheckingCron": "Cron aan het checken...",
"MessageConfirmCloseFeed": "Ben je zeker dat je deze feed wil sluiten?", "MessageConfirmCloseFeed": "Ben je zeker dat je deze feed wil sluiten?",
"MessageConfirmDeleteBackup": "Weet je zeker dat je de backup voor {0} wil verwijderen?", "MessageConfirmDeleteBackup": "Weet je zeker dat je de backup voor {0} wil verwijderen?",
@@ -775,6 +780,7 @@
"MessageForceReScanDescription": "zal alle bestanden opnieuw scannen als een verse scan. Audiobestanden ID3-tags, OPF-bestanden en textbestanden zullen als nieuw worden gescand.", "MessageForceReScanDescription": "zal alle bestanden opnieuw scannen als een verse scan. Audiobestanden ID3-tags, OPF-bestanden en textbestanden zullen als nieuw worden gescand.",
"MessageImportantNotice": "Belangrijke opmerking!", "MessageImportantNotice": "Belangrijke opmerking!",
"MessageInsertChapterBelow": "Hoofdstuk hieronder invoegen", "MessageInsertChapterBelow": "Hoofdstuk hieronder invoegen",
"MessageInvalidAsin": "Ongeldige ASIN",
"MessageItemsSelected": "{0} onderdelen geselecteerd", "MessageItemsSelected": "{0} onderdelen geselecteerd",
"MessageItemsUpdated": "{0} onderdelen bijgewerkt", "MessageItemsUpdated": "{0} onderdelen bijgewerkt",
"MessageJoinUsOn": "Doe mee op", "MessageJoinUsOn": "Doe mee op",
@@ -808,7 +814,7 @@
"MessageNoItems": "Geen onderdelen", "MessageNoItems": "Geen onderdelen",
"MessageNoItemsFound": "Geen onderdelen gevonden", "MessageNoItemsFound": "Geen onderdelen gevonden",
"MessageNoListeningSessions": "Geen luistersessies", "MessageNoListeningSessions": "Geen luistersessies",
"MessageNoLogs": "Geen logs", "MessageNoLogs": "Geen logbestanden",
"MessageNoMediaProgress": "Geen mediavoortgang", "MessageNoMediaProgress": "Geen mediavoortgang",
"MessageNoNotifications": "Geen notificaties", "MessageNoNotifications": "Geen notificaties",
"MessageNoPodcastFeed": "Ongeldige podcast: Geen Feed", "MessageNoPodcastFeed": "Ongeldige podcast: Geen Feed",
+13 -1
View File
@@ -8,7 +8,7 @@
"ButtonAddYourFirstLibrary": "Legg til ditt første bibliotek", "ButtonAddYourFirstLibrary": "Legg til ditt første bibliotek",
"ButtonApply": "Bruk", "ButtonApply": "Bruk",
"ButtonApplyChapters": "Bruk kapittel", "ButtonApplyChapters": "Bruk kapittel",
"ButtonAuthors": "Forfatter", "ButtonAuthors": "Forfattere",
"ButtonBack": "Tilbake", "ButtonBack": "Tilbake",
"ButtonBrowseForFolder": "Bla gjennom mappe", "ButtonBrowseForFolder": "Bla gjennom mappe",
"ButtonCancel": "Avbryt", "ButtonCancel": "Avbryt",
@@ -175,6 +175,7 @@
"HeaderPlaylist": "Spilleliste", "HeaderPlaylist": "Spilleliste",
"HeaderPlaylistItems": "Spillelisteelement", "HeaderPlaylistItems": "Spillelisteelement",
"HeaderPodcastsToAdd": "Podcaster å legge til", "HeaderPodcastsToAdd": "Podcaster å legge til",
"HeaderPresets": "Forhåndsinnstillinger",
"HeaderPreviewCover": "Forhåndsvis omslag", "HeaderPreviewCover": "Forhåndsvis omslag",
"HeaderRSSFeedGeneral": "RSS Detailer", "HeaderRSSFeedGeneral": "RSS Detailer",
"HeaderRSSFeedIsOpen": "RSS Feed er åpen", "HeaderRSSFeedIsOpen": "RSS Feed er åpen",
@@ -217,6 +218,7 @@
"LabelAccountTypeAdmin": "Administrator", "LabelAccountTypeAdmin": "Administrator",
"LabelAccountTypeGuest": "Gjest", "LabelAccountTypeGuest": "Gjest",
"LabelAccountTypeUser": "Bruker", "LabelAccountTypeUser": "Bruker",
"LabelActivities": "Aktiviteter",
"LabelActivity": "Aktivitet", "LabelActivity": "Aktivitet",
"LabelAddToCollection": "Legg til i samling", "LabelAddToCollection": "Legg til i samling",
"LabelAddToCollectionBatch": "Legg {0} bøker til samling", "LabelAddToCollectionBatch": "Legg {0} bøker til samling",
@@ -226,6 +228,7 @@
"LabelAddedDate": "La til {0}", "LabelAddedDate": "La til {0}",
"LabelAdminUsersOnly": "Kun administratorer", "LabelAdminUsersOnly": "Kun administratorer",
"LabelAll": "Alle", "LabelAll": "Alle",
"LabelAllEpisodesDownloaded": "Alle nedlastede episoder",
"LabelAllUsers": "Alle brukere", "LabelAllUsers": "Alle brukere",
"LabelAllUsersExcludingGuests": "Alle brukere bortsett fra gjester", "LabelAllUsersExcludingGuests": "Alle brukere bortsett fra gjester",
"LabelAllUsersIncludingGuests": "Alle brukere inkludert gjester", "LabelAllUsersIncludingGuests": "Alle brukere inkludert gjester",
@@ -281,6 +284,7 @@
"LabelContinueSeries": "Fortsett serier", "LabelContinueSeries": "Fortsett serier",
"LabelCover": "Omslag", "LabelCover": "Omslag",
"LabelCoverImageURL": "Omslagsbilde URL", "LabelCoverImageURL": "Omslagsbilde URL",
"LabelCoverProvider": "Tilbyder av omslagsbilde",
"LabelCreatedAt": "Dato opprettet", "LabelCreatedAt": "Dato opprettet",
"LabelCronExpression": "Cron uttrykk", "LabelCronExpression": "Cron uttrykk",
"LabelCurrent": "Nåværende", "LabelCurrent": "Nåværende",
@@ -389,6 +393,7 @@
"LabelIntervalEvery6Hours": "Hver 6. timer", "LabelIntervalEvery6Hours": "Hver 6. timer",
"LabelIntervalEveryDay": "Hver dag", "LabelIntervalEveryDay": "Hver dag",
"LabelIntervalEveryHour": "Hver time", "LabelIntervalEveryHour": "Hver time",
"LabelIntervalEveryMinute": "Hvert minutt",
"LabelInvert": "Inverter", "LabelInvert": "Inverter",
"LabelItem": "Enhet", "LabelItem": "Enhet",
"LabelJumpBackwardAmount": "Hopp bakover med", "LabelJumpBackwardAmount": "Hopp bakover med",
@@ -464,6 +469,7 @@
"LabelNotificationsMaxQueueSizeHelp": "Hendelser er begrenset til avfyre én gang per sekund. Hendelser blir ignorert om køen er full. Dette forhindrer overflod av varslinger.", "LabelNotificationsMaxQueueSizeHelp": "Hendelser er begrenset til avfyre én gang per sekund. Hendelser blir ignorert om køen er full. Dette forhindrer overflod av varslinger.",
"LabelNumberOfBooks": "Antall bøker", "LabelNumberOfBooks": "Antall bøker",
"LabelNumberOfEpisodes": "Antall episoder", "LabelNumberOfEpisodes": "Antall episoder",
"LabelOpenIDAdvancedPermsClaimDescription": "Navnet på OpenID claim'et som inneholder avanserte tilganger for brukerhandlinger i applikasjonen som vil brukes for ikke-administratorroller (<b>hvis konfigurert</b>). Hvis claim'et mangler fra responsen, nektes tilgang til ABS. Hvis en enkelt opsjon mangler, blir behandlet som <code>false</code>. Påse at identitetstilbyderens claim stemmer overens med den forventede strukturen:",
"LabelOpenIDClaims": "La følge valg være tomme for å slå av avanserte gruppe og tillatelser. Gruppen \"Bruker\" vil da også automatisk legges til.", "LabelOpenIDClaims": "La følge valg være tomme for å slå av avanserte gruppe og tillatelser. Gruppen \"Bruker\" vil da også automatisk legges til.",
"LabelOpenRSSFeed": "Åpne RSS Feed", "LabelOpenRSSFeed": "Åpne RSS Feed",
"LabelOverwrite": "Overskriv", "LabelOverwrite": "Overskriv",
@@ -521,6 +527,7 @@
"LabelReleaseDate": "Utgivelsesdato", "LabelReleaseDate": "Utgivelsesdato",
"LabelRemoveAllMetadataAbs": "Fjern alle metadata.abs filer", "LabelRemoveAllMetadataAbs": "Fjern alle metadata.abs filer",
"LabelRemoveAllMetadataJson": "Fjern alle metadata.json filer", "LabelRemoveAllMetadataJson": "Fjern alle metadata.json filer",
"LabelRemoveAudibleBranding": "Fjern Audible inn- og utledning fra kapitler",
"LabelRemoveCover": "Fjern omslag", "LabelRemoveCover": "Fjern omslag",
"LabelRemoveMetadataFile": "Fjern metadata-filer fra biblioteks-mapper", "LabelRemoveMetadataFile": "Fjern metadata-filer fra biblioteks-mapper",
"LabelRemoveMetadataFileHelp": "Fjern alle metadata.json og metadata.abs i alle {0} mappene.", "LabelRemoveMetadataFileHelp": "Fjern alle metadata.json og metadata.abs i alle {0} mappene.",
@@ -550,6 +557,8 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorf design med hyller av ved", "LabelSettingsBookshelfViewHelp": "Skeuomorf design med hyller av ved",
"LabelSettingsChromecastSupport": "Chromecast støtte", "LabelSettingsChromecastSupport": "Chromecast støtte",
"LabelSettingsDateFormat": "Dato Format", "LabelSettingsDateFormat": "Dato Format",
"LabelSettingsEnableWatcher": "Skann biblioteker automatisk for endringer",
"LabelSettingsEnableWatcherForLibrary": "Skann bibliotek automatisk for endringer",
"LabelSettingsEnableWatcherHelp": "Aktiverer automatisk opprettelse/oppdatering av enheter når filendringer er oppdaget. *Krever restart av server*", "LabelSettingsEnableWatcherHelp": "Aktiverer automatisk opprettelse/oppdatering av enheter når filendringer er oppdaget. *Krever restart av server*",
"LabelSettingsEpubsAllowScriptedContent": "Tillat scripting i innholdet i ebub-bøker", "LabelSettingsEpubsAllowScriptedContent": "Tillat scripting i innholdet i ebub-bøker",
"LabelSettingsEpubsAllowScriptedContentHelp": "Tillat epub-filer å kjøre script. Det er anbefalt å slå av denne innstillingen med mindre du stoler på kilden til epub-filene.", "LabelSettingsEpubsAllowScriptedContentHelp": "Tillat epub-filer å kjøre script. Det er anbefalt å slå av denne innstillingen med mindre du stoler på kilden til epub-filene.",
@@ -593,6 +602,7 @@
"LabelSlug": "Slug", "LabelSlug": "Slug",
"LabelSortAscending": "Stigende", "LabelSortAscending": "Stigende",
"LabelSortDescending": "Synkende", "LabelSortDescending": "Synkende",
"LabelSortPubDate": "Sorter etter publiseringsdato",
"LabelStart": "Start", "LabelStart": "Start",
"LabelStartTime": "Start Tid", "LabelStartTime": "Start Tid",
"LabelStarted": "Startet", "LabelStarted": "Startet",
@@ -693,6 +703,8 @@
"LabelYourProgress": "Din fremgang", "LabelYourProgress": "Din fremgang",
"MessageAddToPlayerQueue": "Legg til i kø", "MessageAddToPlayerQueue": "Legg til i kø",
"MessageAppriseDescription": "For å bruke denne funksjonen trenger du en instans av <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kjørende eller et API som håndterer disse forespørslene. <br />Apprise API URL skal være hele URL-en til varslingen, f.eks., hvis din API-instans er på <code>http://192.168.1.1:8337</code> så skal du bruke <code>http://192.168.1.1:8337/notify</code>.", "MessageAppriseDescription": "For å bruke denne funksjonen trenger du en instans av <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kjørende eller et API som håndterer disse forespørslene. <br />Apprise API URL skal være hele URL-en til varslingen, f.eks., hvis din API-instans er på <code>http://192.168.1.1:8337</code> så skal du bruke <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Påse at du bruker ASIN fra den riktige Audible-regionen, ikke Amazon.",
"MessageAuthenticationOIDCChangesRestart": "Etter å ha lagret, start serveren din på nytt for at OIDC-endringene skal tre i kraft.",
"MessageBackupsDescription": "Sikkerhetskopier inkluderer, brukerfremgang, detaljer om bibliotekgjenstander, tjener instillinger og bilder lagret under <code>/metadata/items</code> og <code>/metadata/authors</code>. Sikkerhetskopier <strong>vil ikke</strong> inkludere filer som er lagret i bibliotek mappene.", "MessageBackupsDescription": "Sikkerhetskopier inkluderer, brukerfremgang, detaljer om bibliotekgjenstander, tjener instillinger og bilder lagret under <code>/metadata/items</code> og <code>/metadata/authors</code>. Sikkerhetskopier <strong>vil ikke</strong> inkludere filer som er lagret i bibliotek mappene.",
"MessageBackupsLocationEditNote": "Viktig: Endring av mappen for sikkerhetskopi hverken endrer eller flytter eksisterende sikkerhetskopier!", "MessageBackupsLocationEditNote": "Viktig: Endring av mappen for sikkerhetskopi hverken endrer eller flytter eksisterende sikkerhetskopier!",
"MessageBackupsLocationNoEditNote": "NB: Mappen for sikkerhetskopi settes i en miljøvariabel og kan ikke endres her.", "MessageBackupsLocationNoEditNote": "NB: Mappen for sikkerhetskopi settes i en miljøvariabel og kan ikke endres her.",
+41 -1
View File
@@ -329,7 +329,9 @@
"LabelEpisode": "Odcinek", "LabelEpisode": "Odcinek",
"LabelEpisodeTitle": "Tytuł odcinka", "LabelEpisodeTitle": "Tytuł odcinka",
"LabelEpisodeType": "Typ odcinka", "LabelEpisodeType": "Typ odcinka",
"LabelEpisodeUrlFromRssFeed": "Adres URL odcinka z kanału RSS",
"LabelEpisodes": "Epizody", "LabelEpisodes": "Epizody",
"LabelEpisodic": "Epizodyczny",
"LabelExample": "Przykład", "LabelExample": "Przykład",
"LabelExpandSeries": "Rozwiń serie", "LabelExpandSeries": "Rozwiń serie",
"LabelExpandSubSeries": "Rozwiń podserie", "LabelExpandSubSeries": "Rozwiń podserie",
@@ -357,6 +359,7 @@
"LabelFontScale": "Rozmiar czcionki", "LabelFontScale": "Rozmiar czcionki",
"LabelFontStrikethrough": "Przekreślony", "LabelFontStrikethrough": "Przekreślony",
"LabelFormat": "Format", "LabelFormat": "Format",
"LabelFull": "Pełny",
"LabelGenre": "Gatunek", "LabelGenre": "Gatunek",
"LabelGenres": "Gatunki", "LabelGenres": "Gatunki",
"LabelHardDeleteFile": "Usuń trwale plik", "LabelHardDeleteFile": "Usuń trwale plik",
@@ -381,6 +384,7 @@
"LabelIntervalEvery6Hours": "Co 6 godzin", "LabelIntervalEvery6Hours": "Co 6 godzin",
"LabelIntervalEveryDay": "Każdego dnia", "LabelIntervalEveryDay": "Każdego dnia",
"LabelIntervalEveryHour": "Każdej godziny", "LabelIntervalEveryHour": "Każdej godziny",
"LabelIntervalEveryMinute": "Co minutę",
"LabelInvert": "Inversja", "LabelInvert": "Inversja",
"LabelItem": "Pozycja", "LabelItem": "Pozycja",
"LabelJumpBackwardAmount": "Przeskocz do tyłu o:", "LabelJumpBackwardAmount": "Przeskocz do tyłu o:",
@@ -412,6 +416,9 @@
"LabelLowestPriority": "Najniższy priorytet", "LabelLowestPriority": "Najniższy priorytet",
"LabelMatchExistingUsersBy": "Dopasuje istniejących użytkowników poprzez", "LabelMatchExistingUsersBy": "Dopasuje istniejących użytkowników poprzez",
"LabelMatchExistingUsersByDescription": "Służy do łączenia istniejących użytkowników. Po połączeniu użytkownicy zostaną dopasowani za pomocą unikalnego identyfikatora od dostawcy SSO", "LabelMatchExistingUsersByDescription": "Służy do łączenia istniejących użytkowników. Po połączeniu użytkownicy zostaną dopasowani za pomocą unikalnego identyfikatora od dostawcy SSO",
"LabelMaxEpisodesToDownload": "Maksymalna liczba odcinków do pobrania. Użyj 0, aby wyłączyć ograniczenie.",
"LabelMaxEpisodesToKeep": "Maksymalna liczba odcinków do zachowania",
"LabelMaxEpisodesToKeepHelp": "Wartość 0 wyłącza maksymalny limit. Po automatycznym pobraniu nowego odcinka, najstarszy odcinek zostanie usunięty, jeśli masz ich więcej niż X. Spowoduje to usunięcie tylko 1 odcinka na nowe pobieranie.",
"LabelMediaPlayer": "Odtwarzacz", "LabelMediaPlayer": "Odtwarzacz",
"LabelMediaType": "Typ mediów", "LabelMediaType": "Typ mediów",
"LabelMetaTag": "Tag", "LabelMetaTag": "Tag",
@@ -424,6 +431,7 @@
"LabelMissingEbook": "Nie posiada ebooka", "LabelMissingEbook": "Nie posiada ebooka",
"LabelMissingSupplementaryEbook": "Nie posiada dodatkowego ebooka", "LabelMissingSupplementaryEbook": "Nie posiada dodatkowego ebooka",
"LabelMobileRedirectURIs": "Dozwolone URI przekierowań mobilnych", "LabelMobileRedirectURIs": "Dozwolone URI przekierowań mobilnych",
"LabelMobileRedirectURIsDescription": "To jest biała lista prawidłowych adresów URI przekierowań dla aplikacji mobilnych. Domyślny adres to <code>audiobookshelf://oauth</code>, który można usunąć lub dodać inne adresy URI w celu integracji z aplikacjami innych firm. Użycie gwiazdki (<code>*</code>) jako jedynego wpisu zezwala na dowolny URI.",
"LabelMore": "Więcej", "LabelMore": "Więcej",
"LabelMoreInfo": "Więcej informacji", "LabelMoreInfo": "Więcej informacji",
"LabelName": "Nazwa", "LabelName": "Nazwa",
@@ -453,12 +461,14 @@
"LabelNumberOfEpisodes": "# Odcinków", "LabelNumberOfEpisodes": "# Odcinków",
"LabelOpenRSSFeed": "Otwórz kanał RSS", "LabelOpenRSSFeed": "Otwórz kanał RSS",
"LabelOverwrite": "Nadpisz", "LabelOverwrite": "Nadpisz",
"LabelPaginationPageXOfY": "Strona {0} z {1}",
"LabelPassword": "Hasło", "LabelPassword": "Hasło",
"LabelPath": "Ścieżka", "LabelPath": "Ścieżka",
"LabelPermanent": "Stałe", "LabelPermanent": "Stałe",
"LabelPermissionsAccessAllLibraries": "Ma dostęp do wszystkich bibliotek", "LabelPermissionsAccessAllLibraries": "Ma dostęp do wszystkich bibliotek",
"LabelPermissionsAccessAllTags": "Ma dostęp do wszystkich tagów", "LabelPermissionsAccessAllTags": "Ma dostęp do wszystkich tagów",
"LabelPermissionsAccessExplicitContent": "Ma dostęp do treści oznacznych jako nieprzyzwoite", "LabelPermissionsAccessExplicitContent": "Ma dostęp do treści oznacznych jako nieprzyzwoite",
"LabelPermissionsCreateEreader": "Możliwość stworzenia czytnika e-booków",
"LabelPermissionsDelete": "Ma możliwość usuwania", "LabelPermissionsDelete": "Ma możliwość usuwania",
"LabelPermissionsDownload": "Ma możliwość pobierania", "LabelPermissionsDownload": "Ma możliwość pobierania",
"LabelPermissionsUpdate": "Ma możliwość aktualizowania", "LabelPermissionsUpdate": "Ma możliwość aktualizowania",
@@ -466,19 +476,25 @@
"LabelPersonalYearReview": "Podsumowanie twojego roku ({0})", "LabelPersonalYearReview": "Podsumowanie twojego roku ({0})",
"LabelPhotoPathURL": "Scieżka/URL do zdjęcia", "LabelPhotoPathURL": "Scieżka/URL do zdjęcia",
"LabelPlayMethod": "Metoda odtwarzania", "LabelPlayMethod": "Metoda odtwarzania",
"LabelPlayerChapterNumberMarker": "{0} z {1}",
"LabelPlaylists": "Listy odtwarzania", "LabelPlaylists": "Listy odtwarzania",
"LabelPodcast": "Podcast",
"LabelPodcastSearchRegion": "Obszar wyszukiwania podcastów", "LabelPodcastSearchRegion": "Obszar wyszukiwania podcastów",
"LabelPodcastType": "Typ podcastu",
"LabelPodcasts": "Podcasty", "LabelPodcasts": "Podcasty",
"LabelPort": "Port",
"LabelPrefixesToIgnore": "Ignorowane prefiksy (wielkość liter nie ma znaczenia)", "LabelPrefixesToIgnore": "Ignorowane prefiksy (wielkość liter nie ma znaczenia)",
"LabelPreventIndexing": "Zapobiega indeksowaniu przez iTunes i Google", "LabelPreventIndexing": "Zapobiega indeksowaniu przez iTunes i Google",
"LabelPrimaryEbook": "Główny ebook", "LabelPrimaryEbook": "Główny ebook",
"LabelProgress": "Postęp", "LabelProgress": "Postęp",
"LabelProvider": "Dostawca", "LabelProvider": "Dostawca",
"LabelProviderAuthorizationValue": "Wartość nagłówka autoryzacji",
"LabelPubDate": "Data publikacji", "LabelPubDate": "Data publikacji",
"LabelPublishYear": "Rok publikacji", "LabelPublishYear": "Rok publikacji",
"LabelPublishedDate": "Opublikowano {0}",
"LabelPublisher": "Wydawca", "LabelPublisher": "Wydawca",
"LabelPublishers": "Wydawcy", "LabelPublishers": "Wydawcy",
"LabelRSSFeedOpen": "RSS Feed otwarty", "LabelRSSFeedOpen": "Otwarty Kanał RSS",
"LabelRSSFeedPreventIndexing": "Zapobiegaj indeksowaniu", "LabelRSSFeedPreventIndexing": "Zapobiegaj indeksowaniu",
"LabelRSSFeedURL": "URL kanały RSS", "LabelRSSFeedURL": "URL kanały RSS",
"LabelRandomly": "Losowo", "LabelRandomly": "Losowo",
@@ -490,15 +506,22 @@
"LabelRecentlyAdded": "Niedawno dodane", "LabelRecentlyAdded": "Niedawno dodane",
"LabelRecommended": "Polecane", "LabelRecommended": "Polecane",
"LabelRedo": "Wycofaj", "LabelRedo": "Wycofaj",
"LabelRegion": "Region",
"LabelReleaseDate": "Data wydania", "LabelReleaseDate": "Data wydania",
"LabelRemoveAllMetadataAbs": "Usuń wszystkie pliki metadata.abs",
"LabelRemoveAllMetadataJson": "Usuń wszystkie pliki metadata.json",
"LabelRemoveCover": "Usuń okładkę", "LabelRemoveCover": "Usuń okładkę",
"LabelRemoveMetadataFile": "Usuń pliki metadanych z folderów biblioteki",
"LabelRemoveMetadataFileHelp": "Usuń wszystkie pliki metadata.json i metadata.abs z {0} folderów.",
"LabelRowsPerPage": "Wierszy na stronę", "LabelRowsPerPage": "Wierszy na stronę",
"LabelSearchTerm": "Wyszukiwanie frazy", "LabelSearchTerm": "Wyszukiwanie frazy",
"LabelSearchTitle": "Wyszukaj tytuł", "LabelSearchTitle": "Wyszukaj tytuł",
"LabelSearchTitleOrASIN": "Szukaj tytuł lub ASIN", "LabelSearchTitleOrASIN": "Szukaj tytuł lub ASIN",
"LabelSeason": "Sezon", "LabelSeason": "Sezon",
"LabelSeasonNumber": "Sezon #{0}",
"LabelSelectAll": "Wybierz wszystko", "LabelSelectAll": "Wybierz wszystko",
"LabelSelectAllEpisodes": "Wybierz wszystkie odcinki", "LabelSelectAllEpisodes": "Wybierz wszystkie odcinki",
"LabelSelectEpisodesShowing": "Wybierz {0} wyświetlanych odcinków",
"LabelSelectUsers": "Wybór użytkowników", "LabelSelectUsers": "Wybór użytkowników",
"LabelSendEbookToDevice": "Wyślij ebook do...", "LabelSendEbookToDevice": "Wyślij ebook do...",
"LabelSequence": "Kolejność", "LabelSequence": "Kolejność",
@@ -513,6 +536,8 @@
"LabelSettingsBookshelfViewHelp": "Widok półki z książkami", "LabelSettingsBookshelfViewHelp": "Widok półki z książkami",
"LabelSettingsChromecastSupport": "Wsparcie Chromecast", "LabelSettingsChromecastSupport": "Wsparcie Chromecast",
"LabelSettingsDateFormat": "Format daty", "LabelSettingsDateFormat": "Format daty",
"LabelSettingsEnableWatcher": "Automatyczne skanowanie bibliotek w poszukiwaniu zmian",
"LabelSettingsEnableWatcherForLibrary": "Automatyczne skanowanie biblioteki w poszukiwaniu zmian",
"LabelSettingsEnableWatcherHelp": "Włącza automatyczne dodawanie/aktualizację pozycji gdy wykryte zostaną zmiany w plikach. Wymaga restartu serwera", "LabelSettingsEnableWatcherHelp": "Włącza automatyczne dodawanie/aktualizację pozycji gdy wykryte zostaną zmiany w plikach. Wymaga restartu serwera",
"LabelSettingsEpubsAllowScriptedContent": "Zezwalanie na skrypty w plikach epub", "LabelSettingsEpubsAllowScriptedContent": "Zezwalanie na skrypty w plikach epub",
"LabelSettingsEpubsAllowScriptedContentHelp": "Zezwala plikom epub na wykonywanie skryptów. Zaleca się mieć to ustawienie wyłączone, chyba że ma się zaufanie do źródła plików epub.", "LabelSettingsEpubsAllowScriptedContentHelp": "Zezwala plikom epub na wykonywanie skryptów. Zaleca się mieć to ustawienie wyłączone, chyba że ma się zaufanie do źródła plików epub.",
@@ -524,6 +549,8 @@
"LabelSettingsHideSingleBookSeriesHelp": "Serie, które posiadają tylko jedną książkę, nie będą pokazywane na stronie z seriami i na stronie domowej z półkami.", "LabelSettingsHideSingleBookSeriesHelp": "Serie, które posiadają tylko jedną książkę, nie będą pokazywane na stronie z seriami i na stronie domowej z półkami.",
"LabelSettingsHomePageBookshelfView": "Widok półki z książkami na stronie głównej", "LabelSettingsHomePageBookshelfView": "Widok półki z książkami na stronie głównej",
"LabelSettingsLibraryBookshelfView": "Widok półki z książkami na stronie biblioteki", "LabelSettingsLibraryBookshelfView": "Widok półki z książkami na stronie biblioteki",
"LabelSettingsLibraryMarkAsFinishedWhen": "Oznacz element multimedialny jako ukończony, gdy",
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Pomiń poprzednie książki przy kontynuacji serii",
"LabelSettingsParseSubtitles": "Przetwarzaj podtytuły", "LabelSettingsParseSubtitles": "Przetwarzaj podtytuły",
"LabelSettingsParseSubtitlesHelp": "Opcja pozwala na pobranie podtytułu z nazwy folderu z audiobookiem. <br>Podtytuł musi być rozdzielony za pomocą separatora \" - \"<br>Przykład: \"Book Title - A Subtitle Here\" podtytuł \"A Subtitle Here\"", "LabelSettingsParseSubtitlesHelp": "Opcja pozwala na pobranie podtytułu z nazwy folderu z audiobookiem. <br>Podtytuł musi być rozdzielony za pomocą separatora \" - \"<br>Przykład: \"Book Title - A Subtitle Here\" podtytuł \"A Subtitle Here\"",
"LabelSettingsPreferMatchedMetadata": "Preferowanie dopasowanych metadanych", "LabelSettingsPreferMatchedMetadata": "Preferowanie dopasowanych metadanych",
@@ -547,6 +574,9 @@
"LabelShowSubtitles": "Pokaż Napisy", "LabelShowSubtitles": "Pokaż Napisy",
"LabelSize": "Rozmiar", "LabelSize": "Rozmiar",
"LabelSleepTimer": "Wyłącznik czasowy", "LabelSleepTimer": "Wyłącznik czasowy",
"LabelSortAscending": "Rosnąco",
"LabelSortDescending": "Malejąco",
"LabelSortPubDate": "Sortuj według daty publikacji",
"LabelStart": "Rozpocznij", "LabelStart": "Rozpocznij",
"LabelStartTime": "Czas rozpoczęcia", "LabelStartTime": "Czas rozpoczęcia",
"LabelStarted": "Rozpoczęty", "LabelStarted": "Rozpoczęty",
@@ -568,14 +598,21 @@
"LabelStatsWeekListening": "Tydzień słuchania", "LabelStatsWeekListening": "Tydzień słuchania",
"LabelSubtitle": "Podtytuł", "LabelSubtitle": "Podtytuł",
"LabelSupportedFileTypes": "Obsługiwane typy plików", "LabelSupportedFileTypes": "Obsługiwane typy plików",
"LabelTag": "Znacznik",
"LabelTags": "Tagi", "LabelTags": "Tagi",
"LabelTagsAccessibleToUser": "Tagi dostępne dla użytkownika", "LabelTagsAccessibleToUser": "Tagi dostępne dla użytkownika",
"LabelTagsNotAccessibleToUser": "Znaczniki niedostępne dla użytkownika",
"LabelTasks": "Uruchomione zadania",
"LabelTextEditorLink": "Link",
"LabelTextEditorNumberedList": "Lista numerowana",
"LabelTextEditorUnlink": "Usuń link",
"LabelThemeDark": "Ciemny", "LabelThemeDark": "Ciemny",
"LabelThemeLight": "Jasny", "LabelThemeLight": "Jasny",
"LabelTimeDurationXHours": "{0} godzin", "LabelTimeDurationXHours": "{0} godzin",
"LabelTimeDurationXMinutes": "{0} minuty", "LabelTimeDurationXMinutes": "{0} minuty",
"LabelTimeDurationXSeconds": "{0} sekundy", "LabelTimeDurationXSeconds": "{0} sekundy",
"LabelTimeInMinutes": "Czas w minutach", "LabelTimeInMinutes": "Czas w minutach",
"LabelTimeLeft": "pozostało {0}",
"LabelTimeListened": "Czas odtwarzania", "LabelTimeListened": "Czas odtwarzania",
"LabelTimeListenedToday": "Czas odtwarzania dzisiaj", "LabelTimeListenedToday": "Czas odtwarzania dzisiaj",
"LabelTimeRemaining": "Pozostało {0}", "LabelTimeRemaining": "Pozostało {0}",
@@ -583,6 +620,7 @@
"LabelTitle": "Tytuł", "LabelTitle": "Tytuł",
"LabelToolsEmbedMetadata": "Załącz metadane", "LabelToolsEmbedMetadata": "Załącz metadane",
"LabelToolsEmbedMetadataDescription": "Załącz metadane do plików audio (okładkę oraz znaczniki rozdziałów).", "LabelToolsEmbedMetadataDescription": "Załącz metadane do plików audio (okładkę oraz znaczniki rozdziałów).",
"LabelToolsM4bEncoder": "Enkoder M4B",
"LabelToolsMakeM4b": "Generuj plik M4B", "LabelToolsMakeM4b": "Generuj plik M4B",
"LabelToolsMakeM4bDescription": "Tworzy plik w formacie .M4B, który zawiera metadane, okładkę oraz rozdziały.", "LabelToolsMakeM4bDescription": "Tworzy plik w formacie .M4B, który zawiera metadane, okładkę oraz rozdziały.",
"LabelToolsSplitM4b": "Podziel plik .M4B na pliki .MP3", "LabelToolsSplitM4b": "Podziel plik .M4B na pliki .MP3",
@@ -595,12 +633,14 @@
"LabelType": "Typ", "LabelType": "Typ",
"LabelUndo": "Wycofaj", "LabelUndo": "Wycofaj",
"LabelUnknown": "Nieznany", "LabelUnknown": "Nieznany",
"LabelUnknownPublishDate": "Nieznana data publikacji",
"LabelUpdateCover": "Zaktalizuj odkładkę", "LabelUpdateCover": "Zaktalizuj odkładkę",
"LabelUpdateCoverHelp": "Umożliwienie nadpisania istniejących okładek dla wybranych książek w przypadku znalezienia dopasowania", "LabelUpdateCoverHelp": "Umożliwienie nadpisania istniejących okładek dla wybranych książek w przypadku znalezienia dopasowania",
"LabelUpdateDetails": "Zaktualizuj szczegóły", "LabelUpdateDetails": "Zaktualizuj szczegóły",
"LabelUpdateDetailsHelp": "Umożliwienie nadpisania istniejących szczegółów dla wybranych książek w przypadku znalezienia dopasowania", "LabelUpdateDetailsHelp": "Umożliwienie nadpisania istniejących szczegółów dla wybranych książek w przypadku znalezienia dopasowania",
"LabelUpdatedAt": "Zaktualizowano", "LabelUpdatedAt": "Zaktualizowano",
"LabelUploaderDragAndDrop": "Przeciągnij i puść foldery lub pliki", "LabelUploaderDragAndDrop": "Przeciągnij i puść foldery lub pliki",
"LabelUploaderDragAndDropFilesOnly": "Przeciągnij i upuść pliki",
"LabelUploaderDropFiles": "Puść pliki", "LabelUploaderDropFiles": "Puść pliki",
"LabelUploaderItemFetchMetadataHelp": "Automatycznie pobierz tytuł, autora i serie", "LabelUploaderItemFetchMetadataHelp": "Automatycznie pobierz tytuł, autora i serie",
"LabelUseChapterTrack": "Użyj ścieżki rozdziału", "LabelUseChapterTrack": "Użyj ścieżki rozdziału",
+9 -6
View File
@@ -212,9 +212,9 @@
"HeaderUsers": "Пользователи", "HeaderUsers": "Пользователи",
"HeaderYearReview": "Итоги {0} года", "HeaderYearReview": "Итоги {0} года",
"HeaderYourStats": "Ваша статистика", "HeaderYourStats": "Ваша статистика",
"LabelAbridged": "Сокращенное издание", "LabelAbridged": "Сокращенная форма",
"LabelAbridgedChecked": "Сокращено (отмечено)", "LabelAbridgedChecked": "Сокращено (отмечено)",
"LabelAbridgedUnchecked": "Без сокращений (не отмечено)", "LabelAbridgedUnchecked": "Полное издание (не отмечено)",
"LabelAccessibleBy": "Доступ", "LabelAccessibleBy": "Доступ",
"LabelAccountType": "Тип учетной записи", "LabelAccountType": "Тип учетной записи",
"LabelAccountTypeAdmin": "Администратор", "LabelAccountTypeAdmin": "Администратор",
@@ -346,9 +346,9 @@
"LabelExample": "Пример", "LabelExample": "Пример",
"LabelExpandSeries": "Развернуть серию", "LabelExpandSeries": "Развернуть серию",
"LabelExpandSubSeries": "Развернуть подсерию", "LabelExpandSubSeries": "Развернуть подсерию",
"LabelExplicit": "Явный", "LabelExplicit": "18+",
"LabelExplicitChecked": "Явный (отмечено)", "LabelExplicitChecked": "18+ (отмечено)",
"LabelExplicitUnchecked": "Не явно (не отмечено)", "LabelExplicitUnchecked": "+18 (не отмечено)",
"LabelExportOPML": "Экспорт OPML", "LabelExportOPML": "Экспорт OPML",
"LabelFeedURL": "URL канала", "LabelFeedURL": "URL канала",
"LabelFetchingMetadata": "Извлечение метаданных", "LabelFetchingMetadata": "Извлечение метаданных",
@@ -514,7 +514,7 @@
"LabelPublishers": "Издатели", "LabelPublishers": "Издатели",
"LabelRSSFeedCustomOwnerEmail": "Пользовательский Email владельца", "LabelRSSFeedCustomOwnerEmail": "Пользовательский Email владельца",
"LabelRSSFeedCustomOwnerName": "Пользовательское Имя владельца", "LabelRSSFeedCustomOwnerName": "Пользовательское Имя владельца",
"LabelRSSFeedOpen": "Открыть RSS-канал", "LabelRSSFeedOpen": "Открыть RSS-ленту",
"LabelRSSFeedPreventIndexing": "Запретить индексирование", "LabelRSSFeedPreventIndexing": "Запретить индексирование",
"LabelRSSFeedSlug": "Встроить RSS-канал", "LabelRSSFeedSlug": "Встроить RSS-канал",
"LabelRSSFeedURL": "URL RSS-канала", "LabelRSSFeedURL": "URL RSS-канала",
@@ -856,6 +856,7 @@
"MessageScheduleRunEveryWeekdayAtTime": "Запуск каждые {0} по {1}", "MessageScheduleRunEveryWeekdayAtTime": "Запуск каждые {0} по {1}",
"MessageSearchResultsFor": "Результаты поиска для", "MessageSearchResultsFor": "Результаты поиска для",
"MessageSelected": "{0} выбрано", "MessageSelected": "{0} выбрано",
"MessageSeriesSequenceCannotContainSpaces": "Последовательность серии должна быть без пропусков",
"MessageServerCouldNotBeReached": "Не удалось связаться с сервером", "MessageServerCouldNotBeReached": "Не удалось связаться с сервером",
"MessageSetChaptersFromTracksDescription": "Установка глав с использованием каждого аудиофайла в качестве главы и заголовка главы в качестве имени аудиофайла", "MessageSetChaptersFromTracksDescription": "Установка глав с использованием каждого аудиофайла в качестве главы и заголовка главы в качестве имени аудиофайла",
"MessageShareExpirationWillBe": "Срок действия истекает <strong>{0}</strong>", "MessageShareExpirationWillBe": "Срок действия истекает <strong>{0}</strong>",
@@ -917,6 +918,8 @@
"NotificationOnBackupCompletedDescription": "Запускается при завершении резервного копирования", "NotificationOnBackupCompletedDescription": "Запускается при завершении резервного копирования",
"NotificationOnBackupFailedDescription": "Срабатывает при сбое резервного копирования", "NotificationOnBackupFailedDescription": "Срабатывает при сбое резервного копирования",
"NotificationOnEpisodeDownloadedDescription": "Запускается при автоматической загрузке эпизода подкаста", "NotificationOnEpisodeDownloadedDescription": "Запускается при автоматической загрузке эпизода подкаста",
"NotificationOnRSSFeedDisabledDescription": "Срабатывает, когда автоматическая загрузка эпизодов отключена из-за слишком большого количества неудачных попыток",
"NotificationOnRSSFeedFailedDescription": "Срабатывает при сбое запроса RSS-канала на автоматическую загрузку эпизода",
"NotificationOnTestDescription": "Событие для тестирования системы оповещения", "NotificationOnTestDescription": "Событие для тестирования системы оповещения",
"PlaceholderNewCollection": "Новое имя коллекции", "PlaceholderNewCollection": "Новое имя коллекции",
"PlaceholderNewFolderPath": "Путь к новой папке", "PlaceholderNewFolderPath": "Путь к новой папке",
+3 -1
View File
@@ -514,7 +514,7 @@
"LabelPublishers": "Izdajatelji", "LabelPublishers": "Izdajatelji",
"LabelRSSFeedCustomOwnerEmail": "E-pošta lastnika po meri", "LabelRSSFeedCustomOwnerEmail": "E-pošta lastnika po meri",
"LabelRSSFeedCustomOwnerName": "Ime lastnika po meri", "LabelRSSFeedCustomOwnerName": "Ime lastnika po meri",
"LabelRSSFeedOpen": "Odprt vir RSS", "LabelRSSFeedOpen": "RSS vir je odprt",
"LabelRSSFeedPreventIndexing": "Prepreči indeksiranje", "LabelRSSFeedPreventIndexing": "Prepreči indeksiranje",
"LabelRSSFeedSlug": "Slug RSS vira", "LabelRSSFeedSlug": "Slug RSS vira",
"LabelRSSFeedURL": "URL vira RSS", "LabelRSSFeedURL": "URL vira RSS",
@@ -918,6 +918,8 @@
"NotificationOnBackupCompletedDescription": "Sproži se, ko je varnostno kopiranje končano", "NotificationOnBackupCompletedDescription": "Sproži se, ko je varnostno kopiranje končano",
"NotificationOnBackupFailedDescription": "Sproži se, ko varnostno kopiranje ne uspe", "NotificationOnBackupFailedDescription": "Sproži se, ko varnostno kopiranje ne uspe",
"NotificationOnEpisodeDownloadedDescription": "Sproži se, ko se epizoda podcasta samodejno prenese", "NotificationOnEpisodeDownloadedDescription": "Sproži se, ko se epizoda podcasta samodejno prenese",
"NotificationOnRSSFeedDisabledDescription": "Sproži se, ko so samodejni prenosi epizod onemogočeni zaradi preveč neuspelih poskusov",
"NotificationOnRSSFeedFailedDescription": "Sproži se, ko zahteva za vir RSS za samodejni prenos epizode ne uspe",
"NotificationOnTestDescription": "Dogodek za testiranje sistema obveščanja", "NotificationOnTestDescription": "Dogodek za testiranje sistema obveščanja",
"PlaceholderNewCollection": "Novo ime zbirke", "PlaceholderNewCollection": "Novo ime zbirke",
"PlaceholderNewFolderPath": "Pot nove mape", "PlaceholderNewFolderPath": "Pot nove mape",
+3 -1
View File
@@ -514,7 +514,7 @@
"LabelPublishers": "Видавці", "LabelPublishers": "Видавці",
"LabelRSSFeedCustomOwnerEmail": "Користувацька електронна адреса власника", "LabelRSSFeedCustomOwnerEmail": "Користувацька електронна адреса власника",
"LabelRSSFeedCustomOwnerName": "Користувацьке ім'я власника", "LabelRSSFeedCustomOwnerName": "Користувацьке ім'я власника",
"LabelRSSFeedOpen": "RSS-канал відкрито", "LabelRSSFeedOpen": "RSS-канал відкритий",
"LabelRSSFeedPreventIndexing": "Запобігати індексації", "LabelRSSFeedPreventIndexing": "Запобігати індексації",
"LabelRSSFeedSlug": "Назва RSS-каналу", "LabelRSSFeedSlug": "Назва RSS-каналу",
"LabelRSSFeedURL": "Адреса RSS-каналу", "LabelRSSFeedURL": "Адреса RSS-каналу",
@@ -918,6 +918,8 @@
"NotificationOnBackupCompletedDescription": "Запускається після завершення резервного копіювання", "NotificationOnBackupCompletedDescription": "Запускається після завершення резервного копіювання",
"NotificationOnBackupFailedDescription": "Срабатывает при збої резервного копіювання", "NotificationOnBackupFailedDescription": "Срабатывает при збої резервного копіювання",
"NotificationOnEpisodeDownloadedDescription": "Запускається при автоматичному завантаженні епізоду подкасту", "NotificationOnEpisodeDownloadedDescription": "Запускається при автоматичному завантаженні епізоду подкасту",
"NotificationOnRSSFeedDisabledDescription": "Активується, коли автоматичне завантаження епізодів вимкнено через занадто багато невдалих спроб",
"NotificationOnRSSFeedFailedDescription": "Активується, коли запит RSS-каналу не вдається виконати для автоматичного завантаження епізоду",
"NotificationOnTestDescription": "Подія для тестування системи сповіщень", "NotificationOnTestDescription": "Подія для тестування системи сповіщень",
"PlaceholderNewCollection": "Нова назва добірки", "PlaceholderNewCollection": "Нова назва добірки",
"PlaceholderNewFolderPath": "Новий шлях до теки", "PlaceholderNewFolderPath": "Новий шлях до теки",
+1 -1
View File
@@ -21,7 +21,7 @@
"ButtonChooseFiles": "选择文件", "ButtonChooseFiles": "选择文件",
"ButtonClearFilter": "清除过滤器", "ButtonClearFilter": "清除过滤器",
"ButtonCloseFeed": "关闭源", "ButtonCloseFeed": "关闭源",
"ButtonCloseSession": "关闭开放会话", "ButtonCloseSession": "关闭活动会话",
"ButtonCollections": "收藏", "ButtonCollections": "收藏",
"ButtonConfigureScanner": "配置扫描", "ButtonConfigureScanner": "配置扫描",
"ButtonCreate": "创建", "ButtonCreate": "创建",
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "audiobookshelf", "name": "audiobookshelf",
"version": "2.23.0", "version": "2.25.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "audiobookshelf", "name": "audiobookshelf",
"version": "2.23.0", "version": "2.25.1",
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"axios": "^0.27.2", "axios": "^0.27.2",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "audiobookshelf", "name": "audiobookshelf",
"version": "2.23.0", "version": "2.25.1",
"buildNumber": 1, "buildNumber": 1,
"description": "Self-hosted audiobook and podcast server", "description": "Self-hosted audiobook and podcast server",
"main": "index.js", "main": "index.js",
+9
View File
@@ -765,6 +765,15 @@ class Database {
if (badSessionsRemoved > 0) { if (badSessionsRemoved > 0) {
Logger.warn(`Removed ${badSessionsRemoved} sessions that were 3 seconds or less`) Logger.warn(`Removed ${badSessionsRemoved} sessions that were 3 seconds or less`)
} }
// Remove mediaProgresses with duplicate mediaItemId (remove the oldest updatedAt)
// const [duplicateMediaProgresses] = await this.sequelize.query(`SELECT id, mediaItemId FROM mediaProgresses WHERE (mediaItemId, userId, updatedAt) IN (SELECT mediaItemId, userId, MIN(updatedAt) FROM mediaProgresses GROUP BY mediaItemId, userId HAVING COUNT(*) > 1)`)
// for (const duplicateMediaProgress of duplicateMediaProgresses) {
// Logger.warn(`Found duplicate mediaProgress for mediaItem "${duplicateMediaProgress.mediaItemId}" - removing it`)
// await this.mediaProgressModel.destroy({
// where: { id: duplicateMediaProgress.id }
// })
// }
} }
async createTextSearchQuery(query) { async createTextSearchQuery(query) {
+3 -6
View File
@@ -12,6 +12,7 @@ const { version } = require('../package.json')
// Utils // Utils
const fileUtils = require('./utils/fileUtils') const fileUtils = require('./utils/fileUtils')
const { toNumber } = require('./utils/index')
const Logger = require('./Logger') const Logger = require('./Logger')
const Auth = require('./Auth') const Auth = require('./Auth')
@@ -84,12 +85,8 @@ class Server {
global.DisableSsrfRequestFilter = (url) => whitelistedUrls.includes(new URL(url).hostname) global.DisableSsrfRequestFilter = (url) => whitelistedUrls.includes(new URL(url).hostname)
} }
} }
global.PodcastDownloadTimeout = toNumber(process.env.PODCAST_DOWNLOAD_TIMEOUT, 30000)
if (process.env.PODCAST_DOWNLOAD_TIMEOUT) { global.MaxFailedEpisodeChecks = toNumber(process.env.MAX_FAILED_EPISODE_CHECKS, 24)
global.PodcastDownloadTimeout = process.env.PODCAST_DOWNLOAD_TIMEOUT
} else {
global.PodcastDownloadTimeout = 30000
}
if (!fs.pathExistsSync(global.ConfigPath)) { if (!fs.pathExistsSync(global.ConfigPath)) {
fs.mkdirSync(global.ConfigPath) fs.mkdirSync(global.ConfigPath)
+8 -2
View File
@@ -89,7 +89,6 @@ class FileSystemController {
} }
const { directory, folderPath } = req.body const { directory, folderPath } = req.body
if (!directory?.length || typeof directory !== 'string' || !folderPath?.length || typeof folderPath !== 'string') { if (!directory?.length || typeof directory !== 'string' || !folderPath?.length || typeof folderPath !== 'string') {
Logger.error(`[FileSystemController] Invalid request body: ${JSON.stringify(req.body)}`) Logger.error(`[FileSystemController] Invalid request body: ${JSON.stringify(req.body)}`)
return res.status(400).json({ return res.status(400).json({
@@ -109,7 +108,14 @@ class FileSystemController {
return res.sendStatus(404) return res.sendStatus(404)
} }
const filepath = Path.posix.join(libraryFolder.path, directory) if (!req.user.checkCanAccessLibrary(libraryFolder.libraryId)) {
Logger.error(`[FileSystemController] User "${req.user.username}" attempting to check path exists for library "${libraryFolder.libraryId}" without access`)
return res.sendStatus(403)
}
let filepath = Path.join(libraryFolder.path, directory)
filepath = fileUtils.filePathToPOSIX(filepath)
// Ensure filepath is inside library folder (prevents directory traversal) // Ensure filepath is inside library folder (prevents directory traversal)
if (!filepath.startsWith(libraryFolder.path)) { if (!filepath.startsWith(libraryFolder.path)) {
Logger.error(`[FileSystemController] Filepath is not inside library folder: ${filepath}`) Logger.error(`[FileSystemController] Filepath is not inside library folder: ${filepath}`)
+6
View File
@@ -59,6 +59,12 @@ class MiscController {
if (!library) { if (!library) {
return res.status(404).send('Library not found') return res.status(404).send('Library not found')
} }
if (!req.user.checkCanAccessLibrary(library.id)) {
Logger.error(`[MiscController] User "${req.user.username}" attempting to upload to library "${library.id}" without access`)
return res.sendStatus(403)
}
const folder = library.libraryFolders.find((fold) => fold.id === folderId) const folder = library.libraryFolders.find((fold) => fold.id === folderId)
if (!folder) { if (!folder) {
return res.status(404).send('Folder not found') return res.status(404).send('Folder not found')
+10
View File
@@ -9,6 +9,7 @@ const fs = require('../libs/fsExtra')
const { getPodcastFeed, findMatchingEpisodes } = require('../utils/podcastUtils') const { getPodcastFeed, findMatchingEpisodes } = require('../utils/podcastUtils')
const { getFileTimestampsWithIno, filePathToPOSIX } = require('../utils/fileUtils') const { getFileTimestampsWithIno, filePathToPOSIX } = require('../utils/fileUtils')
const { validateUrl } = require('../utils/index') const { validateUrl } = require('../utils/index')
const htmlSanitizer = require('../utils/htmlSanitizer')
const Scanner = require('../scanner/Scanner') const Scanner = require('../scanner/Scanner')
const CoverManager = require('../managers/CoverManager') const CoverManager = require('../managers/CoverManager')
@@ -404,6 +405,15 @@ class PodcastController {
const supportedStringKeys = ['title', 'subtitle', 'description', 'pubDate', 'episode', 'season', 'episodeType'] const supportedStringKeys = ['title', 'subtitle', 'description', 'pubDate', 'episode', 'season', 'episodeType']
for (const key in req.body) { for (const key in req.body) {
if (supportedStringKeys.includes(key) && typeof req.body[key] === 'string') { if (supportedStringKeys.includes(key) && typeof req.body[key] === 'string') {
// Sanitize description HTML
if (key === 'description' && req.body[key]) {
const sanitizedDescription = htmlSanitizer.sanitize(req.body[key])
if (sanitizedDescription !== req.body[key]) {
Logger.debug(`[PodcastController] Sanitized description from "${req.body[key]}" to "${sanitizedDescription}"`)
req.body[key] = sanitizedDescription
}
}
updatePayload[key] = req.body[key] updatePayload[key] = req.body[key]
} else if (key === 'chapters' && Array.isArray(req.body[key]) && req.body[key].every((ch) => typeof ch === 'object' && ch.title && ch.start)) { } else if (key === 'chapters' && Array.isArray(req.body[key]) && req.body[key].every((ch) => typeof ch === 'object' && ch.title && ch.start)) {
updatePayload[key] = req.body[key] updatePayload[key] = req.body[key]
File diff suppressed because one or more lines are too long
+9 -1
View File
@@ -203,7 +203,15 @@ class AbMergeManager {
// Move library item tracks to cache // Move library item tracks to cache
for (const [index, trackPath] of task.data.originalTrackPaths.entries()) { for (const [index, trackPath] of task.data.originalTrackPaths.entries()) {
const trackFilename = Path.basename(trackPath) const trackFilename = Path.basename(trackPath)
const moveToPath = Path.join(task.data.itemCachePath, trackFilename) let moveToPath = Path.join(task.data.itemCachePath, trackFilename)
// If the track is the same as the temp file, we need to rename it to avoid overwriting it
if (task.data.tempFilepath === moveToPath) {
const trackExtname = Path.extname(task.data.tempFilepath)
const newTrackFilename = Path.basename(task.data.tempFilepath, trackExtname) + '.backup' + trackExtname
moveToPath = Path.join(task.data.itemCachePath, newTrackFilename)
}
Logger.debug(`[AbMergeManager] Backing up original track "${trackPath}" to ${moveToPath}`) Logger.debug(`[AbMergeManager] Backing up original track "${trackPath}" to ${moveToPath}`)
if (index === 0) { if (index === 0) {
// copy the first track to the cache directory // copy the first track to the cache directory
+48
View File
@@ -71,6 +71,54 @@ class NotificationManager {
this.triggerNotification('onBackupCompleted', eventData) this.triggerNotification('onBackupCompleted', eventData)
} }
/**
* Handles scheduled episode download RSS feed request failed
*
* @param {string} feedUrl
* @param {number} numFailed
* @param {string} title
*/
async onRSSFeedFailed(feedUrl, numFailed, title) {
if (!Database.notificationSettings.isUseable) return
if (!Database.notificationSettings.getHasActiveNotificationsForEvent('onRSSFeedFailed')) {
Logger.debug(`[NotificationManager] onRSSFeedFailed: No active notifications`)
return
}
Logger.debug(`[NotificationManager] onRSSFeedFailed: RSS feed request failed for ${feedUrl}`)
const eventData = {
feedUrl: feedUrl,
numFailed: numFailed || 0,
title: title || 'Unknown Title'
}
this.triggerNotification('onRSSFeedFailed', eventData)
}
/**
* Handles scheduled episode downloads disabled due to too many failed attempts
*
* @param {string} feedUrl
* @param {number} numFailed
* @param {string} title
*/
async onRSSFeedDisabled(feedUrl, numFailed, title) {
if (!Database.notificationSettings.isUseable) return
if (!Database.notificationSettings.getHasActiveNotificationsForEvent('onRSSFeedDisabled')) {
Logger.debug(`[NotificationManager] onRSSFeedDisabled: No active notifications`)
return
}
Logger.debug(`[NotificationManager] onRSSFeedDisabled: Podcast scheduled episode download disabled due to ${numFailed} failed requests for ${feedUrl}`)
const eventData = {
feedUrl: feedUrl,
numFailed: numFailed || 0,
title: title || 'Unknown Title'
}
this.triggerNotification('onRSSFeedDisabled', eventData)
}
/** /**
* *
* @param {string} errorMsg * @param {string} errorMsg
+15 -3
View File
@@ -30,7 +30,7 @@ class PodcastManager {
this.currentDownload = null this.currentDownload = null
this.failedCheckMap = {} this.failedCheckMap = {}
this.MaxFailedEpisodeChecks = 24 this.MaxFailedEpisodeChecks = global.MaxFailedEpisodeChecks
} }
getEpisodeDownloadsInQueue(libraryItemId) { getEpisodeDownloadsInQueue(libraryItemId) {
@@ -345,12 +345,14 @@ class PodcastManager {
// Allow up to MaxFailedEpisodeChecks failed attempts before disabling auto download // Allow up to MaxFailedEpisodeChecks failed attempts before disabling auto download
if (!this.failedCheckMap[libraryItem.id]) this.failedCheckMap[libraryItem.id] = 0 if (!this.failedCheckMap[libraryItem.id]) this.failedCheckMap[libraryItem.id] = 0
this.failedCheckMap[libraryItem.id]++ this.failedCheckMap[libraryItem.id]++
if (this.failedCheckMap[libraryItem.id] >= this.MaxFailedEpisodeChecks) { if (this.MaxFailedEpisodeChecks !== 0 && this.failedCheckMap[libraryItem.id] >= this.MaxFailedEpisodeChecks) {
Logger.error(`[PodcastManager] runEpisodeCheck ${this.failedCheckMap[libraryItem.id]} failed attempts at checking episodes for "${libraryItem.media.title}" - disabling auto download`) Logger.error(`[PodcastManager] runEpisodeCheck ${this.failedCheckMap[libraryItem.id]} failed attempts at checking episodes for "${libraryItem.media.title}" - disabling auto download`)
void NotificationManager.onRSSFeedDisabled(libraryItem.media.feedURL, this.failedCheckMap[libraryItem.id], libraryItem.media.title)
libraryItem.media.autoDownloadEpisodes = false libraryItem.media.autoDownloadEpisodes = false
delete this.failedCheckMap[libraryItem.id] delete this.failedCheckMap[libraryItem.id]
} else { } else {
Logger.warn(`[PodcastManager] runEpisodeCheck ${this.failedCheckMap[libraryItem.id]} failed attempts at checking episodes for "${libraryItem.media.title}"`) Logger.warn(`[PodcastManager] runEpisodeCheck ${this.failedCheckMap[libraryItem.id]} failed attempts at checking episodes for "${libraryItem.media.title}"`)
void NotificationManager.onRSSFeedFailed(libraryItem.media.feedURL, this.failedCheckMap[libraryItem.id], libraryItem.media.title)
} }
} else if (newEpisodes.length) { } else if (newEpisodes.length) {
delete this.failedCheckMap[libraryItem.id] delete this.failedCheckMap[libraryItem.id]
@@ -384,7 +386,17 @@ class PodcastManager {
Logger.error(`[PodcastManager] checkPodcastForNewEpisodes no feed url for ${podcastLibraryItem.media.title} (ID: ${podcastLibraryItem.id})`) Logger.error(`[PodcastManager] checkPodcastForNewEpisodes no feed url for ${podcastLibraryItem.media.title} (ID: ${podcastLibraryItem.id})`)
return null return null
} }
const feed = await getPodcastFeed(podcastLibraryItem.media.feedURL) const feed = await Promise.race([
getPodcastFeed(podcastLibraryItem.media.feedURL),
new Promise((_, reject) =>
// The added second is to make sure that axios can fail first and only falls back later
setTimeout(() => reject(new Error('Timeout. getPodcastFeed seemed to timeout but not triggering the timeout.')), global.PodcastDownloadTimeout + 1000)
)
]).catch((error) => {
Logger.error(`[PodcastManager] checkPodcastForNewEpisodes failed to fetch feed for ${podcastLibraryItem.media.title} (ID: ${podcastLibraryItem.id}):`, error)
return null
})
if (!feed?.episodes) { if (!feed?.episodes) {
Logger.error(`[PodcastManager] checkPodcastForNewEpisodes invalid feed payload for ${podcastLibraryItem.media.title} (ID: ${podcastLibraryItem.id})`, feed) Logger.error(`[PodcastManager] checkPodcastForNewEpisodes invalid feed payload for ${podcastLibraryItem.media.title} (ID: ${podcastLibraryItem.id})`, feed)
return null return null
+10 -1
View File
@@ -377,8 +377,17 @@ class Book extends Model {
if (typeof payload.metadata[key] == 'number') { if (typeof payload.metadata[key] == 'number') {
payload.metadata[key] = String(payload.metadata[key]) payload.metadata[key] = String(payload.metadata[key])
} }
if ((typeof payload.metadata[key] === 'string' || payload.metadata[key] === null) && this[key] !== payload.metadata[key]) { if ((typeof payload.metadata[key] === 'string' || payload.metadata[key] === null) && this[key] !== payload.metadata[key]) {
// Sanitize description HTML
if (key === 'description' && payload.metadata[key]) {
const sanitizedDescription = htmlSanitizer.sanitize(payload.metadata[key])
if (sanitizedDescription !== payload.metadata[key]) {
Logger.debug(`[Book] "${this.title}" Sanitized description from "${payload.metadata[key]}" to "${sanitizedDescription}"`)
payload.metadata[key] = sanitizedDescription
}
}
this[key] = payload.metadata[key] || null this[key] = payload.metadata[key] || null
if (key === 'title') { if (key === 'title') {
+10
View File
@@ -2,6 +2,7 @@ const { DataTypes, Model } = require('sequelize')
const { getTitlePrefixAtEnd, getTitleIgnorePrefix } = require('../utils') const { getTitlePrefixAtEnd, getTitleIgnorePrefix } = require('../utils')
const Logger = require('../Logger') const Logger = require('../Logger')
const libraryItemsPodcastFilters = require('../utils/queries/libraryItemsPodcastFilters') const libraryItemsPodcastFilters = require('../utils/queries/libraryItemsPodcastFilters')
const htmlSanitizer = require('../utils/htmlSanitizer')
/** /**
* @typedef PodcastExpandedProperties * @typedef PodcastExpandedProperties
@@ -215,6 +216,15 @@ class Podcast extends Model {
newKey = 'itunesPageURL' newKey = 'itunesPageURL'
} }
if ((typeof payload.metadata[key] === 'string' || payload.metadata[key] === null) && payload.metadata[key] !== this[newKey]) { if ((typeof payload.metadata[key] === 'string' || payload.metadata[key] === null) && payload.metadata[key] !== this[newKey]) {
// Sanitize description HTML
if (key === 'description' && payload.metadata[key]) {
const sanitizedDescription = htmlSanitizer.sanitize(payload.metadata[key])
if (sanitizedDescription !== payload.metadata[key]) {
Logger.debug(`[Podcast] "${this.title}" Sanitized description from "${payload.metadata[key]}" to "${sanitizedDescription}"`)
payload.metadata[key] = sanitizedDescription
}
}
this[newKey] = payload.metadata[key] || null this[newKey] = payload.metadata[key] || null
if (key === 'title') { if (key === 'title') {
+2 -1
View File
@@ -41,7 +41,7 @@ class Audible {
} }
cleanResult(item) { cleanResult(item) {
const { title, subtitle, asin, authors, narrators, publisherName, summary, releaseDate, image, genres, seriesPrimary, seriesSecondary, language, runtimeLengthMin, formatType } = item const { title, subtitle, asin, authors, narrators, publisherName, summary, releaseDate, image, genres, seriesPrimary, seriesSecondary, language, runtimeLengthMin, formatType, isbn } = item
const series = [] const series = []
if (seriesPrimary) { if (seriesPrimary) {
@@ -70,6 +70,7 @@ class Audible {
description: summary || null, description: summary || null,
cover: image, cover: image,
asin, asin,
isbn,
genres: genresFiltered.length ? genresFiltered : null, genres: genresFiltered.length ? genresFiltered : null,
tags: tagsFiltered.length ? tagsFiltered.join(', ') : null, tags: tagsFiltered.length ? tagsFiltered.join(', ') : null,
series: series.length ? series : null, series: series.length ? series : null,
+1 -1
View File
@@ -370,7 +370,7 @@ class Scanner {
let numEpisodesUpdated = 0 let numEpisodesUpdated = 0
for (const episode of episodesToQuickMatch) { for (const episode of episodesToQuickMatch) {
const episodeMatches = findMatchingEpisodesInFeed(feed, episode.title) const episodeMatches = findMatchingEpisodesInFeed(feed, episode.title, 0.1)
if (episodeMatches?.length) { if (episodeMatches?.length) {
const wasUpdated = await this.updateEpisodeWithMatch(episode, episodeMatches[0].episode, options) const wasUpdated = await this.updateEpisodeWithMatch(episode, episodeMatches[0].episode, options)
if (wasUpdated) numEpisodesUpdated++ if (wasUpdated) numEpisodesUpdated++
+33 -12
View File
@@ -103,18 +103,39 @@ module.exports.resizeImage = resizeImage
*/ */
module.exports.downloadPodcastEpisode = (podcastEpisodeDownload) => { module.exports.downloadPodcastEpisode = (podcastEpisodeDownload) => {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
const response = await axios({ // Some podcasts fail due to user agent strings
url: podcastEpisodeDownload.url, // See: https://github.com/advplyr/audiobookshelf/issues/3246 (requires iTMS user agent)
method: 'GET', // See: https://github.com/advplyr/audiobookshelf/issues/4401 (requires no iTMS user agent)
responseType: 'stream', const userAgents = ['audiobookshelf (+https://audiobookshelf.org; like iTMS)', 'audiobookshelf (+https://audiobookshelf.org)']
headers: {
'User-Agent': 'audiobookshelf (+https://audiobookshelf.org)' let response = null
}, let lastError = null
timeout: global.PodcastDownloadTimeout
}).catch((error) => { for (const userAgent of userAgents) {
Logger.error(`[ffmpegHelpers] Failed to download podcast episode with url "${podcastEpisodeDownload.url}"`, error) try {
return null response = await axios({
}) url: podcastEpisodeDownload.url,
method: 'GET',
responseType: 'stream',
headers: {
'User-Agent': userAgent
},
timeout: global.PodcastDownloadTimeout
})
Logger.debug(`[ffmpegHelpers] Successfully connected with User-Agent: ${userAgent}`)
break
} catch (error) {
lastError = error
Logger.warn(`[ffmpegHelpers] Failed to download podcast episode with User-Agent "${userAgent}" for url "${podcastEpisodeDownload.url}"`, error.message)
// If this is the last attempt, log the full error
if (userAgent === userAgents[userAgents.length - 1]) {
Logger.error(`[ffmpegHelpers] All User-Agent attempts failed for url "${podcastEpisodeDownload.url}"`, lastError)
}
}
}
if (!response) { if (!response) {
return resolve({ return resolve({
success: false success: false
+32
View File
@@ -60,6 +60,38 @@ module.exports.notificationData = {
errorMsg: 'Example error message' errorMsg: 'Example error message'
} }
}, },
{
name: 'onRSSFeedFailed',
requiresLibrary: true,
description: 'Triggered when the RSS feed request fails for an automatic episode download',
descriptionKey: 'NotificationOnRSSFeedFailedDescription',
variables: ['feedUrl', 'numFailed', 'title'],
defaults: {
title: 'RSS Feed Request Failed',
body: 'Failed to request RSS feed for {{title}}.\nFeed URL: {{feedUrl}}\nNumber of failed attempts: {{numFailed}}'
},
testData: {
title: 'Test RSS Feed',
feedUrl: 'https://example.com/rss',
numFailed: 3
}
},
{
name: 'onRSSFeedDisabled',
requiresLibrary: true,
description: 'Triggered when automatic episode downloads are disabled due to too many failed attempts',
descriptionKey: 'NotificationOnRSSFeedDisabledDescription',
variables: ['feedUrl', 'numFailed', 'title'],
defaults: {
title: 'Podcast Episode Download Schedule Disabled',
body: 'Automatic episode downloads for {{title}} have been disabled due to too many failed RSS feed requests.\nFeed URL: {{feedUrl}}\nNumber of failed attempts: {{numFailed}}'
},
testData: {
title: 'Test RSS Feed',
feedUrl: 'https://example.com/rss',
numFailed: 5
}
},
{ {
name: 'onTest', name: 'onTest',
requiresLibrary: false, requiresLibrary: false,
+21 -23
View File
@@ -1,8 +1,9 @@
const axios = require('axios') const axios = require('axios')
const ssrfFilter = require('ssrf-req-filter') const ssrfFilter = require('ssrf-req-filter')
const Logger = require('../Logger') const Logger = require('../Logger')
const { xmlToJSON, levenshteinDistance, timestampToSeconds } = require('./index') const { xmlToJSON, timestampToSeconds } = require('./index')
const htmlSanitizer = require('../utils/htmlSanitizer') const htmlSanitizer = require('../utils/htmlSanitizer')
const Fuse = require('../libs/fusejs')
/** /**
* @typedef RssPodcastChapter * @typedef RssPodcastChapter
@@ -407,7 +408,7 @@ module.exports.getPodcastFeed = (feedUrl, excludeEpisodeMetadata = false) => {
}) })
} }
// Return array of episodes ordered by closest match (Levenshtein distance of 6 or less) // Return array of episodes ordered by closest match using fuse.js
module.exports.findMatchingEpisodes = async (feedUrl, searchTitle) => { module.exports.findMatchingEpisodes = async (feedUrl, searchTitle) => {
const feed = await this.getPodcastFeed(feedUrl).catch(() => { const feed = await this.getPodcastFeed(feedUrl).catch(() => {
return null return null
@@ -420,32 +421,29 @@ module.exports.findMatchingEpisodes = async (feedUrl, searchTitle) => {
* *
* @param {RssPodcast} feed * @param {RssPodcast} feed
* @param {string} searchTitle * @param {string} searchTitle
* @returns {Array<{ episode: RssPodcastEpisode, levenshtein: number }>} * @param {number} [threshold=0.4] - 0.0 for perfect match, 1.0 for match anything
* @returns {Array<{ episode: RssPodcastEpisode }>}
*/ */
module.exports.findMatchingEpisodesInFeed = (feed, searchTitle) => { module.exports.findMatchingEpisodesInFeed = (feed, searchTitle, threshold = 0.4) => {
searchTitle = searchTitle.toLowerCase().trim()
if (!feed?.episodes) { if (!feed?.episodes) {
return null return null
} }
const fuseOptions = {
ignoreDiacritics: true,
threshold,
keys: [
{ name: 'title', weight: 0.7 }, // prefer match in title
{ name: 'subtitle', weight: 0.3 }
]
}
const fuse = new Fuse(feed.episodes, fuseOptions)
const matches = [] const matches = []
feed.episodes.forEach((ep) => { fuse.search(searchTitle).forEach((match) => {
if (!ep.title) return matches.push({
const epTitle = ep.title.toLowerCase().trim() episode: match.item
if (epTitle === searchTitle) { })
matches.push({
episode: ep,
levenshtein: 0
})
} else {
const levenshtein = levenshteinDistance(searchTitle, epTitle, true)
if (levenshtein <= 6 && epTitle.length > levenshtein) {
matches.push({
episode: ep,
levenshtein
})
}
}
}) })
return matches.sort((a, b) => a.levenshtein - b.levenshtein) return matches
} }
@@ -264,9 +264,15 @@ module.exports = {
} else if (sortBy === 'media.metadata.publishedYear') { } else if (sortBy === 'media.metadata.publishedYear') {
return [[Sequelize.literal(`CAST(\`book\`.\`publishedYear\` AS INTEGER)`), dir]] return [[Sequelize.literal(`CAST(\`book\`.\`publishedYear\` AS INTEGER)`), dir]]
} else if (sortBy === 'media.metadata.authorNameLF') { } else if (sortBy === 'media.metadata.authorNameLF') {
return [[Sequelize.literal('`libraryItem`.`authorNamesLastFirst` COLLATE NOCASE'), dir]] return [
[Sequelize.literal('`libraryItem`.`authorNamesLastFirst` COLLATE NOCASE'), dir],
[Sequelize.literal('`libraryItem`.`title` COLLATE NOCASE'), dir]
]
} else if (sortBy === 'media.metadata.authorName') { } else if (sortBy === 'media.metadata.authorName') {
return [[Sequelize.literal('`libraryItem`.`authorNamesFirstLast` COLLATE NOCASE'), dir]] return [
[Sequelize.literal('`libraryItem`.`authorNamesFirstLast` COLLATE NOCASE'), dir],
[Sequelize.literal('`libraryItem`.`title` COLLATE NOCASE'), dir]
]
} else if (sortBy === 'media.metadata.title') { } else if (sortBy === 'media.metadata.title') {
if (collapseseries) { if (collapseseries) {
return [[Sequelize.literal('display_title COLLATE NOCASE'), dir]] return [[Sequelize.literal('display_title COLLATE NOCASE'), dir]]