mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-11-24 20:05:41 +01:00
Merge branch 'advplyr:master' into inode-bug-fix
This commit is contained in:
commit
925c8aff91
@ -353,6 +353,14 @@ export default {
|
||||
if (!this.userProgressLastUpdated) return '\u00A0'
|
||||
return this.$getString('LabelLastProgressDate', [this.$formatDatetime(this.userProgressLastUpdated, this.dateFormat, this.timeFormat)])
|
||||
}
|
||||
if (this.orderBy === 'progress.createdAt') {
|
||||
if (!this.userProgressStartedDate) return '\u00A0'
|
||||
return this.$getString('LabelStartedDate', [this.$formatDatetime(this.userProgressStartedDate, this.dateFormat, this.timeFormat)])
|
||||
}
|
||||
if (this.orderBy === 'progress.finishedAt') {
|
||||
if (!this.userProgressFinishedDate) return '\u00A0'
|
||||
return this.$getString('LabelFinishedDate', [this.$formatDatetime(this.userProgressFinishedDate, this.dateFormat, this.timeFormat)])
|
||||
}
|
||||
return null
|
||||
},
|
||||
episodeProgress() {
|
||||
@ -389,6 +397,14 @@ export default {
|
||||
if (!this.userProgress) return null
|
||||
return this.userProgress.lastUpdate
|
||||
},
|
||||
userProgressStartedDate() {
|
||||
if (!this.userProgress) return null
|
||||
return this.userProgress.startedAt
|
||||
},
|
||||
userProgressFinishedDate() {
|
||||
if (!this.userProgress) return null
|
||||
return this.userProgress.finishedAt
|
||||
},
|
||||
itemIsFinished() {
|
||||
if (this.booksInSeries) return this.seriesIsFinished
|
||||
return this.userProgress ? !!this.userProgress.isFinished : false
|
||||
|
||||
@ -134,6 +134,14 @@ export default {
|
||||
text: this.$strings.LabelLibrarySortByProgress,
|
||||
value: 'progress'
|
||||
},
|
||||
{
|
||||
text: this.$strings.LabelLibrarySortByProgressStarted,
|
||||
value: 'progress.createdAt'
|
||||
},
|
||||
{
|
||||
text: this.$strings.LabelLibrarySortByProgressFinished,
|
||||
value: 'progress.finishedAt'
|
||||
},
|
||||
{
|
||||
text: this.$strings.LabelRandomly,
|
||||
value: 'random'
|
||||
@ -200,4 +208,4 @@ export default {
|
||||
.librarySortMenu {
|
||||
max-height: calc(100vh - 125px);
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@ -77,8 +77,8 @@
|
||||
<ui-checkbox v-model="selectedMatchUsage.author" checkbox-bg="bg" @input="checkboxToggled" />
|
||||
<div class="grow ml-4">
|
||||
<ui-text-input-with-label v-model="selectedMatch.author" :disabled="!selectedMatchUsage.author" :label="$strings.LabelAuthor" />
|
||||
<p v-if="mediaMetadata.authorName" class="text-xs ml-1 text-white/60">
|
||||
{{ $strings.LabelCurrently }} <a title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('author', mediaMetadata.authorName)">{{ mediaMetadata.authorName }}</a>
|
||||
<p v-if="mediaMetadata.authorName || (isPodcast && mediaMetadata.author)" class="text-xs ml-1 text-white/60">
|
||||
{{ $strings.LabelCurrently }} <a title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('author', isPodcast ? mediaMetadata.author : mediaMetadata.authorName)">{{ isPodcast ? mediaMetadata.author : mediaMetadata.authorName }}</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@ -400,7 +400,9 @@ export default {
|
||||
this.$toast.warning(this.$strings.ToastTitleRequired)
|
||||
return
|
||||
}
|
||||
this.persistProvider()
|
||||
if (!this.isPodcast) {
|
||||
this.persistProvider()
|
||||
}
|
||||
this.runSearch()
|
||||
},
|
||||
async runSearch() {
|
||||
|
||||
@ -94,7 +94,6 @@ export default {
|
||||
}
|
||||
|
||||
this.processing = false
|
||||
this.$toast.success(`${this.episodes.length} episode${this.episodes.length > 1 ? 's' : ''} removed`)
|
||||
this.show = false
|
||||
this.$emit('clearSelected')
|
||||
}
|
||||
|
||||
@ -114,7 +114,7 @@ export default {
|
||||
.$patch(`/api/podcasts/${this.libraryItem.id}/episode/${this.episodeId}`, updatePayload)
|
||||
.then(() => {
|
||||
this.isProcessing = false
|
||||
this.$toast.success('Podcast episode updated')
|
||||
this.$toast.success(this.$strings.ToastPodcastEpisodeUpdated)
|
||||
this.$emit('selectTab', 'details')
|
||||
})
|
||||
.catch((error) => {
|
||||
|
||||
4
client/package-lock.json
generated
4
client/package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "audiobookshelf-client",
|
||||
"version": "2.28.0",
|
||||
"version": "2.29.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "audiobookshelf-client",
|
||||
"version": "2.28.0",
|
||||
"version": "2.29.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@nuxtjs/axios": "^5.13.6",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "audiobookshelf-client",
|
||||
"version": "2.28.0",
|
||||
"version": "2.29.0",
|
||||
"buildNumber": 1,
|
||||
"description": "Self-hosted audiobook and podcast client",
|
||||
"main": "index.js",
|
||||
|
||||
@ -53,51 +53,101 @@
|
||||
|
||||
<div class="flex text-xs uppercase text-gray-300 font-semibold mb-2">
|
||||
<div class="w-8 min-w-8 md:w-12 md:min-w-12"></div>
|
||||
<div class="w-24 min-w-24 md:w-32 md:min-w-32 px-2">{{ $strings.LabelStart }}</div>
|
||||
<div class="grow px-2">{{ $strings.LabelTitle }}</div>
|
||||
<div class="w-38 min-w-38 md:w-40 md:min-w-40 px-1 pl-8">{{ $strings.LabelStart }}</div>
|
||||
<div class="grow px-1 min-w-54">{{ $strings.LabelTitle }}</div>
|
||||
<div class="w-7 min-w-7 px-1 flex items-center justify-center">
|
||||
<ui-tooltip :text="allChaptersLocked ? $strings.TooltipUnlockAllChapters : $strings.TooltipLockAllChapters" direction="bottom">
|
||||
<button class="w-7 h-7 rounded-full flex items-center justify-center cursor-pointer transition-colors duration-150" :class="allChaptersLocked ? 'text-orange-400 hover:text-orange-300' : 'text-gray-300 hover:text-white'" @click="toggleAllChaptersLock">
|
||||
<span class="material-symbols text-xl">{{ allChaptersLocked ? 'lock' : 'lock_open' }}</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
</div>
|
||||
<div class="w-32"></div>
|
||||
</div>
|
||||
<template v-for="chapter in newChapters">
|
||||
<div :key="chapter.id" class="flex py-1">
|
||||
<div class="w-8 min-w-8 md:w-12 md:min-w-12">#{{ chapter.id + 1 }}</div>
|
||||
<div class="w-24 min-w-24 md:w-32 md:min-w-32 px-1">
|
||||
<ui-text-input v-if="showSecondInputs" v-model="chapter.start" type="number" class="text-xs" @change="checkChapters" />
|
||||
<ui-time-picker v-else class="text-xs" v-model="chapter.start" :show-three-digit-hour="mediaDuration >= 360000" @change="checkChapters" />
|
||||
</div>
|
||||
<div class="grow px-1">
|
||||
<ui-text-input v-model="chapter.title" @change="checkChapters" class="text-xs min-w-52" />
|
||||
</div>
|
||||
<div class="w-32 min-w-32 px-2 py-1">
|
||||
<div class="flex items-center">
|
||||
<ui-tooltip :text="$strings.MessageRemoveChapter" direction="bottom">
|
||||
<button v-if="newChapters.length > 1" class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-error transform hover:scale-110 duration-150" @click="removeChapter(chapter)">
|
||||
<span class="material-symbols text-base">remove</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
<div v-for="chapter in newChapters" :key="chapter.id" class="flex py-1">
|
||||
<div class="w-8 min-w-8 md:w-12 md:min-w-12">#{{ chapter.id + 1 }}</div>
|
||||
<div class="w-38 min-w-38 md:w-40 md:min-w-40 px-1">
|
||||
<div class="flex items-center gap-1">
|
||||
<ui-tooltip :text="$strings.TooltipSubtractOneSecond" direction="bottom">
|
||||
<button
|
||||
class="w-6 h-6 rounded-full flex items-center justify-center text-gray-300 hover:text-white transform hover:scale-110 duration-150 flex-shrink-0"
|
||||
:class="{ 'opacity-50 cursor-not-allowed': chapter.id === 0 && chapter.start - timeIncrementAmount < 0 }"
|
||||
@click="incrementChapterTime(chapter, -timeIncrementAmount)"
|
||||
:disabled="chapter.id === 0 && chapter.start - timeIncrementAmount < 0"
|
||||
>
|
||||
<span class="material-symbols text-sm">remove</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
|
||||
<ui-tooltip :text="$strings.MessageInsertChapterBelow" direction="bottom">
|
||||
<button class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-success transform hover:scale-110 duration-150" @click="addChapter(chapter)">
|
||||
<span class="material-symbols text-lg">add</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
|
||||
<ui-tooltip :text="selectedChapterId === chapter.id && isPlayingChapter ? $strings.MessagePauseChapter : $strings.MessagePlayChapter" direction="bottom">
|
||||
<button class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-white transform hover:scale-110 duration-150" @click="playChapter(chapter)">
|
||||
<widgets-loading-spinner v-if="selectedChapterId === chapter.id && isLoadingChapter" />
|
||||
<span v-else-if="selectedChapterId === chapter.id && isPlayingChapter" class="material-symbols text-base">pause</span>
|
||||
<span v-else class="material-symbols text-base">play_arrow</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
|
||||
<ui-tooltip v-if="chapter.error" :text="chapter.error" direction="left">
|
||||
<button class="w-7 h-7 rounded-full flex items-center justify-center text-error">
|
||||
<span class="material-symbols text-lg">error_outline</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
<div class="flex-1 min-w-0">
|
||||
<ui-text-input v-if="showSecondInputs" v-model="chapter.start" type="number" class="text-xs" @change="checkChapters" />
|
||||
<ui-time-picker v-else class="text-xs" v-model="chapter.start" :show-three-digit-hour="mediaDuration >= 360000" @change="checkChapters" />
|
||||
</div>
|
||||
|
||||
<ui-tooltip :text="$strings.TooltipAddOneSecond" direction="bottom">
|
||||
<button class="w-6 h-6 rounded-full flex items-center justify-center text-gray-300 hover:text-white transform hover:scale-110 duration-150 flex-shrink-0" :class="{ 'opacity-50 cursor-not-allowed': chapter.start + timeIncrementAmount >= mediaDuration }" @click="incrementChapterTime(chapter, timeIncrementAmount)" :disabled="chapter.start + timeIncrementAmount >= mediaDuration">
|
||||
<span class="material-symbols text-sm">add</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="grow px-1">
|
||||
<ui-text-input v-model="chapter.title" @change="checkChapters" class="text-xs min-w-52" />
|
||||
</div>
|
||||
<div class="w-7 min-w-7 px-1 py-1">
|
||||
<div class="flex items-center justify-center">
|
||||
<ui-tooltip :text="lockedChapters.has(chapter.id) ? $strings.TooltipUnlockChapter : $strings.TooltipLockChapter" direction="bottom">
|
||||
<button class="w-7 h-7 rounded-full flex items-center justify-center transform hover:scale-110 duration-150 flex-shrink-0" :class="lockedChapters.has(chapter.id) ? 'text-orange-400 hover:text-orange-300' : 'text-gray-300 hover:text-white'" @click="toggleChapterLock(chapter, $event)">
|
||||
<span class="material-symbols text-base">{{ lockedChapters.has(chapter.id) ? 'lock' : 'lock_open' }}</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-32 min-w-32 px-2 py-1">
|
||||
<div class="flex items-center">
|
||||
<ui-tooltip :text="$strings.MessageRemoveChapter" direction="bottom">
|
||||
<button v-if="newChapters.length > 1" class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-error transform hover:scale-110 duration-150" @click="removeChapter(chapter)">
|
||||
<span class="material-symbols text-base">delete</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
|
||||
<ui-tooltip :text="$strings.MessageInsertChapterBelow" direction="bottom">
|
||||
<button class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-success transform hover:scale-110 duration-150" @click="addChapter(chapter)">
|
||||
<span class="material-symbols text-lg">add_row_below</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
<ui-tooltip :text="selectedChapterId === chapter.id && isPlayingChapter ? $strings.MessagePauseChapter : $strings.MessagePlayChapter" direction="bottom">
|
||||
<button class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-white transform hover:scale-110 duration-150" @click="playChapter(chapter)">
|
||||
<widgets-loading-spinner v-if="selectedChapterId === chapter.id && isLoadingChapter" />
|
||||
<span v-else-if="selectedChapterId === chapter.id && isPlayingChapter" class="material-symbols text-base">pause</span>
|
||||
<span v-else class="material-symbols text-base">play_arrow</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
<ui-tooltip v-if="selectedChapterId === chapter.id && (isPlayingChapter || isLoadingChapter)" :text="$strings.TooltipAdjustChapterStart" direction="bottom">
|
||||
<div class="ml-2 text-xs text-gray-300 font-mono min-w-10 cursor-pointer hover:text-white transition-colors duration-150" @click="adjustChapterStartTime(chapter)">{{ elapsedTime }}s</div>
|
||||
</ui-tooltip>
|
||||
<ui-tooltip v-if="chapter.error" :text="chapter.error" direction="left">
|
||||
<button class="w-7 h-7 rounded-full flex items-center justify-center text-error">
|
||||
<span class="material-symbols text-lg">error_outline</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center mt-4 mb-2">
|
||||
<div class="w-8 min-w-8 md:w-12 md:min-w-12"></div>
|
||||
<div class="w-38 min-w-38 md:w-40 md:min-w-40 px-1"></div>
|
||||
<div class="flex items-center gap-2 grow px-1">
|
||||
<ui-text-input v-model="bulkChapterInput" :placeholder="$strings.PlaceholderBulkChapterInput" class="text-xs grow min-w-52" @keyup.enter="handleBulkChapterAdd" />
|
||||
</div>
|
||||
<div class="w-39 min-w-39 px-1 py-1">
|
||||
<ui-tooltip :text="$strings.TooltipAddChapters" direction="bottom" class="inline-block align-middle">
|
||||
<button class="w-5 h-5 rounded-full flex items-center justify-center text-gray-300 hover:text-success transform hover:scale-110 duration-150 flex-shrink-0" :aria-label="$strings.TooltipAddChapters" :class="{ 'opacity-50 cursor-not-allowed': !bulkChapterInput.trim() }" :disabled="!bulkChapterInput.trim()" @click="handleBulkChapterAdd">
|
||||
<span class="material-symbols text-lg">add</span>
|
||||
</button>
|
||||
</ui-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-full max-w-xl py-4 px-2">
|
||||
@ -114,19 +164,15 @@
|
||||
<div class="w-20">{{ $strings.LabelDuration }}</div>
|
||||
<div class="w-20 hidden md:block text-center">{{ $strings.HeaderChapters }}</div>
|
||||
</div>
|
||||
<template v-for="track in audioTracks">
|
||||
<div :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>
|
||||
<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>
|
||||
</div>
|
||||
<div class="w-20 hidden md:flex justify-center" style="min-width: 80px">
|
||||
<span v-if="(track.chapters || []).length" class="material-symbols text-success text-sm">check</span>
|
||||
</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>
|
||||
</template>
|
||||
<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>
|
||||
</div>
|
||||
<div class="w-20 hidden md:flex justify-center" style="min-width: 80px"><span v-if="(track.chapters || []).length" class="material-symbols text-success text-sm">check</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -134,6 +180,7 @@
|
||||
<ui-loading-indicator />
|
||||
</div>
|
||||
|
||||
<!-- audible chapter lookup modal -->
|
||||
<modals-modal v-model="showFindChaptersModal" name="edit-book" :width="500" :processing="findingChapters">
|
||||
<template #outer>
|
||||
<div class="absolute top-0 left-0 p-5 w-2/3 overflow-hidden pointer-events-none">
|
||||
@ -159,12 +206,16 @@
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="w-full p-4">
|
||||
<div class="flex justify-between mb-4">
|
||||
<div class="flex mb-4">
|
||||
<button class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-white flex-shrink-0" :aria-label="$strings.ButtonBack" @click="resetChapterLookupData">
|
||||
<span class="material-symbols text-lg">arrow_back</span>
|
||||
</button>
|
||||
<p>
|
||||
{{ $strings.LabelDurationFound }} <span class="font-semibold">{{ $secondsToTimestamp(chapterData.runtimeLengthSec) }}</span
|
||||
><br />
|
||||
{{ $strings.LabelDurationFound }} <span class="font-semibold">{{ $secondsToTimestamp(chapterData.runtimeLengthSec) }}</span>
|
||||
<br />
|
||||
<span class="font-semibold" :class="{ 'text-warning': chapters.length !== chapterData.chapters.length }">{{ chapterData.chapters.length }}</span> {{ $strings.LabelChaptersFound }}
|
||||
</p>
|
||||
<div class="grow" />
|
||||
<p>
|
||||
{{ $strings.LabelYourAudiobookDuration }}: <span class="font-semibold">{{ $secondsToTimestamp(mediaDurationRounded) }}</span
|
||||
><br />
|
||||
@ -198,17 +249,49 @@
|
||||
<p class="pl-2">{{ $strings.MessageChapterStartIsAfter }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center pt-2">
|
||||
<ui-btn small color="bg-primary" class="mr-1" @click="applyChapterNamesOnly">{{ $strings.ButtonMapChapterTitles }}</ui-btn>
|
||||
<ui-tooltip :text="$strings.MessageMapChapterTitles" direction="top" class="flex items-center">
|
||||
<span class="material-symbols text-xl text-gray-200">info</span>
|
||||
</ui-tooltip>
|
||||
<div class="grow" />
|
||||
<div class="flex items-center pt-2 justify-between">
|
||||
<div class="flex items-center gap-2">
|
||||
<ui-btn small color="bg-primary" @click="applyChapterNamesOnly">{{ $strings.ButtonMapChapterTitles }}</ui-btn>
|
||||
<ui-tooltip :text="$strings.MessageMapChapterTitles" direction="top" class="flex items-center">
|
||||
<span class="material-symbols text-xl text-gray-200">info</span>
|
||||
</ui-tooltip>
|
||||
</div>
|
||||
<ui-btn small color="bg-success" @click="applyChapterData">{{ $strings.ButtonApplyChapters }}</ui-btn>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</modals-modal>
|
||||
|
||||
<!-- create bulk chapters modal -->
|
||||
<modals-modal v-model="showBulkChapterModal" name="bulk-chapters" :width="400">
|
||||
<template #outer>
|
||||
<div class="absolute top-0 left-0 p-5 w-2/3 overflow-hidden pointer-events-none">
|
||||
<p class="text-3xl text-white truncate pointer-events-none">{{ $strings.HeaderBulkChapterModal }}</p>
|
||||
</div>
|
||||
</template>
|
||||
<div class="w-full h-full max-h-full text-sm rounded-lg bg-bg shadow-lg border border-black-300 relative p-6">
|
||||
<div class="flex flex-col space-y-8">
|
||||
<p class="text-base">{{ $strings.MessageBulkChapterPattern }}</p>
|
||||
|
||||
<div v-if="detectedPattern" class="text-sm text-gray-400 bg-gray-800 p-2 rounded">
|
||||
<strong>{{ $strings.LabelDetectedPattern }}</strong> "{{ detectedPattern.before }}{{ formatNumberWithPadding(detectedPattern.startingNumber, detectedPattern) }}{{ detectedPattern.after }}"
|
||||
<br />
|
||||
<strong>{{ $strings.LabelNextChapters }}</strong>
|
||||
"{{ detectedPattern.before }}{{ formatNumberWithPadding(detectedPattern.startingNumber + 1, detectedPattern) }}{{ detectedPattern.after }}", "{{ detectedPattern.before }}{{ formatNumberWithPadding(detectedPattern.startingNumber + 2, detectedPattern) }}{{ detectedPattern.after }}", etc.
|
||||
</div>
|
||||
<div class="flex px-1 items-center">
|
||||
<label class="text-base font-medium">{{ $strings.LabelNumberOfChapters }}</label>
|
||||
<div class="grow" />
|
||||
<ui-text-input v-model="bulkChapterCount" type="number" min="1" max="50" class="w-14" :style="{ height: `2em` }" @keyup.enter="addBulkChapters" />
|
||||
</div>
|
||||
<div class="flex px-1 items-center">
|
||||
<ui-btn small @click="showBulkChapterModal = false">{{ $strings.ButtonCancel }}</ui-btn>
|
||||
<div class="grow" />
|
||||
<ui-btn small color="bg-success" @click="addBulkChapters">{{ $strings.ButtonAddChapters }}</ui-btn>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</modals-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -265,7 +348,17 @@ export default {
|
||||
removeBranding: false,
|
||||
showSecondInputs: false,
|
||||
audibleRegions: ['US', 'CA', 'UK', 'AU', 'FR', 'DE', 'JP', 'IT', 'IN', 'ES'],
|
||||
hasChanges: false
|
||||
hasChanges: false,
|
||||
timeIncrementAmount: 1,
|
||||
elapsedTime: 0,
|
||||
playStartTime: null,
|
||||
elapsedTimeInterval: null,
|
||||
lockedChapters: new Set(),
|
||||
lastSelectedLockIndex: null,
|
||||
bulkChapterInput: '',
|
||||
showBulkChapterModal: false,
|
||||
bulkChapterCount: 1,
|
||||
detectedPattern: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@ -304,9 +397,18 @@ export default {
|
||||
},
|
||||
selectedChapterId() {
|
||||
return this.selectedChapter ? this.selectedChapter.id : null
|
||||
},
|
||||
allChaptersLocked() {
|
||||
return this.newChapters.length > 0 && this.newChapters.every((chapter) => this.lockedChapters.has(chapter.id))
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
formatNumberWithPadding(number, pattern) {
|
||||
if (!pattern || !pattern.hasLeadingZeros || !pattern.originalPadding) {
|
||||
return number.toString()
|
||||
}
|
||||
return number.toString().padStart(pattern.originalPadding, '0')
|
||||
},
|
||||
setChaptersFromTracks() {
|
||||
let currentStartTime = 0
|
||||
let index = 0
|
||||
@ -321,7 +423,7 @@ export default {
|
||||
currentStartTime += track.duration
|
||||
}
|
||||
this.newChapters = chapters
|
||||
|
||||
this.lockedChapters = new Set()
|
||||
this.checkChapters()
|
||||
},
|
||||
toggleRemoveBranding() {
|
||||
@ -334,19 +436,22 @@ export default {
|
||||
|
||||
const amount = Number(this.shiftAmount)
|
||||
|
||||
const lastChapter = this.newChapters[this.newChapters.length - 1]
|
||||
if (lastChapter.start + amount > this.mediaDurationRounded) {
|
||||
this.$toast.error(this.$strings.ToastChaptersInvalidShiftAmountLast)
|
||||
return
|
||||
}
|
||||
// Check if any unlocked chapters would be affected negatively
|
||||
const unlockedChapters = this.newChapters.filter((chap) => !this.lockedChapters.has(chap.id))
|
||||
|
||||
if (this.newChapters[1].start + amount <= 0) {
|
||||
this.$toast.error(this.$strings.ToastChaptersInvalidShiftAmountStart)
|
||||
if (unlockedChapters.length === 0) {
|
||||
this.$toast.warning(this.$strings.ToastChaptersAllLocked)
|
||||
return
|
||||
}
|
||||
|
||||
for (let i = 0; i < this.newChapters.length; i++) {
|
||||
const chap = this.newChapters[i]
|
||||
|
||||
// Skip locked chapters
|
||||
if (this.lockedChapters.has(chap.id)) {
|
||||
continue
|
||||
}
|
||||
|
||||
chap.end = Math.min(chap.end + amount, this.mediaDuration)
|
||||
if (i > 0) {
|
||||
chap.start = Math.max(0, chap.start + amount)
|
||||
@ -354,6 +459,83 @@ export default {
|
||||
}
|
||||
this.checkChapters()
|
||||
},
|
||||
incrementChapterTime(chapter, amount) {
|
||||
if (chapter.id === 0 && chapter.start + amount < 0) {
|
||||
return
|
||||
}
|
||||
if (chapter.start + amount >= this.mediaDuration) {
|
||||
return
|
||||
}
|
||||
|
||||
chapter.start = Math.max(0, chapter.start + amount)
|
||||
this.checkChapters()
|
||||
},
|
||||
adjustChapterStartTime(chapter) {
|
||||
const newStartTime = chapter.start + this.elapsedTime
|
||||
chapter.start = newStartTime
|
||||
this.checkChapters()
|
||||
this.$toast.success(this.$strings.ToastChapterStartTimeAdjusted.replace('{0}', this.elapsedTime))
|
||||
|
||||
this.destroyAudioEl()
|
||||
},
|
||||
startElapsedTimeTracking() {
|
||||
this.elapsedTime = 0
|
||||
this.playStartTime = Date.now()
|
||||
this.elapsedTimeInterval = setInterval(() => {
|
||||
this.elapsedTime = Math.floor((Date.now() - this.playStartTime) / 1000)
|
||||
}, 100)
|
||||
},
|
||||
stopElapsedTimeTracking() {
|
||||
if (this.elapsedTimeInterval) {
|
||||
clearInterval(this.elapsedTimeInterval)
|
||||
this.elapsedTimeInterval = null
|
||||
}
|
||||
this.elapsedTime = 0
|
||||
this.playStartTime = null
|
||||
},
|
||||
toggleChapterLock(chapter, event) {
|
||||
const chapterId = chapter.id
|
||||
|
||||
if (event.shiftKey && this.lastSelectedLockIndex !== null) {
|
||||
const startIndex = Math.min(this.lastSelectedLockIndex, chapterId)
|
||||
const endIndex = Math.max(this.lastSelectedLockIndex, chapterId)
|
||||
const shouldLock = !this.lockedChapters.has(chapterId)
|
||||
|
||||
for (let i = startIndex; i <= endIndex; i++) {
|
||||
if (shouldLock) {
|
||||
this.lockedChapters.add(i)
|
||||
} else {
|
||||
this.lockedChapters.delete(i)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (this.lockedChapters.has(chapterId)) {
|
||||
this.lockedChapters.delete(chapterId)
|
||||
} else {
|
||||
this.lockedChapters.add(chapterId)
|
||||
}
|
||||
}
|
||||
|
||||
this.lastSelectedLockIndex = chapterId
|
||||
this.lockedChapters = new Set(this.lockedChapters)
|
||||
},
|
||||
lockAllChapters() {
|
||||
this.newChapters.forEach((chapter) => {
|
||||
this.lockedChapters.add(chapter.id)
|
||||
})
|
||||
this.lockedChapters = new Set(this.lockedChapters)
|
||||
},
|
||||
unlockAllChapters() {
|
||||
this.lockedChapters.clear()
|
||||
this.lockedChapters = new Set(this.lockedChapters)
|
||||
},
|
||||
toggleAllChaptersLock() {
|
||||
if (this.allChaptersLocked) {
|
||||
this.unlockAllChapters()
|
||||
} else {
|
||||
this.lockAllChapters()
|
||||
}
|
||||
},
|
||||
editItem() {
|
||||
this.$store.commit('showEditModal', this.libraryItem)
|
||||
},
|
||||
@ -368,6 +550,10 @@ export default {
|
||||
this.checkChapters()
|
||||
},
|
||||
removeChapter(chapter) {
|
||||
if (this.lockedChapters.has(chapter.id)) {
|
||||
this.$toast.warning(this.$strings.ToastChapterLocked)
|
||||
return
|
||||
}
|
||||
this.newChapters = this.newChapters.filter((ch) => ch.id !== chapter.id)
|
||||
this.checkChapters()
|
||||
},
|
||||
@ -451,6 +637,7 @@ export default {
|
||||
console.log('Audio playing')
|
||||
this.isLoadingChapter = false
|
||||
this.isPlayingChapter = true
|
||||
this.startElapsedTimeTracking()
|
||||
})
|
||||
audioEl.addEventListener('ended', () => {
|
||||
console.log('Audio ended')
|
||||
@ -473,6 +660,10 @@ export default {
|
||||
this.selectedChapter = null
|
||||
this.isPlayingChapter = false
|
||||
this.isLoadingChapter = false
|
||||
this.stopElapsedTimeTracking()
|
||||
},
|
||||
resetChapterLookupData() {
|
||||
this.chapterData = null
|
||||
},
|
||||
saveChapters() {
|
||||
this.checkChapters()
|
||||
@ -523,7 +714,7 @@ export default {
|
||||
},
|
||||
applyChapterNamesOnly() {
|
||||
this.newChapters.forEach((chapter, index) => {
|
||||
if (this.chapterData.chapters[index]) {
|
||||
if (this.chapterData.chapters[index] && !this.lockedChapters.has(chapter.id)) {
|
||||
chapter.title = this.chapterData.chapters[index].title
|
||||
}
|
||||
})
|
||||
@ -535,7 +726,7 @@ export default {
|
||||
},
|
||||
applyChapterData() {
|
||||
let index = 0
|
||||
this.newChapters = this.chapterData.chapters
|
||||
const audibleChapters = this.chapterData.chapters
|
||||
.filter((chap) => chap.startOffsetSec < this.mediaDuration)
|
||||
.map((chap) => {
|
||||
return {
|
||||
@ -545,6 +736,21 @@ export default {
|
||||
title: chap.title
|
||||
}
|
||||
})
|
||||
|
||||
const merged = []
|
||||
let audibleIdx = 0
|
||||
for (let i = 0; i < Math.max(this.newChapters.length, audibleChapters.length); i++) {
|
||||
const isLocked = this.lockedChapters.has(i)
|
||||
if (isLocked && this.newChapters[i]) {
|
||||
merged.push({ ...this.newChapters[i], id: i })
|
||||
} else if (audibleChapters[audibleIdx]) {
|
||||
merged.push({ ...audibleChapters[audibleIdx], id: i })
|
||||
audibleIdx++
|
||||
} else if (this.newChapters[i]) {
|
||||
merged.push({ ...this.newChapters[i], id: i })
|
||||
}
|
||||
}
|
||||
this.newChapters = merged
|
||||
this.showFindChaptersModal = false
|
||||
this.chapterData = null
|
||||
|
||||
@ -643,6 +849,7 @@ export default {
|
||||
}
|
||||
]
|
||||
}
|
||||
this.lockedChapters = new Set()
|
||||
this.checkChapters()
|
||||
},
|
||||
removeAllChaptersClick() {
|
||||
@ -684,6 +891,91 @@ export default {
|
||||
this.saving = false
|
||||
})
|
||||
},
|
||||
handleBulkChapterAdd() {
|
||||
const input = this.bulkChapterInput.trim()
|
||||
if (!input) return
|
||||
|
||||
const numberMatch = input.match(/(\d+)/)
|
||||
|
||||
if (numberMatch) {
|
||||
// Extract the base pattern and number, preserving zero-padding
|
||||
const originalNumberString = numberMatch[1]
|
||||
const foundNumber = parseInt(originalNumberString)
|
||||
const numberIndex = numberMatch.index
|
||||
const beforeNumber = input.substring(0, numberIndex)
|
||||
const afterNumber = input.substring(numberIndex + originalNumberString.length)
|
||||
|
||||
this.detectedPattern = {
|
||||
before: beforeNumber,
|
||||
after: afterNumber,
|
||||
startingNumber: foundNumber,
|
||||
originalPadding: originalNumberString.length,
|
||||
hasLeadingZeros: originalNumberString.length > 1 && originalNumberString.startsWith('0')
|
||||
}
|
||||
|
||||
this.bulkChapterCount = 1
|
||||
this.showBulkChapterModal = true
|
||||
} else {
|
||||
this.addSingleChapterFromInput(input)
|
||||
}
|
||||
},
|
||||
addSingleChapterFromInput(title) {
|
||||
// Find the last chapter to determine where to add the new one
|
||||
const lastChapter = this.newChapters[this.newChapters.length - 1]
|
||||
const newStart = lastChapter ? lastChapter.end : 0
|
||||
const newEnd = Math.min(newStart + 300, this.mediaDuration)
|
||||
|
||||
const newChapter = {
|
||||
id: this.newChapters.length,
|
||||
start: newStart,
|
||||
end: newEnd,
|
||||
title: title
|
||||
}
|
||||
|
||||
this.newChapters.push(newChapter)
|
||||
this.bulkChapterInput = ''
|
||||
this.checkChapters()
|
||||
},
|
||||
|
||||
addBulkChapters() {
|
||||
const count = parseInt(this.bulkChapterCount)
|
||||
if (!count || count < 1 || count > 150) {
|
||||
this.$toast.error(this.$strings.ToastBulkChapterInvalidCount)
|
||||
return
|
||||
}
|
||||
|
||||
const { before, after, startingNumber, originalPadding, hasLeadingZeros } = this.detectedPattern
|
||||
const lastChapter = this.newChapters[this.newChapters.length - 1]
|
||||
const baseStart = lastChapter ? lastChapter.start + 1 : 0
|
||||
|
||||
// Add multiple chapters with the detected pattern
|
||||
for (let i = 0; i < count; i++) {
|
||||
const chapterNumber = startingNumber + i
|
||||
let formattedNumber = chapterNumber.toString()
|
||||
|
||||
// Apply zero-padding if the original had leading zeros
|
||||
if (hasLeadingZeros && originalPadding > 1) {
|
||||
formattedNumber = chapterNumber.toString().padStart(originalPadding, '0')
|
||||
}
|
||||
|
||||
const newStart = baseStart + i
|
||||
const newEnd = Math.min(newStart + i + i, this.mediaDuration)
|
||||
|
||||
const newChapter = {
|
||||
id: this.newChapters.length,
|
||||
start: newStart,
|
||||
end: newEnd,
|
||||
title: `${before}${formattedNumber}${after}`
|
||||
}
|
||||
|
||||
this.newChapters.push(newChapter)
|
||||
}
|
||||
|
||||
this.bulkChapterInput = ''
|
||||
this.showBulkChapterModal = false
|
||||
this.detectedPattern = null
|
||||
this.checkChapters()
|
||||
},
|
||||
libraryItemUpdated(libraryItem) {
|
||||
if (libraryItem.id === this.libraryItem.id) {
|
||||
if (!!libraryItem.media.metadata.asin && this.mediaMetadata.asin !== libraryItem.media.metadata.asin) {
|
||||
|
||||
@ -110,7 +110,7 @@
|
||||
"ButtonUpload": "Загрузіць",
|
||||
"ButtonUploadBackup": "Загрузіць рэзервовую копію",
|
||||
"ButtonUploadCover": "Загрузіць вокладку",
|
||||
"ButtonUploadOPMLFile": "Загрузіць OPML файл",
|
||||
"ButtonUploadOPMLFile": "Загрузіць файл OPML",
|
||||
"ButtonUserDelete": "Выдаліць карыстальніка {0}",
|
||||
"ButtonUserEdit": "Рэдагаваць карыстальніка {0}",
|
||||
"ButtonViewAll": "Прагледзець усе",
|
||||
@ -294,7 +294,7 @@
|
||||
"LabelContinueReading": "Працягнуць чытанне",
|
||||
"LabelContinueSeries": "Працягнуць серыі",
|
||||
"LabelCover": "Вокладка",
|
||||
"LabelCoverImageURL": "URL малюнка вокладкі",
|
||||
"LabelCoverImageURL": "URL выявы вокладкі",
|
||||
"LabelCoverProvider": "Крыніца вокладак",
|
||||
"LabelCreatedAt": "Дата стварэння",
|
||||
"LabelCronExpression": "Запіс Cron",
|
||||
@ -354,6 +354,7 @@
|
||||
"LabelExpiresInSeconds": "Тэрмін дзеяння заканчваецца праз (секунд)",
|
||||
"LabelExpiresNever": "Ніколі",
|
||||
"LabelExplicit": "Відверты",
|
||||
"LabelExportOPML": "Экспарт OPML",
|
||||
"LabelFeedURL": "URL стужкі",
|
||||
"LabelFetchingMetadata": "Атрыманне метададзеных",
|
||||
"LabelFile": "Файл",
|
||||
@ -370,6 +371,7 @@
|
||||
"LabelHasSupplementaryEbook": "Мае дадатковую электронную кнігу",
|
||||
"LabelHideSubtitles": "Схаваць падзагалоўкі",
|
||||
"LabelHost": "Хост",
|
||||
"LabelImageURLFromTheWeb": "URL выявы з інтэрнэту",
|
||||
"LabelInProgress": "У працэсе",
|
||||
"LabelIncomplete": "Незавершана",
|
||||
"LabelIntervalCustomDailyWeekly": "Карыстальніцкі штодзённы/штотыднёвы",
|
||||
@ -400,6 +402,7 @@
|
||||
"LabelLibraryFilterSublistEmpty": "Не {0}",
|
||||
"LabelLibraryItem": "Элемент бібліятэкі",
|
||||
"LabelLibraryName": "Імя бібліятэкі",
|
||||
"LabelLibrarySortByProgress": "Прагрэс абноўлены",
|
||||
"LabelLimit": "Абмежаванне",
|
||||
"LabelLineSpacing": "Міжрадковы інтэрвал",
|
||||
"LabelListenAgain": "Паслухаць зноў",
|
||||
@ -548,9 +551,9 @@
|
||||
"LabelTimeToShift": "Час зрушэння ў секундах",
|
||||
"LabelTitle": "Назва",
|
||||
"LabelToolsEmbedMetadata": "Убудаваць метададзеныя",
|
||||
"LabelToolsEmbedMetadataDescription": "Убудаваць метададзеныя ў аўдыёфайлы, уключаючы вокладку і раздзелы.",
|
||||
"LabelToolsMakeM4bDescription": "Стварыць аўдыёкнігу ў фармаце .M4B з убудаванымі метададзенымі, вокладкай і раздзеламі.",
|
||||
"LabelToolsSplitM4bDescription": "Стварэнне MP3 з M4B, падзеленага па раздзелах, з убудаванымі метададзенымі, вокладкай і раздзеламі.",
|
||||
"LabelToolsEmbedMetadataDescription": "Убудаваць метададзеныя ў аўдыёфайлы, уключаючы выяву вокладкі і раздзелы.",
|
||||
"LabelToolsMakeM4bDescription": "Стварыць аўдыёкнігу ў фармаце .M4B з убудаванымі метададзенымі, выявай вокладкі і раздзеламі.",
|
||||
"LabelToolsSplitM4bDescription": "Стварэнне MP3 з M4B, падзеленага па раздзелах, з убудаванымі метададзенымі, выявай вокладкі і раздзеламі.",
|
||||
"LabelTotalDuration": "Агульная працягласць",
|
||||
"LabelTotalTimeListened": "Агульны час праслухоўвання",
|
||||
"LabelTrackFromFilename": "Дарожка з імя файла",
|
||||
@ -612,6 +615,7 @@
|
||||
"MessageConfirmEmbedMetadataInAudioFiles": "Ці ўпэўненыя вы, што жадаеце ўбудаваць метададзеныя ў {0} аўдыёфайлаў?",
|
||||
"MessageConfirmPurgeCache": "Ачышчэнне кэша выдаліць увесь каталог па адрасе <code>/metadata/cache</code>. <br /><br /> Ці сапраўды вы жадаеце выдаліць каталог кэша?",
|
||||
"MessageConfirmPurgeItemsCache": "Ачышчэнне кэша элементаў выдаліць увесь каталог па адрасе <code>/metadata/cache/items</code>. <br /> Вы ўпэўнены?",
|
||||
"MessageConfirmQuickMatchEpisodes": "Хуткае супадзенне эпізодаў перазапіша дэталі, калі супадзенне будзе знойдзена. Будуць абноўлены толькі эпізоды, якія не супадаюць. Вы ўпэўнены?",
|
||||
"MessageConfirmRemoveListeningSessions": "Вы ўпэўнены, што жадаеце выдаліць {0} сеансаў праслухоўвання?",
|
||||
"MessageConfirmRemoveMetadataFiles": "Ці ўпэўненыя вы, што жадаеце выдаліць усе файлы метададзеных{0} у тэчках элементаў вашай бібліятэкі?",
|
||||
"MessageConfirmRemovePlaylist": "Вы ўпэўненыя, што жадаеце выдаліць свой спіс прайгравання \"{0}\"?",
|
||||
@ -622,6 +626,8 @@
|
||||
"MessageEreaderDevices": "Каб забяспечыць дастаўку электронных кніг, вам можа спатрэбіцца дадаць вышэйзгаданы адрас электроннай пошты як дазволенага адпраўніка для кожнай прылады, пералічанай ніжэй.",
|
||||
"MessageFeedURLWillBe": "URL стужкі будзе {0}",
|
||||
"MessageFetching": "Атрыманне...",
|
||||
"MessageInvalidAsin": "Няправільны ASIN",
|
||||
"MessageItemsUpdated": "{0} элементаў абноўлена",
|
||||
"MessageLoading": "Загрузка...",
|
||||
"MessageLogsDescription": "Журналы захоўваюцца ў каталогу <code>/metadata/logs</code> у фармаце JSON. Журналы памылак захоўваюцца ў файле <code>/metadata/logs/crashlogs.txt</code>.",
|
||||
"MessageMapChapterTitles": "Супаставіць назвы раздзелаў з вашымі існуючымі раздзеламі аўдыякнігі без змянення часовых метак",
|
||||
@ -641,13 +647,13 @@
|
||||
"MessageNoUpdatesWereNecessary": "Абнаўленні не патрабаваліся",
|
||||
"MessageNoUserPlaylists": "У вас няма спісаў прайгравання",
|
||||
"MessageNoUserPlaylistsHelp": "Спісы прайгравання прыватныя. Толькі карыстальнік, які іх стварыў, можа іх бачыць.",
|
||||
"MessageOpmlPreviewNote": "Заўвага: гэта папярэдні прагляд разабранага OPML-файла. Фактычная назва падкаста будзе ўзятая з RSS-стужкі.",
|
||||
"MessageOpmlPreviewNote": "Заўвага: гэта папярэдні прагляд разабранага файла OPML. Фактычная назва падкаста будзе ўзятая з RSS-стужкі.",
|
||||
"MessagePlaylistCreateFromCollection": "Стварыць спіс прайгравання з калекцыі",
|
||||
"MessagePodcastHasNoRSSFeedForMatching": "У падкаста няма URL RSS-стужкі для супадзення",
|
||||
"MessagePodcastSearchField": "Увядзіце пошукавы запыт або URL RSS-стужкі",
|
||||
"MessageQuickMatchDescription": "Запоўніць пустыя дэталі элемента і вокладку першым вынікам супадзення з '{0}'. Не замяняе дэталі, калі опцыя «Аддаваць перавагу супадаючым метададзеным» на серверы не ўключана.",
|
||||
"MessageReportBugsAndContribute": "Паведамляйце пра памылкі, прапануйце новыя функцыі і ўдзельнічайце на",
|
||||
"MessageRestoreBackupWarning": "Аднаўленне рэзервовай копіі перазапіша ўсю базу даных, размешчаную ў /config, а таксама вокладкі ў /metadata/items і /metadata/authors. <br /><br /> Рэзервовыя копіі не змяняюць файлы ў вашых тэчках бібліятэкі. Калі вы ўключылі наладкі сервера для захоўвання воклак і метададзеных у тэчках бібліятэкі, гэтыя файлы не будуць захаваныя ў рэзервовых копіях і не зменяцца. <br /><br /> Усе кліенты, якія карыстаюцца вашым серверам, будуць аўтаматычна абноўлены.",
|
||||
"MessageRestoreBackupWarning": "Аднаўленне рэзервовай копіі перазапіша ўсю базу даных, размешчаную ў /config, а таксама выявы вокладкі ў /metadata/items і /metadata/authors. <br /><br /> Рэзервовыя копіі не змяняюць файлы ў вашых тэчках бібліятэкі. Калі вы ўключылі наладкі сервера для захоўвання воклак і метададзеных у тэчках бібліятэкі, гэтыя файлы не будуць захаваныя ў рэзервовых копіях і не зменяцца. <br /><br /> Усе кліенты, якія карыстаюцца вашым серверам, будуць аўтаматычна абноўлены.",
|
||||
"MessageScheduleRunEveryWeekdayAtTime": "Выконваць кожныя {0} у {1}",
|
||||
"MessageStartPlaybackAtTime": "Пачаць прайграванне для \"{0}\" з {1}?",
|
||||
"MessageTaskAudioFileNotWritable": "Аўдыёфайл \"{0}\" недаступны для запісу",
|
||||
@ -668,13 +674,22 @@
|
||||
"MessageTaskNoFilesToScan": "Няма файлаў для сканавання",
|
||||
"MessageTaskOpmlImport": "Імпарт OPML",
|
||||
"MessageTaskOpmlImportDescription": "Стварэнне падкастаў з {0} RSS-стужак",
|
||||
"MessageTaskOpmlImportFeed": "Імпарт стужкі з OPML",
|
||||
"MessageTaskOpmlImportFeed": "Імпарт стужкі OPML",
|
||||
"MessageTaskOpmlImportFeedDescription": "Імпартаванне RSS-стужкі \"{0}\"",
|
||||
"MessageTaskOpmlImportFeedFailed": "Не ўдалося атрымаць стужку падкаста",
|
||||
"MessageTaskOpmlImportFeedPodcastDescription": "Стварэнне падкаста \"{0}\"",
|
||||
"MessageTaskOpmlImportFeedPodcastExists": "Падкаст ужо існуе па гэтым шляху",
|
||||
"MessageTaskOpmlImportFeedPodcastFailed": "Не ўдалося стварыць падкаст",
|
||||
"MessageTaskOpmlParseNoneFound": "У OPML-файле не знойдзена стужак",
|
||||
"MessageTaskOpmlImportFinished": "Дададзена {0} падкастаў",
|
||||
"MessageTaskOpmlParseFailed": "Не ўдалося разабраць файл OPML",
|
||||
"MessageTaskOpmlParseFastFail": "Неправільны файл OPML: тэг <opml> не знойдзены АБО тэг <outline> не знойдзены",
|
||||
"MessageTaskOpmlParseNoneFound": "У файле OPML не знойдзена стужак",
|
||||
"MessageTaskScanItemsAdded": "{0} дададзена",
|
||||
"MessageTaskScanItemsMissing": "{0} адсутнічае",
|
||||
"MessageTaskScanItemsUpdated": "{0} абноўлена",
|
||||
"MessageTaskScanNoChangesNeeded": "Змены не патрабуюцца",
|
||||
"MessageTaskScanningFileChanges": "Сканіраванне змяненняў у файле \"{0}\"",
|
||||
"MessageTaskScanningLibrary": "Сканіраванне бібліятэкі \"{0}\"",
|
||||
"MessageTaskTargetDirectoryNotWritable": "Мэтавы каталог недаступны для запісу",
|
||||
"NoteChapterEditorTimes": "Заўвага: Час пачатку першага раздзела павінен заставацца 0:00, а час пачатку апошняга раздзела не можа перавышаць працягласць гэтай аўдыякнігі.",
|
||||
"NoteRSSFeedPodcastAppsHttps": "Папярэджанне: большасць праграм для падкастаў патрабуюць, каб URL RSS-стужкі выкарыстоўваў HTTPS",
|
||||
@ -687,6 +702,11 @@
|
||||
"StatsBooksListenedTo": "кнігі, якія былі праслуханы",
|
||||
"StatsCollectionGrewTo": "Ваша калекцыя кніг павялічылася да…",
|
||||
"ToastAccountUpdateSuccess": "Уліковы запіс абноўлены",
|
||||
"ToastAuthorImageRemoveSuccess": "Выява аўтара выдалена",
|
||||
"ToastAuthorUpdateSuccess": "Аўтар абноўлены",
|
||||
"ToastAuthorUpdateSuccessNoImageFound": "Аўтар абноўлены (малюнак не знойдзены)",
|
||||
"ToastBackupInvalidMaxKeep": "Няправільная колькасць рэзервовых копій для захоўвання",
|
||||
"ToastBackupInvalidMaxSize": "Няправільны максімальны памер рэзервовай копіі",
|
||||
"ToastBookmarkCreateFailed": "Не ўдалося стварыць закладку",
|
||||
"ToastDateTimeInvalidOrIncomplete": "Дата і час указаны некарэктна або не цалкам",
|
||||
"ToastDeviceTestEmailFailed": "Не ўдалося адправіць тэставае электроннае пісьмо",
|
||||
@ -694,6 +714,7 @@
|
||||
"ToastEncodeCancelSucces": "Кадаванне скасавана",
|
||||
"ToastEpisodeDownloadQueueClearFailed": "Не ўдалося ачысціць чаргу",
|
||||
"ToastEpisodeDownloadQueueClearSuccess": "Чарга спампоўкі эпізодаў ачышчана",
|
||||
"ToastInvalidImageUrl": "Няправільны URL выявы",
|
||||
"ToastInvalidMaxEpisodesToDownload": "Няправільная максімальная колькасць эпізодаў для спампоўкі",
|
||||
"ToastItemMarkedAsFinishedFailed": "Не ўдалося пазначыць як Скончана",
|
||||
"ToastItemMarkedAsFinishedSuccess": "Элемент пазначаны як Завершаны",
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
{
|
||||
"ButtonAdd": "Създай",
|
||||
"ButtonAddApiKey": "Добави API ключ",
|
||||
"ButtonAddChapters": "Добави Глави",
|
||||
"ButtonAddDevice": "Добави Устройство",
|
||||
"ButtonAddLibrary": "Добави Библиотека",
|
||||
@ -20,6 +21,7 @@
|
||||
"ButtonChooseAFolder": "Избери Папка",
|
||||
"ButtonChooseFiles": "Избери Файлове",
|
||||
"ButtonClearFilter": "Изчисти филтър",
|
||||
"ButtonClose": "Затвори",
|
||||
"ButtonCloseFeed": "Затвори стената",
|
||||
"ButtonCloseSession": "Затвори отворената сесия",
|
||||
"ButtonCollections": "Колекции",
|
||||
@ -119,11 +121,13 @@
|
||||
"HeaderAccount": "Профил",
|
||||
"HeaderAddCustomMetadataProvider": "Добави персонализиран доставчик на метаданни",
|
||||
"HeaderAdvanced": "Разширени настройки",
|
||||
"HeaderApiKeys": "API ключове",
|
||||
"HeaderAppriseNotificationSettings": "Apprise Notification Опции",
|
||||
"HeaderAudioTracks": "Песни",
|
||||
"HeaderAudiobookTools": "Инструмент за Менижиране на Аудиокниги",
|
||||
"HeaderAuthentication": "Аутентикация",
|
||||
"HeaderBackups": "Архив",
|
||||
"HeaderBulkChapterModal": "Добави няколко глави",
|
||||
"HeaderChangePassword": "Промяна на Парола",
|
||||
"HeaderChapters": "Глави",
|
||||
"HeaderChooseAFolder": "Избети Папка",
|
||||
@ -162,6 +166,7 @@
|
||||
"HeaderMetadataOrderOfPrecedence": "Предимство на Метаданни",
|
||||
"HeaderMetadataToEmbed": "Метаданни за Вграждане",
|
||||
"HeaderNewAccount": "Нов Профил",
|
||||
"HeaderNewApiKey": "Нов API ключ",
|
||||
"HeaderNewLibrary": "Нова Библиотека",
|
||||
"HeaderNotificationCreate": "Създай нотификация",
|
||||
"HeaderNotificationUpdate": "Обнови нотификация",
|
||||
@ -195,6 +200,7 @@
|
||||
"HeaderSettingsExperimental": "Експериментални Функции",
|
||||
"HeaderSettingsGeneral": "Общи",
|
||||
"HeaderSettingsScanner": "Скенер",
|
||||
"HeaderSettingsSecurity": "Сигурност",
|
||||
"HeaderSettingsWebClient": "Уеб клиент",
|
||||
"HeaderSleepTimer": "Таймер за заспиване",
|
||||
"HeaderStatsLargestItems": "Най-Големите Елементи",
|
||||
@ -206,6 +212,7 @@
|
||||
"HeaderTableOfContents": "Съдържание",
|
||||
"HeaderTools": "Инструменти",
|
||||
"HeaderUpdateAccount": "Обнови Профил",
|
||||
"HeaderUpdateApiKey": "Обнови API ключ",
|
||||
"HeaderUpdateAuthor": "Обнови Автор",
|
||||
"HeaderUpdateDetails": "Обнови Детайли",
|
||||
"HeaderUpdateLibrary": "Обнови Библиотека",
|
||||
@ -230,10 +237,15 @@
|
||||
"LabelAddedDate": "Добавено",
|
||||
"LabelAdminUsersOnly": "Само за Администратори",
|
||||
"LabelAll": "Всичко",
|
||||
"LabelAllEpisodesDownloaded": "Всички епизоди са изтеглени",
|
||||
"LabelAllUsers": "Всички Потребители",
|
||||
"LabelAllUsersExcludingGuests": "Всички потребители без гости",
|
||||
"LabelAllUsersIncludingGuests": "Всички потребители включително гости",
|
||||
"LabelAlreadyInYourLibrary": "Вече е в твоята библиотека",
|
||||
"LabelApiKeyCreated": "API ключ \"{0}\" успешно създатен.",
|
||||
"LabelApiKeyCreatedDescription": "Погрижете се да копирате API ключът сега, защото повече няма да можете да го виждате онново.",
|
||||
"LabelApiKeyUser": "Действай от името на потребителя",
|
||||
"LabelApiKeyUserDescription": "Този API ключ ще има същите права като на потребителя за чието име действа. В логовете ще изглежда все едно потребителя прави заявката.",
|
||||
"LabelApiToken": "АПИ Токен",
|
||||
"LabelAppend": "Добави",
|
||||
"LabelAudioBitrate": "Аудио битрейт (напр. 128k)",
|
||||
@ -253,7 +265,7 @@
|
||||
"LabelBackToUser": "Обратно към Потребител",
|
||||
"LabelBackupAudioFiles": "Създай резервно копие на аудио файлове",
|
||||
"LabelBackupLocation": "Местоположение на Архив",
|
||||
"LabelBackupsEnableAutomaticBackups": "Включи автоматично архивиране",
|
||||
"LabelBackupsEnableAutomaticBackups": "Автоматично архивиране",
|
||||
"LabelBackupsEnableAutomaticBackupsHelp": "Архиви запазени в /metadata/backups",
|
||||
"LabelBackupsMaxBackupSize": "Максимален размер на архива (в GB) (0 за неограничен)",
|
||||
"LabelBackupsMaxBackupSizeHelp": "За защита срещу грешки в конфигурацията, архивите ще се провалят ако надхвърлят конфигурирания размер.",
|
||||
@ -272,7 +284,7 @@
|
||||
"LabelChaptersFound": "намерени глави",
|
||||
"LabelClickForMoreInfo": "Кликни за повече информация",
|
||||
"LabelClickToUseCurrentValue": "Натисни да ползваш сегашната стойност",
|
||||
"LabelClosePlayer": "Затвори",
|
||||
"LabelClosePlayer": "Затвори плейъра",
|
||||
"LabelCodec": "Кодек",
|
||||
"LabelCollapseSeries": "Скрий сериите",
|
||||
"LabelCollapseSubSeries": "Свий подсерии",
|
||||
@ -283,6 +295,7 @@
|
||||
"LabelContinueListening": "Продължи слушане",
|
||||
"LabelContinueReading": "Продължи четене",
|
||||
"LabelContinueSeries": "Продължи серии",
|
||||
"LabelCorsAllowed": "Разрешени CORS Origins",
|
||||
"LabelCover": "Корица",
|
||||
"LabelCoverImageURL": "URL на Корица",
|
||||
"LabelCoverProvider": "Източник за обложки",
|
||||
@ -296,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Изтрий от файловата система (отмени за да бъдат премахни само от базата данни)",
|
||||
"LabelDescription": "Описание",
|
||||
"LabelDeselectAll": "Премахни всички",
|
||||
"LabelDetectedPattern": "Намерен образец:",
|
||||
"LabelDevice": "Устройство",
|
||||
"LabelDeviceInfo": "Информация за Устройство",
|
||||
"LabelDeviceIsAvailableTo": "Устройството е достъпно за ...",
|
||||
@ -345,7 +359,11 @@
|
||||
"LabelExample": "Пример",
|
||||
"LabelExpandSeries": "Покажи сериите",
|
||||
"LabelExpandSubSeries": "Покажи съб сериите",
|
||||
"LabelExplicit": "С нецензурно съдържание",
|
||||
"LabelExpired": "Изтекъл",
|
||||
"LabelExpiresAt": "Изтича на",
|
||||
"LabelExpiresInSeconds": "Изтича след (секунди)",
|
||||
"LabelExpiresNever": "Никога",
|
||||
"LabelExplicit": "Експлицитно",
|
||||
"LabelExplicitChecked": "С нецензурно съдържание (проверено)",
|
||||
"LabelExplicitUnchecked": "Без нецензурно съдържание (непроверено)",
|
||||
"LabelExportOPML": "Експортирай OPML",
|
||||
@ -404,6 +422,7 @@
|
||||
"LabelLanguages": "Езици",
|
||||
"LabelLastBookAdded": "Последно Добавена Книга",
|
||||
"LabelLastBookUpdated": "Последно Обновена Книга",
|
||||
"LabelLastProgressDate": "Последен прогрес: {0}",
|
||||
"LabelLastSeen": "Последно Видян",
|
||||
"LabelLastTime": "Последно Време",
|
||||
"LabelLastUpdate": "Последно Обновяване",
|
||||
@ -416,6 +435,7 @@
|
||||
"LabelLibraryFilterSublistEmpty": "Не {0}",
|
||||
"LabelLibraryItem": "Елемент на Библиотека",
|
||||
"LabelLibraryName": "Име на Библиотека",
|
||||
"LabelLibrarySortByProgress": "Прогресът е обновен",
|
||||
"LabelLimit": "Лимит",
|
||||
"LabelLineSpacing": "Междуредие",
|
||||
"LabelListenAgain": "Слушай отново",
|
||||
@ -424,6 +444,7 @@
|
||||
"LabelLogLevelWarn": "Предупреждение",
|
||||
"LabelLookForNewEpisodesAfterDate": "Търси нови епизоди след дата",
|
||||
"LabelLowestPriority": "Най-нисък Приоритет",
|
||||
"LabelMatchConfidence": "Увереност",
|
||||
"LabelMatchExistingUsersBy": "Съпостави съществуващи потребители по",
|
||||
"LabelMatchExistingUsersByDescription": "Използва се за свързване на съществуващи потребители. След свързване потребителите ще бъдат съпоставени по уникален идентификатор от вашия доставчик на SSO",
|
||||
"LabelMaxEpisodesToDownload": "Максимален брой епизоди за сваляне. Използвай 0 за неограничен.",
|
||||
@ -453,7 +474,9 @@
|
||||
"LabelNewestAuthors": "Най-новите автори",
|
||||
"LabelNewestEpisodes": "Най-новите епизоди",
|
||||
"LabelNextBackupDate": "Следваща Дата на Архивиране",
|
||||
"LabelNextChapters": "Следващите глави ще бъдат:",
|
||||
"LabelNextScheduledRun": "Следващо Планирано Изпълнение",
|
||||
"LabelNoApiKeys": "Няма API ключове",
|
||||
"LabelNoCustomMetadataProviders": "Няма потребителски доставчици на метаданни",
|
||||
"LabelNoEpisodesSelected": "Няма избрани епизоди",
|
||||
"LabelNotFinished": "Не е приключено",
|
||||
@ -469,6 +492,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Максимален размер на опашката за известия",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Събитията са ограничени до изстрелване на 1 на секунда. Събитията ще бъдат игнорирани ако опашката е на максимален размер. Това предотвратява спамирането на известия.",
|
||||
"LabelNumberOfBooks": "Брой на Книги",
|
||||
"LabelNumberOfChapters": "Брой глави:",
|
||||
"LabelNumberOfEpisodes": "Брой епизоди",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Име на OpenID твърдението, което съдържа разширени права за достъп до потребителски действия в приложението, които ще се прилагат за роли, различни от администраторските (<b>ако е конфигурирано</b>). Ако твърдението липсва в отговора, достъпът до ABS ще бъде отказан. Ако липсва една опция, тя ще се третира като <code>false</code>. Уверете се, че твърдението на доставчика на идентичност съответства на очакваната структура:",
|
||||
"LabelOpenIDClaims": "Оставете следните опции празни, за да деактивирате разширеното присвояване на групи, като автоматично ще бъде присвоена групата 'Потребител'.",
|
||||
@ -513,7 +537,7 @@
|
||||
"LabelPublishers": "Издателство",
|
||||
"LabelRSSFeedCustomOwnerEmail": "Персонализиран имейл на собственика",
|
||||
"LabelRSSFeedCustomOwnerName": "Персонализирано име на собственика",
|
||||
"LabelRSSFeedOpen": "RSS Feed Оптворен",
|
||||
"LabelRSSFeedOpen": "RSS Feed е отворен",
|
||||
"LabelRSSFeedPreventIndexing": "Предотвратете индексиране",
|
||||
"LabelRSSFeedSlug": "идентификатор на RSS емисия",
|
||||
"LabelRSSFeedURL": "URL на RSS емисия",
|
||||
@ -543,6 +567,7 @@
|
||||
"LabelSelectAll": "Избери всичко",
|
||||
"LabelSelectAllEpisodes": "Избери всички епизоди",
|
||||
"LabelSelectEpisodesShowing": "Избери {0} епизоди показани",
|
||||
"LabelSelectUser": "Избери потребител",
|
||||
"LabelSelectUsers": "Избери Потребители",
|
||||
"LabelSendEbookToDevice": "Изпрати електронна книга до ...",
|
||||
"LabelSequence": "Последователност",
|
||||
@ -639,6 +664,7 @@
|
||||
"LabelTheme": "Тема",
|
||||
"LabelThemeDark": "Тъмна",
|
||||
"LabelThemeLight": "Светла",
|
||||
"LabelThemeSepia": "Сепия",
|
||||
"LabelTimeBase": "Времева Основа",
|
||||
"LabelTimeDurationXHours": "{0} часа",
|
||||
"LabelTimeDurationXMinutes": "{0} минути",
|
||||
@ -693,7 +719,11 @@
|
||||
"LabelViewPlayerSettings": "Виж настройки на плеъра",
|
||||
"LabelViewQueue": "Виж Опашка",
|
||||
"LabelVolume": "Сила на Звука",
|
||||
"LabelWebRedirectURLsDescription": "Разрешете тези URL-и във вашият OAuth доставчик, за да позволите пренасочването обратно към уеб приложението след вход:",
|
||||
"LabelWebRedirectURLsSubfolder": "Подпапка за URL адреси за пренасочване",
|
||||
"LabelWeekdaysToRun": "Делници за изпълнение",
|
||||
"LabelXBooks": "{0} книги",
|
||||
"LabelXItems": "{0} елемента",
|
||||
"LabelYearReviewHide": "Скрий ревю на годината ти",
|
||||
"LabelYearReviewShow": "Виж ревю на годината ти",
|
||||
"LabelYourAudiobookDuration": "Продължителност на вашата аудиокнига",
|
||||
@ -702,31 +732,51 @@
|
||||
"LabelYourProgress": "Твоят прогрес",
|
||||
"MessageAddToPlayerQueue": "Добави към опашката на плейъра",
|
||||
"MessageAppriseDescription": "За да ползвате тази функция трябва да имате активна инстанция на <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> или на друго АПИ което да обработва тези заявки. <br />The Apprise API Url-а трябва дае пълния URL път за изпращане на известията, например, ако вашето АПИ ве подава от <code>http://192.168.1.1:8337</code> трябва да сложитев <code>http://192.168.1.1:8337/notify</code>.",
|
||||
"MessageAsinCheck": "Уверете се, че използвате ASIN от правилния Audible регион, а не от Amazon.",
|
||||
"MessageAuthenticationLegacyTokenWarning": "Остарелите API токени ще бъдат премахнати в бъдеще. Вместо това използвайте <a href=\"/config/api-keys\">API ключове</a>.",
|
||||
"MessageAuthenticationOIDCChangesRestart": "Рестартирайте сървърът след записването на настройките, за да активирате OIDC промените.",
|
||||
"MessageAuthenticationSecurityMessage": "За осигуряването на по-добра сигурност, автентикацията беше подобрена. Всеки потребител ще трябва да се автентикира наново.",
|
||||
"MessageBackupsDescription": "Резервните копия включват потребители, напредък на потребителите, подробности за елементите в библиотеката, настройки на сървъра и изображения, съхранени в <code>/metadata/items</code> и <code>/metadata/authors</code>. Резервните копия <strong>не</strong> включват никакви файлове, съхранени в папките на вашата библиотека.",
|
||||
"MessageBackupsLocationEditNote": "Забележка: Актуализирането на местоположението за архивиране няма да премести или промени съществуващите архиви",
|
||||
"MessageBackupsLocationNoEditNote": "Забележка: Местоположението за архивиране се задава с помощта на променлива на средата и не може бъде променена от тук.",
|
||||
"MessageBackupsLocationPathEmpty": "Пътят към местоположението за архивиране не може да бъде празен",
|
||||
"MessageBatchEditPopulateMapDetailsAllHelp": "Популирайте активираните полета с данни от всички елементи. Полетата със няколко стоайности ще бъдат обединени",
|
||||
"MessageBatchEditPopulateMapDetailsItemHelp": "Попълнете активираните полета с информация за картата с данни от този елемент",
|
||||
"MessageBatchQuickMatchDescription": "Бързото Съпоставяне ще опита да добави липсващи корици и метаданни за избраните елементи. Активирайте опциите по-долу, за да позволите на Бързото съпоставяне да презапише съществуващите корици и/или метаданни.",
|
||||
"MessageBookshelfNoCollections": "Все още нямате създадени колекции",
|
||||
"MessageBookshelfNoCollectionsHelp": "Колекциите са публични. Всички потребители с достъп до библиотеката ще могат да ги виждат.",
|
||||
"MessageBookshelfNoRSSFeeds": "Няма отворени RSS feed-ове",
|
||||
"MessageBookshelfNoResultsForFilter": "Няма резултат за филтер \"{0}: {1}\"",
|
||||
"MessageBookshelfNoResultsForQuery": "Няма резултати от заявката",
|
||||
"MessageBookshelfNoSeries": "Нямаш сеЗЙ",
|
||||
"MessageBulkChapterPattern": "Колко глави искате да добавите, използвайки тази схема за номериране?",
|
||||
"MessageChapterEndIsAfter": "Краят на главата е след края на вашата аудиокнига",
|
||||
"MessageChapterErrorFirstNotZero": "Първата глава трябва да започва от 0",
|
||||
"MessageChapterErrorStartGteDuration": "Началото на главата трябва да бъде по-малко от продължителността на аудиокнигата",
|
||||
"MessageChapterErrorStartLtPrev": "Началото на главата трябва да бъде по-голямо или равно на края на предишната глава",
|
||||
"MessageChapterStartIsAfter": "Началото на главата е след края на вашата аудиокнига",
|
||||
"MessageChaptersNotFound": "Главите не са намерени",
|
||||
"MessageCheckingCron": "Проверяване на cron...",
|
||||
"MessageConfirmCloseFeed": "Сигурни ли сте, че искате да затворите този feed?",
|
||||
"MessageConfirmDeleteApiKey": "Сигурни ли сте, че искате да изтриете API ключ \"{0}\"?",
|
||||
"MessageConfirmDeleteBackup": "Сигурни ли сте, че искате да изтриете този архив {0}?",
|
||||
"MessageConfirmDeleteDevice": "Сигурни ли сте, че искате да изтриете е-четец \"{0}\"?",
|
||||
"MessageConfirmDeleteFile": "Това ще изтрие файла от файловата Ви система. Сигурни ли сте?",
|
||||
"MessageConfirmDeleteLibrary": "Сигурни ли сте, че искате да изтриете за винаги библиотека \"{0}\"?",
|
||||
"MessageConfirmDeleteLibraryItem": "Това ще изтрие елемента от базата данни и файловата Ви система. Сигурни ли сте?",
|
||||
"MessageConfirmDeleteLibraryItems": "Това ще изтрие {0} елемента от базата данни и файловата Ви система. Сигурни ли сте?",
|
||||
"MessageConfirmDeleteMetadataProvider": "Сигурни ли сте, че искате да изтриете доставчика нa метаданни \"{0}\"?",
|
||||
"MessageConfirmDeleteNotification": "Сигурни ли сте, че искате да изтриете това уведомление?",
|
||||
"MessageConfirmDeleteSession": "Сигурни ли сте, че искате да изтриете тази сесия?",
|
||||
"MessageConfirmEmbedMetadataInAudioFiles": "Сигурнли ли сте, че искате да вградите метаданните в {0} аудио файла?",
|
||||
"MessageConfirmForceReScan": "Сигурни ли сте, че искате да принудите повторно сканиране?",
|
||||
"MessageConfirmMarkAllEpisodesFinished": "Сигурни ли сте, че искате да маркирате всички епизоди като завършени?",
|
||||
"MessageConfirmMarkAllEpisodesNotFinished": "Сигурни ли сте, че искате да маркирате всички епизоди като незавършени?",
|
||||
"MessageConfirmMarkItemFinished": "Сигурни ли сте, че искате да маркирате \"{0}\" като приключено?",
|
||||
"MessageConfirmMarkItemNotFinished": "Сигурни ли сте, че искате да маркирате \"{0}\" като неприключено?",
|
||||
"MessageConfirmMarkSeriesFinished": "Сигурни ли сте, че искате да маркирате всички книги в тази серия като завършени?",
|
||||
"MessageConfirmMarkSeriesNotFinished": "Сигурни ли сте, че искате да маркирате всички книги в тази серия като незавършени?",
|
||||
"MessageConfirmNotificationTestTrigger": "Пуснете това уведомление с тестови данни?",
|
||||
"MessageConfirmPurgeCache": "Изчистването на кеша ще изтрие цялата директория в <code>/metadata/cache</code>. <br /><br />Сигурни ли сте, че искате да премахнете директорията на кеша?",
|
||||
"MessageConfirmPurgeItemsCache": "Изчистването на кеша на елементите ще изтрие цялата директория в <code>/metadata/cache/items</code>. <br />Сигурни ли сте?",
|
||||
"MessageConfirmQuickEmbed": "Внимание! Бързото вграждане няма да архивира вашите аудио файлове. Уверете се, че имате резервно копие на вашите аудио файлове. <br><br>Искате ли да продължите?",
|
||||
@ -735,6 +785,7 @@
|
||||
"MessageConfirmRemoveAuthor": "Сигурни ли сте, че искате да премахнете автор \"{0}\"?",
|
||||
"MessageConfirmRemoveCollection": "Сигурни ли сте, че искате да премахнете колекция \"{0}\"?",
|
||||
"MessageConfirmRemoveEpisode": "Сигурни ли сте, че искате да премахнете епизод \"{0}\"?",
|
||||
"MessageConfirmRemoveEpisodeNote": "Забележка: Това няма да доведе до изтриване на аудио файла, освен ако не активирате опцията \"Твърдо изтриване на файла\"",
|
||||
"MessageConfirmRemoveEpisodes": "Сигурни ли сте, че искате да премахнете {0} епизода?",
|
||||
"MessageConfirmRemoveListeningSessions": "Сигурни ли сте, че искате да премахнете {0} слушателски сесии?",
|
||||
"MessageConfirmRemoveNarrator": "Сигурни ли сте, че искате да премахнете разказвач \"{0}\"?",
|
||||
@ -745,19 +796,27 @@
|
||||
"MessageConfirmRenameTag": "Сигурни ли сте, че искате да преименувате таг \"{0}\" на \"{1}\" за всички елементи?",
|
||||
"MessageConfirmRenameTagMergeNote": "Забележка: Този таг вече съществува и ще бъде слято.",
|
||||
"MessageConfirmRenameTagWarning": "Внимание! Вече съществува подобен таг с различно писане \"{0}\".",
|
||||
"MessageConfirmResetProgress": "Сигурни ли сте, че искате да нулирате прогреса си?",
|
||||
"MessageConfirmSendEbookToDevice": "Сигурни ли сте, че искате да изпратите {0} електронна книга \"{1}\" до устройство \"{2}\"?",
|
||||
"MessageConfirmUnlinkOpenId": "Сигурни ли сте, че искате да отвържете този потребител от OpenID?",
|
||||
"MessageDaysListenedInTheLastYear": "{0} дни слушане през последната година",
|
||||
"MessageDownloadingEpisode": "Сваля епизод",
|
||||
"MessageDragFilesIntoTrackOrder": "Плъзнете файлове в правилния ред на каналите",
|
||||
"MessageEmbedFailed": "Вграждането беше неуспешно!",
|
||||
"MessageEmbedFinished": "Вграждането завърши!",
|
||||
"MessageEmbedQueue": "Поставено в опашката за вграждане на метаданни ({0} в опашката)",
|
||||
"MessageEpisodesQueuedForDownload": "{0} Епизод(и) са сложени за сваляне",
|
||||
"MessageEreaderDevices": "За да осигурите доставката на е-книги, може да се наложи да добавите горепосочения имейл адрес като валиден подател за всяко устройство, изброено по-долу.",
|
||||
"MessageFeedURLWillBe": "Адресът на емисията ще бъде {0}",
|
||||
"MessageFetching": "Извличане...",
|
||||
"MessageForceReScanDescription": "ще сканира всички файлове отново като прясно сканиране. Аудио файлове ID3 тагове, OPF файлове и текстови файлове ще бъдат сканирани като нови.",
|
||||
"MessageHeatmapListeningTimeTooltip": "<strong>{0} слушане</strong> на {1}",
|
||||
"MessageHeatmapNoListeningSessions": "Няма сесии за слушане на {0}",
|
||||
"MessageImportantNotice": "Важно Съобщение!",
|
||||
"MessageInsertChapterBelow": "Вмъкни глава под",
|
||||
"MessageItemsSelected": "{0} избрани",
|
||||
"MessageItemsUpdated": "{0} елемента обновени",
|
||||
"MessageInvalidAsin": "Невалиден ASIN",
|
||||
"MessageItemsSelected": "{0} избрани елемента",
|
||||
"MessageItemsUpdated": "{0} обновени елемента",
|
||||
"MessageJoinUsOn": "Присъединете се към нас",
|
||||
"MessageLoading": "Зарежда...",
|
||||
"MessageLoadingFolders": "Зареждане на Папки...",
|
||||
@ -778,6 +837,7 @@
|
||||
"MessageNoCollections": "Няма колекции",
|
||||
"MessageNoCoversFound": "Не са намерени корици",
|
||||
"MessageNoDescription": "Няма описание",
|
||||
"MessageNoDevices": "Няма устройства",
|
||||
"MessageNoDownloadsInProgress": "Няма изтегляния в прогрес",
|
||||
"MessageNoDownloadsQueued": "Няма изтегляния в опашка",
|
||||
"MessageNoEpisodeMatchesFound": "Няма намерени съвпадения за епизоди",
|
||||
@ -791,6 +851,7 @@
|
||||
"MessageNoLogs": "Няма логове",
|
||||
"MessageNoMediaProgress": "Няма прогрес на медията",
|
||||
"MessageNoNotifications": "Няма известия",
|
||||
"MessageNoPodcastFeed": "Невалиден подкаст: Няма канал",
|
||||
"MessageNoPodcastsFound": "Няма намерени подкасти",
|
||||
"MessageNoResults": "Няма резултати",
|
||||
"MessageNoSearchResultsFor": "Няма резултати за \"{0}\"",
|
||||
@ -799,13 +860,17 @@
|
||||
"MessageNoTasksRunning": "Няма вършещи се задачи",
|
||||
"MessageNoUpdatesWereNecessary": "Няма нужда от обновяване",
|
||||
"MessageNoUserPlaylists": "Нямате създадени плейлисти",
|
||||
"MessageNoUserPlaylistsHelp": "Плейлистите за частни. Само създалият ги потребител ще може да ги вижда.",
|
||||
"MessageNotYetImplemented": "Още не е изпълнено",
|
||||
"MessageOr": "или",
|
||||
"MessagePauseChapter": "Пауза на глава",
|
||||
"MessagePlayChapter": "Пусни налчалото на глава",
|
||||
"MessagePlaylistCreateFromCollection": "Създай плейлист от колекция",
|
||||
"MessagePleaseWait": "Моля изчакайте...",
|
||||
"MessagePodcastHasNoRSSFeedForMatching": "Подкастът няма URL адрес на RSS feed за използване за съпоставяне",
|
||||
"MessagePodcastSearchField": "Въведи какво да търся или RSS емисия адрес",
|
||||
"MessageQuickEmbedInProgress": "Бързото вграждане е в процес на изпълнение",
|
||||
"MessageQuickEmbedQueue": "Поставено в опашката за бързо вграждане ({0} в опашката)",
|
||||
"MessageQuickMatchDescription": "Попълни празните детайли и корици с първия резултат от '{0}'. Не презаписва детайлите, освен ако не е активирана настройката 'Предпочети съвпадащи метаданни' на сървъра.",
|
||||
"MessageRemoveChapter": "Премахни глава",
|
||||
"MessageRemoveEpisodes": "Премахни {0} епизод(и)",
|
||||
@ -815,11 +880,43 @@
|
||||
"MessageResetChaptersConfirm": "Сигурни ли сте, че искате да нулирате главите и да отмените промените, които сте направили?",
|
||||
"MessageRestoreBackupConfirm": "Сигурни ли сте, че искате да възстановите архива създаден на",
|
||||
"MessageRestoreBackupWarning": "Възстановяването на архив ще презапише цялата база данни, намираща се в /config и кориците в /metadata/items & /metadata/authors.<br /><br />Архивите не променят файловете в папките на вашата библиотека. Ако сте активирали настройките на сървъра за съхранение на корици и метаданни в папките на вашата библиотека, те няма да бъдат архивирани или презаписани.<br /><br />Всички клиенти, използващи вашия сървър, ще бъдат автоматично обновени.",
|
||||
"MessageScheduleRunEveryWeekdayAtTime": "Изпълни всеки {0} в {1}",
|
||||
"MessageSearchResultsFor": "Резултати от търсенето за",
|
||||
"MessageSelected": "{0} избрани",
|
||||
"MessageServerCouldNotBeReached": "Сървърът не може да бъде достигнат",
|
||||
"MessageSetChaptersFromTracksDescription": "Задайте глави, като използвате всеки аудио файл като глава и заглавие на главата като име на аудио файла",
|
||||
"MessageShareExpiresIn": "Изтича след {0}",
|
||||
"MessageStartPlaybackAtTime": "Започни възпроизвеждане на \"{0}\" в {1}?",
|
||||
"MessageTaskDownloadingEpisodeDescription": "Изтегляне на епизод \"{0}\"",
|
||||
"MessageTaskEmbeddingMetadata": "Вграждане на метаданни",
|
||||
"MessageTaskEmbeddingMetadataDescription": "Вграждане на метаданни в аудиокнига \"{0}\"",
|
||||
"MessageTaskEncodingM4bDescription": "Кодиране на аудиокнига \"{0}\" в единичен m4b файл",
|
||||
"MessageTaskFailed": "Неуспешно",
|
||||
"MessageTaskFailedToBackupAudioFile": "Неуспешно създаване на разервно копие на аудио файл \"{0}\"",
|
||||
"MessageTaskFailedToCreateCacheDirectory": "Неуспешно създаване на директория за кеширане",
|
||||
"MessageTaskFailedToEmbedMetadataInFile": "Неуспешно вграждане на метаданни във файл \"{0}\"",
|
||||
"MessageTaskFailedToMergeAudioFiles": "Неуспешно сливане на аудио файловете",
|
||||
"MessageTaskFailedToMoveM4bFile": "Неуспешно преместване на m4b файл",
|
||||
"MessageTaskFailedToWriteMetadataFile": "Неуспешно записване на файла за метаданни",
|
||||
"MessageTaskMatchingBooksInLibrary": "Съответстващи книги в библиотека \"{0}\"",
|
||||
"MessageTaskNoFilesToScan": "Няма файлове за сканиране",
|
||||
"MessageTaskOpmlImport": "OPML импортиране",
|
||||
"MessageTaskOpmlImportDescription": "Създаване на подкасти от {0} RSS хранилки",
|
||||
"MessageTaskOpmlImportFeedDescription": "Импортиране на RSS хранилка \"{0}\"",
|
||||
"MessageTaskOpmlImportFeedPodcastDescription": "Създаване на подкаст \"{0}\"",
|
||||
"MessageTaskOpmlImportFeedPodcastExists": "На този път вече съществува подкаст",
|
||||
"MessageTaskOpmlImportFeedPodcastFailed": "Неуспешно създаване на подкаст",
|
||||
"MessageTaskOpmlImportFinished": "Добавени {0} подкаста",
|
||||
"MessageTaskOpmlParseFailed": "Неуспешно анализиране на OPML файла",
|
||||
"MessageTaskOpmlParseFastFail": "Невалиден OPML файл, не беше намерен нито <opml> таг нито <outline> таг",
|
||||
"MessageTaskOpmlParseNoneFound": "Няма намерени канали във OPML файла",
|
||||
"MessageTaskScanItemsAdded": "{0} добавени",
|
||||
"MessageTaskScanItemsMissing": "{0} липсващи",
|
||||
"MessageTaskScanItemsUpdated": "{0} обновени",
|
||||
"MessageTaskScanNoChangesNeeded": "Не са нужни промени",
|
||||
"MessageTaskScanningFileChanges": "Проверка за промени във файловете в \"{0}\"",
|
||||
"MessageTaskScanningLibrary": "Сканиране на \"{0}\" библиотека",
|
||||
"MessageTaskTargetDirectoryNotWritable": "Целевата директория не е достъпна за запис",
|
||||
"MessageThinking": "Мисля...",
|
||||
"MessageUploaderItemFailed": "Неуспешно качване",
|
||||
"MessageUploaderItemSuccess": "Успешно качване!",
|
||||
@ -837,11 +934,18 @@
|
||||
"NoteUploaderFoldersWithMediaFiles": "Папките с медийни файлове ще бъдат обработени като отделни елементи на библиотеката.",
|
||||
"NoteUploaderOnlyAudioFiles": "Ако качвате само аудио файлове, то всеки аудио файл ще бъде обработен като отделна аудиокнига.",
|
||||
"NoteUploaderUnsupportedFiles": "Неподдържаните файлове се игнорират. При избор или пускане на папка, други файлове, които не са в папка на елемент, се игнорират.",
|
||||
"NotificationOnBackupCompletedDescription": "Изпълнява се при завършване на създаване на резервно копие",
|
||||
"NotificationOnBackupFailedDescription": "Изпълнява се при неуспешено създаване на резервно копие",
|
||||
"NotificationOnEpisodeDownloadedDescription": "Изпълнява се при автоматично изтегляне на подкаст епизод",
|
||||
"NotificationOnRSSFeedDisabledDescription": "Изпълнява се, когато автоматичното изтегляне на епизодите е деактивирано, поради твърде много неуспешни опити",
|
||||
"PlaceholderNewCollection": "Ново име на колекцията",
|
||||
"PlaceholderNewFolderPath": "Нов път на папката",
|
||||
"PlaceholderNewPlaylist": "Ново име на плейлиста",
|
||||
"PlaceholderSearch": "Търсене...",
|
||||
"PlaceholderSearchEpisode": "Търсене на Епизоди...",
|
||||
"StatsAuthorsAdded": "добаврени автори",
|
||||
"StatsBooksAdded": "добавени книги",
|
||||
"StatsBooksFinished": "завършени книги",
|
||||
"ToastAccountUpdateSuccess": "Успешно обновяване на акаунта",
|
||||
"ToastAuthorImageRemoveSuccess": "Авторската снимка е премахната",
|
||||
"ToastAuthorUpdateMerged": "Обновяване на автора сливано",
|
||||
|
||||
@ -199,6 +199,7 @@
|
||||
"HeaderSettingsExperimental": "Experimentální funkce",
|
||||
"HeaderSettingsGeneral": "Obecné",
|
||||
"HeaderSettingsScanner": "Skener",
|
||||
"HeaderSettingsSecurity": "Zabezpečení",
|
||||
"HeaderSettingsWebClient": "Webový klient",
|
||||
"HeaderSleepTimer": "Časovač vypnutí",
|
||||
"HeaderStatsLargestItems": "Největší položky",
|
||||
@ -293,6 +294,7 @@
|
||||
"LabelContinueListening": "Pokračovat v poslechu",
|
||||
"LabelContinueReading": "Pokračovat ve čtení",
|
||||
"LabelContinueSeries": "Pokračovat v sérii",
|
||||
"LabelCorsAllowed": "Povolené CORS Origins",
|
||||
"LabelCover": "Obálka",
|
||||
"LabelCoverImageURL": "URL obrázku obálky",
|
||||
"LabelCoverProvider": "Poskytovatel obálky",
|
||||
@ -418,6 +420,7 @@
|
||||
"LabelLanguages": "Jazyky",
|
||||
"LabelLastBookAdded": "Poslední kniha přidána",
|
||||
"LabelLastBookUpdated": "Poslední kniha aktualizována",
|
||||
"LabelLastProgressDate": "Poslední pokrok: {0}",
|
||||
"LabelLastSeen": "Naposledy viděno",
|
||||
"LabelLastTime": "Naposledy",
|
||||
"LabelLastUpdate": "Poslední aktualizace",
|
||||
@ -430,6 +433,7 @@
|
||||
"LabelLibraryFilterSublistEmpty": "Žádné {0}",
|
||||
"LabelLibraryItem": "Položka knihovny",
|
||||
"LabelLibraryName": "Název knihovny",
|
||||
"LabelLibrarySortByProgress": "Aktualizace pokroku",
|
||||
"LabelLimit": "Omezit",
|
||||
"LabelLineSpacing": "Řádkování",
|
||||
"LabelListenAgain": "Poslouchat znovu",
|
||||
@ -438,6 +442,7 @@
|
||||
"LabelLogLevelWarn": "Varovat",
|
||||
"LabelLookForNewEpisodesAfterDate": "Hledat nové epizody po tomto datu",
|
||||
"LabelLowestPriority": "Nejnižší priorita",
|
||||
"LabelMatchConfidence": "Jistota",
|
||||
"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í.",
|
||||
@ -801,6 +806,8 @@
|
||||
"MessageFeedURLWillBe": "URL zdroje bude {0}",
|
||||
"MessageFetching": "Načítání...",
|
||||
"MessageForceReScanDescription": "znovu prohledá všechny soubory jako při novém skenování. ID3 tagy zvukových souborů OPF soubory a textové soubory budou skenovány jako nové.",
|
||||
"MessageHeatmapListeningTimeTooltip": "<strong>{0} poslechnuto</strong> na {1}",
|
||||
"MessageHeatmapNoListeningSessions": "Žádné relace poslouchání na {0}",
|
||||
"MessageImportantNotice": "Důležité upozornění!",
|
||||
"MessageInsertChapterBelow": "Vložit kapitolu níže",
|
||||
"MessageInvalidAsin": "Neplatný ASIN",
|
||||
@ -1028,6 +1035,7 @@
|
||||
"ToastInvalidImageUrl": "Neplatná URL obrázku",
|
||||
"ToastInvalidMaxEpisodesToDownload": "Neplatný maximální počet epizod ke stažení",
|
||||
"ToastInvalidUrl": "Neplatná URL",
|
||||
"ToastInvalidUrls": "Alespoň jedna URL je neplatná",
|
||||
"ToastItemCoverUpdateSuccess": "Obálka předmětu byl aktualizována",
|
||||
"ToastItemDeletedFailed": "Smazání položky selhalo",
|
||||
"ToastItemDeletedSuccess": "Položka smazána",
|
||||
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "Hörbuch-Dateiverwaltungswerkzeuge",
|
||||
"HeaderAuthentication": "Authentifizierung",
|
||||
"HeaderBackups": "Sicherungen",
|
||||
"HeaderBulkChapterModal": "Mehrere Kapitel hinzufügen",
|
||||
"HeaderChangePassword": "Passwort ändern",
|
||||
"HeaderChapters": "Kapitel",
|
||||
"HeaderChooseAFolder": "Wähle einen Ordner",
|
||||
@ -308,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Löschen von der Festplatte + Datenbank (deaktivieren um nur aus der Datenbank zu entfernen)",
|
||||
"LabelDescription": "Beschreibung",
|
||||
"LabelDeselectAll": "Alles abwählen",
|
||||
"LabelDetectedPattern": "Erkanntes Muster:",
|
||||
"LabelDevice": "Gerät",
|
||||
"LabelDeviceInfo": "Geräteinformationen",
|
||||
"LabelDeviceIsAvailableTo": "Dem Gerät ist es möglich zu ...",
|
||||
@ -472,6 +474,7 @@
|
||||
"LabelNewestAuthors": "Neueste Autoren",
|
||||
"LabelNewestEpisodes": "Neueste Episoden",
|
||||
"LabelNextBackupDate": "Nächstes Sicherungsdatum",
|
||||
"LabelNextChapters": "Das nächste Kapitel ist:",
|
||||
"LabelNextScheduledRun": "Nächster planmäßiger Durchlauf",
|
||||
"LabelNoApiKeys": "Keine API-Schlüssel vorhanden",
|
||||
"LabelNoCustomMetadataProviders": "Keine benutzerdefinierten Metadata Anbieter",
|
||||
@ -489,6 +492,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Maximale Größe der Warteschlange für die Benachrichtigungsereignisse",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Es wird nur 1 Ereignis pro Sekunde ausgelöst. Ereignisse werden ignoriert, wenn die Warteschlange die maximale Größe erreicht hat. Dies verhindert Benachrichtigungsspamming.",
|
||||
"LabelNumberOfBooks": "Anzahl der Hörbücher",
|
||||
"LabelNumberOfChapters": "Anzahl an Kapiteln:",
|
||||
"LabelNumberOfEpisodes": "Anzahl der Episoden",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Name des OpenID-Claims, der erweiterte Berechtigungen für Benutzeraktionen innerhalb der Anwendung enthält, die auf Nicht-Admin-Rollen angewendet werden (<b>wenn konfiguriert</b>). Wenn der Claim in der Antwort fehlt, wird der Zugang zu ABS verweigert. Fehlt eine einzelne Option, wird sie als <code>false</code> behandelt. Stelle sicher, dass der Claim des Identitätsanbieters der erwarteten Struktur entspricht:",
|
||||
"LabelOpenIDClaims": "Lass die folgenden Optionen leer, um die erweiterte Zuweisung von Gruppen und Berechtigungen zu deaktivieren und automatisch die 'User'-Gruppe zuzuweisen.",
|
||||
@ -728,7 +732,7 @@
|
||||
"LabelYourProgress": "Fortschritt",
|
||||
"MessageAddToPlayerQueue": "Zur Abspielwarteliste hinzufügen",
|
||||
"MessageAppriseDescription": "Um diese Funktion nutzen zu können, musst du eine Instanz von <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> laufen haben oder eine API verwenden welche dieselbe Anfragen bearbeiten kann. <br />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 <code>http://192.168.1.1:8337</code> läuft, würdest du <code>http://192.168.1.1:8337/notify</code> eingeben.",
|
||||
"MessageAsinCheck": "Stellen Sie sicher, dass Sie die ASIN aus der richtigen Audible Region verwenden, nicht Amazon.",
|
||||
"MessageAsinCheck": "Stelle sicher, dass die ASIN aus der richtigen Audible Region verwendet wird, nicht Amazon.",
|
||||
"MessageAuthenticationLegacyTokenWarning": "Alte API tokens werden in Zukunft entfernt. Benutze stattdessen <a href=\"/config/api-keys\">API Keys</a>.",
|
||||
"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.",
|
||||
@ -745,6 +749,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "Keine Ergebnisse für Filter \"{0}: {1}\"",
|
||||
"MessageBookshelfNoResultsForQuery": "Keine Ergebnisse für die Abfrage",
|
||||
"MessageBookshelfNoSeries": "Keine Serien vorhanden",
|
||||
"MessageBulkChapterPattern": "Wie viele Kapitel mit diesem Nummerierungs-Muster sollen hinzugefügt werden?",
|
||||
"MessageChapterEndIsAfter": "Ungültige Kapitelendzeit: Kapitelende > Mediumende (Kapitelende liegt nach dem Ende des Mediums)",
|
||||
"MessageChapterErrorFirstNotZero": "Ungültige Kapitelstartzeit: Das erste Kapitel muss bei 0 beginnen",
|
||||
"MessageChapterErrorStartGteDuration": "Ungültige Kapitelstartzeit: Kapitelanfang > Mediumlänge (Kapitelanfang liegt zeitlich nach dem Ende des Mediums -> Lösung: Kapitelanfang < Mediumlänge)",
|
||||
@ -807,6 +812,7 @@
|
||||
"MessageFeedURLWillBe": "Feed-URL wird {0} sein",
|
||||
"MessageFetching": "Wird abgerufen …",
|
||||
"MessageForceReScanDescription": "Durchsucht alle Dateien erneut, wie bei einem frischen Scan. ID3-Tags von Audiodateien, OPF-Dateien und Textdateien werden neu durchsucht.",
|
||||
"MessageHeatmapListeningTimeTooltip": "<strong>{0} </strong> auf {1} gehört",
|
||||
"MessageHeatmapNoListeningSessions": "Keine Hörsitzungen am {0}",
|
||||
"MessageImportantNotice": "Wichtiger Hinweis!",
|
||||
"MessageInsertChapterBelow": "Kapitel unten einfügen",
|
||||
@ -947,6 +953,7 @@
|
||||
"NotificationOnRSSFeedDisabledDescription": "Wird ausgeführt wenn automatische Downloads von Episoden wegen zu vielen fehlgeschlagenen Versuchen deaktiviert sind",
|
||||
"NotificationOnRSSFeedFailedDescription": "Wird ausgelöst, wenn die RSS-Feed-Anforderung für einen automatischen Episoden-Download fehlschlägt",
|
||||
"NotificationOnTestDescription": "Wird ausgeführt wenn das Benachrichtigungssystem getestet wird",
|
||||
"PlaceholderBulkChapterInput": "Kapitelbezeichnung eingeben oder Nummerierung verwenden (z.B. 'Episode 1', 'Kapitel 10', '1.')",
|
||||
"PlaceholderNewCollection": "Neuer Sammlungsname",
|
||||
"PlaceholderNewFolderPath": "Neuer Ordnerpfad",
|
||||
"PlaceholderNewPlaylist": "Neuer Wiedergabelistenname",
|
||||
@ -1000,11 +1007,15 @@
|
||||
"ToastBookmarkCreateFailed": "Lesezeichen konnte nicht erstellt werden",
|
||||
"ToastBookmarkCreateSuccess": "Lesezeichen hinzugefügt",
|
||||
"ToastBookmarkRemoveSuccess": "Lesezeichen entfernt",
|
||||
"ToastBulkChapterInvalidCount": "Gebe eine Zahl zwischen 1 und 150 ein",
|
||||
"ToastCachePurgeFailed": "Cache leeren fehlgeschlagen",
|
||||
"ToastCachePurgeSuccess": "Cache geleert",
|
||||
"ToastChapterLocked": "Kapitel ist freigegeben.",
|
||||
"ToastChapterStartTimeAdjusted": "Kapitelbeginn um {0} Sekunden angepasst",
|
||||
"ToastChaptersAllLocked": "Alle Kapitel sind gesperrt. Gebe einige Kapitel frei um die Zeiten anzupassen.",
|
||||
"ToastChaptersHaveErrors": "Kapitel sind fehlerhaft",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Die Verschiebung ist nicht möglich, da die Startzeit des letzten Kapitels über die Gesamtdauer dieses Hörbuchs hinausgehen würde.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Ungültige Höhe der Verschiebung. Das erste Kapitel hätte eine Länge von Null oder eine negative Länge und würde vom zweiten Kapitel überschrieben werden. Erhöhen Sie die Startdauer des zweiten Kapitels.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Ungültige Höhe der Verschiebung. Das erste Kapitel hätte eine Länge von Null oder eine negative Länge und würde vom zweiten Kapitel überschrieben werden. Erhöhe die Startdauer des zweiten Kapitels.",
|
||||
"ToastChaptersMustHaveTitles": "Kapitel benötigen eindeutige Namen",
|
||||
"ToastChaptersRemoved": "Kapitel entfernt",
|
||||
"ToastChaptersUpdated": "Kapitel aktualisiert",
|
||||
@ -1035,7 +1046,7 @@
|
||||
"ToastInvalidImageUrl": "Ungültiger Bild URL",
|
||||
"ToastInvalidMaxEpisodesToDownload": "Ungültige Max. Anzahl an Episoden zum Herunterladen",
|
||||
"ToastInvalidUrl": "Ungültiger URL",
|
||||
"ToastInvalidUrls": "Eine oder mehrere URLs sind in einem falschen Format",
|
||||
"ToastInvalidUrls": "Eine oder mehrere URLs sind ungültig",
|
||||
"ToastItemCoverUpdateSuccess": "Titelbild aktualisiert",
|
||||
"ToastItemDeletedFailed": "Fehler beim löschen des Artikels",
|
||||
"ToastItemDeletedSuccess": "Artikel gelöscht",
|
||||
@ -1135,5 +1146,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "Passwort erfolgreich verändert",
|
||||
"ToastUserPasswordMismatch": "Passwörter stimmen nicht überein",
|
||||
"ToastUserPasswordMustChange": "Neues Passwort muss sich von altem Passwort unterscheiden",
|
||||
"ToastUserRootRequireName": "Root Benutzername muss angegeben werden"
|
||||
"ToastUserRootRequireName": "Root Benutzername muss angegeben werden",
|
||||
"TooltipAddChapters": "Kapitel hinzufügen",
|
||||
"TooltipAddOneSecond": "1 Sekunde hinzufügen",
|
||||
"TooltipAdjustChapterStart": "Klicke um die Startzeit anzupassen",
|
||||
"TooltipLockAllChapters": "Alle Kapitel sperren",
|
||||
"TooltipLockChapter": "Kapitel sperren (Shift+Klick für mehrere)",
|
||||
"TooltipSubtractOneSecond": "1 Sekunde abziehen",
|
||||
"TooltipUnlockAllChapters": "Alle Kapitel freigeben",
|
||||
"TooltipUnlockChapter": "Kapitel freigeben (Shift+Klick für mehrere)"
|
||||
}
|
||||
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "Audiobook File Management Tools",
|
||||
"HeaderAuthentication": "Authentication",
|
||||
"HeaderBackups": "Backups",
|
||||
"HeaderBulkChapterModal": "Add Multiple Chapters",
|
||||
"HeaderChangePassword": "Change Password",
|
||||
"HeaderChapters": "Chapters",
|
||||
"HeaderChooseAFolder": "Choose a Folder",
|
||||
@ -308,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Delete from file system (uncheck to only remove from database)",
|
||||
"LabelDescription": "Description",
|
||||
"LabelDeselectAll": "Deselect All",
|
||||
"LabelDetectedPattern": "Detected pattern:",
|
||||
"LabelDevice": "Device",
|
||||
"LabelDeviceInfo": "Device Info",
|
||||
"LabelDeviceIsAvailableTo": "Device is available to...",
|
||||
@ -376,6 +378,7 @@
|
||||
"LabelFilterByUser": "Filter by User",
|
||||
"LabelFindEpisodes": "Find Episodes",
|
||||
"LabelFinished": "Finished",
|
||||
"LabelFinishedDate": "Finished {0}",
|
||||
"LabelFolder": "Folder",
|
||||
"LabelFolders": "Folders",
|
||||
"LabelFontBold": "Bold",
|
||||
@ -433,7 +436,9 @@
|
||||
"LabelLibraryFilterSublistEmpty": "No {0}",
|
||||
"LabelLibraryItem": "Library Item",
|
||||
"LabelLibraryName": "Library Name",
|
||||
"LabelLibrarySortByProgress": "Progress Updated",
|
||||
"LabelLibrarySortByProgress": "Progress: Last Updated",
|
||||
"LabelLibrarySortByProgressFinished": "Progress: Finished",
|
||||
"LabelLibrarySortByProgressStarted": "Progress: Started",
|
||||
"LabelLimit": "Limit",
|
||||
"LabelLineSpacing": "Line spacing",
|
||||
"LabelListenAgain": "Listen Again",
|
||||
@ -472,6 +477,7 @@
|
||||
"LabelNewestAuthors": "Newest Authors",
|
||||
"LabelNewestEpisodes": "Newest Episodes",
|
||||
"LabelNextBackupDate": "Next backup date",
|
||||
"LabelNextChapters": "Next chapters will be:",
|
||||
"LabelNextScheduledRun": "Next scheduled run",
|
||||
"LabelNoApiKeys": "No API keys",
|
||||
"LabelNoCustomMetadataProviders": "No custom metadata providers",
|
||||
@ -489,6 +495,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Max queue size for notification events",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Events are limited to firing 1 per second. Events will be ignored if the queue is at max size. This prevents notification spamming.",
|
||||
"LabelNumberOfBooks": "Number of Books",
|
||||
"LabelNumberOfChapters": "Number of chapters:",
|
||||
"LabelNumberOfEpisodes": "# of Episodes",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Name of the OpenID claim that contains advanced permissions for user actions within the application which will apply to non-admin roles (<b>if configured</b>). If the claim is missing from the response, access to ABS will be denied. If a single option is missing, it will be treated as <code>false</code>. Ensure the identity provider's claim matches the expected structure:",
|
||||
"LabelOpenIDClaims": "Leave the following options empty to disable advanced group and permissions assignment, automatically assigning 'User' group then.",
|
||||
@ -631,6 +638,7 @@
|
||||
"LabelStartTime": "Start Time",
|
||||
"LabelStarted": "Started",
|
||||
"LabelStartedAt": "Started At",
|
||||
"LabelStartedDate": "Started {0}",
|
||||
"LabelStatsAudioTracks": "Audio Tracks",
|
||||
"LabelStatsAuthors": "Authors",
|
||||
"LabelStatsBestDay": "Best Day",
|
||||
@ -745,6 +753,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "No results for filter \"{0}: {1}\"",
|
||||
"MessageBookshelfNoResultsForQuery": "No results for query",
|
||||
"MessageBookshelfNoSeries": "You have no series",
|
||||
"MessageBulkChapterPattern": "How many chapters would you like to add with this numbering pattern?",
|
||||
"MessageChapterEndIsAfter": "Chapter end is after the end of your audiobook",
|
||||
"MessageChapterErrorFirstNotZero": "First chapter must start at 0",
|
||||
"MessageChapterErrorStartGteDuration": "Invalid start time must be less than audiobook duration",
|
||||
@ -948,6 +957,7 @@
|
||||
"NotificationOnRSSFeedDisabledDescription": "Triggered when automatic episode downloads are disabled due to too many failed attempts",
|
||||
"NotificationOnRSSFeedFailedDescription": "Triggered when the RSS feed request fails for an automatic episode download",
|
||||
"NotificationOnTestDescription": "Event for testing the notification system",
|
||||
"PlaceholderBulkChapterInput": "Enter chapter title or use numbering (e.g., 'Episode 1', 'Chapter 10', '1.')",
|
||||
"PlaceholderNewCollection": "New collection name",
|
||||
"PlaceholderNewFolderPath": "New folder path",
|
||||
"PlaceholderNewPlaylist": "New playlist name",
|
||||
@ -1001,8 +1011,12 @@
|
||||
"ToastBookmarkCreateFailed": "Failed to create bookmark",
|
||||
"ToastBookmarkCreateSuccess": "Bookmark added",
|
||||
"ToastBookmarkRemoveSuccess": "Bookmark removed",
|
||||
"ToastBulkChapterInvalidCount": "Enter a number between 1 and 150",
|
||||
"ToastCachePurgeFailed": "Failed to purge cache",
|
||||
"ToastCachePurgeSuccess": "Cache purged successfully",
|
||||
"ToastChapterLocked": "Chapter is locked.",
|
||||
"ToastChapterStartTimeAdjusted": "Chapter start time adjusted by {0} seconds",
|
||||
"ToastChaptersAllLocked": "All chapters are locked. Unlock some chapters to shift their times.",
|
||||
"ToastChaptersHaveErrors": "Chapters have errors",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Invalid shift amount. The last chapter start time would extend beyond the duration of this audiobook.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Invalid shift amount. The first chapter would have zero or negative length and would be overwritten by the second chapter. Increase the start duration of second chapter.",
|
||||
@ -1086,6 +1100,7 @@
|
||||
"ToastPlaylistUpdateSuccess": "Playlist updated",
|
||||
"ToastPodcastCreateFailed": "Failed to create podcast",
|
||||
"ToastPodcastCreateSuccess": "Podcast created successfully",
|
||||
"ToastPodcastEpisodeUpdated": "Episode updated",
|
||||
"ToastPodcastGetFeedFailed": "Failed to get podcast feed",
|
||||
"ToastPodcastNoEpisodesInFeed": "No episodes found in RSS feed",
|
||||
"ToastPodcastNoRssFeed": "Podcast does not have an RSS feed",
|
||||
@ -1136,5 +1151,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "Password changed successfully",
|
||||
"ToastUserPasswordMismatch": "Passwords do not match",
|
||||
"ToastUserPasswordMustChange": "New password cannot match old password",
|
||||
"ToastUserRootRequireName": "Must enter a root username"
|
||||
"ToastUserRootRequireName": "Must enter a root username",
|
||||
"TooltipAddChapters": "Add chapter(s)",
|
||||
"TooltipAddOneSecond": "Add 1 second",
|
||||
"TooltipAdjustChapterStart": "Click to adjust start time",
|
||||
"TooltipLockAllChapters": "Lock all chapters",
|
||||
"TooltipLockChapter": "Lock chapter (Shift+click for range)",
|
||||
"TooltipSubtractOneSecond": "Subtract 1 second",
|
||||
"TooltipUnlockAllChapters": "Unlock all chapters",
|
||||
"TooltipUnlockChapter": "Unlock chapter (Shift+click for range)"
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
{
|
||||
"ButtonAdd": "Añadir",
|
||||
"ButtonAddApiKey": "Añadir clave API",
|
||||
"ButtonAddChapters": "Añadir capítulos",
|
||||
"ButtonAddDevice": "Añadir dispositivo",
|
||||
"ButtonAddLibrary": "Añadir biblioteca",
|
||||
@ -20,6 +21,7 @@
|
||||
"ButtonChooseAFolder": "Elegir una carpeta",
|
||||
"ButtonChooseFiles": "Elegir archivos",
|
||||
"ButtonClearFilter": "Quitar filtros",
|
||||
"ButtonClose": "Cerrar",
|
||||
"ButtonCloseFeed": "Cerrar suministro",
|
||||
"ButtonCloseSession": "Cerrar la sesión abierta",
|
||||
"ButtonCollections": "Colecciones",
|
||||
@ -119,11 +121,13 @@
|
||||
"HeaderAccount": "Cuenta",
|
||||
"HeaderAddCustomMetadataProvider": "Añadir proveedor de metadatos personalizado",
|
||||
"HeaderAdvanced": "Avanzado",
|
||||
"HeaderApiKeys": "Claves API",
|
||||
"HeaderAppriseNotificationSettings": "Configuración de notificaciones de Apprise",
|
||||
"HeaderAudioTracks": "Pistas de audio",
|
||||
"HeaderAudiobookTools": "Herramientas de Gestión de Archivos de Audiolibro",
|
||||
"HeaderAuthentication": "Autenticación",
|
||||
"HeaderBackups": "Respaldos",
|
||||
"HeaderBulkChapterModal": "Añadir Múltiples Capítulos",
|
||||
"HeaderChangePassword": "Cambiar contraseña",
|
||||
"HeaderChapters": "Capítulos",
|
||||
"HeaderChooseAFolder": "Escoger una Carpeta",
|
||||
@ -162,6 +166,7 @@
|
||||
"HeaderMetadataOrderOfPrecedence": "Orden de precedencia de metadatos",
|
||||
"HeaderMetadataToEmbed": "Metadatos para Insertar",
|
||||
"HeaderNewAccount": "Cuenta nueva",
|
||||
"HeaderNewApiKey": "Nueva clave API",
|
||||
"HeaderNewLibrary": "Biblioteca nueva",
|
||||
"HeaderNotificationCreate": "Crear notificación",
|
||||
"HeaderNotificationUpdate": "Notificación de actualización",
|
||||
@ -195,6 +200,7 @@
|
||||
"HeaderSettingsExperimental": "Funcionalidades experimentales",
|
||||
"HeaderSettingsGeneral": "Generales",
|
||||
"HeaderSettingsScanner": "Escáner",
|
||||
"HeaderSettingsSecurity": "Seguridad",
|
||||
"HeaderSettingsWebClient": "Cliente web",
|
||||
"HeaderSleepTimer": "Temporizador de apagado",
|
||||
"HeaderStatsLargestItems": "Elementos más grandes",
|
||||
@ -206,6 +212,7 @@
|
||||
"HeaderTableOfContents": "Sumario",
|
||||
"HeaderTools": "Herramientas",
|
||||
"HeaderUpdateAccount": "Actualizar cuenta",
|
||||
"HeaderUpdateApiKey": "Actualizar clave API",
|
||||
"HeaderUpdateAuthor": "Actualizar autor",
|
||||
"HeaderUpdateDetails": "Actualizar detalles",
|
||||
"HeaderUpdateLibrary": "Actualizar biblioteca",
|
||||
@ -297,6 +304,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Eliminar del sistema de archivos (desmarque para quitar de la base de datos solamente)",
|
||||
"LabelDescription": "Descripción",
|
||||
"LabelDeselectAll": "Deseleccionar Todos",
|
||||
"LabelDetectedPattern": "Patrón detectado:",
|
||||
"LabelDevice": "Dispositivo",
|
||||
"LabelDeviceInfo": "Información del dispositivo",
|
||||
"LabelDeviceIsAvailableTo": "El dispositivo está disponible para...",
|
||||
@ -454,6 +462,7 @@
|
||||
"LabelNewestAuthors": "Autores más nuevos",
|
||||
"LabelNewestEpisodes": "Episodios más nuevos",
|
||||
"LabelNextBackupDate": "Fecha del siguiente respaldo",
|
||||
"LabelNextChapters": "Los próximos capítulos serán:",
|
||||
"LabelNextScheduledRun": "Próxima ejecución programada",
|
||||
"LabelNoCustomMetadataProviders": "Sin proveedores de metadatos personalizados",
|
||||
"LabelNoEpisodesSelected": "Ningún Episodio Seleccionado",
|
||||
@ -470,6 +479,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Tamaño máximo de la cola de notificaciones",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Las notificaciones están limitadas a 1 por segundo. Las notificaciones serán ignoradas si llegan al numero máximo de cola para prevenir spam de eventos.",
|
||||
"LabelNumberOfBooks": "Número de libros",
|
||||
"LabelNumberOfChapters": "Número de capítulos:",
|
||||
"LabelNumberOfEpisodes": "N.º de episodios",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Nombre de la notificación de OpenID que contiene permisos avanzados para acciones de usuario dentro de la aplicación que se aplicarán a roles que no sean de administrador (<b>si están configurados</b>). Si el reclamo no aparece en la respuesta, se denegará el acceso a ABS. Si falta una sola opción, se tratará como <code>falsa</code>. Asegúrese de que la notificación del proveedor de identidades coincida con la estructura esperada:",
|
||||
"LabelOpenIDClaims": "Deje las siguientes opciones vacías para desactivar la asignación avanzada de grupos y permisos, lo que asignaría de manera automática al grupo «Usuario».",
|
||||
@ -722,6 +732,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "El filtro «{0}: {1}» no produjo ningún resultado",
|
||||
"MessageBookshelfNoResultsForQuery": "No hay resultados para la consulta",
|
||||
"MessageBookshelfNoSeries": "No tiene ninguna serie",
|
||||
"MessageBulkChapterPattern": "¿Cuántos capítulos desea añadir con este patrón de numeración?",
|
||||
"MessageChapterEndIsAfter": "El final del capítulo es después del final de tu audiolibro",
|
||||
"MessageChapterErrorFirstNotZero": "El primer capítulo debe iniciar en 0",
|
||||
"MessageChapterErrorStartGteDuration": "El tiempo de inicio no es válido: debe ser inferior a la duración del audiolibro",
|
||||
@ -919,6 +930,7 @@
|
||||
"NotificationOnBackupFailedDescription": "Se activa cuando falla una copia de seguridad",
|
||||
"NotificationOnEpisodeDownloadedDescription": "Se activa cuando se descarga automáticamente un episodio de un podcast",
|
||||
"NotificationOnTestDescription": "Evento para probar el sistema de notificaciones",
|
||||
"PlaceholderBulkChapterInput": "Ingrese título de capítulo o use numeración (ej. 'Episodio 1', 'Capítulo 10', '1.')",
|
||||
"PlaceholderNewCollection": "Nuevo nombre de la colección",
|
||||
"PlaceholderNewFolderPath": "Nueva ruta de carpeta",
|
||||
"PlaceholderNewPlaylist": "Nuevo nombre de la lista de reproducción",
|
||||
@ -972,8 +984,10 @@
|
||||
"ToastBookmarkCreateFailed": "No se pudo crear el marcador",
|
||||
"ToastBookmarkCreateSuccess": "Marcador añadido",
|
||||
"ToastBookmarkRemoveSuccess": "Marcador eliminado",
|
||||
"ToastBulkChapterInvalidCount": "Por favor ingrese un número válido entre 1 y 150",
|
||||
"ToastCachePurgeFailed": "No se pudo purgar la antememoria",
|
||||
"ToastCachePurgeSuccess": "Se purgó la antememoria correctamente",
|
||||
"ToastChaptersAllLocked": "Todos los capítulos están bloqueados. Desbloquee algunos capítulos para cambiar sus tiempos.",
|
||||
"ToastChaptersHaveErrors": "Los capítulos tienen errores",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Cantidad de desplazamiento no válida. La hora de inicio del último capítulo se extendería más allá de la duración de este audiolibro.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Cantidad de desplazamiento no válida. El primer capítulo tendría una duración cero o negativa y lo sobrescribiría el segundo capítulo. Aumente la duración inicial del segundo capítulo.",
|
||||
@ -1103,5 +1117,12 @@
|
||||
"ToastUserPasswordChangeSuccess": "Contraseña modificada correctamente",
|
||||
"ToastUserPasswordMismatch": "No coinciden las contraseñas",
|
||||
"ToastUserPasswordMustChange": "La nueva contraseña no puede ser igual que la anterior",
|
||||
"ToastUserRootRequireName": "Debe introducir un nombre de usuario administrativo"
|
||||
"ToastUserRootRequireName": "Debe introducir un nombre de usuario administrativo",
|
||||
"TooltipAddChapters": "Añadir capítulo(s)",
|
||||
"TooltipAddOneSecond": "Añadir 1 segundo",
|
||||
"TooltipLockAllChapters": "Bloquear todos los capítulos",
|
||||
"TooltipLockChapter": "Bloquear capítulo (Mayús+clic para rango)",
|
||||
"TooltipSubtractOneSecond": "Restar 1 segundo",
|
||||
"TooltipUnlockAllChapters": "Desbloquear todos los capítulos",
|
||||
"TooltipUnlockChapter": "Desbloquear capítulo (Mayús+clic para rango)"
|
||||
}
|
||||
|
||||
1
client/strings/eu.json
Normal file
1
client/strings/eu.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "Outils de gestion de fichiers de livres audio",
|
||||
"HeaderAuthentication": "Authentification",
|
||||
"HeaderBackups": "Sauvegardes",
|
||||
"HeaderBulkChapterModal": "Ajouter Plusieurs Chapitres",
|
||||
"HeaderChangePassword": "Modifier le mot de passe",
|
||||
"HeaderChapters": "Chapitres",
|
||||
"HeaderChooseAFolder": "Sélectionner un dossier",
|
||||
@ -308,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Supprimer du système de fichiers (décocher pour ne supprimer que de la base de données)",
|
||||
"LabelDescription": "Description",
|
||||
"LabelDeselectAll": "Tout déselectionner",
|
||||
"LabelDetectedPattern": "Motif détecté :",
|
||||
"LabelDevice": "Appareil",
|
||||
"LabelDeviceInfo": "Détail de l’appareil",
|
||||
"LabelDeviceIsAvailableTo": "L’appareil est disponible pour…",
|
||||
@ -472,6 +474,7 @@
|
||||
"LabelNewestAuthors": "Auteurs récents",
|
||||
"LabelNewestEpisodes": "Épisodes récents",
|
||||
"LabelNextBackupDate": "Date de la prochaine sauvegarde",
|
||||
"LabelNextChapters": "Les prochains chapitres seront :",
|
||||
"LabelNextScheduledRun": "Prochain lancement prévu",
|
||||
"LabelNoApiKeys": "Aucune clé API",
|
||||
"LabelNoCustomMetadataProviders": "Aucun fournisseurs de métadonnées personnalisés",
|
||||
@ -489,6 +492,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Nombres de notifications maximum à mettre en attente",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "La limite de notification est de un évènement par seconde. Les notifications seront ignorées si la file d’attente est à son maximum. Cela empêche un flot trop important.",
|
||||
"LabelNumberOfBooks": "Nombre de livres",
|
||||
"LabelNumberOfChapters": "Nombre de chapitres :",
|
||||
"LabelNumberOfEpisodes": "Nombre d'épisodes",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Nom de la demande OpenID qui contient des autorisations avancées pour les actions de l’utilisateur dans l’application, qui s’appliqueront à des rôles autres que celui d’administrateur (<b>s’il est configuré</b>). Si la demande est absente de la réponse, l’accès à ABS sera refusé. Si une seule option est manquante, elle sera considérée comme <code>false</code>. Assurez-vous que la demande du fournisseur d’identité correspond à la structure attendue :",
|
||||
"LabelOpenIDClaims": "Laissez les options suivantes vides pour désactiver l’attribution avancée de groupes et d’autorisations, en attribuant alors automatiquement le groupe « Utilisateur ».",
|
||||
@ -745,6 +749,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "Aucun résultat pour le filtre « {0} : {1} »",
|
||||
"MessageBookshelfNoResultsForQuery": "Aucun résultat pour la requête",
|
||||
"MessageBookshelfNoSeries": "Vous n’avez aucune série",
|
||||
"MessageBulkChapterPattern": "Combien de chapitres souhaitez-vous ajouter avec ce motif de numérotation ?",
|
||||
"MessageChapterEndIsAfter": "La fin du chapitre se situe après la fin de votre livre audio",
|
||||
"MessageChapterErrorFirstNotZero": "Le premier capitre doit débuter à 0",
|
||||
"MessageChapterErrorStartGteDuration": "Horodatage invalide car il doit débuter avant la fin du livre",
|
||||
@ -948,6 +953,7 @@
|
||||
"NotificationOnRSSFeedDisabledDescription": "Déclenché lorsque les téléchargements automatiques d’épisodes sont désactivés en raison d’un trop grand nombre de tentatives infructueuses",
|
||||
"NotificationOnRSSFeedFailedDescription": "Déclenché lorsque la demande de flux RSS échoue pour un téléchargement automatique d’épisode",
|
||||
"NotificationOnTestDescription": "Événement pour tester le système de notification",
|
||||
"PlaceholderBulkChapterInput": "Entrez le titre du chapitre ou utilisez la numérotation (ex. 'Épisode 1', 'Chapitre 10', '1.')",
|
||||
"PlaceholderNewCollection": "Nom de la nouvelle collection",
|
||||
"PlaceholderNewFolderPath": "Nouveau chemin de dossier",
|
||||
"PlaceholderNewPlaylist": "Nouveau nom de liste de lecture",
|
||||
@ -1001,8 +1007,10 @@
|
||||
"ToastBookmarkCreateFailed": "Échec de la création de signet",
|
||||
"ToastBookmarkCreateSuccess": "Signet ajouté",
|
||||
"ToastBookmarkRemoveSuccess": "Signet supprimé",
|
||||
"ToastBulkChapterInvalidCount": "Veuillez entrer un nombre valide entre 1 et 150",
|
||||
"ToastCachePurgeFailed": "Échec de la purge du cache",
|
||||
"ToastCachePurgeSuccess": "Cache purgé avec succès",
|
||||
"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. L’heure de début du dernier chapitre pourrait dépasser la durée de ce livre audio.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Durée de décalage non valide. Le premier chapitre aurait une longueur nulle ou négative et serait écrasé par le second. Augmentez la durée de début du second chapitre.",
|
||||
@ -1136,5 +1144,12 @@
|
||||
"ToastUserPasswordChangeSuccess": "Mot de passe modifié avec succès",
|
||||
"ToastUserPasswordMismatch": "Les mots de passe ne correspondent pas",
|
||||
"ToastUserPasswordMustChange": "Le nouveau mot de passe ne peut pas être identique à l’ancien",
|
||||
"ToastUserRootRequireName": "Vous devez entrer un nom d’utilisateur root"
|
||||
"ToastUserRootRequireName": "Vous devez entrer un nom d’utilisateur root",
|
||||
"TooltipAddChapters": "Ajouter chapitre(s)",
|
||||
"TooltipAddOneSecond": "Ajouter 1 seconde",
|
||||
"TooltipLockAllChapters": "Verrouiller tous les chapitres",
|
||||
"TooltipLockChapter": "Verrouiller le chapitre (Maj+clic pour plage)",
|
||||
"TooltipSubtractOneSecond": "Soustraire 1 seconde",
|
||||
"TooltipUnlockAllChapters": "Déverrouiller tous les chapitres",
|
||||
"TooltipUnlockChapter": "Déverrouiller le chapitre (Maj+clic pour plage)"
|
||||
}
|
||||
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "Alati za upravljanje datotekama zvučnih knjiga",
|
||||
"HeaderAuthentication": "Provjera autentičnosti",
|
||||
"HeaderBackups": "Sigurnosne kopije",
|
||||
"HeaderBulkChapterModal": "Dodaj više poglavlja",
|
||||
"HeaderChangePassword": "Promjena zaporke",
|
||||
"HeaderChapters": "Poglavlja",
|
||||
"HeaderChooseAFolder": "Odaberi mapu",
|
||||
@ -308,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Izbriši datoteke (uklonite kvačicu ako stavku želite izbrisati samo iz baze podataka)",
|
||||
"LabelDescription": "Opis",
|
||||
"LabelDeselectAll": "Odznači sve",
|
||||
"LabelDetectedPattern": "Prepoznat obrazac:",
|
||||
"LabelDevice": "Uređaj",
|
||||
"LabelDeviceInfo": "O uređaju",
|
||||
"LabelDeviceIsAvailableTo": "Uređaj je dostupan...",
|
||||
@ -472,6 +474,7 @@
|
||||
"LabelNewestAuthors": "Najnoviji autori",
|
||||
"LabelNewestEpisodes": "Najnoviji nastavci",
|
||||
"LabelNextBackupDate": "Sljedeća izrada sigurnosne kopije",
|
||||
"LabelNextChapters": "Sljedeća poglavlja bit će:",
|
||||
"LabelNextScheduledRun": "Sljedeće zakazano izvođenje",
|
||||
"LabelNoApiKeys": "Nema API ključeva",
|
||||
"LabelNoCustomMetadataProviders": "Nema prilagođenih pružatelja meta-podataka",
|
||||
@ -489,6 +492,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Najveći broj događaja za obavijest u redu čekanja",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Događaji se mogu okinuti samo jednom u sekundi. Događaji će se zanemariti ako je red čekanja pun. Ovo sprečava prekomjerno slanje obavijesti.",
|
||||
"LabelNumberOfBooks": "Broj knjiga",
|
||||
"LabelNumberOfChapters": "Broj poglavljâ:",
|
||||
"LabelNumberOfEpisodes": "broj nastavaka",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Naziv OpenID zahtjeva koji sadrži napredna dopuštenja za korisničke radnje u aplikaciji koje će se primijeniti na ne-administratorske uloge (<b>ako su konfigurirane</b>). Ako zahtjev nedostaje u odgovoru, pristup ABS-u neće se odobriti. Ako i jedna opcija nedostaje, smatrat će se da je <code>false</code>. Pripazite da zahtjev pružatelja identiteta uvijek odgovara očekivanoj strukturi:",
|
||||
"LabelOpenIDClaims": "Sljedeće opcije ostavite praznima ako želite onemogućiti napredno dodjeljivanje grupa i dozvola, odnosno ako želite automatski dodijeliti grupu 'korisnik'.",
|
||||
@ -745,6 +749,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "Nema rezultata za filter \"{0}: {1}\"",
|
||||
"MessageBookshelfNoResultsForQuery": "Vaš upit nema rezultata",
|
||||
"MessageBookshelfNoSeries": "Nemate niti jedan serijal",
|
||||
"MessageBulkChapterPattern": "Koliko poglavlja želite dodati s ovim obrascem numeracije?",
|
||||
"MessageChapterEndIsAfter": "Kraj poglavlja je nakon kraja zvučne knjige",
|
||||
"MessageChapterErrorFirstNotZero": "Prvo poglavlje mora započeti u 0",
|
||||
"MessageChapterErrorStartGteDuration": "Netočno vrijeme početka, mora biti manje od trajanja zvučne knjige",
|
||||
@ -948,6 +953,7 @@
|
||||
"NotificationOnRSSFeedDisabledDescription": "Pokreće se kada su automatska preuzimanja nastavaka onemogućena zbog previše neuspjelih pokušaja",
|
||||
"NotificationOnRSSFeedFailedDescription": "Pokreće se u slučaju pogreške pri pokušaju automatskog preuzimanja nastavka s RSS izvora",
|
||||
"NotificationOnTestDescription": "Događaj za testiranje sustava obavijesti",
|
||||
"PlaceholderBulkChapterInput": "Upišite naslov poglavlja ili ga numerirajte (npr. '1. nastavak', 'Poglavlje 10', '1.')",
|
||||
"PlaceholderNewCollection": "Ime nove zbirke",
|
||||
"PlaceholderNewFolderPath": "Nova putanja mape",
|
||||
"PlaceholderNewPlaylist": "Naziv novog popisa za izvođenje",
|
||||
@ -1001,8 +1007,12 @@
|
||||
"ToastBookmarkCreateFailed": "Izrada knjižne oznake nije uspjela",
|
||||
"ToastBookmarkCreateSuccess": "Knjižna oznaka dodana",
|
||||
"ToastBookmarkRemoveSuccess": "Knjižna oznaka uklonjena",
|
||||
"ToastBulkChapterInvalidCount": "Upišite broj od 1 i 150",
|
||||
"ToastCachePurgeFailed": "Čišćenje predmemorije nije uspjelo",
|
||||
"ToastCachePurgeSuccess": "Predmemorija uspješno očišćena",
|
||||
"ToastChapterLocked": "Poglavlje je zaključano.",
|
||||
"ToastChapterStartTimeAdjusted": "Vrijeme početka poglavlja prilagođeno za {0} sekundi",
|
||||
"ToastChaptersAllLocked": "Sva su poglavlja zaključana. Otključajte neka poglavlja za pomicanje njihovog vremena.",
|
||||
"ToastChaptersHaveErrors": "Poglavlja imaju pogreške",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Neispravna vrijednost pomaka. Početak zadnjeg poglavlja bio bi nakon duljine trajanja ove zvučne knjige.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Neispravna vrijednost pomaka. Trajanje prvog poglavlja bilo bi nula ili negativno i drugo poglavlje bi ga prepisalo. Povećajte vrijeme početka drugog poglavlja.",
|
||||
@ -1136,5 +1146,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "Zaporka je uspješno promijenjena",
|
||||
"ToastUserPasswordMismatch": "Zaporke se ne podudaraju",
|
||||
"ToastUserPasswordMustChange": "Nova zaporka ne smije biti jednaka staroj",
|
||||
"ToastUserRootRequireName": "Obavezan je unos korisničkog imena root korisnika"
|
||||
"ToastUserRootRequireName": "Obavezan je unos korisničkog imena root korisnika",
|
||||
"TooltipAddChapters": "Dodavanje poglavlja",
|
||||
"TooltipAddOneSecond": "Dodaj 1 sekundu",
|
||||
"TooltipAdjustChapterStart": "Kliknite za uređivanje početnog vremena",
|
||||
"TooltipLockAllChapters": "Zaključaj sva poglavlja",
|
||||
"TooltipLockChapter": "Zaključaj poglavlje (Shift + klik za raspon)",
|
||||
"TooltipSubtractOneSecond": "Oduzmi 1 sekundu",
|
||||
"TooltipUnlockAllChapters": "Otključaj sva poglavlja",
|
||||
"TooltipUnlockChapter": "Otključaj poglavlje (Shift+klik za raspon)"
|
||||
}
|
||||
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "Hangoskönyv fájlkezelő eszközök",
|
||||
"HeaderAuthentication": "Hitelesítés",
|
||||
"HeaderBackups": "Biztonsági másolatok",
|
||||
"HeaderBulkChapterModal": "Több fejezet hozzáadása",
|
||||
"HeaderChangePassword": "Jelszó megváltoztatása",
|
||||
"HeaderChapters": "Fejezetek",
|
||||
"HeaderChooseAFolder": "Válasszon egy mappát",
|
||||
@ -199,6 +200,7 @@
|
||||
"HeaderSettingsExperimental": "Kísérleti funkciók",
|
||||
"HeaderSettingsGeneral": "Általános",
|
||||
"HeaderSettingsScanner": "Szkenner",
|
||||
"HeaderSettingsSecurity": "Biztonság",
|
||||
"HeaderSettingsWebClient": "Webkliens",
|
||||
"HeaderSleepTimer": "Alvásidőzítő",
|
||||
"HeaderStatsLargestItems": "Legnagyobb elemek",
|
||||
@ -293,6 +295,7 @@
|
||||
"LabelContinueListening": "Hallgatás folytatása",
|
||||
"LabelContinueReading": "Olvasás folytatása",
|
||||
"LabelContinueSeries": "Sorozat folytatása",
|
||||
"LabelCorsAllowed": "Megengedett CORS Originek",
|
||||
"LabelCover": "Borító",
|
||||
"LabelCoverImageURL": "Borítókép URL",
|
||||
"LabelCoverProvider": "Borító Szolgáltató",
|
||||
@ -306,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Törlés a fájlrendszerről (ne jelölje be, ha csak az adatbázisból szeretné eltávolítani)",
|
||||
"LabelDescription": "Leírás",
|
||||
"LabelDeselectAll": "Minden kijelölés megszüntetése",
|
||||
"LabelDetectedPattern": "Észlelt minta:",
|
||||
"LabelDevice": "Eszköz",
|
||||
"LabelDeviceInfo": "Eszköz információ",
|
||||
"LabelDeviceIsAvailableTo": "Eszköz elérhető a következő számára...",
|
||||
@ -470,6 +474,7 @@
|
||||
"LabelNewestAuthors": "A legújabb szerzők",
|
||||
"LabelNewestEpisodes": "Legújabb epizódok",
|
||||
"LabelNextBackupDate": "Következő biztonsági másolat dátuma",
|
||||
"LabelNextChapters": "A következő fejezetek:",
|
||||
"LabelNextScheduledRun": "Következő ütemezett futtatás",
|
||||
"LabelNoApiKeys": "Nincs API kulcs",
|
||||
"LabelNoCustomMetadataProviders": "Nincsenek egyedi metaadat szolgáltatók",
|
||||
@ -487,6 +492,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Maximális értesítési események sorának mérete",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Az események korlátozva vannak, hogy másodpercenként 1-szer történjenek. Ha a sor maximális méretű, akkor az események figyelmen kívül lesznek hagyva. Ez megakadályozza az értesítések spamelését.",
|
||||
"LabelNumberOfBooks": "Könyvek száma",
|
||||
"LabelNumberOfChapters": "Fejezetek száma:",
|
||||
"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 (<b>ha konfigurálva van</b>). 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 <code>false</code>-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.",
|
||||
@ -743,6 +749,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "Nincs eredmény a \"{0}: {1}\" szűrőre",
|
||||
"MessageBookshelfNoResultsForQuery": "Nincs eredmény a lekérdezéshez",
|
||||
"MessageBookshelfNoSeries": "Nincsenek sorozatai",
|
||||
"MessageBulkChapterPattern": "Hány fejezetet szeretne hozzáadni ezzel a számozási mintával?",
|
||||
"MessageChapterEndIsAfter": "A fejezet vége a hangoskönyv végét követi",
|
||||
"MessageChapterErrorFirstNotZero": "Az első fejezetnek 0:00-kor kell kezdődnie",
|
||||
"MessageChapterErrorStartGteDuration": "Érvénytelen kezdési idő, kevesebbnek kell lennie, mint a hangoskönyv időtartama",
|
||||
@ -805,6 +812,8 @@
|
||||
"MessageFeedURLWillBe": "A hírcsatorna URL-je {0} lesz",
|
||||
"MessageFetching": "Lekérdezés...",
|
||||
"MessageForceReScanDescription": "minden fájlt újra szkennel, mint egy friss szkennelés. Az audiofájlok ID3 címkéi, OPF fájlok és szövegfájlok újként lesznek szkennelve.",
|
||||
"MessageHeatmapListeningTimeTooltip": "<strong>{0} hallgatja</strong> ezen {1}",
|
||||
"MessageHeatmapNoListeningSessions": "Nincs hallgatás folyamatban ezen: {0}",
|
||||
"MessageImportantNotice": "Fontos közlemény!",
|
||||
"MessageInsertChapterBelow": "Fejezet beszúrása alulra",
|
||||
"MessageInvalidAsin": "Érvénytelen ASIN",
|
||||
@ -944,6 +953,7 @@
|
||||
"NotificationOnRSSFeedDisabledDescription": "Akkor lép működésbe, ha az automatikus epizódletöltés a túl sok sikertelen próbálkozás miatt letiltásra kerül",
|
||||
"NotificationOnRSSFeedFailedDescription": "Akkor aktiválódik, ha az RSS feed kérés sikertelen az automatikus epizódletöltésnél",
|
||||
"NotificationOnTestDescription": "Esemény az értesítési rendszer teszteléséhez",
|
||||
"PlaceholderBulkChapterInput": "Írja be a fejezet címét vagy használjon számozást (pl. „1. epizód”, „10. fejezet”, „1.”)",
|
||||
"PlaceholderNewCollection": "Új gyűjtemény neve",
|
||||
"PlaceholderNewFolderPath": "Új mappa útvonala",
|
||||
"PlaceholderNewPlaylist": "Új lejátszási lista neve",
|
||||
@ -997,8 +1007,12 @@
|
||||
"ToastBookmarkCreateFailed": "Könyvjelző létrehozása sikertelen",
|
||||
"ToastBookmarkCreateSuccess": "Könyvjelző hozzáadva",
|
||||
"ToastBookmarkRemoveSuccess": "Könyvjelző eltávolítva",
|
||||
"ToastBulkChapterInvalidCount": "Írjon be egy számot 1 és 150 között",
|
||||
"ToastCachePurgeFailed": "A gyorsítótár törlése sikertelen",
|
||||
"ToastCachePurgeSuccess": "A gyorsítótár sikeresen törölve",
|
||||
"ToastChapterLocked": "A fejezet zárolt.",
|
||||
"ToastChapterStartTimeAdjusted": "A fejezet kezdési ideje {0} másodperccel módosítva",
|
||||
"ToastChaptersAllLocked": "Minden fejezet zárolt. Nyisson meg néhány fejezetet, hogy módosítsa azok idejét.",
|
||||
"ToastChaptersHaveErrors": "A fejezetek hibákat tartalmaznak",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Érvénytelen eltolási érték. Az utolsó fejezet kezdési időpontja túlnyúlna a hangoskönyv időtartamán.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Érvénytelen eltolási érték. Az első fejezet hossza nulla vagy negatív lenne, és a második fejezet felülírná. Növelje a második fejezet kezdő időtartamát.",
|
||||
@ -1032,6 +1046,7 @@
|
||||
"ToastInvalidImageUrl": "Érvénytelen a kép URL címe",
|
||||
"ToastInvalidMaxEpisodesToDownload": "A letölthető epizódok száma érvénytelen",
|
||||
"ToastInvalidUrl": "Érvénytelen URL",
|
||||
"ToastInvalidUrls": "Egy vagy több URL érvénytelen",
|
||||
"ToastItemCoverUpdateSuccess": "Elem borítója frissítve",
|
||||
"ToastItemDeletedFailed": "Nem sikerült törölni az elemet",
|
||||
"ToastItemDeletedSuccess": "Elem törölve",
|
||||
@ -1081,6 +1096,7 @@
|
||||
"ToastPlaylistUpdateSuccess": "Lejátszási lista frissítve",
|
||||
"ToastPodcastCreateFailed": "Podcast létrehozása sikertelen",
|
||||
"ToastPodcastCreateSuccess": "A podcast sikeresen létrehozva",
|
||||
"ToastPodcastEpisodeUpdated": "Epizód frissítve",
|
||||
"ToastPodcastGetFeedFailed": "Nem sikerült podcast feedet kapni",
|
||||
"ToastPodcastNoEpisodesInFeed": "Nincsenek epizódok az RSS hírcsatornában",
|
||||
"ToastPodcastNoRssFeed": "A podcastnak nincs RSS-hírcsatornája",
|
||||
@ -1131,5 +1147,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "Jelszó sikeresen megváltoztatva",
|
||||
"ToastUserPasswordMismatch": "A jelszavak nem egyeznek",
|
||||
"ToastUserPasswordMustChange": "Az új jelszó nem egyezik a régi jelszóval",
|
||||
"ToastUserRootRequireName": "Egy root felhasználónevet kell megadnia"
|
||||
"ToastUserRootRequireName": "Egy root felhasználónevet kell megadnia",
|
||||
"TooltipAddChapters": "Fejezet(ek) hozzáadása",
|
||||
"TooltipAddOneSecond": "1 másodperc hozzáadása",
|
||||
"TooltipAdjustChapterStart": "Kattintson a kezdési idő beállításához",
|
||||
"TooltipLockAllChapters": "Az összes fejezet zárolása",
|
||||
"TooltipLockChapter": "Fejezet zárolása (Shift+kattintás a tartományhoz)",
|
||||
"TooltipSubtractOneSecond": "1 másodperc levonása",
|
||||
"TooltipUnlockAllChapters": "Az összes fejezet feloldása",
|
||||
"TooltipUnlockChapter": "Fejezet feloldása (Shift+kattintás a tartományhoz)"
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"ButtonAdd": "Aggiungi",
|
||||
"ButtonAddApiKey": "Aggiungi chiave API",
|
||||
"ButtonAddApiKey": "Aggiungi la chiave API",
|
||||
"ButtonAddChapters": "Aggiungi Capitoli",
|
||||
"ButtonAddDevice": "Aggiungi Dispositivo",
|
||||
"ButtonAddLibrary": "Aggiungi Libreria",
|
||||
@ -121,11 +121,13 @@
|
||||
"HeaderAccount": "Account",
|
||||
"HeaderAddCustomMetadataProvider": "Aggiungi fornitori di metadati personalizzati",
|
||||
"HeaderAdvanced": "Avanzate",
|
||||
"HeaderApiKeys": "Le chiavi API",
|
||||
"HeaderAppriseNotificationSettings": "Apprendi le impostazioni di Notifica",
|
||||
"HeaderAudioTracks": "Tracce audio",
|
||||
"HeaderAudiobookTools": "Strumenti di gestione file audiolibri",
|
||||
"HeaderAuthentication": "Authenticazione",
|
||||
"HeaderBackups": "Backup",
|
||||
"HeaderBulkChapterModal": "Aggiungere più capitoli",
|
||||
"HeaderChangePassword": "Cambia la password",
|
||||
"HeaderChapters": "Capitoli",
|
||||
"HeaderChooseAFolder": "Seleziona la cartella",
|
||||
@ -164,6 +166,7 @@
|
||||
"HeaderMetadataOrderOfPrecedence": "Priorità ordine Metadata",
|
||||
"HeaderMetadataToEmbed": "Metadata da incorporare",
|
||||
"HeaderNewAccount": "Nuovo Account",
|
||||
"HeaderNewApiKey": "Nuova chiave API",
|
||||
"HeaderNewLibrary": "Nuova Libreria",
|
||||
"HeaderNotificationCreate": "Crea una notifica",
|
||||
"HeaderNotificationUpdate": "Aggiornamento della notifica",
|
||||
@ -197,6 +200,7 @@
|
||||
"HeaderSettingsExperimental": "Opzioni Sperimentali",
|
||||
"HeaderSettingsGeneral": "Generale",
|
||||
"HeaderSettingsScanner": "Scanner",
|
||||
"HeaderSettingsSecurity": "Sicurezza",
|
||||
"HeaderSettingsWebClient": "Web Client",
|
||||
"HeaderSleepTimer": "Sveglia",
|
||||
"HeaderStatsLargestItems": "File pesanti",
|
||||
@ -208,6 +212,7 @@
|
||||
"HeaderTableOfContents": "Indice",
|
||||
"HeaderTools": "Strumenti",
|
||||
"HeaderUpdateAccount": "Aggiorna Account",
|
||||
"HeaderUpdateApiKey": "Aggiornamento chiave API",
|
||||
"HeaderUpdateAuthor": "Aggiorna Autore",
|
||||
"HeaderUpdateDetails": "Aggiorna Dettagli",
|
||||
"HeaderUpdateLibrary": "Aggiorna Libreria",
|
||||
@ -237,6 +242,10 @@
|
||||
"LabelAllUsersExcludingGuests": "Tutti gli Utenti Esclusi gli ospiti",
|
||||
"LabelAllUsersIncludingGuests": "Tutti gli Utenti Inclusi gli ospiti",
|
||||
"LabelAlreadyInYourLibrary": "Già esistente nella libreria",
|
||||
"LabelApiKeyCreated": "API Key \"{0}\" creato con successo.",
|
||||
"LabelApiKeyCreatedDescription": "Assicurarsi di copiare la chiave API ora poiché non si potrà rivederla.",
|
||||
"LabelApiKeyUser": "Agisce per conto dell'utente",
|
||||
"LabelApiKeyUserDescription": "Questa chiave API avrà le stesse autorizzazioni dell'utente per conto del quale agisce. Apparirà nei registri come se l'utente stesse facendo la richiesta.",
|
||||
"LabelApiToken": "API Token",
|
||||
"LabelAppend": "Appese",
|
||||
"LabelAudioBitrate": "Audio Bitrate (es. 128k)",
|
||||
@ -286,6 +295,7 @@
|
||||
"LabelContinueListening": "Continua l'ascolto",
|
||||
"LabelContinueReading": "Continua la lettura",
|
||||
"LabelContinueSeries": "Continua serie",
|
||||
"LabelCorsAllowed": "CORS consentiti Origine",
|
||||
"LabelCover": "Copertina",
|
||||
"LabelCoverImageURL": "Indirizzo della cover URL",
|
||||
"LabelCoverProvider": "Cover Sorgente",
|
||||
@ -348,6 +358,10 @@
|
||||
"LabelExample": "Esempio",
|
||||
"LabelExpandSeries": "Espandi Serie",
|
||||
"LabelExpandSubSeries": "Espandi Sub Serie",
|
||||
"LabelExpired": "Scadenza",
|
||||
"LabelExpiresAt": "Scade a",
|
||||
"LabelExpiresInSeconds": "Scade in (secondi)",
|
||||
"LabelExpiresNever": "Mai",
|
||||
"LabelExplicit": "Esplicito",
|
||||
"LabelExplicitChecked": "Esplicito (selezionato)",
|
||||
"LabelExplicitUnchecked": "Non Esplicito (selezionato)",
|
||||
@ -407,6 +421,7 @@
|
||||
"LabelLanguages": "Lingua",
|
||||
"LabelLastBookAdded": "Ultimo Libro Aggiunto",
|
||||
"LabelLastBookUpdated": "Ultimo Libro Aggiornato",
|
||||
"LabelLastProgressDate": "Ultimi progressi: Si'",
|
||||
"LabelLastSeen": "Ultimi Visti",
|
||||
"LabelLastTime": "Ultima Volta",
|
||||
"LabelLastUpdate": "Ultimo Aggiornamento",
|
||||
@ -419,6 +434,8 @@
|
||||
"LabelLibraryFilterSublistEmpty": "Nessuno {0}",
|
||||
"LabelLibraryItem": "Elementi della biblioteca",
|
||||
"LabelLibraryName": "Nome della biblioteca",
|
||||
"LabelLibrarySortByProgress": "Aggiornamento dei progressi",
|
||||
"LabelLibrarySortByProgressStarted": "Data di inizio",
|
||||
"LabelLimit": "Limiti",
|
||||
"LabelLineSpacing": "Interlinea",
|
||||
"LabelListenAgain": "Ascolta ancora",
|
||||
@ -427,6 +444,7 @@
|
||||
"LabelLogLevelWarn": "Allarme",
|
||||
"LabelLookForNewEpisodesAfterDate": "Cerca nuovi episodi dopo questa data",
|
||||
"LabelLowestPriority": "Priorità Minima",
|
||||
"LabelMatchConfidence": "Fiducia",
|
||||
"LabelMatchExistingUsersBy": "Abbina gli utenti esistenti per",
|
||||
"LabelMatchExistingUsersByDescription": "Utilizzato per connettere gli utenti esistenti. Una volta connessi, gli utenti verranno abbinati a un ID univoco dal tuo provider SSO",
|
||||
"LabelMaxEpisodesToDownload": "Max # di episodi da scaricare. Usa 0 per illimitati.",
|
||||
@ -456,7 +474,9 @@
|
||||
"LabelNewestAuthors": "Nuovi autori",
|
||||
"LabelNewestEpisodes": "Nuovi episodi",
|
||||
"LabelNextBackupDate": "Data Prossimo Backup",
|
||||
"LabelNextChapters": "I prossimi capitoli saranno:",
|
||||
"LabelNextScheduledRun": "Data prossima esecuzione schedulata",
|
||||
"LabelNoApiKeys": "Nessuna chiave API",
|
||||
"LabelNoCustomMetadataProviders": "Nessun provider di metadati personalizzato",
|
||||
"LabelNoEpisodesSelected": "Nessun Episodio Selezionato",
|
||||
"LabelNotFinished": "Da completare",
|
||||
@ -472,6 +492,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Coda Massima di notifiche eventi",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Le notifiche sono limitate per 1 al secondo, per evitare lo spamming le notifiche verrano ignorare se superano la coda.",
|
||||
"LabelNumberOfBooks": "Numero di libri",
|
||||
"LabelNumberOfChapters": "Numero di capitoli:",
|
||||
"LabelNumberOfEpisodes": "Numero di episodi",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Nome dell'attestazione OpenID che contiene autorizzazioni avanzate per le azioni dell'utente all'interno dell'applicazione che verranno applicate ai ruoli non amministratori (<b>se configurato</b>). Se il reclamo manca nella risposta, l'accesso ad ABS verrà negato. Se manca una singola opzione, verrà trattata come<code>falsa</code>. Assicurati che l'attestazione del provider di identità corrisponda alla struttura prevista:",
|
||||
"LabelOpenIDClaims": "Lasciare vuote le seguenti opzioni per disabilitare l'assegnazione avanzata di gruppi e autorizzazioni, assegnando quindi automaticamente il gruppo \"Utente\".",
|
||||
@ -546,6 +567,7 @@
|
||||
"LabelSelectAll": "Seleziona tutto",
|
||||
"LabelSelectAllEpisodes": "Seleziona tutti gli Episodi",
|
||||
"LabelSelectEpisodesShowing": "Selezionati {0} episodi da visualizzare",
|
||||
"LabelSelectUser": "Seleziona l'utente",
|
||||
"LabelSelectUsers": "Selezione Utenti",
|
||||
"LabelSendEbookToDevice": "Invia il libro a...",
|
||||
"LabelSequence": "Sequenza",
|
||||
@ -642,6 +664,7 @@
|
||||
"LabelTheme": "Tema",
|
||||
"LabelThemeDark": "Scuro",
|
||||
"LabelThemeLight": "Chiaro",
|
||||
"LabelThemeSepia": "Seppia",
|
||||
"LabelTimeBase": "Tempo base",
|
||||
"LabelTimeDurationXHours": "{0} Ore",
|
||||
"LabelTimeDurationXMinutes": "{0} minuti",
|
||||
@ -710,7 +733,9 @@
|
||||
"MessageAddToPlayerQueue": "Aggiungi alla coda di riproduzione",
|
||||
"MessageAppriseDescription": "Per utilizzare questa funzione è necessario disporre di un'istanza di <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> in esecuzione o un'API che gestirà quelle stesse richieste. <br />L'API Url dovrebbe essere il percorso URL completo per inviare la notifica, ad esempio se la tua istanza API è servita cosi .<code>http://192.168.1.1:8337</code> Allora dovrai mettere <code>http://192.168.1.1:8337/notify</code>.",
|
||||
"MessageAsinCheck": "Assicurati di utilizzare l'ASIN della regione Audible corretta, non di Amazon.",
|
||||
"MessageAuthenticationLegacyTokenWarning": "I token API legacy verranno rimossi in futuro. Utilizzare piuttosto le <a href=\"/config/api-keys\">chiavi API</a>.",
|
||||
"MessageAuthenticationOIDCChangesRestart": "Riavvia il tuo server dopo aver salvato per applicare le modifiche OIDC.",
|
||||
"MessageAuthenticationSecurityMessage": "L'autenticazione è stata migliorata per incrementare la sicurezza. Tutti gli utenti sono tenuti a rieffettuare il login.",
|
||||
"MessageBackupsDescription": "I backup includono utenti, progressi degli utenti, dettagli sugli elementi della libreria, impostazioni del server e immagini archiviate in <code>/metadata/items</code> & <code>/metadata/authors</code>. I backup non includono i file archiviati nelle cartelle della libreria.",
|
||||
"MessageBackupsLocationEditNote": "Nota: l'aggiornamento della posizione di backup non sposterà o modificherà i backup esistenti",
|
||||
"MessageBackupsLocationNoEditNote": "Nota: la posizione del backup viene impostata tramite una variabile di ambiente e non può essere modificata qui.",
|
||||
@ -724,6 +749,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "Nessun risultato per il filtro \"{0}: {1}\"",
|
||||
"MessageBookshelfNoResultsForQuery": "Nessun risultato per la query",
|
||||
"MessageBookshelfNoSeries": "Non c'è nessuna Serie",
|
||||
"MessageBulkChapterPattern": "Quanti capitoli vuoi aggiungere con questo motivo di numerazione?",
|
||||
"MessageChapterEndIsAfter": "La fine del capitolo è dopo la fine del tuo audiolibro",
|
||||
"MessageChapterErrorFirstNotZero": "Il primo capitolo deve iniziare da 0",
|
||||
"MessageChapterErrorStartGteDuration": "L'ora di inizio non valida deve essere inferiore alla durata dell'audiolibro",
|
||||
@ -732,6 +758,7 @@
|
||||
"MessageChaptersNotFound": "Capitoli non trovati",
|
||||
"MessageCheckingCron": "Controllo cron...",
|
||||
"MessageConfirmCloseFeed": "Sei sicuro di voler chiudere questo feed?",
|
||||
"MessageConfirmDeleteApiKey": "Sei sicuro di voler eliminare la chiave API \"{0}\"?",
|
||||
"MessageConfirmDeleteBackup": "Sei sicuro di voler eliminare il backup {0}?",
|
||||
"MessageConfirmDeleteDevice": "Sei sicuro/sicura di voler eliminare il lettore di libri {0}?",
|
||||
"MessageConfirmDeleteFile": "Questo eliminerà il file dal tuo file system. Sei sicuro?",
|
||||
@ -759,6 +786,7 @@
|
||||
"MessageConfirmRemoveAuthor": "Sei sicuro di voler rimuovere l'autore? \"{0}\"?",
|
||||
"MessageConfirmRemoveCollection": "Sei sicuro di voler rimuovere la Raccolta \"{0}\"?",
|
||||
"MessageConfirmRemoveEpisode": "Sei sicuro di voler rimuovere l'episodio \"{0}\"?",
|
||||
"MessageConfirmRemoveEpisodeNote": "Nota: Questo non cancella il file audio a meno che non toggling \"Hard delete file\"",
|
||||
"MessageConfirmRemoveEpisodes": "Sei sicuro di voler rimuovere {0} episodi?",
|
||||
"MessageConfirmRemoveListeningSessions": "Sei sicuro di voler rimuovere {0} sessioni di Ascolto?",
|
||||
"MessageConfirmRemoveMetadataFiles": "Vuoi davvero rimuovere tutti i metadati.{0} file nelle cartelle degli elementi della tua libreria?",
|
||||
@ -784,6 +812,8 @@
|
||||
"MessageFeedURLWillBe": "l’URL del flusso sarà {0}",
|
||||
"MessageFetching": "Recupero info…",
|
||||
"MessageForceReScanDescription": "eseguirà nuovamente la scansione di tutti i file come una nuova scansione. I tag ID3 dei file audio, i file OPF e i file di testo verranno scansionati come nuovi.",
|
||||
"MessageHeatmapListeningTimeTooltip": "<strong>{0} in ascolto</strong> su {1}",
|
||||
"MessageHeatmapNoListeningSessions": "Nessuna sessione di ascolto su {0}",
|
||||
"MessageImportantNotice": "Avviso Importante!",
|
||||
"MessageInsertChapterBelow": "Inserisci capitolo sotto",
|
||||
"MessageInvalidAsin": "ASIN non Valido",
|
||||
@ -923,6 +953,7 @@
|
||||
"NotificationOnRSSFeedDisabledDescription": "Attivato quando i download automatici degli episodi vengono disabilitati a causa di troppi tentativi falliti",
|
||||
"NotificationOnRSSFeedFailedDescription": "Attivato quando la richiesta del feed RSS per il download automatico di un episodio fallisce",
|
||||
"NotificationOnTestDescription": "test il sistema di notifica",
|
||||
"PlaceholderBulkChapterInput": "Inserire il titolo del capitolo o utilizzate la numerazione (es. 'Episodio 1', 'Capitolo 10', '1.')",
|
||||
"PlaceholderNewCollection": "Nome Nuova Raccolta",
|
||||
"PlaceholderNewFolderPath": "Nuovo Percorso Cartella",
|
||||
"PlaceholderNewPlaylist": "Nome nuova playlist",
|
||||
@ -976,8 +1007,12 @@
|
||||
"ToastBookmarkCreateFailed": "Creazione segnalibro fallita",
|
||||
"ToastBookmarkCreateSuccess": "Segnalibro creato",
|
||||
"ToastBookmarkRemoveSuccess": "Segnalibro Rimosso",
|
||||
"ToastBulkChapterInvalidCount": "Inserire un numero tra 1 e 150",
|
||||
"ToastCachePurgeFailed": "Impossibile eliminare la cache",
|
||||
"ToastCachePurgeSuccess": "Cache eliminata correttamente",
|
||||
"ToastChapterLocked": "Il capitolo è bloccato.",
|
||||
"ToastChapterStartTimeAdjusted": "Tempo di inizio del capitolo modificato di {0} secondi",
|
||||
"ToastChaptersAllLocked": "Tutti i capitoli sono bloccati. Sblocca alcuni capitoli per modificarne i tempi.",
|
||||
"ToastChaptersHaveErrors": "I capitoli contengono errori",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Quantità di spostamento non valida. L'orario di inizio dell'ultimo capitolo si estenderebbe oltre la durata di questo audiolibro.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Quantità di spostamento non valida. Il primo capitolo avrebbe una lunghezza pari a zero o negativa e verrebbe sovrascritto dal secondo capitolo. Aumentare la durata iniziale del secondo capitolo.",
|
||||
@ -1002,6 +1037,8 @@
|
||||
"ToastEpisodeDownloadQueueClearSuccess": "Coda di download degli episodi cancellata",
|
||||
"ToastEpisodeUpdateSuccess": "{0} episodi aggiornati",
|
||||
"ToastErrorCannotShare": "Impossibile condividere in modo nativo su questo dispositivo",
|
||||
"ToastFailedToCreate": "Non creato",
|
||||
"ToastFailedToDelete": "Non eliminata",
|
||||
"ToastFailedToLoadData": "Impossibile caricare i dati",
|
||||
"ToastFailedToMatch": "Impossibile abbinare",
|
||||
"ToastFailedToShare": "Impossibile condividere",
|
||||
@ -1009,6 +1046,7 @@
|
||||
"ToastInvalidImageUrl": "URL dell'immagine non valido",
|
||||
"ToastInvalidMaxEpisodesToDownload": "Numero massimo di episodi non valido da scaricare",
|
||||
"ToastInvalidUrl": "URL non valido",
|
||||
"ToastInvalidUrls": "Uno o più URL sono invalidi",
|
||||
"ToastItemCoverUpdateSuccess": "Cover aggiornata",
|
||||
"ToastItemDeletedFailed": "Impossibile eliminare l'elemento",
|
||||
"ToastItemDeletedSuccess": "Elemento eliminato",
|
||||
@ -1033,6 +1071,7 @@
|
||||
"ToastMustHaveAtLeastOnePath": "Deve avere almeno un percorso",
|
||||
"ToastNameEmailRequired": "Nome ed email sono obbligatori",
|
||||
"ToastNameRequired": "Il nome è obbligatorio",
|
||||
"ToastNewApiKeyUserError": "Deve selezionare un utente",
|
||||
"ToastNewEpisodesFound": "{0} nuovi episodi trovati",
|
||||
"ToastNewUserCreatedFailed": "Impossibile creare l'account: \"{0}\"",
|
||||
"ToastNewUserCreatedSuccess": "Nuovo account creato",
|
||||
@ -1057,6 +1096,7 @@
|
||||
"ToastPlaylistUpdateSuccess": "Playlist Aggiornata",
|
||||
"ToastPodcastCreateFailed": "Errore creazione podcast",
|
||||
"ToastPodcastCreateSuccess": "Podcast creato correttamente",
|
||||
"ToastPodcastEpisodeUpdated": "Episodio aggiornato",
|
||||
"ToastPodcastGetFeedFailed": "Impossibile ottenere il feed del podcast",
|
||||
"ToastPodcastNoEpisodesInFeed": "Nessun episodio trovato nel feed RSS",
|
||||
"ToastPodcastNoRssFeed": "Il podcast non ha un feed RSS",
|
||||
@ -1107,5 +1147,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "Password modificata con successo",
|
||||
"ToastUserPasswordMismatch": "Le password non corrispondono",
|
||||
"ToastUserPasswordMustChange": "La nuova password non può corrispondere alla vecchia password",
|
||||
"ToastUserRootRequireName": "È necessario immettere un nome utente root"
|
||||
"ToastUserRootRequireName": "È necessario immettere un nome utente root",
|
||||
"TooltipAddChapters": "Aggiungere capitolo/i",
|
||||
"TooltipAddOneSecond": "Aggiungere 1 secondo",
|
||||
"TooltipAdjustChapterStart": "Clicca per modificare il tempo di inizio",
|
||||
"TooltipLockAllChapters": "Bloccare tutti i capitoli",
|
||||
"TooltipLockChapter": "Bloccare capitolo (Shift+click per intervallo)",
|
||||
"TooltipSubtractOneSecond": "Sottrarre 1 secondo",
|
||||
"TooltipUnlockAllChapters": "Sbloccare tutti i capitoli",
|
||||
"TooltipUnlockChapter": "Sbloccare capitolo (Shift+click per intervallo)"
|
||||
}
|
||||
|
||||
@ -11,13 +11,17 @@
|
||||
"ButtonApplyChapters": "チャプターを確定する",
|
||||
"ButtonAuthors": "作者",
|
||||
"ButtonBack": "戻る",
|
||||
"ButtonBrowseForFolder": "フォルダーを選択する",
|
||||
"ButtonCancel": "キャンセル",
|
||||
"ButtonCancelEncode": "エンコードを取り消す",
|
||||
"ButtonChangeRootPassword": "Rootのパスワードを変更する",
|
||||
"ButtonChooseAFolder": "フォルダーを選ぶ",
|
||||
"ButtonChooseFiles": "ファイルを選ぶ",
|
||||
"ButtonClearFilter": "絞り込みを解除",
|
||||
"ButtonClose": "閉じる",
|
||||
"ButtonCloseFeed": "フィードを閉じる",
|
||||
"ButtonCollections": "コレクション",
|
||||
"ButtonConfigureScanner": "スキャナーの設定",
|
||||
"ButtonCreate": "作成",
|
||||
"ButtonCreateBackup": "バックアップを作成する",
|
||||
"ButtonDelete": "削除",
|
||||
@ -26,20 +30,35 @@
|
||||
"ButtonEditChapters": "チャプターの編集",
|
||||
"ButtonEditPodcast": "ポッドキャストの編集",
|
||||
"ButtonEnable": "オンにする",
|
||||
"ButtonForceReScan": "強制的に再スキャンする",
|
||||
"ButtonFullPath": "絶対パス",
|
||||
"ButtonHide": "非表示",
|
||||
"ButtonHome": "ホーム",
|
||||
"ButtonJumpBackward": "巻き戻し",
|
||||
"ButtonJumpForward": "早送り",
|
||||
"ButtonLatest": "最新",
|
||||
"ButtonLibrary": "ライブラリー",
|
||||
"ButtonLogout": "ログアウト",
|
||||
"ButtonManageTracks": "トラックの管理",
|
||||
"ButtonNevermind": "中止",
|
||||
"ButtonNext": "次",
|
||||
"ButtonNextChapter": "次のチャプター",
|
||||
"ButtonOk": "はい",
|
||||
"ButtonPlay": "プレイ",
|
||||
"ButtonOpenFeed": "フィードを開く",
|
||||
"ButtonPause": "一時停止",
|
||||
"ButtonPlay": "再生",
|
||||
"ButtonPlayAll": "全て再生",
|
||||
"ButtonPlaying": "プレイ中",
|
||||
"ButtonPlaylists": "プレイリスト",
|
||||
"ButtonPrevious": "先",
|
||||
"ButtonPreviousChapter": "前のチャプター",
|
||||
"ButtonPurgeAllCache": "全てのキャッシュを削除",
|
||||
"ButtonPurgeItemsCache": "項目のキャッシュを削除",
|
||||
"ButtonQueueAddItem": "次に再生する",
|
||||
"ButtonQueueRemoveItem": "次に再生から削除",
|
||||
"ButtonQuickEmbed": "クイック埋め込み",
|
||||
"ButtonReScan": "再スキャン",
|
||||
"ButtonRead": "野村",
|
||||
"ButtonRead": "読む",
|
||||
"ButtonReadLess": "閉じる",
|
||||
"ButtonReadMore": "もっと見る",
|
||||
"ButtonRefresh": "再読み込み",
|
||||
@ -56,8 +75,21 @@
|
||||
"ButtonScrollLeft": "左にスクロール",
|
||||
"ButtonScrollRight": "右にスクロール",
|
||||
"ButtonSearch": "検索",
|
||||
"ButtonSeries": "シリーズ",
|
||||
"ButtonYes": "はい",
|
||||
"HeaderAccount": "アカウント",
|
||||
"HeaderChapters": "チャプター",
|
||||
"HeaderCollection": "コレクション",
|
||||
"HeaderCollectionItems": "コレクションの項目",
|
||||
"HeaderDetails": "詳細",
|
||||
"HeaderEbookFiles": "電子書籍ファイル",
|
||||
"HeaderEpisodes": "エピソード",
|
||||
"HeaderEreaderSettings": "電子書籍リーダーの設定",
|
||||
"HeaderLatestEpisodes": "最新のエピソード",
|
||||
"HeaderLibraries": "ライブラリー",
|
||||
"HeaderPlayerSettings": "プレーヤーの設定",
|
||||
"HeaderSettingsGeneral": "一般",
|
||||
"HeaderSettingsScanner": "スキャナー",
|
||||
"LabelBooks": "ほん",
|
||||
"LabelContinueListening": "続きから聞く",
|
||||
"LabelLanguage": "言語",
|
||||
@ -67,5 +99,17 @@
|
||||
"LabelNewPassword": "新しいのパスワード",
|
||||
"LabelPassword": "パスワード",
|
||||
"LabelPlaylists": "プレイリスト",
|
||||
"LabelPodcast": "ポッドキャスト"
|
||||
"LabelPodcast": "ポッドキャスト",
|
||||
"LabelSettingsFindCovers": "表紙を探す",
|
||||
"LabelSettingsFindCoversHelp": "もしオーディオブックに表紙が埋め込まれていない、もしくは表紙画像がフォルダー内に見つからなければ、スキャナーは表紙を探そうとします。<br>注記: これによってスキャン時間が長くなります",
|
||||
"LabelSettingsParseSubtitles": "サブタイトルを抽出する",
|
||||
"LabelSettingsParseSubtitlesHelp": "オーディオブックのフォルダー名からサブタイトルを抽出します。<br>サブタイトルは \"-\" で区切ってください<br>例: \"本のタイトル - ここにサブタイトル\" という名前だと \"ここにサブタイトル\" というサブタイトルになります",
|
||||
"LabelSettingsPreferMatchedMetadata": "一致したメタデータを優先する",
|
||||
"LabelSettingsPreferMatchedMetadataHelp": "クイックマッチを使用する時、一致したデータは書籍の詳細を上書きします。デフォルトでは、埋まっていない項目のみ入力されます。",
|
||||
"LabelSettingsSortingIgnorePrefixes": "並び替えでプレフィックスを無視する",
|
||||
"LabelSettingsSortingIgnorePrefixesHelp": "例: プレフィックス \"the\" の付いた本のタイトル \"The Book Title\" は \"Book Title, The\" として並び替えられます",
|
||||
"LabelSettingsStoreCoversWithItem": "表紙を項目と一緒に保存する",
|
||||
"LabelSettingsStoreCoversWithItemHelp": "デフォルトでは表紙は /metadata/items に保存されますが、この設定をオンにするとライブラリーの項目のフォルダーに保存されます。\"cover\" という名前のファイル一つのみが保持されます",
|
||||
"LabelSettingsStoreMetadataWithItem": "メタデータを項目と一緒に保存する",
|
||||
"LabelSettingsStoreMetadataWithItemHelp": "デフォルトではメタデータは/metadata/itemsに保存されますが、この設定をオンにするとライブラリーの項目のフォルダーに保存されます"
|
||||
}
|
||||
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "Audioboekbestandbeheer tools",
|
||||
"HeaderAuthentication": "Authenticatie",
|
||||
"HeaderBackups": "Back-ups",
|
||||
"HeaderBulkChapterModal": "Meerdere hoofdstukken toevoegen",
|
||||
"HeaderChangePassword": "Wachtwoord wijzigen",
|
||||
"HeaderChapters": "Hoofdstukken",
|
||||
"HeaderChooseAFolder": "Map kiezen",
|
||||
@ -199,6 +200,7 @@
|
||||
"HeaderSettingsExperimental": "Experimentele functies",
|
||||
"HeaderSettingsGeneral": "Algemeen",
|
||||
"HeaderSettingsScanner": "Scanner",
|
||||
"HeaderSettingsSecurity": "Beveiliging",
|
||||
"HeaderSettingsWebClient": "Web Client",
|
||||
"HeaderSleepTimer": "Slaaptimer",
|
||||
"HeaderStatsLargestItems": "Grootste items",
|
||||
@ -232,7 +234,7 @@
|
||||
"LabelAddToPlaylist": "Toevoegen aan afspeellijst",
|
||||
"LabelAddToPlaylistBatch": "{0} onderdelen toevoegen aan afspeellijst",
|
||||
"LabelAddedAt": "Toegevoegd op",
|
||||
"LabelAddedDate": "Toegevoegd {0}",
|
||||
"LabelAddedDate": "{0} toegevoegd",
|
||||
"LabelAdminUsersOnly": "Enkel Admin gebruikers",
|
||||
"LabelAll": "Alle",
|
||||
"LabelAllEpisodesDownloaded": "Alle afleveringen gedownload",
|
||||
@ -293,6 +295,7 @@
|
||||
"LabelContinueListening": "Verder Luisteren",
|
||||
"LabelContinueReading": "Verder lezen",
|
||||
"LabelContinueSeries": "Doorgaan met Serie",
|
||||
"LabelCorsAllowed": "CORS bronnen toestaan",
|
||||
"LabelCover": "Omslag",
|
||||
"LabelCoverImageURL": "Omslagafbeelding-URL",
|
||||
"LabelCoverProvider": "Omslag bron",
|
||||
@ -306,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Verwijderen uit bestandssysteem (uncheck om alleen uit database te verwijderen)",
|
||||
"LabelDescription": "Beschrijving",
|
||||
"LabelDeselectAll": "Deselecteer alle",
|
||||
"LabelDetectedPattern": "Gedetecteerd patroon:",
|
||||
"LabelDevice": "Apparaat",
|
||||
"LabelDeviceInfo": "Apparaat info",
|
||||
"LabelDeviceIsAvailableTo": "Apparaat is beschikbaar voor...",
|
||||
@ -374,6 +378,7 @@
|
||||
"LabelFilterByUser": "Filter op gebruiker",
|
||||
"LabelFindEpisodes": "Zoek afleveringen",
|
||||
"LabelFinished": "Voltooid",
|
||||
"LabelFinishedDate": "Voltooid {0}",
|
||||
"LabelFolder": "Map",
|
||||
"LabelFolders": "Mappen",
|
||||
"LabelFontBold": "Vetgedrukt",
|
||||
@ -432,6 +437,8 @@
|
||||
"LabelLibraryItem": "Bibliotheekonderdeel",
|
||||
"LabelLibraryName": "Bibliotheeknaam",
|
||||
"LabelLibrarySortByProgress": "Voortuigang geüpdatet",
|
||||
"LabelLibrarySortByProgressFinished": "Datum voltooid",
|
||||
"LabelLibrarySortByProgressStarted": "Datum gestart",
|
||||
"LabelLimit": "Limiet",
|
||||
"LabelLineSpacing": "Regelruimte",
|
||||
"LabelListenAgain": "Opnieuw Beluisteren",
|
||||
@ -470,6 +477,7 @@
|
||||
"LabelNewestAuthors": "Nieuwste Auteurs",
|
||||
"LabelNewestEpisodes": "Nieuwste Afleveringen",
|
||||
"LabelNextBackupDate": "Volgende back-up datum",
|
||||
"LabelNextChapters": "Volgende hoofdstukken zijn:",
|
||||
"LabelNextScheduledRun": "Volgende geplande run",
|
||||
"LabelNoApiKeys": "Geen API keys",
|
||||
"LabelNoCustomMetadataProviders": "Geen custom metadata bronnen",
|
||||
@ -487,6 +495,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Max rijgrootte voor notificatie gebeurtenissen",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Gebeurtenissen zijn beperkt tot 1 aftrap per seconde. Gebeurtenissen zullen genegeerd worden als de rij aan de maximale grootte zit. Dit voorkomt notificatie-spamming.",
|
||||
"LabelNumberOfBooks": "Aantal Boeken",
|
||||
"LabelNumberOfChapters": "Aantal hoofdstukken:",
|
||||
"LabelNumberOfEpisodes": "# Afleveringen",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Naam van de OpenID-claim die geavanceerde machtigingen bevat voor gebruikersacties binnen de applicatie die van toepassing zijn op niet-beheerdersrollen (<b>indien geconfigureerd</b>). Als de claim ontbreekt in het antwoord, wordt toegang tot ABS geweigerd. Als er één optie ontbreekt, wordt deze behandeld als <code>false</code>. Zorg ervoor dat de claim van de identiteitsprovider overeenkomt met de verwachte structuur:",
|
||||
"LabelOpenIDClaims": "Laat de volgende opties leeg om geavanceerde groeps- en machtigingstoewijzing uit te schakelen en de groep 'Gebruiker' automatisch toe te wijzen.",
|
||||
@ -629,6 +638,7 @@
|
||||
"LabelStartTime": "Starttijd",
|
||||
"LabelStarted": "Gestart",
|
||||
"LabelStartedAt": "Gestart op",
|
||||
"LabelStartedDate": "Gestart {0}",
|
||||
"LabelStatsAudioTracks": "Audiotracks",
|
||||
"LabelStatsAuthors": "Auteurs",
|
||||
"LabelStatsBestDay": "Beste dag",
|
||||
@ -743,6 +753,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "Geen resultaten voor filter \"{0}: {1}\"",
|
||||
"MessageBookshelfNoResultsForQuery": "Geen resultaten voor query",
|
||||
"MessageBookshelfNoSeries": "Je hebt geen series",
|
||||
"MessageBulkChapterPattern": "Hoeveel hoofdstukken wilt u met dit nummeringspatroon toevoegen?",
|
||||
"MessageChapterEndIsAfter": "Hoofdstukeinde is na het einde van je audioboek",
|
||||
"MessageChapterErrorFirstNotZero": "Eerste hoofdstuk moet starten op 0",
|
||||
"MessageChapterErrorStartGteDuration": "Ongeldig: starttijd moet kleiner zijn dan duur van audioboek",
|
||||
@ -805,6 +816,8 @@
|
||||
"MessageFeedURLWillBe": "Feed URL zal {0} zijn",
|
||||
"MessageFetching": "Aan het ophalen...",
|
||||
"MessageForceReScanDescription": "zal alle bestanden opnieuw scannen als een verse scan. Audiobestanden ID3-tags, OPF-bestanden en textbestanden zullen als nieuw worden gescand.",
|
||||
"MessageHeatmapListeningTimeTooltip": "<strong>{0} luistert</strong> op {1}",
|
||||
"MessageHeatmapNoListeningSessions": "Geen luistersessies op {0}",
|
||||
"MessageImportantNotice": "Belangrijke opmerking!",
|
||||
"MessageInsertChapterBelow": "Hoofdstuk hieronder invoegen",
|
||||
"MessageInvalidAsin": "Ongeldige ASIN",
|
||||
@ -944,6 +957,7 @@
|
||||
"NotificationOnRSSFeedDisabledDescription": "Wordt geactiveerd wanneer automatische afleveringsdownloads zijn uitgeschakeld vanwege te veel mislukte pogingen",
|
||||
"NotificationOnRSSFeedFailedDescription": "Getriggerd wanneer de RSS feed aanvraag faalt voor een automatische aflevering download",
|
||||
"NotificationOnTestDescription": "Event voor het testen van het notificatiesysteem",
|
||||
"PlaceholderBulkChapterInput": "Voer een hoofdstuktitel in of gebruik nummering (bijv. 'Aflevering 1', 'Hoofdstuk 10', '1.')",
|
||||
"PlaceholderNewCollection": "Nieuwe naam collectie",
|
||||
"PlaceholderNewFolderPath": "Nieuwe locatie map",
|
||||
"PlaceholderNewPlaylist": "Nieuwe naam afspeellijst",
|
||||
@ -997,8 +1011,12 @@
|
||||
"ToastBookmarkCreateFailed": "Aanmaken boekwijzer mislukt",
|
||||
"ToastBookmarkCreateSuccess": "boekwijzer toegevoegd",
|
||||
"ToastBookmarkRemoveSuccess": "Boekwijzer verwijderd",
|
||||
"ToastBulkChapterInvalidCount": "Voer een nummer in tussen 1 en 150",
|
||||
"ToastCachePurgeFailed": "Cache wissen is mislukt",
|
||||
"ToastCachePurgeSuccess": "Cache succesvol verwijderd",
|
||||
"ToastChapterLocked": "Hoofdstuk is vergrendeld.",
|
||||
"ToastChapterStartTimeAdjusted": "Hoofdstukstarttijd aangepast met {0} seconden",
|
||||
"ToastChaptersAllLocked": "Alle hoofdstukken zijn vergrendeld. Ontgrendel sommige hoofdstukken om hun tijd te verschuiven.",
|
||||
"ToastChaptersHaveErrors": "Hoofdstukken bevatten fouten",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Ongeldige shift-tijd. De starttijd van het laatste hoofdstuk zou langer zijn dan de duur van dit audioboek.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Ongeldige shift-lengte. Het eerste hoofdstuk zou nul of een negatieve lengte hebben en zou worden overschreven door het tweede hoofdstuk. Verleng de startduur van het tweede hoofdstuk.",
|
||||
@ -1032,6 +1050,7 @@
|
||||
"ToastInvalidImageUrl": "Ongeldige afbeeldings-URL",
|
||||
"ToastInvalidMaxEpisodesToDownload": "Ongeldig maximum aantal afleveringen om te downloaden",
|
||||
"ToastInvalidUrl": "Ongeldige URL",
|
||||
"ToastInvalidUrls": "Een of meerdere URLs zijn ongeldig",
|
||||
"ToastItemCoverUpdateSuccess": "Omslag bijgewerkt",
|
||||
"ToastItemDeletedFailed": "Item verwijderen mislukt",
|
||||
"ToastItemDeletedSuccess": "Verwijderd item",
|
||||
@ -1081,6 +1100,7 @@
|
||||
"ToastPlaylistUpdateSuccess": "Afspeellijst bijgewerkt",
|
||||
"ToastPodcastCreateFailed": "Podcast aanmaken mislukt",
|
||||
"ToastPodcastCreateSuccess": "Podcast aangemaakt",
|
||||
"ToastPodcastEpisodeUpdated": "Aflevering bijgewerkt",
|
||||
"ToastPodcastGetFeedFailed": "Podcast feed ophalen mislukt",
|
||||
"ToastPodcastNoEpisodesInFeed": "Geen afleveringen gevonden in RSS feed",
|
||||
"ToastPodcastNoRssFeed": "Podcast heeft geen RSS feed",
|
||||
@ -1131,5 +1151,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "Wachtwoord succesvol gewijzigd",
|
||||
"ToastUserPasswordMismatch": "Wachtwoorden komen niet overeen",
|
||||
"ToastUserPasswordMustChange": "Het nieuwe wachtwoord kan niet overeenkomen met het oude wachtwoord",
|
||||
"ToastUserRootRequireName": "U moet een root-gebruikersnaam invoeren"
|
||||
"ToastUserRootRequireName": "U moet een root-gebruikersnaam invoeren",
|
||||
"TooltipAddChapters": "Hoofdstuk(ken) toevoegen",
|
||||
"TooltipAddOneSecond": "1 seconde toevoegen",
|
||||
"TooltipAdjustChapterStart": "Klik om de starttijd aan te passen",
|
||||
"TooltipLockAllChapters": "Alle hoofdstukken vergrendelen",
|
||||
"TooltipLockChapter": "Hoofdstuk vergrendelen (Shift+klikken voor bereik)",
|
||||
"TooltipSubtractOneSecond": "Trek 1 seconde af",
|
||||
"TooltipUnlockAllChapters": "Alle hoofdstukken ontgrendelen",
|
||||
"TooltipUnlockChapter": "Hoofdstuk ontgrendelen (Shift+klikken voor bereik)"
|
||||
}
|
||||
|
||||
@ -17,12 +17,12 @@
|
||||
"ButtonCancel": "Отмена",
|
||||
"ButtonCancelEncode": "Отменить кодирование",
|
||||
"ButtonChangeRootPassword": "Поменять мастер пароль",
|
||||
"ButtonCheckAndDownloadNewEpisodes": "Проверка и Загрузка новых эпизодов",
|
||||
"ButtonCheckAndDownloadNewEpisodes": "Скачать новые выпуски",
|
||||
"ButtonChooseAFolder": "Выбор папки",
|
||||
"ButtonChooseFiles": "Выбор файлов",
|
||||
"ButtonClearFilter": "Очистить фильтр",
|
||||
"ButtonClose": "Закрыть",
|
||||
"ButtonCloseFeed": "Закрыть канал",
|
||||
"ButtonCloseFeed": "Закрыть ленту",
|
||||
"ButtonCloseSession": "Закрыть открытый сеанс",
|
||||
"ButtonCollections": "Коллекции",
|
||||
"ButtonConfigureScanner": "Конфигурация сканера",
|
||||
@ -56,7 +56,7 @@
|
||||
"ButtonNextChapter": "Следующая глава",
|
||||
"ButtonNextItemInQueue": "Следующий элемент в очереди",
|
||||
"ButtonOk": "Ок",
|
||||
"ButtonOpenFeed": "Открыть канал",
|
||||
"ButtonOpenFeed": "Открыть ленту",
|
||||
"ButtonOpenManager": "Открыть менеджер",
|
||||
"ButtonPause": "Пауза",
|
||||
"ButtonPlay": "Слушать",
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "Инструменты файлов аудиокниг",
|
||||
"HeaderAuthentication": "Аутентификация",
|
||||
"HeaderBackups": "Бэкапы",
|
||||
"HeaderBulkChapterModal": "Добавление нескольких глав",
|
||||
"HeaderChangePassword": "Изменить пароль",
|
||||
"HeaderChapters": "Главы",
|
||||
"HeaderChooseAFolder": "Выберите папку",
|
||||
@ -141,7 +142,7 @@
|
||||
"HeaderEbookFiles": "Файлы e-книг",
|
||||
"HeaderEmail": "E-mail",
|
||||
"HeaderEmailSettings": "Настройки Email",
|
||||
"HeaderEpisodes": "Эпизоды",
|
||||
"HeaderEpisodes": "Выпуски",
|
||||
"HeaderEreaderDevices": "Устройства E-книга",
|
||||
"HeaderEreaderSettings": "Настройки E-ридера",
|
||||
"HeaderFiles": "Файлы",
|
||||
@ -150,7 +151,7 @@
|
||||
"HeaderItemFiles": "Файлы элемента",
|
||||
"HeaderItemMetadataUtils": "Утилиты",
|
||||
"HeaderLastListeningSession": "Последний сеанс прослушивания",
|
||||
"HeaderLatestEpisodes": "Последние эпизоды",
|
||||
"HeaderLatestEpisodes": "Последние выпуски",
|
||||
"HeaderLibraries": "Библиотеки",
|
||||
"HeaderLibraryFiles": "Файлы библиотеки",
|
||||
"HeaderLibraryStats": "Статистика библиотеки",
|
||||
@ -172,7 +173,7 @@
|
||||
"HeaderNotifications": "Уведомления",
|
||||
"HeaderOpenIDConnectAuthentication": "Аутентификация OpenID Connect",
|
||||
"HeaderOpenListeningSessions": "Открытые сеансы прослушивания",
|
||||
"HeaderOpenRSSFeed": "Открыть RSS-канал",
|
||||
"HeaderOpenRSSFeed": "Открыть RSS-ленту",
|
||||
"HeaderOtherFiles": "Другие файлы",
|
||||
"HeaderPasswordAuthentication": "Аутентификация по паролю",
|
||||
"HeaderPermissions": "Разрешения",
|
||||
@ -184,13 +185,13 @@
|
||||
"HeaderPresets": "Пресеты",
|
||||
"HeaderPreviewCover": "Предпросмотр обложки",
|
||||
"HeaderRSSFeedGeneral": "Сведения о RSS",
|
||||
"HeaderRSSFeedIsOpen": "RSS-канал открыт",
|
||||
"HeaderRSSFeeds": "RSS-каналы",
|
||||
"HeaderRemoveEpisode": "Удалить эпизод",
|
||||
"HeaderRemoveEpisodes": "Удалить {0} эпизодов",
|
||||
"HeaderRSSFeedIsOpen": "RSS-лента открыта",
|
||||
"HeaderRSSFeeds": "RSS-ленты",
|
||||
"HeaderRemoveEpisode": "Удалить выпуск",
|
||||
"HeaderRemoveEpisodes": "Удалить {0} выпусков",
|
||||
"HeaderSavedMediaProgress": "Прогресс медиа сохранен",
|
||||
"HeaderSchedule": "Планировщик",
|
||||
"HeaderScheduleEpisodeDownloads": "Запланируйте автоматическую загрузку эпизодов",
|
||||
"HeaderScheduleEpisodeDownloads": "Запланировать автоматическое скачивание выпусков",
|
||||
"HeaderScheduleLibraryScans": "Планировщик автоматического сканирования библиотеки",
|
||||
"HeaderSession": "Сеансы",
|
||||
"HeaderSetBackupSchedule": "Установить планировщик бэкапов",
|
||||
@ -236,7 +237,7 @@
|
||||
"LabelAddedDate": "Добавлено {0}",
|
||||
"LabelAdminUsersOnly": "Только для пользователей с правами администратора",
|
||||
"LabelAll": "Все",
|
||||
"LabelAllEpisodesDownloaded": "Все эпизоды загружены",
|
||||
"LabelAllEpisodesDownloaded": "Все выпуски скачаны",
|
||||
"LabelAllUsers": "Все пользователи",
|
||||
"LabelAllUsersExcludingGuests": "Все пользователи, кроме гостей",
|
||||
"LabelAllUsersIncludingGuests": "Все пользователи, включая гостей",
|
||||
@ -254,7 +255,7 @@
|
||||
"LabelAuthorFirstLast": "Автор (Имя Фамилия)",
|
||||
"LabelAuthorLastFirst": "Автор (Фамилия, Имя)",
|
||||
"LabelAuthors": "Авторы",
|
||||
"LabelAutoDownloadEpisodes": "Скачивать эпизоды автоматически",
|
||||
"LabelAutoDownloadEpisodes": "Скачивать выпуски автоматически",
|
||||
"LabelAutoFetchMetadata": "Автоматическое извлечение метаданных",
|
||||
"LabelAutoFetchMetadataHelp": "Извлекает метаданные для названия, автора и серии для упрощения загрузки. После загрузки может потребоваться сопоставление дополнительных метаданных.",
|
||||
"LabelAutoLaunch": "Автозапуск",
|
||||
@ -276,7 +277,7 @@
|
||||
"LabelButtonText": "Текст кнопки",
|
||||
"LabelByAuthor": "{0}",
|
||||
"LabelChangePassword": "Изменить пароль",
|
||||
"LabelChannels": "Каналы",
|
||||
"LabelChannels": "Ленты",
|
||||
"LabelChapterCount": "{0} Главы",
|
||||
"LabelChapterTitle": "Название главы",
|
||||
"LabelChapters": "Главы",
|
||||
@ -308,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Удалить из файловой системы (снимите флажок, чтобы удалить только из базы данных)",
|
||||
"LabelDescription": "Описание",
|
||||
"LabelDeselectAll": "Снять выделение",
|
||||
"LabelDetectedPattern": "Обнаруженный образец:",
|
||||
"LabelDevice": "Устройство",
|
||||
"LabelDeviceInfo": "Информация об устройстве",
|
||||
"LabelDeviceIsAvailableTo": "Устройство доступно для...",
|
||||
@ -316,7 +318,7 @@
|
||||
"LabelDiscFromMetadata": "Диск из Метаданных",
|
||||
"LabelDiscover": "Не начато",
|
||||
"LabelDownload": "Скачать",
|
||||
"LabelDownloadNEpisodes": "Скачать {0} эпизодов",
|
||||
"LabelDownloadNEpisodes": "Скачать {0} выпусков",
|
||||
"LabelDownloadable": "Загружаемый",
|
||||
"LabelDuration": "Длительность",
|
||||
"LabelDurationComparisonExactMatch": "(точное совпадение)",
|
||||
@ -330,7 +332,7 @@
|
||||
"LabelEmailSettingsFromAddress": "Адрес От",
|
||||
"LabelEmailSettingsRejectUnauthorized": "Отклонение неавторизованных сертификатов",
|
||||
"LabelEmailSettingsRejectUnauthorizedHelp": "Отключение проверки SSL-сертификата может подвергнуть ваше подключение рискам безопасности, таким как атаки типа \"man-in-the-middle\". Отключайте эту опцию только в том случае, если вы понимаете последствия и доверяете почтовому серверу, к которому подключаетесь.",
|
||||
"LabelEmailSettingsSecure": "Безопасность",
|
||||
"LabelEmailSettingsSecure": "Безопасно",
|
||||
"LabelEmailSettingsSecureHelp": "Если значение истинно, то соединение будет использовать TLS при подключении к серверу. Если значение ложно, то TLS будет использован, если сервер поддерживает расширение STARTTLS. В большинстве случаев установите это значение в истину, если вы подключаетесь к порту 465. Для порта 587 или 25 оставьте значение ложным. (из nodemailer.com/smtp/#authentication)",
|
||||
"LabelEmailSettingsTestAddress": "Тестовый адрес",
|
||||
"LabelEmbeddedCover": "Встроенная обложка",
|
||||
@ -346,13 +348,13 @@
|
||||
"LabelEncodingWatcherDisabled": "Если у вас отключено наблюдение за папкой, вам нужно будет повторно пересканировать эту аудиокнигу.",
|
||||
"LabelEnd": "Конец",
|
||||
"LabelEndOfChapter": "Конец главы",
|
||||
"LabelEpisode": "Эпизод",
|
||||
"LabelEpisodeNotLinkedToRssFeed": "Эпизод, не связанный с RSS-каналом",
|
||||
"LabelEpisodeNumber": "Эпизод #{0}",
|
||||
"LabelEpisodeTitle": "Имя эпизода",
|
||||
"LabelEpisodeType": "Тип эпизода",
|
||||
"LabelEpisodeUrlFromRssFeed": "URL-адрес эпизода из RSS-ленты",
|
||||
"LabelEpisodes": "Эпизодов",
|
||||
"LabelEpisode": "Выпуск",
|
||||
"LabelEpisodeNotLinkedToRssFeed": "Выпуск, не связанный с RSS-лентой",
|
||||
"LabelEpisodeNumber": "Выпуск #{0}",
|
||||
"LabelEpisodeTitle": "Название выпуска",
|
||||
"LabelEpisodeType": "Тип выпуска",
|
||||
"LabelEpisodeUrlFromRssFeed": "URL-адрес выпуска из RSS-ленты",
|
||||
"LabelEpisodes": "Выпуски",
|
||||
"LabelEpisodic": "Эпизодический",
|
||||
"LabelExample": "Пример",
|
||||
"LabelExpandSeries": "Развернуть серию",
|
||||
@ -365,7 +367,7 @@
|
||||
"LabelExplicitChecked": "18+ (отмечено)",
|
||||
"LabelExplicitUnchecked": "+18 (не отмечено)",
|
||||
"LabelExportOPML": "Экспорт OPML",
|
||||
"LabelFeedURL": "URL канала",
|
||||
"LabelFeedURL": "URL-адрес ленты",
|
||||
"LabelFetchingMetadata": "Извлечение метаданных",
|
||||
"LabelFile": "Файл",
|
||||
"LabelFileBirthtime": "Дата создания",
|
||||
@ -374,8 +376,9 @@
|
||||
"LabelFileModifiedDate": "Изменено {0}",
|
||||
"LabelFilename": "Имя файла",
|
||||
"LabelFilterByUser": "Фильтр по пользователю",
|
||||
"LabelFindEpisodes": "Найти эпизоды",
|
||||
"LabelFindEpisodes": "Найти выпуски",
|
||||
"LabelFinished": "Закончен",
|
||||
"LabelFinishedDate": "Завершено {0}",
|
||||
"LabelFolder": "Папка",
|
||||
"LabelFolders": "Папки",
|
||||
"LabelFontBold": "Жирный",
|
||||
@ -434,21 +437,23 @@
|
||||
"LabelLibraryItem": "Элемент библиотеки",
|
||||
"LabelLibraryName": "Имя библиотеки",
|
||||
"LabelLibrarySortByProgress": "Прогресс обновлён",
|
||||
"LabelLibrarySortByProgressFinished": "Дата завершения",
|
||||
"LabelLibrarySortByProgressStarted": "Дата начала",
|
||||
"LabelLimit": "Лимит",
|
||||
"LabelLineSpacing": "Межстрочный интервал",
|
||||
"LabelListenAgain": "Послушать снова",
|
||||
"LabelLogLevelDebug": "Debug",
|
||||
"LabelLogLevelInfo": "Info",
|
||||
"LabelLogLevelWarn": "Предупреждение",
|
||||
"LabelLookForNewEpisodesAfterDate": "Искать новые эпизоды после этой даты",
|
||||
"LabelLookForNewEpisodesAfterDate": "Искать новые выпуски после этой даты",
|
||||
"LabelLowestPriority": "Самый низкий приоритет",
|
||||
"LabelMatchConfidence": "Уверенность",
|
||||
"LabelMatchExistingUsersBy": "Сопоставление существующих пользователей по",
|
||||
"LabelMatchExistingUsersByDescription": "Используется для подключения существующих пользователей. После подключения пользователям будет присвоен уникальный идентификатор от поставщика единого входа",
|
||||
"LabelMaxEpisodesToDownload": "Максимальное количество эпизодов для загрузки. Используйте 0 для неограниченного количества.",
|
||||
"LabelMaxEpisodesToDownloadPerCheck": "Максимальное количество новых эпизодов для загрузки за одну проверку",
|
||||
"LabelMaxEpisodesToKeep": "Максимальное количество сохраняемых эпизодов",
|
||||
"LabelMaxEpisodesToKeepHelp": "Значение 0 не устанавливает максимального ограничения. После автоматической загрузки нового эпизода самый старый эпизод будет удален, если у вас более X эпизодов. При этом будет удален только 1 эпизод за каждую новую загрузку.",
|
||||
"LabelMaxEpisodesToDownload": "Максимальное количество выпусков для скачивания. Используйте 0 для неограниченного количества.",
|
||||
"LabelMaxEpisodesToDownloadPerCheck": "Максимальное количество новых выпусков для скачивания за один раз",
|
||||
"LabelMaxEpisodesToKeep": "Максимальное количество сохраняемых выпусков",
|
||||
"LabelMaxEpisodesToKeepHelp": "Значение 0 не устанавливает максимального ограничения. После автоматической скачивании нового выпуска самый старый будет удалён, если у вас их уже более X выпусков. При этом будет удалён только 1 выпуск за каждое новое скачивание.",
|
||||
"LabelMediaPlayer": "Медиа проигрыватель",
|
||||
"LabelMediaType": "Тип медиа",
|
||||
"LabelMetaTag": "Мета тег",
|
||||
@ -470,12 +475,13 @@
|
||||
"LabelNew": "Новый",
|
||||
"LabelNewPassword": "Новый пароль",
|
||||
"LabelNewestAuthors": "Новые авторы",
|
||||
"LabelNewestEpisodes": "Новые эпизоды",
|
||||
"LabelNewestEpisodes": "Новые выпуски",
|
||||
"LabelNextBackupDate": "Следующая дата бэкапирования",
|
||||
"LabelNextChapters": "Следующие главы будут:",
|
||||
"LabelNextScheduledRun": "Следущий запланированный запуск",
|
||||
"LabelNoApiKeys": "API ключи отсутствуют",
|
||||
"LabelNoCustomMetadataProviders": "Нет пользовательских поставщиков метаданных",
|
||||
"LabelNoEpisodesSelected": "Эпизоды не выбраны",
|
||||
"LabelNoEpisodesSelected": "Нет выбранных выпусков",
|
||||
"LabelNotFinished": "Не завершено",
|
||||
"LabelNotStarted": "Не запущено",
|
||||
"LabelNotes": "Заметки",
|
||||
@ -489,11 +495,12 @@
|
||||
"LabelNotificationsMaxQueueSize": "Макс. размер очереди для событий уведомлений",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "События ограничены 1 в секунду. События будут игнорированы если в очереди максимальное количество. Это предотвращает спам сообщениями.",
|
||||
"LabelNumberOfBooks": "Количество книг",
|
||||
"LabelNumberOfEpisodes": "# из эпизодов",
|
||||
"LabelNumberOfChapters": "Кол-во глав:",
|
||||
"LabelNumberOfEpisodes": "# из выпусков",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Имя утверждения OpenID, содержащего расширенные разрешения на действия пользователя в приложении, которые будут применяться к ролям, не являющимся администраторами (<b>если они настроены</b>). Если утверждение отсутствует в ответе, в доступе к ABS будет отказано. Если одна опция отсутствует, она будет рассматриваться как <code>false</code>. Убедитесь, что утверждение поставщика удостоверений соответствует ожидаемой структуре:",
|
||||
"LabelOpenIDClaims": "Оставьте следующие параметры пустыми, чтобы отключить расширенное назначение групп и разрешений, будет автоматически присвоена группа «Пользователь».",
|
||||
"LabelOpenIDGroupClaimDescription": "Имя утверждения OpenID, содержащего список групп пользователя. Обычно их называют <code>groups</code>. <b>Если эта настройка</b> настроена, приложение будет автоматически назначать роли на основе членства пользователя в группах при условии, что эти группы названы в утверждении без учета регистра \"admin\", \"user\" или \"guest\". Утверждение должно содержать список, и если пользователь принадлежит к нескольким группам, то приложение назначит роль, соответствующую самому высокому уровню доступа. Если ни одна из групп не совпадает, доступ будет запрещен.",
|
||||
"LabelOpenRSSFeed": "Открыть RSS-канал",
|
||||
"LabelOpenRSSFeed": "Открыть RSS-ленту",
|
||||
"LabelOverwrite": "Перезаписать",
|
||||
"LabelPaginationPageXOfY": "Страница {0} из {1}",
|
||||
"LabelPassword": "Пароль",
|
||||
@ -535,8 +542,8 @@
|
||||
"LabelRSSFeedCustomOwnerName": "Пользовательское Имя владельца",
|
||||
"LabelRSSFeedOpen": "Открыть RSS-ленту",
|
||||
"LabelRSSFeedPreventIndexing": "Запретить индексирование",
|
||||
"LabelRSSFeedSlug": "Встроить RSS-канал",
|
||||
"LabelRSSFeedURL": "URL RSS-канала",
|
||||
"LabelRSSFeedSlug": "Ключевое слово RSS-ленты",
|
||||
"LabelRSSFeedURL": "URL-адрес RSS-ленты",
|
||||
"LabelRandomly": "Случайно",
|
||||
"LabelReAddSeriesToContinueListening": "Повторно добавить серию в «Продолжить слушать»",
|
||||
"LabelRead": "Читать",
|
||||
@ -561,8 +568,8 @@
|
||||
"LabelSeason": "Сезон",
|
||||
"LabelSeasonNumber": "Сезон #{0}",
|
||||
"LabelSelectAll": "Выбрать все",
|
||||
"LabelSelectAllEpisodes": "Выбрать все эпизоды",
|
||||
"LabelSelectEpisodesShowing": "Выберите {0} эпизодов для показа",
|
||||
"LabelSelectAllEpisodes": "Выбрать все выпуски",
|
||||
"LabelSelectEpisodesShowing": "Выберите {0} выпусков для отображения",
|
||||
"LabelSelectUser": "Выбрать пользователя",
|
||||
"LabelSelectUsers": "Выбор пользователей",
|
||||
"LabelSendEbookToDevice": "Отправить e-книгу в...",
|
||||
@ -631,6 +638,7 @@
|
||||
"LabelStartTime": "Время начала",
|
||||
"LabelStarted": "Начат",
|
||||
"LabelStartedAt": "Начато В",
|
||||
"LabelStartedDate": "Начато {0}",
|
||||
"LabelStatsAudioTracks": "Аудио треки",
|
||||
"LabelStatsAuthors": "Авторы",
|
||||
"LabelStatsBestDay": "Лучший День",
|
||||
@ -741,10 +749,11 @@
|
||||
"MessageBatchQuickMatchDescription": "Быстрый Поиск попытается добавить отсутствующие обложки и метаданные для выбранных элементов. Включите параметры ниже, чтобы разрешить Быстрому Поиску перезаписывать существующие обложки и/или метаданные.",
|
||||
"MessageBookshelfNoCollections": "Вы еще не создали ни одной коллекции",
|
||||
"MessageBookshelfNoCollectionsHelp": "Коллекции являются общедоступными. Все пользователи, имеющие доступ к библиотеке, могут их просматривать.",
|
||||
"MessageBookshelfNoRSSFeeds": "Нет открытых RSS-каналов",
|
||||
"MessageBookshelfNoRSSFeeds": "Нет открытых RSS-лент",
|
||||
"MessageBookshelfNoResultsForFilter": "Нет Результатов для фильтра \"{0}: {1}\"",
|
||||
"MessageBookshelfNoResultsForQuery": "Нет результатов для запроса",
|
||||
"MessageBookshelfNoSeries": "У вас нет серий",
|
||||
"MessageBulkChapterPattern": "Сколько глав вы хотели бы добавить, используя эту схему нумерации?",
|
||||
"MessageChapterEndIsAfter": "Конец главы после окончания вашей аудиокниги",
|
||||
"MessageChapterErrorFirstNotZero": "Первая глава должна начинаться с 0",
|
||||
"MessageChapterErrorStartGteDuration": "Неверное время начала, должно быть меньше продолжительности аудиокниги",
|
||||
@ -752,7 +761,7 @@
|
||||
"MessageChapterStartIsAfter": "Глава начинается после окончания аудиокниги",
|
||||
"MessageChaptersNotFound": "Главы не найденны",
|
||||
"MessageCheckingCron": "Проверка cron...",
|
||||
"MessageConfirmCloseFeed": "Вы уверены, что хотите закрыть этот канал?",
|
||||
"MessageConfirmCloseFeed": "Вы уверены, что хотите закрыть эту ленту?",
|
||||
"MessageConfirmDeleteApiKey": "Вы уверены, что хотите удалить API ключ \"{0}\"?",
|
||||
"MessageConfirmDeleteBackup": "Вы уверены, что хотите удалить бэкап для {0}?",
|
||||
"MessageConfirmDeleteDevice": "Вы уверены, что хотите удалить устройство для чтения электронных книг \"{0}\"?",
|
||||
@ -765,8 +774,8 @@
|
||||
"MessageConfirmDeleteSession": "Вы уверены, что хотите удалить этот сеанс?",
|
||||
"MessageConfirmEmbedMetadataInAudioFiles": "Вы уверены, что хотите вставить метаданные в {0} аудиофайлов?",
|
||||
"MessageConfirmForceReScan": "Вы уверены, что хотите принудительно выполнить повторное сканирование?",
|
||||
"MessageConfirmMarkAllEpisodesFinished": "Вы уверены, что хотите отметить все эпизоды как завершенные?",
|
||||
"MessageConfirmMarkAllEpisodesNotFinished": "Вы уверены, что хотите отметить все эпизоды как не завершенные?",
|
||||
"MessageConfirmMarkAllEpisodesFinished": "Вы уверены, что хотите отметить все выпуски как прослушанные?",
|
||||
"MessageConfirmMarkAllEpisodesNotFinished": "Вы уверены, что хотите отметить все выпуски как непрослушанные?",
|
||||
"MessageConfirmMarkItemFinished": "Вы уверены, что хотите отметить «{0}» как завершенную?",
|
||||
"MessageConfirmMarkItemNotFinished": "Вы уверены, что хотите отметить «{0}» как не завершенную?",
|
||||
"MessageConfirmMarkSeriesFinished": "Вы уверены, что хотите отметить все книги этой серии как завершенные?",
|
||||
@ -775,14 +784,14 @@
|
||||
"MessageConfirmPurgeCache": "Очистка кэша удалит весь каталог в <code>/metadata/cache</code>. <br /><br />Вы уверены, что хотите удалить каталог кэша?",
|
||||
"MessageConfirmPurgeItemsCache": "Очистка кэша элементов удалит весь каталог в <code>/metadata/cache/items</code>.<br />Вы уверены?",
|
||||
"MessageConfirmQuickEmbed": "Предупреждение! Быстрое встраивание не позволяет создавать резервные копии аудиофайлов. Убедитесь, что у вас есть резервная копия аудиофайлов. <br><br>Хотите продолжить?",
|
||||
"MessageConfirmQuickMatchEpisodes": "При обнаружении совпадений информация о эпизодах быстрого поиска будет перезаписана. Будут обновлены только несопоставимые эпизоды. Вы уверены?",
|
||||
"MessageConfirmQuickMatchEpisodes": "При обнаружении совпадений информация о выпусках быстрого поиска будет перезаписана. Будут обновлены только несопоставимые выпуски. Вы уверены?",
|
||||
"MessageConfirmReScanLibraryItems": "Вы уверены, что хотите пересканировать {0} элементов?",
|
||||
"MessageConfirmRemoveAllChapters": "Вы уверены, что хотите удалить все главы?",
|
||||
"MessageConfirmRemoveAuthor": "Вы уверены, что хотите удалить автора \"{0}\"?",
|
||||
"MessageConfirmRemoveCollection": "Вы уверены, что хотите удалить коллекцию \"{0}\"?",
|
||||
"MessageConfirmRemoveEpisode": "Вы уверены, что хотите удалить эпизод \"{0}\"?",
|
||||
"MessageConfirmRemoveEpisode": "Вы уверены, что хотите удалить выпуск «{0}»?",
|
||||
"MessageConfirmRemoveEpisodeNote": "Примечание: Это не приведет к удалению аудиофайла, если не включить опцию \"Жесткое удаление файла\"",
|
||||
"MessageConfirmRemoveEpisodes": "Вы уверены, что хотите удалить {0} эпизодов?",
|
||||
"MessageConfirmRemoveEpisodes": "Вы уверены, что хотите удалить {0} выпусков?",
|
||||
"MessageConfirmRemoveListeningSessions": "Вы уверены, что хотите удалить {0} сеансов прослушивания?",
|
||||
"MessageConfirmRemoveMetadataFiles": "Вы уверены, что хотите удалить все файлы metadata. {0} файлов из папок элементов вашей библиотеки?",
|
||||
"MessageConfirmRemoveNarrator": "Вы уверены, что хотите удалить чтеца \"{0}\"?",
|
||||
@ -797,14 +806,14 @@
|
||||
"MessageConfirmSendEbookToDevice": "Вы уверены, что хотите отправить {0} e-книгу \"{1}\" на устройство \"{2}\"?",
|
||||
"MessageConfirmUnlinkOpenId": "Вы уверены, что хотите отвязать этого пользователя от OpenID?",
|
||||
"MessageDaysListenedInTheLastYear": "{0} дней прослушивания за последний год",
|
||||
"MessageDownloadingEpisode": "Эпизод скачивается",
|
||||
"MessageDownloadingEpisode": "Скачивание выпуска",
|
||||
"MessageDragFilesIntoTrackOrder": "Перетащите файлы для исправления порядка треков",
|
||||
"MessageEmbedFailed": "Вставка не удалась!",
|
||||
"MessageEmbedFinished": "Встраивание завершено!",
|
||||
"MessageEmbedQueue": "Поставлен в очередь для внедрения метаданных ({0} в очереди)",
|
||||
"MessageEpisodesQueuedForDownload": "{0} Эпизод(ов) запланировано для закачки",
|
||||
"MessageEpisodesQueuedForDownload": "{0} выпуск(ов) запланировано для скачивания",
|
||||
"MessageEreaderDevices": "Чтобы обеспечить доставку электронных книг, вам может потребоваться добавить указанный выше адрес электронной почты в качестве действительного отправителя для каждого устройства, перечисленного ниже.",
|
||||
"MessageFeedURLWillBe": "URL канала будет {0}",
|
||||
"MessageFeedURLWillBe": "URL-адрес ленты будет {0}",
|
||||
"MessageFetching": "Завершается...",
|
||||
"MessageForceReScanDescription": "будет сканировать все файлы снова, как свежее сканирование. Теги ID3 аудиофайлов, OPF-файлы и текстовые файлы будут сканироваться как новые.",
|
||||
"MessageHeatmapListeningTimeTooltip": "<strong>{0} прослушивание</strong> на {1}",
|
||||
@ -821,8 +830,8 @@
|
||||
"MessageM4BFailed": "M4B Ошибка!",
|
||||
"MessageM4BFinished": "M4B Завершено!",
|
||||
"MessageMapChapterTitles": "Сопоставление названий глав с существующими главами аудиокниги без корректировки временных меток",
|
||||
"MessageMarkAllEpisodesFinished": "Отметить все эпизоды как завершенные",
|
||||
"MessageMarkAllEpisodesNotFinished": "Отметить все эпизоды как не завершенные",
|
||||
"MessageMarkAllEpisodesFinished": "Отметить все выпуски как прослушанные",
|
||||
"MessageMarkAllEpisodesNotFinished": "Отметить все выпуски как непрослушанные",
|
||||
"MessageMarkAsFinished": "Отметить, как завершенную",
|
||||
"MessageMarkAsNotFinished": "Отметить, как не завершенную",
|
||||
"MessageMatchBooksDescription": "попытается сопоставить книги в библиотеке с книгой из выбранного поставщика поиска и заполнить пустые детали и обложку. Не перезаписывает сведения.",
|
||||
@ -837,8 +846,8 @@
|
||||
"MessageNoDevices": "Нет устройств",
|
||||
"MessageNoDownloadsInProgress": "В настоящее время загрузка не выполняется",
|
||||
"MessageNoDownloadsQueued": "Нет загрузок в очереди",
|
||||
"MessageNoEpisodeMatchesFound": "Совпадения эпизодов не найдены",
|
||||
"MessageNoEpisodes": "Нет эпизодов",
|
||||
"MessageNoEpisodeMatchesFound": "Совпадения выпусков не найдены",
|
||||
"MessageNoEpisodes": "Нету выпусков",
|
||||
"MessageNoFoldersAvailable": "Нет доступных папок",
|
||||
"MessageNoGenres": "Нет жанров",
|
||||
"MessageNoIssues": "Нет проблем",
|
||||
@ -848,7 +857,7 @@
|
||||
"MessageNoLogs": "Нет записей",
|
||||
"MessageNoMediaProgress": "Нет прогресса медиа",
|
||||
"MessageNoNotifications": "Нет уведомлений",
|
||||
"MessageNoPodcastFeed": "Недопустимый подкаст: Нет канала",
|
||||
"MessageNoPodcastFeed": "Недопустимый подкаст: Нет ленты",
|
||||
"MessageNoPodcastsFound": "Подкасты не найдены",
|
||||
"MessageNoResults": "Нет результатов",
|
||||
"MessageNoSearchResultsFor": "Нет результатов поиска для \"{0}\"",
|
||||
@ -859,20 +868,20 @@
|
||||
"MessageNoUserPlaylists": "У вас нет плейлистов",
|
||||
"MessageNoUserPlaylistsHelp": "Списки воспроизведения являются конфиденциальными. Только пользователь, который их создает, может их видеть.",
|
||||
"MessageNotYetImplemented": "Пока не реализовано",
|
||||
"MessageOpmlPreviewNote": "Примечание: Это предварительный просмотр разобранного файла OPML. Фактическое название подкаста будет взято из RSS-канала.",
|
||||
"MessageOpmlPreviewNote": "Примечание: Это предварительный просмотр разобранного файла OPML. Фактическое название подкаста будет взято из RSS-ленты.",
|
||||
"MessageOr": "или",
|
||||
"MessagePauseChapter": "Пауза воспроизведения главы",
|
||||
"MessagePlayChapter": "Прослушать начало главы",
|
||||
"MessagePlaylistCreateFromCollection": "Создать плейлист из коллекции",
|
||||
"MessagePleaseWait": "Пожалуйста подождите...",
|
||||
"MessagePodcastHasNoRSSFeedForMatching": "Подкаст не имеет URL-адреса RSS-канала, который можно использовать для поиска",
|
||||
"MessagePodcastSearchField": "Введите поисковый запрос или URL-адрес RSS-канала",
|
||||
"MessagePodcastHasNoRSSFeedForMatching": "Подкаст не имеет URL-адреса RSS-ленты, который можно использовать для поиска",
|
||||
"MessagePodcastSearchField": "Введите поисковый запрос или URL-адрес RSS-ленты",
|
||||
"MessageQuickEmbedInProgress": "Быстрое внедрение в процессе выполнения",
|
||||
"MessageQuickEmbedQueue": "Поставлен в очередь для быстрого внедрения ({0} в очереди)",
|
||||
"MessageQuickMatchAllEpisodes": "Быстрое сопоставление всех эпизодов",
|
||||
"MessageQuickMatchAllEpisodes": "Быстрое сопоставление всех выпусков",
|
||||
"MessageQuickMatchDescription": "Заполняет пустые детали элемента и обложку первым результатом поиска из «{0}». Не перезаписывает сведения, если не включен параметр сервера 'Предпочитать метаданные поиска'.",
|
||||
"MessageRemoveChapter": "Удалить главу",
|
||||
"MessageRemoveEpisodes": "Удалить {0} эпизод(ов)",
|
||||
"MessageRemoveEpisodes": "Удалить {0} выпуск(ов)",
|
||||
"MessageRemoveFromPlayerQueue": "Удалить из очереди воспроизведения",
|
||||
"MessageRemoveUserWarning": "Вы уверены, что хотите навсегда удалить пользователя \"{0}\"?",
|
||||
"MessageReportBugsAndContribute": "Сообщайте об ошибках, запрашивайте функции и вносите свой вклад на",
|
||||
@ -892,7 +901,7 @@
|
||||
"MessageStartPlaybackAtTime": "Начать воспроизведение для \"{0}\" с {1}?",
|
||||
"MessageTaskAudioFileNotWritable": "Аудиофайл \"{0}\" недоступен для записи",
|
||||
"MessageTaskCanceledByUser": "Задание отменено пользователем",
|
||||
"MessageTaskDownloadingEpisodeDescription": "Загрузка эпизода \"{0}\"",
|
||||
"MessageTaskDownloadingEpisodeDescription": "Скачивание выпуска «{0}»",
|
||||
"MessageTaskEmbeddingMetadata": "Внедрение метаданных",
|
||||
"MessageTaskEmbeddingMetadataDescription": "Встраивание метаданных в аудиокнигу \"{0}\"",
|
||||
"MessageTaskEncodingM4b": "Кодировка M4B",
|
||||
@ -907,9 +916,9 @@
|
||||
"MessageTaskMatchingBooksInLibrary": "Сопоставление книг в библиотеке \"{0}\"",
|
||||
"MessageTaskNoFilesToScan": "Нет файлов для сканирования",
|
||||
"MessageTaskOpmlImport": "Импорт OPML",
|
||||
"MessageTaskOpmlImportDescription": "Создание подкастов из {0} RSS-каналов",
|
||||
"MessageTaskOpmlImportDescription": "Создание подкастов из {0} RSS-ленты",
|
||||
"MessageTaskOpmlImportFeed": "Канал импорта OPML",
|
||||
"MessageTaskOpmlImportFeedDescription": "Импорт RSS-канала \"{0}\"",
|
||||
"MessageTaskOpmlImportFeedDescription": "Импорт RSS-ленты «{0}»",
|
||||
"MessageTaskOpmlImportFeedFailed": "Не удалось получить ленту подкаста",
|
||||
"MessageTaskOpmlImportFeedPodcastDescription": "Создание подкаста \"{0}\"",
|
||||
"MessageTaskOpmlImportFeedPodcastExists": "Подкаст уже существует по адресу",
|
||||
@ -917,7 +926,7 @@
|
||||
"MessageTaskOpmlImportFinished": "Добавлено {0} подкастов",
|
||||
"MessageTaskOpmlParseFailed": "Не удалось разобрать OPML-файл",
|
||||
"MessageTaskOpmlParseFastFail": "Недопустимый тег <opml> файла OPML не найден ИЛИ тег <outline> не найден",
|
||||
"MessageTaskOpmlParseNoneFound": "В OPML-файле не найдено ни одного канала",
|
||||
"MessageTaskOpmlParseNoneFound": "В OPML-файле не найдено ни одной ленты",
|
||||
"MessageTaskScanItemsAdded": "{0} добавлено",
|
||||
"MessageTaskScanItemsMissing": "{0} отсутствует",
|
||||
"MessageTaskScanItemsUpdated": "{0} обновлено",
|
||||
@ -937,22 +946,23 @@
|
||||
"NoteChangeRootPassword": "Пользователь root — единственный пользователь, который может иметь пустой пароль",
|
||||
"NoteChapterEditorTimes": "Примечание: Время начала первой главы должно оставаться в 0:00, а время начала последней главы не может превышать продолжительность этой аудиокниги.",
|
||||
"NoteFolderPicker": "Примечание: папки, уже сопоставленные, не будут отображаться",
|
||||
"NoteRSSFeedPodcastAppsHttps": "Предупреждение: Большинству приложений подкастов потребуется, чтобы URL-адрес RSS-канала использовал HTTPS",
|
||||
"NoteRSSFeedPodcastAppsPubDate": "Предупреждение: 1 или более эпизодов не имеют даты публикации. Некоторые приложения для подкастов требуют этого.",
|
||||
"NoteRSSFeedPodcastAppsHttps": "Предупреждение: Большинству приложений подкастов потребуется, чтобы URL-адрес RSS-ленты использовал HTTPS",
|
||||
"NoteRSSFeedPodcastAppsPubDate": "Предупреждение: 1 или более выпусков не имеют даты публикации. Некоторые приложения для подкастов требуют этого.",
|
||||
"NoteUploaderFoldersWithMediaFiles": "Папки с медиафайлами будут обрабатываться как отдельные элементы библиотеки.",
|
||||
"NoteUploaderOnlyAudioFiles": "Если загружать только аудиофайлы, то каждый аудиофайл будет обрабатываться как отдельная аудиокнига.",
|
||||
"NoteUploaderUnsupportedFiles": "Неподдерживаемые файлы игнорируются. При выборе или удалении папки другие файлы, не находящиеся в папке элемента, игнорируются.",
|
||||
"NotificationOnBackupCompletedDescription": "Запускается при завершении резервного копирования",
|
||||
"NotificationOnBackupFailedDescription": "Срабатывает при сбое резервного копирования",
|
||||
"NotificationOnEpisodeDownloadedDescription": "Запускается при автоматической загрузке эпизода подкаста",
|
||||
"NotificationOnRSSFeedDisabledDescription": "Срабатывает, когда автоматическая загрузка эпизодов отключена из-за слишком большого количества неудачных попыток",
|
||||
"NotificationOnRSSFeedFailedDescription": "Срабатывает при сбое запроса RSS-канала на автоматическую загрузку эпизода",
|
||||
"NotificationOnEpisodeDownloadedDescription": "Запускается при автоматической скачивании выпуска подкаста",
|
||||
"NotificationOnRSSFeedDisabledDescription": "Срабатывает, когда автоматическая скачка выпусков отключена из-за слишком большого количества неудачных попыток",
|
||||
"NotificationOnRSSFeedFailedDescription": "Срабатывает при сбое запроса RSS-ленты на автоматическую скачивание выпуска",
|
||||
"NotificationOnTestDescription": "Событие для тестирования системы оповещения",
|
||||
"PlaceholderBulkChapterInput": "Введите название главы или используйте нумерацию (например, «Выпуск 1», «Глава 10», «1.»)",
|
||||
"PlaceholderNewCollection": "Новое имя коллекции",
|
||||
"PlaceholderNewFolderPath": "Путь к новой папке",
|
||||
"PlaceholderNewPlaylist": "Новое название плейлиста",
|
||||
"PlaceholderSearch": "Поиск...",
|
||||
"PlaceholderSearchEpisode": "Поиск эпизода...",
|
||||
"PlaceholderSearchEpisode": "Поиск выпуска...",
|
||||
"StatsAuthorsAdded": "авторов добавлено",
|
||||
"StatsBooksAdded": "книг добавлено",
|
||||
"StatsBooksAdditional": "Некоторые дополнения включают в себя…",
|
||||
@ -1001,8 +1011,12 @@
|
||||
"ToastBookmarkCreateFailed": "Не удалось создать закладку",
|
||||
"ToastBookmarkCreateSuccess": "Добавлена закладка",
|
||||
"ToastBookmarkRemoveSuccess": "Закладка удалена",
|
||||
"ToastBulkChapterInvalidCount": "Введите число от 1 до 150",
|
||||
"ToastCachePurgeFailed": "Не удалось очистить кэш",
|
||||
"ToastCachePurgeSuccess": "Кэш успешно очищен",
|
||||
"ToastChapterLocked": "Глава заблокирована.",
|
||||
"ToastChapterStartTimeAdjusted": "Время начала главы скорректировано на {0} секунд",
|
||||
"ToastChaptersAllLocked": "Все главы заблокированы. Разблокируйте некоторые главы, чтобы сдвинуть их время.",
|
||||
"ToastChaptersHaveErrors": "Главы имеют ошибки",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Некорректное значение сдвига. Начало последней главы будет превышать продолжительность этой аудиокниги.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Некорректное значение сдвига. Первая глава будет иметь нулевую или отрицательную длину и будет перезаписана второй главой. Увеличьте начальную продолжительность второй главы.",
|
||||
@ -1024,8 +1038,8 @@
|
||||
"ToastEncodeCancelFailed": "Не удалось отменить кодирование",
|
||||
"ToastEncodeCancelSucces": "Кодирование отменено",
|
||||
"ToastEpisodeDownloadQueueClearFailed": "Не удалось очистить очередь",
|
||||
"ToastEpisodeDownloadQueueClearSuccess": "Очередь загрузки эпизода очищена",
|
||||
"ToastEpisodeUpdateSuccess": "{0 эпизодов обновлено",
|
||||
"ToastEpisodeDownloadQueueClearSuccess": "Очищена очередь скачивания выпусков",
|
||||
"ToastEpisodeUpdateSuccess": "{0} выпусков обновлено",
|
||||
"ToastErrorCannotShare": "Невозможно предоставить общий доступ на этом устройстве",
|
||||
"ToastFailedToCreate": "Не удалось создать",
|
||||
"ToastFailedToDelete": "Не удалось удалить",
|
||||
@ -1034,7 +1048,7 @@
|
||||
"ToastFailedToShare": "Не удалось поделиться",
|
||||
"ToastFailedToUpdate": "Не удалось обновить",
|
||||
"ToastInvalidImageUrl": "Неверный URL изображения",
|
||||
"ToastInvalidMaxEpisodesToDownload": "Недопустимое максимальное количество загружаемых эпизодов",
|
||||
"ToastInvalidMaxEpisodesToDownload": "Недопустимое максимальное количество скачиваемых выпусков",
|
||||
"ToastInvalidUrl": "Неверный URL",
|
||||
"ToastInvalidUrls": "Один или несколько URL неверны",
|
||||
"ToastItemCoverUpdateSuccess": "Обложка элемента обновлена",
|
||||
@ -1062,15 +1076,15 @@
|
||||
"ToastNameEmailRequired": "Имя и адрес электронной почты обязательны",
|
||||
"ToastNameRequired": "Имя обязательно для заполнения",
|
||||
"ToastNewApiKeyUserError": "Необходимо выбрать пользователя",
|
||||
"ToastNewEpisodesFound": "{0} новых эпизодов найдено",
|
||||
"ToastNewEpisodesFound": "Найдено {0} новых выпусков",
|
||||
"ToastNewUserCreatedFailed": "Не удалось создать учетную запись: \"{0}\"",
|
||||
"ToastNewUserCreatedSuccess": "Новая учетная запись создана",
|
||||
"ToastNewUserLibraryError": "Необходимо выбрать хотя бы одну библиотеку",
|
||||
"ToastNewUserPasswordError": "Должен иметь пароль, только пользователь root может иметь пустой пароль",
|
||||
"ToastNewUserTagError": "Необходимо выбрать хотя бы один тег",
|
||||
"ToastNewUserUsernameError": "Введите имя пользователя",
|
||||
"ToastNoNewEpisodesFound": "Новых эпизодов не найдено",
|
||||
"ToastNoRSSFeed": "У подкаста нет RSS-канала",
|
||||
"ToastNoNewEpisodesFound": "Новых выпусков нету",
|
||||
"ToastNoRSSFeed": "У подкаста нет RSS-ленты",
|
||||
"ToastNoUpdatesNecessary": "Обновления не требуются",
|
||||
"ToastNotificationCreateFailed": "Не удалось создать уведомление",
|
||||
"ToastNotificationDeleteFailed": "Не удалось удалить уведомление",
|
||||
@ -1086,16 +1100,17 @@
|
||||
"ToastPlaylistUpdateSuccess": "Плейлист обновлен",
|
||||
"ToastPodcastCreateFailed": "Не удалось создать подкаст",
|
||||
"ToastPodcastCreateSuccess": "Подкаст успешно создан",
|
||||
"ToastPodcastEpisodeUpdated": "Выпуск обновлён",
|
||||
"ToastPodcastGetFeedFailed": "Не удалось получить ленту подкастов",
|
||||
"ToastPodcastNoEpisodesInFeed": "В RSS-ленте эпизодов не найдено",
|
||||
"ToastPodcastNoRssFeed": "В подкасте нет RSS-канала",
|
||||
"ToastPodcastNoEpisodesInFeed": "В RSS-ленте выпусков не найдено",
|
||||
"ToastPodcastNoRssFeed": "В подкасте нет RSS-ленты",
|
||||
"ToastProgressIsNotBeingSynced": "Прогресс не синхронизируется, перезапустите воспроизведение",
|
||||
"ToastProviderCreatedFailed": "Не удалось добавить провайдера",
|
||||
"ToastProviderCreatedSuccess": "Добавлен новый провайдер",
|
||||
"ToastProviderNameAndUrlRequired": "Имя и URL обязательные",
|
||||
"ToastProviderRemoveSuccess": "Провайдер удален",
|
||||
"ToastRSSFeedCloseFailed": "Не удалось закрыть RSS-канал",
|
||||
"ToastRSSFeedCloseSuccess": "RSS-канал закрыт",
|
||||
"ToastRSSFeedCloseFailed": "Не удалось закрыть RSS-ленту",
|
||||
"ToastRSSFeedCloseSuccess": "RSS-лента закрыта",
|
||||
"ToastRemoveFailed": "Не удалось удалить",
|
||||
"ToastRemoveItemFromCollectionFailed": "Не удалось удалить элемент из коллекции",
|
||||
"ToastRemoveItemFromCollectionSuccess": "Элемент удален из коллекции",
|
||||
@ -1136,5 +1151,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "Пароль успешно изменен",
|
||||
"ToastUserPasswordMismatch": "Пароли не совпадают",
|
||||
"ToastUserPasswordMustChange": "Новый пароль не может совпадать со старым паролем",
|
||||
"ToastUserRootRequireName": "Необходимо ввести имя пользователя root"
|
||||
"ToastUserRootRequireName": "Необходимо ввести имя пользователя root",
|
||||
"TooltipAddChapters": "Добавить главу(ы)",
|
||||
"TooltipAddOneSecond": "Добавить 1 секунду",
|
||||
"TooltipAdjustChapterStart": "Нажмите, чтобы настроить время начала",
|
||||
"TooltipLockAllChapters": "Заблокировать все главы",
|
||||
"TooltipLockChapter": "Заблокировать главу (Shift+клик для диапазона)",
|
||||
"TooltipSubtractOneSecond": "Вычтите 1 секунду",
|
||||
"TooltipUnlockAllChapters": "Разблокируйте все главы",
|
||||
"TooltipUnlockChapter": "Разблокируйте главу (Shift+клик для диапазона)"
|
||||
}
|
||||
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "Orodja za upravljanje datotek zvočnih knjig",
|
||||
"HeaderAuthentication": "Avtentikacija",
|
||||
"HeaderBackups": "Varnostne kopije",
|
||||
"HeaderBulkChapterModal": "Dodaj več poglavij",
|
||||
"HeaderChangePassword": "Zamenjaj geslo",
|
||||
"HeaderChapters": "Poglavja",
|
||||
"HeaderChooseAFolder": "Izberite mapo",
|
||||
@ -199,6 +200,7 @@
|
||||
"HeaderSettingsExperimental": "Eksperimentalne funkcije",
|
||||
"HeaderSettingsGeneral": "Splošno",
|
||||
"HeaderSettingsScanner": "Pregledovalnik",
|
||||
"HeaderSettingsSecurity": "Varnost",
|
||||
"HeaderSettingsWebClient": "Spletni odjemalec",
|
||||
"HeaderSleepTimer": "Časovnik za izklop",
|
||||
"HeaderStatsLargestItems": "Največji elementi",
|
||||
@ -293,6 +295,7 @@
|
||||
"LabelContinueListening": "Nadaljuj poslušanje",
|
||||
"LabelContinueReading": "Nadaljuj branje",
|
||||
"LabelContinueSeries": "Nadaljuj s serijo",
|
||||
"LabelCorsAllowed": "Dovoljeni CORS viri",
|
||||
"LabelCover": "Naslovnica",
|
||||
"LabelCoverImageURL": "URL naslovne slike",
|
||||
"LabelCoverProvider": "Ponudnik naslovnic",
|
||||
@ -306,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Izbriši iz datotečnega sistema (počisti polje, če želiš odstraniti samo iz zbirke podatkov)",
|
||||
"LabelDescription": "Opis",
|
||||
"LabelDeselectAll": "Odznači vse",
|
||||
"LabelDetectedPattern": "Zaznan vzorec:",
|
||||
"LabelDevice": "Naprava",
|
||||
"LabelDeviceInfo": "Podatki o napravi",
|
||||
"LabelDeviceIsAvailableTo": "Naprava je na voljo za...",
|
||||
@ -470,6 +474,7 @@
|
||||
"LabelNewestAuthors": "Najnovejši avtorji",
|
||||
"LabelNewestEpisodes": "Najnovejše epizode",
|
||||
"LabelNextBackupDate": "Naslednji datum varnostnega kopiranja",
|
||||
"LabelNextChapters": "Naslednja poglavja bodo:",
|
||||
"LabelNextScheduledRun": "Naslednji načrtovani zagon",
|
||||
"LabelNoApiKeys": "Ni API ključev",
|
||||
"LabelNoCustomMetadataProviders": "Ni ponudnikov metapodatkov po meri",
|
||||
@ -487,6 +492,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Največja velikost čakalne vrste za dogodke obvestil",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Dogodki so omejeni na sprožitev 1 na sekundo. Dogodki bodo prezrti, če je čakalna vrsta najvišja. To preprečuje neželeno pošiljanje obvestil.",
|
||||
"LabelNumberOfBooks": "Število knjig",
|
||||
"LabelNumberOfChapters": "Število poglavij:",
|
||||
"LabelNumberOfEpisodes": "# epizod",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Ime zahtevka OpenID, ki vsebuje napredna dovoljenja za uporabniška dejanja v aplikaciji, ki bodo veljala za neskrbniške vloge (<b>če je konfigurirano</b>). Če trditev manjka v odgovoru, bo dostop do ABS zavrnjen. Če ena možnost manjka, bo obravnavana kot <code>false</code>. Zagotovite, da se zahtevek ponudnika identitete ujema s pričakovano strukturo:",
|
||||
"LabelOpenIDClaims": "Pustite naslednje možnosti prazne, da onemogočite napredno dodeljevanje skupin in dovoljenj, nato pa samodejno dodelite skupino 'Uporabnik'.",
|
||||
@ -743,6 +749,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "Ni rezultatov za filter \"{0}: {1}\"",
|
||||
"MessageBookshelfNoResultsForQuery": "Ni rezultatov za poizvedbo",
|
||||
"MessageBookshelfNoSeries": "Nimate serij",
|
||||
"MessageBulkChapterPattern": "Koliko poglavij želite dodati s tem vzorcem oštevilčenja?",
|
||||
"MessageChapterEndIsAfter": "Konec poglavja je po koncu zvočne knjige",
|
||||
"MessageChapterErrorFirstNotZero": "Prvo poglavje se mora začeti pri 0",
|
||||
"MessageChapterErrorStartGteDuration": "Neveljaven začetni čas, mora biti krajši od trajanja zvočne knjige",
|
||||
@ -805,6 +812,8 @@
|
||||
"MessageFeedURLWillBe": "URL vira bo {0}",
|
||||
"MessageFetching": "Pridobivam...",
|
||||
"MessageForceReScanDescription": "bo znova pregledal vse datoteke kot pregled od začetka. Oznake ID3 zvočnih datotek, datoteke OPF in besedilne datoteke bodo pregledane kot nove.",
|
||||
"MessageHeatmapListeningTimeTooltip": "<strong>{0} posluša</strong> na {1}",
|
||||
"MessageHeatmapNoListeningSessions": "Ni sej poslušanj na {0}",
|
||||
"MessageImportantNotice": "Pomembno obvestilo!",
|
||||
"MessageInsertChapterBelow": "Spodaj vstavite poglavje",
|
||||
"MessageInvalidAsin": "Neveljaven ASIN",
|
||||
@ -944,6 +953,7 @@
|
||||
"NotificationOnRSSFeedDisabledDescription": "Sproži se, ko so samodejni prenosi epizod onemogočeni zaradi preveč neuspelih poskusov",
|
||||
"NotificationOnRSSFeedFailedDescription": "Sproži se, ko zahteva za vir RSS za samodejni prenos epizode ne uspe",
|
||||
"NotificationOnTestDescription": "Dogodek za testiranje sistema obveščanja",
|
||||
"PlaceholderBulkChapterInput": "Vnesite naslov poglavja ali uporabite oštevilčenje (npr. 'Epizoda 1', 'Poglavje 10', '1.')",
|
||||
"PlaceholderNewCollection": "Novo ime zbirke",
|
||||
"PlaceholderNewFolderPath": "Pot nove mape",
|
||||
"PlaceholderNewPlaylist": "Novo ime seznama predvajanja",
|
||||
@ -997,8 +1007,12 @@
|
||||
"ToastBookmarkCreateFailed": "Zaznamka ni bilo mogoče ustvariti",
|
||||
"ToastBookmarkCreateSuccess": "Zaznamek dodan",
|
||||
"ToastBookmarkRemoveSuccess": "Zaznamek odstranjen",
|
||||
"ToastBulkChapterInvalidCount": "Vnesite število med 1 in 150",
|
||||
"ToastCachePurgeFailed": "Čiščenje predpomnilnika ni uspelo",
|
||||
"ToastCachePurgeSuccess": "Predpomnilnik je bil uspešno očiščen",
|
||||
"ToastChapterLocked": "Poglavje je zaklenjeno.",
|
||||
"ToastChapterStartTimeAdjusted": "Začetni čas poglavja je bil prilagojen za {0} sekund",
|
||||
"ToastChaptersAllLocked": "Vsa poglavja so zaklenjena. Odklenite nekatera poglavja, da premaknete njihove čase.",
|
||||
"ToastChaptersHaveErrors": "Poglavja imajo napake",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Neveljavna vrednost zamika. Začetni čas zadnjega poglavja bi presegel trajanje te zvočne knjige.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Neveljavna vrednost zamika. Prvo poglavje bi imelo ničelno ali negativno dolžino in bi ga prepisalo drugo poglavje. Povečajte začetno trajanje drugega poglavja.",
|
||||
@ -1032,6 +1046,7 @@
|
||||
"ToastInvalidImageUrl": "Neveljaven URL slike",
|
||||
"ToastInvalidMaxEpisodesToDownload": "Neveljavno največje število epizod za prenos",
|
||||
"ToastInvalidUrl": "Neveljaven URL",
|
||||
"ToastInvalidUrls": "Eden ali več URL-jev je neveljavnih",
|
||||
"ToastItemCoverUpdateSuccess": "Naslovnica elementa je bila posodobljena",
|
||||
"ToastItemDeletedFailed": "Elementa ni bilo mogoče izbrisati",
|
||||
"ToastItemDeletedSuccess": "Element je bil izbrisan",
|
||||
@ -1081,6 +1096,7 @@
|
||||
"ToastPlaylistUpdateSuccess": "Seznam predvajanja je bil posodobljen",
|
||||
"ToastPodcastCreateFailed": "Podcasta ni bilo mogoče ustvariti",
|
||||
"ToastPodcastCreateSuccess": "Podcast je bil uspešno ustvarjen",
|
||||
"ToastPodcastEpisodeUpdated": "Epizoda je bila posodobljena",
|
||||
"ToastPodcastGetFeedFailed": "Vira podcasta ni bilo mogoče pridobiti",
|
||||
"ToastPodcastNoEpisodesInFeed": "V viru RSS ni bilo mogoče najti nobene epizode",
|
||||
"ToastPodcastNoRssFeed": "Podcast nima vira RSS",
|
||||
@ -1131,5 +1147,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "Geslo je bilo uspešno spremenjeno",
|
||||
"ToastUserPasswordMismatch": "Gesli se ne ujemata",
|
||||
"ToastUserPasswordMustChange": "Novo geslo se ne sme ujemati s starim geslom",
|
||||
"ToastUserRootRequireName": "Vnesti morate korensko uporabniško ime"
|
||||
"ToastUserRootRequireName": "Vnesti morate korensko uporabniško ime",
|
||||
"TooltipAddChapters": "Dodaj poglavje(-a)",
|
||||
"TooltipAddOneSecond": "Dodaj 1 sekundo",
|
||||
"TooltipAdjustChapterStart": "Kliknite za prilagoditev začetnega časa",
|
||||
"TooltipLockAllChapters": "Zakleni vsa poglavja",
|
||||
"TooltipLockChapter": "Zakleni poglavje (Shift+klik za obseg)",
|
||||
"TooltipSubtractOneSecond": "Odštej 1 sekundo",
|
||||
"TooltipUnlockAllChapters": "Odkleni vsa poglavja",
|
||||
"TooltipUnlockChapter": "Odkleni poglavje (Shift+klik za obseg)"
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@
|
||||
"ButtonStats": "Statistik",
|
||||
"ButtonSubmit": "Skicka",
|
||||
"ButtonTest": "Testa",
|
||||
"ButtonUnlinkOpenId": "Koppla från OpenID",
|
||||
"ButtonUnlinkOpenId": "Koppla ifrån OpenID",
|
||||
"ButtonUpload": "Ladda upp",
|
||||
"ButtonUploadBackup": "Läs in säkerhetskopia",
|
||||
"ButtonUploadCover": "Ladda upp omslag",
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "Hantering av ljudboksfiler",
|
||||
"HeaderAuthentication": "Autentisering",
|
||||
"HeaderBackups": "Säkerhetskopior",
|
||||
"HeaderBulkChapterModal": "Addera flera kapitel",
|
||||
"HeaderChangePassword": "Ändra lösenord",
|
||||
"HeaderChapters": "Kapitel",
|
||||
"HeaderChooseAFolder": "Välj en mapp",
|
||||
@ -181,6 +182,7 @@
|
||||
"HeaderPlaylist": "Spellista",
|
||||
"HeaderPlaylistItems": "Böcker i spellistan",
|
||||
"HeaderPodcastsToAdd": "Podcaster att lägga till",
|
||||
"HeaderPresets": "Förinställningar",
|
||||
"HeaderPreviewCover": "Förhandsgranska omslag",
|
||||
"HeaderRSSFeedGeneral": "RSS-information",
|
||||
"HeaderRSSFeedIsOpen": "RSS-flödet är öppet",
|
||||
@ -198,6 +200,7 @@
|
||||
"HeaderSettingsExperimental": "Experimentella funktioner",
|
||||
"HeaderSettingsGeneral": "Allmänt",
|
||||
"HeaderSettingsScanner": "Skanner",
|
||||
"HeaderSettingsSecurity": "Säkerhet",
|
||||
"HeaderSettingsWebClient": "Webklient",
|
||||
"HeaderSleepTimer": "Timer för att sova",
|
||||
"HeaderStatsLargestItems": "Största objekten",
|
||||
@ -241,6 +244,7 @@
|
||||
"LabelAlreadyInYourLibrary": "Finns redan i samlingen",
|
||||
"LabelApiKeyCreated": "API-nyckel \"{0}\" har adderats.",
|
||||
"LabelApiKeyCreatedDescription": "Se till att kopiera API-nyckeln omedelbart eftersom du inte kommer att kunna se den igen.",
|
||||
"LabelApiKeyUser": "Utför på uppdrag av användare",
|
||||
"LabelApiKeyUserDescription": "Denna API-nyckel kommer att ha samma behörigheter som användaren den agerar på uppdrag av. Detta kommer att visas på samma sätt i loggarna som om användaren gjorde begäran.",
|
||||
"LabelApiToken": "API-token",
|
||||
"LabelAppend": "Lägg till",
|
||||
@ -291,12 +295,13 @@
|
||||
"LabelContinueListening": "Fortsätt att lyssna",
|
||||
"LabelContinueReading": "Fortsätt att läsa",
|
||||
"LabelContinueSeries": "Fortsätt med serien",
|
||||
"LabelCorsAllowed": "Godkänd CORS Origins",
|
||||
"LabelCover": "Omslag",
|
||||
"LabelCoverImageURL": "URL till omslagsbild",
|
||||
"LabelCoverProvider": "Källa för omslag",
|
||||
"LabelCreatedAt": "Skapad",
|
||||
"LabelCronExpression": "Schemaläggning med hjälp av Cron (Cron Expression)",
|
||||
"LabelCurrent": "Nuvarande plats",
|
||||
"LabelCurrent": "Nuvarande omslag",
|
||||
"LabelCurrently": "För närvarande:",
|
||||
"LabelCustomCronExpression": "Anpassat Cron-uttryck:",
|
||||
"LabelDatetime": "Datum och klockslag",
|
||||
@ -304,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Ta även bort från filsystem (avmarkera = raderar endast från databasen)",
|
||||
"LabelDescription": "Beskrivning",
|
||||
"LabelDeselectAll": "Avmarkera alla",
|
||||
"LabelDetectedPattern": "Identifierat mönster:",
|
||||
"LabelDevice": "Enhet",
|
||||
"LabelDeviceInfo": "Enhetsinformation",
|
||||
"LabelDeviceIsAvailableTo": "Enhet är tillgänglig för...",
|
||||
@ -325,9 +331,9 @@
|
||||
"LabelEmail": "E-post",
|
||||
"LabelEmailSettingsFromAddress": "Från e-postadress",
|
||||
"LabelEmailSettingsRejectUnauthorized": "Avvisa icke-autentiserade certifikat",
|
||||
"LabelEmailSettingsRejectUnauthorizedHelp": "Inaktivering av SSL-certifikatsvalidering kan exponera din anslutning för säkerhetsrisker, såsom man-in-the-middle-attacker. Inaktivera bara denna inställning om du förstår implikationerna och litar på den epostserver du ansluter till.",
|
||||
"LabelEmailSettingsRejectUnauthorizedHelp": "Om valideringen av SSL-certifikat stängs av kan det exponera din anslutning för säkerhetsrisker, som attacker av typen 'man-in-the-middle'. Stäng endast av denna inställning om du förstår konsekvenserna och litar på den epostserver du är ansluten till.",
|
||||
"LabelEmailSettingsSecure": "Säker",
|
||||
"LabelEmailSettingsSecureHelp": "Om sant kommer anslutningen att använda TLS vid anslutning till servern. Om falskt används TLS om servern stöder STARTTLS-tillägget. I de flesta fall, om du ansluter till port 465, bör du ställa in detta värde till sant. För port 587 eller 25, låt det vara falskt. (från nodemailer.com/smtp/#authentication)",
|
||||
"LabelEmailSettingsSecureHelp": "Om aktiverad kommer anslutningen att använda TLS vid anslutning till servern. Annars används TLS om servern stöder STARTTLS-tillägget. I de flesta fall, om du ansluter till port 465, bör detta alternativ vara aktiverat. För port 587 eller 25, bör det vara avstängt. (från nodemailer.com/smtp/#authentication)",
|
||||
"LabelEmailSettingsTestAddress": "E-postadress för test",
|
||||
"LabelEmbeddedCover": "Infogat omslag",
|
||||
"LabelEnable": "Aktivera",
|
||||
@ -364,14 +370,15 @@
|
||||
"LabelFeedURL": "URL-adress för flödet",
|
||||
"LabelFetchingMetadata": "Hämtar metadata",
|
||||
"LabelFile": "Fil",
|
||||
"LabelFileBirthtime": "Tidpunkt, fil skapad",
|
||||
"LabelFileBirthtime": "Tidpunkt, adderad",
|
||||
"LabelFileBornDate": "Skapad {0}",
|
||||
"LabelFileModified": "Tidpunkt, fil ändrad",
|
||||
"LabelFileModified": "Tidpunkt, ändrad",
|
||||
"LabelFileModifiedDate": "Ändrad {0}",
|
||||
"LabelFilename": "Filnamn",
|
||||
"LabelFilterByUser": "Välj användare",
|
||||
"LabelFindEpisodes": "Sök avsnitt",
|
||||
"LabelFinished": "Avslutad",
|
||||
"LabelFinishedDate": "Avslutad {0}",
|
||||
"LabelFolder": "Mapp",
|
||||
"LabelFolders": "Mappar",
|
||||
"LabelFontBold": "Fetstil",
|
||||
@ -416,6 +423,7 @@
|
||||
"LabelLanguages": "Språk",
|
||||
"LabelLastBookAdded": "Bok senast adderad",
|
||||
"LabelLastBookUpdated": "Bok senast uppdaterad",
|
||||
"LabelLastProgressDate": "Senaste framsteg: {0}",
|
||||
"LabelLastSeen": "Senast inloggad",
|
||||
"LabelLastTime": "Senaste tillfället",
|
||||
"LabelLastUpdate": "Senast uppdaterad",
|
||||
@ -428,6 +436,9 @@
|
||||
"LabelLibraryFilterSublistEmpty": "Ingen {0}",
|
||||
"LabelLibraryItem": "Objekt",
|
||||
"LabelLibraryName": "Biblioteksnamn",
|
||||
"LabelLibrarySortByProgress": "Framsteg uppdaterat",
|
||||
"LabelLibrarySortByProgressFinished": "Avslutsdag",
|
||||
"LabelLibrarySortByProgressStarted": "Startdag",
|
||||
"LabelLimit": "Begränsning",
|
||||
"LabelLineSpacing": "Radavstånd",
|
||||
"LabelListenAgain": "Lyssna igen",
|
||||
@ -438,7 +449,7 @@
|
||||
"LabelLowestPriority": "Lägst prioritet",
|
||||
"LabelMatchConfidence": "Förtroende",
|
||||
"LabelMatchExistingUsersBy": "Matcha befintliga användare med",
|
||||
"LabelMatchExistingUsersByDescription": "Används för att koppla existerande användare. När kopplingen sker kommer användaren att matchas med ett unikt ID från SSO-leverantören.",
|
||||
"LabelMatchExistingUsersByDescription": "Används för att ansluta befintlig användare. När anslutningen sker kommer användaren att matchas med ett unikt ID från SSO-leverantören.",
|
||||
"LabelMaxEpisodesToDownload": "Maximalt antal avsnitt att ladda ner (0 = obegränsat).",
|
||||
"LabelMaxEpisodesToDownloadPerCheck": "Maximalt antal nya avsnitt att ladda ner per tillfälle",
|
||||
"LabelMaxEpisodesToKeep": "Maximalt antal avsnitt att behålla",
|
||||
@ -451,7 +462,7 @@
|
||||
"LabelMetadataProvider": "Källa för metadata",
|
||||
"LabelMinute": "Minut",
|
||||
"LabelMinutes": "Minuter",
|
||||
"LabelMissing": "Saknar",
|
||||
"LabelMissing": "Saknas",
|
||||
"LabelMissingEbook": "Saknar e-bok",
|
||||
"LabelMissingSupplementaryEbook": "Saknar kompletterande e-bok",
|
||||
"LabelMobileRedirectURIs": "Tillåtna mobila omdirigerings-URI:er",
|
||||
@ -461,11 +472,12 @@
|
||||
"LabelName": "Namn",
|
||||
"LabelNarrator": "Uppläsare",
|
||||
"LabelNarrators": "Uppläsare",
|
||||
"LabelNew": "Ny plats",
|
||||
"LabelNew": "Nytt omslag",
|
||||
"LabelNewPassword": "Nytt lösenord",
|
||||
"LabelNewestAuthors": "Senaste författarna",
|
||||
"LabelNewestEpisodes": "Senaste avsnitten",
|
||||
"LabelNextBackupDate": "Nästa tillfälle för säkerhetskopiering",
|
||||
"LabelNextChapters": "Nästa kapitel kommer att vara:",
|
||||
"LabelNextScheduledRun": "Nästa schemalagda körning",
|
||||
"LabelNoApiKeys": "Ingen API-nyckel",
|
||||
"LabelNoCustomMetadataProviders": "Ingen egen källa för metadata",
|
||||
@ -473,16 +485,17 @@
|
||||
"LabelNotFinished": "Ej avslutad",
|
||||
"LabelNotStarted": "Ej påbörjad",
|
||||
"LabelNotes": "Anteckningar",
|
||||
"LabelNotificationAppriseURL": "Apprise URL(er)",
|
||||
"LabelNotificationAppriseURL": "Apprise URL-adress(er)",
|
||||
"LabelNotificationAvailableVariables": "Tillgängliga variabler",
|
||||
"LabelNotificationBodyTemplate": "Kroppsmall",
|
||||
"LabelNotificationEvent": "Aviseringshändelse",
|
||||
"LabelNotificationEvent": "Händelser som skickar ett meddelande",
|
||||
"LabelNotificationTitleTemplate": "Titelsmall",
|
||||
"LabelNotificationsMaxFailedAttempts": "Max antal misslyckade försök",
|
||||
"LabelNotificationsMaxFailedAttemptsHelp": "Aviseringar inaktiveras när de misslyckas med att skickas så många gånger",
|
||||
"LabelNotificationsMaxQueueSize": "Max köstorlek för aviseringsevenemang",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Evenemang är begränsade till att utlösa ett per sekund. Evenemang kommer att ignoreras om kön är full. Detta förhindrar aviseringsspam.",
|
||||
"LabelNumberOfBooks": "Antal böcker",
|
||||
"LabelNumberOfChapters": "Antal kapitel:",
|
||||
"LabelNumberOfEpisodes": "# av Avsnitt",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Namn på OpenID-anspråket som innehåller avancerade behörigheter för användaråtgärder i applikationen, vilka gäller för icke-administratörsroller (<b>om konfigurerat</b>). Om anspråket saknas i svaret kommer åtkomst till ABS att nekas. Om ett enskilt alternativ saknas kommer det att behandlas som <code>falskt</code>. Se till att identitetsleverantörens anspråk matchar den förväntade strukturen:",
|
||||
"LabelOpenIDClaims": "Lämna följande alternativ tomma för att inaktivera avancerad grupp- och behörighetstilldelning, och tilldela då automatiskt gruppen 'Användare'.",
|
||||
@ -517,6 +530,7 @@
|
||||
"LabelPrimaryEbook": "Primär e-bok",
|
||||
"LabelProgress": "Framsteg",
|
||||
"LabelProvider": "Källa",
|
||||
"LabelProviderAuthorizationValue": "Värde för auktoriseringsheader",
|
||||
"LabelPubDate": "Publiceringsdatum",
|
||||
"LabelPublishYear": "Utgivningsår",
|
||||
"LabelPublishedDate": "Publicerad {0}",
|
||||
@ -526,7 +540,7 @@
|
||||
"LabelPublishers": "Utgivare",
|
||||
"LabelRSSFeedCustomOwnerEmail": "Anpassad ägarens e-post",
|
||||
"LabelRSSFeedCustomOwnerName": "Anpassat ägarnamn",
|
||||
"LabelRSSFeedOpen": "Öppna RSS-flöde",
|
||||
"LabelRSSFeedOpen": "RSS-flöde öppet",
|
||||
"LabelRSSFeedPreventIndexing": "Förhindra indexering",
|
||||
"LabelRSSFeedSlug": "RSS-flödesslag",
|
||||
"LabelRSSFeedURL": "URL-adress för RSS-flödet",
|
||||
@ -609,18 +623,22 @@
|
||||
"LabelSettingsTimeFormat": "Tidsformat",
|
||||
"LabelShare": "Dela",
|
||||
"LabelShareDownloadableHelp": "Tillåt att användare som fått en delad länk att ladda ner ett komprimerat objekt från biblioteket.",
|
||||
"LabelShareOpen": "Delning öppet",
|
||||
"LabelShareURL": "Dela URL-länk",
|
||||
"LabelShowAll": "Visa alla",
|
||||
"LabelShowSeconds": "Visa i sekunder",
|
||||
"LabelShowSubtitles": "Visa underrubriker",
|
||||
"LabelSize": "Storlek",
|
||||
"LabelSleepTimer": "Sovtimer",
|
||||
"LabelSlug": "Kortnamn",
|
||||
"LabelSortAscending": "Stigande",
|
||||
"LabelSortDescending": "Fallande",
|
||||
"LabelSortPubDate": "Sortera efter publiceringsdatum",
|
||||
"LabelStart": "Start",
|
||||
"LabelStartTime": "Starttid",
|
||||
"LabelStarted": "Startad",
|
||||
"LabelStartedAt": "Startades",
|
||||
"LabelStartedDate": "Påbörjad {0}",
|
||||
"LabelStatsAudioTracks": "Ljudfiler",
|
||||
"LabelStatsAuthors": "Författare",
|
||||
"LabelStatsBestDay": "Bästa dag",
|
||||
@ -673,10 +691,10 @@
|
||||
"LabelTotalTimeListened": "Total tid lyssnad",
|
||||
"LabelTrackFromFilename": "Plats från filnamnet",
|
||||
"LabelTrackFromMetadata": "Plats från metadata",
|
||||
"LabelTracks": "Spår",
|
||||
"LabelTracksMultiTrack": "Flerspårigt",
|
||||
"LabelTracksNone": "Inga spår",
|
||||
"LabelTracksSingleTrack": "Enspårigt",
|
||||
"LabelTracks": "Ljudspår",
|
||||
"LabelTracksMultiTrack": "Flera ljudspår",
|
||||
"LabelTracksNone": "Inga ljudspår",
|
||||
"LabelTracksSingleTrack": "Ett ljudspår",
|
||||
"LabelTrailer": "Trailer",
|
||||
"LabelType": "Typ",
|
||||
"LabelUnabridged": "Oavkortad",
|
||||
@ -705,6 +723,7 @@
|
||||
"LabelViewPlayerSettings": "Visa inställningar för uppspelning",
|
||||
"LabelViewQueue": "Visa spellista",
|
||||
"LabelVolume": "Volym",
|
||||
"LabelWebRedirectURLsDescription": "Auktorisera dessa URLer i din OAuth-leverantör för att tillåta omdirigering tillbaka till webbappen efter inloggning:",
|
||||
"LabelWeekdaysToRun": "Veckodagar att köra skanning",
|
||||
"LabelXBooks": "{0} böcker",
|
||||
"LabelXItems": "{0} objekt",
|
||||
@ -715,7 +734,8 @@
|
||||
"LabelYourPlaylists": "Dina spellistor",
|
||||
"LabelYourProgress": "Framsteg",
|
||||
"MessageAddToPlayerQueue": "Lägg till i spellistan",
|
||||
"MessageAppriseDescription": "För att använda den här funktionen behöver du ha en instans av <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> igång eller en API som hanterar dessa begäranden. <br />Apprise API-urlen bör vara hela URL-sökvägen för att skicka meddelandet, t.ex., om din API-instans är tillgänglig på <code>http://192.168.1.1:8337</code>, bör du ange <code>http://192.168.1.1:8337/notify</code>.",
|
||||
"MessageAppriseDescription": "För att använda den här funktionen behöver du ha en instans av <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> startad eller ett API som hanterar dessa förfrågningar. <br />URL-adressen till Apprise API bör vara hela sökvägen för att skicka meddelandet, t.ex., om din API-instans är tillgänglig på <code>http://192.168.1.1:8337</code>, bör du ange <code>http://192.168.1.1:8337/notify</code>.",
|
||||
"MessageAsinCheck": "Säkerställ att du använder ASIN-kod för rätt region/område.",
|
||||
"MessageAuthenticationLegacyTokenWarning": "Legacy API-koder kommer att raderas i framtiden. Använd denna istället: <a href=\"/config/api-keys\">API Keys</a>.",
|
||||
"MessageAuthenticationOIDCChangesRestart": "Du måste starta om servern efter att du ändrat eller adderat OIDC (OpenID Connect).",
|
||||
"MessageAuthenticationSecurityMessage": "Identifieringen av användare har förbättrats av säkerhetsskäl. Alla användare måste därför logga in på nytt.",
|
||||
@ -759,7 +779,7 @@
|
||||
"MessageConfirmMarkSeriesFinished": "Är du säker på att du vill markera alla böcker i denna serie som avslutade?",
|
||||
"MessageConfirmMarkSeriesNotFinished": "Är du säker på att du vill markera alla böcker i denna serie som ej avslutade?",
|
||||
"MessageConfirmPurgeCache": "När du rensar cashen kommer katalogen <code>/metadata/cache</code> att raderas. <br /><br />Är du säker på att du vill radera katalogen?",
|
||||
"MessageConfirmPurgeItemsCache": "När du rensar cashen för föremål kommer katalogen <code>/metadata/cache/items</code> att raderas. <br /><br />Är du säker på att du vill radera katalogen?",
|
||||
"MessageConfirmPurgeItemsCache": "När du rensar cashen för objekten kommer katalogen <code>/metadata/cache/items</code> att raderas. <br /><br />Är du säker på att du vill radera katalogen?",
|
||||
"MessageConfirmQuickEmbed": "VARNING! När du infogar metadata i dina ljudfiler kommer INGEN SÄKERHETSKOPIA av filerna att göras. Se därför till att först säkerhetskopiera ljudfilerna. <br><br>Vill du fortsätta?",
|
||||
"MessageConfirmQuickMatchEpisodes": "Snabbmatchning av avsnitt kommer att ersätta befintlig information vid en träff. Endast omatchade avsnitt kommer att uppdateras. Vill du fortsätta?",
|
||||
"MessageConfirmReScanLibraryItems": "Är du säker på att du vill göra en ny skanning för {0} objekt?",
|
||||
@ -794,19 +814,19 @@
|
||||
"MessageInsertChapterBelow": "Infoga kapitel nedanför",
|
||||
"MessageInvalidAsin": "Felaktig ASIN-kod",
|
||||
"MessageItemsSelected": "{0} objekt markerade",
|
||||
"MessageItemsUpdated": "{0} Objekt uppdaterade",
|
||||
"MessageItemsUpdated": "{0} objekt uppdaterade",
|
||||
"MessageJoinUsOn": "Anslut dig till oss på",
|
||||
"MessageLoading": "Laddar...",
|
||||
"MessageLoadingFolders": "Laddar mappar...",
|
||||
"MessageLogsDescription": "Filer med loggningsinformation sparas i mappen <code>/metadata/logs</code> som JSON-filer.<br>Filer med information om krascher sparas i <code>/metadata/logs/crash_logs.txt</code>.",
|
||||
"MessageM4BFailed": "M4B misslyckades!",
|
||||
"MessageM4BFinished": "M4B klar!",
|
||||
"MessageM4BFailed": "Skapandet av en M4B-fil misslyckades!",
|
||||
"MessageM4BFinished": "Omkodningen till M4B är genomförd!",
|
||||
"MessageMapChapterTitles": "Kartlägg kapitelrubriker till dina befintliga ljudbokskapitel utan att justera tidstämplar",
|
||||
"MessageMarkAllEpisodesFinished": "Markera alla avsnitt som avslutade",
|
||||
"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. 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 uppgifter som saknas och omslag som saknas. Inga befintliga uppgifter kommer att ersättas.",
|
||||
"MessageNoAudioTracks": "Inga ljudfiler har hittats",
|
||||
"MessageNoAuthors": "Inga författare",
|
||||
"MessageNoBackups": "Inga säkerhetskopior",
|
||||
@ -867,7 +887,7 @@
|
||||
"MessageSetChaptersFromTracksDescription": "Använd varje ljudfil som ett kapitel och ljudfilens namn som kapitlets rubrik",
|
||||
"MessageShareExpirationWillBe": "Giltig till kommer att bli <strong>{0}</strong>",
|
||||
"MessageShareExpiresIn": "Upphör om {0}",
|
||||
"MessageStartPlaybackAtTime": "Starta uppspelning av \"{0}\" vid tidpunkt {1}?",
|
||||
"MessageStartPlaybackAtTime": "Starta uppspelning av \"{0}\" från tidpunkt {1}?",
|
||||
"MessageTaskAudioFileNotWritable": "Det går inte att skriva till ljudfilen \"{0}\"",
|
||||
"MessageTaskCanceledByUser": "Uppgiften avslutades av användaren",
|
||||
"MessageTaskDownloadingEpisodeDescription": "Laddar ner avsnitt \"{0}\"",
|
||||
@ -901,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 uppladdad!",
|
||||
"MessageUploaderItemSuccess": "har blivit uppladdat!",
|
||||
"MessageUploading": "Laddar upp...",
|
||||
"MessageValidCronExpression": "Giltigt cron-uttryck",
|
||||
"MessageWatcherIsDisabledGlobally": "Automatisk bevakning av förändringar är inaktiverad under rubriken 'Inställningar'",
|
||||
@ -919,6 +939,10 @@
|
||||
"NotificationOnBackupCompletedDescription": "Aktiveras när en backup är genomförd",
|
||||
"NotificationOnBackupFailedDescription": "Aktiveras när en backup misslyckas",
|
||||
"NotificationOnEpisodeDownloadedDescription": "Aktiveras när avsnitt i en podcast automatiskt har hämtats",
|
||||
"NotificationOnRSSFeedDisabledDescription": "Aktiveras när den automatiska nedladdningen av avsnitt i en podcast stängts av pga för många misslyckade försök",
|
||||
"NotificationOnRSSFeedFailedDescription": "Aktiveras när den automatiska nedladdningen av avsnitt i en podcast misslyckats",
|
||||
"NotificationOnTestDescription": "Händelse för att testa meddelandesystemet",
|
||||
"PlaceholderBulkChapterInput": "Addera kapitlets titel eller numrera kapitlen (t.ex. 'Avsnitt 1', 'Kapitel 10', '1.)",
|
||||
"PlaceholderNewCollection": "Nytt namn på samlingen",
|
||||
"PlaceholderNewFolderPath": "Ny sökväg till mappen",
|
||||
"PlaceholderNewPlaylist": "Nytt namn på spellistan",
|
||||
@ -943,7 +967,7 @@
|
||||
"StatsTotalDuration": "Med den totala längden…",
|
||||
"StatsYearInReview": "- SAMMANSTÄLLNING AV ÅRET",
|
||||
"ToastAccountUpdateSuccess": "Kontot har uppdaterats",
|
||||
"ToastAppriseUrlRequired": "En adress till Apprise måste anges",
|
||||
"ToastAppriseUrlRequired": "En URL-adress till Apprise API måste anges",
|
||||
"ToastAsinRequired": "En ASIN-kod krävs",
|
||||
"ToastAuthorImageRemoveSuccess": "Författarens bild borttagen",
|
||||
"ToastAuthorNotFound": "Författaren \"{0}\" kunde inte identifieras",
|
||||
@ -961,7 +985,7 @@
|
||||
"ToastBackupInvalidMaxSize": "Felaktig storlek på backup har angivits",
|
||||
"ToastBackupRestoreFailed": "Det gick inte att återställa säkerhetskopian",
|
||||
"ToastBackupUploadFailed": "Det gick inte att ladda upp säkerhetskopian",
|
||||
"ToastBackupUploadSuccess": "Säkerhetskopian uppladdad",
|
||||
"ToastBackupUploadSuccess": "Säkerhetskopian har laddats upp",
|
||||
"ToastBatchApplyDetailsToItemsSuccess": "Informationen har adderats till alla objekt",
|
||||
"ToastBatchQuickMatchStarted": "Snabbmatchning av {0} böcker har påbörjats!",
|
||||
"ToastBatchUpdateFailed": "Batchuppdateringen misslyckades",
|
||||
@ -969,9 +993,15 @@
|
||||
"ToastBookmarkCreateFailed": "Det gick inte att skapa bokmärket",
|
||||
"ToastBookmarkCreateSuccess": "Bokmärket har adderats",
|
||||
"ToastBookmarkRemoveSuccess": "Bokmärket har raderats",
|
||||
"ToastBulkChapterInvalidCount": "Ange ett nummer mellan 1 och 150",
|
||||
"ToastCachePurgeFailed": "Misslyckades med att rensa cachen",
|
||||
"ToastCachePurgeSuccess": "Rensning av cachen har genomförts",
|
||||
"ToastChapterLocked": "Kapitlet är låst.",
|
||||
"ToastChapterStartTimeAdjusted": "Kapitlets starttid justerades med {0} sekunder",
|
||||
"ToastChaptersAllLocked": "Alla kapitel är låsta. Lås upp några av dem för att kunna ändra deras tider.",
|
||||
"ToastChaptersHaveErrors": "Kapitlen har fel",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Felaktig ändring. Det sista kapitlets starttid kommer att hamna efter den totala längden på ljudboken.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Felaktig ändring. Det första kapitlets längd kommer att vara 0 eller ha ett negativt värde. Det kommer därför att skrivas över av det andra kapitlet. Öka starttiden för det andra kapitlet.",
|
||||
"ToastChaptersMustHaveTitles": "Kapitel måste ha titlar",
|
||||
"ToastChaptersRemoved": "Kapitlen har raderats",
|
||||
"ToastChaptersUpdated": "Kapitlen har uppdaterats",
|
||||
@ -999,8 +1029,9 @@
|
||||
"ToastFailedToShare": "Misslyckades med att dela",
|
||||
"ToastFailedToUpdate": "Misslyckades med att uppdatera",
|
||||
"ToastInvalidImageUrl": "Felaktig URL-adress till omslagsbilden",
|
||||
"ToastInvalidMaxEpisodesToDownload": "Ogiltigt maximalt antal avsnitt att ladda ner",
|
||||
"ToastInvalidMaxEpisodesToDownload": "Felaktigt värde angivet för maximalt antal avsnitt att ladda ner",
|
||||
"ToastInvalidUrl": "Felaktig URL-adress",
|
||||
"ToastInvalidUrls": "En eller flera URL-adresser är felaktig",
|
||||
"ToastItemCoverUpdateSuccess": "Objektets omslag har uppdaterats",
|
||||
"ToastItemDeletedFailed": "Misslyckades med att radera objektet",
|
||||
"ToastItemDeletedSuccess": "Objektet har raderats",
|
||||
@ -1029,7 +1060,7 @@
|
||||
"ToastNewUserCreatedFailed": "Misslyckades med att skapa kontot \"{0}\"",
|
||||
"ToastNewUserCreatedSuccess": "Ett nytt konto har skapats",
|
||||
"ToastNewUserLibraryError": "Minst ett bibliotek måste anges",
|
||||
"ToastNewUserPasswordError": "Ett lösenord måste anges. Endast användaren 'root' kan vara utan lösenord.",
|
||||
"ToastNewUserPasswordError": "Ett lösenord måste anges. Endast användaren 'root' tillåts sakna lösenord.",
|
||||
"ToastNewUserTagError": "Minst en tagg måste läggas till",
|
||||
"ToastNewUserUsernameError": "Ange ett användarnamn",
|
||||
"ToastNoNewEpisodesFound": "Inga nya avsnitt kunde hittas",
|
||||
@ -1037,7 +1068,9 @@
|
||||
"ToastNoUpdatesNecessary": "Inga uppdateringar var nödvändiga",
|
||||
"ToastNotificationCreateFailed": "Misslyckades med att skapa meddelandet",
|
||||
"ToastNotificationDeleteFailed": "Misslyckades med att radera meddelandet",
|
||||
"ToastNotificationFailedMaximum": "Maximalt antal misslyckade försök måste vara större än eller lika med 0",
|
||||
"ToastNotificationSettingsUpdateSuccess": "Inställningarna för meddelanden har ändrats",
|
||||
"ToastNotificationTestTriggerFailed": "Misslyckades med att skicka testmeddelandet",
|
||||
"ToastNotificationUpdateSuccess": "Meddelandet har uppdaterats",
|
||||
"ToastPlaylistCreateFailed": "Det gick inte att skapa spellistan",
|
||||
"ToastPlaylistCreateSuccess": "Spellistan skapad",
|
||||
@ -1045,6 +1078,7 @@
|
||||
"ToastPlaylistUpdateSuccess": "Spellistan har uppdaterats",
|
||||
"ToastPodcastCreateFailed": "Misslyckades med att skapa podcasten",
|
||||
"ToastPodcastCreateSuccess": "Podcasten skapades framgångsrikt",
|
||||
"ToastPodcastEpisodeUpdated": "Avsnittet har uppdaterats",
|
||||
"ToastPodcastNoEpisodesInFeed": "Inga avsnitt finns i RSS-flödet",
|
||||
"ToastPodcastNoRssFeed": "Denna podcast har ingen RSS-flöde",
|
||||
"ToastProviderCreatedFailed": "Misslyckades med att addera en källa",
|
||||
@ -1068,7 +1102,7 @@
|
||||
"ToastSendEbookToDeviceFailed": "Misslyckades med att skicka e-boken till enheten",
|
||||
"ToastSendEbookToDeviceSuccess": "E-boken skickad till enheten \"{0}\"",
|
||||
"ToastSeriesSubmitFailedSameName": "Det är inte möjligt att addera två serier med samma namn",
|
||||
"ToastSeriesUpdateFailed": "Uppdateringen av serier misslyckades",
|
||||
"ToastSeriesUpdateFailed": "Misslyckades med att uppdatera serien",
|
||||
"ToastSeriesUpdateSuccess": "Uppdateringen av serierna lyckades",
|
||||
"ToastServerSettingsUpdateSuccess": "Inställningarna för servern har uppdaterats",
|
||||
"ToastSessionDeleteFailed": "Misslyckades med att ta bort sessionen",
|
||||
@ -1089,5 +1123,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "Lösenordet har ändrats",
|
||||
"ToastUserPasswordMismatch": "Lösenorden är inte identiska",
|
||||
"ToastUserPasswordMustChange": "Det nya lösenordet kan inte vara samma som det gamla",
|
||||
"ToastUserRootRequireName": "Ett användarnamn för 'root' måste anges"
|
||||
"ToastUserRootRequireName": "Ett användarnamn för 'root' måste anges",
|
||||
"TooltipAddChapters": "Addera kapitel",
|
||||
"TooltipAddOneSecond": "Öka med 1 sekund",
|
||||
"TooltipAdjustChapterStart": "Klicka för att ändra starttiden",
|
||||
"TooltipLockAllChapters": "Lås alla kapitel",
|
||||
"TooltipLockChapter": "Lås kapitel (Tryck på Shift + Klick för att markera flera)",
|
||||
"TooltipSubtractOneSecond": "Minska med 1 sekund",
|
||||
"TooltipUnlockAllChapters": "Lås upp alla kapitel",
|
||||
"TooltipUnlockChapter": "Lås upp kapitel (Tryck på Shift + Klick för att markera flera)"
|
||||
}
|
||||
|
||||
@ -76,7 +76,7 @@
|
||||
"ButtonReScan": "Пересканувати",
|
||||
"ButtonRead": "Читати",
|
||||
"ButtonReadLess": "Згорнути",
|
||||
"ButtonReadMore": "Читати далі",
|
||||
"ButtonReadMore": "Читати більше",
|
||||
"ButtonRefresh": "Оновити",
|
||||
"ButtonRemove": "Видалити",
|
||||
"ButtonRemoveAll": "Видалити все",
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "Інструменти керування файлами книг",
|
||||
"HeaderAuthentication": "Автентифікація",
|
||||
"HeaderBackups": "Резервні копії",
|
||||
"HeaderBulkChapterModal": "Додати кілька розділів",
|
||||
"HeaderChangePassword": "Змінити пароль",
|
||||
"HeaderChapters": "Глави",
|
||||
"HeaderChooseAFolder": "Обрати теку",
|
||||
@ -292,7 +293,7 @@
|
||||
"LabelComplete": "Завершити",
|
||||
"LabelConfirmPassword": "Підтвердити пароль",
|
||||
"LabelContinueListening": "Слухати далі",
|
||||
"LabelContinueReading": "Читати далі",
|
||||
"LabelContinueReading": "Продовжити читання",
|
||||
"LabelContinueSeries": "Продовжити серії",
|
||||
"LabelCorsAllowed": "Дозволені джерела CORS",
|
||||
"LabelCover": "Обкладинка",
|
||||
@ -308,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "Видалити з файлової системи (зніміть прапорець, щоб видалити лише з бази даних)",
|
||||
"LabelDescription": "Опис",
|
||||
"LabelDeselectAll": "Скасувати вибір",
|
||||
"LabelDetectedPattern": "Виявлений візерунок:",
|
||||
"LabelDevice": "Пристрій",
|
||||
"LabelDeviceInfo": "Про пристрій",
|
||||
"LabelDeviceIsAvailableTo": "Пристрій доступний для...",
|
||||
@ -376,6 +378,7 @@
|
||||
"LabelFilterByUser": "Фільтрувати за користувачем",
|
||||
"LabelFindEpisodes": "Знайти епізоди",
|
||||
"LabelFinished": "Завершено",
|
||||
"LabelFinishedDate": "Завершено {0}",
|
||||
"LabelFolder": "Тека",
|
||||
"LabelFolders": "Теки",
|
||||
"LabelFontBold": "Жирний",
|
||||
@ -434,6 +437,8 @@
|
||||
"LabelLibraryItem": "Елемент бібліотеки",
|
||||
"LabelLibraryName": "Назва бібліотеки",
|
||||
"LabelLibrarySortByProgress": "Прогрес оновлено",
|
||||
"LabelLibrarySortByProgressFinished": "Дата завершення",
|
||||
"LabelLibrarySortByProgressStarted": "Дата початку",
|
||||
"LabelLimit": "Обмеження",
|
||||
"LabelLineSpacing": "Відстань між рядками",
|
||||
"LabelListenAgain": "Слухати знову",
|
||||
@ -472,6 +477,7 @@
|
||||
"LabelNewestAuthors": "Нові автори",
|
||||
"LabelNewestEpisodes": "Нові епізоди",
|
||||
"LabelNextBackupDate": "Дата наступного резервного копіювання",
|
||||
"LabelNextChapters": "Наступні розділи будуть:",
|
||||
"LabelNextScheduledRun": "Наступний запланований запуск",
|
||||
"LabelNoApiKeys": "Без ключів API",
|
||||
"LabelNoCustomMetadataProviders": "Без постачальників метаданих",
|
||||
@ -489,6 +495,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Ліміт розміру черги сповіщень",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Події обмежені до 1 на секунду. Події буде проігноровано, якщо ліміт черги досягнуто. Це запобігає спаму сповіщеннями.",
|
||||
"LabelNumberOfBooks": "Кількість книг",
|
||||
"LabelNumberOfChapters": "Кількість розділів:",
|
||||
"LabelNumberOfEpisodes": "Кількість серій",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "Назва OpenID claim, що містить розширені дозволи на дії користувачів у додатку, які будуть застосовуватися до ролей, що не є адміністраторами (<b>якщо налаштовано</b>). Якщо у відповіді нема claim, у доступі до Audiobookshelf буде відмовлено. Якщо відсутня хоча б одна опція, відповідь буде вважатися <code>хибною</code>. Переконайтеся, що запит постачальника ідентифікаційних даних відповідає очікуваній структурі:",
|
||||
"LabelOpenIDClaims": "Не змінюйте наступні параметри, аби вимкнути розширене призначення груп і дозволів, автоматично призначаючи групу 'Користувач'.",
|
||||
@ -631,6 +638,7 @@
|
||||
"LabelStartTime": "Час початку",
|
||||
"LabelStarted": "Стартував",
|
||||
"LabelStartedAt": "Почато з",
|
||||
"LabelStartedDate": "Розпочато {0}",
|
||||
"LabelStatsAudioTracks": "Аудіодоріжки",
|
||||
"LabelStatsAuthors": "Автори",
|
||||
"LabelStatsBestDay": "Найкращий день",
|
||||
@ -745,6 +753,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "Немає результатів з фільтром \"{0}: {1}\"",
|
||||
"MessageBookshelfNoResultsForQuery": "Немає результатів за запитом",
|
||||
"MessageBookshelfNoSeries": "У вас немає серій",
|
||||
"MessageBulkChapterPattern": "Скільки розділів ви хочете додати за допомогою цієї схеми нумерації?",
|
||||
"MessageChapterEndIsAfter": "Кінець глави після завершення аудіокниги",
|
||||
"MessageChapterErrorFirstNotZero": "Перша глава повинна починатися з 0",
|
||||
"MessageChapterErrorStartGteDuration": "Час початку має бути меншим за тривалість аудіокниги",
|
||||
@ -948,6 +957,7 @@
|
||||
"NotificationOnRSSFeedDisabledDescription": "Виконується, коли автоматичне завантаження епізодів вимкнено через забагато невдалих спроб",
|
||||
"NotificationOnRSSFeedFailedDescription": "Виконується, коли запит RSS-каналу не вдається для автоматичного завантаження епізоду",
|
||||
"NotificationOnTestDescription": "Подія для тестування системи сповіщень",
|
||||
"PlaceholderBulkChapterInput": "Введіть назву розділу або використовуйте нумерацію (наприклад, «Епізод 1», «Розділ 10», «1.»)",
|
||||
"PlaceholderNewCollection": "Нова назва добірки",
|
||||
"PlaceholderNewFolderPath": "Новий шлях до теки",
|
||||
"PlaceholderNewPlaylist": "Нова назва списку",
|
||||
@ -1001,8 +1011,12 @@
|
||||
"ToastBookmarkCreateFailed": "Не вдалося створити закладку",
|
||||
"ToastBookmarkCreateSuccess": "Закладку додано",
|
||||
"ToastBookmarkRemoveSuccess": "Закладку видалено",
|
||||
"ToastBulkChapterInvalidCount": "Введіть число від 1 до 150",
|
||||
"ToastCachePurgeFailed": "Не вдалося очистити кеш",
|
||||
"ToastCachePurgeSuccess": "Кеш очищено",
|
||||
"ToastChapterLocked": "Розділ заблоковано.",
|
||||
"ToastChapterStartTimeAdjusted": "Час початку розділу змінено на {0} секунд",
|
||||
"ToastChaptersAllLocked": "Усі розділи заблоковано. Розблокуйте деякі розділи, щоб змістити їхній час.",
|
||||
"ToastChaptersHaveErrors": "Глави містять помилки",
|
||||
"ToastChaptersInvalidShiftAmountLast": "Недійсна тривалість зсуву. Час початку останнього розділу перевищує тривалість цієї аудіокниги.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "Недійсна величина зсуву. Перший розділ матиме нульову або від’ємну тривалість і буде перезаписаний другим розділом. Збільште початкову тривалість другого розділу.",
|
||||
@ -1086,6 +1100,7 @@
|
||||
"ToastPlaylistUpdateSuccess": "Список відтворення оновлено",
|
||||
"ToastPodcastCreateFailed": "Не вдалося створити подкаст",
|
||||
"ToastPodcastCreateSuccess": "Подкаст успішно створено",
|
||||
"ToastPodcastEpisodeUpdated": "Епізод оновлено",
|
||||
"ToastPodcastGetFeedFailed": "Не вдалося отримати фід подкасту",
|
||||
"ToastPodcastNoEpisodesInFeed": "У RSS-каналі не знайдено епізодів",
|
||||
"ToastPodcastNoRssFeed": "Подкаст не має RSS-каналу",
|
||||
@ -1136,5 +1151,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "Пароль успішно змінено",
|
||||
"ToastUserPasswordMismatch": "Паролі не збігаються",
|
||||
"ToastUserPasswordMustChange": "Новий пароль не може співпадати з попереднім",
|
||||
"ToastUserRootRequireName": "Потрібно ввести ім'я користувача root"
|
||||
"ToastUserRootRequireName": "Потрібно ввести ім'я користувача root",
|
||||
"TooltipAddChapters": "Додати розділ(и)",
|
||||
"TooltipAddOneSecond": "Додати 1 секунду",
|
||||
"TooltipAdjustChapterStart": "Натисніть, щоб налаштувати час початку",
|
||||
"TooltipLockAllChapters": "Заблокувати всі розділи",
|
||||
"TooltipLockChapter": "Заблокувати розділ (Shift+клацання для діапазону)",
|
||||
"TooltipSubtractOneSecond": "Відніміть 1 секунду",
|
||||
"TooltipUnlockAllChapters": "Розблокувати всі розділи",
|
||||
"TooltipUnlockChapter": "Розблокувати розділ (Shift+клацання для діапазону)"
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
{
|
||||
"ButtonAdd": "Thêm",
|
||||
"ButtonAddApiKey": "Thêm API Key",
|
||||
"ButtonAddChapters": "Thêm Chương",
|
||||
"ButtonAddDevice": "Thêm Thiết Bị",
|
||||
"ButtonAddLibrary": "Thêm Thư Viện",
|
||||
@ -9,6 +10,7 @@
|
||||
"ButtonApply": "Áp Dụng",
|
||||
"ButtonApplyChapters": "Áp Dụng Chương",
|
||||
"ButtonAuthors": "Tác Giả",
|
||||
"ButtonBack": "Quay lại",
|
||||
"ButtonBrowseForFolder": "Duyệt Thư Mục",
|
||||
"ButtonCancel": "Hủy",
|
||||
"ButtonCancelEncode": "Hủy Mã Hóa",
|
||||
@ -17,7 +19,9 @@
|
||||
"ButtonChooseAFolder": "Chọn một thư mục",
|
||||
"ButtonChooseFiles": "Chọn tập tin",
|
||||
"ButtonClearFilter": "Xóa Bộ Lọc",
|
||||
"ButtonClose": "Đóng",
|
||||
"ButtonCloseFeed": "Đóng Feed",
|
||||
"ButtonCloseSession": "Đóng phiên hiện tại",
|
||||
"ButtonCollections": "Bộ Sưu Tập",
|
||||
"ButtonConfigureScanner": "Cấu Hình Bộ Quét",
|
||||
"ButtonCreate": "Tạo",
|
||||
@ -27,6 +31,10 @@
|
||||
"ButtonEdit": "Chỉnh Sửa",
|
||||
"ButtonEditChapters": "Chỉnh Sửa Chương",
|
||||
"ButtonEditPodcast": "Chỉnh Sửa Podcast",
|
||||
"ButtonEnable": "Kích hoạt",
|
||||
"ButtonFireAndFail": "Chạy và báo lỗi",
|
||||
"ButtonFireOnTest": "Chạy thử",
|
||||
"ButtonForceReScan": "Quét lại",
|
||||
"ButtonFullPath": "Đường Dẫn Đầy Đủ",
|
||||
"ButtonHide": "Ẩn",
|
||||
"ButtonHome": "Trang Chủ",
|
||||
@ -44,21 +52,28 @@
|
||||
"ButtonNevermind": "Không Sao",
|
||||
"ButtonNext": "Tiếp Theo",
|
||||
"ButtonNextChapter": "Chương Tiếp Theo",
|
||||
"ButtonNextItemInQueue": "Mục tiếp theo trong hàng đợi",
|
||||
"ButtonOk": "Chấp nhận",
|
||||
"ButtonOpenFeed": "Mở Feed",
|
||||
"ButtonOpenManager": "Mở Quản Lý",
|
||||
"ButtonPause": "Tạm Dừng",
|
||||
"ButtonPlay": "Phát",
|
||||
"ButtonPlayAll": "Phát tất cả",
|
||||
"ButtonPlaying": "Đang Phát",
|
||||
"ButtonPlaylists": "Danh Sách Phát",
|
||||
"ButtonPrevious": "Trước",
|
||||
"ButtonPreviousChapter": "Chương Trước",
|
||||
"ButtonProbeAudioFile": "Kiểm tra tệp âm thanh",
|
||||
"ButtonPurgeAllCache": "Xóa Sạch Tất Cả Bộ Nhớ Cache",
|
||||
"ButtonPurgeItemsCache": "Xóa Sạch Bộ Nhớ Cache Các Mục",
|
||||
"ButtonQueueAddItem": "Thêm vào hàng đợi",
|
||||
"ButtonQueueRemoveItem": "Xóa khỏi hàng đợi",
|
||||
"ButtonQuickEmbed": "Nhúng nhanh",
|
||||
"ButtonQuickMatch": "Khớp Nhanh",
|
||||
"ButtonReScan": "Quét Lại",
|
||||
"ButtonRead": "Đọc",
|
||||
"ButtonReadLess": "Thu gọn",
|
||||
"ButtonReadMore": "Đọc thêm",
|
||||
"ButtonRefresh": "Làm Mới",
|
||||
"ButtonRemove": "Xóa",
|
||||
"ButtonRemoveAll": "Xóa Tất Cả",
|
||||
@ -74,6 +89,8 @@
|
||||
"ButtonSaveTracklist": "Lưu Danh Sách Track",
|
||||
"ButtonScan": "Quét",
|
||||
"ButtonScanLibrary": "Quét Thư Viện",
|
||||
"ButtonScrollLeft": "Cuộn trái",
|
||||
"ButtonScrollRight": "Cuộn phải",
|
||||
"ButtonSearch": "Tìm Kiếm",
|
||||
"ButtonSelectFolderPath": "Chọn Đường Dẫn Thư Mục",
|
||||
"ButtonSetChaptersFromTracks": "Đặt chương từ các track",
|
||||
@ -82,8 +99,10 @@
|
||||
"ButtonShow": "Hiện",
|
||||
"ButtonStartM4BEncode": "Bắt đầu Mã Hóa M4B",
|
||||
"ButtonStartMetadataEmbed": "Bắt đầu Nhúng Dữ Liệu",
|
||||
"ButtonStats": "Dữ liệu",
|
||||
"ButtonSubmit": "Gửi",
|
||||
"ButtonTest": "Kiểm Tra",
|
||||
"ButtonUnlinkOpenId": "Huỷ liên kết OpenID",
|
||||
"ButtonUpload": "Tải Lên",
|
||||
"ButtonUploadBackup": "Tải Lên Bản Sao Lưu",
|
||||
"ButtonUploadCover": "Tải Lên Bìa",
|
||||
@ -98,7 +117,7 @@
|
||||
"HeaderAccount": "Tài Khoản",
|
||||
"HeaderAdvanced": "Nâng Cao",
|
||||
"HeaderAppriseNotificationSettings": "Cài Đặt Thông Báo Apprise",
|
||||
"HeaderAudioTracks": "Các Track Âm Thanh",
|
||||
"HeaderAudioTracks": "Danh Sách Âm Thanh",
|
||||
"HeaderAudiobookTools": "Công Cụ Quản Lý Tệp Truyện Nói",
|
||||
"HeaderAuthentication": "Xác Thực",
|
||||
"HeaderBackups": "Bản Sao Lưu",
|
||||
@ -106,9 +125,10 @@
|
||||
"HeaderChapters": "Chương",
|
||||
"HeaderChooseAFolder": "Chọn Một Thư Mục",
|
||||
"HeaderCollection": "Bộ Sưu Tập",
|
||||
"HeaderCollectionItems": "Các Mục Bộ Sưu Tập",
|
||||
"HeaderCollectionItems": "Danh sách Bộ Sưu Tập",
|
||||
"HeaderCover": "Bìa",
|
||||
"HeaderCurrentDownloads": "Tải Xuống Hiện Tại",
|
||||
"HeaderCustomMessageOnLogin": "Tin nhắn tuỳ chọn khi đăng nhập",
|
||||
"HeaderCustomMetadataProviders": "Các Nhà Cung Cấp Metadata Tùy Chỉnh",
|
||||
"HeaderDetails": "Chi Tiết",
|
||||
"HeaderDownloadQueue": "Hàng Đợi Tải Xuống",
|
||||
@ -139,6 +159,8 @@
|
||||
"HeaderMetadataToEmbed": "Metadata để nhúng",
|
||||
"HeaderNewAccount": "Tài Khoản Mới",
|
||||
"HeaderNewLibrary": "Thư Viện Mới",
|
||||
"HeaderNotificationCreate": "Tạo thông báo",
|
||||
"HeaderNotificationUpdate": "Cập nhập thông báo",
|
||||
"HeaderNotifications": "Thông Báo",
|
||||
"HeaderOpenIDConnectAuthentication": "Xác Thực Mở ID Connect",
|
||||
"HeaderOpenRSSFeed": "Mở RSS Feed",
|
||||
@ -146,6 +168,7 @@
|
||||
"HeaderPasswordAuthentication": "Xác Thực Mật Khẩu",
|
||||
"HeaderPermissions": "Quyền Hạn",
|
||||
"HeaderPlayerQueue": "Hàng Đợi Người Chơi",
|
||||
"HeaderPlayerSettings": "Cài đặt trình phát",
|
||||
"HeaderPlaylist": "Danh Sách Phát",
|
||||
"HeaderPlaylistItems": "Các Mục Danh Sách Phát",
|
||||
"HeaderPodcastsToAdd": "Podcasts để Thêm",
|
||||
@ -156,6 +179,7 @@
|
||||
"HeaderRemoveEpisodes": "Xóa {0} Tập",
|
||||
"HeaderSavedMediaProgress": "Tiến Trình Phương Tiện Đã Lưu",
|
||||
"HeaderSchedule": "Lịch Trình",
|
||||
"HeaderScheduleEpisodeDownloads": "Đặt lịch tự động tải tập",
|
||||
"HeaderScheduleLibraryScans": "Lên Lịch Quét Tự Động Thư Viện",
|
||||
"HeaderSession": "Phiên",
|
||||
"HeaderSetBackupSchedule": "Đặt Lịch Sao Lưu",
|
||||
@ -164,6 +188,7 @@
|
||||
"HeaderSettingsExperimental": "Tính Năng Thử Nghiệm",
|
||||
"HeaderSettingsGeneral": "Chung",
|
||||
"HeaderSettingsScanner": "Máy Quét",
|
||||
"HeaderSettingsSecurity": "Bảo mật",
|
||||
"HeaderSleepTimer": "Hẹn Giờ Tắt",
|
||||
"HeaderStatsLargestItems": "Các Mục Lớn Nhất",
|
||||
"HeaderStatsLongestItems": "Các Mục Dài Nhất (giờ)",
|
||||
@ -174,6 +199,7 @@
|
||||
"HeaderTableOfContents": "Mục Lục",
|
||||
"HeaderTools": "Công Cụ",
|
||||
"HeaderUpdateAccount": "Cập Nhật Tài Khoản",
|
||||
"HeaderUpdateApiKey": "Cập nhập API Key",
|
||||
"HeaderUpdateAuthor": "Cập Nhật Tác Giả",
|
||||
"HeaderUpdateDetails": "Cập Nhật Chi Tiết",
|
||||
"HeaderUpdateLibrary": "Cập Nhật Thư Viện",
|
||||
@ -190,6 +216,8 @@
|
||||
"LabelAddToCollectionBatch": "Thêm {0} Sách vào Bộ Sưu Tập",
|
||||
"LabelAddToPlaylist": "Thêm vào Danh Sách Phát",
|
||||
"LabelAddedAt": "Đã Thêm Lúc",
|
||||
"LabelAddedDate": "Đã thêm {0}",
|
||||
"LabelAutoDownloadEpisodes": "Tự Động Tải Xuống Các Tập",
|
||||
"LabelBackupsMaxBackupSize": "Maximum backup size (in GB)",
|
||||
"LabelBooks": "Sách",
|
||||
"LabelButtonText": "Nút Văn Bản",
|
||||
@ -231,7 +259,7 @@
|
||||
"LabelDownloadNEpisodes": "Tải Xuống {0} Tập",
|
||||
"LabelDuration": "Thời Lượng",
|
||||
"LabelDurationFound": "Thời lượng được tìm thấy:",
|
||||
"LabelEbooks": "Các Ebook",
|
||||
"LabelEbooks": "",
|
||||
"LabelEdit": "Chỉnh Sửa",
|
||||
"LabelEmailSettingsFromAddress": "Địa chỉ Gửi từ",
|
||||
"LabelEmailSettingsSecure": "Bảo Mật",
|
||||
@ -257,6 +285,7 @@
|
||||
"LabelFolder": "Thư Mục",
|
||||
"LabelFolders": "Các Thư Mục",
|
||||
"LabelFontBold": "Đậm",
|
||||
"LabelFontBoldness": "Chữ đậm",
|
||||
"LabelFontFamily": "Gia đình font",
|
||||
"LabelFontItalic": "Nghiêng",
|
||||
"LabelFontScale": "Tỷ lệ font",
|
||||
@ -268,7 +297,7 @@
|
||||
"LabelHasEbook": "Có ebook",
|
||||
"LabelHasSupplementaryEbook": "Có ebook bổ sung",
|
||||
"LabelHighestPriority": "Ưu tiên cao nhất",
|
||||
"LabelHost": "Máy chủ",
|
||||
"LabelHost": "Máy Chủ",
|
||||
"LabelHour": "Giờ",
|
||||
"LabelIcon": "Biểu tượng",
|
||||
"LabelImageURLFromTheWeb": "URL hình ảnh từ web",
|
||||
@ -303,7 +332,7 @@
|
||||
"LabelLibraryName": "Tên thư viện",
|
||||
"LabelLimit": "Giới hạn",
|
||||
"LabelLineSpacing": "Khoảng cách dòng",
|
||||
"LabelListenAgain": "Nghe lại",
|
||||
"LabelListenAgain": "Nghe Lại",
|
||||
"LabelLogLevelDebug": "Gỡ lỗi",
|
||||
"LabelLogLevelInfo": "Thông tin",
|
||||
"LabelLogLevelWarn": "Cảnh báo",
|
||||
@ -312,13 +341,13 @@
|
||||
"LabelMatchExistingUsersBy": "Kết hợp người dùng hiện có theo",
|
||||
"LabelMatchExistingUsersByDescription": "Sử dụng để kết nối người dùng hiện có. Khi kết nối, người dùng sẽ được kết hợp bằng một ID duy nhất từ nhà cung cấp SSO của bạn",
|
||||
"LabelMediaPlayer": "Trình phát đa phương tiện",
|
||||
"LabelMediaType": "Loại phương tiện",
|
||||
"LabelMediaType": "Loại Phương Tiện",
|
||||
"LabelMetaTag": "Thẻ Meta",
|
||||
"LabelMetaTags": "Các thẻ Meta",
|
||||
"LabelMetadataOrderOfPrecedenceDescription": "Nguồn siêu dữ liệu ưu tiên cao hơn sẽ ghi đè lên các nguồn siêu dữ liệu ưu tiên thấp hơn",
|
||||
"LabelMetadataProvider": "Nhà cung cấp siêu dữ liệu",
|
||||
"LabelMinute": "Phút",
|
||||
"LabelMissing": "Thiếu",
|
||||
"LabelMissing": "",
|
||||
"LabelMissingEbook": "Không có ebook",
|
||||
"LabelMissingSupplementaryEbook": "Không có ebook bổ sung",
|
||||
"LabelMobileRedirectURIs": "URI chuyển hướng di động được cho phép",
|
||||
@ -335,7 +364,7 @@
|
||||
"LabelNextBackupDate": "Ngày sao lưu tiếp theo",
|
||||
"LabelNextScheduledRun": "Chạy tiếp theo theo lịch trình",
|
||||
"LabelNoEpisodesSelected": "Không có tập nào được chọn",
|
||||
"LabelNotFinished": "Chưa hoàn thành",
|
||||
"LabelNotFinished": "Chưa Hoàn Thành",
|
||||
"LabelNotStarted": "Chưa bắt đầu",
|
||||
"LabelNotes": "Ghi chú",
|
||||
"LabelNotificationAppriseURL": "URL(s) thông báo",
|
||||
@ -348,7 +377,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "Kích thước hàng đợi tối đa cho sự kiện thông báo",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "Các sự kiện bị giới hạn mỗi giây chỉ gửi 1 lần. Các sự kiện sẽ bị bỏ qua nếu hàng đợi đạt kích thước tối đa. Điều này ngăn chặn spam thông báo.",
|
||||
"LabelNumberOfBooks": "Số lượng Sách",
|
||||
"LabelNumberOfEpisodes": "# của Tập",
|
||||
"LabelNumberOfEpisodes": "Số lượng tập",
|
||||
"LabelOpenRSSFeed": "Mở RSS Feed",
|
||||
"LabelOverwrite": "Ghi đè",
|
||||
"LabelPassword": "Mật khẩu",
|
||||
@ -364,17 +393,19 @@
|
||||
"LabelPhotoPathURL": "Đường dẫn/URL ảnh",
|
||||
"LabelPlayMethod": "Phương pháp phát",
|
||||
"LabelPlaylists": "Danh sách phát",
|
||||
"LabelPodcast": "Podcast",
|
||||
"LabelPodcastSearchRegion": "Vùng tìm kiếm podcast",
|
||||
"LabelPodcastType": "Loại Podcast",
|
||||
"LabelPodcasts": "Các podcast",
|
||||
"LabelPodcasts": "Podcasts",
|
||||
"LabelPort": "Cổng",
|
||||
"LabelPrefixesToIgnore": "Tiền tố để bỏ qua (không phân biệt chữ hoa/chữ thường)",
|
||||
"LabelPreventIndexing": "Ngăn chặn feed của bạn được chỉ mục bởi thư mục podcast của iTunes và Google",
|
||||
"LabelPreventIndexing": "Ngăn Chặn Feed của bạn bị truy xuất bởi thư mục iTunes và Google podcast",
|
||||
"LabelPrimaryEbook": "Ebook chính",
|
||||
"LabelProgress": "Tiến độ",
|
||||
"LabelProvider": "Nhà cung cấp",
|
||||
"LabelPubDate": "Ngày Xuất bản",
|
||||
"LabelPublishYear": "Năm Xuất bản",
|
||||
"LabelPublishYear": "Năm Xuất Bản",
|
||||
"LabelPublishedDate": "Xuất bản vào {0}",
|
||||
"LabelPublisher": "Nhà xuất bản",
|
||||
"LabelRSSFeedCustomOwnerEmail": "Email chủ sở hữu tùy chỉnh",
|
||||
"LabelRSSFeedCustomOwnerName": "Tên chủ sở hữu tùy chỉnh",
|
||||
|
||||
@ -127,6 +127,7 @@
|
||||
"HeaderAudiobookTools": "有声读物文件管理工具",
|
||||
"HeaderAuthentication": "身份验证",
|
||||
"HeaderBackups": "备份",
|
||||
"HeaderBulkChapterModal": "添加多个章节",
|
||||
"HeaderChangePassword": "更改密码",
|
||||
"HeaderChapters": "章节",
|
||||
"HeaderChooseAFolder": "选择文件夹",
|
||||
@ -308,6 +309,7 @@
|
||||
"LabelDeleteFromFileSystemCheckbox": "从文件系统删除 (取消选中仅从数据库中删除)",
|
||||
"LabelDescription": "描述",
|
||||
"LabelDeselectAll": "全部取消选择",
|
||||
"LabelDetectedPattern": "检测到的编号格式:",
|
||||
"LabelDevice": "设备",
|
||||
"LabelDeviceInfo": "设备信息",
|
||||
"LabelDeviceIsAvailableTo": "设备可用于...",
|
||||
@ -376,6 +378,7 @@
|
||||
"LabelFilterByUser": "按用户筛选",
|
||||
"LabelFindEpisodes": "查找剧集",
|
||||
"LabelFinished": "已听完",
|
||||
"LabelFinishedDate": "完成于 {0}",
|
||||
"LabelFolder": "文件夹",
|
||||
"LabelFolders": "文件夹",
|
||||
"LabelFontBold": "加粗",
|
||||
@ -434,6 +437,8 @@
|
||||
"LabelLibraryItem": "媒体库项目",
|
||||
"LabelLibraryName": "媒体库名称",
|
||||
"LabelLibrarySortByProgress": "进度更新时间",
|
||||
"LabelLibrarySortByProgressFinished": "完成日期",
|
||||
"LabelLibrarySortByProgressStarted": "开始日期",
|
||||
"LabelLimit": "限制",
|
||||
"LabelLineSpacing": "行间距",
|
||||
"LabelListenAgain": "再次收听",
|
||||
@ -472,6 +477,7 @@
|
||||
"LabelNewestAuthors": "最新作者",
|
||||
"LabelNewestEpisodes": "最新剧集",
|
||||
"LabelNextBackupDate": "下次备份日期",
|
||||
"LabelNextChapters": "后续章节示例:",
|
||||
"LabelNextScheduledRun": "下次任务运行",
|
||||
"LabelNoApiKeys": "无 API 密钥",
|
||||
"LabelNoCustomMetadataProviders": "没有自定义元数据提供商",
|
||||
@ -489,6 +495,7 @@
|
||||
"LabelNotificationsMaxQueueSize": "通知事件的最大队列大小",
|
||||
"LabelNotificationsMaxQueueSizeHelp": "通知事件被限制为每秒触发 1 个. 如果队列处于最大大小, 则将忽略事件. 这可以防止通知垃圾邮件.",
|
||||
"LabelNumberOfBooks": "图书数量",
|
||||
"LabelNumberOfChapters": "章节数量:",
|
||||
"LabelNumberOfEpisodes": "# 集数",
|
||||
"LabelOpenIDAdvancedPermsClaimDescription": "OpenID 声明的名称, 该声明包含应用程序内用户操作的高级权限, 该权限将应用于非管理员角色(<b>如果已配置</b>). 如果响应中缺少声明, 获取 ABS 的权限将被拒绝. 如果缺少单个选项, 它将被视为 <code>禁用</code>. 确保身份提供商的声明与预期结构匹配:",
|
||||
"LabelOpenIDClaims": "将以下选项留空以禁用高级组和权限分配, 然后自动分配 'User' 组.",
|
||||
@ -631,6 +638,7 @@
|
||||
"LabelStartTime": "开始时间",
|
||||
"LabelStarted": "开始于",
|
||||
"LabelStartedAt": "收听始于",
|
||||
"LabelStartedDate": "开始于 {0}",
|
||||
"LabelStatsAudioTracks": "音轨",
|
||||
"LabelStatsAuthors": "作者",
|
||||
"LabelStatsBestDay": "单日最高",
|
||||
@ -745,6 +753,7 @@
|
||||
"MessageBookshelfNoResultsForFilter": "过滤器无结果 \"{0}: {1}\"",
|
||||
"MessageBookshelfNoResultsForQuery": "没有可查询的结果",
|
||||
"MessageBookshelfNoSeries": "你没有系列",
|
||||
"MessageBulkChapterPattern": "您想用此编号模式添加多少个章节?",
|
||||
"MessageChapterEndIsAfter": "章节结束是在有声读物结束之后",
|
||||
"MessageChapterErrorFirstNotZero": "第一章节必须从 0 开始",
|
||||
"MessageChapterErrorStartGteDuration": "无效的开始时间, 必须小于有声读物持续时间",
|
||||
@ -948,6 +957,7 @@
|
||||
"NotificationOnRSSFeedDisabledDescription": "由于尝试失败次数过多而导致剧集自动下载被禁用时触发",
|
||||
"NotificationOnRSSFeedFailedDescription": "当用于自动下载剧集的 RSS 源请求失败时触发",
|
||||
"NotificationOnTestDescription": "测试通知系统的事件",
|
||||
"PlaceholderBulkChapterInput": "请输入章节标题, 或使用编号格式 (例如: \"Episode 1\", \"Chapter 10\", \"1.\")",
|
||||
"PlaceholderNewCollection": "输入收藏夹名称",
|
||||
"PlaceholderNewFolderPath": "输入文件夹路径",
|
||||
"PlaceholderNewPlaylist": "输入播放列表名称",
|
||||
@ -1001,8 +1011,12 @@
|
||||
"ToastBookmarkCreateFailed": "创建书签失败",
|
||||
"ToastBookmarkCreateSuccess": "书签已添加",
|
||||
"ToastBookmarkRemoveSuccess": "书签已删除",
|
||||
"ToastBulkChapterInvalidCount": "输入一个1到150之间的整数",
|
||||
"ToastCachePurgeFailed": "清除缓存失败",
|
||||
"ToastCachePurgeSuccess": "缓存清除成功",
|
||||
"ToastChapterLocked": "章节已锁定.",
|
||||
"ToastChapterStartTimeAdjusted": "章节开始时间已调整 {0} 秒",
|
||||
"ToastChaptersAllLocked": "所有章节均已锁定. 请解锁要调整时间的章节.",
|
||||
"ToastChaptersHaveErrors": "章节有错误",
|
||||
"ToastChaptersInvalidShiftAmountLast": "偏移量无效. 最后一章的开始时间将超过这本有声读物的持续时间.",
|
||||
"ToastChaptersInvalidShiftAmountStart": "偏移量无效. 第一章的长度将为零或负数, 并会被第二章覆盖. 请增加第二章的起始时长.",
|
||||
@ -1086,6 +1100,7 @@
|
||||
"ToastPlaylistUpdateSuccess": "播放列表已更新",
|
||||
"ToastPodcastCreateFailed": "创建播客失败",
|
||||
"ToastPodcastCreateSuccess": "已成功创建播客",
|
||||
"ToastPodcastEpisodeUpdated": "剧集已更新",
|
||||
"ToastPodcastGetFeedFailed": "无法获取播客信息",
|
||||
"ToastPodcastNoEpisodesInFeed": "RSS 订阅中未找到任何剧集",
|
||||
"ToastPodcastNoRssFeed": "播客没有 RSS 源",
|
||||
@ -1136,5 +1151,13 @@
|
||||
"ToastUserPasswordChangeSuccess": "密码修改成功",
|
||||
"ToastUserPasswordMismatch": "密码不匹配",
|
||||
"ToastUserPasswordMustChange": "新密码不能与旧密码相同",
|
||||
"ToastUserRootRequireName": "必须输入 root 用户名"
|
||||
"ToastUserRootRequireName": "必须输入 root 用户名",
|
||||
"TooltipAddChapters": "添加章节",
|
||||
"TooltipAddOneSecond": "加 1 秒",
|
||||
"TooltipAdjustChapterStart": "点击调整开始时间",
|
||||
"TooltipLockAllChapters": "锁定所有章节",
|
||||
"TooltipLockChapter": "锁定章节 (按住 Shift再点击, 可进行范围选择)",
|
||||
"TooltipSubtractOneSecond": "减 1 秒",
|
||||
"TooltipUnlockAllChapters": "解锁所有章节",
|
||||
"TooltipUnlockChapter": "解锁章节 (按住 Shift再点击, 可进行范围选择)"
|
||||
}
|
||||
|
||||
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "audiobookshelf",
|
||||
"version": "2.28.0",
|
||||
"version": "2.29.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "audiobookshelf",
|
||||
"version": "2.28.0",
|
||||
"version": "2.29.0",
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
"axios": "^0.27.2",
|
||||
|
||||
@ -355,7 +355,7 @@ This application is built using [NodeJs](https://nodejs.org/).
|
||||
|
||||
### Localization
|
||||
|
||||
Thank you to [Weblate](https://hosted.weblate.org/engage/audiobookshelf/) for hosting our localization infrastructure pro-bono. If you want to see Audiobookshelf in your language, please help us localize. Additional information on helping with the translations [here](https://www.audiobookshelf.org/faq#how-do-i-help-with-translations). <a href="https://hosted.weblate.org/engage/audiobookshelf/"> <img src="https://hosted.weblate.org/widget/audiobookshelf/abs-web-client/horizontal-auto.svg" alt="Translation status" /> </a>
|
||||
Thank you to [Weblate](https://hosted.weblate.org/engage/audiobookshelf/) for hosting our localization infrastructure pro-bono. If you want to see Audiobookshelf in your language, please help us localize. Additional information on helping with the translations [here](https://www.audiobookshelf.org/faq#how-do-i-help-with-translations). <a href="https://hosted.weblate.org/engage/audiobookshelf/"> <img src="https://hosted.weblate.org/widget/audiobookshelf/abs-web-client/multi-auto.svg" alt="Translation status" /> </a>
|
||||
|
||||
### Dev Container Setup
|
||||
|
||||
|
||||
@ -243,6 +243,7 @@ class Auth {
|
||||
}
|
||||
|
||||
// Store the authentication method for long
|
||||
Logger.debug(`[Auth] paramsToCookies: setting auth_method cookie to ${authMethod}`)
|
||||
res.cookie('auth_method', authMethod, { maxAge: 1000 * 60 * 60 * 24 * 365 * 10, httpOnly: true })
|
||||
return null
|
||||
}
|
||||
@ -258,6 +259,7 @@ class Auth {
|
||||
// Handle token generation and get userResponse object
|
||||
// For API based auth (e.g. mobile), we will return the refresh token in the response
|
||||
const isApiBased = this.isAuthMethodAPIBased(req.cookies.auth_method)
|
||||
Logger.debug(`[Auth] handleLoginSuccessBasedOnCookie: isApiBased: ${isApiBased}, auth_method: ${req.cookies.auth_method}`)
|
||||
const userResponse = await this.handleLoginSuccess(req, res, isApiBased)
|
||||
|
||||
if (isApiBased) {
|
||||
@ -298,6 +300,8 @@ class Auth {
|
||||
userResponse.user.refreshToken = returnTokens ? refreshToken : null
|
||||
userResponse.user.accessToken = accessToken
|
||||
|
||||
Logger.debug(`[Auth] handleLoginSuccess: returnTokens: ${returnTokens}, isRefreshTokenInResponse: ${!!userResponse.user.refreshToken}`)
|
||||
|
||||
if (!returnTokens) {
|
||||
this.tokenManager.setRefreshTokenCookie(req, res, refreshToken)
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ const axios = require('axios')
|
||||
const { version } = require('../package.json')
|
||||
|
||||
// Utils
|
||||
const is = require('./libs/requestIp/isJs')
|
||||
const fileUtils = require('./utils/fileUtils')
|
||||
const { toNumber } = require('./utils/index')
|
||||
const Logger = require('./Logger')
|
||||
@ -419,7 +420,7 @@ class Server {
|
||||
})
|
||||
} else {
|
||||
this.server.listen(this.Port, this.Host, () => {
|
||||
if (this.Host) Logger.info(`Listening on http://${this.Host}:${this.Port}`)
|
||||
if (this.Host) Logger.info(`Listening on http://${is.ipv6(this.Host) ? `[${this.Host}]` : this.Host}:${this.Port}`)
|
||||
else Logger.info(`Listening on port :${this.Port}`)
|
||||
})
|
||||
}
|
||||
|
||||
@ -121,28 +121,17 @@ class PodcastManager {
|
||||
await fs.mkdir(this.currentDownload.libraryItem.path)
|
||||
}
|
||||
|
||||
let success = false
|
||||
if (this.currentDownload.isMp3) {
|
||||
// Download episode and tag it
|
||||
const ffmpegDownloadResponse = await ffmpegHelpers.downloadPodcastEpisode(this.currentDownload).catch((error) => {
|
||||
Logger.error(`[PodcastManager] Podcast Episode download failed`, error)
|
||||
})
|
||||
success = !!ffmpegDownloadResponse?.success
|
||||
// Download episode and tag it
|
||||
const ffmpegDownloadResponse = await ffmpegHelpers.downloadPodcastEpisode(this.currentDownload).catch((error) => {
|
||||
Logger.error(`[PodcastManager] Podcast Episode download failed`, error)
|
||||
})
|
||||
let success = !!ffmpegDownloadResponse?.success
|
||||
|
||||
// If failed due to ffmpeg error, retry without tagging
|
||||
// e.g. RSS feed may have incorrect file extension and file type
|
||||
// See https://github.com/advplyr/audiobookshelf/issues/3837
|
||||
if (!success && ffmpegDownloadResponse?.isFfmpegError) {
|
||||
Logger.info(`[PodcastManager] Retrying episode download without tagging`)
|
||||
// Download episode only
|
||||
success = await downloadFile(this.currentDownload.url, this.currentDownload.targetPath)
|
||||
.then(() => true)
|
||||
.catch((error) => {
|
||||
Logger.error(`[PodcastManager] Podcast Episode download failed`, error)
|
||||
return false
|
||||
})
|
||||
}
|
||||
} else {
|
||||
// If failed due to ffmpeg error, retry without tagging
|
||||
// e.g. RSS feed may have incorrect file extension and file type
|
||||
// See https://github.com/advplyr/audiobookshelf/issues/3837
|
||||
if (!success && ffmpegDownloadResponse?.isFfmpegError) {
|
||||
Logger.info(`[PodcastManager] Retrying episode download without tagging`)
|
||||
// Download episode only
|
||||
success = await downloadFile(this.currentDownload.url, this.currentDownload.targetPath)
|
||||
.then(() => true)
|
||||
|
||||
@ -82,6 +82,13 @@ class Podcast extends Model {
|
||||
const genres = Array.isArray(payload.metadata.genres) && payload.metadata.genres.every((g) => typeof g === 'string' && g.length) ? payload.metadata.genres : []
|
||||
const tags = Array.isArray(payload.tags) && payload.tags.every((t) => typeof t === 'string' && t.length) ? payload.tags : []
|
||||
|
||||
const stringKeys = ['title', 'author', 'releaseDate', 'feedUrl', 'imageUrl', 'description', 'itunesPageUrl', 'itunesId', 'itunesArtistId', 'language', 'type']
|
||||
stringKeys.forEach((key) => {
|
||||
if (typeof payload.metadata[key] === 'number') {
|
||||
payload.metadata[key] = String(payload.metadata[key])
|
||||
}
|
||||
})
|
||||
|
||||
return this.create(
|
||||
{
|
||||
title,
|
||||
@ -205,6 +212,11 @@ class Podcast extends Model {
|
||||
if (payload.metadata) {
|
||||
const stringKeys = ['title', 'author', 'releaseDate', 'feedUrl', 'imageUrl', 'description', 'itunesPageUrl', 'itunesId', 'itunesArtistId', 'language', 'type']
|
||||
stringKeys.forEach((key) => {
|
||||
// Convert numbers to strings
|
||||
if (typeof payload.metadata[key] === 'number') {
|
||||
payload.metadata[key] = String(payload.metadata[key])
|
||||
}
|
||||
|
||||
let newKey = key
|
||||
if (key === 'type') {
|
||||
newKey = 'podcastType'
|
||||
|
||||
@ -63,16 +63,6 @@ class PodcastEpisodeDownload {
|
||||
const enclosureType = this.rssPodcastEpisode.enclosure.type
|
||||
return typeof enclosureType === 'string' ? enclosureType : null
|
||||
}
|
||||
/**
|
||||
* RSS feed may have an episode with file extension of mp3 but the specified enclosure type is not mpeg.
|
||||
* @see https://github.com/advplyr/audiobookshelf/issues/3711
|
||||
*
|
||||
* @returns {boolean}
|
||||
*/
|
||||
get isMp3() {
|
||||
if (this.enclosureType && !this.enclosureType.includes('mpeg')) return false
|
||||
return this.fileExtension === 'mp3'
|
||||
}
|
||||
get episodeTitle() {
|
||||
return this.rssPodcastEpisode.title
|
||||
}
|
||||
|
||||
@ -146,7 +146,7 @@ class Stream extends EventEmitter {
|
||||
|
||||
async generatePlaylist() {
|
||||
await fs.ensureDir(this.streamPath)
|
||||
await hlsPlaylistGenerator(this.playlistPath, 'output', this.totalDuration, this.segmentLength, this.hlsSegmentType, this.userToken)
|
||||
await hlsPlaylistGenerator(this.playlistPath, 'output', this.totalDuration, this.segmentLength, this.hlsSegmentType)
|
||||
return this.clientPlaylistUri
|
||||
}
|
||||
|
||||
|
||||
@ -118,6 +118,7 @@ module.exports.downloadPodcastEpisode = (podcastEpisodeDownload) => {
|
||||
method: 'GET',
|
||||
responseType: 'stream',
|
||||
headers: {
|
||||
'Accept': '*/*',
|
||||
'User-Agent': userAgent
|
||||
},
|
||||
timeout: global.PodcastDownloadTimeout
|
||||
|
||||
@ -502,7 +502,7 @@ module.exports.getWindowsDrives = async () => {
|
||||
return []
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
exec('wmic logicaldisk get name', async (error, stdout, stderr) => {
|
||||
exec('powershell -Command "(Get-PSDrive -PSProvider FileSystem).Name"', async (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
reject(error)
|
||||
return
|
||||
@ -511,10 +511,9 @@ module.exports.getWindowsDrives = async () => {
|
||||
?.split(/\r?\n/)
|
||||
.map((line) => line.trim())
|
||||
.filter((line) => line)
|
||||
.slice(1)
|
||||
const validDrives = []
|
||||
for (const drive of drives) {
|
||||
let drivepath = drive + '/'
|
||||
let drivepath = drive + ':/'
|
||||
if (await fs.pathExists(drivepath)) {
|
||||
validDrives.push(drivepath)
|
||||
} else {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
const fs = require('../../libs/fsExtra')
|
||||
|
||||
function getPlaylistStr(segmentName, duration, segmentLength, hlsSegmentType, token) {
|
||||
function getPlaylistStr(segmentName, duration, segmentLength, hlsSegmentType) {
|
||||
var ext = hlsSegmentType === 'fmp4' ? 'm4s' : 'ts'
|
||||
|
||||
var lines = [
|
||||
@ -18,18 +18,18 @@ function getPlaylistStr(segmentName, duration, segmentLength, hlsSegmentType, to
|
||||
var lastSegment = duration - (numSegments * segmentLength)
|
||||
for (let i = 0; i < numSegments; i++) {
|
||||
lines.push(`#EXTINF:6,`)
|
||||
lines.push(`${segmentName}-${i}.${ext}?token=${token}`)
|
||||
lines.push(`${segmentName}-${i}.${ext}`)
|
||||
}
|
||||
if (lastSegment > 0) {
|
||||
lines.push(`#EXTINF:${lastSegment},`)
|
||||
lines.push(`${segmentName}-${numSegments}.${ext}?token=${token}`)
|
||||
lines.push(`${segmentName}-${numSegments}.${ext}`)
|
||||
}
|
||||
lines.push('#EXT-X-ENDLIST')
|
||||
return lines.join('\n')
|
||||
}
|
||||
|
||||
function generatePlaylist(outputPath, segmentName, duration, segmentLength, hlsSegmentType, token) {
|
||||
var playlistStr = getPlaylistStr(segmentName, duration, segmentLength, hlsSegmentType, token)
|
||||
function generatePlaylist(outputPath, segmentName, duration, segmentLength, hlsSegmentType) {
|
||||
var playlistStr = getPlaylistStr(segmentName, duration, segmentLength, hlsSegmentType)
|
||||
return fs.writeFile(outputPath, playlistStr)
|
||||
}
|
||||
module.exports = generatePlaylist
|
||||
@ -289,7 +289,11 @@ module.exports = {
|
||||
const nullDir = sortDesc ? 'DESC NULLS FIRST' : 'ASC NULLS LAST'
|
||||
return [[Sequelize.literal(`CAST(\`series.bookSeries.sequence\` AS FLOAT) ${nullDir}`)]]
|
||||
} else if (sortBy === 'progress') {
|
||||
return [[Sequelize.literal('mediaProgresses.updatedAt'), dir]]
|
||||
return [[Sequelize.literal(`mediaProgresses.updatedAt ${dir} NULLS LAST`)]]
|
||||
} else if (sortBy === 'progress.createdAt') {
|
||||
return [[Sequelize.literal(`mediaProgresses.createdAt ${dir} NULLS LAST`)]]
|
||||
} else if (sortBy === 'progress.finishedAt') {
|
||||
return [[Sequelize.literal(`mediaProgresses.finishedAt ${dir} NULLS LAST`)]]
|
||||
} else if (sortBy === 'random') {
|
||||
return [Database.sequelize.random()]
|
||||
}
|
||||
@ -519,7 +523,7 @@ module.exports = {
|
||||
}
|
||||
bookIncludes.push({
|
||||
model: Database.mediaProgressModel,
|
||||
attributes: ['id', 'isFinished', 'currentTime', 'ebookProgress', 'updatedAt'],
|
||||
attributes: ['id', 'isFinished', 'currentTime', 'ebookProgress', 'updatedAt', 'createdAt', 'finishedAt'],
|
||||
where: mediaProgressWhere,
|
||||
required: false
|
||||
})
|
||||
@ -530,10 +534,10 @@ module.exports = {
|
||||
}
|
||||
|
||||
// When sorting by progress but not filtering by progress, include media progresses
|
||||
if (filterGroup !== 'progress' && sortBy === 'progress') {
|
||||
if (filterGroup !== 'progress' && ['progress.createdAt', 'progress.finishedAt', 'progress'].includes(sortBy)) {
|
||||
bookIncludes.push({
|
||||
model: Database.mediaProgressModel,
|
||||
attributes: ['id', 'isFinished', 'currentTime', 'ebookProgress', 'updatedAt'],
|
||||
attributes: ['id', 'isFinished', 'currentTime', 'ebookProgress', 'updatedAt', 'createdAt', 'finishedAt'],
|
||||
where: {
|
||||
userId: user.id
|
||||
},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user