diff --git a/Dockerfile b/Dockerfile
index 816bdd3c..f9c46117 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -57,7 +57,7 @@ WORKDIR /app
# Copy compiled frontend and server from build stages
COPY --from=build-client /client/dist /app/client/dist
COPY --from=build-server /server /app
-COPY --from=build-server ${NUSQLITE3_PATH} ${NUSQLITE3_PATH}
+COPY --from=build-server /usr/local/lib/nusqlite3 /usr/local/lib/nusqlite3
EXPOSE 80
diff --git a/client/components/cards/LazyBookCard.vue b/client/components/cards/LazyBookCard.vue
index 41b73310..35c959fa 100644
--- a/client/components/cards/LazyBookCard.vue
+++ b/client/components/cards/LazyBookCard.vue
@@ -198,7 +198,7 @@ export default {
return this.store.getters['user/getSizeMultiplier']
},
dateFormat() {
- return this.store.getters['getServerSetting']('dateFormat')
+ return this.store.state.serverSettings.dateFormat
},
_libraryItem() {
return this.libraryItem || {}
diff --git a/client/components/cards/LazySeriesCard.vue b/client/components/cards/LazySeriesCard.vue
index 34cea7e2..3532095b 100644
--- a/client/components/cards/LazySeriesCard.vue
+++ b/client/components/cards/LazySeriesCard.vue
@@ -71,7 +71,7 @@ export default {
return this.height * this.sizeMultiplier
},
dateFormat() {
- return this.store.getters['getServerSetting']('dateFormat')
+ return this.store.state.serverSettings.dateFormat
},
labelFontSize() {
if (this.width < 160) return 0.75
diff --git a/client/components/controls/LibraryFilterSelect.vue b/client/components/controls/LibraryFilterSelect.vue
index 62a9b803..4fd72827 100644
--- a/client/components/controls/LibraryFilterSelect.vue
+++ b/client/components/controls/LibraryFilterSelect.vue
@@ -94,9 +94,6 @@ export default {
userIsAdminOrUp() {
return this.$store.getters['user/getIsAdminOrUp']
},
- userCanAccessExplicitContent() {
- return this.$store.getters['user/getUserCanAccessExplicitContent']
- },
libraryMediaType() {
return this.$store.getters['libraries/getCurrentLibraryMediaType']
},
@@ -242,15 +239,6 @@ export default {
sublist: false
}
]
-
- if (this.userCanAccessExplicitContent) {
- items.push({
- text: this.$strings.LabelExplicit,
- value: 'explicit',
- sublist: false
- })
- }
-
if (this.userIsAdminOrUp) {
items.push({
text: this.$strings.LabelShareOpen,
@@ -261,7 +249,7 @@ export default {
return items
},
podcastItems() {
- const items = [
+ return [
{
text: this.$strings.LabelAll,
value: 'all'
@@ -288,23 +276,8 @@ export default {
text: this.$strings.ButtonIssues,
value: 'issues',
sublist: false
- },
- {
- text: this.$strings.LabelRSSFeedOpen,
- value: 'feed-open',
- sublist: false
}
]
-
- if (this.userCanAccessExplicitContent) {
- items.push({
- text: this.$strings.LabelExplicit,
- value: 'explicit',
- sublist: false
- })
- }
-
- return items
},
selectItems() {
if (this.isSeries) return this.seriesItems
diff --git a/client/components/modals/BookmarksModal.vue b/client/components/modals/BookmarksModal.vue
index d84a8ed8..de8c72b7 100644
--- a/client/components/modals/BookmarksModal.vue
+++ b/client/components/modals/BookmarksModal.vue
@@ -79,10 +79,10 @@ export default {
return !this.bookmarks.find((bm) => Math.abs(this.currentTime - bm.time) < 1)
},
dateFormat() {
- return this.$store.getters['getServerSetting']('dateFormat')
+ return this.$store.state.serverSettings.dateFormat
},
timeFormat() {
- return this.$store.getters['getServerSetting']('timeFormat')
+ return this.$store.state.serverSettings.timeFormat
}
},
methods: {
diff --git a/client/components/modals/EditSeriesInputInnerModal.vue b/client/components/modals/EditSeriesInputInnerModal.vue
index bd568321..6190551e 100644
--- a/client/components/modals/EditSeriesInputInnerModal.vue
+++ b/client/components/modals/EditSeriesInputInnerModal.vue
@@ -14,7 +14,6 @@
{{ episode.subtitle }}
-Published {{ episode.publishedAt ? $dateDistanceFromNow(episode.publishedAt) : 'Unknown' }}
- -{{ $strings.LabelDuration }}: {{ $elapsedPretty(episode.durationSeconds) }}
- -{{ $strings.LabelSize }}: {{ $bytesPretty(Number(episode.enclosure.length)) }}
-Published {{ episode.publishedAt ? $dateDistanceFromNow(episode.publishedAt) : 'Unknown' }}
@@ -251,8 +244,8 @@ export default { const sizeInMb = payloadSize / 1024 / 1024 const sizeInMbPretty = sizeInMb.toFixed(2) + 'MB' console.log('Request size', sizeInMb) - if (sizeInMb > 9.99) { - return this.$toast.error(`Request is too large (${sizeInMbPretty}) should be < 10Mb`) + if (sizeInMb > 4.99) { + return this.$toast.error(`Request is too large (${sizeInMbPretty}) should be < 5Mb`) } this.processing = true diff --git a/client/components/modals/podcast/RemoveEpisode.vue b/client/components/modals/podcast/RemoveEpisode.vue index b2cebe84..38dd71cf 100644 --- a/client/components/modals/podcast/RemoveEpisode.vue +++ b/client/components/modals/podcast/RemoveEpisode.vue @@ -11,7 +11,7 @@ {{ $getString('MessageConfirmRemoveEpisode', [episodeTitle]) }}{{ $getString('MessageConfirmRemoveEpisodes', [episodes.length]) }}
-{{ $strings.MessageConfirmRemoveEpisodeNote }}
+Note: This does not delete the audio file unless toggling "Hard delete file"
{{ title }}
- +{{ $strings.MessageNoDescription }}
@@ -34,12 +34,6 @@ {{ audioFileSize }} -{{ $strings.LabelDuration }}
-- {{ audioFileDuration }} -
-{{ $strings.MessageNoChapters }}
{{ narrator.name }}
diff --git a/client/pages/library/_library/podcast/latest.vue b/client/pages/library/_library/podcast/latest.vue index 4f12043e..4da25f3e 100644 --- a/client/pages/library/_library/podcast/latest.vue +++ b/client/pages/library/_library/podcast/latest.vue @@ -141,7 +141,7 @@ export default { return episodeIds }, dateFormat() { - return this.$store.getters['getServerSetting']('dateFormat') + return this.$store.state.serverSettings.dateFormat } }, methods: { diff --git a/client/pages/upload/index.vue b/client/pages/upload/index.vue index eef05b60..2c9442ca 100644 --- a/client/pages/upload/index.vue +++ b/client/pages/upload/index.vue @@ -359,14 +359,15 @@ export default { // Check if path already exists before starting upload // uploading fails if path already exists for (const item of items) { + const filepath = Path.join(this.selectedFolder.fullPath, item.directory) const exists = await this.$axios - .$post(`/api/filesystem/pathexists`, { directory: item.directory, folderPath: this.selectedFolder.fullPath }) + .$post(`/api/filesystem/pathexists`, { filepath, directory: item.directory, folderPath: this.selectedFolder.fullPath }) .then((data) => { if (data.exists) { if (data.libraryItemTitle) { this.$toast.error(this.$getString('ToastUploaderItemExistsInSubdirectoryError', [data.libraryItemTitle])) } else { - this.$toast.error(this.$getString('ToastUploaderFilepathExistsError', [Path.join(this.selectedFolder.fullPath, item.directory)])) + this.$toast.error(this.$getString('ToastUploaderFilepathExistsError', [filepath])) } } return data.exists diff --git a/client/plugins/i18n.js b/client/plugins/i18n.js index 86109175..1769e6eb 100644 --- a/client/plugins/i18n.js +++ b/client/plugins/i18n.js @@ -5,7 +5,6 @@ import { supplant } from './utils' const defaultCode = 'en-us' const languageCodeMap = { - ar: { label: 'عربي', dateFnsLocale: 'ar' }, bg: { label: 'Български', dateFnsLocale: 'bg' }, bn: { label: 'বাংলা', dateFnsLocale: 'bn' }, ca: { label: 'Català', dateFnsLocale: 'ca' }, diff --git a/client/store/user.js b/client/store/user.js index 41e12cad..d5aad19b 100644 --- a/client/store/user.js +++ b/client/store/user.js @@ -58,9 +58,6 @@ export const getters = { getUserCanAccessAllLibraries: (state) => { return !!state.user?.permissions?.accessAllLibraries }, - getUserCanAccessExplicitContent: (state) => { - return !!state.user?.permissions?.accessExplicitContent - }, getLibrariesAccessible: (state, getters) => { if (!state.user) return [] if (getters.getUserCanAccessAllLibraries) return [] diff --git a/client/strings/ar.json b/client/strings/ar.json index b04d94b9..b616e255 100644 --- a/client/strings/ar.json +++ b/client/strings/ar.json @@ -10,8 +10,6 @@ "ButtonApplyChapters": "حفظ الفصول", "ButtonAuthors": "المؤلفون", "ButtonBack": "الرجوع", - "ButtonBatchEditPopulateFromExisting": "تعبئة من الموجود", - "ButtonBatchEditPopulateMapDetails": "تعبئة تفاصيل الخريطة", "ButtonBrowseForFolder": "البحث عن المجلد", "ButtonCancel": "إلغاء", "ButtonCancelEncode": "إلغاء الترميز", @@ -32,8 +30,8 @@ "ButtonEditChapters": "تعديل الفصول", "ButtonEditPodcast": "تعديل البودكاست", "ButtonEnable": "تفعيل", - "ButtonFireAndFail": "محاولة فاشلة", - "ButtonFireOnTest": "تشغيل حدث الاختبار", + "ButtonFireAndFail": "النار والفشل", + "ButtonFireOnTest": "حادثة إطلاق النار", "ButtonForceReScan": "فرض إعادة المسح", "ButtonFullPath": "المسار الكامل", "ButtonHide": "إخفاء", @@ -59,7 +57,7 @@ "ButtonPause": "إيقاف مؤقت", "ButtonPlay": "تشغيل", "ButtonPlayAll": "تشغيل الكل", - "ButtonPlaying": "جاري التشغيل", + "ButtonPlaying": "مشغل الآن", "ButtonPlaylists": "قوائم التشغيل", "ButtonPrevious": "سابِق", "ButtonPreviousChapter": "الفصل السابق", @@ -90,15 +88,13 @@ "ButtonSaveTracklist": "حفظ قائمة التشغيل", "ButtonScan": "تَحَقُق", "ButtonScanLibrary": "تَحَقُق من المكتبة", - "ButtonScrollLeft": "تمرير لليسار", - "ButtonScrollRight": "تمرير لليمين", "ButtonSearch": "بحث", "ButtonSelectFolderPath": "حدد مسار المجلد", "ButtonSeries": "سلسلة", "ButtonSetChaptersFromTracks": "تعيين الفصول من الملفات", "ButtonShare": "نشر", "ButtonShiftTimes": "أوقات العمل", - "ButtonShow": "أعرض", + "ButtonShow": "عرض", "ButtonStartM4BEncode": "ابدأ ترميز M4B", "ButtonStartMetadataEmbed": "ابدأ تضمين البيانات الوصفية", "ButtonStats": "الإحصائيات", @@ -157,953 +153,119 @@ "HeaderLogs": "السجلات", "HeaderManageGenres": "إدارة الانواع", "HeaderManageTags": "إدارة العلامات", - "HeaderMapDetails": "تفاصيل الخريطة", - "HeaderMatch": "مطابقة", - "HeaderMetadataOrderOfPrecedence": "ترتيب أولوية البيانات الوصفية", - "HeaderMetadataToEmbed": "البيانات الوصفية المراد تضمينها", - "HeaderNewAccount": "حساب جديد", - "HeaderNewLibrary": "مكتبة جديدة", - "HeaderNotificationCreate": "إنشاء إشعار", - "HeaderNotificationUpdate": "تحديث إشعار", - "HeaderNotifications": "إشعارات", - "HeaderOpenIDConnectAuthentication": "مصادقة OpenID Connect", - "HeaderOpenListeningSessions": "جلسات الاستماع المفتوحة", - "HeaderOpenRSSFeed": "عرض تغذية RSS", - "HeaderOtherFiles": "ملفات أخرى", - "HeaderPasswordAuthentication": "مصادقة كلمة المرور", - "HeaderPermissions": "الصلاحيات", - "HeaderPlayerQueue": "قائمة انتظار المشغل", - "HeaderPlayerSettings": "إعدادات المشغل", + "HeaderOpenRSSFeed": "فتح تغذية RSS", "HeaderPlaylist": "قائمة تشغيل", "HeaderPlaylistItems": "عناصر قائمة التشغيل", - "HeaderPodcastsToAdd": "بودكاست لإضافتها", - "HeaderPresets": "إعدادات مسبقة", - "HeaderPreviewCover": "معاينة الغلاف", "HeaderRSSFeedGeneral": "تفاصيل RSS", "HeaderRSSFeedIsOpen": "مغذي RSS مفتوح", - "HeaderRSSFeeds": "خلاصات RSS", - "HeaderRemoveEpisode": "إزالة حلقة", - "HeaderRemoveEpisodes": "إزالة {0} حلقات", - "HeaderSavedMediaProgress": "تقدم الوسائط المحفوظة", - "HeaderSchedule": "جَدْوَل", - "HeaderScheduleEpisodeDownloads": "جدولة التنزيلات التلقائية للحلقات", - "HeaderScheduleLibraryScans": "جدولة عمليات المسح التلقائي للمكتبة", - "HeaderSession": "الجلسة", - "HeaderSetBackupSchedule": "تعيين جدول النسخ الاحتياطي", "HeaderSettings": "إعدادات", - "HeaderSettingsDisplay": "عرض", - "HeaderSettingsExperimental": "ميزات تجريبية", - "HeaderSettingsGeneral": "عام", - "HeaderSettingsScanner": "إعدادات المسح", - "HeaderSettingsWebClient": "عميل الويب", "HeaderSleepTimer": "مؤقت النوم", - "HeaderStatsLargestItems": "أكبر العناصر حجماً", - "HeaderStatsLongestItems": "أطول العناصر (بالساعات)", "HeaderStatsMinutesListeningChart": "الدقائق المسموعة (آخر 7 أيام)", "HeaderStatsRecentSessions": "الجلسات الأخيرة", - "HeaderStatsTop10Authors": "أفضل 10 مؤلفين", - "HeaderStatsTop5Genres": "أفضل 5 أنواع", "HeaderTableOfContents": "جدول المحتويات", - "HeaderTools": "أدوات", - "HeaderUpdateAccount": "تحديث الحساب", - "HeaderUpdateAuthor": "تحديث المؤلف", - "HeaderUpdateDetails": "تحديث التفاصيل", - "HeaderUpdateLibrary": "تحديث المكتبة", - "HeaderUsers": "المستخدمون", - "HeaderYearReview": "ملخص عام {0}", "HeaderYourStats": "إحصائياتك", - "LabelAbridged": "مختصر", - "LabelAbridgedChecked": "مختصر (محدد)", - "LabelAbridgedUnchecked": "غير مختصر (غير محدد)", - "LabelAccessibleBy": "يمكن الوصول إليه بواسطة", - "LabelAccountType": "نوع الحساب", - "LabelAccountTypeAdmin": "مدير", - "LabelAccountTypeGuest": "ضيف", - "LabelAccountTypeUser": "مستخدم", - "LabelActivities": "النشاطات", - "LabelActivity": "نشاط", - "LabelAddToCollection": "إضافة إلى المجموعة", - "LabelAddToCollectionBatch": "إضافة {0} كتابًا إلى المجموعة", "LabelAddToPlaylist": "أضف إلى قائمة التشغيل", - "LabelAddToPlaylistBatch": "إضافة {0} عناصر إلى قائمة التشغيل", "LabelAddedAt": "أضيفت على", "LabelAddedDate": "تمت الإضافة", - "LabelAdminUsersOnly": "للمستخدمين المديرين فقط", "LabelAll": "الكل", - "LabelAllEpisodesDownloaded": "تم تنزيل جميع الحلقات", - "LabelAllUsers": "جميع المستخدمين", - "LabelAllUsersExcludingGuests": "جميع المستخدمين باستثناء الضيوف", - "LabelAllUsersIncludingGuests": "جميع المستخدمين بما في ذلك الضيوف", - "LabelAlreadyInYourLibrary": "موجود بالفعل في مكتبتك", - "LabelApiToken": "رمز API", - "LabelAppend": "إلحاق", - "LabelAudioBitrate": "معدل بت الصوت (على سبيل المثال 128 كيلو بايت)", - "LabelAudioChannels": "قنوات الصوت (1 أو 2)", - "LabelAudioCodec": "برنامج ترميز الصوت", "LabelAuthor": "المؤلف", "LabelAuthorFirstLast": "المؤلف (الاسم الأول الأخير)", "LabelAuthorLastFirst": "المؤلف (الاسم الأخير، الأول)", "LabelAuthors": "المؤلفون", "LabelAutoDownloadEpisodes": "تنزيل الحلقات تلقائيًا", - "LabelAutoFetchMetadata": "جلب البيانات الوصفية تلقائيًا", - "LabelAutoFetchMetadataHelp": "يجلب البيانات الوصفية للعنوان والمؤلف والسلسلة لتسهيل عملية الرفع. قد يلزم مطابقة بيانات وصفية إضافية بعد الرفع.", - "LabelAutoLaunch": "تشغيل تلقائي", - "LabelAutoLaunchDescription": "إعادة التوجيه إلى مزود المصادقة تلقائيًا عند الانتقال إلى صفحة تسجيل الدخول (مسار التجاوز اليدوي/login?autoLaunch=0
)",
- "LabelAutoRegister": "تسجيل تلقائي",
- "LabelAutoRegisterDescription": "إنشاء مستخدمين جدد تلقائيًا بعد تسجيل الدخول",
- "LabelBackToUser": "العودة إلى المستخدم",
- "LabelBackupAudioFiles": "نسخ ملفات الصوت احتياطيًا",
- "LabelBackupLocation": "موقع النسخ الاحتياطي",
- "LabelBackupsEnableAutomaticBackups": "نسخ احتياطية تلقائية",
- "LabelBackupsEnableAutomaticBackupsHelp": "النسخ الاحتياطية المحفوظة في / البيانات الوصفية / النسخ الاحتياطية",
- "LabelBackupsMaxBackupSize": "الحد الأقصى لحجم النسخ الاحتياطي (بالجيجابايت) (0 لغير محدود)",
- "LabelBackupsMaxBackupSizeHelp": "كإجراء وقائي ضد سوء التكوين، ستفشل عمليات النسخ الاحتياطي إذا تجاوزت الحجم المحدد.",
- "LabelBackupsNumberToKeep": "عدد النسخ الاحتياطية التي يجب الاحتفاظ بها",
- "LabelBackupsNumberToKeepHelp": "ستتم إزالة نسخة احتياطية واحدة فقط في كل مرة، لذا إذا كان لديك بالفعل عدد نسخ احتياطية أكبر من هذا، فيجب عليك إزالتها يدويًا.",
- "LabelBitrate": "معدل البت",
- "LabelBonus": "مكافأة",
"LabelBooks": "الكتب",
- "LabelButtonText": "نص الزر",
- "LabelByAuthor": "بواسطة {0}",
- "LabelChangePassword": "تغيير كلمة المرور",
- "LabelChannels": "قنوات",
- "LabelChapterCount": "{0} فصول",
- "LabelChapterTitle": "عنوان الفصل",
"LabelChapters": "الفصول",
- "LabelChaptersFound": "تم العثور على فصول",
- "LabelClickForMoreInfo": "انقر لمزيد من المعلومات",
- "LabelClickToUseCurrentValue": "انقر لاستخدام القيمة الحالية",
"LabelClosePlayer": "إغلاق المشغل",
- "LabelCodec": "برنامج الترميز",
"LabelCollapseSeries": "إخفاء المسلسلات",
- "LabelCollapseSubSeries": "إخفاء المسلسلات الفرعية",
- "LabelCollection": "مجموعة",
- "LabelCollections": "مجموعات",
"LabelComplete": "مكتمل",
- "LabelConfirmPassword": "تأكيد كلمة المرور",
"LabelContinueListening": "استمرار الاستماع",
"LabelContinueReading": "استمرار القراءة",
"LabelContinueSeries": "استمرار المسلسلات",
- "LabelCover": "الغلاف",
- "LabelCoverImageURL": "رابط صورة الغلاف",
- "LabelCoverProvider": "مزود الغلاف",
- "LabelCreatedAt": "تاريخ الإنشاء",
- "LabelCronExpression": "تعبير Cron",
- "LabelCurrent": "الحالي",
- "LabelCurrently": "حاليًا:",
- "LabelCustomCronExpression": "تعبير Cron مخصص:",
- "LabelDatetime": "التاريخ والوقت",
- "LabelDays": "أيام",
- "LabelDeleteFromFileSystemCheckbox": "حذف من نظام الملفات (إلغاء التحديد للإزالة من قاعدة البيانات فقط)",
"LabelDescription": "الوصف",
- "LabelDeselectAll": "إلغاء تحديد الكل",
- "LabelDevice": "الجهاز",
- "LabelDeviceInfo": "معلومات الجهاز",
- "LabelDeviceIsAvailableTo": "الجهاز متاح لـ...",
- "LabelDirectory": "مجلد / دليل",
- "LabelDiscFromFilename": "القرص من اسم الملف",
- "LabelDiscFromMetadata": "القرص من البيانات الوصفية",
"LabelDiscover": "استكشف",
"LabelDownload": "تنزيل",
- "LabelDownloadNEpisodes": "تنزيل {0} حلقات",
- "LabelDownloadable": "قابل للتنزيل",
"LabelDuration": "المدة",
- "LabelDurationComparisonExactMatch": "(تطابق تام)",
- "LabelDurationComparisonLonger": "(أطول بـ {0})",
- "LabelDurationComparisonShorter": "({0} أقصر)",
- "LabelDurationFound": "المدة الموجودة:",
"LabelEbook": "الكتاب الإلكتروني",
"LabelEbooks": "الكتب الإلكترونية",
- "LabelEdit": "تعديل",
- "LabelEmail": "البريد الإلكتروني",
- "LabelEmailSettingsFromAddress": "عنوان المرسل",
- "LabelEmailSettingsRejectUnauthorized": "رفض الشهادات غير المصرح بها",
- "LabelEmailSettingsRejectUnauthorizedHelp": "قد يؤدي تعطيل التحقق من شهادة SSL إلى تعريض اتصالك لمخاطر أمنية، مثل هجمات الوسيط. لا تقم بتعطيل هذا الخيار إلا إذا كنت تفهم الآثار المترتبة عليه وتثق في خادم البريد الذي تتصل به.",
- "LabelEmailSettingsSecure": "آمن",
- "LabelEmailSettingsSecureHelp": "إذا كانت القيمة true، فسيستخدم الاتصال TLS عند الاتصال بالخادم. وإذا كانت false، فسيتم استخدام TLS إذا كان الخادم يدعم امتداد STARTTLS. في معظم الحالات، اضبط هذه القيمة على true إذا كنت تتصل بالمنفذ 465. أما بالنسبة للمنفذ 587 أو 25، فاحتفظ بها على false. (من nodemailer.com/smtp/#authentication)",
- "LabelEmailSettingsTestAddress": "عنوان الاختبار",
- "LabelEmbeddedCover": "غلاف مضمن",
"LabelEnable": "تمكين",
- "LabelEncodingBackupLocation": "سيتم تخزين نسخة احتياطية من ملفاتك الصوتية الأصلية في:",
- "LabelEncodingChaptersNotEmbedded": "الفصول غير مضمنة في الكتب الصوتية متعددة المسارات.",
- "LabelEncodingClearItemCache": "تأكد من مسح ذاكرة التخزين المؤقت للعناصر بشكل دوري.",
- "LabelEncodingFinishedM4B": "سيتم وضع ملف M4B النهائي في مجلد الكتب الصوتية الخاص بك في:",
- "LabelEncodingInfoEmbedded": "سيتم تضمين البيانات الوصفية في المسارات الصوتية داخل مجلد الكتب الصوتية الخاص بك.",
- "LabelEncodingStartedNavigation": "بمجرد بدء المهمة، يمكنك الانتقال من هذه الصفحة.",
- "LabelEncodingTimeWarning": "قد تستغرق عملية الترميز ما يصل إلى 30 دقيقة.",
- "LabelEncodingWarningAdvancedSettings": "تحذير: لا تقم بتحديث هذه الإعدادات إلا إذا كنت على دراية بخيارات ترميز ffmpeg.",
- "LabelEncodingWatcherDisabled": "إذا قمت بتعطيل المراقب، فستحتاج إلى إعادة فحص هذا الكتاب الصوتي بعد ذلك.",
"LabelEnd": "انهاء",
"LabelEndOfChapter": "نهاية الفصل",
"LabelEpisode": "الحلقة",
- "LabelEpisodeNotLinkedToRssFeed": "الحلقة غير مرتبطة بخلاصة RSS",
- "LabelEpisodeNumber": "الحلقة #{0}",
- "LabelEpisodeTitle": "عنوان الحلقة",
- "LabelEpisodeType": "نوع الحلقة",
- "LabelEpisodeUrlFromRssFeed": "رابط الحلقة من خلاصة RSS",
- "LabelEpisodes": "حلقات",
- "LabelEpisodic": "عرضي / حلقي",
- "LabelExample": "مثال",
- "LabelExpandSeries": "توسيع السلاسل",
- "LabelExpandSubSeries": "توسيع السلاسل الفرعية",
- "LabelExplicit": "صريح",
- "LabelExplicitChecked": "صريح (محدد)",
- "LabelExplicitUnchecked": "غير صريح (غير محدد)",
- "LabelExportOPML": "تصدير OPML",
"LabelFeedURL": "عنوان التغذية",
- "LabelFetchingMetadata": "جلب البيانات الوصفية",
"LabelFile": "الملف",
"LabelFileBirthtime": "وقت انشاء الملف",
- "LabelFileBornDate": "تاريخ الإنشاء {0}",
"LabelFileModified": "تم تعديل الملف",
- "LabelFileModifiedDate": "تم التعديل في {0}",
"LabelFilename": "اسم الملف",
- "LabelFilterByUser": "تصفية حسب المستخدم",
- "LabelFindEpisodes": "البحث عن حلقات",
"LabelFinished": "المنجزة",
"LabelFolder": "المجلد",
- "LabelFolders": "مجلدات",
- "LabelFontBold": "عريض",
"LabelFontBoldness": "تعريض الخط",
- "LabelFontFamily": "عائلة الخط",
- "LabelFontItalic": "مائل",
"LabelFontScale": "نطاق الخط",
- "LabelFontStrikethrough": "يتوسطه خط",
- "LabelFormat": "تنسيق",
- "LabelFull": "كامل",
"LabelGenre": "التصنيف",
"LabelGenres": "التصانيف",
- "LabelHardDeleteFile": "حذف الملف نهائيًا",
"LabelHasEbook": "يحتوي كتاب إلكتروني",
"LabelHasSupplementaryEbook": "يحتوي كتاب إلكتروني تكميلي",
- "LabelHideSubtitles": "إخفاء الترجمة",
- "LabelHighestPriority": "الأولوية القصوى",
"LabelHost": "المضيف",
- "LabelHour": "ساعة",
- "LabelHours": "ساعات",
- "LabelIcon": "أيقونة",
- "LabelImageURLFromTheWeb": "رابط الصورة من الويب",
"LabelInProgress": "تحت التنفيذ",
- "LabelIncludeInTracklist": "تضمين في قائمة المسارات",
"LabelIncomplete": "غير مكتمل",
- "LabelInterval": "فاصل زمني",
- "LabelIntervalCustomDailyWeekly": "يومي/أسبوعي مخصص",
- "LabelIntervalEvery12Hours": "كل 12 ساعة",
- "LabelIntervalEvery15Minutes": "كل 15 دقيقة",
- "LabelIntervalEvery2Hours": "كل ساعتين",
- "LabelIntervalEvery30Minutes": "كل 30 دقيقة",
- "LabelIntervalEvery6Hours": "كل 6 ساعات",
- "LabelIntervalEveryDay": "كل يوم",
- "LabelIntervalEveryHour": "كل ساعة",
- "LabelIntervalEveryMinute": "كل دقيقة",
- "LabelInvert": "عكس",
- "LabelItem": "عنصر",
- "LabelJumpBackwardAmount": "مقدار الرجوع للخلف",
- "LabelJumpForwardAmount": "مقدار التقدم للأمام",
"LabelLanguage": "اللغة",
- "LabelLanguageDefaultServer": "لغة الخادم الافتراضية",
- "LabelLanguages": "اللغات",
- "LabelLastBookAdded": "آخر كتاب تمت إضافته",
- "LabelLastBookUpdated": "آخر كتاب تم تحديثه",
- "LabelLastSeen": "آخر ظهور",
- "LabelLastTime": "آخر مرة",
- "LabelLastUpdate": "آخر تحديث",
"LabelLayout": "التنسيق",
"LabelLayoutSinglePage": "صفحة واحدة",
- "LabelLayoutSplitPage": "صفحتان متقابلتان",
- "LabelLess": "أقل",
- "LabelLibrariesAccessibleToUser": "المكتبات المتاحة للمستخدم",
- "LabelLibrary": "مكتبة",
- "LabelLibraryFilterSublistEmpty": "لا يوجد {0}",
- "LabelLibraryItem": "عنصر المكتبة",
- "LabelLibraryName": "اسم المكتبة",
- "LabelLimit": "حد",
"LabelLineSpacing": "تباعد الأسطر",
"LabelListenAgain": "الاستماع مجدداً",
- "LabelLogLevelDebug": "تصحيح الأخطاء",
- "LabelLogLevelInfo": "معلومات",
- "LabelLogLevelWarn": "تحذير",
- "LabelLookForNewEpisodesAfterDate": "البحث عن حلقات جديدة بعد هذا التاريخ",
- "LabelLowestPriority": "الأولوية الأدنى",
- "LabelMatchExistingUsersBy": "مطابقة المستخدمين الحاليين بواسطة",
- "LabelMatchExistingUsersByDescription": "يستخدم لربط المستخدمين الحاليين. بمجرد الاتصال، سيتم مطابقة المستخدمين بواسطة معرف فريد من مزود SSO الخاص بك",
- "LabelMaxEpisodesToDownload": "الحد الأقصى لعدد الحلقات التي سيتم تنزيلها. استخدم 0 لغير محدود.",
- "LabelMaxEpisodesToDownloadPerCheck": "الحد الأقصى لعدد الحلقات الجديدة التي سيتم تنزيلها في كل فحص",
- "LabelMaxEpisodesToKeep": "الحد الأقصى لعدد الحلقات التي سيتم الاحتفاظ بها",
- "LabelMaxEpisodesToKeepHelp": "القيمة 0 لا تضع حدًا أقصى. بعد تنزيل حلقة جديدة تلقائيًا، سيؤدي هذا إلى حذف أقدم حلقة إذا كان لديك أكثر من X حلقة. سيؤدي هذا إلى حذف حلقة واحدة فقط لكل تنزيل جديد.",
- "LabelMediaPlayer": "مشغل الوسائط",
"LabelMediaType": "نوع الوسائط",
- "LabelMetaTag": "علامة بيانات وصفية",
- "LabelMetaTags": "علامات البيانات الوصفية",
- "LabelMetadataOrderOfPrecedenceDescription": "ستتجاوز مصادر البيانات الوصفية ذات الأولوية الأعلى مصادر البيانات الوصفية ذات الأولوية الأقل",
- "LabelMetadataProvider": "مزود البيانات الوصفية",
- "LabelMinute": "دقيقة",
- "LabelMinutes": "دقائق",
"LabelMissing": "مفقود",
- "LabelMissingEbook": "لا يوجد كتاب إلكتروني",
- "LabelMissingSupplementaryEbook": "لا يوجد كتاب إلكتروني تكميلي",
- "LabelMobileRedirectURIs": "معرفات URI لإعادة التوجيه المسموح بها لتطبيقات الجوال",
- "LabelMobileRedirectURIsDescription": "هذه قائمة بيضاء لمعرفات URI لإعادة التوجيه الصالحة لتطبيقات الجوال. المعرف الافتراضي هو audiobookshelf://oauth
، والذي يمكنك إزالته أو استكماله بمعرفات URI إضافية لتكامل تطبيقات الطرف الثالث. استخدام علامة النجمة (*
) كإدخال وحيد يسمح بأي معرف URI.",
"LabelMore": "أكثر",
"LabelMoreInfo": "معلومات أكثر",
"LabelName": "الاسم",
"LabelNarrator": "الراوي",
"LabelNarrators": "الرواة",
- "LabelNew": "جديد",
- "LabelNewPassword": "كلمة سر جديدة",
"LabelNewestAuthors": "أجدد المؤلفين",
"LabelNewestEpisodes": "أجدد الحلقات",
- "LabelNextBackupDate": "تاريخ النسخ الاحتياطي التالي",
- "LabelNextScheduledRun": "التشغيل المجدول التالي",
- "LabelNoCustomMetadataProviders": "لا يوجد مزودو بيانات وصفية مخصصون",
- "LabelNoEpisodesSelected": "لم يتم تحديد أي حلقات",
"LabelNotFinished": "لم يتم الانتهاء",
"LabelNotStarted": "لم يتم البدء",
- "LabelNotes": "ملاحظات",
- "LabelNotificationAppriseURL": "رابط (روابط) Apprise",
- "LabelNotificationAvailableVariables": "المتغيرات المتاحة",
- "LabelNotificationBodyTemplate": "قالب النص",
- "LabelNotificationEvent": "حدث الإشعار",
- "LabelNotificationTitleTemplate": "قالب العنوان",
- "LabelNotificationsMaxFailedAttempts": "الحد الأقصى لعدد المحاولات الفاشلة",
- "LabelNotificationsMaxFailedAttemptsHelp": "يتم تعطيل الإشعارات بمجرد فشل إرسالها لهذا العدد من المرات",
- "LabelNotificationsMaxQueueSize": "الحد الأقصى لحجم قائمة انتظار أحداث الإشعارات",
- "LabelNotificationsMaxQueueSizeHelp": "تقتصر الأحداث على التشغيل مرة واحدة في الثانية. سيتم تجاهل الأحداث إذا كانت قائمة الانتظار في الحد الأقصى لحجمها. هذا يمنع إرسال الإشعارات بشكل متكرر.",
- "LabelNumberOfBooks": "عدد الكتب",
"LabelNumberOfEpisodes": "# من الحلقات",
- "LabelOpenIDAdvancedPermsClaimDescription": "اسم مطالبة OpenID التي تحتوي على أذونات متقدمة لإجراءات المستخدم داخل التطبيق والتي ستطبق على الأدوار غير الإدارية (إذا تم تكوينها). إذا كانت المطالبة مفقودة من الاستجابة، فسيتم رفض الوصول إلى ABS. إذا كان هناك خيار واحد مفقودًا، فسيتم التعامل معه على أنه false
. تأكد من أن مطالبة موفر الهوية تطابق البنية المتوقعة:",
- "LabelOpenIDClaims": "اترك الخيارات التالية فارغة لتعطيل تعيين المجموعة والأذونات المتقدمة، وسيتم تعيين مجموعة \"مستخدم\" تلقائيًا بعد ذلك.",
- "LabelOpenIDGroupClaimDescription": "اسم مطالبة OpenID التي تحتوي على قائمة بمجموعات المستخدم. يشار إليها عادةً باسم groups
.إذا تم تكوينها، فسيقوم التطبيق تلقائيًا بتعيين الأدوار بناءً على عضويات مجموعة المستخدم، بشرط أن تسمى هذه المجموعات بشكل غير حساس لحالة الأحرف \"admin\" أو \"user\" أو \"guest\" في المطالبة. يجب أن تحتوي المطالبة على قائمة، وإذا كان المستخدم ينتمي إلى مجموعات متعددة، فسيقوم التطبيق بتعيين الدور المقابل لأعلى مستوى من الوصول. إذا لم تتطابق أي مجموعة، فسيتم رفض الوصول.",
- "LabelOpenRSSFeed": "تغذية RSS مفتوحة",
- "LabelOverwrite": "استبدال",
- "LabelPaginationPageXOfY": "صفحة {0} من {1}",
"LabelPassword": "كلمة المرور",
"LabelPath": "مسار",
- "LabelPermanent": "دائم",
- "LabelPermissionsAccessAllLibraries": "يمكنه الوصول إلى جميع المكتبات",
- "LabelPermissionsAccessAllTags": "يمكنه الوصول إلى جميع العلامات",
- "LabelPermissionsAccessExplicitContent": "يمكنه الوصول إلى المحتوى الصريح",
- "LabelPermissionsCreateEreader": "يمكنه إنشاء قارئ إلكتروني",
- "LabelPermissionsDelete": "يمكنه الحذف",
- "LabelPermissionsDownload": "يمكنه التنزيل",
- "LabelPermissionsUpdate": "يمكنه التحديث",
- "LabelPermissionsUpload": "يمكنه الرفع",
- "LabelPersonalYearReview": "ملخص عامك ({0})",
- "LabelPhotoPathURL": "مسار/رابط الصورة",
- "LabelPlayMethod": "طريقة التشغيل",
- "LabelPlaybackRateIncrementDecrement": "مقدار زيادة/نقصان سرعة التشغيل",
- "LabelPlayerChapterNumberMarker": "{0} من {1}",
- "LabelPlaylists": "قوائم التشغيل",
"LabelPodcast": "مدونة صوتية",
- "LabelPodcastSearchRegion": "منطقة البحث عن البودكاست",
- "LabelPodcastType": "نوع البودكاست",
- "LabelPodcasts": "بودكاست",
- "LabelPort": "منفذ",
- "LabelPrefixesToIgnore": "البادئات التي يجب تجاهلها (غير حساسة لحالة الأحرف)",
+ "LabelPodcasts": "مدونات صوتية",
"LabelPreventIndexing": "منع فهرسة تغذيتك بواسطة دليل آيتونز وقوقل بودكاست",
- "LabelPrimaryEbook": "الكتاب الإلكتروني الأساسي",
"LabelProgress": "تقدم",
- "LabelProvider": "مزود",
- "LabelProviderAuthorizationValue": "قيمة رأس التفويض",
"LabelPubDate": "تاريخ النشر",
"LabelPublishYear": "سنة النشر",
"LabelPublishedDate": "منشور {0}",
- "LabelPublishedDecade": "عقد النشر",
- "LabelPublishedDecades": "عقود النشر",
- "LabelPublisher": "الناشر",
- "LabelPublishers": "الناشرون",
"LabelRSSFeedCustomOwnerEmail": "البريد الالكتروني المخصص للمالك",
"LabelRSSFeedCustomOwnerName": "الاسم المخصص للمالك",
- "LabelRSSFeedOpen": "موجز RSS مفتوح",
"LabelRSSFeedPreventIndexing": "منع الفهرسة",
- "LabelRSSFeedSlug": "اسم تعريف تغذية RSS",
- "LabelRSSFeedURL": "رابط تغذية RSS",
+ "LabelRSSFeedSlug": "رابط تغذية RSS",
"LabelRandomly": "عشوائياً",
- "LabelReAddSeriesToContinueListening": "إعادة إضافة السلسلة إلى \"متابعة الاستماع\"",
"LabelRead": "اقرأ",
"LabelReadAgain": "اقرأ مرة أخرى",
- "LabelReadEbookWithoutProgress": "قراءة الكتاب الإلكتروني دون حفظ التقدم",
"LabelRecentSeries": "المسلسلات الحديثة",
"LabelRecentlyAdded": "المضافة حديثاً",
- "LabelRecommended": "موصى به",
- "LabelRedo": "إعادة",
- "LabelRegion": "المنطقة",
- "LabelReleaseDate": "تاريخ الإصدار",
- "LabelRemoveAllMetadataAbs": "إزالة جميع ملفات metadata.abs",
- "LabelRemoveAllMetadataJson": "إزالة جميع ملفات metadata.json",
- "LabelRemoveAudibleBranding": "إزالة مقدمة وخاتمة Audible من الفصول",
- "LabelRemoveCover": "إزالة الغلاف",
- "LabelRemoveMetadataFile": "إزالة ملفات البيانات الوصفية في مجلدات عناصر المكتبة",
- "LabelRemoveMetadataFileHelp": "إزالة جميع ملفات metadata.json و metadata.abs في مجلدات {0} الخاصة بك.",
- "LabelRowsPerPage": "عدد الصفوف في الصفحة",
- "LabelSearchTerm": "مصطلح البحث",
- "LabelSearchTitle": "بحث بالعنوان",
- "LabelSearchTitleOrASIN": "بحث بالعنوان أو ASIN",
"LabelSeason": "الموسم",
- "LabelSeasonNumber": "الموسم #{0}",
- "LabelSelectAll": "تحديد الكل",
- "LabelSelectAllEpisodes": "تحديد جميع الحلقات",
- "LabelSelectEpisodesShowing": "تحديد {0} حلقة معروضة",
- "LabelSelectUsers": "تحديد المستخدمين",
- "LabelSendEbookToDevice": "إرسال الكتاب الإلكتروني إلى...",
- "LabelSequence": "تسلسل",
- "LabelSerial": "مسلسل",
"LabelSeries": "المسلسلات",
- "LabelSeriesName": "اسم السلسلة",
- "LabelSeriesProgress": "تقدم السلسلة",
- "LabelServerLogLevel": "مستوى سجل الخادم",
- "LabelServerYearReview": "ملخص عام الخادم ({0})",
"LabelSetEbookAsPrimary": "تعيين كرئيسي",
"LabelSetEbookAsSupplementary": "تعيين كتكميلي",
- "LabelSettingsAllowIframe": "السماح بالتضمين في إطار iframe",
- "LabelSettingsAudiobooksOnly": "كتب صوتية فقط",
- "LabelSettingsAudiobooksOnlyHelp": "سيؤدي تمكين هذا الإعداد إلى تجاهل ملفات الكتب الإلكترونية ما لم تكن داخل مجلد كتاب صوتي، وفي هذه الحالة سيتم تعيينها ككتب إلكترونية تكميلية",
- "LabelSettingsBookshelfViewHelp": "تصميم يحاكي الواقع مع رفوف خشبية",
- "LabelSettingsChromecastSupport": "دعم Chromecast",
- "LabelSettingsDateFormat": "تنسيق التاريخ",
- "LabelSettingsEnableWatcher": "فحص المكتبات تلقائيًا بحثًا عن تغييرات",
- "LabelSettingsEnableWatcherForLibrary": "فحص المكتبة تلقائيًا بحثًا عن تغييرات",
- "LabelSettingsEnableWatcherHelp": "يمكّن الإضافة/التحديث التلقائي للعناصر عند اكتشاف تغييرات في الملفات. *يتطلب إعادة تشغيل الخادم",
- "LabelSettingsEpubsAllowScriptedContent": "السماح بالمحتوى النصي في ملفات epub",
- "LabelSettingsEpubsAllowScriptedContentHelp": "السماح لملفات epub بتنفيذ النصوص البرمجية. يوصى بإبقاء هذا الإعداد معطلاً ما لم تثق في مصدر ملفات epub.",
- "LabelSettingsExperimentalFeatures": "ميزات تجريبية",
- "LabelSettingsExperimentalFeaturesHelp": "ميزات قيد التطوير يمكنها استخدام ملاحظاتك والمساعدة في اختبارها. انقر لفتح مناقشة على GitHub.",
- "LabelSettingsFindCovers": "البحث عن الأغلفة",
- "LabelSettingsFindCoversHelp": "إذا لم يكن لدى كتابك الصوتي غلاف مضمن أو صورة غلاف داخل المجلد، فسيحاول الماسح الضوئي العثور على غلاف.<br> ملاحظة: سيؤدي هذا إلى إطالة وقت الفحص",
- "LabelSettingsHideSingleBookSeries": "إخفاء السلاسل ذات الكتاب الواحد",
- "LabelSettingsHideSingleBookSeriesHelp": "سيتم إخفاء السلاسل التي تحتوي على كتاب واحد من صفحة السلاسل وأرفف الصفحة الرئيسية.",
- "LabelSettingsHomePageBookshelfView": "استخدام عرض الرفوف في الصفحة الرئيسية",
- "LabelSettingsLibraryBookshelfView": "استخدام عرض الرفوف في المكتبة",
- "LabelSettingsLibraryMarkAsFinishedPercentComplete": "النسبة المئوية المكتملة أكبر من",
- "LabelSettingsLibraryMarkAsFinishedTimeRemaining": "الوقت المتبقي أقل من (ثواني)",
- "LabelSettingsLibraryMarkAsFinishedWhen": "تعليم عنصر الوسائط على أنه منتهٍ عند",
- "LabelSettingsOnlyShowLaterBooksInContinueSeries": "تخطي الكتب السابقة في \"متابعة السلسلة\"",
- "LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "يعرض رف \"متابعة السلسلة\" في الصفحة الرئيسية أول كتاب لم يبدأ في السلاسل التي تحتوي على كتاب واحد على الأقل منتهي ولا يوجد كتب قيد التقدم. سيؤدي تمكين هذا الإعداد إلى متابعة السلاسل من أبعد كتاب مكتمل بدلاً من أول كتاب لم يبدأ.",
- "LabelSettingsParseSubtitles": "تحليل الترجمة",
- "LabelSettingsParseSubtitlesHelp": "استخراج الترجمة من أسماء مجلدات الكتب الصوتية.<br>يجب فصل الترجمة بـ \" - \"<br>مثال: \"عنوان الكتاب - ترجمة هنا\" تحتوي على الترجمة \"ترجمة هنا\"",
- "LabelSettingsPreferMatchedMetadata": "تفضيل البيانات الوصفية المطابقة",
- "LabelSettingsPreferMatchedMetadataHelp": "ستتجاوز البيانات المطابقة تفاصيل العنصر عند استخدام المطابقة السريعة. بشكل افتراضي، ستملأ المطابقة السريعة التفاصيل المفقودة فقط.",
- "LabelSettingsSkipMatchingBooksWithASIN": "تخطي مطابقة الكتب التي لديها ASIN بالفعل",
- "LabelSettingsSkipMatchingBooksWithISBN": "تخطي مطابقة الكتب التي لديها ISBN بالفعل",
- "LabelSettingsSortingIgnorePrefixes": "تجاهل البادئات عند الفرز",
- "LabelSettingsSortingIgnorePrefixesHelp": "مثال: بالنسبة للبادئة \"the\"، سيتم فرز عنوان الكتاب \"The Book Title\" كـ \"Book Title, The\"",
- "LabelSettingsSquareBookCovers": "استخدام أغلفة كتب مربعة",
- "LabelSettingsSquareBookCoversHelp": "تفضيل استخدام الأغلفة المربعة على أغلفة الكتب القياسية بنسبة 1.6:1",
- "LabelSettingsStoreCoversWithItem": "تخزين الأغلفة مع العنصر",
- "LabelSettingsStoreCoversWithItemHelp": "بشكل افتراضي، يتم تخزين الأغلفة في /metadata/items، وسيؤدي تمكين هذا الإعداد إلى تخزين الأغلفة في مجلد عنصر المكتبة الخاص بك. سيتم الاحتفاظ بملف واحد فقط باسم \"cover\"",
- "LabelSettingsStoreMetadataWithItem": "تخزين البيانات الوصفية مع العنصر",
- "LabelSettingsStoreMetadataWithItemHelp": "بشكل افتراضي، يتم تخزين ملفات البيانات الوصفية في /metadata/items، وسيؤدي تمكين هذا الإعداد إلى تخزين ملفات البيانات الوصفية في مجلدات عناصر المكتبة الخاصة بك",
- "LabelSettingsTimeFormat": "تنسيق الوقت",
- "LabelShare": "مشاركة",
- "LabelShareDownloadableHelp": "يسمح للمستخدمين الذين لديهم رابط المشاركة بتنزيل ملف مضغوط لعنصر المكتبة.",
- "LabelShareOpen": "فتح المشاركة",
- "LabelShareURL": "رابط المشاركة",
- "LabelShowAll": "إظهار الكل",
- "LabelShowSeconds": "إظهار الثواني",
- "LabelShowSubtitles": "إظهار الترجمة",
+ "LabelShowAll": "اظهار الكل",
"LabelSize": "الحجم",
"LabelSleepTimer": "مؤقت النوم",
- "LabelSlug": "اسم تعريفي سهل القراءة",
- "LabelSortAscending": "تصاعدي",
- "LabelSortDescending": "تنازلي",
- "LabelSortPubDate": "فرز حسب تاريخ النشر",
"LabelStart": "ابدأ",
- "LabelStartTime": "وقت البدء",
- "LabelStarted": "بدأ",
- "LabelStartedAt": "بدأ في",
- "LabelStatsAudioTracks": "مسارات الصوت",
- "LabelStatsAuthors": "المؤلفون",
"LabelStatsBestDay": "أفضل يوم",
"LabelStatsDailyAverage": "المتوسط اليومي",
"LabelStatsDays": "أيام",
"LabelStatsDaysListened": "أيام الاستماع",
- "LabelStatsHours": "ساعات",
"LabelStatsInARow": "على التوالي",
"LabelStatsItemsFinished": "العناصر المنتهية",
- "LabelStatsItemsInLibrary": "العناصر في المكتبة",
"LabelStatsMinutes": "دقائق",
"LabelStatsMinutesListening": "دقائق الاستماع",
- "LabelStatsOverallDays": "إجمالي الأيام",
- "LabelStatsOverallHours": "إجمالي الساعات",
- "LabelStatsWeekListening": "استماع هذا الأسبوع",
- "LabelSubtitle": "عنوان فرعي / ترجمة",
- "LabelSupportedFileTypes": "أنواع الملفات المدعومة",
- "LabelTag": "علامة",
- "LabelTags": "علامات",
- "LabelTagsAccessibleToUser": "العلامات المتاحة للمستخدم",
- "LabelTagsNotAccessibleToUser": "العلامات غير المتاحة للمستخدم",
- "LabelTasks": "المهام قيد التشغيل",
- "LabelTextEditorBulletedList": "قائمة نقطية",
- "LabelTextEditorLink": "رابط",
- "LabelTextEditorNumberedList": "قائمة مرقمة",
- "LabelTextEditorUnlink": "إزالة الرابط",
- "LabelTheme": "النمط",
- "LabelThemeDark": "غامق",
- "LabelThemeLight": "فاتح",
- "LabelTimeBase": "قاعدة الوقت",
- "LabelTimeDurationXHours": "{0} ساعات",
- "LabelTimeDurationXMinutes": "{0} دقائق",
- "LabelTimeDurationXSeconds": "{0} ثواني",
- "LabelTimeInMinutes": "الوقت بالدقائق",
- "LabelTimeLeft": "باقي {0}",
- "LabelTimeListened": "الوقت المستمع إليه",
- "LabelTimeListenedToday": "الوقت المستمع إليه اليوم",
- "LabelTimeRemaining": "{0} متبقية",
- "LabelTimeToShift": "الوقت المراد إزاحته بالثواني",
- "LabelTitle": "عنوان",
- "LabelToolsEmbedMetadata": "تضمين البيانات الوصفية",
- "LabelToolsEmbedMetadataDescription": "تضمين البيانات الوصفية في ملفات الصوت بما في ذلك صورة الغلاف والفصول.",
- "LabelToolsM4bEncoder": "ترميز M4B",
- "LabelToolsMakeM4b": "إنشاء ملف كتاب صوتي M4B",
- "LabelToolsMakeM4bDescription": "إنشاء ملف كتاب صوتي .M4B مع بيانات وصفية مضمنة وصورة غلاف وفصول.",
- "LabelToolsSplitM4b": "تقسيم M4B إلى ملفات MP3",
- "LabelToolsSplitM4bDescription": "إنشاء ملفات MP3 من ملف M4B مقسم حسب الفصول مع بيانات وصفية مضمنة وصورة غلاف وفصول.",
- "LabelTotalDuration": "المدة الكلية",
- "LabelTotalTimeListened": "إجمالي وقت الاستماع",
- "LabelTrackFromFilename": "المسار من اسم الملف",
- "LabelTrackFromMetadata": "المسار من البيانات الوصفية",
- "LabelTracks": "المسارات",
- "LabelTracksMultiTrack": "متعدد المسارات",
- "LabelTracksNone": "لا توجد مسارات",
- "LabelTracksSingleTrack": "مسار واحد",
- "LabelTrailer": "مقطع دعائي",
- "LabelType": "نوع",
- "LabelUnabridged": "غير مختصر",
- "LabelUndo": "تراجع",
- "LabelUnknown": "مجهول",
- "LabelUnknownPublishDate": "تاريخ النشر مجهول",
- "LabelUpdateCover": "تحديث الغلاف",
- "LabelUpdateCoverHelp": "السماح باستبدال الأغلفة الموجودة للكتب المحددة عند العثور على تطابق",
- "LabelUpdateDetails": "تحديث التفاصيل",
- "LabelUpdateDetailsHelp": "السماح باستبدال التفاصيل الموجودة للكتب المحددة عند العثور على تطابق",
- "LabelUpdatedAt": "تاريخ التحديث",
- "LabelUploaderDragAndDrop": "اسحب وأفلت الملفات أو المجلدات",
- "LabelUploaderDragAndDropFilesOnly": "اسحب وأفلت الملفات",
- "LabelUploaderDropFiles": "إفلات الملفات",
- "LabelUploaderItemFetchMetadataHelp": "جلب العنوان والمؤلف والسلسلة تلقائيًا",
- "LabelUseAdvancedOptions": "استخدام الخيارات المتقدمة",
- "LabelUseChapterTrack": "استخدام مسار الفصل",
- "LabelUseFullTrack": "استخدام المسار الكامل",
- "LabelUseZeroForUnlimited": "استخدم 0 لغير محدود",
- "LabelUser": "مستخدم",
- "LabelUsername": "اسم المستخدم",
- "LabelValue": "القيمة",
- "LabelVersion": "الإصدار",
- "LabelViewBookmarks": "عرض الإشارات المرجعية",
- "LabelViewChapters": "عرض الفصول",
- "LabelViewPlayerSettings": "عرض إعدادات المشغل",
- "LabelViewQueue": "عرض قائمة انتظار المشغل",
- "LabelVolume": "مستوى الصوت",
- "LabelWebRedirectURLsDescription": "قم بتخويل عناوين URL هذه في موفر OAuth الخاص بك للسماح بإعادة التوجيه إلى تطبيق الويب بعد تسجيل الدخول:",
- "LabelWebRedirectURLsSubfolder": "مجلد فرعي لعناوين URL لإعادة التوجيه",
- "LabelWeekdaysToRun": "أيام الأسبوع المراد التشغيل فيها",
- "LabelXBooks": "{0} كتب",
- "LabelXItems": "{0} عناصر",
- "LabelYearReviewHide": "إخفاء ملخص العام",
- "LabelYearReviewShow": "عرض ملخص العام",
- "LabelYourAudiobookDuration": "مدة كتابك الصوتي",
- "LabelYourBookmarks": "علاماتك المرجعية",
- "LabelYourPlaylists": "قوائم التشغيل الخاصة بك",
- "LabelYourProgress": "تقدمك",
- "MessageAddToPlayerQueue": "إضافة إلى قائمة انتظار المشغل",
- "MessageAppriseDescription": "لاستخدام هذه الميزة، ستحتاج إلى تشغيل مثيل Apprise API أو واجهة برمجة تطبيقات تتعامل مع نفس الطلبات. http://192.168.1.1:8337
، فستضع http://192.168.1.1:8337/notify
.",
- "MessageAsinCheck": "تأكد من أنك تستخدم ASIN من منطقة Audible الصحيحة، وليس Amazon.",
- "MessageAuthenticationOIDCChangesRestart": "أعد تشغيل الخادم بعد الحفظ لتطبيق تغييرات OIDC.",
- "MessageBackupsDescription": "تتضمن النسخ الاحتياطية المستخدمين وتقدم المستخدم وتفاصيل عنصر المكتبة وإعدادات الخادم والصور المخزنة في /metadata/items
و /metadata/authors
. لا تتضمن النسخ الاحتياطية أي ملفات مخزنة في مجلدات مكتبتك.",
- "MessageBackupsLocationEditNote": "ملاحظة: لن يؤدي تحديث موقع النسخ الاحتياطي إلى نقل أو تعديل النسخ الاحتياطية الموجودة",
- "MessageBackupsLocationNoEditNote": "ملاحظة: يتم تعيين موقع النسخ الاحتياطي من خلال متغير بيئة ولا يمكن تغييره هنا.",
- "MessageBackupsLocationPathEmpty": "لا يمكن أن يكون مسار موقع النسخ الاحتياطي فارغًا",
- "MessageBatchEditPopulateMapDetailsAllHelp": "املأ الحقول الممكّنة ببيانات من جميع العناصر. سيتم دمج الحقول ذات القيم المتعددة",
- "MessageBatchEditPopulateMapDetailsItemHelp": "املأ حقول تفاصيل الخريطة الممكّنة ببيانات من هذا العنصر",
- "MessageBatchQuickMatchDescription": "ستحاول المطابقة السريعة إضافة الأغلفة والبيانات الوصفية المفقودة للعناصر المحددة. قم بتمكين الخيارات أدناه للسماح للمطابقة السريعة بالكتابة فوق الأغلفة و/أو البيانات الوصفية الموجودة.",
- "MessageBookshelfNoCollections": "لم تنشئ أي مجموعات حتى الآن",
- "MessageBookshelfNoCollectionsHelp": "المجموعات عامة. يمكن لجميع المستخدمين الذين لديهم حق الوصول إلى المكتبة رؤيتها.",
- "MessageBookshelfNoRSSFeeds": "لا توجد خلاصات RSS مفتوحة",
- "MessageBookshelfNoResultsForFilter": "لا توجد نتائج للفلتر \"{0}: {1}\"",
- "MessageBookshelfNoResultsForQuery": "لا توجد نتائج للاستعلام",
- "MessageBookshelfNoSeries": "ليس لديك أي مسلسلات",
- "MessageChapterEndIsAfter": "نهاية الفصل بعد نهاية كتابك الصوتي",
- "MessageChapterErrorFirstNotZero": "يجب أن يبدأ الفصل الأول عند 0",
- "MessageChapterErrorStartGteDuration": "يجب أن يكون وقت البدء غير الصالح أقل من مدة الكتاب الصوتي",
- "MessageChapterErrorStartLtPrev": "يجب أن يكون وقت البدء غير الصالح أكبر من أو يساوي وقت بدء الفصل السابق",
- "MessageChapterStartIsAfter": "بداية الفصل بعد نهاية كتابك الصوتي",
- "MessageChaptersNotFound": "لم يتم العثور على فصول",
- "MessageCheckingCron": "جارٍ فحص cron...",
- "MessageConfirmCloseFeed": "هل أنت متأكد أنك تريد إغلاق هذه التغذية؟",
- "MessageConfirmDeleteBackup": "هل أنت متأكد أنك تريد حذف النسخ الاحتياطي لـ {0}؟",
- "MessageConfirmDeleteDevice": "هل أنت متأكد أنك تريد حذف جهاز القارئ الإلكتروني \"{0}\"؟",
- "MessageConfirmDeleteFile": "سيؤدي هذا إلى حذف الملف من نظام الملفات الخاص بك. هل أنت متأكد؟",
- "MessageConfirmDeleteLibrary": "هل أنت متأكد أنك تريد حذف المكتبة \"{0}\" نهائيًا؟",
- "MessageConfirmDeleteLibraryItem": "سيؤدي هذا إلى حذف عنصر المكتبة من قاعدة البيانات ونظام الملفات الخاص بك. هل أنت متأكد؟",
- "MessageConfirmDeleteLibraryItems": "سيؤدي هذا إلى حذف {0} عنصرًا من عناصر المكتبة من قاعدة البيانات ونظام الملفات الخاص بك. هل أنت متأكد؟",
- "MessageConfirmDeleteMetadataProvider": "هل أنت متأكد أنك تريد حذف مزود البيانات الوصفية المخصص \"{0}\"؟",
- "MessageConfirmDeleteNotification": "هل أنت متأكد أنك تريد حذف هذا الإشعار؟",
- "MessageConfirmDeleteSession": "هل أنت متأكد أنك تريد حذف هذه الجلسة؟",
- "MessageConfirmEmbedMetadataInAudioFiles": "هل أنت متأكد أنك تريد تضمين البيانات الوصفية في {0} ملفًا صوتيًا؟",
- "MessageConfirmForceReScan": "هل أنت متأكد أنك تريد فرض إعادة الفحص؟",
- "MessageConfirmMarkAllEpisodesFinished": "هل أنت متأكد أنك تريد تعليم جميع الحلقات على أنها منتهية؟",
- "MessageConfirmMarkAllEpisodesNotFinished": "هل أنت متأكد أنك تريد تعليم جميع الحلقات على أنها غير منتهية؟",
- "MessageConfirmMarkItemFinished": "هل أنت متأكد أنك تريد تعليم \"{0}\" على أنه منتهٍ؟",
- "MessageConfirmMarkItemNotFinished": "هل أنت متأكد أنك تريد تعليم \"{0}\" على أنه غير منتهٍ؟",
- "MessageConfirmMarkSeriesFinished": "هل أنت متأكد أنك تريد تعليم جميع الكتب في هذه السلسلة على أنها منتهية؟",
- "MessageConfirmMarkSeriesNotFinished": "هل أنت متأكد أنك تريد تعليم جميع الكتب في هذه السلسلة على أنها غير منتهية؟",
- "MessageConfirmNotificationTestTrigger": "هل تريد تشغيل هذا الإشعار ببيانات اختبار؟",
- "MessageConfirmPurgeCache": "سيؤدي مسح ذاكرة التخزين المؤقت إلى حذف الدليل بأكمله في /metadata/cache
. /metadata/cache/items
/metadata/logs
كملفات JSON. يتم تخزين سجلات الأعطال في /metadata/logs/crash_logs.txt
.",
- "MessageM4BFailed": "فشل M4B!",
- "MessageM4BFinished": "تم الانتهاء من M4B!",
- "MessageMapChapterTitles": "ربط عناوين الفصول بفصول كتابك الصوتي الحالي دون تعديل الطوابع الزمنية",
- "MessageMarkAllEpisodesFinished": "تعليم جميع الحلقات على أنها منتهية",
- "MessageMarkAllEpisodesNotFinished": "تعليم جميع الحلقات على أنها غير منتهية",
- "MessageMarkAsFinished": "وضع علامة \"تم الإنتهاء\"",
- "MessageMarkAsNotFinished": "وضع علامة \"غير منته\"",
- "MessageMatchBooksDescription": "سيحاول مطابقة الكتب في المكتبة مع كتاب من مزود البحث المحدد وملء التفاصيل الفارغة وصورة الغلاف. لا يستبدل التفاصيل الموجودة.",
- "MessageNoAudioTracks": "لا توجد مسارات صوتية",
- "MessageNoAuthors": "لا يوجد مؤلفون",
- "MessageNoBackups": "لا توجد نسخ احتياطية",
- "MessageNoBookmarks": "لا توجد علامات مرجعية",
- "MessageNoChapters": "لا توجد فصول",
- "MessageNoCollections": "لا توجد مجموعات",
- "MessageNoCoversFound": "لم يتم العثور على أغلفة",
- "MessageNoDescription": "لا يوجد وصف",
- "MessageNoDevices": "لا توجد أجهزة",
- "MessageNoDownloadsInProgress": "لا توجد تنزيلات قيد التقدم حاليًا",
- "MessageNoDownloadsQueued": "لا توجد تنزيلات في قائمة الانتظار",
- "MessageNoEpisodeMatchesFound": "لم يتم العثور على أي تطابقات للحلقات",
- "MessageNoEpisodes": "لا توجد حلقات",
- "MessageNoFoldersAvailable": "لا توجد مجلدات متاحة",
- "MessageNoGenres": "لا توجد تصانيف",
- "MessageNoIssues": "لا توجد مشاكل",
- "MessageNoItems": "لا توجد عناصر",
- "MessageNoItemsFound": "لم يتم العثور على عناصر",
- "MessageNoListeningSessions": "لا توجد جلسات استماع",
- "MessageNoLogs": "لا توجد سجلات",
- "MessageNoMediaProgress": "لا يوجد تقدم للوسائط",
- "MessageNoNotifications": "لا توجد إشعارات",
- "MessageNoPodcastFeed": "بودكاست غير صالح: لا يوجد تغذية",
- "MessageNoPodcastsFound": "لم يتم العثور على أي بودكاست",
- "MessageNoResults": "لا توجد نتائج",
- "MessageNoSearchResultsFor": "لا توجد نتائج بحث عن \"{0}\"",
- "MessageNoSeries": "لا توجد مسلسلات",
- "MessageNoTags": "لا توجد علامات",
- "MessageNoTasksRunning": "لا توجد مهام قيد التشغيل",
- "MessageNoUpdatesWereNecessary": "لا حاجة لأي تحديثات",
- "MessageNoUserPlaylists": "ليس لديك أي قوائم تشغيل",
- "MessageNoUserPlaylistsHelp": "قوائم التشغيل خاصة. لا يمكن إلا للمستخدم الذي ينشئها رؤيتها.",
- "MessageNotYetImplemented": "لم يتم تنفيذه بعد",
- "MessageOpmlPreviewNote": "ملاحظة: هذه معاينة لملف OPML الذي تم تحليله. سيتم أخذ عنوان البودكاست الفعلي من خلاصة RSS.",
- "MessageOr": "أو",
- "MessagePauseChapter": "إيقاف تشغيل الفصل مؤقتًا",
- "MessagePlayChapter": "الاستماع إلى بداية الفصل",
- "MessagePlaylistCreateFromCollection": "إنشاء قائمة تشغيل من المجموعة",
- "MessagePleaseWait": "الرجاء الانتظار...",
- "MessagePodcastHasNoRSSFeedForMatching": "لا يحتوي البودكاست على عنوان URL لخلاصة RSS لاستخدامه في المطابقة",
- "MessagePodcastSearchField": "أدخل مصطلح البحث أو عنوان URL الخاص بتغذية RSS",
- "MessageQuickEmbedInProgress": "التضمين السريع قيد التقدم",
- "MessageQuickEmbedQueue": "تمت إضافته إلى قائمة انتظار التضمين السريع ({0} في قائمة الانتظار)",
- "MessageQuickMatchAllEpisodes": "مطابقة سريعة لجميع الحلقات",
- "MessageQuickMatchDescription": "املأ تفاصيل العنصر الفارغة والغلاف بأول نتيجة مطابقة من '{0}'. لا يستبدل التفاصيل إلا إذا تم تمكين إعداد الخادم 'تفضيل البيانات الوصفية المطابقة'.",
- "MessageRemoveChapter": "إزالة الفصل",
- "MessageRemoveEpisodes": "إزالة {0} حلقة (حلقات)",
- "MessageRemoveFromPlayerQueue": "إزالة من قائمة انتظار المشغل",
- "MessageRemoveUserWarning": "هل أنت متأكد أنك تريد حذف المستخدم \"{0}\" نهائيًا؟",
- "MessageReportBugsAndContribute": "أبلغ عن الأخطاء، واطلب الميزات، وساهم في",
- "MessageResetChaptersConfirm": "هل أنت متأكد أنك تريد إعادة تعيين الفصول والتراجع عن التغييرات التي أجريتها؟",
- "MessageRestoreBackupConfirm": "هل أنت متأكد أنك تريد استعادة النسخ الاحتياطي الذي تم إنشاؤه في",
- "MessageRestoreBackupWarning": "ستؤدي استعادة النسخ الاحتياطي إلى الكتابة فوق قاعدة البيانات بأكملها الموجودة في /config وصور الأغلفة في /metadata/items و /metadata/authors.groups
. Ако е конфигурирано, приложението автоматично ще присвоява роли въз основа на членството на потребителя в групи, при условие че тези групи са наименувани без чувствителност към регистъра като 'admin', 'user' или 'guest' в твърдението. Твърдението трябва да съдържа списък и ако потребителят принадлежи към множество групи, приложението ще присвои ролята, съответстваща на най-високото ниво на достъп. Ако няма съвпадение с група, достъпът ще бъде отказан.",
"LabelOpenRSSFeed": "Отвори RSS Feed",
"LabelOverwrite": "Презапиши",
- "LabelPaginationPageXOfY": "Страница {0} от {1}",
"LabelPassword": "Парола",
"LabelPath": "Път",
- "LabelPermanent": "Постоянен",
"LabelPermissionsAccessAllLibraries": "Може да достъпи до всички библиотеки",
"LabelPermissionsAccessAllTags": "Може да достъпи всички тагове",
"LabelPermissionsAccessExplicitContent": "Може да достъпи експлицитно съдържание",
- "LabelPermissionsCreateEreader": "Може да създава електронен четец",
"LabelPermissionsDelete": "Може да трие",
"LabelPermissionsDownload": "Може да сваля",
"LabelPermissionsUpdate": "Може да обновява",
@@ -490,8 +461,6 @@
"LabelPersonalYearReview": "Преглед на годината Ви ({0})",
"LabelPhotoPathURL": "Път/URL на Снимка",
"LabelPlayMethod": "Метод на Пускане",
- "LabelPlaybackRateIncrementDecrement": "Размер на увеличаване/намаляне при скоростта на възпроизвеждане",
- "LabelPlayerChapterNumberMarker": "{0} от {1}",
"LabelPlaylists": "Плейлисти",
"LabelPodcast": "Подкаст",
"LabelPodcastSearchRegion": "Регион за Търсене на Подкасти",
@@ -503,12 +472,9 @@
"LabelPrimaryEbook": "Основна Електронна Книга",
"LabelProgress": "Прогрес",
"LabelProvider": "Доставчик",
- "LabelProviderAuthorizationValue": "Стойност на Authorization Header",
"LabelPubDate": "Дата на публикуване",
"LabelPublishYear": "Година на публикуване",
"LabelPublishedDate": "Публикувани {0}",
- "LabelPublishedDecade": "Десетилетие на публикуване",
- "LabelPublishedDecades": "Десетилетия на публикуване",
"LabelPublisher": "Издател",
"LabelPublishers": "Издателство",
"LabelRSSFeedCustomOwnerEmail": "Персонализиран имейл на собственика",
@@ -518,7 +484,6 @@
"LabelRSSFeedSlug": "идентификатор на RSS емисия",
"LabelRSSFeedURL": "URL на RSS емисия",
"LabelRandomly": "Случайно",
- "LabelReAddSeriesToContinueListening": "Добави отново в \"Продължете да слушате\"",
"LabelRead": "Прочети",
"LabelReadAgain": "Прочети отново",
"LabelReadEbookWithoutProgress": "Прочети електронната книга без записване прогрес",
@@ -528,40 +493,29 @@
"LabelRedo": "Повтори",
"LabelRegion": "Регион",
"LabelReleaseDate": "Дата на Издаване",
- "LabelRemoveAllMetadataAbs": "Премахни всички metadata.abs файлове",
- "LabelRemoveAllMetadataJson": "Премахни всички metadata.json файлове",
- "LabelRemoveAudibleBranding": "Премахни въведението и заключението на Audible от главите",
"LabelRemoveCover": "Премахни Корица",
- "LabelRemoveMetadataFile": "Премахни файловете с метаданни от папката на библиотеката",
- "LabelRemoveMetadataFileHelp": "Премахни всички metadata.json и metadata.abs файлове от вашата {0} папка.",
"LabelRowsPerPage": "Редове на Страница",
"LabelSearchTerm": "Търси Термин",
"LabelSearchTitle": "Търси Заглавие",
"LabelSearchTitleOrASIN": "Търси Заглавие или ASIN",
"LabelSeason": "Сезон",
- "LabelSeasonNumber": "Сезон #{0}",
"LabelSelectAll": "Избери всичко",
"LabelSelectAllEpisodes": "Избери всички епизоди",
"LabelSelectEpisodesShowing": "Избери {0} епизоди показани",
"LabelSelectUsers": "Избери Потребители",
"LabelSendEbookToDevice": "Изпрати електронна книга до ...",
"LabelSequence": "Последователност",
- "LabelSerial": "Сериал",
"LabelSeries": "От сериите",
"LabelSeriesName": "Име на Серия",
"LabelSeriesProgress": "Прогрес на Серия",
- "LabelServerLogLevel": "Ниво на сървърен журнал",
"LabelServerYearReview": "Преглед на годината на сървъра ({0})",
"LabelSetEbookAsPrimary": "Направи главен",
"LabelSetEbookAsSupplementary": "Направи второстепенен",
- "LabelSettingsAllowIframe": "Разреши вграждане в iframe",
"LabelSettingsAudiobooksOnly": "Само аудиокниги",
"LabelSettingsAudiobooksOnlyHelp": "Активирането на тази настройка ще игнорира файловете на електронни книги, освен ако не са в папка с аудиокниги, в което случай ще бъдат зададени като допълнителни електронни книги",
"LabelSettingsBookshelfViewHelp": "Скеуморфен дизайн с дървени рафтове",
"LabelSettingsChromecastSupport": "Chromecast поддръжка",
"LabelSettingsDateFormat": "Формат на Дата",
- "LabelSettingsEnableWatcher": "Автоматично сканиране на библиотеките за промени",
- "LabelSettingsEnableWatcherForLibrary": "Автоматично сканиране на библиотеката за промени",
"LabelSettingsEnableWatcherHelp": "Включва автоматичното добавяне/обновяване на елементи, когато се открият промени във файловете. *Изисква рестарт на сървъра",
"LabelSettingsEpubsAllowScriptedContent": "Позволи скриптово съдържание в epub-и",
"LabelSettingsEpubsAllowScriptedContentHelp": "Позволи epub файловете да изпълняват скриптове. Препоръчително е да бъде изключено освен ако не се доверявате на източника на epub файловете.",
@@ -573,13 +527,10 @@
"LabelSettingsHideSingleBookSeriesHelp": "Сериите с една книга ще бъдат скрити от страницата на серията и рафтовете на началната страница.",
"LabelSettingsHomePageBookshelfView": "Начална страница изглед на рафт",
"LabelSettingsLibraryBookshelfView": "Библиотека изглед на рафт",
- "LabelSettingsLibraryMarkAsFinishedPercentComplete": "Процент завършеност е по-голям от",
- "LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Оставащо време е по-малко от (секунди)",
- "LabelSettingsLibraryMarkAsFinishedWhen": "Отбелязване на мултимедиен елемент като завършен когато",
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Пропусни предишни книги в Продължи Поредица",
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Рафтът на началната страница 'Продължи поредицата' показва първата книга, която не е започната в поредици, в които има поне една завършена книга и няма книги в процес на четене. Активирането на тази настройка ще продължи поредицата от най-далечната завършена книга вместо от първата незапочната книга.",
"LabelSettingsParseSubtitles": "Извлечи подзаглавия",
- "LabelSettingsParseSubtitlesHelp": "Извлича подзаглавия от имената на папките на аудио книгите. audiobookshelf
, que pots eliminar o complementar amb URI addicionals per a la integració d'aplicacions de tercers. Usant un asterisc ( *
) com a única entrada que permet qualsevol URI.",
@@ -498,25 +497,25 @@
"LabelPodcastType": "Tipus de pòdcast",
"LabelPodcasts": "Pòdcasts",
"LabelPort": "Port",
- "LabelPrefixesToIgnore": "Prefixos a ignorar (no distingeix entre majúscules i minúscules)",
+ "LabelPrefixesToIgnore": "Prefixos per Ignorar (no distingeix entre majúscules i minúscules.)",
"LabelPreventIndexing": "Evita que el vostre canal l'indexin els directoris de pòdcasts de l'iTunes i Google",
- "LabelPrimaryEbook": "Llibre electrònic principal",
+ "LabelPrimaryEbook": "Ebook Principal",
"LabelProgress": "Progrés",
"LabelProvider": "Proveïdor",
"LabelProviderAuthorizationValue": "Valor de l'encapçalament d'autorització",
- "LabelPubDate": "Data de publicació",
- "LabelPublishYear": "Any de publicació",
+ "LabelPubDate": "Data de Publicació",
+ "LabelPublishYear": "Any de Publicació",
"LabelPublishedDate": "Publicat {0}",
- "LabelPublishedDecade": "Dècada de publicació",
+ "LabelPublishedDecade": "Dècada de Publicació",
"LabelPublishedDecades": "Dècades Publicades",
"LabelPublisher": "Editor",
"LabelPublishers": "Editors",
"LabelRSSFeedCustomOwnerEmail": "Correu Electrònic Personalitzat del Propietari",
"LabelRSSFeedCustomOwnerName": "Nom Personalitzat del Propietari",
"LabelRSSFeedOpen": "Font RSS Oberta",
- "LabelRSSFeedPreventIndexing": "Evita la indexació",
- "LabelRSSFeedSlug": "URL semàntic del canal RSS",
- "LabelRSSFeedURL": "URL del canal RSS",
+ "LabelRSSFeedPreventIndexing": "Evitar l'indexació",
+ "LabelRSSFeedSlug": "Font RSS Slug",
+ "LabelRSSFeedURL": "URL de la Font RSS",
"LabelRandomly": "A l'atzar",
"LabelReAddSeriesToContinueListening": "Reafegir la sèrie per continuar escoltant-la",
"LabelRead": "Llegit",
@@ -525,40 +524,39 @@
"LabelRecentSeries": "Sèries recents",
"LabelRecentlyAdded": "Addicions recents",
"LabelRecommended": "Recomanats",
- "LabelRedo": "Refés",
+ "LabelRedo": "Refer",
"LabelRegion": "Regió",
- "LabelReleaseDate": "Data d'estrena",
- "LabelRemoveAllMetadataAbs": "Elimina tots els fitxers metadata.abs",
- "LabelRemoveAllMetadataJson": "Elimina tots els fitxers metadata.json",
- "LabelRemoveAudibleBranding": "Elimina la introducció i el tancament de l'Audible dels capítols",
- "LabelRemoveCover": "Elimina la coberta",
+ "LabelReleaseDate": "Data d'Estrena",
+ "LabelRemoveAllMetadataAbs": "Eliminar tots els fitxers metadata.abs",
+ "LabelRemoveAllMetadataJson": "Eliminar tots els fitxers metadata.json",
+ "LabelRemoveCover": "Eliminar Coberta",
"LabelRemoveMetadataFile": "Eliminar fitxers de metadades en carpetes d'elements de biblioteca",
"LabelRemoveMetadataFileHelp": "Elimina tots els fitxers metadata.json i metadata.abs de les vostres carpetes {0}.",
- "LabelRowsPerPage": "Files per pàgina",
- "LabelSearchTerm": "Cerca terme",
- "LabelSearchTitle": "Cerca títol",
- "LabelSearchTitleOrASIN": "Cerca títol o ASIN",
+ "LabelRowsPerPage": "Files per Pàgina",
+ "LabelSearchTerm": "Cercar Terme",
+ "LabelSearchTitle": "Cercar Títol",
+ "LabelSearchTitleOrASIN": "Cercar Títol o ASIN",
"LabelSeason": "Temporada",
- "LabelSeasonNumber": "{0}a temporada",
- "LabelSelectAll": "Selecciona-ho tot",
- "LabelSelectAllEpisodes": "Selecciona tots els episodis",
+ "LabelSeasonNumber": "Temporada #{0}",
+ "LabelSelectAll": "Seleccionar tot",
+ "LabelSelectAllEpisodes": "Seleccionar tots els episodis",
"LabelSelectEpisodesShowing": "Seleccionar els {0} episodis visibles",
"LabelSelectUsers": "Seleccionar usuaris",
"LabelSendEbookToDevice": "Enviar Ebook a...",
"LabelSequence": "Seqüència",
"LabelSerial": "En sèrie",
- "LabelSeries": "Sèrie",
- "LabelSeriesName": "Nom de la sèrie",
- "LabelSeriesProgress": "Progrés de la sèrie",
+ "LabelSeries": "Sèries",
+ "LabelSeriesName": "Nom de la Sèrie",
+ "LabelSeriesProgress": "Progrés de la Sèrie",
"LabelServerLogLevel": "Nivell de registre del servidor",
"LabelServerYearReview": "Resum de l'any del servidor ({0})",
"LabelSetEbookAsPrimary": "Establir com a principal",
"LabelSetEbookAsSupplementary": "Establir com a suplementari",
- "LabelSettingsAudiobooksOnly": "Només audiollibres",
- "LabelSettingsAudiobooksOnlyHelp": "En activar aquesta opció s'ignoraran els fitxers de llibre electrònic, excepte si estan dins d'una carpeta d'audiollibre; en aquest cas es marcaran com a llibres suplementaris",
+ "LabelSettingsAudiobooksOnly": "Només Audiollibres",
+ "LabelSettingsAudiobooksOnlyHelp": "Activant aquesta opció s'ignoraran els fitxers d'ebook, excepte si estan dins d'una carpeta d'audiollibre, en aquest cas es marcaran com ebooks suplementaris",
"LabelSettingsBookshelfViewHelp": "Disseny esqueomorf amb prestatgeries de fusta",
"LabelSettingsChromecastSupport": "Compatibilitat amb Chromecast",
- "LabelSettingsDateFormat": "Format de data",
+ "LabelSettingsDateFormat": "Format de Data",
"LabelSettingsEnableWatcherHelp": "Permet afegir/actualitzar elements automàticament quan es detectin canvis en els fitxers. *Requereix reiniciar el servidor",
"LabelSettingsEpubsAllowScriptedContent": "Permetre scripts en epubs",
"LabelSettingsEpubsAllowScriptedContentHelp": "Permetre que els fitxers epub executin scripts. Es recomana mantenir aquesta opció desactivada tret que confiïs en l'origen dels fitxers epub.",
@@ -578,8 +576,6 @@
"LabelSize": "Mida",
"LabelSleepTimer": "Temporitzador de repòs",
"LabelSlug": "Slug",
- "LabelSortAscending": "Ascendent",
- "LabelSortDescending": "Descendent",
"LabelStart": "Inicia",
"LabelStartTime": "Hora d'inici",
"LabelStarted": "Iniciat",
@@ -805,25 +801,23 @@
"MessageQuickEmbedInProgress": "Integració ràpida en procés",
"MessageQuickEmbedQueue": "En cua per a inserció ràpida ({0} en cua)",
"MessageQuickMatchAllEpisodes": "Combina ràpidament tots els episodis",
- "MessageQuickMatchDescription": "Emplena els detalls i la coberta dels elements buits amb el resultat de la primera coincidència de «{0}». No sobreescriu els detalls tret que s'activi el paràmetre del servidor «Prefereix metadades coincidents».",
- "MessageRemoveChapter": "Elimina el capítol",
- "MessageRemoveEpisodes": "Elimina {0} episodi(s)",
- "MessageRemoveFromPlayerQueue": "Elimina de la cua del reproductor",
+ "MessageQuickMatchDescription": "Omple detalls d'elements buits i portades amb els primers resultats de '{0}'. No sobreescriu els detalls tret que l'opció \"Preferir metadades trobades\" del servidor estigui habilitada.",
+ "MessageRemoveChapter": "Eliminar capítols",
+ "MessageRemoveEpisodes": "Eliminar {0} episodi(s)",
+ "MessageRemoveFromPlayerQueue": "Eliminar de la cua del reproductor",
"MessageRemoveUserWarning": "Segur que voleu suprimir permanentment l'usuari «{0}»?",
"MessageReportBugsAndContribute": "Informa d'errors, sol·licita funcions i contribueix a",
"MessageResetChaptersConfirm": "Segur que voleu desfer els canvis i revertir els capítols al seu estat original?",
"MessageRestoreBackupConfirm": "Segur que voleu restaurar la còpia de seguretat creada a",
"MessageRestoreBackupWarning": "Restaurar sobreescriurà tota la base de dades situada a /config i les imatges de portades a /metadata/items i /metadata/authors.http://192.168.1.1:8337
pak byste měli zadat http://192.168.1.1:8337/notify
.",
- "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 /metadata/items
a /metadata/authors
. Zálohy ne 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",
"MessageBackupsLocationNoEditNote": "Poznámka: Umístění záloh je nastavené z proměnných prostředí a nelze zde změnit.",
@@ -727,7 +723,6 @@
"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",
"MessageChapterStartIsAfter": "Začátek kapitoly přesahuje konec audioknihy",
- "MessageChaptersNotFound": "Kapitoly nenalezeny",
"MessageCheckingCron": "Kontrola cronu...",
"MessageConfirmCloseFeed": "Opravdu chcete zavřít tento kanál?",
"MessageConfirmDeleteBackup": "Opravdu chcete smazat zálohu pro {0}?",
@@ -784,13 +779,12 @@
"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í!",
"MessageInsertChapterBelow": "Vložit kapitolu níže",
- "MessageInvalidAsin": "Neplatný ASIN",
"MessageItemsSelected": "{0} vybraných položek",
"MessageItemsUpdated": "{0} položky byly aktualizovány",
"MessageJoinUsOn": "Přidejte se k nám",
"MessageLoading": "Načítá se...",
"MessageLoadingFolders": "Načítám složky...",
- "MessageLogsDescription": "Logy se ukládají do souborů JSON v /metadata/logs
. Logy o pádech jsou uloženy v /metadata/logs/crash_logs.txt
.",
+ "MessageLogsDescription": "Protokoly se ukládají do souborů JSON v /metadata/logs
. Protokoly o pádech jsou uloženy v /metadata/logs/crash_logs.txt
.",
"MessageM4BFailed": "M4B se nezdařil!",
"MessageM4BFinished": "M4B dokončen!",
"MessageMapChapterTitles": "Mapování názvů kapitol ke stávajícím kapitolám audioknihy bez úpravy časových razítek",
@@ -814,11 +808,11 @@
"MessageNoEpisodes": "Žádné epizody",
"MessageNoFoldersAvailable": "Nejsou k dispozici žádné složky",
"MessageNoGenres": "Žádné žánry",
- "MessageNoIssues": "Žádné problémy",
+ "MessageNoIssues": "Žádné výtisk",
"MessageNoItems": "Žádné položky",
"MessageNoItemsFound": "Nebyly nalezeny žádné položky",
"MessageNoListeningSessions": "Žádné poslechové relace",
- "MessageNoLogs": "Žádné logy",
+ "MessageNoLogs": "Žádné protokoly",
"MessageNoMediaProgress": "Žádný průběh médií",
"MessageNoNotifications": "Žádná oznámení",
"MessageNoPodcastFeed": "Neplatný podcast: Žádný kanál",
@@ -856,7 +850,6 @@
"MessageScheduleRunEveryWeekdayAtTime": "Spusť každý {0} v {1}",
"MessageSearchResultsFor": "Výsledky hledání pro",
"MessageSelected": "{0} vybráno",
- "MessageSeriesSequenceCannotContainSpaces": "Sekvence série nesmí obsahovat mezery",
"MessageServerCouldNotBeReached": "Server je nedostupný",
"MessageSetChaptersFromTracksDescription": "Nastavit kapitoly jako kapitolu a název kapitoly jako název zvukového souboru",
"MessageShareExpirationWillBe": "Expiruje {0}",
@@ -918,8 +911,6 @@
"NotificationOnBackupCompletedDescription": "Spuštěno po dokončení zálohování",
"NotificationOnBackupFailedDescription": "Spuštěno pokud zálohování selže",
"NotificationOnEpisodeDownloadedDescription": "Spuštěno při automatickém stažení epizody podcastu",
- "NotificationOnRSSFeedDisabledDescription": "Aktivováno když je automatické stahování pozastaveno z důvodu příliš mnoho neůspěšných pokusů",
- "NotificationOnRSSFeedFailedDescription": "Aktivováno když selže RSS kanál pro stahování epizod",
"NotificationOnTestDescription": "Akce pro otestování upozorňovacího systému",
"PlaceholderNewCollection": "Nový název kolekce",
"PlaceholderNewFolderPath": "Nová cesta ke složce",
@@ -964,7 +955,7 @@
"ToastBackupRestoreFailed": "Nepodařilo se obnovit zálohu",
"ToastBackupUploadFailed": "Nepodařilo se nahrát zálohu",
"ToastBackupUploadSuccess": "Záloha nahrána",
- "ToastBatchApplyDetailsToItemsSuccess": "Detaily byly aplikované na položky",
+ "ToastBatchApplyDetailsToItemsSuccess": "Detaily aplikované na položky",
"ToastBatchDeleteFailed": "Hromadné smazání selhalo",
"ToastBatchDeleteSuccess": "Hromadné smazání proběhlo úspěšně",
"ToastBatchQuickMatchFailed": "Rychlá schoda dávky se nezdařila!",
@@ -977,8 +968,6 @@
"ToastCachePurgeFailed": "Nepodařilo se vyčistit mezipaměť",
"ToastCachePurgeSuccess": "Vyrovnávací paměť úspěšně vyčištěna",
"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 čas začátku druhé kapitoly.",
"ToastChaptersMustHaveTitles": "Kapitoly musí mít názvy",
"ToastChaptersRemoved": "Kapitoly odstraněny",
"ToastChaptersUpdated": "Kapitola aktualizována",
@@ -1099,7 +1088,7 @@
"ToastUnlinkOpenIdFailed": "Chyba při odpárování uživatele z OpenID",
"ToastUnlinkOpenIdSuccess": "Uživatel odpárován z uživatele z OpenID",
"ToastUploaderFilepathExistsError": "Soubor \"{0}\" na serveru již existuje",
- "ToastUploaderItemExistsInSubdirectoryError": "Položka \"{0}\" používá podadresář cesty pro nahrání.",
+ "ToastUploaderItemExistsInSubdirectoryError": "Položka \"{0}\" používá podsložku nahrávané cesty.",
"ToastUserDeleteFailed": "Nepodařilo se smazat uživatele",
"ToastUserDeleteSuccess": "Uživatel smazán",
"ToastUserPasswordChangeSuccess": "Heslo bylo změněno úspěšně",
diff --git a/client/strings/da.json b/client/strings/da.json
index 342529f7..06342342 100644
--- a/client/strings/da.json
+++ b/client/strings/da.json
@@ -177,7 +177,6 @@
"HeaderPlaylist": "Afspilningsliste",
"HeaderPlaylistItems": "Afspilningsliste Elementer",
"HeaderPodcastsToAdd": "Podcasts til Tilføjelse",
- "HeaderPresets": "Forudindstillinger",
"HeaderPreviewCover": "Forhåndsvis Omslag",
"HeaderRSSFeedGeneral": "RSS Detaljer",
"HeaderRSSFeedIsOpen": "RSS Feed er Åben",
@@ -514,7 +513,7 @@
"LabelPublishers": "Forlag",
"LabelRSSFeedCustomOwnerEmail": "Brugerdefineret ejerens e-mail",
"LabelRSSFeedCustomOwnerName": "Brugerdefineret ejerens navn",
- "LabelRSSFeedOpen": "RSS-feed åbent",
+ "LabelRSSFeedOpen": "Åben RSS-feed",
"LabelRSSFeedPreventIndexing": "Forhindrer indeksering",
"LabelRSSFeedSlug": "RSS-feed-slug",
"LabelRSSFeedURL": "RSS-feed-URL",
@@ -531,7 +530,6 @@
"LabelReleaseDate": "Udgivelsesdato",
"LabelRemoveAllMetadataAbs": "Fjern alle metadata.abs filer",
"LabelRemoveAllMetadataJson": "Fjern alle metadata.json filer",
- "LabelRemoveAudibleBranding": "Fjern Audible intro og outro fra kapitler",
"LabelRemoveCover": "Fjern omslag",
"LabelRemoveMetadataFile": "Fjern alle metadata filer i biblioteksmapper",
"LabelRemoveMetadataFileHelp": "Fjern alle metadata.json og metadata.abs filer i dine {0} mapper.",
@@ -606,7 +604,6 @@
"LabelSlug": "Snegl",
"LabelSortAscending": "Stigende",
"LabelSortDescending": "Faldende",
- "LabelSortPubDate": "Sortér Pub Dato",
"LabelStart": "Start",
"LabelStartTime": "Starttid",
"LabelStarted": "Startet",
@@ -707,8 +704,6 @@
"LabelYourProgress": "Din fremgang",
"MessageAddToPlayerQueue": "Tilføj til afspilningskø",
"MessageAppriseDescription": "For at bruge denne funktion skal du have en instans af Apprise API kørende eller en API, der håndterer de samme anmodninger. http://192.168.1.1:8337
, så skal du bruge http://192.168.1.1:8337/notify
.",
- "MessageAsinCheck": "Sikr dig at du bruger ASIN fra den korrekte Audible region, ikke Amazon.",
- "MessageAuthenticationOIDCChangesRestart": "Genstart sin server efter du har gemt for at bekræfte OIDC ændringer.",
"MessageBackupsDescription": "Backups inkluderer brugere, brugerfremskridt, biblioteksvareoplysninger, serverindstillinger og billeder gemt i /metadata/items
og /metadata/authors
. Backups inkluderer ikke nogen filer gemt i dine biblioteksmapper.",
"MessageBackupsLocationEditNote": "Note: Opdatering af backup sti vil ikke fjerne eller modificere eksisterende backups",
"MessageBackupsLocationNoEditNote": "Note: Backup sti er sat igennem miljøvariabel og kan ikke ændres her.",
@@ -727,7 +722,6 @@
"MessageChapterErrorStartGteDuration": "Ugyldig starttid skal være mindre end lydbogens varighed",
"MessageChapterErrorStartLtPrev": "Ugyldig starttid skal være større end eller lig med den foregående kapitels starttid",
"MessageChapterStartIsAfter": "Kapitelstarten er efter slutningen af din lydbog",
- "MessageChaptersNotFound": "Kapitler ikke fundet",
"MessageCheckingCron": "Tjekker cron...",
"MessageConfirmCloseFeed": "Er du sikker på, at du vil lukke dette feed?",
"MessageConfirmDeleteBackup": "Er du sikker på, at du vil slette backup for {0}?",
@@ -784,7 +778,6 @@
"MessageForceReScanDescription": "vil scanne alle filer igen som en frisk scanning. Lydfilens ID3-tags, OPF-filer og tekstfiler scannes som nye.",
"MessageImportantNotice": "Vigtig besked!",
"MessageInsertChapterBelow": "Indsæt kapitel nedenfor",
- "MessageInvalidAsin": "Ugyldig ASIN",
"MessageItemsSelected": "{0} elementer valgt",
"MessageItemsUpdated": "{0} elementer opdateret",
"MessageJoinUsOn": "Deltag i os på",
@@ -856,7 +849,6 @@
"MessageScheduleRunEveryWeekdayAtTime": "Kør hvert {0} af {1}",
"MessageSearchResultsFor": "Søgeresultater for",
"MessageSelected": "{0} valgt",
- "MessageSeriesSequenceCannotContainSpaces": "Serie sekvens kan ikke indeholde mellemrum",
"MessageServerCouldNotBeReached": "Serveren kunne ikke nås",
"MessageSetChaptersFromTracksDescription": "Indstil kapitler ved at bruge hver lydfil som et kapitel og kapiteloverskrift som lydfilnavn",
"MessageShareExpirationWillBe": "Udløb vil være {0}",
@@ -918,8 +910,6 @@
"NotificationOnBackupCompletedDescription": "Udløst når backup er færdig",
"NotificationOnBackupFailedDescription": "Udløst når backup fejler",
"NotificationOnEpisodeDownloadedDescription": "Udløst når et podcast afsnit er automatisk downloadet",
- "NotificationOnRSSFeedDisabledDescription": "Aktiveret når automatiske episode-downloads er slået fra, på grund af for mange forsøg",
- "NotificationOnRSSFeedFailedDescription": "Aktiveret når anmodning om RSS-feedet fejler for en automatisk episode-download",
"NotificationOnTestDescription": "Event for test af notifikationssystemet",
"PlaceholderNewCollection": "Nyt samlingnavn",
"PlaceholderNewFolderPath": "Ny mappes sti",
@@ -964,7 +954,6 @@
"ToastBackupRestoreFailed": "Mislykkedes gendannelse af sikkerhedskopi",
"ToastBackupUploadFailed": "Mislykkedes upload af sikkerhedskopi",
"ToastBackupUploadSuccess": "Sikkerhedskopi uploadet",
- "ToastBatchApplyDetailsToItemsSuccess": "Detaljer bekræftet på element",
"ToastBatchDeleteFailed": "Batch slet fejlede",
"ToastBatchDeleteSuccess": "Batch slet succes",
"ToastBatchQuickMatchFailed": "Batch Hurtig Match fejlede!",
diff --git a/client/strings/de.json b/client/strings/de.json
index 04de453e..b08db87c 100644
--- a/client/strings/de.json
+++ b/client/strings/de.json
@@ -53,7 +53,7 @@
"ButtonNext": "Vor",
"ButtonNextChapter": "Nächstes Kapitel",
"ButtonNextItemInQueue": "Das nächste Element in der Warteschlange",
- "ButtonOk": "Ok",
+ "ButtonOk": "Einverstanden",
"ButtonOpenFeed": "Feed öffnen",
"ButtonOpenManager": "Manager öffnen",
"ButtonPause": "Pausieren",
@@ -88,7 +88,7 @@
"ButtonSave": "Speichern",
"ButtonSaveAndClose": "Speichern & Schließen",
"ButtonSaveTracklist": "Speichere die Titelliste",
- "ButtonScan": "Scannen",
+ "ButtonScan": "Partial-Scan (nur geänderte/neue Medien)",
"ButtonScanLibrary": "Bibliothek scannen",
"ButtonScrollLeft": "Nach Links scrollen",
"ButtonScrollRight": "Nach Rechts scrollen",
@@ -514,7 +514,7 @@
"LabelPublishers": "Herausgeber",
"LabelRSSFeedCustomOwnerEmail": "Benutzerdefinierte Eigentümer-E-Mail",
"LabelRSSFeedCustomOwnerName": "Benutzerdefinierter Name des Eigentümers",
- "LabelRSSFeedOpen": "RSS Feed öffnen",
+ "LabelRSSFeedOpen": "RSS Feed offen",
"LabelRSSFeedPreventIndexing": "Indizierung verhindern",
"LabelRSSFeedSlug": "RSS-Feed-Schlagwort",
"LabelRSSFeedURL": "RSS-Feed-URL",
@@ -708,7 +708,7 @@
"MessageAddToPlayerQueue": "Zur Abspielwarteliste hinzufügen",
"MessageAppriseDescription": "Um diese Funktion nutzen zu können, musst du eine Instanz von Apprise API laufen haben oder eine API verwenden welche dieselbe Anfragen bearbeiten kann. http://192.168.1.1:8337
läuft, würdest du http://192.168.1.1:8337/notify
eingeben.",
"MessageAsinCheck": "Stellen Sie sicher, dass Sie die ASIN aus der richtigen Audible Region verwenden, nicht Amazon.",
- "MessageAuthenticationOIDCChangesRestart": "Nach dem Speichern muss der Server neugestartet werden um die OIDC Änderungen zu übernehmen.",
+ "MessageAuthenticationOIDCChangesRestart": "Nach dem Speichern muß der Server neugestartet werden um die OIDC Änderungen zu übernehmen.",
"MessageBackupsDescription": "In einer Sicherung werden Benutzer, Benutzerfortschritte, Details zu den Bibliotheksobjekten, Servereinstellungen und Bilder welche in /metadata/items
& /metadata/authors
gespeichert sind gespeichert. Sicherungen enthalten keine Dateien welche in den einzelnen Bibliotheksordnern (Medien-Ordnern) gespeichert sind.",
"MessageBackupsLocationEditNote": "Hinweis: Durch das Aktualisieren des Backup-Speicherorts werden vorhandene Sicherungen nicht verschoben oder geändert",
"MessageBackupsLocationNoEditNote": "Hinweis: Der Sicherungsspeicherort wird über eine Umgebungsvariable festgelegt und kann hier nicht geändert werden.",
@@ -852,13 +852,12 @@
"MessageResetChaptersConfirm": "Kapitel und vorgenommenen Änderungen werden zurückgesetzt und rückgängig gemacht! Bist du dir sicher?",
"MessageRestoreBackupConfirm": "Bist du dir sicher, dass du die Sicherung wiederherstellen willst, welche am",
"MessageRestoreBackupWarning": "Bei der Wiederherstellung einer Sicherung wird die gesamte Datenbank unter /config und die Titelbilder in /metadata/items und /metadata/authors überschrieben./metadata/cache
. /metadata/cache/items
.http://192.168.1.1:8337
alors vous devez mettre http://192.168.1.1:8337/notify
.",
- "MessageAsinCheck": "Assurez-vous d’utiliser l’ASIN de la bonne région Audible, et non d’Amazon.",
- "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 /metadata/items
& /metadata/authors
. Les sauvegardes n’incluent pas 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",
"MessageBackupsLocationNoEditNote": "Remarque : l’emplacement de sauvegarde est défini via une variable d’environnement et ne peut pas être modifié ici.",
@@ -726,7 +723,6 @@
"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",
"MessageChapterStartIsAfter": "Le premier chapitre est situé au début de votre livre audio",
- "MessageChaptersNotFound": "Chapitres non trouvés",
"MessageCheckingCron": "Vérification du cron…",
"MessageConfirmCloseFeed": "Êtes-vous sûr·e de vouloir fermer ce flux ?",
"MessageConfirmDeleteBackup": "Êtes-vous sûr·e de vouloir supprimer la sauvegarde de « {0} » ?",
@@ -783,7 +779,6 @@
"MessageForceReScanDescription": "analysera de nouveau tous les fichiers. Les étiquettes ID3 des fichiers audio, les fichiers OPF et les fichiers texte seront analysés comme s’ils étaient nouveaux.",
"MessageImportantNotice": "Information importante !",
"MessageInsertChapterBelow": "Insérer le chapitre ci-dessous",
- "MessageInvalidAsin": "ASIN invalide",
"MessageItemsSelected": "{0} éléments sélectionnés",
"MessageItemsUpdated": "{0} éléments mis à jour",
"MessageJoinUsOn": "Rejoignez-nous sur",
@@ -855,7 +850,6 @@
"MessageScheduleRunEveryWeekdayAtTime": "Exécuté tous les {0} à {1}",
"MessageSearchResultsFor": "Résultats de recherche pour",
"MessageSelected": "{0} sélectionnés",
- "MessageSeriesSequenceCannotContainSpaces": "La séquence de séries ne peut pas contenir d’espaces",
"MessageServerCouldNotBeReached": "Serveur inaccessible",
"MessageSetChaptersFromTracksDescription": "Positionne un chapitre par fichier audio, avec le titre du fichier comme titre de chapitre",
"MessageShareExpirationWillBe": "Expire le {0}",
@@ -974,8 +968,6 @@
"ToastCachePurgeFailed": "Échec de la purge du cache",
"ToastCachePurgeSuccess": "Cache purgé avec succès",
"ToastChaptersHaveErrors": "Les chapitres contiennent des erreurs",
- "ToastChaptersInvalidShiftAmountLast": "Durée de décalage non valide. L’heure 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",
"ToastChaptersRemoved": "Chapitres supprimés",
"ToastChaptersUpdated": "Chapitres mis à jour",
diff --git a/client/strings/he.json b/client/strings/he.json
index 8b5bcdd0..19da58e7 100644
--- a/client/strings/he.json
+++ b/client/strings/he.json
@@ -10,8 +10,6 @@
"ButtonApplyChapters": "החל פרקים",
"ButtonAuthors": "סופרים",
"ButtonBack": "חזור",
- "ButtonBatchEditPopulateFromExisting": "מלא משדות קיימים",
- "ButtonBatchEditPopulateMapDetails": "מלא פרטי מפה",
"ButtonBrowseForFolder": "עיין בתיקייה",
"ButtonCancel": "ביטול",
"ButtonCancelEncode": "בטל קידוד",
@@ -31,9 +29,7 @@
"ButtonEdit": "ערוך",
"ButtonEditChapters": "ערוך פרקים",
"ButtonEditPodcast": "ערוך פודקאסט",
- "ButtonEnable": "אפשר",
- "ButtonFireAndFail": "שלח בכישלון",
- "ButtonFireOnTest": "שלח באירוע בדיקה",
+ "ButtonEnable": "הפעל",
"ButtonForceReScan": "סרוק מחדש בכוח",
"ButtonFullPath": "נתיב מלא",
"ButtonHide": "הסתר",
@@ -41,7 +37,7 @@
"ButtonIssues": "תקלות",
"ButtonJumpBackward": "דלג אחורה",
"ButtonJumpForward": "דלג קדימה",
- "ButtonLatest": "אחרון",
+ "ButtonLatest": "חדש ביותר",
"ButtonLibrary": "ספרייה",
"ButtonLogout": "התנתק",
"ButtonLookup": "חפש",
@@ -74,7 +70,7 @@
"ButtonReScan": "סרוק מחדש",
"ButtonRead": "קרא",
"ButtonReadLess": "קרא פחות",
- "ButtonReadMore": "קרא עוד",
+ "ButtonReadMore": "קרא יותר",
"ButtonRefresh": "רענן",
"ButtonRemove": "הסר",
"ButtonRemoveAll": "הסר הכל",
@@ -90,9 +86,7 @@
"ButtonSaveTracklist": "שמור רשימת רצועות",
"ButtonScan": "סרוק",
"ButtonScanLibrary": "סרוק ספרייה",
- "ButtonScrollLeft": "גלול שמאלה",
- "ButtonScrollRight": "גלול ימינה",
- "ButtonSearch": "חיפוש",
+ "ButtonSearch": "חפש",
"ButtonSelectFolderPath": "בחר נתיב לתיקייה",
"ButtonSeries": "סדרה",
"ButtonSetChaptersFromTracks": "קבע פרקים לפי הרצועות",
@@ -102,7 +96,7 @@
"ButtonStartM4BEncode": "התחל קידוד M4B",
"ButtonStartMetadataEmbed": "התחל הטמעת מטא-נתונים",
"ButtonStats": "סטטיסטיקות",
- "ButtonSubmit": "שליחה",
+ "ButtonSubmit": "שלח",
"ButtonTest": "בדיקה",
"ButtonUnlinkOpenId": "נתק OpenID",
"ButtonUpload": "העלה",
@@ -128,26 +122,26 @@
"HeaderChapters": "פרקים",
"HeaderChooseAFolder": "בחר תיקייה",
"HeaderCollection": "אוסף",
- "HeaderCollectionItems": "פרטי אוסף",
+ "HeaderCollectionItems": "פריטי אוסף",
"HeaderCover": "כריכה",
"HeaderCurrentDownloads": "הורדות נוכחיות",
"HeaderCustomMessageOnLogin": "הודעה מותאמת אישית בהתחברות",
"HeaderCustomMetadataProviders": "ספקי מטא-נתונים מותאמים אישית",
"HeaderDetails": "פרטים",
"HeaderDownloadQueue": "תור הורדה",
- "HeaderEbookFiles": "קבצי Ebook",
+ "HeaderEbookFiles": "קבצי ספר אלקטרוני",
"HeaderEmail": "אימייל",
"HeaderEmailSettings": "הגדרות אימייל",
"HeaderEpisodes": "פרקים",
"HeaderEreaderDevices": "התקני קריאה דיגיטליים",
- "HeaderEreaderSettings": "הגדרות קורא אלקטרוני",
+ "HeaderEreaderSettings": "הגדרות התקני קריאה דיגיטליים",
"HeaderFiles": "קבצים",
"HeaderFindChapters": "מצא פרקים",
"HeaderIgnoredFiles": "קבצים שנתעלמו",
"HeaderItemFiles": "קבצי פריט",
"HeaderItemMetadataUtils": "כלי מטא-נתונים",
"HeaderLastListeningSession": "הפעלת האזנה אחרונה",
- "HeaderLatestEpisodes": "פרקים אחרונים",
+ "HeaderLatestEpisodes": "הפרקים העדכניים ביותר",
"HeaderLibraries": "ספריות",
"HeaderLibraryFiles": "קבצי ספרייה",
"HeaderLibraryStats": "סטטיסטיקות ספרייה",
@@ -177,9 +171,8 @@
"HeaderPlaylist": "רשימת השמעה",
"HeaderPlaylistItems": "פריטי רשימת השמעה",
"HeaderPodcastsToAdd": "פודקאסטים להוספה",
- "HeaderPresets": "קביעות מוגדרות מראש",
"HeaderPreviewCover": "תצוגה מקדימה של כריכה",
- "HeaderRSSFeedGeneral": "פרטי RSS",
+ "HeaderRSSFeedGeneral": "פרטי ערוץ RSS",
"HeaderRSSFeedIsOpen": "ערוץ RSS פתוח",
"HeaderRSSFeeds": "ערוצי RSS",
"HeaderRemoveEpisode": "הסר פרק",
@@ -195,15 +188,14 @@
"HeaderSettingsExperimental": "תכונות ניסיוניות",
"HeaderSettingsGeneral": "כללי",
"HeaderSettingsScanner": "סורק",
- "HeaderSettingsWebClient": "מערך",
"HeaderSleepTimer": "טיימר שינה",
"HeaderStatsLargestItems": "הפריטים הגדולים ביותר",
"HeaderStatsLongestItems": "הפריטים הארוכים ביותר (בשעות)",
- "HeaderStatsMinutesListeningChart": "דקות האזנה (7 ימים אחרונים)",
- "HeaderStatsRecentSessions": "האזנות אחרונות",
+ "HeaderStatsMinutesListeningChart": "דקות האזנה (בימים האחרונים)",
+ "HeaderStatsRecentSessions": "הפעלות אחרונות",
"HeaderStatsTop10Authors": "10 היוצרים המובילים",
"HeaderStatsTop5Genres": "הז'אנרים המובילים 5",
- "HeaderTableOfContents": "תוכן עניינים",
+ "HeaderTableOfContents": "תוכן העניינים",
"HeaderTools": "כלים",
"HeaderUpdateAccount": "עדכן חשבון",
"HeaderUpdateAuthor": "עדכן יוצר",
@@ -220,17 +212,15 @@
"LabelAccountTypeAdmin": "מנהל",
"LabelAccountTypeGuest": "אורח",
"LabelAccountTypeUser": "משתמש",
- "LabelActivities": "פעילויות",
"LabelActivity": "פעילות",
"LabelAddToCollection": "הוסף לאוסף",
"LabelAddToCollectionBatch": "הוסף {0} ספרים לאוסף",
"LabelAddToPlaylist": "הוסף לרשימת השמעה",
"LabelAddToPlaylistBatch": "הוסף {0} פריטים לרשימת השמעה",
- "LabelAddedAt": "נוסף ב-",
+ "LabelAddedAt": "נוסף בתאריך",
"LabelAddedDate": "נוסף ב-{0}",
"LabelAdminUsersOnly": "רק מנהלים",
"LabelAll": "הכל",
- "LabelAllEpisodesDownloaded": "כל הפרקים הורדו",
"LabelAllUsers": "כל המשתמשים",
"LabelAllUsersExcludingGuests": "כל המשתמשים, ללא אורחים",
"LabelAllUsersIncludingGuests": "כל המשתמשים כולל אורחים",
@@ -240,10 +230,10 @@
"LabelAudioBitrate": "קצב סיביות (לדוגמא 128k)",
"LabelAudioChannels": "ערוצי קול (1 או 2)",
"LabelAudioCodec": "קידוד קול",
- "LabelAuthor": "סופר",
- "LabelAuthorFirstLast": "סופר (שם, משפחה)",
- "LabelAuthorLastFirst": "סופר (משפחה, שם)",
- "LabelAuthors": "סופרים",
+ "LabelAuthor": "יוצר",
+ "LabelAuthorFirstLast": "יוצר (שם פרטי שם משפחה)",
+ "LabelAuthorLastFirst": "יוצר (שם משפחה, שם פרטי)",
+ "LabelAuthors": "יוצרים",
"LabelAutoDownloadEpisodes": "הורד פרקים באופן אוטומטי",
"LabelAutoFetchMetadata": "חפש והורד מטא-נתונים באופן אוטומטי",
"LabelAutoFetchMetadataHelp": "מחפש ומוריד מטא-נתונים לשדות כותרת, יוצר וסדרה כדי לשפר את תהליך ההעלאה. ייתכן שיהיה צורך להתאים מטא-נתונים נוסף לאחר ההעלאה.",
@@ -252,48 +242,36 @@
"LabelAutoRegister": "הרשמה אוטומטית",
"LabelAutoRegisterDescription": "יצירת משתמשים חדשים אוטומטית לאחר התחברות",
"LabelBackToUser": "חזרה למשתמש",
- "LabelBackupAudioFiles": "גיבוי קבצי שמע",
"LabelBackupLocation": "מיקום גיבוי",
- "LabelBackupsEnableAutomaticBackups": "גיבויים אוטומטיים",
+ "LabelBackupsEnableAutomaticBackups": "הפעל גיבויים אוטומטיים",
"LabelBackupsEnableAutomaticBackupsHelp": "גיבויים שמורים ב /metadata/backups",
- "LabelBackupsMaxBackupSize": "גודל הגיבוי המרבי (בג'יגה-בייט) (0 - ללא הגבלה)",
+ "LabelBackupsMaxBackupSize": "גודל הגיבוי המרבי (בג'יגה-בייט)",
"LabelBackupsMaxBackupSizeHelp": "כהגנה על עצמך מפני תצורה שגויה, הגיבויים ייכשלו אם הם יעברו את הגודל שהוגדר.",
"LabelBackupsNumberToKeep": "מספר הגיבויים לשמירה",
"LabelBackupsNumberToKeepHelp": "רק גיבוי אחד יוסר בכל פעם, לכן אם יש לך כבר יותר מגיבוי אחד יש להסיר אותם באופן ידני.",
"LabelBitrate": "קצב סיביות",
- "LabelBonus": "בונוס",
"LabelBooks": "ספרים",
"LabelButtonText": "טקסט לחצן",
- "LabelByAuthor": "על ידי {0}",
"LabelChangePassword": "שינוי סיסמה",
"LabelChannels": "ערוצים",
- "LabelChapterCount": "{0} פרקים",
"LabelChapterTitle": "כותרת הפרק",
"LabelChapters": "פרקים",
"LabelChaptersFound": "פרקים שנמצאו",
"LabelClickForMoreInfo": "לחץ למידע נוסף",
- "LabelClickToUseCurrentValue": "לחץ לשימוש בערך הנוכחי",
"LabelClosePlayer": "סגור נגן",
- "LabelCodec": "Coded",
- "LabelCollapseSeries": "הסתר סדרה",
- "LabelCollapseSubSeries": "הסתר תת סדרה",
+ "LabelCollapseSeries": "צמצום סדרה",
"LabelCollection": "אוסף",
"LabelCollections": "אוספים",
- "LabelComplete": "הושלם",
+ "LabelComplete": "מלא",
"LabelConfirmPassword": "אישור סיסמה",
"LabelContinueListening": "המשך האזנה",
"LabelContinueReading": "המשך קריאה",
"LabelContinueSeries": "המשך סדרה",
"LabelCover": "כריכה",
"LabelCoverImageURL": "כתובת התמונה ברשת",
- "LabelCoverProvider": "ספק כריכה",
"LabelCreatedAt": "נוצר בתאריך",
- "LabelCronExpression": "ביטוי cron",
"LabelCurrent": "נוכחי",
"LabelCurrently": "כעת:",
- "LabelCustomCronExpression": "ביטוי cron מותאם אישית:",
- "LabelDatetime": "Datetime",
- "LabelDays": "ימים",
"LabelDeleteFromFileSystemCheckbox": "מחיקה מהמערכת הקבצים (הסר סימון למחיקה רק ממסד הנתונים)",
"LabelDescription": "תיאור",
"LabelDeselectAll": "הסר בחירת כל הפריטים",
@@ -304,83 +282,51 @@
"LabelDiscFromFilename": "דיסק משם הקובץ",
"LabelDiscFromMetadata": "דיסק מהמטא-נתונים",
"LabelDiscover": "גלה",
- "LabelDownload": "הורדה",
+ "LabelDownload": "הורד",
"LabelDownloadNEpisodes": "הורד {0} פרקים",
- "LabelDownloadable": "ניתן להורדה",
"LabelDuration": "משך",
- "LabelDurationComparisonExactMatch": "(התאמה מדוייקת)",
- "LabelDurationComparisonLonger": "({0} ארוך יותר)",
- "LabelDurationComparisonShorter": "({0} קצר יותר)",
"LabelDurationFound": "משך נמצא:",
"LabelEbook": "ספר אלקטרוני",
"LabelEbooks": "ספרים אלקטרוניים",
"LabelEdit": "עריכה",
"LabelEmail": "דואר אלקטרוני",
"LabelEmailSettingsFromAddress": "מאת",
- "LabelEmailSettingsRejectUnauthorized": "דחה תעודות לא מאושרות",
- "LabelEmailSettingsRejectUnauthorizedHelp": "השבתת אימות תעודת SSL עלולה לחשוף את החיבור שלך לסיכוני אבטחה, כגון התקפות \"אדם באמצע\". השבת אפשרות זו רק אם אתה מבין את ההשלכות ובוטח בשרת הדואר שאליו אתה מתחבר.",
"LabelEmailSettingsSecure": "מאובטח",
"LabelEmailSettingsSecureHelp": "אם מופעל, החיבור ישתמש ב-TLS בעת ההתחברות לשרת. אם לא, אז TLS יהיה בשימוש אם השרת תומך בהרחבת STARTTLS. ברוב המקרים מומלץ להפעיל את הגדרה זו אם אתה מתחבר לפורט 465. לפורט 587 או 25, השאר כבוי. (from nodemailer.com/smtp/#authentication)",
"LabelEmailSettingsTestAddress": "כתובת לבדיקה",
"LabelEmbeddedCover": "כריכה מוטמעת",
- "LabelEnable": "אפשר",
- "LabelEncodingBackupLocation": "גיבוי של קבצי אודיו מקוריים יישמר ב:",
- "LabelEncodingChaptersNotEmbedded": "פרקים אינם מוטבעים בספרי אודיו מרובי רצועות.",
- "LabelEncodingClearItemCache": "הקפד לנקות מטמון פריטים מעת לעת.",
- "LabelEncodingFinishedM4B": "קובץ M4B סופי יישמר בתיקייה ה-audiobook ב:",
- "LabelEncodingInfoEmbedded": "מטה דאטה יוטמע ברצועות השמע בתוך תיקיית ה-audiobook.",
- "LabelEncodingStartedNavigation": "לאחר שהמשימה תתחיל אפשר לנווט לדף אחר.",
- "LabelEncodingTimeWarning": "קידוד יכול להימשך עד 30 דקות.",
- "LabelEncodingWarningAdvancedSettings": "אזהרה: אל תעדכן את ההגדרות האלה אלא אם כן אתה מכיר את אפשרויות קידוד ffmpeg.",
- "LabelEncodingWatcherDisabled": "אם ה-watcher כבוי, יש לסרוק את הספר מחדש לאחר מכן.",
- "LabelEnd": "סוף",
- "LabelEndOfChapter": "סוף הפרק",
+ "LabelEnable": "הפעל",
+ "LabelEnd": "סיום",
"LabelEpisode": "פרק",
- "LabelEpisodeNotLinkedToRssFeed": "פרק לא מקושר לערוץ RSS",
- "LabelEpisodeNumber": "פרק #{0}",
"LabelEpisodeTitle": "כותרת הפרק",
"LabelEpisodeType": "סוג הפרק",
- "LabelEpisodeUrlFromRssFeed": "קישור פרק מערוץ RSS",
- "LabelEpisodes": "פרקים",
- "LabelEpisodic": "ארעי",
"LabelExample": "דוגמה",
- "LabelExpandSeries": "הרחב סדרה",
- "LabelExpandSubSeries": "הרחב תת סדרה",
"LabelExplicit": "בוטה",
- "LabelExplicitChecked": "בוטה (מסומן)",
- "LabelExplicitUnchecked": "לא בוטה (לא מסומן)",
- "LabelExportOPML": "ייצוא OPML",
"LabelFeedURL": "כתובת ערוץ",
"LabelFetchingMetadata": "מושך מטא-נתונים",
"LabelFile": "קובץ",
"LabelFileBirthtime": "זמן יצירת הקובץ",
- "LabelFileBornDate": "נוצר {0}",
- "LabelFileModified": "קובץ נערך",
- "LabelFileModifiedDate": "שונה {0}",
- "LabelFilename": "שם קובץ",
+ "LabelFileModified": "הקובץ שונה",
+ "LabelFilename": "שם הקובץ",
"LabelFilterByUser": "סינון לפי משתמש",
"LabelFindEpisodes": "מצא פרקים",
"LabelFinished": "הושלם",
"LabelFolder": "תיקייה",
"LabelFolders": "תיקיות",
"LabelFontBold": "מודגש",
- "LabelFontBoldness": "עובי פונט",
"LabelFontFamily": "משפחת הפונטים",
"LabelFontItalic": "נטוי",
- "LabelFontScale": "גודל פונט",
+ "LabelFontScale": "קנה מידה של הפונט",
"LabelFontStrikethrough": "קו חוצה",
"LabelFormat": "תבנית",
- "LabelFull": "מלא",
- "LabelGenre": "סגנון",
- "LabelGenres": "סגנונות",
+ "LabelGenre": "ז'אנר",
+ "LabelGenres": "ז'אנרים",
"LabelHardDeleteFile": "מחיקה חזקה של הקובץ",
- "LabelHasEbook": "קיים ספר אלקטרוני",
- "LabelHasSupplementaryEbook": "קיים ספר אלקטרוני משלים",
- "LabelHideSubtitles": "הסתר תת כותרות",
+ "LabelHasEbook": "ספר אלקטרוני קיים",
+ "LabelHasSupplementaryEbook": "קיים ספר אלקטרוני נלווה",
"LabelHighestPriority": "העדיפות הגבוהה ביותר",
"LabelHost": "מארח",
"LabelHour": "שעה",
- "LabelHours": "שעות",
"LabelIcon": "סמל",
"LabelImageURLFromTheWeb": "כתובת התמונה מהרשת",
"LabelInProgress": "בתהליך",
@@ -395,30 +341,25 @@
"LabelIntervalEvery6Hours": "כל 6 שעות",
"LabelIntervalEveryDay": "כל יום",
"LabelIntervalEveryHour": "כל שעה",
- "LabelIntervalEveryMinute": "כל דקה",
"LabelInvert": "הפוך",
"LabelItem": "פריט",
- "LabelJumpBackwardAmount": "כמות הרצה לאחור",
- "LabelJumpForwardAmount": "כמות הרצה קדימה",
"LabelLanguage": "שפה",
"LabelLanguageDefaultServer": "שפת ברירת המחדל של השרת",
- "LabelLanguages": "שפות",
"LabelLastBookAdded": "הספר האחרון שנוסף",
"LabelLastBookUpdated": "הספר האחרון שעודכן",
"LabelLastSeen": "נראה לאחרונה",
"LabelLastTime": "הזמן האחרון",
"LabelLastUpdate": "עדכון אחרון",
- "LabelLayout": "Layout",
- "LabelLayoutSinglePage": "עמוד יחיד",
+ "LabelLayout": "פריסה",
+ "LabelLayoutSinglePage": "דף בודד",
"LabelLayoutSplitPage": "פיצול הדף",
"LabelLess": "פחות",
"LabelLibrariesAccessibleToUser": "ספריות נגישות למשתמש",
"LabelLibrary": "ספרייה",
- "LabelLibraryFilterSublistEmpty": "לא {0}",
"LabelLibraryItem": "פריט ספרייה",
"LabelLibraryName": "שם הספרייה",
"LabelLimit": "מגבלה",
- "LabelLineSpacing": "מרווח שורה",
+ "LabelLineSpacing": "ריווח שורות",
"LabelListenAgain": "האזן שוב",
"LabelLogLevelDebug": "דיבוג",
"LabelLogLevelInfo": "מידע",
@@ -427,10 +368,6 @@
"LabelLowestPriority": "העדיפות הנמוכה ביותר",
"LabelMatchExistingUsersBy": "התאם משתמשים קיימים לפי",
"LabelMatchExistingUsersByDescription": "משמש לחיבור משתמשים קיימים. לאחר החיבור, המשתמשים יותאמו לפי זיהוי ייחודי מספק ה-SSO שלך",
- "LabelMaxEpisodesToDownload": "מספר פרקים מקסימלי להורדה. 0 - ללא הגבלה.",
- "LabelMaxEpisodesToDownloadPerCheck": "מספר פרקים חדשים מקסימלי להורדה בכל בדיקה",
- "LabelMaxEpisodesToKeep": "מספר פרקים מקסימלי לשמור",
- "LabelMaxEpisodesToKeepHelp": "ערך של 0 קובע ללא מגבלה. לאחר הורדה אוטומטית של פרק חדש יימחק את הפרק הישן ביותר אם יש לך יותר מ-X פרקים. פעולה זו תמחק רק פרק אחד לכל הורדה חדשה.",
"LabelMediaPlayer": "נגן מדיה",
"LabelMediaType": "סוג מדיה",
"LabelMetaTag": "תג מטא",
@@ -438,7 +375,6 @@
"LabelMetadataOrderOfPrecedenceDescription": "מקורות המטא-נתונים עם עדיפות גבוהה יחליפו מקורות עם עדיפות נמוכה יותר",
"LabelMetadataProvider": "ספק מטא-נתונים",
"LabelMinute": "דקה",
- "LabelMinutes": "דקות",
"LabelMissing": "חסר",
"LabelMissingEbook": "אין ספר אלקטרוני",
"LabelMissingSupplementaryEbook": "אין ספר אלקטרוני נלווה",
@@ -451,11 +387,10 @@
"LabelNarrators": "מספרים",
"LabelNew": "חדש",
"LabelNewPassword": "סיסמה חדשה",
- "LabelNewestAuthors": "הסופרים האחרונים",
+ "LabelNewestAuthors": "הסופרים החדשים ביותר",
"LabelNewestEpisodes": "הפרקים החדשים ביותר",
"LabelNextBackupDate": "תאריך הגיבוי הבא",
"LabelNextScheduledRun": "הרצה מתוזמנת הבאה",
- "LabelNoCustomMetadataProviders": "אין ספקי מטא-נתונים מותאמים אישית",
"LabelNoEpisodesSelected": "לא נבחרו פרקים",
"LabelNotFinished": "לא הושלם",
"LabelNotStarted": "לא התחיל",
@@ -470,9 +405,7 @@
"LabelNotificationsMaxQueueSize": "גודל התור המרבי לאירועי התראה",
"LabelNotificationsMaxQueueSizeHelp": "האירועים מוגבלים לשליחה אחת לשנייה. האירועים יתעלמו אם התור מלא. הגדרה זו נועדה למנוע ספאם התראות.",
"LabelNumberOfBooks": "מספר הספרים",
- "LabelNumberOfEpisodes": "# פרקים",
- "LabelOpenIDAdvancedPermsClaimDescription": "שם OpenID claim המכילה הרשאות מתקדמות לפעולות משתמש בתוך האפליקציה, אשר יחולו על תפקידים שאינם מנהלי מערכת (אם הוגדרה). אם התביעה חסרה בתגובה, הגישה ל-ABS תידחה. אם אפשרות אחת חסרה, היא תטופל כ-false
יש לוודא שטענת ספק הזהויות תואמת את המבנה הצפוי:",
- "LabelOpenIDClaims": "השאר את האפשרויות הבאות ריקות כדי להשבית הקצאת קבוצות והרשאות מתקדמת, ולאחר מכן להקצות אוטומטית את קבוצת 'משתמש'.",
+ "LabelNumberOfEpisodes": "מספר הפרקים",
"LabelOpenRSSFeed": "פתח ערוץ RSS",
"LabelOverwrite": "לשכפל",
"LabelPassword": "סיסמה",
@@ -500,15 +433,13 @@
"LabelProvider": "ספק",
"LabelPubDate": "תאריך פרסום",
"LabelPublishYear": "שנת הפרסום",
- "LabelPublishedDate": "פורסם {0}",
"LabelPublisher": "מוציא לאור",
"LabelRSSFeedCustomOwnerEmail": "אימייל בעלים מותאם אישית",
"LabelRSSFeedCustomOwnerName": "שם בעלים מותאם אישית",
- "LabelRSSFeedOpen": "ערוץ RSS פתוח",
+ "LabelRSSFeedOpen": "פתח ערוץ RSS",
"LabelRSSFeedPreventIndexing": "מנע רישום",
"LabelRSSFeedSlug": "Slug של ערוץ ה-RSS",
"LabelRSSFeedURL": "כתובת ערוץ ה-RSS",
- "LabelRandomly": "באופן אקראי",
"LabelRead": "קריאה",
"LabelReadAgain": "קרא שוב",
"LabelReadEbookWithoutProgress": "קרא/י ספר אלקטרוני ללא שמירת התקדמות",
@@ -534,7 +465,7 @@
"LabelSeriesProgress": "התקדמות בסדרה",
"LabelServerYearReview": "השנה בסקירה של השרת ({0})",
"LabelSetEbookAsPrimary": "קבע כראשי",
- "LabelSetEbookAsSupplementary": "קבע כמשלים",
+ "LabelSetEbookAsSupplementary": "קבע כספר אלקטרוני נלווה",
"LabelSettingsAudiobooksOnly": "רק ספרי קול",
"LabelSettingsAudiobooksOnlyHelp": "הפעלת ההגדרה הזו תתעלם מקבצי ספרים אלקטרוניים אלא אם כן הם נמצאים בתיקיית ספרי קול, שבמקרה זה יקבעו כספרים אלקטרוניים נלווים",
"LabelSettingsBookshelfViewHelp": "עיצוב סקאומורפי עם מדפי עץ",
@@ -569,7 +500,7 @@
"LabelShowAll": "הצג הכל",
"LabelSize": "גודל",
"LabelSleepTimer": "טיימר שינה",
- "LabelStart": "התחל",
+ "LabelStart": "התחלה",
"LabelStartTime": "זמן התחלה",
"LabelStarted": "התחיל",
"LabelStartedAt": "התחיל ב",
@@ -645,8 +576,8 @@
"LabelViewQueue": "הצג תור נגן",
"LabelVolume": "עוצמת קול",
"LabelWeekdaysToRun": "ימי השבוע להרצה",
- "LabelYearReviewHide": "הסתר סקירת שנה",
- "LabelYearReviewShow": "הצג סקירת שנה",
+ "LabelYearReviewHide": "הסתר שנת סקירה",
+ "LabelYearReviewShow": "הצג שנת סקירה",
"LabelYourAudiobookDuration": "משך הספר הקולי שלך",
"LabelYourBookmarks": "הסימניות שלך",
"LabelYourPlaylists": "הפלייליסטים שלך",
@@ -697,8 +628,8 @@
"MessageDownloadingEpisode": "מוריד פרק",
"MessageDragFilesIntoTrackOrder": "גרור קבצים לסדר ההשמעה נכון",
"MessageEmbedFinished": "ההטמעה הושלמה!",
- "MessageEpisodesQueuedForDownload": "{0} פרק/ים בתור להורדה",
- "MessageFeedURLWillBe": "כתובת ה- URL של הערוץ תהיה {0}",
+ "MessageEpisodesQueuedForDownload": "{0} פרקים בתור להורדה",
+ "MessageFeedURLWillBe": "כתובת URL של העדכון תהיה {0}",
"MessageFetching": "מושך...",
"MessageForceReScanDescription": "תבוצע סריקה מחדש כמו סריקה חדש מאפס, תגי ID3 של קבצי קול, קבצי OPF, וקבצי טקסט ייסרקו כחדשים.",
"MessageImportantNotice": "הודעה חשובה!",
@@ -713,7 +644,7 @@
"MessageMapChapterTitles": "מפה שמות פרקים לפרקי הספר השמורים שלך ללא שינוי תגי זמן",
"MessageMarkAllEpisodesFinished": "סמן את כל הפרקים כהסתיימו",
"MessageMarkAllEpisodesNotFinished": "סמן את כל הפרקים כלא הסתיימו",
- "MessageMarkAsFinished": "סמן כהושלם",
+ "MessageMarkAsFinished": "סמן כהסתיים",
"MessageMarkAsNotFinished": "סמן כלא הסתיים",
"MessageMatchBooksDescription": "ינסה להתאים ספרים בספריית הספרים שלך עם ספר מספק החיפוש הנבחר וימלא פרטים ריקים ותמונות כריכה. לא יחליף פרטים קיימים.",
"MessageNoAudioTracks": "אין רצועות שמע",
@@ -743,7 +674,7 @@
"MessageNoSeries": "אין סדרות",
"MessageNoTags": "אין תגיות",
"MessageNoTasksRunning": "אין משימות פעילות",
- "MessageNoUpdatesWereNecessary": "לא נדרש עדכון",
+ "MessageNoUpdatesWereNecessary": "לא היה צורך בעדכונים",
"MessageNoUserPlaylists": "אין לך רשימות השמעה",
"MessageNotYetImplemented": "עדיין לא מיושם",
"MessageOr": "או",
@@ -751,7 +682,6 @@
"MessagePlayChapter": "הקשב לתחילת הפרק",
"MessagePlaylistCreateFromCollection": "צור רשימת השמעה מאוסף",
"MessagePodcastHasNoRSSFeedForMatching": "לפודקאסט אין כתובת URL של ערוץ RSS להתאמה",
- "MessagePodcastSearchField": "הזן מונח חיפוש או כתובת URL של ערוץ RSS",
"MessageQuickMatchDescription": "ממלא פרטים ריקים וכריכות עם התוצאה הראשונה מ '{0}'. לא ימחק פרטים אלא אם הגדרת השרת 'העדף מטה-נתונים מותאמים' מופעלת.",
"MessageRemoveChapter": "הסר פרק",
"MessageRemoveEpisodes": "הסר {0} פרקים",
@@ -778,7 +708,7 @@
"NoteChangeRootPassword": "המשתמש root הוא המשתמש היחיד שיכולה להיות לו סיסמה ריקה",
"NoteChapterEditorTimes": "הערה: זמן ההתחלה של הפרק הראשון חייב להישאר 0:00 וזמן ההתחלה של הפרק האחרון לא יכול לחרוג מהזמן של ספר השמע.",
"NoteFolderPicker": "הערה: תיקיות שכבר מופו לא יוצגו",
- "NoteRSSFeedPodcastAppsHttps": "אזהרה: רוב אפליקציות הפודקאסטים ידרשו שכתובת האתר של ערוץ ה-RSS תשתמש ב-HTTPS",
+ "NoteRSSFeedPodcastAppsHttps": "אזהרה: רוב יישומי הפודקאסט דורשים שכתובת ה-URL ערוץ ה-RSS תשתמש ב-HTTPS",
"NoteRSSFeedPodcastAppsPubDate": "אזהרה: פרק אחד או יותר לא מכילים תאריך פרסום. חלק מיישומי הפודקאסט דורשים זאת.",
"NoteUploaderFoldersWithMediaFiles": "תיקיות עם קבצי מדיה יעובדו כפריטי ספריה נפרדים.",
"NoteUploaderOnlyAudioFiles": "אם מועלים רק קבצי שמע, כל קובץ שמע יעובד כספר שמע נפרד.",
@@ -811,7 +741,7 @@
"ToastCollectionUpdateSuccess": "האוסף עודכן בהצלחה",
"ToastItemCoverUpdateSuccess": "כריכת הפריט עודכנה בהצלחה",
"ToastItemDetailsUpdateSuccess": "פרטי הפריט עודכנו בהצלחה",
- "ToastItemMarkedAsFinishedFailed": "סימון כפריט שהושלם נכשל",
+ "ToastItemMarkedAsFinishedFailed": "סימון כפריט כהושלם נכשל",
"ToastItemMarkedAsFinishedSuccess": "הפריט סומן כהושלם בהצלחה",
"ToastItemMarkedAsNotFinishedFailed": "סימון כפריט שלא הושלם נכשל",
"ToastItemMarkedAsNotFinishedSuccess": "הפריט סומן כלא הושלם בהצלחה",
diff --git a/client/strings/hr.json b/client/strings/hr.json
index 267d8a67..7e4e82c4 100644
--- a/client/strings/hr.json
+++ b/client/strings/hr.json
@@ -856,7 +856,6 @@
"MessageScheduleRunEveryWeekdayAtTime": "Pokreni svaki {0} u {1}",
"MessageSearchResultsFor": "Rezultati pretrage za",
"MessageSelected": "{0} odabrano",
- "MessageSeriesSequenceCannotContainSpaces": "Slijed serijala ne može sadržavati praznine",
"MessageServerCouldNotBeReached": "Nije moguće pristupiti poslužitelju",
"MessageSetChaptersFromTracksDescription": "Postavi poglavlja koristeći se zvučnom datotekom kao poglavljem i nazivom datoteke kao naslovom poglavlja",
"MessageShareExpirationWillBe": "Vrijeme isteka će biti {0}",
@@ -918,8 +917,6 @@
"NotificationOnBackupCompletedDescription": "Pokreće se po završetku sigurnosnog kopiranja",
"NotificationOnBackupFailedDescription": "Pokreće se kada sigurnosno kopiranje ne uspije",
"NotificationOnEpisodeDownloadedDescription": "Pokreće se kada se nastavak podcasta automatski preuzme",
- "NotificationOnRSSFeedDisabledDescription": "Pokreće se kada su automatska preuzimanja nastavaka onemogućena zbog previše neuspjelih pokušaja",
- "NotificationOnRSSFeedFailedDescription": "Pokreće se u slučaju pogreške pri pokušaju automatskog preuzimanja nastavka s RSS izvora",
"NotificationOnTestDescription": "Događaj za testiranje sustava obavijesti",
"PlaceholderNewCollection": "Ime nove zbirke",
"PlaceholderNewFolderPath": "Nova putanja mape",
diff --git a/client/strings/hu.json b/client/strings/hu.json
index cb7bf070..16772328 100644
--- a/client/strings/hu.json
+++ b/client/strings/hu.json
@@ -11,7 +11,7 @@
"ButtonAuthors": "Szerzők",
"ButtonBack": "Vissza",
"ButtonBatchEditPopulateFromExisting": "Létezőből feltöltés",
- "ButtonBatchEditPopulateMapDetails": "A térkép részleteinek feltöltése",
+ "ButtonBatchEditPopulateMapDetails": "",
"ButtonBrowseForFolder": "Mappa keresése",
"ButtonCancel": "Mégse",
"ButtonCancelEncode": "Kódolás megszakítása",
@@ -177,7 +177,6 @@
"HeaderPlaylist": "Lejátszási lista",
"HeaderPlaylistItems": "Lejátszási lista elemek",
"HeaderPodcastsToAdd": "Hozzáadandó podcastok",
- "HeaderPresets": "Alapbeállítások",
"HeaderPreviewCover": "Borító előnézete",
"HeaderRSSFeedGeneral": "RSS részletek",
"HeaderRSSFeedIsOpen": "RSS hírcsatorna nyitva van",
@@ -220,7 +219,6 @@
"LabelAccountTypeAdmin": "Adminisztrátor",
"LabelAccountTypeGuest": "Vendég",
"LabelAccountTypeUser": "Felhasználó",
- "LabelActivities": "Tevékenységek",
"LabelActivity": "Tevékenység",
"LabelAddToCollection": "Hozzáadás a gyűjteményhez",
"LabelAddToCollectionBatch": "{0} könyv hozzáadása a gyűjteményhez",
@@ -230,7 +228,6 @@
"LabelAddedDate": "{0} Hozzáadva",
"LabelAdminUsersOnly": "Csak admin felhasználók",
"LabelAll": "Összes",
- "LabelAllEpisodesDownloaded": "Minden epizód letöltve",
"LabelAllUsers": "Minden felhasználó",
"LabelAllUsersExcludingGuests": "Minden felhasználó, vendégek kivételével",
"LabelAllUsersIncludingGuests": "Minden felhasználó, beleértve a vendégeket is",
@@ -254,7 +251,7 @@
"LabelBackToUser": "Vissza a felhasználóhoz",
"LabelBackupAudioFiles": "Audiófájlok biztonsági mentése",
"LabelBackupLocation": "Biztonsági másolat helye",
- "LabelBackupsEnableAutomaticBackups": "Automatikus biztonsági másolatok",
+ "LabelBackupsEnableAutomaticBackups": "Automatikus biztonsági másolatok engedélyezése",
"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)",
"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.",
@@ -286,7 +283,6 @@
"LabelContinueSeries": "Sorozat folytatása",
"LabelCover": "Borító",
"LabelCoverImageURL": "Borítókép URL",
- "LabelCoverProvider": "Borító Szolgáltató",
"LabelCreatedAt": "Létrehozás ideje",
"LabelCronExpression": "Cron kifejezés",
"LabelCurrent": "Jelenlegi",
@@ -395,8 +391,7 @@
"LabelIntervalEvery6Hours": "Minden 6 órában",
"LabelIntervalEveryDay": "Minden nap",
"LabelIntervalEveryHour": "Minden órában",
- "LabelIntervalEveryMinute": "Minden percben",
- "LabelInvert": "Inverz",
+ "LabelInvert": "Megfordítás",
"LabelItem": "Elem",
"LabelJumpBackwardAmount": "Visszafelé ugrás mennyisége",
"LabelJumpForwardAmount": "Előre ugrás mennyisége",
@@ -491,7 +486,6 @@
"LabelPersonalYearReview": "Az éved összefoglalása ({0})",
"LabelPhotoPathURL": "Fénykép útvonal/URL",
"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",
"LabelPlaylists": "Lejátszási listák",
"LabelPodcast": "Podcast",
@@ -514,7 +508,7 @@
"LabelPublishers": "Kiadók",
"LabelRSSFeedCustomOwnerEmail": "Egyéni tulajdonos e-mail",
"LabelRSSFeedCustomOwnerName": "Egyéni tulajdonos neve",
- "LabelRSSFeedOpen": "RSS-hírcsatorna nyitva",
+ "LabelRSSFeedOpen": "RSS hírcsatorna nyitva",
"LabelRSSFeedPreventIndexing": "Indexelés megakadályozása",
"LabelRSSFeedSlug": "RSS hírcsatorna slug",
"LabelRSSFeedURL": "RSS hírcsatorna URL",
@@ -531,7 +525,6 @@
"LabelReleaseDate": "Megjelenés dátuma",
"LabelRemoveAllMetadataAbs": "Az összes metadata.abs 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",
"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.",
@@ -561,8 +554,6 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorfikus dizájn fa polcokkal",
"LabelSettingsChromecastSupport": "Chromecast támogatás",
"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",
"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.",
@@ -606,7 +597,6 @@
"LabelSlug": "Rövid cím",
"LabelSortAscending": "Emelkedő",
"LabelSortDescending": "Csökkenő",
- "LabelSortPubDate": "Rendezés megjelenés dátuma szerint",
"LabelStart": "Kezdés",
"LabelStartTime": "Kezdési idő",
"LabelStarted": "Elkezdődött",
@@ -707,17 +697,12 @@
"LabelYourProgress": "Haladásod",
"MessageAddToPlayerQueue": "Hozzáadás a lejátszó sorhoz",
"MessageAppriseDescription": "Ennek a funkció használatához futtatnia kell egy Apprise API példányt vagy egy olyan API-t, amely kezeli ezeket a kéréseket. http://192.168.1.1:8337
címen szolgáltatva, akkor http://192.168.1.1:8337/notify
é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 /metadata/items
és /metadata/authors
mappákban vannak tárolva. A biztonsági másolatok nem 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",
"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",
- "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.",
"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",
"MessageBookshelfNoResultsForFilter": "Nincs eredmény a \"{0}: {1}\" szűrőre",
"MessageBookshelfNoResultsForQuery": "Nincs eredmény a lekérdezéshez",
@@ -727,7 +712,6 @@
"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",
"MessageChapterStartIsAfter": "A fejezet kezdete a hangoskönyv végét követi",
- "MessageChaptersNotFound": "Fejezetek nem találhatók",
"MessageCheckingCron": "Cron ellenőrzése...",
"MessageConfirmCloseFeed": "Biztosan be szeretné zárni ezt a hírcsatornát?",
"MessageConfirmDeleteBackup": "Biztosan törölni szeretné a(z) {0} biztonsági másolatot?",
@@ -784,7 +768,6 @@
"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!",
"MessageInsertChapterBelow": "Fejezet beszúrása alulra",
- "MessageInvalidAsin": "Érvénytelen ASIN",
"MessageItemsSelected": "{0} kiválasztott elem",
"MessageItemsUpdated": "{0} frissített elem",
"MessageJoinUsOn": "Csatlakozzon hozzánk a",
@@ -830,7 +813,6 @@
"MessageNoTasksRunning": "Nincsenek futó feladatok",
"MessageNoUpdatesWereNecessary": "Nem volt szükség frissítésekre",
"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",
"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",
@@ -853,10 +835,8 @@
"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.http://192.168.1.1:8337
Allora dovrai mettere http://192.168.1.1:8337/notify
.",
"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 /metadata/items
& /metadata/authors
. 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",
"MessageBackupsLocationNoEditNote": "Nota: la posizione del backup viene impostata tramite una variabile di ambiente e non può essere modificata qui.",
@@ -856,7 +855,6 @@
"MessageScheduleRunEveryWeekdayAtTime": "Esegui ogni {0} alle {1}",
"MessageSearchResultsFor": "cerca risultati per",
"MessageSelected": "{0} selezionati",
- "MessageSeriesSequenceCannotContainSpaces": "La sequenza della serie non può contenere spazi",
"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",
"MessageShareExpirationWillBe": "Scadrà tra {0}",
@@ -918,8 +916,6 @@
"NotificationOnBackupCompletedDescription": "Attivato al completamento di un backup",
"NotificationOnBackupFailedDescription": "Attivato quando un backup fallisce",
"NotificationOnEpisodeDownloadedDescription": "Attivato quando un episodio di podcast viene scaricato automaticamente",
- "NotificationOnRSSFeedDisabledDescription": "Attivato quando i download automatici degli episodi vengono disabilitati a causa di troppi tentativi falliti",
- "NotificationOnRSSFeedFailedDescription": "Attivato quando la richiesta del feed RSS per il download automatico di un episodio fallisce",
"NotificationOnTestDescription": "test il sistema di notifica",
"PlaceholderNewCollection": "Nome Nuova Raccolta",
"PlaceholderNewFolderPath": "Nuovo Percorso Cartella",
diff --git a/client/strings/nl.json b/client/strings/nl.json
index c20efa12..955ba86b 100644
--- a/client/strings/nl.json
+++ b/client/strings/nl.json
@@ -177,7 +177,6 @@
"HeaderPlaylist": "Afspeellijst",
"HeaderPlaylistItems": "Onderdelen in afspeellijst",
"HeaderPodcastsToAdd": "Toe te voegen podcasts",
- "HeaderPresets": "Voorinstellingen",
"HeaderPreviewCover": "Preview cover",
"HeaderRSSFeedGeneral": "RSS-details",
"HeaderRSSFeedIsOpen": "RSS-feed is open",
@@ -395,7 +394,6 @@
"LabelIntervalEvery6Hours": "Iedere 6 uur",
"LabelIntervalEveryDay": "Iedere dag",
"LabelIntervalEveryHour": "Ieder uur",
- "LabelIntervalEveryMinute": "Elke minuut",
"LabelInvert": "Omdraaien",
"LabelItem": "Onderdeel",
"LabelJumpBackwardAmount": "Terugspoelen hoeveelheid",
@@ -426,7 +424,7 @@
"LabelLookForNewEpisodesAfterDate": "Zoek naar nieuwe afleveringen na deze datum",
"LabelLowestPriority": "Laagste Prioriteit",
"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.",
"LabelMaxEpisodesToDownloadPerCheck": "Maximale # nieuwe afleveringen om te downloaden per check",
"LabelMaxEpisodesToKeep": "Maximale # afleveringen om te houden",
@@ -514,7 +512,7 @@
"LabelPublishers": "Uitgevers",
"LabelRSSFeedCustomOwnerEmail": "Aangepast e-mailadres eigenaar",
"LabelRSSFeedCustomOwnerName": "Aangepaste naam eigenaar",
- "LabelRSSFeedOpen": "RSS Feed Open",
+ "LabelRSSFeedOpen": "RSS-feed open",
"LabelRSSFeedPreventIndexing": "Voorkom indexering",
"LabelRSSFeedSlug": "RSS-feed slug",
"LabelRSSFeedURL": "RSS-feed URL",
@@ -531,7 +529,6 @@
"LabelReleaseDate": "Verschijningsdatum",
"LabelRemoveAllMetadataAbs": "Verwijder alle metadata.abs bestanden",
"LabelRemoveAllMetadataJson": "Verwijder alle metadata.json bestanden",
- "LabelRemoveAudibleBranding": "Verwijder Audible intro en outro uit hoofdstukken",
"LabelRemoveCover": "Verwijder cover",
"LabelRemoveMetadataFile": "Verwijder metadata bestanden in bibliotheek item folders",
"LabelRemoveMetadataFileHelp": "Verwijder alle metadata.json en metadata.abs bestanden in uw {0} folders.",
@@ -561,8 +558,6 @@
"LabelSettingsBookshelfViewHelp": "Skeumorphisch design met houten planken",
"LabelSettingsChromecastSupport": "Chromecast ondersteuning",
"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",
"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.",
@@ -606,7 +601,6 @@
"LabelSlug": "Slak",
"LabelSortAscending": "Oplopend",
"LabelSortDescending": "Aflopend",
- "LabelSortPubDate": "Sorteer Pub Datum",
"LabelStart": "Start",
"LabelStartTime": "Starttijd",
"LabelStarted": "Gestart",
@@ -707,8 +701,6 @@
"LabelYourProgress": "Je voortgang",
"MessageAddToPlayerQueue": "Toevoegen aan wachtrij",
"MessageAppriseDescription": "Om deze functie te gebruiken heb je een draaiende instantie van Apprise API nodig of een api die dezelfde requests afhandelt. http://192.168.1.1:8337
dan zou je http://192.168.1.1:8337/notify
gebruiken.",
- "MessageAsinCheck": "Zorg ervoor dat u de ASIN van de juiste Audible-regio gebruikt, niet die van Amazon.",
- "MessageAuthenticationOIDCChangesRestart": "Start uw server opnieuw op nadat u het opslaan hebt uitgevoerd, om de OIDC-wijzigingen toe te passen.",
"MessageBackupsDescription": "Back-ups omvatten gebruikers, gebruikers' voortgang, bibliotheekonderdeeldetails, serverinstellingen en afbeeldingen bewaard in /metadata/items
& /metadata/authors
. Back-ups bevatten niet de bestanden bewaard in je bibliotheekmappen.",
"MessageBackupsLocationEditNote": "Let op: het bijwerken van de back-uplocatie zal bestaande back-ups niet verplaatsen of wijzigen",
"MessageBackupsLocationNoEditNote": "Let op: De back-uplocatie wordt ingesteld via een omgevingsvariabele en kan hier niet worden gewijzigd.",
@@ -727,7 +719,6 @@
"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",
"MessageChapterStartIsAfter": "Start van hoofdstuk is na het einde van je audioboek",
- "MessageChaptersNotFound": "Hoofdstukken niet gevonden",
"MessageCheckingCron": "Cron aan het checken...",
"MessageConfirmCloseFeed": "Ben je zeker dat je deze feed wil sluiten?",
"MessageConfirmDeleteBackup": "Weet je zeker dat je de backup voor {0} wil verwijderen?",
@@ -784,9 +775,8 @@
"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!",
"MessageInsertChapterBelow": "Hoofdstuk hieronder invoegen",
- "MessageInvalidAsin": "Ongeldige ASIN",
- "MessageItemsSelected": "{0} items geselecteerd",
- "MessageItemsUpdated": "{0} items bijgewerkt",
+ "MessageItemsSelected": "{0} onderdelen geselecteerd",
+ "MessageItemsUpdated": "{0} onderdelen bijgewerkt",
"MessageJoinUsOn": "Doe mee op",
"MessageLoading": "Aan het laden...",
"MessageLoadingFolders": "Mappen aan het laden...",
@@ -818,7 +808,7 @@
"MessageNoItems": "Geen onderdelen",
"MessageNoItemsFound": "Geen onderdelen gevonden",
"MessageNoListeningSessions": "Geen luistersessies",
- "MessageNoLogs": "Geen logbestanden",
+ "MessageNoLogs": "Geen logs",
"MessageNoMediaProgress": "Geen mediavoortgang",
"MessageNoNotifications": "Geen notificaties",
"MessageNoPodcastFeed": "Ongeldige podcast: Geen Feed",
@@ -853,10 +843,8 @@
"MessageRestoreBackupConfirm": "Weet je zeker dat je wil herstellen met behulp van de back-up gemaakt op",
"MessageRestoreBackupWarning": "Herstellen met een back-up zal de volledige database in /config en de covers in /metadata/items & /metadata/authors overschrijven.false
. 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.",
"LabelOpenRSSFeed": "Åpne RSS Feed",
"LabelOverwrite": "Overskriv",
@@ -527,7 +521,6 @@
"LabelReleaseDate": "Utgivelsesdato",
"LabelRemoveAllMetadataAbs": "Fjern alle metadata.abs filer",
"LabelRemoveAllMetadataJson": "Fjern alle metadata.json filer",
- "LabelRemoveAudibleBranding": "Fjern Audible inn- og utledning fra kapitler",
"LabelRemoveCover": "Fjern omslag",
"LabelRemoveMetadataFile": "Fjern metadata-filer fra biblioteks-mapper",
"LabelRemoveMetadataFileHelp": "Fjern alle metadata.json og metadata.abs i alle {0} mappene.",
@@ -557,8 +550,6 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorf design med hyller av ved",
"LabelSettingsChromecastSupport": "Chromecast støtte",
"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*",
"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.",
@@ -602,7 +593,6 @@
"LabelSlug": "Slug",
"LabelSortAscending": "Stigende",
"LabelSortDescending": "Synkende",
- "LabelSortPubDate": "Sorter etter publiseringsdato",
"LabelStart": "Start",
"LabelStartTime": "Start Tid",
"LabelStarted": "Startet",
@@ -703,8 +693,6 @@
"LabelYourProgress": "Din fremgang",
"MessageAddToPlayerQueue": "Legg til i kø",
"MessageAppriseDescription": "For å bruke denne funksjonen trenger du en instans av Apprise API kjørende eller et API som håndterer disse forespørslene. http://192.168.1.1:8337
så skal du bruke http://192.168.1.1:8337/notify
.",
- "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 /metadata/items
og /metadata/authors
. Sikkerhetskopier vil ikke inkludere filer som er lagret i bibliotek mappene.",
"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.",
diff --git a/client/strings/pl.json b/client/strings/pl.json
index 7248ae96..026d7c49 100644
--- a/client/strings/pl.json
+++ b/client/strings/pl.json
@@ -177,7 +177,6 @@
"HeaderPlaylist": "Playlista",
"HeaderPlaylistItems": "Pozycje listy odtwarzania",
"HeaderPodcastsToAdd": "Podcasty do dodania",
- "HeaderPresets": "Ustawienia wstępne",
"HeaderPreviewCover": "Podgląd okładki",
"HeaderRSSFeedGeneral": "Szczegóły RSS",
"HeaderRSSFeedIsOpen": "Kanał RSS jest otwarty",
@@ -220,7 +219,6 @@
"LabelAccountTypeAdmin": "Administrator",
"LabelAccountTypeGuest": "Gość",
"LabelAccountTypeUser": "Użytkownik",
- "LabelActivities": "Aktywności",
"LabelActivity": "Aktywność",
"LabelAddToCollection": "Dodaj do kolekcji",
"LabelAddToCollectionBatch": "Dodaj {0} książki do kolekcji",
@@ -230,7 +228,6 @@
"LabelAddedDate": "Dodano {0}",
"LabelAdminUsersOnly": "Tylko użytkownicy administracyjni",
"LabelAll": "Wszystkie",
- "LabelAllEpisodesDownloaded": "Wszystkie odcinki pobrane",
"LabelAllUsers": "Wszyscy użytkownicy",
"LabelAllUsersExcludingGuests": "Wszyscy użytkownicy z wyłączeniem gości",
"LabelAllUsersIncludingGuests": "Wszyscy użytkownicy, łącznie z gośćmi",
@@ -248,7 +245,6 @@
"LabelAutoFetchMetadata": "Automatycznie pobierz metadane",
"LabelAutoFetchMetadataHelp": "Pobiera metadane dotyczące tytułu, autora i serii, aby usprawnić przesyłanie. Po przesłaniu może być konieczne dopasowanie dodatkowych metadanych.",
"LabelAutoLaunch": "Uruchom automatycznie",
- "LabelAutoLaunchDescription": "Automatyczne przekierowanie do dostawcy uwierzytelniania podczas przechodzenia na stronę logowania (ręczna zamiana ścieżki /login?autoLaunch=0
)",
"LabelAutoRegister": "Automatyczna rejestracja",
"LabelAutoRegisterDescription": "Automatycznie utwórz nowych użytkowników po zalogowaniu",
"LabelBackToUser": "Powrót",
@@ -286,7 +282,6 @@
"LabelContinueSeries": "Kontynuuj serię",
"LabelCover": "Okładka",
"LabelCoverImageURL": "URL okładki",
- "LabelCoverProvider": "Dostawca okładki",
"LabelCreatedAt": "Utworzone",
"LabelCronExpression": "Wyrażenie CRON",
"LabelCurrent": "Aktualny",
@@ -329,9 +324,7 @@
"LabelEpisode": "Odcinek",
"LabelEpisodeTitle": "Tytuł odcinka",
"LabelEpisodeType": "Typ odcinka",
- "LabelEpisodeUrlFromRssFeed": "Adres URL odcinka z kanału RSS",
"LabelEpisodes": "Epizody",
- "LabelEpisodic": "Epizodyczny",
"LabelExample": "Przykład",
"LabelExpandSeries": "Rozwiń serie",
"LabelExpandSubSeries": "Rozwiń podserie",
@@ -359,7 +352,6 @@
"LabelFontScale": "Rozmiar czcionki",
"LabelFontStrikethrough": "Przekreślony",
"LabelFormat": "Format",
- "LabelFull": "Pełny",
"LabelGenre": "Gatunek",
"LabelGenres": "Gatunki",
"LabelHardDeleteFile": "Usuń trwale plik",
@@ -384,7 +376,6 @@
"LabelIntervalEvery6Hours": "Co 6 godzin",
"LabelIntervalEveryDay": "Każdego dnia",
"LabelIntervalEveryHour": "Każdej godziny",
- "LabelIntervalEveryMinute": "Co minutę",
"LabelInvert": "Inversja",
"LabelItem": "Pozycja",
"LabelJumpBackwardAmount": "Przeskocz do tyłu o:",
@@ -416,9 +407,6 @@
"LabelLowestPriority": "Najniższy priorytet",
"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",
- "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",
"LabelMediaType": "Typ mediów",
"LabelMetaTag": "Tag",
@@ -431,7 +419,6 @@
"LabelMissingEbook": "Nie posiada ebooka",
"LabelMissingSupplementaryEbook": "Nie posiada dodatkowego ebooka",
"LabelMobileRedirectURIs": "Dozwolone URI przekierowań mobilnych",
- "LabelMobileRedirectURIsDescription": "To jest biała lista prawidłowych adresów URI przekierowań dla aplikacji mobilnych. Domyślny adres to audiobookshelf://oauth
, który można usunąć lub dodać inne adresy URI w celu integracji z aplikacjami innych firm. Użycie gwiazdki (*
) jako jedynego wpisu zezwala na dowolny URI.",
"LabelMore": "Więcej",
"LabelMoreInfo": "Więcej informacji",
"LabelName": "Nazwa",
@@ -461,14 +448,12 @@
"LabelNumberOfEpisodes": "# Odcinków",
"LabelOpenRSSFeed": "Otwórz kanał RSS",
"LabelOverwrite": "Nadpisz",
- "LabelPaginationPageXOfY": "Strona {0} z {1}",
"LabelPassword": "Hasło",
"LabelPath": "Ścieżka",
"LabelPermanent": "Stałe",
"LabelPermissionsAccessAllLibraries": "Ma dostęp do wszystkich bibliotek",
"LabelPermissionsAccessAllTags": "Ma dostęp do wszystkich tagów",
"LabelPermissionsAccessExplicitContent": "Ma dostęp do treści oznacznych jako nieprzyzwoite",
- "LabelPermissionsCreateEreader": "Możliwość stworzenia czytnika e-booków",
"LabelPermissionsDelete": "Ma możliwość usuwania",
"LabelPermissionsDownload": "Ma możliwość pobierania",
"LabelPermissionsUpdate": "Ma możliwość aktualizowania",
@@ -476,25 +461,19 @@
"LabelPersonalYearReview": "Podsumowanie twojego roku ({0})",
"LabelPhotoPathURL": "Scieżka/URL do zdjęcia",
"LabelPlayMethod": "Metoda odtwarzania",
- "LabelPlayerChapterNumberMarker": "{0} z {1}",
"LabelPlaylists": "Listy odtwarzania",
- "LabelPodcast": "Podcast",
"LabelPodcastSearchRegion": "Obszar wyszukiwania podcastów",
- "LabelPodcastType": "Typ podcastu",
"LabelPodcasts": "Podcasty",
- "LabelPort": "Port",
"LabelPrefixesToIgnore": "Ignorowane prefiksy (wielkość liter nie ma znaczenia)",
"LabelPreventIndexing": "Zapobiega indeksowaniu przez iTunes i Google",
"LabelPrimaryEbook": "Główny ebook",
"LabelProgress": "Postęp",
"LabelProvider": "Dostawca",
- "LabelProviderAuthorizationValue": "Wartość nagłówka autoryzacji",
"LabelPubDate": "Data publikacji",
"LabelPublishYear": "Rok publikacji",
- "LabelPublishedDate": "Opublikowano {0}",
"LabelPublisher": "Wydawca",
"LabelPublishers": "Wydawcy",
- "LabelRSSFeedOpen": "Otwarty Kanał RSS",
+ "LabelRSSFeedOpen": "RSS Feed otwarty",
"LabelRSSFeedPreventIndexing": "Zapobiegaj indeksowaniu",
"LabelRSSFeedURL": "URL kanały RSS",
"LabelRandomly": "Losowo",
@@ -506,22 +485,15 @@
"LabelRecentlyAdded": "Niedawno dodane",
"LabelRecommended": "Polecane",
"LabelRedo": "Wycofaj",
- "LabelRegion": "Region",
"LabelReleaseDate": "Data wydania",
- "LabelRemoveAllMetadataAbs": "Usuń wszystkie pliki metadata.abs",
- "LabelRemoveAllMetadataJson": "Usuń wszystkie pliki metadata.json",
"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ę",
"LabelSearchTerm": "Wyszukiwanie frazy",
"LabelSearchTitle": "Wyszukaj tytuł",
"LabelSearchTitleOrASIN": "Szukaj tytuł lub ASIN",
"LabelSeason": "Sezon",
- "LabelSeasonNumber": "Sezon #{0}",
"LabelSelectAll": "Wybierz wszystko",
"LabelSelectAllEpisodes": "Wybierz wszystkie odcinki",
- "LabelSelectEpisodesShowing": "Wybierz {0} wyświetlanych odcinków",
"LabelSelectUsers": "Wybór użytkowników",
"LabelSendEbookToDevice": "Wyślij ebook do...",
"LabelSequence": "Kolejność",
@@ -536,8 +508,6 @@
"LabelSettingsBookshelfViewHelp": "Widok półki z książkami",
"LabelSettingsChromecastSupport": "Wsparcie Chromecast",
"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",
"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.",
@@ -549,8 +519,6 @@
"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",
"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",
"LabelSettingsParseSubtitlesHelp": "Opcja pozwala na pobranie podtytułu z nazwy folderu z audiobookiem. http://192.168.1.1:8337
, vložte do daného poľa http://192.168.1.1:8337/notify
.",
"MessageAsinCheck": "Uistite sa, že používate ASIN zo správneho regiónu Audible, nie Amazonu.",
- "MessageAuthenticationOIDCChangesRestart": "Reštartujte svoj server po uložení, aby mohli byť použité zmeny OIDC.",
"MessageBackupsDescription": "Zálohy pokrývajú používateľov, ich aktuálne stavy počúvania, detaily položiek knižnice, nastavenia servera a obrázky uložené v /metadata/items
a /metadata/authors
. Zálohy neobsahujú súbory v priečinkoch vašich knižníc.",
"MessageBackupsLocationEditNote": "Poznámka: Zmena umiestnenia záloh nepresunie ani nezmení existujúce zálohy",
"MessageBackupsLocationNoEditNote": "Poznámka: Umietnenie záloh je nastavené prostredníctvom premennej prostredia a nie je ho možné zmeniť z tohto miesta.",
@@ -788,7 +786,7 @@
"MessageItemsSelected": "{0} vybraných položiek",
"MessageItemsUpdated": "{0} aktualizovaných položiek",
"MessageJoinUsOn": "Pridajte sa k nám",
- "MessageLoading": "Načítavam...",
+ "MessageLoading": "Načítanie...",
"MessageLoadingFolders": "Načítanie priečinkov...",
"MessageLogsDescription": "Záznamy logovania sú uložené v /metadata/logs
vo forme JSON súborov. Záznamy kritických chýb sú uložené v /metadata/logs/crash_logs.txt
.",
"MessageM4BFailed": "M4B zlyhalo!",
@@ -828,7 +826,7 @@
"MessageNoSeries": "Žiadne série",
"MessageNoTags": "Žiadne štítky",
"MessageNoTasksRunning": "Žiadne prebiehajúce úlohy",
- "MessageNoUpdatesWereNecessary": "Neboli potrebné žiadne aktualizácie",
+ "MessageNoUpdatesWereNecessary": "Žiadne nutné aktualizácie",
"MessageNoUserPlaylists": "Nemáte žiadny playlist",
"MessageNoUserPlaylistsHelp": "Playlisty sú súkromné. Každý playlist môže vidieť iba používateľ, ktorý ho vytvoril.",
"MessageNotYetImplemented": "Ešte neimplementované",
@@ -856,7 +854,6 @@
"MessageScheduleRunEveryWeekdayAtTime": "Spustiť každú {0} o {1}",
"MessageSearchResultsFor": "Výsledky vyhľadávania pre",
"MessageSelected": "{0} vybrané",
- "MessageSeriesSequenceCannotContainSpaces": "Poradie série nemôže obsahovať medzery",
"MessageServerCouldNotBeReached": "Nepodarilo sa pripojiť na server",
"MessageSetChaptersFromTracksDescription": "Nastaviť jednotlivé zvukové súbory ako kapitoly a názvy zvukových súborov ako názvy týchto kapitol",
"MessageShareExpirationWillBe": "Expiruje {0}",
@@ -910,8 +907,8 @@
"NoteChangeRootPassword": "Root používateľ je jediný používateľ, ktorý môže mať prázdne heslo",
"NoteChapterEditorTimes": "Poznámka: Prvá kapitola musí vždy začínať v 0:00 a začiatok poslednej kapitoly nemôže prekročiť trvanie tejto audioknihy.",
"NoteFolderPicker": "Poznámka: Priečinky, ktoré už boli priradené, sa ďalej nezobrazujú",
- "NoteRSSFeedPodcastAppsHttps": "Varovanie: Väčšina podcastových aplikácií požaduje URL RSS zdroja s HTTPS",
- "NoteRSSFeedPodcastAppsPubDate": "Varovanie: 1 alebo viac vašich epizód neobsahuje infomáciu o dátum vydania. Niektoré podcastové ju vyžadujú.",
+ "NoteRSSFeedPodcastAppsHttps": "Varovanie: Väčšina podcastových aplikácií vyžaduje, aby URL RSS zdroja vyžívala HTTPS",
+ "NoteRSSFeedPodcastAppsPubDate": "Varovanie: 1 alebo viacero vašich epizód neobsahuje infomáciu o dátume vydania. Niektoré podcastové aplikácie ju vyžadujú.",
"NoteUploaderFoldersWithMediaFiles": "Priečinky obsahujúce súbory médií budú považované za samostatné položky knižnice.",
"NoteUploaderOnlyAudioFiles": "Ak budú nahraté iba zvukové súbory, každý zvukový súbor bude považovaný za samostatnú audioknihu.",
"NoteUploaderUnsupportedFiles": "Nepodporované súbory budú ignorované. Pri výbere alebo prenesení priečinka, budú všetky súbory, ktoré nie sú v priečinku niektorej z položiek, ignorované.",
@@ -975,8 +972,6 @@
"ToastCachePurgeFailed": "Vyčistenie vyrovnávacej pamäte zlyhalo",
"ToastCachePurgeSuccess": "Vyrovnávacia pamäť vyčistená",
"ToastChaptersHaveErrors": "Kapitoly obsahujú chyby",
- "ToastChaptersInvalidShiftAmountLast": "Neplatná hodnota veľkosti posunutia. Začiatok poslednej kapitoly by ležal za koncom audioknihy.",
- "ToastChaptersInvalidShiftAmountStart": "Nesprávna hodnota posunutia. Prvá kapitola by mala nulovú alebo zápornú dĺžku a bola by nahradená nasledujúcou kapitolou. Navýšte čas začiatku druhej kapitoly.",
"ToastChaptersMustHaveTitles": "Kapitoly musia mať názvy",
"ToastChaptersRemoved": "Kapitoly boli odstránené",
"ToastChaptersUpdated": "Kapitoly boli aktualizované",
diff --git a/client/strings/sl.json b/client/strings/sl.json
index 81e80003..2794e080 100644
--- a/client/strings/sl.json
+++ b/client/strings/sl.json
@@ -514,7 +514,7 @@
"LabelPublishers": "Izdajatelji",
"LabelRSSFeedCustomOwnerEmail": "E-pošta lastnika po meri",
"LabelRSSFeedCustomOwnerName": "Ime lastnika po meri",
- "LabelRSSFeedOpen": "RSS vir je odprt",
+ "LabelRSSFeedOpen": "Odprt vir RSS",
"LabelRSSFeedPreventIndexing": "Prepreči indeksiranje",
"LabelRSSFeedSlug": "Slug RSS vira",
"LabelRSSFeedURL": "URL vira RSS",
@@ -856,7 +856,6 @@
"MessageScheduleRunEveryWeekdayAtTime": "Zaženi vsakih {0} ob {1}",
"MessageSearchResultsFor": "Rezultati iskanja za",
"MessageSelected": "{0} izbrano",
- "MessageSeriesSequenceCannotContainSpaces": "Zaporedje serij ne sme vsebovati presledkov",
"MessageServerCouldNotBeReached": "Strežnika ni bilo mogoče doseči",
"MessageSetChaptersFromTracksDescription": "Nastavi poglavja z uporabo vsake zvočne datoteke kot poglavja in naslova poglavja kot imena zvočne datoteke",
"MessageShareExpirationWillBe": "Potečeno bo {0}",
@@ -918,8 +917,6 @@
"NotificationOnBackupCompletedDescription": "Sproži se, ko je varnostno kopiranje končano",
"NotificationOnBackupFailedDescription": "Sproži se, ko varnostno kopiranje ne uspe",
"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",
"PlaceholderNewCollection": "Novo ime zbirke",
"PlaceholderNewFolderPath": "Pot nove mape",
diff --git a/client/strings/uk.json b/client/strings/uk.json
index 70cb4bb3..5b652049 100644
--- a/client/strings/uk.json
+++ b/client/strings/uk.json
@@ -3,7 +3,7 @@
"ButtonAddChapters": "Додати глави",
"ButtonAddDevice": "Додати пристрій",
"ButtonAddLibrary": "Додати бібліотеку",
- "ButtonAddPodcasts": "Додати подкасти",
+ "ButtonAddPodcasts": "Додати подкаст",
"ButtonAddUser": "Додати користувача",
"ButtonAddYourFirstLibrary": "Додайте вашу першу бібліотеку",
"ButtonApply": "Застосувати",
@@ -16,7 +16,7 @@
"ButtonCancel": "Скасувати",
"ButtonCancelEncode": "Скасувати кодування",
"ButtonChangeRootPassword": "Змінити кореневий пароль",
- "ButtonCheckAndDownloadNewEpisodes": "Перевірити та скачати нові епізоди",
+ "ButtonCheckAndDownloadNewEpisodes": "Перевірити та завантажити нові епізоди",
"ButtonChooseAFolder": "Обрати теку",
"ButtonChooseFiles": "Обрати файли",
"ButtonClearFilter": "Очистити фільтр",
@@ -32,8 +32,8 @@
"ButtonEditChapters": "Редагувати глави",
"ButtonEditPodcast": "Редагувати подкаст",
"ButtonEnable": "Увімкнути",
- "ButtonFireAndFail": "Виконати і завершити з помилкою",
- "ButtonFireOnTest": "Виконати подію onTest",
+ "ButtonFireAndFail": "Вогонь і невдача",
+ "ButtonFireOnTest": "Випробування на вогнестійкість",
"ButtonForceReScan": "Примусово сканувати",
"ButtonFullPath": "Повний шлях",
"ButtonHide": "Приховати",
@@ -57,7 +57,7 @@
"ButtonOpenFeed": "Відкрити стрічку",
"ButtonOpenManager": "Відкрити менеджер",
"ButtonPause": "Пауза",
- "ButtonPlay": "Відтворити",
+ "ButtonPlay": "Слухати",
"ButtonPlayAll": "Відтворити все",
"ButtonPlaying": "Відтворюється",
"ButtonPlaylists": "Списки відтворення",
@@ -86,7 +86,7 @@
"ButtonResetToDefault": "Скинути до стандартних",
"ButtonRestore": "Відновити",
"ButtonSave": "Зберегти",
- "ButtonSaveAndClose": "Зберегти і закрити",
+ "ButtonSaveAndClose": "Зберегти та закрити",
"ButtonSaveTracklist": "Зберегти порядок",
"ButtonScan": "Сканувати",
"ButtonScanLibrary": "Сканувати бібліотеку",
@@ -103,7 +103,7 @@
"ButtonStartMetadataEmbed": "Почати вбудування метаданих",
"ButtonStats": "Статистика",
"ButtonSubmit": "Надіслати",
- "ButtonTest": "Тест",
+ "ButtonTest": "Перевірити",
"ButtonUnlinkOpenId": "Вимкнути OpenID",
"ButtonUpload": "Завантажити",
"ButtonUploadBackup": "Завантажити резервну копію",
@@ -115,7 +115,7 @@
"ButtonYes": "Так",
"ErrorUploadFetchMetadataAPI": "Помилка при отриманні метаданих",
"ErrorUploadFetchMetadataNoResults": "Не вдалося отримати метадані — спробуйте оновити заголовок та/або автора",
- "ErrorUploadLacksTitle": "Потрібна назва",
+ "ErrorUploadLacksTitle": "Назва обов'язкова",
"HeaderAccount": "Профіль",
"HeaderAddCustomMetadataProvider": "Додати користувацький постачальник метаданих",
"HeaderAdvanced": "Розширені",
@@ -130,11 +130,11 @@
"HeaderCollection": "Добірка",
"HeaderCollectionItems": "Елементи добірки",
"HeaderCover": "Обкладинка",
- "HeaderCurrentDownloads": "Поточні скачування",
+ "HeaderCurrentDownloads": "Поточні завантаження",
"HeaderCustomMessageOnLogin": "Повідомлення при вході",
"HeaderCustomMetadataProviders": "Постачальники метаданих",
"HeaderDetails": "Подробиці",
- "HeaderDownloadQueue": "Черга скачувань",
+ "HeaderDownloadQueue": "Черга завантажень",
"HeaderEbookFiles": "Файли електронних книг",
"HeaderEmail": "Електронна пошта",
"HeaderEmailSettings": "Налаштування електронної пошти",
@@ -152,13 +152,13 @@
"HeaderLibraryFiles": "Файли бібліотеки",
"HeaderLibraryStats": "Статистика бібліотеки",
"HeaderListeningSessions": "Сеанси прослуховування",
- "HeaderListeningStats": "Статистика прослуховування",
+ "HeaderListeningStats": "Статистика відтворення",
"HeaderLogin": "Вхід",
"HeaderLogs": "Журнал",
"HeaderManageGenres": "Керувати жанрами",
"HeaderManageTags": "Керувати мітками",
"HeaderMapDetails": "Призначити подробиці",
- "HeaderMatch": "Допасуй",
+ "HeaderMatch": "Пошук",
"HeaderMetadataOrderOfPrecedence": "Порядок метаданих",
"HeaderMetadataToEmbed": "Вбудувати метадані",
"HeaderNewAccount": "Новий профіль",
@@ -176,7 +176,7 @@
"HeaderPlayerSettings": "Налаштування програвача",
"HeaderPlaylist": "Список відтворення",
"HeaderPlaylistItems": "Елементи списку відтворення",
- "HeaderPodcastsToAdd": "Подкасти для додання",
+ "HeaderPodcastsToAdd": "Додати подкасти",
"HeaderPresets": "Пресети",
"HeaderPreviewCover": "Попередній перегляд",
"HeaderRSSFeedGeneral": "Подробиці RSS",
@@ -186,7 +186,7 @@
"HeaderRemoveEpisodes": "Видалити епізодів: {0}",
"HeaderSavedMediaProgress": "Збережений прогрес медіа",
"HeaderSchedule": "Розклад",
- "HeaderScheduleEpisodeDownloads": "Запланувати автоматичне скачування епізодів",
+ "HeaderScheduleEpisodeDownloads": "Запланувати автоматичне завантаження епізодів",
"HeaderScheduleLibraryScans": "Розклад автосканування бібліотеки",
"HeaderSession": "Сеанс",
"HeaderSetBackupSchedule": "Встановити розклад резервного копіювання",
@@ -223,21 +223,21 @@
"LabelActivities": "Діяльність",
"LabelActivity": "Активність",
"LabelAddToCollection": "Додати у добірку",
- "LabelAddToCollectionBatch": "Додати {0} книг до добірки",
+ "LabelAddToCollectionBatch": "Додати книги до добірки: {0}",
"LabelAddToPlaylist": "Додати до списку відтворення",
- "LabelAddToPlaylistBatch": "Додати {0} елементів до списку відтворення",
+ "LabelAddToPlaylistBatch": "Додано елементів у список відтворення: {0}",
"LabelAddedAt": "Дата додавання",
"LabelAddedDate": "Додано {0}",
"LabelAdminUsersOnly": "Тільки для адміністраторів",
"LabelAll": "Усе",
- "LabelAllEpisodesDownloaded": "Усі епізоди скачано",
+ "LabelAllEpisodesDownloaded": "Усі серії завантажено",
"LabelAllUsers": "Усі користувачі",
"LabelAllUsersExcludingGuests": "Усі, крім гостей",
"LabelAllUsersIncludingGuests": "Усі, включно з гостями",
"LabelAlreadyInYourLibrary": "Вже у вашій бібліотеці",
"LabelApiToken": "Токен API",
"LabelAppend": "Додати",
- "LabelAudioBitrate": "Бітрейт аудіо (наприклад, 128k)",
+ "LabelAudioBitrate": "Бітрейт аудіо (напр. 128k)",
"LabelAudioChannels": "Канали аудіо (1 або 2)",
"LabelAudioCodec": "Аудіокодек",
"LabelAuthor": "Автор",
@@ -256,18 +256,18 @@
"LabelBackupLocation": "Розташування резервних копій",
"LabelBackupsEnableAutomaticBackups": "Автоматичне резервне копіювання",
"LabelBackupsEnableAutomaticBackupsHelp": "Резервні копії збережено у /metadata/backups",
- "LabelBackupsMaxBackupSize": "Максимальний розмір резервної копії (у ГБ) (0 — без обмежень)",
+ "LabelBackupsMaxBackupSize": "Максимальний розмір резервної копії (у ГБ) (0 — необмежене)",
"LabelBackupsMaxBackupSizeHelp": "У якості захисту від неправильного налаштування, резервну копію не буде збережено, якщо її розмір перевищуватиме вказаний.",
"LabelBackupsNumberToKeep": "Кількість резервних копій",
- "LabelBackupsNumberToKeepHelp": "Видаляється лише 1 резервна копія за раз, тому якщо у вас більше копій, видаліть їх вручну.",
+ "LabelBackupsNumberToKeepHelp": "Лиш 1 резервну копію буде видалено за раз, тож якщо їх багато, то вам варто видалити їх вручну.",
"LabelBitrate": "Бітрейт",
"LabelBonus": "Бонус",
- "LabelBooks": "Книг",
+ "LabelBooks": "Книги",
"LabelButtonText": "Текст кнопки",
"LabelByAuthor": "від {0}",
"LabelChangePassword": "Змінити пароль",
"LabelChannels": "Канали",
- "LabelChapterCount": "{0} глав",
+ "LabelChapterCount": "{0} Глав",
"LabelChapterTitle": "Назва глави",
"LabelChapters": "Глави",
"LabelChaptersFound": "глав знайдено",
@@ -304,9 +304,9 @@
"LabelDiscFromFilename": "Диск за назвою файлу",
"LabelDiscFromMetadata": "Диск за метаданими",
"LabelDiscover": "Огляд",
- "LabelDownload": "Скачати",
- "LabelDownloadNEpisodes": "Скачати {0} епізодів",
- "LabelDownloadable": "Можна скачати",
+ "LabelDownload": "Завантажити",
+ "LabelDownloadNEpisodes": "Завантажити епізодів: {0}",
+ "LabelDownloadable": "Можна завантажити",
"LabelDuration": "Тривалість",
"LabelDurationComparisonExactMatch": "(повний збіг)",
"LabelDurationComparisonLonger": "(на {0} довше)",
@@ -353,9 +353,9 @@
"LabelFeedURL": "Адреса стрічки",
"LabelFetchingMetadata": "Отримання метаданих",
"LabelFile": "Файл",
- "LabelFileBirthtime": "Дата створення файлу",
+ "LabelFileBirthtime": "Дата створення",
"LabelFileBornDate": "Народився {0}",
- "LabelFileModified": "Дата зміни файлу",
+ "LabelFileModified": "Дата змінення",
"LabelFileModifiedDate": "Змінено {0}",
"LabelFilename": "Ім'я файлу",
"LabelFilterByUser": "Фільтрувати за користувачем",
@@ -395,7 +395,7 @@
"LabelIntervalEvery6Hours": "Кожні 6 годин",
"LabelIntervalEveryDay": "Щодня",
"LabelIntervalEveryHour": "Щогодини",
- "LabelIntervalEveryMinute": "Щохвилини",
+ "LabelIntervalEveryMinute": "Кожну хвилину",
"LabelInvert": "Інвертувати",
"LabelItem": "Елемент",
"LabelJumpBackwardAmount": "Час переходу назад",
@@ -427,10 +427,10 @@
"LabelLowestPriority": "Найнижчий пріоритет",
"LabelMatchExistingUsersBy": "Шукати наявних користувачів за",
"LabelMatchExistingUsersByDescription": "Використовується для підключення наявних користувачів. Після підключення користувач отримає унікальний id від вашого сервісу SSO",
- "LabelMaxEpisodesToDownload": "Максимальна кількість епізодів для скачування. Використовуйте 0 для необмеженої кількості.",
- "LabelMaxEpisodesToDownloadPerCheck": "Максимальна кількість нових епізодів для скачування за перевірку",
+ "LabelMaxEpisodesToDownload": "Максимальна кількість епізодів для завантаження. Використовуйте 0 для необмеженої кількості.",
+ "LabelMaxEpisodesToDownloadPerCheck": "Максимальна кількість нових епізодів для завантаження за перевірку",
"LabelMaxEpisodesToKeep": "Максимальна кількість епізодів для зберігання",
- "LabelMaxEpisodesToKeepHelp": "Значення 0 — без обмежень. Після автоматичного завантаження нового епізоду буде видалено найстаріший, якщо їх більше X. Видаляється лише 1 епізод за одне нове завантаження.",
+ "LabelMaxEpisodesToKeepHelp": "Значення 0 не встановлює обмеження. Після автоматичного завантаження нового епізоду, буде видалено найстаріший епізод, якщо у вас більше ніж X епізодів. Видаляється лише 1 епізод за одне нове завантаження.",
"LabelMediaPlayer": "Програвач медіа",
"LabelMediaType": "Тип медіа",
"LabelMetaTag": "Метатег",
@@ -485,7 +485,7 @@
"LabelPermissionsAccessExplicitContent": "Доступ до відвертого вмісту",
"LabelPermissionsCreateEreader": "Можна створити читалку",
"LabelPermissionsDelete": "Може видаляти",
- "LabelPermissionsDownload": "Може скачувати",
+ "LabelPermissionsDownload": "Може завантажувати",
"LabelPermissionsUpdate": "Може оновлювати",
"LabelPermissionsUpload": "Може завантажувати",
"LabelPersonalYearReview": "Ваші підсумки року ({0})",
@@ -514,7 +514,7 @@
"LabelPublishers": "Видавці",
"LabelRSSFeedCustomOwnerEmail": "Користувацька електронна адреса власника",
"LabelRSSFeedCustomOwnerName": "Користувацьке ім'я власника",
- "LabelRSSFeedOpen": "RSS-канал відкритий",
+ "LabelRSSFeedOpen": "RSS-канал відкрито",
"LabelRSSFeedPreventIndexing": "Запобігати індексації",
"LabelRSSFeedSlug": "Назва RSS-каналу",
"LabelRSSFeedURL": "Адреса RSS-каналу",
@@ -542,8 +542,8 @@
"LabelSeason": "Сезон",
"LabelSeasonNumber": "Сезон #{0}",
"LabelSelectAll": "Вибрати все",
- "LabelSelectAllEpisodes": "Вибрати всі епізоди",
- "LabelSelectEpisodesShowing": "Вибрати {0} показаних епізодів",
+ "LabelSelectAllEpisodes": "Вибрати всі серії",
+ "LabelSelectEpisodesShowing": "Обрати показані епізоди: {0}",
"LabelSelectUsers": "Вибрати користувачів",
"LabelSendEbookToDevice": "Надіслати електронну книгу на...",
"LabelSequence": "Послідовність",
@@ -595,7 +595,7 @@
"LabelSettingsStoreMetadataWithItemHelp": "За замовчуванням файли метаданих зберігаються у /metadata/items. Цей параметр увімкне збереження метаданих у теці елемента бібліотеки",
"LabelSettingsTimeFormat": "Формат часу",
"LabelShare": "Поділитися",
- "LabelShareDownloadableHelp": "Дозволяє користувачам із посиланням для спільного доступу скачування zip-файлу елемента бібліотеки.",
+ "LabelShareDownloadableHelp": "Дозволяє користувачам із посиланням для спільного доступу завантажувати zip-файл елемента бібліотеки.",
"LabelShareOpen": "Поділитися відкрито",
"LabelShareURL": "Поділитися URL",
"LabelShowAll": "Показати все",
@@ -714,19 +714,19 @@
"MessageBackupsLocationNoEditNote": "Примітка: розташування резервної копії встановлюється за допомогою змінної середовища та не може бути змінене тут.",
"MessageBackupsLocationPathEmpty": "Шлях розташування резервної копії не може бути порожнім",
"MessageBatchEditPopulateMapDetailsAllHelp": "Заповнити увімкнені поля даними з усіх елементів. Поля з кількома значеннями буде об’єднано",
- "MessageBatchEditPopulateMapDetailsItemHelp": "Заповнити увімкнені поля деталізації даними з цього елемента",
+ "MessageBatchEditPopulateMapDetailsItemHelp": "Заповніть увімкнені поля деталей карти даними з цього елемента",
"MessageBatchQuickMatchDescription": "Швидкий пошук спробує знайти відсутні обкладинки та метадані обраних елементів. Увімкніть налаштування нижче, аби дозволити заміну наявних обкладинок та/або метаданих під час швидкого пошуку.",
- "MessageBookshelfNoCollections": "Ви ще не створили жодної добірки",
+ "MessageBookshelfNoCollections": "Ви не створили жодної добірки",
"MessageBookshelfNoCollectionsHelp": "Колекції публічні. Їх можуть бачити всі користувачі, які мають доступ до бібліотеки.",
"MessageBookshelfNoRSSFeeds": "Немає відкритих RSS-каналів",
"MessageBookshelfNoResultsForFilter": "Немає результатів з фільтром \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Немає результатів за запитом",
- "MessageBookshelfNoSeries": "У вас немає серій",
- "MessageChapterEndIsAfter": "Кінець глави після завершення аудіокниги",
- "MessageChapterErrorFirstNotZero": "Перша глава повинна починатися з 0",
- "MessageChapterErrorStartGteDuration": "Час початку має бути меншим за тривалість аудіокниги",
- "MessageChapterErrorStartLtPrev": "Час початку має бути більшим або рівним часу початку попередньої глави",
- "MessageChapterStartIsAfter": "Початок глави після завершення аудіокниги",
+ "MessageBookshelfNoSeries": "Серії відсутні",
+ "MessageChapterEndIsAfter": "Кінець глави знаходиться після закінчення книги",
+ "MessageChapterErrorFirstNotZero": "Перша глава мусить починатися з 0",
+ "MessageChapterErrorStartGteDuration": "Час початку мусить бути меншим за тривалість аудіокниги",
+ "MessageChapterErrorStartLtPrev": "Неприпустимий час початку, має бути більшим за час початку попередньої глави",
+ "MessageChapterStartIsAfter": "Початок глави знаходиться після закінчення книги",
"MessageChaptersNotFound": "Розділи не знайдені",
"MessageCheckingCron": "Перевірка планувальника...",
"MessageConfirmCloseFeed": "Ви дійсно бажаєте закрити цей канал?",
@@ -734,25 +734,25 @@
"MessageConfirmDeleteDevice": "Ви впевнені, що хочете видалити пристрій для читання \"{0}\"?",
"MessageConfirmDeleteFile": "Файл буде видалено з вашої файлової системи. Ви впевнені?",
"MessageConfirmDeleteLibrary": "Ви дійсно бажаєте назавжди видалити бібліотеку \"{0}\"?",
- "MessageConfirmDeleteLibraryItem": "Елемент бібліотеки буде видалено з бази даних і файлової системи. Ви впевнені?",
- "MessageConfirmDeleteLibraryItems": "Буде видалено {0} елементів бібліотеки з бази даних і файлової системи. Ви впевнені?",
+ "MessageConfirmDeleteLibraryItem": "Елемент бібліотеки буде видалено з бази даних та вашої файлової системи. Ви впевнені?",
+ "MessageConfirmDeleteLibraryItems": "З бази даних та вашої файлової системи будуть видалені елементи бібліотеки: {0}. Ви впевнені?",
"MessageConfirmDeleteMetadataProvider": "Ви впевнені, що хочете видалити користувацького постачальника метаданих \"{0}\"?",
"MessageConfirmDeleteNotification": "Ви впевнені, що хочете видалити це сповіщення?",
"MessageConfirmDeleteSession": "Ви дійсно бажаєте видалити цей сеанс?",
- "MessageConfirmEmbedMetadataInAudioFiles": "Ви впевнені, що хочете вбудувати метадані у {0} аудіофайлів?",
+ "MessageConfirmEmbedMetadataInAudioFiles": "Ви впевнені, що хочете вставити метадані в {0} аудіофайлів?",
"MessageConfirmForceReScan": "Ви дійсно бажаєте примусово пересканувати?",
- "MessageConfirmMarkAllEpisodesFinished": "Ви впевнені, що хочете позначити всі епізоди завершеними?",
- "MessageConfirmMarkAllEpisodesNotFinished": "Ви впевнені, що хочете позначити всі епізоди незавершеними?",
+ "MessageConfirmMarkAllEpisodesFinished": "Ви дійсно бажаєте позначити усі епізоди завершеними?",
+ "MessageConfirmMarkAllEpisodesNotFinished": "Ви дійсно бажаєте позначити усі епізоди незавершеними?",
"MessageConfirmMarkItemFinished": "Ви впевнені, що хочете позначити \"{0}\" як завершене?",
"MessageConfirmMarkItemNotFinished": "Ви впевнені, що хочете позначити \"{0}\" як незавершене?",
"MessageConfirmMarkSeriesFinished": "Ви дійсно бажаєте позначити усі книги серії завершеними?",
"MessageConfirmMarkSeriesNotFinished": "Ви дійсно бажаєте позначити всі книги серії незавершеними?",
"MessageConfirmNotificationTestTrigger": "Активувати це сповіщення з тестовими даними?",
- "MessageConfirmPurgeCache": "Очищення кешу видалить всю теку /metadata/cache
. /metadata/cache/items
./metadata/cache
. /metadata/cache/items
. /metadata/logs
як JSON-файли. Журнали збоїв зберігаються у /metadata/logs/crash_logs.txt
.",
"MessageM4BFailed": "Помилка M4B!",
"MessageM4BFinished": "M4B створено!",
- "MessageMapChapterTitles": "Встановіть назви глав вашої аудіокниги без зміни часових міток",
+ "MessageMapChapterTitles": "Встановіть назви глав вашої аудіокниги без визначення налаштувань тривалості",
"MessageMarkAllEpisodesFinished": "Позначити всі епізоди завершеними",
"MessageMarkAllEpisodesNotFinished": "Позначити всі епізоди незавершеними",
- "MessageMarkAsFinished": "Позначити як завершене",
- "MessageMarkAsNotFinished": "Позначити як незавершене",
- "MessageMatchBooksDescription": "Спробує знайти книги у бібліотеці у вибраному джерелі пошуку та заповнити порожні подробиці й обкладинку. Не перезаписує подробиці.",
+ "MessageMarkAsFinished": "Позначити завершеним",
+ "MessageMarkAsNotFinished": "Позначити незавершеним",
+ "MessageMatchBooksDescription": "Спробує віднайти книгу у вказаному джерелі пошуку та встановити подробиці та обкладинку, яких бракує. Не перезаписує подробиці.",
"MessageNoAudioTracks": "Аудіодоріжки відсутні",
"MessageNoAuthors": "Автори відсутні",
"MessageNoBackups": "Резервні копії відсутні",
@@ -808,8 +808,8 @@
"MessageNoCoversFound": "Обкладинок не знайдено",
"MessageNoDescription": "Без опису",
"MessageNoDevices": "Немає пристроїв",
- "MessageNoDownloadsInProgress": "Немає активних скачувань",
- "MessageNoDownloadsQueued": "Немає скачувань у черзі",
+ "MessageNoDownloadsInProgress": "Немає активних завантажень",
+ "MessageNoDownloadsQueued": "Немає завантажень у черзі",
"MessageNoEpisodeMatchesFound": "Відповідних епізодів не знайдено",
"MessageNoEpisodes": "Епізоди відсутні",
"MessageNoFoldersAvailable": "Немає доступних тек",
@@ -818,21 +818,21 @@
"MessageNoItems": "Елементи відсутні",
"MessageNoItemsFound": "Елементів не знайдено",
"MessageNoListeningSessions": "Сеанси прослуховування відсутні",
- "MessageNoLogs": "Немає журналів",
+ "MessageNoLogs": "Немає журнали",
"MessageNoMediaProgress": "Прогрес відсутній",
"MessageNoNotifications": "Сповіщення відсутні",
- "MessageNoPodcastFeed": "Некоректний подкаст: немає каналу",
+ "MessageNoPodcastFeed": "Невірний подкаст: Немає каналу",
"MessageNoPodcastsFound": "Подкастів не знайдено",
"MessageNoResults": "Немає результатів",
"MessageNoSearchResultsFor": "Немає результатів пошуку для \"{0}\"",
- "MessageNoSeries": "Немає серій",
- "MessageNoTags": "Немає міток",
+ "MessageNoSeries": "Без серії",
+ "MessageNoTags": "Без міток",
"MessageNoTasksRunning": "Немає активних завдань",
- "MessageNoUpdatesWereNecessary": "Оновлення не потрібні",
+ "MessageNoUpdatesWereNecessary": "Оновлень не потрібно",
"MessageNoUserPlaylists": "У вас немає списків відтворення",
- "MessageNoUserPlaylistsHelp": "Списки відтворення приватні. Лише користувач, який їх створив, може їх бачити.",
+ "MessageNoUserPlaylistsHelp": "Списки відтворення приватні. Лише користувач, який їх створює, може бачити їх.",
"MessageNotYetImplemented": "Ще не реалізовано",
- "MessageOpmlPreviewNote": "Примітка: це попередній перегляд OPML-файлу. Актуальна назва подкасту буде взята з RSS-каналу.",
+ "MessageOpmlPreviewNote": "Примітка: це попередній перегляд OPML-файлу. Актуальна назва подкасту буде завантажена з RSS-каналу.",
"MessageOr": "або",
"MessagePauseChapter": "Призупинити відтворення глави",
"MessagePlayChapter": "Слухати початок глави",
@@ -841,7 +841,7 @@
"MessagePodcastHasNoRSSFeedForMatching": "Подкаст не має RSS-каналу для пошуку",
"MessagePodcastSearchField": "Введіть пошуковий запит або URL RSS-стрічки",
"MessageQuickEmbedInProgress": "Швидке вбудовування в процесі",
- "MessageQuickEmbedQueue": "У черзі на швидке вбудовування ({0} в черзі)",
+ "MessageQuickEmbedQueue": "В черзі на швидке вбудовування ({0} в черзі)",
"MessageQuickMatchAllEpisodes": "Швидке співставлення всіх епізодів",
"MessageQuickMatchDescription": "Заповнити відсутні подробиці та обкладинку першим результатом пошуку '{0}'. Не перезаписує подробиці, якщо не увімкнено параметр \"Надавати перевагу віднайденим метаданим\".",
"MessageRemoveChapter": "Видалити главу",
@@ -849,23 +849,22 @@
"MessageRemoveFromPlayerQueue": "Вилучити з черги відтворення",
"MessageRemoveUserWarning": "Ви дійсно бажаєте назавжди видалити користувача \"{0}\"?",
"MessageReportBugsAndContribute": "Повідомляйте про помилки, пропонуйте функції та долучайтеся на",
- "MessageResetChaptersConfirm": "Ви впевнені, що хочете скинути глави та скасувати внесені зміни?",
- "MessageRestoreBackupConfirm": "Ви впевнені, що хочете відновити резервну копію, створену",
- "MessageRestoreBackupWarning": "Відновлення резервної копії перезапише всю базу даних у /config і зображення обкладинок у /metadata/items та /metadata/authors.http://192.168.1.1:8337
, 那么你可以输入 http://192.168.1.1:8337/notify
.",
"MessageAsinCheck": "确保你使用的 ASIN 来自正确的 Audible 地区, 而不是亚马逊.",
- "MessageAuthenticationOIDCChangesRestart": "保存后重新启动服务器以应用 OIDC 更改.",
"MessageBackupsDescription": "备份包括用户, 用户进度, 媒体库项目详细信息, 服务器设置和图像, 存储在 /metadata/items
& /metadata/authors
. 备份不包括存储在你的媒体库文件夹中的任何文件.",
"MessageBackupsLocationEditNote": "注意: 更新备份位置不会移动或修改现有备份",
"MessageBackupsLocationNoEditNote": "注意: 备份位置是通过环境变量设置的, 不能在此处更改.",
@@ -856,7 +853,6 @@
"MessageScheduleRunEveryWeekdayAtTime": "每隔 {0} 在 {1} 运行一次",
"MessageSearchResultsFor": "搜索结果",
"MessageSelected": "{0} 已选择",
- "MessageSeriesSequenceCannotContainSpaces": "系列序列不能包含空格",
"MessageServerCouldNotBeReached": "无法访问服务器",
"MessageSetChaptersFromTracksDescription": "把每个音频文件设置为章节并将章节标题设置为音频文件名",
"MessageShareExpirationWillBe": "到期日期为 {0}",
@@ -918,8 +914,6 @@
"NotificationOnBackupCompletedDescription": "备份完成时触发",
"NotificationOnBackupFailedDescription": "备份失败时触发",
"NotificationOnEpisodeDownloadedDescription": "当播客节目自动下载时触发",
- "NotificationOnRSSFeedDisabledDescription": "由于尝试失败次数过多而导致剧集自动下载被禁用时触发",
- "NotificationOnRSSFeedFailedDescription": "当 RSS 源请求自动下载剧集失败时触发",
"NotificationOnTestDescription": "测试通知系统的事件",
"PlaceholderNewCollection": "输入收藏夹名称",
"PlaceholderNewFolderPath": "输入文件夹路径",
@@ -977,8 +971,6 @@
"ToastCachePurgeFailed": "清除缓存失败",
"ToastCachePurgeSuccess": "缓存清除成功",
"ToastChaptersHaveErrors": "章节有错误",
- "ToastChaptersInvalidShiftAmountLast": "偏移量无效. 最后一章的开始时间将超过这本有声读物的持续时间.",
- "ToastChaptersInvalidShiftAmountStart": "偏移量无效. 第一章的长度将为零或负数, 并会被第二章覆盖. 请增加第二章的起始时长.",
"ToastChaptersMustHaveTitles": "章节必须有标题",
"ToastChaptersRemoved": "已删除章节",
"ToastChaptersUpdated": "章节已更新",
diff --git a/index.js b/index.js
index 7379322e..2839c238 100644
--- a/index.js
+++ b/index.js
@@ -4,9 +4,7 @@ const optionDefinitions = [
{ name: 'port', alias: 'p', type: String },
{ name: 'host', alias: 'h', type: String },
{ name: 'source', alias: 's', type: String },
- { name: 'dev', alias: 'd', type: Boolean },
- // Run in production mode and use dev.js config
- { name: 'prod-with-dev-env', alias: 'r', type: Boolean }
+ { name: 'dev', alias: 'd', type: Boolean }
]
const commandLineArgs = require('./server/libs/commandLineArgs')
@@ -19,7 +17,7 @@ const server = require('./server/Server')
global.appRoot = __dirname
const isDev = process.env.NODE_ENV !== 'production'
-if (isDev || options['prod-with-dev-env']) {
+if (isDev) {
const devEnv = require('./dev').config
if (devEnv.Port) process.env.PORT = devEnv.Port
if (devEnv.ConfigPath) process.env.CONFIG_PATH = devEnv.ConfigPath
@@ -30,7 +28,6 @@ if (isDev || options['prod-with-dev-env']) {
if (devEnv.SkipBinariesCheck) process.env.SKIP_BINARIES_CHECK = '1'
if (devEnv.AllowIframe) process.env.ALLOW_IFRAME = '1'
if (devEnv.BackupPath) process.env.BACKUP_PATH = devEnv.BackupPath
- if (devEnv.ReactClientPath) process.env.REACT_CLIENT_PATH = devEnv.ReactClientPath
process.env.SOURCE = 'local'
process.env.ROUTER_BASE_PATH = devEnv.RouterBasePath ?? '/audiobookshelf'
}
diff --git a/package-lock.json b/package-lock.json
index d44ea79b..91a5f283 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "audiobookshelf",
- "version": "2.25.1",
+ "version": "2.23.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "audiobookshelf",
- "version": "2.25.1",
+ "version": "2.23.0",
"license": "GPL-3.0",
"dependencies": {
"axios": "^0.27.2",
diff --git a/package.json b/package.json
index 2fd1a87e..9b08daee 100644
--- a/package.json
+++ b/package.json
@@ -1,13 +1,12 @@
{
"name": "audiobookshelf",
- "version": "2.25.1",
+ "version": "2.23.0",
"buildNumber": 1,
"description": "Self-hosted audiobook and podcast server",
"main": "index.js",
"scripts": {
"dev": "nodemon --watch server index.js -- --dev",
"start": "node index.js",
- "start-dev": "node index.js --prod-with-dev-env",
"client": "cd client && npm ci && npm run generate",
"prod": "npm run client && npm ci && node index.js",
"build-win": "npm run client && pkg -t node20-win-x64 -o ./dist/win/audiobookshelf -C GZip .",
diff --git a/server/Auth.js b/server/Auth.js
index 4e76ee33..ba72947a 100644
--- a/server/Auth.js
+++ b/server/Auth.js
@@ -442,17 +442,7 @@ class Auth {
// Local strategy login route (takes username and password)
router.post('/login', passport.authenticate('local'), async (req, res) => {
// return the user login response json if the login was successfull
- const userResponse = await this.getUserLoginResponsePayload(req.user)
-
- // Experimental Next.js client uses bearer token in cookies
- res.cookie('auth_token', userResponse.user.token, {
- httpOnly: true,
- secure: req.secure || req.get('x-forwarded-proto') === 'https',
- sameSite: 'strict',
- maxAge: 1000 * 60 * 60 * 24 * 7 // 7 days
- })
-
- res.json(userResponse)
+ res.json(await this.getUserLoginResponsePayload(req.user))
})
// openid strategy login route (this redirects to the configured openid login provider)
@@ -728,7 +718,6 @@ class Auth {
const authMethod = req.cookies.auth_method
res.clearCookie('auth_method')
- res.clearCookie('auth_token')
let logoutUrl = null
diff --git a/server/Database.js b/server/Database.js
index a260e89f..52827e3f 100644
--- a/server/Database.js
+++ b/server/Database.js
@@ -765,26 +765,6 @@ class Database {
if (badSessionsRemoved > 0) {
Logger.warn(`Removed ${badSessionsRemoved} sessions that were 3 seconds or less`)
}
-
- // Remove mediaProgresses with duplicate mediaItemId (remove the oldest updatedAt or if updatedAt is the same, remove arbitrary one)
- const [duplicateMediaProgresses] = await this.sequelize.query(`SELECT mp1.id, mp1.mediaItemId
-FROM mediaProgresses mp1
-WHERE EXISTS (
- SELECT 1
- FROM mediaProgresses mp2
- WHERE mp2.mediaItemId = mp1.mediaItemId
- AND mp2.userId = mp1.userId
- AND (
- mp2.updatedAt > mp1.updatedAt
- OR (mp2.updatedAt = mp1.updatedAt AND mp2.id < mp1.id)
- )
-)`)
- 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) {
diff --git a/server/Server.js b/server/Server.js
index 22a53a3a..ef6ecb8a 100644
--- a/server/Server.js
+++ b/server/Server.js
@@ -12,7 +12,6 @@ const { version } = require('../package.json')
// Utils
const fileUtils = require('./utils/fileUtils')
-const { toNumber } = require('./utils/index')
const Logger = require('./Logger')
const Auth = require('./Auth')
@@ -85,8 +84,12 @@ class Server {
global.DisableSsrfRequestFilter = (url) => whitelistedUrls.includes(new URL(url).hostname)
}
}
- global.PodcastDownloadTimeout = toNumber(process.env.PODCAST_DOWNLOAD_TIMEOUT, 30000)
- global.MaxFailedEpisodeChecks = toNumber(process.env.MAX_FAILED_EPISODE_CHECKS, 24)
+
+ if (process.env.PODCAST_DOWNLOAD_TIMEOUT) {
+ global.PodcastDownloadTimeout = process.env.PODCAST_DOWNLOAD_TIMEOUT
+ } else {
+ global.PodcastDownloadTimeout = 30000
+ }
if (!fs.pathExistsSync(global.ConfigPath)) {
fs.mkdirSync(global.ConfigPath)
@@ -220,7 +223,6 @@ class Server {
async start() {
Logger.info('=== Starting Server ===')
-
this.initProcessEventListeners()
await this.init()
@@ -282,7 +284,6 @@ class Server {
await this.auth.initPassportJs()
const router = express.Router()
-
// if RouterBasePath is set, modify all requests to include the base path
app.use((req, res, next) => {
const urlStartsWithRouterBasePath = req.url.startsWith(global.RouterBasePath)
@@ -309,12 +310,16 @@ class Server {
})
)
router.use(express.urlencoded({ extended: true, limit: '5mb' }))
- router.use(express.json({ limit: '10mb' }))
+ router.use(express.json({ limit: '5mb' }))
router.use('/api', this.auth.ifAuthNeeded(this.authMiddleware.bind(this)), this.apiRouter.router)
router.use('/hls', this.hlsRouter.router)
router.use('/public', this.publicRouter.router)
+ // Static path to generated nuxt
+ const distPath = Path.join(global.appRoot, '/client/dist')
+ router.use(express.static(distPath))
+
// Static folder
router.use(express.static(Path.join(global.appRoot, 'static')))
@@ -334,6 +339,32 @@ class Server {
// Auth routes
await this.auth.initAuthRoutes(router)
+ // Client dynamic routes
+ const dynamicRoutes = [
+ '/item/:id',
+ '/author/:id',
+ '/audiobook/:id/chapters',
+ '/audiobook/:id/edit',
+ '/audiobook/:id/manage',
+ '/library/:library',
+ '/library/:library/search',
+ '/library/:library/bookshelf/:id?',
+ '/library/:library/authors',
+ '/library/:library/narrators',
+ '/library/:library/stats',
+ '/library/:library/series/:id?',
+ '/library/:library/podcast/search',
+ '/library/:library/podcast/latest',
+ '/library/:library/podcast/download-queue',
+ '/config/users/:id',
+ '/config/users/:id/sessions',
+ '/config/item-metadata-utils/:id',
+ '/collection/:id',
+ '/playlist/:id',
+ '/share/:slug'
+ ]
+ dynamicRoutes.forEach((route) => router.get(route, (req, res) => res.sendFile(Path.join(distPath, 'index.html'))))
+
router.post('/init', (req, res) => {
if (Database.hasRootUser) {
Logger.error(`[Server] attempt to init server when server already has a root user`)
@@ -364,48 +395,6 @@ class Server {
})
router.get('/healthcheck', (req, res) => res.sendStatus(200))
- const ReactClientPath = process.env.REACT_CLIENT_PATH
- if (!ReactClientPath) {
- // Static path to generated nuxt
- const distPath = Path.join(global.appRoot, '/client/dist')
- router.use(express.static(distPath))
-
- // Client dynamic routes
- const dynamicRoutes = [
- '/item/:id',
- '/author/:id',
- '/audiobook/:id/chapters',
- '/audiobook/:id/edit',
- '/audiobook/:id/manage',
- '/library/:library',
- '/library/:library/search',
- '/library/:library/bookshelf/:id?',
- '/library/:library/authors',
- '/library/:library/narrators',
- '/library/:library/stats',
- '/library/:library/series/:id?',
- '/library/:library/podcast/search',
- '/library/:library/podcast/latest',
- '/library/:library/podcast/download-queue',
- '/config/users/:id',
- '/config/users/:id/sessions',
- '/config/item-metadata-utils/:id',
- '/collection/:id',
- '/playlist/:id',
- '/share/:slug'
- ]
- dynamicRoutes.forEach((route) => router.get(route, (req, res) => res.sendFile(Path.join(distPath, 'index.html'))))
- } else {
- // This is for using the experimental Next.js client
- Logger.info(`Using React client at ${ReactClientPath}`)
- const nextPath = Path.join(ReactClientPath, 'node_modules/next')
- const next = require(nextPath)
- const nextApp = next({ dev: Logger.isDev, dir: ReactClientPath })
- const handle = nextApp.getRequestHandler()
- await nextApp.prepare()
- router.get('*', (req, res) => handle(req, res))
- }
-
const unixSocketPrefix = 'unix/'
if (this.Host?.startsWith(unixSocketPrefix)) {
const sockPath = this.Host.slice(unixSocketPrefix.length)
diff --git a/server/controllers/FileSystemController.js b/server/controllers/FileSystemController.js
index 4b0a94b3..d0b190a4 100644
--- a/server/controllers/FileSystemController.js
+++ b/server/controllers/FileSystemController.js
@@ -84,73 +84,49 @@ class FileSystemController {
*/
async checkPathExists(req, res) {
if (!req.user.canUpload) {
- Logger.error(`[FileSystemController] User "${req.user.username}" without upload permissions attempting to check path exists`)
+ Logger.error(`[FileSystemController] Non-admin user "${req.user.username}" attempting to check path exists`)
return res.sendStatus(403)
}
- const { directory, folderPath } = req.body
- if (!directory?.length || typeof directory !== 'string' || !folderPath?.length || typeof folderPath !== 'string') {
- Logger.error(`[FileSystemController] Invalid request body: ${JSON.stringify(req.body)}`)
- return res.status(400).json({
- error: 'Invalid request body'
- })
- }
+ const { filepath, directory, folderPath } = req.body
- // Check that library folder exists
- const libraryFolder = await Database.libraryFolderModel.findOne({
- where: {
- path: folderPath
- }
- })
-
- if (!libraryFolder) {
- Logger.error(`[FileSystemController] Library folder not found: ${folderPath}`)
- return res.sendStatus(404)
- }
-
- 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)
- if (!filepath.startsWith(libraryFolder.path)) {
- Logger.error(`[FileSystemController] Filepath is not inside library folder: ${filepath}`)
+ if (!filepath?.length || typeof filepath !== 'string') {
return res.sendStatus(400)
}
- if (await fs.pathExists(filepath)) {
+ const exists = await fs.pathExists(filepath)
+
+ if (exists) {
return res.json({
exists: true
})
}
- // Check if a library item exists in a subdirectory
+ // If directory and folderPath are passed in, check if a library item exists in a subdirectory
// See: https://github.com/advplyr/audiobookshelf/issues/4146
- const cleanedDirectory = directory.split('/').filter(Boolean).join('/')
- if (cleanedDirectory.includes('/')) {
- // Can only be 2 levels deep
- const possiblePaths = []
- const subdir = Path.dirname(directory)
- possiblePaths.push(fileUtils.filePathToPOSIX(Path.join(folderPath, subdir)))
- if (subdir.includes('/')) {
- possiblePaths.push(fileUtils.filePathToPOSIX(Path.join(folderPath, Path.dirname(subdir))))
- }
-
- const libraryItem = await Database.libraryItemModel.findOne({
- where: {
- path: possiblePaths
+ if (typeof directory === 'string' && typeof folderPath === 'string' && directory.length > 0 && folderPath.length > 0) {
+ const cleanedDirectory = directory.split('/').filter(Boolean).join('/')
+ if (cleanedDirectory.includes('/')) {
+ // Can only be 2 levels deep
+ const possiblePaths = []
+ const subdir = Path.dirname(directory)
+ possiblePaths.push(fileUtils.filePathToPOSIX(Path.join(folderPath, subdir)))
+ if (subdir.includes('/')) {
+ possiblePaths.push(fileUtils.filePathToPOSIX(Path.join(folderPath, Path.dirname(subdir))))
}
- })
- if (libraryItem) {
- return res.json({
- exists: true,
- libraryItemTitle: libraryItem.title
+ const libraryItem = await Database.libraryItemModel.findOne({
+ where: {
+ path: possiblePaths
+ }
})
+
+ if (libraryItem) {
+ return res.json({
+ exists: true,
+ libraryItemTitle: libraryItem.title
+ })
+ }
}
}
diff --git a/server/controllers/MiscController.js b/server/controllers/MiscController.js
index c779bdd6..0e5ad141 100644
--- a/server/controllers/MiscController.js
+++ b/server/controllers/MiscController.js
@@ -59,12 +59,6 @@ class MiscController {
if (!library) {
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)
if (!folder) {
return res.status(404).send('Folder not found')
diff --git a/server/controllers/PodcastController.js b/server/controllers/PodcastController.js
index 1ebe1d11..6395e05b 100644
--- a/server/controllers/PodcastController.js
+++ b/server/controllers/PodcastController.js
@@ -9,7 +9,6 @@ const fs = require('../libs/fsExtra')
const { getPodcastFeed, findMatchingEpisodes } = require('../utils/podcastUtils')
const { getFileTimestampsWithIno, filePathToPOSIX } = require('../utils/fileUtils')
const { validateUrl } = require('../utils/index')
-const htmlSanitizer = require('../utils/htmlSanitizer')
const Scanner = require('../scanner/Scanner')
const CoverManager = require('../managers/CoverManager')
@@ -405,15 +404,6 @@ class PodcastController {
const supportedStringKeys = ['title', 'subtitle', 'description', 'pubDate', 'episode', 'season', 'episodeType']
for (const key in req.body) {
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]
} 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]
diff --git a/server/libs/fusejs/index.js b/server/libs/fusejs/index.js
deleted file mode 100644
index 23d7f045..00000000
--- a/server/libs/fusejs/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Source: https://github.com/krisk/Fuse/blob/main/dist/fuse.basic.min.js
- */
-
-/**
- * Fuse.js v7.1.0 - Lightweight fuzzy-search (http://fusejs.io)
- *
- * Copyright (c) 2025 Kiro Risk (http://kiro.me)
- * All Rights Reserved. Apache Software License 2.0
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- */
-var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;n