Compare commits

...

31 Commits

Author SHA1 Message Date
advplyr
85d5531bc1 Update chapter editor remove redirect on save or delete all #4650 2025-09-07 17:50:59 -05:00
advplyr
4b840f9c97
Merge pull request #4627 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-09-05 17:24:15 -05:00
peter cerny
b9510a69fe
Translated using Weblate (Slovak)
Currently translated at 97.7% (1135 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2025-09-06 00:22:25 +02:00
Losicek
d737a66af2
Translated using Weblate (Czech)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-09-06 00:22:24 +02:00
Plazec
576d18d8d6
Translated using Weblate (Czech)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-09-06 00:22:23 +02:00
petr-prikryl
d238b02bd2
Translated using Weblate (Czech)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-09-06 00:22:23 +02:00
kuci-JK
c6cb13ed39
Translated using Weblate (Czech)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-09-06 00:22:22 +02:00
Jon Erling Hustadnes
44c5dce8aa
Translated using Weblate (Norwegian Bokmål)
Currently translated at 90.5% (1051 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2025-09-06 00:22:21 +02:00
Darius M
b726bee4e5
Translated using Weblate (Romanian)
Currently translated at 17.0% (198 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ro/
2025-09-06 00:22:20 +02:00
Hnatiucb
b07e449043
Translated using Weblate (Romanian)
Currently translated at 17.0% (198 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ro/
2025-09-06 00:22:19 +02:00
icutehunter
9273e61f1e
Translated using Weblate (Turkish)
Currently translated at 28.5% (332 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/tr/
2025-09-06 00:22:18 +02:00
ugyes
1b4a7acf13
Translated using Weblate (Hungarian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2025-09-06 00:22:18 +02:00
kuci-JK
68c1395bdf
Translated using Weblate (Czech)
Currently translated at 98.1% (1140 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-09-06 00:22:17 +02:00
Hnatiucb
a007a9ec98
Translated using Weblate (Romanian)
Currently translated at 3.7% (44 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ro/
2025-09-06 00:22:16 +02:00
tngch
8b33b5e383
Translated using Weblate (Japanese)
Currently translated at 14.2% (166 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2025-09-06 00:22:15 +02:00
Jan-Eric Myhrgren
c81b762d52
Translated using Weblate (Swedish)
Currently translated at 97.2% (1129 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-09-06 00:22:15 +02:00
Hnatiucb
c53a5c5a0b
Translated using Weblate (Romanian)
Currently translated at 3.3% (39 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ro/
2025-09-06 00:22:14 +02:00
thehijacker
83af75a582
Translated using Weblate (Slovenian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sl/
2025-09-06 00:22:13 +02:00
Jan-Eric Myhrgren
60389a3bf3
Translated using Weblate (Swedish)
Currently translated at 97.2% (1129 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-09-06 00:22:13 +02:00
biuklija
20cceb3a8f
Translated using Weblate (Croatian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2025-09-06 00:22:11 +02:00
lolly76
7562fb2c21
Translated using Weblate (French)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2025-09-06 00:22:11 +02:00
Matej Krajčovič
c7647aafd7
Translated using Weblate (Slovak)
Currently translated at 96.2% (1117 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2025-09-06 00:22:10 +02:00
FiendFEARing
4a73247e5c
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1161 of 1161 strings)

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

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-09-06 00:22:08 +02:00
Jan-Eric Myhrgren
5ff5245476
Translated using Weblate (Swedish)
Currently translated at 97.2% (1129 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-09-06 00:22:08 +02:00
advplyr
856cf180a5 Fix chapter editor overflow, set custom wrap breakpoint #4652 2025-09-05 17:21:55 -05:00
advplyr
6ea70608a1
Merge pull request #4636 from nichwall/multiselect_duplicate_entries
Fix: MultiSelect causes web client to become unresponsive if duplicate keys exist
2025-09-02 18:37:07 -04:00
advplyr
ba7160c305 Add index to removeItem on multiselect keydown 2025-09-02 17:31:48 -05:00
advplyr
7d048b7a50
Merge pull request #4635 from Vito0912/feat/OIDCfix
Fix Invalid callback URL - must be same-origin for NPM users
2025-09-02 18:18:52 -04:00
Nicholas Wallace
afab429c75 Fix: ensure all keys are unique in MultiSelect 2025-08-30 10:01:25 -07:00
Vito0912
50e2fe7fd2
Fix http/https error 2025-08-30 17:47:21 +02:00
16 changed files with 413 additions and 62 deletions

View File

@ -4,10 +4,11 @@
<div ref="wrapper" class="relative">
<form @submit.prevent="submitForm">
<div ref="inputWrapper" role="list" style="min-height: 36px" class="flex-wrap relative w-full shadow-xs flex items-center border border-gray-600 rounded-sm px-2 py-1" :class="wrapperClass" @click.stop.prevent="clickWrapper" @mouseup.stop.prevent @mousedown.prevent>
<div v-for="item in selected" :key="item" role="listitem" class="rounded-full px-2 py-1 mx-0.5 my-0.5 text-xs bg-bg flex flex-nowrap break-all items-center relative">
<!-- Use index in v-for and key in case the same key exists multiple times -->
<div v-for="(item, idx) in selected" :key="item + '-' + idx" role="listitem" class="rounded-full px-2 py-1 mx-0.5 my-0.5 text-xs bg-bg flex flex-nowrap break-all items-center relative">
<div v-if="!disabled" class="w-full h-full rounded-full absolute top-0 left-0 px-1 bg-bg/75 flex items-center justify-end opacity-0 hover:opacity-100" :class="{ 'opacity-100': inputFocused }">
<button v-if="showEdit" type="button" :aria-label="$strings.ButtonEdit" class="material-symbols text-white hover:text-warning cursor-pointer" style="font-size: 1.1rem" @click.stop="editItem(item)">edit</button>
<button type="button" :aria-label="$strings.ButtonRemove" class="material-symbols text-white hover:text-error focus:text-error cursor-pointer" style="font-size: 1.1rem" @click.stop="removeItem(item)" @keydown.enter.stop.prevent="removeItem(item)" @focus="setInputFocused(true)" @blur="setInputFocused(false)" tabindex="0">close</button>
<button type="button" :aria-label="$strings.ButtonRemove" class="material-symbols text-white hover:text-error focus:text-error cursor-pointer" style="font-size: 1.1rem" @click.stop="removeItem(item, idx)" @keydown.enter.stop.prevent="removeItem(item, idx)" @focus="setInputFocused(true)" @blur="setInputFocused(false)" tabindex="0">close</button>
</div>
{{ item }}
</div>
@ -259,8 +260,9 @@ export default {
}
this.focus()
},
removeItem(item) {
var remaining = this.selected.filter((i) => i !== item)
removeItem(item, idx) {
var remaining = this.selected.slice()
remaining.splice(idx, 1)
this.$emit('input', remaining)
this.$emit('removedItem', item)
this.$nextTick(() => {

View File

@ -12,24 +12,24 @@
<p class="text-base font-mono ml-4 hidden md:block">{{ $secondsToTimestamp(mediaDurationRounded) }}</p>
</div>
<div class="flex flex-wrap-reverse lg:flex-nowrap justify-center py-4 px-4">
<div class="flex flex-wrap-reverse min-[1120px]:flex-nowrap justify-center py-4 px-4">
<div class="w-full max-w-3xl py-4">
<div class="flex items-center">
<div class="w-12 hidden lg:block" />
<div class="w-12 hidden min-w-[1120px]:block" />
<p class="text-lg mb-4 font-semibold">{{ $strings.HeaderChapters }}</p>
<div class="grow" />
<ui-checkbox v-model="showSecondInputs" checkbox-bg="primary" small label-class="text-sm text-gray-200 pl-1" :label="$strings.LabelShowSeconds" class="mx-2" />
<div class="w-32 hidden lg:block" />
<div class="w-32 hidden min-[1120px]:block" />
</div>
<div class="flex items-center mb-3 py-1 -mx-1">
<div class="w-12 hidden lg:block" />
<div class="w-12 hidden min-[1120px]:block" />
<ui-btn v-if="chapters.length" color="bg-primary" small class="mx-1 whitespace-nowrap" @click.stop="removeAllChaptersClick">{{ $strings.ButtonRemoveAll }}</ui-btn>
<ui-btn v-if="newChapters.length > 1" :color="showShiftTimes ? 'bg-bg' : 'bg-primary'" class="mx-1 whitespace-nowrap" small @click="showShiftTimes = !showShiftTimes">{{ $strings.ButtonShiftTimes }}</ui-btn>
<ui-btn color="bg-primary" small :class="{ 'mx-1': newChapters.length > 1 }" @click="showFindChaptersModal = true">{{ $strings.ButtonLookup }}</ui-btn>
<div class="grow" />
<ui-btn v-if="hasChanges" small class="mx-1" @click.stop="resetChapters">{{ $strings.ButtonReset }}</ui-btn>
<ui-btn v-if="hasChanges" color="bg-success" class="mx-1" :disabled="!hasChanges" small @click="saveChapters">{{ $strings.ButtonSave }}</ui-btn>
<div class="w-32 hidden lg:block" />
<div class="w-32 hidden min-[1120px]:block" />
</div>
<div class="overflow-hidden">
@ -150,7 +150,7 @@
</div>
</div>
<div class="w-full max-w-xl py-4 px-2">
<div class="w-full max-w-3xl min-[1120px]:max-w-xl py-4 px-2">
<div class="flex items-center mb-4 py-1">
<p class="text-lg font-semibold">{{ $strings.HeaderAudioTracks }}</p>
<div class="grow" />
@ -160,13 +160,13 @@
</ui-tooltip>
</div>
<div class="flex text-xs uppercase text-gray-300 font-semibold mb-2">
<div class="grow">{{ $strings.LabelFilename }}</div>
<div class="grow min-[1120px]:max-w-64 xl:max-w-sm">{{ $strings.LabelFilename }}</div>
<div class="w-20">{{ $strings.LabelDuration }}</div>
<div class="w-20 hidden md:block text-center">{{ $strings.HeaderChapters }}</div>
</div>
<div v-for="track in audioTracks" :key="track.ino" class="flex items-center py-2" :class="currentTrackIndex === track.index && isPlayingChapter ? 'bg-success/10' : ''">
<div class="grow max-w-[calc(100%-80px)] pr-2">
<p class="text-xs truncate max-w-sm">{{ track.metadata.filename }}</p>
<div class="pr-2 grow min-[1120px]:max-w-64 xl:max-w-sm">
<p class="text-xs truncate">{{ track.metadata.filename }}</p>
</div>
<div class="w-20" style="min-width: 80px">
<p class="text-xs font-mono text-gray-200">{{ $secondsToTimestamp(Math.round(track.duration), false, true) }}</p>
@ -697,11 +697,7 @@ export default {
this.saving = false
if (data.updated) {
this.$toast.success(this.$strings.ToastChaptersUpdated)
if (this.previousRoute) {
this.$router.push(this.previousRoute)
} else {
this.$router.push(`/item/${this.libraryItem.id}`)
}
this.reloadLibraryItem()
} else {
this.$toast.info(this.$strings.MessageNoUpdatesWereNecessary)
}
@ -874,11 +870,7 @@ export default {
.then((data) => {
if (data.updated) {
this.$toast.success(this.$strings.ToastChaptersRemoved)
if (this.previousRoute) {
this.$router.push(this.previousRoute)
} else {
this.$router.push(`/item/${this.libraryItem.id}`)
}
this.reloadLibraryItem()
} else {
this.$toast.info(this.$strings.MessageNoUpdatesWereNecessary)
}
@ -983,6 +975,18 @@ export default {
}
this.libraryItem = libraryItem
}
},
reloadLibraryItem() {
this.$axios
.$get(`/api/items/${this.libraryItem.id}?expanded=1`)
.then((data) => {
this.libraryItem = data
this.initChapters()
})
.catch((error) => {
console.error('Failed to reload library item', error)
this.$toast.error(this.$strings.ToastFailedToLoadData)
})
}
},
mounted() {

View File

@ -11,7 +11,7 @@
"ButtonApplyChapters": "Aplikovat kapitoly",
"ButtonAuthors": "Autoři",
"ButtonBack": "Zpět",
"ButtonBatchEditPopulateFromExisting": "Vytvořit z existujících",
"ButtonBatchEditPopulateFromExisting": "Předvyplnit z existujících",
"ButtonBatchEditPopulateMapDetails": "Předvyplnit podrobnosti mapování",
"ButtonBrowseForFolder": "Vyhledat složku",
"ButtonCancel": "Zrušit",
@ -61,7 +61,7 @@
"ButtonPause": "Pozastavit",
"ButtonPlay": "Přehrát",
"ButtonPlayAll": "Přehrát vše",
"ButtonPlaying": "Hraje",
"ButtonPlaying": "Přehrává",
"ButtonPlaylists": "Seznamy skladeb",
"ButtonPrevious": "Předchozí",
"ButtonPreviousChapter": "Předchozí Kapitola",
@ -71,7 +71,7 @@
"ButtonQueueAddItem": "Přidat do fronty",
"ButtonQueueRemoveItem": "Odstranit z fronty",
"ButtonQuickEmbed": "Rychle Zapsat",
"ButtonQuickEmbedMetadata": "Rychle zapsat Metadata",
"ButtonQuickEmbedMetadata": "Rychle Vložit Metadata",
"ButtonQuickMatch": "Rychlé přiřazení",
"ButtonReScan": "Znovu prohledat",
"ButtonRead": "Číst",
@ -127,6 +127,7 @@
"HeaderAudiobookTools": "Nástroje pro správu souborů audioknih",
"HeaderAuthentication": "Autentizace",
"HeaderBackups": "Zálohy",
"HeaderBulkChapterModal": "Přidat více kapitol",
"HeaderChangePassword": "Změnit heslo",
"HeaderChapters": "Kapitoly",
"HeaderChooseAFolder": "Zvolte složku",
@ -308,6 +309,7 @@
"LabelDeleteFromFileSystemCheckbox": "Smazat ze souborového systému (zrušte zaškrtnutí pro odstranění pouze z databáze)",
"LabelDescription": "Popis",
"LabelDeselectAll": "Odznačit vše",
"LabelDetectedPattern": "Detekovaný vzor:",
"LabelDevice": "Zařízení",
"LabelDeviceInfo": "Informace o zařízení",
"LabelDeviceIsAvailableTo": "Zařízení je dostupné pro...",
@ -361,7 +363,7 @@
"LabelExpiresAt": "Expiruje v",
"LabelExpiresInSeconds": "Expiruje za (sekundy)",
"LabelExpiresNever": "Nikdy",
"LabelExplicit": "Explicitně",
"LabelExplicit": "Explicitní",
"LabelExplicitChecked": "Explicitní (zaškrtnuto)",
"LabelExplicitUnchecked": "Není explicitní (nezaškrtnuto)",
"LabelExportOPML": "Export OPML",
@ -376,6 +378,7 @@
"LabelFilterByUser": "Filtrovat podle uživatele",
"LabelFindEpisodes": "Najít epizody",
"LabelFinished": "Dokončeno",
"LabelFinishedDate": "Dokončeno {0}",
"LabelFolder": "Složka",
"LabelFolders": "Složky",
"LabelFontBold": "Tučně",
@ -390,7 +393,7 @@
"LabelGenres": "Žánry",
"LabelHardDeleteFile": "Trvale smazat soubor",
"LabelHasEbook": "Obsahuje elektronickou knihu",
"LabelHasSupplementaryEbook": "Obsahuje doplňkovou elektronickou knihu",
"LabelHasSupplementaryEbook": "Obsahuje doplňkovou e-knihu",
"LabelHideSubtitles": "Skrýt titulky",
"LabelHighestPriority": "Nejvyšší priorita",
"LabelHost": "Hostitel",
@ -433,7 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Žádné {0}",
"LabelLibraryItem": "Položka knihovny",
"LabelLibraryName": "Název knihovny",
"LabelLibrarySortByProgress": "Aktualizace pokroku",
"LabelLibrarySortByProgress": "Pokrok: naposledy aktualizováno",
"LabelLibrarySortByProgressFinished": "Pokrok: dokončeno",
"LabelLibrarySortByProgressStarted": "Pokrok: začato",
"LabelLimit": "Omezit",
"LabelLineSpacing": "Řádkování",
"LabelListenAgain": "Poslouchat znovu",
@ -446,7 +451,7 @@
"LabelMatchExistingUsersBy": "Přiřadit stávající uživatele podle",
"LabelMatchExistingUsersByDescription": "Slouží k propojení stávajících uživatelů. Po propojení budou uživatelé přiřazeni k jedinečnému ID od poskytovatele SSO",
"LabelMaxEpisodesToDownload": "Maximální # epizod pro stažení. Použijte 0 pro bez omezení.",
"LabelMaxEpisodesToDownloadPerCheck": "Maximální počet nových epizod ke stažení při jedné kontrole",
"LabelMaxEpisodesToDownloadPerCheck": "Maximální # nových epizod ke stažení při jedné kontrole",
"LabelMaxEpisodesToKeep": "Maximální počet epizod k zachování",
"LabelMaxEpisodesToKeepHelp": "Hodnotou 0 není nastaven žádný maximální limit. Po automatickém stažení nové epizody se odstraní nejstarší epizoda, pokud máte více než X epizod. Při každém novém stažení se odstraní pouze 1 epizoda.",
"LabelMediaPlayer": "Přehrávač médií",
@ -472,6 +477,7 @@
"LabelNewestAuthors": "Nejnovější autoři",
"LabelNewestEpisodes": "Nejnovější epizody",
"LabelNextBackupDate": "Datum příští zálohy",
"LabelNextChapters": "Další kapitola bude:",
"LabelNextScheduledRun": "Další naplánované spuštění",
"LabelNoApiKeys": "Žádné API klíče",
"LabelNoCustomMetadataProviders": "Žádní vlastní poskytovatelé metadat",
@ -489,6 +495,7 @@
"LabelNotificationsMaxQueueSize": "Maximální velikost fronty pro oznamovací události",
"LabelNotificationsMaxQueueSizeHelp": "Události jsou omezeny na 1 za sekundu. Události budou ignorovány, pokud je fronta v maximální velikosti. Tím se zabrání spamování oznámení.",
"LabelNumberOfBooks": "Počet knih",
"LabelNumberOfChapters": "Počet kapitol:",
"LabelNumberOfEpisodes": "Počet epizod",
"LabelOpenIDAdvancedPermsClaimDescription": "Název požadavku OpenID, který obsahuje rozšířená oprávnění pro akce uživatele v rámci aplikace, která se budou vztahovat na role, které nejsou administrátory (<b>pokud jsou nakonfigurovány</b>). Pokud požadavek v odpovědi chybí, přístup do systému ABS bude zamítnut. Pokud chybí jediná možnost, bude považována za <code>false</code>. Ujistěte se, že deklarace poskytovatele identity odpovídá očekávané struktuře:",
"LabelOpenIDClaims": "Následující možnosti ponechte prázdné, abyste zakázali pokročilé přiřazování skupin a oprávnění a automatické přiřazení skupiny \"User\".",
@ -631,6 +638,7 @@
"LabelStartTime": "Čas Spuštění",
"LabelStarted": "Spuštěno",
"LabelStartedAt": "Spuštěno v",
"LabelStartedDate": "Spuštěno {0}",
"LabelStatsAudioTracks": "Zvukové stopy",
"LabelStatsAuthors": "Autoři",
"LabelStatsBestDay": "Nejlepší den",
@ -660,6 +668,7 @@
"LabelTheme": "Téma",
"LabelThemeDark": "Tmavé",
"LabelThemeLight": "Světlé",
"LabelThemeSepia": "Hnědé",
"LabelTimeBase": "Časová základna",
"LabelTimeDurationXHours": "{0} hodin",
"LabelTimeDurationXMinutes": "{0} minut",
@ -744,6 +753,7 @@
"MessageBookshelfNoResultsForFilter": "Filtr \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Žádné výsledky pro dotaz",
"MessageBookshelfNoSeries": "Nemáte žádnou sérii",
"MessageBulkChapterPattern": "Kolik kapitol chcete přidat s tímto vzorem číslování?",
"MessageChapterEndIsAfter": "Konec kapitoly přesahuje konec audioknihy",
"MessageChapterErrorFirstNotZero": "První kapitola musí začínat na 0",
"MessageChapterErrorStartGteDuration": "Neplatný čas začátku, musí být kratší než doba trvání audioknihy",
@ -770,7 +780,7 @@
"MessageConfirmMarkItemNotFinished": "Opravdu chcete označit \"{0}\" jako nedokončené?",
"MessageConfirmMarkSeriesFinished": "Opravdu chcete označit všechny knihy z této série jako dokončené?",
"MessageConfirmMarkSeriesNotFinished": "Opravdu chcete označit všechny knihy z této série jako nedokončené?",
"MessageConfirmNotificationTestTrigger": "Spustit toto oznámení s testovacími daty?",
"MessageConfirmNotificationTestTrigger": "Vyvolat tuto notifikaci s testovacími daty?",
"MessageConfirmPurgeCache": "Vyčistit mezipaměť odstraní celý adresář na adrese <code>/metadata/cache</code>. <br /><br />Určitě chcete odstranit adresář mezipaměti?",
"MessageConfirmPurgeItemsCache": "Vyčištění mezipaměti položek odstraní celý adresář <code>/metadata/cache/items</code>.<br />Jste si jistí?",
"MessageConfirmQuickEmbed": "Varování! Rychlé vložení nezálohuje vaše zvukové soubory. Ujistěte se, že máte zálohu zvukových souborů. <br><br>Chcete pokračovat?",
@ -844,7 +854,7 @@
"MessageNoItems": "Žádné položky",
"MessageNoItemsFound": "Nebyly nalezeny žádné položky",
"MessageNoListeningSessions": "Žádné poslechové relace",
"MessageNoLogs": "Žádné logy",
"MessageNoLogs": "Žádné záznamy událostí",
"MessageNoMediaProgress": "Žádný průběh médií",
"MessageNoNotifications": "Žádná oznámení",
"MessageNoPodcastFeed": "Neplatný podcast: Žádný kanál",
@ -874,7 +884,7 @@
"MessageRemoveEpisodes": "Odstranit {0} epizodu",
"MessageRemoveFromPlayerQueue": "Odstranit z fronty přehrávače",
"MessageRemoveUserWarning": "Opravdu chcete trvale smazat uživatele \"{0}\"?",
"MessageReportBugsAndContribute": "Hlásit chyby, žádat o funkce a přispívat",
"MessageReportBugsAndContribute": "Nahlašte chyby, vyžádejte si funkce a přispěte na",
"MessageResetChaptersConfirm": "Opravdu chcete resetovat kapitoly a vrátit zpět provedené změny?",
"MessageRestoreBackupConfirm": "Opravdu chcete obnovit zálohu vytvořenou dne",
"MessageRestoreBackupWarning": "Obnovení zálohy přepíše celou databázi umístěnou v /config a obálku obrázků v /metadata/items & /metadata/authors.<br /><br />Backups nezmění žádné soubory ve složkách knihovny. Pokud jste povolili nastavení serveru pro ukládání obrázků obalu a metadat do složek knihovny, nebudou zálohovány ani přepsány.<br /><br />Všichni klienti používající váš server budou automaticky obnoveni.",
@ -907,7 +917,7 @@
"MessageTaskNoFilesToScan": "Žádné soubory k prohledání",
"MessageTaskOpmlImport": "Import OPML",
"MessageTaskOpmlImportDescription": "Vytváření podcastů z {0} RSS feedů",
"MessageTaskOpmlImportFeed": "Importní zdroj OPML",
"MessageTaskOpmlImportFeed": "Import OPML feedu",
"MessageTaskOpmlImportFeedDescription": "Importování RSS feedu \"{0}\"",
"MessageTaskOpmlImportFeedFailed": "Nepodařilo se získat kanál podcastu",
"MessageTaskOpmlImportFeedPodcastDescription": "Vytváření podcastu \"{0}\"",
@ -947,6 +957,7 @@
"NotificationOnRSSFeedDisabledDescription": "Aktivováno když je automatické stahování pozastaveno z důvodu příliš mnoho neůspěšných pokusů",
"NotificationOnRSSFeedFailedDescription": "Aktivováno když selže RSS kanál pro stahování epizod",
"NotificationOnTestDescription": "Akce pro otestování upozorňovacího systému",
"PlaceholderBulkChapterInput": "Zadejte název kapitoly nebo použije číslování (např. 'Epizoda 1', 'Kapitola 10', '1.')",
"PlaceholderNewCollection": "Nový název kolekce",
"PlaceholderNewFolderPath": "Nová cesta ke složce",
"PlaceholderNewPlaylist": "Nový název seznamu přehrávání",
@ -1000,8 +1011,12 @@
"ToastBookmarkCreateFailed": "Vytvoření záložky se nezdařilo",
"ToastBookmarkCreateSuccess": "Přidána záložka",
"ToastBookmarkRemoveSuccess": "Záložka odstraněna",
"ToastBulkChapterInvalidCount": "Zadejte číslo mezi 1 a 150",
"ToastCachePurgeFailed": "Nepodařilo se vyčistit mezipaměť",
"ToastCachePurgeSuccess": "Vyrovnávací paměť úspěšně vyčištěna",
"ToastChapterLocked": "Kapitola je uzamčena.",
"ToastChapterStartTimeAdjusted": "Začátek kapitoly posunut o {0} sekund",
"ToastChaptersAllLocked": "Všechny kapitoly jsou uzamčeny. Pro posun kapitol některé odemkněte.",
"ToastChaptersHaveErrors": "Kapitoly obsahují chyby",
"ToastChaptersInvalidShiftAmountLast": "Nesprávná délka posunu. Čas začátku poslední kapitoly by přesáhl dobu trvání této audioknihy.",
"ToastChaptersInvalidShiftAmountStart": "Nesprávná délka posunu. První kapitola by měla nulovou nebo zápornou délku a byla by přepsána druhou kapitolou. Zvětšete čas začátku druhé kapitoly.",
@ -1020,7 +1035,7 @@
"ToastDeviceTestEmailFailed": "Odeslání testovacího emailu selhalo",
"ToastDeviceTestEmailSuccess": "Testovací email byl odeslán",
"ToastEmailSettingsUpdateSuccess": "Nastavení emailu aktualizována",
"ToastEncodeCancelFailed": "Chyba zrušení kódování",
"ToastEncodeCancelFailed": "Zrušení encodování selhalo",
"ToastEncodeCancelSucces": "Kódování zrušeno",
"ToastEpisodeDownloadQueueClearFailed": "Vyčištění fronty selhalo",
"ToastEpisodeDownloadQueueClearSuccess": "Fronta stahování epizod je prázdná",
@ -1085,6 +1100,7 @@
"ToastPlaylistUpdateSuccess": "Seznam přehrávání aktualizován",
"ToastPodcastCreateFailed": "Vytvoření podcastu se nezdařilo",
"ToastPodcastCreateSuccess": "Podcast byl úspěšně vytvořen",
"ToastPodcastEpisodeUpdated": "Epizoda aktualizována",
"ToastPodcastGetFeedFailed": "Chyba při získání podcastového feedu",
"ToastPodcastNoEpisodesInFeed": "Žádné epizody nenalezeny v RSS feedu",
"ToastPodcastNoRssFeed": "Podcast nemá RSS feed",
@ -1117,7 +1133,7 @@
"ToastSessionDeleteFailed": "Nepodařilo se smazat relaci",
"ToastSessionDeleteSuccess": "Relace smazána",
"ToastSleepTimerDone": "Uspání knížky ... zZzzZz",
"ToastSlugMustChange": "Slug (URL) obsahuje chybné znaky",
"ToastSlugMustChange": "Slug obsahuje chybné znaky",
"ToastSlugRequired": "Slug (URL) je vyžadována",
"ToastSocketConnected": "Socket připojen",
"ToastSocketDisconnected": "Socket odpojen",
@ -1135,5 +1151,13 @@
"ToastUserPasswordChangeSuccess": "Heslo bylo změněno úspěšně",
"ToastUserPasswordMismatch": "Hesla se neschodují",
"ToastUserPasswordMustChange": "Nové heslo se musí lišit od předchozího",
"ToastUserRootRequireName": "Musíte zadat uživatelské jméno root"
"ToastUserRootRequireName": "Musíte zadat uživatelské jméno root",
"TooltipAddChapters": "Přidat kapitolu/y",
"TooltipAddOneSecond": "Přidat 1 sekundu",
"TooltipAdjustChapterStart": "Kliknutím upravte začátek",
"TooltipLockAllChapters": "Uzamknout všechny kapitoly",
"TooltipLockChapter": "Uzamknout kapitolu (Shift+klik pro rozsah)",
"TooltipSubtractOneSecond": "Odečíst 1 sekundu",
"TooltipUnlockAllChapters": "Odemknout všechny kapitoly",
"TooltipUnlockChapter": "Odemknout kapitolu (Shift+klik pro rozsah)"
}

View File

@ -76,7 +76,7 @@
"ButtonReScan": "Nouvelle analyse",
"ButtonRead": "Lire",
"ButtonReadLess": "Lire moins",
"ButtonReadMore": "Lire la suite",
"ButtonReadMore": "Lire plus",
"ButtonRefresh": "Rafraîchir",
"ButtonRemove": "Retirer",
"ButtonRemoveAll": "Supprimer tout",
@ -378,6 +378,7 @@
"LabelFilterByUser": "Filtrer par utilisateur",
"LabelFindEpisodes": "Trouver des épisodes",
"LabelFinished": "Terminé le",
"LabelFinishedDate": "Terminé {0}",
"LabelFolder": "Dossier",
"LabelFolders": "Dossiers",
"LabelFontBold": "Gras",
@ -435,7 +436,9 @@
"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 : Commencé",
"LabelLimit": "Limite",
"LabelLineSpacing": "Espacement des lignes",
"LabelListenAgain": "Écouter à nouveau",
@ -635,6 +638,7 @@
"LabelStartTime": "Heure de démarrage",
"LabelStarted": "Démarré",
"LabelStartedAt": "Démarré à",
"LabelStartedDate": "Commencé {0}",
"LabelStatsAudioTracks": "Pistes audio",
"LabelStatsAuthors": "Auteurs",
"LabelStatsBestDay": "Meilleur jour",
@ -871,7 +875,7 @@
"MessagePlaylistCreateFromCollection": "Créer une liste de lecture depuis la collection",
"MessagePleaseWait": "Merci de patienter…",
"MessagePodcastHasNoRSSFeedForMatching": "Le Podcast na pas dURL de flux RSS à utiliser pour la correspondance",
"MessagePodcastSearchField": "Saisissez le terme de recherche ou l'URL du flux RSS",
"MessagePodcastSearchField": "Saisir un terme de recherche ou l'URL d'un flux RSS",
"MessageQuickEmbedInProgress": "Intégration rapide en cours",
"MessageQuickEmbedQueue": "En file d'attente pour une intégration rapide ({0} dans la file d'attente)",
"MessageQuickMatchAllEpisodes": "Associer rapidement tous les épisodes",
@ -958,7 +962,7 @@
"PlaceholderNewFolderPath": "Nouveau chemin de dossier",
"PlaceholderNewPlaylist": "Nouveau nom de liste de lecture",
"PlaceholderSearch": "Recherche…",
"PlaceholderSearchEpisode": "Rechercher un épisode",
"PlaceholderSearchEpisode": "Rechercher un épisode..",
"StatsAuthorsAdded": "auteurs ajoutés",
"StatsBooksAdded": "livres ajoutés",
"StatsBooksAdditional": "Les ajouts comprennent…",
@ -1010,6 +1014,8 @@
"ToastBulkChapterInvalidCount": "Veuillez entrer un nombre valide entre 1 et 150",
"ToastCachePurgeFailed": "Échec de la purge du cache",
"ToastCachePurgeSuccess": "Cache purgé avec succès",
"ToastChapterLocked": "Le chapitre est verrouillé.",
"ToastChapterStartTimeAdjusted": "Début du chapitre ajusté de {0} secondes",
"ToastChaptersAllLocked": "Tous les chapitres sont verrouillés. Déverrouillez certains chapitres pour décaler leurs temps.",
"ToastChaptersHaveErrors": "Les chapitres contiennent des erreurs",
"ToastChaptersInvalidShiftAmountLast": "Durée de décalage non valide. Lheure de début du dernier chapitre pourrait dépasser la durée de ce livre audio.",
@ -1094,6 +1100,7 @@
"ToastPlaylistUpdateSuccess": "Liste de lecture mise à jour",
"ToastPodcastCreateFailed": "Échec de la création du podcast",
"ToastPodcastCreateSuccess": "Podcast créé avec succès",
"ToastPodcastEpisodeUpdated": "Épisode mis à jour",
"ToastPodcastGetFeedFailed": "Échec de la récupération du flux du podcast",
"ToastPodcastNoEpisodesInFeed": "Aucun épisode trouvé dans le flux RSS",
"ToastPodcastNoRssFeed": "Le podcast na pas de flux RSS",
@ -1147,6 +1154,7 @@
"ToastUserRootRequireName": "Vous devez entrer un nom dutilisateur root",
"TooltipAddChapters": "Ajouter chapitre(s)",
"TooltipAddOneSecond": "Ajouter 1 seconde",
"TooltipAdjustChapterStart": "Cliquez pour régler l'heure de début",
"TooltipLockAllChapters": "Verrouiller tous les chapitres",
"TooltipLockChapter": "Verrouiller le chapitre (Maj+clic pour plage)",
"TooltipSubtractOneSecond": "Soustraire 1 seconde",

View File

@ -378,6 +378,7 @@
"LabelFilterByUser": "Filtriraj po korisniku",
"LabelFindEpisodes": "Pronađi nastavke",
"LabelFinished": "Dovršeno",
"LabelFinishedDate": "Dovršeno {0}",
"LabelFolder": "Mapa",
"LabelFolders": "Mape",
"LabelFontBold": "Podebljano",
@ -435,7 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Br {0}",
"LabelLibraryItem": "Stavka knjižnice",
"LabelLibraryName": "Ime knjižnice",
"LabelLibrarySortByProgress": "Napredak ažuriran",
"LabelLibrarySortByProgress": "Napredak: zadnje ažurirano",
"LabelLibrarySortByProgressFinished": "Napredak: dovršeno",
"LabelLibrarySortByProgressStarted": "Napredak: započeto",
"LabelLimit": "Ograničenje",
"LabelLineSpacing": "Razmak između redaka",
"LabelListenAgain": "Ponovno poslušaj",
@ -635,6 +638,7 @@
"LabelStartTime": "Vrijeme početka",
"LabelStarted": "Započeto",
"LabelStartedAt": "Započeto",
"LabelStartedDate": "Započeto {0}",
"LabelStatsAudioTracks": "Zvučni zapisi",
"LabelStatsAuthors": "Autori",
"LabelStatsBestDay": "Najbolji dan",
@ -1096,6 +1100,7 @@
"ToastPlaylistUpdateSuccess": "Popis za izvođenje ažuriran",
"ToastPodcastCreateFailed": "Podcast nije izrađen",
"ToastPodcastCreateSuccess": "Podcast uspješno izrađen",
"ToastPodcastEpisodeUpdated": "Nastavak ažuriran",
"ToastPodcastGetFeedFailed": "Dohvat izvora podcasta nije uspio",
"ToastPodcastNoEpisodesInFeed": "U RSS izvoru nisu pronađeni nastavci",
"ToastPodcastNoRssFeed": "Podcast nema RSS izvor",

View File

@ -378,6 +378,7 @@
"LabelFilterByUser": "Szűrés felhasználó szerint",
"LabelFindEpisodes": "Epizódok keresése",
"LabelFinished": "Befejezett",
"LabelFinishedDate": "Befejezve {0}",
"LabelFolder": "Mappa",
"LabelFolders": "Mappák",
"LabelFontBold": "Félkövér",
@ -435,7 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Nem {0}",
"LabelLibraryItem": "Könyvtári elem",
"LabelLibraryName": "Könyvtár neve",
"LabelLibrarySortByProgress": "Haladás frissítve",
"LabelLibrarySortByProgress": "Folyamat: Legutóbbi frissítés",
"LabelLibrarySortByProgressFinished": "Folyamat: Befejezve",
"LabelLibrarySortByProgressStarted": "Folyamat: Elindult",
"LabelLimit": "Korlát",
"LabelLineSpacing": "Sorköz",
"LabelListenAgain": "Újrahallgatás",
@ -635,6 +638,7 @@
"LabelStartTime": "Kezdési idő",
"LabelStarted": "Elkezdődött",
"LabelStartedAt": "Kezdés ideje",
"LabelStartedDate": "Elindítva {0}",
"LabelStatsAudioTracks": "Audiósáv",
"LabelStatsAuthors": "Szerző",
"LabelStatsBestDay": "Legjobb nap",

View File

@ -34,6 +34,7 @@
"ButtonFullPath": "絶対パス",
"ButtonHide": "非表示",
"ButtonHome": "ホーム",
"ButtonIssues": "問題",
"ButtonJumpBackward": "巻き戻し",
"ButtonJumpForward": "早送り",
"ButtonLatest": "最新",
@ -76,8 +77,11 @@
"ButtonScrollRight": "右にスクロール",
"ButtonSearch": "検索",
"ButtonSeries": "シリーズ",
"ButtonSubmit": "送信",
"ButtonYes": "はい",
"HeaderAccount": "アカウント",
"HeaderAdvanced": "上級者向け",
"HeaderAudioTracks": "オーディオトラック",
"HeaderChapters": "チャプター",
"HeaderCollection": "コレクション",
"HeaderCollectionItems": "コレクションの項目",
@ -87,19 +91,68 @@
"HeaderEreaderSettings": "電子書籍リーダーの設定",
"HeaderLatestEpisodes": "最新のエピソード",
"HeaderLibraries": "ライブラリー",
"HeaderOpenRSSFeed": "RSS Feedを開く",
"HeaderPlayerSettings": "プレーヤーの設定",
"HeaderPlaylist": "プレイリスト",
"HeaderPlaylistItems": "プレイリストアイテム",
"HeaderRSSFeedGeneral": "RSS 詳細",
"HeaderSettings": "設定",
"HeaderSettingsGeneral": "一般",
"HeaderSettingsScanner": "スキャナー",
"HeaderSleepTimer": "スリープタイマー",
"HeaderStatsMinutesListeningChart": "過去7日間の視聴時間(分)",
"LabelAddToPlaylist": "プレイリストの追加",
"LabelAuthor": "著者",
"LabelAuthorFirstLast": "著者(名 氏)",
"LabelAuthorLastFirst": "著者(氏 名)",
"LabelAuthors": "著者",
"LabelAutoDownloadEpisodes": "エピソードの自動ダウンロード",
"LabelBooks": "ほん",
"LabelChapters": "チャプター",
"LabelClosePlayer": "プレイヤーを閉じる",
"LabelComplete": "完了",
"LabelContinueListening": "続きから聞く",
"LabelDescription": "説明",
"LabelDownload": "ダウンロード",
"LabelDuration": "長さ",
"LabelEbook": "Eブック",
"LabelEbooks": "Eブック",
"LabelEnable": "有効",
"LabelEndOfChapter": "チャプターの最後",
"LabelEpisode": "エピソード",
"LabelFeedURL": "Feed URL",
"LabelFile": "ファイル",
"LabelFilename": "ファイル名",
"LabelFinished": "完了",
"LabelFolder": "フォルダ",
"LabelFontBoldness": "フォントの太さ",
"LabelFontScale": "フォントサイズ",
"LabelGenre": "ジャンル",
"LabelGenres": "ジャンル",
"LabelHost": "ホスト",
"LabelInProgress": "進行中",
"LabelLanguage": "言語",
"LabelLanguages": "言語",
"LabelLayout": "レイアウト",
"LabelLayoutSinglePage": "単ページ",
"LabelLineSpacing": "行間",
"LabelListenAgain": "再度視聴",
"LabelMediaType": "メディアの種類",
"LabelMoreInfo": "追加情報",
"LabelName": "名",
"LabelNarrator": "ナレーター",
"LabelNarrators": "ナレーター",
"LabelNew": "新しい",
"LabelNewPassword": "新しいのパスワード",
"LabelNewestAuthors": "最新の著者",
"LabelNewestEpisodes": "最新エピソード",
"LabelPassword": "パスワード",
"LabelPath": "パス",
"LabelPlaylists": "プレイリスト",
"LabelPodcast": "ポッドキャスト",
"LabelPodcasts": "ポッドキャスト",
"LabelPreventIndexing": "フィードがiTunesおよびGoogleのポッドキャストディレクトリにインデックス登録されるのを防ぎます",
"LabelPublishYear": "公開年",
"LabelSettingsFindCovers": "表紙を探す",
"LabelSettingsFindCoversHelp": "もしオーディオブックに表紙が埋め込まれていない、もしくは表紙画像がフォルダー内に見つからなければ、スキャナーは表紙を探そうとします。<br>注記: これによってスキャン時間が長くなります",
"LabelSettingsParseSubtitles": "サブタイトルを抽出する",

View File

@ -127,6 +127,7 @@
"HeaderAudiobookTools": "Lydbok Filbehandlingsverktøy",
"HeaderAuthentication": "Autentisering",
"HeaderBackups": "Sikkerhetskopier",
"HeaderBulkChapterModal": "Legg til flere kapitler",
"HeaderChangePassword": "Bytt passord",
"HeaderChapters": "Kapittel",
"HeaderChooseAFolder": "Velg en mappe",
@ -433,13 +434,13 @@
"LabelLibraryFilterSublistEmpty": "Ingen {0}",
"LabelLibraryItem": "Bibliotek enhet",
"LabelLibraryName": "Bibliotek navn",
"LabelLibrarySortByProgress": "Fremgang oppdatert",
"LabelLibrarySortByProgress": "Fremgang: Sist oppdatert",
"LabelLimit": "Begrensning",
"LabelLineSpacing": "Linjemellomrom",
"LabelListenAgain": "Lytt igjen",
"LabelLogLevelDebug": "Debug",
"LabelLogLevelInfo": "Info",
"LabelLogLevelWarn": "Warn",
"LabelLogLevelWarn": "Varsel",
"LabelLookForNewEpisodesAfterDate": "Se etter nye episoder etter denne datoen",
"LabelLowestPriority": "Laveste prioritet",
"LabelMatchExistingUsersBy": "Knytt sammen eksisterende brukere basert på",
@ -490,6 +491,7 @@
"LabelNumberOfEpisodes": "# episoder",
"LabelOpenIDAdvancedPermsClaimDescription": "Navnet på OpenID claim'et som inneholder avanserte tilganger for brukerhandlinger i applikasjonen som vil brukes for ikke-administratorroller (<b>hvis konfigurert</b>). Hvis claim'et mangler fra responsen, nektes tilgang til ABS. Hvis en enkelt opsjon mangler, blir behandlet som <code>false</code>. Påse at identitetstilbyderens claim stemmer overens med den forventede strukturen:",
"LabelOpenIDClaims": "La følge valg være tomme for å slå av avanserte gruppe og tillatelser. Gruppen \"Bruker\" vil da også automatisk legges til.",
"LabelOpenIDGroupClaimDescription": "Navn på OpenID-forespørsel som inneholder en lite over brukerens grupper. Vanligvis kalt <code>grupper</code>. <b>Om konfigurert</b>, 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}",
@ -759,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": "(Purge cache) Dette vil sletter hele mappen <code>/metadata/cache</code>. <br /><br />Er du sikker på at du du vil slette cache-mappen?",
"MessageConfirmPurgeCache": "Tømming av mellomlagring vil slette hele mappen <code>/metadata/cache</code>. <br /><br />Er du sikker på at du du vil slette mappen?",
"MessageConfirmPurgeItemsCache": "(Purge items cache) Dette vil sletter hele mappen <code>/metadata/cache/items</code>.<br />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. <br><br> 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?",

View File

@ -1 +1,200 @@
{}
{
"ButtonAdd": "Adaugă",
"ButtonAddApiKey": "Adaugă cheia API",
"ButtonAddChapters": "Adaugă Capitole",
"ButtonAddDevice": "Adaugă Dispozitiv",
"ButtonAddLibrary": "Adaugă Librărie",
"ButtonAddUser": "Adaugă Utilizator",
"ButtonAuthors": "Autori",
"ButtonBack": "Înapoi",
"ButtonCancel": "Anulează",
"ButtonClearFilter": "Șterge filtrul",
"ButtonClose": "Închide",
"ButtonCloseFeed": "Închide sursa",
"ButtonCloseSession": "Închide Sesiunea Curentă",
"ButtonCollections": "Colecții",
"ButtonCreate": "Creează",
"ButtonDelete": "Șterge",
"ButtonHide": "Ascunde",
"ButtonHome": "Acasă",
"ButtonIssues": "Erori",
"ButtonLatest": "Noutăți",
"ButtonLibrary": "Bibliotecă",
"ButtonOk": "OK",
"ButtonOpenFeed": "Vezi noutățile",
"ButtonPause": "Pauză",
"ButtonPlay": "Redă",
"ButtonPlaylists": "Liste",
"ButtonRead": "Citește",
"ButtonReadLess": "Mai puțin",
"ButtonReadMore": "Afișează mai mult",
"ButtonRemove": "Elimină",
"ButtonSave": "Salvează",
"ButtonSearch": "Caută",
"ButtonSeries": "Serii",
"ButtonSubmit": "Trimite",
"ButtonYes": "Da",
"HeaderAccount": "Cont",
"HeaderAdvanced": "Avansat",
"HeaderAudioTracks": "Înregistrări audio",
"HeaderChapters": "Capitole",
"HeaderCollection": "Colecție",
"HeaderCollectionItems": "Conținutul colecției",
"HeaderDetails": "Detalii",
"HeaderEbookFiles": "Ebook-uri",
"HeaderEpisodes": "Episoade",
"HeaderEreaderSettings": "Setări eReader",
"HeaderLatestEpisodes": "Episoade recente",
"HeaderLibraries": "Biblioteci",
"HeaderOpenRSSFeed": "Deschide flux RSS",
"HeaderPlaylist": "Listă de redare",
"HeaderPlaylistItems": "Conținut listă",
"HeaderRSSFeedGeneral": "Date RSS",
"HeaderRSSFeedIsOpen": "RSS activ",
"HeaderSettings": "Setări",
"HeaderSleepTimer": "Timer de somn",
"HeaderStatsMinutesListeningChart": "Minute ascultate (ultimele 7 zile)",
"HeaderStatsRecentSessions": "Sesiuni recente",
"HeaderTableOfContents": "Cuprins",
"HeaderYourStats": "Progresul tău",
"LabelAddToPlaylist": "Adaugă în listă",
"LabelAddedAt": "Adăugat la",
"LabelAddedDate": "Adăugat {0}",
"LabelAll": "Toate",
"LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Prenume Nume)",
"LabelAuthorLastFirst": "Autor (Nume, Prenume)",
"LabelAuthors": "Autori",
"LabelAutoDownloadEpisodes": "Descarcă automat episoadele",
"LabelBooks": "Cărți",
"LabelChapters": "Capitole",
"LabelClosePlayer": "Închide playerul",
"LabelCollapseSeries": "Restrânge seriile",
"LabelComplete": "Finalizat",
"LabelContinueListening": "Ascultă în continuare",
"LabelContinueReading": "Continuă lectura",
"LabelContinueSeries": "Continuă seria",
"LabelDescription": "Descriere",
"LabelDiscover": "Descoperă",
"LabelDownload": "Descarcă",
"LabelDuration": "Durată",
"LabelEbook": "Carte electronică",
"LabelEbooks": "Cărți electronice",
"LabelEnable": "Activează",
"LabelEnd": "Sfârșit",
"LabelEndOfChapter": "Sfârșitul capitolului",
"LabelEpisode": "Episod",
"LabelExplicit": "Explicit",
"LabelFeedURL": "URL flux",
"LabelFile": "Fișier",
"LabelFileBirthtime": "Data creării fișierului",
"LabelFileModified": "Fișier modificat",
"LabelFilename": "Nume fișier",
"LabelFinished": "Finalizat",
"LabelFolder": "Dosar",
"LabelFontBoldness": "Grosimea fontului",
"LabelFontScale": "Mărimea fontului",
"LabelGenre": "Gen",
"LabelGenres": "Genuri",
"LabelHasEbook": "Are carte electronică",
"LabelHasSupplementaryEbook": "Are carte electronică suplimentară",
"LabelHost": "Gazdă",
"LabelInProgress": "În desfășurare",
"LabelIncomplete": "Incomplet",
"LabelLanguage": "Limbă",
"LabelLayout": "Aspect",
"LabelLayoutSinglePage": "Pagină unică",
"LabelLineSpacing": "Spațiere între rânduri",
"LabelListenAgain": "Ascultă din nou",
"LabelMediaType": "Tip media",
"LabelMissing": "Lipsă",
"LabelMore": "Mai multe",
"LabelMoreInfo": "Mai multe informații",
"LabelName": "Nume",
"LabelNarrator": "Narator",
"LabelNarrators": "Naratori",
"LabelNewestAuthors": "Autori noi",
"LabelNewestEpisodes": "Episoade noi",
"LabelNotFinished": "Nefinalizat",
"LabelNotStarted": "Neînceput",
"LabelNumberOfEpisodes": "# de Episoade",
"LabelPassword": "Parolă",
"LabelPath": "Cale",
"LabelPodcast": "Podcast",
"LabelPodcasts": "Podcasturi",
"LabelPreventIndexing": "Împiedică indexarea fluxului în directoarele iTunes și Google Podcasts",
"LabelProgress": "Progres",
"LabelPubDate": "Data publicării",
"LabelPublishYear": "Anul publicării",
"LabelPublishedDate": "Publicat la {0}",
"LabelRSSFeedCustomOwnerEmail": "Email personalizat al proprietarului",
"LabelRSSFeedCustomOwnerName": "Nume personalizat al proprietarului",
"LabelRSSFeedOpen": "Flux RSS deschis",
"LabelRSSFeedPreventIndexing": "Previne indexarea",
"LabelRSSFeedSlug": "Identificator flux RSS",
"LabelRandomly": "Aleatoriu",
"LabelRead": "Citește",
"LabelReadAgain": "Citește din nou",
"LabelRecentSeries": "Serii recente",
"LabelRecentlyAdded": "Adăugate recent",
"LabelSeason": "Sezon",
"LabelSeries": "Serii",
"LabelSetEbookAsPrimary": "Setează ca principală",
"LabelSetEbookAsSupplementary": "Setează ca suplimentară",
"LabelShowAll": "Afișează tot",
"LabelSize": "Dimensiune",
"LabelSleepTimer": "Timer de somn",
"LabelStart": "Pornește",
"LabelStatsBestDay": "Ziua cea mai bună",
"LabelStatsDailyAverage": "Medie zilnică",
"LabelStatsDays": "Zile",
"LabelStatsDaysListened": "Zile ascultate",
"LabelStatsInARow": "la rând",
"LabelStatsItemsFinished": "Finalizate",
"LabelStatsMinutes": "minute",
"LabelStatsMinutesListening": "Minute ascultate",
"LabelStatsWeekListening": "Ascultare săptămânală",
"LabelTag": "Etichetă",
"LabelTags": "Etichete",
"LabelTheme": "Temă",
"LabelThemeDark": "Întunecat",
"LabelThemeLight": "Deschis",
"LabelTimeRemaining": "{0} rămase",
"LabelTitle": "Titlu",
"LabelTracks": "Fișiere audio",
"LabelType": "Tip",
"LabelUnknown": "Necunoscut",
"LabelUser": "Utilizator",
"LabelUsername": "Nume utilizator",
"LabelYearReviewHide": "Ascunde retrospectiva anului",
"LabelYearReviewShow": "Vezi retrospectiva anului",
"LabelYourBookmarks": "Semnele tale de carte",
"LabelYourProgress": "Progresul tău",
"MessageDownloadingEpisode": "Se descarcă episodul",
"MessageEpisodesQueuedForDownload": "{0} episod(e) în așteptare pentru descărcare",
"MessageFeedURLWillBe": "Adresa fluxului va fi {0}",
"MessageFetching": "Se preiau date…",
"MessageLoading": "Se încarcă…",
"MessageMarkAsFinished": "Marchează ca finalizat",
"MessageNoBookmarks": "Fără semne de carte",
"MessageNoChapters": "Fără capitole",
"MessageNoCollections": "Fără colecții",
"MessageNoItems": "Niciun element",
"MessageNoItemsFound": "Nu s-au găsit elemente",
"MessageNoListeningSessions": "Nicio sesiune de ascultare",
"MessageNoPodcastsFound": "Nu s-au găsit podcasturi",
"MessageNoUpdatesWereNecessary": "Nu au fost necesare actualizări",
"MessageNoUserPlaylists": "Nu ai nicio listă de redare",
"MessagePodcastSearchField": "Introdu termenul de căutare sau URL-ul unui flux RSS",
"MessageReportBugsAndContribute": "Raportează erori, cere funcții noi și contribuie pe",
"NoteRSSFeedPodcastAppsHttps": "Atenționare: Majoritatea aplicațiilor de podcast cer ca URL-ul fluxului RSS să folosească HTTPS",
"NoteRSSFeedPodcastAppsPubDate": "Atenționare: unul sau mai multe episoade nu au data publicării (Pub Date). Unele aplicații de podcast o cer.",
"ToastBookmarkCreateFailed": "Nu s-a putut crea semnul de carte",
"ToastItemMarkedAsFinishedFailed": "Nu s-a putut marca drept finalizat",
"ToastItemMarkedAsNotFinishedFailed": "Nu s-a putut marca drept nefinalizat",
"ToastPlaylistCreateFailed": "Nu s-a putut crea lista de redare",
"ToastPodcastCreateFailed": "Nu s-a putut crea podcastul",
"ToastPodcastCreateSuccess": "Podcast creat cu succes",
"ToastRSSFeedCloseFailed": "Nu s-a putut închide fluxul RSS",
"ToastRSSFeedCloseSuccess": "Flux RSS închis"
}

View File

@ -1,10 +1,11 @@
{
"ButtonAdd": "Pridať",
"ButtonAddApiKey": "Pridať kľúč API",
"ButtonAddChapters": "Pridať kapitoly",
"ButtonAddDevice": "Pridať zariadenie",
"ButtonAddLibrary": "Pridať knižnicu",
"ButtonAddPodcasts": "Pridať podcasty",
"ButtonAddUser": "Pridať užívateľa",
"ButtonAddUser": "Pridať používateľa",
"ButtonAddYourFirstLibrary": "Pridajte vašu prvú knižnicu",
"ButtonApply": "Použiť",
"ButtonApplyChapters": "Použiť kapitoly",
@ -20,6 +21,7 @@
"ButtonChooseAFolder": "Vyberte priečinok",
"ButtonChooseFiles": "Vyberte súbory",
"ButtonClearFilter": "Zrušiť filter",
"ButtonClose": "Uzavrieť",
"ButtonCloseFeed": "Zatvoriť zdroj",
"ButtonCloseSession": "Ukončiť otvorené pripojenie",
"ButtonCollections": "Kolekcie",
@ -119,11 +121,13 @@
"HeaderAccount": "Účet",
"HeaderAddCustomMetadataProvider": "Pridať vastný zdroj metadát",
"HeaderAdvanced": "Pokročilé",
"HeaderApiKeys": "Kľúče API",
"HeaderAppriseNotificationSettings": "Nastavenie Apprise notifikácií",
"HeaderAudioTracks": "Zvukové stopy",
"HeaderAudiobookTools": "Nástroje na správu súborov audiokníh",
"HeaderAuthentication": "Overenie",
"HeaderBackups": "Zálohy",
"HeaderBulkChapterModal": "Pridať viaceré kapitoly",
"HeaderChangePassword": "Zmeniť heslo",
"HeaderChapters": "Kapitoly",
"HeaderChooseAFolder": "Vybrať priečinok",
@ -162,6 +166,7 @@
"HeaderMetadataOrderOfPrecedence": "Metadáta pravidiel poradia",
"HeaderMetadataToEmbed": "Metadáta na vloženie",
"HeaderNewAccount": "Nový účet",
"HeaderNewApiKey": "Nový kľúč API",
"HeaderNewLibrary": "Nová knižnica",
"HeaderNotificationCreate": "Vytvoriť notifikáciu",
"HeaderNotificationUpdate": "Aktualizovať notifikáciu",
@ -195,6 +200,7 @@
"HeaderSettingsExperimental": "Experimentálne funkcie",
"HeaderSettingsGeneral": "Hlavné",
"HeaderSettingsScanner": "Skener",
"HeaderSettingsSecurity": "Zabezpečenie",
"HeaderSettingsWebClient": "Webový klient",
"HeaderSleepTimer": "Časovač spánku",
"HeaderStatsLargestItems": "Najväčšie položky",
@ -206,6 +212,7 @@
"HeaderTableOfContents": "Obsah",
"HeaderTools": "Nástroje",
"HeaderUpdateAccount": "Aktualizovať účet",
"HeaderUpdateApiKey": "Aktualizovať kľúč API",
"HeaderUpdateAuthor": "Aktualizovať autora",
"HeaderUpdateDetails": "Aktualizovať detaily",
"HeaderUpdateLibrary": "Aktualizovať knižnicu",
@ -235,6 +242,10 @@
"LabelAllUsersExcludingGuests": "Všetci užívatelia okrem hostí",
"LabelAllUsersIncludingGuests": "Všetci užívatelia vrátane hostí",
"LabelAlreadyInYourLibrary": "Už v tvojej knižnici",
"LabelApiKeyCreated": "Kľúč API \"{0}\" bol úspešne vytvorený.",
"LabelApiKeyCreatedDescription": "Skopírujte si kľúč API teraz, neskôr ho už neuvidíte.",
"LabelApiKeyUser": "Vykonáva v mene používateľa",
"LabelApiKeyUserDescription": "Uvedená API bude mať rovnaké práva ako používateľ, v mene ktorého koná. Rovnako v záznamoch budú jednotlivé krky uvedené, ako keby ich vykonal samotný používateľ.",
"LabelApiToken": "API Token",
"LabelAppend": "Pridať",
"LabelAudioBitrate": "Bitrate audio stopy (napr. 128k)",
@ -284,6 +295,7 @@
"LabelContinueListening": "Pokračovať v počúvaní",
"LabelContinueReading": "Pokračovať v čítaní",
"LabelContinueSeries": "Pokračovať v sérii",
"LabelCorsAllowed": "CORS Origins povolené",
"LabelCover": "Prebal",
"LabelCoverImageURL": "URL obrázku prebalu",
"LabelCoverProvider": "Poskytovateľ prebalu",
@ -297,6 +309,7 @@
"LabelDeleteFromFileSystemCheckbox": "Zmazať zo systému (odškrtni len pre odstránenie z databázy)",
"LabelDescription": "Popis",
"LabelDeselectAll": "Odznačiť všetko",
"LabelDetectedPattern": "Identifikovaný vzor:",
"LabelDevice": "Zariadenie",
"LabelDeviceInfo": "Informácie o zariadení",
"LabelDeviceIsAvailableTo": "Zariadenie je k dispozícii...",
@ -346,6 +359,10 @@
"LabelExample": "Príklad",
"LabelExpandSeries": "Rozbaliť série",
"LabelExpandSubSeries": "Rozbaliť podsérie",
"LabelExpired": "Vypršal",
"LabelExpiresAt": "Vyprší",
"LabelExpiresInSeconds": "Vyprší za (sekúnd)",
"LabelExpiresNever": "Nikdy",
"LabelExplicit": "Explicitný obsah",
"LabelExplicitChecked": "Explicitné (zaškrtnuté)",
"LabelExplicitUnchecked": "Ne-explicitné (nezaškrtnuté)",
@ -361,6 +378,7 @@
"LabelFilterByUser": "Užívateľský filter",
"LabelFindEpisodes": "Nájsť epizódy",
"LabelFinished": "Ukončené",
"LabelFinishedDate": "Dokončené {0}",
"LabelFolder": "Priečinok",
"LabelFolders": "Priečinky",
"LabelFontBold": "Tučné",
@ -405,6 +423,7 @@
"LabelLanguages": "Jazyky",
"LabelLastBookAdded": "Posledná pridaná kniha",
"LabelLastBookUpdated": "Posledná aktualizovaná kniha",
"LabelLastProgressDate": "Posledný pokrok: {0}",
"LabelLastSeen": "Posledne videné",
"LabelLastTime": "Posledný čas",
"LabelLastUpdate": "Posledná aktualizácia",
@ -417,6 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Žiadne {0}",
"LabelLibraryItem": "Položka knižnice",
"LabelLibraryName": "Názov knižnice",
"LabelLibrarySortByProgress": "Pokrok: Aktualizované",
"LabelLibrarySortByProgressFinished": "Pokrok: Dokončené",
"LabelLibrarySortByProgressStarted": "Pokrok: Začiatok",
"LabelLimit": "Limit",
"LabelLineSpacing": "Riadkovanie",
"LabelListenAgain": "Počúvať znova",
@ -425,6 +447,7 @@
"LabelLogLevelWarn": "Varovanie",
"LabelLookForNewEpisodesAfterDate": "Hľadať nové epizódy od uvedeného dátumu",
"LabelLowestPriority": "Najnižšia priorita",
"LabelMatchConfidence": "Istota",
"LabelMatchExistingUsersBy": "Vyhľadaj vytvorených užívateľov podľa",
"LabelMatchExistingUsersByDescription": "Používané na pripájanie vytvorených užívateľov. Po pripojení budú užívatelia vyhľadaní na základe jedinečného id poskytnutého Vaším poskytovateľom SSO",
"LabelMaxEpisodesToDownload": "Stiahnuť maximálne # epizód. Pre neobmedzené sťahovanie zadajte 0.",
@ -454,7 +477,9 @@
"LabelNewestAuthors": "Najnovší autori",
"LabelNewestEpisodes": "Najnovšie epizódy",
"LabelNextBackupDate": "Ďalší dátum zálohovania",
"LabelNextChapters": "Nasledujúce kapitoly:",
"LabelNextScheduledRun": "Ďalší plánovaný beh",
"LabelNoApiKeys": "Žiadne API kľúče",
"LabelNoCustomMetadataProviders": "Žiadne vlastné zdroje metadát",
"LabelNoEpisodesSelected": "Neboli vybrané žiadne epizódy",
"LabelNotFinished": "Nedokončené",
@ -470,6 +495,7 @@
"LabelNotificationsMaxQueueSize": "Maximálna dĺžka fronty oznámení",
"LabelNotificationsMaxQueueSizeHelp": "Odosielanie udalostí je ohraničené na jedno oznámenie za sekundu. Novovzniknuté udalosti budú ignorované, ak bude fronta oznámení naplnená. Toto nastavenie zabraňuje nevyžiadanému zahlteniu oznámeniami.",
"LabelNumberOfBooks": "Počet kníh",
"LabelNumberOfChapters": "Počet kapitol:",
"LabelNumberOfEpisodes": "# z epizód",
"LabelOpenIDAdvancedPermsClaimDescription": "Názov OpenID predpokladá prítomnosť pokročilých povolení pre užívateľské akcie v rámci aplikácie, ktoré sú aplikovateľné na ne-administrátorské role (<b>ak sú nakonfigurované</b>). Ak potvrdenie takýchto pokročilých povolení nie je v odozve prítomné, prístup do ABS bude automaticky zamietnutý. Ak v odozve chýba len niektoré z očakávaných nastavení, tak bude jeho hodnota automaticky nastavená na <code>false</code>. Uistite sa prosím, že forma odozvy poskytovateľa identity má nasledovnú štruktúru:",
"LabelOpenIDClaims": "Ak ponecháte nasledujúce nastavenia prázdne, pokročilé nastavenia skupín a povolení nebudú aktivované a automaticky bude nastavená skupina 'Užívateľ'.",
@ -544,6 +570,7 @@
"LabelSelectAll": "Vybrať všetko",
"LabelSelectAllEpisodes": "Vybrať všetky epizódy",
"LabelSelectEpisodesShowing": "Vybrať {0} zobrazených epizód",
"LabelSelectUser": "Vyberte používateľa",
"LabelSelectUsers": "Vybrať užívateľov",
"LabelSendEbookToDevice": "Poslať e-knihu do...",
"LabelSequence": "Postupnosť",

View File

@ -378,6 +378,7 @@
"LabelFilterByUser": "Filtriraj po uporabniku",
"LabelFindEpisodes": "Poišči epizode",
"LabelFinished": "Zaključeno",
"LabelFinishedDate": "Končano {0}",
"LabelFolder": "Mapa",
"LabelFolders": "Mape",
"LabelFontBold": "Krepko",
@ -435,7 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Ne {0}",
"LabelLibraryItem": "Element knjižnice",
"LabelLibraryName": "Ime knjižnice",
"LabelLibrarySortByProgress": "Napredek posodobljen",
"LabelLibrarySortByProgress": "Napredek: Nazadnje posodobljen",
"LabelLibrarySortByProgressFinished": "Napredej: Končano",
"LabelLibrarySortByProgressStarted": "Napredek: Začeto",
"LabelLimit": "Omejitev",
"LabelLineSpacing": "Vrstični razmak",
"LabelListenAgain": "Poslušaj znova",
@ -635,6 +638,7 @@
"LabelStartTime": "Čas začetka",
"LabelStarted": "Začeto",
"LabelStartedAt": "Začeto ob",
"LabelStartedDate": "Začeto {0}",
"LabelStatsAudioTracks": "Zvočni posnetki",
"LabelStatsAuthors": "Avtorji",
"LabelStatsBestDay": "Najboljši dan",

View File

@ -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",
@ -301,7 +301,7 @@
"LabelCoverProvider": "Källa för omslag",
"LabelCreatedAt": "Skapad",
"LabelCronExpression": "Schemaläggning med hjälp av Cron (Cron Expression)",
"LabelCurrent": "Nuvarande omslag",
"LabelCurrent": "Nuvarande",
"LabelCurrently": "För närvarande:",
"LabelCustomCronExpression": "Anpassat Cron-uttryck:",
"LabelDatetime": "Datum och klockslag",
@ -462,7 +462,7 @@
"LabelMetadataProvider": "Källa för metadata",
"LabelMinute": "Minut",
"LabelMinutes": "Minuter",
"LabelMissing": "Saknas",
"LabelMissing": "Saknar",
"LabelMissingEbook": "Saknar e-bok",
"LabelMissingSupplementaryEbook": "Saknar kompletterande e-bok",
"LabelMobileRedirectURIs": "Tillåtna mobila omdirigerings-URI:er",
@ -472,7 +472,7 @@
"LabelName": "Namn",
"LabelNarrator": "Uppläsare",
"LabelNarrators": "Uppläsare",
"LabelNew": "Nytt omslag",
"LabelNew": "Nytt",
"LabelNewPassword": "Nytt lösenord",
"LabelNewestAuthors": "Senaste författarna",
"LabelNewestEpisodes": "Senaste avsnitten",
@ -826,7 +826,7 @@
"MessageMarkAllEpisodesNotFinished": "Markera alla avsnitt som ej avslutade",
"MessageMarkAsFinished": "Markera som avslutad",
"MessageMarkAsNotFinished": "Markera som ej avslutad",
"MessageMatchBooksDescription": "kommer att försöka matcha böcker i biblioteket med en bok från den valda källan och fylla i uppgifter som saknas och omslag som saknas. Inga befintliga uppgifter kommer att ersättas.",
"MessageMatchBooksDescription": "kommer att försöka matcha böcker i biblioteket med en bok från den valda källan och fylla i de uppgifter som saknas och addera omslag som saknas. Inga befintliga uppgifter kommer att ersättas.",
"MessageNoAudioTracks": "Inga ljudfiler har hittats",
"MessageNoAuthors": "Inga författare",
"MessageNoBackups": "Inga säkerhetskopior",
@ -921,7 +921,7 @@
"MessageTaskTargetDirectoryNotWritable": "Det är inte tillåtet att skriva i den angivna katalogen",
"MessageThinking": "Tänker...",
"MessageUploaderItemFailed": "Misslyckades med att ladda upp",
"MessageUploaderItemSuccess": "har blivit uppladdat!",
"MessageUploaderItemSuccess": "har blivit uppladdad!",
"MessageUploading": "Laddar upp...",
"MessageValidCronExpression": "Giltigt cron-uttryck",
"MessageWatcherIsDisabledGlobally": "Automatisk bevakning av förändringar är inaktiverad under rubriken 'Inställningar'",

View File

@ -97,7 +97,11 @@
"ButtonSearch": "Ara",
"ButtonSelectFolderPath": "Klasör Yolunu Seç",
"ButtonSeries": "Seriler",
"ButtonSetChaptersFromTracks": "Parçaların bölümlerini ayarla",
"ButtonShare": "Paylaş",
"ButtonShow": "Göster",
"ButtonStartM4BEncode": "M4B Kodlamasını Başlat",
"ButtonStartMetadataEmbed": "Meta Veri Yerleştirmeyi Başlat",
"ButtonStats": "İstatistikler",
"ButtonSubmit": "Gönder",
"ButtonTest": "Dene",
@ -122,6 +126,7 @@
"HeaderAudiobookTools": "Sesli Kitap Dosya Yönetim Araçları",
"HeaderAuthentication": "Kimlik Doğrulama",
"HeaderBackups": "Yedeklemeler",
"HeaderBulkChapterModal": "Birden Çok Bölüm Ekle",
"HeaderChangePassword": "Parolayı Değiştir",
"HeaderChapters": "Bölümler",
"HeaderChooseAFolder": "Klasör Seç",
@ -160,10 +165,13 @@
"HeaderMetadataOrderOfPrecedence": "Üstveri öncelik sırası",
"HeaderMetadataToEmbed": "Gömülecek üstveri",
"HeaderNewAccount": "Yeni Hesap",
"HeaderNewApiKey": "Yeni API Anahtarı",
"HeaderNewLibrary": "Yeni Kütüphane",
"HeaderNotificationCreate": "Bildirim Oluştur",
"HeaderNotificationUpdate": "Güncelleme Bildirimi",
"HeaderNotifications": "Bildirimler",
"HeaderOpenIDConnectAuthentication": "OpenID Connect Kimlik Doğrulaması",
"HeaderOpenListeningSessions": "Açık Dinleme Oturumları",
"HeaderOpenRSSFeed": "RSS Akışını Aç",
"HeaderOtherFiles": "Diğer Dosyalar",
"HeaderPasswordAuthentication": "Parola Doğrulaması",
@ -173,6 +181,7 @@
"HeaderPlaylist": "Oynatma listesi",
"HeaderPlaylistItems": "Oynatma Listesi Öğeleri",
"HeaderPodcastsToAdd": "Eklenecek Podcastler",
"HeaderPresets": "Ön ayarlar",
"HeaderPreviewCover": "Kapak Önizlemesi",
"HeaderRSSFeedGeneral": "RSS Detayları",
"HeaderRSSFeedIsOpen": "RSS Akışıık",
@ -242,6 +251,7 @@
"LabelEnd": "Son",
"LabelEndOfChapter": "Bölüm Sonu",
"LabelEpisode": "Bölüm",
"LabelExplicit": "Belirgin",
"LabelFeedURL": "Akış URLsi",
"LabelFile": "Dosya",
"LabelFileBirthtime": "Dosya Oluşum Zamanı",

View File

@ -436,9 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Ні {0}",
"LabelLibraryItem": "Елемент бібліотеки",
"LabelLibraryName": "Назва бібліотеки",
"LabelLibrarySortByProgress": "Прогрес оновлено",
"LabelLibrarySortByProgressFinished": "Дата завершення",
"LabelLibrarySortByProgressStarted": "Дата початку",
"LabelLibrarySortByProgress": "Прогрес: Останнє оновлення",
"LabelLibrarySortByProgressFinished": "Прогрес: Завершено",
"LabelLibrarySortByProgressStarted": "Прогрес: Розпочато",
"LabelLimit": "Обмеження",
"LabelLineSpacing": "Відстань між рядками",
"LabelListenAgain": "Слухати знову",

View File

@ -436,9 +436,9 @@
"LabelLibraryFilterSublistEmpty": "没有 {0}",
"LabelLibraryItem": "媒体库项目",
"LabelLibraryName": "媒体库名称",
"LabelLibrarySortByProgress": "进度更新时间",
"LabelLibrarySortByProgressFinished": "完成日期",
"LabelLibrarySortByProgressStarted": "开始日期",
"LabelLibrarySortByProgress": "收听进度: 上次收听时间",
"LabelLibrarySortByProgressFinished": "收听进度: 已完成的",
"LabelLibrarySortByProgressStarted": "收听进度: 已开始的",
"LabelLimit": "限制",
"LabelLineSpacing": "行间距",
"LabelListenAgain": "再次收听",

View File

@ -527,7 +527,16 @@ class OidcAuthStrategy {
// For absolute URLs, ensure they point to the same origin
const callbackUrlObj = new URL(callbackUrl)
const currentProtocol = req.secure || req.get('x-forwarded-proto') === 'https' ? 'https' : 'http'
// NPM appends both http and https in x-forwarded-proto sometimes, so we need to check for both
const xfp = (req.get('x-forwarded-proto') || '').toLowerCase()
const currentProtocol =
req.secure ||
xfp
.split(',')
.map((s) => s.trim())
.includes('https')
? 'https'
: 'http'
const currentHost = req.get('host')
// Check if protocol and host match exactly