diff --git a/client/components/app/BookShelfCategorized.vue b/client/components/app/BookShelfCategorized.vue index a8e8ae46..4bf8cfbb 100644 --- a/client/components/app/BookShelfCategorized.vue +++ b/client/components/app/BookShelfCategorized.vue @@ -300,8 +300,6 @@ export default { }) }, userUpdated(user) { - if (user.id !== this.$store.state.user.user.id) return - if (user.seriesHideFromContinueListening && user.seriesHideFromContinueListening.length) { this.removeAllSeriesFromContinueSeries(user.seriesHideFromContinueListening) } diff --git a/client/components/controls/LibraryFilterSelect.vue b/client/components/controls/LibraryFilterSelect.vue index 4834a1a2..62a9b803 100644 --- a/client/components/controls/LibraryFilterSelect.vue +++ b/client/components/controls/LibraryFilterSelect.vue @@ -338,18 +338,6 @@ 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 a1fc4109..4b92f6cd 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 }}

@@ -87,7 +87,7 @@

- {{ $strings.LabelCurrently }} {{ mediaMetadata.narratorName }} + {{ $strings.LabelCurrently }} {{ mediaMetadata.narratorName }}

@@ -96,7 +96,7 @@

- {{ $strings.LabelCurrently }} {{ mediaMetadata.descriptionPlain.substr(0, 100) + (mediaMetadata.descriptionPlain.length > 100 ? '...' : '') }} + {{ $strings.LabelCurrently }} {{ mediaMetadata.descriptionPlain.substr(0, 100) + (mediaMetadata.descriptionPlain.length > 100 ? '...' : '') }}

@@ -105,7 +105,7 @@

- {{ $strings.LabelCurrently }} {{ mediaMetadata.publisher }} + {{ $strings.LabelCurrently }} {{ mediaMetadata.publisher }}

@@ -114,7 +114,7 @@

- {{ $strings.LabelCurrently }} {{ mediaMetadata.publishedYear }} + {{ $strings.LabelCurrently }} {{ mediaMetadata.publishedYear }}

