diff --git a/client/components/controls/LibraryFilterSelect.vue b/client/components/controls/LibraryFilterSelect.vue index 62a9b8037..4834a1a25 100644 --- a/client/components/controls/LibraryFilterSelect.vue +++ b/client/components/controls/LibraryFilterSelect.vue @@ -338,6 +338,18 @@ export default { const series = this.series.find((se) => se.id == decoded) if (series) filterValue = series.name } + } else if (parts[0] === 'progress') { + const item = this.progress.find((p) => p.id == decoded) + if (item) filterValue = item.name + } else if (parts[0] === 'tracks') { + const item = this.tracks.find((t) => t.id == decoded) + if (item) filterValue = item.name + } else if (parts[0] === 'ebooks') { + const item = this.ebooks.find((e) => e.id == decoded) + if (item) filterValue = item.name + } else if (parts[0] === 'missing') { + const item = this.missing.find((m) => m.id == decoded) + if (item) filterValue = item.name } else { filterValue = decoded } diff --git a/client/components/modals/item/tabs/Match.vue b/client/components/modals/item/tabs/Match.vue index 4b92f6cd8..a1fc41091 100644 --- a/client/components/modals/item/tabs/Match.vue +++ b/client/components/modals/item/tabs/Match.vue @@ -78,7 +78,7 @@
- {{ $strings.LabelCurrently }} {{ isPodcast ? mediaMetadata.author : mediaMetadata.authorName }} + {{ $strings.LabelCurrently }} {{ isPodcast ? mediaMetadata.author : mediaMetadata.authorName }}
- {{ $strings.LabelCurrently }} {{ mediaMetadata.narratorName }} + {{ $strings.LabelCurrently }} {{ mediaMetadata.narratorName }}
- {{ $strings.LabelCurrently }} {{ mediaMetadata.descriptionPlain.substr(0, 100) + (mediaMetadata.descriptionPlain.length > 100 ? '...' : '') }} + {{ $strings.LabelCurrently }} {{ mediaMetadata.descriptionPlain.substr(0, 100) + (mediaMetadata.descriptionPlain.length > 100 ? '...' : '') }}
- {{ $strings.LabelCurrently }} {{ mediaMetadata.publisher }} + {{ $strings.LabelCurrently }} {{ mediaMetadata.publisher }}
- {{ $strings.LabelCurrently }} {{ mediaMetadata.publishedYear }} + {{ $strings.LabelCurrently }} {{ mediaMetadata.publishedYear }}
false. Sørg for at identity provider's claim matcher den forventede struktur:",
"LabelOpenIDClaims": "Efterlad de følgende indstillinger tomme for at deaktivere avanceret gruppe og adgangsindstilling, ved automatisk at assigne 'Bruger' grupper.",
@@ -576,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Skeumorfisk design med træhylder",
"LabelSettingsChromecastSupport": "Chromecast-understøttelse",
"LabelSettingsDateFormat": "Datoformat",
- "LabelSettingsEnableWatcher": "Scan automatisk bibliotek for ændringer",
- "LabelSettingsEnableWatcherForLibrary": "Scan automatisk bibliotek for ændringer",
+ "LabelSettingsEnableWatcher": "Automatisk biblioteksovervåger",
+ "LabelSettingsEnableWatcherForLibrary": "Automatisk biblioteksovervåger",
"LabelSettingsEnableWatcherHelp": "Aktiverer automatisk tilføjelse/opdatering af elementer, når filændringer registreres. *Kræver servergenstart",
"LabelSettingsEpubsAllowScriptedContent": "Tillad scriptet indhold i epub",
"LabelSettingsEpubsAllowScriptedContentHelp": "Tillad epub filer at køre scripts. Det anbefales at holde denne indstilling deaktiveret med mindre du stoler på kilderne af epub filerne.",
@@ -626,6 +638,7 @@
"LabelStartTime": "Starttid",
"LabelStarted": "Startet",
"LabelStartedAt": "Startet klokken",
+ "LabelStartedDate": "Startet {0}",
"LabelStatsAudioTracks": "Lydspor",
"LabelStatsAuthors": "Forfattere",
"LabelStatsBestDay": "Bedste dag",
@@ -655,6 +668,7 @@
"LabelTheme": "Tema",
"LabelThemeDark": "Mørk",
"LabelThemeLight": "Lys",
+ "LabelThemeSepia": "Sepia",
"LabelTimeBase": "Tidsbase",
"LabelTimeDurationXHours": "{0} timer",
"LabelTimeDurationXMinutes": "{0} minutter",
@@ -739,6 +753,7 @@
"MessageBookshelfNoResultsForFilter": "Ingen resultater for filter \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Intet resultat for query",
"MessageBookshelfNoSeries": "Du har ingen serier",
+ "MessageBulkChapterPattern": "Hvor mange kapitler vil du tilføje med dette nummereringsmønster?",
"MessageChapterEndIsAfter": "Kapitelslutningen er efter slutningen af din lydbog",
"MessageChapterErrorFirstNotZero": "Første kapitel skal starte ved 0",
"MessageChapterErrorStartGteDuration": "Ugyldig starttid skal være mindre end lydbogens varighed",
@@ -775,6 +790,7 @@
"MessageConfirmRemoveAuthor": "Er du sikker på, at du vil fjerne forfatteren \"{0}\"?",
"MessageConfirmRemoveCollection": "Er du sikker på, at du vil fjerne samlingen \"{0}\"?",
"MessageConfirmRemoveEpisode": "Er du sikker på, at du vil fjerne episoden \"{0}\"?",
+ "MessageConfirmRemoveEpisodeNote": "Obs: Dette sletter ikke lydfilen medmindre \"Permanent sletning af fil\" er aktiveret",
"MessageConfirmRemoveEpisodes": "Er du sikker på, at du vil fjerne {0} episoder?",
"MessageConfirmRemoveListeningSessions": "Er du sikker på at du vil fjerne {0} lytte sessioner?",
"MessageConfirmRemoveMetadataFiles": "Er du sikker på at du vil fjerne alle metadata.{0} filer i dine biblioteksfoldere?",
@@ -800,6 +816,8 @@
"MessageFeedURLWillBe": "Feed-URL vil være {0}",
"MessageFetching": "Henter...",
"MessageForceReScanDescription": "vil scanne alle filer igen som en frisk scanning. Lydfilens ID3-tags, OPF-filer og tekstfiler scannes som nye.",
+ "MessageHeatmapListeningTimeTooltip": "{0} lytter på {1}",
+ "MessageHeatmapNoListeningSessions": "Ingen lyttesessioner på {0}",
"MessageImportantNotice": "Vigtig besked!",
"MessageInsertChapterBelow": "Indsæt kapitel nedenfor",
"MessageInvalidAsin": "Ugyldig ASIN",
@@ -870,7 +888,7 @@
"MessageResetChaptersConfirm": "Er du sikker på, at du vil nulstille kapitler og annullere ændringerne, du har foretaget?",
"MessageRestoreBackupConfirm": "Er du sikker på, at du vil gendanne sikkerhedskopien oprettet den",
"MessageRestoreBackupWarning": "Gendannelse af en sikkerhedskopi vil overskrive hele databasen, som er placeret på /config, og omslagsbilleder i /metadata/items & /metadata/authors.false יש לוודא שטענת ספק הזהויות תואמת את המבנה הצפוי:",
"LabelOpenIDClaims": "השאר את האפשרויות הבאות ריקות כדי להשבית הקצאת קבוצות והרשאות מתקדמת, ולאחר מכן להקצות אוטומטית את קבוצת 'משתמש'.",
+ "LabelOpenIDGroupClaimDescription": "שם ה־OpenID claim המכיל את רשימת הקבוצות של המשתמש. בדרך כלל נקרא groups. אם הוגדרה, האפליקציה תקצה תפקידים באופן אוטומטי על סמך השיוך לקבוצות, בתנאי ששמות הקבוצות ב־claim הם 'admin', 'user' או 'guest' (ללא רגישות לרישיות - Case-insensitive). ה־claim צריך להכיל רשימה; אם המשתמש משויך למספר קבוצות, האפליקציה תקצה את התפקיד בעל רמת הגישה הגבוהה ביותר. במידה ולא נמצאה קבוצה תואמת, הגישה תיחסם.",
"LabelOpenRSSFeed": "פתח ערוץ RSS",
"LabelOverwrite": "לשכפל",
+ "LabelPaginationPageXOfY": "עמוד {0} מתוך {1}",
"LabelPassword": "סיסמה",
"LabelPath": "נתיב",
+ "LabelPermanent": "קבוע",
"LabelPermissionsAccessAllLibraries": "ניתן לגשת לכל הספריות",
"LabelPermissionsAccessAllTags": "ניתן לגשת לכל התגיות",
"LabelPermissionsAccessExplicitContent": "ניתן לגשת לתוכן בוטה",
+ "LabelPermissionsCreateEreader": "ניתן ליצור קורא ספרים דיגיטלי",
"LabelPermissionsDelete": "מותר למחוק",
"LabelPermissionsDownload": "מותר להוריד",
"LabelPermissionsUpdate": "מותר לעדכן",
@@ -492,6 +517,8 @@
"LabelPersonalYearReview": "השנה שלך בסקירה ({0})",
"LabelPhotoPathURL": "נתיב/URL לתמונה",
"LabelPlayMethod": "שיטת הפעלה",
+ "LabelPlaybackRateIncrementDecrement": "שיעור הגדלה/הפחתה של מהירות ההשמעה",
+ "LabelPlayerChapterNumberMarker": "{0} מתוך {1}",
"LabelPlaylists": "רשימות השמעה",
"LabelPodcast": "פודקאסט",
"LabelPodcastSearchRegion": "אזור חיפוש פודקאסט",
@@ -503,10 +530,14 @@
"LabelPrimaryEbook": "ספר אלקטרוני ראשי",
"LabelProgress": "התקדמות",
"LabelProvider": "ספק",
+ "LabelProviderAuthorizationValue": "ערך כותרת האימות (Authorization Header)",
"LabelPubDate": "תאריך פרסום",
"LabelPublishYear": "שנת הפרסום",
"LabelPublishedDate": "פורסם {0}",
+ "LabelPublishedDecade": "עשור פרסום",
+ "LabelPublishedDecades": "עשורי פרסום",
"LabelPublisher": "מוציא לאור",
+ "LabelPublishers": "מוצאים לאור",
"LabelRSSFeedCustomOwnerEmail": "אימייל בעלים מותאם אישית",
"LabelRSSFeedCustomOwnerName": "שם בעלים מותאם אישית",
"LabelRSSFeedOpen": "ערוץ RSS פתוח",
@@ -514,6 +545,7 @@
"LabelRSSFeedSlug": "Slug של ערוץ ה-RSS",
"LabelRSSFeedURL": "כתובת ערוץ ה-RSS",
"LabelRandomly": "באופן אקראי",
+ "LabelReAddSeriesToContinueListening": "הוסף סדרה בחזרה אל ״המשך האזנה״",
"LabelRead": "קריאה",
"LabelReadAgain": "קרא שוב",
"LabelReadEbookWithoutProgress": "קרא/י ספר אלקטרוני ללא שמירת התקדמות",
@@ -523,29 +555,44 @@
"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} פרקים המוצגים",
+ "LabelSelectUser": "בחר משתמש",
"LabelSelectUsers": "בחר משתמשים",
"LabelSendEbookToDevice": "שלח ספר אלקטרוני ל...",
"LabelSequence": "רצף",
+ "LabelSerial": "מספר סידורי",
"LabelSeries": "סדרה",
"LabelSeriesName": "שם הסדרה",
"LabelSeriesProgress": "התקדמות בסדרה",
+ "LabelServerLogLevel": "רמת פירוט יומני הרישום",
"LabelServerYearReview": "השנה בסקירה של השרת ({0})",
"LabelSetEbookAsPrimary": "קבע כראשי",
"LabelSetEbookAsSupplementary": "קבע כמשלים",
+ "LabelSettingsAllowIframe": "אפשר הטמעה בתוך iframe",
"LabelSettingsAudiobooksOnly": "רק ספרי קול",
"LabelSettingsAudiobooksOnlyHelp": "הפעלת ההגדרה הזו תתעלם מקבצי ספרים אלקטרוניים אלא אם כן הם נמצאים בתיקיית ספרי קול, שבמקרה זה יקבעו כספרים אלקטרוניים נלווים",
"LabelSettingsBookshelfViewHelp": "עיצוב סקאומורפי עם מדפי עץ",
"LabelSettingsChromecastSupport": "תמיכה ב-Chromecast",
"LabelSettingsDateFormat": "פורמט תאריך",
+ "LabelSettingsEnableWatcher": "הפעל מעקב שינויים בספריות",
+ "LabelSettingsEnableWatcherForLibrary": "הפעל מעקב שינויים בספרייה",
"LabelSettingsEnableWatcherHelp": "מאפשר הוספת/עדכון אוטומטי של פריטים כאשר שינויי קבצים זוהים. *דורש איתחול שרת",
+ "LabelSettingsEpubsAllowScriptedContent": "אפשור תוכן הכולל סקריפטים ב־ePubs",
+ "LabelSettingsEpubsAllowScriptedContentHelp": "אפשר לקובצי EPUB להריץ סקריפטים. מומלץ להשאיר את ההגדרה כבויה, אלא אם כן מקור קובצי ה־ePub מהימן.",
"LabelSettingsExperimentalFeatures": "תכונות ניסיוניות",
"LabelSettingsExperimentalFeaturesHelp": "תכונות בפיתוח שדורשות משובך ובדיקה. לחץ לפתיחת דיון ב-GitHub.",
"LabelSettingsFindCovers": "מצא כריכות",
@@ -554,7 +601,8 @@
"LabelSettingsHideSingleBookSeriesHelp": "סדרות הכוללות ספר אחד יוסתרו מדף הסדרות ומדף הבית.",
"LabelSettingsHomePageBookshelfView": "השתמש בתצוגת מדף בדף הבית",
"LabelSettingsLibraryBookshelfView": "השתמש בתצוגת מדף בספרייה",
- "LabelSettingsOnlyShowLaterBooksInContinueSeries": "דלג על ספרים קודמים ב-המשך סדרה",
+ "LabelSettingsLibraryMarkAsFinishedWhen": "סמן פריט מדיה כהושלם כאשר",
+ "LabelSettingsOnlyShowLaterBooksInContinueSeries": "דלג על ספרים קודמים ב״המשך סדרה״",
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "מדף המשך סדרות מציג את הספר הראשון שלא הושמע בסדרה שיש בה לפחות ספר אחד שהושלם ואין ספרים שכבר באמצע שמיעה. הפעלת הגדרה זו תמשיך סדרות מהספר שהושלם הכי מתקדם בסדרה במקום מהספר הראשון שלא הושמע.",
"LabelSettingsParseSubtitles": "פענח כתוביות",
"LabelSettingsParseSubtitlesHelp": "העתק כותרת משנה משם תיקיית הספר.http://192.168.1.1:8337 אז עליך לשים http://192.168.1.1:8337/notify.",
+ "MessageAsinCheck": "יש לוודא שימוש ב־ASIN מאזור ה־Audible הנכון, ולא מ־Amazon.",
+ "MessageAuthenticationLegacyTokenWarning": "אסימוני API ישנים יוסרו בעתיד. יש להשתמש ב מפתחות API במקום.",
+ "MessageAuthenticationOIDCChangesRestart": "יש להפעיל מחדש את השרת לאחר השמירה כדי להחיל את שינויי ה־OIDC.",
+ "MessageAuthenticationSecurityMessage": "האימות שופר מטעמי אבטחה. כל המשתמשים נדרשים להתחבר מחדש.",
"MessageBackupsDescription": "גיבויים כוללים משתמשים, התקדמות משתמש, פרטי פריטי ספרייה, הגדרות שרת ותמונות השמורות ב-/metadata/items & /metadata/authors. גיבויים לא כוללים קבצים שמורים בתיקיות הספרייה שלך.",
+ "MessageBackupsLocationEditNote": "הערה: שינוי מיקום הגיבוי לא יגרום להעברה או לשינוי של גיבויים קיימים",
+ "MessageBackupsLocationNoEditNote": "הערה: מיקום הגיבוי מוגדר באמצעות משתנה סביבה ולא ניתן לשנותו כאן.",
+ "MessageBackupsLocationPathEmpty": "נתיב מיקום הגיבוי אינו יכול להיות ריק",
+ "MessageBatchEditPopulateMapDetailsAllHelp": "מלא את השדות הפעילים בנתונים מכל הפריטים. שדות בעלי ערכים מרובים ימוזגו",
+ "MessageBatchEditPopulateMapDetailsItemHelp": "מלא את שדות פרטי המיפוי הפעילים בנתונים מפריט זה",
"MessageBatchQuickMatchDescription": "התאמה מהירה תנסה להוסיף כריכות ומטה-נתונים חסרים עבור הפריטים הנבחרים. הפעל את האפשרויות למטה כדי לאפשר להתאמה מהירה להחליף כריכות קיימות ו/או מטה-נתונים.",
"MessageBookshelfNoCollections": "עדיין לא יצרת אוספים",
+ "MessageBookshelfNoCollectionsHelp": "האוספים ציבוריים. כל המשתמשים בעלי גישה לספרייה יכולים לראות אותם.",
"MessageBookshelfNoRSSFeeds": "אין ערוצי RSS פתוחים",
"MessageBookshelfNoResultsForFilter": "אין תוצאות עבור סינון \"{0}: {1}\"",
+ "MessageBookshelfNoResultsForQuery": "אין תוצאות עבור השאילתה",
"MessageBookshelfNoSeries": "אין לך סדרות",
+ "MessageBulkChapterPattern": "כמה פרקים להוסיף לפי תבנית מספור זו?",
"MessageChapterEndIsAfter": "זמן סיום הפרק אחרי סיום הספר הקולי שלך",
"MessageChapterErrorFirstNotZero": "הפרק הראשון חייב להתחיל ב-0",
"MessageChapterErrorStartGteDuration": "זמן התחלה לא תקין, חייב להיות פחות ממשך הספר הקולי",
"MessageChapterErrorStartLtPrev": "זמן התחלה לא תקין, חייב להיות גדול או שווה לזמן ההתחלה של הפרק הקודם",
"MessageChapterStartIsAfter": "התחלת הפרק אחרי סיום הספר הקולי שלך",
+ "MessageChaptersNotFound": "לא נמצאו פרקים",
"MessageCheckingCron": "בודק את תזמון העבודה...",
"MessageConfirmCloseFeed": "האם אתה בטוח שאתה רוצה לסגור את הערוץ הזה?",
+ "MessageConfirmDeleteApiKey": "האם למחוק את מפתח ה־API \"{0}\"?",
"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/.false-ként fogja kezelni. Győződj meg arról, hogy az identitásszolgáltató igénye megfelel a várt struktúrának:",
"LabelOpenIDClaims": "Hagyd üresen a következő opciókat, hogy letiltsd a haladó csoport- és jogosultság-hozzárendelést, ekkor automatikusan a ‘Felhasználó’ csoport kerül hozzárendelésre.",
- "LabelOpenIDGroupClaimDescription": "Az OpenID-igény neve, amely a felhasználó csoportjainak listáját tartalmazza. Általában groups néven hivatkoznak rá. Ha konfigurálva van, az alkalmazás automatikusan hozzárendeli a szerepköröket a felhasználó csoporttagságai alapján, feltéve, hogy ezek a csoportok az igényben kis- és nagybetűkre érzéketlenül ‘admin’, ‘user’ vagy ‘guest’ néven szerepelnek. Az igénynek egy listát kell tartalmaznia, és ha egy felhasználó több csoport tagja, az alkalmazás a legmagasabb szintű hozzáféréssel rendelkező szerepkört rendeli hozzá. Ha egyetlen csoport sem felel meg, a hozzáférés megtagadásra kerül.",
+ "LabelOpenIDGroupClaimDescription": "Az OpenID-igény neve, amely a felhasználó csoportjainak listáját tartalmazza. Általában groups néven hivatkoznak rá. Ha konfigurálva van, az alkalmazás automatikusan hozzárendeli a szerepköröket a felhasználó csoporttagságai alapján, feltéve, hogy ezek a csoportok az igényben kis- és nagybetűkre érzéketlenül ‘admin’, ‘user’ vagy ‘guest’ néven szerepelnek. Az igénynek egy listát kell tartalmaznia, és ha egy felhasználó több csoport tagja, az alkalmazás a legmagasabb szintű hozzáféréssel rendelkező szerepkört rendeli hozzá. Ha egyetlen csoport sem felel meg, a hozzáférés megtagadásra kerül.",
"LabelOpenRSSFeed": "RSS hírcsatorna megnyitása",
"LabelOverwrite": "Felülírás",
"LabelPaginationPageXOfY": "{0} oldal {1}-ból/ből",
diff --git a/client/strings/it.json b/client/strings/it.json
index 46ecb0f53..d2178cbf6 100644
--- a/client/strings/it.json
+++ b/client/strings/it.json
@@ -275,7 +275,7 @@
"LabelBonus": "Bonus",
"LabelBooks": "Libri",
"LabelButtonText": "Buttone Testo",
- "LabelByAuthor": "da {0}",
+ "LabelByAuthor": "di {0}",
"LabelChangePassword": "Cambia Password",
"LabelChannels": "Canali",
"LabelChapterCount": "{0} Capitoli",
diff --git a/client/strings/ja.json b/client/strings/ja.json
index 7c2acb889..28f6de6a6 100644
--- a/client/strings/ja.json
+++ b/client/strings/ja.json
@@ -72,6 +72,7 @@
"ButtonQueueRemoveItem": "次に再生から削除",
"ButtonQuickEmbed": "クイック埋め込み",
"ButtonQuickEmbedMetadata": "メタデータの埋め込み",
+ "ButtonQuickMatch": "クイックマッチ",
"ButtonReScan": "再スキャン",
"ButtonRead": "読む",
"ButtonReadLess": "閉じる",
@@ -80,71 +81,157 @@
"ButtonRemove": "削除",
"ButtonRemoveAll": "全て削除",
"ButtonRemoveAllLibraryItems": "ライブラリーの項目を全て削除",
+ "ButtonRemoveFromContinueListening": "「続きを聴く」から削除",
+ "ButtonRemoveFromContinueReading": "「続きを読む」から削除",
+ "ButtonRemoveSeriesFromContinueSeries": "「シリーズを続く」からシリーズを削除",
"ButtonReset": "元に戻す",
"ButtonResetToDefault": "デフォルトに戻す",
"ButtonRestore": "復元",
"ButtonSave": "保存",
"ButtonSaveAndClose": "保存して閉じる",
+ "ButtonSaveTracklist": "トラックリストを保存",
"ButtonScan": "スキャン",
"ButtonScanLibrary": "ライブラリーをスキャン",
"ButtonScrollLeft": "左にスクロール",
"ButtonScrollRight": "右にスクロール",
"ButtonSearch": "検索",
+ "ButtonSelectFolderPath": "保存先フォルダを選択",
"ButtonSeries": "シリーズ",
+ "ButtonSetChaptersFromTracks": "トラックからチャプターを設定する",
+ "ButtonShare": "共有",
+ "ButtonShiftTimes": "再生時間の移動",
+ "ButtonShow": "表示",
+ "ButtonStartM4BEncode": "M4Bエンコード開始",
+ "ButtonStartMetadataEmbed": "メタデータ埋め込み開始",
+ "ButtonStats": "統計",
"ButtonSubmit": "送信",
+ "ButtonTest": "テスト",
+ "ButtonUnlinkOpenId": "OpenID 連携解除",
+ "ButtonUpload": "アップロード",
+ "ButtonUploadBackup": "バックアップのアップロード",
+ "ButtonUploadCover": "カバー画像をアップロード",
+ "ButtonUploadOPMLFile": "OPMLファイルをアップロード",
+ "ButtonUserDelete": "ユーザーを削除 {0}",
+ "ButtonUserEdit": "ユーザを編集 {0}",
+ "ButtonViewAll": "すべて表示",
"ButtonYes": "はい",
+ "ErrorUploadFetchMetadataAPI": "メタデータの取得中にエラーが発生しました",
+ "ErrorUploadFetchMetadataNoResults": "メタデータ取得に失敗しました。タイトルや著者名を更新してください",
+ "ErrorUploadLacksTitle": "タイトルは必須です",
"HeaderAccount": "アカウント",
+ "HeaderAddCustomMetadataProvider": "カスタムメタデータプロバイダーを追加",
"HeaderAdvanced": "上級者向け",
+ "HeaderApiKeys": "APIキー",
+ "HeaderAppriseNotificationSettings": "Apprise 通知設定",
"HeaderAudioTracks": "オーディオトラック",
+ "HeaderAudiobookTools": "オーディオブックのファイル管理ツール",
+ "HeaderAuthentication": "認証",
+ "HeaderBackups": "バックアップ",
+ "HeaderBulkChapterModal": "チャプターをまとめて追加",
+ "HeaderChangePassword": "パスワードを変更",
"HeaderChapters": "チャプター",
+ "HeaderChooseAFolder": "フォルダを選択",
"HeaderCollection": "コレクション",
"HeaderCollectionItems": "コレクションの項目",
+ "HeaderCover": "カバー",
+ "HeaderCurrentDownloads": "現在のダウンロード",
+ "HeaderCustomMessageOnLogin": "ログイン時のカスタムメッセージ",
+ "HeaderCustomMetadataProviders": "カスタムメタデータプロバイダー",
"HeaderDetails": "詳細",
+ "HeaderDownloadQueue": "ダウンロード待ち",
"HeaderEbookFiles": "電子書籍ファイル",
+ "HeaderEmail": "メール",
+ "HeaderEmailSettings": "メール設定",
"HeaderEpisodes": "エピソード",
+ "HeaderEreaderDevices": "電子書籍リーダー端末",
"HeaderEreaderSettings": "電子書籍リーダーの設定",
+ "HeaderFiles": "ファイル",
+ "HeaderFindChapters": "チャプターを検索",
+ "HeaderIgnoredFiles": "無視されたファイル",
+ "HeaderItemFiles": "アイテムファイル",
+ "HeaderItemMetadataUtils": "アイテムメタデータユーティリティ",
+ "HeaderLastListeningSession": "直近の再生セッション",
"HeaderLatestEpisodes": "最新のエピソード",
"HeaderLibraries": "ライブラリー",
+ "HeaderLibraryFiles": "ライブラリファイル",
+ "HeaderLibraryStats": "ライブラリ統計",
+ "HeaderListeningSessions": "再生セッション",
+ "HeaderListeningStats": "再生統計",
+ "HeaderLogin": "ログイン",
+ "HeaderLogs": "ログ",
+ "HeaderManageGenres": "ジャンルを管理",
+ "HeaderManageTags": "タグを管理",
+ "HeaderMapDetails": "マップの詳細",
+ "HeaderMatch": "マッチ",
+ "HeaderMetadataOrderOfPrecedence": "メタデータの優先順",
+ "HeaderMetadataToEmbed": "埋め込むメタデータ",
+ "HeaderNewAccount": "新規アカウント",
+ "HeaderNewApiKey": "新規APIキー",
+ "HeaderNewLibrary": "新規ライブラリー",
+ "HeaderNotificationCreate": "通知を作成",
+ "HeaderNotificationUpdate": "通知を更新",
+ "HeaderNotifications": "通知",
+ "HeaderOpenIDConnectAuthentication": "OpenID Connect 認証",
"HeaderOpenRSSFeed": "RSS Feedを開く",
"HeaderPlayerSettings": "プレーヤーの設定",
"HeaderPlaylist": "プレイリスト",
"HeaderPlaylistItems": "プレイリストアイテム",
"HeaderRSSFeedGeneral": "RSS 詳細",
+ "HeaderRSSFeedIsOpen": "RSSフィードが開いています",
"HeaderSettings": "設定",
"HeaderSettingsGeneral": "一般",
"HeaderSettingsScanner": "スキャナー",
"HeaderSleepTimer": "スリープタイマー",
"HeaderStatsMinutesListeningChart": "過去7日間の視聴時間(分)",
+ "HeaderStatsRecentSessions": "最近の再生履歴",
+ "HeaderTableOfContents": "目次",
+ "HeaderYourStats": "再生統計",
"LabelAddToPlaylist": "プレイリストの追加",
+ "LabelAddedAt": "追加日時",
+ "LabelAddedDate": "追加日時 {0}",
+ "LabelAll": "すべて",
"LabelAuthor": "著者",
"LabelAuthorFirstLast": "著者(名 氏)",
"LabelAuthorLastFirst": "著者(氏 名)",
"LabelAuthors": "著者",
"LabelAutoDownloadEpisodes": "エピソードの自動ダウンロード",
"LabelBooks": "ほん",
+ "LabelByAuthor": "著 {0}",
"LabelChapters": "チャプター",
"LabelClosePlayer": "プレイヤーを閉じる",
+ "LabelCollapseSeries": "シリーズを折りたたむ",
"LabelComplete": "完了",
"LabelContinueListening": "続きから聞く",
+ "LabelContinueReading": "続きを読む",
+ "LabelContinueSeries": "シリーズを続く",
"LabelDescription": "説明",
+ "LabelDiscover": "おすすめ",
"LabelDownload": "ダウンロード",
"LabelDuration": "長さ",
"LabelEbook": "Eブック",
"LabelEbooks": "Eブック",
"LabelEnable": "有効",
+ "LabelEnd": "終了",
"LabelEndOfChapter": "チャプターの最後",
"LabelEpisode": "エピソード",
+ "LabelExplicit": "",
"LabelFeedURL": "Feed URL",
"LabelFile": "ファイル",
+ "LabelFileBirthtime": "ファイル作成日時",
+ "LabelFileModified": "ファイル更新日時",
"LabelFilename": "ファイル名",
"LabelFinished": "完了",
"LabelFolder": "フォルダ",
"LabelFontBoldness": "フォントの太さ",
+ "LabelFontFamily": "フォントファミリー",
"LabelFontScale": "フォントサイズ",
"LabelGenre": "ジャンル",
"LabelGenres": "ジャンル",
+ "LabelHasEbook": "eBookあり",
+ "LabelHasSupplementaryEbook": "付属eBookあり",
"LabelHost": "ホスト",
"LabelInProgress": "進行中",
+ "LabelIncomplete": "未完了",
"LabelLanguage": "言語",
"LabelLanguages": "言語",
"LabelLayout": "レイアウト",
diff --git a/client/strings/lt.json b/client/strings/lt.json
index b5ca66630..2480cdf35 100644
--- a/client/strings/lt.json
+++ b/client/strings/lt.json
@@ -1,5 +1,6 @@
{
"ButtonAdd": "Pridėti",
+ "ButtonAddApiKey": "Pridėti API raktą",
"ButtonAddChapters": "Pridėti skyrius",
"ButtonAddDevice": "Pridėti įrenginį",
"ButtonAddLibrary": "Pridėti Biblioteką",
diff --git a/client/strings/pl.json b/client/strings/pl.json
index 32c9766ca..3a9593db0 100644
--- a/client/strings/pl.json
+++ b/client/strings/pl.json
@@ -96,7 +96,7 @@
"ButtonScrollRight": "Przewiń w prawo",
"ButtonSearch": "Szukaj",
"ButtonSelectFolderPath": "Wybierz ścieżkę folderu",
- "ButtonSeries": "Serial",
+ "ButtonSeries": "Serie",
"ButtonSetChaptersFromTracks": "Ustawiaj rozdziały na podstawie utworów",
"ButtonShare": "Udostępnij",
"ButtonShiftTimes": "Przesunięcie czasowe",
@@ -437,8 +437,8 @@
"LabelLibraryItem": "Element biblioteki",
"LabelLibraryName": "Nazwa biblioteki",
"LabelLibrarySortByProgress": "Postęp: Ostatnio zaktualizowane",
- "LabelLibrarySortByProgressFinished": "Postęp: Ukończone",
- "LabelLibrarySortByProgressStarted": "Postęp: Rozpoczęte",
+ "LabelLibrarySortByProgressFinished": "Postęp: Ukończony",
+ "LabelLibrarySortByProgressStarted": "Postęp: Rozpoczęty",
"LabelLimit": "Limit",
"LabelLineSpacing": "Odstęp między wierszami",
"LabelListenAgain": "Słuchaj ponownie",
@@ -915,10 +915,16 @@
"MessageTaskNoFilesToScan": "Brak plików do skanowania",
"MessageTaskOpmlImport": "Importuj OPML",
"MessageTaskOpmlImportDescription": "Tworzenie {0} podcastów z kanałów RSS",
+ "MessageTaskOpmlImportFeedPodcastDescription": "Tworzenie podcastu \"{0}\"",
+ "MessageTaskOpmlImportFeedPodcastExists": "Podcast już istnieje pod podaną ścieżką",
+ "MessageTaskOpmlImportFeedPodcastFailed": "Nie udało się utworzyć podcastu",
+ "MessageTaskOpmlImportFinished": "Dodano {0} podcastów",
+ "MessageTaskOpmlParseFailed": "Błąd parsowania pliku OPML",
"MessageTaskScanItemsAdded": "Dodano {0}",
"MessageTaskScanItemsMissing": "Brakuje {0}",
"MessageTaskScanItemsUpdated": "Zaktualizowano {0}",
"MessageTaskScanNoChangesNeeded": "Brak zmian",
+ "MessageTaskScanningLibrary": "Skanowanie biblioteki \"{0}\"",
"MessageTaskTargetDirectoryNotWritable": "Brak prawa zapisu do folderu docelowego",
"MessageThinking": "Myślę...",
"MessageUploaderItemFailed": "Nie udało się przesłać",
@@ -937,6 +943,7 @@
"NoteUploaderFoldersWithMediaFiles": "Foldery z plikami multimedialnymi będą traktowane jako osobne elementy w bibliotece.",
"NoteUploaderOnlyAudioFiles": "Jeśli przesyłasz tylko pliki audio, każdy plik audio będzie traktowany jako osobny audiobook.",
"NoteUploaderUnsupportedFiles": "Nieobsługiwane pliki są ignorowane. Podczas dodawania folderu, inne pliki, które nie znajdują się w folderze elementu, są ignorowane.",
+ "NotificationOnTestDescription": "Zdarzenie używane do testowania systemu powiadomień",
"PlaceholderNewCollection": "Nowa nazwa kolekcji",
"PlaceholderNewFolderPath": "Nowa ścieżka folderu",
"PlaceholderNewPlaylist": "Nowa nazwa playlisty",
@@ -957,26 +964,50 @@
"StatsTopMonth": "TOPOWY MIESIĄC",
"StatsTopNarrator": "TOPOWY NARRATOR",
"StatsTopNarrators": "TOPOWI NARRATORZY",
+ "StatsTotalDuration": "O sumarycznej długości…",
"StatsYearInReview": "PRZEGLĄD ROKU",
"ToastAccountUpdateSuccess": "Zaktualizowano konto",
+ "ToastAsinRequired": "ASIN jest wymagany",
"ToastAuthorImageRemoveSuccess": "Zdjęcie autora usunięte",
+ "ToastAuthorNotFound": "Autor \"{0}\" nie został znaleziony",
+ "ToastAuthorRemoveSuccess": "Autor usunięty",
+ "ToastAuthorSearchNotFound": "Autor nie odnaleziony",
"ToastAuthorUpdateMerged": "Autor scalony",
"ToastAuthorUpdateSuccess": "Autor zaktualizowany",
"ToastAuthorUpdateSuccessNoImageFound": "Autor zaktualizowany (nie znaleziono obrazu)",
+ "ToastBackupAppliedSuccess": "Kopia zapasowa została przywrócona",
"ToastBackupCreateFailed": "Nie udało się utworzyć kopii zapasowej",
"ToastBackupCreateSuccess": "Utworzono kopię zapasową",
"ToastBackupDeleteFailed": "Nie udało się usunąć kopii zapasowej",
"ToastBackupDeleteSuccess": "Udało się usunąć kopie zapasowej",
+ "ToastBackupInvalidMaxKeep": "Nieprawidłowa ilość kopii zapasowych do przechowania",
+ "ToastBackupInvalidMaxSize": "Nieprawidłowy rozmiar maksymalny kopii zapasowej",
"ToastBackupRestoreFailed": "Nie udało się przywrócić kopii zapasowej",
"ToastBackupUploadFailed": "Nie udało się przesłać kopii zapasowej",
"ToastBackupUploadSuccess": "Kopia zapasowa została przesłana",
- "ToastBatchUpdateFailed": "Aktualizacja wsadowa nie powiodła się",
- "ToastBatchUpdateSuccess": "Aktualizacja wsadowa powiodła się",
+ "ToastBatchDeleteFailed": "Usuwanie zbiorcze nie powiodło się",
+ "ToastBatchDeleteSuccess": "Usuwanie zbiorcze powiodło się",
+ "ToastBatchUpdateFailed": "Aktualizacja zbiorcza nie powiodła się",
+ "ToastBatchUpdateSuccess": "Aktualizacja zbiorcza powiodła się",
"ToastBookmarkCreateFailed": "Nie udało się utworzyć zakładki",
"ToastBookmarkCreateSuccess": "Dodano zakładkę",
"ToastBookmarkRemoveSuccess": "Zakładka została usunięta",
+ "ToastBulkChapterInvalidCount": "Wprowadź liczbę z przedziału od 1 do 150",
+ "ToastCachePurgeFailed": "Nie udało się wyczyścić pamięci cache",
+ "ToastCachePurgeSuccess": "Wyczyszczono pamięć cache",
+ "ToastChapterLocked": "Rozdział jest zablokowany.",
+ "ToastChapterStartTimeAdjusted": "Czas rozpoczęcia rozdziału przesunięty o \"{0}\" sekund",
+ "ToastChaptersAllLocked": "Wszystkie rozdziały są zablokowane. Odblokuj edycję, aby użyć przesunięcia czasowego.",
+ "ToastChaptersHaveErrors": "Rozdziały posiadają błędy",
+ "ToastChaptersInvalidShiftAmountLast": "Niepoprawna wartość przesunięcia. Czas rozpoczęcia ostatniego rozdziału wykroczyłby poza długość tego audiobooka.",
+ "ToastChaptersInvalidShiftAmountStart": "Niepoprawna wartość przesunięcia. Pierwszy rozdział miałby długość mniejszą lub równą zeru oraz on zostałby nadpisany przez rozdział drugi. Ustaw późniejszy czas rozpoczęcia drugiego rozdziału.",
+ "ToastChaptersMustHaveTitles": "Rozdziały muszą posiadać tytuł",
+ "ToastChaptersRemoved": "Rozdziały usunięte",
+ "ToastChaptersUpdated": "Rozdziały zaktualizowane",
+ "ToastCollectionItemsAddFailed": "Dodanie elementów do kolekcji nie powiodło się",
"ToastCollectionRemoveSuccess": "Kolekcja usunięta",
"ToastCollectionUpdateSuccess": "Zaktualizowano kolekcję",
+ "ToastConnectionNotAvailable": "Brak połączenia. Spróbuj ponownie później",
"ToastCoverSearchFailed": "Nieudane wyszukiwanie okładki",
"ToastCoverUpdateFailed": "Nieudana aktualizacja okładki",
"ToastDateTimeInvalidOrIncomplete": "Niepoprawna data i czas",
@@ -993,6 +1024,8 @@
"ToastInvalidUrl": "Nieprawidłowy URL",
"ToastInvalidUrls": "Jeden lub więcej URL-i są nieprawidłowe",
"ToastItemCoverUpdateSuccess": "Zaktualizowano okładkę",
+ "ToastItemDeletedFailed": "Nie udało się usunąć elementu",
+ "ToastItemDeletedSuccess": "Element usunięty",
"ToastItemDetailsUpdateSuccess": "Zaktualizowano szczegóły",
"ToastItemMarkedAsFinishedFailed": "Nie udało się oznaczyć jako ukończone",
"ToastItemMarkedAsFinishedSuccess": "Pozycja oznaczona jako ukończona",
@@ -1031,12 +1064,41 @@
"ToastRSSFeedCloseSuccess": "Zamknięcie kanału RSS powiodło się",
"ToastRemoveItemFromCollectionFailed": "Nie udało się usunąć elementu z kolekcji",
"ToastRemoveItemFromCollectionSuccess": "Pozycja usunięta z kolekcji",
+ "ToastRemoveItemsWithIssuesFailed": "Nie udało się usunąć wadliwych elementów z biblioteki",
+ "ToastRemoveItemsWithIssuesSuccess": "Usunięto wadliwe elementy z biblioteki",
+ "ToastRenameFailed": "Nie udało się zmienić nazwy",
+ "ToastRescanFailed": "Ponowne skanowanie nie powiodło się dla {0}",
+ "ToastRescanRemoved": "Ponowne skanowanie powiodło się – element został usunięty",
+ "ToastRescanUpToDate": "Ponowne skanowanie powiodło się – element był aktualny",
+ "ToastRescanUpdated": "Ponowne skanowanie powiodło się – element został zaktualizowany",
+ "ToastScanFailed": "Nie powiódł się skan elementu biblioteki",
+ "ToastSelectAtLeastOneUser": "Zaznacz co najmniej jednego użytkownika",
"ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device",
+ "ToastSendEbookToDeviceSuccess": "Ebook wysłany na urządzenie \"{0}\"",
+ "ToastSeriesSubmitFailedSameName": "Nie można dodać dwóch serii pod tą samą nazwą",
+ "ToastSeriesUpdateFailed": "Aktualizacja serii nie powiodła się",
+ "ToastSeriesUpdateSuccess": "Aktualizacja serii powiodła się",
+ "ToastServerSettingsUpdateSuccess": "Zaktualizowano ustawienia serwera",
+ "ToastSessionCloseFailed": "Nie udało się zamknąć sesji",
"ToastSessionDeleteFailed": "Nie udało się usunąć sesji",
"ToastSessionDeleteSuccess": "Sesja usunięta",
+ "ToastSleepTimerDone": "Słodkich snów... zZzzZz",
"ToastSocketConnected": "Nawiązano połączenie z serwerem",
"ToastSocketDisconnected": "Połączenie z serwerem zostało zamknięte",
"ToastSocketFailedToConnect": "Poączenie z serwerem nie powiodło się",
+ "ToastTitleRequired": "Tytuł jest wymagany",
+ "ToastUnknownError": "Nieznany błąd",
+ "ToastUnlinkOpenIdFailed": "Nie udało się odpiąć użytkownika z OpenID",
+ "ToastUnlinkOpenIdSuccess": "Użytkownik odpięty z OpenID",
+ "ToastUploaderFilepathExistsError": "Ścieżka \"{0}\" już istnieje na serwerze",
"ToastUserDeleteFailed": "Nie udało się usunąć użytkownika",
- "ToastUserDeleteSuccess": "Użytkownik usunięty"
+ "ToastUserDeleteSuccess": "Użytkownik usunięty",
+ "TooltipAddChapters": "Dodaj rozdział(y)",
+ "TooltipAddOneSecond": "Dodaj sekundę",
+ "TooltipAdjustChapterStart": "Kliknij, aby skorygować czas początkowy",
+ "TooltipLockAllChapters": "Zablokuj wszystkie rozdziały",
+ "TooltipLockChapter": "Zablokuj rozdział (przytrzymaj Shift i kliknij, aby zaznaczyć zakres)",
+ "TooltipSubtractOneSecond": "Odejmij sekundę",
+ "TooltipUnlockAllChapters": "Odblokuj wszystkie rozdziały",
+ "TooltipUnlockChapter": "Odblokuj rozdział (przytrzymaj Shift i kliknij, aby zaznaczyć zakres)"
}
diff --git a/client/strings/ru.json b/client/strings/ru.json
index e0b048642..c84fe9dcf 100644
--- a/client/strings/ru.json
+++ b/client/strings/ru.json
@@ -275,7 +275,7 @@
"LabelBonus": "Бонус",
"LabelBooks": "Книги",
"LabelButtonText": "Текст кнопки",
- "LabelByAuthor": "{0}",
+ "LabelByAuthor": "от {0}",
"LabelChangePassword": "Изменить пароль",
"LabelChannels": "Ленты",
"LabelChapterCount": "{0} Главы",
diff --git a/client/strings/sk.json b/client/strings/sk.json
index e0d02898c..e9d1d4c60 100644
--- a/client/strings/sk.json
+++ b/client/strings/sk.json
@@ -275,7 +275,7 @@
"LabelBonus": "Bonus",
"LabelBooks": "Knihy",
"LabelButtonText": "Text tlačidla",
- "LabelByAuthor": "od {0}",
+ "LabelByAuthor": "od",
"LabelChangePassword": "Zmeniť heslo",
"LabelChannels": "Kanály",
"LabelChapterCount": "{0} kapitol",
@@ -383,7 +383,7 @@
"LabelFolders": "Priečinky",
"LabelFontBold": "Tučné",
"LabelFontBoldness": "Hrúbka písma",
- "LabelFontFamily": "Rodina písiem",
+ "LabelFontFamily": "Písmo",
"LabelFontItalic": "Kurzíva",
"LabelFontScale": "Veľkosť písma",
"LabelFontStrikethrough": "Preškrtnuté",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorfný dizajn s drevenými poličkami",
"LabelSettingsChromecastSupport": "Podpora chromecastu",
"LabelSettingsDateFormat": "Formát dátumu",
- "LabelSettingsEnableWatcher": "Automatické skenovanie knižníc pre zmeny",
- "LabelSettingsEnableWatcherForLibrary": "Automaticky skenovať knižnicu pre zmeny",
+ "LabelSettingsEnableWatcher": "Automatické sledovanie zmien v knižniciach",
+ "LabelSettingsEnableWatcherForLibrary": "Automatické sledovanie zmien v knižnici",
"LabelSettingsEnableWatcherHelp": "Povoliť automatické pridávanie/aktualizácie položiek pri zmene súborov. *Vyžaduje reštart servera",
"LabelSettingsEpubsAllowScriptedContent": "Povoliť v e-knihách skriptovaný obsah",
"LabelSettingsEpubsAllowScriptedContentHelp": "Povoliť e-knihám spúšťanie skriptov. Odporúča sa túto voľbu nepovolovať, pokiaľ plne nedôverujete zdrojom súborov e-kníh.",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Ste si istý, že chcete resetnúť kapitoly a zahodiť zmeny, ktoré ste vykonali?",
"MessageRestoreBackupConfirm": "Ste si istí, že chcete obnoviť zálohu vytvorenú",
"MessageRestoreBackupWarning": "Obnovenie zálohy spôsobí kompletný prepis databázy umiestnenej v /config a obrázkov prebalov a autorov v /metadata/items a /metadata/authors.
Zálohy nemenia žiadne súbory v priečinkoch vašej knižnice. Ak ste povolili v nastaveniach servera ukladanie obrázkov prebalov a metadát v priečinkoch knižnice, tieto nie sú zálohované a teda ani prepisované.
Všetky klienti používajúci váš server budú automaticky obnovené.",
- "MessageScheduleLibraryScanNote": "Pre väčšinu používateľov sa odporúča ponechať túto funkciu vypnutú a povoliť nastavenia funkcie sledovania obsahu priečinku. Funkcia sledovania priečinku bude automaticky detekovať zmeny v priečinkoch knižnice. Táto funkcia však nefunguje pre všetky súborové systémy (ako napr. NFS), v tom prípade využite funkciu plánovaného skenovania knižnice.",
+ "MessageScheduleLibraryScanNote": "Pre väčšinu používateľov sa odporúča nechať túto funkciu vypnutú a ponechať zapnuté nastavenie „Automatické sledovanie zmien v knižnici“ – táto funkcia automaticky zistí zmeny vo vašich priečinkoch knižnice. Túto funkciu zapnite, ak „Automatické sledovanie zmien v knižnici“ nefunguje vo vašom súborovom systéme (napr. NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Spustiť každú {0} o {1}",
"MessageSearchResultsFor": "Výsledky vyhľadávania pre",
"MessageSelected": "{0} vybrané",
@@ -1026,6 +1026,8 @@
"ToastCollectionItemsAddFailed": "Pridanie položky/-iek do zbierky zlyhalo",
"ToastCollectionRemoveSuccess": "Zbierka odstránená",
"ToastCollectionUpdateSuccess": "Zbierka aktualizovaná",
+ "ToastConnectionNotAvailable": "Pripojenie je nedostupné. Skúste to neskôr.",
+ "ToastCoverSearchFailed": "Vyhľadanie obalu sa nepodarilo",
"ToastCoverUpdateFailed": "Aktualizácia prebalu zlyhala",
"ToastDateTimeInvalidOrIncomplete": "Dátum a čas sú neplatné alebo neúplné",
"ToastDeleteFileFailed": "Odstránenie súboru zlyhalo",
diff --git a/client/strings/sv.json b/client/strings/sv.json
index 7bd9753b8..e1c08efa5 100644
--- a/client/strings/sv.json
+++ b/client/strings/sv.json
@@ -436,9 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Ingen {0}",
"LabelLibraryItem": "Objekt",
"LabelLibraryName": "Biblioteksnamn",
- "LabelLibrarySortByProgress": "Framsteg: senast uppdaterat",
- "LabelLibrarySortByProgressFinished": "Framsteg: avslutad",
- "LabelLibrarySortByProgressStarted": "Framsteg: påbörjad",
+ "LabelLibrarySortByProgress": "Status: Senast uppdaterad",
+ "LabelLibrarySortByProgressFinished": "Status: Avslutad",
+ "LabelLibrarySortByProgressStarted": "Status: Startad",
"LabelLimit": "Begränsning",
"LabelLineSpacing": "Radavstånd",
"LabelListenAgain": "Lyssna igen",
@@ -821,7 +821,7 @@
"MessageImportantNotice": "Viktig meddelande!",
"MessageInsertChapterBelow": "Infoga kapitel nedanför",
"MessageInvalidAsin": "Felaktig ASIN-kod",
- "MessageItemsSelected": "{0} objekt markerade",
+ "MessageItemsSelected": "{0} objekt valda",
"MessageItemsUpdated": "{0} objekt uppdaterade",
"MessageJoinUsOn": "Anslut dig till oss på",
"MessageLoading": "Laddar...",
diff --git a/client/strings/tr.json b/client/strings/tr.json
index af64a618d..770521cb8 100644
--- a/client/strings/tr.json
+++ b/client/strings/tr.json
@@ -275,7 +275,7 @@
"LabelBonus": "Bonus",
"LabelBooks": "Kitaplar",
"LabelButtonText": "Buton Metni",
- "LabelByAuthor": "Yazar: {0}",
+ "LabelByAuthor": "{0} tarafından",
"LabelChangePassword": "Şifreyi Değiştir",
"LabelChannels": "Kanallar",
"LabelChapterCount": "{0} Bölüm",
@@ -383,7 +383,7 @@
"LabelFolders": "Klasörler",
"LabelFontBold": "Kalın",
"LabelFontBoldness": "Yazı Tipi Kalınlığı",
- "LabelFontFamily": "Yazı Tipi Ailesi",
+ "LabelFontFamily": "Yazı tipi ailesi",
"LabelFontItalic": "İtalik",
"LabelFontScale": "Yazı Tipi Ölçeği",
"LabelFontStrikethrough": "Üstü Çizili",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Ahşap raflı skeuomorfik tasarım",
"LabelSettingsChromecastSupport": "Chromecast desteği",
"LabelSettingsDateFormat": "Tarih Formatı",
- "LabelSettingsEnableWatcher": "Değişiklikler için kütüphaneleri otomatik olarak tara",
- "LabelSettingsEnableWatcherForLibrary": "Değişiklikler için kütüphaneyi otomatik olarak tara",
+ "LabelSettingsEnableWatcher": "Kütüphanelerdeki değişiklikleri otomatik olarak izle",
+ "LabelSettingsEnableWatcherForLibrary": "Kütüphanedeki değişiklikleri otomatik olarak izle",
"LabelSettingsEnableWatcherHelp": "Dosya değişiklikleri algılandığında öğelerin otomatik olarak eklenmesini/güncellenmesini sağlar. *Sunucunun yeniden başlatılmasını gerektirir",
"LabelSettingsEpubsAllowScriptedContent": "Epub'larda betiklenmiş içeriğe izin ver",
"LabelSettingsEpubsAllowScriptedContentHelp": "Epub dosyalarının betik çalıştırmasına izin verin. Epub dosyalarının kaynağına güvenmiyorsanız bu ayarı devre dışı bırakmanız önerilir.",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Bölümleri sıfırlamak ve yaptığınız değişiklikleri geri almak istediğinizden emin misiniz?",
"MessageRestoreBackupConfirm": "Şu tarihte oluşturulan yedeği geri yüklemek istediğinizden emin misiniz",
"MessageRestoreBackupWarning": "Bir yedeği geri yüklemek, /config konumundaki tüm veritabanının ve /metadata/items & /metadata/authors içindeki kapak resimlerinin üzerine yazacaktır.
Yedekler, kütüphane klasörlerinizdeki hiçbir dosyayı değiştirmez. Sunucu ayarlarını kütüphane klasörlerinizde kapak resmi ve üst veri saklamak için etkinleştirdiyseniz, bunlar yedeklenmez veya üzerine yazılmaz.
Sunucunuzu kullanan tüm istemciler otomatik olarak yenilenecektir.",
- "MessageScheduleLibraryScanNote": "Çoğu kullanıcı için, bu özelliği devre dışı bırakıp klasör izleyici ayarını etkin tutmaları önerilir. Klasör izleyici, kütüphane klasörlerinizdeki değişiklikleri otomatik olarak algılayacaktır. Klasör izleyici her dosya sistemi için (NFS gibi) çalışmaz, bu nedenle bunun yerine zamanlanmış kütüphane taramaları kullanılabilir.",
+ "MessageScheduleLibraryScanNote": "Çoğu kullanıcı için bu ayarı pasif bırakması ve \"Kütüphanedeki değişiklikleri otomatik olarak izle\" seçeneğini aktif etmesi önerilir. O seçenek kütüphane dizinlerindeki herhangi bir değişikliği otomatik olarak tespit edecektir. Eğer dosya sisteminiz \"Kütüphanedeki değişiklikleri otomatik olarak izle\" yöntemini desteklemiyorsa (örn; NFS dosya sistemi) bu özelliği aktif edebilirsiniz.",
"MessageScheduleRunEveryWeekdayAtTime": "Her {0} günü saat {1}'de çalıştır",
"MessageSearchResultsFor": "Arama sonuçları",
"MessageSelected": "{0} seçildi",
diff --git a/client/strings/zh-cn.json b/client/strings/zh-cn.json
index 64c41619e..14c70cb10 100644
--- a/client/strings/zh-cn.json
+++ b/client/strings/zh-cn.json
@@ -436,9 +436,9 @@
"LabelLibraryFilterSublistEmpty": "没有 {0}",
"LabelLibraryItem": "媒体库项目",
"LabelLibraryName": "媒体库名称",
- "LabelLibrarySortByProgress": "收听进度: 上次收听时间",
- "LabelLibrarySortByProgressFinished": "收听进度: 已完成的",
- "LabelLibrarySortByProgressStarted": "收听进度: 已开始的",
+ "LabelLibrarySortByProgress": "进度: 上次更新",
+ "LabelLibrarySortByProgressFinished": "进度: 已完成",
+ "LabelLibrarySortByProgressStarted": "进度: 已开始",
"LabelLimit": "限制",
"LabelLineSpacing": "行间距",
"LabelListenAgain": "再次收听",
diff --git a/custom-metadata-provider-specification.yaml b/custom-metadata-provider-specification.yaml
index 71cbba23a..a0ec172ae 100644
--- a/custom-metadata-provider-specification.yaml
+++ b/custom-metadata-provider-specification.yaml
@@ -127,7 +127,7 @@ components:
duration:
type: integer
format: int64
- description: Duration in seconds
+ description: Duration in minutes
SeriesMetadata:
type: object
diff --git a/package-lock.json b/package-lock.json
index 4c9e9b9ea..08707893d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "audiobookshelf",
- "version": "2.32.0",
+ "version": "2.32.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "audiobookshelf",
- "version": "2.32.0",
+ "version": "2.32.1",
"license": "GPL-3.0",
"dependencies": {
"axios": "^0.27.2",
diff --git a/package.json b/package.json
index 2b0d0b6cc..3ee3fb391 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "audiobookshelf",
- "version": "2.32.0",
+ "version": "2.32.1",
"buildNumber": 1,
"description": "Self-hosted audiobook and podcast server",
"main": "index.js",
diff --git a/server/controllers/AuthorController.js b/server/controllers/AuthorController.js
index 50eeda31a..82ed3e50a 100644
--- a/server/controllers/AuthorController.js
+++ b/server/controllers/AuthorController.js
@@ -113,7 +113,7 @@ class AuthorController {
payload.lastFirst = Database.authorModel.getLastFirst(payload.name)
}
- // Check if author name matches another author and merge the authors
+ // Check if author name matches another author in the same library and merge the authors
let existingAuthor = null
if (authorNameUpdate) {
existingAuthor = await Database.authorModel.findOne({
@@ -121,7 +121,8 @@ class AuthorController {
id: {
[sequelize.Op.not]: req.author.id
},
- name: payload.name
+ name: payload.name,
+ libraryId: req.author.libraryId
}
})
}
diff --git a/server/models/User.js b/server/models/User.js
index 36b2eca98..936efde13 100644
--- a/server/models/User.js
+++ b/server/models/User.js
@@ -782,7 +782,14 @@ class User extends Model {
error: 'Library item not found',
statusCode: 404
}
+ } else if (libraryItem.mediaType !== 'book') {
+ Logger.error(`[User] createUpdateMediaProgress: library item ${progressPayload.libraryItemId} is not a book`)
+ return {
+ error: 'Library item is not a book',
+ statusCode: 400
+ }
}
+
mediaItemId = libraryItem.media.id
mediaProgress = libraryItem.media.mediaProgresses?.[0]
}
diff --git a/server/providers/Audible.js b/server/providers/Audible.js
index 6ba01aa83..133d3c0d8 100644
--- a/server/providers/Audible.js
+++ b/server/providers/Audible.js
@@ -57,8 +57,8 @@ class Audible {
})
}
- let genresCleaned = null
- let tagsCleaned = null
+ let genresCleaned = []
+ let tagsCleaned = []
if (genres && Array.isArray(genres)) {
genresCleaned = [...new Set(genres.filter((g) => g.type == 'genre').map((g) => g.name))]
diff --git a/server/utils/queries/libraryItemsBookFilters.js b/server/utils/queries/libraryItemsBookFilters.js
index 494a9564f..7ae1dc866 100644
--- a/server/utils/queries/libraryItemsBookFilters.js
+++ b/server/utils/queries/libraryItemsBookFilters.js
@@ -236,7 +236,7 @@ module.exports = {
} else if (group === 'publishedDecades') {
const startYear = parseInt(value)
const endYear = parseInt(value, 10) + 9
- mediaWhere = Sequelize.where(Sequelize.literal('CAST(`book`.`publishedYear` AS INTEGER)'), {
+ mediaWhere = Sequelize.where(Sequelize.literal('CAST(publishedYear AS INTEGER)'), {
[Sequelize.Op.between]: [startYear, endYear]
})
}