diff --git a/client/components/player/PlayerPlaybackControls.vue b/client/components/player/PlayerPlaybackControls.vue index c7cbba63..368e3f35 100644 --- a/client/components/player/PlayerPlaybackControls.vue +++ b/client/components/player/PlayerPlaybackControls.vue @@ -8,7 +8,7 @@ - diff --git a/client/plugins/i18n.js b/client/plugins/i18n.js index 0184ca9e..83e748f2 100644 --- a/client/plugins/i18n.js +++ b/client/plugins/i18n.js @@ -6,7 +6,6 @@ const defaultCode = 'en-us' const languageCodeMap = { ar: { label: 'عربي', dateFnsLocale: 'ar' }, - be: { label: 'Беларуская', dateFnsLocale: 'be' }, bg: { label: 'Български', dateFnsLocale: 'bg' }, bn: { label: 'বাংলা', dateFnsLocale: 'bn' }, ca: { label: 'Català', dateFnsLocale: 'ca' }, @@ -29,7 +28,6 @@ const languageCodeMap = { pl: { label: 'Polski', dateFnsLocale: 'pl' }, 'pt-br': { label: 'Português (Brasil)', dateFnsLocale: 'ptBR' }, ru: { label: 'Русский', dateFnsLocale: 'ru' }, - sk: { label: 'Slovenčina', dateFnsLocale: 'sk' }, sl: { label: 'Slovenščina', dateFnsLocale: 'sl' }, sv: { label: 'Svenska', dateFnsLocale: 'sv' }, tr: { label: 'Türkçe', dateFnsLocale: 'tr' }, @@ -50,7 +48,6 @@ const podcastSearchRegionMap = { au: { label: 'Australia' }, br: { label: 'Brasil' }, be: { label: 'België / Belgique / Belgien' }, - by: { label: 'Беларусь' }, cz: { label: 'Česko' }, dk: { label: 'Danmark' }, de: { label: 'Deutschland' }, @@ -70,7 +67,6 @@ const podcastSearchRegionMap = { pt: { label: 'Portugal' }, ru: { label: 'Россия' }, ch: { label: 'Schweiz / Suisse / Svizzera' }, - sk: { label: 'Slovensko' }, se: { label: 'Sverige' }, vn: { label: 'Việt Nam' }, ua: { label: 'Україна' }, diff --git a/client/strings/be.json b/client/strings/be.json index 6dbef9cb..f812a13c 100644 --- a/client/strings/be.json +++ b/client/strings/be.json @@ -7,18 +7,18 @@ "ButtonAddPodcasts": "Дадаць падкасты", "ButtonAddUser": "Дадаць карыстальніка", "ButtonAddYourFirstLibrary": "Дадайце сваю першую бібліятэку", - "ButtonApply": "Прымяніць", - "ButtonApplyChapters": "Прымяніць раздзелы", + "ButtonApply": "Ужыць", + "ButtonApplyChapters": "Ужыць раздзелы", "ButtonAuthors": "Аўтары", "ButtonBack": "Назад", "ButtonBatchEditPopulateFromExisting": "Запоўніць з існуючага", "ButtonBatchEditPopulateMapDetails": "Запоўніць падрабязнасці карты", - "ButtonBrowseForFolder": "Агляд папак", + "ButtonBrowseForFolder": "Знайсці тэчку", "ButtonCancel": "Скасаваць", "ButtonCancelEncode": "Скасаваць кадзіраванне", "ButtonChangeRootPassword": "Зменіце Root пароль", - "ButtonCheckAndDownloadNewEpisodes": "Праверыць і спампаваць новыя выпускі", - "ButtonChooseAFolder": "Выбраць папку", + "ButtonCheckAndDownloadNewEpisodes": "Праверыць і спампаваць новыя эпізоды", + "ButtonChooseAFolder": "Выбраць тэчку", "ButtonChooseFiles": "Выбраць файлы", "ButtonClearFilter": "Ачысціць фільтр", "ButtonClose": "Закрыць", @@ -26,7 +26,7 @@ "ButtonCloseSession": "Закрыць адкрыты сеанс", "ButtonCollections": "Калекцыі", "ButtonConfigureScanner": "Наладзіць сканер", - "ButtonCreate": "Стварыць", + "ButtonCreate": "Ствараць", "ButtonCreateBackup": "Стварыць рэзервовую копію", "ButtonDelete": "Выдаліць", "ButtonDownloadQueue": "Чарга", @@ -36,7 +36,7 @@ "ButtonEnable": "Уключыць", "ButtonFireAndFail": "Агонь і няўдача", "ButtonFireOnTest": "Тэст на вогнеўстойлівасць", - "ButtonForceReScan": "Прымусова паўторна сканіраваць", + "ButtonForceReScan": "Прымусовае паўторнае сканаванне", "ButtonFullPath": "Поўны шлях", "ButtonHide": "Схаваць", "ButtonHome": "Галоўная", @@ -47,22 +47,22 @@ "ButtonLibrary": "Бібліятэка", "ButtonLogout": "Выйсці", "ButtonLookup": "Пошук", - "ButtonManageTracks": "Кіраванне трэкамі", - "ButtonMapChapterTitles": "Супаставіць загалоўкі раздзелаў", + "ButtonManageTracks": "Кіраванне дарожкамі", + "ButtonMapChapterTitles": "Супаставіць назвы раздзелаў", "ButtonMatchAllAuthors": "Супадзенне ўсіх аўтараў", "ButtonMatchBooks": "Падбор кніг", "ButtonNevermind": "Няважна", "ButtonNext": "Далей", "ButtonNextChapter": "Наступны раздзел", "ButtonNextItemInQueue": "Наступны элемент у чарзе", - "ButtonOk": "ОК", + "ButtonOk": "Добра", "ButtonOpenFeed": "Адкрыць стужку", "ButtonOpenManager": "Адкрыць менеджар", - "ButtonPause": "Прыпыніць", + "ButtonPause": "Паўза", "ButtonPlay": "Прайграць", "ButtonPlayAll": "Прайграць усё", "ButtonPlaying": "Прайграваецца", - "ButtonPlaylists": "Плэй-лісты", + "ButtonPlaylists": "Спісы прайгравання", "ButtonPrevious": "Папярэдні", "ButtonPreviousChapter": "Папярэдні раздзел", "ButtonProbeAudioFile": "Праверыць аўдыяфайл", @@ -71,9 +71,9 @@ "ButtonQueueAddItem": "Дадаць у чаргу", "ButtonQueueRemoveItem": "Выдаліць з чаргі", "ButtonQuickEmbed": "Хуткае ўбудаванне", - "ButtonQuickEmbedMetadata": "Хуткае ўбудаванне метаданых", + "ButtonQuickEmbedMetadata": "Хуткае ўбудаванне метададзеных", "ButtonQuickMatch": "Хуткі пошук", - "ButtonReScan": "Паўторна сканіраваць", + "ButtonReScan": "Паўторнае сканаванне", "ButtonRead": "Чытаць", "ButtonReadLess": "Чытаць менш", "ButtonReadMore": "Чытаць больш", @@ -85,7 +85,7 @@ "ButtonRemoveFromContinueReading": "Выдаліць з Працягваць чытанне", "ButtonRemoveSeriesFromContinueSeries": "Выдаліць серыю з Працягваць серыю", "ButtonReset": "Скінуць", - "ButtonResetToDefault": "Скінуць да прадвызначаных", + "ButtonResetToDefault": "Скінуць па змаўчанні", "ButtonRestore": "Аднавіць", "ButtonSave": "Захаваць", "ButtonSaveAndClose": "Захаваць і зачыніць", @@ -95,14 +95,14 @@ "ButtonScrollLeft": "Пракруціць улева", "ButtonScrollRight": "Пракруціць направа", "ButtonSearch": "Пошук", - "ButtonSelectFolderPath": "Выбраць шлях да папкі", + "ButtonSelectFolderPath": "Выбраць шлях да тэчкі", "ButtonSeries": "Серыі", - "ButtonSetChaptersFromTracks": "Задаць раздзелы з трэкаў", + "ButtonSetChaptersFromTracks": "Усталяваць раздзелы з трэкаў", "ButtonShare": "Падзяліцца", "ButtonShiftTimes": "Карэкцыя часу", "ButtonShow": "Паказаць", "ButtonStartM4BEncode": "Пачаць кадзіраванне ў M4B", - "ButtonStartMetadataEmbed": "Пачаць убудаванне метаданых", + "ButtonStartMetadataEmbed": "Пачаць убудаванне метададзеных", "ButtonStats": "Статыстыка", "ButtonSubmit": "Адправіць", "ButtonTest": "Тэст", @@ -115,43 +115,42 @@ "ButtonUserEdit": "Рэдагаваць карыстальніка {0}", "ButtonViewAll": "Прагледзець усе", "ButtonYes": "Так", - "ErrorUploadFetchMetadataAPI": "Памылка пры атрыманні метаданых", - "ErrorUploadFetchMetadataNoResults": "Не ўдалося атрымаць метаданыя – паспрабуйце абнавіць загаловак і/або аўтара", - "ErrorUploadLacksTitle": "Павінен быць загаловак", + "ErrorUploadFetchMetadataAPI": "Памылка пры атрыманні метададзеных", + "ErrorUploadFetchMetadataNoResults": "Не ўдалося атрымаць метададзеныя – паспрабуйце абнавіць назву і/або аўтара", + "ErrorUploadLacksTitle": "Павінна быць назва", "HeaderAccount": "Уліковы запіс", - "HeaderAddCustomMetadataProvider": "Дадаванне карыстальніцкага пастаўшчыка метаданых", + "HeaderAddCustomMetadataProvider": "Дадаць карыстальніцкага пастаўшчыка метададзенных", "HeaderAdvanced": "Дадаткова", "HeaderApiKeys": "API-ключы", "HeaderAppriseNotificationSettings": "Налады апавяшчэнняў Apprise", - "HeaderAudioTracks": "Аўдыятрэкі", + "HeaderAudioTracks": "Аўдыядарожкі", "HeaderAudiobookTools": "Сродкі кіравання файламі аўдыякніг", "HeaderAuthentication": "Аўтэнтыфікацыя", "HeaderBackups": "Рэзервовыя копіі", - "HeaderBulkChapterModal": "Дадаць некалькі раздзелаў", "HeaderChangePassword": "Змяніць пароль", "HeaderChapters": "Раздзелы", - "HeaderChooseAFolder": "Выберыце папку", + "HeaderChooseAFolder": "Выбраць тэчку", "HeaderCollection": "Калекцыя", "HeaderCollectionItems": "Элементы калекцыі", "HeaderCover": "Вокладка", - "HeaderCurrentDownloads": "Бягучыя спампоўванні", + "HeaderCurrentDownloads": "Бягучыя спампоўкі", "HeaderCustomMessageOnLogin": "Карыстальніцкае паведамленне пры ўваходзе", - "HeaderCustomMetadataProviders": "Карыстальніцкія пастаўшчыкі метаданых", + "HeaderCustomMetadataProviders": "Карыстальніцкія крыніцы метададзеных", "HeaderDetails": "Падрабязнасці", "HeaderDownloadQueue": "Чарга спамповак", "HeaderEbookFiles": "Файлы электронных кніг", "HeaderEmail": "Электронная пошта", "HeaderEmailSettings": "Налады электроннай пошты", - "HeaderEpisodes": "Выпускі", + "HeaderEpisodes": "Эпізоды", "HeaderEreaderDevices": "Прылады для чытання", "HeaderEreaderSettings": "Налады прылады для чытання", "HeaderFiles": "Файлы", "HeaderFindChapters": "Знайсці раздзелы", "HeaderIgnoredFiles": "Ігнараваныя файлы", "HeaderItemFiles": "Файлы элементаў", - "HeaderItemMetadataUtils": "Утыліты для метаданых элементаў", + "HeaderItemMetadataUtils": "Утыліты для метададзеных элементаў", "HeaderLastListeningSession": "Апошні сеанс праслухоўвання", - "HeaderLatestEpisodes": "Апошнія выпускі", + "HeaderLatestEpisodes": "Апошнія эпізоды", "HeaderLibraries": "Бібліятэкі", "HeaderLibraryFiles": "Файлы бібліятэкі", "HeaderLibraryStats": "Статыстыка бібліятэкі", @@ -163,8 +162,8 @@ "HeaderManageTags": "Кіраванне тэгамі", "HeaderMapDetails": "Падрабязнасці адлюстравання", "HeaderMatch": "Супадзенне", - "HeaderMetadataOrderOfPrecedence": "Парадак прыярытэту метаданых", - "HeaderMetadataToEmbed": "Метаданыя для ўбудавання", + "HeaderMetadataOrderOfPrecedence": "Парадак прыярытэтнасці метададзеных", + "HeaderMetadataToEmbed": "Метададзеныя для ўбудавання", "HeaderNewAccount": "Новы ўліковы запіс", "HeaderNewApiKey": "Новы API-ключ", "HeaderNewLibrary": "Новая бібліятэка", @@ -179,19 +178,19 @@ "HeaderPermissions": "Дазволы", "HeaderPlayerQueue": "Чарга прайгравання", "HeaderPlayerSettings": "Налады прайгравальніка", - "HeaderPlaylist": "Плэй-ліст", - "HeaderPlaylistItems": "Элементы плэй-ліста", + "HeaderPlaylist": "Спіс прайгравання", + "HeaderPlaylistItems": "Элементы спіса прайгравання", "HeaderPodcastsToAdd": "Падкасты для дадання", "HeaderPresets": "Прадустаноўкі", "HeaderPreviewCover": "Прадпрагляд вокладкі", "HeaderRSSFeedGeneral": "Падрабязнасці RSS", "HeaderRSSFeedIsOpen": "RSS-стужка адкрытая", "HeaderRSSFeeds": "RSS-стужкі", - "HeaderRemoveEpisode": "Выдаліць выпуск", - "HeaderRemoveEpisodes": "Выдаліць {0} выпускаў", + "HeaderRemoveEpisode": "Выдаліць эпізод", + "HeaderRemoveEpisodes": "Выдаліць {0} эпізодаў", "HeaderSavedMediaProgress": "Захаваны прагрэс медыя", "HeaderSchedule": "Расклад", - "HeaderScheduleEpisodeDownloads": "Расклад аўтаматычных спампоўванняў выпускаў", + "HeaderScheduleEpisodeDownloads": "Расклад аўтаматычных спамповак эпізодаў", "HeaderScheduleLibraryScans": "Расклад аўтаматычнага сканавання бібліятэкі", "HeaderSession": "Сеанс", "HeaderSetBackupSchedule": "Наладзіць расклад рэзервовага капіравання", @@ -200,7 +199,6 @@ "HeaderSettingsExperimental": "Эксперыментальныя функцыі", "HeaderSettingsGeneral": "Агульныя", "HeaderSettingsScanner": "Сканер", - "HeaderSettingsSecurity": "Бяспека", "HeaderSettingsWebClient": "Вэб-кліент", "HeaderSleepTimer": "Таймер сну", "HeaderStatsLargestItems": "Найбуйнейшыя элементы", @@ -231,13 +229,13 @@ "LabelActivity": "Дзеянне", "LabelAddToCollection": "Дадаць у калекцыю", "LabelAddToCollectionBatch": "Дадаць {0} кніг у калекцыю", - "LabelAddToPlaylist": "Дадаць у плэй-ліст", - "LabelAddToPlaylistBatch": "Дадаць {0} элементаў у плэй-ліст", + "LabelAddToPlaylist": "Дадаць у спіс прайгравання", + "LabelAddToPlaylistBatch": "Дадаць {0} элементаў у спіс прайгравання", "LabelAddedAt": "Дата дабаўлення", "LabelAddedDate": "Дададзена {0}", "LabelAdminUsersOnly": "Толькі для адміністратараў", "LabelAll": "Усе", - "LabelAllEpisodesDownloaded": "Усе выпускі спампаваныя", + "LabelAllEpisodesDownloaded": "Усе эпізоды спампаваныя", "LabelAllUsers": "Усе карыстальнікі", "LabelAllUsersExcludingGuests": "Усе карыстальнікі, акрамя гасцей", "LabelAllUsersIncludingGuests": "Усе карыстальнікі, уключаючы гасцей", @@ -248,22 +246,22 @@ "LabelApiKeyUserDescription": "Гэты API-ключ будзе мець тыя ж правы, што і карыстальнік, ад імя якога ён дзейнічае. У журналах гэта будзе выглядаць так, быццам запыт робіць сам карыстальнік.", "LabelApiToken": "Токен API", "LabelAppend": "Дадаць", - "LabelAudioBitrate": "Бітрэйт аўдыя (напрыклад, 128к)", - "LabelAudioChannels": "Аўдыяканалы (1 або 2)", - "LabelAudioCodec": "Аўдыякодэк", + "LabelAudioBitrate": "Бітрэйт аўдыё (напрыклад, 128к)", + "LabelAudioChannels": "Аўдыёканалы (1 або 2)", + "LabelAudioCodec": "Аўдыёкодэк", "LabelAuthor": "Аўтар", "LabelAuthorFirstLast": "Аўтар (Імя Прозвішча)", "LabelAuthorLastFirst": "Аўтар (Прозвішча, Імя)", "LabelAuthors": "Аўтары", - "LabelAutoDownloadEpisodes": "Аўтаматычна спампоўваць выпускі", - "LabelAutoFetchMetadata": "Аўтаматычнае атрыманне метаданых", - "LabelAutoFetchMetadataHelp": "Атрыманне звестак пра загаловак, аўтара і серыю для спрашчэння запампоўвання. Пасля запампоўвання, магчыма, спатрэбіцца супаставіць дадатковыя метаданыя.", + "LabelAutoDownloadEpisodes": "Аўтаматычнае спампаванне эпізодаў", + "LabelAutoFetchMetadata": "Аўтаматычнае атрыманне метададзеных", + "LabelAutoFetchMetadataHelp": "Атрыманне звестак пра назву, аўтара і серыю для падыходнага фарматавання перад загрузкай. Далей можа быць неабходна дапоўніць метададзеныя.", "LabelAutoLaunch": "Аўтазапуск", - "LabelAutoLaunchDescription": "Аўтаматычна перанакіроўваць да пастаўшчыка аўтэнтыфікацыі пры пераходзе на старонку ўваходу (ручное пераключэнне праз шлях /login?autoLaunch=0)", + "LabelAutoLaunchDescription": "Аўтаматычна перанакіроўваць да пастаўшчыка аўтэнтыфікацыі пры переходзе на старонку ўваходу (ручное пераключэнне праз шлях /login?autoLaunch=0)", "LabelAutoRegister": "Аўтарэгістрацыя", "LabelAutoRegisterDescription": "Аўтаматычна ствараць новых карыстальнікаў пасля ўваходу ў сістэму", "LabelBackToUser": "Вярнуцца да карыстальніка", - "LabelBackupAudioFiles": "Рэзервовае капіраванне аўдыяфайлаў", + "LabelBackupAudioFiles": "Рэзервовае капіраванне аўдыёфайлаў", "LabelBackupLocation": "Месцазнаходжанне рэзервовых копій", "LabelBackupsEnableAutomaticBackups": "Аўтаматычнае рэзервовае капіраванне", "LabelBackupsEnableAutomaticBackupsHelp": "Рэзервовыя копіі захаваныя ў /metadata/backups", @@ -275,11 +273,11 @@ "LabelBonus": "Бонус", "LabelBooks": "Кнігі", "LabelButtonText": "Тэкст кнопкі", - "LabelByAuthor": "– {0}", + "LabelByAuthor": "ад {0}", "LabelChangePassword": "Змяніць пароль", "LabelChannels": "Каналы", "LabelChapterCount": "{0} раздзелаў", - "LabelChapterTitle": "Загаловак раздзела", + "LabelChapterTitle": "Назва раздзела", "LabelChapters": "Раздзелы", "LabelChaptersFound": "раздзелаў знойдзена", "LabelClickForMoreInfo": "Націсніце для больш падрабязнай інфармацыі", @@ -290,15 +288,14 @@ "LabelCollapseSubSeries": "Згарнуць падсерыі", "LabelCollection": "Калекцыя", "LabelCollections": "Калекцыі", - "LabelComplete": "Завяршыць", + "LabelComplete": "Завершана", "LabelConfirmPassword": "Пацвердзіце пароль", "LabelContinueListening": "Працягваць слухаць", "LabelContinueReading": "Працягнуць чытанне", "LabelContinueSeries": "Працягнуць серыі", - "LabelCorsAllowed": "Дазволеныя крыніцы CORS", "LabelCover": "Вокладка", - "LabelCoverImageURL": "URL-адрас відарыса вокладкі", - "LabelCoverProvider": "Пастаўшчык вокладак", + "LabelCoverImageURL": "URL выявы вокладкі", + "LabelCoverProvider": "Крыніца вокладак", "LabelCreatedAt": "Дата стварэння", "LabelCronExpression": "Запіс Cron", "LabelCurrent": "Бягучы", @@ -309,16 +306,15 @@ "LabelDeleteFromFileSystemCheckbox": "Выдаліць з файлавай сістэмы (зніміце галачку, каб выдаліць толькі з базы даных)", "LabelDescription": "Апісанне", "LabelDeselectAll": "Скасаваць выбар усяго", - "LabelDetectedPattern": "Выяўлены ўзор:", "LabelDevice": "Прылада", "LabelDeviceInfo": "Інфармацыя пра прыладу", "LabelDeviceIsAvailableTo": "Прылада даступная для...", "LabelDirectory": "Каталог", - "LabelDiscFromFilename": "Дыск з файла", - "LabelDiscFromMetadata": "Дыск з метаданых", + "LabelDiscFromFilename": "Дыск з імя файла", + "LabelDiscFromMetadata": "Дыск па метададзеных", "LabelDiscover": "Знайсці", "LabelDownload": "Спампаваць", - "LabelDownloadNEpisodes": "Спампавана {0} выпускаў", + "LabelDownloadNEpisodes": "Спампована {0} эпізодаў", "LabelDownloadable": "Спампоўваецца", "LabelDuration": "Працягласць", "LabelDurationComparisonExactMatch": "(дакладнае супадзенне)", @@ -337,24 +333,18 @@ "LabelEmailSettingsTestAddress": "Тэставы адрас", "LabelEmbeddedCover": "Убудаваная вокладка", "LabelEnable": "Уключыць", - "LabelEncodingBackupLocation": "Рэзервовая копія арыгінальных аўдыяфайлаў будзе захавана ў:", - "LabelEncodingChaptersNotEmbedded": "Раздзелы не ўбудоўваюцца ў аўдыякнігі з некалькімі трэкамі.", + "LabelEncodingBackupLocation": "Рэзервовая копія вашых арыгінальных аўдыёфайлаў будзе захавана ў:", + "LabelEncodingChaptersNotEmbedded": "Раздзелы не ўбудаваны ў шматдарожкавыя аўдыякнігі.", "LabelEncodingClearItemCache": "Пераканайцеся, што перыядычна ачышчаеце кэш элементаў.", - "LabelEncodingFinishedM4B": "Гатовы файл M4B будзе змешчаны ў вашу папку з аўдыякнігамі ў:", - "LabelEncodingInfoEmbedded": "Метаданыя будуць убудаваны ў аўдыятрэкі ўнутры папкі з аўдыякнігамі.", + "LabelEncodingFinishedM4B": "Гатовы файл M4B будзе змешчаны ў вашу тэчку з аўдыякнігамі па адрасе:", + "LabelEncodingInfoEmbedded": "Метададзеныя будуць убудаваны ў аўдыядарожкі ўнутры вашай тэчкі з аўдыякнігамі.", "LabelEncodingStartedNavigation": "Пасля запуску задачы вы можаце перайсці на іншую старонку.", "LabelEncodingTimeWarning": "Кадаванне можа заняць да 30 хвілін.", - "LabelEncodingWarningAdvancedSettings": "Увага: Не абнаўляйце гэтыя налады, калі вы не знаёмыя з параметрамі кадавання ffmpeg.", - "LabelEncodingWatcherDisabled": "Калі ў вас адключана адсочванне змен у папцы, пасля трэба будзе паўторна сканіраваць гэту аўдыякнігу.", "LabelEnd": "Канец", "LabelEndOfChapter": "Канец раздзела", - "LabelEpisode": "Выпуск", - "LabelEpisodeNotLinkedToRssFeed": "Выпуск не звязаны з RSS-стужкай", - "LabelEpisodeNumber": "Выпуск №{0}", - "LabelEpisodeTitle": "Загаловак выпуску", - "LabelEpisodeType": "Тып выпуску", - "LabelEpisodeUrlFromRssFeed": "URL-адрас выпуску з RSS-стужкі", - "LabelEpisodes": "Выпускі", + "LabelEpisode": "Эпізод", + "LabelEpisodeNotLinkedToRssFeed": "Эпізод не звязаны з RSS-стужкай", + "LabelEpisodeUrlFromRssFeed": "URL эпізоду з RSS-стужкі", "LabelEpisodic": "Эпізадычны", "LabelExample": "Прыклад", "LabelExpandSeries": "Разгарнуць серыю", @@ -363,48 +353,27 @@ "LabelExpiresAt": "Тэрмін дзеяння заканчваецца ў", "LabelExpiresInSeconds": "Тэрмін дзеяння заканчваецца праз (секунд)", "LabelExpiresNever": "Ніколі", - "LabelExplicit": "Непрыстойнае", - "LabelExplicitChecked": "Непрыстойнае (пазначана)", - "LabelExplicitUnchecked": "Прыстойнае (не пазначана)", + "LabelExplicit": "Відверты", "LabelExportOPML": "Экспарт OPML", "LabelFeedURL": "URL стужкі", - "LabelFetchingMetadata": "Атрыманне метаданых", + "LabelFetchingMetadata": "Атрыманне метададзеных", "LabelFile": "Файл", "LabelFileBirthtime": "Час стварэння файла", - "LabelFileBornDate": "Створаны {0}", "LabelFileModified": "Час змянення файла", - "LabelFileModifiedDate": "Зменены {0}", - "LabelFilename": "Назва файла", - "LabelFilterByUser": "Фільтраваць па карыстальніку", - "LabelFindEpisodes": "Знайсці выпускі", - "LabelFinished": "Завершана", - "LabelFinishedDate": "Завершана {0}", - "LabelFolder": "Папка", - "LabelFolders": "Папкі", - "LabelFontBold": "Тоўсты", + "LabelFilename": "Імя файла", + "LabelFinished": "Скончана", + "LabelFolder": "Тэчка", "LabelFontBoldness": "Таўшчыня шрыфта", - "LabelFontFamily": "Сямейства шрыфтоў", - "LabelFontItalic": "Курсіў", "LabelFontScale": "Памер шрыфту", - "LabelFontStrikethrough": "Перакрэслены", - "LabelFormat": "Фармат", - "LabelFull": "Поўны", "LabelGenre": "Жанр", "LabelGenres": "Жанры", - "LabelHardDeleteFile": "Жорстка выдаляць файл", "LabelHasEbook": "Мае электронную кнігу", "LabelHasSupplementaryEbook": "Мае дадатковую электронную кнігу", "LabelHideSubtitles": "Схаваць падзагалоўкі", - "LabelHighestPriority": "Найвышэйшы прыярытэт", "LabelHost": "Хост", - "LabelHour": "Гадзіна", - "LabelHours": "Гадзіны", - "LabelIcon": "Значок", - "LabelImageURLFromTheWeb": "URL-адрас відарыса з інтэрнэту", + "LabelImageURLFromTheWeb": "URL выявы з інтэрнэту", "LabelInProgress": "У працэсе", - "LabelIncludeInTracklist": "Уключыць у спіс трэкаў", "LabelIncomplete": "Незавершана", - "LabelInterval": "Інтэрвал", "LabelIntervalCustomDailyWeekly": "Карыстальніцкі штодзённы/штотыднёвы", "LabelIntervalEvery12Hours": "Кожныя 12 гадзін", "LabelIntervalEvery15Minutes": "Кожныя 15 хвілін", @@ -416,14 +385,11 @@ "LabelIntervalEveryMinute": "Кожную хвіліну", "LabelInvert": "Інвертаваць", "LabelItem": "Элемент", - "LabelJumpBackwardAmount": "Час пераходу назад", - "LabelJumpForwardAmount": "Час пераходу наперад", "LabelLanguage": "Мова", - "LabelLanguageDefaultServer": "Прадвызначаная мова сервера", + "LabelLanguageDefaultServer": "Мова сервера па змаўчанні", "LabelLanguages": "Мовы", "LabelLastBookAdded": "Апошняя дададзеная кніга", "LabelLastBookUpdated": "Апошняя абноўленая кніга", - "LabelLastProgressDate": "Апошні прагрэс: {0}", "LabelLastSeen": "Апошні прагляд", "LabelLastTime": "Апошні раз", "LabelLastUpdate": "Апошняе абнаўленне", @@ -435,109 +401,43 @@ "LabelLibrary": "Бібліятэка", "LabelLibraryFilterSublistEmpty": "Не {0}", "LabelLibraryItem": "Элемент бібліятэкі", - "LabelLibraryName": "Назва бібліятэкі", - "LabelLibrarySortByProgress": "Прагрэс: апошняе абнаўленне", - "LabelLibrarySortByProgressFinished": "Прагрэс: завершана", - "LabelLibrarySortByProgressStarted": "Прагрэс: пачата", + "LabelLibraryName": "Імя бібліятэкі", + "LabelLibrarySortByProgress": "Прагрэс абноўлены", "LabelLimit": "Абмежаванне", "LabelLineSpacing": "Міжрадковы інтэрвал", "LabelListenAgain": "Паслухаць зноў", - "LabelLogLevelDebug": "Debug", - "LabelLogLevelInfo": "Info", - "LabelLogLevelWarn": "Warn", - "LabelLookForNewEpisodesAfterDate": "Шукаць новыя выпускі пасля гэтай даты", - "LabelLowestPriority": "Найніжэйшы прыярытэт", - "LabelMatchConfidence": "Упэўненасць", - "LabelMatchExistingUsersBy": "Параўноўваць існуючых карыстальнікаў па", - "LabelMatchExistingUsersByDescription": "Выкарыстоўваецца для падключэння існуючых карыстальнікаў. Пасля падключэння карыстальнікі будуць супастаўляцца з дапамогай унікальнага ідэнтыфікатара ад пастаўшчыка SSO", - "LabelMaxEpisodesToDownload": "Максімальная колькасць выпускаў для спампоўвання. 0 – неабмежаваная колькасць.", - "LabelMaxEpisodesToDownloadPerCheck": "Максімальная колькасць новых выпускаў для спампоўвання за праверку", - "LabelMaxEpisodesToKeep": "Максімальная колькасць выпускаў, якія будуць захоўвацца", - "LabelMaxEpisodesToKeepHelp": "Значэнне 0 не задае максімальнага абмежавання. Пасля аўтаматычнага спампоўвання новага выпуску будзе выдалены самы стары выпуск, калі ў вас больш за X выпускаў. Пры кожным новым спампоўванні будзе выдаляцца толькі 1 выпуск.", + "LabelMaxEpisodesToDownload": "Максімальная колькасць эпізодаў для спампоўкі. Выкарыстоўвайце 0 для неабмежаванай колькасці.", + "LabelMaxEpisodesToDownloadPerCheck": "Максімальная колькасць новых эпізодаў для спампоўкі за праверку", + "LabelMaxEpisodesToKeepHelp": "Значэнне 0 не ўстанаўлівае максімальнага абмежавання. Пасля аўтаматычнай спампоўкі новага эпізоду будзе выдалены самы стары эпізод, калі ў вас больш за X эпізодаў. Пры кожнай новай спампоўцы будзе выдаляцца толькі 1 эпізод.", "LabelMediaPlayer": "Медыяпрайгравальнік", "LabelMediaType": "Тып медыя", - "LabelMetaTag": "Метатэг", - "LabelMetaTags": "Метатэгі", - "LabelMetadataOrderOfPrecedenceDescription": "Крыніцы метаданых з вышэйшым прыярытэтам будуць замяняць крыніцы з ніжэйшым прыярытэтам", - "LabelMetadataProvider": "Пастаўшчык метаданых", - "LabelMinute": "Хвіліна", - "LabelMinutes": "Хвіліны", + "LabelMetadataOrderOfPrecedenceDescription": "Крыніцы метададзеных з вышэйшым прыярытэтам будуць замяняць крыніцы з ніжэйшым прыярытэтам", + "LabelMetadataProvider": "Пастаўшчык метададзеных", "LabelMissing": "Адсутнічае", - "LabelMissingEbook": "Няма электроннай кнігі", - "LabelMissingSupplementaryEbook": "Няма дадатковай электроннай кнігі", - "LabelMobileRedirectURIs": "Дазволеныя URI перанакіравання для мабільных прылад", - "LabelMobileRedirectURIsDescription": "Гэта белы спіс дапушчальных URI перанакіравання для мабільных праграм. Стандартным з'яўляецца audiobookshelf://oauth, які вы можаце выдаліць або дапоўніць дадатковымі URI для інтэграцыі са староннімі праграмамі. Выкарыстанне зорачкі (*) у якасці адзінага запісу дазваляе любы URI.", "LabelMore": "Больш", "LabelMoreInfo": "Больш інфармацыі", - "LabelName": "Назва", - "LabelNarrator": "Дыктар", - "LabelNarrators": "Дыктары", - "LabelNew": "Новы", - "LabelNewPassword": "Новы пароль", + "LabelName": "Імя", + "LabelNarrator": "Чытальнік", + "LabelNarrators": "Чытальнікі", "LabelNewestAuthors": "Новыя аўтары", - "LabelNewestEpisodes": "Найноўшыя выпускі", - "LabelNextBackupDate": "Дата наступнага рэзервовага капіравання", - "LabelNextChapters": "Наступныя раздзелы:", - "LabelNextScheduledRun": "Наступны запланаваны запуск", - "LabelNoApiKeys": "Няма ключоў API", - "LabelNoCustomMetadataProviders": "Няма карыстальніцкіх пастаўшчыкоў метаданых", - "LabelNoEpisodesSelected": "Не выбрана ніводнага выпуску", - "LabelNotFinished": "Незавершана", + "LabelNewestEpisodes": "Новыя эпізоды", + "LabelNoCustomMetadataProviders": "Няма карыстацкіх пастаўшчыкоў метададзеных", + "LabelNotFinished": "Не скончана", "LabelNotStarted": "Не пачата", - "LabelNotes": "Заўвагі", - "LabelNotificationAppriseURL": "URL-адрасы Apprise", - "LabelNotificationAvailableVariables": "Даступныя пераменныя", - "LabelNotificationBodyTemplate": "Шаблон зместу", - "LabelNotificationEvent": "Падзея апавяшчэння", - "LabelNotificationTitleTemplate": "Шаблон загалоўка", - "LabelNotificationsMaxFailedAttempts": "Максімальная колькасць няўдалых спроб", "LabelNotificationsMaxFailedAttemptsHelp": "Апавяшчэнні адключаюцца пасля таго, як не ўдаецца іх адправіць гэтулькі разоў", - "LabelNotificationsMaxQueueSize": "Максімальны памер чаргі для падзей апавяшчэнняў", - "LabelNotificationsMaxQueueSizeHelp": "Падзеі могуць спрацоўваць толькі адзін раз у секунду. Падзеі будуць ігнаравацца пры дасягненні максімальнага памеру чаргі. Гэта прадухіляе рассылку спаму.", - "LabelNumberOfBooks": "Колькасць кніг", - "LabelNumberOfChapters": "Колькасць раздзелаў:", - "LabelNumberOfEpisodes": "Колькасць выпускаў", - "LabelOpenIDAdvancedPermsClaimDescription": "Назва прэтэнзіі OpenID, якая змяшчае пашыраныя дазволы для дзеянняў карыстальніка ў праграме, якія будуць прымяняцца да роляў, якія не з'яўляюцца адміністратарамі (калі наладжана). Калі прэтэнзія адсутнічае ў адказе, доступ да ABS будзе забаронены. Калі адсутнічае адзін параметр, ён будзе разглядацца як false. Пераканайцеся, што прэтэнзія пастаўшчыка ідэнтыфікацыі адпавядае чаканай структуры:", - "LabelOpenIDClaims": "Пакіньце наступныя параметры пустымі, каб адключыць пашыранае прызначэнне груп і дазволаў, аўтаматычна прызначаючы групу \"Карыстальнік\".", - "LabelOpenIDGroupClaimDescription": "Назва прэтэнзіі OpenID, якая змяшчае спіс груп карыстальніка. Звычайна іх называюць групамі. Калі наладжана, праграма будзе аўтаматычна прызначаць ролі на аснове членства карыстальніка ў групах, пры ўмове, што ў прэтэнзіі гэтыя групы названы без уліку рэгістра: \"адміністратар\", \"карыстальнік або \"госць\". Прэтэнзія павінна ўтрымліваць спіс, і калі карыстальнік належыць да некалькіх груп, праграма прызначыць ролю, якая адпавядае найвышэйшаму ўзроўню доступу. Калі ніводная група не супадае, доступ будзе забаронены.", + "LabelNumberOfEpisodes": "# з эпізодаў", "LabelOpenRSSFeed": "Адкрыць RSS-стужку", - "LabelOverwrite": "Перазапісаць", - "LabelPaginationPageXOfY": "Старонка {0} з {1}", "LabelPassword": "Пароль", "LabelPath": "Шлях", - "LabelPermanent": "Пастаянны", - "LabelPermissionsAccessAllLibraries": "Мае доступ да ўсіх бібліятэк", - "LabelPermissionsAccessAllTags": "Мае доступ да ўсіх тэгаў", - "LabelPermissionsAccessExplicitContent": "Мае доступ да непрыстойнага змесціва", - "LabelPermissionsCreateEreader": "Можа ствараць прыладу для чытання", - "LabelPermissionsDelete": "Можа выдаляць", - "LabelPermissionsDownload": "Можа спампоўваць", - "LabelPermissionsUpdate": "Можа абнаўляць", - "LabelPermissionsUpload": "Можа запампоўваць", - "LabelPersonalYearReview": "Вынікі года ({0})", - "LabelPhotoPathURL": "Шлях/URL-адрас фота", - "LabelPlayMethod": "Метад прайгравання", - "LabelPlaybackRateIncrementDecrement": "Павелічэнне/памяншэнне хуткасці прайгравання", - "LabelPlayerChapterNumberMarker": "{0} з {1}", - "LabelPlaylists": "Плэй-лісты", + "LabelPermissionsDownload": "Можна спампаваць", + "LabelPlaylists": "Cпісs прайгравання", "LabelPodcast": "Падкаст", - "LabelPodcastSearchRegion": "Рэгіён пошуку падкастаў", - "LabelPodcastType": "Тып падкаста", "LabelPodcasts": "Падкасты", - "LabelPort": "Порт", - "LabelPrefixesToIgnore": "Прэфіксы, якія трэба ігнараваць (без уліку рэгістра)", "LabelPreventIndexing": "Прадухіліць індэксацыю вашай стужкі каталогамі падкастаў iTunes і Google", - "LabelPrimaryEbook": "Асноўная электронная кніга", "LabelProgress": "Прагрэс", - "LabelProvider": "Пастаўшчык", - "LabelProviderAuthorizationValue": "Значэнне загалоўка аўтарызацыі", "LabelPubDate": "Дата публікацыі", "LabelPublishYear": "Год публікацыі", "LabelPublishedDate": "Апублікавана {0}", - "LabelPublishedDecade": "Дзесяцігоддзе публікацыі", - "LabelPublishedDecades": "Дзесяцігоддзі публікацыі", - "LabelPublisher": "Выдавец", - "LabelPublishers": "Выдаўцы", "LabelRSSFeedCustomOwnerEmail": "Карыстальніцкая электронная пошта ўладальніка", "LabelRSSFeedCustomOwnerName": "Карыстальніцкае імя ўладальніка", "LabelRSSFeedOpen": "RSS-стужка адкрыта", @@ -548,19 +448,13 @@ "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} папках.", + "LabelRemoveMetadataFile": "Выдаліць файлы метададзеных у тэчках элементаў бібліятэкі", + "LabelRemoveMetadataFileHelp": "Выдаліць усе файлы metadata.json і metadata.abs у вашых {0} тэчках.", "LabelRowsPerPage": "Радкоў на старонку", "LabelSearchTerm": "Пошукавы запыт", "LabelSearchTitle": "Пошук па загалоўку", @@ -568,9 +462,8 @@ "LabelSeason": "Сезон", "LabelSeasonNumber": "Сезон #{0}", "LabelSelectAll": "Выбраць усё", - "LabelSelectAllEpisodes": "Выбраць усе выпускі", - "LabelSelectEpisodesShowing": "Выбраць {0} выпускаў для паказу", - "LabelSelectUser": "Выберыце карыстальніка", + "LabelSelectAllEpisodes": "Выбраць усе эпізоды", + "LabelSelectEpisodesShowing": "Выбраць {0} эпізодаў для паказу", "LabelSelectUsers": "Выбраць карыстальнікаў", "LabelSendEbookToDevice": "Адправіць электронную кнігу на...", "LabelSequence": "Паслядоўнасць", @@ -584,62 +477,40 @@ "LabelSetEbookAsSupplementary": "Зрабіць дадатковым", "LabelSettingsAllowIframe": "Дазволіць убудоўванне ў iframe", "LabelSettingsAudiobooksOnly": "Толькі аўдыякнігі", - "LabelSettingsAudiobooksOnlyHelp": "Пры ўключэнні гэтай налады файлы электронных кніг будуць ігнаравацца, калі толькі яны не знаходзяцца ў папцы з аўдыякнігамі. У такім выпадку яны будуць пазначаны як дадатковыя электронныя кнігі.", + "LabelSettingsAudiobooksOnlyHelp": "Уключэнне гэтай налады будзе ігнараваць файлы электронных кніг, калі толькі яны не знаходзяцца ў тэчцы з аўдыякнігамі. У такім выпадку яны будуць пазначаны як дадатковыя электронныя кнігі.", "LabelSettingsBookshelfViewHelp": "Рэалістычны дызайн з драўлянымі паліцамі", - "LabelSettingsChromecastSupport": "Падтрымка Chromecast", - "LabelSettingsDateFormat": "Фарматы даты", - "LabelSettingsEnableWatcher": "Аўтаматычна сачыць за зменамі ў бібліятэцках", - "LabelSettingsEnableWatcherForLibrary": "Аўтаматычна сачыць за зменамі ў бібліятэцы", + "LabelSettingsEnableWatcherForLibrary": "Аўтаматычна правяраць бібліятэку на змены", "LabelSettingsEnableWatcherHelp": "Адключае аўтаматычнае дадаванне/абнаўленне элементаў пры выяўленні змен у файлах. *Патрабуецца перазапуск сервера", - "LabelSettingsEpubsAllowScriptedContent": "Дазваляць скрыпты ў файлах EPUB", - "LabelSettingsEpubsAllowScriptedContentHelp": "Дазволіць файлам EPUB выконваць скрыпты. Рэкамендуецца пакінуць гэтую наладу выключанай, калі вы не давяраеце крыніцы файлаў EPUB.", + "LabelSettingsEpubsAllowScriptedContent": "Дазволіць скрыптавы кантэнт у EPUB", + "LabelSettingsEpubsAllowScriptedContentHelp": "Дазволіць EPUB-файлам выконваць скрыпты. Рэкамендуецца пакінуць гэтую наладу выключанай, калі вы не давяраеце крыніцы EPUB-файлаў.", "LabelSettingsExperimentalFeatures": "Эксперыментальныя функцыі", "LabelSettingsExperimentalFeaturesHelp": "Функцыі ў распрацоўцы, для якіх вашы водгукі і дапамога ў тэставанні будуць карыснымі. Націсніце, каб адкрыць абмеркаванне на GitHub.", "LabelSettingsFindCovers": "Знайсці вокладкі", - "LabelSettingsFindCoversHelp": "Калі ў вашай аўдыякнізе няма ўбудаванай вокладкі або відарыса вокладкі ў папцы, сканер паспрабуе знайсці вокладку.
Заўвага: гэта павялічыць час сканіравання", + "LabelSettingsFindCoversHelp": "Калі ў вашай аўдыякнізе няма ўбудаванай вокладкі або выявы вокладкі ў тэчцы, сканер паспрабуе знайсці вокладку.
Заўвага: гэта павялічыць час сканавання", "LabelSettingsHideSingleBookSeries": "Схаваць серыі з адной кнігай", "LabelSettingsHideSingleBookSeriesHelp": "Серыі, якія змяшчаюць толькі адну кнігу, будуць схаваны са старонкі серый і паліц на галоўнай старонцы.", "LabelSettingsHomePageBookshelfView": "Галоўная старонка выкарыстоўвае выгляд кніжнай паліцы", "LabelSettingsLibraryBookshelfView": "Бібліятэка выкарыстоўвае выгляд кніжнай паліцы", - "LabelSettingsLibraryMarkAsFinishedPercentComplete": "Працэнт завяршэння большы за", - "LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Час, што застаўся, менш за (секунд)", - "LabelSettingsLibraryMarkAsFinishedWhen": "Пазначыць элемент медыя як завершаны, калі", + "LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Час, што застаўся, менш за (секунды)", + "LabelSettingsLibraryMarkAsFinishedWhen": "Пазначыць элемент медыя як скончаны, калі", "LabelSettingsOnlyShowLaterBooksInContinueSeries": "Пропусціць папярэднія кнігі ў \"Працягнуць серыю\"", - "LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Паліца \"Працягнуць серыю\" на галоўнай старонцы паказвае першую не пачатую кнігу ў серыях, дзе завершана хаця б адна кніга і няма кніг у працэсе чытання. Уключэнне гэтай налады дазволіць працягваць серыю з самай апошняй завершанай кнігі замест першай не пачатай.", - "LabelSettingsParseSubtitles": "Аналізаваць падзагалоўкі", - "LabelSettingsParseSubtitlesHelp": "Выдзяляць падзагаловак з назваў папак аўдыякніг.
Падзагаловак павінен быць аддзелены сімвалам \" - \".
Напрыклад, \"Назва кнігі - Падзагаловак тут\" мае падзагаловак \"Падзагаловак тут\"", - "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. Пры ўключэнні гэтай опцыі файлаў метаданых будуць захоўвацца ў папках элементаў бібліятэкі", + "LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Палка \"Працягнуць серыю\" на галоўнай старонцы паказвае першую не пачатую кнігу ў серыях, дзе завершана хаця б адна кніга і няма кніг у працэсе чытання. Уключэнне гэтай налады дазволіць працягваць серыю з самай апошняй завершанай кнігі замест першай не пачатай.", + "LabelSettingsParseSubtitles": "Разабраць падзагалоўкі", + "LabelSettingsParseSubtitlesHelp": "Выдзяляць падзагаловак з назваў тэчак аўдыякніг.
Падзагаловак павінен быць аддзелены знакам \" - \".
Напрыклад, \"Назва кнігі - Падзагаловак тут\" мае падзагаловак \"Падзагаловак тут\"", + "LabelSettingsPreferMatchedMetadata": "Аддаваць перавагу супадаючым метададзеным", + "LabelSettingsPreferMatchedMetadataHelp": "Супадаючыя дадзеныя будуць замяняць дэталі элемента пры выкарыстанні функцыі Хуткі пошук. Па змаўчанні Хуткі пошук запаўняе толькі адсутныя дэталі.", + "LabelSettingsStoreCoversWithItemHelp": "Па змаўчанні вокладкі захоўваюцца ў /metadata/items, уключэнне гэтай опцыі забяспечыць захоўванне вокладак у тэчцы элемента вашай бібліятэкі. Захоўвацца будзе толькі адзін файл з назвай \"cover\"", + "LabelSettingsStoreMetadataWithItem": "Захоўваць метададзеныя разам з элементам", + "LabelSettingsStoreMetadataWithItemHelp": "Па змаўчанні метададзеныя захоўваюцца ў /metadata/items. Уключэнне гэтай опцыі забяспечыць захоўванне файлаў метададзеных у тэчках элементаў вашай бібліятэкі", "LabelSettingsTimeFormat": "Фармат часу", - "LabelShare": "Абагуліць", - "LabelShareDownloadableHelp": "Дазваляе карыстальнікам, якія маюць спасылку, спампоўваць ZIP-архіў элемента бібліятэкі.", - "LabelShareOpen": "Абагульванне адкрыта", - "LabelShareURL": "URL-адрас для абагульвання", + "LabelShareDownloadableHelp": "Дазваляе карыстальнікам, якія маюць спасылку на доступ, спампаваць ZIP-файл элемента бібліятэкі.", "LabelShowAll": "Паказаць усё", - "LabelShowSeconds": "Паказваць секунды", "LabelShowSubtitles": "Паказаць падзагалоўкі", "LabelSize": "Памер", "LabelSleepTimer": "Таймер сну", - "LabelSlug": "Ідэнтыфікатар", - "LabelSortAscending": "Па ўзрастанні", - "LabelSortDescending": "Па ўбыванні", - "LabelSortPubDate": "Сартаваць па даце публікацыі", "LabelStart": "Пачаць", "LabelStartTime": "Час пачатку", - "LabelStarted": "Пачата", - "LabelStartedAt": "Пачата ў", - "LabelStartedDate": "Пачата {0}", - "LabelStatsAudioTracks": "Аўдыятрэкі", + "LabelStatsAudioTracks": "Аўдыядарожкі", "LabelStatsAuthors": "Аўтары", "LabelStatsBestDay": "Лепшы дзень", "LabelStatsDailyAverage": "У сярэднім за дзень", @@ -647,7 +518,7 @@ "LabelStatsDaysListened": "Дзён праслухана", "LabelStatsHours": "Гадзін", "LabelStatsInARow": "без перапынку", - "LabelStatsItemsFinished": "Элементаў завершана", + "LabelStatsItemsFinished": "Скончаныя элементы", "LabelStatsItemsInLibrary": "Элементаў у бібліятэцы", "LabelStatsMinutes": "хвілін", "LabelStatsMinutesListening": "Хвілін праслухоўвання", @@ -668,7 +539,6 @@ "LabelTheme": "Тэма", "LabelThemeDark": "Цёмная", "LabelThemeLight": "Светлая", - "LabelThemeSepia": "Сепія", "LabelTimeBase": "Часавая база", "LabelTimeDurationXHours": "{0} гадзін", "LabelTimeDurationXMinutes": "{0} хвілін", @@ -679,26 +549,21 @@ "LabelTimeListenedToday": "Час праслухоўвання сёння", "LabelTimeRemaining": "Засталося {0}", "LabelTimeToShift": "Час зрушэння ў секундах", - "LabelTitle": "Загаловак", - "LabelToolsEmbedMetadata": "Убудаваць метаданыя", - "LabelToolsEmbedMetadataDescription": "Убудаваць метаданыя ў аўдыяфайлы, уключаючы відарыс вокладкі і раздзелы.", - "LabelToolsM4bEncoder": "Кадавальнік M4B", - "LabelToolsMakeM4b": "Стварыць файл аўдыякнігі M4B", - "LabelToolsMakeM4bDescription": "Стварыць аўдыякнігу ў фармаце .M4B з убудаванымі метаданымі, відарысам вокладкі і раздзеламі.", - "LabelToolsSplitM4b": "Падзяліць M4B на MP3", - "LabelToolsSplitM4bDescription": "Стварэнне MP3 з M4B, падзеленага па раздзелах, з убудаванымі метаданымі, відарысам вокладкі і раздзеламі.", + "LabelTitle": "Назва", + "LabelToolsEmbedMetadata": "Убудаваць метададзеныя", + "LabelToolsEmbedMetadataDescription": "Убудаваць метададзеныя ў аўдыёфайлы, уключаючы выяву вокладкі і раздзелы.", + "LabelToolsMakeM4bDescription": "Стварыць аўдыёкнігу ў фармаце .M4B з убудаванымі метададзенымі, выявай вокладкі і раздзеламі.", + "LabelToolsSplitM4bDescription": "Стварэнне MP3 з M4B, падзеленага па раздзелах, з убудаванымі метададзенымі, выявай вокладкі і раздзеламі.", "LabelTotalDuration": "Агульная працягласць", "LabelTotalTimeListened": "Агульны час праслухоўвання", - "LabelTrackFromFilename": "Трэк з файла", - "LabelTrackFromMetadata": "Трэк з метаданых", - "LabelTracks": "Трэкі", - "LabelTracksMultiTrack": "Некалькі трэкаў", - "LabelTracksNone": "Няма трэкаў", - "LabelTracksSingleTrack": "Адзін трэк", - "LabelTrailer": "Трэйлер", + "LabelTrackFromFilename": "Дарожка з імя файла", + "LabelTrackFromMetadata": "Дарожка з метададзеных", + "LabelTracks": "Дарожкі", + "LabelTracksMultiTrack": "Шматдарожкавы", + "LabelTracksNone": "Няма дарожак", + "LabelTracksSingleTrack": "Аднадарожкавы", "LabelType": "Тып", - "LabelUnabridged": "Поўная версія", - "LabelUndo": "Адрабіць", + "LabelUndo": "Адмяніць", "LabelUnknown": "Невядома", "LabelUnknownPublishDate": "Невядомая дата публікацыі", "LabelUpdateCover": "Абнавіць вокладку", @@ -706,14 +571,13 @@ "LabelUpdateDetails": "Абнавіць падрабязнасці", "LabelUpdateDetailsHelp": "Дазволіць замену існуючых падрабязнасцей для выбраных кніг пры выяўленні адпаведнасці", "LabelUpdatedAt": "Абноўлена ў", - "LabelUploaderDragAndDrop": "Перацягніце файлы або папкі", + "LabelUploaderDragAndDrop": "Перацягвайце і скідайце файлы або тэчкі", "LabelUploaderDragAndDropFilesOnly": "Перацягвайце і скідайце файлы", "LabelUploaderDropFiles": "Скідайце файлы", - "LabelUploaderItemFetchMetadataHelp": "Аўтаматычна атрымліваць загаловак, аўтара і серыю", + "LabelUploaderItemFetchMetadataHelp": "Аўтаматычна атрымліваць назву, аўтара і серыю", "LabelUseAdvancedOptions": "Выкарыстоўваць пашыраныя параметры", - "LabelUseChapterTrack": "Выкарыстоўваць трэк раздзела", - "LabelUseFullTrack": "Выкарыстоўваць увесь трэк", - "LabelUseZeroForUnlimited": "0 – неабмежавана", + "LabelUseChapterTrack": "Выкарыстоўваць дарожку раздзелаў", + "LabelUseFullTrack": "Выкарыстоўваць поўную дарожку", "LabelUser": "Карыстальнік", "LabelUsername": "Імя карыстальніка", "LabelValue": "Значэнне", @@ -723,196 +587,89 @@ "LabelViewPlayerSettings": "Праглядзець налады прайгравальніка", "LabelViewQueue": "Праглядзець чаргу прайгравальніка", "LabelVolume": "Гучнасць", - "LabelWebRedirectURLsDescription": "Аўтарызуйце гэтыя URL-адрасы ў вашым пастаўшчыку OAuth для перанакіравання ў вэб-праграму пасля ўваходу:", - "LabelWebRedirectURLsSubfolder": "Падпапка для URL-адрасоў перанакіравання", + "LabelWebRedirectURLsDescription": "Аўтарызуйце гэтыя URL у вашым OAuth-правайдары для перанакіравання ў вэб-дадатак пасля ўваходу:", + "LabelWebRedirectURLsSubfolder": "Падтэчка для URL-перанакіраванняў", "LabelWeekdaysToRun": "Дні тыдня для запуску", "LabelXBooks": "{0} кніг", "LabelXItems": "{0} элементаў", "LabelYearReviewHide": "Схаваць вынікі года", "LabelYearReviewShow": "Азнаёміцца з вынікамі года", - "LabelYourAudiobookDuration": "Працягласць аўдыякнігі", + "LabelYourAudiobookDuration": "Працягласць вашай аўдыякнігі", "LabelYourBookmarks": "Вашы закладкі", - "LabelYourPlaylists": "Вашы плэй-лісты", + "LabelYourPlaylists": "Вашы спісы прайгравання", "LabelYourProgress": "Ваш прагрэс", "MessageAddToPlayerQueue": "Дадаць у чаргу прайгравальніка", "MessageAppriseDescription": "Каб выкарыстоўваць гэтую функцыю, вам спатрэбіцца запусціць асобнік Apprise API або API, які будзе апрацоўваць тыя ж запыты.
URL Apprise API павінен быць поўным шляхам для адпраўкі апавяшчэння, напрыклад, калі ваш API працуе па адрасе 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. Рэзервовыя копіі не ўключаюць файлы, якія захоўваюцца ў папках бібліятэкі.", + "MessageBackupsDescription": "Рэзервовыя копіі ўключаюць карыстальнікаў, іх прагрэс, падрабязнасці элементаў бібліятэкі, налады сервера і выявы, якія захоўваюцца ў /metadata/items і /metadata/authors. Рэзервовыя копіі не ўключаюць файлы, якія захоўваюцца ў вашых тэчках бібліятэкі.", "MessageBackupsLocationEditNote": "Заўвага: Абнаўленне месцазнаходжання рэзервовых копій не перамяшчае і не змяняе існуючыя рэзервовыя копіі", "MessageBackupsLocationNoEditNote": "Заўвага: Месцазнаходжанне рэзервовых копій задаецца праз зменную асяроддзя і не можа быць зменена тут.", "MessageBackupsLocationPathEmpty": "Шлях да месцазнаходжання рэзервовых копій не можа быць пустым", - "MessageBatchEditPopulateMapDetailsAllHelp": "Запоўніце ўключаныя палі данымі з усіх элементаў. Палі з некалькімі значэннямі будуць аб'яднаны", - "MessageBatchEditPopulateMapDetailsItemHelp": "Запоўніце ўключаныя палі падрабязнасцей карты данымі з гэтага элемента", - "MessageBatchQuickMatchDescription": "Хуткі пошук паспрабуе дадаць адсутныя вокладкі і метаданыя для выбраных элементаў. Уключыце параметры ніжэй, каб дазволіць Хуткаму пошуку замяняць існуючыя вокладкі і/або метаданыя.", - "MessageBookshelfNoCollections": "Вы пакуль не стварылі ніводнай калекцый", - "MessageBookshelfNoCollectionsHelp": "Калекцыі публічныя. Усе карыстальнікі, якія маюць доступ да бібліятэкі, могуць іх бачыць.", + "MessageBatchEditPopulateMapDetailsAllHelp": "Запоўніце ўключаныя палі дадзенымі з усіх элементаў. Палі з некалькімі значэннямі будуць аб'яднаны", + "MessageBatchEditPopulateMapDetailsItemHelp": "Запоўніце ўключаныя палі падрабязнасцей карты дадзенымі з гэтага элемента", + "MessageBatchQuickMatchDescription": "Хуткі пошук паспрабуе дадаць адсутныя вокладкі і метададзеныя для выбраных элементаў. Уключыце ніжэй выкладзеныя опцыі, каб дазволіць Хуткаму пошуку замяняць існуючыя вокладкі і/або метададзеныя.", "MessageBookshelfNoRSSFeeds": "Няма адкрытых RSS-стужак", - "MessageBookshelfNoResultsForFilter": "Няма вынікаў для фільтра \"{0}: {1}\"", - "MessageBookshelfNoResultsForQuery": "Няма вынікаў па запыце", - "MessageBookshelfNoSeries": "У вас няма серый", - "MessageBulkChapterPattern": "Колькі раздзелаў вы хочаце дадаць з дапамогай гэтага ўзору нумарацыі?", - "MessageChapterEndIsAfter": "Канец раздзела ідзе пасля канца аўдыякнігі", - "MessageChapterErrorFirstNotZero": "Першы раздзел павінен пачынацца з 0", "MessageChapterErrorStartGteDuration": "Няправільны час пачатку: ён павінен быць меншым за працягласць аўдыякнігі", "MessageChapterErrorStartLtPrev": "Няправільны час пачатку: ён павінен быць большым або роўным часу пачатку папярэдняга раздзела", - "MessageChapterStartIsAfter": "Пачатак раздзела ідзе пасля канца аўдыякнігі", - "MessageChaptersNotFound": "Раздзелы не знойдзены", - "MessageCheckingCron": "Праверка cron...", - "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.

Вы ўпэўнены, што хочаце выдаліць каталог кэшу?", - "MessageConfirmPurgeItemsCache": "Ачышчэнне кэшу элементаў выдаліць увесь каталог па адрасе /metadata/cache/items.
Вы ўпэўнены?", - "MessageConfirmQuickEmbed": "Увага! Хуткае ўбудаванне не стварае рэзервовых копій аўдыяфайлаў. Пераканайцеся, што ў вас ёсць рэзервовая копія аўдыяфайлаў.

Хочаце працягнуць?", - "MessageConfirmQuickMatchEpisodes": "Хуткае супадзенне выпускаў перазапіша дэталі, калі супадзенне будзе знойдзена. Будуць абноўлены толькі выпускі, якія не супадаюць. Вы ўпэўнены?", - "MessageConfirmReScanLibraryItems": "Вы ўпэўнены, што хочаце паўторна сканіраваць {0} элементаў?", - "MessageConfirmRemoveAllChapters": "Вы ўпэўнены, што хочаце выдаліць усе раздзелы?", - "MessageConfirmRemoveAuthor": "Вы ўпэўнены, што хочаце выдаліць аўтара \"{0}\"?", - "MessageConfirmRemoveCollection": "Вы ўпэўнены, што хочаце выдаліць калекцыю \"{0}\"?", - "MessageConfirmRemoveEpisode": "Вы ўпэўнены, што хочаце выдаліць выпуск \"{0}\"?", - "MessageConfirmRemoveEpisodeNote": "Заўвага: Аўдыяфайл не будзе выдалены, калі не ўключыць параметр \"Жорстка выдаляць файл\"", - "MessageConfirmRemoveEpisodes": "Вы ўпэўнены, што хочаце выдаліць {0} выпускаў?", - "MessageConfirmRemoveListeningSessions": "Вы ўпэўнены, што хочаце выдаліць {0} сеансаў праслухоўвання?", - "MessageConfirmRemoveMetadataFiles": "Вы ўпэўнены, што хочаце выдаліць усе файлы metadata.{0} у папках элементаў бібліятэкі?", - "MessageConfirmRemoveNarrator": "Вы ўпэўнены, што хочаце выдаліць дыктара \"{0}\"?", - "MessageConfirmRemovePlaylist": "Вы ўпэўнены, што хочаце выдаліць плэй-ліст \"{0}\"?", - "MessageConfirmRenameGenre": "Вы ўпэўнены, што хочаце перайменаваць жанр \"{0}\" на \"{1}\" для ўсіх элементаў?", - "MessageConfirmRenameGenreMergeNote": "Заўвага: Гэты жанр ужо існуе, таму яны будуць аб'яднаны.", - "MessageConfirmRenameGenreWarning": "Увага! Падобны жанр з іншым рэгістрам літар ужо існуе — \"{0}\".", - "MessageConfirmRenameTag": "Вы ўпэўнены, што хочаце перайменаваць тэг \"{0}\" на \"{1}\" для ўсіх элементаў?", - "MessageConfirmRenameTagMergeNote": "Заўвага: Гэты тэг ужо існуе, таму яны будуць аб'яднаны.", - "MessageConfirmRenameTagWarning": "Увага! Падобны тэг з іншым рэгістрам ужо існуе: \"{0}\".", - "MessageConfirmResetProgress": "Вы ўпэўнены, што хочаце скінуць свой прагрэс?", + "MessageConfirmCloseFeed": "Вы ўпэўнены, што жадаеце закрыць гэтую стужку?", + "MessageConfirmDeleteMetadataProvider": "Ці ўпэўненыя вы, што жадаеце выдаліць карыстацкага пастаўшчыка метададзеных \"{0}\"?", + "MessageConfirmEmbedMetadataInAudioFiles": "Ці ўпэўненыя вы, што жадаеце ўбудаваць метададзеныя ў {0} аўдыёфайлаў?", + "MessageConfirmPurgeCache": "Ачышчэнне кэша выдаліць увесь каталог па адрасе /metadata/cache.

Ці сапраўды вы жадаеце выдаліць каталог кэша?", + "MessageConfirmPurgeItemsCache": "Ачышчэнне кэша элементаў выдаліць увесь каталог па адрасе /metadata/cache/items.
Вы ўпэўнены?", + "MessageConfirmQuickMatchEpisodes": "Хуткае супадзенне эпізодаў перазапіша дэталі, калі супадзенне будзе знойдзена. Будуць абноўлены толькі эпізоды, якія не супадаюць. Вы ўпэўнены?", + "MessageConfirmRemoveListeningSessions": "Вы ўпэўнены, што жадаеце выдаліць {0} сеансаў праслухоўвання?", + "MessageConfirmRemoveMetadataFiles": "Ці ўпэўненыя вы, што жадаеце выдаліць усе файлы метададзеных{0} у тэчках элементаў вашай бібліятэкі?", + "MessageConfirmRemovePlaylist": "Вы ўпэўненыя, што жадаеце выдаліць свой спіс прайгравання \"{0}\"?", "MessageConfirmSendEbookToDevice": "Вы ўпэўнены, што хочаце адправіць {0} электронную кнігу \"{1}\" на прыладу \"{2}\"?", - "MessageConfirmUnlinkOpenId": "Вы ўпэўнены, што хочаце адвязаць гэтага карыстальніка ад OpenID?", - "MessageDaysListenedInTheLastYear": "{0} дзён праслухоўвання за апошні год", - "MessageDownloadingEpisode": "Спампоўванне выпуску", - "MessageDragFilesIntoTrackOrder": "Перацягніце файлы ў правільным парадку трэкаў", - "MessageEmbedFailed": "Не ўдалося ўбудаваць!", - "MessageEmbedFinished": "Убудаванне завершана!", - "MessageEmbedQueue": "У чарзе на ўбудаванне метаданых (у чарзе {0})", - "MessageEpisodesQueuedForDownload": "{0} выпуск(-аў) у чарзе спампоўвання", + "MessageDownloadingEpisode": "Спампоўка эпізоду", + "MessageEmbedQueue": "У чарзе на ўбудаванне метададзеных (у чарзе {0})", + "MessageEpisodesQueuedForDownload": "{0} эпізод(аў) у чарзе для спампоўкі", "MessageEreaderDevices": "Каб забяспечыць дастаўку электронных кніг, вам можа спатрэбіцца дадаць вышэйзгаданы адрас электроннай пошты як дазволенага адпраўніка для кожнай прылады, пералічанай ніжэй.", "MessageFeedURLWillBe": "URL стужкі будзе {0}", "MessageFetching": "Атрыманне...", - "MessageForceReScanDescription": "прасканіруе ўсе файлы зноў, як пры новым сканаванні. Тэгі ID3 аўдыёфайлаў, файлы OPF і тэкставыя файлы будуць сканіравацца як новыя.", - "MessageHeatmapListeningTimeTooltip": "{0} праслухана on {1}", - "MessageHeatmapNoListeningSessions": "Няма сеансаў праслухоўвання на {0}", - "MessageImportantNotice": "Важная заўвага!", - "MessageInsertChapterBelow": "Уставіць раздзел ніжэй", "MessageInvalidAsin": "Няправільны ASIN", - "MessageItemsSelected": "Выбрана элементаў: {0}", "MessageItemsUpdated": "{0} элементаў абноўлена", - "MessageJoinUsOn": "Далучайцеся да нас у", "MessageLoading": "Загрузка...", - "MessageLoadingFolders": "Загрузка папак...", "MessageLogsDescription": "Журналы захоўваюцца ў каталогу /metadata/logs у фармаце JSON. Журналы памылак захоўваюцца ў файле /metadata/logs/crashlogs.txt.", - "MessageM4BFailed": "Памылка M4B!", - "MessageM4BFinished": "M4B завершана!", - "MessageMapChapterTitles": "Супаставіць загалоўкі раздзелаў з існуючымі раздзеламі аўдыякнігі без змянення пазнак часу", - "MessageMarkAllEpisodesFinished": "Пазначыць усе выпускі як завершаныя", - "MessageMarkAllEpisodesNotFinished": "Пазначыць усе выпускі як незавершаныя", - "MessageMarkAsFinished": "Пазначыць як завершаную", - "MessageMarkAsNotFinished": "Пазначыць як незавершаную", - "MessageMatchBooksDescription": "паспрабуе параўнаць кнігі ў бібліятэцы з кнігай ад выбранай пошукавай сістэмы і запоўніць пустыя палі і вокладку. Не перазапісвае звесткі.", - "MessageNoAudioTracks": "Няма аўдыятрэкаў", - "MessageNoAuthors": "Няма аўтараў", - "MessageNoBackups": "Няма рэзервовых копій", + "MessageMapChapterTitles": "Супаставіць назвы раздзелаў з вашымі існуючымі раздзеламі аўдыякнігі без змянення часовых метак", + "MessageMarkAsFinished": "Пазначыць як скончана", "MessageNoBookmarks": "Няма закладак", "MessageNoChapters": "Няма раздзелаў", "MessageNoCollections": "Няма калекцый", - "MessageNoCoversFound": "Не знойдзена вокладак", - "MessageNoDescription": "Няма апісання", - "MessageNoDevices": "Няма прылад", - "MessageNoDownloadsInProgress": "Зараз няма актыўных спампованняў", + "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": "Пачакайце...", + "MessageNoUserPlaylists": "У вас няма спісаў прайгравання", + "MessageNoUserPlaylistsHelp": "Спісы прайгравання прыватныя. Толькі карыстальнік, які іх стварыў, можа іх бачыць.", + "MessageOpmlPreviewNote": "Заўвага: гэта папярэдні прагляд разабранага файла OPML. Фактычная назва падкаста будзе ўзятая з RSS-стужкі.", + "MessagePlaylistCreateFromCollection": "Стварыць спіс прайгравання з калекцыі", "MessagePodcastHasNoRSSFeedForMatching": "У падкаста няма URL RSS-стужкі для супадзення", "MessagePodcastSearchField": "Увядзіце пошукавы запыт або URL RSS-стужкі", - "MessageQuickEmbedInProgress": "Выконваецца хуткае ўбудаванне", - "MessageQuickEmbedQueue": "Пастаўлена ў чаргу для хуткага ўбудавання ({0} у чарзе)", - "MessageQuickMatchAllEpisodes": "Хуткае параўнанне ўсіх выпускаў", - "MessageQuickMatchDescription": "Запоўніць пустыя звесткі элемента і вокладку першым вынікам супадзення з '{0}'. Не замяняе звесткіі, калі параметр \"Аддаваць перавагу супадаючым метаданым\" на серверы не ўключана.", - "MessageRemoveChapter": "Выдаліць раздзел", - "MessageRemoveEpisodes": "Выдаліць выпускі ({0})", - "MessageRemoveFromPlayerQueue": "Выдаліць з чаргі прагравання", - "MessageRemoveUserWarning": "Вы ўпэўнены, што хочаце назаўжды выдаліць карыстальніка \"{0}\"?", + "MessageQuickMatchDescription": "Запоўніць пустыя дэталі элемента і вокладку першым вынікам супадзення з '{0}'. Не замяняе дэталі, калі опцыя «Аддаваць перавагу супадаючым метададзеным» на серверы не ўключана.", "MessageReportBugsAndContribute": "Паведамляйце пра памылкі, прапануйце новыя функцыі і ўдзельнічайце на", - "MessageResetChaptersConfirm": "Вы ўпэўнены, што хочаце скінуць раздзелы і адрабіць зробленыя вамі змены?", - "MessageRestoreBackupConfirm": "Вы ўпэўнены, што хочаце аднавіць рэзервовую копію, створаную", - "MessageRestoreBackupWarning": "Аднаўленне рэзервовай копіі перазапіша ўсю базу даных, размешчаную ў /config, а таксама відарысы вокладкі ў /metadata/items і /metadata/authors.

Рэзервовыя копіі не змяняюць файлы ў папках бібліятэкі. Калі вы ўключылі налады сервера для захоўвання воклак і метаданых у папках бібліятэкі, гэтыя файлы не будуць захаваныя ў рэзервовых копіях і не зменяцца.

Усе кліенты, якія карыстаюцца вашым серверам, будуць аўтаматычна абноўлены.", - "MessageScheduleLibraryScanNote": "Большасці карыстальнікаў рэкамендуецца не выключаць гэтую функцыю і пакідаць уключанай наладу \"Аўтаматычна сачыць за зменамі ў бібліятэцы\" — яна будзе аўтаматычна выяўляць змены ў папках бібліятэкі. Уключыце гэту функцыю, калі \"Аўтаматычна сачыць за зменамі ў бібліятэцы\" не працуе для вашай файлавай сістэмы (напрыклад, NFS).", + "MessageRestoreBackupWarning": "Аднаўленне рэзервовай копіі перазапіша ўсю базу даных, размешчаную ў /config, а таксама выявы вокладкі ў /metadata/items і /metadata/authors.

Рэзервовыя копіі не змяняюць файлы ў вашых тэчках бібліятэкі. Калі вы ўключылі наладкі сервера для захоўвання воклак і метададзеных у тэчках бібліятэкі, гэтыя файлы не будуць захаваныя ў рэзервовых копіях і не зменяцца.

Усе кліенты, якія карыстаюцца вашым серверам, будуць аўтаматычна абноўлены.", "MessageScheduleRunEveryWeekdayAtTime": "Выконваць кожныя {0} у {1}", - "MessageSearchResultsFor": "Вынікі пошуку для", - "MessageSelected": "Выбрана: {0}", - "MessageSeriesSequenceCannotContainSpaces": "Паслядоўнасць серый не можа ўтрымліваць прабелы", - "MessageServerCouldNotBeReached": "Сервер недаступны", - "MessageSetChaptersFromTracksDescription": "Задаць раздзелы, выкарыстоўваючы кожны аўдыяфайл у якасці раздзела і назву аўдыяфайла ў якасці загалоўка раздзела", - "MessageShareExpirationWillBe": "Тэрмін дзеяння будзе {0}", - "MessageShareExpiresIn": "Тэрмін дзеяння заканчваецца праз {0}", - "MessageShareURLWillBe": "URL-адрас для абагульвання будзе {0", "MessageStartPlaybackAtTime": "Пачаць прайграванне для \"{0}\" з {1}?", - "MessageTaskAudioFileNotWritable": "Аўдыяфайл \"{0}\" недаступны для запісу", + "MessageTaskAudioFileNotWritable": "Аўдыёфайл \"{0}\" недаступны для запісу", "MessageTaskCanceledByUser": "Задача скасавана карыстальнікам", - "MessageTaskDownloadingEpisodeDescription": "Спампоўванне выпуску \"{0}\"", - "MessageTaskEmbeddingMetadata": "Убудаванне метаданых", - "MessageTaskEmbeddingMetadataDescription": "Убудаванне метаданых у аўдыякнігу \"{0}\"", + "MessageTaskDownloadingEpisodeDescription": "Спампоўка эпізоду \"{0}\"", + "MessageTaskEmbeddingMetadata": "Убудаванне метададзеных", + "MessageTaskEmbeddingMetadataDescription": "Убудаванне метададзеных у аўдыёкнігу \"{0}\"", "MessageTaskEncodingM4b": "Кадаванне M4B", "MessageTaskEncodingM4bDescription": "Кадаванне аўдыякнігі \"{0}\" у адзін файл m4b", "MessageTaskFailed": "Не ўдалося", - "MessageTaskFailedToBackupAudioFile": "Не ўдалося зрабіць рэзервовую копію аўдыяфайла \"{0}\"", - "MessageTaskFailedToCreateCacheDirectory": "Не ўдалося стварыць каталог кэшу", - "MessageTaskFailedToEmbedMetadataInFile": "Не ўдалося ўбудаваць метаданыя ў файл \"{0}\"", - "MessageTaskFailedToMergeAudioFiles": "Не ўдалося аб’яднаць аўдыяфайлы", + "MessageTaskFailedToBackupAudioFile": "Не ўдалося зрабіць рэзервовую копію аўдыёфайла \"{0}\"", + "MessageTaskFailedToCreateCacheDirectory": "Не ўдалося стварыць каталог кэша", + "MessageTaskFailedToEmbedMetadataInFile": "Не ўдалося ўбудаваць метададзеныя ў файл \"{0}\"", + "MessageTaskFailedToMergeAudioFiles": "Не ўдалося аб’яднаць аўдыёфайлы", "MessageTaskFailedToMoveM4bFile": "Не ўдалося перамясціць файл m4b", - "MessageTaskFailedToWriteMetadataFile": "Не ўдалося захаваць файл метаданых", + "MessageTaskFailedToWriteMetadataFile": "Не ўдалося захаваць файл метададзеных", "MessageTaskMatchingBooksInLibrary": "Пошук супадзенняў кніг у бібліятэцы \"{0}\"", "MessageTaskNoFilesToScan": "Няма файлаў для сканавання", "MessageTaskOpmlImport": "Імпарт OPML", @@ -924,8 +681,8 @@ "MessageTaskOpmlImportFeedPodcastExists": "Падкаст ужо існуе па гэтым шляху", "MessageTaskOpmlImportFeedPodcastFailed": "Не ўдалося стварыць падкаст", "MessageTaskOpmlImportFinished": "Дададзена {0} падкастаў", - "MessageTaskOpmlParseFailed": "Не ўдалося прааналізаваць файл OPML", - "MessageTaskOpmlParseFastFail": "Памылковы файл OPML: тэг не знойдзены АБО тэг не знойдзены", + "MessageTaskOpmlParseFailed": "Не ўдалося разабраць файл OPML", + "MessageTaskOpmlParseFastFail": "Неправільны файл OPML: тэг не знойдзены АБО тэг не знойдзены", "MessageTaskOpmlParseNoneFound": "У файле OPML не знойдзена стужак", "MessageTaskScanItemsAdded": "{0} дададзена", "MessageTaskScanItemsMissing": "{0} адсутнічае", @@ -934,133 +691,35 @@ "MessageTaskScanningFileChanges": "Сканіраванне змяненняў у файле \"{0}\"", "MessageTaskScanningLibrary": "Сканіраванне бібліятэкі \"{0}\"", "MessageTaskTargetDirectoryNotWritable": "Мэтавы каталог недаступны для запісу", - "MessageThinking": "Думаю...", - "MessageUploaderItemFailed": "Не ўдалося запампаваць", - "MessageUploaderItemSuccess": "Паспяхова запампавана!", - "MessageUploading": "Запампоўванне...", - "MessageValidCronExpression": "Карэктны выраз cron", - "MessageWatcherIsDisabledGlobally": "Адсочванне змен у папках адключана глабальна ў наладах сервера", - "MessageXLibraryIsEmpty": "{0} Бібліятэка пустая!", - "MessageYourAudiobookDurationIsLonger": "Працягласць аўдыякнігі большая за знойдзеную працягласць", - "MessageYourAudiobookDurationIsShorter": "Працягласць аўдыякнігі карацейшая за знойдзеную працягласць", - "NoteChangeRootPassword": "Толькі карыстальнік root можа мець пусты пароль", "NoteChapterEditorTimes": "Заўвага: Час пачатку першага раздзела павінен заставацца 0:00, а час пачатку апошняга раздзела не можа перавышаць працягласць гэтай аўдыякнігі.", - "NoteFolderPicker": "Заўвага: ужо супастаўленыя папкі адлюстроўвацца не будуць", "NoteRSSFeedPodcastAppsHttps": "Папярэджанне: большасць праграм для падкастаў патрабуюць, каб URL RSS-стужкі выкарыстоўваў HTTPS", - "NoteRSSFeedPodcastAppsPubDate": "Папярэджанне: адзін ці больш выпускаў не маюць даты публікацыі. Некаторыя праграмы для падкастаў патрабуюць гэтага.", - "NoteUploaderFoldersWithMediaFiles": "Папкі з медыяфайламі будуць апрацоўвацца як асобныя элементы бібліятэкі.", - "NoteUploaderOnlyAudioFiles": "Пры запампоўванні толькі аўдыяфайлаў кожны аўдыяфайл будзе апрацоўвацца як асобная аўдыякніга.", - "NoteUploaderUnsupportedFiles": "Файлы, якія не падтрымліваюцца, ігнаруюцца. Пры выбары або выдаленні папкі іншыя файлы, якія не знаходзяцца ў папцы элемента, ігнаруюцца.", - "NotificationOnBackupCompletedDescription": "Спрацоўвае пасля завяршэння рэзервовага капіравання", - "NotificationOnBackupFailedDescription": "Спрацоўвае пры збоі рэзервовага капіравання", - "NotificationOnEpisodeDownloadedDescription": "Спрацоўвае, калі выпуск падкаста аўтаматычна спампоўваецца", - "NotificationOnRSSFeedDisabledDescription": "Спрацоўвае, калі аўтаматычнае спампоўванне выпускаў адключана з-за занадта вялікай колькасці няўдалых спроб", - "NotificationOnRSSFeedFailedDescription": "Спрацоўвае, пры памылцы запыту RSS-стужкі для аўтаматычнага спампоўвання выпуску", - "NotificationOnTestDescription": "Падзея для тэсціравання сістэмы апавяшчэнняў", - "PlaceholderBulkChapterInput": "Увядзіце загаловак раздзела або выкарыстоўвайце нумарацыю (напрыклад, «Выпуск 1», «Раздзел 10», «1.»)", - "PlaceholderNewCollection": "Назва новай калекцыі", - "PlaceholderNewFolderPath": "Шлях да новай папкі", - "PlaceholderNewPlaylist": "Назва новага плэй-ліста", - "PlaceholderSearch": "Пошук..", - "PlaceholderSearchEpisode": "Пошук выпуску...", - "StatsAuthorsAdded": "дададзена аўтараў", - "StatsBooksAdded": "дададзена кніг", - "StatsBooksAdditional": "Некаторыя дапаўненні ўключаюць…", - "StatsBooksFinished": "завершана кніг", - "StatsBooksFinishedThisYear": "Некаторыя кнігі завершаны ў гэтым годзе…", + "NoteRSSFeedPodcastAppsPubDate": "Папярэджанне: адзін ці больш вашых эпізодаў не маюць даты публікацыі. Некаторыя праграмы для падкастаў патрабуюць гэтага.", + "NoteUploaderFoldersWithMediaFiles": "Тэчкі з медыяфайламі будуць апрацоўвацца як асобныя элементы бібліятэкі.", + "NotificationOnEpisodeDownloadedDescription": "Выклікаецца, калі эпізод падкаста аўтаматычна спампоўваецца", + "PlaceholderNewPlaylist": "Імя новага спіса прайгравання", + "StatsBooksFinished": "кнігі скончаны", + "StatsBooksFinishedThisYear": "Некаторыя кнігі скончаны ў гэтым годзе…", "StatsBooksListenedTo": "кнігі, якія былі праслуханы", "StatsCollectionGrewTo": "Ваша калекцыя кніг павялічылася да…", - "StatsSessions": "сеансаў", - "StatsSpentListening": "праслухана", - "StatsTopAuthor": "ТОП АЎТАР", - "StatsTopAuthors": "ТОП АЎТАРЫ", - "StatsTopGenre": "ТОП ЖАНР", - "StatsTopGenres": "ТОП ЖАНРЫ", - "StatsTopMonth": "ТОП МЕСЯЦ", - "StatsTopNarrator": "ТОП ДЫКТАР", - "StatsTopNarrators": "ТОП ДЫКТАРЫ", - "StatsTotalDuration": "З агульнай працягласцю…", - "StatsYearInReview": "ВЫНІКІ ГОДА", "ToastAccountUpdateSuccess": "Уліковы запіс абноўлены", - "ToastAppriseUrlRequired": "Неабходна ўвесці URL-адрас Apprise", - "ToastAsinRequired": "ASIN абавязковы", - "ToastAuthorImageRemoveSuccess": "Відарыс аўтара выдалены", - "ToastAuthorNotFound": "Аўтар \"{0}\" не знойдзены", - "ToastAuthorRemoveSuccess": "Аўтар выдалены", - "ToastAuthorSearchNotFound": "Аўтар не знойдзены", - "ToastAuthorUpdateMerged": "Аўтар аб'яднаны", + "ToastAuthorImageRemoveSuccess": "Выява аўтара выдалена", "ToastAuthorUpdateSuccess": "Аўтар абноўлены", - "ToastAuthorUpdateSuccessNoImageFound": "Аўтар абноўлены (відарыс не знойдзены)", - "ToastBackupAppliedSuccess": "Рэзервовая копія прыменена", - "ToastBackupCreateFailed": "Не ўдалося стварыць рэзервовую копію", - "ToastBackupCreateSuccess": "Рэзервовая копія створана", - "ToastBackupDeleteFailed": "Не ўдалося выдаліць рэзервовую копію", - "ToastBackupDeleteSuccess": "Рэзервовая копія выдалена", + "ToastAuthorUpdateSuccessNoImageFound": "Аўтар абноўлены (малюнак не знойдзены)", "ToastBackupInvalidMaxKeep": "Няправільная колькасць рэзервовых копій для захоўвання", "ToastBackupInvalidMaxSize": "Няправільны максімальны памер рэзервовай копіі", - "ToastBackupRestoreFailed": "Не ўдалося аднавіць рэзервовую копію", - "ToastBackupUploadFailed": "Не ўдалося запампаваць рэзервовую копію", - "ToastBackupUploadSuccess": "Рэзервовая копія запампавана", - "ToastBatchApplyDetailsToItemsSuccess": "Звесткі прыменены да элементаў", - "ToastBatchDeleteFailed": "Памылка групавога выдалення", - "ToastBatchDeleteSuccess": "Групавое выдаленне выканана", - "ToastBatchQuickMatchFailed": "Памылка групавога хуткага параўнання!", - "ToastBatchQuickMatchStarted": "Групавое хуткае параўнанне {0} кніг запушчана!", - "ToastBatchUpdateFailed": "Памылка групавога абнаўлення", - "ToastBatchUpdateSuccess": "Групавое абнаўленне выканана", "ToastBookmarkCreateFailed": "Не ўдалося стварыць закладку", - "ToastBookmarkCreateSuccess": "Закладка дададзена", - "ToastBookmarkRemoveSuccess": "Закладка выдалена", - "ToastBulkChapterInvalidCount": "Увядзіце лік ад 1 да 150", - "ToastCachePurgeFailed": "Не ўдалося ачысціць кэш", - "ToastCachePurgeSuccess": "Кэш паспяхова ачышчаны", - "ToastChapterLocked": "Раздзел заблакіраваны.", - "ToastChapterStartTimeAdjusted": "Час пачатку раздзела адкарэктаваны на {0} секунд", - "ToastChaptersAllLocked": "Усе раздзелы заблакіраваны. Разблакіруйце некаторыя раздзелы, каб зрушыць іх час.", - "ToastChaptersHaveErrors": "Раздзелы маюць памылкі", - "ToastChaptersInvalidShiftAmountLast": "Памылковая велічыня зруху. Час пачатку апошняга раздзела перавышае працягласць гэтай аўдыякнігі.", - "ToastChaptersInvalidShiftAmountStart": "Памылковая велічыня зруху. Першы раздзел будзе мець нулявую або адмоўную працягласць і будзе перазапісаны другім раздзелам. Павялічце пачатковую працягласць другога раздзела.", - "ToastChaptersMustHaveTitles": "Раздзелы павінны мець загалоўкі", - "ToastChaptersRemoved": "Раздзелы выдалены", - "ToastChaptersUpdated": "Раздзелы абноўлены", - "ToastCollectionItemsAddFailed": "Не ўдалося дадаць элемент(ы) у калекцыю", - "ToastCollectionRemoveSuccess": "Калекцыя выдалена", - "ToastCollectionUpdateSuccess": "Калекцыя абноўлена", - "ToastConnectionNotAvailable": "Падключэнне недаступна. Паспрабуйце яшчэ раз пазней", - "ToastCoverSearchFailed": "Не ўдалося знайсці вокладку", - "ToastCoverUpdateFailed": "Не ўдалося абнавіць вокладку", "ToastDateTimeInvalidOrIncomplete": "Дата і час указаны некарэктна або не цалкам", - "ToastDeleteFileFailed": "Не ўдалося выдаліць файл", - "ToastDeleteFileSuccess": "Файл выдалены", - "ToastDeviceAddFailed": "Не ўдалося дадаць прыладу", - "ToastDeviceNameAlreadyExists": "Прылада для чытання электронных кніг з такой назвай ужо існуе", "ToastDeviceTestEmailFailed": "Не ўдалося адправіць тэставае электроннае пісьмо", - "ToastDeviceTestEmailSuccess": "Тэставы электронны ліст адпраўлены", - "ToastEmailSettingsUpdateSuccess": "Налады электроннай пошты абноўлены", "ToastEncodeCancelFailed": "Не ўдалося скасаваць кадаванне", "ToastEncodeCancelSucces": "Кадаванне скасавана", "ToastEpisodeDownloadQueueClearFailed": "Не ўдалося ачысціць чаргу", - "ToastEpisodeDownloadQueueClearSuccess": "Чарга спампоўвання выпускаў ачышчана", - "ToastEpisodeUpdateSuccess": "Абноўлена выпускаў: {0}", - "ToastErrorCannotShare": "Немагчыма абагуліць на гэтай прыладзе", - "ToastFailedToCreate": "Не ўдалося стварыць", - "ToastFailedToDelete": "Не ўдалося выдаліць", - "ToastFailedToLoadData": "Не ўдалося загрузіць даныя", - "ToastFailedToMatch": "Не атрымалася знайсці супадзенне", - "ToastFailedToShare": "Не ўдалося абагуліць", - "ToastFailedToUpdate": "Не здалося абнавіць", - "ToastInvalidImageUrl": "Памылковы URL-адрас відарыса", - "ToastInvalidMaxEpisodesToDownload": "Няправільная максімальная колькасць выпускаў для спампоўвання", - "ToastInvalidUrl": "Памылковы URL-адрас", - "ToastInvalidUrls": "Адзін або некалькі URL-адрасоў памылковыя", - "ToastItemCoverUpdateSuccess": "Вокладка элемента абноўлена", - "ToastItemDeletedFailed": "Не ўдалося выдаліць элемент", - "ToastItemDeletedSuccess": "Выдалены элемент", - "ToastItemDetailsUpdateSuccess": "Звесткі элемента абноўлены", - "ToastItemMarkedAsFinishedFailed": "Не ўдалося пазначыць як завершаны", - "ToastItemMarkedAsFinishedSuccess": "Элемент пазначаны як завершаны", - "ToastItemMarkedAsNotFinishedFailed": "Не ўдалося пазначыць як незавершаны", - "ToastItemMarkedAsNotFinishedSuccess": "Элемент пазначаны як незавершаны", + "ToastEpisodeDownloadQueueClearSuccess": "Чарга спампоўкі эпізодаў ачышчана", + "ToastInvalidImageUrl": "Няправільны URL выявы", + "ToastInvalidMaxEpisodesToDownload": "Няправільная максімальная колькасць эпізодаў для спампоўкі", + "ToastItemMarkedAsFinishedFailed": "Не ўдалося пазначыць як Скончана", + "ToastItemMarkedAsFinishedSuccess": "Элемент пазначаны як Завершаны", + "ToastItemMarkedAsNotFinishedFailed": "Не ўдалося пазначыць як Незавершанае", + "ToastItemMarkedAsNotFinishedSuccess": "Элемент пазначаны як Незавершаны", "ToastItemUpdateSuccess": "Элемент абноўлены", "ToastLibraryCreateFailed": "Не ўдалося стварыць бібліятэку", "ToastLibraryCreateSuccess": "Бібліятэка \"{0}\" створана", @@ -1077,89 +736,24 @@ "ToastMustHaveAtLeastOnePath": "Павінен быць хаця б адзін шлях", "ToastNameEmailRequired": "Імя і электронная пошта абавязковыя", "ToastNameRequired": "Імя абавязковае", - "ToastNewApiKeyUserError": "Трэба выбраць карыстальніка", - "ToastNewEpisodesFound": "Знойдзена новых выпускаў: {0}", "ToastNewUserCreatedFailed": "Не ўдалося стварыць уліковы запіс: \"{0}\"", "ToastNewUserCreatedSuccess": "Новы ўліковы запіс створаны", - "ToastNewUserLibraryError": "Трэба выбраць хаця б адну бібліятэку", - "ToastNewUserPasswordError": "Мусіць мець пароль, толькі карыстальнік root можа мець пусты пароль", - "ToastNewUserTagError": "Трэбаа выбраць хаця б адзін тэг", - "ToastNewUserUsernameError": "Увядзіце імя карыстальніка", - "ToastNoNewEpisodesFound": "Новых выпускаў не знойдзена", "ToastNoRSSFeed": "У падкаста няма RSS-стужкі", - "ToastNoUpdatesNecessary": "Абнаўленні не патрэбныя", - "ToastNotificationCreateFailed": "Не ўдалося стварыць апавяшчэнне", - "ToastNotificationDeleteFailed": "Не ўдалося выдаліць апавяшчэнне", - "ToastNotificationFailedMaximum": "Максімальная колькасць няўдалых спроб павінна быць >= 0", - "ToastNotificationQueueMaximum": "Максімальная чарга апавяшчэнняў павінна быць >= 0", - "ToastNotificationSettingsUpdateSuccess": "Налады апавяшчэнняў абноўлены", - "ToastNotificationTestTriggerFailed": "Не ўдалося ўключыць тэставае апавяшчэнне", - "ToastNotificationTestTriggerSuccess": "Уключана тэставае апавяшчэнне", - "ToastNotificationUpdateSuccess": "Апавяшчэнне абноўлена", - "ToastPlaylistCreateFailed": "Не ўдалося стварыць плэй-ліст", - "ToastPlaylistCreateSuccess": "Плэй-ліст створаны", - "ToastPlaylistRemoveSuccess": "Плэй-ліст выдалены", - "ToastPlaylistUpdateSuccess": "Плэй-ліст абноўлены", + "ToastPlaylistCreateFailed": "Не ўдалося стварыць спіс прайгравання", + "ToastPlaylistCreateSuccess": "Спіс прайгравання створаны", + "ToastPlaylistRemoveSuccess": "Спіс прайгравання выдалены", + "ToastPlaylistUpdateSuccess": "Спіс прайгравання абноўлены", "ToastPodcastCreateFailed": "Не ўдалося стварыць падкаст", "ToastPodcastCreateSuccess": "Падкаст паспяхова створаны", - "ToastPodcastEpisodeUpdated": "Выпуск абноўлены", "ToastPodcastGetFeedFailed": "Не ўдалося атрымаць стужку падкаста", - "ToastPodcastNoEpisodesInFeed": "У RSS-ленце не знойдзена выпускаў", + "ToastPodcastNoEpisodesInFeed": "У RSS-стужцы не знойдзена эпізодаў", "ToastPodcastNoRssFeed": "У падкаста няма RSS-стужкі", - "ToastProgressIsNotBeingSynced": "Прагрэс не сінхранізуецца, перазапусціце прайграванне", - "ToastProviderCreatedFailed": "Не ўдалося дадаць пастаўшчыка", - "ToastProviderCreatedSuccess": "Новы пастаўшчык дададзены", - "ToastProviderNameAndUrlRequired": "Назва і URL-адрас абавязковыя", - "ToastProviderRemoveSuccess": "Пастаўшчык выдалены", "ToastRSSFeedCloseFailed": "Не ўдалося закрыць RSS-стужку", "ToastRSSFeedCloseSuccess": "RSS-стужка закрыта", - "ToastRemoveFailed": "Не ўдалося выдаліць", - "ToastRemoveItemFromCollectionFailed": "Не ўдалося выдаліць элемент з калекцыі", - "ToastRemoveItemFromCollectionSuccess": "Элемент выдалены з калекцыі", - "ToastRemoveItemsWithIssuesFailed": "Не ўдалося выдаліць элементы бібліятэкі з праблемамі", - "ToastRemoveItemsWithIssuesSuccess": "Выдалены элементы бібліятэкі з праблемамі", - "ToastRenameFailed": "Не ўдалося перайменаваць", - "ToastRescanFailed": "Не ўдалося паўторна прасканіраваць {0}", - "ToastRescanRemoved": "Паўторнае сканаванне завершана, элемент быў выдалены", - "ToastRescanUpToDate": "Паўторнае сканаванне завершана, элемент быў у актуальным стане", - "ToastRescanUpdated": "Паўторнае сканаванне завершана, элемент быў абноўлены", - "ToastScanFailed": "Не ўдалося адсканіраваць элемент бібліятэкі", - "ToastSelectAtLeastOneUser": "Выберыце прынамсі аднаго карыстальніка", "ToastSendEbookToDeviceFailed": "Не ўдалося адправіць электронную кнігу на прыладу", "ToastSendEbookToDeviceSuccess": "Электронная кніга адпраўлена на прыладу \"{0}\"", - "ToastSeriesSubmitFailedSameName": "Немагчыма дадаць дзве серыі з аднолькавай назвай", - "ToastSeriesUpdateFailed": "Не ўдалося абнавіць серыі", - "ToastSeriesUpdateSuccess": "Серыі абноўлены", - "ToastServerSettingsUpdateSuccess": "Налады сервера абноўлены", - "ToastSessionCloseFailed": "Не ўдалося закрыць сеанс", - "ToastSessionDeleteFailed": "Не ўдалося выдаліць сеанс", - "ToastSessionDeleteSuccess": "Сеанс выдалены", "ToastSleepTimerDone": "Таймер сну скончыўся... Хр-р-р", - "ToastSlugMustChange": "Ідэнтыфікатар змяшчае недапушчальныя сімвалы", - "ToastSlugRequired": "Ідэнтыфікатар абавязковы", - "ToastSocketConnected": "Сокет падключаны", - "ToastSocketDisconnected": "Сокет адключаны", - "ToastSocketFailedToConnect": "Не ўдалося падключыць сокет", - "ToastSortingPrefixesEmptyError": "Мусіць мець хаця б адзін прэфікс сартавання", - "ToastSortingPrefixesUpdateSuccess": "Прэфіксы сартавання абноўлены ({0} элементаў)", - "ToastTitleRequired": "Загаловак абавязковы", - "ToastUnknownError": "Невядомая памылка", - "ToastUnlinkOpenIdFailed": "Не ўдалося адвязаць карыстальніка ад OpenID", - "ToastUnlinkOpenIdSuccess": "Карыстальнік адвязаны ад OpenID", - "ToastUploaderFilepathExistsError": "Файл \"{0}\" ужо існуе на серверы", "ToastUploaderItemExistsInSubdirectoryError": "Элемент \"{0}\" выкарыстоўвае падкаталог шляху загрузкі.", - "ToastUserDeleteFailed": "Не ўдалося выдаліць карыстальніка", - "ToastUserDeleteSuccess": "Карыстальнік выдалены", - "ToastUserPasswordChangeSuccess": "Пароль паспяхова зменены", - "ToastUserPasswordMismatch": "Паролі не супадаюць", "ToastUserPasswordMustChange": "Новы пароль не можа супадаць са старым", - "ToastUserRootRequireName": "Неабходна ўвесці імя карыстальніка адміністратара", - "TooltipAddChapters": "Дадаць раздзел(ы)", - "TooltipAddOneSecond": "Дадаць 1 секунду", - "TooltipAdjustChapterStart": "Націсніце, каб адкарэкціраваць час пачатку", - "TooltipLockAllChapters": "Заблакіраваць усе раздзелы", - "TooltipLockChapter": "Заблакіраваць раздзел (Shift+націсканне для дыяпазону)", - "TooltipSubtractOneSecond": "Адняць 1 секунду", - "TooltipUnlockAllChapters": "Разблакіраваць усе раздзелы", - "TooltipUnlockChapter": "Разблакіраваць раздзел (Shift+націсканне для выбару дыяпазону)" + "ToastUserRootRequireName": "Неабходна ўвесці імя карыстальніка адміністратара" } diff --git a/client/strings/ca.json b/client/strings/ca.json index 4180b251..dbda8b8e 100644 --- a/client/strings/ca.json +++ b/client/strings/ca.json @@ -166,7 +166,6 @@ "HeaderMetadataOrderOfPrecedence": "Ordre de Precedència de Metadades", "HeaderMetadataToEmbed": "Metadades a Inserir", "HeaderNewAccount": "Nou Compte", - "HeaderNewApiKey": "Nova clau API", "HeaderNewLibrary": "Nova Biblioteca", "HeaderNotificationCreate": "Crea Notificació", "HeaderNotificationUpdate": "Actualització de Notificació", @@ -200,7 +199,6 @@ "HeaderSettingsExperimental": "Funcionalitats experimentals", "HeaderSettingsGeneral": "Generals", "HeaderSettingsScanner": "Escàner", - "HeaderSettingsSecurity": "Seguretat", "HeaderSettingsWebClient": "Client web", "HeaderSleepTimer": "Temporitzador de son", "HeaderStatsLargestItems": "Elements més grans", @@ -423,9 +421,6 @@ "LabelLibraryFilterSublistEmpty": "Sense {0}", "LabelLibraryItem": "Element de Biblioteca", "LabelLibraryName": "Nom de Biblioteca", - "LabelLibrarySortByProgress": "Progrés: Última actualització", - "LabelLibrarySortByProgressFinished": "Progrés: Finalitzat", - "LabelLibrarySortByProgressStarted": "Progrés: Començat", "LabelLimit": "Límits", "LabelLineSpacing": "Interlineat", "LabelListenAgain": "Escoltar de nou", @@ -448,7 +443,7 @@ "LabelMetadataProvider": "Proveïdor de metadades", "LabelMinute": "Minut", "LabelMinutes": "Minuts", - "LabelMissing": "Falta", + "LabelMissing": "Absent", "LabelMissingEbook": "No té llibre electrònic", "LabelMissingSupplementaryEbook": "No té ebook complementari", "LabelMobileRedirectURIs": "URI de redirecció mòbil permeses", diff --git a/client/strings/cs.json b/client/strings/cs.json index 49b0d2bd..f70d6693 100644 --- a/client/strings/cs.json +++ b/client/strings/cs.json @@ -385,7 +385,7 @@ "LabelFontBoldness": "Výraznost písma", "LabelFontFamily": "Rodina písem", "LabelFontItalic": "Kurzíva", - "LabelFontScale": "Velikost písma", + "LabelFontScale": "Měřítko písma", "LabelFontStrikethrough": "Přeškrtnutí", "LabelFormat": "Formát", "LabelFull": "Plné", diff --git a/client/strings/da.json b/client/strings/da.json index 6cf517fa..ab144497 100644 --- a/client/strings/da.json +++ b/client/strings/da.json @@ -127,7 +127,6 @@ "HeaderAudiobookTools": "Audiobog Filhåndteringsværktøjer", "HeaderAuthentication": "Autentificering", "HeaderBackups": "Sikkerhedskopier", - "HeaderBulkChapterModal": "Tilføj flere kapitler", "HeaderChangePassword": "Skift Adgangskode", "HeaderChapters": "Kapitler", "HeaderChooseAFolder": "Vælg en Mappe", @@ -200,7 +199,6 @@ "HeaderSettingsExperimental": "Eksperimentelle Funktioner", "HeaderSettingsGeneral": "Generelt", "HeaderSettingsScanner": "Scanner", - "HeaderSettingsSecurity": "Sikkerhed", "HeaderSettingsWebClient": "Webklient", "HeaderSleepTimer": "Søvntimer", "HeaderStatsLargestItems": "Største Elementer", @@ -275,7 +273,7 @@ "LabelBonus": "Bonus", "LabelBooks": "Bøger", "LabelButtonText": "Knap tekst", - "LabelByAuthor": "Efter Forfatter", + "LabelByAuthor": "af {0}", "LabelChangePassword": "Ændre Adgangskode", "LabelChannels": "Kanaler", "LabelChapterCount": "{0} Kapitler", @@ -295,7 +293,6 @@ "LabelContinueListening": "Fortsæt med at lytte", "LabelContinueReading": "Fortsæt med at læse", "LabelContinueSeries": "Fortsæt Serien", - "LabelCorsAllowed": "Tilladte CORS-oprindelser", "LabelCover": "Omslag", "LabelCoverImageURL": "Omslagsbillede URL", "LabelCoverProvider": "Cover billede udbyder", @@ -309,7 +306,6 @@ "LabelDeleteFromFileSystemCheckbox": "Slet fra filsystem (afmarker kun for at fjerne fra databasen)", "LabelDescription": "Beskrivelse", "LabelDeselectAll": "Fravælg Alle", - "LabelDetectedPattern": "Identificeret mønster:", "LabelDevice": "Enheds", "LabelDeviceInfo": "Enhedsinformation", "LabelDeviceIsAvailableTo": "Enhed er tilgængelig for...", @@ -378,12 +374,11 @@ "LabelFilterByUser": "Filtrér efter bruger", "LabelFindEpisodes": "Find episoder", "LabelFinished": "Færdig", - "LabelFinishedDate": "Færdig {0}", "LabelFolder": "Mappe", "LabelFolders": "Mapper", "LabelFontBold": "Fed", "LabelFontBoldness": "Skrift tykkelse", - "LabelFontFamily": "Skrifttypefamilie", + "LabelFontFamily": "Fontfamilie", "LabelFontItalic": "Kursiv", "LabelFontScale": "Skriftstørrelse", "LabelFontStrikethrough": "Gennemstreget", @@ -423,7 +418,6 @@ "LabelLanguages": "Sprog", "LabelLastBookAdded": "Senest tilføjede bog", "LabelLastBookUpdated": "Senest opdaterede bog", - "LabelLastProgressDate": "Sidste fremgang: {0}", "LabelLastSeen": "Sidst set", "LabelLastTime": "Sidste gang", "LabelLastUpdate": "Seneste opdatering", @@ -436,9 +430,6 @@ "LabelLibraryFilterSublistEmpty": "Nej {0}", "LabelLibraryItem": "Bibliotekselement", "LabelLibraryName": "Biblioteksnavn", - "LabelLibrarySortByProgress": "Fremgang: Sidst opdateret", - "LabelLibrarySortByProgressFinished": "Fremgang: Afsluttet", - "LabelLibrarySortByProgressStarted": "Fremgang: Startet", "LabelLimit": "Grænse", "LabelLineSpacing": "Linjeafstand", "LabelListenAgain": "Lyt igen", @@ -447,7 +438,6 @@ "LabelLogLevelWarn": "Advarsel", "LabelLookForNewEpisodesAfterDate": "Søg efter nye episoder efter denne dato", "LabelLowestPriority": "Laveste prioritet", - "LabelMatchConfidence": "Confidens", "LabelMatchExistingUsersBy": "Match eksisterende brugere ved", "LabelMatchExistingUsersByDescription": "Anvendt for at forbinde brugere. Når forbundet, brugere vil blive matchet ved unikt id fra din SSO udbyder", "LabelMaxEpisodesToDownload": "Max # afsnit for at downloade. Anvend 0 for ubegrænset.", @@ -477,7 +467,6 @@ "LabelNewestAuthors": "Nyeste forfattere", "LabelNewestEpisodes": "Nyeste episoder", "LabelNextBackupDate": "Næste sikkerhedskopi dato", - "LabelNextChapters": "Næste kapitler vil være:", "LabelNextScheduledRun": "Næste planlagte kørsel", "LabelNoApiKeys": "Ingen API-nøgler", "LabelNoCustomMetadataProviders": "Ingen brugerdefinerede metadata udbydere", @@ -495,7 +484,6 @@ "LabelNotificationsMaxQueueSize": "Maksimal køstørrelse for meddelelseshændelser", "LabelNotificationsMaxQueueSizeHelp": "Hændelser begrænses til at udløse en gang pr. sekund. Hændelser ignoreres, hvis køen er fyldt. Dette forhindrer meddelelsesspam.", "LabelNumberOfBooks": "Antal bøger", - "LabelNumberOfChapters": "Antal kapitler:", "LabelNumberOfEpisodes": "# afsnit", "LabelOpenIDAdvancedPermsClaimDescription": "Navnet af OpenID claimet som indeholder avancerede brugerhandlinger inden i applikationen som vil gælde for ikke administrative roller (hvis konfigureret). Hvis et claim mangler fra svaret vil adgang til ABS blive nægtet. Hvis en enkelt indstilling/option mangler, vil det bliver behandlet som 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.", @@ -588,8 +576,8 @@ "LabelSettingsBookshelfViewHelp": "Skeumorfisk design med træhylder", "LabelSettingsChromecastSupport": "Chromecast-understøttelse", "LabelSettingsDateFormat": "Datoformat", - "LabelSettingsEnableWatcher": "Automatisk biblioteksovervåger", - "LabelSettingsEnableWatcherForLibrary": "Automatisk biblioteksovervåger", + "LabelSettingsEnableWatcher": "Scan automatisk bibliotek for ændringer", + "LabelSettingsEnableWatcherForLibrary": "Scan automatisk bibliotek for ændringer", "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.", @@ -638,7 +626,6 @@ "LabelStartTime": "Starttid", "LabelStarted": "Startet", "LabelStartedAt": "Startet klokken", - "LabelStartedDate": "Startet {0}", "LabelStatsAudioTracks": "Lydspor", "LabelStatsAuthors": "Forfattere", "LabelStatsBestDay": "Bedste dag", @@ -668,7 +655,6 @@ "LabelTheme": "Tema", "LabelThemeDark": "Mørk", "LabelThemeLight": "Lys", - "LabelThemeSepia": "Sepia", "LabelTimeBase": "Tidsbase", "LabelTimeDurationXHours": "{0} timer", "LabelTimeDurationXMinutes": "{0} minutter", @@ -753,7 +739,6 @@ "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", @@ -790,7 +775,6 @@ "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?", @@ -816,8 +800,6 @@ "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", @@ -888,7 +870,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.

Sikkerhedskopier ændrer ikke nogen filer i dine biblioteksmapper. Hvis du har aktiveret serverindstillinger for at gemme omslagskunst og metadata i dine biblioteksmapper, sikkerhedskopieres eller overskrives disse ikke.

Alle klienter, der bruger din server, opdateres automatisk.", - "MessageScheduleLibraryScanNote": "For de fleste brugere er det anbefalet, at efterlade denne funktion deaktiveret, og lade biblioteksovervågeren være aktiveret - den vil automatisk opdage ændringer i dine biblioteksmapper. Aktiver denne funktion, hvis biblioteksovervågeren ikke virker med dit filsystem (f. eks. NFS).", + "MessageScheduleLibraryScanNote": "For de fleste brugere, er det anbefalet at efterlade denne funktion deaktiveret for at holde mappe lurer indstilling aktiveret. Mappe lureren vil automatisk opdage ændringer i biblioteksmapper. Mappe lureren virker ikke for alle filsystemer (så som NFS) så schedulerede biblioteksscans vil blive anvendt.", "MessageScheduleRunEveryWeekdayAtTime": "Kør hvert {0} af {1}", "MessageSearchResultsFor": "Søgeresultater for", "MessageSelected": "{0} valgt", @@ -957,7 +939,6 @@ "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", - "PlaceholderBulkChapterInput": "Indtast kapiteltitel eller brug nummerering (f.eks. 'Episode 1', 'Kapitel 10', '1.')", "PlaceholderNewCollection": "Nyt samlingnavn", "PlaceholderNewFolderPath": "Ny mappes sti", "PlaceholderNewPlaylist": "Nyt afspilningslistnavn", @@ -1011,15 +992,9 @@ "ToastBookmarkCreateFailed": "Mislykkedes oprettelse af bogmærke", "ToastBookmarkCreateSuccess": "Bogmærke tilføjet", "ToastBookmarkRemoveSuccess": "Bogmærke fjernet", - "ToastBulkChapterInvalidCount": "Indtast et tal mellem 1 og 150", "ToastCachePurgeFailed": "Fejlede at opryde cache", "ToastCachePurgeSuccess": "Cache ryddet op i succesfuldt", - "ToastChapterLocked": "Kapitel er låst.", - "ToastChapterStartTimeAdjusted": "Kapitelstarttid justeret med {0} sekunder", - "ToastChaptersAllLocked": "Alle kapitler er låst. Lås op for nogle kapitler for at ændre deres tider.", "ToastChaptersHaveErrors": "Kapitler har fejl", - "ToastChaptersInvalidShiftAmountLast": "Ugyldig ændring. Det sidste kapitels starttid ville fortsætte længere end varigheden på denne lydbog.", - "ToastChaptersInvalidShiftAmountStart": "Ugyldig ændring. Første kapitel ville have en længde på nul eller negativt og ville blive overskrevet af andet kapitel. Udvid startvarigheden på andet kapitel.", "ToastChaptersMustHaveTitles": "Kapitler skal have titler", "ToastChaptersRemoved": "Kapitler fjernet", "ToastChaptersUpdated": "Kapitler opdateret", @@ -1027,7 +1002,6 @@ "ToastCollectionRemoveSuccess": "Samling fjernet", "ToastCollectionUpdateSuccess": "Samling opdateret", "ToastConnectionNotAvailable": "Forbindelse mislykkedes. Prøv igen senere", - "ToastCoverSearchFailed": "Cover-søgning mislykkedes", "ToastCoverUpdateFailed": "Cover opdatering fejlede", "ToastDateTimeInvalidOrIncomplete": "Dato og tid er ugyldig eller ufærdig", "ToastDeleteFileFailed": "Sletning af fil fejlede", @@ -1077,7 +1051,6 @@ "ToastMustHaveAtLeastOnePath": "Skal have mindst en sti", "ToastNameEmailRequired": "Navn og email påkrævet", "ToastNameRequired": "Navn påkrævet", - "ToastNewApiKeyUserError": "En bruger skal vælges", "ToastNewEpisodesFound": "{0} nye afsnit fundet", "ToastNewUserCreatedFailed": "Fejlede at oprette konto: \"{0}\"", "ToastNewUserCreatedSuccess": "Ny konto oprettet", @@ -1102,7 +1075,6 @@ "ToastPlaylistUpdateSuccess": "Afspilningsliste opdateret", "ToastPodcastCreateFailed": "Mislykkedes oprettelse af podcast", "ToastPodcastCreateSuccess": "Podcast oprettet med succes", - "ToastPodcastEpisodeUpdated": "Episode opdateret", "ToastPodcastGetFeedFailed": "Fejlede at hente podcast feed", "ToastPodcastNoEpisodesInFeed": "Ingen nye afsnit fundet i RSS feed", "ToastPodcastNoRssFeed": "Podcast har ingen RSS feed", @@ -1153,13 +1125,5 @@ "ToastUserPasswordChangeSuccess": "Password ændret", "ToastUserPasswordMismatch": "Passwords passer ikke sammen", "ToastUserPasswordMustChange": "Nyt password må ikke være det gamle", - "ToastUserRootRequireName": "Skal indholde et root brugernavn", - "TooltipAddChapters": "Tilføj kapitler", - "TooltipAddOneSecond": "Tilføj 1 sekund", - "TooltipAdjustChapterStart": "Klik for at ændre starttiden", - "TooltipLockAllChapters": "Lås alle kapitler", - "TooltipLockChapter": "Lås kapitel (Shift+click for at markere flere)", - "TooltipSubtractOneSecond": "Fratag 1 sekund", - "TooltipUnlockAllChapters": "Lås alle kapitaler op", - "TooltipUnlockChapter": "Lås kapitel op (Shift+click for at markere flere)" + "ToastUserRootRequireName": "Skal indholde et root brugernavn" } diff --git a/client/strings/de.json b/client/strings/de.json index 27634865..970c9423 100644 --- a/client/strings/de.json +++ b/client/strings/de.json @@ -116,7 +116,7 @@ "ButtonViewAll": "Alles anzeigen", "ButtonYes": "Ja", "ErrorUploadFetchMetadataAPI": "Fehler beim Abrufen der Metadaten", - "ErrorUploadFetchMetadataNoResults": "Metadaten konnten nicht abgerufen werden. Versuche, den Titel und/oder den Autor zu aktualisieren.", + "ErrorUploadFetchMetadataNoResults": "Metadaten konnten nicht abgerufen werden. Versuche den Titel und/oder den Autor zu aktualisieren.", "ErrorUploadLacksTitle": "Es muss ein Titel eingegeben werden", "HeaderAccount": "Konto", "HeaderAddCustomMetadataProvider": "Benutzerdefinierten Metadatenanbieter hinzufügen", @@ -436,7 +436,7 @@ "LabelLibraryFilterSublistEmpty": "Keine {0}", "LabelLibraryItem": "Bibliothekseintrag", "LabelLibraryName": "Bibliotheksname", - "LabelLibrarySortByProgress": "Fortschritt: Letzte Aktualisierung", + "LabelLibrarySortByProgress": "Fortschritt: Zuletzt aktualisiert", "LabelLibrarySortByProgressFinished": "Fortschritt: Beendet", "LabelLibrarySortByProgressStarted": "Fortschritt: Gestartet", "LabelLimit": "Begrenzung", @@ -710,7 +710,7 @@ "LabelUploaderDragAndDropFilesOnly": "Dateien per Drag & Drop hierher ziehen", "LabelUploaderDropFiles": "Dateien löschen", "LabelUploaderItemFetchMetadataHelp": "Automatisches Aktualisieren von Titel, Autor und Serie", - "LabelUseAdvancedOptions": "Erweiterte Optionen verwenden", + "LabelUseAdvancedOptions": "Nutze Erweiterte Optionen", "LabelUseChapterTrack": "Kapiteldatei verwenden", "LabelUseFullTrack": "Gesamte Datei verwenden", "LabelUseZeroForUnlimited": "0 für unbegrenzt", @@ -737,7 +737,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.
Die Apprise API Url muss der vollständige URL-Pfad sein, an den die Benachrichtigung gesendet werden soll, z.B. wenn Ihre API-Instanz unter http://192.168.1.1:8337 läuft, würdest du http://192.168.1.1:8337/notify eingeben.", "MessageAsinCheck": "Stelle sicher, dass die ASIN aus der richtigen Audible Region verwendet wird, nicht Amazon.", - "MessageAuthenticationLegacyTokenWarning": "Alte API-Token werden in Zukunft entfernt. Benutze stattdessen API Keys.", + "MessageAuthenticationLegacyTokenWarning": "Alte API tokens werden in Zukunft entfernt. Benutze stattdessen API Keys.", "MessageAuthenticationOIDCChangesRestart": "Nach dem Speichern muss der Server neugestartet werden um die OIDC Änderungen zu übernehmen.", "MessageAuthenticationSecurityMessage": "Die Anmeldung wurde abgesichert. Benutzersitzungen werden getrennt, alle Benutzer müssen sich erneut anmelden.", "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.", @@ -1103,11 +1103,11 @@ "ToastPodcastCreateFailed": "Podcast konnte nicht erstellt werden", "ToastPodcastCreateSuccess": "Podcast erstellt", "ToastPodcastEpisodeUpdated": "Podcast-Folge aktualisiert", - "ToastPodcastGetFeedFailed": "Fehler beim abrufen des Podcast-Feeds", + "ToastPodcastGetFeedFailed": "Fehler beim abrufen des Podcast Feeds", "ToastPodcastNoEpisodesInFeed": "Keine Episoden in RSS Feed gefunden", "ToastPodcastNoRssFeed": "Podcast enthält keinen RSS Feed", "ToastProgressIsNotBeingSynced": "Fortschritt wird nicht synchronisiert, Wiedergabe wird neu gestartet", - "ToastProviderCreatedFailed": "Fehler beim Hinzufügen des Anbieters", + "ToastProviderCreatedFailed": "Fehler beim hinzufügen des Anbieters", "ToastProviderCreatedSuccess": "Neuer Anbieter hinzugefügt", "ToastProviderNameAndUrlRequired": "Name und URL notwendig", "ToastProviderRemoveSuccess": "Anbieter entfernt", diff --git a/client/strings/el.json b/client/strings/el.json index 2160b6e1..881bd971 100644 --- a/client/strings/el.json +++ b/client/strings/el.json @@ -100,11 +100,9 @@ "ButtonShiftTimes": "Χρόνοι Μετακίνησης", "ButtonShow": "Εμφάνιση", "ButtonStartM4BEncode": "Έναρξη Κωδικοποίησης M4B", - "ButtonStartMetadataEmbed": "Έναρξη Ενσωμάτωσης Μεταδεδομένων", "ButtonStats": "Στατιστικά", "ButtonSubmit": "Υποβολή", "ButtonTest": "Δοκιμή", - "ButtonUnlinkOpenId": "Αποσύνδεση OpenID", "ButtonUpload": "Μεταφόρτωση", "ButtonUploadBackup": "Μεταφόρτωση Αντιγράφου Ασφαλείας", "ButtonUploadCover": "Μεταφόρτωση Εξωφύλλου", @@ -113,17 +111,11 @@ "ButtonUserEdit": "Επεξεργασίας χρήστη {0}", "ButtonViewAll": "Εμφάνιση Όλων", "ButtonYes": "Ναι", - "ErrorUploadFetchMetadataAPI": "Σφάλμα κατά την ανάκτηση μεταδεδομένων", - "ErrorUploadFetchMetadataNoResults": "Δεν ήταν δυνατή η ανάκτηση των μεταδεδομένων - δοκιμάστε να ενημερώσετε τον τίτλο και/ή τον συγγραφέα", "ErrorUploadLacksTitle": "Πρέπει να έχει τίτλο", "HeaderAccount": "Λογαριασμός", - "HeaderAddCustomMetadataProvider": "Προσθήκη Προσαρμοσμένου Παρόχου Μεταδεδομένων", "HeaderAdvanced": "Για Προχωρημένους", "HeaderApiKeys": "Κλειδιά API", - "HeaderAppriseNotificationSettings": "Ρυθμίσεις Ειδοποιήσεων Apprise", "HeaderAudioTracks": "Κομμάτια Ήχου", - "HeaderAudiobookTools": "Εργαλεία Διαχείρισης Αρχείων Audiobooks", - "HeaderAuthentication": "Αυθεντικοποίηση", "HeaderBackups": "Αντίγραφα Ασφαλείας", "HeaderBulkChapterModal": "Προσθήκη Πολλαπλών Κεφαλαίων", "HeaderChangePassword": "Αλλαγή Κωδικού Πρόσβασης", @@ -224,7 +216,6 @@ "LabelChapters": "Κεφάλαια", "LabelChaptersFound": "κεφάλαια βρέθηκαν", "LabelClosePlayer": "Κλείσιμο αναπαραγωγής", - "LabelCollapseSeries": "Σύμπτυξη Σειράς", "LabelCollection": "Συλλογή", "LabelCollections": "Συλλογές", "LabelComplete": "Ολοκλήρωση", diff --git a/client/strings/es.json b/client/strings/es.json index 73ec1cd2..4a611b3d 100644 --- a/client/strings/es.json +++ b/client/strings/es.json @@ -275,7 +275,7 @@ "LabelBonus": "Bonus", "LabelBooks": "Libros", "LabelButtonText": "Texto del botón", - "LabelByAuthor": "por", + "LabelByAuthor": "por {0}", "LabelChangePassword": "Cambiar contraseña", "LabelChannels": "Canales", "LabelChapterCount": "{0} capítulos", diff --git a/client/strings/fr.json b/client/strings/fr.json index 497426d3..4841ec9f 100644 --- a/client/strings/fr.json +++ b/client/strings/fr.json @@ -275,7 +275,7 @@ "LabelBonus": "Bonus", "LabelBooks": "Livres", "LabelButtonText": "Texte du bouton", - "LabelByAuthor": "de {0}", + "LabelByAuthor": "par {0}", "LabelChangePassword": "Modifier le mot de passe", "LabelChannels": "Canaux", "LabelChapterCount": "{0} Chapitres", @@ -436,11 +436,11 @@ "LabelLibraryFilterSublistEmpty": "Aucun {0}", "LabelLibraryItem": "Élément de bibliothèque", "LabelLibraryName": "Nom de la bibliothèque", - "LabelLibrarySortByProgress": "Progression : Mise à jour", + "LabelLibrarySortByProgress": "Progression : dernière mise à jour", "LabelLibrarySortByProgressFinished": "Progression : Terminé", - "LabelLibrarySortByProgressStarted": "Progression : En cours", + "LabelLibrarySortByProgressStarted": "Progression : Commencé", "LabelLimit": "Limite", - "LabelLineSpacing": "Interligne", + "LabelLineSpacing": "Espacement des lignes", "LabelListenAgain": "Écouter à nouveau", "LabelLogLevelDebug": "Débogage", "LabelLogLevelInfo": "Info", @@ -961,8 +961,8 @@ "PlaceholderNewCollection": "Nom de la nouvelle collection", "PlaceholderNewFolderPath": "Nouveau chemin de dossier", "PlaceholderNewPlaylist": "Nouveau nom de liste de lecture", - "PlaceholderSearch": "Recherche...", - "PlaceholderSearchEpisode": "Rechercher un épisode…", + "PlaceholderSearch": "Recherche…", + "PlaceholderSearchEpisode": "Rechercher un épisode..", "StatsAuthorsAdded": "auteurs ajoutés", "StatsBooksAdded": "livres ajoutés", "StatsBooksAdditional": "Les ajouts comprennent…", diff --git a/client/strings/he.json b/client/strings/he.json index 786683a5..0efc1ec9 100644 --- a/client/strings/he.json +++ b/client/strings/he.json @@ -81,7 +81,7 @@ "ButtonRemove": "הסר", "ButtonRemoveAll": "הסר הכל", "ButtonRemoveAllLibraryItems": "הסר את כל פריטי הספרייה", - "ButtonRemoveFromContinueListening": "הסר מ״המשך האזנה״", + "ButtonRemoveFromContinueListening": "הסר מ- המשך האזנה", "ButtonRemoveFromContinueReading": "הסר מ- המשך קריאה", "ButtonRemoveSeriesFromContinueSeries": "הסר סדרה מ- המשך סדרה", "ButtonReset": "איפוס", @@ -121,7 +121,6 @@ "HeaderAccount": "חשבון", "HeaderAddCustomMetadataProvider": "הוסף ספק מטא-נתונים מותאם אישית", "HeaderAdvanced": "מתקדם", - "HeaderApiKeys": "מפתחות API", "HeaderAppriseNotificationSettings": "הגדרות התראות של Apprise", "HeaderAudioTracks": "רצועות קול", "HeaderAudiobookTools": "כלים לניהול קבצי ספרים קוליים", @@ -166,7 +165,6 @@ "HeaderMetadataOrderOfPrecedence": "סדר העדפת מטא-נתונים", "HeaderMetadataToEmbed": "מטא-נתונים להטמעה", "HeaderNewAccount": "חשבון חדש", - "HeaderNewApiKey": "מפתח API חדש", "HeaderNewLibrary": "ספרייה חדשה", "HeaderNotificationCreate": "צור התראה", "HeaderNotificationUpdate": "עדכון התראה", @@ -212,7 +210,6 @@ "HeaderTableOfContents": "תוכן עניינים", "HeaderTools": "כלים", "HeaderUpdateAccount": "עדכן חשבון", - "HeaderUpdateApiKey": "עדכן מפתח API", "HeaderUpdateAuthor": "עדכן יוצר", "HeaderUpdateDetails": "עדכן פרטים", "HeaderUpdateLibrary": "עדכן ספרייה", @@ -242,10 +239,7 @@ "LabelAllUsersExcludingGuests": "כל המשתמשים, ללא אורחים", "LabelAllUsersIncludingGuests": "כל המשתמשים כולל אורחים", "LabelAlreadyInYourLibrary": "כבר קיים בספרייה שלך", - "LabelApiKeyCreated": "מפתח API ״{0}״ נוצר בהצלחה.", - "LabelApiKeyCreatedDescription": "אנא העתק את מפתח ה־API כעת, לא ניתן יהיה להציגו שוב.", "LabelApiKeyUser": "פעל בשם המשתמש", - "LabelApiKeyUserDescription": "למפתח ה־API יהיו הרשאות זהות למשתמש שעל שמו הוא פועל. ביומני הרישום (logs), הפעולות יופיעו כאילו בוצעו על ידי המשתמש עצמו.", "LabelApiToken": "טוקן API", "LabelAppend": "הוסף לסוף", "LabelAudioBitrate": "קצב סיביות (לדוגמא 128k)", @@ -295,7 +289,6 @@ "LabelContinueListening": "המשך האזנה", "LabelContinueReading": "המשך קריאה", "LabelContinueSeries": "המשך סדרה", - "LabelCorsAllowed": "מקורות CORS מורשים", "LabelCover": "כריכה", "LabelCoverImageURL": "כתובת התמונה ברשת", "LabelCoverProvider": "ספק כריכה", @@ -309,7 +302,6 @@ "LabelDeleteFromFileSystemCheckbox": "מחיקה מהמערכת הקבצים (הסר סימון למחיקה רק ממסד הנתונים)", "LabelDescription": "תיאור", "LabelDeselectAll": "הסר בחירת כל הפריטים", - "LabelDetectedPattern": "תבנית שזוהתה:", "LabelDevice": "התקן", "LabelDeviceInfo": "מידע על התקן", "LabelDeviceIsAvailableTo": "התקן זמין ל...", @@ -359,10 +351,6 @@ "LabelExample": "דוגמה", "LabelExpandSeries": "הרחב סדרה", "LabelExpandSubSeries": "הרחב תת סדרה", - "LabelExpired": "פג תוקף", - "LabelExpiresAt": "יפוג בתאריך", - "LabelExpiresInSeconds": "יפוג בעוד (שניות)", - "LabelExpiresNever": "ללא הגבלת זמן", "LabelExplicit": "מפורש", "LabelExplicitChecked": "בוטה (מסומן)", "LabelExplicitUnchecked": "לא בוטה (לא מסומן)", @@ -378,7 +366,6 @@ "LabelFilterByUser": "סינון לפי משתמש", "LabelFindEpisodes": "מצא פרקים", "LabelFinished": "הושלם", - "LabelFinishedDate": "הושלם {0}", "LabelFolder": "תיקייה", "LabelFolders": "תיקיות", "LabelFontBold": "מודגש", @@ -423,7 +410,6 @@ "LabelLanguages": "שפות", "LabelLastBookAdded": "הספר האחרון שנוסף", "LabelLastBookUpdated": "הספר האחרון שעודכן", - "LabelLastProgressDate": "התקדמות אחרונה: {0}", "LabelLastSeen": "נראה לאחרונה", "LabelLastTime": "הזמן האחרון", "LabelLastUpdate": "עדכון אחרון", @@ -436,9 +422,6 @@ "LabelLibraryFilterSublistEmpty": "לא {0}", "LabelLibraryItem": "פריט ספרייה", "LabelLibraryName": "שם הספרייה", - "LabelLibrarySortByProgress": "התקדמות: עודכן לאחרונה", - "LabelLibrarySortByProgressFinished": "התקדמות: הושלם", - "LabelLibrarySortByProgressStarted": "התקדמות: הותחל", "LabelLimit": "מגבלה", "LabelLineSpacing": "מרווח שורה", "LabelListenAgain": "האזן שוב", @@ -447,7 +430,6 @@ "LabelLogLevelWarn": "אזהרה", "LabelLookForNewEpisodesAfterDate": "חפש פרקים חדשים לאחר תאריך זה", "LabelLowestPriority": "העדיפות הנמוכה ביותר", - "LabelMatchConfidence": "רמת ודאות", "LabelMatchExistingUsersBy": "התאם משתמשים קיימים לפי", "LabelMatchExistingUsersByDescription": "משמש לחיבור משתמשים קיימים. לאחר החיבור, המשתמשים יותאמו לפי זיהוי ייחודי מספק ה-SSO שלך", "LabelMaxEpisodesToDownload": "מספר פרקים מקסימלי להורדה. 0 - ללא הגבלה.", @@ -477,9 +459,7 @@ "LabelNewestAuthors": "הסופרים האחרונים", "LabelNewestEpisodes": "הפרקים החדשים ביותר", "LabelNextBackupDate": "תאריך הגיבוי הבא", - "LabelNextChapters": "הפרקים הבא יהיו:", "LabelNextScheduledRun": "הרצה מתוזמנת הבאה", - "LabelNoApiKeys": "אין מפתחות API", "LabelNoCustomMetadataProviders": "אין ספקי מטא-נתונים מותאמים אישית", "LabelNoEpisodesSelected": "לא נבחרו פרקים", "LabelNotFinished": "לא הושלם", @@ -495,21 +475,16 @@ "LabelNotificationsMaxQueueSize": "גודל התור המרבי לאירועי התראה", "LabelNotificationsMaxQueueSizeHelp": "האירועים מוגבלים לשליחה אחת לשנייה. האירועים יתעלמו אם התור מלא. הגדרה זו נועדה למנוע ספאם התראות.", "LabelNumberOfBooks": "מספר הספרים", - "LabelNumberOfChapters": "מספר הפרקים:", "LabelNumberOfEpisodes": "# פרקים", "LabelOpenIDAdvancedPermsClaimDescription": "שם OpenID claim המכילה הרשאות מתקדמות לפעולות משתמש בתוך האפליקציה, אשר יחולו על תפקידים שאינם מנהלי מערכת (אם הוגדרה). אם התביעה חסרה בתגובה, הגישה ל-ABS תידחה. אם אפשרות אחת חסרה, היא תטופל כ-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": "מותר לעדכן", @@ -517,8 +492,6 @@ "LabelPersonalYearReview": "השנה שלך בסקירה ({0})", "LabelPhotoPathURL": "נתיב/URL לתמונה", "LabelPlayMethod": "שיטת הפעלה", - "LabelPlaybackRateIncrementDecrement": "שיעור הגדלה/הפחתה של מהירות ההשמעה", - "LabelPlayerChapterNumberMarker": "{0} מתוך {1}", "LabelPlaylists": "רשימות השמעה", "LabelPodcast": "פודקאסט", "LabelPodcastSearchRegion": "אזור חיפוש פודקאסט", @@ -530,14 +503,10 @@ "LabelPrimaryEbook": "ספר אלקטרוני ראשי", "LabelProgress": "התקדמות", "LabelProvider": "ספק", - "LabelProviderAuthorizationValue": "ערך כותרת האימות (Authorization Header)", "LabelPubDate": "תאריך פרסום", "LabelPublishYear": "שנת הפרסום", "LabelPublishedDate": "פורסם {0}", - "LabelPublishedDecade": "עשור פרסום", - "LabelPublishedDecades": "עשורי פרסום", "LabelPublisher": "מוציא לאור", - "LabelPublishers": "מוצאים לאור", "LabelRSSFeedCustomOwnerEmail": "אימייל בעלים מותאם אישית", "LabelRSSFeedCustomOwnerName": "שם בעלים מותאם אישית", "LabelRSSFeedOpen": "ערוץ RSS פתוח", @@ -545,7 +514,6 @@ "LabelRSSFeedSlug": "Slug של ערוץ ה-RSS", "LabelRSSFeedURL": "כתובת ערוץ ה-RSS", "LabelRandomly": "באופן אקראי", - "LabelReAddSeriesToContinueListening": "הוסף סדרה בחזרה אל ״המשך האזנה״", "LabelRead": "קריאה", "LabelReadAgain": "קרא שוב", "LabelReadEbookWithoutProgress": "קרא/י ספר אלקטרוני ללא שמירת התקדמות", @@ -555,44 +523,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} פרקים המוצגים", - "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": "מצא כריכות", @@ -601,8 +554,7 @@ "LabelSettingsHideSingleBookSeriesHelp": "סדרות הכוללות ספר אחד יוסתרו מדף הסדרות ומדף הבית.", "LabelSettingsHomePageBookshelfView": "השתמש בתצוגת מדף בדף הבית", "LabelSettingsLibraryBookshelfView": "השתמש בתצוגת מדף בספרייה", - "LabelSettingsLibraryMarkAsFinishedWhen": "סמן פריט מדיה כהושלם כאשר", - "LabelSettingsOnlyShowLaterBooksInContinueSeries": "דלג על ספרים קודמים ב״המשך סדרה״", + "LabelSettingsOnlyShowLaterBooksInContinueSeries": "דלג על ספרים קודמים ב-המשך סדרה", "LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "מדף המשך סדרות מציג את הספר הראשון שלא הושמע בסדרה שיש בה לפחות ספר אחד שהושלם ואין ספרים שכבר באמצע שמיעה. הפעלת הגדרה זו תמשיך סדרות מהספר שהושלם הכי מתקדם בסדרה במקום מהספר הראשון שלא הושמע.", "LabelSettingsParseSubtitles": "פענח כתוביות", "LabelSettingsParseSubtitlesHelp": "העתק כותרת משנה משם תיקיית הספר.
כותרת המשנה חייבת להיות מופרדת עם התו ״-״
לדוגמא, כותרת המשנה לספר ״שם הספר - כותרת משנה״, היא ״כותרת משנה״", @@ -619,22 +571,13 @@ "LabelSettingsStoreMetadataWithItem": "אחסן מטה-נתונים עם הפריט", "LabelSettingsStoreMetadataWithItemHelp": "כברירת מחדל, קבצי מטה-נתונים מאוחסנים ב- /metadata/items, הפעלת ההגדרה תאחסן קבצי מטה-נתונים בתיקיית פריט שלך בספרייה", "LabelSettingsTimeFormat": "פורמט זמן", - "LabelShare": "שתף", - "LabelShareDownloadableHelp": "אפשר למי שיש ברשותו קישור שיתוף להוריד קובץ ZIP של פריט הספרייה.", - "LabelShareURL": "שתף קישור", "LabelShowAll": "הצג הכל", - "LabelShowSeconds": "הצג שניות", - "LabelShowSubtitles": "הצג כתוביות", "LabelSize": "גודל", "LabelSleepTimer": "טיימר שינה", - "LabelSortAscending": "סדר עולה", - "LabelSortDescending": "סדר יורד", - "LabelSortPubDate": "מיין לפי תאריך פרסום", "LabelStart": "התחל", "LabelStartTime": "זמן התחלה", "LabelStarted": "התחיל", "LabelStartedAt": "התחיל ב", - "LabelStartedDate": "הותחל {0}", "LabelStatsAudioTracks": "רצועות שמע", "LabelStatsAuthors": "מחברים", "LabelStatsBestDay": "היום הטוב ביותר", @@ -664,13 +607,7 @@ "LabelTheme": "ערכת נושא", "LabelThemeDark": "כהה", "LabelThemeLight": "בהיר", - "LabelThemeSepia": "ספיה", "LabelTimeBase": "בסיס זמן", - "LabelTimeDurationXHours": "{0} שעות", - "LabelTimeDurationXMinutes": "{0} דקות", - "LabelTimeDurationXSeconds": "{0} שניות", - "LabelTimeInMinutes": "זמן בשניות", - "LabelTimeLeft": "נותרו {0}", "LabelTimeListened": "זמן האזנה", "LabelTimeListenedToday": "זמן האזנה היום", "LabelTimeRemaining": "{0} נותרו", @@ -678,7 +615,6 @@ "LabelTitle": "כותרת", "LabelToolsEmbedMetadata": "הטמעת מטה-נתונים", "LabelToolsEmbedMetadataDescription": "הטמעת מטה-נתונים לקבצי שמע כולל תמונות כריכה ופרקים.", - "LabelToolsM4bEncoder": "מקודד M4B", "LabelToolsMakeM4b": "יצירת קובץ אודיו M4B", "LabelToolsMakeM4bDescription": "יצירת קובץ אודיו .M4B עם מטה-נתונים מוטמעים, תמונת שער ופרקים.", "LabelToolsSplitM4b": "פיצול M4B ל-MP3", @@ -691,39 +627,29 @@ "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": "יש לאשר את הכתובות הבאות אצל ספק ה־OAuth כדי לאפשר הפניה חזרה לאפליקציית הדפדפן לאחר ההתחברות:", - "LabelWebRedirectURLsSubfolder": "תיקיית משנה לכתובות הפניה", "LabelWeekdaysToRun": "ימי השבוע להרצה", - "LabelXBooks": "{0} ספרים", - "LabelXItems": "{0} פריטים", "LabelYearReviewHide": "הסתר סקירת שנה", "LabelYearReviewShow": "הצג סקירת שנה", "LabelYourAudiobookDuration": "משך הספר הקולי שלך", @@ -732,55 +658,31 @@ "LabelYourProgress": "ההתקדמות שלך", "MessageAddToPlayerQueue": "הוסף לתור הנגן", "MessageAppriseDescription": "כדי להשתמש בתכונה זו יש לך להריץ מופע של ממשק התכנית האפליקציה או API שיטפל בבקשות אלו.
כתובת URL של ממשק ה-Apprise API צריכה להיות הנתיב המלא לשליחת ההתראה, לדוגמה, אם המופע של ה-API שלך מוצע ב-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.

האם למחוק את תיקיית המטמון?", - "MessageConfirmPurgeItemsCache": "ניקוי מטמון הפריטים ימחק את כל התיקייה ב־metadata/cache/items/.
האם למחוק?", "MessageConfirmQuickEmbed": "אזהרה! הטמעה מהירה לא תגבה גיבוי של קבצי האודיו שלך. וודא שיש לך גיבוי של קבצי האודיו שלך.

האם ברצונך להמשיך?", - "MessageConfirmQuickMatchEpisodes": "התאמה מהירה תדרוס פרטים עבור פרקים תואמים. רק פרקים ללא התאמה יעודכנו. האם להמשיך?", "MessageConfirmReScanLibraryItems": "האם אתה בטוח שברצונך לסרוק מחדש {0} פריטים?", "MessageConfirmRemoveAllChapters": "האם אתה בטוח שברצונך להסיר את כל הפרקים?", "MessageConfirmRemoveAuthor": "האם אתה בטוח שברצונך להסיר את המחבר \"{0}\"?", diff --git a/client/strings/hr.json b/client/strings/hr.json index 65150409..eccd1256 100644 --- a/client/strings/hr.json +++ b/client/strings/hr.json @@ -436,9 +436,9 @@ "LabelLibraryFilterSublistEmpty": "Br {0}", "LabelLibraryItem": "Stavka knjižnice", "LabelLibraryName": "Ime knjižnice", - "LabelLibrarySortByProgress": "Napredak: Zadnje ažuriranje", - "LabelLibrarySortByProgressFinished": "Napredak: Završeno", - "LabelLibrarySortByProgressStarted": "Napredak: Započeto", + "LabelLibrarySortByProgress": "Napredak: zadnje ažurirano", + "LabelLibrarySortByProgressFinished": "Napredak: završeno", + "LabelLibrarySortByProgressStarted": "Napredak: započeto", "LabelLimit": "Ograničenje", "LabelLineSpacing": "Razmak između redaka", "LabelListenAgain": "Ponovno poslušaj", diff --git a/client/strings/hu.json b/client/strings/hu.json index 90f58343..574fd1c9 100644 --- a/client/strings/hu.json +++ b/client/strings/hu.json @@ -205,7 +205,7 @@ "HeaderSleepTimer": "Alvásidőzítő", "HeaderStatsLargestItems": "Legnagyobb elemek", "HeaderStatsLongestItems": "Leghosszabb elemek (órában)", - "HeaderStatsMinutesListeningChart": "Hallgatási grafikon percben (az elmúlt 7 napból)", + "HeaderStatsMinutesListeningChart": "Hallgatási grafikon percekben (az elmúlt 7 napból)", "HeaderStatsRecentSessions": "Legutóbbi munkamenetek", "HeaderStatsTop10Authors": "Top 10 szerző", "HeaderStatsTop5Genres": "Top 5 műfaj", @@ -499,7 +499,7 @@ "LabelNumberOfEpisodes": "Epizódok száma", "LabelOpenIDAdvancedPermsClaimDescription": "Az OpenID-igény neve, amely a felhasználói műveletekre vonatkozó haladó jogosultságokat tartalmazza az alkalmazáson belül, és amely a nem adminisztrátori szerepkörökre vonatkozik (ha konfigurálva van). Ha az igény hiányzik a válaszból, az ABS-hez való hozzáférés megtagadásra kerül. Ha egyetlen opció hiányzik, azt 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", @@ -643,8 +643,8 @@ "LabelStatsAuthors": "Szerző", "LabelStatsBestDay": "Legjobb nap", "LabelStatsDailyAverage": "Napi átlag", - "LabelStatsDays": "Nap", - "LabelStatsDaysListened": "Hallgatással töltött nap", + "LabelStatsDays": "Napok", + "LabelStatsDaysListened": "Hallgatással töltött napok", "LabelStatsHours": "Órák", "LabelStatsInARow": "egymás után", "LabelStatsItemsFinished": "Befejezett elem", diff --git a/client/strings/it.json b/client/strings/it.json index d2178cbf..46ecb0f5 100644 --- a/client/strings/it.json +++ b/client/strings/it.json @@ -275,7 +275,7 @@ "LabelBonus": "Bonus", "LabelBooks": "Libri", "LabelButtonText": "Buttone Testo", - "LabelByAuthor": "di {0}", + "LabelByAuthor": "da {0}", "LabelChangePassword": "Cambia Password", "LabelChannels": "Canali", "LabelChapterCount": "{0} Capitoli", diff --git a/client/strings/ja.json b/client/strings/ja.json index 0621614f..7c2acb88 100644 --- a/client/strings/ja.json +++ b/client/strings/ja.json @@ -72,7 +72,6 @@ "ButtonQueueRemoveItem": "次に再生から削除", "ButtonQuickEmbed": "クイック埋め込み", "ButtonQuickEmbedMetadata": "メタデータの埋め込み", - "ButtonQuickMatch": "クイックマッチ", "ButtonReScan": "再スキャン", "ButtonRead": "読む", "ButtonReadLess": "閉じる", @@ -81,159 +80,71 @@ "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": "エピソード", - "LabelEpisodes": "エピソード", - "LabelEpisodic": "エピソード", - "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 2480cdf3..b5ca6663 100644 --- a/client/strings/lt.json +++ b/client/strings/lt.json @@ -1,6 +1,5 @@ { "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/no.json b/client/strings/no.json index 8e1c9cfb..1a19cfa1 100644 --- a/client/strings/no.json +++ b/client/strings/no.json @@ -34,7 +34,7 @@ "ButtonEditChapters": "Rediger kapittel", "ButtonEditPodcast": "Rediger podcast", "ButtonEnable": "Aktiver", - "ButtonFireAndFail": "Utfør og feil", + "ButtonFireAndFail": "Kjør ved feil", "ButtonFireOnTest": "Kjør onTest-kommando", "ButtonForceReScan": "Tving skann", "ButtonFullPath": "Full sti", @@ -113,7 +113,7 @@ "ButtonUploadOPMLFile": "Last opp OPML fil", "ButtonUserDelete": "Slett bruker {0}", "ButtonUserEdit": "Rediger bruker {0}", - "ButtonViewAll": "Vis alt", + "ButtonViewAll": "Vis alle", "ButtonYes": "Ja", "ErrorUploadFetchMetadataAPI": "Feil ved innhenting av metadata", "ErrorUploadFetchMetadataNoResults": "Kunne ikke hente metadata - forsøk å oppdatere tittel og/eller forfatter", @@ -309,7 +309,6 @@ "LabelDeleteFromFileSystemCheckbox": "Slett fra filsystemet (fjern haken for kun å ta bort fra databasen)", "LabelDescription": "Beskrivelse", "LabelDeselectAll": "Fjern valg", - "LabelDetectedPattern": "Oppdaget mønster:", "LabelDevice": "Enhet", "LabelDeviceInfo": "Enhetsinformasjon", "LabelDeviceIsAvailableTo": "Enheten er tilgjengelig for...", @@ -378,12 +377,11 @@ "LabelFilterByUser": "Filtrer etter bruker", "LabelFindEpisodes": "Finn episoder", "LabelFinished": "Fullført", - "LabelFinishedDate": "Fullført {0}", "LabelFolder": "Mappe", "LabelFolders": "Mapper", "LabelFontBold": "Fet", "LabelFontBoldness": "Skrifttykkelse", - "LabelFontFamily": "Skriftfamilie", + "LabelFontFamily": "Fontfamilie", "LabelFontItalic": "Kursiv", "LabelFontScale": "Font størrelse", "LabelFontStrikethrough": "Gjennomstreking", @@ -436,9 +434,7 @@ "LabelLibraryFilterSublistEmpty": "Ingen {0}", "LabelLibraryItem": "Bibliotek enhet", "LabelLibraryName": "Bibliotek navn", - "LabelLibrarySortByProgress": "Fremdrift: Sist oppdatert", - "LabelLibrarySortByProgressFinished": "Fremdrift: Fullført", - "LabelLibrarySortByProgressStarted": "Fremdrift: Startet", + "LabelLibrarySortByProgress": "Fremgang: Sist oppdatert", "LabelLimit": "Begrensning", "LabelLineSpacing": "Linjemellomrom", "LabelListenAgain": "Lytt igjen", @@ -447,9 +443,8 @@ "LabelLogLevelWarn": "Varsel", "LabelLookForNewEpisodesAfterDate": "Se etter nye episoder etter denne datoen", "LabelLowestPriority": "Laveste prioritet", - "LabelMatchConfidence": "Konfidens", "LabelMatchExistingUsersBy": "Knytt sammen eksisterende brukere basert på", - "LabelMatchExistingUsersByDescription": "Brukes for å koble til eksisterende brukere. Når koblingen er i orden vil brukerne bli identifisert med en unik id fra SSO-tilbyderen", + "LabelMatchExistingUsersByDescription": "Brukes for å koble til eksisterende brukere. Når koblingen er i orden vil brukerne bli identifisert med en unik id fra SSO-tilbyderen.", "LabelMaxEpisodesToDownload": "Maksimalt antall episoder som skal lastes ned. Bruk 0 for ubegrenset.", "LabelMaxEpisodesToDownloadPerCheck": "Maksimalt antall nye episoder som skal lastes ned per sjekk", "LabelMaxEpisodesToKeep": "Maksimalt antall episoder som skal beholdes", @@ -458,7 +453,7 @@ "LabelMediaType": "Medie type", "LabelMetaTag": "Meta tag", "LabelMetaTags": "Meta tags", - "LabelMetadataOrderOfPrecedenceDescription": "Høyere prioritert kilder for metadata overstyrer laverer prioriterte kilder for metadata", + "LabelMetadataOrderOfPrecedenceDescription": "Høyere prioritert kilder for metadata overstyrer laverer prioriterte kilder for metadata.", "LabelMetadataProvider": "Metadata Leverandør", "LabelMinute": "Minutt", "LabelMinutes": "Minutter", @@ -477,9 +472,7 @@ "LabelNewestAuthors": "Nyeste forfattere", "LabelNewestEpisodes": "Nyeste episoder", "LabelNextBackupDate": "Neste sikkerhetskopi dato", - "LabelNextChapters": "Neste kapitler blir:", "LabelNextScheduledRun": "Neste planlagte kjøring", - "LabelNoApiKeys": "Ingen API-nøkler", "LabelNoCustomMetadataProviders": "Ingen egendefinerte tilbydere for metadata", "LabelNoEpisodesSelected": "Ingen episoder valgt", "LabelNotFinished": "Ikke fullført", @@ -495,11 +488,10 @@ "LabelNotificationsMaxQueueSize": "Maksimalt antall varslinger i kø", "LabelNotificationsMaxQueueSizeHelp": "Hendelser er begrenset til avfyre én gang per sekund. Hendelser blir ignorert om køen er full. Dette forhindrer overflod av varslinger.", "LabelNumberOfBooks": "Antall bøker", - "LabelNumberOfChapters": "Antall kapitler:", "LabelNumberOfEpisodes": "# episoder", "LabelOpenIDAdvancedPermsClaimDescription": "Navnet på OpenID claim'et som inneholder avanserte tilganger for brukerhandlinger i applikasjonen som vil brukes for ikke-administratorroller (hvis konfigurert). Hvis claim'et mangler fra responsen, nektes tilgang til ABS. Hvis en enkelt opsjon mangler, blir behandlet som 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.", - "LabelOpenIDGroupClaimDescription": "Navn på OpenID-forespørsel som inneholder en lite over brukerens grupper. Vanligvis kalt grupper. Om konfigurert, vil applikasjonen tildele roller baseret på brukerens gruppemedlemsskaper, gitt disse grupper er navngitt (uten forbehold for store og små bokstaver) 'admin', 'user' eller 'guest' i forespørsel. Forespørselen burde inneholde en liste (og hvis brukeren tilhører flere grupper), applikasjonen vil tildele rolle med høyeste adgangsnivå. Hvis ingen grupper matcher vil adgang bli nektet.", + "LabelOpenIDGroupClaimDescription": "Navn på OpenID-forespørsel som inneholder en lite over brukerens grupper. Vanligvis kalt grupper. Om konfigurert, vil applikasjonen tildele roller baseret på brukerens gruppemedlemsskaper, gitt disse grupper er navngitt (uten forbehold for store og små bokstaver) 'admin', 'user' eller 'guest' i forespørsel. Forespørselen burde inneholde en liste (og hvis brukeren tilhører flere grupper), applikasjonen vil tildele rolle med høyeste adgangsnivå. Hvis ingen grupper matcher vil adgang bli nektet.", "LabelOpenRSSFeed": "Åpne RSS Feed", "LabelOverwrite": "Overskriv", "LabelPaginationPageXOfY": "Side {0} av {1}", @@ -517,7 +509,6 @@ "LabelPersonalYearReview": "Oppsummering av året ditt ({0})", "LabelPhotoPathURL": "Bilde sti/URL", "LabelPlayMethod": "Avspillingsmetode", - "LabelPlaybackRateIncrementDecrement": "Trinnstørrelse for økning/senking av avspillingshastighet", "LabelPlayerChapterNumberMarker": "{0} av {1}", "LabelPlaylists": "Spilleliste", "LabelPodcast": "Podcast", @@ -570,7 +561,6 @@ "LabelSelectAll": "Velg alt", "LabelSelectAllEpisodes": "Velg alle episoder", "LabelSelectEpisodesShowing": "Velg {0} episoder vist", - "LabelSelectUser": "Velg bruker", "LabelSelectUsers": "Velg brukere", "LabelSendEbookToDevice": "Send Ebok til...", "LabelSequence": "Sekvens", @@ -638,7 +628,6 @@ "LabelStartTime": "Start Tid", "LabelStarted": "Startet", "LabelStartedAt": "Startet", - "LabelStartedDate": "Startet {0}", "LabelStatsAudioTracks": "Lydspor", "LabelStatsAuthors": "Forfattere", "LabelStatsBestDay": "Beste dag", @@ -668,7 +657,6 @@ "LabelTheme": "Tema", "LabelThemeDark": "Mørk", "LabelThemeLight": "Lys", - "LabelThemeSepia": "Sepia", "LabelTimeBase": "Tidsbase", "LabelTimeDurationXHours": "{0} timer", "LabelTimeDurationXMinutes": "{0} minutter", @@ -737,32 +725,24 @@ "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.
Apprise API URL skal være hele URL-en til varslingen, f.eks., hvis din API-instans er på 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.", - "MessageAuthenticationLegacyTokenWarning": "Eldre API-tokener vil bli fjernet i fremtiden. Bruk API-nøkler i stedet.", "MessageAuthenticationOIDCChangesRestart": "Etter å ha lagret, start serveren din på nytt for at OIDC-endringene skal tre i kraft.", - "MessageAuthenticationSecurityMessage": "Autentisering er forbedret av sikkerhetshensyn. Alle brukere må logge inn på nytt.", "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": "Viktig: Mappen for sikkerhetskopi satt i en miljøvariabel og kan ikke endres her.", + "MessageBackupsLocationNoEditNote": "NB: Mappen for sikkerhetskopi settes i en miljøvariabel og kan ikke endres her.", "MessageBackupsLocationPathEmpty": "Mappen for sikkerhetskopiering må angis", - "MessageBatchEditPopulateMapDetailsAllHelp": "Fyll aktiverte felt med data fra alle elementer. Felt med flere verdier blir slått sammen", - "MessageBatchEditPopulateMapDetailsItemHelp": "Fyll aktiverte kartdetaljfelt med data fra dette elementet", "MessageBatchQuickMatchDescription": "Kjapt søk vil forsøke å legge til manglende omslag og metadata for de valgte gjenstandene. Aktiver dette valget for å tillate Kjapt søk til å overskrive eksisterende omslag og/eller metadata.", "MessageBookshelfNoCollections": "Du har ikke laget noen samlinger ennå", - "MessageBookshelfNoCollectionsHelp": "Samlinger er offentlige. Alle brukere med tilgang til biblioteket kan se dem.", "MessageBookshelfNoRSSFeeds": "Ingen RSS feed er åpen", "MessageBookshelfNoResultsForFilter": "Ingen resultat for filter \"{0}: {1}\"", "MessageBookshelfNoResultsForQuery": "Ingen resultater for søket", "MessageBookshelfNoSeries": "Du har ingen serier", - "MessageBulkChapterPattern": "Hvor mange kapitler vil du legge til med dette nummereringsmønsteret?", "MessageChapterEndIsAfter": "Kapittel slutt er etter slutt av lydboken", "MessageChapterErrorFirstNotZero": "Første kapittel starter på 0", "MessageChapterErrorStartGteDuration": "Feil start tid, må være mindre enn lengde på lydbok", "MessageChapterErrorStartLtPrev": "Feil start tid, må være større eller det samme som forrige kapittel start tid", "MessageChapterStartIsAfter": "Kapittel start er etter slutten av din lydbok", - "MessageChaptersNotFound": "Fant ikke kapitler", "MessageCheckingCron": "Sjekker cron...", "MessageConfirmCloseFeed": "Er du sikker på at du vil lukke denne feeden?", - "MessageConfirmDeleteApiKey": "Er du sikker på at du vil slette API-nøkkelen \"{0}\"?", "MessageConfirmDeleteBackup": "Er du sikker på at du vil slette sikkerhetskopi for {0}?", "MessageConfirmDeleteDevice": "Er du sikker på at du vil slette e-leser enheten \"{0}\"?", "MessageConfirmDeleteFile": "Dette vil slette filen fra filsystemet. Er du sikker?", @@ -781,7 +761,7 @@ "MessageConfirmMarkSeriesFinished": "Er du sikker på at du vil markere alle bøkene i serien som fullført?", "MessageConfirmMarkSeriesNotFinished": "Er du sikker på at du vil markere alle bøkene i serien som ikke fullført?", "MessageConfirmNotificationTestTrigger": "Utløs dette varselet med test-data?", - "MessageConfirmPurgeCache": "Tømming av mellomlagring vil slette hele mappen /metadata/cache.

Er du sikker på at du vil slette mappen?", + "MessageConfirmPurgeCache": "Tømming av mellomlagring vil slette hele mappen /metadata/cache.

Er du sikker på at du du vil slette mappen?", "MessageConfirmPurgeItemsCache": "(Purge items cache) Dette vil sletter hele mappen /metadata/cache/items.
Er du sikker?", "MessageConfirmQuickEmbed": "Advarsel! Rask innbygging av metadata tar ikke backup av lyd-filene først. Forsikre deg om at du har sikkerhetskopi av filene.

Fortsett?", "MessageConfirmQuickMatchEpisodes": "Hurtig gjenkjenning av episoder overskriver detaljene hvis en match blir funnet. Kun episoder som ikke allerede er matchet blir oppdatert. Er du sikker?", @@ -790,7 +770,6 @@ "MessageConfirmRemoveAuthor": "Er du sikker på at du vil fjerne forfatteren \"{0}\"?", "MessageConfirmRemoveCollection": "Er du sikker på at du vil fjerne samling\"{0}\"?", "MessageConfirmRemoveEpisode": "Er du sikker på at du vil fjerne episode \"{0}\"?", - "MessageConfirmRemoveEpisodeNote": "Merk: Dette sletter ikke lydfilen med mindre du slår på \"Hard delete file\"", "MessageConfirmRemoveEpisodes": "Er du sikker på at du vil fjerne {0} episoder?", "MessageConfirmRemoveListeningSessions": "Er du sikker på at du vil fjerne {0} lytte-sesjoner?", "MessageConfirmRemoveMetadataFiles": "Er du sikker på at du vil fjerne alle metadata.{0}-filer i mappene for biblioteks-elementer?", @@ -816,11 +795,8 @@ "MessageFeedURLWillBe": "Feed URL vil bli {0}", "MessageFetching": "Henter...", "MessageForceReScanDescription": "vil skanne alle filene igjen som en ny skann. Lyd fil ID3 tagger, OPF filer og tekstfiler vil bli skannet som nye.", - "MessageHeatmapListeningTimeTooltip": "{0} lytter på {1}", - "MessageHeatmapNoListeningSessions": "Ingen lytteøkter på {0}", "MessageImportantNotice": "Viktig varsel!", "MessageInsertChapterBelow": "Sett inn kapittel under", - "MessageInvalidAsin": "Ugyldig ASIN", "MessageItemsSelected": "{0} Gjenstander valgt", "MessageItemsUpdated": "{0} Gjenstander oppdatert", "MessageJoinUsOn": "Følg oss nå", @@ -866,7 +842,6 @@ "MessageNoTasksRunning": "Ingen oppgaver kjører", "MessageNoUpdatesWereNecessary": "Ingen oppdatering var nødvendig", "MessageNoUserPlaylists": "Du har ingen spillelister", - "MessageNoUserPlaylistsHelp": "Spillelister er private. Bare brukeren som oppretter dem kan se dem.", "MessageNotYetImplemented": "Ikke implementert ennå", "MessageOpmlPreviewNote": "PS: Dette er en forhåndvisning av en OPML-fil. Den faktiske podcast-tittelen hentes direkte fra RSS-feeden.", "MessageOr": "eller", @@ -889,10 +864,8 @@ "MessageRestoreBackupConfirm": "Er du sikker på at du vil gjenopprette sikkerhetskopien som var laget", "MessageRestoreBackupWarning": "gjenoppretting av sikkerhetskopi vil overskrive hele databasen under /config og omslagsbilde under /metadata/items og /metadata/authors.

Sikkerhetskopier endrer ikke noen filer under dine bibliotekmapper. Hvis du har aktivert tjenerinstillingen for å lagre omslagsbilder og metadata i bibliotekmapper så vil ikke de filene bli tatt sikkerhetskopi eller overskrevet.

Alle klientene som bruker din tjener vil bli fornyet automatisk.", "MessageScheduleLibraryScanNote": "For de fleste brukere er det anbefalt å la denne funksjonen være slått av, og la mappeovervåkeren stå på. Mappeovervåkeren oppdager automatisk endringer i biblioteksmappene. Mappeovervåkeren fungerer ikke med alle filsystemer (f.eks. NFS) og da kan planlagt skanning av bibliotekene brukes i steden for.", - "MessageScheduleRunEveryWeekdayAtTime": "Kjør hver {0} kl. {1}", "MessageSearchResultsFor": "Søk resultat for", "MessageSelected": "{0} valgt", - "MessageSeriesSequenceCannotContainSpaces": "Serienummer kan ikke inneholde mellomrom", "MessageServerCouldNotBeReached": "Tjener kunne ikke bli nådd", "MessageSetChaptersFromTracksDescription": "Sett kapitler ved å bruke hver lydfil som kapittel og kapitteltittel som lydfilnavnet", "MessageShareExpirationWillBe": "Utløp vil være {0}", @@ -913,27 +886,6 @@ "MessageTaskFailedToMergeAudioFiles": "Kunne ikke slå sammen lydfiler", "MessageTaskFailedToMoveM4bFile": "Kunne ikke flytte M4B-fil", "MessageTaskFailedToWriteMetadataFile": "Kunne ikke lagre metadata-fil", - "MessageTaskMatchingBooksInLibrary": "Samsvarende bøker i biblioteket \"{0}\"", - "MessageTaskNoFilesToScan": "Ingen filer å skanne", - "MessageTaskOpmlImport": "OPML-import", - "MessageTaskOpmlImportDescription": "Oppretter podkaster fra {0} RSS-feeder", - "MessageTaskOpmlImportFeed": "OPML-importfeed", - "MessageTaskOpmlImportFeedDescription": "Importerer RSS-feed \"{0}\"", - "MessageTaskOpmlImportFeedFailed": "Kunne ikke hente podcast-feed", - "MessageTaskOpmlImportFeedPodcastDescription": "Oppretter podkast \"{0}\"", - "MessageTaskOpmlImportFeedPodcastExists": "Podkast finnes allerede på stien", - "MessageTaskOpmlImportFeedPodcastFailed": "Misslykkes å opprette podcast", - "MessageTaskOpmlImportFinished": "La til {0} podkaster", - "MessageTaskOpmlParseFailed": "Klarte ikke å tolke OPML-fil", - "MessageTaskOpmlParseFastFail": "Ugyldig OPML-fil: -tagg ble ikke funnet ELLER en -tagg ble ikke funnet", - "MessageTaskOpmlParseNoneFound": "Fant ingen feeder i OPML-filen", - "MessageTaskScanItemsAdded": "{0} lagt til", - "MessageTaskScanItemsMissing": "{0} mangler", - "MessageTaskScanItemsUpdated": "{0} oppdatert", - "MessageTaskScanNoChangesNeeded": "Ingen endringer nødvendig", - "MessageTaskScanningFileChanges": "Skanner filendringer i \"{0}\"", - "MessageTaskScanningLibrary": "Skanner biblioteket \"{0}\"", - "MessageTaskTargetDirectoryNotWritable": "Målkatalogen er ikke skrivbar", "MessageThinking": "Tenker...", "MessageUploaderItemFailed": "Opplastning mislykkes", "MessageUploaderItemSuccess": "Opplastning fullført!", @@ -951,43 +903,13 @@ "NoteUploaderFoldersWithMediaFiles": "Mapper med mediefiler vil bli behandlet som separate bibliotekgjenstander.", "NoteUploaderOnlyAudioFiles": "Om man laster opp kun lydfiler så vil hver lydfil bli behandlet som en separat lydbok.", "NoteUploaderUnsupportedFiles": "Filer som ikke er støttet vil bli ignorert. Når man velger eller slipper en mappe, filer som ikke er en mappe vil bli ignorert.", - "NotificationOnBackupCompletedDescription": "Utløses når en sikkerhetskopi er fullført", - "NotificationOnBackupFailedDescription": "Utløses når en sikkerhetskopi mislykkes", - "NotificationOnEpisodeDownloadedDescription": "Utløses når en podkastepisode lastes ned automatisk", - "NotificationOnRSSFeedDisabledDescription": "Utløses når automatiske episodenedlastinger deaktiveres på grunn av for mange mislykkede forsøk", - "NotificationOnRSSFeedFailedDescription": "Utløses når RSS-feedforespørselen mislykkes for en automatisk episodenedlasting", - "NotificationOnTestDescription": "Hendelse for testing av varslingssystemet", - "PlaceholderBulkChapterInput": "Skriv inn kapitteltittel eller bruk nummerering (f.eks. 'Episode 1', 'Kapittel 10', '1.')", "PlaceholderNewCollection": "Ny samlingsnavn", "PlaceholderNewFolderPath": "Ny mappesti", "PlaceholderNewPlaylist": "Ny spillelistenavn", "PlaceholderSearch": "Søk..", "PlaceholderSearchEpisode": "Søk episode..", - "StatsAuthorsAdded": "forfattere lagt til", - "StatsBooksAdded": "bøker lagt til", - "StatsBooksAdditional": "Noen av tilleggene inkluderer…", - "StatsBooksFinished": "bøker fullført", - "StatsBooksFinishedThisYear": "Noen bøker fullført i år…", - "StatsBooksListenedTo": "bøker lyttet til", - "StatsCollectionGrewTo": "Boksamlingen din vokste til…", - "StatsSessions": "økter", - "StatsSpentListening": "brukt på lytting", - "StatsTopAuthor": "BESTE FORFATTER", - "StatsTopAuthors": "BESTE FORFATTERE", - "StatsTopGenre": "BESTE SJANGER", - "StatsTopGenres": "BESTE SJANGRE", - "StatsTopMonth": "BESTE MÅNED", - "StatsTopNarrator": "BESTE FORTELLER", - "StatsTopNarrators": "BESTE FORTELLERE", - "StatsTotalDuration": "Med en total varighet på…", - "StatsYearInReview": "ÅRET SOM GIKK", "ToastAccountUpdateSuccess": "Konto oppdatert", - "ToastAppriseUrlRequired": "Du må angi en Apprise-URL", - "ToastAsinRequired": "ASIN er påkrevd", "ToastAuthorImageRemoveSuccess": "Forfatter bilde fjernet", - "ToastAuthorNotFound": "Fant ikke forfatter \"{0}\"", - "ToastAuthorRemoveSuccess": "Forfatter fjernet", - "ToastAuthorSearchNotFound": "Fant ikke forfatter", "ToastAuthorUpdateMerged": "Forfatter slått sammen", "ToastAuthorUpdateSuccess": "Forfatter oppdatert", "ToastAuthorUpdateSuccessNoImageFound": "Forfatter oppdater (ingen bilde funnet)", @@ -1001,7 +923,6 @@ "ToastBackupRestoreFailed": "Misslykkes å gjenopprette sikkerhetskopi", "ToastBackupUploadFailed": "Misslykkes å laste opp sikkerhetskopi", "ToastBackupUploadSuccess": "Sikkerhetskopi lastet opp", - "ToastBatchApplyDetailsToItemsSuccess": "Detaljer brukt på elementene", "ToastBatchDeleteFailed": "Sletting feilet på utvalget", "ToastBatchDeleteSuccess": "Sletting av samling utført", "ToastBatchQuickMatchFailed": "Feil ved rask integrering av metadata!", @@ -1011,25 +932,17 @@ "ToastBookmarkCreateFailed": "Misslykkes å opprette bokmerke", "ToastBookmarkCreateSuccess": "Bokmerke lagt til", "ToastBookmarkRemoveSuccess": "Bokmerke fjernet", - "ToastBulkChapterInvalidCount": "Skriv inn et tall mellom 1 og 150", "ToastCachePurgeFailed": "Kunne ikke å slette mellomlager", "ToastCachePurgeSuccess": "Mellomlager slettet", - "ToastChapterLocked": "Kapittelet er låst.", - "ToastChapterStartTimeAdjusted": "Kapittelstart ble justert med {0} sekunder", - "ToastChaptersAllLocked": "Alle kapitler er låst. Lås opp noen kapitler for å flytte tidene.", "ToastChaptersHaveErrors": "Kapittel har feil", - "ToastChaptersInvalidShiftAmountLast": "Ugyldig forskyvningsverdi. Starttid for siste kapittel vil gå utover varigheten til denne lydboken.", - "ToastChaptersInvalidShiftAmountStart": "Ugyldig forskyvningsverdi. Det første kapitlet ville fått null eller negativ lengde og blitt overskrevet av det andre kapitlet. Øk starttiden til det andre kapitlet.", "ToastChaptersMustHaveTitles": "Kapittel må ha titler", "ToastChaptersRemoved": "Kapitler fjernet", "ToastChaptersUpdated": "Kapitler oppdatert", "ToastCollectionItemsAddFailed": "Feil med å legge til element(er)", "ToastCollectionRemoveSuccess": "Samling fjernet", "ToastCollectionUpdateSuccess": "samlingupdated", - "ToastConnectionNotAvailable": "Tilkobling er ikke tilgjengelig. Prøv igjen senere", "ToastCoverSearchFailed": "Finner ikke bokomslag", "ToastCoverUpdateFailed": "Oppdatering av bilde feilet", - "ToastDateTimeInvalidOrIncomplete": "Dato og klokkeslett er ugyldig eller ufullstendig", "ToastDeleteFileFailed": "Kunne ikke slette fil", "ToastDeleteFileSuccess": "Fil slettet", "ToastDeviceAddFailed": "Kunne ikke legge til enhet", @@ -1042,9 +955,6 @@ "ToastEpisodeDownloadQueueClearFailed": "Kunne ikke tømme køen", "ToastEpisodeDownloadQueueClearSuccess": "Nedlastingskø for eposider tømt", "ToastEpisodeUpdateSuccess": "{0} episoder oppdatert", - "ToastErrorCannotShare": "Kan ikke dele direkte på denne enheten", - "ToastFailedToCreate": "Kunne ikke opprette", - "ToastFailedToDelete": "Kunne ikke slette", "ToastFailedToLoadData": "Kunne ikke laste inn data", "ToastFailedToMatch": "Kunne ikke matche", "ToastFailedToShare": "Deling feilet", @@ -1052,7 +962,6 @@ "ToastInvalidImageUrl": "Ugyldig URL for bilde", "ToastInvalidMaxEpisodesToDownload": "Ugyldig maksimalt antall for nedlasting av episoder", "ToastInvalidUrl": "Ugyldig URL", - "ToastInvalidUrls": "Én eller flere URL-er er ugyldige", "ToastItemCoverUpdateSuccess": "Omslag oppdatert", "ToastItemDeletedFailed": "Kunne ikke slette element", "ToastItemDeletedSuccess": "Element slettet", @@ -1077,7 +986,6 @@ "ToastMustHaveAtLeastOnePath": "Påkrevd med minst én mappe", "ToastNameEmailRequired": "Navn og e-post påkrevd", "ToastNameRequired": "Navn er påkrevd", - "ToastNewApiKeyUserError": "Du må velge en bruker", "ToastNewEpisodesFound": "{0} nye episoder funnet", "ToastNewUserCreatedFailed": "Kunne ikke opprette konto: \"{0}\"", "ToastNewUserCreatedSuccess": "Ny konto opprettet", @@ -1086,7 +994,6 @@ "ToastNewUserTagError": "Velg minst en tag", "ToastNewUserUsernameError": "Skriv inn brukernavn", "ToastNoNewEpisodesFound": "Ingen nye episoder funnet", - "ToastNoRSSFeed": "Podkasten har ikke en RSS-feed", "ToastNoUpdatesNecessary": "Ingen oppdateringer nødvendig", "ToastNotificationCreateFailed": "Kunne ikke opprette varsling", "ToastNotificationDeleteFailed": "Kunne ikke slette varsling", @@ -1102,7 +1009,6 @@ "ToastPlaylistUpdateSuccess": "Spilleliste oppdatert", "ToastPodcastCreateFailed": "Misslykkes å opprette podcast", "ToastPodcastCreateSuccess": "Podcast opprettet", - "ToastPodcastEpisodeUpdated": "Episode oppdatert", "ToastPodcastGetFeedFailed": "Kunne ikke hente podcast-feed", "ToastPodcastNoEpisodesInFeed": "Ingen episoder funnet i RSS-feed", "ToastPodcastNoRssFeed": "Podcast har ingen RSS-feed", @@ -1127,7 +1033,6 @@ "ToastSelectAtLeastOneUser": "Velg minst én bruker", "ToastSendEbookToDeviceFailed": "Misslykkes å sende ebok", "ToastSendEbookToDeviceSuccess": "Ebok sendt til \"{0}\"", - "ToastSeriesSubmitFailedSameName": "Kan ikke legge til to serier med samme navn", "ToastSeriesUpdateFailed": "Misslykkes å oppdatere serie", "ToastSeriesUpdateSuccess": "Serie oppdatert", "ToastServerSettingsUpdateSuccess": "Server-innstillinger oppdatert", @@ -1146,20 +1051,10 @@ "ToastUnknownError": "Ukjent feil", "ToastUnlinkOpenIdFailed": "Kunne ikke koble bruker fra OpenID", "ToastUnlinkOpenIdSuccess": "Bruker koblet fra OpenID", - "ToastUploaderFilepathExistsError": "Filstien \"{0}\" finnes allerede på serveren", - "ToastUploaderItemExistsInSubdirectoryError": "Elementet \"{0}\" bruker en underkatalog av opplastingsstien.", "ToastUserDeleteFailed": "Misslykkes å slette bruker", "ToastUserDeleteSuccess": "Bruker slettet", "ToastUserPasswordChangeSuccess": "Passord ble endret", "ToastUserPasswordMismatch": "Passord må stemme overens", "ToastUserPasswordMustChange": "Nytt passord kan ikke være identisk med gammelt passord", - "ToastUserRootRequireName": "Root-brukernavn er påkrevd", - "TooltipAddChapters": "Legg til kapittel(er)", - "TooltipAddOneSecond": "Legg til 1 sekund", - "TooltipAdjustChapterStart": "Klikk for å justere starttid", - "TooltipLockAllChapters": "Lås alle kapitler", - "TooltipLockChapter": "Lås kapittel (Shift+klikk for område)", - "TooltipSubtractOneSecond": "Trekk fra 1 sekund", - "TooltipUnlockAllChapters": "Lås opp alle kapitler", - "TooltipUnlockChapter": "Lås opp kapittel (Shift+klikk for område)" + "ToastUserRootRequireName": "Root-brukernavn er påkrevd" } diff --git a/client/strings/pl.json b/client/strings/pl.json index d1bc6c06..8b70a134 100644 --- a/client/strings/pl.json +++ b/client/strings/pl.json @@ -11,7 +11,7 @@ "ButtonApplyChapters": "Zatwierdź rozdziały", "ButtonAuthors": "Autorzy", "ButtonBack": "Wstecz", - "ButtonBatchEditPopulateFromExisting": "Uzupełnij na podstawie istniejących", + "ButtonBatchEditPopulateFromExisting": "Powiel z poprzednich", "ButtonBatchEditPopulateMapDetails": "Powiel szczegóły mapy", "ButtonBrowseForFolder": "Wyszukaj folder", "ButtonCancel": "Anuluj", @@ -55,7 +55,7 @@ "ButtonNext": "Następny", "ButtonNextChapter": "Następny rozdział", "ButtonNextItemInQueue": "Następny element w kolejce", - "ButtonOk": "OK", + "ButtonOk": "Ok", "ButtonOpenFeed": "Otwórz feed", "ButtonOpenManager": "Otwórz menadżera", "ButtonPause": "Wstrzymaj", @@ -127,7 +127,7 @@ "HeaderAudiobookTools": "Narzędzia do zarządzania audiobookami", "HeaderAuthentication": "Uwierzytelnianie", "HeaderBackups": "Kopie zapasowe", - "HeaderBulkChapterModal": "Dodaj kilka rozdziałów", + "HeaderBulkChapterModal": "Dodaj wiele rozdziałów", "HeaderChangePassword": "Zmień hasło", "HeaderChapters": "Rozdziały", "HeaderChooseAFolder": "Wybierz folder", @@ -275,7 +275,7 @@ "LabelBonus": "Bonus", "LabelBooks": "Książki", "LabelButtonText": "Tekst przycisku", - "LabelByAuthor": "Autor {0}", + "LabelByAuthor": "autorstwa {0}", "LabelChangePassword": "Zmień hasło", "LabelChannels": "Kanały", "LabelChapterCount": "{0} rozdziałów", @@ -286,7 +286,7 @@ "LabelClickToUseCurrentValue": "Kliknij by zastosować aktualną wartość", "LabelClosePlayer": "Zamknij odtwarzacz", "LabelCodec": "Kodek", - "LabelCollapseSeries": "Zwiń serię", + "LabelCollapseSeries": "Podsumuj serię", "LabelCollapseSubSeries": "Zwiń podserie", "LabelCollection": "Kolekcja", "LabelCollections": "Kolekcje", @@ -300,7 +300,7 @@ "LabelCoverImageURL": "URL okładki", "LabelCoverProvider": "Dostawca okładki", "LabelCreatedAt": "Utworzone", - "LabelCronExpression": "Wyrażenie harmonogramowania zadań cron", + "LabelCronExpression": "Wyrażenie CRON", "LabelCurrent": "Aktualny", "LabelCurrently": "Obecnie:", "LabelCustomCronExpression": "Niestandardowe wyrażenie Cron:", @@ -339,11 +339,11 @@ "LabelEnable": "Włącz", "LabelEncodingBackupLocation": "Kopia zapasowa twoich oryginalnych plików audio będzie się znajdować w:", "LabelEncodingChaptersNotEmbedded": "W audiobookach wielościeżkowych rozdziały nie są osadzone.", - "LabelEncodingClearItemCache": "Pamiętaj, aby okresowo czyścić pamięć podręczną elementów.", + "LabelEncodingClearItemCache": "Pamiętaj o okresowym czyszczeniu pamięci podręcznej elementów.", "LabelEncodingFinishedM4B": "Ukończony plik M4B zostanie umieszczony w folderze audiobooka pod adresem:", "LabelEncodingInfoEmbedded": "Metadane zostaną osadzone w ścieżkach audio w folderze z audiobookiem.", "LabelEncodingStartedNavigation": "Po uruchomieniu zadania możesz opuścić tę stronę.", - "LabelEncodingTimeWarning": "Kodowanie może potrwać do 30 minut.", + "LabelEncodingTimeWarning": "Konwersja może potrwać do 30 minut.", "LabelEncodingWarningAdvancedSettings": "Ostrzeżenie: Nie aktualizuj tych ustawień, jeśli nie jesteś zaznajomiony ze sposobem działania ffmpeg i opcji konwersji.", "LabelEncodingWatcherDisabled": "Jeśli monitorowanie folderów jest wyłączone, należy ponownie przeskanować audiobooka.", "LabelEnd": "Zakończ", @@ -359,8 +359,8 @@ "LabelExample": "Przykład", "LabelExpandSeries": "Rozwiń serie", "LabelExpandSubSeries": "Rozwiń podserie", - "LabelExpired": "Wygasły", - "LabelExpiresAt": "Wygasa o", + "LabelExpired": "Przeterminowane", + "LabelExpiresAt": "Wygasa w", "LabelExpiresInSeconds": "Wygasa za (sekund)", "LabelExpiresNever": "Nigdy", "LabelExplicit": "18+", @@ -436,9 +436,9 @@ "LabelLibraryFilterSublistEmpty": "Brak {0}", "LabelLibraryItem": "Element biblioteki", "LabelLibraryName": "Nazwa biblioteki", - "LabelLibrarySortByProgress": "Postęp: Ostatnia aktualizacja", - "LabelLibrarySortByProgressFinished": "Postęp: Ukończony", - "LabelLibrarySortByProgressStarted": "Postęp: Rozpoczęty", + "LabelLibrarySortByProgress": "Postęp: Ostatnio zaktualizowane", + "LabelLibrarySortByProgressFinished": "Postęp: Ukończone", + "LabelLibrarySortByProgressStarted": "Postęp: Rozpoczęte", "LabelLimit": "Limit", "LabelLineSpacing": "Odstęp między wierszami", "LabelListenAgain": "Słuchaj ponownie", @@ -450,7 +450,7 @@ "LabelMatchConfidence": "Zaufanie", "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 uzyskać nieograniczoną liczbę.", + "LabelMaxEpisodesToDownload": "Maksymalna liczba odcinków do pobrania. Użyj 0, aby wyłączyć ograniczenie.", "LabelMaxEpisodesToDownloadPerCheck": "Maksymalna liczba nowych odcinków do pobrania na jedno sprawdzenie", "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.", @@ -498,8 +498,7 @@ "LabelNumberOfChapters": "Liczba rozdziałów:", "LabelNumberOfEpisodes": "# Odcinków", "LabelOpenIDAdvancedPermsClaimDescription": "Nazwa deklaracji OpenID zawierającej zaawansowane uprawnienia do działań użytkownika w aplikacji, które będą miały zastosowanie do ról innych niż administracyjne (jeśli skonfigurowano). Jeśli deklaracja nie zostanie uwzględniona w odpowiedzi, dostęp do ABS zostanie zablokowany. Brak jednej opcji zostanie uznany za fałsz. Upewnij się, że deklaracja dostawcy tożsamości jest zgodna z oczekiwaną strukturą:", - "LabelOpenIDClaims": "Pozostaw poniższe opcje puste, aby wyłączyć zaawansowane przypisywanie grup i uprawnień. Wówczas automatycznie zostanie przypisana grupa „Użytkownik”.", - "LabelOpenIDGroupClaimDescription": "Nazwa roszczenia OpenID zawierającego listę grup użytkownika. Powszechnie nazywane grupami. Jeśli skonfigurowano, aplikacja automatycznie przypisze role na podstawie przynależności użytkownika do grup, pod warunkiem, że te grupy są nazwane bez uwzględniania wielkości liter „admin”, „user” lub „guest” w roszczeniu. Roszczenie powinno zawierać listę, a jeśli użytkownik należy do wielu grup, aplikacja przypisze rolę odpowiadającą najwyższemu poziomowi dostępu. Jeśli żadna grupa nie będzie pasować, dostęp zostanie odrzucony.", + "LabelOpenIDClaims": "Pozostaw poniższe opcje puste, aby wyłączyć zaawansowane przypisywanie grup i uprawnień. Automatycznie zostanie przypisana grupa „Użytkownik”.", "LabelOpenRSSFeed": "Otwórz kanał RSS", "LabelOverwrite": "Nadpisz", "LabelPaginationPageXOfY": "Strona {0} z {1}", @@ -574,11 +573,11 @@ "LabelSelectUsers": "Wybór użytkowników", "LabelSendEbookToDevice": "Wyślij ebook do...", "LabelSequence": "Kolejność", - "LabelSerial": "Numer serii", + "LabelSerial": "Seria", "LabelSeries": "Serie", "LabelSeriesName": "Nazwy serii", "LabelSeriesProgress": "Postęp w serii", - "LabelServerLogLevel": "Poziom logów servera", + "LabelServerLogLevel": "Poziom logowania servera", "LabelServerYearReview": "Podsumowanie serwera w roku ({0})", "LabelSetEbookAsPrimary": "Ustaw jako pierwszy", "LabelSetEbookAsSupplementary": "Ustaw jako dodatkowy", @@ -622,7 +621,7 @@ "LabelSettingsStoreMetadataWithItemHelp": "Domyślnie metadane są przechowywane w folderze /metadata/items, włączenie tej opcji spowoduje, że okładka będzie przechowywana w folderze ksiązki. Tylko jedna okładka o nazwie pliku \"cover\" będzie przechowywana", "LabelSettingsTimeFormat": "Format czasu", "LabelShare": "Udostępnij", - "LabelShareDownloadableHelp": "Zezwala użytkownikom z linkiem udostępniania na pobranie pliku zip elementu biblioteki.", + "LabelShareDownloadableHelp": "Użytkownicy mogą przy pomocy linka ściągnąć archiwum ZIP pozycji biblioteki", "LabelShareOpen": "Otwórz udział", "LabelShareURL": "Link do udziału", "LabelShowAll": "Pokaż wszystko", @@ -661,11 +660,11 @@ "LabelTagsAccessibleToUser": "Tagi dostępne dla użytkownika", "LabelTagsNotAccessibleToUser": "Znaczniki niedostępne dla użytkownika", "LabelTasks": "Uruchomione zadania", - "LabelTextEditorBulletedList": "Lista wypunktowana", + "LabelTextEditorBulletedList": "Lista punktowana", "LabelTextEditorLink": "Link", "LabelTextEditorNumberedList": "Lista numerowana", "LabelTextEditorUnlink": "Usuń link", - "LabelTheme": "Motyw", + "LabelTheme": "Kompozycja", "LabelThemeDark": "Ciemny", "LabelThemeLight": "Jasny", "LabelThemeSepia": "Sepia", @@ -687,13 +686,13 @@ "LabelToolsMakeM4bDescription": "Tworzy plik w formacie .M4B, który zawiera metadane, okładkę oraz rozdziały.", "LabelToolsSplitM4b": "Podziel plik .M4B na pliki .MP3", "LabelToolsSplitM4bDescription": "Podziel plik .M4B na pliki .MP3 na rozdziały z załączonymi metadanymi oraz okładką.", - "LabelTotalDuration": "Całkowita długość", + "LabelTotalDuration": "TCałkowita długość", "LabelTotalTimeListened": "Całkowity czas odtwarzania", "LabelTrackFromFilename": "Ścieżka z nazwy pliku", "LabelTrackFromMetadata": "Ścieżka z metadanych", "LabelTracks": "Ścieżki", "LabelTracksMultiTrack": "Wielościeżkowy", - "LabelTracksNone": "Brak utworów", + "LabelTracksNone": "Brak ścieżek", "LabelTracksSingleTrack": "Pojedyncza ścieżka", "LabelTrailer": "Zwiastun", "LabelType": "Typ", @@ -710,7 +709,7 @@ "LabelUploaderDragAndDropFilesOnly": "Przeciągnij i upuść pliki", "LabelUploaderDropFiles": "Puść pliki", "LabelUploaderItemFetchMetadataHelp": "Automatycznie pobierz tytuł, autora i serie", - "LabelUseAdvancedOptions": "Użyj ustawień zaawansowanych", + "LabelUseAdvancedOptions": "Opcje zaawansowane", "LabelUseChapterTrack": "Użyj ścieżki rozdziału", "LabelUseFullTrack": "Użycie ścieżki rozdziału", "LabelUseZeroForUnlimited": "Użyj 0, aby wyłączyć ograniczenia", @@ -724,7 +723,6 @@ "LabelViewQueue": "Wyświetlaj kolejkę odtwarzania", "LabelVolume": "Głośność", "LabelWebRedirectURLsDescription": "Zezwól na te adresy URL w swoim dostawcy OAuth, aby umożliwić przekierowanie z powrotem do aplikacji internetowej po zalogowaniu:", - "LabelWebRedirectURLsSubfolder": "Podfolder dla adresów URL przekierowań", "LabelWeekdaysToRun": "Dni tygodnia", "LabelXBooks": "{0} książek", "LabelXItems": "{0} elementów", @@ -745,7 +743,7 @@ "MessageBackupsLocationNoEditNote": "Uwaga: Lokalizacja kopii zapasowej jest ustawiona poprzez zmienną środowiskową i nie może być tutaj zmieniona.", "MessageBackupsLocationPathEmpty": "Ścieżka do kopii zapasowej nie może być pusta", "MessageBatchEditPopulateMapDetailsAllHelp": "Wypełnij włączone pola danymi ze wszystkich elementów. Pola z wieloma wartościami zostaną scalone.", - "MessageBatchEditPopulateMapDetailsItemHelp": "Wypełnia włączone pola szczegółów mapy danymi z tego elementu", + "MessageBatchEditPopulateMapDetailsItemHelp": "Wypełnij pola szczegółów mapy włączonej danymi z tego elementu", "MessageBatchQuickMatchDescription": "Quick Match będzie próbował dodać brakujące okładki i metadane dla wybranych elementów. Włącz poniższe opcje, aby umożliwić Quick Match nadpisanie istniejących okładek i/lub metadanych.", "MessageBookshelfNoCollections": "Nie posiadasz jeszcze żadnych kolekcji", "MessageBookshelfNoCollectionsHelp": "Kolekcje są publiczne. Wszyscy użytkownicy mający dostęp do biblioteki mogą je zobaczyć.", @@ -917,22 +915,10 @@ "MessageTaskNoFilesToScan": "Brak plików do skanowania", "MessageTaskOpmlImport": "Importuj OPML", "MessageTaskOpmlImportDescription": "Tworzenie {0} podcastów z kanałów RSS", - "MessageTaskOpmlImportFeed": "Importuje plik OPML", - "MessageTaskOpmlImportFeedDescription": "Importowanie kanału RSS „{0}”", - "MessageTaskOpmlImportFeedFailed": "Nie udało się pobrać kanału podcastowego", - "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", - "MessageTaskOpmlParseFastFail": "Nieprawidłowy plik OPML. Nie znaleziono tagu LUB nie znaleziono tagu .", - "MessageTaskOpmlParseNoneFound": "Nie znaleziono kanałów w pliku OPML", "MessageTaskScanItemsAdded": "Dodano {0}", "MessageTaskScanItemsMissing": "Brakuje {0}", "MessageTaskScanItemsUpdated": "Zaktualizowano {0}", "MessageTaskScanNoChangesNeeded": "Brak zmian", - "MessageTaskScanningFileChanges": "Skanowanie zmian w plikach w „{0}”", - "MessageTaskScanningLibrary": "Skanowanie biblioteki \"{0}\"", "MessageTaskTargetDirectoryNotWritable": "Brak prawa zapisu do folderu docelowego", "MessageThinking": "Myślę...", "MessageUploaderItemFailed": "Nie udało się przesłać", @@ -951,8 +937,6 @@ "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ń", - "PlaceholderBulkChapterInput": "Wpisz tytuł rozdziału lub użyj numeracji (np. „Odcinek 1”, „Rozdział 10”, „1.”)", "PlaceholderNewCollection": "Nowa nazwa kolekcji", "PlaceholderNewFolderPath": "Nowa ścieżka folderu", "PlaceholderNewPlaylist": "Nowa nazwa playlisty", @@ -973,50 +957,26 @@ "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", - "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ę", + "ToastBatchUpdateFailed": "Aktualizacja wsadowa nie powiodła się", + "ToastBatchUpdateSuccess": "Aktualizacja wsadowa 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", @@ -1027,18 +987,12 @@ "ToastDeviceTestEmailFailed": "NIeudana próba wysłania testowego maila", "ToastDeviceTestEmailSuccess": "Testowy email został wysłany", "ToastEmailSettingsUpdateSuccess": "Ustawienia email zaktualizowane", - "ToastEncodeCancelFailed": "Nie udało się anulować kodowania", - "ToastEncodeCancelSucces": "Kodowanie anulowane", - "ToastEpisodeDownloadQueueClearFailed": "Nie udało się wyczyścić kolejki", "ToastEpisodeDownloadQueueClearSuccess": "Wyczyszczono kolejkę epizodów do ściągnięcia", "ToastEpisodeUpdateSuccess": "Zaktualizowano {0} odcinków", - "ToastErrorCannotShare": "Nie można udostępniać natywnie na tym urządzeniu.", "ToastInvalidImageUrl": "Nieprawidłowy URL obrazu", "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", @@ -1077,41 +1031,12 @@ "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", - "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)" + "ToastUserDeleteSuccess": "Użytkownik usunięty" } diff --git a/client/strings/pt-br.json b/client/strings/pt-br.json index d2189698..c6c9781c 100644 --- a/client/strings/pt-br.json +++ b/client/strings/pt-br.json @@ -436,8 +436,8 @@ "LabelLibraryFilterSublistEmpty": "Sem {0}", "LabelLibraryItem": "Item da Biblioteca", "LabelLibraryName": "Nome da Biblioteca", - "LabelLibrarySortByProgress": "Progresso: Ultima Atualização", - "LabelLibrarySortByProgressFinished": "Progresso: Terminado", + "LabelLibrarySortByProgress": "Última Atualização", + "LabelLibrarySortByProgressFinished": "Concluído", "LabelLibrarySortByProgressStarted": "Progresso: Iniciado", "LabelLimit": "Limite", "LabelLineSpacing": "Espaçamento entre linhas", diff --git a/client/strings/ro.json b/client/strings/ro.json index 441ccc40..f6e8977e 100644 --- a/client/strings/ro.json +++ b/client/strings/ro.json @@ -11,581 +11,140 @@ "ButtonApplyChapters": "Aplică Capitole", "ButtonAuthors": "Autori", "ButtonBack": "Înapoi", - "ButtonBatchEditPopulateFromExisting": "Populează din existente", - "ButtonBatchEditPopulateMapDetails": "Populează detaliile hărții", - "ButtonBrowseForFolder": "Caută un dosar", "ButtonCancel": "Anulează", - "ButtonCancelEncode": "Anulare codificare", - "ButtonChangeRootPassword": "Schimbare parolă de root", - "ButtonCheckAndDownloadNewEpisodes": "Verifică și descarcă episoade noi", - "ButtonChooseAFolder": "Alege un dosar", - "ButtonChooseFiles": "Alege fișiere", "ButtonClearFilter": "Șterge filtrul", "ButtonClose": "Închide", "ButtonCloseFeed": "Închide sursa", "ButtonCloseSession": "Închide Sesiunea Curentă", "ButtonCollections": "Colecții", - "ButtonConfigureScanner": "Configurare scaner", "ButtonCreate": "Creează", - "ButtonCreateBackup": "Creează backup", "ButtonDelete": "Șterge", - "ButtonDownloadQueue": "Coadă", - "ButtonEdit": "Editare", - "ButtonEditChapters": "Editare capitole", - "ButtonEditPodcast": "Editare podcast", - "ButtonEnable": "Activează", - "ButtonForceReScan": "Forțează rescanare", - "ButtonFullPath": "Calea completă", "ButtonHide": "Ascunde", "ButtonHome": "Acasă", - "ButtonIssues": "Probleme", - "ButtonJumpBackward": "Sari înapoi", - "ButtonJumpForward": "Sari înainte", + "ButtonIssues": "Erori", "ButtonLatest": "Noutăți", "ButtonLibrary": "Bibliotecă", - "ButtonLogout": "Deconectare", - "ButtonLookup": "Căutare", - "ButtonManageTracks": "Gestionează pista", - "ButtonMapChapterTitles": "Maparea titlurilor capitolelor", - "ButtonMatchAllAuthors": "Potriviește toți autorii", - "ButtonMatchBooks": "Potrivește Cărți", - "ButtonNevermind": "Anulează", - "ButtonNext": "Următorul", - "ButtonNextChapter": "Următorul Capitol", - "ButtonNextItemInQueue": "Următorul Articol în Coadă", "ButtonOk": "OK", "ButtonOpenFeed": "Vezi noutățile", - "ButtonOpenManager": "Deschide Managerul", "ButtonPause": "Pauză", "ButtonPlay": "Redă", - "ButtonPlayAll": "Redă tot", - "ButtonPlaying": "Redare", "ButtonPlaylists": "Liste", - "ButtonPrevious": "Anterior", - "ButtonPreviousChapter": "Capitolul Anterior", - "ButtonProbeAudioFile": "Analizare Fișier Audio", - "ButtonPurgeAllCache": "Golire Cache Completă", - "ButtonPurgeItemsCache": "Golire Cache Articole", - "ButtonQueueAddItem": "Adaugă la Coadă", - "ButtonQueueRemoveItem": "Sterge din Coadă", - "ButtonQuickEmbed": "Încorporare Rapidă", - "ButtonQuickEmbedMetadata": "Metadate pentru Încorporare Rapidă", - "ButtonQuickMatch": "Potrivire Rapidă", - "ButtonReScan": "Rescanare", "ButtonRead": "Citește", - "ButtonReadLess": "Citește Mai Puțin", + "ButtonReadLess": "Mai puțin", "ButtonReadMore": "Afișează mai mult", - "ButtonRefresh": "Reîmprospătare", "ButtonRemove": "Elimină", - "ButtonRemoveAll": "Eliminați Tot", - "ButtonRemoveAllLibraryItems": "Ștergerea tuturor Articolelor din Librărie", - "ButtonRemoveFromContinueListening": "Ștergere din \"Continuă să Asculți\"", - "ButtonRemoveFromContinueReading": "Ștergere din \"Continuă să citești\"", - "ButtonRemoveSeriesFromContinueSeries": "Ștergere Serie din \"Continuă Seria\"", - "ButtonReset": "Resetează", - "ButtonResetToDefault": "Resetează la valorile implicite", - "ButtonRestore": "Restaurare", "ButtonSave": "Salvează", - "ButtonSaveAndClose": "Salvează și Închide", - "ButtonSaveTracklist": "Salvare Pistă", - "ButtonScan": "Scanează", - "ButtonScanLibrary": "Scanează Librăria", - "ButtonScrollLeft": "Derulează spre stânga", - "ButtonScrollRight": "Derulează spre Dreapta", "ButtonSearch": "Caută", - "ButtonSelectFolderPath": "Selectează Calea către Dosar", "ButtonSeries": "Serii", - "ButtonSetChaptersFromTracks": "Setează capitole din piste", - "ButtonShare": "Distribuie", - "ButtonShiftTimes": "Aliniează timpi", - "ButtonShow": "Arată", - "ButtonStartM4BEncode": "Începe Codarea M4B", - "ButtonStartMetadataEmbed": "Începe Încorporarea Metadatelor", - "ButtonStats": "Statistici", "ButtonSubmit": "Trimite", - "ButtonTest": "Testează", - "ButtonUnlinkOpenId": "Deconectare OpenID", - "ButtonUpload": "Încarcă", - "ButtonUploadBackup": "Încarcă Backup", - "ButtonUploadCover": "Încarcă Copertă", - "ButtonUploadOPMLFile": "Încarcă Fișier OPML", - "ButtonUserDelete": "Șterge userul {0}", - "ButtonUserEdit": "Editează userul {0}", - "ButtonViewAll": "Vizualizează tot", "ButtonYes": "Da", - "ErrorUploadFetchMetadataAPI": "Eroare în descărcarea metadatelor", - "ErrorUploadFetchMetadataNoResults": "Nu s-au putut prelua metadatele - încearcă să editezi titlul și/sau autorul", - "ErrorUploadLacksTitle": "Trebuie să aibă un titlu", "HeaderAccount": "Cont", - "HeaderAddCustomMetadataProvider": "Adaugă Furnizor de Metadate Personalizat", "HeaderAdvanced": "Avansat", - "HeaderApiKeys": "Chei API", - "HeaderAppriseNotificationSettings": "Setări Notificări Apprise", "HeaderAudioTracks": "Înregistrări audio", - "HeaderAudiobookTools": "Instrumente pentru Gestionarea Fișierelor Audiobook", - "HeaderAuthentication": "Autentificare", - "HeaderBackups": "Copii de siguranță", - "HeaderBulkChapterModal": "Adaugă Multiple Capitole", - "HeaderChangePassword": "Schimbă Parola", "HeaderChapters": "Capitole", - "HeaderChooseAFolder": "Alege Dosar", "HeaderCollection": "Colecție", "HeaderCollectionItems": "Conținutul colecției", - "HeaderCover": "Copertă", - "HeaderCurrentDownloads": "Descărcări Curente", - "HeaderCustomMessageOnLogin": "Mesaj Personalizat la Autentificare", - "HeaderCustomMetadataProviders": "Furnizor de Metadate Personalizat", "HeaderDetails": "Detalii", - "HeaderDownloadQueue": "Coadă de Descărcare", "HeaderEbookFiles": "Ebook-uri", - "HeaderEmail": "Email", - "HeaderEmailSettings": "Setări Email", "HeaderEpisodes": "Episoade", - "HeaderEreaderDevices": "Dispozitive eReader", "HeaderEreaderSettings": "Setări eReader", - "HeaderFiles": "Fișiere", - "HeaderFindChapters": "Caută Capitol", - "HeaderIgnoredFiles": "Fișiere Ignorate", - "HeaderItemFiles": "Fișiere Articol", - "HeaderLastListeningSession": "Ultima Sesiune de Ascultare", "HeaderLatestEpisodes": "Episoade recente", "HeaderLibraries": "Biblioteci", - "HeaderLibraryFiles": "Fișiere in Librărie", - "HeaderLibraryStats": "Statistici Librărie", - "HeaderListeningSessions": "Sesiuni de Ascultare", - "HeaderListeningStats": "Statistici Ascultare", - "HeaderLogin": "Autentifică", - "HeaderLogs": "Loguri", - "HeaderManageGenres": "Gestionează Genuri", - "HeaderManageTags": "Gestionează Etichete", - "HeaderMapDetails": "Detaliile Hărții", - "HeaderMatch": "Potrivește", - "HeaderMetadataOrderOfPrecedence": "Prioritatea Metadatelor", - "HeaderMetadataToEmbed": "Metadate pentru Încorporare", - "HeaderNewAccount": "Cont nou", - "HeaderNewApiKey": "Cheie API Nouă", - "HeaderNewLibrary": "Librărie Nouă", - "HeaderNotificationCreate": "Creează Notificare", - "HeaderNotificationUpdate": "Actualizare Notificare", - "HeaderNotifications": "Notificări", - "HeaderOpenIDConnectAuthentication": "Autentificare prin OpenID", - "HeaderOpenListeningSessions": "Deschide Sesiuni de Ascultare", "HeaderOpenRSSFeed": "Deschide flux RSS", - "HeaderOtherFiles": "Alte Fișiere", - "HeaderPasswordAuthentication": "Autentificare cu Parolă", - "HeaderPermissions": "Permisiuni", - "HeaderPlayerQueue": "Coadă Player", - "HeaderPlayerSettings": "Setări Player", "HeaderPlaylist": "Listă de redare", "HeaderPlaylistItems": "Conținut listă", - "HeaderPodcastsToAdd": "Podcast de Adăugat", - "HeaderPresets": "Presetări", - "HeaderPreviewCover": "Previzualizare Copertă", "HeaderRSSFeedGeneral": "Date RSS", "HeaderRSSFeedIsOpen": "RSS activ", - "HeaderRSSFeeds": "Fluxuri RSS", - "HeaderRemoveEpisode": "Elimină Episod", - "HeaderRemoveEpisodes": "Elimină {0} Episoade", - "HeaderSavedMediaProgress": "Progres Media Salvat", - "HeaderSchedule": "Planifică", - "HeaderScheduleEpisodeDownloads": "Planifică Descărcare Automată a Episoadelor", - "HeaderScheduleLibraryScans": "Planifică Scanarea Automată a Librăriei", - "HeaderSession": "Sesiuni", - "HeaderSetBackupSchedule": "Planifică Backup", "HeaderSettings": "Setări", - "HeaderSettingsDisplay": "Afișaj", - "HeaderSettingsExperimental": "Caracteristici Experimentale", - "HeaderSettingsGeneral": "General", - "HeaderSettingsScanner": "Scaner", - "HeaderSettingsSecurity": "Securitate", - "HeaderSettingsWebClient": "Client Web", "HeaderSleepTimer": "Timer de somn", - "HeaderStatsLargestItems": "Cele mai mari articole", - "HeaderStatsLongestItems": "Cele mai lungi articole (ore)", "HeaderStatsMinutesListeningChart": "Minute ascultate (ultimele 7 zile)", "HeaderStatsRecentSessions": "Sesiuni recente", - "HeaderStatsTop10Authors": "Top 10 Autori", - "HeaderStatsTop5Genres": "Top 5 Genuri", "HeaderTableOfContents": "Cuprins", - "HeaderTools": "Unelte", - "HeaderUpdateAccount": "Actualizare Cont", - "HeaderUpdateApiKey": "Actualizare Cheie API", - "HeaderUpdateAuthor": "Actualizare Autor", - "HeaderUpdateDetails": "Actualizare Detalii", - "HeaderUpdateLibrary": "Actualizare Librărie", - "HeaderUsers": "Utilizatori", - "HeaderYearReview": "Trecere în revistă a anului {0}", "HeaderYourStats": "Progresul tău", - "LabelAbridged": "Abreviat", - "LabelAbridgedChecked": "Abreviat (verificat)", - "LabelAbridgedUnchecked": "Neprescurtat (neverificat)", - "LabelAccessibleBy": "Accesibil prin", - "LabelAccountType": "Tip de Cont", - "LabelAccountTypeAdmin": "Administrator", - "LabelAccountTypeGuest": "Oaspete", - "LabelAccountTypeUser": "Utilizator", - "LabelActivities": "Activități", - "LabelActivity": "Activitate", - "LabelAddToCollection": "Adaugă la Colecție", - "LabelAddToCollectionBatch": "Adaugare {0} Cărți la Colecție", "LabelAddToPlaylist": "Adaugă în listă", - "LabelAddToPlaylistBatch": "Adaugare {0} Articole la Listă", "LabelAddedAt": "Adăugat la", "LabelAddedDate": "Adăugat {0}", - "LabelAdminUsersOnly": "Doar Administratori", "LabelAll": "Toate", - "LabelAllEpisodesDownloaded": "Toate episoadele descărcate", - "LabelAllUsers": "Toți Utilizatorii", - "LabelAllUsersExcludingGuests": "Toți utilizatorii cu excepția oaspeților", - "LabelAllUsersIncludingGuests": "Toți utilizatorii inclusiv oaspeții", - "LabelAlreadyInYourLibrary": "Deja în bibliotecă", - "LabelApiKeyCreated": "Cheia API \"{0}\" creată cu succes.", - "LabelApiKeyCreatedDescription": "Copiază cheia API acum deoarece nu va mai fi disponibilă pentru vizualizare.", - "LabelApiKeyUser": "Acționează în numele utilizatorului", - "LabelApiKeyUserDescription": "Această cheie API va avea aceleași permisiuni ca utilizatorul în numele căruia acționează. In loguri va părea că utilizatorul lansa cererile.", - "LabelApiToken": "Token API", - "LabelAppend": "Atașează", - "LabelAudioBitrate": "Rata de Biți Audio (e.g. 128k)", - "LabelAudioChannels": "Canale Audio (1 sau 2)", - "LabelAudioCodec": "Codec Audio", "LabelAuthor": "Autor", "LabelAuthorFirstLast": "Autor (Prenume Nume)", "LabelAuthorLastFirst": "Autor (Nume, Prenume)", "LabelAuthors": "Autori", "LabelAutoDownloadEpisodes": "Descarcă automat episoadele", - "LabelAutoFetchMetadata": "Descarcă Automat Metadate", - "LabelAutoFetchMetadataHelp": "Descarcă metadate pentru titlu, autor si serii pentru eficientizarea încărcării. Metadatele suplimentare s-ar putea să trebuiască potrivite după încărcare.", - "LabelAutoLaunch": "Lansare automată", - "LabelAutoLaunchDescription": "Redirecționează automat către furnizorul de autentificare când navighez la pagina de autentificare (cale de suprascriere manuală /login?autoLaunch=0)", - "LabelAutoRegister": "Înregistrare Automată", - "LabelAutoRegisterDescription": "Creează utilizatori automat dupa autentificare", - "LabelBackToUser": "Înapoi la Utilizator", - "LabelBackupAudioFiles": "Copii de rezervă a Fișierelor Audio", - "LabelBackupLocation": "Locația Copiilor de Rezervă", - "LabelBackupsEnableAutomaticBackups": "Copii de Rezervă Automate", - "LabelBackupsEnableAutomaticBackupsHelp": "Copiile de Rezervă au fost salvate în /metadata/backups", - "LabelBackupsMaxBackupSize": "Dimensiunea maximă a copiilor de rezervă (în GB) (0 pentru nelimitat)", - "LabelBackupsMaxBackupSizeHelp": "Ca protecție împotriva configurațiilor greșite, backup-ul va eșua dacă trece de limita de dimensiune configurată.", - "LabelBackupsNumberToKeep": "Numărul copiilor de siguranță de păstrat", - "LabelBackupsNumberToKeepHelp": "Doar 1 copie de siguranță va fi ștearsă odata deci dacă există mai multe copii de siguranță vor trebui șterse manual.", - "LabelBitrate": "Rată de biți", - "LabelBonus": "Bonus", "LabelBooks": "Cărți", - "LabelButtonText": "Textul Butonului", - "LabelByAuthor": "de {0}", - "LabelChangePassword": "Schimbare Parolă", - "LabelChannels": "Canale", - "LabelChapterCount": "{0} Capitole", - "LabelChapterTitle": "Titlul Capitolului", "LabelChapters": "Capitole", - "LabelChaptersFound": "capitole găsite", - "LabelClickForMoreInfo": "Click pentru mai multe informații", - "LabelClickToUseCurrentValue": "Click pentru a folosi valoarea curentă", "LabelClosePlayer": "Închide playerul", - "LabelCodec": "Codec", "LabelCollapseSeries": "Restrânge seriile", - "LabelCollapseSubSeries": "Restrânge Sub-Seriile", - "LabelCollection": "Colecție", - "LabelCollections": "Colecții", "LabelComplete": "Finalizat", - "LabelConfirmPassword": "Confirmare Parolă", "LabelContinueListening": "Ascultă în continuare", "LabelContinueReading": "Continuă lectura", "LabelContinueSeries": "Continuă seria", - "LabelCorsAllowed": "Origini CORS Permise", - "LabelCover": "Copertă", - "LabelCoverImageURL": "URL-ul Imaginii de Copertă", - "LabelCoverProvider": "Furnizor Copertă", - "LabelCreatedAt": "Creat la", - "LabelCronExpression": "Expresie Cron", - "LabelCurrent": "Curent", - "LabelCurrently": "Acum:", - "LabelCustomCronExpression": "Expresie Cron Personalizată:", - "LabelDatetime": "Data și ora", - "LabelDays": "Zile", - "LabelDeleteFromFileSystemCheckbox": "Șterge fișierele din sistem (debifeaza pentru a șterge doar din baza de date)", "LabelDescription": "Descriere", - "LabelDeselectAll": "Deselectați Tot", - "LabelDetectedPattern": "Tipar Identificat:", - "LabelDevice": "Dispozitiv", - "LabelDeviceInfo": "Informații Dispozitiv", - "LabelDeviceIsAvailableTo": "Dispozitiv accesibil lui...", - "LabelDirectory": "Dosar", - "LabelDiscFromFilename": "Disc din Numele Fișierului", - "LabelDiscFromMetadata": "Disc din Metadate", "LabelDiscover": "Descoperă", "LabelDownload": "Descarcă", - "LabelDownloadNEpisodes": "Descarcă {0} episoade", - "LabelDownloadable": "Descărcabil", "LabelDuration": "Durată", - "LabelDurationComparisonExactMatch": "(potrivire exactă)", - "LabelDurationComparisonLonger": "({0} mai lung)", - "LabelDurationComparisonShorter": "({0} mai scurt)", - "LabelDurationFound": "Durată identificată:", "LabelEbook": "Carte electronică", "LabelEbooks": "Cărți electronice", - "LabelEdit": "Editare", - "LabelEmail": "Email", - "LabelEmailSettingsFromAddress": "De la Adresa", - "LabelEmailSettingsRejectUnauthorized": "Respingere certificate neautorizate", - "LabelEmailSettingsRejectUnauthorizedHelp": "Dezactivarea verificării certificatelor SSL vă poate expune conexiunea la riscuri de securitate, cum ar fi atacuri de tip man-in-the-middle. Dezactivați această opțiune dacă înțelegeti implicațiile și aveți încredere în serverul de mail la care vă conectați.", - "LabelEmailSettingsSecure": "Sigur", - "LabelEmailSettingsSecureHelp": "Dacă e adevărat, conexiunea se va realiza prin TLS către server. Dacă e fals, TLS este folosit dacă serverul suporta extensia STARTTLS. În majoritatea cazurilor setati adevărat dacă folosiți portul 465. Pentru portul 587 sau 25 setati fals. (referinta nodemailer.com/smtp/#authentication)", - "LabelEmailSettingsTestAddress": "Adresă de Test", - "LabelEmbeddedCover": "Încorporează Copertă", "LabelEnable": "Activează", - "LabelEncodingBackupLocation": "O copie de siguranță a fișierului audio original va fi salvată în:", - "LabelEncodingChaptersNotEmbedded": "Capitolele nu sunt încorporate în cărțile audio cu mai multe track-uri.", - "LabelEncodingClearItemCache": "Asigurați-vă că ștergeți articolele din cache periodic.", - "LabelEncodingFinishedM4B": "Fișierul M4B va fi adaugat în dosarul dvs. de cărți audio când codificarea e terminată:", - "LabelEncodingInfoEmbedded": "Metadatele vor fi încorporate în fișierele audio din interiorul dosarului dvs. cu cărți audio.", - "LabelEncodingStartedNavigation": "Odată pornită sarcina poti naviga din această pagină.", - "LabelEncodingTimeWarning": "Codificarea poate dura până la 30 de minute.", - "LabelEncodingWarningAdvancedSettings": "Avertizare: Nu modificați aceste setări dacă nu sunteți familiar cu opțiunile de codare ffmpeg .", - "LabelEncodingWatcherDisabled": "Dacă ați dezactivat funcția de urmările va trebui sa rescanați acestă carte audio la ulterior.", "LabelEnd": "Sfârșit", "LabelEndOfChapter": "Sfârșitul capitolului", "LabelEpisode": "Episod", - "LabelEpisodeNotLinkedToRssFeed": "Episoade nelegate de un flux RSS", - "LabelEpisodeNumber": "Episodul #{0}", - "LabelEpisodeTitle": "Titlul Episodului", - "LabelEpisodeType": "Tipul Episodului", - "LabelEpisodeUrlFromRssFeed": "URL-ul Episodului din Fluxul RSS", - "LabelEpisodes": "Episoade", - "LabelEpisodic": "Episodic", - "LabelExample": "Exemplu", - "LabelExpandSeries": "Extinde Seriile", - "LabelExpandSubSeries": "Extinde Sub-Seriile", - "LabelExpired": "Expirat", - "LabelExpiresAt": "Expiră La", - "LabelExpiresInSeconds": "Expiră în (secunde)", - "LabelExpiresNever": "Niciodată", "LabelExplicit": "Explicit", - "LabelExplicitChecked": "Explicit (verificat)", - "LabelExplicitUnchecked": "Neexplicit (neverificat)", - "LabelExportOPML": "Exportă OPML", - "LabelFeedURL": "Flux URL", - "LabelFetchingMetadata": "Aducere Metadate", + "LabelFeedURL": "URL flux", "LabelFile": "Fișier", "LabelFileBirthtime": "Data creării fișierului", - "LabelFileBornDate": "Creat {0}", "LabelFileModified": "Fișier modificat", - "LabelFileModifiedDate": "Modificat {0}", "LabelFilename": "Nume fișier", - "LabelFilterByUser": "Filtrare după Utilizator", - "LabelFindEpisodes": "Găsire Episoade", "LabelFinished": "Finalizat", - "LabelFinishedDate": "Finalizat {0}", "LabelFolder": "Dosar", - "LabelFolders": "Dosare", - "LabelFontBold": "Îngroșat", "LabelFontBoldness": "Grosimea fontului", - "LabelFontFamily": "Familia Fontului", - "LabelFontItalic": "Cursiv", "LabelFontScale": "Mărimea fontului", - "LabelFontStrikethrough": "Tăiat cu o linie", - "LabelFormat": "Format", - "LabelFull": "Întreg", "LabelGenre": "Gen", "LabelGenres": "Genuri", - "LabelHardDeleteFile": "Ștergere definitivă a fișierului", "LabelHasEbook": "Are carte electronică", "LabelHasSupplementaryEbook": "Are carte electronică suplimentară", - "LabelHideSubtitles": "Ascunde Subtitrări", - "LabelHighestPriority": "Prioritatea cea mai ridicată", "LabelHost": "Gazdă", - "LabelHour": "Ora", - "LabelHours": "Ore", - "LabelIcon": "Pictogramă", - "LabelImageURLFromTheWeb": "URL-ul imaginii de pe web", "LabelInProgress": "În desfășurare", - "LabelIncludeInTracklist": "Include în Lista de Melodii", "LabelIncomplete": "Incomplet", - "LabelInterval": "Interval", - "LabelIntervalCustomDailyWeekly": "Personalizat zilnic/saptămânal", - "LabelIntervalEvery12Hours": "La fiecare 12 ore", - "LabelIntervalEvery15Minutes": "La fiecare 15 minute", - "LabelIntervalEvery2Hours": "La fiecare 2 ore", - "LabelIntervalEvery30Minutes": "La fiecare 30 minute", - "LabelIntervalEvery6Hours": "La fiecare 6 ore", - "LabelIntervalEveryDay": "În fiecare zi", - "LabelIntervalEveryHour": "În fiecare oră", - "LabelIntervalEveryMinute": "La fiecare minut", - "LabelInvert": "Inversează", - "LabelItem": "Articol", - "LabelJumpBackwardAmount": "Sari înapoi cu", - "LabelJumpForwardAmount": "Sari înainte cu", "LabelLanguage": "Limbă", - "LabelLanguageDefaultServer": "Limba Prestabilită a Serverului", - "LabelLanguages": "Limbi", - "LabelLastBookAdded": "Ultima Carte Adăugată", - "LabelLastBookUpdated": "Ultima Carte Actualizată", - "LabelLastProgressDate": "Ultimul progres: {0}", - "LabelLastSeen": "Ultima dată văzut", - "LabelLastTime": "Ultima dată", - "LabelLastUpdate": "Ultima actualizare", "LabelLayout": "Aspect", "LabelLayoutSinglePage": "Pagină unică", - "LabelLayoutSplitPage": "Pagină împărțită", - "LabelLess": "Mai puțin", - "LabelLibrariesAccessibleToUser": "Biblioteci Accesibile Utilizatorului", - "LabelLibrary": "Bibliotecă", - "LabelLibraryFilterSublistEmpty": "Numărul {0}", - "LabelLibraryItem": "Articol din Bibliotecă", - "LabelLibraryName": "Numele Bibliotecii", - "LabelLibrarySortByProgress": "Progres: Ultima Actualizare", - "LabelLibrarySortByProgressFinished": "Progres: Finalizat", - "LabelLibrarySortByProgressStarted": "Progres: Început", - "LabelLimit": "Limită", "LabelLineSpacing": "Spațiere între rânduri", "LabelListenAgain": "Ascultă din nou", - "LabelLogLevelDebug": "Depanare", - "LabelLogLevelInfo": "Informații", - "LabelLogLevelWarn": "Avertizare", - "LabelLookForNewEpisodesAfterDate": "Caută episoade noi după această dată", - "LabelLowestPriority": "Cea Mai Scăzută Prioritate", - "LabelMatchConfidence": "Încredere", - "LabelMatchExistingUsersBy": "Potrivire utilizatori existenți prin", - "LabelMatchExistingUsersByDescription": "Folosit pentru a conecta utilizatorii existenți. Odata conectați, utilizatorii vor fi potriviți după un ID unic trimis de furnizorul SSO", - "LabelMaxEpisodesToDownload": "Numarul maxim # de episoade de descărcat. Folosiți 0 pentru nelimitat.", - "LabelMaxEpisodesToDownloadPerCheck": "Numărul maxim # de episoade de descărcat per verificare", - "LabelMaxEpisodesToKeep": "Numarul maxim # de episoade păstrate", - "LabelMaxEpisodesToKeepHelp": "Valorea 0 nu stabilește o limită maximă. După ce un episod nou a fost descărcat automat, cel mai vechi episod va fi șters dacă aveți mai mult de X episoade. Se va șterge câte un episod vechi pentru fiecare episod nou descărcat.", - "LabelMediaPlayer": "Player Media", "LabelMediaType": "Tip media", - "LabelMetaTag": "Etichetă Meta", - "LabelMetaTags": "Etichete Meta", - "LabelMetadataOrderOfPrecedenceDescription": "Sursele de metadate cu prioritate mai mare o să suprascrie sursele de metadate cu prioritate mai mică", - "LabelMetadataProvider": "Furnizor Metadate", - "LabelMinute": "Minut", - "LabelMinutes": "Minute", "LabelMissing": "Lipsă", - "LabelMissingEbook": "Nu are carte electronică", - "LabelMissingSupplementaryEbook": "Nu are carte electronică adițională", - "LabelMobileRedirectURIs": "URL-uri de redirecționare Mobile Permise", - "LabelMobileRedirectURIsDescription": "Aceasta este o listă cu URI-uri valide pentru redirectionare a aplicațiilor mobile. URI-ul predefinit este audiobookshelf://oauth,, care poate fi sters sau suplimentat cu URI-uri adiționale pentru integrarea cu alte aplicații. Folosirea unui asterisc (*) ca singur element permite orice URI.", "LabelMore": "Mai multe", "LabelMoreInfo": "Mai multe informații", "LabelName": "Nume", "LabelNarrator": "Narator", "LabelNarrators": "Naratori", - "LabelNew": "Nou", - "LabelNewPassword": "Parolă Nouă", "LabelNewestAuthors": "Autori noi", "LabelNewestEpisodes": "Episoade noi", - "LabelNextBackupDate": "Următoarea dată a copiilor de siguranță", - "LabelNextChapters": "Următoarele capitole vor fi:", - "LabelNextScheduledRun": "Urmatoarea rulare programată", - "LabelNoApiKeys": "Nu exista chei API", - "LabelNoCustomMetadataProviders": "Nu există furnizori de metadate personalizați", - "LabelNoEpisodesSelected": "Nici un episod selectat", "LabelNotFinished": "Nefinalizat", "LabelNotStarted": "Neînceput", - "LabelNotes": "Note", - "LabelNotificationAppriseURL": "URL-ul(urile) Apprise", - "LabelNotificationAvailableVariables": "Variabile disponibile", - "LabelNotificationBodyTemplate": "Corpul Șablonului", - "LabelNotificationEvent": "Eveniment de notificare", - "LabelNotificationTitleTemplate": "Titlul Șablonului", - "LabelNotificationsMaxFailedAttempts": "Număr de încercări eșuate maxim", - "LabelNotificationsMaxFailedAttemptsHelp": "Notificările sunt dezactivate dacă nu reușesc să fie trimise de acest număr de ori", - "LabelNotificationsMaxQueueSize": "Dimensiunea maximă a cozii pentru evenimentele de notificare", - "LabelNotificationsMaxQueueSizeHelp": "Evenimentele sunt limitate la 1 per secunda. Evenimentele vor fi ignorate dacă coada este plină. Previne spamarea cu notificări.", - "LabelNumberOfBooks": "Numărul de Cărți", - "LabelNumberOfChapters": "Număr de capitole:", "LabelNumberOfEpisodes": "# de Episoade", - "LabelOpenIDAdvancedPermsClaimDescription": "Numele revendicării OpenID care conține permisiuni avansate pentru acțiunile utilizatorului în interiorul aplicației care vor fi aplicate rolurilor non-administrator (dacă e configurat). Dacă revendicarea nu e prezentă în răspunsul primit, accesul către ABS e refuzat. Dacă o singură opțiune lipsește, va fi tratată ca falsă. Asigurați-vă că revendicările furnizorului de securitate corespund structurii așteptate:", - "LabelOpenIDClaims": "Lăsați urmatoarele opțiuni goale pentru a dezactiva atribuirea avansată de grupuri și permisiuni, asignând grupul \"Utilizatori\" automat.", - "LabelOpenRSSFeed": "Flux Open RSS", - "LabelOverwrite": "Suprascrie", - "LabelPaginationPageXOfY": "Pagina {0} din {1}", "LabelPassword": "Parolă", "LabelPath": "Cale", - "LabelPermanent": "Permanent", - "LabelPermissionsAccessAllLibraries": "Poate accesa toate bibliotecile", - "LabelPermissionsAccessAllTags": "Poate accesa toate etichetele", - "LabelPermissionsAccessExplicitContent": "Poate Accesa Conținut Explicit", - "LabelPermissionsCreateEreader": "Poate Crea Cititoare Electronice", - "LabelPermissionsDelete": "Poate Șterge", - "LabelPermissionsDownload": "Poate Descărca", - "LabelPermissionsUpdate": "Poate Actualiza", - "LabelPermissionsUpload": "Poate Încărca", - "LabelPersonalYearReview": "Recapitularea Anului tău ({0})", - "LabelPhotoPathURL": "Calea/URL-ul Fotografiei", - "LabelPlayMethod": "Metoda de Redare", - "LabelPlaybackRateIncrementDecrement": "Incrementare/Decrementare a Ratei de Redare cu", - "LabelPlayerChapterNumberMarker": "{0} din {1}", - "LabelPlaylists": "Liste de redare", "LabelPodcast": "Podcast", - "LabelPodcastSearchRegion": "Regiunea căutării podcastului", - "LabelPodcastType": "Tipul Podcastului", "LabelPodcasts": "Podcasturi", - "LabelPort": "Portul", - "LabelPrefixesToIgnore": "Prefix de ignorat (fără a ține cont de majuscule)", "LabelPreventIndexing": "Împiedică indexarea fluxului în directoarele iTunes și Google Podcasts", - "LabelPrimaryEbook": "eCarte Principală", "LabelProgress": "Progres", - "LabelProvider": "Furnizor", - "LabelProviderAuthorizationValue": "Valoarea Antetului de Autorizare", "LabelPubDate": "Data publicării", "LabelPublishYear": "Anul publicării", "LabelPublishedDate": "Publicat la {0}", - "LabelPublishedDecade": "Deceniul Publicării", - "LabelPublishedDecades": "Deceniile Publicării", - "LabelPublisher": "Editor", - "LabelPublishers": "Editori", "LabelRSSFeedCustomOwnerEmail": "Email personalizat al proprietarului", "LabelRSSFeedCustomOwnerName": "Nume personalizat al proprietarului", "LabelRSSFeedOpen": "Flux RSS deschis", "LabelRSSFeedPreventIndexing": "Previne indexarea", "LabelRSSFeedSlug": "Identificator flux RSS", - "LabelRSSFeedURL": "URL-ul Fluxului RSS", "LabelRandomly": "Aleatoriu", - "LabelReAddSeriesToContinueListening": "Readăugare serie la \"Continuă să asculți\"", "LabelRead": "Citește", "LabelReadAgain": "Citește din nou", - "LabelReadEbookWithoutProgress": "Citire eCarte fără a memora progresul", "LabelRecentSeries": "Serii recente", "LabelRecentlyAdded": "Adăugate recent", - "LabelRecommended": "Recomandat", - "LabelRedo": "Refă", - "LabelRegion": "Regiune", - "LabelReleaseDate": "Data Lansării", - "LabelRemoveAllMetadataAbs": "Ștergerea tuturor fișierelor metadata.abs", - "LabelRemoveAllMetadataJson": "Ștergerea tuturor fișierelor metadata.json", - "LabelRemoveAudibleBranding": "Ștergerea Audible intro și outro din capitole", - "LabelRemoveCover": "Șterge coperta", - "LabelRemoveMetadataFile": "Șterge fisierele metadate din dosarele bibliotecii", - "LabelRemoveMetadataFileHelp": "Șterge toate fișierele metadata.json și metadata.abs din {0} dosare.", - "LabelRowsPerPage": "Rânduri pe pagină", - "LabelSearchTerm": "Termen de căutat", - "LabelSearchTitle": "Titlu de căutat", - "LabelSearchTitleOrASIN": "Titlu de căutat sau ASN", "LabelSeason": "Sezon", - "LabelSeasonNumber": "Sezonul #{0}", - "LabelSelectAll": "Selectează tot", - "LabelSelectAllEpisodes": "Selectează toate episoadele", - "LabelSelectEpisodesShowing": "Selectează {0} episoade dintre cele afișate", - "LabelSelectUser": "Selectare utilizator", - "LabelSelectUsers": "Selectare utilizatori", - "LabelSendEbookToDevice": "Trimite eCarte către...", - "LabelSequence": "Secvență", - "LabelSerial": "Serie", "LabelSeries": "Serii", - "LabelSeriesName": "Numele Seriilor", - "LabelSeriesProgress": "Progresul Seriilor", - "LabelServerLogLevel": "Nivelul de Jurnal al Serverului", - "LabelServerYearReview": "Anul Serverului în Retrospectivă ({0})", "LabelSetEbookAsPrimary": "Setează ca principală", "LabelSetEbookAsSupplementary": "Setează ca suplimentară", - "LabelSettingsAllowIframe": "Permite încorporarea intr-un iframe", - "LabelSettingsAudiobooksOnly": "Doar cărți audio", - "LabelSettingsAudiobooksOnlyHelp": "Activarea acestei set[ri va ignora fișierele eBook daca acestea nu se află într-un dosar al unei cărți audio, caz în care vor fi setate ca eBook suplimentar", - "LabelSettingsBookshelfViewHelp": "Design scheumorf cu rafturi de lemn", - "LabelSettingsChromecastSupport": "Suport Chromecast", - "LabelSettingsDateFormat": "Formatul Datei", - "LabelSettingsEnableWatcher": "Urmărește în mod automat bibliotecile pentru schimbări", - "LabelSettingsEnableWatcherForLibrary": "Urmărește în mod automat biblioteca pentru schimbări", "LabelShowAll": "Afișează tot", "LabelSize": "Dimensiune", "LabelSleepTimer": "Timer de somn", diff --git a/client/strings/sk.json b/client/strings/sk.json index 6101eba7..e0d02898 100644 --- a/client/strings/sk.json +++ b/client/strings/sk.json @@ -23,7 +23,7 @@ "ButtonClearFilter": "Zrušiť filter", "ButtonClose": "Uzavrieť", "ButtonCloseFeed": "Zatvoriť zdroj", - "ButtonCloseSession": "Ukončiť aktívne relácie", + "ButtonCloseSession": "Ukončiť otvorené pripojenie", "ButtonCollections": "Kolekcie", "ButtonConfigureScanner": "Nastaviť skener", "ButtonCreate": "Vytvoriť", @@ -150,12 +150,12 @@ "HeaderIgnoredFiles": "Ignorované súbory", "HeaderItemFiles": "Položka Súbory", "HeaderItemMetadataUtils": "Položka Nástroje metadát", - "HeaderLastListeningSession": "Posledná relácia", + "HeaderLastListeningSession": "Posledné pripojenie", "HeaderLatestEpisodes": "Posledné epizódy", "HeaderLibraries": "Knižnice", "HeaderLibraryFiles": "Súbory knižnice", "HeaderLibraryStats": "Štatistiky knižnice", - "HeaderListeningSessions": "Relácie", + "HeaderListeningSessions": "Pripojenia", "HeaderListeningStats": "Štatistiky počúvania", "HeaderLogin": "Prihlásenie", "HeaderLogs": "Záznamy udalostí", @@ -172,7 +172,7 @@ "HeaderNotificationUpdate": "Aktualizovať notifikáciu", "HeaderNotifications": "Notifikácie", "HeaderOpenIDConnectAuthentication": "Overenie pripojenia OpenID", - "HeaderOpenListeningSessions": "Aktívne relácie", + "HeaderOpenListeningSessions": "Aktívne pripojenia", "HeaderOpenRSSFeed": "Otvoriť RSS zdroj", "HeaderOtherFiles": "Ostatné súbory", "HeaderPasswordAuthentication": "Overenie heslom", @@ -189,7 +189,7 @@ "HeaderRSSFeeds": "RSS zdroje", "HeaderRemoveEpisode": "Odstrániť epizódu", "HeaderRemoveEpisodes": "Odstrániť {0} epizód", - "HeaderSavedMediaProgress": "Stav uložených médií", + "HeaderSavedMediaProgress": "Priebeh uložených médií", "HeaderSchedule": "Plán", "HeaderScheduleEpisodeDownloads": "Naplánovať automatické sťahovanie epizód", "HeaderScheduleLibraryScans": "Naplánovanovať automatické skenovanie knižnice", @@ -222,7 +222,7 @@ "LabelAbridged": "Skrátená verzia", "LabelAbridgedChecked": "Skrátená verzia (zaškrtnuté)", "LabelAbridgedUnchecked": "Neskrátená verzia (nezaškrtnuté)", - "LabelAccessibleBy": "Dostupné pre", + "LabelAccessibleBy": "Prístupné pre", "LabelAccountType": "Typ účtu", "LabelAccountTypeAdmin": "Administrátor", "LabelAccountTypeGuest": "Hosť", @@ -230,7 +230,7 @@ "LabelActivities": "Aktivity", "LabelActivity": "Aktivita", "LabelAddToCollection": "Pridať do zbierky", - "LabelAddToCollectionBatch": "Pridať {0} kníh do zbierky", + "LabelAddToCollectionBatch": "Pridať {0} kníh do kolekcie", "LabelAddToPlaylist": "Pridať do playlistu", "LabelAddToPlaylistBatch": "Pridať {0} položie do playlistu", "LabelAddedAt": "Pridané", @@ -275,7 +275,7 @@ "LabelBonus": "Bonus", "LabelBooks": "Knihy", "LabelButtonText": "Text tlačidla", - "LabelByAuthor": "od", + "LabelByAuthor": "od {0}", "LabelChangePassword": "Zmeniť heslo", "LabelChannels": "Kanály", "LabelChapterCount": "{0} kapitol", @@ -288,8 +288,8 @@ "LabelCodec": "Kodek", "LabelCollapseSeries": "Zbaliť série", "LabelCollapseSubSeries": "Zbaliť podsérie", - "LabelCollection": "Zbierka", - "LabelCollections": "Zbierky", + "LabelCollection": "Kolekcia", + "LabelCollections": "Kolekcie", "LabelComplete": "Hotovo", "LabelConfirmPassword": "Potvrdiť heslo", "LabelContinueListening": "Pokračovať v počúvaní", @@ -383,7 +383,7 @@ "LabelFolders": "Priečinky", "LabelFontBold": "Tučné", "LabelFontBoldness": "Hrúbka písma", - "LabelFontFamily": "písmo", + "LabelFontFamily": "Rodina písiem", "LabelFontItalic": "Kurzíva", "LabelFontScale": "Veľkosť písma", "LabelFontStrikethrough": "Preškrtnuté", @@ -436,9 +436,9 @@ "LabelLibraryFilterSublistEmpty": "Žiadne {0}", "LabelLibraryItem": "Položka knižnice", "LabelLibraryName": "Názov knižnice", - "LabelLibrarySortByProgress": "Stav: Naposledy aktualizované", - "LabelLibrarySortByProgressFinished": "Stav: Dokončené", - "LabelLibrarySortByProgressStarted": "Stav: Začal", + "LabelLibrarySortByProgress": "Pokrok: Aktualizované", + "LabelLibrarySortByProgressFinished": "Pokrok: Dokončené", + "LabelLibrarySortByProgressStarted": "Pokrok: Začiatok", "LabelLimit": "Limit", "LabelLineSpacing": "Riadkovanie", "LabelListenAgain": "Počúvať znova", @@ -528,7 +528,7 @@ "LabelPrefixesToIgnore": "Ignorované predpony (bez ohľadu na veľkosť písmen)", "LabelPreventIndexing": "Zabráni indexácii vašich zdrojov službami iTunes a Google podcast directories", "LabelPrimaryEbook": "Primárny e-book", - "LabelProgress": "Aktuálny stav", + "LabelProgress": "Stav", "LabelProvider": "Poskytovateľ", "LabelProviderAuthorizationValue": "Obsah hlavičky autorizácie", "LabelPubDate": "Dátum publikovania", @@ -548,7 +548,7 @@ "LabelReAddSeriesToContinueListening": "Znova pridať série do pokračujúceho počúvania", "LabelRead": "Načítať", "LabelReadAgain": "Čítať znova", - "LabelReadEbookWithoutProgress": "Čítať e-knihu bez zmeny stavu", + "LabelReadEbookWithoutProgress": "Čítať e-knihu bez sledovania pokroku", "LabelRecentSeries": "Posledné série", "LabelRecentlyAdded": "Posledné pridané", "LabelRecommended": "Odporúčané", @@ -577,7 +577,7 @@ "LabelSerial": "Na pokračovanie", "LabelSeries": "Série", "LabelSeriesName": "Názov série", - "LabelSeriesProgress": "Aktuálny stav série", + "LabelSeriesProgress": "Pokrok série", "LabelServerLogLevel": "Úroveň logovania servera", "LabelServerYearReview": "Rok servera v prehľade ({0})", "LabelSetEbookAsPrimary": "Nastaviť ako primárny", @@ -588,8 +588,8 @@ "LabelSettingsBookshelfViewHelp": "Skeuomorfný dizajn s drevenými poličkami", "LabelSettingsChromecastSupport": "Podpora chromecastu", "LabelSettingsDateFormat": "Formát dátumu", - "LabelSettingsEnableWatcher": "Automatické sledovanie zmien v knižniciach", - "LabelSettingsEnableWatcherForLibrary": "Automatické sledovanie zmien v knižnici", + "LabelSettingsEnableWatcher": "Automatické skenovanie knižníc pre zmeny", + "LabelSettingsEnableWatcherForLibrary": "Automaticky skenovať knižnicu pre zmeny", "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 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).", + "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.", "MessageScheduleRunEveryWeekdayAtTime": "Spustiť každú {0} o {1}", "MessageSearchResultsFor": "Výsledky vyhľadávania pre", "MessageSelected": "{0} vybrané", @@ -1015,7 +1015,7 @@ "ToastCachePurgeFailed": "Vyčistenie vyrovnávacej pamäte zlyhalo", "ToastCachePurgeSuccess": "Vyrovnávacia pamäť vyčistená", "ToastChapterLocked": "Kapitola je zamknutá.", - "ToastChapterStartTimeAdjusted": "Čas začiatku kapitoly upravený o {0} sekúnd", + "ToastChapterStartTimeAdjusted": "Čas začiatku kapitoly upravený o {0} sek.", "ToastChaptersAllLocked": "Všetky kapitoly sú zamknuté. Odomknite niektoré kapitoly, aby ste posunuli ich časy.", "ToastChaptersHaveErrors": "Kapitoly obsahujú chyby", "ToastChaptersInvalidShiftAmountLast": "Neplatná hodnota veľkosti posunutia. Začiatok poslednej kapitoly by ležal za koncom audioknihy.", @@ -1026,8 +1026,6 @@ "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/sl.json b/client/strings/sl.json index c88be4ba..3b7ce53a 100644 --- a/client/strings/sl.json +++ b/client/strings/sl.json @@ -104,7 +104,7 @@ "ButtonStartM4BEncode": "Zaženi M4B prekodiranje", "ButtonStartMetadataEmbed": "Začni vdelavo metapodatkov", "ButtonStats": "Statistika", - "ButtonSubmit": "Pošlji", + "ButtonSubmit": "Potrdi", "ButtonTest": "Test", "ButtonUnlinkOpenId": "Prekini povezavo OpenID", "ButtonUpload": "Naloži", @@ -436,9 +436,9 @@ "LabelLibraryFilterSublistEmpty": "Ne {0}", "LabelLibraryItem": "Element knjižnice", "LabelLibraryName": "Ime knjižnice", - "LabelLibrarySortByProgress": "Napredek: Zadnja posodobitev", - "LabelLibrarySortByProgressFinished": "Napredek: Končano", - "LabelLibrarySortByProgressStarted": "Napredek: Začelo se je", + "LabelLibrarySortByProgress": "Napredek: Nazadnje posodobljen", + "LabelLibrarySortByProgressFinished": "Napredej: Končano", + "LabelLibrarySortByProgressStarted": "Napredek: Začeto", "LabelLimit": "Omejitev", "LabelLineSpacing": "Vrstični razmak", "LabelListenAgain": "Poslušaj znova", diff --git a/client/strings/sv.json b/client/strings/sv.json index fa0267e8..d2fb254e 100644 --- a/client/strings/sv.json +++ b/client/strings/sv.json @@ -1,6 +1,6 @@ { "ButtonAdd": "Lägg till", - "ButtonAddApiKey": "Lägg till API-nyckel", + "ButtonAddApiKey": "Addera API-nyckel", "ButtonAddChapters": "Lägg till kapitel", "ButtonAddDevice": "Lägg till enhet", "ButtonAddLibrary": "Lägg till bibliotek", @@ -48,7 +48,7 @@ "ButtonLogout": "Logga ut", "ButtonLookup": "Sök", "ButtonManageTracks": "Hantera spår", - "ButtonMapChapterTitles": "Mappa kapitelrubriker", + "ButtonMapChapterTitles": "Karta kapitelrubriker", "ButtonMatchAllAuthors": "Matcha alla författare", "ButtonMatchBooks": "Matcha böcker", "ButtonNevermind": "Glöm det", @@ -104,7 +104,7 @@ "ButtonStartM4BEncode": "Starta M4B-omkodning", "ButtonStartMetadataEmbed": "Infoga metadata", "ButtonStats": "Statistik", - "ButtonSubmit": "Skicka", + "ButtonSubmit": "Spara", "ButtonTest": "Testa", "ButtonUnlinkOpenId": "Koppla ifrån OpenID", "ButtonUpload": "Ladda upp", @@ -123,7 +123,7 @@ "HeaderAdvanced": "Avancerad", "HeaderApiKeys": "API-nyckel", "HeaderAppriseNotificationSettings": "Inställningar av meddelanden med Apprise", - "HeaderAudioTracks": "Ljudspår", + "HeaderAudioTracks": "Ljudfiler", "HeaderAudiobookTools": "Hantering av ljudboksfiler", "HeaderAuthentication": "Autentisering", "HeaderBackups": "Säkerhetskopior", @@ -202,7 +202,7 @@ "HeaderSettingsScanner": "Skanner", "HeaderSettingsSecurity": "Säkerhet", "HeaderSettingsWebClient": "Webklient", - "HeaderSleepTimer": "Insomningstimer", + "HeaderSleepTimer": "Timer för att sova", "HeaderStatsLargestItems": "Största objekten", "HeaderStatsLongestItems": "Längsta objekten (timmar)", "HeaderStatsMinutesListeningChart": "Minuters lyssning (senaste 7 dagarna)", @@ -231,10 +231,10 @@ "LabelActivity": "Aktivitet", "LabelAddToCollection": "Lägg till i en samling", "LabelAddToCollectionBatch": "Lägg till {0} böcker i samlingen", - "LabelAddToPlaylist": "Lägg till i spellista", + "LabelAddToPlaylist": "Lägg till i en spellista", "LabelAddToPlaylistBatch": "Lägg till {0} objekt i Spellistan", "LabelAddedAt": "Datum adderad", - "LabelAddedDate": "Tillagd {0}", + "LabelAddedDate": "Adderad {0}", "LabelAdminUsersOnly": "Endast administratörer", "LabelAll": "Alla", "LabelAllEpisodesDownloaded": "Alla avsnitt är nedladdade", @@ -363,14 +363,14 @@ "LabelExpiresAt": "Gäller till och med", "LabelExpiresInSeconds": "Upphör om (sekunder)", "LabelExpiresNever": "Aldrig", - "LabelExplicit": "Vuxeninnehåll", + "LabelExplicit": "Bestämd", "LabelExplicitChecked": "Explicit version (markerad)", "LabelExplicitUnchecked": "Ej Explicit version (ej markerad)", "LabelExportOPML": "Exportera OPML-information", "LabelFeedURL": "URL-adress för flödet", "LabelFetchingMetadata": "Hämtar metadata", "LabelFile": "Fil", - "LabelFileBirthtime": "Tidpunkt, tillagd", + "LabelFileBirthtime": "Tidpunkt, adderad", "LabelFileBornDate": "Skapad {0}", "LabelFileModified": "Tidpunkt, ändrad", "LabelFileModifiedDate": "Ändrad {0}", @@ -436,9 +436,9 @@ "LabelLibraryFilterSublistEmpty": "Ingen {0}", "LabelLibraryItem": "Objekt", "LabelLibraryName": "Biblioteksnamn", - "LabelLibrarySortByProgress": "Status: Senast uppdaterad", - "LabelLibrarySortByProgressFinished": "Status: Avslutad", - "LabelLibrarySortByProgressStarted": "Status: Startad", + "LabelLibrarySortByProgress": "Framsteg: senast uppdaterat", + "LabelLibrarySortByProgressFinished": "Framsteg: avslutad", + "LabelLibrarySortByProgressStarted": "Framsteg: påbörjad", "LabelLimit": "Begränsning", "LabelLineSpacing": "Radavstånd", "LabelListenAgain": "Lyssna igen", @@ -629,7 +629,7 @@ "LabelShowSeconds": "Visa i sekunder", "LabelShowSubtitles": "Visa underrubriker", "LabelSize": "Storlek", - "LabelSleepTimer": "Insomningstimer", + "LabelSleepTimer": "Sovtimer", "LabelSlug": "Kortnamn", "LabelSortAscending": "Stigande", "LabelSortDescending": "Fallande", diff --git a/client/strings/tr.json b/client/strings/tr.json index 770521cb..af64a618 100644 --- a/client/strings/tr.json +++ b/client/strings/tr.json @@ -275,7 +275,7 @@ "LabelBonus": "Bonus", "LabelBooks": "Kitaplar", "LabelButtonText": "Buton Metni", - "LabelByAuthor": "{0} tarafından", + "LabelByAuthor": "Yazar: {0}", "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": "Kütüphanelerdeki değişiklikleri otomatik olarak izle", - "LabelSettingsEnableWatcherForLibrary": "Kütüphanedeki değişiklikleri otomatik olarak izle", + "LabelSettingsEnableWatcher": "Değişiklikler için kütüphaneleri otomatik olarak tara", + "LabelSettingsEnableWatcherForLibrary": "Değişiklikler için kütüphaneyi otomatik olarak tara", "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 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.", + "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.", "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 14c70cb1..64c41619 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 a0ec172a..71cbba23 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 minutes + description: Duration in seconds SeriesMetadata: type: object diff --git a/server/controllers/AuthorController.js b/server/controllers/AuthorController.js index 82ed3e50..50eeda31 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 in the same library and merge the authors + // Check if author name matches another author and merge the authors let existingAuthor = null if (authorNameUpdate) { existingAuthor = await Database.authorModel.findOne({ @@ -121,8 +121,7 @@ class AuthorController { id: { [sequelize.Op.not]: req.author.id }, - name: payload.name, - libraryId: req.author.libraryId + name: payload.name } }) } diff --git a/server/controllers/MeController.js b/server/controllers/MeController.js index c5968f52..51773a5a 100644 --- a/server/controllers/MeController.js +++ b/server/controllers/MeController.js @@ -63,7 +63,7 @@ class MeController { * @param {Response} res */ async getItemListeningSessions(req, res) { - const libraryItem = await Database.libraryItemModel.getExpandedById(req.params.libraryItemId) + const libraryItem = await Database.libraryItemModel.findByPk(req.params.libraryItemId) const episode = await Database.podcastEpisodeModel.findByPk(req.params.episodeId) if (!libraryItem || (libraryItem.isPodcast && !episode)) { @@ -71,12 +71,6 @@ class MeController { return res.sendStatus(404) } - // Check if user has access to this library item - if (!req.user.checkCanAccessLibraryItem(libraryItem)) { - Logger.error(`[MeController] User "${req.user.username}" attempted to access listening sessions for library item "${req.params.libraryItemId}" without access`) - return res.sendStatus(403) - } - const mediaItemId = episode?.id || libraryItem.mediaId let listeningSessions = await this.getUserItemListeningSessionsHelper(req.user.id, mediaItemId) @@ -131,13 +125,6 @@ class MeController { * @param {Response} res */ async removeMediaProgress(req, res) { - // Verify the media progress belongs to the current user - const mediaProgress = req.user.mediaProgresses.find((mp) => mp.id === req.params.id) - if (!mediaProgress) { - Logger.error(`[MeController] Media progress not found or does not belong to user "${req.user.username}"`) - return res.sendStatus(404) - } - await Database.mediaProgressModel.removeById(req.params.id) req.user.mediaProgresses = req.user.mediaProgresses.filter((mp) => mp.id !== req.params.id) @@ -205,16 +192,7 @@ class MeController { * @param {Response} res */ async createBookmark(req, res) { - const libraryItem = await Database.libraryItemModel.getExpandedById(req.params.id) - if (!libraryItem) { - return res.sendStatus(404) - } - - // Check if user has access to this library item - if (!req.user.checkCanAccessLibraryItem(libraryItem)) { - Logger.error(`[MeController] User "${req.user.username}" attempted to create bookmark for library item "${req.params.id}" without access`) - return res.sendStatus(403) - } + if (!(await Database.libraryItemModel.checkExistsById(req.params.id))) return res.sendStatus(404) const { time, title } = req.body if (isNullOrNaN(time)) { @@ -238,16 +216,7 @@ class MeController { * @param {Response} res */ async updateBookmark(req, res) { - const libraryItem = await Database.libraryItemModel.getExpandedById(req.params.id) - if (!libraryItem) { - return res.sendStatus(404) - } - - // Check if user has access to this library item - if (!req.user.checkCanAccessLibraryItem(libraryItem)) { - Logger.error(`[MeController] User "${req.user.username}" attempted to update bookmark for library item "${req.params.id}" without access`) - return res.sendStatus(403) - } + if (!(await Database.libraryItemModel.checkExistsById(req.params.id))) return res.sendStatus(404) const { time, title } = req.body if (isNullOrNaN(time)) { @@ -276,16 +245,7 @@ class MeController { * @param {Response} res */ async removeBookmark(req, res) { - const libraryItem = await Database.libraryItemModel.getExpandedById(req.params.id) - if (!libraryItem) { - return res.sendStatus(404) - } - - // Check if user has access to this library item - if (!req.user.checkCanAccessLibraryItem(libraryItem)) { - Logger.error(`[MeController] User "${req.user.username}" attempted to remove bookmark for library item "${req.params.id}" without access`) - return res.sendStatus(403) - } + if (!(await Database.libraryItemModel.checkExistsById(req.params.id))) return res.sendStatus(404) const time = Number(req.params.time) if (isNaN(time)) { diff --git a/server/finders/BookFinder.js b/server/finders/BookFinder.js index 90fed951..6d31b2ab 100644 --- a/server/finders/BookFinder.js +++ b/server/finders/BookFinder.js @@ -227,7 +227,7 @@ class BookFinder { title = this.#removeAuthorFromTitle(title) const titleTransformers = [ - [/(: |[,;_]| by ).*/g, ''], // Remove subtitle + [/([,:;_]| by ).*/g, ''], // Remove subtitle [/(^| )\d+k(bps)?( |$)/, ' '], // Remove bitrate [/ (2nd|3rd|\d+th)\s+ed(\.|ition)?/g, ''], // Remove edition [/(^| |\.)(m4b|m4a|mp3)( |$)/g, ''], // Remove file-type @@ -646,11 +646,11 @@ class BookFinder { module.exports = new BookFinder() function hasSubtitle(title) { - return title.includes(': ') || title.includes(' - ') + return title.includes(':') || title.includes(' - ') } function stripSubtitle(title) { - if (title.includes(': ')) { - return title.split(': ')[0].trim() + if (title.includes(':')) { + return title.split(':')[0].trim() } else if (title.includes(' - ')) { return title.split(' - ')[0].trim() } diff --git a/server/models/User.js b/server/models/User.js index 936efde1..36b2eca9 100644 --- a/server/models/User.js +++ b/server/models/User.js @@ -782,14 +782,7 @@ 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/utils/parsers/parseNfoMetadata.js b/server/utils/parsers/parseNfoMetadata.js index 4276443d..6682a007 100644 --- a/server/utils/parsers/parseNfoMetadata.js +++ b/server/utils/parsers/parseNfoMetadata.js @@ -22,7 +22,7 @@ function parseNfoMetadata(nfoText) { switch (key) { case 'title': { - const titleMatch = value.match(/^(.*?): (.*)$/) + const titleMatch = value.match(/^(.*?):(.*)$/) if (titleMatch) { metadata.title = titleMatch[1].trim() metadata.subtitle = titleMatch[2].trim() diff --git a/server/utils/queries/libraryItemsBookFilters.js b/server/utils/queries/libraryItemsBookFilters.js index 7ae1dc86..494a9564 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(publishedYear AS INTEGER)'), { + mediaWhere = Sequelize.where(Sequelize.literal('CAST(`book`.`publishedYear` AS INTEGER)'), { [Sequelize.Op.between]: [startYear, endYear] }) } diff --git a/test/server/controllers/MeController.test.js b/test/server/controllers/MeController.test.js deleted file mode 100644 index 3cc5496d..00000000 --- a/test/server/controllers/MeController.test.js +++ /dev/null @@ -1,636 +0,0 @@ -const { expect } = require('chai') -const { Sequelize } = require('sequelize') -const sinon = require('sinon') - -const Database = require('../../../server/Database') -const ApiRouter = require('../../../server/routers/ApiRouter') -const MeController = require('../../../server/controllers/MeController') -const Auth = require('../../../server/Auth') -const Logger = require('../../../server/Logger') -const SocketAuthority = require('../../../server/SocketAuthority') - -describe('MeController - IDOR Security Tests', () => { - /** @type {ApiRouter} */ - let apiRouter - - beforeEach(async () => { - global.ServerSettings = {} - Database.sequelize = new Sequelize({ dialect: 'sqlite', storage: ':memory:', logging: false }) - Database.sequelize.uppercaseFirst = (str) => (str ? `${str[0].toUpperCase()}${str.substr(1)}` : '') - await Database.buildModels() - - // Create mock server object with required dependencies - const mockServer = { - auth: new Auth(), - playbackSessionManager: { sessions: [] }, - abMergeManager: {}, - backupManager: {}, - podcastManager: {}, - audioMetadataManager: {}, - cronManager: {}, - emailManager: {}, - apiCacheManager: { middleware: (req, res, next) => next() } - } - - apiRouter = new ApiRouter(mockServer) - - sinon.stub(Logger, 'info') - sinon.stub(Logger, 'error') - sinon.stub(SocketAuthority, 'clientEmitter') - }) - - afterEach(async () => { - sinon.restore() - - // Clear all tables - await Database.sequelize.sync({ force: true }) - }) - - describe('removeMediaProgress - IDOR Protection', () => { - let user1, user2 - let mediaProgress1, mediaProgress2 - - beforeEach(async () => { - // Create two users - user1 = await Database.userModel.create({ - username: 'user1', - pash: 'hashed_password_1', - type: 'user', - isActive: true - }) - - user2 = await Database.userModel.create({ - username: 'user2', - pash: 'hashed_password_2', - type: 'user', - isActive: true - }) - - // Create library and book - const library = await Database.libraryModel.create({ name: 'Test Library', mediaType: 'book' }) - const libraryFolder = await Database.libraryFolderModel.create({ path: '/test', libraryId: library.id }) - const book = await Database.bookModel.create({ title: 'Test Book', audioFiles: [], tags: [], narrators: [], genres: [], chapters: [] }) - const libraryItem = await Database.libraryItemModel.create({ - libraryFiles: [], - mediaId: book.id, - mediaType: 'book', - libraryId: library.id, - libraryFolderId: libraryFolder.id - }) - - // Create media progress for each user - mediaProgress1 = await Database.mediaProgressModel.create({ - userId: user1.id, - mediaItemId: book.id, - mediaItemType: 'book', - duration: 1000, - currentTime: 500, - isFinished: false - }) - - mediaProgress2 = await Database.mediaProgressModel.create({ - userId: user2.id, - mediaItemId: book.id, - mediaItemType: 'book', - duration: 1000, - currentTime: 300, - isFinished: false - }) - - // Load media progresses into users - user1.mediaProgresses = await user1.getMediaProgresses() - user2.mediaProgresses = await user2.getMediaProgresses() - }) - - it('should allow user to delete their own media progress', async () => { - const fakeReq = { - user: user1, - params: { id: mediaProgress1.id } - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy() - } - - await MeController.removeMediaProgress(fakeReq, fakeRes) - - expect(fakeRes.sendStatus.calledWith(200)).to.be.true - - // Verify media progress was deleted - const deletedProgress = await Database.mediaProgressModel.findByPk(mediaProgress1.id) - expect(deletedProgress).to.be.null - }) - - it('should prevent user from deleting another users media progress (IDOR)', async () => { - const fakeReq = { - user: user1, - params: { id: mediaProgress2.id } // Trying to delete user2's progress - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy() - } - - await MeController.removeMediaProgress(fakeReq, fakeRes) - - expect(fakeRes.sendStatus.calledWith(404)).to.be.true - - // Verify media progress was NOT deleted - const existingProgress = await Database.mediaProgressModel.findByPk(mediaProgress2.id) - expect(existingProgress).to.not.be.null - expect(existingProgress.userId).to.equal(user2.id) - }) - - it('should return 404 for non-existent media progress', async () => { - const fakeReq = { - user: user1, - params: { id: 'non-existent-id' } - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy() - } - - await MeController.removeMediaProgress(fakeReq, fakeRes) - - expect(fakeRes.sendStatus.calledWith(404)).to.be.true - }) - }) - - describe('Bookmark Operations - Authorization Checks', () => { - let user1, user2 - let library1, library2 - let libraryItem1, libraryItem2 - - beforeEach(async () => { - // Create two users with different library access - user1 = await Database.userModel.create({ - username: 'user1', - pash: 'hashed_password_1', - type: 'user', - isActive: true, - librariesAccessible: null // Access to all libraries - }) - - user2 = await Database.userModel.create({ - username: 'user2', - pash: 'hashed_password_2', - type: 'user', - isActive: true, - librariesAccessible: [] // Will be set to specific library - }) - - // Create two libraries - library1 = await Database.libraryModel.create({ name: 'Library 1', mediaType: 'book' }) - library2 = await Database.libraryModel.create({ name: 'Library 2', mediaType: 'book' }) - - // User2 only has access to library1 - user2.librariesAccessible = [library1.id] - await user2.save() - - const libraryFolder1 = await Database.libraryFolderModel.create({ path: '/test1', libraryId: library1.id }) - const libraryFolder2 = await Database.libraryFolderModel.create({ path: '/test2', libraryId: library2.id }) - - const book1 = await Database.bookModel.create({ title: 'Book 1', audioFiles: [], tags: [], narrators: [], genres: [], chapters: [] }) - const book2 = await Database.bookModel.create({ title: 'Book 2', audioFiles: [], tags: [], narrators: [], genres: [], chapters: [] }) - - libraryItem1 = await Database.libraryItemModel.create({ - libraryFiles: [], - mediaId: book1.id, - mediaType: 'book', - libraryId: library1.id, - libraryFolderId: libraryFolder1.id - }) - - libraryItem2 = await Database.libraryItemModel.create({ - libraryFiles: [], - mediaId: book2.id, - mediaType: 'book', - libraryId: library2.id, - libraryFolderId: libraryFolder2.id - }) - - // Initialize bookmarks - user1.bookmarks = [] - user2.bookmarks = [] - }) - - describe('createBookmark', () => { - it('should allow user to create bookmark for accessible library item', async () => { - const expandedItem = await Database.libraryItemModel.getExpandedById(libraryItem1.id) - - const bookmark = { libraryItemId: libraryItem1.id, time: 100, title: 'Test Bookmark', createdAt: Date.now() } - - const fakeReq = { - user: { - ...user2.toJSON(), - id: user2.id, - username: user2.username, - checkCanAccessLibraryItem: () => true, - createBookmark: sinon.stub().resolves(bookmark), - toOldJSONForBrowser: () => ({ id: user2.id, username: user2.username }) - }, - params: { id: libraryItem1.id }, - body: { time: 100, title: 'Test Bookmark' } - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy(), - json: sinon.spy() - } - - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(expandedItem) - - await MeController.createBookmark(fakeReq, fakeRes) - - expect(fakeRes.json.calledOnce).to.be.true - expect(fakeRes.json.calledWith(bookmark)).to.be.true - - Database.libraryItemModel.getExpandedById.restore() - }) - - it('should prevent user from creating bookmark for inaccessible library item (IDOR)', async () => { - const expandedItem = await Database.libraryItemModel.getExpandedById(libraryItem2.id) - - const fakeReq = { - user: user2, // user2 doesn't have access to library2 - params: { id: libraryItem2.id }, - body: { time: 100, title: 'Test Bookmark' } - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy(), - json: sinon.spy() - } - - // Mock getExpandedById - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(expandedItem) - - await MeController.createBookmark(fakeReq, fakeRes) - - expect(fakeRes.sendStatus.calledWith(403)).to.be.true - expect(fakeRes.json.called).to.be.false - - Database.libraryItemModel.getExpandedById.restore() - }) - - it('should return 404 for non-existent library item', async () => { - const fakeReq = { - user: user1, - params: { id: 'non-existent-id' }, - body: { time: 100, title: 'Test Bookmark' } - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy(), - json: sinon.spy() - } - - // Mock getExpandedById to return null - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(null) - - await MeController.createBookmark(fakeReq, fakeRes) - - expect(fakeRes.sendStatus.calledWith(404)).to.be.true - - Database.libraryItemModel.getExpandedById.restore() - }) - - it('should validate bookmark time parameter', async () => { - const expandedItem = await Database.libraryItemModel.getExpandedById(libraryItem1.id) - - const fakeReq = { - user: { - ...user1.toJSON(), - id: user1.id, - username: user1.username, - checkCanAccessLibraryItem: () => true - }, - params: { id: libraryItem1.id }, - body: { time: null, title: 'Test Bookmark' } // null time is invalid - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy(), - json: sinon.spy() - } - - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(expandedItem) - - await MeController.createBookmark(fakeReq, fakeRes) - - expect(fakeRes.status.calledWith(400)).to.be.true - expect(fakeRes.send.calledWith('Invalid time')).to.be.true - - Database.libraryItemModel.getExpandedById.restore() - }) - }) - - describe('updateBookmark', () => { - beforeEach(async () => { - // Add existing bookmark to user1 - user1.bookmarks = [{ libraryItemId: libraryItem1.id, time: 100, title: 'Original Title' }] - await user1.save() - }) - - it('should allow user to update bookmark for accessible library item', async () => { - const expandedItem = await Database.libraryItemModel.getExpandedById(libraryItem1.id) - - const bookmark = { libraryItemId: libraryItem1.id, time: 100, title: 'Updated Title' } - - const fakeReq = { - user: { - ...user1.toJSON(), - id: user1.id, - username: user1.username, - checkCanAccessLibraryItem: () => true, - updateBookmark: sinon.stub().resolves(bookmark), - toOldJSONForBrowser: () => ({ id: user1.id, username: user1.username }) - }, - params: { id: libraryItem1.id }, - body: { time: 100, title: 'Updated Title' } - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy(), - json: sinon.spy() - } - - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(expandedItem) - - await MeController.updateBookmark(fakeReq, fakeRes) - - expect(fakeRes.json.calledOnce).to.be.true - expect(fakeRes.json.calledWith(bookmark)).to.be.true - - Database.libraryItemModel.getExpandedById.restore() - }) - - it('should prevent user from updating bookmark for inaccessible library item (IDOR)', async () => { - const expandedItem = await Database.libraryItemModel.getExpandedById(libraryItem2.id) - - const fakeReq = { - user: user2, // user2 doesn't have access to library2 - params: { id: libraryItem2.id }, - body: { time: 100, title: 'Updated Title' } - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy(), - json: sinon.spy() - } - - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(expandedItem) - - await MeController.updateBookmark(fakeReq, fakeRes) - - expect(fakeRes.sendStatus.calledWith(403)).to.be.true - - Database.libraryItemModel.getExpandedById.restore() - }) - }) - - describe('removeBookmark', () => { - beforeEach(async () => { - // Add existing bookmark to user1 - user1.bookmarks = [{ libraryItemId: libraryItem1.id, time: 100, title: 'Test Bookmark' }] - await user1.save() - }) - - it('should allow user to remove bookmark for accessible library item', async () => { - const expandedItem = await Database.libraryItemModel.getExpandedById(libraryItem1.id) - - const fakeReq = { - user: { - ...user1.toJSON(), - id: user1.id, - username: user1.username, - checkCanAccessLibraryItem: () => true, - findBookmark: sinon.stub().returns({ libraryItemId: libraryItem1.id, time: 100, title: 'Test Bookmark' }), - removeBookmark: sinon.stub().resolves(true), - toOldJSONForBrowser: () => ({ id: user1.id, username: user1.username }) - }, - params: { id: libraryItem1.id, time: '100' } - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy() - } - - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(expandedItem) - - await MeController.removeBookmark(fakeReq, fakeRes) - - expect(fakeRes.sendStatus.calledWith(200)).to.be.true - - Database.libraryItemModel.getExpandedById.restore() - }) - - it('should prevent user from removing bookmark for inaccessible library item (IDOR)', async () => { - const expandedItem = await Database.libraryItemModel.getExpandedById(libraryItem2.id) - - const fakeReq = { - user: user2, // user2 doesn't have access to library2 - params: { id: libraryItem2.id, time: '100' } - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy() - } - - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(expandedItem) - - await MeController.removeBookmark(fakeReq, fakeRes) - - expect(fakeRes.sendStatus.calledWith(403)).to.be.true - - Database.libraryItemModel.getExpandedById.restore() - }) - - it('should validate time parameter is a number', async () => { - const expandedItem = await Database.libraryItemModel.getExpandedById(libraryItem1.id) - - const fakeReq = { - user: { - ...user1.toJSON(), - id: user1.id, - username: user1.username, - checkCanAccessLibraryItem: () => true - }, - params: { id: libraryItem1.id, time: 'not-a-number' } - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy() - } - - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(expandedItem) - - await MeController.removeBookmark(fakeReq, fakeRes) - - expect(fakeRes.status.calledWith(400)).to.be.true - expect(fakeRes.send.calledWith('Invalid time')).to.be.true - - Database.libraryItemModel.getExpandedById.restore() - }) - }) - }) - - describe('getItemListeningSessions - Authorization Check', () => { - let user1, user2 - let library1, library2 - let libraryItem1, libraryItem2 - - beforeEach(async () => { - // Create two users with different library access - user1 = await Database.userModel.create({ - username: 'user1', - pash: 'hashed_password_1', - type: 'user', - isActive: true, - librariesAccessible: null // Access to all libraries - }) - - user2 = await Database.userModel.create({ - username: 'user2', - pash: 'hashed_password_2', - type: 'user', - isActive: true, - librariesAccessible: [] // Will be set to specific library - }) - - // Create two libraries - library1 = await Database.libraryModel.create({ name: 'Library 1', mediaType: 'book' }) - library2 = await Database.libraryModel.create({ name: 'Library 2', mediaType: 'book' }) - - // User2 only has access to library1 - user2.librariesAccessible = [library1.id] - await user2.save() - - const libraryFolder1 = await Database.libraryFolderModel.create({ path: '/test1', libraryId: library1.id }) - const libraryFolder2 = await Database.libraryFolderModel.create({ path: '/test2', libraryId: library2.id }) - - const book1 = await Database.bookModel.create({ title: 'Book 1', audioFiles: [], tags: [], narrators: [], genres: [], chapters: [] }) - const book2 = await Database.bookModel.create({ title: 'Book 2', audioFiles: [], tags: [], narrators: [], genres: [], chapters: [] }) - - libraryItem1 = await Database.libraryItemModel.create({ - libraryFiles: [], - mediaId: book1.id, - mediaType: 'book', - libraryId: library1.id, - libraryFolderId: libraryFolder1.id - }) - - libraryItem2 = await Database.libraryItemModel.create({ - libraryFiles: [], - mediaId: book2.id, - mediaType: 'book', - libraryId: library2.id, - libraryFolderId: libraryFolder2.id - }) - }) - - it('should allow user to view listening sessions for accessible library item', async () => { - const expandedItem = await Database.libraryItemModel.getExpandedById(libraryItem1.id) - - // Create mock context with getUserItemListeningSessionsHelper - const mockContext = { - getUserItemListeningSessionsHelper: sinon.stub().resolves([{ id: 'session1', timeListening: 300, startedAt: Date.now() }]) - } - - const fakeReq = { - user: { - ...user1.toJSON(), - id: user1.id, - username: user1.username, - checkCanAccessLibraryItem: () => true - }, - params: { libraryItemId: libraryItem1.id }, - query: {} - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy(), - json: sinon.spy() - } - - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(expandedItem) - sinon.stub(Database.podcastEpisodeModel, 'findByPk').resolves(null) - - await MeController.getItemListeningSessions.bind(mockContext)(fakeReq, fakeRes) - - expect(fakeRes.json.calledOnce).to.be.true - expect(fakeRes.sendStatus.called).to.be.false - - // Verify the payload structure - const payload = fakeRes.json.firstCall.args[0] - expect(payload).to.have.property('total') - expect(payload).to.have.property('sessions') - - Database.libraryItemModel.getExpandedById.restore() - Database.podcastEpisodeModel.findByPk.restore() - }) - - it('should prevent user from viewing listening sessions for inaccessible library item (IDOR)', async () => { - const expandedItem = await Database.libraryItemModel.getExpandedById(libraryItem2.id) - - const fakeReq = { - user: user2, // user2 doesn't have access to library2 - params: { libraryItemId: libraryItem2.id }, - query: {} - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy(), - json: sinon.spy() - } - - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(expandedItem) - sinon.stub(Database.podcastEpisodeModel, 'findByPk').resolves(null) - - await MeController.getItemListeningSessions.bind(apiRouter)(fakeReq, fakeRes) - - expect(fakeRes.sendStatus.calledWith(403)).to.be.true - expect(fakeRes.json.called).to.be.false - - Database.libraryItemModel.getExpandedById.restore() - Database.podcastEpisodeModel.findByPk.restore() - }) - - it('should return 404 for non-existent library item', async () => { - const fakeReq = { - user: user1, - params: { libraryItemId: 'non-existent-id' }, - query: {} - } - const fakeRes = { - sendStatus: sinon.spy(), - status: sinon.stub().returnsThis(), - send: sinon.spy(), - json: sinon.spy() - } - - sinon.stub(Database.libraryItemModel, 'getExpandedById').resolves(null) - - await MeController.getItemListeningSessions.bind(apiRouter)(fakeReq, fakeRes) - - expect(fakeRes.sendStatus.calledWith(404)).to.be.true - - Database.libraryItemModel.getExpandedById.restore() - }) - }) -}) diff --git a/test/server/finders/BookFinder.test.js b/test/server/finders/BookFinder.test.js index cb697b81..6578ca82 100644 --- a/test/server/finders/BookFinder.test.js +++ b/test/server/finders/BookFinder.test.js @@ -35,10 +35,7 @@ describe('TitleCandidates', () => { ['adds candidate, removing author', `anna karenina by ${cleanAuthor}`, ['anna karenina']], ['does not add empty candidate after removing author', cleanAuthor, []], ['adds candidate, removing subtitle', 'anna karenina: subtitle', ['anna karenina']], - ['adds candidate, not stripping subtitle for bare colon in title', '10:04', ['10:04']], - ['adds candidate, not stripping subtitle for colon between words without space', 'making the mission:impossible movies', ['making the mission:impossible movies']], ['adds candidate + variant, removing "by ..."', 'anna karenina by arnold schwarzenegger', ['anna karenina', 'anna karenina by arnold schwarzenegger']], - ['adds candidate + variant, removing "by ..." when title has bare colon', '10:04 by ben lerner', ['10:04', '10:04 by ben lerner']], ['adds candidate + variant, removing bitrate', 'anna karenina 64kbps', ['anna karenina', 'anna karenina 64kbps']], ['adds candidate + variant, removing edition 1', 'anna karenina 2nd edition', ['anna karenina', 'anna karenina 2nd edition']], ['adds candidate + variant, removing edition 2', 'anna karenina 4th ed.', ['anna karenina', 'anna karenina 4th ed.']], diff --git a/test/server/utils/parsers/parseNfoMetadata.test.js b/test/server/utils/parsers/parseNfoMetadata.test.js index ba11ddff..9ff51fbe 100644 --- a/test/server/utils/parsers/parseNfoMetadata.test.js +++ b/test/server/utils/parsers/parseNfoMetadata.test.js @@ -21,20 +21,6 @@ describe('parseNfoMetadata', () => { expect(result.subtitle).to.equal('A Novel') }) - it('does not split title on bare colon without space', () => { - const nfoText = 'Title: 10:04' - const result = parseNfoMetadata(nfoText) - expect(result.title).to.equal('10:04') - expect(result.subtitle).to.be.undefined - }) - - it('does not split title on colon between words without space', () => { - const nfoText = 'Title: Making the Mission:Impossible Movies' - const result = parseNfoMetadata(nfoText) - expect(result.title).to.equal('Making the Mission:Impossible Movies') - expect(result.subtitle).to.be.undefined - }) - it('parses authors', () => { const nfoText = 'Author: F. Scott Fitzgerald' const result = parseNfoMetadata(nfoText)