mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-01-29 22:39:39 +00:00
Merge branch 'advplyr:master' into master
This commit is contained in:
commit
f6a5e31c22
104 changed files with 5267 additions and 953 deletions
6
.github/workflows/codeql.yml
vendored
6
.github/workflows/codeql.yml
vendored
|
|
@ -47,7 +47,7 @@ jobs:
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v2
|
uses: github/codeql-action/init@v3
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
|
@ -60,7 +60,7 @@ jobs:
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v2
|
uses: github/codeql-action/autobuild@v3
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
|
|
@ -73,6 +73,6 @@ jobs:
|
||||||
# ./location_of_script_within_repo/buildscript.sh
|
# ./location_of_script_within_repo/buildscript.sh
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v2
|
uses: github/codeql-action/analyze@v3
|
||||||
with:
|
with:
|
||||||
category: '/language:${{matrix.language}}'
|
category: '/language:${{matrix.language}}'
|
||||||
|
|
|
||||||
|
|
@ -93,10 +93,10 @@ export default {
|
||||||
editAuthor(author) {
|
editAuthor(author) {
|
||||||
this.$store.commit('globals/showEditAuthorModal', author)
|
this.$store.commit('globals/showEditAuthorModal', author)
|
||||||
},
|
},
|
||||||
editItem(libraryItem) {
|
editItem(libraryItem, tab = 'details') {
|
||||||
var itemIds = this.shelf.entities.map((e) => e.id)
|
var itemIds = this.shelf.entities.map((e) => e.id)
|
||||||
this.$store.commit('setBookshelfBookIds', itemIds)
|
this.$store.commit('setBookshelfBookIds', itemIds)
|
||||||
this.$store.commit('showEditModal', libraryItem)
|
this.$store.commit('showEditModalOnTab', { libraryItem, tab: tab || 'details' })
|
||||||
},
|
},
|
||||||
editEpisode({ libraryItem, episode }) {
|
editEpisode({ libraryItem, episode }) {
|
||||||
this.$store.commit('setEpisodeTableEpisodeIds', [episode.id])
|
this.$store.commit('setEpisodeTableEpisodeIds', [episode.id])
|
||||||
|
|
|
||||||
|
|
@ -232,11 +232,11 @@ export default {
|
||||||
clearFilter() {
|
clearFilter() {
|
||||||
this.$store.dispatch('user/updateUserSettings', { filterBy: 'all' })
|
this.$store.dispatch('user/updateUserSettings', { filterBy: 'all' })
|
||||||
},
|
},
|
||||||
editEntity(entity) {
|
editEntity(entity, tab = 'details') {
|
||||||
if (this.entityName === 'items' || this.entityName === 'series-books') {
|
if (this.entityName === 'items' || this.entityName === 'series-books') {
|
||||||
const bookIds = this.entities.map((e) => e.id)
|
const bookIds = this.entities.map((e) => e.id)
|
||||||
this.$store.commit('setBookshelfBookIds', bookIds)
|
this.$store.commit('setBookshelfBookIds', bookIds)
|
||||||
this.$store.commit('showEditModal', entity)
|
this.$store.commit('showEditModalOnTab', { libraryItem: entity, tab: tab || 'details' })
|
||||||
} else if (this.entityName === 'collections') {
|
} else if (this.entityName === 'collections') {
|
||||||
this.$store.commit('globals/setEditCollection', entity)
|
this.$store.commit('globals/setEditCollection', entity)
|
||||||
} else if (this.entityName === 'playlists') {
|
} else if (this.entityName === 'playlists') {
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,24 @@
|
||||||
</widgets-alert>
|
</widgets-alert>
|
||||||
|
|
||||||
<div v-if="isNonInteractable" class="absolute top-0 left-0 w-full h-full bg-black/50 flex items-center justify-center z-20">
|
<div v-if="isNonInteractable" class="absolute top-0 left-0 w-full h-full bg-black/50 flex items-center justify-center z-20">
|
||||||
<ui-loading-indicator :text="nonInteractionLabel" />
|
<ui-loading-indicator>
|
||||||
|
<div class="mb-4">
|
||||||
|
<span class="text-lg font-medium text-white">
|
||||||
|
{{ nonInteractionLabel }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="isUploading" class="w-64 mx-auto mb-2">
|
||||||
|
<div class="flex items-center justify-center mb-2">
|
||||||
|
<span class="text-sm font-medium text-white/60 text-center w-full">
|
||||||
|
{{ uploadProgressText }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="w-full bg-primary/20 rounded-full h-2.5">
|
||||||
|
<div class="bg-green-500 h-2.5 rounded-full transition-all duration-300 ease-out" :style="{ width: uploadProgressPercent + '%' }"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ui-loading-indicator>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -91,7 +108,11 @@ export default {
|
||||||
isUploading: false,
|
isUploading: false,
|
||||||
uploadFailed: false,
|
uploadFailed: false,
|
||||||
uploadSuccess: false,
|
uploadSuccess: false,
|
||||||
isFetchingMetadata: false
|
isFetchingMetadata: false,
|
||||||
|
uploadProgress: {
|
||||||
|
loaded: 0,
|
||||||
|
total: 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -116,6 +137,15 @@ export default {
|
||||||
} else if (this.isFetchingMetadata) {
|
} else if (this.isFetchingMetadata) {
|
||||||
return this.$strings.LabelFetchingMetadata
|
return this.$strings.LabelFetchingMetadata
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
uploadProgressPercent() {
|
||||||
|
if (this.uploadProgress.total === 0) return 0
|
||||||
|
return Math.min(100, Math.round((this.uploadProgress.loaded / this.uploadProgress.total) * 100))
|
||||||
|
},
|
||||||
|
uploadProgressText() {
|
||||||
|
const loaded = this.$bytesPretty(this.uploadProgress.loaded)
|
||||||
|
const total = this.$bytesPretty(this.uploadProgress.total)
|
||||||
|
return `${this.uploadProgressPercent}% (${loaded} / ${total})`
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
@ -123,6 +153,21 @@ export default {
|
||||||
this.isUploading = status === 'uploading'
|
this.isUploading = status === 'uploading'
|
||||||
this.uploadFailed = status === 'failed'
|
this.uploadFailed = status === 'failed'
|
||||||
this.uploadSuccess = status === 'success'
|
this.uploadSuccess = status === 'success'
|
||||||
|
|
||||||
|
if (status !== 'uploading') {
|
||||||
|
this.uploadProgress = {
|
||||||
|
loaded: 0,
|
||||||
|
total: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setUploadProgress(progress) {
|
||||||
|
if (this.isUploading && progress) {
|
||||||
|
this.uploadProgress = {
|
||||||
|
loaded: progress.loaded || 0,
|
||||||
|
total: progress.total || 0
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
titleUpdated() {
|
titleUpdated() {
|
||||||
this.error = ''
|
this.error = ''
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Error widget -->
|
<!-- Error widget -->
|
||||||
<ui-tooltip cy-id="ErrorTooltip" v-if="showError" :text="errorText" class="absolute bottom-4e left-0 z-10">
|
<ui-tooltip cy-id="ErrorTooltip" v-if="showError" :text="errorText" plaintext class="absolute bottom-4e left-0 z-10">
|
||||||
<div :style="{ height: 1.5 + 'em', width: 2.5 + 'em' }" class="bg-error rounded-r-full shadow-md flex items-center justify-end border-r border-b border-red-300">
|
<div :style="{ height: 1.5 + 'em', width: 2.5 + 'em' }" class="bg-error rounded-r-full shadow-md flex items-center justify-end border-r border-b border-red-300">
|
||||||
<span class="material-symbols text-red-100 pr-1e" :style="{ fontSize: 0.875 + 'em' }">priority_high</span>
|
<span class="material-symbols text-red-100 pr-1e" :style="{ fontSize: 0.875 + 'em' }">priority_high</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -121,12 +121,12 @@
|
||||||
<!-- Alternative bookshelf title/author/sort -->
|
<!-- Alternative bookshelf title/author/sort -->
|
||||||
<div cy-id="detailBottom" :id="`description-area-${index}`" v-if="isAlternativeBookshelfView || isAuthorBookshelfView" dir="auto" class="relative mt-2e mb-2e left-0 z-50 w-full">
|
<div cy-id="detailBottom" :id="`description-area-${index}`" v-if="isAlternativeBookshelfView || isAuthorBookshelfView" dir="auto" class="relative mt-2e mb-2e left-0 z-50 w-full">
|
||||||
<div :style="{ fontSize: 0.9 + 'em' }">
|
<div :style="{ fontSize: 0.9 + 'em' }">
|
||||||
<ui-tooltip v-if="displayTitle" :text="displayTitle" :disabled="!displayTitleTruncated" direction="bottom" :delayOnShow="500" class="flex items-center">
|
<ui-tooltip v-if="displayTitle" :text="displayTitle" plaintext :disabled="!displayTitleTruncated" direction="bottom" :delayOnShow="500" class="flex items-center">
|
||||||
<p cy-id="title" ref="displayTitle" class="truncate">{{ displayTitle }}</p>
|
<p cy-id="title" ref="displayTitle" class="truncate">{{ displayTitle }}</p>
|
||||||
<widgets-explicit-indicator cy-id="explicitIndicator" v-if="isExplicit" />
|
<widgets-explicit-indicator cy-id="explicitIndicator" v-if="isExplicit" />
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
</div>
|
</div>
|
||||||
<ui-tooltip v-if="showSubtitles" :text="displaySubtitle" :disabled="!displaySubtitleTruncated" direction="bottom" :delayOnShow="500" class="flex items-center">
|
<ui-tooltip v-if="showSubtitles" :text="displaySubtitle" plaintext :disabled="!displaySubtitleTruncated" direction="bottom" :delayOnShow="500" class="flex items-center">
|
||||||
<p cy-id="subtitle" class="truncate" ref="displaySubtitle" :style="{ fontSize: 0.6 + 'em' }">{{ displaySubtitle }}</p>
|
<p cy-id="subtitle" class="truncate" ref="displaySubtitle" :style="{ fontSize: 0.6 + 'em' }">{{ displaySubtitle }}</p>
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
<p cy-id="line2" class="truncate text-gray-400" :style="{ fontSize: 0.8 + 'em' }">{{ displayLineTwo || ' ' }}</p>
|
<p cy-id="line2" class="truncate text-gray-400" :style="{ fontSize: 0.8 + 'em' }">{{ displayLineTwo || ' ' }}</p>
|
||||||
|
|
@ -353,6 +353,14 @@ export default {
|
||||||
if (!this.userProgressLastUpdated) return '\u00A0'
|
if (!this.userProgressLastUpdated) return '\u00A0'
|
||||||
return this.$getString('LabelLastProgressDate', [this.$formatDatetime(this.userProgressLastUpdated, this.dateFormat, this.timeFormat)])
|
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
|
return null
|
||||||
},
|
},
|
||||||
episodeProgress() {
|
episodeProgress() {
|
||||||
|
|
@ -389,6 +397,14 @@ export default {
|
||||||
if (!this.userProgress) return null
|
if (!this.userProgress) return null
|
||||||
return this.userProgress.lastUpdate
|
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() {
|
itemIsFinished() {
|
||||||
if (this.booksInSeries) return this.seriesIsFinished
|
if (this.booksInSeries) return this.seriesIsFinished
|
||||||
return this.userProgress ? !!this.userProgress.isFinished : false
|
return this.userProgress ? !!this.userProgress.isFinished : false
|
||||||
|
|
@ -772,11 +788,11 @@ export default {
|
||||||
},
|
},
|
||||||
showEditModalFiles() {
|
showEditModalFiles() {
|
||||||
// More menu func
|
// More menu func
|
||||||
this.store.commit('showEditModalOnTab', { libraryItem: this.libraryItem, tab: 'files' })
|
this.$emit('edit', this.libraryItem, 'files')
|
||||||
},
|
},
|
||||||
showEditModalMatch() {
|
showEditModalMatch() {
|
||||||
// More menu func
|
// More menu func
|
||||||
this.store.commit('showEditModalOnTab', { libraryItem: this.libraryItem, tab: 'match' })
|
this.$emit('edit', this.libraryItem, 'match')
|
||||||
},
|
},
|
||||||
sendToDevice(deviceName) {
|
sendToDevice(deviceName) {
|
||||||
// More menu func
|
// More menu func
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,14 @@ export default {
|
||||||
text: this.$strings.LabelLibrarySortByProgress,
|
text: this.$strings.LabelLibrarySortByProgress,
|
||||||
value: 'progress'
|
value: 'progress'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
text: this.$strings.LabelLibrarySortByProgressStarted,
|
||||||
|
value: 'progress.createdAt'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: this.$strings.LabelLibrarySortByProgressFinished,
|
||||||
|
value: 'progress.finishedAt'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
text: this.$strings.LabelRandomly,
|
text: this.$strings.LabelRandomly,
|
||||||
value: 'random'
|
value: 'random'
|
||||||
|
|
@ -200,4 +208,4 @@ export default {
|
||||||
.librarySortMenu {
|
.librarySortMenu {
|
||||||
max-height: calc(100vh - 125px);
|
max-height: calc(100vh - 125px);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ export default {
|
||||||
},
|
},
|
||||||
providers() {
|
providers() {
|
||||||
if (this.isPodcast) return this.$store.state.scanners.podcastProviders
|
if (this.isPodcast) return this.$store.state.scanners.podcastProviders
|
||||||
return this.$store.state.scanners.providers
|
return this.$store.state.scanners.bookProviders
|
||||||
},
|
},
|
||||||
libraryProvider() {
|
libraryProvider() {
|
||||||
return this.$store.getters['libraries/getLibraryProvider'](this.currentLibraryId) || 'google'
|
return this.$store.getters['libraries/getLibraryProvider'](this.currentLibraryId) || 'google'
|
||||||
|
|
@ -96,6 +96,9 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
init() {
|
init() {
|
||||||
|
// Fetch providers when modal is shown
|
||||||
|
this.$store.dispatch('scanners/fetchProviders')
|
||||||
|
|
||||||
// If we don't have a set provider (first open of dialog) or we've switched library, set
|
// If we don't have a set provider (first open of dialog) or we've switched library, set
|
||||||
// the selected provider to the current library default provider
|
// the selected provider to the current library default provider
|
||||||
if (!this.options.provider || this.lastUsedLibrary != this.currentLibraryId) {
|
if (!this.options.provider || this.lastUsedLibrary != this.currentLibraryId) {
|
||||||
|
|
@ -127,8 +130,7 @@ export default {
|
||||||
this.show = false
|
this.show = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
mounted() {}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,19 +51,21 @@
|
||||||
<form @submit.prevent="submitSearchForm">
|
<form @submit.prevent="submitSearchForm">
|
||||||
<div class="flex flex-wrap sm:flex-nowrap items-center justify-start -mx-1">
|
<div class="flex flex-wrap sm:flex-nowrap items-center justify-start -mx-1">
|
||||||
<div class="w-48 grow p-1">
|
<div class="w-48 grow p-1">
|
||||||
<ui-dropdown v-model="provider" :items="providers" :label="$strings.LabelProvider" small />
|
<ui-dropdown v-model="provider" :items="providers" :disabled="searchInProgress" :label="$strings.LabelProvider" small />
|
||||||
</div>
|
</div>
|
||||||
<div class="w-72 grow p-1">
|
<div class="w-72 grow p-1">
|
||||||
<ui-text-input-with-label v-model="searchTitle" :label="searchTitleLabel" :placeholder="$strings.PlaceholderSearch" />
|
<ui-text-input-with-label v-model="searchTitle" :disabled="searchInProgress" :label="searchTitleLabel" :placeholder="$strings.PlaceholderSearch" />
|
||||||
</div>
|
</div>
|
||||||
<div v-show="provider != 'itunes' && provider != 'audiobookcovers'" class="w-72 grow p-1">
|
<div v-show="provider != 'itunes' && provider != 'audiobookcovers'" class="w-72 grow p-1">
|
||||||
<ui-text-input-with-label v-model="searchAuthor" :label="$strings.LabelAuthor" />
|
<ui-text-input-with-label v-model="searchAuthor" :disabled="searchInProgress" :label="$strings.LabelAuthor" />
|
||||||
</div>
|
</div>
|
||||||
<ui-btn class="mt-5 ml-1 md:min-w-24" :padding-x="4" type="submit">{{ $strings.ButtonSearch }}</ui-btn>
|
<ui-btn v-if="!searchInProgress" class="mt-5 ml-1 md:min-w-24" :padding-x="4" type="submit">{{ $strings.ButtonSearch }}</ui-btn>
|
||||||
|
<ui-btn v-else class="mt-5 ml-1 md:min-w-24" :padding-x="4" type="button" color="bg-error" @click.prevent="cancelCurrentSearch">{{ $strings.ButtonCancel }}</ui-btn>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div v-if="hasSearched" class="flex items-center flex-wrap justify-center sm:max-h-80 sm:overflow-y-scroll mt-2 max-w-full">
|
<div v-if="hasSearched" class="flex items-center flex-wrap justify-center sm:max-h-80 sm:overflow-y-scroll mt-2 max-w-full">
|
||||||
<p v-if="!coversFound.length">{{ $strings.MessageNoCoversFound }}</p>
|
<p v-if="searchInProgress && !coversFound.length" class="text-gray-300 py-4">{{ $strings.MessageLoading }}</p>
|
||||||
|
<p v-else-if="!searchInProgress && !coversFound.length" class="text-gray-300 py-4">{{ $strings.MessageNoCoversFound }}</p>
|
||||||
<template v-for="cover in coversFound">
|
<template v-for="cover in coversFound">
|
||||||
<div :key="cover" class="m-0.5 mb-5 border-2 border-transparent hover:border-yellow-300 cursor-pointer" :class="cover === coverPath ? 'border-yellow-300' : ''" @click="updateCover(cover)">
|
<div :key="cover" class="m-0.5 mb-5 border-2 border-transparent hover:border-yellow-300 cursor-pointer" :class="cover === coverPath ? 'border-yellow-300' : ''" @click="updateCover(cover)">
|
||||||
<covers-preview-cover :src="cover" :width="80" show-open-new-tab :book-cover-aspect-ratio="bookCoverAspectRatio" />
|
<covers-preview-cover :src="cover" :width="80" show-open-new-tab :book-cover-aspect-ratio="bookCoverAspectRatio" />
|
||||||
|
|
@ -105,7 +107,10 @@ export default {
|
||||||
showLocalCovers: false,
|
showLocalCovers: false,
|
||||||
previewUpload: null,
|
previewUpload: null,
|
||||||
selectedFile: null,
|
selectedFile: null,
|
||||||
provider: 'google'
|
provider: 'google',
|
||||||
|
currentSearchRequestId: null,
|
||||||
|
searchInProgress: false,
|
||||||
|
socketListenersActive: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
|
@ -128,8 +133,8 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
providers() {
|
providers() {
|
||||||
if (this.isPodcast) return this.$store.state.scanners.podcastProviders
|
if (this.isPodcast) return this.$store.state.scanners.podcastCoverProviders
|
||||||
return [{ text: 'All', value: 'all' }, ...this.$store.state.scanners.providers, ...this.$store.state.scanners.coverOnlyProviders]
|
return this.$store.state.scanners.bookCoverProviders
|
||||||
},
|
},
|
||||||
searchTitleLabel() {
|
searchTitleLabel() {
|
||||||
if (this.provider.startsWith('audible')) return this.$strings.LabelSearchTitleOrASIN
|
if (this.provider.startsWith('audible')) return this.$strings.LabelSearchTitleOrASIN
|
||||||
|
|
@ -186,6 +191,9 @@ export default {
|
||||||
_file.localPath = `${process.env.serverUrl}/api/items/${this.libraryItemId}/file/${file.ino}?token=${this.userToken}`
|
_file.localPath = `${process.env.serverUrl}/api/items/${this.libraryItemId}/file/${file.ino}?token=${this.userToken}`
|
||||||
return _file
|
return _file
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
socket() {
|
||||||
|
return this.$root.socket
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
@ -235,7 +243,19 @@ export default {
|
||||||
this.searchTitle = this.mediaMetadata.title || ''
|
this.searchTitle = this.mediaMetadata.title || ''
|
||||||
this.searchAuthor = this.mediaMetadata.authorName || ''
|
this.searchAuthor = this.mediaMetadata.authorName || ''
|
||||||
if (this.isPodcast) this.provider = 'itunes'
|
if (this.isPodcast) this.provider = 'itunes'
|
||||||
else this.provider = localStorage.getItem('book-cover-provider') || localStorage.getItem('book-provider') || 'google'
|
else {
|
||||||
|
// Migrate from 'all' to 'best' (only once)
|
||||||
|
const migrationKey = 'book-cover-provider-migrated'
|
||||||
|
const currentProvider = localStorage.getItem('book-cover-provider') || localStorage.getItem('book-provider') || 'google'
|
||||||
|
|
||||||
|
if (!localStorage.getItem(migrationKey) && currentProvider === 'all') {
|
||||||
|
localStorage.setItem('book-cover-provider', 'best')
|
||||||
|
localStorage.setItem(migrationKey, 'true')
|
||||||
|
this.provider = 'best'
|
||||||
|
} else {
|
||||||
|
this.provider = currentProvider
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
removeCover() {
|
removeCover() {
|
||||||
if (!this.coverPath) {
|
if (!this.coverPath) {
|
||||||
|
|
@ -291,22 +311,116 @@ export default {
|
||||||
console.error('PersistProvider', error)
|
console.error('PersistProvider', error)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
generateRequestId() {
|
||||||
|
return `cover-search-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
|
||||||
|
},
|
||||||
|
addSocketListeners() {
|
||||||
|
if (!this.socket || this.socketListenersActive) return
|
||||||
|
|
||||||
|
this.socket.on('cover_search_result', this.handleSearchResult)
|
||||||
|
this.socket.on('cover_search_complete', this.handleSearchComplete)
|
||||||
|
this.socket.on('cover_search_error', this.handleSearchError)
|
||||||
|
this.socket.on('cover_search_provider_error', this.handleProviderError)
|
||||||
|
this.socket.on('cover_search_cancelled', this.handleSearchCancelled)
|
||||||
|
this.socket.on('disconnect', this.handleSocketDisconnect)
|
||||||
|
this.socketListenersActive = true
|
||||||
|
},
|
||||||
|
removeSocketListeners() {
|
||||||
|
if (!this.socket || !this.socketListenersActive) return
|
||||||
|
|
||||||
|
this.socket.off('cover_search_result', this.handleSearchResult)
|
||||||
|
this.socket.off('cover_search_complete', this.handleSearchComplete)
|
||||||
|
this.socket.off('cover_search_error', this.handleSearchError)
|
||||||
|
this.socket.off('cover_search_provider_error', this.handleProviderError)
|
||||||
|
this.socket.off('cover_search_cancelled', this.handleSearchCancelled)
|
||||||
|
this.socket.off('disconnect', this.handleSocketDisconnect)
|
||||||
|
this.socketListenersActive = false
|
||||||
|
},
|
||||||
|
handleSearchResult(data) {
|
||||||
|
if (data.requestId !== this.currentSearchRequestId) return
|
||||||
|
|
||||||
|
// Add new covers to the list (avoiding duplicates)
|
||||||
|
const newCovers = data.covers.filter((cover) => !this.coversFound.includes(cover))
|
||||||
|
this.coversFound.push(...newCovers)
|
||||||
|
},
|
||||||
|
handleSearchComplete(data) {
|
||||||
|
if (data.requestId !== this.currentSearchRequestId) return
|
||||||
|
|
||||||
|
this.searchInProgress = false
|
||||||
|
this.currentSearchRequestId = null
|
||||||
|
},
|
||||||
|
handleSearchError(data) {
|
||||||
|
if (data.requestId !== this.currentSearchRequestId) return
|
||||||
|
|
||||||
|
console.error('[Cover Search] Search error:', data.error)
|
||||||
|
this.$toast.error(this.$strings.ToastCoverSearchFailed)
|
||||||
|
this.searchInProgress = false
|
||||||
|
this.currentSearchRequestId = null
|
||||||
|
},
|
||||||
|
handleProviderError(data) {
|
||||||
|
if (data.requestId !== this.currentSearchRequestId) return
|
||||||
|
|
||||||
|
console.warn(`[Cover Search] Provider ${data.provider} failed:`, data.error)
|
||||||
|
},
|
||||||
|
handleSearchCancelled(data) {
|
||||||
|
if (data.requestId !== this.currentSearchRequestId) return
|
||||||
|
|
||||||
|
this.searchInProgress = false
|
||||||
|
this.currentSearchRequestId = null
|
||||||
|
},
|
||||||
|
handleSocketDisconnect() {
|
||||||
|
// If we were in the middle of a search, cancel it (server can't send results anymore)
|
||||||
|
if (this.searchInProgress && this.currentSearchRequestId) {
|
||||||
|
this.searchInProgress = false
|
||||||
|
this.currentSearchRequestId = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancelCurrentSearch() {
|
||||||
|
if (!this.currentSearchRequestId || !this.socket?.connected) {
|
||||||
|
console.error('[Cover Search] Socket not connected')
|
||||||
|
this.$toast.error(this.$strings.ToastConnectionNotAvailable)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.socket.emit('cancel_cover_search', this.currentSearchRequestId)
|
||||||
|
this.currentSearchRequestId = null
|
||||||
|
this.searchInProgress = false
|
||||||
|
},
|
||||||
async submitSearchForm() {
|
async submitSearchForm() {
|
||||||
|
if (!this.socket?.connected) {
|
||||||
|
console.error('[Cover Search] Socket not connected')
|
||||||
|
this.$toast.error(this.$strings.ToastConnectionNotAvailable)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cancel any existing search
|
||||||
|
if (this.searchInProgress) {
|
||||||
|
this.cancelCurrentSearch()
|
||||||
|
}
|
||||||
|
|
||||||
// Store provider in local storage
|
// Store provider in local storage
|
||||||
this.persistProvider()
|
this.persistProvider()
|
||||||
|
|
||||||
this.isProcessing = true
|
// Setup socket listeners if not already done
|
||||||
const searchQuery = this.getSearchQuery()
|
this.addSocketListeners()
|
||||||
const results = await this.$axios
|
|
||||||
.$get(`/api/search/covers?${searchQuery}`)
|
// Clear previous results
|
||||||
.then((res) => res.results)
|
this.coversFound = []
|
||||||
.catch((error) => {
|
|
||||||
console.error('Failed', error)
|
|
||||||
return []
|
|
||||||
})
|
|
||||||
this.coversFound = results
|
|
||||||
this.isProcessing = false
|
|
||||||
this.hasSearched = true
|
this.hasSearched = true
|
||||||
|
this.searchInProgress = true
|
||||||
|
|
||||||
|
// Generate unique request ID
|
||||||
|
const requestId = this.generateRequestId()
|
||||||
|
this.currentSearchRequestId = requestId
|
||||||
|
|
||||||
|
// Emit search request via WebSocket
|
||||||
|
this.socket.emit('search_covers', {
|
||||||
|
requestId,
|
||||||
|
title: this.searchTitle,
|
||||||
|
author: this.searchAuthor || '',
|
||||||
|
provider: this.provider,
|
||||||
|
podcast: this.isPodcast
|
||||||
|
})
|
||||||
},
|
},
|
||||||
setCover(coverFile) {
|
setCover(coverFile) {
|
||||||
this.isProcessing = true
|
this.isProcessing = true
|
||||||
|
|
@ -320,6 +434,20 @@ export default {
|
||||||
this.isProcessing = false
|
this.isProcessing = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
// Setup socket listeners when component is mounted
|
||||||
|
this.addSocketListeners()
|
||||||
|
// Fetch providers if not already loaded
|
||||||
|
this.$store.dispatch('scanners/fetchProviders')
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
// Cancel any ongoing search when component is destroyed
|
||||||
|
if (this.searchInProgress) {
|
||||||
|
this.cancelCurrentSearch()
|
||||||
|
}
|
||||||
|
// Remove socket listeners
|
||||||
|
this.removeSocketListeners()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<div id="match-wrapper" class="w-full h-full overflow-hidden px-2 md:px-4 py-4 md:py-6 relative">
|
<div id="match-wrapper" class="w-full h-full overflow-hidden px-2 md:px-4 py-4 md:py-6 relative">
|
||||||
<form @submit.prevent="submitSearch">
|
<form @submit.prevent="submitSearch">
|
||||||
<div class="flex flex-wrap md:flex-nowrap items-center justify-start -mx-1">
|
<div class="flex flex-wrap md:flex-nowrap items-center justify-start -mx-1">
|
||||||
<div class="w-36 px-1">
|
<div v-if="providersLoaded" class="w-36 px-1">
|
||||||
<ui-dropdown v-model="provider" :items="providers" :label="$strings.LabelProvider" small />
|
<ui-dropdown v-model="provider" :items="providers" :label="$strings.LabelProvider" small />
|
||||||
</div>
|
</div>
|
||||||
<div class="grow md:w-72 px-1">
|
<div class="grow md:w-72 px-1">
|
||||||
|
|
@ -77,8 +77,8 @@
|
||||||
<ui-checkbox v-model="selectedMatchUsage.author" checkbox-bg="bg" @input="checkboxToggled" />
|
<ui-checkbox v-model="selectedMatchUsage.author" checkbox-bg="bg" @input="checkboxToggled" />
|
||||||
<div class="grow ml-4">
|
<div class="grow ml-4">
|
||||||
<ui-text-input-with-label v-model="selectedMatch.author" :disabled="!selectedMatchUsage.author" :label="$strings.LabelAuthor" />
|
<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">
|
<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', mediaMetadata.authorName)">{{ mediaMetadata.authorName }}</a>
|
{{ $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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -253,6 +253,7 @@ export default {
|
||||||
hasSearched: false,
|
hasSearched: false,
|
||||||
selectedMatch: null,
|
selectedMatch: null,
|
||||||
selectedMatchOrig: null,
|
selectedMatchOrig: null,
|
||||||
|
waitingForProviders: false,
|
||||||
selectedMatchUsage: {
|
selectedMatchUsage: {
|
||||||
title: true,
|
title: true,
|
||||||
subtitle: true,
|
subtitle: true,
|
||||||
|
|
@ -285,9 +286,19 @@ export default {
|
||||||
handler(newVal) {
|
handler(newVal) {
|
||||||
if (newVal) this.init()
|
if (newVal) this.init()
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
providersLoaded(isLoaded) {
|
||||||
|
// Complete initialization once providers are loaded
|
||||||
|
if (isLoaded && this.waitingForProviders) {
|
||||||
|
this.waitingForProviders = false
|
||||||
|
this.initProviderAndSearch()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
providersLoaded() {
|
||||||
|
return this.$store.getters['scanners/areProvidersLoaded']
|
||||||
|
},
|
||||||
isProcessing: {
|
isProcessing: {
|
||||||
get() {
|
get() {
|
||||||
return this.processing
|
return this.processing
|
||||||
|
|
@ -319,7 +330,7 @@ export default {
|
||||||
},
|
},
|
||||||
providers() {
|
providers() {
|
||||||
if (this.isPodcast) return this.$store.state.scanners.podcastProviders
|
if (this.isPodcast) return this.$store.state.scanners.podcastProviders
|
||||||
return this.$store.state.scanners.providers
|
return this.$store.state.scanners.bookProviders
|
||||||
},
|
},
|
||||||
searchTitleLabel() {
|
searchTitleLabel() {
|
||||||
if (this.provider.startsWith('audible')) return this.$strings.LabelSearchTitleOrASIN
|
if (this.provider.startsWith('audible')) return this.$strings.LabelSearchTitleOrASIN
|
||||||
|
|
@ -400,7 +411,9 @@ export default {
|
||||||
this.$toast.warning(this.$strings.ToastTitleRequired)
|
this.$toast.warning(this.$strings.ToastTitleRequired)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.persistProvider()
|
if (!this.isPodcast) {
|
||||||
|
this.persistProvider()
|
||||||
|
}
|
||||||
this.runSearch()
|
this.runSearch()
|
||||||
},
|
},
|
||||||
async runSearch() {
|
async runSearch() {
|
||||||
|
|
@ -476,6 +489,24 @@ export default {
|
||||||
|
|
||||||
this.checkboxToggled()
|
this.checkboxToggled()
|
||||||
},
|
},
|
||||||
|
initProviderAndSearch() {
|
||||||
|
// Set provider based on media type
|
||||||
|
if (this.isPodcast) {
|
||||||
|
this.provider = 'itunes'
|
||||||
|
} else {
|
||||||
|
this.provider = this.getDefaultBookProvider()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prefer using ASIN if set and using audible provider
|
||||||
|
if (this.provider.startsWith('audible') && this.libraryItem.media.metadata.asin) {
|
||||||
|
this.searchTitle = this.libraryItem.media.metadata.asin
|
||||||
|
this.searchAuthor = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.searchTitle) {
|
||||||
|
this.submitSearch()
|
||||||
|
}
|
||||||
|
},
|
||||||
init() {
|
init() {
|
||||||
this.clearSelectedMatch()
|
this.clearSelectedMatch()
|
||||||
this.initSelectedMatchUsage()
|
this.initSelectedMatchUsage()
|
||||||
|
|
@ -493,19 +524,13 @@ export default {
|
||||||
}
|
}
|
||||||
this.searchTitle = this.libraryItem.media.metadata.title
|
this.searchTitle = this.libraryItem.media.metadata.title
|
||||||
this.searchAuthor = this.libraryItem.media.metadata.authorName || ''
|
this.searchAuthor = this.libraryItem.media.metadata.authorName || ''
|
||||||
if (this.isPodcast) this.provider = 'itunes'
|
|
||||||
else {
|
|
||||||
this.provider = this.getDefaultBookProvider()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prefer using ASIN if set and using audible provider
|
// Wait for providers to be loaded before setting provider and searching
|
||||||
if (this.provider.startsWith('audible') && this.libraryItem.media.metadata.asin) {
|
if (this.providersLoaded || this.isPodcast) {
|
||||||
this.searchTitle = this.libraryItem.media.metadata.asin
|
this.waitingForProviders = false
|
||||||
this.searchAuthor = ''
|
this.initProviderAndSearch()
|
||||||
}
|
} else {
|
||||||
|
this.waitingForProviders = true
|
||||||
if (this.searchTitle) {
|
|
||||||
this.submitSearch()
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
selectMatch(match) {
|
selectMatch(match) {
|
||||||
|
|
@ -635,6 +660,10 @@ export default {
|
||||||
this.selectedMatch = null
|
this.selectedMatch = null
|
||||||
this.selectedMatchOrig = null
|
this.selectedMatchOrig = null
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
// Fetch providers if not already loaded
|
||||||
|
this.$store.dispatch('scanners/fetchProviders')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ export default {
|
||||||
},
|
},
|
||||||
providers() {
|
providers() {
|
||||||
if (this.mediaType === 'podcast') return this.$store.state.scanners.podcastProviders
|
if (this.mediaType === 'podcast') return this.$store.state.scanners.podcastProviders
|
||||||
return this.$store.state.scanners.providers
|
return this.$store.state.scanners.bookProviders
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
@ -156,6 +156,8 @@ export default {
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.init()
|
this.init()
|
||||||
|
// Fetch providers if not already loaded
|
||||||
|
this.$store.dispatch('scanners/fetchProviders')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,6 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
provider: null,
|
|
||||||
useSquareBookCovers: false,
|
useSquareBookCovers: false,
|
||||||
enableWatcher: false,
|
enableWatcher: false,
|
||||||
skipMatchingMediaWithAsin: false,
|
skipMatchingMediaWithAsin: false,
|
||||||
|
|
@ -134,10 +133,6 @@ export default {
|
||||||
isPodcastLibrary() {
|
isPodcastLibrary() {
|
||||||
return this.mediaType === 'podcast'
|
return this.mediaType === 'podcast'
|
||||||
},
|
},
|
||||||
providers() {
|
|
||||||
if (this.mediaType === 'podcast') return this.$store.state.scanners.podcastProviders
|
|
||||||
return this.$store.state.scanners.providers
|
|
||||||
},
|
|
||||||
maskAsFinishedWhenItems() {
|
maskAsFinishedWhenItems() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,6 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.processing = false
|
this.processing = false
|
||||||
this.$toast.success(`${this.episodes.length} episode${this.episodes.length > 1 ? 's' : ''} removed`)
|
|
||||||
this.show = false
|
this.show = false
|
||||||
this.$emit('clearSelected')
|
this.$emit('clearSelected')
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ export default {
|
||||||
.$patch(`/api/podcasts/${this.libraryItem.id}/episode/${this.episodeId}`, updatePayload)
|
.$patch(`/api/podcasts/${this.libraryItem.id}/episode/${this.episodeId}`, updatePayload)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.isProcessing = false
|
this.isProcessing = false
|
||||||
this.$toast.success('Podcast episode updated')
|
this.$toast.success(this.$strings.ToastPodcastEpisodeUpdated)
|
||||||
this.$emit('selectTab', 'details')
|
this.$emit('selectTab', 'details')
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<div :key="n" class="absolute pointer-events-none left-0 h-px bg-white/10" :style="{ top: n * lineSpacing - lineSpacing / 2 + 'px', width: '360px', marginLeft: '24px' }" />
|
<div :key="n" class="absolute pointer-events-none left-0 h-px bg-white/10" :style="{ top: n * lineSpacing - lineSpacing / 2 + 'px', width: '360px', marginLeft: '24px' }" />
|
||||||
|
|
||||||
<div :key="`dot-${n}`" class="absolute z-10" :style="{ left: points[n - 1].x + 'px', bottom: points[n - 1].y + 'px' }">
|
<div :key="`dot-${n}`" class="absolute z-10" :style="{ left: points[n - 1].x + 'px', bottom: points[n - 1].y + 'px' }">
|
||||||
<ui-tooltip :text="last7DaysOfListening[n - 1].minutesListening" direction="top">
|
<ui-tooltip :text="last7DaysOfListening[n - 1].minutesListening" plaintext direction="top">
|
||||||
<div class="h-2 w-2 bg-yellow-400 hover:bg-yellow-300 rounded-full transform duration-150 transition-transform hover:scale-125" />
|
<div class="h-2 w-2 bg-yellow-400 hover:bg-yellow-300 rounded-full transform duration-150 transition-transform hover:scale-125" />
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -186,10 +186,16 @@ export default {
|
||||||
daysInARow() {
|
daysInARow() {
|
||||||
var count = 0
|
var count = 0
|
||||||
while (true) {
|
while (true) {
|
||||||
var _date = this.$addDaysToToday(count * -1)
|
const _date = this.$addDaysToToday(count * -1 - 1)
|
||||||
var datestr = this.$formatJsDate(_date, 'yyyy-MM-dd')
|
const datestr = this.$formatJsDate(_date, 'yyyy-MM-dd')
|
||||||
|
|
||||||
if (!this.listeningStatsDays[datestr] || this.listeningStatsDays[datestr] === 0) {
|
if (!this.listeningStatsDays[datestr] || this.listeningStatsDays[datestr] === 0) {
|
||||||
|
// don't require listening today to count towards days in a row, but do count it if already listened today
|
||||||
|
const today = this.$formatJsDate(new Date(), 'yyyy-MM-dd')
|
||||||
|
if (this.listeningStatsDays[today]) {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
|
||||||
return count
|
return count
|
||||||
}
|
}
|
||||||
count++
|
count++
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="w-40">
|
<div :class="hasSlotContent ? 'w-auto' : 'w-40'">
|
||||||
<div class="bg-bg border border-gray-500 py-2 px-5 rounded-lg flex items-center flex-col box-shadow-md">
|
<div class="bg-bg border border-gray-500 py-2 px-5 rounded-lg flex items-center flex-col box-shadow-md">
|
||||||
<div class="loader-dots block relative w-20 h-5 mt-2">
|
<div class="loader-dots block relative w-20 h-5 mt-2">
|
||||||
<div class="absolute top-0 mt-1 w-3 h-3 rounded-full bg-green-500"></div>
|
<div class="absolute top-0 mt-1 w-3 h-3 rounded-full bg-green-500"></div>
|
||||||
|
|
@ -7,7 +7,9 @@
|
||||||
<div class="absolute top-0 mt-1 w-3 h-3 rounded-full bg-green-500"></div>
|
<div class="absolute top-0 mt-1 w-3 h-3 rounded-full bg-green-500"></div>
|
||||||
<div class="absolute top-0 mt-1 w-3 h-3 rounded-full bg-green-500"></div>
|
<div class="absolute top-0 mt-1 w-3 h-3 rounded-full bg-green-500"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-gray-200 text-xs font-light mt-2 text-center">{{ message }}</div>
|
<slot>
|
||||||
|
<div class="text-gray-200 text-xs font-light mt-2 text-center">{{ message }}</div>
|
||||||
|
</slot>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -23,6 +25,9 @@ export default {
|
||||||
computed: {
|
computed: {
|
||||||
message() {
|
message() {
|
||||||
return this.text || this.$strings.MessagePleaseWait
|
return this.text || this.$strings.MessagePleaseWait
|
||||||
|
},
|
||||||
|
hasSlotContent() {
|
||||||
|
return this.$slots.default && this.$slots.default.length > 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,11 @@
|
||||||
<div ref="wrapper" class="relative">
|
<div ref="wrapper" class="relative">
|
||||||
<form @submit.prevent="submitForm">
|
<form @submit.prevent="submitForm">
|
||||||
<div ref="inputWrapper" role="list" style="min-height: 36px" class="flex-wrap relative w-full shadow-xs flex items-center border border-gray-600 rounded-sm px-2 py-1" :class="wrapperClass" @click.stop.prevent="clickWrapper" @mouseup.stop.prevent @mousedown.prevent>
|
<div ref="inputWrapper" role="list" style="min-height: 36px" class="flex-wrap relative w-full shadow-xs flex items-center border border-gray-600 rounded-sm px-2 py-1" :class="wrapperClass" @click.stop.prevent="clickWrapper" @mouseup.stop.prevent @mousedown.prevent>
|
||||||
<div v-for="item in selected" :key="item" role="listitem" class="rounded-full px-2 py-1 mx-0.5 my-0.5 text-xs bg-bg flex flex-nowrap break-all items-center relative">
|
<!-- Use index in v-for and key in case the same key exists multiple times -->
|
||||||
|
<div v-for="(item, idx) in selected" :key="item + '-' + idx" role="listitem" class="rounded-full px-2 py-1 mx-0.5 my-0.5 text-xs bg-bg flex flex-nowrap break-all items-center relative">
|
||||||
<div v-if="!disabled" class="w-full h-full rounded-full absolute top-0 left-0 px-1 bg-bg/75 flex items-center justify-end opacity-0 hover:opacity-100" :class="{ 'opacity-100': inputFocused }">
|
<div v-if="!disabled" class="w-full h-full rounded-full absolute top-0 left-0 px-1 bg-bg/75 flex items-center justify-end opacity-0 hover:opacity-100" :class="{ 'opacity-100': inputFocused }">
|
||||||
<button v-if="showEdit" type="button" :aria-label="$strings.ButtonEdit" class="material-symbols text-white hover:text-warning cursor-pointer" style="font-size: 1.1rem" @click.stop="editItem(item)">edit</button>
|
<button v-if="showEdit" type="button" :aria-label="$strings.ButtonEdit" class="material-symbols text-white hover:text-warning cursor-pointer" style="font-size: 1.1rem" @click.stop="editItem(item)">edit</button>
|
||||||
<button type="button" :aria-label="$strings.ButtonRemove" class="material-symbols text-white hover:text-error focus:text-error cursor-pointer" style="font-size: 1.1rem" @click.stop="removeItem(item)" @keydown.enter.stop.prevent="removeItem(item)" @focus="setInputFocused(true)" @blur="setInputFocused(false)" tabindex="0">close</button>
|
<button type="button" :aria-label="$strings.ButtonRemove" class="material-symbols text-white hover:text-error focus:text-error cursor-pointer" style="font-size: 1.1rem" @click.stop="removeItem(item, idx)" @keydown.enter.stop.prevent="removeItem(item, idx)" @focus="setInputFocused(true)" @blur="setInputFocused(false)" tabindex="0">close</button>
|
||||||
</div>
|
</div>
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -259,8 +260,9 @@ export default {
|
||||||
}
|
}
|
||||||
this.focus()
|
this.focus()
|
||||||
},
|
},
|
||||||
removeItem(item) {
|
removeItem(item, idx) {
|
||||||
var remaining = this.selected.filter((i) => i !== item)
|
var remaining = this.selected.slice()
|
||||||
|
remaining.splice(idx, 1)
|
||||||
this.$emit('input', remaining)
|
this.$emit('input', remaining)
|
||||||
this.$emit('removedItem', item)
|
this.$emit('removedItem', item)
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,8 @@ export default {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0
|
||||||
},
|
},
|
||||||
disabled: Boolean
|
disabled: Boolean,
|
||||||
|
plaintext: Boolean
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
@ -46,7 +47,11 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
updateText() {
|
updateText() {
|
||||||
if (this.tooltip) {
|
if (this.tooltip) {
|
||||||
this.tooltip.innerHTML = this.text
|
if (this.plaintext) {
|
||||||
|
this.tooltip.textContent = this.text
|
||||||
|
} else {
|
||||||
|
this.tooltip.innerHTML = this.text
|
||||||
|
}
|
||||||
this.setTooltipPosition(this.tooltip)
|
this.setTooltipPosition(this.tooltip)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -58,7 +63,11 @@ export default {
|
||||||
tooltip.className = 'tooltip-wrapper absolute px-2 py-1 text-white text-xs rounded-sm shadow-lg max-w-xs text-center hidden sm:block'
|
tooltip.className = 'tooltip-wrapper absolute px-2 py-1 text-white text-xs rounded-sm shadow-lg max-w-xs text-center hidden sm:block'
|
||||||
tooltip.style.zIndex = 100
|
tooltip.style.zIndex = 100
|
||||||
tooltip.style.backgroundColor = 'rgba(0,0,0,0.85)'
|
tooltip.style.backgroundColor = 'rgba(0,0,0,0.85)'
|
||||||
tooltip.innerHTML = this.text
|
if (this.plaintext) {
|
||||||
|
tooltip.textContent = this.text
|
||||||
|
} else {
|
||||||
|
tooltip.innerHTML = this.text
|
||||||
|
}
|
||||||
tooltip.addEventListener('mouseover', this.cancelHide)
|
tooltip.addEventListener('mouseover', this.cancelHide)
|
||||||
tooltip.addEventListener('mouseleave', this.hideTooltip)
|
tooltip.addEventListener('mouseleave', this.hideTooltip)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -132,10 +132,10 @@ export default {
|
||||||
editAuthor(author) {
|
editAuthor(author) {
|
||||||
this.$store.commit('globals/showEditAuthorModal', author)
|
this.$store.commit('globals/showEditAuthorModal', author)
|
||||||
},
|
},
|
||||||
editItem(libraryItem) {
|
editItem(libraryItem, tab = 'details') {
|
||||||
var itemIds = this.items.map((e) => e.id)
|
var itemIds = this.items.map((e) => e.id)
|
||||||
this.$store.commit('setBookshelfBookIds', itemIds)
|
this.$store.commit('setBookshelfBookIds', itemIds)
|
||||||
this.$store.commit('showEditModal', libraryItem)
|
this.$store.commit('showEditModalOnTab', { libraryItem, tab: tab || 'details' })
|
||||||
},
|
},
|
||||||
selectItem(payload) {
|
selectItem(payload) {
|
||||||
this.$emit('selectEntity', payload)
|
this.$emit('selectEntity', payload)
|
||||||
|
|
|
||||||
|
|
@ -371,11 +371,13 @@ export default {
|
||||||
},
|
},
|
||||||
customMetadataProviderAdded(provider) {
|
customMetadataProviderAdded(provider) {
|
||||||
if (!provider?.id) return
|
if (!provider?.id) return
|
||||||
this.$store.commit('scanners/addCustomMetadataProvider', provider)
|
// Refresh providers cache
|
||||||
|
this.$store.dispatch('scanners/refreshProviders')
|
||||||
},
|
},
|
||||||
customMetadataProviderRemoved(provider) {
|
customMetadataProviderRemoved(provider) {
|
||||||
if (!provider?.id) return
|
if (!provider?.id) return
|
||||||
this.$store.commit('scanners/removeCustomMetadataProvider', provider)
|
// Refresh providers cache
|
||||||
|
this.$store.dispatch('scanners/refreshProviders')
|
||||||
},
|
},
|
||||||
initializeSocket() {
|
initializeSocket() {
|
||||||
if (this.$root.socket) {
|
if (this.$root.socket) {
|
||||||
|
|
|
||||||
|
|
@ -118,8 +118,8 @@ export default {
|
||||||
propsData: props,
|
propsData: props,
|
||||||
parent: this,
|
parent: this,
|
||||||
created() {
|
created() {
|
||||||
this.$on('edit', (entity) => {
|
this.$on('edit', (entity, tab) => {
|
||||||
if (_this.editEntity) _this.editEntity(entity)
|
if (_this.editEntity) _this.editEntity(entity, tab)
|
||||||
})
|
})
|
||||||
this.$on('select', ({ entity, shiftKey }) => {
|
this.$on('select', ({ entity, shiftKey }) => {
|
||||||
if (_this.selectEntity) _this.selectEntity(entity, shiftKey)
|
if (_this.selectEntity) _this.selectEntity(entity, shiftKey)
|
||||||
|
|
|
||||||
4
client/package-lock.json
generated
4
client/package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "audiobookshelf-client",
|
"name": "audiobookshelf-client",
|
||||||
"version": "2.28.0",
|
"version": "2.31.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "audiobookshelf-client",
|
"name": "audiobookshelf-client",
|
||||||
"version": "2.28.0",
|
"version": "2.31.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxtjs/axios": "^5.13.6",
|
"@nuxtjs/axios": "^5.13.6",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "audiobookshelf-client",
|
"name": "audiobookshelf-client",
|
||||||
"version": "2.28.0",
|
"version": "2.31.0",
|
||||||
"buildNumber": 1,
|
"buildNumber": 1,
|
||||||
"description": "Self-hosted audiobook and podcast client",
|
"description": "Self-hosted audiobook and podcast client",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
|
|
||||||
|
|
@ -12,24 +12,24 @@
|
||||||
<p class="text-base font-mono ml-4 hidden md:block">{{ $secondsToTimestamp(mediaDurationRounded) }}</p>
|
<p class="text-base font-mono ml-4 hidden md:block">{{ $secondsToTimestamp(mediaDurationRounded) }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex flex-wrap-reverse lg:flex-nowrap justify-center py-4 px-4">
|
<div class="flex flex-wrap-reverse min-[1120px]:flex-nowrap justify-center py-4 px-4">
|
||||||
<div class="w-full max-w-3xl py-4">
|
<div class="w-full max-w-3xl py-4">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="w-12 hidden lg:block" />
|
<div class="w-12 hidden min-w-[1120px]:block" />
|
||||||
<p class="text-lg mb-4 font-semibold">{{ $strings.HeaderChapters }}</p>
|
<p class="text-lg mb-4 font-semibold">{{ $strings.HeaderChapters }}</p>
|
||||||
<div class="grow" />
|
<div class="grow" />
|
||||||
<ui-checkbox v-model="showSecondInputs" checkbox-bg="primary" small label-class="text-sm text-gray-200 pl-1" :label="$strings.LabelShowSeconds" class="mx-2" />
|
<ui-checkbox v-model="showSecondInputs" checkbox-bg="primary" small label-class="text-sm text-gray-200 pl-1" :label="$strings.LabelShowSeconds" class="mx-2" />
|
||||||
<div class="w-32 hidden lg:block" />
|
<div class="w-32 hidden min-[1120px]:block" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center mb-3 py-1 -mx-1">
|
<div class="flex items-center mb-3 py-1 -mx-1">
|
||||||
<div class="w-12 hidden lg:block" />
|
<div class="w-12 hidden min-[1120px]:block" />
|
||||||
<ui-btn v-if="chapters.length" color="bg-primary" small class="mx-1 whitespace-nowrap" @click.stop="removeAllChaptersClick">{{ $strings.ButtonRemoveAll }}</ui-btn>
|
<ui-btn v-if="chapters.length" color="bg-primary" small class="mx-1 whitespace-nowrap" @click.stop="removeAllChaptersClick">{{ $strings.ButtonRemoveAll }}</ui-btn>
|
||||||
<ui-btn v-if="newChapters.length > 1" :color="showShiftTimes ? 'bg-bg' : 'bg-primary'" class="mx-1 whitespace-nowrap" small @click="showShiftTimes = !showShiftTimes">{{ $strings.ButtonShiftTimes }}</ui-btn>
|
<ui-btn v-if="newChapters.length > 1" :color="showShiftTimes ? 'bg-bg' : 'bg-primary'" class="mx-1 whitespace-nowrap" small @click="showShiftTimes = !showShiftTimes">{{ $strings.ButtonShiftTimes }}</ui-btn>
|
||||||
<ui-btn color="bg-primary" small :class="{ 'mx-1': newChapters.length > 1 }" @click="showFindChaptersModal = true">{{ $strings.ButtonLookup }}</ui-btn>
|
<ui-btn color="bg-primary" small :class="{ 'mx-1': newChapters.length > 1 }" @click="showFindChaptersModal = true">{{ $strings.ButtonLookup }}</ui-btn>
|
||||||
<div class="grow" />
|
<div class="grow" />
|
||||||
<ui-btn v-if="hasChanges" small class="mx-1" @click.stop="resetChapters">{{ $strings.ButtonReset }}</ui-btn>
|
<ui-btn v-if="hasChanges" small class="mx-1" @click.stop="resetChapters">{{ $strings.ButtonReset }}</ui-btn>
|
||||||
<ui-btn v-if="hasChanges" color="bg-success" class="mx-1" :disabled="!hasChanges" small @click="saveChapters">{{ $strings.ButtonSave }}</ui-btn>
|
<ui-btn v-if="hasChanges" color="bg-success" class="mx-1" :disabled="!hasChanges" small @click="saveChapters">{{ $strings.ButtonSave }}</ui-btn>
|
||||||
<div class="w-32 hidden lg:block" />
|
<div class="w-32 hidden min-[1120px]:block" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="overflow-hidden">
|
<div class="overflow-hidden">
|
||||||
|
|
@ -117,16 +117,16 @@
|
||||||
</button>
|
</button>
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
<ui-tooltip :text="selectedChapterId === chapter.id && isPlayingChapter ? $strings.MessagePauseChapter : $strings.MessagePlayChapter" direction="bottom">
|
<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)">
|
<button :disabled="!getAudioTrackForTime(chapter.start)" class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-white transform hover:scale-110 duration-150 disabled:opacity-50 disabled:cursor-not-allowed" @click="playChapter(chapter)">
|
||||||
<widgets-loading-spinner v-if="selectedChapterId === chapter.id && isLoadingChapter" />
|
<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-if="selectedChapterId === chapter.id && isPlayingChapter" class="material-symbols text-base">pause</span>
|
||||||
<span v-else class="material-symbols text-base">play_arrow</span>
|
<span v-else class="material-symbols text-xl">play_arrow</span>
|
||||||
</button>
|
</button>
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
<ui-tooltip v-if="selectedChapterId === chapter.id && (isPlayingChapter || isLoadingChapter)" :text="$strings.TooltipAdjustChapterStart" direction="bottom">
|
<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>
|
<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>
|
||||||
<ui-tooltip v-if="chapter.error" :text="chapter.error" direction="left">
|
<ui-tooltip v-if="chapter.error" :text="chapter.error" plaintext direction="left">
|
||||||
<button class="w-7 h-7 rounded-full flex items-center justify-center text-error">
|
<button class="w-7 h-7 rounded-full flex items-center justify-center text-error">
|
||||||
<span class="material-symbols text-lg">error_outline</span>
|
<span class="material-symbols text-lg">error_outline</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
@ -150,7 +150,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="w-full max-w-xl py-4 px-2">
|
<div class="w-full max-w-3xl min-[1120px]:max-w-xl py-4 px-2">
|
||||||
<div class="flex items-center mb-4 py-1">
|
<div class="flex items-center mb-4 py-1">
|
||||||
<p class="text-lg font-semibold">{{ $strings.HeaderAudioTracks }}</p>
|
<p class="text-lg font-semibold">{{ $strings.HeaderAudioTracks }}</p>
|
||||||
<div class="grow" />
|
<div class="grow" />
|
||||||
|
|
@ -160,13 +160,13 @@
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex text-xs uppercase text-gray-300 font-semibold mb-2">
|
<div class="flex text-xs uppercase text-gray-300 font-semibold mb-2">
|
||||||
<div class="grow">{{ $strings.LabelFilename }}</div>
|
<div class="grow min-[1120px]:max-w-64 xl:max-w-sm">{{ $strings.LabelFilename }}</div>
|
||||||
<div class="w-20">{{ $strings.LabelDuration }}</div>
|
<div class="w-20">{{ $strings.LabelDuration }}</div>
|
||||||
<div class="w-20 hidden md:block text-center">{{ $strings.HeaderChapters }}</div>
|
<div class="w-20 hidden md:block text-center">{{ $strings.HeaderChapters }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-for="track in audioTracks" :key="track.ino" class="flex items-center py-2" :class="currentTrackIndex === track.index && isPlayingChapter ? 'bg-success/10' : ''">
|
<div 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">
|
<div class="pr-2 grow min-[1120px]:max-w-64 xl:max-w-sm">
|
||||||
<p class="text-xs truncate max-w-sm">{{ track.metadata.filename }}</p>
|
<p class="text-xs truncate">{{ track.metadata.filename }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-20" style="min-width: 80px">
|
<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>
|
<p class="text-xs font-mono text-gray-200">{{ $secondsToTimestamp(Math.round(track.duration), false, true) }}</p>
|
||||||
|
|
@ -594,6 +594,14 @@ export default {
|
||||||
|
|
||||||
this.hasChanges = hasChanges
|
this.hasChanges = hasChanges
|
||||||
},
|
},
|
||||||
|
getAudioTrackForTime(time) {
|
||||||
|
if (typeof time !== 'number') {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
return this.tracks.find((at) => {
|
||||||
|
return time >= at.startOffset && time < at.startOffset + at.duration
|
||||||
|
})
|
||||||
|
},
|
||||||
playChapter(chapter) {
|
playChapter(chapter) {
|
||||||
console.log('Play Chapter', chapter.id)
|
console.log('Play Chapter', chapter.id)
|
||||||
if (this.selectedChapterId === chapter.id) {
|
if (this.selectedChapterId === chapter.id) {
|
||||||
|
|
@ -608,9 +616,12 @@ export default {
|
||||||
this.destroyAudioEl()
|
this.destroyAudioEl()
|
||||||
}
|
}
|
||||||
|
|
||||||
const audioTrack = this.tracks.find((at) => {
|
const audioTrack = this.getAudioTrackForTime(chapter.start)
|
||||||
return chapter.start >= at.startOffset && chapter.start < at.startOffset + at.duration
|
if (!audioTrack) {
|
||||||
})
|
console.error('No audio track found for chapter', chapter)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
this.selectedChapter = chapter
|
this.selectedChapter = chapter
|
||||||
this.isLoadingChapter = true
|
this.isLoadingChapter = true
|
||||||
|
|
||||||
|
|
@ -697,11 +708,7 @@ export default {
|
||||||
this.saving = false
|
this.saving = false
|
||||||
if (data.updated) {
|
if (data.updated) {
|
||||||
this.$toast.success(this.$strings.ToastChaptersUpdated)
|
this.$toast.success(this.$strings.ToastChaptersUpdated)
|
||||||
if (this.previousRoute) {
|
this.reloadLibraryItem()
|
||||||
this.$router.push(this.previousRoute)
|
|
||||||
} else {
|
|
||||||
this.$router.push(`/item/${this.libraryItem.id}`)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
this.$toast.info(this.$strings.MessageNoUpdatesWereNecessary)
|
this.$toast.info(this.$strings.MessageNoUpdatesWereNecessary)
|
||||||
}
|
}
|
||||||
|
|
@ -874,11 +881,7 @@ export default {
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
if (data.updated) {
|
if (data.updated) {
|
||||||
this.$toast.success(this.$strings.ToastChaptersRemoved)
|
this.$toast.success(this.$strings.ToastChaptersRemoved)
|
||||||
if (this.previousRoute) {
|
this.reloadLibraryItem()
|
||||||
this.$router.push(this.previousRoute)
|
|
||||||
} else {
|
|
||||||
this.$router.push(`/item/${this.libraryItem.id}`)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
this.$toast.info(this.$strings.MessageNoUpdatesWereNecessary)
|
this.$toast.info(this.$strings.MessageNoUpdatesWereNecessary)
|
||||||
}
|
}
|
||||||
|
|
@ -983,6 +986,18 @@ export default {
|
||||||
}
|
}
|
||||||
this.libraryItem = libraryItem
|
this.libraryItem = libraryItem
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
reloadLibraryItem() {
|
||||||
|
this.$axios
|
||||||
|
.$get(`/api/items/${this.libraryItem.id}?expanded=1`)
|
||||||
|
.then((data) => {
|
||||||
|
this.libraryItem = data
|
||||||
|
this.initChapters()
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.error('Failed to reload library item', error)
|
||||||
|
this.$toast.error(this.$strings.ToastFailedToLoadData)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
|
||||||
|
|
@ -247,7 +247,8 @@ export default {
|
||||||
return this.$store.state.serverSettings
|
return this.$store.state.serverSettings
|
||||||
},
|
},
|
||||||
providers() {
|
providers() {
|
||||||
return this.$store.state.scanners.providers
|
// Use book cover providers for the cover provider dropdown
|
||||||
|
return this.$store.state.scanners.bookCoverProviders || []
|
||||||
},
|
},
|
||||||
dateFormats() {
|
dateFormats() {
|
||||||
return this.$store.state.globals.dateFormats
|
return this.$store.state.globals.dateFormats
|
||||||
|
|
@ -416,6 +417,8 @@ export default {
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.initServerSettings()
|
this.initServerSettings()
|
||||||
|
// Fetch providers if not already loaded (for cover provider dropdown)
|
||||||
|
this.$store.dispatch('scanners/fetchProviders')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -189,6 +189,7 @@ export default {
|
||||||
require('@/plugins/chromecast.js').default(this)
|
require('@/plugins/chromecast.js').default(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.$store.commit('libraries/setLastLoad', 0) // Ensure libraries get loaded again when switching users
|
||||||
this.$store.commit('libraries/setCurrentLibrary', { id: userDefaultLibraryId })
|
this.$store.commit('libraries/setCurrentLibrary', { id: userDefaultLibraryId })
|
||||||
this.$store.commit('user/setUser', user)
|
this.$store.commit('user/setUser', user)
|
||||||
// Access token only returned from login, not authorize
|
// Access token only returned from login, not authorize
|
||||||
|
|
@ -298,8 +299,8 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (authMethods.includes('openid')) {
|
if (authMethods.includes('openid')) {
|
||||||
// Auto redirect unless query string ?autoLaunch=0
|
// Auto redirect unless query string ?autoLaunch=0 OR when explicity requested through ?autoLaunch=1
|
||||||
if (this.authFormData?.authOpenIDAutoLaunch && this.$route.query?.autoLaunch !== '0') {
|
if ((this.authFormData?.authOpenIDAutoLaunch && this.$route.query?.autoLaunch !== '0') || this.$route.query?.autoLaunch == '1') {
|
||||||
window.location.href = this.openidAuthUri
|
window.location.href = this.openidAuthUri
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,7 @@ export default {
|
||||||
},
|
},
|
||||||
providers() {
|
providers() {
|
||||||
if (this.selectedLibraryIsPodcast) return this.$store.state.scanners.podcastProviders
|
if (this.selectedLibraryIsPodcast) return this.$store.state.scanners.podcastProviders
|
||||||
return this.$store.state.scanners.providers
|
return this.$store.state.scanners.bookProviders
|
||||||
},
|
},
|
||||||
canFetchMetadata() {
|
canFetchMetadata() {
|
||||||
return !this.selectedLibraryIsPodcast && this.fetchMetadata.enabled
|
return !this.selectedLibraryIsPodcast && this.fetchMetadata.enabled
|
||||||
|
|
@ -297,6 +297,15 @@ export default {
|
||||||
ref.setUploadStatus(status)
|
ref.setUploadStatus(status)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
updateItemCardProgress(index, progress) {
|
||||||
|
var ref = this.$refs[`itemCard-${index}`]
|
||||||
|
if (ref && ref.length) ref = ref[0]
|
||||||
|
if (!ref) {
|
||||||
|
console.error('Book card ref not found', index, this.$refs)
|
||||||
|
} else {
|
||||||
|
ref.setUploadProgress(progress)
|
||||||
|
}
|
||||||
|
},
|
||||||
async uploadItem(item) {
|
async uploadItem(item) {
|
||||||
var form = new FormData()
|
var form = new FormData()
|
||||||
form.set('title', item.title)
|
form.set('title', item.title)
|
||||||
|
|
@ -312,8 +321,20 @@ export default {
|
||||||
form.set(`${index++}`, file)
|
form.set(`${index++}`, file)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
onUploadProgress: (progressEvent) => {
|
||||||
|
if (progressEvent.lengthComputable) {
|
||||||
|
const progress = {
|
||||||
|
loaded: progressEvent.loaded,
|
||||||
|
total: progressEvent.total
|
||||||
|
}
|
||||||
|
this.updateItemCardProgress(item.index, progress)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return this.$axios
|
return this.$axios
|
||||||
.$post('/api/upload', form)
|
.$post('/api/upload', form, config)
|
||||||
.then(() => true)
|
.then(() => true)
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to upload item', error)
|
console.error('Failed to upload item', error)
|
||||||
|
|
@ -394,6 +415,8 @@ export default {
|
||||||
this.setMetadataProvider()
|
this.setMetadataProvider()
|
||||||
|
|
||||||
this.setDefaultFolder()
|
this.setDefaultFolder()
|
||||||
|
// Fetch providers if not already loaded
|
||||||
|
this.$store.dispatch('scanners/fetchProviders')
|
||||||
window.addEventListener('dragenter', this.dragenter)
|
window.addEventListener('dragenter', this.dragenter)
|
||||||
window.addEventListener('dragleave', this.dragleave)
|
window.addEventListener('dragleave', this.dragleave)
|
||||||
window.addEventListener('dragover', this.dragover)
|
window.addEventListener('dragover', this.dragover)
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ const languageCodeMap = {
|
||||||
it: { label: 'Italiano', dateFnsLocale: 'it' },
|
it: { label: 'Italiano', dateFnsLocale: 'it' },
|
||||||
lt: { label: 'Lietuvių', dateFnsLocale: 'lt' },
|
lt: { label: 'Lietuvių', dateFnsLocale: 'lt' },
|
||||||
hu: { label: 'Magyar', dateFnsLocale: 'hu' },
|
hu: { label: 'Magyar', dateFnsLocale: 'hu' },
|
||||||
|
ko: { label: '한국어', dateFnsLocale: 'ko' },
|
||||||
nl: { label: 'Nederlands', dateFnsLocale: 'nl' },
|
nl: { label: 'Nederlands', dateFnsLocale: 'nl' },
|
||||||
no: { label: 'Norsk', dateFnsLocale: 'no' },
|
no: { label: 'Norsk', dateFnsLocale: 'no' },
|
||||||
pl: { label: 'Polski', dateFnsLocale: 'pl' },
|
pl: { label: 'Polski', dateFnsLocale: 'pl' },
|
||||||
|
|
@ -29,6 +30,7 @@ const languageCodeMap = {
|
||||||
ru: { label: 'Русский', dateFnsLocale: 'ru' },
|
ru: { label: 'Русский', dateFnsLocale: 'ru' },
|
||||||
sl: { label: 'Slovenščina', dateFnsLocale: 'sl' },
|
sl: { label: 'Slovenščina', dateFnsLocale: 'sl' },
|
||||||
sv: { label: 'Svenska', dateFnsLocale: 'sv' },
|
sv: { label: 'Svenska', dateFnsLocale: 'sv' },
|
||||||
|
tr: { label: 'Türkçe', dateFnsLocale: 'tr' },
|
||||||
uk: { label: 'Українська', dateFnsLocale: 'uk' },
|
uk: { label: 'Українська', dateFnsLocale: 'uk' },
|
||||||
'vi-vn': { label: 'Tiếng Việt', dateFnsLocale: 'vi' },
|
'vi-vn': { label: 'Tiếng Việt', dateFnsLocale: 'vi' },
|
||||||
'zh-cn': { label: '简体中文 (Simplified Chinese)', dateFnsLocale: 'zhCN' },
|
'zh-cn': { label: '简体中文 (Simplified Chinese)', dateFnsLocale: 'zhCN' },
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,6 @@ export const actions = {
|
||||||
const library = data.library
|
const library = data.library
|
||||||
const filterData = data.filterdata
|
const filterData = data.filterdata
|
||||||
const issues = data.issues || 0
|
const issues = data.issues || 0
|
||||||
const customMetadataProviders = data.customMetadataProviders || []
|
|
||||||
const numUserPlaylists = data.numUserPlaylists
|
const numUserPlaylists = data.numUserPlaylists
|
||||||
|
|
||||||
dispatch('user/checkUpdateLibrarySortFilter', library.mediaType, { root: true })
|
dispatch('user/checkUpdateLibrarySortFilter', library.mediaType, { root: true })
|
||||||
|
|
@ -131,8 +130,6 @@ export const actions = {
|
||||||
commit('setLibraryIssues', issues)
|
commit('setLibraryIssues', issues)
|
||||||
commit('setLibraryFilterData', filterData)
|
commit('setLibraryFilterData', filterData)
|
||||||
commit('setNumUserPlaylists', numUserPlaylists)
|
commit('setNumUserPlaylists', numUserPlaylists)
|
||||||
commit('scanners/setCustomMetadataProviders', customMetadataProviders, { root: true })
|
|
||||||
|
|
||||||
commit('setCurrentLibrary', { id: libraryId })
|
commit('setCurrentLibrary', { id: libraryId })
|
||||||
return data
|
return data
|
||||||
})
|
})
|
||||||
|
|
@ -159,7 +156,7 @@ export const actions = {
|
||||||
.$get(`/api/libraries`)
|
.$get(`/api/libraries`)
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
commit('set', data.libraries)
|
commit('set', data.libraries)
|
||||||
commit('setLastLoad')
|
commit('setLastLoad', new Date())
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed', error)
|
console.error('Failed', error)
|
||||||
|
|
@ -176,8 +173,8 @@ export const mutations = {
|
||||||
setFoldersLastUpdate(state) {
|
setFoldersLastUpdate(state) {
|
||||||
state.folderLastUpdate = Date.now()
|
state.folderLastUpdate = Date.now()
|
||||||
},
|
},
|
||||||
setLastLoad(state) {
|
setLastLoad(state, date) {
|
||||||
state.lastLoad = Date.now()
|
state.lastLoad = date
|
||||||
},
|
},
|
||||||
setLibraryIssues(state, val) {
|
setLibraryIssues(state, val) {
|
||||||
state.issues = val
|
state.issues = val
|
||||||
|
|
|
||||||
|
|
@ -1,126 +1,60 @@
|
||||||
export const state = () => ({
|
export const state = () => ({
|
||||||
providers: [
|
bookProviders: [],
|
||||||
{
|
podcastProviders: [],
|
||||||
text: 'Google Books',
|
bookCoverProviders: [],
|
||||||
value: 'google'
|
podcastCoverProviders: [],
|
||||||
},
|
providersLoaded: false
|
||||||
{
|
|
||||||
text: 'Open Library',
|
|
||||||
value: 'openlibrary'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'iTunes',
|
|
||||||
value: 'itunes'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Audible.com',
|
|
||||||
value: 'audible'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Audible.ca',
|
|
||||||
value: 'audible.ca'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Audible.co.uk',
|
|
||||||
value: 'audible.uk'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Audible.com.au',
|
|
||||||
value: 'audible.au'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Audible.fr',
|
|
||||||
value: 'audible.fr'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Audible.de',
|
|
||||||
value: 'audible.de'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Audible.co.jp',
|
|
||||||
value: 'audible.jp'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Audible.it',
|
|
||||||
value: 'audible.it'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Audible.co.in',
|
|
||||||
value: 'audible.in'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Audible.es',
|
|
||||||
value: 'audible.es'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'FantLab.ru',
|
|
||||||
value: 'fantlab'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
podcastProviders: [
|
|
||||||
{
|
|
||||||
text: 'iTunes',
|
|
||||||
value: 'itunes'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
coverOnlyProviders: [
|
|
||||||
{
|
|
||||||
text: 'AudiobookCovers.com',
|
|
||||||
value: 'audiobookcovers'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
})
|
||||||
|
|
||||||
export const getters = {
|
export const getters = {
|
||||||
checkBookProviderExists: state => (providerValue) => {
|
checkBookProviderExists: (state) => (providerValue) => {
|
||||||
return state.providers.some(p => p.value === providerValue)
|
return state.bookProviders.some((p) => p.value === providerValue)
|
||||||
},
|
},
|
||||||
checkPodcastProviderExists: state => (providerValue) => {
|
checkPodcastProviderExists: (state) => (providerValue) => {
|
||||||
return state.podcastProviders.some(p => p.value === providerValue)
|
return state.podcastProviders.some((p) => p.value === providerValue)
|
||||||
|
},
|
||||||
|
areProvidersLoaded: (state) => state.providersLoaded
|
||||||
|
}
|
||||||
|
|
||||||
|
export const actions = {
|
||||||
|
async fetchProviders({ commit, state }) {
|
||||||
|
// Only fetch if not already loaded
|
||||||
|
if (state.providersLoaded) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await this.$axios.$get('/api/search/providers')
|
||||||
|
if (response?.providers) {
|
||||||
|
commit('setAllProviders', response.providers)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to fetch providers', error)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async refreshProviders({ commit, state }) {
|
||||||
|
// if providers are not loaded, do nothing - they will be fetched when required (
|
||||||
|
if (!state.providersLoaded) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await this.$axios.$get('/api/search/providers')
|
||||||
|
if (response?.providers) {
|
||||||
|
commit('setAllProviders', response.providers)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to refresh providers', error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const actions = {}
|
|
||||||
|
|
||||||
export const mutations = {
|
export const mutations = {
|
||||||
addCustomMetadataProvider(state, provider) {
|
setAllProviders(state, providers) {
|
||||||
if (provider.mediaType === 'book') {
|
state.bookProviders = providers.books || []
|
||||||
if (state.providers.some(p => p.value === provider.slug)) return
|
state.podcastProviders = providers.podcasts || []
|
||||||
state.providers.push({
|
state.bookCoverProviders = providers.booksCovers || []
|
||||||
text: provider.name,
|
state.podcastCoverProviders = providers.podcasts || [] // Use same as bookCovers since podcasts use iTunes only
|
||||||
value: provider.slug
|
state.providersLoaded = true
|
||||||
})
|
|
||||||
} else {
|
|
||||||
if (state.podcastProviders.some(p => p.value === provider.slug)) return
|
|
||||||
state.podcastProviders.push({
|
|
||||||
text: provider.name,
|
|
||||||
value: provider.slug
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
removeCustomMetadataProvider(state, provider) {
|
|
||||||
if (provider.mediaType === 'book') {
|
|
||||||
state.providers = state.providers.filter(p => p.value !== provider.slug)
|
|
||||||
} else {
|
|
||||||
state.podcastProviders = state.podcastProviders.filter(p => p.value !== provider.slug)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
setCustomMetadataProviders(state, providers) {
|
|
||||||
if (!providers?.length) return
|
|
||||||
|
|
||||||
const mediaType = providers[0].mediaType
|
|
||||||
if (mediaType === 'book') {
|
|
||||||
// clear previous values, and add new values to the end
|
|
||||||
state.providers = state.providers.filter((p) => !p.value.startsWith('custom-'))
|
|
||||||
state.providers = [
|
|
||||||
...state.providers,
|
|
||||||
...providers.map((p) => ({
|
|
||||||
text: p.name,
|
|
||||||
value: p.slug
|
|
||||||
}))
|
|
||||||
]
|
|
||||||
} else {
|
|
||||||
// Podcast providers not supported yet
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"ButtonAdd": "إضافة",
|
"ButtonAdd": "إضافة",
|
||||||
|
"ButtonAddApiKey": "إضافة مفتاح واجهة برمجة التطبيقات",
|
||||||
"ButtonAddChapters": "إضافة الفصول",
|
"ButtonAddChapters": "إضافة الفصول",
|
||||||
"ButtonAddDevice": "إضافة جهاز",
|
"ButtonAddDevice": "إضافة جهاز",
|
||||||
"ButtonAddLibrary": "إضافة مكتبة",
|
"ButtonAddLibrary": "إضافة مكتبة",
|
||||||
|
|
@ -20,7 +21,8 @@
|
||||||
"ButtonChooseAFolder": "اختر المجلد",
|
"ButtonChooseAFolder": "اختر المجلد",
|
||||||
"ButtonChooseFiles": "اختر الملفات",
|
"ButtonChooseFiles": "اختر الملفات",
|
||||||
"ButtonClearFilter": "تصفية الفرز",
|
"ButtonClearFilter": "تصفية الفرز",
|
||||||
"ButtonCloseFeed": "إغلاق",
|
"ButtonClose": "إغلاق",
|
||||||
|
"ButtonCloseFeed": "إغلاق الموجز",
|
||||||
"ButtonCloseSession": "إغلاق الجلسة المفتوحة",
|
"ButtonCloseSession": "إغلاق الجلسة المفتوحة",
|
||||||
"ButtonCollections": "المجموعات",
|
"ButtonCollections": "المجموعات",
|
||||||
"ButtonConfigureScanner": "إعدادات الماسح الضوئي",
|
"ButtonConfigureScanner": "إعدادات الماسح الضوئي",
|
||||||
|
|
@ -119,11 +121,13 @@
|
||||||
"HeaderAccount": "الحساب",
|
"HeaderAccount": "الحساب",
|
||||||
"HeaderAddCustomMetadataProvider": "إضافة موفر بيانات تعريفية مخصص",
|
"HeaderAddCustomMetadataProvider": "إضافة موفر بيانات تعريفية مخصص",
|
||||||
"HeaderAdvanced": "متقدم",
|
"HeaderAdvanced": "متقدم",
|
||||||
|
"HeaderApiKeys": "مفاتيح API",
|
||||||
"HeaderAppriseNotificationSettings": "إعدادات الإشعارات",
|
"HeaderAppriseNotificationSettings": "إعدادات الإشعارات",
|
||||||
"HeaderAudioTracks": "المقاطع الصوتية",
|
"HeaderAudioTracks": "المقاطع الصوتية",
|
||||||
"HeaderAudiobookTools": "أدوات إدارة ملفات الكتب الصوتية",
|
"HeaderAudiobookTools": "أدوات إدارة ملفات الكتب الصوتية",
|
||||||
"HeaderAuthentication": "المصادقة",
|
"HeaderAuthentication": "المصادقة",
|
||||||
"HeaderBackups": "النسخ الاحتياطية",
|
"HeaderBackups": "النسخ الاحتياطية",
|
||||||
|
"HeaderBulkChapterModal": "أضف فصولاً متعددة",
|
||||||
"HeaderChangePassword": "تغيير كلمة المرور",
|
"HeaderChangePassword": "تغيير كلمة المرور",
|
||||||
"HeaderChapters": "الفصول",
|
"HeaderChapters": "الفصول",
|
||||||
"HeaderChooseAFolder": "اختيار المجلد",
|
"HeaderChooseAFolder": "اختيار المجلد",
|
||||||
|
|
@ -162,6 +166,7 @@
|
||||||
"HeaderMetadataOrderOfPrecedence": "ترتيب أولوية البيانات الوصفية",
|
"HeaderMetadataOrderOfPrecedence": "ترتيب أولوية البيانات الوصفية",
|
||||||
"HeaderMetadataToEmbed": "البيانات الوصفية المراد تضمينها",
|
"HeaderMetadataToEmbed": "البيانات الوصفية المراد تضمينها",
|
||||||
"HeaderNewAccount": "حساب جديد",
|
"HeaderNewAccount": "حساب جديد",
|
||||||
|
"HeaderNewApiKey": "مفتاح API جديد",
|
||||||
"HeaderNewLibrary": "مكتبة جديدة",
|
"HeaderNewLibrary": "مكتبة جديدة",
|
||||||
"HeaderNotificationCreate": "إنشاء إشعار",
|
"HeaderNotificationCreate": "إنشاء إشعار",
|
||||||
"HeaderNotificationUpdate": "تحديث إشعار",
|
"HeaderNotificationUpdate": "تحديث إشعار",
|
||||||
|
|
@ -195,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "ميزات تجريبية",
|
"HeaderSettingsExperimental": "ميزات تجريبية",
|
||||||
"HeaderSettingsGeneral": "عام",
|
"HeaderSettingsGeneral": "عام",
|
||||||
"HeaderSettingsScanner": "إعدادات المسح",
|
"HeaderSettingsScanner": "إعدادات المسح",
|
||||||
|
"HeaderSettingsSecurity": "الأمان",
|
||||||
"HeaderSettingsWebClient": "عميل الويب",
|
"HeaderSettingsWebClient": "عميل الويب",
|
||||||
"HeaderSleepTimer": "مؤقت النوم",
|
"HeaderSleepTimer": "مؤقت النوم",
|
||||||
"HeaderStatsLargestItems": "أكبر العناصر حجماً",
|
"HeaderStatsLargestItems": "أكبر العناصر حجماً",
|
||||||
|
|
@ -206,6 +212,7 @@
|
||||||
"HeaderTableOfContents": "جدول المحتويات",
|
"HeaderTableOfContents": "جدول المحتويات",
|
||||||
"HeaderTools": "أدوات",
|
"HeaderTools": "أدوات",
|
||||||
"HeaderUpdateAccount": "تحديث الحساب",
|
"HeaderUpdateAccount": "تحديث الحساب",
|
||||||
|
"HeaderUpdateApiKey": "تحديث مفتاح API",
|
||||||
"HeaderUpdateAuthor": "تحديث المؤلف",
|
"HeaderUpdateAuthor": "تحديث المؤلف",
|
||||||
"HeaderUpdateDetails": "تحديث التفاصيل",
|
"HeaderUpdateDetails": "تحديث التفاصيل",
|
||||||
"HeaderUpdateLibrary": "تحديث المكتبة",
|
"HeaderUpdateLibrary": "تحديث المكتبة",
|
||||||
|
|
@ -235,6 +242,8 @@
|
||||||
"LabelAllUsersExcludingGuests": "جميع المستخدمين باستثناء الضيوف",
|
"LabelAllUsersExcludingGuests": "جميع المستخدمين باستثناء الضيوف",
|
||||||
"LabelAllUsersIncludingGuests": "جميع المستخدمين بما في ذلك الضيوف",
|
"LabelAllUsersIncludingGuests": "جميع المستخدمين بما في ذلك الضيوف",
|
||||||
"LabelAlreadyInYourLibrary": "موجود بالفعل في مكتبتك",
|
"LabelAlreadyInYourLibrary": "موجود بالفعل في مكتبتك",
|
||||||
|
"LabelApiKeyCreated": "تم إنشاء مفتاح API \"{0}\" بنجاح.",
|
||||||
|
"LabelApiKeyCreatedDescription": "تأكد من نسخ مفتاح API الآن، لن تتمكن من رؤيته مرة أخرى.",
|
||||||
"LabelApiToken": "رمز API",
|
"LabelApiToken": "رمز API",
|
||||||
"LabelAppend": "إلحاق",
|
"LabelAppend": "إلحاق",
|
||||||
"LabelAudioBitrate": "معدل بت الصوت (على سبيل المثال 128 كيلو بايت)",
|
"LabelAudioBitrate": "معدل بت الصوت (على سبيل المثال 128 كيلو بايت)",
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@
|
||||||
"ButtonUpload": "Загрузіць",
|
"ButtonUpload": "Загрузіць",
|
||||||
"ButtonUploadBackup": "Загрузіць рэзервовую копію",
|
"ButtonUploadBackup": "Загрузіць рэзервовую копію",
|
||||||
"ButtonUploadCover": "Загрузіць вокладку",
|
"ButtonUploadCover": "Загрузіць вокладку",
|
||||||
"ButtonUploadOPMLFile": "Загрузіць OPML файл",
|
"ButtonUploadOPMLFile": "Загрузіць файл OPML",
|
||||||
"ButtonUserDelete": "Выдаліць карыстальніка {0}",
|
"ButtonUserDelete": "Выдаліць карыстальніка {0}",
|
||||||
"ButtonUserEdit": "Рэдагаваць карыстальніка {0}",
|
"ButtonUserEdit": "Рэдагаваць карыстальніка {0}",
|
||||||
"ButtonViewAll": "Прагледзець усе",
|
"ButtonViewAll": "Прагледзець усе",
|
||||||
|
|
@ -294,7 +294,7 @@
|
||||||
"LabelContinueReading": "Працягнуць чытанне",
|
"LabelContinueReading": "Працягнуць чытанне",
|
||||||
"LabelContinueSeries": "Працягнуць серыі",
|
"LabelContinueSeries": "Працягнуць серыі",
|
||||||
"LabelCover": "Вокладка",
|
"LabelCover": "Вокладка",
|
||||||
"LabelCoverImageURL": "URL малюнка вокладкі",
|
"LabelCoverImageURL": "URL выявы вокладкі",
|
||||||
"LabelCoverProvider": "Крыніца вокладак",
|
"LabelCoverProvider": "Крыніца вокладак",
|
||||||
"LabelCreatedAt": "Дата стварэння",
|
"LabelCreatedAt": "Дата стварэння",
|
||||||
"LabelCronExpression": "Запіс Cron",
|
"LabelCronExpression": "Запіс Cron",
|
||||||
|
|
@ -354,6 +354,7 @@
|
||||||
"LabelExpiresInSeconds": "Тэрмін дзеяння заканчваецца праз (секунд)",
|
"LabelExpiresInSeconds": "Тэрмін дзеяння заканчваецца праз (секунд)",
|
||||||
"LabelExpiresNever": "Ніколі",
|
"LabelExpiresNever": "Ніколі",
|
||||||
"LabelExplicit": "Відверты",
|
"LabelExplicit": "Відверты",
|
||||||
|
"LabelExportOPML": "Экспарт OPML",
|
||||||
"LabelFeedURL": "URL стужкі",
|
"LabelFeedURL": "URL стужкі",
|
||||||
"LabelFetchingMetadata": "Атрыманне метададзеных",
|
"LabelFetchingMetadata": "Атрыманне метададзеных",
|
||||||
"LabelFile": "Файл",
|
"LabelFile": "Файл",
|
||||||
|
|
@ -370,6 +371,7 @@
|
||||||
"LabelHasSupplementaryEbook": "Мае дадатковую электронную кнігу",
|
"LabelHasSupplementaryEbook": "Мае дадатковую электронную кнігу",
|
||||||
"LabelHideSubtitles": "Схаваць падзагалоўкі",
|
"LabelHideSubtitles": "Схаваць падзагалоўкі",
|
||||||
"LabelHost": "Хост",
|
"LabelHost": "Хост",
|
||||||
|
"LabelImageURLFromTheWeb": "URL выявы з інтэрнэту",
|
||||||
"LabelInProgress": "У працэсе",
|
"LabelInProgress": "У працэсе",
|
||||||
"LabelIncomplete": "Незавершана",
|
"LabelIncomplete": "Незавершана",
|
||||||
"LabelIntervalCustomDailyWeekly": "Карыстальніцкі штодзённы/штотыднёвы",
|
"LabelIntervalCustomDailyWeekly": "Карыстальніцкі штодзённы/штотыднёвы",
|
||||||
|
|
@ -400,6 +402,7 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Не {0}",
|
"LabelLibraryFilterSublistEmpty": "Не {0}",
|
||||||
"LabelLibraryItem": "Элемент бібліятэкі",
|
"LabelLibraryItem": "Элемент бібліятэкі",
|
||||||
"LabelLibraryName": "Імя бібліятэкі",
|
"LabelLibraryName": "Імя бібліятэкі",
|
||||||
|
"LabelLibrarySortByProgress": "Прагрэс абноўлены",
|
||||||
"LabelLimit": "Абмежаванне",
|
"LabelLimit": "Абмежаванне",
|
||||||
"LabelLineSpacing": "Міжрадковы інтэрвал",
|
"LabelLineSpacing": "Міжрадковы інтэрвал",
|
||||||
"LabelListenAgain": "Паслухаць зноў",
|
"LabelListenAgain": "Паслухаць зноў",
|
||||||
|
|
@ -548,9 +551,9 @@
|
||||||
"LabelTimeToShift": "Час зрушэння ў секундах",
|
"LabelTimeToShift": "Час зрушэння ў секундах",
|
||||||
"LabelTitle": "Назва",
|
"LabelTitle": "Назва",
|
||||||
"LabelToolsEmbedMetadata": "Убудаваць метададзеныя",
|
"LabelToolsEmbedMetadata": "Убудаваць метададзеныя",
|
||||||
"LabelToolsEmbedMetadataDescription": "Убудаваць метададзеныя ў аўдыёфайлы, уключаючы вокладку і раздзелы.",
|
"LabelToolsEmbedMetadataDescription": "Убудаваць метададзеныя ў аўдыёфайлы, уключаючы выяву вокладкі і раздзелы.",
|
||||||
"LabelToolsMakeM4bDescription": "Стварыць аўдыёкнігу ў фармаце .M4B з убудаванымі метададзенымі, вокладкай і раздзеламі.",
|
"LabelToolsMakeM4bDescription": "Стварыць аўдыёкнігу ў фармаце .M4B з убудаванымі метададзенымі, выявай вокладкі і раздзеламі.",
|
||||||
"LabelToolsSplitM4bDescription": "Стварэнне MP3 з M4B, падзеленага па раздзелах, з убудаванымі метададзенымі, вокладкай і раздзеламі.",
|
"LabelToolsSplitM4bDescription": "Стварэнне MP3 з M4B, падзеленага па раздзелах, з убудаванымі метададзенымі, выявай вокладкі і раздзеламі.",
|
||||||
"LabelTotalDuration": "Агульная працягласць",
|
"LabelTotalDuration": "Агульная працягласць",
|
||||||
"LabelTotalTimeListened": "Агульны час праслухоўвання",
|
"LabelTotalTimeListened": "Агульны час праслухоўвання",
|
||||||
"LabelTrackFromFilename": "Дарожка з імя файла",
|
"LabelTrackFromFilename": "Дарожка з імя файла",
|
||||||
|
|
@ -612,6 +615,7 @@
|
||||||
"MessageConfirmEmbedMetadataInAudioFiles": "Ці ўпэўненыя вы, што жадаеце ўбудаваць метададзеныя ў {0} аўдыёфайлаў?",
|
"MessageConfirmEmbedMetadataInAudioFiles": "Ці ўпэўненыя вы, што жадаеце ўбудаваць метададзеныя ў {0} аўдыёфайлаў?",
|
||||||
"MessageConfirmPurgeCache": "Ачышчэнне кэша выдаліць увесь каталог па адрасе <code>/metadata/cache</code>. <br /><br /> Ці сапраўды вы жадаеце выдаліць каталог кэша?",
|
"MessageConfirmPurgeCache": "Ачышчэнне кэша выдаліць увесь каталог па адрасе <code>/metadata/cache</code>. <br /><br /> Ці сапраўды вы жадаеце выдаліць каталог кэша?",
|
||||||
"MessageConfirmPurgeItemsCache": "Ачышчэнне кэша элементаў выдаліць увесь каталог па адрасе <code>/metadata/cache/items</code>. <br /> Вы ўпэўнены?",
|
"MessageConfirmPurgeItemsCache": "Ачышчэнне кэша элементаў выдаліць увесь каталог па адрасе <code>/metadata/cache/items</code>. <br /> Вы ўпэўнены?",
|
||||||
|
"MessageConfirmQuickMatchEpisodes": "Хуткае супадзенне эпізодаў перазапіша дэталі, калі супадзенне будзе знойдзена. Будуць абноўлены толькі эпізоды, якія не супадаюць. Вы ўпэўнены?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Вы ўпэўнены, што жадаеце выдаліць {0} сеансаў праслухоўвання?",
|
"MessageConfirmRemoveListeningSessions": "Вы ўпэўнены, што жадаеце выдаліць {0} сеансаў праслухоўвання?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Ці ўпэўненыя вы, што жадаеце выдаліць усе файлы метададзеных{0} у тэчках элементаў вашай бібліятэкі?",
|
"MessageConfirmRemoveMetadataFiles": "Ці ўпэўненыя вы, што жадаеце выдаліць усе файлы метададзеных{0} у тэчках элементаў вашай бібліятэкі?",
|
||||||
"MessageConfirmRemovePlaylist": "Вы ўпэўненыя, што жадаеце выдаліць свой спіс прайгравання \"{0}\"?",
|
"MessageConfirmRemovePlaylist": "Вы ўпэўненыя, што жадаеце выдаліць свой спіс прайгравання \"{0}\"?",
|
||||||
|
|
@ -622,6 +626,8 @@
|
||||||
"MessageEreaderDevices": "Каб забяспечыць дастаўку электронных кніг, вам можа спатрэбіцца дадаць вышэйзгаданы адрас электроннай пошты як дазволенага адпраўніка для кожнай прылады, пералічанай ніжэй.",
|
"MessageEreaderDevices": "Каб забяспечыць дастаўку электронных кніг, вам можа спатрэбіцца дадаць вышэйзгаданы адрас электроннай пошты як дазволенага адпраўніка для кожнай прылады, пералічанай ніжэй.",
|
||||||
"MessageFeedURLWillBe": "URL стужкі будзе {0}",
|
"MessageFeedURLWillBe": "URL стужкі будзе {0}",
|
||||||
"MessageFetching": "Атрыманне...",
|
"MessageFetching": "Атрыманне...",
|
||||||
|
"MessageInvalidAsin": "Няправільны ASIN",
|
||||||
|
"MessageItemsUpdated": "{0} элементаў абноўлена",
|
||||||
"MessageLoading": "Загрузка...",
|
"MessageLoading": "Загрузка...",
|
||||||
"MessageLogsDescription": "Журналы захоўваюцца ў каталогу <code>/metadata/logs</code> у фармаце JSON. Журналы памылак захоўваюцца ў файле <code>/metadata/logs/crashlogs.txt</code>.",
|
"MessageLogsDescription": "Журналы захоўваюцца ў каталогу <code>/metadata/logs</code> у фармаце JSON. Журналы памылак захоўваюцца ў файле <code>/metadata/logs/crashlogs.txt</code>.",
|
||||||
"MessageMapChapterTitles": "Супаставіць назвы раздзелаў з вашымі існуючымі раздзеламі аўдыякнігі без змянення часовых метак",
|
"MessageMapChapterTitles": "Супаставіць назвы раздзелаў з вашымі існуючымі раздзеламі аўдыякнігі без змянення часовых метак",
|
||||||
|
|
@ -641,13 +647,13 @@
|
||||||
"MessageNoUpdatesWereNecessary": "Абнаўленні не патрабаваліся",
|
"MessageNoUpdatesWereNecessary": "Абнаўленні не патрабаваліся",
|
||||||
"MessageNoUserPlaylists": "У вас няма спісаў прайгравання",
|
"MessageNoUserPlaylists": "У вас няма спісаў прайгравання",
|
||||||
"MessageNoUserPlaylistsHelp": "Спісы прайгравання прыватныя. Толькі карыстальнік, які іх стварыў, можа іх бачыць.",
|
"MessageNoUserPlaylistsHelp": "Спісы прайгравання прыватныя. Толькі карыстальнік, які іх стварыў, можа іх бачыць.",
|
||||||
"MessageOpmlPreviewNote": "Заўвага: гэта папярэдні прагляд разабранага OPML-файла. Фактычная назва падкаста будзе ўзятая з RSS-стужкі.",
|
"MessageOpmlPreviewNote": "Заўвага: гэта папярэдні прагляд разабранага файла OPML. Фактычная назва падкаста будзе ўзятая з RSS-стужкі.",
|
||||||
"MessagePlaylistCreateFromCollection": "Стварыць спіс прайгравання з калекцыі",
|
"MessagePlaylistCreateFromCollection": "Стварыць спіс прайгравання з калекцыі",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "У падкаста няма URL RSS-стужкі для супадзення",
|
"MessagePodcastHasNoRSSFeedForMatching": "У падкаста няма URL RSS-стужкі для супадзення",
|
||||||
"MessagePodcastSearchField": "Увядзіце пошукавы запыт або URL RSS-стужкі",
|
"MessagePodcastSearchField": "Увядзіце пошукавы запыт або URL RSS-стужкі",
|
||||||
"MessageQuickMatchDescription": "Запоўніць пустыя дэталі элемента і вокладку першым вынікам супадзення з '{0}'. Не замяняе дэталі, калі опцыя «Аддаваць перавагу супадаючым метададзеным» на серверы не ўключана.",
|
"MessageQuickMatchDescription": "Запоўніць пустыя дэталі элемента і вокладку першым вынікам супадзення з '{0}'. Не замяняе дэталі, калі опцыя «Аддаваць перавагу супадаючым метададзеным» на серверы не ўключана.",
|
||||||
"MessageReportBugsAndContribute": "Паведамляйце пра памылкі, прапануйце новыя функцыі і ўдзельнічайце на",
|
"MessageReportBugsAndContribute": "Паведамляйце пра памылкі, прапануйце новыя функцыі і ўдзельнічайце на",
|
||||||
"MessageRestoreBackupWarning": "Аднаўленне рэзервовай копіі перазапіша ўсю базу даных, размешчаную ў /config, а таксама вокладкі ў /metadata/items і /metadata/authors. <br /><br /> Рэзервовыя копіі не змяняюць файлы ў вашых тэчках бібліятэкі. Калі вы ўключылі наладкі сервера для захоўвання воклак і метададзеных у тэчках бібліятэкі, гэтыя файлы не будуць захаваныя ў рэзервовых копіях і не зменяцца. <br /><br /> Усе кліенты, якія карыстаюцца вашым серверам, будуць аўтаматычна абноўлены.",
|
"MessageRestoreBackupWarning": "Аднаўленне рэзервовай копіі перазапіша ўсю базу даных, размешчаную ў /config, а таксама выявы вокладкі ў /metadata/items і /metadata/authors. <br /><br /> Рэзервовыя копіі не змяняюць файлы ў вашых тэчках бібліятэкі. Калі вы ўключылі наладкі сервера для захоўвання воклак і метададзеных у тэчках бібліятэкі, гэтыя файлы не будуць захаваныя ў рэзервовых копіях і не зменяцца. <br /><br /> Усе кліенты, якія карыстаюцца вашым серверам, будуць аўтаматычна абноўлены.",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Выконваць кожныя {0} у {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Выконваць кожныя {0} у {1}",
|
||||||
"MessageStartPlaybackAtTime": "Пачаць прайграванне для \"{0}\" з {1}?",
|
"MessageStartPlaybackAtTime": "Пачаць прайграванне для \"{0}\" з {1}?",
|
||||||
"MessageTaskAudioFileNotWritable": "Аўдыёфайл \"{0}\" недаступны для запісу",
|
"MessageTaskAudioFileNotWritable": "Аўдыёфайл \"{0}\" недаступны для запісу",
|
||||||
|
|
@ -668,13 +674,22 @@
|
||||||
"MessageTaskNoFilesToScan": "Няма файлаў для сканавання",
|
"MessageTaskNoFilesToScan": "Няма файлаў для сканавання",
|
||||||
"MessageTaskOpmlImport": "Імпарт OPML",
|
"MessageTaskOpmlImport": "Імпарт OPML",
|
||||||
"MessageTaskOpmlImportDescription": "Стварэнне падкастаў з {0} RSS-стужак",
|
"MessageTaskOpmlImportDescription": "Стварэнне падкастаў з {0} RSS-стужак",
|
||||||
"MessageTaskOpmlImportFeed": "Імпарт стужкі з OPML",
|
"MessageTaskOpmlImportFeed": "Імпарт стужкі OPML",
|
||||||
"MessageTaskOpmlImportFeedDescription": "Імпартаванне RSS-стужкі \"{0}\"",
|
"MessageTaskOpmlImportFeedDescription": "Імпартаванне RSS-стужкі \"{0}\"",
|
||||||
"MessageTaskOpmlImportFeedFailed": "Не ўдалося атрымаць стужку падкаста",
|
"MessageTaskOpmlImportFeedFailed": "Не ўдалося атрымаць стужку падкаста",
|
||||||
"MessageTaskOpmlImportFeedPodcastDescription": "Стварэнне падкаста \"{0}\"",
|
"MessageTaskOpmlImportFeedPodcastDescription": "Стварэнне падкаста \"{0}\"",
|
||||||
"MessageTaskOpmlImportFeedPodcastExists": "Падкаст ужо існуе па гэтым шляху",
|
"MessageTaskOpmlImportFeedPodcastExists": "Падкаст ужо існуе па гэтым шляху",
|
||||||
"MessageTaskOpmlImportFeedPodcastFailed": "Не ўдалося стварыць падкаст",
|
"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": "Мэтавы каталог недаступны для запісу",
|
"MessageTaskTargetDirectoryNotWritable": "Мэтавы каталог недаступны для запісу",
|
||||||
"NoteChapterEditorTimes": "Заўвага: Час пачатку першага раздзела павінен заставацца 0:00, а час пачатку апошняга раздзела не можа перавышаць працягласць гэтай аўдыякнігі.",
|
"NoteChapterEditorTimes": "Заўвага: Час пачатку першага раздзела павінен заставацца 0:00, а час пачатку апошняга раздзела не можа перавышаць працягласць гэтай аўдыякнігі.",
|
||||||
"NoteRSSFeedPodcastAppsHttps": "Папярэджанне: большасць праграм для падкастаў патрабуюць, каб URL RSS-стужкі выкарыстоўваў HTTPS",
|
"NoteRSSFeedPodcastAppsHttps": "Папярэджанне: большасць праграм для падкастаў патрабуюць, каб URL RSS-стужкі выкарыстоўваў HTTPS",
|
||||||
|
|
@ -687,6 +702,11 @@
|
||||||
"StatsBooksListenedTo": "кнігі, якія былі праслуханы",
|
"StatsBooksListenedTo": "кнігі, якія былі праслуханы",
|
||||||
"StatsCollectionGrewTo": "Ваша калекцыя кніг павялічылася да…",
|
"StatsCollectionGrewTo": "Ваша калекцыя кніг павялічылася да…",
|
||||||
"ToastAccountUpdateSuccess": "Уліковы запіс абноўлены",
|
"ToastAccountUpdateSuccess": "Уліковы запіс абноўлены",
|
||||||
|
"ToastAuthorImageRemoveSuccess": "Выява аўтара выдалена",
|
||||||
|
"ToastAuthorUpdateSuccess": "Аўтар абноўлены",
|
||||||
|
"ToastAuthorUpdateSuccessNoImageFound": "Аўтар абноўлены (малюнак не знойдзены)",
|
||||||
|
"ToastBackupInvalidMaxKeep": "Няправільная колькасць рэзервовых копій для захоўвання",
|
||||||
|
"ToastBackupInvalidMaxSize": "Няправільны максімальны памер рэзервовай копіі",
|
||||||
"ToastBookmarkCreateFailed": "Не ўдалося стварыць закладку",
|
"ToastBookmarkCreateFailed": "Не ўдалося стварыць закладку",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Дата і час указаны некарэктна або не цалкам",
|
"ToastDateTimeInvalidOrIncomplete": "Дата і час указаны некарэктна або не цалкам",
|
||||||
"ToastDeviceTestEmailFailed": "Не ўдалося адправіць тэставае электроннае пісьмо",
|
"ToastDeviceTestEmailFailed": "Не ўдалося адправіць тэставае электроннае пісьмо",
|
||||||
|
|
@ -694,6 +714,7 @@
|
||||||
"ToastEncodeCancelSucces": "Кадаванне скасавана",
|
"ToastEncodeCancelSucces": "Кадаванне скасавана",
|
||||||
"ToastEpisodeDownloadQueueClearFailed": "Не ўдалося ачысціць чаргу",
|
"ToastEpisodeDownloadQueueClearFailed": "Не ўдалося ачысціць чаргу",
|
||||||
"ToastEpisodeDownloadQueueClearSuccess": "Чарга спампоўкі эпізодаў ачышчана",
|
"ToastEpisodeDownloadQueueClearSuccess": "Чарга спампоўкі эпізодаў ачышчана",
|
||||||
|
"ToastInvalidImageUrl": "Няправільны URL выявы",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "Няправільная максімальная колькасць эпізодаў для спампоўкі",
|
"ToastInvalidMaxEpisodesToDownload": "Няправільная максімальная колькасць эпізодаў для спампоўкі",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Не ўдалося пазначыць як Скончана",
|
"ToastItemMarkedAsFinishedFailed": "Не ўдалося пазначыць як Скончана",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Элемент пазначаны як Завершаны",
|
"ToastItemMarkedAsFinishedSuccess": "Элемент пазначаны як Завершаны",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"ButtonAdd": "Създай",
|
"ButtonAdd": "Създай",
|
||||||
|
"ButtonAddApiKey": "Добави API ключ",
|
||||||
"ButtonAddChapters": "Добави Глави",
|
"ButtonAddChapters": "Добави Глави",
|
||||||
"ButtonAddDevice": "Добави Устройство",
|
"ButtonAddDevice": "Добави Устройство",
|
||||||
"ButtonAddLibrary": "Добави Библиотека",
|
"ButtonAddLibrary": "Добави Библиотека",
|
||||||
|
|
@ -20,6 +21,7 @@
|
||||||
"ButtonChooseAFolder": "Избери Папка",
|
"ButtonChooseAFolder": "Избери Папка",
|
||||||
"ButtonChooseFiles": "Избери Файлове",
|
"ButtonChooseFiles": "Избери Файлове",
|
||||||
"ButtonClearFilter": "Изчисти филтър",
|
"ButtonClearFilter": "Изчисти филтър",
|
||||||
|
"ButtonClose": "Затвори",
|
||||||
"ButtonCloseFeed": "Затвори стената",
|
"ButtonCloseFeed": "Затвори стената",
|
||||||
"ButtonCloseSession": "Затвори отворената сесия",
|
"ButtonCloseSession": "Затвори отворената сесия",
|
||||||
"ButtonCollections": "Колекции",
|
"ButtonCollections": "Колекции",
|
||||||
|
|
@ -119,11 +121,13 @@
|
||||||
"HeaderAccount": "Профил",
|
"HeaderAccount": "Профил",
|
||||||
"HeaderAddCustomMetadataProvider": "Добави персонализиран доставчик на метаданни",
|
"HeaderAddCustomMetadataProvider": "Добави персонализиран доставчик на метаданни",
|
||||||
"HeaderAdvanced": "Разширени настройки",
|
"HeaderAdvanced": "Разширени настройки",
|
||||||
|
"HeaderApiKeys": "API ключове",
|
||||||
"HeaderAppriseNotificationSettings": "Apprise Notification Опции",
|
"HeaderAppriseNotificationSettings": "Apprise Notification Опции",
|
||||||
"HeaderAudioTracks": "Песни",
|
"HeaderAudioTracks": "Песни",
|
||||||
"HeaderAudiobookTools": "Инструмент за Менижиране на Аудиокниги",
|
"HeaderAudiobookTools": "Инструмент за Менижиране на Аудиокниги",
|
||||||
"HeaderAuthentication": "Аутентикация",
|
"HeaderAuthentication": "Аутентикация",
|
||||||
"HeaderBackups": "Архив",
|
"HeaderBackups": "Архив",
|
||||||
|
"HeaderBulkChapterModal": "Добави няколко глави",
|
||||||
"HeaderChangePassword": "Промяна на Парола",
|
"HeaderChangePassword": "Промяна на Парола",
|
||||||
"HeaderChapters": "Глави",
|
"HeaderChapters": "Глави",
|
||||||
"HeaderChooseAFolder": "Избети Папка",
|
"HeaderChooseAFolder": "Избети Папка",
|
||||||
|
|
@ -162,6 +166,7 @@
|
||||||
"HeaderMetadataOrderOfPrecedence": "Предимство на Метаданни",
|
"HeaderMetadataOrderOfPrecedence": "Предимство на Метаданни",
|
||||||
"HeaderMetadataToEmbed": "Метаданни за Вграждане",
|
"HeaderMetadataToEmbed": "Метаданни за Вграждане",
|
||||||
"HeaderNewAccount": "Нов Профил",
|
"HeaderNewAccount": "Нов Профил",
|
||||||
|
"HeaderNewApiKey": "Нов API ключ",
|
||||||
"HeaderNewLibrary": "Нова Библиотека",
|
"HeaderNewLibrary": "Нова Библиотека",
|
||||||
"HeaderNotificationCreate": "Създай нотификация",
|
"HeaderNotificationCreate": "Създай нотификация",
|
||||||
"HeaderNotificationUpdate": "Обнови нотификация",
|
"HeaderNotificationUpdate": "Обнови нотификация",
|
||||||
|
|
@ -195,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Експериментални Функции",
|
"HeaderSettingsExperimental": "Експериментални Функции",
|
||||||
"HeaderSettingsGeneral": "Общи",
|
"HeaderSettingsGeneral": "Общи",
|
||||||
"HeaderSettingsScanner": "Скенер",
|
"HeaderSettingsScanner": "Скенер",
|
||||||
|
"HeaderSettingsSecurity": "Сигурност",
|
||||||
"HeaderSettingsWebClient": "Уеб клиент",
|
"HeaderSettingsWebClient": "Уеб клиент",
|
||||||
"HeaderSleepTimer": "Таймер за заспиване",
|
"HeaderSleepTimer": "Таймер за заспиване",
|
||||||
"HeaderStatsLargestItems": "Най-Големите Елементи",
|
"HeaderStatsLargestItems": "Най-Големите Елементи",
|
||||||
|
|
@ -206,6 +212,7 @@
|
||||||
"HeaderTableOfContents": "Съдържание",
|
"HeaderTableOfContents": "Съдържание",
|
||||||
"HeaderTools": "Инструменти",
|
"HeaderTools": "Инструменти",
|
||||||
"HeaderUpdateAccount": "Обнови Профил",
|
"HeaderUpdateAccount": "Обнови Профил",
|
||||||
|
"HeaderUpdateApiKey": "Обнови API ключ",
|
||||||
"HeaderUpdateAuthor": "Обнови Автор",
|
"HeaderUpdateAuthor": "Обнови Автор",
|
||||||
"HeaderUpdateDetails": "Обнови Детайли",
|
"HeaderUpdateDetails": "Обнови Детайли",
|
||||||
"HeaderUpdateLibrary": "Обнови Библиотека",
|
"HeaderUpdateLibrary": "Обнови Библиотека",
|
||||||
|
|
@ -230,10 +237,15 @@
|
||||||
"LabelAddedDate": "Добавено",
|
"LabelAddedDate": "Добавено",
|
||||||
"LabelAdminUsersOnly": "Само за Администратори",
|
"LabelAdminUsersOnly": "Само за Администратори",
|
||||||
"LabelAll": "Всичко",
|
"LabelAll": "Всичко",
|
||||||
|
"LabelAllEpisodesDownloaded": "Всички епизоди са изтеглени",
|
||||||
"LabelAllUsers": "Всички Потребители",
|
"LabelAllUsers": "Всички Потребители",
|
||||||
"LabelAllUsersExcludingGuests": "Всички потребители без гости",
|
"LabelAllUsersExcludingGuests": "Всички потребители без гости",
|
||||||
"LabelAllUsersIncludingGuests": "Всички потребители включително гости",
|
"LabelAllUsersIncludingGuests": "Всички потребители включително гости",
|
||||||
"LabelAlreadyInYourLibrary": "Вече е в твоята библиотека",
|
"LabelAlreadyInYourLibrary": "Вече е в твоята библиотека",
|
||||||
|
"LabelApiKeyCreated": "API ключ \"{0}\" успешно създатен.",
|
||||||
|
"LabelApiKeyCreatedDescription": "Погрижете се да копирате API ключът сега, защото повече няма да можете да го виждате онново.",
|
||||||
|
"LabelApiKeyUser": "Действай от името на потребителя",
|
||||||
|
"LabelApiKeyUserDescription": "Този API ключ ще има същите права като на потребителя за чието име действа. В логовете ще изглежда все едно потребителя прави заявката.",
|
||||||
"LabelApiToken": "АПИ Токен",
|
"LabelApiToken": "АПИ Токен",
|
||||||
"LabelAppend": "Добави",
|
"LabelAppend": "Добави",
|
||||||
"LabelAudioBitrate": "Аудио битрейт (напр. 128k)",
|
"LabelAudioBitrate": "Аудио битрейт (напр. 128k)",
|
||||||
|
|
@ -253,7 +265,7 @@
|
||||||
"LabelBackToUser": "Обратно към Потребител",
|
"LabelBackToUser": "Обратно към Потребител",
|
||||||
"LabelBackupAudioFiles": "Създай резервно копие на аудио файлове",
|
"LabelBackupAudioFiles": "Създай резервно копие на аудио файлове",
|
||||||
"LabelBackupLocation": "Местоположение на Архив",
|
"LabelBackupLocation": "Местоположение на Архив",
|
||||||
"LabelBackupsEnableAutomaticBackups": "Включи автоматично архивиране",
|
"LabelBackupsEnableAutomaticBackups": "Автоматично архивиране",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "Архиви запазени в /metadata/backups",
|
"LabelBackupsEnableAutomaticBackupsHelp": "Архиви запазени в /metadata/backups",
|
||||||
"LabelBackupsMaxBackupSize": "Максимален размер на архива (в GB) (0 за неограничен)",
|
"LabelBackupsMaxBackupSize": "Максимален размер на архива (в GB) (0 за неограничен)",
|
||||||
"LabelBackupsMaxBackupSizeHelp": "За защита срещу грешки в конфигурацията, архивите ще се провалят ако надхвърлят конфигурирания размер.",
|
"LabelBackupsMaxBackupSizeHelp": "За защита срещу грешки в конфигурацията, архивите ще се провалят ако надхвърлят конфигурирания размер.",
|
||||||
|
|
@ -272,7 +284,7 @@
|
||||||
"LabelChaptersFound": "намерени глави",
|
"LabelChaptersFound": "намерени глави",
|
||||||
"LabelClickForMoreInfo": "Кликни за повече информация",
|
"LabelClickForMoreInfo": "Кликни за повече информация",
|
||||||
"LabelClickToUseCurrentValue": "Натисни да ползваш сегашната стойност",
|
"LabelClickToUseCurrentValue": "Натисни да ползваш сегашната стойност",
|
||||||
"LabelClosePlayer": "Затвори",
|
"LabelClosePlayer": "Затвори плейъра",
|
||||||
"LabelCodec": "Кодек",
|
"LabelCodec": "Кодек",
|
||||||
"LabelCollapseSeries": "Скрий сериите",
|
"LabelCollapseSeries": "Скрий сериите",
|
||||||
"LabelCollapseSubSeries": "Свий подсерии",
|
"LabelCollapseSubSeries": "Свий подсерии",
|
||||||
|
|
@ -283,6 +295,7 @@
|
||||||
"LabelContinueListening": "Продължи слушане",
|
"LabelContinueListening": "Продължи слушане",
|
||||||
"LabelContinueReading": "Продължи четене",
|
"LabelContinueReading": "Продължи четене",
|
||||||
"LabelContinueSeries": "Продължи серии",
|
"LabelContinueSeries": "Продължи серии",
|
||||||
|
"LabelCorsAllowed": "Разрешени CORS Origins",
|
||||||
"LabelCover": "Корица",
|
"LabelCover": "Корица",
|
||||||
"LabelCoverImageURL": "URL на Корица",
|
"LabelCoverImageURL": "URL на Корица",
|
||||||
"LabelCoverProvider": "Източник за обложки",
|
"LabelCoverProvider": "Източник за обложки",
|
||||||
|
|
@ -296,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Изтрий от файловата система (отмени за да бъдат премахни само от базата данни)",
|
"LabelDeleteFromFileSystemCheckbox": "Изтрий от файловата система (отмени за да бъдат премахни само от базата данни)",
|
||||||
"LabelDescription": "Описание",
|
"LabelDescription": "Описание",
|
||||||
"LabelDeselectAll": "Премахни всички",
|
"LabelDeselectAll": "Премахни всички",
|
||||||
|
"LabelDetectedPattern": "Намерен образец:",
|
||||||
"LabelDevice": "Устройство",
|
"LabelDevice": "Устройство",
|
||||||
"LabelDeviceInfo": "Информация за Устройство",
|
"LabelDeviceInfo": "Информация за Устройство",
|
||||||
"LabelDeviceIsAvailableTo": "Устройството е достъпно за ...",
|
"LabelDeviceIsAvailableTo": "Устройството е достъпно за ...",
|
||||||
|
|
@ -345,7 +359,11 @@
|
||||||
"LabelExample": "Пример",
|
"LabelExample": "Пример",
|
||||||
"LabelExpandSeries": "Покажи сериите",
|
"LabelExpandSeries": "Покажи сериите",
|
||||||
"LabelExpandSubSeries": "Покажи съб сериите",
|
"LabelExpandSubSeries": "Покажи съб сериите",
|
||||||
"LabelExplicit": "С нецензурно съдържание",
|
"LabelExpired": "Изтекъл",
|
||||||
|
"LabelExpiresAt": "Изтича на",
|
||||||
|
"LabelExpiresInSeconds": "Изтича след (секунди)",
|
||||||
|
"LabelExpiresNever": "Никога",
|
||||||
|
"LabelExplicit": "Експлицитно",
|
||||||
"LabelExplicitChecked": "С нецензурно съдържание (проверено)",
|
"LabelExplicitChecked": "С нецензурно съдържание (проверено)",
|
||||||
"LabelExplicitUnchecked": "Без нецензурно съдържание (непроверено)",
|
"LabelExplicitUnchecked": "Без нецензурно съдържание (непроверено)",
|
||||||
"LabelExportOPML": "Експортирай OPML",
|
"LabelExportOPML": "Експортирай OPML",
|
||||||
|
|
@ -404,6 +422,7 @@
|
||||||
"LabelLanguages": "Езици",
|
"LabelLanguages": "Езици",
|
||||||
"LabelLastBookAdded": "Последно Добавена Книга",
|
"LabelLastBookAdded": "Последно Добавена Книга",
|
||||||
"LabelLastBookUpdated": "Последно Обновена Книга",
|
"LabelLastBookUpdated": "Последно Обновена Книга",
|
||||||
|
"LabelLastProgressDate": "Последен прогрес: {0}",
|
||||||
"LabelLastSeen": "Последно Видян",
|
"LabelLastSeen": "Последно Видян",
|
||||||
"LabelLastTime": "Последно Време",
|
"LabelLastTime": "Последно Време",
|
||||||
"LabelLastUpdate": "Последно Обновяване",
|
"LabelLastUpdate": "Последно Обновяване",
|
||||||
|
|
@ -416,6 +435,7 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Не {0}",
|
"LabelLibraryFilterSublistEmpty": "Не {0}",
|
||||||
"LabelLibraryItem": "Елемент на Библиотека",
|
"LabelLibraryItem": "Елемент на Библиотека",
|
||||||
"LabelLibraryName": "Име на Библиотека",
|
"LabelLibraryName": "Име на Библиотека",
|
||||||
|
"LabelLibrarySortByProgress": "Прогресът е обновен",
|
||||||
"LabelLimit": "Лимит",
|
"LabelLimit": "Лимит",
|
||||||
"LabelLineSpacing": "Междуредие",
|
"LabelLineSpacing": "Междуредие",
|
||||||
"LabelListenAgain": "Слушай отново",
|
"LabelListenAgain": "Слушай отново",
|
||||||
|
|
@ -424,6 +444,7 @@
|
||||||
"LabelLogLevelWarn": "Предупреждение",
|
"LabelLogLevelWarn": "Предупреждение",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Търси нови епизоди след дата",
|
"LabelLookForNewEpisodesAfterDate": "Търси нови епизоди след дата",
|
||||||
"LabelLowestPriority": "Най-нисък Приоритет",
|
"LabelLowestPriority": "Най-нисък Приоритет",
|
||||||
|
"LabelMatchConfidence": "Увереност",
|
||||||
"LabelMatchExistingUsersBy": "Съпостави съществуващи потребители по",
|
"LabelMatchExistingUsersBy": "Съпостави съществуващи потребители по",
|
||||||
"LabelMatchExistingUsersByDescription": "Използва се за свързване на съществуващи потребители. След свързване потребителите ще бъдат съпоставени по уникален идентификатор от вашия доставчик на SSO",
|
"LabelMatchExistingUsersByDescription": "Използва се за свързване на съществуващи потребители. След свързване потребителите ще бъдат съпоставени по уникален идентификатор от вашия доставчик на SSO",
|
||||||
"LabelMaxEpisodesToDownload": "Максимален брой епизоди за сваляне. Използвай 0 за неограничен.",
|
"LabelMaxEpisodesToDownload": "Максимален брой епизоди за сваляне. Използвай 0 за неограничен.",
|
||||||
|
|
@ -453,7 +474,9 @@
|
||||||
"LabelNewestAuthors": "Най-новите автори",
|
"LabelNewestAuthors": "Най-новите автори",
|
||||||
"LabelNewestEpisodes": "Най-новите епизоди",
|
"LabelNewestEpisodes": "Най-новите епизоди",
|
||||||
"LabelNextBackupDate": "Следваща Дата на Архивиране",
|
"LabelNextBackupDate": "Следваща Дата на Архивиране",
|
||||||
|
"LabelNextChapters": "Следващите глави ще бъдат:",
|
||||||
"LabelNextScheduledRun": "Следващо Планирано Изпълнение",
|
"LabelNextScheduledRun": "Следващо Планирано Изпълнение",
|
||||||
|
"LabelNoApiKeys": "Няма API ключове",
|
||||||
"LabelNoCustomMetadataProviders": "Няма потребителски доставчици на метаданни",
|
"LabelNoCustomMetadataProviders": "Няма потребителски доставчици на метаданни",
|
||||||
"LabelNoEpisodesSelected": "Няма избрани епизоди",
|
"LabelNoEpisodesSelected": "Няма избрани епизоди",
|
||||||
"LabelNotFinished": "Не е приключено",
|
"LabelNotFinished": "Не е приключено",
|
||||||
|
|
@ -469,6 +492,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Максимален размер на опашката за известия",
|
"LabelNotificationsMaxQueueSize": "Максимален размер на опашката за известия",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Събитията са ограничени до изстрелване на 1 на секунда. Събитията ще бъдат игнорирани ако опашката е на максимален размер. Това предотвратява спамирането на известия.",
|
"LabelNotificationsMaxQueueSizeHelp": "Събитията са ограничени до изстрелване на 1 на секунда. Събитията ще бъдат игнорирани ако опашката е на максимален размер. Това предотвратява спамирането на известия.",
|
||||||
"LabelNumberOfBooks": "Брой на Книги",
|
"LabelNumberOfBooks": "Брой на Книги",
|
||||||
|
"LabelNumberOfChapters": "Брой глави:",
|
||||||
"LabelNumberOfEpisodes": "Брой епизоди",
|
"LabelNumberOfEpisodes": "Брой епизоди",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Име на OpenID твърдението, което съдържа разширени права за достъп до потребителски действия в приложението, които ще се прилагат за роли, различни от администраторските (<b>ако е конфигурирано</b>). Ако твърдението липсва в отговора, достъпът до ABS ще бъде отказан. Ако липсва една опция, тя ще се третира като <code>false</code>. Уверете се, че твърдението на доставчика на идентичност съответства на очакваната структура:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Име на OpenID твърдението, което съдържа разширени права за достъп до потребителски действия в приложението, които ще се прилагат за роли, различни от администраторските (<b>ако е конфигурирано</b>). Ако твърдението липсва в отговора, достъпът до ABS ще бъде отказан. Ако липсва една опция, тя ще се третира като <code>false</code>. Уверете се, че твърдението на доставчика на идентичност съответства на очакваната структура:",
|
||||||
"LabelOpenIDClaims": "Оставете следните опции празни, за да деактивирате разширеното присвояване на групи, като автоматично ще бъде присвоена групата 'Потребител'.",
|
"LabelOpenIDClaims": "Оставете следните опции празни, за да деактивирате разширеното присвояване на групи, като автоматично ще бъде присвоена групата 'Потребител'.",
|
||||||
|
|
@ -513,7 +537,7 @@
|
||||||
"LabelPublishers": "Издателство",
|
"LabelPublishers": "Издателство",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Персонализиран имейл на собственика",
|
"LabelRSSFeedCustomOwnerEmail": "Персонализиран имейл на собственика",
|
||||||
"LabelRSSFeedCustomOwnerName": "Персонализирано име на собственика",
|
"LabelRSSFeedCustomOwnerName": "Персонализирано име на собственика",
|
||||||
"LabelRSSFeedOpen": "RSS Feed Оптворен",
|
"LabelRSSFeedOpen": "RSS Feed е отворен",
|
||||||
"LabelRSSFeedPreventIndexing": "Предотвратете индексиране",
|
"LabelRSSFeedPreventIndexing": "Предотвратете индексиране",
|
||||||
"LabelRSSFeedSlug": "идентификатор на RSS емисия",
|
"LabelRSSFeedSlug": "идентификатор на RSS емисия",
|
||||||
"LabelRSSFeedURL": "URL на RSS емисия",
|
"LabelRSSFeedURL": "URL на RSS емисия",
|
||||||
|
|
@ -543,6 +567,7 @@
|
||||||
"LabelSelectAll": "Избери всичко",
|
"LabelSelectAll": "Избери всичко",
|
||||||
"LabelSelectAllEpisodes": "Избери всички епизоди",
|
"LabelSelectAllEpisodes": "Избери всички епизоди",
|
||||||
"LabelSelectEpisodesShowing": "Избери {0} епизоди показани",
|
"LabelSelectEpisodesShowing": "Избери {0} епизоди показани",
|
||||||
|
"LabelSelectUser": "Избери потребител",
|
||||||
"LabelSelectUsers": "Избери Потребители",
|
"LabelSelectUsers": "Избери Потребители",
|
||||||
"LabelSendEbookToDevice": "Изпрати електронна книга до ...",
|
"LabelSendEbookToDevice": "Изпрати електронна книга до ...",
|
||||||
"LabelSequence": "Последователност",
|
"LabelSequence": "Последователност",
|
||||||
|
|
@ -639,6 +664,7 @@
|
||||||
"LabelTheme": "Тема",
|
"LabelTheme": "Тема",
|
||||||
"LabelThemeDark": "Тъмна",
|
"LabelThemeDark": "Тъмна",
|
||||||
"LabelThemeLight": "Светла",
|
"LabelThemeLight": "Светла",
|
||||||
|
"LabelThemeSepia": "Сепия",
|
||||||
"LabelTimeBase": "Времева Основа",
|
"LabelTimeBase": "Времева Основа",
|
||||||
"LabelTimeDurationXHours": "{0} часа",
|
"LabelTimeDurationXHours": "{0} часа",
|
||||||
"LabelTimeDurationXMinutes": "{0} минути",
|
"LabelTimeDurationXMinutes": "{0} минути",
|
||||||
|
|
@ -693,7 +719,11 @@
|
||||||
"LabelViewPlayerSettings": "Виж настройки на плеъра",
|
"LabelViewPlayerSettings": "Виж настройки на плеъра",
|
||||||
"LabelViewQueue": "Виж Опашка",
|
"LabelViewQueue": "Виж Опашка",
|
||||||
"LabelVolume": "Сила на Звука",
|
"LabelVolume": "Сила на Звука",
|
||||||
|
"LabelWebRedirectURLsDescription": "Разрешете тези URL-и във вашият OAuth доставчик, за да позволите пренасочването обратно към уеб приложението след вход:",
|
||||||
|
"LabelWebRedirectURLsSubfolder": "Подпапка за URL адреси за пренасочване",
|
||||||
"LabelWeekdaysToRun": "Делници за изпълнение",
|
"LabelWeekdaysToRun": "Делници за изпълнение",
|
||||||
|
"LabelXBooks": "{0} книги",
|
||||||
|
"LabelXItems": "{0} елемента",
|
||||||
"LabelYearReviewHide": "Скрий ревю на годината ти",
|
"LabelYearReviewHide": "Скрий ревю на годината ти",
|
||||||
"LabelYearReviewShow": "Виж ревю на годината ти",
|
"LabelYearReviewShow": "Виж ревю на годината ти",
|
||||||
"LabelYourAudiobookDuration": "Продължителност на вашата аудиокнига",
|
"LabelYourAudiobookDuration": "Продължителност на вашата аудиокнига",
|
||||||
|
|
@ -702,31 +732,51 @@
|
||||||
"LabelYourProgress": "Твоят прогрес",
|
"LabelYourProgress": "Твоят прогрес",
|
||||||
"MessageAddToPlayerQueue": "Добави към опашката на плейъра",
|
"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>.",
|
"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> включват никакви файлове, съхранени в папките на вашата библиотека.",
|
"MessageBackupsDescription": "Резервните копия включват потребители, напредък на потребителите, подробности за елементите в библиотеката, настройки на сървъра и изображения, съхранени в <code>/metadata/items</code> и <code>/metadata/authors</code>. Резервните копия <strong>не</strong> включват никакви файлове, съхранени в папките на вашата библиотека.",
|
||||||
|
"MessageBackupsLocationEditNote": "Забележка: Актуализирането на местоположението за архивиране няма да премести или промени съществуващите архиви",
|
||||||
|
"MessageBackupsLocationNoEditNote": "Забележка: Местоположението за архивиране се задава с помощта на променлива на средата и не може бъде променена от тук.",
|
||||||
|
"MessageBackupsLocationPathEmpty": "Пътят към местоположението за архивиране не може да бъде празен",
|
||||||
|
"MessageBatchEditPopulateMapDetailsAllHelp": "Популирайте активираните полета с данни от всички елементи. Полетата със няколко стоайности ще бъдат обединени",
|
||||||
|
"MessageBatchEditPopulateMapDetailsItemHelp": "Попълнете активираните полета с информация за картата с данни от този елемент",
|
||||||
"MessageBatchQuickMatchDescription": "Бързото Съпоставяне ще опита да добави липсващи корици и метаданни за избраните елементи. Активирайте опциите по-долу, за да позволите на Бързото съпоставяне да презапише съществуващите корици и/или метаданни.",
|
"MessageBatchQuickMatchDescription": "Бързото Съпоставяне ще опита да добави липсващи корици и метаданни за избраните елементи. Активирайте опциите по-долу, за да позволите на Бързото съпоставяне да презапише съществуващите корици и/или метаданни.",
|
||||||
"MessageBookshelfNoCollections": "Все още нямате създадени колекции",
|
"MessageBookshelfNoCollections": "Все още нямате създадени колекции",
|
||||||
|
"MessageBookshelfNoCollectionsHelp": "Колекциите са публични. Всички потребители с достъп до библиотеката ще могат да ги виждат.",
|
||||||
"MessageBookshelfNoRSSFeeds": "Няма отворени RSS feed-ове",
|
"MessageBookshelfNoRSSFeeds": "Няма отворени RSS feed-ове",
|
||||||
"MessageBookshelfNoResultsForFilter": "Няма резултат за филтер \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Няма резултат за филтер \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Няма резултати от заявката",
|
"MessageBookshelfNoResultsForQuery": "Няма резултати от заявката",
|
||||||
"MessageBookshelfNoSeries": "Нямаш сеЗЙ",
|
"MessageBookshelfNoSeries": "Нямаш сеЗЙ",
|
||||||
|
"MessageBulkChapterPattern": "Колко глави искате да добавите, използвайки тази схема за номериране?",
|
||||||
"MessageChapterEndIsAfter": "Краят на главата е след края на вашата аудиокнига",
|
"MessageChapterEndIsAfter": "Краят на главата е след края на вашата аудиокнига",
|
||||||
"MessageChapterErrorFirstNotZero": "Първата глава трябва да започва от 0",
|
"MessageChapterErrorFirstNotZero": "Първата глава трябва да започва от 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Началото на главата трябва да бъде по-малко от продължителността на аудиокнигата",
|
"MessageChapterErrorStartGteDuration": "Началото на главата трябва да бъде по-малко от продължителността на аудиокнигата",
|
||||||
"MessageChapterErrorStartLtPrev": "Началото на главата трябва да бъде по-голямо или равно на края на предишната глава",
|
"MessageChapterErrorStartLtPrev": "Началото на главата трябва да бъде по-голямо или равно на края на предишната глава",
|
||||||
"MessageChapterStartIsAfter": "Началото на главата е след края на вашата аудиокнига",
|
"MessageChapterStartIsAfter": "Началото на главата е след края на вашата аудиокнига",
|
||||||
|
"MessageChaptersNotFound": "Главите не са намерени",
|
||||||
"MessageCheckingCron": "Проверяване на cron...",
|
"MessageCheckingCron": "Проверяване на cron...",
|
||||||
"MessageConfirmCloseFeed": "Сигурни ли сте, че искате да затворите този feed?",
|
"MessageConfirmCloseFeed": "Сигурни ли сте, че искате да затворите този feed?",
|
||||||
|
"MessageConfirmDeleteApiKey": "Сигурни ли сте, че искате да изтриете API ключ \"{0}\"?",
|
||||||
"MessageConfirmDeleteBackup": "Сигурни ли сте, че искате да изтриете този архив {0}?",
|
"MessageConfirmDeleteBackup": "Сигурни ли сте, че искате да изтриете този архив {0}?",
|
||||||
|
"MessageConfirmDeleteDevice": "Сигурни ли сте, че искате да изтриете е-четец \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Това ще изтрие файла от файловата Ви система. Сигурни ли сте?",
|
"MessageConfirmDeleteFile": "Това ще изтрие файла от файловата Ви система. Сигурни ли сте?",
|
||||||
"MessageConfirmDeleteLibrary": "Сигурни ли сте, че искате да изтриете за винаги библиотека \"{0}\"?",
|
"MessageConfirmDeleteLibrary": "Сигурни ли сте, че искате да изтриете за винаги библиотека \"{0}\"?",
|
||||||
"MessageConfirmDeleteLibraryItem": "Това ще изтрие елемента от базата данни и файловата Ви система. Сигурни ли сте?",
|
"MessageConfirmDeleteLibraryItem": "Това ще изтрие елемента от базата данни и файловата Ви система. Сигурни ли сте?",
|
||||||
"MessageConfirmDeleteLibraryItems": "Това ще изтрие {0} елемента от базата данни и файловата Ви система. Сигурни ли сте?",
|
"MessageConfirmDeleteLibraryItems": "Това ще изтрие {0} елемента от базата данни и файловата Ви система. Сигурни ли сте?",
|
||||||
|
"MessageConfirmDeleteMetadataProvider": "Сигурни ли сте, че искате да изтриете доставчика нa метаданни \"{0}\"?",
|
||||||
|
"MessageConfirmDeleteNotification": "Сигурни ли сте, че искате да изтриете това уведомление?",
|
||||||
"MessageConfirmDeleteSession": "Сигурни ли сте, че искате да изтриете тази сесия?",
|
"MessageConfirmDeleteSession": "Сигурни ли сте, че искате да изтриете тази сесия?",
|
||||||
|
"MessageConfirmEmbedMetadataInAudioFiles": "Сигурнли ли сте, че искате да вградите метаданните в {0} аудио файла?",
|
||||||
"MessageConfirmForceReScan": "Сигурни ли сте, че искате да принудите повторно сканиране?",
|
"MessageConfirmForceReScan": "Сигурни ли сте, че искате да принудите повторно сканиране?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Сигурни ли сте, че искате да маркирате всички епизоди като завършени?",
|
"MessageConfirmMarkAllEpisodesFinished": "Сигурни ли сте, че искате да маркирате всички епизоди като завършени?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "Сигурни ли сте, че искате да маркирате всички епизоди като незавършени?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "Сигурни ли сте, че искате да маркирате всички епизоди като незавършени?",
|
||||||
|
"MessageConfirmMarkItemFinished": "Сигурни ли сте, че искате да маркирате \"{0}\" като приключено?",
|
||||||
|
"MessageConfirmMarkItemNotFinished": "Сигурни ли сте, че искате да маркирате \"{0}\" като неприключено?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Сигурни ли сте, че искате да маркирате всички книги в тази серия като завършени?",
|
"MessageConfirmMarkSeriesFinished": "Сигурни ли сте, че искате да маркирате всички книги в тази серия като завършени?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Сигурни ли сте, че искате да маркирате всички книги в тази серия като незавършени?",
|
"MessageConfirmMarkSeriesNotFinished": "Сигурни ли сте, че искате да маркирате всички книги в тази серия като незавършени?",
|
||||||
|
"MessageConfirmNotificationTestTrigger": "Пуснете това уведомление с тестови данни?",
|
||||||
"MessageConfirmPurgeCache": "Изчистването на кеша ще изтрие цялата директория в <code>/metadata/cache</code>. <br /><br />Сигурни ли сте, че искате да премахнете директорията на кеша?",
|
"MessageConfirmPurgeCache": "Изчистването на кеша ще изтрие цялата директория в <code>/metadata/cache</code>. <br /><br />Сигурни ли сте, че искате да премахнете директорията на кеша?",
|
||||||
"MessageConfirmPurgeItemsCache": "Изчистването на кеша на елементите ще изтрие цялата директория в <code>/metadata/cache/items</code>. <br />Сигурни ли сте?",
|
"MessageConfirmPurgeItemsCache": "Изчистването на кеша на елементите ще изтрие цялата директория в <code>/metadata/cache/items</code>. <br />Сигурни ли сте?",
|
||||||
"MessageConfirmQuickEmbed": "Внимание! Бързото вграждане няма да архивира вашите аудио файлове. Уверете се, че имате резервно копие на вашите аудио файлове. <br><br>Искате ли да продължите?",
|
"MessageConfirmQuickEmbed": "Внимание! Бързото вграждане няма да архивира вашите аудио файлове. Уверете се, че имате резервно копие на вашите аудио файлове. <br><br>Искате ли да продължите?",
|
||||||
|
|
@ -735,6 +785,7 @@
|
||||||
"MessageConfirmRemoveAuthor": "Сигурни ли сте, че искате да премахнете автор \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Сигурни ли сте, че искате да премахнете автор \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Сигурни ли сте, че искате да премахнете колекция \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Сигурни ли сте, че искате да премахнете колекция \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Сигурни ли сте, че искате да премахнете епизод \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Сигурни ли сте, че искате да премахнете епизод \"{0}\"?",
|
||||||
|
"MessageConfirmRemoveEpisodeNote": "Забележка: Това няма да доведе до изтриване на аудио файла, освен ако не активирате опцията \"Твърдо изтриване на файла\"",
|
||||||
"MessageConfirmRemoveEpisodes": "Сигурни ли сте, че искате да премахнете {0} епизода?",
|
"MessageConfirmRemoveEpisodes": "Сигурни ли сте, че искате да премахнете {0} епизода?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Сигурни ли сте, че искате да премахнете {0} слушателски сесии?",
|
"MessageConfirmRemoveListeningSessions": "Сигурни ли сте, че искате да премахнете {0} слушателски сесии?",
|
||||||
"MessageConfirmRemoveNarrator": "Сигурни ли сте, че искате да премахнете разказвач \"{0}\"?",
|
"MessageConfirmRemoveNarrator": "Сигурни ли сте, че искате да премахнете разказвач \"{0}\"?",
|
||||||
|
|
@ -745,19 +796,27 @@
|
||||||
"MessageConfirmRenameTag": "Сигурни ли сте, че искате да преименувате таг \"{0}\" на \"{1}\" за всички елементи?",
|
"MessageConfirmRenameTag": "Сигурни ли сте, че искате да преименувате таг \"{0}\" на \"{1}\" за всички елементи?",
|
||||||
"MessageConfirmRenameTagMergeNote": "Забележка: Този таг вече съществува и ще бъде слято.",
|
"MessageConfirmRenameTagMergeNote": "Забележка: Този таг вече съществува и ще бъде слято.",
|
||||||
"MessageConfirmRenameTagWarning": "Внимание! Вече съществува подобен таг с различно писане \"{0}\".",
|
"MessageConfirmRenameTagWarning": "Внимание! Вече съществува подобен таг с различно писане \"{0}\".",
|
||||||
|
"MessageConfirmResetProgress": "Сигурни ли сте, че искате да нулирате прогреса си?",
|
||||||
"MessageConfirmSendEbookToDevice": "Сигурни ли сте, че искате да изпратите {0} електронна книга \"{1}\" до устройство \"{2}\"?",
|
"MessageConfirmSendEbookToDevice": "Сигурни ли сте, че искате да изпратите {0} електронна книга \"{1}\" до устройство \"{2}\"?",
|
||||||
|
"MessageConfirmUnlinkOpenId": "Сигурни ли сте, че искате да отвържете този потребител от OpenID?",
|
||||||
|
"MessageDaysListenedInTheLastYear": "{0} дни слушане през последната година",
|
||||||
"MessageDownloadingEpisode": "Сваля епизод",
|
"MessageDownloadingEpisode": "Сваля епизод",
|
||||||
"MessageDragFilesIntoTrackOrder": "Плъзнете файлове в правилния ред на каналите",
|
"MessageDragFilesIntoTrackOrder": "Плъзнете файлове в правилния ред на каналите",
|
||||||
|
"MessageEmbedFailed": "Вграждането беше неуспешно!",
|
||||||
"MessageEmbedFinished": "Вграждането завърши!",
|
"MessageEmbedFinished": "Вграждането завърши!",
|
||||||
|
"MessageEmbedQueue": "Поставено в опашката за вграждане на метаданни ({0} в опашката)",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} Епизод(и) са сложени за сваляне",
|
"MessageEpisodesQueuedForDownload": "{0} Епизод(и) са сложени за сваляне",
|
||||||
"MessageEreaderDevices": "За да осигурите доставката на е-книги, може да се наложи да добавите горепосочения имейл адрес като валиден подател за всяко устройство, изброено по-долу.",
|
"MessageEreaderDevices": "За да осигурите доставката на е-книги, може да се наложи да добавите горепосочения имейл адрес като валиден подател за всяко устройство, изброено по-долу.",
|
||||||
"MessageFeedURLWillBe": "Адресът на емисията ще бъде {0}",
|
"MessageFeedURLWillBe": "Адресът на емисията ще бъде {0}",
|
||||||
"MessageFetching": "Извличане...",
|
"MessageFetching": "Извличане...",
|
||||||
"MessageForceReScanDescription": "ще сканира всички файлове отново като прясно сканиране. Аудио файлове ID3 тагове, OPF файлове и текстови файлове ще бъдат сканирани като нови.",
|
"MessageForceReScanDescription": "ще сканира всички файлове отново като прясно сканиране. Аудио файлове ID3 тагове, OPF файлове и текстови файлове ще бъдат сканирани като нови.",
|
||||||
|
"MessageHeatmapListeningTimeTooltip": "<strong>{0} слушане</strong> на {1}",
|
||||||
|
"MessageHeatmapNoListeningSessions": "Няма сесии за слушане на {0}",
|
||||||
"MessageImportantNotice": "Важно Съобщение!",
|
"MessageImportantNotice": "Важно Съобщение!",
|
||||||
"MessageInsertChapterBelow": "Вмъкни глава под",
|
"MessageInsertChapterBelow": "Вмъкни глава под",
|
||||||
"MessageItemsSelected": "{0} избрани",
|
"MessageInvalidAsin": "Невалиден ASIN",
|
||||||
"MessageItemsUpdated": "{0} елемента обновени",
|
"MessageItemsSelected": "{0} избрани елемента",
|
||||||
|
"MessageItemsUpdated": "{0} обновени елемента",
|
||||||
"MessageJoinUsOn": "Присъединете се към нас",
|
"MessageJoinUsOn": "Присъединете се към нас",
|
||||||
"MessageLoading": "Зарежда...",
|
"MessageLoading": "Зарежда...",
|
||||||
"MessageLoadingFolders": "Зареждане на Папки...",
|
"MessageLoadingFolders": "Зареждане на Папки...",
|
||||||
|
|
@ -778,6 +837,7 @@
|
||||||
"MessageNoCollections": "Няма колекции",
|
"MessageNoCollections": "Няма колекции",
|
||||||
"MessageNoCoversFound": "Не са намерени корици",
|
"MessageNoCoversFound": "Не са намерени корици",
|
||||||
"MessageNoDescription": "Няма описание",
|
"MessageNoDescription": "Няма описание",
|
||||||
|
"MessageNoDevices": "Няма устройства",
|
||||||
"MessageNoDownloadsInProgress": "Няма изтегляния в прогрес",
|
"MessageNoDownloadsInProgress": "Няма изтегляния в прогрес",
|
||||||
"MessageNoDownloadsQueued": "Няма изтегляния в опашка",
|
"MessageNoDownloadsQueued": "Няма изтегляния в опашка",
|
||||||
"MessageNoEpisodeMatchesFound": "Няма намерени съвпадения за епизоди",
|
"MessageNoEpisodeMatchesFound": "Няма намерени съвпадения за епизоди",
|
||||||
|
|
@ -791,6 +851,7 @@
|
||||||
"MessageNoLogs": "Няма логове",
|
"MessageNoLogs": "Няма логове",
|
||||||
"MessageNoMediaProgress": "Няма прогрес на медията",
|
"MessageNoMediaProgress": "Няма прогрес на медията",
|
||||||
"MessageNoNotifications": "Няма известия",
|
"MessageNoNotifications": "Няма известия",
|
||||||
|
"MessageNoPodcastFeed": "Невалиден подкаст: Няма канал",
|
||||||
"MessageNoPodcastsFound": "Няма намерени подкасти",
|
"MessageNoPodcastsFound": "Няма намерени подкасти",
|
||||||
"MessageNoResults": "Няма резултати",
|
"MessageNoResults": "Няма резултати",
|
||||||
"MessageNoSearchResultsFor": "Няма резултати за \"{0}\"",
|
"MessageNoSearchResultsFor": "Няма резултати за \"{0}\"",
|
||||||
|
|
@ -799,13 +860,17 @@
|
||||||
"MessageNoTasksRunning": "Няма вършещи се задачи",
|
"MessageNoTasksRunning": "Няма вършещи се задачи",
|
||||||
"MessageNoUpdatesWereNecessary": "Няма нужда от обновяване",
|
"MessageNoUpdatesWereNecessary": "Няма нужда от обновяване",
|
||||||
"MessageNoUserPlaylists": "Нямате създадени плейлисти",
|
"MessageNoUserPlaylists": "Нямате създадени плейлисти",
|
||||||
|
"MessageNoUserPlaylistsHelp": "Плейлистите за частни. Само създалият ги потребител ще може да ги вижда.",
|
||||||
"MessageNotYetImplemented": "Още не е изпълнено",
|
"MessageNotYetImplemented": "Още не е изпълнено",
|
||||||
"MessageOr": "или",
|
"MessageOr": "или",
|
||||||
"MessagePauseChapter": "Пауза на глава",
|
"MessagePauseChapter": "Пауза на глава",
|
||||||
"MessagePlayChapter": "Пусни налчалото на глава",
|
"MessagePlayChapter": "Пусни налчалото на глава",
|
||||||
"MessagePlaylistCreateFromCollection": "Създай плейлист от колекция",
|
"MessagePlaylistCreateFromCollection": "Създай плейлист от колекция",
|
||||||
|
"MessagePleaseWait": "Моля изчакайте...",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "Подкастът няма URL адрес на RSS feed за използване за съпоставяне",
|
"MessagePodcastHasNoRSSFeedForMatching": "Подкастът няма URL адрес на RSS feed за използване за съпоставяне",
|
||||||
"MessagePodcastSearchField": "Въведи какво да търся или RSS емисия адрес",
|
"MessagePodcastSearchField": "Въведи какво да търся или RSS емисия адрес",
|
||||||
|
"MessageQuickEmbedInProgress": "Бързото вграждане е в процес на изпълнение",
|
||||||
|
"MessageQuickEmbedQueue": "Поставено в опашката за бързо вграждане ({0} в опашката)",
|
||||||
"MessageQuickMatchDescription": "Попълни празните детайли и корици с първия резултат от '{0}'. Не презаписва детайлите, освен ако не е активирана настройката 'Предпочети съвпадащи метаданни' на сървъра.",
|
"MessageQuickMatchDescription": "Попълни празните детайли и корици с първия резултат от '{0}'. Не презаписва детайлите, освен ако не е активирана настройката 'Предпочети съвпадащи метаданни' на сървъра.",
|
||||||
"MessageRemoveChapter": "Премахни глава",
|
"MessageRemoveChapter": "Премахни глава",
|
||||||
"MessageRemoveEpisodes": "Премахни {0} епизод(и)",
|
"MessageRemoveEpisodes": "Премахни {0} епизод(и)",
|
||||||
|
|
@ -815,11 +880,43 @@
|
||||||
"MessageResetChaptersConfirm": "Сигурни ли сте, че искате да нулирате главите и да отмените промените, които сте направили?",
|
"MessageResetChaptersConfirm": "Сигурни ли сте, че искате да нулирате главите и да отмените промените, които сте направили?",
|
||||||
"MessageRestoreBackupConfirm": "Сигурни ли сте, че искате да възстановите архива създаден на",
|
"MessageRestoreBackupConfirm": "Сигурни ли сте, че искате да възстановите архива създаден на",
|
||||||
"MessageRestoreBackupWarning": "Възстановяването на архив ще презапише цялата база данни, намираща се в /config и кориците в /metadata/items & /metadata/authors.<br /><br />Архивите не променят файловете в папките на вашата библиотека. Ако сте активирали настройките на сървъра за съхранение на корици и метаданни в папките на вашата библиотека, те няма да бъдат архивирани или презаписани.<br /><br />Всички клиенти, използващи вашия сървър, ще бъдат автоматично обновени.",
|
"MessageRestoreBackupWarning": "Възстановяването на архив ще презапише цялата база данни, намираща се в /config и кориците в /metadata/items & /metadata/authors.<br /><br />Архивите не променят файловете в папките на вашата библиотека. Ако сте активирали настройките на сървъра за съхранение на корици и метаданни в папките на вашата библиотека, те няма да бъдат архивирани или презаписани.<br /><br />Всички клиенти, използващи вашия сървър, ще бъдат автоматично обновени.",
|
||||||
|
"MessageScheduleRunEveryWeekdayAtTime": "Изпълни всеки {0} в {1}",
|
||||||
"MessageSearchResultsFor": "Резултати от търсенето за",
|
"MessageSearchResultsFor": "Резултати от търсенето за",
|
||||||
"MessageSelected": "{0} избрани",
|
"MessageSelected": "{0} избрани",
|
||||||
"MessageServerCouldNotBeReached": "Сървърът не може да бъде достигнат",
|
"MessageServerCouldNotBeReached": "Сървърът не може да бъде достигнат",
|
||||||
"MessageSetChaptersFromTracksDescription": "Задайте глави, като използвате всеки аудио файл като глава и заглавие на главата като име на аудио файла",
|
"MessageSetChaptersFromTracksDescription": "Задайте глави, като използвате всеки аудио файл като глава и заглавие на главата като име на аудио файла",
|
||||||
|
"MessageShareExpiresIn": "Изтича след {0}",
|
||||||
"MessageStartPlaybackAtTime": "Започни възпроизвеждане на \"{0}\" в {1}?",
|
"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": "Мисля...",
|
"MessageThinking": "Мисля...",
|
||||||
"MessageUploaderItemFailed": "Неуспешно качване",
|
"MessageUploaderItemFailed": "Неуспешно качване",
|
||||||
"MessageUploaderItemSuccess": "Успешно качване!",
|
"MessageUploaderItemSuccess": "Успешно качване!",
|
||||||
|
|
@ -837,11 +934,18 @@
|
||||||
"NoteUploaderFoldersWithMediaFiles": "Папките с медийни файлове ще бъдат обработени като отделни елементи на библиотеката.",
|
"NoteUploaderFoldersWithMediaFiles": "Папките с медийни файлове ще бъдат обработени като отделни елементи на библиотеката.",
|
||||||
"NoteUploaderOnlyAudioFiles": "Ако качвате само аудио файлове, то всеки аудио файл ще бъде обработен като отделна аудиокнига.",
|
"NoteUploaderOnlyAudioFiles": "Ако качвате само аудио файлове, то всеки аудио файл ще бъде обработен като отделна аудиокнига.",
|
||||||
"NoteUploaderUnsupportedFiles": "Неподдържаните файлове се игнорират. При избор или пускане на папка, други файлове, които не са в папка на елемент, се игнорират.",
|
"NoteUploaderUnsupportedFiles": "Неподдържаните файлове се игнорират. При избор или пускане на папка, други файлове, които не са в папка на елемент, се игнорират.",
|
||||||
|
"NotificationOnBackupCompletedDescription": "Изпълнява се при завършване на създаване на резервно копие",
|
||||||
|
"NotificationOnBackupFailedDescription": "Изпълнява се при неуспешено създаване на резервно копие",
|
||||||
|
"NotificationOnEpisodeDownloadedDescription": "Изпълнява се при автоматично изтегляне на подкаст епизод",
|
||||||
|
"NotificationOnRSSFeedDisabledDescription": "Изпълнява се, когато автоматичното изтегляне на епизодите е деактивирано, поради твърде много неуспешни опити",
|
||||||
"PlaceholderNewCollection": "Ново име на колекцията",
|
"PlaceholderNewCollection": "Ново име на колекцията",
|
||||||
"PlaceholderNewFolderPath": "Нов път на папката",
|
"PlaceholderNewFolderPath": "Нов път на папката",
|
||||||
"PlaceholderNewPlaylist": "Ново име на плейлиста",
|
"PlaceholderNewPlaylist": "Ново име на плейлиста",
|
||||||
"PlaceholderSearch": "Търсене...",
|
"PlaceholderSearch": "Търсене...",
|
||||||
"PlaceholderSearchEpisode": "Търсене на Епизоди...",
|
"PlaceholderSearchEpisode": "Търсене на Епизоди...",
|
||||||
|
"StatsAuthorsAdded": "добаврени автори",
|
||||||
|
"StatsBooksAdded": "добавени книги",
|
||||||
|
"StatsBooksFinished": "завършени книги",
|
||||||
"ToastAccountUpdateSuccess": "Успешно обновяване на акаунта",
|
"ToastAccountUpdateSuccess": "Успешно обновяване на акаунта",
|
||||||
"ToastAuthorImageRemoveSuccess": "Авторската снимка е премахната",
|
"ToastAuthorImageRemoveSuccess": "Авторската снимка е премахната",
|
||||||
"ToastAuthorUpdateMerged": "Обновяване на автора сливано",
|
"ToastAuthorUpdateMerged": "Обновяване на автора сливано",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"ButtonAdd": "যোগ করুন",
|
"ButtonAdd": "যোগ করুন",
|
||||||
|
"ButtonAddApiKey": "এপিআই কী যোগ করুন",
|
||||||
"ButtonAddChapters": "অধ্যায় যোগ করুন",
|
"ButtonAddChapters": "অধ্যায় যোগ করুন",
|
||||||
"ButtonAddDevice": "ডিভাইস যোগ করুন",
|
"ButtonAddDevice": "ডিভাইস যোগ করুন",
|
||||||
"ButtonAddLibrary": "লাইব্রেরি যোগ করুন",
|
"ButtonAddLibrary": "লাইব্রেরি যোগ করুন",
|
||||||
|
|
@ -10,6 +11,8 @@
|
||||||
"ButtonApplyChapters": "অধ্যায় প্রয়োগ করুন",
|
"ButtonApplyChapters": "অধ্যায় প্রয়োগ করুন",
|
||||||
"ButtonAuthors": "লেখকগণ",
|
"ButtonAuthors": "লেখকগণ",
|
||||||
"ButtonBack": "পেছনে যান",
|
"ButtonBack": "পেছনে যান",
|
||||||
|
"ButtonBatchEditPopulateFromExisting": "বিদ্যমান থেকে পূরণ করুন",
|
||||||
|
"ButtonBatchEditPopulateMapDetails": "ম্যাপ থেকে পূরণ করুন",
|
||||||
"ButtonBrowseForFolder": "ফোল্ডারের জন্য ব্রাউজ করুন",
|
"ButtonBrowseForFolder": "ফোল্ডারের জন্য ব্রাউজ করুন",
|
||||||
"ButtonCancel": "বাতিল করুন",
|
"ButtonCancel": "বাতিল করুন",
|
||||||
"ButtonCancelEncode": "এনকোড বাতিল করুন",
|
"ButtonCancelEncode": "এনকোড বাতিল করুন",
|
||||||
|
|
@ -18,6 +21,7 @@
|
||||||
"ButtonChooseAFolder": "একটি ফোল্ডার চয়ন করুন",
|
"ButtonChooseAFolder": "একটি ফোল্ডার চয়ন করুন",
|
||||||
"ButtonChooseFiles": "ফাইল চয়ন করুন",
|
"ButtonChooseFiles": "ফাইল চয়ন করুন",
|
||||||
"ButtonClearFilter": "ফিল্টার পরিষ্কার করুন",
|
"ButtonClearFilter": "ফিল্টার পরিষ্কার করুন",
|
||||||
|
"ButtonClose": "বন্ধ করুন",
|
||||||
"ButtonCloseFeed": "ফিড বন্ধ করুন",
|
"ButtonCloseFeed": "ফিড বন্ধ করুন",
|
||||||
"ButtonCloseSession": "খোলা সেশন বন্ধ করুন",
|
"ButtonCloseSession": "খোলা সেশন বন্ধ করুন",
|
||||||
"ButtonCollections": "সংগ্রহ",
|
"ButtonCollections": "সংগ্রহ",
|
||||||
|
|
@ -117,11 +121,13 @@
|
||||||
"HeaderAccount": "অ্যাকাউন্ট",
|
"HeaderAccount": "অ্যাকাউন্ট",
|
||||||
"HeaderAddCustomMetadataProvider": "কাস্টম মেটাডেটা সরবরাহকারী যোগ করুন",
|
"HeaderAddCustomMetadataProvider": "কাস্টম মেটাডেটা সরবরাহকারী যোগ করুন",
|
||||||
"HeaderAdvanced": "অ্যাডভান্সড",
|
"HeaderAdvanced": "অ্যাডভান্সড",
|
||||||
|
"HeaderApiKeys": "এপিআই কী সমূহ",
|
||||||
"HeaderAppriseNotificationSettings": "বিজ্ঞপ্তি সেটিংস অবহিত করুন",
|
"HeaderAppriseNotificationSettings": "বিজ্ঞপ্তি সেটিংস অবহিত করুন",
|
||||||
"HeaderAudioTracks": "অডিও ট্র্যাকসগুলো",
|
"HeaderAudioTracks": "অডিও ট্র্যাকসগুলো",
|
||||||
"HeaderAudiobookTools": "অডিওবই ফাইল ম্যানেজমেন্ট টুলস",
|
"HeaderAudiobookTools": "অডিওবই ফাইল ম্যানেজমেন্ট টুলস",
|
||||||
"HeaderAuthentication": "প্রমাণীকরণ",
|
"HeaderAuthentication": "প্রমাণীকরণ",
|
||||||
"HeaderBackups": "ব্যাকআপ",
|
"HeaderBackups": "ব্যাকআপ",
|
||||||
|
"HeaderBulkChapterModal": "একাধিক অধ্যায় যোগ করুন",
|
||||||
"HeaderChangePassword": "পাসওয়ার্ড পরিবর্তন করুন",
|
"HeaderChangePassword": "পাসওয়ার্ড পরিবর্তন করুন",
|
||||||
"HeaderChapters": "অধ্যায়",
|
"HeaderChapters": "অধ্যায়",
|
||||||
"HeaderChooseAFolder": "একটি ফোল্ডার চয়ন করুন",
|
"HeaderChooseAFolder": "একটি ফোল্ডার চয়ন করুন",
|
||||||
|
|
@ -160,6 +166,7 @@
|
||||||
"HeaderMetadataOrderOfPrecedence": "মেটাডেটা অগ্রাধিকারের ক্রম",
|
"HeaderMetadataOrderOfPrecedence": "মেটাডেটা অগ্রাধিকারের ক্রম",
|
||||||
"HeaderMetadataToEmbed": "এম্বেড করার জন্য মেটাডেটা",
|
"HeaderMetadataToEmbed": "এম্বেড করার জন্য মেটাডেটা",
|
||||||
"HeaderNewAccount": "নতুন অ্যাকাউন্ট",
|
"HeaderNewAccount": "নতুন অ্যাকাউন্ট",
|
||||||
|
"HeaderNewApiKey": "নতুন API কী",
|
||||||
"HeaderNewLibrary": "নতুন লাইব্রেরি",
|
"HeaderNewLibrary": "নতুন লাইব্রেরি",
|
||||||
"HeaderNotificationCreate": "বিজ্ঞপ্তি তৈরি করুন",
|
"HeaderNotificationCreate": "বিজ্ঞপ্তি তৈরি করুন",
|
||||||
"HeaderNotificationUpdate": "বিজ্ঞপ্তি আপডেট করুন",
|
"HeaderNotificationUpdate": "বিজ্ঞপ্তি আপডেট করুন",
|
||||||
|
|
@ -175,6 +182,7 @@
|
||||||
"HeaderPlaylist": "প্লেলিস্ট",
|
"HeaderPlaylist": "প্লেলিস্ট",
|
||||||
"HeaderPlaylistItems": "প্লেলিস্ট আইটেম",
|
"HeaderPlaylistItems": "প্লেলিস্ট আইটেম",
|
||||||
"HeaderPodcastsToAdd": "যোগ করার জন্য পডকাস্ট",
|
"HeaderPodcastsToAdd": "যোগ করার জন্য পডকাস্ট",
|
||||||
|
"HeaderPresets": "প্রিসেট",
|
||||||
"HeaderPreviewCover": "কভার ্দেখুন",
|
"HeaderPreviewCover": "কভার ্দেখুন",
|
||||||
"HeaderRSSFeedGeneral": "আরএসএস বিবরণ",
|
"HeaderRSSFeedGeneral": "আরএসএস বিবরণ",
|
||||||
"HeaderRSSFeedIsOpen": "আরএসএস ফিড খোলা আছে",
|
"HeaderRSSFeedIsOpen": "আরএসএস ফিড খোলা আছে",
|
||||||
|
|
@ -192,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "পরীক্ষামূলক ফিচার",
|
"HeaderSettingsExperimental": "পরীক্ষামূলক ফিচার",
|
||||||
"HeaderSettingsGeneral": "সাধারণ",
|
"HeaderSettingsGeneral": "সাধারণ",
|
||||||
"HeaderSettingsScanner": "স্ক্যানার",
|
"HeaderSettingsScanner": "স্ক্যানার",
|
||||||
|
"HeaderSettingsSecurity": "নিরাপত্তা",
|
||||||
"HeaderSettingsWebClient": "ওয়েব ক্লায়েন্ট",
|
"HeaderSettingsWebClient": "ওয়েব ক্লায়েন্ট",
|
||||||
"HeaderSleepTimer": "স্লিপ টাইমার",
|
"HeaderSleepTimer": "স্লিপ টাইমার",
|
||||||
"HeaderStatsLargestItems": "সবচেয়ে বড় আইটেম",
|
"HeaderStatsLargestItems": "সবচেয়ে বড় আইটেম",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"ButtonAdd": "Afegeix",
|
"ButtonAdd": "Afegeix",
|
||||||
|
"ButtonAddApiKey": "Afegeix clau API",
|
||||||
"ButtonAddChapters": "Afegeix capítols",
|
"ButtonAddChapters": "Afegeix capítols",
|
||||||
"ButtonAddDevice": "Afegeix un aparell",
|
"ButtonAddDevice": "Afegeix un aparell",
|
||||||
"ButtonAddLibrary": "Afegeix una biblioteca",
|
"ButtonAddLibrary": "Afegeix una biblioteca",
|
||||||
|
|
@ -20,6 +21,7 @@
|
||||||
"ButtonChooseAFolder": "Trieu una carpeta",
|
"ButtonChooseAFolder": "Trieu una carpeta",
|
||||||
"ButtonChooseFiles": "Trieu fitxers",
|
"ButtonChooseFiles": "Trieu fitxers",
|
||||||
"ButtonClearFilter": "Neteja el filtre",
|
"ButtonClearFilter": "Neteja el filtre",
|
||||||
|
"ButtonClose": "Tanca",
|
||||||
"ButtonCloseFeed": "Tanca el canal",
|
"ButtonCloseFeed": "Tanca el canal",
|
||||||
"ButtonCloseSession": "Tanca la sessió oberta",
|
"ButtonCloseSession": "Tanca la sessió oberta",
|
||||||
"ButtonCollections": "Col·leccions",
|
"ButtonCollections": "Col·leccions",
|
||||||
|
|
@ -119,11 +121,13 @@
|
||||||
"HeaderAccount": "Compte",
|
"HeaderAccount": "Compte",
|
||||||
"HeaderAddCustomMetadataProvider": "Afegeix un proveïdor de metadades personalitzat",
|
"HeaderAddCustomMetadataProvider": "Afegeix un proveïdor de metadades personalitzat",
|
||||||
"HeaderAdvanced": "Avançat",
|
"HeaderAdvanced": "Avançat",
|
||||||
|
"HeaderApiKeys": "Claus API",
|
||||||
"HeaderAppriseNotificationSettings": "Paràmetres de notificacions Apprise",
|
"HeaderAppriseNotificationSettings": "Paràmetres de notificacions Apprise",
|
||||||
"HeaderAudioTracks": "Pistes d'àudio",
|
"HeaderAudioTracks": "Pistes d'àudio",
|
||||||
"HeaderAudiobookTools": "Eines de gestió de fitxers de l'audiollibre",
|
"HeaderAudiobookTools": "Eines de gestió de fitxers de l'audiollibre",
|
||||||
"HeaderAuthentication": "Autenticació",
|
"HeaderAuthentication": "Autenticació",
|
||||||
"HeaderBackups": "Còpies de Seguretat",
|
"HeaderBackups": "Còpies de Seguretat",
|
||||||
|
"HeaderBulkChapterModal": "Afegeix capítols múltiples",
|
||||||
"HeaderChangePassword": "Canvia Contrasenya",
|
"HeaderChangePassword": "Canvia Contrasenya",
|
||||||
"HeaderChapters": "Capítols",
|
"HeaderChapters": "Capítols",
|
||||||
"HeaderChooseAFolder": "Tria una Carpeta",
|
"HeaderChooseAFolder": "Tria una Carpeta",
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
"ButtonApplyChapters": "Aplikovat kapitoly",
|
"ButtonApplyChapters": "Aplikovat kapitoly",
|
||||||
"ButtonAuthors": "Autoři",
|
"ButtonAuthors": "Autoři",
|
||||||
"ButtonBack": "Zpět",
|
"ButtonBack": "Zpět",
|
||||||
"ButtonBatchEditPopulateFromExisting": "Vytvořit z existujících",
|
"ButtonBatchEditPopulateFromExisting": "Předvyplnit z existujících",
|
||||||
"ButtonBatchEditPopulateMapDetails": "Předvyplnit podrobnosti mapování",
|
"ButtonBatchEditPopulateMapDetails": "Předvyplnit podrobnosti mapování",
|
||||||
"ButtonBrowseForFolder": "Vyhledat složku",
|
"ButtonBrowseForFolder": "Vyhledat složku",
|
||||||
"ButtonCancel": "Zrušit",
|
"ButtonCancel": "Zrušit",
|
||||||
|
|
@ -61,7 +61,7 @@
|
||||||
"ButtonPause": "Pozastavit",
|
"ButtonPause": "Pozastavit",
|
||||||
"ButtonPlay": "Přehrát",
|
"ButtonPlay": "Přehrát",
|
||||||
"ButtonPlayAll": "Přehrát vše",
|
"ButtonPlayAll": "Přehrát vše",
|
||||||
"ButtonPlaying": "Hraje",
|
"ButtonPlaying": "Přehrává",
|
||||||
"ButtonPlaylists": "Seznamy skladeb",
|
"ButtonPlaylists": "Seznamy skladeb",
|
||||||
"ButtonPrevious": "Předchozí",
|
"ButtonPrevious": "Předchozí",
|
||||||
"ButtonPreviousChapter": "Předchozí Kapitola",
|
"ButtonPreviousChapter": "Předchozí Kapitola",
|
||||||
|
|
@ -71,7 +71,7 @@
|
||||||
"ButtonQueueAddItem": "Přidat do fronty",
|
"ButtonQueueAddItem": "Přidat do fronty",
|
||||||
"ButtonQueueRemoveItem": "Odstranit z fronty",
|
"ButtonQueueRemoveItem": "Odstranit z fronty",
|
||||||
"ButtonQuickEmbed": "Rychle Zapsat",
|
"ButtonQuickEmbed": "Rychle Zapsat",
|
||||||
"ButtonQuickEmbedMetadata": "Rychle zapsat Metadata",
|
"ButtonQuickEmbedMetadata": "Rychle Vložit Metadata",
|
||||||
"ButtonQuickMatch": "Rychlé přiřazení",
|
"ButtonQuickMatch": "Rychlé přiřazení",
|
||||||
"ButtonReScan": "Znovu prohledat",
|
"ButtonReScan": "Znovu prohledat",
|
||||||
"ButtonRead": "Číst",
|
"ButtonRead": "Číst",
|
||||||
|
|
@ -127,6 +127,7 @@
|
||||||
"HeaderAudiobookTools": "Nástroje pro správu souborů audioknih",
|
"HeaderAudiobookTools": "Nástroje pro správu souborů audioknih",
|
||||||
"HeaderAuthentication": "Autentizace",
|
"HeaderAuthentication": "Autentizace",
|
||||||
"HeaderBackups": "Zálohy",
|
"HeaderBackups": "Zálohy",
|
||||||
|
"HeaderBulkChapterModal": "Přidat více kapitol",
|
||||||
"HeaderChangePassword": "Změnit heslo",
|
"HeaderChangePassword": "Změnit heslo",
|
||||||
"HeaderChapters": "Kapitoly",
|
"HeaderChapters": "Kapitoly",
|
||||||
"HeaderChooseAFolder": "Zvolte složku",
|
"HeaderChooseAFolder": "Zvolte složku",
|
||||||
|
|
@ -199,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Experimentální funkce",
|
"HeaderSettingsExperimental": "Experimentální funkce",
|
||||||
"HeaderSettingsGeneral": "Obecné",
|
"HeaderSettingsGeneral": "Obecné",
|
||||||
"HeaderSettingsScanner": "Skener",
|
"HeaderSettingsScanner": "Skener",
|
||||||
|
"HeaderSettingsSecurity": "Zabezpečení",
|
||||||
"HeaderSettingsWebClient": "Webový klient",
|
"HeaderSettingsWebClient": "Webový klient",
|
||||||
"HeaderSleepTimer": "Časovač vypnutí",
|
"HeaderSleepTimer": "Časovač vypnutí",
|
||||||
"HeaderStatsLargestItems": "Největší položky",
|
"HeaderStatsLargestItems": "Největší položky",
|
||||||
|
|
@ -293,6 +295,7 @@
|
||||||
"LabelContinueListening": "Pokračovat v poslechu",
|
"LabelContinueListening": "Pokračovat v poslechu",
|
||||||
"LabelContinueReading": "Pokračovat ve čtení",
|
"LabelContinueReading": "Pokračovat ve čtení",
|
||||||
"LabelContinueSeries": "Pokračovat v sérii",
|
"LabelContinueSeries": "Pokračovat v sérii",
|
||||||
|
"LabelCorsAllowed": "Povolené CORS Origins",
|
||||||
"LabelCover": "Obálka",
|
"LabelCover": "Obálka",
|
||||||
"LabelCoverImageURL": "URL obrázku obálky",
|
"LabelCoverImageURL": "URL obrázku obálky",
|
||||||
"LabelCoverProvider": "Poskytovatel obálky",
|
"LabelCoverProvider": "Poskytovatel obálky",
|
||||||
|
|
@ -306,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Smazat ze souborového systému (zrušte zaškrtnutí pro odstranění pouze z databáze)",
|
"LabelDeleteFromFileSystemCheckbox": "Smazat ze souborového systému (zrušte zaškrtnutí pro odstranění pouze z databáze)",
|
||||||
"LabelDescription": "Popis",
|
"LabelDescription": "Popis",
|
||||||
"LabelDeselectAll": "Odznačit vše",
|
"LabelDeselectAll": "Odznačit vše",
|
||||||
|
"LabelDetectedPattern": "Detekovaný vzor:",
|
||||||
"LabelDevice": "Zařízení",
|
"LabelDevice": "Zařízení",
|
||||||
"LabelDeviceInfo": "Informace o zařízení",
|
"LabelDeviceInfo": "Informace o zařízení",
|
||||||
"LabelDeviceIsAvailableTo": "Zařízení je dostupné pro...",
|
"LabelDeviceIsAvailableTo": "Zařízení je dostupné pro...",
|
||||||
|
|
@ -359,7 +363,7 @@
|
||||||
"LabelExpiresAt": "Expiruje v",
|
"LabelExpiresAt": "Expiruje v",
|
||||||
"LabelExpiresInSeconds": "Expiruje za (sekundy)",
|
"LabelExpiresInSeconds": "Expiruje za (sekundy)",
|
||||||
"LabelExpiresNever": "Nikdy",
|
"LabelExpiresNever": "Nikdy",
|
||||||
"LabelExplicit": "Explicitně",
|
"LabelExplicit": "Explicitní",
|
||||||
"LabelExplicitChecked": "Explicitní (zaškrtnuto)",
|
"LabelExplicitChecked": "Explicitní (zaškrtnuto)",
|
||||||
"LabelExplicitUnchecked": "Není explicitní (nezaškrtnuto)",
|
"LabelExplicitUnchecked": "Není explicitní (nezaškrtnuto)",
|
||||||
"LabelExportOPML": "Export OPML",
|
"LabelExportOPML": "Export OPML",
|
||||||
|
|
@ -374,6 +378,7 @@
|
||||||
"LabelFilterByUser": "Filtrovat podle uživatele",
|
"LabelFilterByUser": "Filtrovat podle uživatele",
|
||||||
"LabelFindEpisodes": "Najít epizody",
|
"LabelFindEpisodes": "Najít epizody",
|
||||||
"LabelFinished": "Dokončeno",
|
"LabelFinished": "Dokončeno",
|
||||||
|
"LabelFinishedDate": "Dokončeno {0}",
|
||||||
"LabelFolder": "Složka",
|
"LabelFolder": "Složka",
|
||||||
"LabelFolders": "Složky",
|
"LabelFolders": "Složky",
|
||||||
"LabelFontBold": "Tučně",
|
"LabelFontBold": "Tučně",
|
||||||
|
|
@ -387,8 +392,8 @@
|
||||||
"LabelGenre": "Žánr",
|
"LabelGenre": "Žánr",
|
||||||
"LabelGenres": "Žánry",
|
"LabelGenres": "Žánry",
|
||||||
"LabelHardDeleteFile": "Trvale smazat soubor",
|
"LabelHardDeleteFile": "Trvale smazat soubor",
|
||||||
"LabelHasEbook": "Obsahuje elektronickou knihu",
|
"LabelHasEbook": "Má e-knihu",
|
||||||
"LabelHasSupplementaryEbook": "Obsahuje doplňkovou elektronickou knihu",
|
"LabelHasSupplementaryEbook": "Obsahuje doplňkovou e-knihu",
|
||||||
"LabelHideSubtitles": "Skrýt titulky",
|
"LabelHideSubtitles": "Skrýt titulky",
|
||||||
"LabelHighestPriority": "Nejvyšší priorita",
|
"LabelHighestPriority": "Nejvyšší priorita",
|
||||||
"LabelHost": "Hostitel",
|
"LabelHost": "Hostitel",
|
||||||
|
|
@ -418,6 +423,7 @@
|
||||||
"LabelLanguages": "Jazyky",
|
"LabelLanguages": "Jazyky",
|
||||||
"LabelLastBookAdded": "Poslední kniha přidána",
|
"LabelLastBookAdded": "Poslední kniha přidána",
|
||||||
"LabelLastBookUpdated": "Poslední kniha aktualizována",
|
"LabelLastBookUpdated": "Poslední kniha aktualizována",
|
||||||
|
"LabelLastProgressDate": "Poslední pokrok: {0}",
|
||||||
"LabelLastSeen": "Naposledy viděno",
|
"LabelLastSeen": "Naposledy viděno",
|
||||||
"LabelLastTime": "Naposledy",
|
"LabelLastTime": "Naposledy",
|
||||||
"LabelLastUpdate": "Poslední aktualizace",
|
"LabelLastUpdate": "Poslední aktualizace",
|
||||||
|
|
@ -430,6 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Žádné {0}",
|
"LabelLibraryFilterSublistEmpty": "Žádné {0}",
|
||||||
"LabelLibraryItem": "Položka knihovny",
|
"LabelLibraryItem": "Položka knihovny",
|
||||||
"LabelLibraryName": "Název knihovny",
|
"LabelLibraryName": "Název knihovny",
|
||||||
|
"LabelLibrarySortByProgress": "Pokrok: naposledy aktualizováno",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Pokrok: dokončeno",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Pokrok: začato",
|
||||||
"LabelLimit": "Omezit",
|
"LabelLimit": "Omezit",
|
||||||
"LabelLineSpacing": "Řádkování",
|
"LabelLineSpacing": "Řádkování",
|
||||||
"LabelListenAgain": "Poslouchat znovu",
|
"LabelListenAgain": "Poslouchat znovu",
|
||||||
|
|
@ -438,10 +447,11 @@
|
||||||
"LabelLogLevelWarn": "Varovat",
|
"LabelLogLevelWarn": "Varovat",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Hledat nové epizody po tomto datu",
|
"LabelLookForNewEpisodesAfterDate": "Hledat nové epizody po tomto datu",
|
||||||
"LabelLowestPriority": "Nejnižší priorita",
|
"LabelLowestPriority": "Nejnižší priorita",
|
||||||
|
"LabelMatchConfidence": "Jistota",
|
||||||
"LabelMatchExistingUsersBy": "Přiřadit stávající uživatele podle",
|
"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",
|
"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í.",
|
"LabelMaxEpisodesToDownload": "Maximální # epizod pro stažení. Použijte 0 pro bez omezení.",
|
||||||
"LabelMaxEpisodesToDownloadPerCheck": "Maximální počet nových epizod ke stažení při jedné kontrole",
|
"LabelMaxEpisodesToDownloadPerCheck": "Maximální # nových epizod ke stažení při jedné kontrole",
|
||||||
"LabelMaxEpisodesToKeep": "Maximální počet epizod k zachování",
|
"LabelMaxEpisodesToKeep": "Maximální počet epizod k zachování",
|
||||||
"LabelMaxEpisodesToKeepHelp": "Hodnotou 0 není nastaven žádný maximální limit. Po automatickém stažení nové epizody se odstraní nejstarší epizoda, pokud máte více než X epizod. Při každém novém stažení se odstraní pouze 1 epizoda.",
|
"LabelMaxEpisodesToKeepHelp": "Hodnotou 0 není nastaven žádný maximální limit. Po automatickém stažení nové epizody se odstraní nejstarší epizoda, pokud máte více než X epizod. Při každém novém stažení se odstraní pouze 1 epizoda.",
|
||||||
"LabelMediaPlayer": "Přehrávač médií",
|
"LabelMediaPlayer": "Přehrávač médií",
|
||||||
|
|
@ -467,6 +477,7 @@
|
||||||
"LabelNewestAuthors": "Nejnovější autoři",
|
"LabelNewestAuthors": "Nejnovější autoři",
|
||||||
"LabelNewestEpisodes": "Nejnovější epizody",
|
"LabelNewestEpisodes": "Nejnovější epizody",
|
||||||
"LabelNextBackupDate": "Datum příští zálohy",
|
"LabelNextBackupDate": "Datum příští zálohy",
|
||||||
|
"LabelNextChapters": "Další kapitola bude:",
|
||||||
"LabelNextScheduledRun": "Další naplánované spuštění",
|
"LabelNextScheduledRun": "Další naplánované spuštění",
|
||||||
"LabelNoApiKeys": "Žádné API klíče",
|
"LabelNoApiKeys": "Žádné API klíče",
|
||||||
"LabelNoCustomMetadataProviders": "Žádní vlastní poskytovatelé metadat",
|
"LabelNoCustomMetadataProviders": "Žádní vlastní poskytovatelé metadat",
|
||||||
|
|
@ -484,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Maximální velikost fronty pro oznamovací události",
|
"LabelNotificationsMaxQueueSize": "Maximální velikost fronty pro oznamovací události",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Události jsou omezeny na 1 za sekundu. Události budou ignorovány, pokud je fronta v maximální velikosti. Tím se zabrání spamování oznámení.",
|
"LabelNotificationsMaxQueueSizeHelp": "Události jsou omezeny na 1 za sekundu. Události budou ignorovány, pokud je fronta v maximální velikosti. Tím se zabrání spamování oznámení.",
|
||||||
"LabelNumberOfBooks": "Počet knih",
|
"LabelNumberOfBooks": "Počet knih",
|
||||||
|
"LabelNumberOfChapters": "Počet kapitol:",
|
||||||
"LabelNumberOfEpisodes": "Počet epizod",
|
"LabelNumberOfEpisodes": "Počet epizod",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Název požadavku OpenID, který obsahuje rozšířená oprávnění pro akce uživatele v rámci aplikace, která se budou vztahovat na role, které nejsou administrátory (<b>pokud jsou nakonfigurovány</b>). Pokud požadavek v odpovědi chybí, přístup do systému ABS bude zamítnut. Pokud chybí jediná možnost, bude považována za <code>false</code>. Ujistěte se, že deklarace poskytovatele identity odpovídá očekávané struktuře:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Název požadavku OpenID, který obsahuje rozšířená oprávnění pro akce uživatele v rámci aplikace, která se budou vztahovat na role, které nejsou administrátory (<b>pokud jsou nakonfigurovány</b>). Pokud požadavek v odpovědi chybí, přístup do systému ABS bude zamítnut. Pokud chybí jediná možnost, bude považována za <code>false</code>. Ujistěte se, že deklarace poskytovatele identity odpovídá očekávané struktuře:",
|
||||||
"LabelOpenIDClaims": "Následující možnosti ponechte prázdné, abyste zakázali pokročilé přiřazování skupin a oprávnění a automatické přiřazení skupiny \"User\".",
|
"LabelOpenIDClaims": "Následující možnosti ponechte prázdné, abyste zakázali pokročilé přiřazování skupin a oprávnění a automatické přiřazení skupiny \"User\".",
|
||||||
|
|
@ -577,7 +589,7 @@
|
||||||
"LabelSettingsChromecastSupport": "Podpora Chromecastu",
|
"LabelSettingsChromecastSupport": "Podpora Chromecastu",
|
||||||
"LabelSettingsDateFormat": "Formát data",
|
"LabelSettingsDateFormat": "Formát data",
|
||||||
"LabelSettingsEnableWatcher": "Automaticky skenovat změny v knihovnách",
|
"LabelSettingsEnableWatcher": "Automaticky skenovat změny v knihovnách",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Automaticky skenovat změny v knihovně",
|
"LabelSettingsEnableWatcherForLibrary": "Automaticky sledovat změny v knihovně",
|
||||||
"LabelSettingsEnableWatcherHelp": "Povoluje automatické přidávání/aktualizaci položek, když jsou zjištěny změny souborů. *Vyžaduje restart serveru",
|
"LabelSettingsEnableWatcherHelp": "Povoluje automatické přidávání/aktualizaci položek, když jsou zjištěny změny souborů. *Vyžaduje restart serveru",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Povolení skriptovaného obsahu v epubu",
|
"LabelSettingsEpubsAllowScriptedContent": "Povolení skriptovaného obsahu v epubu",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Povolení spouštění skriptů v souborech epub. Doporučujeme toto nastavení vypnout, pokud nedůvěřujete zdroji souborů epub.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Povolení spouštění skriptů v souborech epub. Doporučujeme toto nastavení vypnout, pokud nedůvěřujete zdroji souborů epub.",
|
||||||
|
|
@ -626,6 +638,7 @@
|
||||||
"LabelStartTime": "Čas Spuštění",
|
"LabelStartTime": "Čas Spuštění",
|
||||||
"LabelStarted": "Spuštěno",
|
"LabelStarted": "Spuštěno",
|
||||||
"LabelStartedAt": "Spuštěno v",
|
"LabelStartedAt": "Spuštěno v",
|
||||||
|
"LabelStartedDate": "Spuštěno {0}",
|
||||||
"LabelStatsAudioTracks": "Zvukové stopy",
|
"LabelStatsAudioTracks": "Zvukové stopy",
|
||||||
"LabelStatsAuthors": "Autoři",
|
"LabelStatsAuthors": "Autoři",
|
||||||
"LabelStatsBestDay": "Nejlepší den",
|
"LabelStatsBestDay": "Nejlepší den",
|
||||||
|
|
@ -655,6 +668,7 @@
|
||||||
"LabelTheme": "Téma",
|
"LabelTheme": "Téma",
|
||||||
"LabelThemeDark": "Tmavé",
|
"LabelThemeDark": "Tmavé",
|
||||||
"LabelThemeLight": "Světlé",
|
"LabelThemeLight": "Světlé",
|
||||||
|
"LabelThemeSepia": "Hnědé",
|
||||||
"LabelTimeBase": "Časová základna",
|
"LabelTimeBase": "Časová základna",
|
||||||
"LabelTimeDurationXHours": "{0} hodin",
|
"LabelTimeDurationXHours": "{0} hodin",
|
||||||
"LabelTimeDurationXMinutes": "{0} minut",
|
"LabelTimeDurationXMinutes": "{0} minut",
|
||||||
|
|
@ -739,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Filtr \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Filtr \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Žádné výsledky pro dotaz",
|
"MessageBookshelfNoResultsForQuery": "Žádné výsledky pro dotaz",
|
||||||
"MessageBookshelfNoSeries": "Nemáte žádnou sérii",
|
"MessageBookshelfNoSeries": "Nemáte žádnou sérii",
|
||||||
|
"MessageBulkChapterPattern": "Kolik kapitol chcete přidat s tímto vzorem číslování?",
|
||||||
"MessageChapterEndIsAfter": "Konec kapitoly přesahuje konec audioknihy",
|
"MessageChapterEndIsAfter": "Konec kapitoly přesahuje konec audioknihy",
|
||||||
"MessageChapterErrorFirstNotZero": "První kapitola musí začínat na 0",
|
"MessageChapterErrorFirstNotZero": "První kapitola musí začínat na 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Neplatný čas začátku, musí být kratší než doba trvání audioknihy",
|
"MessageChapterErrorStartGteDuration": "Neplatný čas začátku, musí být kratší než doba trvání audioknihy",
|
||||||
|
|
@ -765,7 +780,7 @@
|
||||||
"MessageConfirmMarkItemNotFinished": "Opravdu chcete označit \"{0}\" jako nedokončené?",
|
"MessageConfirmMarkItemNotFinished": "Opravdu chcete označit \"{0}\" jako nedokončené?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Opravdu chcete označit všechny knihy z této série jako dokončené?",
|
"MessageConfirmMarkSeriesFinished": "Opravdu chcete označit všechny knihy z této série jako dokončené?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Opravdu chcete označit všechny knihy z této série jako nedokončené?",
|
"MessageConfirmMarkSeriesNotFinished": "Opravdu chcete označit všechny knihy z této série jako nedokončené?",
|
||||||
"MessageConfirmNotificationTestTrigger": "Spustit toto oznámení s testovacími daty?",
|
"MessageConfirmNotificationTestTrigger": "Vyvolat tuto notifikaci s testovacími daty?",
|
||||||
"MessageConfirmPurgeCache": "Vyčistit mezipaměť odstraní celý adresář na adrese <code>/metadata/cache</code>. <br /><br />Určitě chcete odstranit adresář mezipaměti?",
|
"MessageConfirmPurgeCache": "Vyčistit mezipaměť odstraní celý adresář na adrese <code>/metadata/cache</code>. <br /><br />Určitě chcete odstranit adresář mezipaměti?",
|
||||||
"MessageConfirmPurgeItemsCache": "Vyčištění mezipaměti položek odstraní celý adresář <code>/metadata/cache/items</code>.<br />Jste si jistí?",
|
"MessageConfirmPurgeItemsCache": "Vyčištění mezipaměti položek odstraní celý adresář <code>/metadata/cache/items</code>.<br />Jste si jistí?",
|
||||||
"MessageConfirmQuickEmbed": "Varování! Rychlé vložení nezálohuje vaše zvukové soubory. Ujistěte se, že máte zálohu zvukových souborů. <br><br>Chcete pokračovat?",
|
"MessageConfirmQuickEmbed": "Varování! Rychlé vložení nezálohuje vaše zvukové soubory. Ujistěte se, že máte zálohu zvukových souborů. <br><br>Chcete pokračovat?",
|
||||||
|
|
@ -801,6 +816,8 @@
|
||||||
"MessageFeedURLWillBe": "URL zdroje bude {0}",
|
"MessageFeedURLWillBe": "URL zdroje bude {0}",
|
||||||
"MessageFetching": "Načítání...",
|
"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é.",
|
"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í!",
|
"MessageImportantNotice": "Důležité upozornění!",
|
||||||
"MessageInsertChapterBelow": "Vložit kapitolu níže",
|
"MessageInsertChapterBelow": "Vložit kapitolu níže",
|
||||||
"MessageInvalidAsin": "Neplatný ASIN",
|
"MessageInvalidAsin": "Neplatný ASIN",
|
||||||
|
|
@ -837,7 +854,7 @@
|
||||||
"MessageNoItems": "Žádné položky",
|
"MessageNoItems": "Žádné položky",
|
||||||
"MessageNoItemsFound": "Nebyly nalezeny žádné položky",
|
"MessageNoItemsFound": "Nebyly nalezeny žádné položky",
|
||||||
"MessageNoListeningSessions": "Žádné poslechové relace",
|
"MessageNoListeningSessions": "Žádné poslechové relace",
|
||||||
"MessageNoLogs": "Žádné logy",
|
"MessageNoLogs": "Žádné záznamy událostí",
|
||||||
"MessageNoMediaProgress": "Žádný průběh médií",
|
"MessageNoMediaProgress": "Žádný průběh médií",
|
||||||
"MessageNoNotifications": "Žádná oznámení",
|
"MessageNoNotifications": "Žádná oznámení",
|
||||||
"MessageNoPodcastFeed": "Neplatný podcast: Žádný kanál",
|
"MessageNoPodcastFeed": "Neplatný podcast: Žádný kanál",
|
||||||
|
|
@ -867,7 +884,7 @@
|
||||||
"MessageRemoveEpisodes": "Odstranit {0} epizodu",
|
"MessageRemoveEpisodes": "Odstranit {0} epizodu",
|
||||||
"MessageRemoveFromPlayerQueue": "Odstranit z fronty přehrávače",
|
"MessageRemoveFromPlayerQueue": "Odstranit z fronty přehrávače",
|
||||||
"MessageRemoveUserWarning": "Opravdu chcete trvale smazat uživatele \"{0}\"?",
|
"MessageRemoveUserWarning": "Opravdu chcete trvale smazat uživatele \"{0}\"?",
|
||||||
"MessageReportBugsAndContribute": "Hlásit chyby, žádat o funkce a přispívat",
|
"MessageReportBugsAndContribute": "Nahlašte chyby, vyžádejte si funkce a přispěte na",
|
||||||
"MessageResetChaptersConfirm": "Opravdu chcete resetovat kapitoly a vrátit zpět provedené změny?",
|
"MessageResetChaptersConfirm": "Opravdu chcete resetovat kapitoly a vrátit zpět provedené změny?",
|
||||||
"MessageRestoreBackupConfirm": "Opravdu chcete obnovit zálohu vytvořenou dne",
|
"MessageRestoreBackupConfirm": "Opravdu chcete obnovit zálohu vytvořenou dne",
|
||||||
"MessageRestoreBackupWarning": "Obnovení zálohy přepíše celou databázi umístěnou v /config a obálku obrázků v /metadata/items & /metadata/authors.<br /><br />Backups nezmění žádné soubory ve složkách knihovny. Pokud jste povolili nastavení serveru pro ukládání obrázků obalu a metadat do složek knihovny, nebudou zálohovány ani přepsány.<br /><br />Všichni klienti používající váš server budou automaticky obnoveni.",
|
"MessageRestoreBackupWarning": "Obnovení zálohy přepíše celou databázi umístěnou v /config a obálku obrázků v /metadata/items & /metadata/authors.<br /><br />Backups nezmění žádné soubory ve složkách knihovny. Pokud jste povolili nastavení serveru pro ukládání obrázků obalu a metadat do složek knihovny, nebudou zálohovány ani přepsány.<br /><br />Všichni klienti používající váš server budou automaticky obnoveni.",
|
||||||
|
|
@ -900,7 +917,7 @@
|
||||||
"MessageTaskNoFilesToScan": "Žádné soubory k prohledání",
|
"MessageTaskNoFilesToScan": "Žádné soubory k prohledání",
|
||||||
"MessageTaskOpmlImport": "Import OPML",
|
"MessageTaskOpmlImport": "Import OPML",
|
||||||
"MessageTaskOpmlImportDescription": "Vytváření podcastů z {0} RSS feedů",
|
"MessageTaskOpmlImportDescription": "Vytváření podcastů z {0} RSS feedů",
|
||||||
"MessageTaskOpmlImportFeed": "Importní zdroj OPML",
|
"MessageTaskOpmlImportFeed": "Import OPML feedu",
|
||||||
"MessageTaskOpmlImportFeedDescription": "Importování RSS feedu \"{0}\"",
|
"MessageTaskOpmlImportFeedDescription": "Importování RSS feedu \"{0}\"",
|
||||||
"MessageTaskOpmlImportFeedFailed": "Nepodařilo se získat kanál podcastu",
|
"MessageTaskOpmlImportFeedFailed": "Nepodařilo se získat kanál podcastu",
|
||||||
"MessageTaskOpmlImportFeedPodcastDescription": "Vytváření podcastu \"{0}\"",
|
"MessageTaskOpmlImportFeedPodcastDescription": "Vytváření podcastu \"{0}\"",
|
||||||
|
|
@ -940,6 +957,7 @@
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Aktivováno když je automatické stahování pozastaveno z důvodu příliš mnoho neůspěšných pokusů",
|
"NotificationOnRSSFeedDisabledDescription": "Aktivováno když je automatické stahování pozastaveno z důvodu příliš mnoho neůspěšných pokusů",
|
||||||
"NotificationOnRSSFeedFailedDescription": "Aktivováno když selže RSS kanál pro stahování epizod",
|
"NotificationOnRSSFeedFailedDescription": "Aktivováno když selže RSS kanál pro stahování epizod",
|
||||||
"NotificationOnTestDescription": "Akce pro otestování upozorňovacího systému",
|
"NotificationOnTestDescription": "Akce pro otestování upozorňovacího systému",
|
||||||
|
"PlaceholderBulkChapterInput": "Zadejte název kapitoly nebo použije číslování (např. 'Epizoda 1', 'Kapitola 10', '1.')",
|
||||||
"PlaceholderNewCollection": "Nový název kolekce",
|
"PlaceholderNewCollection": "Nový název kolekce",
|
||||||
"PlaceholderNewFolderPath": "Nová cesta ke složce",
|
"PlaceholderNewFolderPath": "Nová cesta ke složce",
|
||||||
"PlaceholderNewPlaylist": "Nový název seznamu přehrávání",
|
"PlaceholderNewPlaylist": "Nový název seznamu přehrávání",
|
||||||
|
|
@ -993,8 +1011,12 @@
|
||||||
"ToastBookmarkCreateFailed": "Vytvoření záložky se nezdařilo",
|
"ToastBookmarkCreateFailed": "Vytvoření záložky se nezdařilo",
|
||||||
"ToastBookmarkCreateSuccess": "Přidána záložka",
|
"ToastBookmarkCreateSuccess": "Přidána záložka",
|
||||||
"ToastBookmarkRemoveSuccess": "Záložka odstraněna",
|
"ToastBookmarkRemoveSuccess": "Záložka odstraněna",
|
||||||
|
"ToastBulkChapterInvalidCount": "Zadejte číslo mezi 1 a 150",
|
||||||
"ToastCachePurgeFailed": "Nepodařilo se vyčistit mezipaměť",
|
"ToastCachePurgeFailed": "Nepodařilo se vyčistit mezipaměť",
|
||||||
"ToastCachePurgeSuccess": "Vyrovnávací paměť úspěšně vyčištěna",
|
"ToastCachePurgeSuccess": "Vyrovnávací paměť úspěšně vyčištěna",
|
||||||
|
"ToastChapterLocked": "Kapitola je uzamčena.",
|
||||||
|
"ToastChapterStartTimeAdjusted": "Začátek kapitoly posunut o {0} sekund",
|
||||||
|
"ToastChaptersAllLocked": "Všechny kapitoly jsou uzamčeny. Pro posun kapitol některé odemkněte.",
|
||||||
"ToastChaptersHaveErrors": "Kapitoly obsahují chyby",
|
"ToastChaptersHaveErrors": "Kapitoly obsahují chyby",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "Nesprávná délka posunu. Čas začátku poslední kapitoly by přesáhl dobu trvání této audioknihy.",
|
"ToastChaptersInvalidShiftAmountLast": "Nesprávná délka posunu. Čas začátku poslední kapitoly by přesáhl dobu trvání této audioknihy.",
|
||||||
"ToastChaptersInvalidShiftAmountStart": "Nesprávná délka posunu. První kapitola by měla nulovou nebo zápornou délku a byla by přepsána druhou kapitolou. Zvětšete čas začátku druhé kapitoly.",
|
"ToastChaptersInvalidShiftAmountStart": "Nesprávná délka posunu. První kapitola by měla nulovou nebo zápornou délku a byla by přepsána druhou kapitolou. Zvětšete čas začátku druhé kapitoly.",
|
||||||
|
|
@ -1004,6 +1026,8 @@
|
||||||
"ToastCollectionItemsAddFailed": "Přidávání položek do kolekce selhalo",
|
"ToastCollectionItemsAddFailed": "Přidávání položek do kolekce selhalo",
|
||||||
"ToastCollectionRemoveSuccess": "Kolekce odstraněna",
|
"ToastCollectionRemoveSuccess": "Kolekce odstraněna",
|
||||||
"ToastCollectionUpdateSuccess": "Kolekce aktualizována",
|
"ToastCollectionUpdateSuccess": "Kolekce aktualizována",
|
||||||
|
"ToastConnectionNotAvailable": "Připojení není k dispozici. Zkuste to prosím znovu později",
|
||||||
|
"ToastCoverSearchFailed": "Hledání obálky se nezdařilo",
|
||||||
"ToastCoverUpdateFailed": "Aktualizace obálky selhala",
|
"ToastCoverUpdateFailed": "Aktualizace obálky selhala",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Datum a čas jsou chybné nebo nekompletní",
|
"ToastDateTimeInvalidOrIncomplete": "Datum a čas jsou chybné nebo nekompletní",
|
||||||
"ToastDeleteFileFailed": "Nepodařilo se smazat soubor",
|
"ToastDeleteFileFailed": "Nepodařilo se smazat soubor",
|
||||||
|
|
@ -1013,7 +1037,7 @@
|
||||||
"ToastDeviceTestEmailFailed": "Odeslání testovacího emailu selhalo",
|
"ToastDeviceTestEmailFailed": "Odeslání testovacího emailu selhalo",
|
||||||
"ToastDeviceTestEmailSuccess": "Testovací email byl odeslán",
|
"ToastDeviceTestEmailSuccess": "Testovací email byl odeslán",
|
||||||
"ToastEmailSettingsUpdateSuccess": "Nastavení emailu aktualizována",
|
"ToastEmailSettingsUpdateSuccess": "Nastavení emailu aktualizována",
|
||||||
"ToastEncodeCancelFailed": "Chyba zrušení kódování",
|
"ToastEncodeCancelFailed": "Zrušení encodování selhalo",
|
||||||
"ToastEncodeCancelSucces": "Kódování zrušeno",
|
"ToastEncodeCancelSucces": "Kódování zrušeno",
|
||||||
"ToastEpisodeDownloadQueueClearFailed": "Vyčištění fronty selhalo",
|
"ToastEpisodeDownloadQueueClearFailed": "Vyčištění fronty selhalo",
|
||||||
"ToastEpisodeDownloadQueueClearSuccess": "Fronta stahování epizod je prázdná",
|
"ToastEpisodeDownloadQueueClearSuccess": "Fronta stahování epizod je prázdná",
|
||||||
|
|
@ -1028,6 +1052,7 @@
|
||||||
"ToastInvalidImageUrl": "Neplatná URL obrázku",
|
"ToastInvalidImageUrl": "Neplatná URL obrázku",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "Neplatný maximální počet epizod ke stažení",
|
"ToastInvalidMaxEpisodesToDownload": "Neplatný maximální počet epizod ke stažení",
|
||||||
"ToastInvalidUrl": "Neplatná URL",
|
"ToastInvalidUrl": "Neplatná URL",
|
||||||
|
"ToastInvalidUrls": "Alespoň jedna URL je neplatná",
|
||||||
"ToastItemCoverUpdateSuccess": "Obálka předmětu byl aktualizována",
|
"ToastItemCoverUpdateSuccess": "Obálka předmětu byl aktualizována",
|
||||||
"ToastItemDeletedFailed": "Smazání položky selhalo",
|
"ToastItemDeletedFailed": "Smazání položky selhalo",
|
||||||
"ToastItemDeletedSuccess": "Položka smazána",
|
"ToastItemDeletedSuccess": "Položka smazána",
|
||||||
|
|
@ -1077,6 +1102,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Seznam přehrávání aktualizován",
|
"ToastPlaylistUpdateSuccess": "Seznam přehrávání aktualizován",
|
||||||
"ToastPodcastCreateFailed": "Vytvoření podcastu se nezdařilo",
|
"ToastPodcastCreateFailed": "Vytvoření podcastu se nezdařilo",
|
||||||
"ToastPodcastCreateSuccess": "Podcast byl úspěšně vytvořen",
|
"ToastPodcastCreateSuccess": "Podcast byl úspěšně vytvořen",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Epizoda aktualizována",
|
||||||
"ToastPodcastGetFeedFailed": "Chyba při získání podcastového feedu",
|
"ToastPodcastGetFeedFailed": "Chyba při získání podcastového feedu",
|
||||||
"ToastPodcastNoEpisodesInFeed": "Žádné epizody nenalezeny v RSS feedu",
|
"ToastPodcastNoEpisodesInFeed": "Žádné epizody nenalezeny v RSS feedu",
|
||||||
"ToastPodcastNoRssFeed": "Podcast nemá RSS feed",
|
"ToastPodcastNoRssFeed": "Podcast nemá RSS feed",
|
||||||
|
|
@ -1109,7 +1135,7 @@
|
||||||
"ToastSessionDeleteFailed": "Nepodařilo se smazat relaci",
|
"ToastSessionDeleteFailed": "Nepodařilo se smazat relaci",
|
||||||
"ToastSessionDeleteSuccess": "Relace smazána",
|
"ToastSessionDeleteSuccess": "Relace smazána",
|
||||||
"ToastSleepTimerDone": "Uspání knížky ... zZzzZz",
|
"ToastSleepTimerDone": "Uspání knížky ... zZzzZz",
|
||||||
"ToastSlugMustChange": "Slug (URL) obsahuje chybné znaky",
|
"ToastSlugMustChange": "Slug obsahuje chybné znaky",
|
||||||
"ToastSlugRequired": "Slug (URL) je vyžadována",
|
"ToastSlugRequired": "Slug (URL) je vyžadována",
|
||||||
"ToastSocketConnected": "Socket připojen",
|
"ToastSocketConnected": "Socket připojen",
|
||||||
"ToastSocketDisconnected": "Socket odpojen",
|
"ToastSocketDisconnected": "Socket odpojen",
|
||||||
|
|
@ -1127,5 +1153,13 @@
|
||||||
"ToastUserPasswordChangeSuccess": "Heslo bylo změněno úspěšně",
|
"ToastUserPasswordChangeSuccess": "Heslo bylo změněno úspěšně",
|
||||||
"ToastUserPasswordMismatch": "Hesla se neschodují",
|
"ToastUserPasswordMismatch": "Hesla se neschodují",
|
||||||
"ToastUserPasswordMustChange": "Nové heslo se musí lišit od předchozího",
|
"ToastUserPasswordMustChange": "Nové heslo se musí lišit od předchozího",
|
||||||
"ToastUserRootRequireName": "Musíte zadat uživatelské jméno root"
|
"ToastUserRootRequireName": "Musíte zadat uživatelské jméno root",
|
||||||
|
"TooltipAddChapters": "Přidat kapitolu/y",
|
||||||
|
"TooltipAddOneSecond": "Přidat 1 sekundu",
|
||||||
|
"TooltipAdjustChapterStart": "Kliknutím upravte začátek",
|
||||||
|
"TooltipLockAllChapters": "Uzamknout všechny kapitoly",
|
||||||
|
"TooltipLockChapter": "Uzamknout kapitolu (Shift+klik pro rozsah)",
|
||||||
|
"TooltipSubtractOneSecond": "Odečíst 1 sekundu",
|
||||||
|
"TooltipUnlockAllChapters": "Odemknout všechny kapitoly",
|
||||||
|
"TooltipUnlockChapter": "Odemknout kapitolu (Shift+klik pro rozsah)"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1001,13 +1001,14 @@
|
||||||
"ToastCollectionItemsAddFailed": "Genstand(e) tilføjet til kollektion fejlet",
|
"ToastCollectionItemsAddFailed": "Genstand(e) tilføjet til kollektion fejlet",
|
||||||
"ToastCollectionRemoveSuccess": "Samling fjernet",
|
"ToastCollectionRemoveSuccess": "Samling fjernet",
|
||||||
"ToastCollectionUpdateSuccess": "Samling opdateret",
|
"ToastCollectionUpdateSuccess": "Samling opdateret",
|
||||||
|
"ToastConnectionNotAvailable": "Forbindelse mislykkedes. Prøv igen senere",
|
||||||
"ToastCoverUpdateFailed": "Cover opdatering fejlede",
|
"ToastCoverUpdateFailed": "Cover opdatering fejlede",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Dato og tid er forkert eller ufærdig",
|
"ToastDateTimeInvalidOrIncomplete": "Dato og tid er ugyldig eller ufærdig",
|
||||||
"ToastDeleteFileFailed": "Slet fil fejlede",
|
"ToastDeleteFileFailed": "Sletning af fil fejlede",
|
||||||
"ToastDeleteFileSuccess": "Fil slettet",
|
"ToastDeleteFileSuccess": "Fil slettet",
|
||||||
"ToastDeviceAddFailed": "Fejlede at tilføje enhed",
|
"ToastDeviceAddFailed": "Tilføjelse af enhed Fejlede",
|
||||||
"ToastDeviceNameAlreadyExists": "Elæser enhed med det navn eksistere allerede",
|
"ToastDeviceNameAlreadyExists": "E-læser enhed med det navn eksistere allerede",
|
||||||
"ToastDeviceTestEmailFailed": "Fejlede at sende test mail",
|
"ToastDeviceTestEmailFailed": "Afsendelse af test mail fejlede",
|
||||||
"ToastDeviceTestEmailSuccess": "Test mail sendt",
|
"ToastDeviceTestEmailSuccess": "Test mail sendt",
|
||||||
"ToastEmailSettingsUpdateSuccess": "Mail indstillinger opdateret",
|
"ToastEmailSettingsUpdateSuccess": "Mail indstillinger opdateret",
|
||||||
"ToastEncodeCancelFailed": "Fejlede at afbryde indkodning",
|
"ToastEncodeCancelFailed": "Fejlede at afbryde indkodning",
|
||||||
|
|
@ -1017,21 +1018,23 @@
|
||||||
"ToastEpisodeUpdateSuccess": "{0} afsnit opdateret",
|
"ToastEpisodeUpdateSuccess": "{0} afsnit opdateret",
|
||||||
"ToastErrorCannotShare": "Kan ikke dele på denne enhed",
|
"ToastErrorCannotShare": "Kan ikke dele på denne enhed",
|
||||||
"ToastFailedToCreate": "Oprettelsen mislykkedes",
|
"ToastFailedToCreate": "Oprettelsen mislykkedes",
|
||||||
"ToastFailedToLoadData": "Fejlede at indlæse data",
|
"ToastFailedToDelete": "Sletning fejlede",
|
||||||
|
"ToastFailedToLoadData": "Indlæsning af data fejlede",
|
||||||
"ToastFailedToMatch": "Fejlet match",
|
"ToastFailedToMatch": "Fejlet match",
|
||||||
"ToastFailedToShare": "Fejlet deling",
|
"ToastFailedToShare": "Deling fejlede",
|
||||||
"ToastFailedToUpdate": "Fejlet opdatering",
|
"ToastFailedToUpdate": "Fejlet opdatering",
|
||||||
"ToastInvalidImageUrl": "Forkert billede URL",
|
"ToastInvalidImageUrl": "Ugyldig billede URL",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "Forkert maks afsnit at hente",
|
"ToastInvalidMaxEpisodesToDownload": "Ugyldigt maks afsnit at hente",
|
||||||
"ToastInvalidUrl": "Forkert URL",
|
"ToastInvalidUrl": "Ugyldig URL",
|
||||||
"ToastItemCoverUpdateSuccess": "Varens omslag opdateret",
|
"ToastInvalidUrls": "En eller flere URLer er ugyldige",
|
||||||
"ToastItemDeletedFailed": "Fejlede at slette genstand",
|
"ToastItemCoverUpdateSuccess": "Omslag opdateret",
|
||||||
|
"ToastItemDeletedFailed": "Sletning af genstand fejlede",
|
||||||
"ToastItemDeletedSuccess": "Genstand slettet",
|
"ToastItemDeletedSuccess": "Genstand slettet",
|
||||||
"ToastItemDetailsUpdateSuccess": "Varedetaljer opdateret",
|
"ToastItemDetailsUpdateSuccess": "Detaljer opdateret",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Mislykkedes markering som afsluttet",
|
"ToastItemMarkedAsFinishedFailed": "Markering som afsluttet mislykkedes",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Vare markeret som afsluttet",
|
"ToastItemMarkedAsFinishedSuccess": "Element markeret som afsluttet",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Mislykkedes markering som ikke afsluttet",
|
"ToastItemMarkedAsNotFinishedFailed": "Markering som ikke afsluttet mislykkedes",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Vare markeret som ikke afsluttet",
|
"ToastItemMarkedAsNotFinishedSuccess": "Element markeret som ikke afsluttet",
|
||||||
"ToastItemUpdateSuccess": "Genstand opdateret",
|
"ToastItemUpdateSuccess": "Genstand opdateret",
|
||||||
"ToastLibraryCreateFailed": "Oprettelse af bibliotek mislykkedes",
|
"ToastLibraryCreateFailed": "Oprettelse af bibliotek mislykkedes",
|
||||||
"ToastLibraryCreateSuccess": "Bibliotek \"{0}\" oprettet",
|
"ToastLibraryCreateSuccess": "Bibliotek \"{0}\" oprettet",
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
"ButtonNext": "Vor",
|
"ButtonNext": "Vor",
|
||||||
"ButtonNextChapter": "Nächstes Kapitel",
|
"ButtonNextChapter": "Nächstes Kapitel",
|
||||||
"ButtonNextItemInQueue": "Das nächste Element in der Warteschlange",
|
"ButtonNextItemInQueue": "Das nächste Element in der Warteschlange",
|
||||||
"ButtonOk": "Ok",
|
"ButtonOk": "OK",
|
||||||
"ButtonOpenFeed": "Feed öffnen",
|
"ButtonOpenFeed": "Feed öffnen",
|
||||||
"ButtonOpenManager": "Manager öffnen",
|
"ButtonOpenManager": "Manager öffnen",
|
||||||
"ButtonPause": "Pausieren",
|
"ButtonPause": "Pausieren",
|
||||||
|
|
@ -75,7 +75,7 @@
|
||||||
"ButtonQuickMatch": "Schnellabgleich",
|
"ButtonQuickMatch": "Schnellabgleich",
|
||||||
"ButtonReScan": "Neu scannen",
|
"ButtonReScan": "Neu scannen",
|
||||||
"ButtonRead": "Lesen",
|
"ButtonRead": "Lesen",
|
||||||
"ButtonReadLess": "weniger Anzeigen",
|
"ButtonReadLess": "Weniger Anzeigen",
|
||||||
"ButtonReadMore": "Mehr Anzeigen",
|
"ButtonReadMore": "Mehr Anzeigen",
|
||||||
"ButtonRefresh": "Neu Laden",
|
"ButtonRefresh": "Neu Laden",
|
||||||
"ButtonRemove": "Entfernen",
|
"ButtonRemove": "Entfernen",
|
||||||
|
|
@ -104,7 +104,7 @@
|
||||||
"ButtonStartM4BEncode": "M4B-Kodierung starten",
|
"ButtonStartM4BEncode": "M4B-Kodierung starten",
|
||||||
"ButtonStartMetadataEmbed": "Metadateneinbettung starten",
|
"ButtonStartMetadataEmbed": "Metadateneinbettung starten",
|
||||||
"ButtonStats": "Statistiken",
|
"ButtonStats": "Statistiken",
|
||||||
"ButtonSubmit": "Ok",
|
"ButtonSubmit": "Absenden",
|
||||||
"ButtonTest": "Test",
|
"ButtonTest": "Test",
|
||||||
"ButtonUnlinkOpenId": "OpenID trennen",
|
"ButtonUnlinkOpenId": "OpenID trennen",
|
||||||
"ButtonUpload": "Hochladen",
|
"ButtonUpload": "Hochladen",
|
||||||
|
|
@ -116,7 +116,7 @@
|
||||||
"ButtonViewAll": "Alles anzeigen",
|
"ButtonViewAll": "Alles anzeigen",
|
||||||
"ButtonYes": "Ja",
|
"ButtonYes": "Ja",
|
||||||
"ErrorUploadFetchMetadataAPI": "Fehler beim Abrufen der Metadaten",
|
"ErrorUploadFetchMetadataAPI": "Fehler beim Abrufen der Metadaten",
|
||||||
"ErrorUploadFetchMetadataNoResults": "Metadaten konnten nicht abgerufen werden. Versuche den Titel und oder den Autor zu aktualisieren",
|
"ErrorUploadFetchMetadataNoResults": "Metadaten konnten nicht abgerufen werden. Versuche den Titel und/oder den Autor zu aktualisieren.",
|
||||||
"ErrorUploadLacksTitle": "Es muss ein Titel eingegeben werden",
|
"ErrorUploadLacksTitle": "Es muss ein Titel eingegeben werden",
|
||||||
"HeaderAccount": "Konto",
|
"HeaderAccount": "Konto",
|
||||||
"HeaderAddCustomMetadataProvider": "Benutzerdefinierten Metadatenanbieter hinzufügen",
|
"HeaderAddCustomMetadataProvider": "Benutzerdefinierten Metadatenanbieter hinzufügen",
|
||||||
|
|
@ -127,6 +127,7 @@
|
||||||
"HeaderAudiobookTools": "Hörbuch-Dateiverwaltungswerkzeuge",
|
"HeaderAudiobookTools": "Hörbuch-Dateiverwaltungswerkzeuge",
|
||||||
"HeaderAuthentication": "Authentifizierung",
|
"HeaderAuthentication": "Authentifizierung",
|
||||||
"HeaderBackups": "Sicherungen",
|
"HeaderBackups": "Sicherungen",
|
||||||
|
"HeaderBulkChapterModal": "Mehrere Kapitel hinzufügen",
|
||||||
"HeaderChangePassword": "Passwort ändern",
|
"HeaderChangePassword": "Passwort ändern",
|
||||||
"HeaderChapters": "Kapitel",
|
"HeaderChapters": "Kapitel",
|
||||||
"HeaderChooseAFolder": "Wähle einen Ordner",
|
"HeaderChooseAFolder": "Wähle einen Ordner",
|
||||||
|
|
@ -137,13 +138,13 @@
|
||||||
"HeaderCustomMessageOnLogin": "Benutzerdefinierte Nachricht für die Anmeldung",
|
"HeaderCustomMessageOnLogin": "Benutzerdefinierte Nachricht für die Anmeldung",
|
||||||
"HeaderCustomMetadataProviders": "Benutzerdefinierte Metadatenanbieter",
|
"HeaderCustomMetadataProviders": "Benutzerdefinierte Metadatenanbieter",
|
||||||
"HeaderDetails": "Details",
|
"HeaderDetails": "Details",
|
||||||
"HeaderDownloadQueue": "Download Warteschlange",
|
"HeaderDownloadQueue": "Download-Warteschlange",
|
||||||
"HeaderEbookFiles": "E-Buch-Dateien",
|
"HeaderEbookFiles": "E-Book-Dateien",
|
||||||
"HeaderEmail": "E-Mail",
|
"HeaderEmail": "E-Mail",
|
||||||
"HeaderEmailSettings": "E-Mail-Einstellungen",
|
"HeaderEmailSettings": "E-Mail-Einstellungen",
|
||||||
"HeaderEpisodes": "Episoden",
|
"HeaderEpisodes": "Episoden",
|
||||||
"HeaderEreaderDevices": "E-Reader Geräte",
|
"HeaderEreaderDevices": "E-Reader Geräte",
|
||||||
"HeaderEreaderSettings": "Einstellungen zum Lesen",
|
"HeaderEreaderSettings": "E-Reader-Einstellungen",
|
||||||
"HeaderFiles": "Dateien",
|
"HeaderFiles": "Dateien",
|
||||||
"HeaderFindChapters": "Kapitel suchen",
|
"HeaderFindChapters": "Kapitel suchen",
|
||||||
"HeaderIgnoredFiles": "Ignorierte Dateien",
|
"HeaderIgnoredFiles": "Ignorierte Dateien",
|
||||||
|
|
@ -308,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Löschen von der Festplatte + Datenbank (deaktivieren um nur aus der Datenbank zu entfernen)",
|
"LabelDeleteFromFileSystemCheckbox": "Löschen von der Festplatte + Datenbank (deaktivieren um nur aus der Datenbank zu entfernen)",
|
||||||
"LabelDescription": "Beschreibung",
|
"LabelDescription": "Beschreibung",
|
||||||
"LabelDeselectAll": "Alles abwählen",
|
"LabelDeselectAll": "Alles abwählen",
|
||||||
|
"LabelDetectedPattern": "Erkanntes Muster:",
|
||||||
"LabelDevice": "Gerät",
|
"LabelDevice": "Gerät",
|
||||||
"LabelDeviceInfo": "Geräteinformationen",
|
"LabelDeviceInfo": "Geräteinformationen",
|
||||||
"LabelDeviceIsAvailableTo": "Dem Gerät ist es möglich zu ...",
|
"LabelDeviceIsAvailableTo": "Dem Gerät ist es möglich zu ...",
|
||||||
|
|
@ -376,6 +378,7 @@
|
||||||
"LabelFilterByUser": "Nach Benutzern filtern",
|
"LabelFilterByUser": "Nach Benutzern filtern",
|
||||||
"LabelFindEpisodes": "Episoden suchen",
|
"LabelFindEpisodes": "Episoden suchen",
|
||||||
"LabelFinished": "Beendet",
|
"LabelFinished": "Beendet",
|
||||||
|
"LabelFinishedDate": "Beendet {0}",
|
||||||
"LabelFolder": "Ordner",
|
"LabelFolder": "Ordner",
|
||||||
"LabelFolders": "Verzeichnisse",
|
"LabelFolders": "Verzeichnisse",
|
||||||
"LabelFontBold": "Fett",
|
"LabelFontBold": "Fett",
|
||||||
|
|
@ -433,7 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Keine {0}",
|
"LabelLibraryFilterSublistEmpty": "Keine {0}",
|
||||||
"LabelLibraryItem": "Bibliothekseintrag",
|
"LabelLibraryItem": "Bibliothekseintrag",
|
||||||
"LabelLibraryName": "Bibliotheksname",
|
"LabelLibraryName": "Bibliotheksname",
|
||||||
"LabelLibrarySortByProgress": "Fortschritt aktualisiert",
|
"LabelLibrarySortByProgress": "Fortschritt: Zuletzt aktualisiert",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Fortschritt: Beendet",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Fortschritt: Gestartet",
|
||||||
"LabelLimit": "Begrenzung",
|
"LabelLimit": "Begrenzung",
|
||||||
"LabelLineSpacing": "Zeilenabstand",
|
"LabelLineSpacing": "Zeilenabstand",
|
||||||
"LabelListenAgain": "Erneut anhören",
|
"LabelListenAgain": "Erneut anhören",
|
||||||
|
|
@ -472,6 +477,7 @@
|
||||||
"LabelNewestAuthors": "Neueste Autoren",
|
"LabelNewestAuthors": "Neueste Autoren",
|
||||||
"LabelNewestEpisodes": "Neueste Episoden",
|
"LabelNewestEpisodes": "Neueste Episoden",
|
||||||
"LabelNextBackupDate": "Nächstes Sicherungsdatum",
|
"LabelNextBackupDate": "Nächstes Sicherungsdatum",
|
||||||
|
"LabelNextChapters": "Das nächste Kapitel ist:",
|
||||||
"LabelNextScheduledRun": "Nächster planmäßiger Durchlauf",
|
"LabelNextScheduledRun": "Nächster planmäßiger Durchlauf",
|
||||||
"LabelNoApiKeys": "Keine API-Schlüssel vorhanden",
|
"LabelNoApiKeys": "Keine API-Schlüssel vorhanden",
|
||||||
"LabelNoCustomMetadataProviders": "Keine benutzerdefinierten Metadata Anbieter",
|
"LabelNoCustomMetadataProviders": "Keine benutzerdefinierten Metadata Anbieter",
|
||||||
|
|
@ -489,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Maximale Größe der Warteschlange für die Benachrichtigungsereignisse",
|
"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.",
|
"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",
|
"LabelNumberOfBooks": "Anzahl der Hörbücher",
|
||||||
|
"LabelNumberOfChapters": "Anzahl an Kapiteln:",
|
||||||
"LabelNumberOfEpisodes": "Anzahl der Episoden",
|
"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:",
|
"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.",
|
"LabelOpenIDClaims": "Lass die folgenden Optionen leer, um die erweiterte Zuweisung von Gruppen und Berechtigungen zu deaktivieren und automatisch die 'User'-Gruppe zuzuweisen.",
|
||||||
|
|
@ -581,8 +588,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeumorphes Design mit Holzeinlegeböden",
|
"LabelSettingsBookshelfViewHelp": "Skeumorphes Design mit Holzeinlegeböden",
|
||||||
"LabelSettingsChromecastSupport": "Chromecastunterstützung",
|
"LabelSettingsChromecastSupport": "Chromecastunterstützung",
|
||||||
"LabelSettingsDateFormat": "Datumsformat",
|
"LabelSettingsDateFormat": "Datumsformat",
|
||||||
"LabelSettingsEnableWatcher": "Bibliotheken automatisch nach Änderungen durchsuchen",
|
"LabelSettingsEnableWatcher": "Bibliotheken automatisch nach Änderungen überwachen",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Bibliothek automatisch nach Änderungen durchsuchen",
|
"LabelSettingsEnableWatcherForLibrary": "Bibliothek automatisch auf Änderungen überwachen",
|
||||||
"LabelSettingsEnableWatcherHelp": "Aktiviert das automatische Hinzufügen/Aktualisieren von Elementen, wenn Dateiänderungen erkannt werden. *Erfordert einen Server-Neustart",
|
"LabelSettingsEnableWatcherHelp": "Aktiviert das automatische Hinzufügen/Aktualisieren von Elementen, wenn Dateiänderungen erkannt werden. *Erfordert einen Server-Neustart",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Skriptinhalte in Epubs zulassen",
|
"LabelSettingsEpubsAllowScriptedContent": "Skriptinhalte in Epubs zulassen",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Erlaube Epub-Dateien, Skripte auszuführen. Es wird empfohlen, diese Einstellung deaktiviert zu lassen, es sei denn, du vertraust der Quelle der Epub-Dateien.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Erlaube Epub-Dateien, Skripte auszuführen. Es wird empfohlen, diese Einstellung deaktiviert zu lassen, es sei denn, du vertraust der Quelle der Epub-Dateien.",
|
||||||
|
|
@ -631,6 +638,7 @@
|
||||||
"LabelStartTime": "Startzeit",
|
"LabelStartTime": "Startzeit",
|
||||||
"LabelStarted": "Gestartet",
|
"LabelStarted": "Gestartet",
|
||||||
"LabelStartedAt": "Gestartet am",
|
"LabelStartedAt": "Gestartet am",
|
||||||
|
"LabelStartedDate": "Angefangen am {0}",
|
||||||
"LabelStatsAudioTracks": "Audiodateien",
|
"LabelStatsAudioTracks": "Audiodateien",
|
||||||
"LabelStatsAuthors": "Autoren",
|
"LabelStatsAuthors": "Autoren",
|
||||||
"LabelStatsBestDay": "Bester Tag",
|
"LabelStatsBestDay": "Bester Tag",
|
||||||
|
|
@ -728,7 +736,7 @@
|
||||||
"LabelYourProgress": "Fortschritt",
|
"LabelYourProgress": "Fortschritt",
|
||||||
"MessageAddToPlayerQueue": "Zur Abspielwarteliste hinzufügen",
|
"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.",
|
"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>.",
|
"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.",
|
"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.",
|
"MessageAuthenticationSecurityMessage": "Die Anmeldung wurde abgesichert. Benutzersitzungen werden getrennt, alle Benutzer müssen sich erneut anmelden.",
|
||||||
|
|
@ -745,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Keine Ergebnisse für Filter \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Keine Ergebnisse für Filter \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Keine Ergebnisse für die Abfrage",
|
"MessageBookshelfNoResultsForQuery": "Keine Ergebnisse für die Abfrage",
|
||||||
"MessageBookshelfNoSeries": "Keine Serien vorhanden",
|
"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)",
|
"MessageChapterEndIsAfter": "Ungültige Kapitelendzeit: Kapitelende > Mediumende (Kapitelende liegt nach dem Ende des Mediums)",
|
||||||
"MessageChapterErrorFirstNotZero": "Ungültige Kapitelstartzeit: Das erste Kapitel muss bei 0 beginnen",
|
"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)",
|
"MessageChapterErrorStartGteDuration": "Ungültige Kapitelstartzeit: Kapitelanfang > Mediumlänge (Kapitelanfang liegt zeitlich nach dem Ende des Mediums -> Lösung: Kapitelanfang < Mediumlänge)",
|
||||||
|
|
@ -807,6 +816,7 @@
|
||||||
"MessageFeedURLWillBe": "Feed-URL wird {0} sein",
|
"MessageFeedURLWillBe": "Feed-URL wird {0} sein",
|
||||||
"MessageFetching": "Wird abgerufen …",
|
"MessageFetching": "Wird abgerufen …",
|
||||||
"MessageForceReScanDescription": "Durchsucht alle Dateien erneut, wie bei einem frischen Scan. ID3-Tags von Audiodateien, OPF-Dateien und Textdateien werden neu durchsucht.",
|
"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}",
|
"MessageHeatmapNoListeningSessions": "Keine Hörsitzungen am {0}",
|
||||||
"MessageImportantNotice": "Wichtiger Hinweis!",
|
"MessageImportantNotice": "Wichtiger Hinweis!",
|
||||||
"MessageInsertChapterBelow": "Kapitel unten einfügen",
|
"MessageInsertChapterBelow": "Kapitel unten einfügen",
|
||||||
|
|
@ -878,7 +888,7 @@
|
||||||
"MessageResetChaptersConfirm": "Kapitel und vorgenommenen Änderungen werden zurückgesetzt und rückgängig gemacht! Bist du dir sicher?",
|
"MessageResetChaptersConfirm": "Kapitel und vorgenommenen Änderungen werden zurückgesetzt und rückgängig gemacht! Bist du dir sicher?",
|
||||||
"MessageRestoreBackupConfirm": "Bist du dir sicher, dass du die Sicherung wiederherstellen willst, welche am",
|
"MessageRestoreBackupConfirm": "Bist du dir sicher, dass du die Sicherung wiederherstellen willst, welche am",
|
||||||
"MessageRestoreBackupWarning": "Bei der Wiederherstellung einer Sicherung wird die gesamte Datenbank unter /config und die Titelbilder in /metadata/items und /metadata/authors überschrieben.<br /><br />Bei der Sicherung werden keine Dateien in deinen Bibliotheksordnern verändert. Wenn du die Servereinstellungen aktiviert hast, um Cover und Metadaten in deinen Bibliotheksordnern zu speichern, werden diese nicht gesichert oder überschrieben.<br /><br />Alle Clients, die Ihren Server nutzen, werden automatisch aktualisiert.",
|
"MessageRestoreBackupWarning": "Bei der Wiederherstellung einer Sicherung wird die gesamte Datenbank unter /config und die Titelbilder in /metadata/items und /metadata/authors überschrieben.<br /><br />Bei der Sicherung werden keine Dateien in deinen Bibliotheksordnern verändert. Wenn du die Servereinstellungen aktiviert hast, um Cover und Metadaten in deinen Bibliotheksordnern zu speichern, werden diese nicht gesichert oder überschrieben.<br /><br />Alle Clients, die Ihren Server nutzen, werden automatisch aktualisiert.",
|
||||||
"MessageScheduleLibraryScanNote": "Für die meisten Anwender wird empfohlen, diese Funktion deaktiviert und die Ordnerüberwachung aktiviert zu lassen. Die Ordnerüberwachung wird Änderungen in den Bibliotheksordnern automatisch erkennen. Die Ordnerüberwachung funktioniert nicht mit allen Dateisystemen (wie NFS), hier kann stattdessen die automatischen Bibliothekssuchen verwendet werden.",
|
"MessageScheduleLibraryScanNote": "Für die meisten Benutzer wird empfohlen, diese Funktion deaktiviert und die Einstellung „Bibliothek automatisch auf Änderungen überwachen“ aktiviert zu lassen – dadurch werden Änderungen in Ihren Bibliotheksordnern automatisch erkannt. Aktivieren Sie diese Funktion, wenn „Bibliothek automatisch auf Änderungen überwachen“ für Ihr Dateisystem (wie NFS) nicht funktioniert.",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Immer {0} um {1} ausführen",
|
"MessageScheduleRunEveryWeekdayAtTime": "Immer {0} um {1} ausführen",
|
||||||
"MessageSearchResultsFor": "Suchergebnisse für",
|
"MessageSearchResultsFor": "Suchergebnisse für",
|
||||||
"MessageSelected": "{0} ausgewählt",
|
"MessageSelected": "{0} ausgewählt",
|
||||||
|
|
@ -947,6 +957,7 @@
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Wird ausgeführt wenn automatische Downloads von Episoden wegen zu vielen fehlgeschlagenen Versuchen deaktiviert sind",
|
"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",
|
"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",
|
"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",
|
"PlaceholderNewCollection": "Neuer Sammlungsname",
|
||||||
"PlaceholderNewFolderPath": "Neuer Ordnerpfad",
|
"PlaceholderNewFolderPath": "Neuer Ordnerpfad",
|
||||||
"PlaceholderNewPlaylist": "Neuer Wiedergabelistenname",
|
"PlaceholderNewPlaylist": "Neuer Wiedergabelistenname",
|
||||||
|
|
@ -1000,17 +1011,23 @@
|
||||||
"ToastBookmarkCreateFailed": "Lesezeichen konnte nicht erstellt werden",
|
"ToastBookmarkCreateFailed": "Lesezeichen konnte nicht erstellt werden",
|
||||||
"ToastBookmarkCreateSuccess": "Lesezeichen hinzugefügt",
|
"ToastBookmarkCreateSuccess": "Lesezeichen hinzugefügt",
|
||||||
"ToastBookmarkRemoveSuccess": "Lesezeichen entfernt",
|
"ToastBookmarkRemoveSuccess": "Lesezeichen entfernt",
|
||||||
|
"ToastBulkChapterInvalidCount": "Gebe eine Zahl zwischen 1 und 150 ein",
|
||||||
"ToastCachePurgeFailed": "Cache leeren fehlgeschlagen",
|
"ToastCachePurgeFailed": "Cache leeren fehlgeschlagen",
|
||||||
"ToastCachePurgeSuccess": "Cache geleert",
|
"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",
|
"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.",
|
"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",
|
"ToastChaptersMustHaveTitles": "Kapitel benötigen eindeutige Namen",
|
||||||
"ToastChaptersRemoved": "Kapitel entfernt",
|
"ToastChaptersRemoved": "Kapitel entfernt",
|
||||||
"ToastChaptersUpdated": "Kapitel aktualisiert",
|
"ToastChaptersUpdated": "Kapitel aktualisiert",
|
||||||
"ToastCollectionItemsAddFailed": "Das Hinzufügen von Element(en) zur Sammlung ist fehlgeschlagen",
|
"ToastCollectionItemsAddFailed": "Das Hinzufügen von Element(en) zur Sammlung ist fehlgeschlagen",
|
||||||
"ToastCollectionRemoveSuccess": "Sammlung entfernt",
|
"ToastCollectionRemoveSuccess": "Sammlung entfernt",
|
||||||
"ToastCollectionUpdateSuccess": "Sammlung aktualisiert",
|
"ToastCollectionUpdateSuccess": "Sammlung aktualisiert",
|
||||||
|
"ToastConnectionNotAvailable": "Verbindung nicht möglich. Bitte später erneut versuchen",
|
||||||
|
"ToastCoverSearchFailed": "Cover-Suche fehlgeschlagen",
|
||||||
"ToastCoverUpdateFailed": "Cover-Update fehlgeschlagen",
|
"ToastCoverUpdateFailed": "Cover-Update fehlgeschlagen",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Datum und Zeit sind ungültig oder unvollständig",
|
"ToastDateTimeInvalidOrIncomplete": "Datum und Zeit sind ungültig oder unvollständig",
|
||||||
"ToastDeleteFileFailed": "Die Datei konnte nicht gelöscht werden",
|
"ToastDeleteFileFailed": "Die Datei konnte nicht gelöscht werden",
|
||||||
|
|
@ -1035,7 +1052,7 @@
|
||||||
"ToastInvalidImageUrl": "Ungültiger Bild URL",
|
"ToastInvalidImageUrl": "Ungültiger Bild URL",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "Ungültige Max. Anzahl an Episoden zum Herunterladen",
|
"ToastInvalidMaxEpisodesToDownload": "Ungültige Max. Anzahl an Episoden zum Herunterladen",
|
||||||
"ToastInvalidUrl": "Ungültiger URL",
|
"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",
|
"ToastItemCoverUpdateSuccess": "Titelbild aktualisiert",
|
||||||
"ToastItemDeletedFailed": "Fehler beim löschen des Artikels",
|
"ToastItemDeletedFailed": "Fehler beim löschen des Artikels",
|
||||||
"ToastItemDeletedSuccess": "Artikel gelöscht",
|
"ToastItemDeletedSuccess": "Artikel gelöscht",
|
||||||
|
|
@ -1085,6 +1102,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Wiedergabeliste aktualisiert",
|
"ToastPlaylistUpdateSuccess": "Wiedergabeliste aktualisiert",
|
||||||
"ToastPodcastCreateFailed": "Podcast konnte nicht erstellt werden",
|
"ToastPodcastCreateFailed": "Podcast konnte nicht erstellt werden",
|
||||||
"ToastPodcastCreateSuccess": "Podcast erstellt",
|
"ToastPodcastCreateSuccess": "Podcast erstellt",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Podcast-Folge aktualisiert",
|
||||||
"ToastPodcastGetFeedFailed": "Fehler beim abrufen des Podcast Feeds",
|
"ToastPodcastGetFeedFailed": "Fehler beim abrufen des Podcast Feeds",
|
||||||
"ToastPodcastNoEpisodesInFeed": "Keine Episoden in RSS Feed gefunden",
|
"ToastPodcastNoEpisodesInFeed": "Keine Episoden in RSS Feed gefunden",
|
||||||
"ToastPodcastNoRssFeed": "Podcast enthält keinen RSS Feed",
|
"ToastPodcastNoRssFeed": "Podcast enthält keinen RSS Feed",
|
||||||
|
|
@ -1135,5 +1153,13 @@
|
||||||
"ToastUserPasswordChangeSuccess": "Passwort erfolgreich verändert",
|
"ToastUserPasswordChangeSuccess": "Passwort erfolgreich verändert",
|
||||||
"ToastUserPasswordMismatch": "Passwörter stimmen nicht überein",
|
"ToastUserPasswordMismatch": "Passwörter stimmen nicht überein",
|
||||||
"ToastUserPasswordMustChange": "Neues Passwort muss sich von altem Passwort unterscheiden",
|
"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)"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -378,6 +378,7 @@
|
||||||
"LabelFilterByUser": "Filter by User",
|
"LabelFilterByUser": "Filter by User",
|
||||||
"LabelFindEpisodes": "Find Episodes",
|
"LabelFindEpisodes": "Find Episodes",
|
||||||
"LabelFinished": "Finished",
|
"LabelFinished": "Finished",
|
||||||
|
"LabelFinishedDate": "Finished {0}",
|
||||||
"LabelFolder": "Folder",
|
"LabelFolder": "Folder",
|
||||||
"LabelFolders": "Folders",
|
"LabelFolders": "Folders",
|
||||||
"LabelFontBold": "Bold",
|
"LabelFontBold": "Bold",
|
||||||
|
|
@ -435,7 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "No {0}",
|
"LabelLibraryFilterSublistEmpty": "No {0}",
|
||||||
"LabelLibraryItem": "Library Item",
|
"LabelLibraryItem": "Library Item",
|
||||||
"LabelLibraryName": "Library Name",
|
"LabelLibraryName": "Library Name",
|
||||||
"LabelLibrarySortByProgress": "Progress Updated",
|
"LabelLibrarySortByProgress": "Progress: Last Updated",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Progress: Finished",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Progress: Started",
|
||||||
"LabelLimit": "Limit",
|
"LabelLimit": "Limit",
|
||||||
"LabelLineSpacing": "Line spacing",
|
"LabelLineSpacing": "Line spacing",
|
||||||
"LabelListenAgain": "Listen Again",
|
"LabelListenAgain": "Listen Again",
|
||||||
|
|
@ -585,8 +588,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeumorphic design with wooden shelves",
|
"LabelSettingsBookshelfViewHelp": "Skeumorphic design with wooden shelves",
|
||||||
"LabelSettingsChromecastSupport": "Chromecast support",
|
"LabelSettingsChromecastSupport": "Chromecast support",
|
||||||
"LabelSettingsDateFormat": "Date Format",
|
"LabelSettingsDateFormat": "Date Format",
|
||||||
"LabelSettingsEnableWatcher": "Automatically scan libraries for changes",
|
"LabelSettingsEnableWatcher": "Automatically watch libraries for changes",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Automatically scan library for changes",
|
"LabelSettingsEnableWatcherForLibrary": "Automatically watch library for changes",
|
||||||
"LabelSettingsEnableWatcherHelp": "Enables the automatic adding/updating of items when file changes are detected. *Requires server restart",
|
"LabelSettingsEnableWatcherHelp": "Enables the automatic adding/updating of items when file changes are detected. *Requires server restart",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Allow scripted content in epubs",
|
"LabelSettingsEpubsAllowScriptedContent": "Allow scripted content in epubs",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Allow epub files to execute scripts. It is recommended to keep this setting disabled unless you trust the source of the epub files.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Allow epub files to execute scripts. It is recommended to keep this setting disabled unless you trust the source of the epub files.",
|
||||||
|
|
@ -635,6 +638,7 @@
|
||||||
"LabelStartTime": "Start Time",
|
"LabelStartTime": "Start Time",
|
||||||
"LabelStarted": "Started",
|
"LabelStarted": "Started",
|
||||||
"LabelStartedAt": "Started At",
|
"LabelStartedAt": "Started At",
|
||||||
|
"LabelStartedDate": "Started {0}",
|
||||||
"LabelStatsAudioTracks": "Audio Tracks",
|
"LabelStatsAudioTracks": "Audio Tracks",
|
||||||
"LabelStatsAuthors": "Authors",
|
"LabelStatsAuthors": "Authors",
|
||||||
"LabelStatsBestDay": "Best Day",
|
"LabelStatsBestDay": "Best Day",
|
||||||
|
|
@ -884,7 +888,7 @@
|
||||||
"MessageResetChaptersConfirm": "Are you sure you want to reset chapters and undo the changes you made?",
|
"MessageResetChaptersConfirm": "Are you sure you want to reset chapters and undo the changes you made?",
|
||||||
"MessageRestoreBackupConfirm": "Are you sure you want to restore the backup created on",
|
"MessageRestoreBackupConfirm": "Are you sure you want to restore the backup created on",
|
||||||
"MessageRestoreBackupWarning": "Restoring a backup will overwrite the entire database located at /config and cover images in /metadata/items & /metadata/authors.<br /><br />Backups do not modify any files in your library folders. If you have enabled server settings to store cover art and metadata in your library folders then those are not backed up or overwritten.<br /><br />All clients using your server will be automatically refreshed.",
|
"MessageRestoreBackupWarning": "Restoring a backup will overwrite the entire database located at /config and cover images in /metadata/items & /metadata/authors.<br /><br />Backups do not modify any files in your library folders. If you have enabled server settings to store cover art and metadata in your library folders then those are not backed up or overwritten.<br /><br />All clients using your server will be automatically refreshed.",
|
||||||
"MessageScheduleLibraryScanNote": "For most users, it is recommended to leave this feature disabled and keep the folder watcher setting enabled. The folder watcher will automatically detect changes in your library folders. The folder watcher doesn't work for every file system (like NFS) so scheduled library scans can be used instead.",
|
"MessageScheduleLibraryScanNote": "For most users, it is recommended to leave this feature disabled and keep the \"Automatically watch library for changes\" setting enabled - it will automatically detect changes in your library folders. Enable this feature if \"Automatically watch library for changes\" does not work for your file system (like NFS).",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Run every {0} at {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Run every {0} at {1}",
|
||||||
"MessageSearchResultsFor": "Search results for",
|
"MessageSearchResultsFor": "Search results for",
|
||||||
"MessageSelected": "{0} selected",
|
"MessageSelected": "{0} selected",
|
||||||
|
|
@ -1022,6 +1026,8 @@
|
||||||
"ToastCollectionItemsAddFailed": "Item(s) added to collection failed",
|
"ToastCollectionItemsAddFailed": "Item(s) added to collection failed",
|
||||||
"ToastCollectionRemoveSuccess": "Collection removed",
|
"ToastCollectionRemoveSuccess": "Collection removed",
|
||||||
"ToastCollectionUpdateSuccess": "Collection updated",
|
"ToastCollectionUpdateSuccess": "Collection updated",
|
||||||
|
"ToastConnectionNotAvailable": "Connection not available. Please try again later",
|
||||||
|
"ToastCoverSearchFailed": "Cover search failed",
|
||||||
"ToastCoverUpdateFailed": "Cover update failed",
|
"ToastCoverUpdateFailed": "Cover update failed",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Date and time is invalid or incomplete",
|
"ToastDateTimeInvalidOrIncomplete": "Date and time is invalid or incomplete",
|
||||||
"ToastDeleteFileFailed": "Failed to delete file",
|
"ToastDeleteFileFailed": "Failed to delete file",
|
||||||
|
|
@ -1096,6 +1102,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Playlist updated",
|
"ToastPlaylistUpdateSuccess": "Playlist updated",
|
||||||
"ToastPodcastCreateFailed": "Failed to create podcast",
|
"ToastPodcastCreateFailed": "Failed to create podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast created successfully",
|
"ToastPodcastCreateSuccess": "Podcast created successfully",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Episode updated",
|
||||||
"ToastPodcastGetFeedFailed": "Failed to get podcast feed",
|
"ToastPodcastGetFeedFailed": "Failed to get podcast feed",
|
||||||
"ToastPodcastNoEpisodesInFeed": "No episodes found in RSS feed",
|
"ToastPodcastNoEpisodesInFeed": "No episodes found in RSS feed",
|
||||||
"ToastPodcastNoRssFeed": "Podcast does not have an RSS feed",
|
"ToastPodcastNoRssFeed": "Podcast does not have an RSS feed",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"ButtonAdd": "Añadir",
|
"ButtonAdd": "Añadir",
|
||||||
|
"ButtonAddApiKey": "Añadir clave API",
|
||||||
"ButtonAddChapters": "Añadir capítulos",
|
"ButtonAddChapters": "Añadir capítulos",
|
||||||
"ButtonAddDevice": "Añadir dispositivo",
|
"ButtonAddDevice": "Añadir dispositivo",
|
||||||
"ButtonAddLibrary": "Añadir biblioteca",
|
"ButtonAddLibrary": "Añadir biblioteca",
|
||||||
|
|
@ -20,6 +21,7 @@
|
||||||
"ButtonChooseAFolder": "Elegir una carpeta",
|
"ButtonChooseAFolder": "Elegir una carpeta",
|
||||||
"ButtonChooseFiles": "Elegir archivos",
|
"ButtonChooseFiles": "Elegir archivos",
|
||||||
"ButtonClearFilter": "Quitar filtros",
|
"ButtonClearFilter": "Quitar filtros",
|
||||||
|
"ButtonClose": "Cerrar",
|
||||||
"ButtonCloseFeed": "Cerrar suministro",
|
"ButtonCloseFeed": "Cerrar suministro",
|
||||||
"ButtonCloseSession": "Cerrar la sesión abierta",
|
"ButtonCloseSession": "Cerrar la sesión abierta",
|
||||||
"ButtonCollections": "Colecciones",
|
"ButtonCollections": "Colecciones",
|
||||||
|
|
@ -119,6 +121,7 @@
|
||||||
"HeaderAccount": "Cuenta",
|
"HeaderAccount": "Cuenta",
|
||||||
"HeaderAddCustomMetadataProvider": "Añadir proveedor de metadatos personalizado",
|
"HeaderAddCustomMetadataProvider": "Añadir proveedor de metadatos personalizado",
|
||||||
"HeaderAdvanced": "Avanzado",
|
"HeaderAdvanced": "Avanzado",
|
||||||
|
"HeaderApiKeys": "Claves API",
|
||||||
"HeaderAppriseNotificationSettings": "Configuración de notificaciones de Apprise",
|
"HeaderAppriseNotificationSettings": "Configuración de notificaciones de Apprise",
|
||||||
"HeaderAudioTracks": "Pistas de audio",
|
"HeaderAudioTracks": "Pistas de audio",
|
||||||
"HeaderAudiobookTools": "Herramientas de Gestión de Archivos de Audiolibro",
|
"HeaderAudiobookTools": "Herramientas de Gestión de Archivos de Audiolibro",
|
||||||
|
|
@ -163,6 +166,7 @@
|
||||||
"HeaderMetadataOrderOfPrecedence": "Orden de precedencia de metadatos",
|
"HeaderMetadataOrderOfPrecedence": "Orden de precedencia de metadatos",
|
||||||
"HeaderMetadataToEmbed": "Metadatos para Insertar",
|
"HeaderMetadataToEmbed": "Metadatos para Insertar",
|
||||||
"HeaderNewAccount": "Cuenta nueva",
|
"HeaderNewAccount": "Cuenta nueva",
|
||||||
|
"HeaderNewApiKey": "Nueva clave API",
|
||||||
"HeaderNewLibrary": "Biblioteca nueva",
|
"HeaderNewLibrary": "Biblioteca nueva",
|
||||||
"HeaderNotificationCreate": "Crear notificación",
|
"HeaderNotificationCreate": "Crear notificación",
|
||||||
"HeaderNotificationUpdate": "Notificación de actualización",
|
"HeaderNotificationUpdate": "Notificación de actualización",
|
||||||
|
|
@ -196,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Funcionalidades experimentales",
|
"HeaderSettingsExperimental": "Funcionalidades experimentales",
|
||||||
"HeaderSettingsGeneral": "Generales",
|
"HeaderSettingsGeneral": "Generales",
|
||||||
"HeaderSettingsScanner": "Escáner",
|
"HeaderSettingsScanner": "Escáner",
|
||||||
|
"HeaderSettingsSecurity": "Seguridad",
|
||||||
"HeaderSettingsWebClient": "Cliente web",
|
"HeaderSettingsWebClient": "Cliente web",
|
||||||
"HeaderSleepTimer": "Temporizador de apagado",
|
"HeaderSleepTimer": "Temporizador de apagado",
|
||||||
"HeaderStatsLargestItems": "Elementos más grandes",
|
"HeaderStatsLargestItems": "Elementos más grandes",
|
||||||
|
|
@ -207,6 +212,7 @@
|
||||||
"HeaderTableOfContents": "Sumario",
|
"HeaderTableOfContents": "Sumario",
|
||||||
"HeaderTools": "Herramientas",
|
"HeaderTools": "Herramientas",
|
||||||
"HeaderUpdateAccount": "Actualizar cuenta",
|
"HeaderUpdateAccount": "Actualizar cuenta",
|
||||||
|
"HeaderUpdateApiKey": "Actualizar clave API",
|
||||||
"HeaderUpdateAuthor": "Actualizar autor",
|
"HeaderUpdateAuthor": "Actualizar autor",
|
||||||
"HeaderUpdateDetails": "Actualizar detalles",
|
"HeaderUpdateDetails": "Actualizar detalles",
|
||||||
"HeaderUpdateLibrary": "Actualizar biblioteca",
|
"HeaderUpdateLibrary": "Actualizar biblioteca",
|
||||||
|
|
|
||||||
|
|
@ -490,13 +490,13 @@
|
||||||
"LabelStatsDaysListened": "Kuulatud päevad",
|
"LabelStatsDaysListened": "Kuulatud päevad",
|
||||||
"LabelStatsHours": "Tunnid",
|
"LabelStatsHours": "Tunnid",
|
||||||
"LabelStatsInARow": "järjest",
|
"LabelStatsInARow": "järjest",
|
||||||
"LabelStatsItemsFinished": "Lõpetatud üksused",
|
"LabelStatsItemsFinished": "Lõpetatud raamatud",
|
||||||
"LabelStatsItemsInLibrary": "Üksused raamatukogus",
|
"LabelStatsItemsInLibrary": "Üksused raamatukogus",
|
||||||
"LabelStatsMinutes": "minuteid",
|
"LabelStatsMinutes": "minuteid",
|
||||||
"LabelStatsMinutesListening": "Kuulamise minutid",
|
"LabelStatsMinutesListening": "Kuulamise minutid",
|
||||||
"LabelStatsOverallDays": "Kokku päevad",
|
"LabelStatsOverallDays": "Kokku päevad",
|
||||||
"LabelStatsOverallHours": "Kokku tunnid",
|
"LabelStatsOverallHours": "Kokku tunnid",
|
||||||
"LabelStatsWeekListening": "Nädala kuulamine",
|
"LabelStatsWeekListening": "Nädala keskmine",
|
||||||
"LabelSubtitle": "Alapealkiri",
|
"LabelSubtitle": "Alapealkiri",
|
||||||
"LabelSupportedFileTypes": "Toetatud failitüübid",
|
"LabelSupportedFileTypes": "Toetatud failitüübid",
|
||||||
"LabelTag": "Silt",
|
"LabelTag": "Silt",
|
||||||
|
|
@ -561,7 +561,8 @@
|
||||||
"MessageAppriseDescription": "Selle funktsiooni kasutamiseks peate käivitama <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> eksemplari või API, mis töötleb samu päringuid. <br />Apprise API URL peaks olema täielik URL-rada teatise saatmiseks, näiteks kui teie API eksemplar töötab aadressil <code>http://192.168.1.1:8337</code>, siis peaksite sisestama <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Selle funktsiooni kasutamiseks peate käivitama <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> eksemplari või API, mis töötleb samu päringuid. <br />Apprise API URL peaks olema täielik URL-rada teatise saatmiseks, näiteks kui teie API eksemplar töötab aadressil <code>http://192.168.1.1:8337</code>, siis peaksite sisestama <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageBackupsDescription": "Varukoopiad hõlmavad kasutajaid, kasutajate edenemist, raamatukogu üksikasju, serveri seadeid ja kaustades <code>/metadata/items</code> ja <code>/metadata/authors</code> salvestatud pilte. Varukoopiad ei hõlma ühtegi teie raamatukogu kaustades olevat faili.",
|
"MessageBackupsDescription": "Varukoopiad hõlmavad kasutajaid, kasutajate edenemist, raamatukogu üksikasju, serveri seadeid ja kaustades <code>/metadata/items</code> ja <code>/metadata/authors</code> salvestatud pilte. Varukoopiad ei hõlma ühtegi teie raamatukogu kaustades olevat faili.",
|
||||||
"MessageBatchQuickMatchDescription": "Kiire sobitamine üritab lisada valitud üksustele puuduvad kaaned ja metaandmed. Luba allpool olevad valikud, et lubada Kiire sobitamine'il üle kirjutada olemasolevaid kaasi ja/või metaandmeid.",
|
"MessageBatchQuickMatchDescription": "Kiire sobitamine üritab lisada valitud üksustele puuduvad kaaned ja metaandmed. Luba allpool olevad valikud, et lubada Kiire sobitamine'il üle kirjutada olemasolevaid kaasi ja/või metaandmeid.",
|
||||||
"MessageBookshelfNoCollections": "Te pole veel ühtegi kogumit teinud",
|
"MessageBookshelfNoCollections": "Te pole veel ühtegi kollektsiooni teinud",
|
||||||
|
"MessageBookshelfNoCollectionsHelp": "Kollektsioonid on avalikud. Kõik kasutajad kellel on olemas ligipääs raamatukogule saavad neid näha.",
|
||||||
"MessageBookshelfNoRSSFeeds": "Ühtegi RSS-i voogu pole avatud",
|
"MessageBookshelfNoRSSFeeds": "Ühtegi RSS-i voogu pole avatud",
|
||||||
"MessageBookshelfNoResultsForFilter": "Filtrile \"{0}: {1}\" pole tulemusi",
|
"MessageBookshelfNoResultsForFilter": "Filtrile \"{0}: {1}\" pole tulemusi",
|
||||||
"MessageBookshelfNoSeries": "Teil pole ühtegi seeriat",
|
"MessageBookshelfNoSeries": "Teil pole ühtegi seeriat",
|
||||||
|
|
@ -600,6 +601,7 @@
|
||||||
"MessageConfirmRenameTagMergeNote": "Märkus: See silt on juba olemas, nii et need ühendatakse.",
|
"MessageConfirmRenameTagMergeNote": "Märkus: See silt on juba olemas, nii et need ühendatakse.",
|
||||||
"MessageConfirmRenameTagWarning": "Hoiatus! Sarnane silt erineva puhvriga on juba olemas \"{0}\".",
|
"MessageConfirmRenameTagWarning": "Hoiatus! Sarnane silt erineva puhvriga on juba olemas \"{0}\".",
|
||||||
"MessageConfirmSendEbookToDevice": "Olete kindel, et soovite saata {0} e-raamatu \"{1}\" seadmesse \"{2}\"?",
|
"MessageConfirmSendEbookToDevice": "Olete kindel, et soovite saata {0} e-raamatu \"{1}\" seadmesse \"{2}\"?",
|
||||||
|
"MessageDaysListenedInTheLastYear": "{0} päeva kuuldud viimase aasta jooksul",
|
||||||
"MessageDownloadingEpisode": "Episoodi allalaadimine",
|
"MessageDownloadingEpisode": "Episoodi allalaadimine",
|
||||||
"MessageDragFilesIntoTrackOrder": "Lohistage failid õigesse järjekorda",
|
"MessageDragFilesIntoTrackOrder": "Lohistage failid õigesse järjekorda",
|
||||||
"MessageEmbedFinished": "Manustamine lõpetatud!",
|
"MessageEmbedFinished": "Manustamine lõpetatud!",
|
||||||
|
|
|
||||||
1
client/strings/eu.json
Normal file
1
client/strings/eu.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{}
|
||||||
28
client/strings/fa.json
Normal file
28
client/strings/fa.json
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"ButtonAdd": "افزودن",
|
||||||
|
"ButtonAuthors": "ناشر",
|
||||||
|
"ButtonBack": "بازگشت",
|
||||||
|
"ButtonCancel": "انصراف",
|
||||||
|
"ButtonClearFilter": "حذف صافی",
|
||||||
|
"ButtonCloseFeed": "بستن فید",
|
||||||
|
"ButtonCollections": "مجموعه ها",
|
||||||
|
"ButtonCreate": "ساختن",
|
||||||
|
"ButtonDelete": "حذف",
|
||||||
|
"ButtonHome": "خانه",
|
||||||
|
"ButtonIssues": "مشکلات",
|
||||||
|
"ButtonLatest": "جدیدترین",
|
||||||
|
"ButtonLibrary": "کتابخانه",
|
||||||
|
"ButtonOk": "تایید",
|
||||||
|
"ButtonOpenFeed": "باز کردن فید",
|
||||||
|
"ButtonPause": "توقف",
|
||||||
|
"ButtonPlay": "پخش",
|
||||||
|
"ButtonPlaylists": "لیست پخش",
|
||||||
|
"ButtonRead": "خواندن",
|
||||||
|
"ButtonReadLess": "خواندن کمتر",
|
||||||
|
"ButtonReadMore": "خواندن بیشتر",
|
||||||
|
"ButtonRemove": "حذف",
|
||||||
|
"ButtonSave": "ذخیره",
|
||||||
|
"ButtonSearch": "جستجو",
|
||||||
|
"ButtonSeries": "مجموعه",
|
||||||
|
"ButtonSubmit": "ثبت"
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"ButtonAdd": "Lisää",
|
"ButtonAdd": "Lisää",
|
||||||
|
"ButtonAddApiKey": "Lisää API avain",
|
||||||
"ButtonAddChapters": "Lisää lukuja",
|
"ButtonAddChapters": "Lisää lukuja",
|
||||||
"ButtonAddDevice": "Lisää laite",
|
"ButtonAddDevice": "Lisää laite",
|
||||||
"ButtonAddLibrary": "Lisää kirjasto",
|
"ButtonAddLibrary": "Lisää kirjasto",
|
||||||
|
|
@ -20,6 +21,7 @@
|
||||||
"ButtonChooseAFolder": "Valitse kansio",
|
"ButtonChooseAFolder": "Valitse kansio",
|
||||||
"ButtonChooseFiles": "Valitse tiedostot",
|
"ButtonChooseFiles": "Valitse tiedostot",
|
||||||
"ButtonClearFilter": "Poista suodatus",
|
"ButtonClearFilter": "Poista suodatus",
|
||||||
|
"ButtonClose": "Sulje",
|
||||||
"ButtonCloseFeed": "Sulje syöte",
|
"ButtonCloseFeed": "Sulje syöte",
|
||||||
"ButtonCloseSession": "Sulje Avoin Sessio",
|
"ButtonCloseSession": "Sulje Avoin Sessio",
|
||||||
"ButtonCollections": "Kokoelmat",
|
"ButtonCollections": "Kokoelmat",
|
||||||
|
|
@ -119,11 +121,13 @@
|
||||||
"HeaderAccount": "Tili",
|
"HeaderAccount": "Tili",
|
||||||
"HeaderAddCustomMetadataProvider": "Lisää mukautettu metadata tarjoaja",
|
"HeaderAddCustomMetadataProvider": "Lisää mukautettu metadata tarjoaja",
|
||||||
"HeaderAdvanced": "Edistynyt",
|
"HeaderAdvanced": "Edistynyt",
|
||||||
|
"HeaderApiKeys": "API avaimet",
|
||||||
"HeaderAppriseNotificationSettings": "Apprise-ilmoitusasetukset",
|
"HeaderAppriseNotificationSettings": "Apprise-ilmoitusasetukset",
|
||||||
"HeaderAudioTracks": "Ääniraidat",
|
"HeaderAudioTracks": "Ääniraidat",
|
||||||
"HeaderAudiobookTools": "Äänikirjojen tiedostonhallintatyökalut",
|
"HeaderAudiobookTools": "Äänikirjojen tiedostonhallintatyökalut",
|
||||||
"HeaderAuthentication": "Todennus",
|
"HeaderAuthentication": "Todennus",
|
||||||
"HeaderBackups": "Varmuuskopiot",
|
"HeaderBackups": "Varmuuskopiot",
|
||||||
|
"HeaderBulkChapterModal": "Lisää useita kappaleita",
|
||||||
"HeaderChangePassword": "Vaihda salasana",
|
"HeaderChangePassword": "Vaihda salasana",
|
||||||
"HeaderChapters": "Luvut",
|
"HeaderChapters": "Luvut",
|
||||||
"HeaderChooseAFolder": "Valitse kansio",
|
"HeaderChooseAFolder": "Valitse kansio",
|
||||||
|
|
@ -162,6 +166,7 @@
|
||||||
"HeaderMetadataOrderOfPrecedence": "Metadatan tärkeysjärjestys",
|
"HeaderMetadataOrderOfPrecedence": "Metadatan tärkeysjärjestys",
|
||||||
"HeaderMetadataToEmbed": "Sisällytettävä metadata",
|
"HeaderMetadataToEmbed": "Sisällytettävä metadata",
|
||||||
"HeaderNewAccount": "Uusi tili",
|
"HeaderNewAccount": "Uusi tili",
|
||||||
|
"HeaderNewApiKey": "Uusi API avain",
|
||||||
"HeaderNewLibrary": "Uusi kirjasto",
|
"HeaderNewLibrary": "Uusi kirjasto",
|
||||||
"HeaderNotificationCreate": "Luo ilmoitus",
|
"HeaderNotificationCreate": "Luo ilmoitus",
|
||||||
"HeaderNotificationUpdate": "Päivitä ilmoitus",
|
"HeaderNotificationUpdate": "Päivitä ilmoitus",
|
||||||
|
|
@ -177,6 +182,7 @@
|
||||||
"HeaderPlaylist": "Soittolista",
|
"HeaderPlaylist": "Soittolista",
|
||||||
"HeaderPlaylistItems": "Soittolistan kohteet",
|
"HeaderPlaylistItems": "Soittolistan kohteet",
|
||||||
"HeaderPodcastsToAdd": "Lisättävät podcastit",
|
"HeaderPodcastsToAdd": "Lisättävät podcastit",
|
||||||
|
"HeaderPresets": "Esivalinnat",
|
||||||
"HeaderPreviewCover": "Esikatsele kansikuvaa",
|
"HeaderPreviewCover": "Esikatsele kansikuvaa",
|
||||||
"HeaderRSSFeedGeneral": "RSS yksityiskohdat",
|
"HeaderRSSFeedGeneral": "RSS yksityiskohdat",
|
||||||
"HeaderRSSFeedIsOpen": "RSS syöte on avoinna",
|
"HeaderRSSFeedIsOpen": "RSS syöte on avoinna",
|
||||||
|
|
@ -194,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Kokeelliset ominaisuudet",
|
"HeaderSettingsExperimental": "Kokeelliset ominaisuudet",
|
||||||
"HeaderSettingsGeneral": "Yleiset",
|
"HeaderSettingsGeneral": "Yleiset",
|
||||||
"HeaderSettingsScanner": "Skannaaja",
|
"HeaderSettingsScanner": "Skannaaja",
|
||||||
|
"HeaderSettingsSecurity": "Turvallisuus",
|
||||||
"HeaderSettingsWebClient": "Webasiakasohjelma",
|
"HeaderSettingsWebClient": "Webasiakasohjelma",
|
||||||
"HeaderSleepTimer": "Uniajastin",
|
"HeaderSleepTimer": "Uniajastin",
|
||||||
"HeaderStatsLargestItems": "Suurimmat kohteet",
|
"HeaderStatsLargestItems": "Suurimmat kohteet",
|
||||||
|
|
@ -205,6 +212,7 @@
|
||||||
"HeaderTableOfContents": "Sisällysluettelo",
|
"HeaderTableOfContents": "Sisällysluettelo",
|
||||||
"HeaderTools": "Työkalut",
|
"HeaderTools": "Työkalut",
|
||||||
"HeaderUpdateAccount": "Päivitä tili",
|
"HeaderUpdateAccount": "Päivitä tili",
|
||||||
|
"HeaderUpdateApiKey": "Päivitä API avain",
|
||||||
"HeaderUpdateAuthor": "Päivitä tekijä",
|
"HeaderUpdateAuthor": "Päivitä tekijä",
|
||||||
"HeaderUpdateDetails": "Päivitä yksityiskohdat",
|
"HeaderUpdateDetails": "Päivitä yksityiskohdat",
|
||||||
"HeaderUpdateLibrary": "Päivitä kirjasto",
|
"HeaderUpdateLibrary": "Päivitä kirjasto",
|
||||||
|
|
@ -214,7 +222,7 @@
|
||||||
"LabelAbridged": "Lyhennetty",
|
"LabelAbridged": "Lyhennetty",
|
||||||
"LabelAbridgedChecked": "Lyhennetty (tarkistettu)",
|
"LabelAbridgedChecked": "Lyhennetty (tarkistettu)",
|
||||||
"LabelAbridgedUnchecked": "Lyhentämätön (tarkistamaton)",
|
"LabelAbridgedUnchecked": "Lyhentämätön (tarkistamaton)",
|
||||||
"LabelAccessibleBy": "Saavutettavissa:",
|
"LabelAccessibleBy": "Saavutettavissa",
|
||||||
"LabelAccountType": "Tilin tyyppi",
|
"LabelAccountType": "Tilin tyyppi",
|
||||||
"LabelAccountTypeAdmin": "Järjestelmänvalvoja",
|
"LabelAccountTypeAdmin": "Järjestelmänvalvoja",
|
||||||
"LabelAccountTypeGuest": "Vieras",
|
"LabelAccountTypeGuest": "Vieras",
|
||||||
|
|
@ -234,6 +242,10 @@
|
||||||
"LabelAllUsersExcludingGuests": "Kaikki käyttäjät vieraita lukuun ottamatta",
|
"LabelAllUsersExcludingGuests": "Kaikki käyttäjät vieraita lukuun ottamatta",
|
||||||
"LabelAllUsersIncludingGuests": "Kaikki käyttäjät mukaan lukien vieraat",
|
"LabelAllUsersIncludingGuests": "Kaikki käyttäjät mukaan lukien vieraat",
|
||||||
"LabelAlreadyInYourLibrary": "Jo kirjastossasi",
|
"LabelAlreadyInYourLibrary": "Jo kirjastossasi",
|
||||||
|
"LabelApiKeyCreated": "API avain \"{0}\" luotu onnistuneesti.",
|
||||||
|
"LabelApiKeyCreatedDescription": "Varmista, että kopioit API avaimen. Sitä ei näytetä enää tämän jälkeen.",
|
||||||
|
"LabelApiKeyUser": "Toimi käyttäjän puolesta",
|
||||||
|
"LabelApiKeyUserDescription": "Tällä API-avaimella on samat käyttöoikeudet kuin käyttäjällä, jonka puolesta se toimii. Tämä näkyy lokeissa samalla tavalla kuin jos käyttäjä itse tekisi pyynnön.",
|
||||||
"LabelApiToken": "Sovellusliittymätunnus",
|
"LabelApiToken": "Sovellusliittymätunnus",
|
||||||
"LabelAppend": "Lisää loppuun",
|
"LabelAppend": "Lisää loppuun",
|
||||||
"LabelAudioBitrate": "Äänen bittinopeus (esim. 128k)",
|
"LabelAudioBitrate": "Äänen bittinopeus (esim. 128k)",
|
||||||
|
|
@ -283,6 +295,7 @@
|
||||||
"LabelContinueListening": "Jatka kuuntelua",
|
"LabelContinueListening": "Jatka kuuntelua",
|
||||||
"LabelContinueReading": "Jatka lukemista",
|
"LabelContinueReading": "Jatka lukemista",
|
||||||
"LabelContinueSeries": "Jatka sarjoja",
|
"LabelContinueSeries": "Jatka sarjoja",
|
||||||
|
"LabelCorsAllowed": "Salli CORS Origins",
|
||||||
"LabelCover": "Kansikuva",
|
"LabelCover": "Kansikuva",
|
||||||
"LabelCoverImageURL": "Kansikuvan URL-osoite",
|
"LabelCoverImageURL": "Kansikuvan URL-osoite",
|
||||||
"LabelCoverProvider": "Kansikuvan tarjoaja",
|
"LabelCoverProvider": "Kansikuvan tarjoaja",
|
||||||
|
|
@ -296,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Poista tiedostojärjestelmästä (poista merkintä, jos haluat poistaa vain tietokannasta)",
|
"LabelDeleteFromFileSystemCheckbox": "Poista tiedostojärjestelmästä (poista merkintä, jos haluat poistaa vain tietokannasta)",
|
||||||
"LabelDescription": "Kuvaus",
|
"LabelDescription": "Kuvaus",
|
||||||
"LabelDeselectAll": "Poista valinta kaikista",
|
"LabelDeselectAll": "Poista valinta kaikista",
|
||||||
|
"LabelDetectedPattern": "Tunnista malli:",
|
||||||
"LabelDevice": "Laite",
|
"LabelDevice": "Laite",
|
||||||
"LabelDeviceInfo": "Laitteen tiedot",
|
"LabelDeviceInfo": "Laitteen tiedot",
|
||||||
"LabelDeviceIsAvailableTo": "Laite on saatavilla...",
|
"LabelDeviceIsAvailableTo": "Laite on saatavilla...",
|
||||||
|
|
@ -345,7 +359,11 @@
|
||||||
"LabelExample": "Esimerkki",
|
"LabelExample": "Esimerkki",
|
||||||
"LabelExpandSeries": "Laajenna sarja",
|
"LabelExpandSeries": "Laajenna sarja",
|
||||||
"LabelExpandSubSeries": "Laajenna alisarja",
|
"LabelExpandSubSeries": "Laajenna alisarja",
|
||||||
"LabelExplicit": "Yksiselitteinen",
|
"LabelExpired": "Vanhentunut",
|
||||||
|
"LabelExpiresAt": "Vanhentuu",
|
||||||
|
"LabelExpiresInSeconds": "Vanhentuu (sekunnissa)",
|
||||||
|
"LabelExpiresNever": "Ei koskaan",
|
||||||
|
"LabelExplicit": "Sopimaton",
|
||||||
"LabelExplicitChecked": "Yksiselitteinen (valittu)",
|
"LabelExplicitChecked": "Yksiselitteinen (valittu)",
|
||||||
"LabelExplicitUnchecked": "Ei yksiselitteinen (ei valittu)",
|
"LabelExplicitUnchecked": "Ei yksiselitteinen (ei valittu)",
|
||||||
"LabelExportOPML": "Vie OPML",
|
"LabelExportOPML": "Vie OPML",
|
||||||
|
|
@ -360,11 +378,12 @@
|
||||||
"LabelFilterByUser": "Suodata käyttäjien perusteella",
|
"LabelFilterByUser": "Suodata käyttäjien perusteella",
|
||||||
"LabelFindEpisodes": "Etsi jaksoja",
|
"LabelFindEpisodes": "Etsi jaksoja",
|
||||||
"LabelFinished": "Valmis",
|
"LabelFinished": "Valmis",
|
||||||
|
"LabelFinishedDate": "Valmis {0}",
|
||||||
"LabelFolder": "Kansio",
|
"LabelFolder": "Kansio",
|
||||||
"LabelFolders": "Kansiot",
|
"LabelFolders": "Kansiot",
|
||||||
"LabelFontBold": "Lihavoitu",
|
"LabelFontBold": "Lihavoitu",
|
||||||
"LabelFontBoldness": "Kirjasintyyppien lihavointi",
|
"LabelFontBoldness": "Kirjasintyyppien lihavointi",
|
||||||
"LabelFontFamily": "Kirjasinperhe",
|
"LabelFontFamily": "Fonttiperhe",
|
||||||
"LabelFontItalic": "Kursiivi",
|
"LabelFontItalic": "Kursiivi",
|
||||||
"LabelFontScale": "Kirjasintyyppien skaalautuminen",
|
"LabelFontScale": "Kirjasintyyppien skaalautuminen",
|
||||||
"LabelFontStrikethrough": "Yliviivattu",
|
"LabelFontStrikethrough": "Yliviivattu",
|
||||||
|
|
@ -404,6 +423,7 @@
|
||||||
"LabelLanguages": "Kielet",
|
"LabelLanguages": "Kielet",
|
||||||
"LabelLastBookAdded": "Viimeisin lisätty kirja",
|
"LabelLastBookAdded": "Viimeisin lisätty kirja",
|
||||||
"LabelLastBookUpdated": "Viimeisin päivitetty kirja",
|
"LabelLastBookUpdated": "Viimeisin päivitetty kirja",
|
||||||
|
"LabelLastProgressDate": "Viimeisin edistyminen {0}",
|
||||||
"LabelLastSeen": "Nähty viimeksi",
|
"LabelLastSeen": "Nähty viimeksi",
|
||||||
"LabelLastTime": "Viimeinen kerta",
|
"LabelLastTime": "Viimeinen kerta",
|
||||||
"LabelLastUpdate": "Viimeisin päivitys",
|
"LabelLastUpdate": "Viimeisin päivitys",
|
||||||
|
|
@ -416,6 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Ei {0}",
|
"LabelLibraryFilterSublistEmpty": "Ei {0}",
|
||||||
"LabelLibraryItem": "Kirjaston kohde",
|
"LabelLibraryItem": "Kirjaston kohde",
|
||||||
"LabelLibraryName": "Kirjaston nimi",
|
"LabelLibraryName": "Kirjaston nimi",
|
||||||
|
"LabelLibrarySortByProgress": "Edistyminen: Viimeksi päivitetty",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Edistyminen: Valmis",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Edistyminen: Aloitettu",
|
||||||
"LabelLimit": "Raja",
|
"LabelLimit": "Raja",
|
||||||
"LabelLineSpacing": "Riviväli",
|
"LabelLineSpacing": "Riviväli",
|
||||||
"LabelListenAgain": "Kuuntele uudelleen",
|
"LabelListenAgain": "Kuuntele uudelleen",
|
||||||
|
|
@ -424,6 +447,7 @@
|
||||||
"LabelLogLevelWarn": "Varoitus",
|
"LabelLogLevelWarn": "Varoitus",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Etsi uusia jaksoja tämän päivämäärän jälkeen",
|
"LabelLookForNewEpisodesAfterDate": "Etsi uusia jaksoja tämän päivämäärän jälkeen",
|
||||||
"LabelLowestPriority": "Vähiten tärkeä",
|
"LabelLowestPriority": "Vähiten tärkeä",
|
||||||
|
"LabelMatchConfidence": "Varmuus",
|
||||||
"LabelMatchExistingUsersBy": "Vastaa olemassa olevia käyttäjiä mukaan",
|
"LabelMatchExistingUsersBy": "Vastaa olemassa olevia käyttäjiä mukaan",
|
||||||
"LabelMatchExistingUsersByDescription": "Käytetään olemassa olevien käyttäjien yhdistämiseen. Kun yhteys on muodostettu, käyttäjät saavat yksilöllisen tunnuksen SSO-palveluntarjoajaltasi",
|
"LabelMatchExistingUsersByDescription": "Käytetään olemassa olevien käyttäjien yhdistämiseen. Kun yhteys on muodostettu, käyttäjät saavat yksilöllisen tunnuksen SSO-palveluntarjoajaltasi",
|
||||||
"LabelMaxEpisodesToDownload": "Jaksojen maksimilatausmäärä. 0 poistaa rajoituksen.",
|
"LabelMaxEpisodesToDownload": "Jaksojen maksimilatausmäärä. 0 poistaa rajoituksen.",
|
||||||
|
|
@ -453,7 +477,9 @@
|
||||||
"LabelNewestAuthors": "Uusimmat tekijät",
|
"LabelNewestAuthors": "Uusimmat tekijät",
|
||||||
"LabelNewestEpisodes": "Uusimmat jaksot",
|
"LabelNewestEpisodes": "Uusimmat jaksot",
|
||||||
"LabelNextBackupDate": "Seuraava varmuuskopiointipäivämäärä",
|
"LabelNextBackupDate": "Seuraava varmuuskopiointipäivämäärä",
|
||||||
|
"LabelNextChapters": "Seuraavat luvut:",
|
||||||
"LabelNextScheduledRun": "Seuraava ajastettu suorittaminen",
|
"LabelNextScheduledRun": "Seuraava ajastettu suorittaminen",
|
||||||
|
"LabelNoApiKeys": "Ei API-avaimia",
|
||||||
"LabelNoCustomMetadataProviders": "Ei mukautettuja kuvailutietojen toimittajia",
|
"LabelNoCustomMetadataProviders": "Ei mukautettuja kuvailutietojen toimittajia",
|
||||||
"LabelNoEpisodesSelected": "Jaksoja ei ole valittu",
|
"LabelNoEpisodesSelected": "Jaksoja ei ole valittu",
|
||||||
"LabelNotFinished": "Ei valmis",
|
"LabelNotFinished": "Ei valmis",
|
||||||
|
|
@ -469,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Ilmoitustapahtumajonon enimmäispituus",
|
"LabelNotificationsMaxQueueSize": "Ilmoitustapahtumajonon enimmäispituus",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Tapahtumat on rajoitettu ampumaan yksi sekunnissa. Tapahtumat ohitetaan, jos jono on enimmäiskoko. Tämä estää ilmoitusten roskapostin.",
|
"LabelNotificationsMaxQueueSizeHelp": "Tapahtumat on rajoitettu ampumaan yksi sekunnissa. Tapahtumat ohitetaan, jos jono on enimmäiskoko. Tämä estää ilmoitusten roskapostin.",
|
||||||
"LabelNumberOfBooks": "Kirjojen määrä",
|
"LabelNumberOfBooks": "Kirjojen määrä",
|
||||||
|
"LabelNumberOfChapters": "Lukujen lukumäärä:",
|
||||||
"LabelNumberOfEpisodes": "# jaksoja",
|
"LabelNumberOfEpisodes": "# jaksoja",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "OpenID-vaatimuksen nimi, joka sisältää lisäoikeudet sovelluksen käyttäjän toimiin, joita sovelletaan muihin kuin järjestelmänvalvojan rooleihin (<b>jos määritetty</b>). Jos vaatimus puuttuu vastauksesta, pääsy ABS:iin evätään. Jos yksittäinen vaihtoehto puuttuu, sitä käsitellään <code>false</code>-arvona. Varmista, että identiteetin tarjoajan vaatimus vastaa odotettua rakennetta:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "OpenID-vaatimuksen nimi, joka sisältää lisäoikeudet sovelluksen käyttäjän toimiin, joita sovelletaan muihin kuin järjestelmänvalvojan rooleihin (<b>jos määritetty</b>). Jos vaatimus puuttuu vastauksesta, pääsy ABS:iin evätään. Jos yksittäinen vaihtoehto puuttuu, sitä käsitellään <code>false</code>-arvona. Varmista, että identiteetin tarjoajan vaatimus vastaa odotettua rakennetta:",
|
||||||
"LabelOpenIDClaims": "Jätä seuraavat vaihtoehdot tyhjiksi, jos haluat poistaa edistyneen ryhmän ja lupien määrityksen käytöstä ja määrittää sitten automaattisesti käyttäjäryhmän.",
|
"LabelOpenIDClaims": "Jätä seuraavat vaihtoehdot tyhjiksi, jos haluat poistaa edistyneen ryhmän ja lupien määrityksen käytöstä ja määrittää sitten automaattisesti käyttäjäryhmän.",
|
||||||
|
|
@ -513,7 +540,7 @@
|
||||||
"LabelPublishers": "Julkaisijat",
|
"LabelPublishers": "Julkaisijat",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Mukautettu omistajan sähköposti",
|
"LabelRSSFeedCustomOwnerEmail": "Mukautettu omistajan sähköposti",
|
||||||
"LabelRSSFeedCustomOwnerName": "Mukautettu omistajan nimi",
|
"LabelRSSFeedCustomOwnerName": "Mukautettu omistajan nimi",
|
||||||
"LabelRSSFeedOpen": "RSS-syöte avoin",
|
"LabelRSSFeedOpen": "RSS Syöte Avoin",
|
||||||
"LabelRSSFeedPreventIndexing": "Estä indeksointi",
|
"LabelRSSFeedPreventIndexing": "Estä indeksointi",
|
||||||
"LabelRSSFeedSlug": "RSS-syöte Slug",
|
"LabelRSSFeedSlug": "RSS-syöte Slug",
|
||||||
"LabelRSSFeedURL": "RSS-syötteen URL-osoite",
|
"LabelRSSFeedURL": "RSS-syötteen URL-osoite",
|
||||||
|
|
@ -523,7 +550,7 @@
|
||||||
"LabelReadAgain": "Lue uudelleen",
|
"LabelReadAgain": "Lue uudelleen",
|
||||||
"LabelReadEbookWithoutProgress": "Lue s-kirja tallentamatta edistymistietoja",
|
"LabelReadEbookWithoutProgress": "Lue s-kirja tallentamatta edistymistietoja",
|
||||||
"LabelRecentSeries": "Viimeisimmät sarjat",
|
"LabelRecentSeries": "Viimeisimmät sarjat",
|
||||||
"LabelRecentlyAdded": "Viimeeksi lisätyt",
|
"LabelRecentlyAdded": "Viimeksi lisätyt",
|
||||||
"LabelRecommended": "Suositeltu",
|
"LabelRecommended": "Suositeltu",
|
||||||
"LabelRedo": "Tee uudelleen",
|
"LabelRedo": "Tee uudelleen",
|
||||||
"LabelRegion": "Alue",
|
"LabelRegion": "Alue",
|
||||||
|
|
@ -543,6 +570,7 @@
|
||||||
"LabelSelectAll": "Valitse kaikki",
|
"LabelSelectAll": "Valitse kaikki",
|
||||||
"LabelSelectAllEpisodes": "Valitse kaikki jaksot",
|
"LabelSelectAllEpisodes": "Valitse kaikki jaksot",
|
||||||
"LabelSelectEpisodesShowing": "Valitse {0} näytettävää jaksoa",
|
"LabelSelectEpisodesShowing": "Valitse {0} näytettävää jaksoa",
|
||||||
|
"LabelSelectUser": "Valitse käyttäjä",
|
||||||
"LabelSelectUsers": "Valitse käyttäjät",
|
"LabelSelectUsers": "Valitse käyttäjät",
|
||||||
"LabelSendEbookToDevice": "Lähetä s-kirja kohteeseen...",
|
"LabelSendEbookToDevice": "Lähetä s-kirja kohteeseen...",
|
||||||
"LabelSequence": "Sekvenssi",
|
"LabelSequence": "Sekvenssi",
|
||||||
|
|
@ -560,8 +588,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeuomorfinen muotoilu puisilla hyllyillä",
|
"LabelSettingsBookshelfViewHelp": "Skeuomorfinen muotoilu puisilla hyllyillä",
|
||||||
"LabelSettingsChromecastSupport": "Chromecast-tuki",
|
"LabelSettingsChromecastSupport": "Chromecast-tuki",
|
||||||
"LabelSettingsDateFormat": "Päivämäärän muoto",
|
"LabelSettingsDateFormat": "Päivämäärän muoto",
|
||||||
"LabelSettingsEnableWatcher": "Skannaa kirjastot automaattisesti muutoksien varalta",
|
"LabelSettingsEnableWatcher": "Vahdi kirjastoja automaattisesti muutoksien varalta",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Skannaa kirjastot automaattisesti muutoksien varalta",
|
"LabelSettingsEnableWatcherForLibrary": "Vahdi kirjastoja automaattisesti muutoksien varalta",
|
||||||
"LabelSettingsEnableWatcherHelp": "Ottaa käyttöön kohteiden automaattisen lisäämisen ja päivityksen kun tiedostomuutoksia havaitaan. *Tarvitsee palvelimen uudelleenkäynnistyksen",
|
"LabelSettingsEnableWatcherHelp": "Ottaa käyttöön kohteiden automaattisen lisäämisen ja päivityksen kun tiedostomuutoksia havaitaan. *Tarvitsee palvelimen uudelleenkäynnistyksen",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Salli komentosarjamuotoinen sisältö epubissa",
|
"LabelSettingsEpubsAllowScriptedContent": "Salli komentosarjamuotoinen sisältö epubissa",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Salli epub-tiedostojen suorittaa komentosarjoja. On suositeltavaa pitää tämä asetus pois käytöstä, ellet luota epub-tiedostojen lähteeseen.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Salli epub-tiedostojen suorittaa komentosarjoja. On suositeltavaa pitää tämä asetus pois käytöstä, ellet luota epub-tiedostojen lähteeseen.",
|
||||||
|
|
@ -610,6 +638,7 @@
|
||||||
"LabelStartTime": "Aloitusaika",
|
"LabelStartTime": "Aloitusaika",
|
||||||
"LabelStarted": "Aloitettu",
|
"LabelStarted": "Aloitettu",
|
||||||
"LabelStartedAt": "Aloitettu",
|
"LabelStartedAt": "Aloitettu",
|
||||||
|
"LabelStartedDate": "Aloitettu {0}",
|
||||||
"LabelStatsAudioTracks": "Ääniraidat",
|
"LabelStatsAudioTracks": "Ääniraidat",
|
||||||
"LabelStatsAuthors": "Tekijät",
|
"LabelStatsAuthors": "Tekijät",
|
||||||
"LabelStatsBestDay": "Paras päivä",
|
"LabelStatsBestDay": "Paras päivä",
|
||||||
|
|
@ -639,6 +668,7 @@
|
||||||
"LabelTheme": "Teema",
|
"LabelTheme": "Teema",
|
||||||
"LabelThemeDark": "Tumma",
|
"LabelThemeDark": "Tumma",
|
||||||
"LabelThemeLight": "Kirkas",
|
"LabelThemeLight": "Kirkas",
|
||||||
|
"LabelThemeSepia": "Seepia",
|
||||||
"LabelTimeBase": "Aika-alusta",
|
"LabelTimeBase": "Aika-alusta",
|
||||||
"LabelTimeDurationXHours": "{0} tuntia",
|
"LabelTimeDurationXHours": "{0} tuntia",
|
||||||
"LabelTimeDurationXMinutes": "{0} minuuttia",
|
"LabelTimeDurationXMinutes": "{0} minuuttia",
|
||||||
|
|
@ -706,6 +736,10 @@
|
||||||
"LabelYourProgress": "Edistymisesi",
|
"LabelYourProgress": "Edistymisesi",
|
||||||
"MessageAddToPlayerQueue": "Lisää soittimen jonoon",
|
"MessageAddToPlayerQueue": "Lisää soittimen jonoon",
|
||||||
"MessageAppriseDescription": "Käyttääksesi tätä toimintoa tarvitset <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> -instanssin tai rajapinnan joka käsittelee samoja pyyntöjä. <br />Apprise rajapinnan osoite tulee olla täysi URL polku ilmoituksen lähetykseen, esim. jos rajapinta on osoitteessa <code>http://192.168.1.1:8337</code>,niin arvoksi tulee antaa <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Käyttääksesi tätä toimintoa tarvitset <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> -instanssin tai rajapinnan joka käsittelee samoja pyyntöjä. <br />Apprise rajapinnan osoite tulee olla täysi URL polku ilmoituksen lähetykseen, esim. jos rajapinta on osoitteessa <code>http://192.168.1.1:8337</code>,niin arvoksi tulee antaa <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
|
"MessageAsinCheck": "Varmista, että käytät ASIN-tunnusta oikealta Audible-alueelta, ei Amazonista.",
|
||||||
|
"MessageAuthenticationLegacyTokenWarning": "Vanhat API-tunnukset poistetaan tulevaisuudessa. Käytä sen sijaan <a href=\"/config/api-keys\">API-avaimia</a>.",
|
||||||
|
"MessageAuthenticationOIDCChangesRestart": "Käynnistä palvelin uudelleen tallennuksen jälkeen ottaaksesi OIDC-muutokset käyttöön.",
|
||||||
|
"MessageAuthenticationSecurityMessage": "Tunnistautumisen tietoturvaa on parannettu. Kaikkien käyttäjien tulee kirjautua sisään uudelleen.",
|
||||||
"MessageBackupsDescription": "Varmuuskopiot sisältävät käyttäjät, käyttäjien edistymisen, kirjastokohteiden tiedot, palvelinasetukset ja <code>/metadata/items</code>- ja <code>/metadata/authors</code> -kansioihin tallennetut kuvat. Varmuuskopiot <strong>eivät sisällä</strong> kirjastosi kansioihin tallennettuja tiedostoja.",
|
"MessageBackupsDescription": "Varmuuskopiot sisältävät käyttäjät, käyttäjien edistymisen, kirjastokohteiden tiedot, palvelinasetukset ja <code>/metadata/items</code>- ja <code>/metadata/authors</code> -kansioihin tallennetut kuvat. Varmuuskopiot <strong>eivät sisällä</strong> kirjastosi kansioihin tallennettuja tiedostoja.",
|
||||||
"MessageBackupsLocationEditNote": "Huomautus: Varmuuskopion sijainnin päivittäminen ei siirrä tai muokkaa olemassa olevia varmuuskopioita",
|
"MessageBackupsLocationEditNote": "Huomautus: Varmuuskopion sijainnin päivittäminen ei siirrä tai muokkaa olemassa olevia varmuuskopioita",
|
||||||
"MessageBackupsLocationNoEditNote": "Huomautus: Varmuuskopion sijainti asetetaan ympäristömuuttujan kautta, eikä sitä voi muuttaa tässä.",
|
"MessageBackupsLocationNoEditNote": "Huomautus: Varmuuskopion sijainti asetetaan ympäristömuuttujan kautta, eikä sitä voi muuttaa tässä.",
|
||||||
|
|
@ -719,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Ei tuloksia suodattimelle \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Ei tuloksia suodattimelle \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Ei tuloksia kyselylle",
|
"MessageBookshelfNoResultsForQuery": "Ei tuloksia kyselylle",
|
||||||
"MessageBookshelfNoSeries": "Sinulla ei ole sarjoja",
|
"MessageBookshelfNoSeries": "Sinulla ei ole sarjoja",
|
||||||
|
"MessageBulkChapterPattern": "Kuinka monta lukua haluaisit lisätä tällä numerointimallilla?",
|
||||||
"MessageChapterEndIsAfter": "Luvun loppu sijaitsee äänikirjan lopun jälkeen",
|
"MessageChapterEndIsAfter": "Luvun loppu sijaitsee äänikirjan lopun jälkeen",
|
||||||
"MessageChapterErrorFirstNotZero": "Ensimmäisen luvun tulee alkaa nollasta",
|
"MessageChapterErrorFirstNotZero": "Ensimmäisen luvun tulee alkaa nollasta",
|
||||||
"MessageChapterErrorStartGteDuration": "Epäkelvollinen aloitusaika; on oltava lyhyempi kuin äänikirjan kesto",
|
"MessageChapterErrorStartGteDuration": "Epäkelvollinen aloitusaika; on oltava lyhyempi kuin äänikirjan kesto",
|
||||||
|
|
@ -727,6 +762,7 @@
|
||||||
"MessageChaptersNotFound": "Kappaleita ei löydy",
|
"MessageChaptersNotFound": "Kappaleita ei löydy",
|
||||||
"MessageCheckingCron": "Tarkistetaan cronia...",
|
"MessageCheckingCron": "Tarkistetaan cronia...",
|
||||||
"MessageConfirmCloseFeed": "Oletko varma, että haluat sulkea tämän syötteen?",
|
"MessageConfirmCloseFeed": "Oletko varma, että haluat sulkea tämän syötteen?",
|
||||||
|
"MessageConfirmDeleteApiKey": "Haluatko varmasti poistaa API-avaimen \"{0}\"?",
|
||||||
"MessageConfirmDeleteBackup": "Oletko varma, että haluat poistaa varmuuskopion {0}:lle?",
|
"MessageConfirmDeleteBackup": "Oletko varma, että haluat poistaa varmuuskopion {0}:lle?",
|
||||||
"MessageConfirmDeleteDevice": "Oletko varma, että haluat poistaa s-lukulaitteen \"{0}\"?",
|
"MessageConfirmDeleteDevice": "Oletko varma, että haluat poistaa s-lukulaitteen \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Tämä poistaa tiedoston tiedostojärjestelmästäsi. Oletko varma?",
|
"MessageConfirmDeleteFile": "Tämä poistaa tiedoston tiedostojärjestelmästäsi. Oletko varma?",
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@
|
||||||
"ButtonReScan": "Nouvelle analyse",
|
"ButtonReScan": "Nouvelle analyse",
|
||||||
"ButtonRead": "Lire",
|
"ButtonRead": "Lire",
|
||||||
"ButtonReadLess": "Lire moins",
|
"ButtonReadLess": "Lire moins",
|
||||||
"ButtonReadMore": "Lire la suite",
|
"ButtonReadMore": "Lire plus",
|
||||||
"ButtonRefresh": "Rafraîchir",
|
"ButtonRefresh": "Rafraîchir",
|
||||||
"ButtonRemove": "Retirer",
|
"ButtonRemove": "Retirer",
|
||||||
"ButtonRemoveAll": "Supprimer tout",
|
"ButtonRemoveAll": "Supprimer tout",
|
||||||
|
|
@ -172,7 +172,7 @@
|
||||||
"HeaderNotificationUpdate": "Mise à jour de la notification",
|
"HeaderNotificationUpdate": "Mise à jour de la notification",
|
||||||
"HeaderNotifications": "Notifications",
|
"HeaderNotifications": "Notifications",
|
||||||
"HeaderOpenIDConnectAuthentication": "Authentification via OpenID Connect",
|
"HeaderOpenIDConnectAuthentication": "Authentification via OpenID Connect",
|
||||||
"HeaderOpenListeningSessions": "Ouvrir les sessions d'écoutes",
|
"HeaderOpenListeningSessions": "Sessions d'écoute ouvertes",
|
||||||
"HeaderOpenRSSFeed": "Ouvrir le flux RSS",
|
"HeaderOpenRSSFeed": "Ouvrir le flux RSS",
|
||||||
"HeaderOtherFiles": "Autres fichiers",
|
"HeaderOtherFiles": "Autres fichiers",
|
||||||
"HeaderPasswordAuthentication": "Authentification par mot de passe",
|
"HeaderPasswordAuthentication": "Authentification par mot de passe",
|
||||||
|
|
@ -378,13 +378,14 @@
|
||||||
"LabelFilterByUser": "Filtrer par utilisateur",
|
"LabelFilterByUser": "Filtrer par utilisateur",
|
||||||
"LabelFindEpisodes": "Trouver des épisodes",
|
"LabelFindEpisodes": "Trouver des épisodes",
|
||||||
"LabelFinished": "Terminé le",
|
"LabelFinished": "Terminé le",
|
||||||
|
"LabelFinishedDate": "Terminé {0}",
|
||||||
"LabelFolder": "Dossier",
|
"LabelFolder": "Dossier",
|
||||||
"LabelFolders": "Dossiers",
|
"LabelFolders": "Dossiers",
|
||||||
"LabelFontBold": "Gras",
|
"LabelFontBold": "Gras",
|
||||||
"LabelFontBoldness": "Graisse de la police",
|
"LabelFontBoldness": "Graisse de la police",
|
||||||
"LabelFontFamily": "Polices de caractères",
|
"LabelFontFamily": "Famille de caractères",
|
||||||
"LabelFontItalic": "Italique",
|
"LabelFontItalic": "Italique",
|
||||||
"LabelFontScale": "Taille de la police de caractère",
|
"LabelFontScale": "Taille de la police",
|
||||||
"LabelFontStrikethrough": "Barrer",
|
"LabelFontStrikethrough": "Barrer",
|
||||||
"LabelFormat": "Format",
|
"LabelFormat": "Format",
|
||||||
"LabelFull": "Complet",
|
"LabelFull": "Complet",
|
||||||
|
|
@ -435,7 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Aucun {0}",
|
"LabelLibraryFilterSublistEmpty": "Aucun {0}",
|
||||||
"LabelLibraryItem": "Élément de bibliothèque",
|
"LabelLibraryItem": "Élément de bibliothèque",
|
||||||
"LabelLibraryName": "Nom de la bibliothèque",
|
"LabelLibraryName": "Nom de la bibliothèque",
|
||||||
"LabelLibrarySortByProgress": "Progression mise à jour",
|
"LabelLibrarySortByProgress": "Progression : dernière mise à jour",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Progression : Terminé",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Progression : Commencé",
|
||||||
"LabelLimit": "Limite",
|
"LabelLimit": "Limite",
|
||||||
"LabelLineSpacing": "Espacement des lignes",
|
"LabelLineSpacing": "Espacement des lignes",
|
||||||
"LabelListenAgain": "Écouter à nouveau",
|
"LabelListenAgain": "Écouter à nouveau",
|
||||||
|
|
@ -585,8 +588,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Interface skeumorphique avec étagères en bois",
|
"LabelSettingsBookshelfViewHelp": "Interface skeumorphique avec étagères en bois",
|
||||||
"LabelSettingsChromecastSupport": "Support du Chromecast",
|
"LabelSettingsChromecastSupport": "Support du Chromecast",
|
||||||
"LabelSettingsDateFormat": "Format de date",
|
"LabelSettingsDateFormat": "Format de date",
|
||||||
"LabelSettingsEnableWatcher": "Analyser automatiquement les bibliothèques pour détecter les modifications",
|
"LabelSettingsEnableWatcher": "Surveiller automatiquement les bibliothèques pour détecter les modifications",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Analyser automatiquement la bibliothèque pour détecter les modifications",
|
"LabelSettingsEnableWatcherForLibrary": "Surveiller automatiquement la bibliothèque pour détecter les modifications",
|
||||||
"LabelSettingsEnableWatcherHelp": "Active la mise à jour automatique d'éléments lorsque des modifications de fichiers sont détectées. * Nécessite le redémarrage du serveur",
|
"LabelSettingsEnableWatcherHelp": "Active la mise à jour automatique d'éléments lorsque des modifications de fichiers sont détectées. * Nécessite le redémarrage du serveur",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Autoriser le contenu scénarisé pour les fichiers EPUB",
|
"LabelSettingsEpubsAllowScriptedContent": "Autoriser le contenu scénarisé pour les fichiers EPUB",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Autoriser les fichiers EPUB à exécuter des scripts. Il est recommandé de laisser ce paramètre désactivé, sauf si vous faites confiance à la source des fichiers EPUB.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Autoriser les fichiers EPUB à exécuter des scripts. Il est recommandé de laisser ce paramètre désactivé, sauf si vous faites confiance à la source des fichiers EPUB.",
|
||||||
|
|
@ -635,6 +638,7 @@
|
||||||
"LabelStartTime": "Heure de démarrage",
|
"LabelStartTime": "Heure de démarrage",
|
||||||
"LabelStarted": "Démarré",
|
"LabelStarted": "Démarré",
|
||||||
"LabelStartedAt": "Démarré à",
|
"LabelStartedAt": "Démarré à",
|
||||||
|
"LabelStartedDate": "Commencé {0}",
|
||||||
"LabelStatsAudioTracks": "Pistes audio",
|
"LabelStatsAudioTracks": "Pistes audio",
|
||||||
"LabelStatsAuthors": "Auteurs",
|
"LabelStatsAuthors": "Auteurs",
|
||||||
"LabelStatsBestDay": "Meilleur jour",
|
"LabelStatsBestDay": "Meilleur jour",
|
||||||
|
|
@ -740,7 +744,7 @@
|
||||||
"MessageBackupsLocationEditNote": "Remarque : Mettre à jour l'emplacement de sauvegarde ne déplacera pas ou ne modifiera pas les sauvegardes existantes",
|
"MessageBackupsLocationEditNote": "Remarque : Mettre à jour l'emplacement de sauvegarde ne déplacera pas ou ne modifiera pas les sauvegardes existantes",
|
||||||
"MessageBackupsLocationNoEditNote": "Remarque : l’emplacement de sauvegarde est défini via une variable d’environnement et ne peut pas être modifié ici.",
|
"MessageBackupsLocationNoEditNote": "Remarque : l’emplacement de sauvegarde est défini via une variable d’environnement et ne peut pas être modifié ici.",
|
||||||
"MessageBackupsLocationPathEmpty": "L'emplacement de secours ne peut pas être vide",
|
"MessageBackupsLocationPathEmpty": "L'emplacement de secours ne peut pas être vide",
|
||||||
"MessageBatchEditPopulateMapDetailsAllHelp": "Remplir les champs disponibles avec les données de tous les éléments. Les champs avec des valeurs multiples seront fusionnés.",
|
"MessageBatchEditPopulateMapDetailsAllHelp": "Renseignez les champs activés avec les données de tous les éléments. Les champs comportant plusieurs valeurs seront fusionnés.",
|
||||||
"MessageBatchEditPopulateMapDetailsItemHelp": "Renseigner les champs de la carte active avec les informations de cet élément",
|
"MessageBatchEditPopulateMapDetailsItemHelp": "Renseigner les champs de la carte active avec les informations de cet élément",
|
||||||
"MessageBatchQuickMatchDescription": "La recherche par correspondance rapide tentera d’ajouter les couvertures et métadonnées manquantes pour les éléments sélectionnés. Activez les options ci-dessous pour permettre la Recherche par correspondance d’écraser les couvertures et/ou métadonnées existantes.",
|
"MessageBatchQuickMatchDescription": "La recherche par correspondance rapide tentera d’ajouter les couvertures et métadonnées manquantes pour les éléments sélectionnés. Activez les options ci-dessous pour permettre la Recherche par correspondance d’écraser les couvertures et/ou métadonnées existantes.",
|
||||||
"MessageBookshelfNoCollections": "Vous n’avez pas encore de collections",
|
"MessageBookshelfNoCollections": "Vous n’avez pas encore de collections",
|
||||||
|
|
@ -871,7 +875,7 @@
|
||||||
"MessagePlaylistCreateFromCollection": "Créer une liste de lecture depuis la collection",
|
"MessagePlaylistCreateFromCollection": "Créer une liste de lecture depuis la collection",
|
||||||
"MessagePleaseWait": "Merci de patienter…",
|
"MessagePleaseWait": "Merci de patienter…",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "Le Podcast n’a pas d’URL de flux RSS à utiliser pour la correspondance",
|
"MessagePodcastHasNoRSSFeedForMatching": "Le Podcast n’a pas d’URL de flux RSS à utiliser pour la correspondance",
|
||||||
"MessagePodcastSearchField": "Saisissez le terme de recherche ou l'URL du flux RSS",
|
"MessagePodcastSearchField": "Saisir un terme de recherche ou l'URL d'un flux RSS",
|
||||||
"MessageQuickEmbedInProgress": "Intégration rapide en cours",
|
"MessageQuickEmbedInProgress": "Intégration rapide en cours",
|
||||||
"MessageQuickEmbedQueue": "En file d'attente pour une intégration rapide ({0} dans la file d'attente)",
|
"MessageQuickEmbedQueue": "En file d'attente pour une intégration rapide ({0} dans la file d'attente)",
|
||||||
"MessageQuickMatchAllEpisodes": "Associer rapidement tous les épisodes",
|
"MessageQuickMatchAllEpisodes": "Associer rapidement tous les épisodes",
|
||||||
|
|
@ -884,7 +888,7 @@
|
||||||
"MessageResetChaptersConfirm": "Êtes-vous sûr·e de vouloir réinitialiser les chapitres et annuler les changements effectués ?",
|
"MessageResetChaptersConfirm": "Êtes-vous sûr·e de vouloir réinitialiser les chapitres et annuler les changements effectués ?",
|
||||||
"MessageRestoreBackupConfirm": "Êtes-vous sûr·e de vouloir restaurer la sauvegarde créée le",
|
"MessageRestoreBackupConfirm": "Êtes-vous sûr·e de vouloir restaurer la sauvegarde créée le",
|
||||||
"MessageRestoreBackupWarning": "Restaurer la sauvegarde écrasera la base de donnée située dans le dossier /config ainsi que les images sur /metadata/items et /metadata/authors.<br><br>Les sauvegardes ne touchent pas aux fichiers de la bibliothèque. Si vous avez activé le paramètre pour sauvegarder les métadonnées et les images de couverture dans le même dossier que les fichiers, ceux-ci ne ni sauvegardés, ni écrasés lors de la restauration.<br><br>Tous les clients utilisant votre serveur seront automatiquement mis à jour.",
|
"MessageRestoreBackupWarning": "Restaurer la sauvegarde écrasera la base de donnée située dans le dossier /config ainsi que les images sur /metadata/items et /metadata/authors.<br><br>Les sauvegardes ne touchent pas aux fichiers de la bibliothèque. Si vous avez activé le paramètre pour sauvegarder les métadonnées et les images de couverture dans le même dossier que les fichiers, ceux-ci ne ni sauvegardés, ni écrasés lors de la restauration.<br><br>Tous les clients utilisant votre serveur seront automatiquement mis à jour.",
|
||||||
"MessageScheduleLibraryScanNote": "Pour la plupart des utilisateurs, il est recommandé de laisser cette fonctionnalité désactivée et de maintenir le réglage du moniteur de dossier activé. Le moniteur de dossier détectera automatiquement les changements dans vos dossiers de bibliothèque. Le moniteur de dossier ne fonctionne pas pour chaque système de fichiers (comme NFS) afin que les scans de bibliothèques programmés puissent être utilisés à la place.",
|
"MessageScheduleLibraryScanNote": "Pour la plupart des utilisateurs, il est recommandé de laisser cette fonctionnalité désactivée et de maintenir le paramètre « Surveiller automatiquement la bibliothèque pour détecter les modifications » activé – il détectera automatiquement les modifications dans les dossiers de votre bibliothèque. Activez cette fonctionnalité si l'option « Surveiller automatiquement la bibliothèque pour détecter les modifications » ne fonctionne pas pour votre système de fichiers (comme NFS).",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Exécuté tous les {0} à {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Exécuté tous les {0} à {1}",
|
||||||
"MessageSearchResultsFor": "Résultats de recherche pour",
|
"MessageSearchResultsFor": "Résultats de recherche pour",
|
||||||
"MessageSelected": "{0} sélectionnés",
|
"MessageSelected": "{0} sélectionnés",
|
||||||
|
|
@ -958,7 +962,7 @@
|
||||||
"PlaceholderNewFolderPath": "Nouveau chemin de dossier",
|
"PlaceholderNewFolderPath": "Nouveau chemin de dossier",
|
||||||
"PlaceholderNewPlaylist": "Nouveau nom de liste de lecture",
|
"PlaceholderNewPlaylist": "Nouveau nom de liste de lecture",
|
||||||
"PlaceholderSearch": "Recherche…",
|
"PlaceholderSearch": "Recherche…",
|
||||||
"PlaceholderSearchEpisode": "Rechercher un épisode…",
|
"PlaceholderSearchEpisode": "Rechercher un épisode..",
|
||||||
"StatsAuthorsAdded": "auteurs ajoutés",
|
"StatsAuthorsAdded": "auteurs ajoutés",
|
||||||
"StatsBooksAdded": "livres ajoutés",
|
"StatsBooksAdded": "livres ajoutés",
|
||||||
"StatsBooksAdditional": "Les ajouts comprennent…",
|
"StatsBooksAdditional": "Les ajouts comprennent…",
|
||||||
|
|
@ -1010,6 +1014,8 @@
|
||||||
"ToastBulkChapterInvalidCount": "Veuillez entrer un nombre valide entre 1 et 150",
|
"ToastBulkChapterInvalidCount": "Veuillez entrer un nombre valide entre 1 et 150",
|
||||||
"ToastCachePurgeFailed": "Échec de la purge du cache",
|
"ToastCachePurgeFailed": "Échec de la purge du cache",
|
||||||
"ToastCachePurgeSuccess": "Cache purgé avec succès",
|
"ToastCachePurgeSuccess": "Cache purgé avec succès",
|
||||||
|
"ToastChapterLocked": "Le chapitre est verrouillé.",
|
||||||
|
"ToastChapterStartTimeAdjusted": "Début du chapitre ajusté de {0} secondes",
|
||||||
"ToastChaptersAllLocked": "Tous les chapitres sont verrouillés. Déverrouillez certains chapitres pour décaler leurs temps.",
|
"ToastChaptersAllLocked": "Tous les chapitres sont verrouillés. Déverrouillez certains chapitres pour décaler leurs temps.",
|
||||||
"ToastChaptersHaveErrors": "Les chapitres contiennent des erreurs",
|
"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.",
|
"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.",
|
||||||
|
|
@ -1020,6 +1026,8 @@
|
||||||
"ToastCollectionItemsAddFailed": "Échec de l’ajout de(s) élément(s) à la collection",
|
"ToastCollectionItemsAddFailed": "Échec de l’ajout de(s) élément(s) à la collection",
|
||||||
"ToastCollectionRemoveSuccess": "Collection supprimée",
|
"ToastCollectionRemoveSuccess": "Collection supprimée",
|
||||||
"ToastCollectionUpdateSuccess": "Collection mise à jour",
|
"ToastCollectionUpdateSuccess": "Collection mise à jour",
|
||||||
|
"ToastConnectionNotAvailable": "Connexion indisponible. Veuillez réessayer plus tard.",
|
||||||
|
"ToastCoverSearchFailed": "La recherche de la couverture a échoué",
|
||||||
"ToastCoverUpdateFailed": "Échec de la mise à jour de la couverture",
|
"ToastCoverUpdateFailed": "Échec de la mise à jour de la couverture",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "La date et l'heure sont invalides ou incomplètes",
|
"ToastDateTimeInvalidOrIncomplete": "La date et l'heure sont invalides ou incomplètes",
|
||||||
"ToastDeleteFileFailed": "Échec de la suppression du fichier",
|
"ToastDeleteFileFailed": "Échec de la suppression du fichier",
|
||||||
|
|
@ -1094,6 +1102,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Liste de lecture mise à jour",
|
"ToastPlaylistUpdateSuccess": "Liste de lecture mise à jour",
|
||||||
"ToastPodcastCreateFailed": "Échec de la création du podcast",
|
"ToastPodcastCreateFailed": "Échec de la création du podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast créé avec succès",
|
"ToastPodcastCreateSuccess": "Podcast créé avec succès",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Épisode mis à jour",
|
||||||
"ToastPodcastGetFeedFailed": "Échec de la récupération du flux du podcast",
|
"ToastPodcastGetFeedFailed": "Échec de la récupération du flux du podcast",
|
||||||
"ToastPodcastNoEpisodesInFeed": "Aucun épisode trouvé dans le flux RSS",
|
"ToastPodcastNoEpisodesInFeed": "Aucun épisode trouvé dans le flux RSS",
|
||||||
"ToastPodcastNoRssFeed": "Le podcast n’a pas de flux RSS",
|
"ToastPodcastNoRssFeed": "Le podcast n’a pas de flux RSS",
|
||||||
|
|
@ -1147,6 +1156,7 @@
|
||||||
"ToastUserRootRequireName": "Vous devez entrer un nom d’utilisateur root",
|
"ToastUserRootRequireName": "Vous devez entrer un nom d’utilisateur root",
|
||||||
"TooltipAddChapters": "Ajouter chapitre(s)",
|
"TooltipAddChapters": "Ajouter chapitre(s)",
|
||||||
"TooltipAddOneSecond": "Ajouter 1 seconde",
|
"TooltipAddOneSecond": "Ajouter 1 seconde",
|
||||||
|
"TooltipAdjustChapterStart": "Cliquez pour régler l'heure de début",
|
||||||
"TooltipLockAllChapters": "Verrouiller tous les chapitres",
|
"TooltipLockAllChapters": "Verrouiller tous les chapitres",
|
||||||
"TooltipLockChapter": "Verrouiller le chapitre (Maj+clic pour plage)",
|
"TooltipLockChapter": "Verrouiller le chapitre (Maj+clic pour plage)",
|
||||||
"TooltipSubtractOneSecond": "Soustraire 1 seconde",
|
"TooltipSubtractOneSecond": "Soustraire 1 seconde",
|
||||||
|
|
|
||||||
|
|
@ -348,7 +348,7 @@
|
||||||
"LabelExample": "דוגמה",
|
"LabelExample": "דוגמה",
|
||||||
"LabelExpandSeries": "הרחב סדרה",
|
"LabelExpandSeries": "הרחב סדרה",
|
||||||
"LabelExpandSubSeries": "הרחב תת סדרה",
|
"LabelExpandSubSeries": "הרחב תת סדרה",
|
||||||
"LabelExplicit": "בוטה",
|
"LabelExplicit": "מפורש",
|
||||||
"LabelExplicitChecked": "בוטה (מסומן)",
|
"LabelExplicitChecked": "בוטה (מסומן)",
|
||||||
"LabelExplicitUnchecked": "לא בוטה (לא מסומן)",
|
"LabelExplicitUnchecked": "לא בוטה (לא מסומן)",
|
||||||
"LabelExportOPML": "ייצוא OPML",
|
"LabelExportOPML": "ייצוא OPML",
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,8 @@
|
||||||
"ButtonApplyChapters": "Primijeni poglavlja",
|
"ButtonApplyChapters": "Primijeni poglavlja",
|
||||||
"ButtonAuthors": "Autori",
|
"ButtonAuthors": "Autori",
|
||||||
"ButtonBack": "Natrag",
|
"ButtonBack": "Natrag",
|
||||||
"ButtonBatchEditPopulateFromExisting": "Popuni iz postojećeg",
|
"ButtonBatchEditPopulateFromExisting": "Popuni iz postojećih",
|
||||||
"ButtonBatchEditPopulateMapDetails": "Popuni mapirane pojedinosti",
|
"ButtonBatchEditPopulateMapDetails": "Popuni detalje karte",
|
||||||
"ButtonBrowseForFolder": "Pronađi mapu",
|
"ButtonBrowseForFolder": "Pronađi mapu",
|
||||||
"ButtonCancel": "Odustani",
|
"ButtonCancel": "Odustani",
|
||||||
"ButtonCancelEncode": "Otkaži kodiranje",
|
"ButtonCancelEncode": "Otkaži kodiranje",
|
||||||
|
|
@ -83,7 +83,7 @@
|
||||||
"ButtonRemoveAllLibraryItems": "Ukloni sve stavke iz knjižnice",
|
"ButtonRemoveAllLibraryItems": "Ukloni sve stavke iz knjižnice",
|
||||||
"ButtonRemoveFromContinueListening": "Ukloni iz Nastavi slušati",
|
"ButtonRemoveFromContinueListening": "Ukloni iz Nastavi slušati",
|
||||||
"ButtonRemoveFromContinueReading": "Ukloni iz Nastavi čitati",
|
"ButtonRemoveFromContinueReading": "Ukloni iz Nastavi čitati",
|
||||||
"ButtonRemoveSeriesFromContinueSeries": "Ukloni seriju iz Nastavi seriju",
|
"ButtonRemoveSeriesFromContinueSeries": "Ukloni serijal iz popisa „Nastavi serijal”",
|
||||||
"ButtonReset": "Poništi",
|
"ButtonReset": "Poništi",
|
||||||
"ButtonResetToDefault": "Vrati na početne postavke",
|
"ButtonResetToDefault": "Vrati na početne postavke",
|
||||||
"ButtonRestore": "Vraćanje",
|
"ButtonRestore": "Vraćanje",
|
||||||
|
|
@ -107,17 +107,17 @@
|
||||||
"ButtonSubmit": "Pošalji",
|
"ButtonSubmit": "Pošalji",
|
||||||
"ButtonTest": "Test",
|
"ButtonTest": "Test",
|
||||||
"ButtonUnlinkOpenId": "Prekini vezu s OpenID-jem",
|
"ButtonUnlinkOpenId": "Prekini vezu s OpenID-jem",
|
||||||
"ButtonUpload": "Učitaj",
|
"ButtonUpload": "Prenesi",
|
||||||
"ButtonUploadBackup": "Učitaj sigurnosnu kopiju",
|
"ButtonUploadBackup": "Prenesi sigurnosnu kopiju",
|
||||||
"ButtonUploadCover": "Učitaj naslovnicu",
|
"ButtonUploadCover": "Prenesi naslovnicu",
|
||||||
"ButtonUploadOPMLFile": "Učitaj OPML datoteku",
|
"ButtonUploadOPMLFile": "Prenesi OPML datoteku",
|
||||||
"ButtonUserDelete": "Izbriši korisnika {0}",
|
"ButtonUserDelete": "Izbriši korisnika {0}",
|
||||||
"ButtonUserEdit": "Uredi korisnika {0}",
|
"ButtonUserEdit": "Uredi korisnika {0}",
|
||||||
"ButtonViewAll": "Prikaži sve",
|
"ButtonViewAll": "Prikaži sve",
|
||||||
"ButtonYes": "Da",
|
"ButtonYes": "Da",
|
||||||
"ErrorUploadFetchMetadataAPI": "Pogreška pri dohvatu meta-podataka",
|
"ErrorUploadFetchMetadataAPI": "Pogreška pri dohvaćanju meta-podataka",
|
||||||
"ErrorUploadFetchMetadataNoResults": "Dohvat meta-podataka nije uspio - pokušajte ispraviti naslov i/ili autora",
|
"ErrorUploadFetchMetadataNoResults": "Nije bilo moguće dohvatiti meta-podatake – pokušajte aktualizirati naslov i/ili autora",
|
||||||
"ErrorUploadLacksTitle": "Naslov je obavezan",
|
"ErrorUploadLacksTitle": "Mora imati naslov",
|
||||||
"HeaderAccount": "Korisnički račun",
|
"HeaderAccount": "Korisnički račun",
|
||||||
"HeaderAddCustomMetadataProvider": "Dodaj prilagođenog pružatelja meta-podataka",
|
"HeaderAddCustomMetadataProvider": "Dodaj prilagođenog pružatelja meta-podataka",
|
||||||
"HeaderAdvanced": "Napredno",
|
"HeaderAdvanced": "Napredno",
|
||||||
|
|
@ -127,13 +127,14 @@
|
||||||
"HeaderAudiobookTools": "Alati za upravljanje datotekama zvučnih knjiga",
|
"HeaderAudiobookTools": "Alati za upravljanje datotekama zvučnih knjiga",
|
||||||
"HeaderAuthentication": "Provjera autentičnosti",
|
"HeaderAuthentication": "Provjera autentičnosti",
|
||||||
"HeaderBackups": "Sigurnosne kopije",
|
"HeaderBackups": "Sigurnosne kopije",
|
||||||
|
"HeaderBulkChapterModal": "Dodaj više poglavlja",
|
||||||
"HeaderChangePassword": "Promjena zaporke",
|
"HeaderChangePassword": "Promjena zaporke",
|
||||||
"HeaderChapters": "Poglavlja",
|
"HeaderChapters": "Poglavlja",
|
||||||
"HeaderChooseAFolder": "Odaberi mapu",
|
"HeaderChooseAFolder": "Odaberi mapu",
|
||||||
"HeaderCollection": "Zbirka",
|
"HeaderCollection": "Zbirka",
|
||||||
"HeaderCollectionItems": "Stavke u zbirci",
|
"HeaderCollectionItems": "Stavke u zbirci",
|
||||||
"HeaderCover": "Naslovnica",
|
"HeaderCover": "Naslovnica",
|
||||||
"HeaderCurrentDownloads": "Preuzimanja u tijeku",
|
"HeaderCurrentDownloads": "Trenutačna preuzimanja",
|
||||||
"HeaderCustomMessageOnLogin": "Prilagođena poruka prilikom prijave",
|
"HeaderCustomMessageOnLogin": "Prilagođena poruka prilikom prijave",
|
||||||
"HeaderCustomMetadataProviders": "Prilagođeni pružatelji meta-podataka",
|
"HeaderCustomMetadataProviders": "Prilagođeni pružatelji meta-podataka",
|
||||||
"HeaderDetails": "Pojedinosti",
|
"HeaderDetails": "Pojedinosti",
|
||||||
|
|
@ -196,7 +197,7 @@
|
||||||
"HeaderSetBackupSchedule": "Zakazivanje sigurnosne pohrane",
|
"HeaderSetBackupSchedule": "Zakazivanje sigurnosne pohrane",
|
||||||
"HeaderSettings": "Postavke",
|
"HeaderSettings": "Postavke",
|
||||||
"HeaderSettingsDisplay": "Prikaz",
|
"HeaderSettingsDisplay": "Prikaz",
|
||||||
"HeaderSettingsExperimental": "Eksperimentalne značajke",
|
"HeaderSettingsExperimental": "Eksperimentalne funkcije",
|
||||||
"HeaderSettingsGeneral": "Općenito",
|
"HeaderSettingsGeneral": "Općenito",
|
||||||
"HeaderSettingsScanner": "Skener",
|
"HeaderSettingsScanner": "Skener",
|
||||||
"HeaderSettingsSecurity": "Sigurnost",
|
"HeaderSettingsSecurity": "Sigurnost",
|
||||||
|
|
@ -256,7 +257,7 @@
|
||||||
"LabelAuthors": "Autori",
|
"LabelAuthors": "Autori",
|
||||||
"LabelAutoDownloadEpisodes": "Automatski preuzmi nastavke",
|
"LabelAutoDownloadEpisodes": "Automatski preuzmi nastavke",
|
||||||
"LabelAutoFetchMetadata": "Automatski dohvati meta-podatke",
|
"LabelAutoFetchMetadata": "Automatski dohvati meta-podatke",
|
||||||
"LabelAutoFetchMetadataHelp": "Dohvaća meta-podatke o naslovu, autoru i serijalu kako bi pojednostavnio učitavanje. Dodatni meta-podatci će se možda morati dohvatiti nakon učitavanja.",
|
"LabelAutoFetchMetadataHelp": "Dohvaća meta-podatke o naslovu, autoru i serijalu kako bi pojednostavnio prijenos. Dodatni meta-podatci će se možda morati usporediti nakon prijenosa.",
|
||||||
"LabelAutoLaunch": "Automatsko pokretanje",
|
"LabelAutoLaunch": "Automatsko pokretanje",
|
||||||
"LabelAutoLaunchDescription": "Automatski preusmjeri na pružatelja autentifikacijskih usluga prilikom otvaranja stranice za prijavu (putanja za ručno zaobilaženje opcije <code>/login?autoLaunch=0</code>)",
|
"LabelAutoLaunchDescription": "Automatski preusmjeri na pružatelja autentifikacijskih usluga prilikom otvaranja stranice za prijavu (putanja za ručno zaobilaženje opcije <code>/login?autoLaunch=0</code>)",
|
||||||
"LabelAutoRegister": "Automatska registracija",
|
"LabelAutoRegister": "Automatska registracija",
|
||||||
|
|
@ -285,8 +286,8 @@
|
||||||
"LabelClickToUseCurrentValue": "Kliknite za trenutnu vrijednost",
|
"LabelClickToUseCurrentValue": "Kliknite za trenutnu vrijednost",
|
||||||
"LabelClosePlayer": "Zatvori reproduktor",
|
"LabelClosePlayer": "Zatvori reproduktor",
|
||||||
"LabelCodec": "Kodek",
|
"LabelCodec": "Kodek",
|
||||||
"LabelCollapseSeries": "Serijale prikaži sažeto",
|
"LabelCollapseSeries": "Sažmi serijal",
|
||||||
"LabelCollapseSubSeries": "Podserijale prikaži sažeto",
|
"LabelCollapseSubSeries": "Sažmi podserijale",
|
||||||
"LabelCollection": "Zbirka",
|
"LabelCollection": "Zbirka",
|
||||||
"LabelCollections": "Zbirke",
|
"LabelCollections": "Zbirke",
|
||||||
"LabelComplete": "Potpuno",
|
"LabelComplete": "Potpuno",
|
||||||
|
|
@ -302,15 +303,16 @@
|
||||||
"LabelCronExpression": "Cron izraz",
|
"LabelCronExpression": "Cron izraz",
|
||||||
"LabelCurrent": "Trenutan",
|
"LabelCurrent": "Trenutan",
|
||||||
"LabelCurrently": "Trenutno:",
|
"LabelCurrently": "Trenutno:",
|
||||||
"LabelCustomCronExpression": "Prilagođeni CRON izraz:",
|
"LabelCustomCronExpression": "Prilagođeni cron izraz:",
|
||||||
"LabelDatetime": "Datum i vrijeme",
|
"LabelDatetime": "Datum i vrijeme",
|
||||||
"LabelDays": "Dani",
|
"LabelDays": "Dani",
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Izbriši datoteke (uklonite kvačicu ako stavku želite izbrisati samo iz baze podataka)",
|
"LabelDeleteFromFileSystemCheckbox": "Izbriši datoteke (uklonite kvačicu ako stavku želite izbrisati samo iz baze podataka)",
|
||||||
"LabelDescription": "Opis",
|
"LabelDescription": "Opis",
|
||||||
"LabelDeselectAll": "Odznači sve",
|
"LabelDeselectAll": "Odznači sve",
|
||||||
|
"LabelDetectedPattern": "Prepoznat obrazac:",
|
||||||
"LabelDevice": "Uređaj",
|
"LabelDevice": "Uređaj",
|
||||||
"LabelDeviceInfo": "O uređaju",
|
"LabelDeviceInfo": "O uređaju",
|
||||||
"LabelDeviceIsAvailableTo": "Uređaj je dostupan...",
|
"LabelDeviceIsAvailableTo": "Uređaj je dostupan za...",
|
||||||
"LabelDirectory": "Direktorij",
|
"LabelDirectory": "Direktorij",
|
||||||
"LabelDiscFromFilename": "Disk iz imena datoteke",
|
"LabelDiscFromFilename": "Disk iz imena datoteke",
|
||||||
"LabelDiscFromMetadata": "Disk iz metapodataka",
|
"LabelDiscFromMetadata": "Disk iz metapodataka",
|
||||||
|
|
@ -338,7 +340,7 @@
|
||||||
"LabelEncodingBackupLocation": "Sigurnosna kopija vaših izvornih zvučnih datoteka čuvat će se u mapi:",
|
"LabelEncodingBackupLocation": "Sigurnosna kopija vaših izvornih zvučnih datoteka čuvat će se u mapi:",
|
||||||
"LabelEncodingChaptersNotEmbedded": "Poglavlja se ne ugrađuju u zvučne knjige koje se sastoje od više zvučnih zapisa.",
|
"LabelEncodingChaptersNotEmbedded": "Poglavlja se ne ugrađuju u zvučne knjige koje se sastoje od više zvučnih zapisa.",
|
||||||
"LabelEncodingClearItemCache": "Svakako redovito praznite predmemoriju stavki.",
|
"LabelEncodingClearItemCache": "Svakako redovito praznite predmemoriju stavki.",
|
||||||
"LabelEncodingFinishedM4B": "Stvorene M4B datoteke spremit će se u vašu mapu sa zvučnim knjigama:",
|
"LabelEncodingFinishedM4B": "Gotove M4B datoteke spremit će se u vašu mapu sa zvučnim knjigama:",
|
||||||
"LabelEncodingInfoEmbedded": "Meta-podatci će se ugraditi u zvučne zapise u vašoj mapi sa zvučnim knjigama.",
|
"LabelEncodingInfoEmbedded": "Meta-podatci će se ugraditi u zvučne zapise u vašoj mapi sa zvučnim knjigama.",
|
||||||
"LabelEncodingStartedNavigation": "Nakon pokretanja zadatka možete napustiti ovu stranicu.",
|
"LabelEncodingStartedNavigation": "Nakon pokretanja zadatka možete napustiti ovu stranicu.",
|
||||||
"LabelEncodingTimeWarning": "Kodiranje može potrajati do 30 minuta.",
|
"LabelEncodingTimeWarning": "Kodiranje može potrajati do 30 minuta.",
|
||||||
|
|
@ -355,8 +357,8 @@
|
||||||
"LabelEpisodes": "Nastavci",
|
"LabelEpisodes": "Nastavci",
|
||||||
"LabelEpisodic": "U nastavcima",
|
"LabelEpisodic": "U nastavcima",
|
||||||
"LabelExample": "Primjer",
|
"LabelExample": "Primjer",
|
||||||
"LabelExpandSeries": "Serijal prikaži prošireno",
|
"LabelExpandSeries": "Proširi serijal",
|
||||||
"LabelExpandSubSeries": "Podserijal prikaži prošireno",
|
"LabelExpandSubSeries": "Proširi podserijal",
|
||||||
"LabelExpired": "Istekao",
|
"LabelExpired": "Istekao",
|
||||||
"LabelExpiresAt": "Istječe",
|
"LabelExpiresAt": "Istječe",
|
||||||
"LabelExpiresInSeconds": "Istječe za (sekundi)",
|
"LabelExpiresInSeconds": "Istječe za (sekundi)",
|
||||||
|
|
@ -372,10 +374,11 @@
|
||||||
"LabelFileBornDate": "Stvoreno {0}",
|
"LabelFileBornDate": "Stvoreno {0}",
|
||||||
"LabelFileModified": "Datoteka izmijenjena",
|
"LabelFileModified": "Datoteka izmijenjena",
|
||||||
"LabelFileModifiedDate": "Izmijenjeno {0}",
|
"LabelFileModifiedDate": "Izmijenjeno {0}",
|
||||||
"LabelFilename": "Naziv datoteke",
|
"LabelFilename": "Ime datoteke",
|
||||||
"LabelFilterByUser": "Filtriraj po korisniku",
|
"LabelFilterByUser": "Filtriraj po korisniku",
|
||||||
"LabelFindEpisodes": "Pronađi nastavke",
|
"LabelFindEpisodes": "Pronađi nastavke",
|
||||||
"LabelFinished": "Dovršeno",
|
"LabelFinished": "Završeno",
|
||||||
|
"LabelFinishedDate": "Završeno {0}",
|
||||||
"LabelFolder": "Mapa",
|
"LabelFolder": "Mapa",
|
||||||
"LabelFolders": "Mape",
|
"LabelFolders": "Mape",
|
||||||
"LabelFontBold": "Podebljano",
|
"LabelFontBold": "Podebljano",
|
||||||
|
|
@ -391,7 +394,7 @@
|
||||||
"LabelHardDeleteFile": "Izbriši datoteku zauvijek",
|
"LabelHardDeleteFile": "Izbriši datoteku zauvijek",
|
||||||
"LabelHasEbook": "Ima e-knjigu",
|
"LabelHasEbook": "Ima e-knjigu",
|
||||||
"LabelHasSupplementaryEbook": "Ima dopunsku e-knjigu",
|
"LabelHasSupplementaryEbook": "Ima dopunsku e-knjigu",
|
||||||
"LabelHideSubtitles": "Skrij podnaslove",
|
"LabelHideSubtitles": "Sakrij podnaslove",
|
||||||
"LabelHighestPriority": "Najviši prioritet",
|
"LabelHighestPriority": "Najviši prioritet",
|
||||||
"LabelHost": "Poslužitelj",
|
"LabelHost": "Poslužitelj",
|
||||||
"LabelHour": "Sat",
|
"LabelHour": "Sat",
|
||||||
|
|
@ -399,7 +402,7 @@
|
||||||
"LabelIcon": "Ikona",
|
"LabelIcon": "Ikona",
|
||||||
"LabelImageURLFromTheWeb": "URL slike s weba",
|
"LabelImageURLFromTheWeb": "URL slike s weba",
|
||||||
"LabelInProgress": "U tijeku",
|
"LabelInProgress": "U tijeku",
|
||||||
"LabelIncludeInTracklist": "Uključi u popisu zvučnih zapisa",
|
"LabelIncludeInTracklist": "Uključi u popis zvučnih zapisa",
|
||||||
"LabelIncomplete": "Nepotpuno",
|
"LabelIncomplete": "Nepotpuno",
|
||||||
"LabelInterval": "Interval",
|
"LabelInterval": "Interval",
|
||||||
"LabelIntervalCustomDailyWeekly": "Prilagođeno dnevno/tjedno",
|
"LabelIntervalCustomDailyWeekly": "Prilagođeno dnevno/tjedno",
|
||||||
|
|
@ -433,7 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Br {0}",
|
"LabelLibraryFilterSublistEmpty": "Br {0}",
|
||||||
"LabelLibraryItem": "Stavka knjižnice",
|
"LabelLibraryItem": "Stavka knjižnice",
|
||||||
"LabelLibraryName": "Ime knjižnice",
|
"LabelLibraryName": "Ime knjižnice",
|
||||||
"LabelLibrarySortByProgress": "Napredak ažuriran",
|
"LabelLibrarySortByProgress": "Napredak: zadnje ažurirano",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Napredak: završeno",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Napredak: započeto",
|
||||||
"LabelLimit": "Ograničenje",
|
"LabelLimit": "Ograničenje",
|
||||||
"LabelLineSpacing": "Razmak između redaka",
|
"LabelLineSpacing": "Razmak između redaka",
|
||||||
"LabelListenAgain": "Ponovno poslušaj",
|
"LabelListenAgain": "Ponovno poslušaj",
|
||||||
|
|
@ -446,8 +451,8 @@
|
||||||
"LabelMatchExistingUsersBy": "Prepoznaj postojeće korisnike pomoću",
|
"LabelMatchExistingUsersBy": "Prepoznaj postojeće korisnike pomoću",
|
||||||
"LabelMatchExistingUsersByDescription": "Rabi se za povezivanje postojećih korisnika. Nakon što se spoje, korisnike se prepoznaje temeljem jedinstvene oznake vašeg pružatelja SSO usluga",
|
"LabelMatchExistingUsersByDescription": "Rabi se za povezivanje postojećih korisnika. Nakon što se spoje, korisnike se prepoznaje temeljem jedinstvene oznake vašeg pružatelja SSO usluga",
|
||||||
"LabelMaxEpisodesToDownload": "Najveći broj nastavaka za preuzimanje. 0 za neograničeno.",
|
"LabelMaxEpisodesToDownload": "Najveći broj nastavaka za preuzimanje. 0 za neograničeno.",
|
||||||
"LabelMaxEpisodesToDownloadPerCheck": "Najviše novih nastavaka za preuzimanje po provjeri",
|
"LabelMaxEpisodesToDownloadPerCheck": "Najveći broj novih nastavaka za preuzimanje po provjeri",
|
||||||
"LabelMaxEpisodesToKeep": "Najviše nastavaka za čuvanje",
|
"LabelMaxEpisodesToKeep": "Najveći broj nastavaka za čuvanje",
|
||||||
"LabelMaxEpisodesToKeepHelp": "Ako je vrijednost 0, nema ograničenja broja. Nakon automatskog preuzimanja novog nastavka ova funkcija briše najstariji nastavak ako ih ima više od zadanog broja. Ovo briše samo jedan nastavak po novom preuzetom nastavku.",
|
"LabelMaxEpisodesToKeepHelp": "Ako je vrijednost 0, nema ograničenja broja. Nakon automatskog preuzimanja novog nastavka ova funkcija briše najstariji nastavak ako ih ima više od zadanog broja. Ovo briše samo jedan nastavak po novom preuzetom nastavku.",
|
||||||
"LabelMediaPlayer": "Reproduktor medijskih sadržaja",
|
"LabelMediaPlayer": "Reproduktor medijskih sadržaja",
|
||||||
"LabelMediaType": "Vrsta medija",
|
"LabelMediaType": "Vrsta medija",
|
||||||
|
|
@ -472,11 +477,12 @@
|
||||||
"LabelNewestAuthors": "Najnoviji autori",
|
"LabelNewestAuthors": "Najnoviji autori",
|
||||||
"LabelNewestEpisodes": "Najnoviji nastavci",
|
"LabelNewestEpisodes": "Najnoviji nastavci",
|
||||||
"LabelNextBackupDate": "Sljedeća izrada sigurnosne kopije",
|
"LabelNextBackupDate": "Sljedeća izrada sigurnosne kopije",
|
||||||
|
"LabelNextChapters": "Sljedeća poglavlja bit će:",
|
||||||
"LabelNextScheduledRun": "Sljedeće zakazano izvođenje",
|
"LabelNextScheduledRun": "Sljedeće zakazano izvođenje",
|
||||||
"LabelNoApiKeys": "Nema API ključeva",
|
"LabelNoApiKeys": "Nema API ključeva",
|
||||||
"LabelNoCustomMetadataProviders": "Nema prilagođenih pružatelja meta-podataka",
|
"LabelNoCustomMetadataProviders": "Nema prilagođenih pružatelja meta-podataka",
|
||||||
"LabelNoEpisodesSelected": "Nema odabranih nastavaka",
|
"LabelNoEpisodesSelected": "Nema odabranih nastavaka",
|
||||||
"LabelNotFinished": "Nije dovršeno",
|
"LabelNotFinished": "Nezavršeno",
|
||||||
"LabelNotStarted": "Nije započeto",
|
"LabelNotStarted": "Nije započeto",
|
||||||
"LabelNotes": "Bilješke",
|
"LabelNotes": "Bilješke",
|
||||||
"LabelNotificationAppriseURL": "Apprise URL(ovi)",
|
"LabelNotificationAppriseURL": "Apprise URL(ovi)",
|
||||||
|
|
@ -489,10 +495,11 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Najveći broj događaja za obavijest u redu čekanja",
|
"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.",
|
"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",
|
"LabelNumberOfBooks": "Broj knjiga",
|
||||||
|
"LabelNumberOfChapters": "Broj poglavljâ:",
|
||||||
"LabelNumberOfEpisodes": "broj nastavaka",
|
"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:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Ime 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 će se odbiti. Ako 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'.",
|
"LabelOpenIDClaims": "Sljedeće opcije ostavite praznima ako želite onemogućiti napredno dodjeljivanje grupa i dozvola, odnosno ako želite automatski dodijeliti grupu 'korisnik'.",
|
||||||
"LabelOpenIDGroupClaimDescription": "Naziv OpenID zahtjeva koji sadrži popis korisnikovih grupa. Često se naziva <code>groups</code>. <b>Ako se konfigurira</b>, aplikacija će automatski dodijeliti uloge temeljem korisnikovih članstava u grupama, pod uvjetom da se iste zovu 'admin', 'user' ili 'guest' u zahtjevu (ne razlikuju se velika i mala slova). Zahtjev treba sadržavati popis i ako je korisnik član više grupa, aplikacija će dodijeliti ulogu koja odgovara najvišoj razini pristupa. Ukoliko se niti jedna grupa ne podudara, pristup će biti onemogućen.",
|
"LabelOpenIDGroupClaimDescription": "Ime OpenID zahtjeva koji sadrži popis grupa korisnika. Često se zove <code>groups</code>. <b>Ako se konfigurira</b>, aplikacija će automatski dodijeliti uloge temeljem korisničkih članstava u grupama, pod uvjetom da se iste zovu 'admin', 'user' ili 'guest' u zahtjevu (ne razlikuju se velika i mala slova). Zahtjev treba sadržavati popis i ako je korisnik član više grupa, aplikacija će dodijeliti ulogu koja odgovara najvišoj razini pristupa. Ukoliko se niti jedna grupa ne podudara, pristup će se odbiti.",
|
||||||
"LabelOpenRSSFeed": "Otvori RSS Feed",
|
"LabelOpenRSSFeed": "Otvori RSS Feed",
|
||||||
"LabelOverwrite": "Prepiši",
|
"LabelOverwrite": "Prepiši",
|
||||||
"LabelPaginationPageXOfY": "Stranica {0} od {1}",
|
"LabelPaginationPageXOfY": "Stranica {0} od {1}",
|
||||||
|
|
@ -506,7 +513,7 @@
|
||||||
"LabelPermissionsDelete": "Smije brisati",
|
"LabelPermissionsDelete": "Smije brisati",
|
||||||
"LabelPermissionsDownload": "Smije preuzimati",
|
"LabelPermissionsDownload": "Smije preuzimati",
|
||||||
"LabelPermissionsUpdate": "Smije ažurirati",
|
"LabelPermissionsUpdate": "Smije ažurirati",
|
||||||
"LabelPermissionsUpload": "Smije učitavati",
|
"LabelPermissionsUpload": "Smije prenositi",
|
||||||
"LabelPersonalYearReview": "Vaš godišnji pregled ({0})",
|
"LabelPersonalYearReview": "Vaš godišnji pregled ({0})",
|
||||||
"LabelPhotoPathURL": "Putanja ili URL fotografije",
|
"LabelPhotoPathURL": "Putanja ili URL fotografije",
|
||||||
"LabelPlayMethod": "Način reprodukcije",
|
"LabelPlayMethod": "Način reprodukcije",
|
||||||
|
|
@ -538,11 +545,11 @@
|
||||||
"LabelRSSFeedSlug": "Slug RSS izvora",
|
"LabelRSSFeedSlug": "Slug RSS izvora",
|
||||||
"LabelRSSFeedURL": "URL RSS izvora",
|
"LabelRSSFeedURL": "URL RSS izvora",
|
||||||
"LabelRandomly": "Nasumično",
|
"LabelRandomly": "Nasumično",
|
||||||
"LabelReAddSeriesToContinueListening": "Ponovno dodaj serijal u Nastavi slušati",
|
"LabelReAddSeriesToContinueListening": "Ponovo dodaj serijal u „Nastavi slušati”",
|
||||||
"LabelRead": "Čitaj",
|
"LabelRead": "Čitaj",
|
||||||
"LabelReadAgain": "Ponovno čitaj",
|
"LabelReadAgain": "Ponovno čitaj",
|
||||||
"LabelReadEbookWithoutProgress": "Čitaj e-knjige bez praćenja napretka",
|
"LabelReadEbookWithoutProgress": "Čitaj e-knjige bez praćenja napretka",
|
||||||
"LabelRecentSeries": "Najnoviji serijali",
|
"LabelRecentSeries": "Nedavni serijali",
|
||||||
"LabelRecentlyAdded": "Nedavno dodano",
|
"LabelRecentlyAdded": "Nedavno dodano",
|
||||||
"LabelRecommended": "Preporučeno",
|
"LabelRecommended": "Preporučeno",
|
||||||
"LabelRedo": "Ponovi",
|
"LabelRedo": "Ponovi",
|
||||||
|
|
@ -565,7 +572,7 @@
|
||||||
"LabelSelectEpisodesShowing": "Prikazujem {0} odabranih nastavaka",
|
"LabelSelectEpisodesShowing": "Prikazujem {0} odabranih nastavaka",
|
||||||
"LabelSelectUser": "Odaberite korisnika",
|
"LabelSelectUser": "Odaberite korisnika",
|
||||||
"LabelSelectUsers": "Označi korisnike",
|
"LabelSelectUsers": "Označi korisnike",
|
||||||
"LabelSendEbookToDevice": "Pošalji e-knjigu …",
|
"LabelSendEbookToDevice": "Pošalji e-knjigu na…",
|
||||||
"LabelSequence": "Slijed",
|
"LabelSequence": "Slijed",
|
||||||
"LabelSerial": "Serijal",
|
"LabelSerial": "Serijal",
|
||||||
"LabelSeries": "Serijal",
|
"LabelSeries": "Serijal",
|
||||||
|
|
@ -581,36 +588,36 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeumorfni dizajn sa drvenim policama",
|
"LabelSettingsBookshelfViewHelp": "Skeumorfni dizajn sa drvenim policama",
|
||||||
"LabelSettingsChromecastSupport": "Podrška za Chromecast",
|
"LabelSettingsChromecastSupport": "Podrška za Chromecast",
|
||||||
"LabelSettingsDateFormat": "Format datuma",
|
"LabelSettingsDateFormat": "Format datuma",
|
||||||
"LabelSettingsEnableWatcher": "Automatski pretražuj ima li promjena u knjižnicama",
|
"LabelSettingsEnableWatcher": "Automatski prati promjene u knjižnicama",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Automatski traži promjene u knjižnicama",
|
"LabelSettingsEnableWatcherForLibrary": "Automatski prati promjene u knjižnici",
|
||||||
"LabelSettingsEnableWatcherHelp": "Omogućuje automatsko dodavanje/ažuriranje stavki kada se uoče izmjene datoteka. *Potrebno je ponovno pokretanje poslužitelja",
|
"LabelSettingsEnableWatcherHelp": "Omogućuje automatsko dodavanje/ažuriranje stavki kada se uoče izmjene datoteka. *Potrebno je ponovno pokretanje poslužitelja",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Omogući skripte u epub datotekama",
|
"LabelSettingsEpubsAllowScriptedContent": "Omogući skripte u epub datotekama",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Omogućuje epub datotekama izvođenje skripti. Preporučamo isključiti ovu mogućnost ukoliko nemate povjerenja u izvore epub datoteka.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Omogućuje epub datotekama izvođenje skripti. Preporučamo isključiti ovu mogućnost ukoliko nemate povjerenja u izvore epub datoteka.",
|
||||||
"LabelSettingsExperimentalFeatures": "Eksperimentalne značajke",
|
"LabelSettingsExperimentalFeatures": "Eksperimentalne funkcije",
|
||||||
"LabelSettingsExperimentalFeaturesHelp": "Značajke u razvoju za koje trebamo vaše povratne informacije i pomoć u testiranju. Kliknite za otvaranje rasprave na githubu.",
|
"LabelSettingsExperimentalFeaturesHelp": "Funkcije u razvoju za koje trebamo vaše povratne informacije i pomoć u testiranju. Kliknite za otvaranje rasprave na githubu.",
|
||||||
"LabelSettingsFindCovers": "Pronađi naslovnice",
|
"LabelSettingsFindCovers": "Pronađi naslovnice",
|
||||||
"LabelSettingsFindCoversHelp": "Ako vaša zvučna knjiga nema ugrađenu naslovnicu ili sliku naslovnice u mapi, skener će pokušati pronaći naslovnicu.<br>Napomena: ovo će produžiti trajanje skeniranja",
|
"LabelSettingsFindCoversHelp": "Ako vaša zvučna knjiga nema ugrađenu naslovnicu ili sliku naslovnice u mapi, skener će pokušati pronaći naslovnicu.<br>Napomena: ovo će produžiti trajanje skeniranja",
|
||||||
"LabelSettingsHideSingleBookSeries": "Skrij serijale sa samo jednom knjigom",
|
"LabelSettingsHideSingleBookSeries": "Sakrij serijale sa samo jednom knjigom",
|
||||||
"LabelSettingsHideSingleBookSeriesHelp": "Serijali koji se sastoje od samo jedne knjige neće se prikazivati na stranici serijala i na policama početne stranice.",
|
"LabelSettingsHideSingleBookSeriesHelp": "Serijali koji se sastoje od samo jedne knjige neće se prikazivati na stranici serijala i na policama početne stranice.",
|
||||||
"LabelSettingsHomePageBookshelfView": "Prikaži početnu stranicu kao policu s knjigama",
|
"LabelSettingsHomePageBookshelfView": "Prikaži početnu stranicu kao policu s knjigama",
|
||||||
"LabelSettingsLibraryBookshelfView": "Prikaži knjižnicu kao policu s knjigama",
|
"LabelSettingsLibraryBookshelfView": "Prikaži knjižnicu kao policu s knjigama",
|
||||||
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "Postotak dovršenosti veći od",
|
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "Postotak završenosti je veći od",
|
||||||
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Preostalo vrijeme je manje od (sekundi)",
|
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Preostalo vrijeme je manje od (sekunde)",
|
||||||
"LabelSettingsLibraryMarkAsFinishedWhen": "Označi medij dovršenim kada",
|
"LabelSettingsLibraryMarkAsFinishedWhen": "Označi medij kao završen kada",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Preskoči ranije knjige u funkciji Nastavi serijal",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Preskoči ranije knjige u funkciji Nastavi serijal",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Na polici početne stranice Nastavi serijal prikazuje se prva nezapočeta knjiga serijala koji imaju barem jednu dovršenu knjigu i nijednu započetu knjigu. Ako se ova opcija uključi serijal će nastaviti od zadnje dovršene knjige umjesto od prve nezapočete knjige.",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Na polici početne stranice Nastavi serijal prikazuje se prva nezapočeta knjiga serijala koji imaju barem jednu završenu knjigu i nijednu započetu knjigu. Ako se ova opcija uključi serijal će nastaviti od zadnje završene knjige umjesto od prve nezapočete knjige.",
|
||||||
"LabelSettingsParseSubtitles": "Raščlani podnaslove",
|
"LabelSettingsParseSubtitles": "Raščlani podnaslove",
|
||||||
"LabelSettingsParseSubtitlesHelp": "Iz naziva mape zvučne knjige raščlanjuje podnaslov.<br>Podnaslov mora biti odvojen s \" - \"<br>npr. \"Naslov knjige - Ovo je podnaslov\" imat će podnaslov \"Ovo je podnaslov\"",
|
"LabelSettingsParseSubtitlesHelp": "Raščlani podnaslove iz imena mape zvučne knjige.<br>Podnaslov mora biti odvojen sa \" - \"<br>npr. \"Naslov knjige - Ovo je podnaslov\" imat će podnaslov \"Ovo je podnaslov\"",
|
||||||
"LabelSettingsPreferMatchedMetadata": "Daj prednost meta-podatcima prepoznatih stavki",
|
"LabelSettingsPreferMatchedMetadata": "Daj prednost meta-podatcima prepoznatih stavki",
|
||||||
"LabelSettingsPreferMatchedMetadataHelp": "Podatci prepoznatog naslova nadjačat će postojeće informacije kod korištenja funkcije Brzog prepoznavanja. Zadana funkcionalnost je da Brzo prepoznavanje samo dopuni podatke koji nedostaju.",
|
"LabelSettingsPreferMatchedMetadataHelp": "Podatci prepoznatog naslova će nadjačati postojeće informacije pri korištenju funkcije „Brzo prepoznavanje”. Zadana funkcionalnost je da „Brzo prepoznavanje” samo doda nedostajuće podatke.",
|
||||||
"LabelSettingsSkipMatchingBooksWithASIN": "Preskoči prepoznavanje knjiga koje već imaju ASIN",
|
"LabelSettingsSkipMatchingBooksWithASIN": "Preskoči prepoznavanje knjiga koje već imaju ASIN",
|
||||||
"LabelSettingsSkipMatchingBooksWithISBN": "Preskoči prepoznavanje knjiga koje već imaju ISBN",
|
"LabelSettingsSkipMatchingBooksWithISBN": "Preskoči prepoznavanje knjiga koje već imaju ISBN",
|
||||||
"LabelSettingsSortingIgnorePrefixes": "Zanemari prefikse kod sortiranja",
|
"LabelSettingsSortingIgnorePrefixes": "Zanemari prefikse kod sortiranja",
|
||||||
"LabelSettingsSortingIgnorePrefixesHelp": "npr. za prefiks \"the\" naslov knjige \"The Book Title\" sortirat će se \"Book Title, The\"",
|
"LabelSettingsSortingIgnorePrefixesHelp": "npr. za prefiks \"the\" naslov knjige \"The Book Title\" sortirat će se \"Book Title, The\"",
|
||||||
"LabelSettingsSquareBookCovers": "Koristi pravokutne naslovnice knjiga",
|
"LabelSettingsSquareBookCovers": "Koristi pravokutne naslovnice knjiga",
|
||||||
"LabelSettingsSquareBookCoversHelp": "Koristi pravokutne naslovnice umjesto uobičajenih naslovnica omjera 1,6:1",
|
"LabelSettingsSquareBookCoversHelp": "Koristi pravokutne naslovnice umjesto uobičajenih naslovnica omjera 1,6:1",
|
||||||
"LabelSettingsStoreCoversWithItem": "Spremi naslovnice uz stavke",
|
"LabelSettingsStoreCoversWithItem": "Spremi naslovnice sa stavkom",
|
||||||
"LabelSettingsStoreCoversWithItemHelp": "Naslovnice se obično spremaju u /metadata/items, ako uključite ovu opciju naslovnice će se spremati u mapu knjižničke stavke. Čuva se samo jedna datoteka naziva \"cover\"",
|
"LabelSettingsStoreCoversWithItemHelp": "Naslovnice se obično spremaju u /metadata/items. Uključivanjem ove opcije naslovnice će se spremati u mapu stavki vaše knjižnice. Čuva se samo jedna datoteka s imenom \"cover\"",
|
||||||
"LabelSettingsStoreMetadataWithItem": "Spremi metapodatke uz stavku",
|
"LabelSettingsStoreMetadataWithItem": "Spremi metapodatke uz stavku",
|
||||||
"LabelSettingsStoreMetadataWithItemHelp": "Meta-podatci se obično spremaju u /metadata/items; ako uključite ovu postavku meta-podatci će se čuvati u mapama knjižničkih stavki",
|
"LabelSettingsStoreMetadataWithItemHelp": "Meta-podatci se obično spremaju u /metadata/items; ako uključite ovu postavku meta-podatci će se čuvati u mapama knjižničkih stavki",
|
||||||
"LabelSettingsTimeFormat": "Format vremena",
|
"LabelSettingsTimeFormat": "Format vremena",
|
||||||
|
|
@ -631,6 +638,7 @@
|
||||||
"LabelStartTime": "Vrijeme početka",
|
"LabelStartTime": "Vrijeme početka",
|
||||||
"LabelStarted": "Započeto",
|
"LabelStarted": "Započeto",
|
||||||
"LabelStartedAt": "Započeto",
|
"LabelStartedAt": "Započeto",
|
||||||
|
"LabelStartedDate": "Započeto {0}",
|
||||||
"LabelStatsAudioTracks": "Zvučni zapisi",
|
"LabelStatsAudioTracks": "Zvučni zapisi",
|
||||||
"LabelStatsAuthors": "Autori",
|
"LabelStatsAuthors": "Autori",
|
||||||
"LabelStatsBestDay": "Najbolji dan",
|
"LabelStatsBestDay": "Najbolji dan",
|
||||||
|
|
@ -639,7 +647,7 @@
|
||||||
"LabelStatsDaysListened": "Dana slušano",
|
"LabelStatsDaysListened": "Dana slušano",
|
||||||
"LabelStatsHours": "Sati",
|
"LabelStatsHours": "Sati",
|
||||||
"LabelStatsInARow": "uzastopno",
|
"LabelStatsInARow": "uzastopno",
|
||||||
"LabelStatsItemsFinished": "Dovršenih stavki",
|
"LabelStatsItemsFinished": "Završene stavke",
|
||||||
"LabelStatsItemsInLibrary": "Stavke u knjižnici",
|
"LabelStatsItemsInLibrary": "Stavke u knjižnici",
|
||||||
"LabelStatsMinutes": "minute",
|
"LabelStatsMinutes": "minute",
|
||||||
"LabelStatsMinutesListening": "Minuta odslušano",
|
"LabelStatsMinutesListening": "Minuta odslušano",
|
||||||
|
|
@ -698,12 +706,12 @@
|
||||||
"LabelUpdateDetails": "Ažuriraj pojedinosti",
|
"LabelUpdateDetails": "Ažuriraj pojedinosti",
|
||||||
"LabelUpdateDetailsHelp": "Dopusti prepisivanje postojećih podataka za odabrane knjige kada se prepoznaju",
|
"LabelUpdateDetailsHelp": "Dopusti prepisivanje postojećih podataka za odabrane knjige kada se prepoznaju",
|
||||||
"LabelUpdatedAt": "Ažurirano",
|
"LabelUpdatedAt": "Ažurirano",
|
||||||
"LabelUploaderDragAndDrop": "Pritisni i prevuci datoteke ili mape",
|
"LabelUploaderDragAndDrop": "Povuci i ispusti datoteke ili mape",
|
||||||
"LabelUploaderDragAndDropFilesOnly": "Pritisni i prevuci datoteke",
|
"LabelUploaderDragAndDropFilesOnly": "Povuci i ispusti datoteke",
|
||||||
"LabelUploaderDropFiles": "Ispusti datoteke",
|
"LabelUploaderDropFiles": "Ispusti datoteke",
|
||||||
"LabelUploaderItemFetchMetadataHelp": "Automatski dohvati naslov, autora i serijal",
|
"LabelUploaderItemFetchMetadataHelp": "Automatski dohvati naslov, autora i serijal",
|
||||||
"LabelUseAdvancedOptions": "Koristi se naprednim opcijama",
|
"LabelUseAdvancedOptions": "Koristi napredne opcije",
|
||||||
"LabelUseChapterTrack": "Upravljaj trakom poglavlja",
|
"LabelUseChapterTrack": "Koristi zvučni zapis poglavlja",
|
||||||
"LabelUseFullTrack": "Koristi cijeli zvučni zapis",
|
"LabelUseFullTrack": "Koristi cijeli zvučni zapis",
|
||||||
"LabelUseZeroForUnlimited": "0 za neograničeno",
|
"LabelUseZeroForUnlimited": "0 za neograničeno",
|
||||||
"LabelUser": "Korisnik",
|
"LabelUser": "Korisnik",
|
||||||
|
|
@ -727,12 +735,12 @@
|
||||||
"LabelYourPlaylists": "Vaši popisi za izvođenje",
|
"LabelYourPlaylists": "Vaši popisi za izvođenje",
|
||||||
"LabelYourProgress": "Vaš napredak",
|
"LabelYourProgress": "Vaš napredak",
|
||||||
"MessageAddToPlayerQueue": "Dodaj u redoslijed izvođenja",
|
"MessageAddToPlayerQueue": "Dodaj u redoslijed izvođenja",
|
||||||
"MessageAppriseDescription": "Da biste se koristili ovom značajkom, treba vam instanca <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API-ja</a> ili API koji može rukovati istom vrstom zahtjeva.<br />The Adresa Apprise API-ja treba biti puna URL putanja za slanje obavijesti, npr. ako vam se API instanca poslužuje na adresi <code>http://192.168.1.1:8337</code> trebate upisati <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Za korištnje ove funkcije, treba vam instanca <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API-ja</a> ili API koji može rukovati istom vrstom zahtjeva.<br />URL Apprise API-ja mora biti potpuna URL putanja za slanje obavijesti, npr. ako vam se API instanca poslužuje na adresi <code>http://192.168.1.1:8337</code> morate upisati <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Upišite ASIN iz odgovarajuće Audibleove regije, ne s Amazonov.",
|
"MessageAsinCheck": "Upišite ASIN iz odgovarajuće Audibleove regije, ne s Amazonov.",
|
||||||
"MessageAuthenticationLegacyTokenWarning": "Starije API tokene ćemo ukloniti. Umjesto njih, koristite se <a href=\"/config/api-keys\">API ključevima</a> .",
|
"MessageAuthenticationLegacyTokenWarning": "Starije API tokene ćemo ukloniti. Umjesto njih, koristite se <a href=\"/config/api-keys\">API ključevima</a> .",
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Ponovno pokrenite poslužitelj da biste primijenili OIDC promjene.",
|
"MessageAuthenticationOIDCChangesRestart": "Ponovno pokrenite poslužitelj da biste primijenili OIDC promjene.",
|
||||||
"MessageAuthenticationSecurityMessage": "Provjera autentičnosti poboljšana je radi sigurnosti. Svi se korisnici moraju ponovno prijaviti.",
|
"MessageAuthenticationSecurityMessage": "Provjera autentičnosti poboljšana je radi sigurnosti. Svi se korisnici moraju ponovno prijaviti.",
|
||||||
"MessageBackupsDescription": "Sigurnosne kopije sadrže korisnike, korisnikov napredak medija, pojedinosti knjižničke građe, postavke poslužitelja i slike koje se spremaju u <code>/metadata/items</code> & <code>/metadata/authors</code>. Sigurnosne kopije ne sadrže niti jednu datoteku iz mapa knjižnice.",
|
"MessageBackupsDescription": "Sigurnosne kopije sadrže korisnike, napredak korisnika, pojedinosti knjižničke građe, postavke poslužitelja i slike koje se spremaju u <code>/metadata/items</code> i <code>/metadata/authors</code>. Sigurnosne kopije ne sadrže niti jednu datoteku iz mapa knjižnice.",
|
||||||
"MessageBackupsLocationEditNote": "Napomena: Uređivanje lokacije za sigurnosne kopije ne premješta ili mijenja postojeće sigurnosne kopije",
|
"MessageBackupsLocationEditNote": "Napomena: Uređivanje lokacije za sigurnosne kopije ne premješta ili mijenja postojeće sigurnosne kopije",
|
||||||
"MessageBackupsLocationNoEditNote": "Napomena: Lokacija za sigurnosne kopije zadana je kroz varijablu okoline i ovdje se ne može izmijeniti.",
|
"MessageBackupsLocationNoEditNote": "Napomena: Lokacija za sigurnosne kopije zadana je kroz varijablu okoline i ovdje se ne može izmijeniti.",
|
||||||
"MessageBackupsLocationPathEmpty": "Putanja do lokacije za sigurnosne kopije ne može ostati prazna",
|
"MessageBackupsLocationPathEmpty": "Putanja do lokacije za sigurnosne kopije ne može ostati prazna",
|
||||||
|
|
@ -745,13 +753,14 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Nema rezultata za filter \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Nema rezultata za filter \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Vaš upit nema rezultata",
|
"MessageBookshelfNoResultsForQuery": "Vaš upit nema rezultata",
|
||||||
"MessageBookshelfNoSeries": "Nemate niti jedan serijal",
|
"MessageBookshelfNoSeries": "Nemate niti jedan serijal",
|
||||||
|
"MessageBulkChapterPattern": "Koliko poglavlja želite dodati s ovim obrascem numeracije?",
|
||||||
"MessageChapterEndIsAfter": "Kraj poglavlja je nakon kraja zvučne knjige",
|
"MessageChapterEndIsAfter": "Kraj poglavlja je nakon kraja zvučne knjige",
|
||||||
"MessageChapterErrorFirstNotZero": "Prvo poglavlje mora započeti u 0",
|
"MessageChapterErrorFirstNotZero": "Prvo poglavlje mora započeti u 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Netočno vrijeme početka, mora biti manje od trajanja zvučne knjige",
|
"MessageChapterErrorStartGteDuration": "Netočno vrijeme početka, mora biti manje od trajanja zvučne knjige",
|
||||||
"MessageChapterErrorStartLtPrev": "Netočno vrijeme početka, mora biti veće ili jednako vremenu početka prethodnog poglavlja",
|
"MessageChapterErrorStartLtPrev": "Netočno vrijeme početka, mora biti veće ili jednako vremenu početka prethodnog poglavlja",
|
||||||
"MessageChapterStartIsAfter": "Početak poglavlja je nakon kraja zvučne knjige",
|
"MessageChapterStartIsAfter": "Početak poglavlja je nakon kraja zvučne knjige",
|
||||||
"MessageChaptersNotFound": "Poglavlja nisu pronađena",
|
"MessageChaptersNotFound": "Poglavlja nisu pronađena",
|
||||||
"MessageCheckingCron": "Provjeravam cron...",
|
"MessageCheckingCron": "Provjeravanje cron izraza...",
|
||||||
"MessageConfirmCloseFeed": "Sigurno želite zatvoriti ovaj izvor?",
|
"MessageConfirmCloseFeed": "Sigurno želite zatvoriti ovaj izvor?",
|
||||||
"MessageConfirmDeleteApiKey": "Sigurno želite izbrisati API ključ \"{0}\"?",
|
"MessageConfirmDeleteApiKey": "Sigurno želite izbrisati API ključ \"{0}\"?",
|
||||||
"MessageConfirmDeleteBackup": "Sigurno želite izbrisati sigurnosnu kopiju za {0}?",
|
"MessageConfirmDeleteBackup": "Sigurno želite izbrisati sigurnosnu kopiju za {0}?",
|
||||||
|
|
@ -765,12 +774,12 @@
|
||||||
"MessageConfirmDeleteSession": "Sigurno želite izbrisati ovu sesiju?",
|
"MessageConfirmDeleteSession": "Sigurno želite izbrisati ovu sesiju?",
|
||||||
"MessageConfirmEmbedMetadataInAudioFiles": "Sigurno želite ugraditi meta-podatke u {0} zvučnih datoteka?",
|
"MessageConfirmEmbedMetadataInAudioFiles": "Sigurno želite ugraditi meta-podatke u {0} zvučnih datoteka?",
|
||||||
"MessageConfirmForceReScan": "Sigurno želite ponovno pokrenuti skeniranje?",
|
"MessageConfirmForceReScan": "Sigurno želite ponovno pokrenuti skeniranje?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Sigurno želite označiti sve nastavke dovršenima?",
|
"MessageConfirmMarkAllEpisodesFinished": "Sigurno želite označiti sve nastavke kao završene?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "Sigurno želite označiti sve nastavke nedovršenima?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "Sigurno želite označiti sve nastavke kao nezavršene?",
|
||||||
"MessageConfirmMarkItemFinished": "Sigurno želite označiti \"{0}\" dovršenim?",
|
"MessageConfirmMarkItemFinished": "Sigurno želite označiti stavku \"{0}\" kao završenu?",
|
||||||
"MessageConfirmMarkItemNotFinished": "Sigurno želite označiti \"{0}\" nedovršenim?",
|
"MessageConfirmMarkItemNotFinished": "Sigurno želite označiti stavku \"{0}\" kao nezavršenu?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Sigurno želite označiti sve knjige u ovom serijalu dovršenima?",
|
"MessageConfirmMarkSeriesFinished": "Sigurno želite označiti sve knjige u ovom serijalu kao završene?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Sigurno želite označiti sve knjige u ovom serijalu nedovršenima?",
|
"MessageConfirmMarkSeriesNotFinished": "Sigurno želite označiti sve knjige u ovom serijalu kao nezavršene?",
|
||||||
"MessageConfirmNotificationTestTrigger": "Želite li okinuti ovu obavijest s probnim podatcima?",
|
"MessageConfirmNotificationTestTrigger": "Želite li okinuti ovu obavijest s probnim podatcima?",
|
||||||
"MessageConfirmPurgeCache": "Brisanje predmemorije izbrisat će cijelu mapu <code>/metadata/cache</code>. <br /><br />Sigurno želite izbrisati mapu predmemorije?",
|
"MessageConfirmPurgeCache": "Brisanje predmemorije izbrisat će cijelu mapu <code>/metadata/cache</code>. <br /><br />Sigurno želite izbrisati mapu predmemorije?",
|
||||||
"MessageConfirmPurgeItemsCache": "Brisanje predmemorije stavki izbrisat će cijelu mapu <code>/metadata/cache/items</code>.<br />Jeste li sigurni?",
|
"MessageConfirmPurgeItemsCache": "Brisanje predmemorije stavki izbrisat će cijelu mapu <code>/metadata/cache/items</code>.<br />Jeste li sigurni?",
|
||||||
|
|
@ -798,14 +807,14 @@
|
||||||
"MessageConfirmUnlinkOpenId": "Sigurno želite odspojiti ovog korisnika s OpenID-ja?",
|
"MessageConfirmUnlinkOpenId": "Sigurno želite odspojiti ovog korisnika s OpenID-ja?",
|
||||||
"MessageDaysListenedInTheLastYear": "{0} dana slušanja u posljednjih godinu dana",
|
"MessageDaysListenedInTheLastYear": "{0} dana slušanja u posljednjih godinu dana",
|
||||||
"MessageDownloadingEpisode": "Preuzimam nastavak",
|
"MessageDownloadingEpisode": "Preuzimam nastavak",
|
||||||
"MessageDragFilesIntoTrackOrder": "Prevlačenjem datoteka složite pravilan redoslijed",
|
"MessageDragFilesIntoTrackOrder": "Povlači datoteke u ispravan redoslijed",
|
||||||
"MessageEmbedFailed": "Ugrađivanje nije uspjelo!",
|
"MessageEmbedFailed": "Ugrađivanje nije uspjelo!",
|
||||||
"MessageEmbedFinished": "Ugrađivanje je dovršeno!",
|
"MessageEmbedFinished": "Ugrađivanje je završeno!",
|
||||||
"MessageEmbedQueue": "Ugrađivanje meta-podataka dodano u red obrade ({0} u redu)",
|
"MessageEmbedQueue": "Ugrađivanje meta-podataka dodano u red obrade ({0} u redu)",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} nastavak(a) u redu za preuzimanje",
|
"MessageEpisodesQueuedForDownload": "{0} nastavak(a) u redu za preuzimanje",
|
||||||
"MessageEreaderDevices": "Da biste osigurali isporuku e-knjiga, možda ćete morati gornju adresu e-pošte dodati kao dopuštenog pošiljatelja za svaki od donjih uređaja.",
|
"MessageEreaderDevices": "Da biste osigurali isporuku e-knjiga, možda ćete morati gornju adresu e-pošte dodati kao dopuštenog pošiljatelja za svaki od donjih uređaja.",
|
||||||
"MessageFeedURLWillBe": "URL izvora bit će {0}",
|
"MessageFeedURLWillBe": "URL izvora bit će {0}",
|
||||||
"MessageFetching": "Dohvaćam...",
|
"MessageFetching": "Dohvaćanje...",
|
||||||
"MessageForceReScanDescription": "će ponovno skenirati sve datoteke kao nove datoteke. ID3 tagovi zvučnih datoteka, OPF datoteke i tekstualne datoteke skenirat će se kao da su nove.",
|
"MessageForceReScanDescription": "će ponovno skenirati sve datoteke kao nove datoteke. ID3 tagovi zvučnih datoteka, OPF datoteke i tekstualne datoteke skenirat će se kao da su nove.",
|
||||||
"MessageHeatmapListeningTimeTooltip": "<strong>{0} sluša</strong> na {1}",
|
"MessageHeatmapListeningTimeTooltip": "<strong>{0} sluša</strong> na {1}",
|
||||||
"MessageHeatmapNoListeningSessions": "Nema sesija slušanja na {0}",
|
"MessageHeatmapNoListeningSessions": "Nema sesija slušanja na {0}",
|
||||||
|
|
@ -815,27 +824,27 @@
|
||||||
"MessageItemsSelected": "{0} odabranih stavki",
|
"MessageItemsSelected": "{0} odabranih stavki",
|
||||||
"MessageItemsUpdated": "{0} stavki ažurirano",
|
"MessageItemsUpdated": "{0} stavki ažurirano",
|
||||||
"MessageJoinUsOn": "Pridruži nam se na",
|
"MessageJoinUsOn": "Pridruži nam se na",
|
||||||
"MessageLoading": "Učitavam...",
|
"MessageLoading": "Učitavanje...",
|
||||||
"MessageLoadingFolders": "Učitavam mape...",
|
"MessageLoadingFolders": "Učitavanje mape...",
|
||||||
"MessageLogsDescription": "Zapisnici se čuvaju u <code>/metadata/logs</code> u obliku JSON datoteka. Zapisnici pada sustava čuvaju se u datoteci <code>/metadata/logs/crash_logs.txt</code>.",
|
"MessageLogsDescription": "Zapisnici se čuvaju u <code>/metadata/logs</code> u obliku JSON datoteka. Zapisnici pada sustava čuvaju se u datoteci <code>/metadata/logs/crash_logs.txt</code>.",
|
||||||
"MessageM4BFailed": "M4B neuspješan!",
|
"MessageM4BFailed": "M4B datoteka neuspjela!",
|
||||||
"MessageM4BFinished": "M4B završio!",
|
"MessageM4BFinished": "M4B datoteka je završena!",
|
||||||
"MessageMapChapterTitles": "Mapiraj nazive poglavlja postojećim poglavljima zvučne knjige bez uređivanja vremenskih identifikatora",
|
"MessageMapChapterTitles": "Mapiraj imana poglavlja s vašim postojećim poglavljima zvučne knjige bez podešavanja vremenskih identifikatora",
|
||||||
"MessageMarkAllEpisodesFinished": "Označi sve nastavke dovršenima",
|
"MessageMarkAllEpisodesFinished": "Označi sve nastavke kao završene",
|
||||||
"MessageMarkAllEpisodesNotFinished": "Označi sve nastavke nedovršenima",
|
"MessageMarkAllEpisodesNotFinished": "Označi sve nastavke kao nezavršene",
|
||||||
"MessageMarkAsFinished": "Označi kao dovršeno",
|
"MessageMarkAsFinished": "Označi kao završeno",
|
||||||
"MessageMarkAsNotFinished": "Označi kao nedovršeno",
|
"MessageMarkAsNotFinished": "Označi kao nezavršeno",
|
||||||
"MessageMatchBooksDescription": "će pokušati prepoznati knjige iz knjižnice u katalogu odabranog pružatelja podatka te nadopuniti podatke koji nedostaju i naslovnice. Ne prepisuje preko postojećih podataka.",
|
"MessageMatchBooksDescription": "će pokušati prepoznati knjige iz knjižnice u katalogu odabranog pružatelja podatka te nadopuniti podatke koji nedostaju i naslovnice. Ne prepisuje postojeće podatke.",
|
||||||
"MessageNoAudioTracks": "Nema zvučnih zapisa",
|
"MessageNoAudioTracks": "Nema zvučnih zapisa",
|
||||||
"MessageNoAuthors": "Nema autora",
|
"MessageNoAuthors": "Nema autora",
|
||||||
"MessageNoBackups": "Nema sigurnosnih kopija",
|
"MessageNoBackups": "Nema sigurnosnih kopija",
|
||||||
"MessageNoBookmarks": "Nema knjižnih oznaka",
|
"MessageNoBookmarks": "Nema knjižnih oznaka",
|
||||||
"MessageNoChapters": "Nema poglavlja",
|
"MessageNoChapters": "Nema poglavlja",
|
||||||
"MessageNoCollections": "Nema zbirki",
|
"MessageNoCollections": "Nema zbirki",
|
||||||
"MessageNoCoversFound": "Naslovnice nisu pronađene",
|
"MessageNoCoversFound": "Nije pronađena nijedna naslovnica",
|
||||||
"MessageNoDescription": "Nema opisa",
|
"MessageNoDescription": "Nema opisa",
|
||||||
"MessageNoDevices": "Nema uređaja",
|
"MessageNoDevices": "Nema uređaja",
|
||||||
"MessageNoDownloadsInProgress": "Nema preuzimanja u tijeku",
|
"MessageNoDownloadsInProgress": "Trenutačno nema preuzimanja u tijeku",
|
||||||
"MessageNoDownloadsQueued": "Nema preuzimanja u redu",
|
"MessageNoDownloadsQueued": "Nema preuzimanja u redu",
|
||||||
"MessageNoEpisodeMatchesFound": "Nije pronađen ni jedan odgovarajući nastavak",
|
"MessageNoEpisodeMatchesFound": "Nije pronađen ni jedan odgovarajući nastavak",
|
||||||
"MessageNoEpisodes": "Nema nastavaka",
|
"MessageNoEpisodes": "Nema nastavaka",
|
||||||
|
|
@ -864,28 +873,28 @@
|
||||||
"MessagePauseChapter": "Pauziraj reprodukciju poglavlja",
|
"MessagePauseChapter": "Pauziraj reprodukciju poglavlja",
|
||||||
"MessagePlayChapter": "Slušaj početak poglavlja",
|
"MessagePlayChapter": "Slušaj početak poglavlja",
|
||||||
"MessagePlaylistCreateFromCollection": "Stvori popis za izvođenje od zbirke",
|
"MessagePlaylistCreateFromCollection": "Stvori popis za izvođenje od zbirke",
|
||||||
"MessagePleaseWait": "Molimo pričekajte...",
|
"MessagePleaseWait": "Pričekajte...",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "Podcast nema adresu RSS izvora za prepoznavanje",
|
"MessagePodcastHasNoRSSFeedForMatching": "Podcast nema adresu RSS izvora za prepoznavanje",
|
||||||
"MessagePodcastSearchField": "Upišite izraz za pretraživanje ili URL RSS izvora",
|
"MessagePodcastSearchField": "Upišite izraz za pretraživanje ili URL RSS izvora",
|
||||||
"MessageQuickEmbedInProgress": "Brzo ugrađivanje u tijeku",
|
"MessageQuickEmbedInProgress": "Brzo ugrađivanje u tijeku",
|
||||||
"MessageQuickEmbedQueue": "Dodano u red za brzo ugrađivanje ({0} u redu izvođenja)",
|
"MessageQuickEmbedQueue": "Dodano u red za brzo ugrađivanje ({0} u redu izvođenja)",
|
||||||
"MessageQuickMatchAllEpisodes": "Brzo prepoznavanje svih nastavaka",
|
"MessageQuickMatchAllEpisodes": "Brzo prepoznavanje svih nastavaka",
|
||||||
"MessageQuickMatchDescription": "Popuni pojedinosti i naslovnice koji nedostaju prvim pronađenim rezultatom za '{0}'. Ne prepisuje podatke osim ako ne uključite mogućnost 'Daj prednost meta-podatcima prepoznatih stavki'.",
|
"MessageQuickMatchDescription": "Popuni pojedinosti i naslovnice koji nedostaju prvim pronađenim rezultatom za '{0}'. Ne prepisuje podatke osim ako je postavka poslužitelja „Daj prednost meta-podatcima prepoznatih stavki” uključena.",
|
||||||
"MessageRemoveChapter": "Ukloni poglavlje",
|
"MessageRemoveChapter": "Ukloni poglavlje",
|
||||||
"MessageRemoveEpisodes": "Ukloni {0} nastavaka",
|
"MessageRemoveEpisodes": "Ukloni {0} nastavaka",
|
||||||
"MessageRemoveFromPlayerQueue": "Ukloni iz redoslijeda izvođenja",
|
"MessageRemoveFromPlayerQueue": "Ukloni iz redoslijeda izvođenja",
|
||||||
"MessageRemoveUserWarning": "Sigurno želite trajno izbrisati korisnika \"{0}\"?",
|
"MessageRemoveUserWarning": "Sigurno želite trajno izbrisati korisnika \"{0}\"?",
|
||||||
"MessageReportBugsAndContribute": "Prijavite pogreške, zatražite funkcionalnosti i doprinesite na",
|
"MessageReportBugsAndContribute": "Prijavite pogreške, zatražite funkcije i doprinesite na",
|
||||||
"MessageResetChaptersConfirm": "Sigurno želite vratiti poglavlja na prethodno stanje i poništiti učinjene promjene?",
|
"MessageResetChaptersConfirm": "Sigurno želite vratiti poglavlja na prethodno stanje i poništiti učinjene promjene?",
|
||||||
"MessageRestoreBackupConfirm": "Sigurno želite vratiti sigurnosnu kopiju izrađenu",
|
"MessageRestoreBackupConfirm": "Sigurno želite vratiti sigurnosnu kopiju izrađenu",
|
||||||
"MessageRestoreBackupWarning": "Vraćanjem sigurnosne kopije prepisat ćete cijelu bazu podataka koja se nalazi u /config i slike naslovnice u /metadata/items i /metadata/authors.<br /><br />Sigurnosne kopije ne mijenjaju datoteke koje se nalaze u mapama vaših knjižnica. Ako ste u postavkama poslužitelja uključili mogućnost spremanja naslovnica i meta-podataka u mape knjižnice, te se datoteke neće niti sigurnosno pohraniti niti prepisati. <br /><br />Svi klijenti koji se spajaju na vaš poslužitelj automatski će se osvježiti.",
|
"MessageRestoreBackupWarning": "Vraćanjem sigurnosne kopije prepisat ćete cijelu bazu podataka koja se nalazi u /config i slike naslovnice u /metadata/items i /metadata/authors.<br /><br />Sigurnosne kopije ne mijenjaju datoteke koje se nalaze u mapama vaših knjižnica. Ako ste u postavkama poslužitelja uključili mogućnost spremanja naslovnica i meta-podataka u mape knjižnice, te se datoteke neće niti sigurnosno pohraniti niti prepisati. <br /><br />Svi klijenti koji se spajaju na vaš poslužitelj automatski će se osvježiti.",
|
||||||
"MessageScheduleLibraryScanNote": "Za većinu korisnika se preporučuje ostaviti ovu funkciju deaktiviranom i ostaviti postavku promatrača mape aktiviranom. Promatrač mapa će automatski otkriti promjene u mapama vaše knjižnice. Promatrač mapa ne radi na svakom datotečnom sustavu (kao što je NFS) pa se umjesto njega mogu koristiti planirana pretraživanja knjižnice.",
|
"MessageScheduleLibraryScanNote": "Za većinu korisnika se preporučuje ostaviti ovu funkciju deaktiviranom kao i fukciju „Automatski prati promjene u knjižnici” koja automatski otkriva promjene u mapama vaše knjižnice. Fukcija „Automatski prati promjene u knjižnici” ne radi na svakom datotečnom sustavu (kao što je NFS).",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Pokreni svaki {0} u {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Pokreni svaki {0} u {1}",
|
||||||
"MessageSearchResultsFor": "Rezultati pretrage za",
|
"MessageSearchResultsFor": "Rezultati pretrage za",
|
||||||
"MessageSelected": "{0} odabrano",
|
"MessageSelected": "{0} odabrano",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Slijed serijala ne može sadržavati praznine",
|
"MessageSeriesSequenceCannotContainSpaces": "Slijed serijala ne može sadržavati praznine",
|
||||||
"MessageServerCouldNotBeReached": "Nije moguće pristupiti poslužitelju",
|
"MessageServerCouldNotBeReached": "Nije bilo moguće pristupiti poslužitelju",
|
||||||
"MessageSetChaptersFromTracksDescription": "Postavi poglavlja koristeći se zvučnom datotekom kao poglavljem i nazivom datoteke kao naslovom poglavlja",
|
"MessageSetChaptersFromTracksDescription": "Postavi poglavlja koristeći svaku zvučnu datoteku kao poglavlje, a naslov poglavlja kao ime datoteke",
|
||||||
"MessageShareExpirationWillBe": "Vrijeme isteka će biti <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Vrijeme isteka će biti <strong>{0}</strong>",
|
||||||
"MessageShareExpiresIn": "Istječe za {0}",
|
"MessageShareExpiresIn": "Istječe za {0}",
|
||||||
"MessageShareURLWillBe": "URL za dijeljenje bit će <strong>{0}</strong>",
|
"MessageShareURLWillBe": "URL za dijeljenje bit će <strong>{0}</strong>",
|
||||||
|
|
@ -914,7 +923,7 @@
|
||||||
"MessageTaskOpmlImportFeedPodcastDescription": "Stvaranje podcasta \"{0}\"",
|
"MessageTaskOpmlImportFeedPodcastDescription": "Stvaranje podcasta \"{0}\"",
|
||||||
"MessageTaskOpmlImportFeedPodcastExists": "Podcast već postoji u putanji",
|
"MessageTaskOpmlImportFeedPodcastExists": "Podcast već postoji u putanji",
|
||||||
"MessageTaskOpmlImportFeedPodcastFailed": "Stvaranje podcasta nije uspjelo",
|
"MessageTaskOpmlImportFeedPodcastFailed": "Stvaranje podcasta nije uspjelo",
|
||||||
"MessageTaskOpmlImportFinished": "Dodano {0} podcasta",
|
"MessageTaskOpmlImportFinished": "Broj dodanih podcasta: {0}",
|
||||||
"MessageTaskOpmlParseFailed": "Raščlanjivanje OPML datoteke nije uspjelo",
|
"MessageTaskOpmlParseFailed": "Raščlanjivanje OPML datoteke nije uspjelo",
|
||||||
"MessageTaskOpmlParseFastFail": "Neispravna OPML datoteka, oznaka <opml> nije pronađena ILI oznaka <outline> nije pronađena",
|
"MessageTaskOpmlParseFastFail": "Neispravna OPML datoteka, oznaka <opml> nije pronađena ILI oznaka <outline> nije pronađena",
|
||||||
"MessageTaskOpmlParseNoneFound": "U OPML datoteci nisu pronađeni izvori",
|
"MessageTaskOpmlParseNoneFound": "U OPML datoteci nisu pronađeni izvori",
|
||||||
|
|
@ -925,10 +934,10 @@
|
||||||
"MessageTaskScanningFileChanges": "Skeniranje izmijenjenih datoteka u \"{0}\"",
|
"MessageTaskScanningFileChanges": "Skeniranje izmijenjenih datoteka u \"{0}\"",
|
||||||
"MessageTaskScanningLibrary": "Skeniranje knjižnice \"{0}\"",
|
"MessageTaskScanningLibrary": "Skeniranje knjižnice \"{0}\"",
|
||||||
"MessageTaskTargetDirectoryNotWritable": "U odredišnu mapu nije moguće pisati",
|
"MessageTaskTargetDirectoryNotWritable": "U odredišnu mapu nije moguće pisati",
|
||||||
"MessageThinking": "Razmišljam...",
|
"MessageThinking": "Razmišljanje...",
|
||||||
"MessageUploaderItemFailed": "Učitavanje nije uspjelo",
|
"MessageUploaderItemFailed": "Prijenos nije uspio",
|
||||||
"MessageUploaderItemSuccess": "Uspješno učitano!",
|
"MessageUploaderItemSuccess": "Uspješno preneseno!",
|
||||||
"MessageUploading": "Učitavam...",
|
"MessageUploading": "Prijenos...",
|
||||||
"MessageValidCronExpression": "Ispravan cron izraz",
|
"MessageValidCronExpression": "Ispravan cron izraz",
|
||||||
"MessageWatcherIsDisabledGlobally": "Praćenje datotečnog sustava globalno je isključen u postavkama poslužitelja",
|
"MessageWatcherIsDisabledGlobally": "Praćenje datotečnog sustava globalno je isključen u postavkama poslužitelja",
|
||||||
"MessageXLibraryIsEmpty": "{0} Knjižnica je prazna!",
|
"MessageXLibraryIsEmpty": "{0} Knjižnica je prazna!",
|
||||||
|
|
@ -940,24 +949,25 @@
|
||||||
"NoteRSSFeedPodcastAppsHttps": "Pripazite: Većina aplikacija za podcaste iziskuje URL RSS izvora koji se koristi HTTPS protokolom",
|
"NoteRSSFeedPodcastAppsHttps": "Pripazite: Većina aplikacija za podcaste iziskuje URL RSS izvora koji se koristi HTTPS protokolom",
|
||||||
"NoteRSSFeedPodcastAppsPubDate": "Upozorenje: jedan ili više vaših nastavaka nemaju datum objavljivanja. To je obavezno kod nekih aplikacija za podcaste.",
|
"NoteRSSFeedPodcastAppsPubDate": "Upozorenje: jedan ili više vaših nastavaka nemaju datum objavljivanja. To je obavezno kod nekih aplikacija za podcaste.",
|
||||||
"NoteUploaderFoldersWithMediaFiles": "Mape s medijskim datotekama smatrat će se zasebnim stavkama knjižnice.",
|
"NoteUploaderFoldersWithMediaFiles": "Mape s medijskim datotekama smatrat će se zasebnim stavkama knjižnice.",
|
||||||
"NoteUploaderOnlyAudioFiles": "Ako učitavate samo zvučne datoteke svaka će se zvučna datoteka uvesti kao zasebna zvučna knjiga.",
|
"NoteUploaderOnlyAudioFiles": "Ako prenosite samo zvučne datoteke svaka će se zvučna datoteka uvesti kao zasebna zvučna knjiga.",
|
||||||
"NoteUploaderUnsupportedFiles": "Nepodržane vrste datoteka zanemaruju se. Kada odabirete datoteke ili ispuštate mapu, sve datoteke koje nisu u mapi stavke zanemarit će se.",
|
"NoteUploaderUnsupportedFiles": "Nepodržane vrste datoteka se zanemaruju. Kada birate datoteke ili ispuštate mapu, sve datoteke koje nisu u mapi stavke će se zanemariti.",
|
||||||
"NotificationOnBackupCompletedDescription": "Pokreće se po završetku sigurnosnog kopiranja",
|
"NotificationOnBackupCompletedDescription": "Pokreće se po završetku sigurnosnog kopiranja",
|
||||||
"NotificationOnBackupFailedDescription": "Pokreće se kada sigurnosno kopiranje ne uspije",
|
"NotificationOnBackupFailedDescription": "Pokreće se kada sigurnosno kopiranje ne uspije",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Pokreće se kada se nastavak podcasta automatski preuzme",
|
"NotificationOnEpisodeDownloadedDescription": "Pokreće se kada se nastavak podcasta automatski preuzme",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Pokreće se kada su automatska preuzimanja nastavaka onemogućena zbog previše neuspjelih pokušaja",
|
"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",
|
"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",
|
"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",
|
"PlaceholderNewCollection": "Ime nove zbirke",
|
||||||
"PlaceholderNewFolderPath": "Nova putanja mape",
|
"PlaceholderNewFolderPath": "Nova putanja mape",
|
||||||
"PlaceholderNewPlaylist": "Naziv novog popisa za izvođenje",
|
"PlaceholderNewPlaylist": "Ime novog popisa za izvođenje",
|
||||||
"PlaceholderSearch": "Traži...",
|
"PlaceholderSearch": "Traži...",
|
||||||
"PlaceholderSearchEpisode": "Traži nastavak...",
|
"PlaceholderSearchEpisode": "Traži nastavak...",
|
||||||
"StatsAuthorsAdded": "autora dodano",
|
"StatsAuthorsAdded": "autora dodano",
|
||||||
"StatsBooksAdded": "knjiga dodano",
|
"StatsBooksAdded": "knjiga dodano",
|
||||||
"StatsBooksAdditional": "Novi naslovi uključuju…",
|
"StatsBooksAdditional": "Novi naslovi uključuju…",
|
||||||
"StatsBooksFinished": "knjiga dovršeno",
|
"StatsBooksFinished": "završene knjige",
|
||||||
"StatsBooksFinishedThisYear": "Neke knjige dovršene ove godine…",
|
"StatsBooksFinishedThisYear": "Neke završene knjige ove godine…",
|
||||||
"StatsBooksListenedTo": "knjiga slušano",
|
"StatsBooksListenedTo": "knjiga slušano",
|
||||||
"StatsCollectionGrewTo": "Vaša je zbirka knjiga narasla na…",
|
"StatsCollectionGrewTo": "Vaša je zbirka knjiga narasla na…",
|
||||||
"StatsSessions": "sesija",
|
"StatsSessions": "sesija",
|
||||||
|
|
@ -989,8 +999,8 @@
|
||||||
"ToastBackupInvalidMaxKeep": "Neispravan broj sigurnosnih kopija za čuvanje",
|
"ToastBackupInvalidMaxKeep": "Neispravan broj sigurnosnih kopija za čuvanje",
|
||||||
"ToastBackupInvalidMaxSize": "Neispravna najveća veličina sigurnosne kopije",
|
"ToastBackupInvalidMaxSize": "Neispravna najveća veličina sigurnosne kopije",
|
||||||
"ToastBackupRestoreFailed": "Vraćanje sigurnosne kopije nije uspjelo",
|
"ToastBackupRestoreFailed": "Vraćanje sigurnosne kopije nije uspjelo",
|
||||||
"ToastBackupUploadFailed": "Učitavanje sigurnosne kopije nije uspjelo",
|
"ToastBackupUploadFailed": "Prijenos sigurnosne kopije nije uspio",
|
||||||
"ToastBackupUploadSuccess": "Sigurnosna kopija učitana",
|
"ToastBackupUploadSuccess": "Sigurnosna kopija je prenesea",
|
||||||
"ToastBatchApplyDetailsToItemsSuccess": "Pojedinosti primijenjene stavkama",
|
"ToastBatchApplyDetailsToItemsSuccess": "Pojedinosti primijenjene stavkama",
|
||||||
"ToastBatchDeleteFailed": "Grupno brisanje nije uspjelo",
|
"ToastBatchDeleteFailed": "Grupno brisanje nije uspjelo",
|
||||||
"ToastBatchDeleteSuccess": "Grupno brisanje je uspjelo",
|
"ToastBatchDeleteSuccess": "Grupno brisanje je uspjelo",
|
||||||
|
|
@ -1001,29 +1011,35 @@
|
||||||
"ToastBookmarkCreateFailed": "Izrada knjižne oznake nije uspjela",
|
"ToastBookmarkCreateFailed": "Izrada knjižne oznake nije uspjela",
|
||||||
"ToastBookmarkCreateSuccess": "Knjižna oznaka dodana",
|
"ToastBookmarkCreateSuccess": "Knjižna oznaka dodana",
|
||||||
"ToastBookmarkRemoveSuccess": "Knjižna oznaka uklonjena",
|
"ToastBookmarkRemoveSuccess": "Knjižna oznaka uklonjena",
|
||||||
|
"ToastBulkChapterInvalidCount": "Upišite broj od 1 i 150",
|
||||||
"ToastCachePurgeFailed": "Čišćenje predmemorije nije uspjelo",
|
"ToastCachePurgeFailed": "Čišćenje predmemorije nije uspjelo",
|
||||||
"ToastCachePurgeSuccess": "Predmemorija uspješno očišćena",
|
"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",
|
"ToastChaptersHaveErrors": "Poglavlja imaju pogreške",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "Neispravna vrijednost pomaka. Početak zadnjeg poglavlja bio bi nakon duljine trajanja ove zvučne knjige.",
|
"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.",
|
"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.",
|
||||||
"ToastChaptersMustHaveTitles": "Poglavlja moraju imati naslove",
|
"ToastChaptersMustHaveTitles": "Poglavlja moraju imati naslove",
|
||||||
"ToastChaptersRemoved": "Poglavlja uklonjena",
|
"ToastChaptersRemoved": "Poglavlja uklonjena",
|
||||||
"ToastChaptersUpdated": "Poglavlja su ažurirana",
|
"ToastChaptersUpdated": "Poglavlja su ažurirana",
|
||||||
"ToastCollectionItemsAddFailed": "Neuspješno dodavanje stavki u zbirku",
|
"ToastCollectionItemsAddFailed": "Neuspjelo dodavanje stavki u zbirku",
|
||||||
"ToastCollectionRemoveSuccess": "Zbirka izbrisana",
|
"ToastCollectionRemoveSuccess": "Zbirka izbrisana",
|
||||||
"ToastCollectionUpdateSuccess": "Zbirka ažurirana",
|
"ToastCollectionUpdateSuccess": "Zbirka ažurirana",
|
||||||
|
"ToastConnectionNotAvailable": "Veza nije dostupna. Pokušaj ponovo kasnije",
|
||||||
|
"ToastCoverSearchFailed": "Pretraga naslovnice neuspjela",
|
||||||
"ToastCoverUpdateFailed": "Ažuriranje naslovnice nije uspjelo",
|
"ToastCoverUpdateFailed": "Ažuriranje naslovnice nije uspjelo",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Datum i vrijeme su neispravni ili nepotpuni",
|
"ToastDateTimeInvalidOrIncomplete": "Datum i vrijeme su neispravni ili nepotpuni",
|
||||||
"ToastDeleteFileFailed": "Brisanje datoteke nije uspjelo",
|
"ToastDeleteFileFailed": "Brisanje datoteke nije uspjelo",
|
||||||
"ToastDeleteFileSuccess": "Datoteka izbrisana",
|
"ToastDeleteFileSuccess": "Datoteka izbrisana",
|
||||||
"ToastDeviceAddFailed": "Dodavanje uređaja nije uspjelo",
|
"ToastDeviceAddFailed": "Dodavanje uređaja nije uspjelo",
|
||||||
"ToastDeviceNameAlreadyExists": "E-čitač s tim nazivom već postoji",
|
"ToastDeviceNameAlreadyExists": "E-čitač s tim imenom već postoji",
|
||||||
"ToastDeviceTestEmailFailed": "Slanje probne poruke e-pošte nije uspjelo",
|
"ToastDeviceTestEmailFailed": "Slanje probne poruke e-pošte nije uspjelo",
|
||||||
"ToastDeviceTestEmailSuccess": "Probna poruka e-pošte poslana",
|
"ToastDeviceTestEmailSuccess": "Probna poruka e-pošte poslana",
|
||||||
"ToastEmailSettingsUpdateSuccess": "Postavke e-pošte ažurirane",
|
"ToastEmailSettingsUpdateSuccess": "Postavke e-pošte ažurirane",
|
||||||
"ToastEncodeCancelFailed": "Kodiranje nije uspješno otkazano",
|
"ToastEncodeCancelFailed": "Prekidanje kodiranja nije uspjelo",
|
||||||
"ToastEncodeCancelSucces": "Kodiranje otkazano",
|
"ToastEncodeCancelSucces": "Kodiranje otkazano",
|
||||||
"ToastEpisodeDownloadQueueClearFailed": "Redoslijed izvođenja nije uspješno očišćen",
|
"ToastEpisodeDownloadQueueClearFailed": "Brisanje redoslijeda izvođenja nije uspjelo",
|
||||||
"ToastEpisodeDownloadQueueClearSuccess": "Redoslijed preuzimanja nastavaka očišćen",
|
"ToastEpisodeDownloadQueueClearSuccess": "Redoslijed preuzimanja nastavaka očišćen",
|
||||||
"ToastEpisodeUpdateSuccess": "{0} nastavak/a ažurirano",
|
"ToastEpisodeUpdateSuccess": "{0} nastavak/a ažurirano",
|
||||||
"ToastErrorCannotShare": "Dijeljenje na ovaj uređaj nije moguće",
|
"ToastErrorCannotShare": "Dijeljenje na ovaj uređaj nije moguće",
|
||||||
|
|
@ -1041,10 +1057,10 @@
|
||||||
"ToastItemDeletedFailed": "Brisanje stavke nije uspjelo",
|
"ToastItemDeletedFailed": "Brisanje stavke nije uspjelo",
|
||||||
"ToastItemDeletedSuccess": "Stavka je izbrisana",
|
"ToastItemDeletedSuccess": "Stavka je izbrisana",
|
||||||
"ToastItemDetailsUpdateSuccess": "Pojedinosti stavke su ažurirane",
|
"ToastItemDetailsUpdateSuccess": "Pojedinosti stavke su ažurirane",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Označavanje kao Dovršeno nije uspjelo",
|
"ToastItemMarkedAsFinishedFailed": "Označavanje kao „Završeno” nije uspjelo",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Stavka označena kao dovršena",
|
"ToastItemMarkedAsFinishedSuccess": "Stavka je označena kao završena",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Označavanje kao Nije dovršeno nije uspjelo",
|
"ToastItemMarkedAsNotFinishedFailed": "Označavanje kao „Nezavršeno” nije uspjelo",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Stavka označena kao nedovršena",
|
"ToastItemMarkedAsNotFinishedSuccess": "Stavka je označena kao nezavršena",
|
||||||
"ToastItemUpdateSuccess": "Stavka ažurirana",
|
"ToastItemUpdateSuccess": "Stavka ažurirana",
|
||||||
"ToastLibraryCreateFailed": "Stvaranje knjižnice nije uspjelo",
|
"ToastLibraryCreateFailed": "Stvaranje knjižnice nije uspjelo",
|
||||||
"ToastLibraryCreateSuccess": "Knjižnica \"{0}\" stvorena",
|
"ToastLibraryCreateSuccess": "Knjižnica \"{0}\" stvorena",
|
||||||
|
|
@ -1053,17 +1069,17 @@
|
||||||
"ToastLibraryScanFailedToStart": "Skeniranje nije uspjelo",
|
"ToastLibraryScanFailedToStart": "Skeniranje nije uspjelo",
|
||||||
"ToastLibraryScanStarted": "Skeniranje knjižnice započelo",
|
"ToastLibraryScanStarted": "Skeniranje knjižnice započelo",
|
||||||
"ToastLibraryUpdateSuccess": "Knjižnica \"{0}\" ažurirana",
|
"ToastLibraryUpdateSuccess": "Knjižnica \"{0}\" ažurirana",
|
||||||
"ToastMatchAllAuthorsFailed": "Nisu prepoznati svi autori",
|
"ToastMatchAllAuthorsFailed": "Prepoznavanje svih autora nije uspjelo",
|
||||||
"ToastMetadataFilesRemovedError": "Pogreška kod uklanjanja datoteka metadata.{0}",
|
"ToastMetadataFilesRemovedError": "Pogreška kod uklanjanja datoteka metadata.{0}",
|
||||||
"ToastMetadataFilesRemovedNoneFound": "U knjižnici nisu pronađene datoteke metadata.{0}",
|
"ToastMetadataFilesRemovedNoneFound": "U knjižnici nisu pronađene datoteke metadata.{0}",
|
||||||
"ToastMetadataFilesRemovedNoneRemoved": "Datoteke metadata.{0} nisu uklonjenje",
|
"ToastMetadataFilesRemovedNoneRemoved": "Nijedna datoteka metadata.{0} nije uklonjenja",
|
||||||
"ToastMetadataFilesRemovedSuccess": "uklonjeno {0} datoteka metadata.{1}",
|
"ToastMetadataFilesRemovedSuccess": "Broj uklonjenih datoteka metadata.{1}: {0}",
|
||||||
"ToastMustHaveAtLeastOnePath": "Mora postojati barem jedna putanja",
|
"ToastMustHaveAtLeastOnePath": "Mora imati barem jednu putanju",
|
||||||
"ToastNameEmailRequired": "Ime i adresa e-pošte su obavezni",
|
"ToastNameEmailRequired": "Ime i adresa e-pošte su obavezni",
|
||||||
"ToastNameRequired": "Ime je obavezno",
|
"ToastNameRequired": "Ime je obavezno",
|
||||||
"ToastNewApiKeyUserError": "Morate odabrati korisnika",
|
"ToastNewApiKeyUserError": "Morate odabrati korisnika",
|
||||||
"ToastNewEpisodesFound": "pronađeno {0} novih nastavaka",
|
"ToastNewEpisodesFound": "pronađeno {0} novih nastavaka",
|
||||||
"ToastNewUserCreatedFailed": "Račun \"{0}\" nije uspješno izrađen",
|
"ToastNewUserCreatedFailed": "Stvaranje računa nije uspjelo: \"{0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "Novi račun izrađen",
|
"ToastNewUserCreatedSuccess": "Novi račun izrađen",
|
||||||
"ToastNewUserLibraryError": "Treba odabrati barem jednu knjižnicu",
|
"ToastNewUserLibraryError": "Treba odabrati barem jednu knjižnicu",
|
||||||
"ToastNewUserPasswordError": "Mora imati zaporku, samo korisnik root može imati praznu zaporku",
|
"ToastNewUserPasswordError": "Mora imati zaporku, samo korisnik root može imati praznu zaporku",
|
||||||
|
|
@ -1074,19 +1090,20 @@
|
||||||
"ToastNoUpdatesNecessary": "Ažuriranja nisu potrebna",
|
"ToastNoUpdatesNecessary": "Ažuriranja nisu potrebna",
|
||||||
"ToastNotificationCreateFailed": "Stvaranje obavijesti nije uspjelo",
|
"ToastNotificationCreateFailed": "Stvaranje obavijesti nije uspjelo",
|
||||||
"ToastNotificationDeleteFailed": "Brisanje obavijesti nije uspjelo",
|
"ToastNotificationDeleteFailed": "Brisanje obavijesti nije uspjelo",
|
||||||
"ToastNotificationFailedMaximum": "Najveći broj neuspješnih pokušaja mora biti >= 0",
|
"ToastNotificationFailedMaximum": "Najveći broj neuspjelih pokušaja mora biti >= 0",
|
||||||
"ToastNotificationQueueMaximum": "Najveći broj obavijesti u redu mora biti >= 0",
|
"ToastNotificationQueueMaximum": "Najveći broj obavijesti u redu mora biti >= 0",
|
||||||
"ToastNotificationSettingsUpdateSuccess": "Postavke obavijesti ažurirane",
|
"ToastNotificationSettingsUpdateSuccess": "Postavke obavijesti ažurirane",
|
||||||
"ToastNotificationTestTriggerFailed": "Okidanje probne obavijesti nije uspjelo",
|
"ToastNotificationTestTriggerFailed": "Okidanje probne obavijesti nije uspjelo",
|
||||||
"ToastNotificationTestTriggerSuccess": "Okinuta je probna obavijest",
|
"ToastNotificationTestTriggerSuccess": "Okinuta je probna obavijest",
|
||||||
"ToastNotificationUpdateSuccess": "Obavijest ažurirana",
|
"ToastNotificationUpdateSuccess": "Obavijest ažurirana",
|
||||||
"ToastPlaylistCreateFailed": "Popis za izvođenje nije izrađen",
|
"ToastPlaylistCreateFailed": "Izrada popisa za izvođenje nije uspjela",
|
||||||
"ToastPlaylistCreateSuccess": "Popis za izvođenje izrađen",
|
"ToastPlaylistCreateSuccess": "Popis za izvođenje izrađen",
|
||||||
"ToastPlaylistRemoveSuccess": "Popis za izvođenje uklonjen",
|
"ToastPlaylistRemoveSuccess": "Popis za izvođenje uklonjen",
|
||||||
"ToastPlaylistUpdateSuccess": "Popis za izvođenje ažuriran",
|
"ToastPlaylistUpdateSuccess": "Popis za izvođenje ažuriran",
|
||||||
"ToastPodcastCreateFailed": "Podcast nije izrađen",
|
"ToastPodcastCreateFailed": "Stvaranje podcasta nije uspjelo",
|
||||||
"ToastPodcastCreateSuccess": "Podcast uspješno izrađen",
|
"ToastPodcastCreateSuccess": "Podcast uspješno izrađen",
|
||||||
"ToastPodcastGetFeedFailed": "Dohvat izvora podcasta nije uspio",
|
"ToastPodcastEpisodeUpdated": "Nastavak ažuriran",
|
||||||
|
"ToastPodcastGetFeedFailed": "Dohvaćanje izvora podcasta nije uspjelo",
|
||||||
"ToastPodcastNoEpisodesInFeed": "U RSS izvoru nisu pronađeni nastavci",
|
"ToastPodcastNoEpisodesInFeed": "U RSS izvoru nisu pronađeni nastavci",
|
||||||
"ToastPodcastNoRssFeed": "Podcast nema RSS izvor",
|
"ToastPodcastNoRssFeed": "Podcast nema RSS izvor",
|
||||||
"ToastProgressIsNotBeingSynced": "Napredak se ne sinkronizira, ponovno pokrenite reprodukciju",
|
"ToastProgressIsNotBeingSynced": "Napredak se ne sinkronizira, ponovno pokrenite reprodukciju",
|
||||||
|
|
@ -1094,7 +1111,7 @@
|
||||||
"ToastProviderCreatedSuccess": "Novi pružatelj dodan",
|
"ToastProviderCreatedSuccess": "Novi pružatelj dodan",
|
||||||
"ToastProviderNameAndUrlRequired": "Ime i URL su obavezni",
|
"ToastProviderNameAndUrlRequired": "Ime i URL su obavezni",
|
||||||
"ToastProviderRemoveSuccess": "Pružatelj uklonjen",
|
"ToastProviderRemoveSuccess": "Pružatelj uklonjen",
|
||||||
"ToastRSSFeedCloseFailed": "RSS izvor nije uspješno zatvoren",
|
"ToastRSSFeedCloseFailed": "Zatvaranje RSS izvora nije uspjelo",
|
||||||
"ToastRSSFeedCloseSuccess": "RSS izvor zatvoren",
|
"ToastRSSFeedCloseSuccess": "RSS izvor zatvoren",
|
||||||
"ToastRemoveFailed": "Uklanjanje nije uspjelo",
|
"ToastRemoveFailed": "Uklanjanje nije uspjelo",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Uklanjanje stavke iz zbirke nije uspjelo",
|
"ToastRemoveItemFromCollectionFailed": "Uklanjanje stavke iz zbirke nije uspjelo",
|
||||||
|
|
@ -1102,7 +1119,7 @@
|
||||||
"ToastRemoveItemsWithIssuesFailed": "Uklanjanje knjižničkih stavki s problemima nije uspjelo",
|
"ToastRemoveItemsWithIssuesFailed": "Uklanjanje knjižničkih stavki s problemima nije uspjelo",
|
||||||
"ToastRemoveItemsWithIssuesSuccess": "Uspješno uklonjene knjižničke stavke s problemima",
|
"ToastRemoveItemsWithIssuesSuccess": "Uspješno uklonjene knjižničke stavke s problemima",
|
||||||
"ToastRenameFailed": "Preimenovanje nije uspjelo",
|
"ToastRenameFailed": "Preimenovanje nije uspjelo",
|
||||||
"ToastRescanFailed": "Ponovno skeniranje {0} nije uspjelo",
|
"ToastRescanFailed": "Ponovno skeniranje nije uspjelo za {0}",
|
||||||
"ToastRescanRemoved": "Ponovno skeniranje dovršene stavke je uklonjeno",
|
"ToastRescanRemoved": "Ponovno skeniranje dovršene stavke je uklonjeno",
|
||||||
"ToastRescanUpToDate": "Ponovno skeniranje dovršene stavke bilo je ažurno",
|
"ToastRescanUpToDate": "Ponovno skeniranje dovršene stavke bilo je ažurno",
|
||||||
"ToastRescanUpdated": "Ponovno skeniranje dovršene stavke je ažurirano",
|
"ToastRescanUpdated": "Ponovno skeniranje dovršene stavke je ažurirano",
|
||||||
|
|
@ -1117,7 +1134,7 @@
|
||||||
"ToastSessionCloseFailed": "Zatvaranje sesije nije uspjelo",
|
"ToastSessionCloseFailed": "Zatvaranje sesije nije uspjelo",
|
||||||
"ToastSessionDeleteFailed": "Brisanje sesije nije uspjelo",
|
"ToastSessionDeleteFailed": "Brisanje sesije nije uspjelo",
|
||||||
"ToastSessionDeleteSuccess": "Sesija izbrisana",
|
"ToastSessionDeleteSuccess": "Sesija izbrisana",
|
||||||
"ToastSleepTimerDone": "Timer za spavanje istječe... zZzzZz",
|
"ToastSleepTimerDone": "Timer za spavanje gotov... zZzzZz",
|
||||||
"ToastSlugMustChange": "Slug sadrži nedozvoljene znakove",
|
"ToastSlugMustChange": "Slug sadrži nedozvoljene znakove",
|
||||||
"ToastSlugRequired": "Slug je obavezan",
|
"ToastSlugRequired": "Slug je obavezan",
|
||||||
"ToastSocketConnected": "Socket priključen",
|
"ToastSocketConnected": "Socket priključen",
|
||||||
|
|
@ -1129,12 +1146,20 @@
|
||||||
"ToastUnknownError": "Nepoznata pogreška",
|
"ToastUnknownError": "Nepoznata pogreška",
|
||||||
"ToastUnlinkOpenIdFailed": "Uklanjanje OpenID veze korisnika nije uspjelo",
|
"ToastUnlinkOpenIdFailed": "Uklanjanje OpenID veze korisnika nije uspjelo",
|
||||||
"ToastUnlinkOpenIdSuccess": "Korisnik odspojen od OpenID-ja",
|
"ToastUnlinkOpenIdSuccess": "Korisnik odspojen od OpenID-ja",
|
||||||
"ToastUploaderFilepathExistsError": "Putanja \"{0}\" već postoji na poslužitelju",
|
"ToastUploaderFilepathExistsError": "Datotečna putanja \"{0}\" već postoji na poslužitelju",
|
||||||
"ToastUploaderItemExistsInSubdirectoryError": "Stavka \"{0}\" koristi se podmapom u putanje za učitavanje.",
|
"ToastUploaderItemExistsInSubdirectoryError": "Stavka \"{0}\" koristi podmapu putanje za prijenos.",
|
||||||
"ToastUserDeleteFailed": "Brisanje korisnika nije uspjelo",
|
"ToastUserDeleteFailed": "Brisanje korisnika nije uspjelo",
|
||||||
"ToastUserDeleteSuccess": "Korisnik izbrisan",
|
"ToastUserDeleteSuccess": "Korisnik izbrisan",
|
||||||
"ToastUserPasswordChangeSuccess": "Zaporka je uspješno promijenjena",
|
"ToastUserPasswordChangeSuccess": "Zaporka je uspješno promijenjena",
|
||||||
"ToastUserPasswordMismatch": "Zaporke se ne podudaraju",
|
"ToastUserPasswordMismatch": "Zaporke se ne podudaraju",
|
||||||
"ToastUserPasswordMustChange": "Nova zaporka ne smije biti jednaka staroj",
|
"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",
|
"HeaderAudiobookTools": "Hangoskönyv fájlkezelő eszközök",
|
||||||
"HeaderAuthentication": "Hitelesítés",
|
"HeaderAuthentication": "Hitelesítés",
|
||||||
"HeaderBackups": "Biztonsági másolatok",
|
"HeaderBackups": "Biztonsági másolatok",
|
||||||
|
"HeaderBulkChapterModal": "Több fejezet hozzáadása",
|
||||||
"HeaderChangePassword": "Jelszó megváltoztatása",
|
"HeaderChangePassword": "Jelszó megváltoztatása",
|
||||||
"HeaderChapters": "Fejezetek",
|
"HeaderChapters": "Fejezetek",
|
||||||
"HeaderChooseAFolder": "Válasszon egy mappát",
|
"HeaderChooseAFolder": "Válasszon egy mappát",
|
||||||
|
|
@ -199,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Kísérleti funkciók",
|
"HeaderSettingsExperimental": "Kísérleti funkciók",
|
||||||
"HeaderSettingsGeneral": "Általános",
|
"HeaderSettingsGeneral": "Általános",
|
||||||
"HeaderSettingsScanner": "Szkenner",
|
"HeaderSettingsScanner": "Szkenner",
|
||||||
|
"HeaderSettingsSecurity": "Biztonság",
|
||||||
"HeaderSettingsWebClient": "Webkliens",
|
"HeaderSettingsWebClient": "Webkliens",
|
||||||
"HeaderSleepTimer": "Alvásidőzítő",
|
"HeaderSleepTimer": "Alvásidőzítő",
|
||||||
"HeaderStatsLargestItems": "Legnagyobb elemek",
|
"HeaderStatsLargestItems": "Legnagyobb elemek",
|
||||||
|
|
@ -284,7 +286,7 @@
|
||||||
"LabelClickToUseCurrentValue": "Kattintson az aktuális érték használatához",
|
"LabelClickToUseCurrentValue": "Kattintson az aktuális érték használatához",
|
||||||
"LabelClosePlayer": "Lejátszó bezárása",
|
"LabelClosePlayer": "Lejátszó bezárása",
|
||||||
"LabelCodec": "Kodek",
|
"LabelCodec": "Kodek",
|
||||||
"LabelCollapseSeries": "Sorozat összecsukása",
|
"LabelCollapseSeries": "Sorozatok összecsukása",
|
||||||
"LabelCollapseSubSeries": "Alszéria összecsukása",
|
"LabelCollapseSubSeries": "Alszéria összecsukása",
|
||||||
"LabelCollection": "Gyűjtemény",
|
"LabelCollection": "Gyűjtemény",
|
||||||
"LabelCollections": "Gyűjtemények",
|
"LabelCollections": "Gyűjtemények",
|
||||||
|
|
@ -293,6 +295,7 @@
|
||||||
"LabelContinueListening": "Hallgatás folytatása",
|
"LabelContinueListening": "Hallgatás folytatása",
|
||||||
"LabelContinueReading": "Olvasás folytatása",
|
"LabelContinueReading": "Olvasás folytatása",
|
||||||
"LabelContinueSeries": "Sorozat folytatása",
|
"LabelContinueSeries": "Sorozat folytatása",
|
||||||
|
"LabelCorsAllowed": "Megengedett CORS Originek",
|
||||||
"LabelCover": "Borító",
|
"LabelCover": "Borító",
|
||||||
"LabelCoverImageURL": "Borítókép URL",
|
"LabelCoverImageURL": "Borítókép URL",
|
||||||
"LabelCoverProvider": "Borító Szolgáltató",
|
"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)",
|
"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",
|
"LabelDescription": "Leírás",
|
||||||
"LabelDeselectAll": "Minden kijelölés megszüntetése",
|
"LabelDeselectAll": "Minden kijelölés megszüntetése",
|
||||||
|
"LabelDetectedPattern": "Észlelt minta:",
|
||||||
"LabelDevice": "Eszköz",
|
"LabelDevice": "Eszköz",
|
||||||
"LabelDeviceInfo": "Eszköz információ",
|
"LabelDeviceInfo": "Eszköz információ",
|
||||||
"LabelDeviceIsAvailableTo": "Eszköz elérhető a következő számára...",
|
"LabelDeviceIsAvailableTo": "Eszköz elérhető a következő számára...",
|
||||||
|
|
@ -374,11 +378,12 @@
|
||||||
"LabelFilterByUser": "Szűrés felhasználó szerint",
|
"LabelFilterByUser": "Szűrés felhasználó szerint",
|
||||||
"LabelFindEpisodes": "Epizódok keresése",
|
"LabelFindEpisodes": "Epizódok keresése",
|
||||||
"LabelFinished": "Befejezett",
|
"LabelFinished": "Befejezett",
|
||||||
|
"LabelFinishedDate": "Befejezve {0}",
|
||||||
"LabelFolder": "Mappa",
|
"LabelFolder": "Mappa",
|
||||||
"LabelFolders": "Mappák",
|
"LabelFolders": "Mappák",
|
||||||
"LabelFontBold": "Félkövér",
|
"LabelFontBold": "Félkövér",
|
||||||
"LabelFontBoldness": "Betű vastagság",
|
"LabelFontBoldness": "Betű vastagság",
|
||||||
"LabelFontFamily": "Betűtípus család",
|
"LabelFontFamily": "Betűcsalád",
|
||||||
"LabelFontItalic": "Dőlt",
|
"LabelFontItalic": "Dőlt",
|
||||||
"LabelFontScale": "Betűméret skála",
|
"LabelFontScale": "Betűméret skála",
|
||||||
"LabelFontStrikethrough": "Áthúzott",
|
"LabelFontStrikethrough": "Áthúzott",
|
||||||
|
|
@ -431,7 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Nem {0}",
|
"LabelLibraryFilterSublistEmpty": "Nem {0}",
|
||||||
"LabelLibraryItem": "Könyvtári elem",
|
"LabelLibraryItem": "Könyvtári elem",
|
||||||
"LabelLibraryName": "Könyvtár neve",
|
"LabelLibraryName": "Könyvtár neve",
|
||||||
"LabelLibrarySortByProgress": "Haladás frissítve",
|
"LabelLibrarySortByProgress": "Folyamat: Legutóbbi frissítés",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Folyamat: Befejezve",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Folyamat: Elindult",
|
||||||
"LabelLimit": "Korlát",
|
"LabelLimit": "Korlát",
|
||||||
"LabelLineSpacing": "Sorköz",
|
"LabelLineSpacing": "Sorköz",
|
||||||
"LabelListenAgain": "Újrahallgatás",
|
"LabelListenAgain": "Újrahallgatás",
|
||||||
|
|
@ -470,6 +477,7 @@
|
||||||
"LabelNewestAuthors": "A legújabb szerzők",
|
"LabelNewestAuthors": "A legújabb szerzők",
|
||||||
"LabelNewestEpisodes": "Legújabb epizódok",
|
"LabelNewestEpisodes": "Legújabb epizódok",
|
||||||
"LabelNextBackupDate": "Következő biztonsági másolat dátuma",
|
"LabelNextBackupDate": "Következő biztonsági másolat dátuma",
|
||||||
|
"LabelNextChapters": "A következő fejezetek:",
|
||||||
"LabelNextScheduledRun": "Következő ütemezett futtatás",
|
"LabelNextScheduledRun": "Következő ütemezett futtatás",
|
||||||
"LabelNoApiKeys": "Nincs API kulcs",
|
"LabelNoApiKeys": "Nincs API kulcs",
|
||||||
"LabelNoCustomMetadataProviders": "Nincsenek egyedi metaadat szolgáltatók",
|
"LabelNoCustomMetadataProviders": "Nincsenek egyedi metaadat szolgáltatók",
|
||||||
|
|
@ -487,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Maximális értesítési események sorának mérete",
|
"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.",
|
"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",
|
"LabelNumberOfBooks": "Könyvek száma",
|
||||||
|
"LabelNumberOfChapters": "Fejezetek száma:",
|
||||||
"LabelNumberOfEpisodes": "Epizódok 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:",
|
"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.",
|
"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.",
|
||||||
|
|
@ -579,8 +588,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeuomorfikus dizájn fa polcokkal",
|
"LabelSettingsBookshelfViewHelp": "Skeuomorfikus dizájn fa polcokkal",
|
||||||
"LabelSettingsChromecastSupport": "Chromecast támogatás",
|
"LabelSettingsChromecastSupport": "Chromecast támogatás",
|
||||||
"LabelSettingsDateFormat": "Dátumformátum",
|
"LabelSettingsDateFormat": "Dátumformátum",
|
||||||
"LabelSettingsEnableWatcher": "Változások automatikus vizsgálata a könyvtárakban",
|
"LabelSettingsEnableWatcher": "Változások automatikus figyelése a könyvtárakban",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Változások automatikus vizsgálata a könyvtárban",
|
"LabelSettingsEnableWatcherForLibrary": "Változások automatikus figyelése a könyvtárban",
|
||||||
"LabelSettingsEnableWatcherHelp": "Engedélyezi az automatikus elem hozzáadás/frissítés funkciót, amikor fájlváltozásokat észlel. *Szerver újraindítása szükséges",
|
"LabelSettingsEnableWatcherHelp": "Engedélyezi az automatikus elem hozzáadás/frissítés funkciót, amikor fájlváltozásokat észlel. *Szerver újraindítása szükséges",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Szkriptelt tartalmak engedélyezése epub-okban",
|
"LabelSettingsEpubsAllowScriptedContent": "Szkriptelt tartalmak engedélyezése epub-okban",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Megengedi, hogy az epub fájlok szkripteket hajtsanak végre. Ezt a beállítást kikapcsolva ajánlott tartani, kivéve, ha megbízik az epub fájlok forrásában.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Megengedi, hogy az epub fájlok szkripteket hajtsanak végre. Ezt a beállítást kikapcsolva ajánlott tartani, kivéve, ha megbízik az epub fájlok forrásában.",
|
||||||
|
|
@ -629,6 +638,7 @@
|
||||||
"LabelStartTime": "Kezdési idő",
|
"LabelStartTime": "Kezdési idő",
|
||||||
"LabelStarted": "Elkezdődött",
|
"LabelStarted": "Elkezdődött",
|
||||||
"LabelStartedAt": "Kezdés ideje",
|
"LabelStartedAt": "Kezdés ideje",
|
||||||
|
"LabelStartedDate": "Elindítva {0}",
|
||||||
"LabelStatsAudioTracks": "Audiósáv",
|
"LabelStatsAudioTracks": "Audiósáv",
|
||||||
"LabelStatsAuthors": "Szerző",
|
"LabelStatsAuthors": "Szerző",
|
||||||
"LabelStatsBestDay": "Legjobb nap",
|
"LabelStatsBestDay": "Legjobb nap",
|
||||||
|
|
@ -743,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Nincs eredmény a \"{0}: {1}\" szűrőre",
|
"MessageBookshelfNoResultsForFilter": "Nincs eredmény a \"{0}: {1}\" szűrőre",
|
||||||
"MessageBookshelfNoResultsForQuery": "Nincs eredmény a lekérdezéshez",
|
"MessageBookshelfNoResultsForQuery": "Nincs eredmény a lekérdezéshez",
|
||||||
"MessageBookshelfNoSeries": "Nincsenek sorozatai",
|
"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",
|
"MessageChapterEndIsAfter": "A fejezet vége a hangoskönyv végét követi",
|
||||||
"MessageChapterErrorFirstNotZero": "Az első fejezetnek 0:00-kor kell kezdődnie",
|
"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",
|
"MessageChapterErrorStartGteDuration": "Érvénytelen kezdési idő, kevesebbnek kell lennie, mint a hangoskönyv időtartama",
|
||||||
|
|
@ -805,6 +816,8 @@
|
||||||
"MessageFeedURLWillBe": "A hírcsatorna URL-je {0} lesz",
|
"MessageFeedURLWillBe": "A hírcsatorna URL-je {0} lesz",
|
||||||
"MessageFetching": "Lekérdezés...",
|
"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.",
|
"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!",
|
"MessageImportantNotice": "Fontos közlemény!",
|
||||||
"MessageInsertChapterBelow": "Fejezet beszúrása alulra",
|
"MessageInsertChapterBelow": "Fejezet beszúrása alulra",
|
||||||
"MessageInvalidAsin": "Érvénytelen ASIN",
|
"MessageInvalidAsin": "Érvénytelen ASIN",
|
||||||
|
|
@ -875,7 +888,7 @@
|
||||||
"MessageResetChaptersConfirm": "Biztosan alaphelyzetbe szeretné állítani a fejezeteket és visszavonni a módosításokat?",
|
"MessageResetChaptersConfirm": "Biztosan alaphelyzetbe szeretné állítani a fejezeteket és visszavonni a módosításokat?",
|
||||||
"MessageRestoreBackupConfirm": "Biztosan vissza szeretné állítani a biztonsági másolatot, amely ekkor készült:",
|
"MessageRestoreBackupConfirm": "Biztosan vissza szeretné állítani a biztonsági másolatot, amely ekkor készült:",
|
||||||
"MessageRestoreBackupWarning": "A biztonsági mentés visszaállítása felülírja az egész adatbázist, amely a /config mappában található, valamint a borítóképeket a /metadata/items és /metadata/authors mappákban.<br /><br />A biztonsági mentések nem módosítják a könyvtár mappáiban található fájlokat. Ha engedélyezte a szerverbeállításokat a borítóképek és a metaadatok könyvtármappákban való tárolására, akkor ezek nem kerülnek biztonsági mentésre vagy felülírásra.<br /><br />A szerver használó összes kliens automatikusan frissül.",
|
"MessageRestoreBackupWarning": "A biztonsági mentés visszaállítása felülírja az egész adatbázist, amely a /config mappában található, valamint a borítóképeket a /metadata/items és /metadata/authors mappákban.<br /><br />A biztonsági mentések nem módosítják a könyvtár mappáiban található fájlokat. Ha engedélyezte a szerverbeállításokat a borítóképek és a metaadatok könyvtármappákban való tárolására, akkor ezek nem kerülnek biztonsági mentésre vagy felülírásra.<br /><br />A szerver használó összes kliens automatikusan frissül.",
|
||||||
"MessageScheduleLibraryScanNote": "A legtöbb felhasználó számára ajánlott ezt a funkciót kikapcsolva hagyni, és engedélyezni a mappafigyelő beállítást. A mappafigyelő automatikusan észleli a könyvtári mappák változásait. A mappafigyelő nem működik minden fájlrendszernél (mint például az NFS), ezért helyette ütemezett könyvtárellenőrzéseket lehet használni.",
|
"MessageScheduleLibraryScanNote": "A legtöbb felhasználó számára ajánlott ezt a funkciót kikapcsolva hagyni, és engedélyezni a mappafigyelő beállítást. A mappafigyelő automatikusan észleli a könyvtári mappák változásait. Kapcsolja be ezt a funkciót, ha az „Automatikus könyvtárfigyelés” nem működik a fájlrendszerén (például NFS).",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Futás minden {1} óra {0}-kor",
|
"MessageScheduleRunEveryWeekdayAtTime": "Futás minden {1} óra {0}-kor",
|
||||||
"MessageSearchResultsFor": "Keresési eredmények",
|
"MessageSearchResultsFor": "Keresési eredmények",
|
||||||
"MessageSelected": "{0} kiválasztva",
|
"MessageSelected": "{0} kiválasztva",
|
||||||
|
|
@ -944,6 +957,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",
|
"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",
|
"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",
|
"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",
|
"PlaceholderNewCollection": "Új gyűjtemény neve",
|
||||||
"PlaceholderNewFolderPath": "Új mappa útvonala",
|
"PlaceholderNewFolderPath": "Új mappa útvonala",
|
||||||
"PlaceholderNewPlaylist": "Új lejátszási lista neve",
|
"PlaceholderNewPlaylist": "Új lejátszási lista neve",
|
||||||
|
|
@ -997,8 +1011,12 @@
|
||||||
"ToastBookmarkCreateFailed": "Könyvjelző létrehozása sikertelen",
|
"ToastBookmarkCreateFailed": "Könyvjelző létrehozása sikertelen",
|
||||||
"ToastBookmarkCreateSuccess": "Könyvjelző hozzáadva",
|
"ToastBookmarkCreateSuccess": "Könyvjelző hozzáadva",
|
||||||
"ToastBookmarkRemoveSuccess": "Könyvjelző eltávolítva",
|
"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",
|
"ToastCachePurgeFailed": "A gyorsítótár törlése sikertelen",
|
||||||
"ToastCachePurgeSuccess": "A gyorsítótár sikeresen törölve",
|
"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",
|
"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.",
|
"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.",
|
"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.",
|
||||||
|
|
@ -1008,6 +1026,8 @@
|
||||||
"ToastCollectionItemsAddFailed": "A tétel(ek) hozzáadása gyűjteményhez sikertelen",
|
"ToastCollectionItemsAddFailed": "A tétel(ek) hozzáadása gyűjteményhez sikertelen",
|
||||||
"ToastCollectionRemoveSuccess": "Gyűjtemény eltávolítva",
|
"ToastCollectionRemoveSuccess": "Gyűjtemény eltávolítva",
|
||||||
"ToastCollectionUpdateSuccess": "Gyűjtemény frissítve",
|
"ToastCollectionUpdateSuccess": "Gyűjtemény frissítve",
|
||||||
|
"ToastConnectionNotAvailable": "A kapcsolat nem elérhető. Kérem, próbálkozzon később",
|
||||||
|
"ToastCoverSearchFailed": "A borítók keresése sikertelen",
|
||||||
"ToastCoverUpdateFailed": "A borító frissítése nem sikerült",
|
"ToastCoverUpdateFailed": "A borító frissítése nem sikerült",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "A dátum és az időpont érvénytelen vagy hiányos",
|
"ToastDateTimeInvalidOrIncomplete": "A dátum és az időpont érvénytelen vagy hiányos",
|
||||||
"ToastDeleteFileFailed": "Nem sikerült törölni a fájlt",
|
"ToastDeleteFileFailed": "Nem sikerült törölni a fájlt",
|
||||||
|
|
@ -1032,6 +1052,7 @@
|
||||||
"ToastInvalidImageUrl": "Érvénytelen a kép URL címe",
|
"ToastInvalidImageUrl": "Érvénytelen a kép URL címe",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "A letölthető epizódok száma érvénytelen",
|
"ToastInvalidMaxEpisodesToDownload": "A letölthető epizódok száma érvénytelen",
|
||||||
"ToastInvalidUrl": "Érvénytelen URL",
|
"ToastInvalidUrl": "Érvénytelen URL",
|
||||||
|
"ToastInvalidUrls": "Egy vagy több URL érvénytelen",
|
||||||
"ToastItemCoverUpdateSuccess": "Elem borítója frissítve",
|
"ToastItemCoverUpdateSuccess": "Elem borítója frissítve",
|
||||||
"ToastItemDeletedFailed": "Nem sikerült törölni az elemet",
|
"ToastItemDeletedFailed": "Nem sikerült törölni az elemet",
|
||||||
"ToastItemDeletedSuccess": "Elem törölve",
|
"ToastItemDeletedSuccess": "Elem törölve",
|
||||||
|
|
@ -1081,6 +1102,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Lejátszási lista frissítve",
|
"ToastPlaylistUpdateSuccess": "Lejátszási lista frissítve",
|
||||||
"ToastPodcastCreateFailed": "Podcast létrehozása sikertelen",
|
"ToastPodcastCreateFailed": "Podcast létrehozása sikertelen",
|
||||||
"ToastPodcastCreateSuccess": "A podcast sikeresen létrehozva",
|
"ToastPodcastCreateSuccess": "A podcast sikeresen létrehozva",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Epizód frissítve",
|
||||||
"ToastPodcastGetFeedFailed": "Nem sikerült podcast feedet kapni",
|
"ToastPodcastGetFeedFailed": "Nem sikerült podcast feedet kapni",
|
||||||
"ToastPodcastNoEpisodesInFeed": "Nincsenek epizódok az RSS hírcsatornában",
|
"ToastPodcastNoEpisodesInFeed": "Nincsenek epizódok az RSS hírcsatornában",
|
||||||
"ToastPodcastNoRssFeed": "A podcastnak nincs RSS-hírcsatornája",
|
"ToastPodcastNoRssFeed": "A podcastnak nincs RSS-hírcsatornája",
|
||||||
|
|
@ -1131,5 +1153,13 @@
|
||||||
"ToastUserPasswordChangeSuccess": "Jelszó sikeresen megváltoztatva",
|
"ToastUserPasswordChangeSuccess": "Jelszó sikeresen megváltoztatva",
|
||||||
"ToastUserPasswordMismatch": "A jelszavak nem egyeznek",
|
"ToastUserPasswordMismatch": "A jelszavak nem egyeznek",
|
||||||
"ToastUserPasswordMustChange": "Az új jelszó nem egyezik a régi jelszóval",
|
"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
client/strings/is.json
Normal file
1
client/strings/is.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"ButtonAdd": "Aggiungi",
|
"ButtonAdd": "Aggiungi",
|
||||||
"ButtonAddApiKey": "Aggiungi chiave API",
|
"ButtonAddApiKey": "Aggiungi la chiave API",
|
||||||
"ButtonAddChapters": "Aggiungi Capitoli",
|
"ButtonAddChapters": "Aggiungi Capitoli",
|
||||||
"ButtonAddDevice": "Aggiungi Dispositivo",
|
"ButtonAddDevice": "Aggiungi Dispositivo",
|
||||||
"ButtonAddLibrary": "Aggiungi Libreria",
|
"ButtonAddLibrary": "Aggiungi Libreria",
|
||||||
|
|
@ -121,11 +121,13 @@
|
||||||
"HeaderAccount": "Account",
|
"HeaderAccount": "Account",
|
||||||
"HeaderAddCustomMetadataProvider": "Aggiungi fornitori di metadati personalizzati",
|
"HeaderAddCustomMetadataProvider": "Aggiungi fornitori di metadati personalizzati",
|
||||||
"HeaderAdvanced": "Avanzate",
|
"HeaderAdvanced": "Avanzate",
|
||||||
|
"HeaderApiKeys": "Le chiavi API",
|
||||||
"HeaderAppriseNotificationSettings": "Apprendi le impostazioni di Notifica",
|
"HeaderAppriseNotificationSettings": "Apprendi le impostazioni di Notifica",
|
||||||
"HeaderAudioTracks": "Tracce audio",
|
"HeaderAudioTracks": "Tracce audio",
|
||||||
"HeaderAudiobookTools": "Strumenti di gestione file audiolibri",
|
"HeaderAudiobookTools": "Strumenti di gestione file audiolibri",
|
||||||
"HeaderAuthentication": "Authenticazione",
|
"HeaderAuthentication": "Authenticazione",
|
||||||
"HeaderBackups": "Backup",
|
"HeaderBackups": "Backup",
|
||||||
|
"HeaderBulkChapterModal": "Aggiungere più capitoli",
|
||||||
"HeaderChangePassword": "Cambia la password",
|
"HeaderChangePassword": "Cambia la password",
|
||||||
"HeaderChapters": "Capitoli",
|
"HeaderChapters": "Capitoli",
|
||||||
"HeaderChooseAFolder": "Seleziona la cartella",
|
"HeaderChooseAFolder": "Seleziona la cartella",
|
||||||
|
|
@ -164,6 +166,7 @@
|
||||||
"HeaderMetadataOrderOfPrecedence": "Priorità ordine Metadata",
|
"HeaderMetadataOrderOfPrecedence": "Priorità ordine Metadata",
|
||||||
"HeaderMetadataToEmbed": "Metadata da incorporare",
|
"HeaderMetadataToEmbed": "Metadata da incorporare",
|
||||||
"HeaderNewAccount": "Nuovo Account",
|
"HeaderNewAccount": "Nuovo Account",
|
||||||
|
"HeaderNewApiKey": "Nuova chiave API",
|
||||||
"HeaderNewLibrary": "Nuova Libreria",
|
"HeaderNewLibrary": "Nuova Libreria",
|
||||||
"HeaderNotificationCreate": "Crea una notifica",
|
"HeaderNotificationCreate": "Crea una notifica",
|
||||||
"HeaderNotificationUpdate": "Aggiornamento della notifica",
|
"HeaderNotificationUpdate": "Aggiornamento della notifica",
|
||||||
|
|
@ -197,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Opzioni Sperimentali",
|
"HeaderSettingsExperimental": "Opzioni Sperimentali",
|
||||||
"HeaderSettingsGeneral": "Generale",
|
"HeaderSettingsGeneral": "Generale",
|
||||||
"HeaderSettingsScanner": "Scanner",
|
"HeaderSettingsScanner": "Scanner",
|
||||||
|
"HeaderSettingsSecurity": "Sicurezza",
|
||||||
"HeaderSettingsWebClient": "Web Client",
|
"HeaderSettingsWebClient": "Web Client",
|
||||||
"HeaderSleepTimer": "Sveglia",
|
"HeaderSleepTimer": "Sveglia",
|
||||||
"HeaderStatsLargestItems": "File pesanti",
|
"HeaderStatsLargestItems": "File pesanti",
|
||||||
|
|
@ -208,6 +212,7 @@
|
||||||
"HeaderTableOfContents": "Indice",
|
"HeaderTableOfContents": "Indice",
|
||||||
"HeaderTools": "Strumenti",
|
"HeaderTools": "Strumenti",
|
||||||
"HeaderUpdateAccount": "Aggiorna Account",
|
"HeaderUpdateAccount": "Aggiorna Account",
|
||||||
|
"HeaderUpdateApiKey": "Aggiornamento chiave API",
|
||||||
"HeaderUpdateAuthor": "Aggiorna Autore",
|
"HeaderUpdateAuthor": "Aggiorna Autore",
|
||||||
"HeaderUpdateDetails": "Aggiorna Dettagli",
|
"HeaderUpdateDetails": "Aggiorna Dettagli",
|
||||||
"HeaderUpdateLibrary": "Aggiorna Libreria",
|
"HeaderUpdateLibrary": "Aggiorna Libreria",
|
||||||
|
|
@ -237,6 +242,10 @@
|
||||||
"LabelAllUsersExcludingGuests": "Tutti gli Utenti Esclusi gli ospiti",
|
"LabelAllUsersExcludingGuests": "Tutti gli Utenti Esclusi gli ospiti",
|
||||||
"LabelAllUsersIncludingGuests": "Tutti gli Utenti Inclusi gli ospiti",
|
"LabelAllUsersIncludingGuests": "Tutti gli Utenti Inclusi gli ospiti",
|
||||||
"LabelAlreadyInYourLibrary": "Già esistente nella libreria",
|
"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",
|
"LabelApiToken": "API Token",
|
||||||
"LabelAppend": "Appese",
|
"LabelAppend": "Appese",
|
||||||
"LabelAudioBitrate": "Audio Bitrate (es. 128k)",
|
"LabelAudioBitrate": "Audio Bitrate (es. 128k)",
|
||||||
|
|
@ -286,6 +295,7 @@
|
||||||
"LabelContinueListening": "Continua l'ascolto",
|
"LabelContinueListening": "Continua l'ascolto",
|
||||||
"LabelContinueReading": "Continua la lettura",
|
"LabelContinueReading": "Continua la lettura",
|
||||||
"LabelContinueSeries": "Continua serie",
|
"LabelContinueSeries": "Continua serie",
|
||||||
|
"LabelCorsAllowed": "CORS consentiti Origine",
|
||||||
"LabelCover": "Copertina",
|
"LabelCover": "Copertina",
|
||||||
"LabelCoverImageURL": "Indirizzo della cover URL",
|
"LabelCoverImageURL": "Indirizzo della cover URL",
|
||||||
"LabelCoverProvider": "Cover Sorgente",
|
"LabelCoverProvider": "Cover Sorgente",
|
||||||
|
|
@ -299,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Elimina dal file system (togli la spunta per eliminarla solo dal DB)",
|
"LabelDeleteFromFileSystemCheckbox": "Elimina dal file system (togli la spunta per eliminarla solo dal DB)",
|
||||||
"LabelDescription": "Descrizione",
|
"LabelDescription": "Descrizione",
|
||||||
"LabelDeselectAll": "Deseleziona Tutto",
|
"LabelDeselectAll": "Deseleziona Tutto",
|
||||||
|
"LabelDetectedPattern": "Trovato pattern:",
|
||||||
"LabelDevice": "Dispositivo",
|
"LabelDevice": "Dispositivo",
|
||||||
"LabelDeviceInfo": "Info dispositivo",
|
"LabelDeviceInfo": "Info dispositivo",
|
||||||
"LabelDeviceIsAvailableTo": "Il dispositivo e disponibile su…",
|
"LabelDeviceIsAvailableTo": "Il dispositivo e disponibile su…",
|
||||||
|
|
@ -348,6 +359,10 @@
|
||||||
"LabelExample": "Esempio",
|
"LabelExample": "Esempio",
|
||||||
"LabelExpandSeries": "Espandi Serie",
|
"LabelExpandSeries": "Espandi Serie",
|
||||||
"LabelExpandSubSeries": "Espandi Sub Serie",
|
"LabelExpandSubSeries": "Espandi Sub Serie",
|
||||||
|
"LabelExpired": "Scadenza",
|
||||||
|
"LabelExpiresAt": "Scade a",
|
||||||
|
"LabelExpiresInSeconds": "Scade in (secondi)",
|
||||||
|
"LabelExpiresNever": "Mai",
|
||||||
"LabelExplicit": "Esplicito",
|
"LabelExplicit": "Esplicito",
|
||||||
"LabelExplicitChecked": "Esplicito (selezionato)",
|
"LabelExplicitChecked": "Esplicito (selezionato)",
|
||||||
"LabelExplicitUnchecked": "Non Esplicito (selezionato)",
|
"LabelExplicitUnchecked": "Non Esplicito (selezionato)",
|
||||||
|
|
@ -363,6 +378,7 @@
|
||||||
"LabelFilterByUser": "Filtro per Utente",
|
"LabelFilterByUser": "Filtro per Utente",
|
||||||
"LabelFindEpisodes": "Trova Episodi",
|
"LabelFindEpisodes": "Trova Episodi",
|
||||||
"LabelFinished": "Finita",
|
"LabelFinished": "Finita",
|
||||||
|
"LabelFinishedDate": "Finito {0}",
|
||||||
"LabelFolder": "Cartella",
|
"LabelFolder": "Cartella",
|
||||||
"LabelFolders": "Cartelle",
|
"LabelFolders": "Cartelle",
|
||||||
"LabelFontBold": "Grassetto",
|
"LabelFontBold": "Grassetto",
|
||||||
|
|
@ -407,6 +423,7 @@
|
||||||
"LabelLanguages": "Lingua",
|
"LabelLanguages": "Lingua",
|
||||||
"LabelLastBookAdded": "Ultimo Libro Aggiunto",
|
"LabelLastBookAdded": "Ultimo Libro Aggiunto",
|
||||||
"LabelLastBookUpdated": "Ultimo Libro Aggiornato",
|
"LabelLastBookUpdated": "Ultimo Libro Aggiornato",
|
||||||
|
"LabelLastProgressDate": "Ultimi progressi: Si'",
|
||||||
"LabelLastSeen": "Ultimi Visti",
|
"LabelLastSeen": "Ultimi Visti",
|
||||||
"LabelLastTime": "Ultima Volta",
|
"LabelLastTime": "Ultima Volta",
|
||||||
"LabelLastUpdate": "Ultimo Aggiornamento",
|
"LabelLastUpdate": "Ultimo Aggiornamento",
|
||||||
|
|
@ -419,6 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Nessuno {0}",
|
"LabelLibraryFilterSublistEmpty": "Nessuno {0}",
|
||||||
"LabelLibraryItem": "Elementi della biblioteca",
|
"LabelLibraryItem": "Elementi della biblioteca",
|
||||||
"LabelLibraryName": "Nome della biblioteca",
|
"LabelLibraryName": "Nome della biblioteca",
|
||||||
|
"LabelLibrarySortByProgress": "Progressi: Ultimi aggiornamenti",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Progressi: Completati",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Progressi: Iniziati",
|
||||||
"LabelLimit": "Limiti",
|
"LabelLimit": "Limiti",
|
||||||
"LabelLineSpacing": "Interlinea",
|
"LabelLineSpacing": "Interlinea",
|
||||||
"LabelListenAgain": "Ascolta ancora",
|
"LabelListenAgain": "Ascolta ancora",
|
||||||
|
|
@ -427,6 +447,7 @@
|
||||||
"LabelLogLevelWarn": "Allarme",
|
"LabelLogLevelWarn": "Allarme",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Cerca nuovi episodi dopo questa data",
|
"LabelLookForNewEpisodesAfterDate": "Cerca nuovi episodi dopo questa data",
|
||||||
"LabelLowestPriority": "Priorità Minima",
|
"LabelLowestPriority": "Priorità Minima",
|
||||||
|
"LabelMatchConfidence": "Fiducia",
|
||||||
"LabelMatchExistingUsersBy": "Abbina gli utenti esistenti per",
|
"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",
|
"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.",
|
"LabelMaxEpisodesToDownload": "Max # di episodi da scaricare. Usa 0 per illimitati.",
|
||||||
|
|
@ -456,7 +477,9 @@
|
||||||
"LabelNewestAuthors": "Nuovi autori",
|
"LabelNewestAuthors": "Nuovi autori",
|
||||||
"LabelNewestEpisodes": "Nuovi episodi",
|
"LabelNewestEpisodes": "Nuovi episodi",
|
||||||
"LabelNextBackupDate": "Data Prossimo Backup",
|
"LabelNextBackupDate": "Data Prossimo Backup",
|
||||||
|
"LabelNextChapters": "I prossimi capitoli saranno:",
|
||||||
"LabelNextScheduledRun": "Data prossima esecuzione schedulata",
|
"LabelNextScheduledRun": "Data prossima esecuzione schedulata",
|
||||||
|
"LabelNoApiKeys": "Nessuna chiave API",
|
||||||
"LabelNoCustomMetadataProviders": "Nessun provider di metadati personalizzato",
|
"LabelNoCustomMetadataProviders": "Nessun provider di metadati personalizzato",
|
||||||
"LabelNoEpisodesSelected": "Nessun Episodio Selezionato",
|
"LabelNoEpisodesSelected": "Nessun Episodio Selezionato",
|
||||||
"LabelNotFinished": "Da completare",
|
"LabelNotFinished": "Da completare",
|
||||||
|
|
@ -472,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Coda Massima di notifiche eventi",
|
"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.",
|
"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",
|
"LabelNumberOfBooks": "Numero di libri",
|
||||||
|
"LabelNumberOfChapters": "Numero di capitoli:",
|
||||||
"LabelNumberOfEpisodes": "Numero di episodi",
|
"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:",
|
"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\".",
|
"LabelOpenIDClaims": "Lasciare vuote le seguenti opzioni per disabilitare l'assegnazione avanzata di gruppi e autorizzazioni, assegnando quindi automaticamente il gruppo \"Utente\".",
|
||||||
|
|
@ -546,6 +570,7 @@
|
||||||
"LabelSelectAll": "Seleziona tutto",
|
"LabelSelectAll": "Seleziona tutto",
|
||||||
"LabelSelectAllEpisodes": "Seleziona tutti gli Episodi",
|
"LabelSelectAllEpisodes": "Seleziona tutti gli Episodi",
|
||||||
"LabelSelectEpisodesShowing": "Selezionati {0} episodi da visualizzare",
|
"LabelSelectEpisodesShowing": "Selezionati {0} episodi da visualizzare",
|
||||||
|
"LabelSelectUser": "Seleziona l'utente",
|
||||||
"LabelSelectUsers": "Selezione Utenti",
|
"LabelSelectUsers": "Selezione Utenti",
|
||||||
"LabelSendEbookToDevice": "Invia il libro a...",
|
"LabelSendEbookToDevice": "Invia il libro a...",
|
||||||
"LabelSequence": "Sequenza",
|
"LabelSequence": "Sequenza",
|
||||||
|
|
@ -613,6 +638,7 @@
|
||||||
"LabelStartTime": "Tempo di inizio",
|
"LabelStartTime": "Tempo di inizio",
|
||||||
"LabelStarted": "Iniziato",
|
"LabelStarted": "Iniziato",
|
||||||
"LabelStartedAt": "Iniziato al",
|
"LabelStartedAt": "Iniziato al",
|
||||||
|
"LabelStartedDate": "Iniziati {0}",
|
||||||
"LabelStatsAudioTracks": "Tracce Audio",
|
"LabelStatsAudioTracks": "Tracce Audio",
|
||||||
"LabelStatsAuthors": "Autori",
|
"LabelStatsAuthors": "Autori",
|
||||||
"LabelStatsBestDay": "Giorno migliore",
|
"LabelStatsBestDay": "Giorno migliore",
|
||||||
|
|
@ -642,6 +668,7 @@
|
||||||
"LabelTheme": "Tema",
|
"LabelTheme": "Tema",
|
||||||
"LabelThemeDark": "Scuro",
|
"LabelThemeDark": "Scuro",
|
||||||
"LabelThemeLight": "Chiaro",
|
"LabelThemeLight": "Chiaro",
|
||||||
|
"LabelThemeSepia": "Seppia",
|
||||||
"LabelTimeBase": "Tempo base",
|
"LabelTimeBase": "Tempo base",
|
||||||
"LabelTimeDurationXHours": "{0} Ore",
|
"LabelTimeDurationXHours": "{0} Ore",
|
||||||
"LabelTimeDurationXMinutes": "{0} minuti",
|
"LabelTimeDurationXMinutes": "{0} minuti",
|
||||||
|
|
@ -710,7 +737,9 @@
|
||||||
"MessageAddToPlayerQueue": "Aggiungi alla coda di riproduzione",
|
"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>.",
|
"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.",
|
"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.",
|
"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.",
|
"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",
|
"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.",
|
"MessageBackupsLocationNoEditNote": "Nota: la posizione del backup viene impostata tramite una variabile di ambiente e non può essere modificata qui.",
|
||||||
|
|
@ -724,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Nessun risultato per il filtro \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Nessun risultato per il filtro \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Nessun risultato per la query",
|
"MessageBookshelfNoResultsForQuery": "Nessun risultato per la query",
|
||||||
"MessageBookshelfNoSeries": "Non c'è nessuna Serie",
|
"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",
|
"MessageChapterEndIsAfter": "La fine del capitolo è dopo la fine del tuo audiolibro",
|
||||||
"MessageChapterErrorFirstNotZero": "Il primo capitolo deve iniziare da 0",
|
"MessageChapterErrorFirstNotZero": "Il primo capitolo deve iniziare da 0",
|
||||||
"MessageChapterErrorStartGteDuration": "L'ora di inizio non valida deve essere inferiore alla durata dell'audiolibro",
|
"MessageChapterErrorStartGteDuration": "L'ora di inizio non valida deve essere inferiore alla durata dell'audiolibro",
|
||||||
|
|
@ -732,6 +762,7 @@
|
||||||
"MessageChaptersNotFound": "Capitoli non trovati",
|
"MessageChaptersNotFound": "Capitoli non trovati",
|
||||||
"MessageCheckingCron": "Controllo cron...",
|
"MessageCheckingCron": "Controllo cron...",
|
||||||
"MessageConfirmCloseFeed": "Sei sicuro di voler chiudere questo feed?",
|
"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}?",
|
"MessageConfirmDeleteBackup": "Sei sicuro di voler eliminare il backup {0}?",
|
||||||
"MessageConfirmDeleteDevice": "Sei sicuro/sicura di voler eliminare il lettore di libri {0}?",
|
"MessageConfirmDeleteDevice": "Sei sicuro/sicura di voler eliminare il lettore di libri {0}?",
|
||||||
"MessageConfirmDeleteFile": "Questo eliminerà il file dal tuo file system. Sei sicuro?",
|
"MessageConfirmDeleteFile": "Questo eliminerà il file dal tuo file system. Sei sicuro?",
|
||||||
|
|
@ -759,6 +790,7 @@
|
||||||
"MessageConfirmRemoveAuthor": "Sei sicuro di voler rimuovere l'autore? \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Sei sicuro di voler rimuovere l'autore? \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Sei sicuro di voler rimuovere la Raccolta \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Sei sicuro di voler rimuovere la Raccolta \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Sei sicuro di voler rimuovere l'episodio \"{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?",
|
"MessageConfirmRemoveEpisodes": "Sei sicuro di voler rimuovere {0} episodi?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Sei sicuro di voler rimuovere {0} sessioni di Ascolto?",
|
"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?",
|
"MessageConfirmRemoveMetadataFiles": "Vuoi davvero rimuovere tutti i metadati.{0} file nelle cartelle degli elementi della tua libreria?",
|
||||||
|
|
@ -784,6 +816,8 @@
|
||||||
"MessageFeedURLWillBe": "l’URL del flusso sarà {0}",
|
"MessageFeedURLWillBe": "l’URL del flusso sarà {0}",
|
||||||
"MessageFetching": "Recupero info…",
|
"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.",
|
"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!",
|
"MessageImportantNotice": "Avviso Importante!",
|
||||||
"MessageInsertChapterBelow": "Inserisci capitolo sotto",
|
"MessageInsertChapterBelow": "Inserisci capitolo sotto",
|
||||||
"MessageInvalidAsin": "ASIN non Valido",
|
"MessageInvalidAsin": "ASIN non Valido",
|
||||||
|
|
@ -923,6 +957,7 @@
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Attivato quando i download automatici degli episodi vengono disabilitati a causa di troppi tentativi falliti",
|
"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",
|
"NotificationOnRSSFeedFailedDescription": "Attivato quando la richiesta del feed RSS per il download automatico di un episodio fallisce",
|
||||||
"NotificationOnTestDescription": "test il sistema di notifica",
|
"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",
|
"PlaceholderNewCollection": "Nome Nuova Raccolta",
|
||||||
"PlaceholderNewFolderPath": "Nuovo Percorso Cartella",
|
"PlaceholderNewFolderPath": "Nuovo Percorso Cartella",
|
||||||
"PlaceholderNewPlaylist": "Nome nuova playlist",
|
"PlaceholderNewPlaylist": "Nome nuova playlist",
|
||||||
|
|
@ -976,8 +1011,12 @@
|
||||||
"ToastBookmarkCreateFailed": "Creazione segnalibro fallita",
|
"ToastBookmarkCreateFailed": "Creazione segnalibro fallita",
|
||||||
"ToastBookmarkCreateSuccess": "Segnalibro creato",
|
"ToastBookmarkCreateSuccess": "Segnalibro creato",
|
||||||
"ToastBookmarkRemoveSuccess": "Segnalibro Rimosso",
|
"ToastBookmarkRemoveSuccess": "Segnalibro Rimosso",
|
||||||
|
"ToastBulkChapterInvalidCount": "Inserire un numero tra 1 e 150",
|
||||||
"ToastCachePurgeFailed": "Impossibile eliminare la cache",
|
"ToastCachePurgeFailed": "Impossibile eliminare la cache",
|
||||||
"ToastCachePurgeSuccess": "Cache eliminata correttamente",
|
"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",
|
"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.",
|
"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.",
|
"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.",
|
||||||
|
|
@ -987,6 +1026,8 @@
|
||||||
"ToastCollectionItemsAddFailed": "l'aggiunta dell'elemento(i) alla raccolta non è riuscito",
|
"ToastCollectionItemsAddFailed": "l'aggiunta dell'elemento(i) alla raccolta non è riuscito",
|
||||||
"ToastCollectionRemoveSuccess": "Collezione rimossa",
|
"ToastCollectionRemoveSuccess": "Collezione rimossa",
|
||||||
"ToastCollectionUpdateSuccess": "Raccolta aggiornata",
|
"ToastCollectionUpdateSuccess": "Raccolta aggiornata",
|
||||||
|
"ToastConnectionNotAvailable": "Connessione non disponibile. Provare più tardi",
|
||||||
|
"ToastCoverSearchFailed": "Ricerca Cover fallita",
|
||||||
"ToastCoverUpdateFailed": "Aggiornamento cover fallito",
|
"ToastCoverUpdateFailed": "Aggiornamento cover fallito",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Data e ora non sono valide o incomplete",
|
"ToastDateTimeInvalidOrIncomplete": "Data e ora non sono valide o incomplete",
|
||||||
"ToastDeleteFileFailed": "Impossibile eliminare il file",
|
"ToastDeleteFileFailed": "Impossibile eliminare il file",
|
||||||
|
|
@ -1002,6 +1043,8 @@
|
||||||
"ToastEpisodeDownloadQueueClearSuccess": "Coda di download degli episodi cancellata",
|
"ToastEpisodeDownloadQueueClearSuccess": "Coda di download degli episodi cancellata",
|
||||||
"ToastEpisodeUpdateSuccess": "{0} episodi aggiornati",
|
"ToastEpisodeUpdateSuccess": "{0} episodi aggiornati",
|
||||||
"ToastErrorCannotShare": "Impossibile condividere in modo nativo su questo dispositivo",
|
"ToastErrorCannotShare": "Impossibile condividere in modo nativo su questo dispositivo",
|
||||||
|
"ToastFailedToCreate": "Non creato",
|
||||||
|
"ToastFailedToDelete": "Non eliminata",
|
||||||
"ToastFailedToLoadData": "Impossibile caricare i dati",
|
"ToastFailedToLoadData": "Impossibile caricare i dati",
|
||||||
"ToastFailedToMatch": "Impossibile abbinare",
|
"ToastFailedToMatch": "Impossibile abbinare",
|
||||||
"ToastFailedToShare": "Impossibile condividere",
|
"ToastFailedToShare": "Impossibile condividere",
|
||||||
|
|
@ -1009,6 +1052,7 @@
|
||||||
"ToastInvalidImageUrl": "URL dell'immagine non valido",
|
"ToastInvalidImageUrl": "URL dell'immagine non valido",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "Numero massimo di episodi non valido da scaricare",
|
"ToastInvalidMaxEpisodesToDownload": "Numero massimo di episodi non valido da scaricare",
|
||||||
"ToastInvalidUrl": "URL non valido",
|
"ToastInvalidUrl": "URL non valido",
|
||||||
|
"ToastInvalidUrls": "Uno o più URL sono invalidi",
|
||||||
"ToastItemCoverUpdateSuccess": "Cover aggiornata",
|
"ToastItemCoverUpdateSuccess": "Cover aggiornata",
|
||||||
"ToastItemDeletedFailed": "Impossibile eliminare l'elemento",
|
"ToastItemDeletedFailed": "Impossibile eliminare l'elemento",
|
||||||
"ToastItemDeletedSuccess": "Elemento eliminato",
|
"ToastItemDeletedSuccess": "Elemento eliminato",
|
||||||
|
|
@ -1033,6 +1077,7 @@
|
||||||
"ToastMustHaveAtLeastOnePath": "Deve avere almeno un percorso",
|
"ToastMustHaveAtLeastOnePath": "Deve avere almeno un percorso",
|
||||||
"ToastNameEmailRequired": "Nome ed email sono obbligatori",
|
"ToastNameEmailRequired": "Nome ed email sono obbligatori",
|
||||||
"ToastNameRequired": "Il nome è obbligatorio",
|
"ToastNameRequired": "Il nome è obbligatorio",
|
||||||
|
"ToastNewApiKeyUserError": "Deve selezionare un utente",
|
||||||
"ToastNewEpisodesFound": "{0} nuovi episodi trovati",
|
"ToastNewEpisodesFound": "{0} nuovi episodi trovati",
|
||||||
"ToastNewUserCreatedFailed": "Impossibile creare l'account: \"{0}\"",
|
"ToastNewUserCreatedFailed": "Impossibile creare l'account: \"{0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "Nuovo account creato",
|
"ToastNewUserCreatedSuccess": "Nuovo account creato",
|
||||||
|
|
@ -1057,6 +1102,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Playlist Aggiornata",
|
"ToastPlaylistUpdateSuccess": "Playlist Aggiornata",
|
||||||
"ToastPodcastCreateFailed": "Errore creazione podcast",
|
"ToastPodcastCreateFailed": "Errore creazione podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast creato correttamente",
|
"ToastPodcastCreateSuccess": "Podcast creato correttamente",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Episodio aggiornato",
|
||||||
"ToastPodcastGetFeedFailed": "Impossibile ottenere il feed del podcast",
|
"ToastPodcastGetFeedFailed": "Impossibile ottenere il feed del podcast",
|
||||||
"ToastPodcastNoEpisodesInFeed": "Nessun episodio trovato nel feed RSS",
|
"ToastPodcastNoEpisodesInFeed": "Nessun episodio trovato nel feed RSS",
|
||||||
"ToastPodcastNoRssFeed": "Il podcast non ha un feed RSS",
|
"ToastPodcastNoRssFeed": "Il podcast non ha un feed RSS",
|
||||||
|
|
@ -1107,5 +1153,13 @@
|
||||||
"ToastUserPasswordChangeSuccess": "Password modificata con successo",
|
"ToastUserPasswordChangeSuccess": "Password modificata con successo",
|
||||||
"ToastUserPasswordMismatch": "Le password non corrispondono",
|
"ToastUserPasswordMismatch": "Le password non corrispondono",
|
||||||
"ToastUserPasswordMustChange": "La nuova password non può corrispondere alla vecchia password",
|
"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,21 @@
|
||||||
"ButtonApplyChapters": "チャプターを確定する",
|
"ButtonApplyChapters": "チャプターを確定する",
|
||||||
"ButtonAuthors": "作者",
|
"ButtonAuthors": "作者",
|
||||||
"ButtonBack": "戻る",
|
"ButtonBack": "戻る",
|
||||||
|
"ButtonBatchEditPopulateFromExisting": "既存のものから取り込む",
|
||||||
|
"ButtonBatchEditPopulateMapDetails": "チャプター情報を読み込む",
|
||||||
|
"ButtonBrowseForFolder": "フォルダーを選択する",
|
||||||
"ButtonCancel": "キャンセル",
|
"ButtonCancel": "キャンセル",
|
||||||
|
"ButtonCancelEncode": "エンコードを取り消す",
|
||||||
"ButtonChangeRootPassword": "Rootのパスワードを変更する",
|
"ButtonChangeRootPassword": "Rootのパスワードを変更する",
|
||||||
|
"ButtonCheckAndDownloadNewEpisodes": "新しいエピソードを確認してダウンロード",
|
||||||
"ButtonChooseAFolder": "フォルダーを選ぶ",
|
"ButtonChooseAFolder": "フォルダーを選ぶ",
|
||||||
"ButtonChooseFiles": "ファイルを選ぶ",
|
"ButtonChooseFiles": "ファイルを選ぶ",
|
||||||
"ButtonClearFilter": "絞り込みを解除",
|
"ButtonClearFilter": "絞り込みを解除",
|
||||||
"ButtonClose": "閉じる",
|
"ButtonClose": "閉じる",
|
||||||
|
"ButtonCloseFeed": "フィードを閉じる",
|
||||||
|
"ButtonCloseSession": "開いているセッションを閉じる",
|
||||||
"ButtonCollections": "コレクション",
|
"ButtonCollections": "コレクション",
|
||||||
|
"ButtonConfigureScanner": "スキャナーの設定",
|
||||||
"ButtonCreate": "作成",
|
"ButtonCreate": "作成",
|
||||||
"ButtonCreateBackup": "バックアップを作成する",
|
"ButtonCreateBackup": "バックアップを作成する",
|
||||||
"ButtonDelete": "削除",
|
"ButtonDelete": "削除",
|
||||||
|
|
@ -26,20 +34,46 @@
|
||||||
"ButtonEditChapters": "チャプターの編集",
|
"ButtonEditChapters": "チャプターの編集",
|
||||||
"ButtonEditPodcast": "ポッドキャストの編集",
|
"ButtonEditPodcast": "ポッドキャストの編集",
|
||||||
"ButtonEnable": "オンにする",
|
"ButtonEnable": "オンにする",
|
||||||
|
"ButtonFireAndFail": "エラーを無視して実行",
|
||||||
|
"ButtonFireOnTest": "テストを実行",
|
||||||
|
"ButtonForceReScan": "強制的に再スキャンする",
|
||||||
|
"ButtonFullPath": "絶対パス",
|
||||||
"ButtonHide": "非表示",
|
"ButtonHide": "非表示",
|
||||||
"ButtonHome": "ホーム",
|
"ButtonHome": "ホーム",
|
||||||
|
"ButtonIssues": "問題",
|
||||||
"ButtonJumpBackward": "巻き戻し",
|
"ButtonJumpBackward": "巻き戻し",
|
||||||
"ButtonJumpForward": "早送り",
|
"ButtonJumpForward": "早送り",
|
||||||
|
"ButtonLatest": "最新",
|
||||||
"ButtonLibrary": "ライブラリー",
|
"ButtonLibrary": "ライブラリー",
|
||||||
"ButtonLogout": "ログアウト",
|
"ButtonLogout": "ログアウト",
|
||||||
|
"ButtonLookup": "参照",
|
||||||
|
"ButtonManageTracks": "トラックの管理",
|
||||||
|
"ButtonMapChapterTitles": "チャプターのタイトルを割り当て",
|
||||||
|
"ButtonMatchAllAuthors": "すべての作者と紐付け",
|
||||||
|
"ButtonMatchBooks": "本と紐付け",
|
||||||
|
"ButtonNevermind": "中止",
|
||||||
|
"ButtonNext": "次",
|
||||||
|
"ButtonNextChapter": "次のチャプター",
|
||||||
|
"ButtonNextItemInQueue": "キューの中の次のアイテム",
|
||||||
"ButtonOk": "はい",
|
"ButtonOk": "はい",
|
||||||
"ButtonPlay": "プレイ",
|
"ButtonOpenFeed": "フィードを開く",
|
||||||
|
"ButtonOpenManager": "管理画面を開く",
|
||||||
|
"ButtonPause": "一時停止",
|
||||||
|
"ButtonPlay": "再生",
|
||||||
|
"ButtonPlayAll": "全て再生",
|
||||||
"ButtonPlaying": "プレイ中",
|
"ButtonPlaying": "プレイ中",
|
||||||
|
"ButtonPlaylists": "プレイリスト",
|
||||||
"ButtonPrevious": "先",
|
"ButtonPrevious": "先",
|
||||||
|
"ButtonPreviousChapter": "前のチャプター",
|
||||||
|
"ButtonProbeAudioFile": "オーディオファイルを解析",
|
||||||
|
"ButtonPurgeAllCache": "全てのキャッシュを削除",
|
||||||
|
"ButtonPurgeItemsCache": "項目のキャッシュを削除",
|
||||||
"ButtonQueueAddItem": "次に再生する",
|
"ButtonQueueAddItem": "次に再生する",
|
||||||
"ButtonQueueRemoveItem": "次に再生から削除",
|
"ButtonQueueRemoveItem": "次に再生から削除",
|
||||||
|
"ButtonQuickEmbed": "クイック埋め込み",
|
||||||
|
"ButtonQuickEmbedMetadata": "メタデータの埋め込み",
|
||||||
"ButtonReScan": "再スキャン",
|
"ButtonReScan": "再スキャン",
|
||||||
"ButtonRead": "野村",
|
"ButtonRead": "読む",
|
||||||
"ButtonReadLess": "閉じる",
|
"ButtonReadLess": "閉じる",
|
||||||
"ButtonReadMore": "もっと見る",
|
"ButtonReadMore": "もっと見る",
|
||||||
"ButtonRefresh": "再読み込み",
|
"ButtonRefresh": "再読み込み",
|
||||||
|
|
@ -56,16 +90,93 @@
|
||||||
"ButtonScrollLeft": "左にスクロール",
|
"ButtonScrollLeft": "左にスクロール",
|
||||||
"ButtonScrollRight": "右にスクロール",
|
"ButtonScrollRight": "右にスクロール",
|
||||||
"ButtonSearch": "検索",
|
"ButtonSearch": "検索",
|
||||||
|
"ButtonSeries": "シリーズ",
|
||||||
|
"ButtonSubmit": "送信",
|
||||||
"ButtonYes": "はい",
|
"ButtonYes": "はい",
|
||||||
|
"HeaderAccount": "アカウント",
|
||||||
|
"HeaderAdvanced": "上級者向け",
|
||||||
|
"HeaderAudioTracks": "オーディオトラック",
|
||||||
|
"HeaderChapters": "チャプター",
|
||||||
|
"HeaderCollection": "コレクション",
|
||||||
|
"HeaderCollectionItems": "コレクションの項目",
|
||||||
|
"HeaderDetails": "詳細",
|
||||||
|
"HeaderEbookFiles": "電子書籍ファイル",
|
||||||
|
"HeaderEpisodes": "エピソード",
|
||||||
|
"HeaderEreaderSettings": "電子書籍リーダーの設定",
|
||||||
|
"HeaderLatestEpisodes": "最新のエピソード",
|
||||||
|
"HeaderLibraries": "ライブラリー",
|
||||||
|
"HeaderOpenRSSFeed": "RSS Feedを開く",
|
||||||
"HeaderPlayerSettings": "プレーヤーの設定",
|
"HeaderPlayerSettings": "プレーヤーの設定",
|
||||||
|
"HeaderPlaylist": "プレイリスト",
|
||||||
|
"HeaderPlaylistItems": "プレイリストアイテム",
|
||||||
|
"HeaderRSSFeedGeneral": "RSS 詳細",
|
||||||
|
"HeaderSettings": "設定",
|
||||||
|
"HeaderSettingsGeneral": "一般",
|
||||||
|
"HeaderSettingsScanner": "スキャナー",
|
||||||
|
"HeaderSleepTimer": "スリープタイマー",
|
||||||
|
"HeaderStatsMinutesListeningChart": "過去7日間の視聴時間(分)",
|
||||||
|
"LabelAddToPlaylist": "プレイリストの追加",
|
||||||
|
"LabelAuthor": "著者",
|
||||||
|
"LabelAuthorFirstLast": "著者(名 氏)",
|
||||||
|
"LabelAuthorLastFirst": "著者(氏 名)",
|
||||||
|
"LabelAuthors": "著者",
|
||||||
|
"LabelAutoDownloadEpisodes": "エピソードの自動ダウンロード",
|
||||||
"LabelBooks": "ほん",
|
"LabelBooks": "ほん",
|
||||||
|
"LabelChapters": "チャプター",
|
||||||
|
"LabelClosePlayer": "プレイヤーを閉じる",
|
||||||
|
"LabelComplete": "完了",
|
||||||
"LabelContinueListening": "続きから聞く",
|
"LabelContinueListening": "続きから聞く",
|
||||||
|
"LabelDescription": "説明",
|
||||||
|
"LabelDownload": "ダウンロード",
|
||||||
|
"LabelDuration": "長さ",
|
||||||
|
"LabelEbook": "Eブック",
|
||||||
|
"LabelEbooks": "Eブック",
|
||||||
|
"LabelEnable": "有効",
|
||||||
|
"LabelEndOfChapter": "チャプターの最後",
|
||||||
|
"LabelEpisode": "エピソード",
|
||||||
|
"LabelFeedURL": "Feed URL",
|
||||||
|
"LabelFile": "ファイル",
|
||||||
|
"LabelFilename": "ファイル名",
|
||||||
|
"LabelFinished": "完了",
|
||||||
|
"LabelFolder": "フォルダ",
|
||||||
|
"LabelFontBoldness": "フォントの太さ",
|
||||||
|
"LabelFontScale": "フォントサイズ",
|
||||||
|
"LabelGenre": "ジャンル",
|
||||||
|
"LabelGenres": "ジャンル",
|
||||||
|
"LabelHost": "ホスト",
|
||||||
|
"LabelInProgress": "進行中",
|
||||||
"LabelLanguage": "言語",
|
"LabelLanguage": "言語",
|
||||||
"LabelLanguages": "言語",
|
"LabelLanguages": "言語",
|
||||||
|
"LabelLayout": "レイアウト",
|
||||||
|
"LabelLayoutSinglePage": "単ページ",
|
||||||
|
"LabelLineSpacing": "行間",
|
||||||
|
"LabelListenAgain": "再度視聴",
|
||||||
|
"LabelMediaType": "メディアの種類",
|
||||||
|
"LabelMoreInfo": "追加情報",
|
||||||
"LabelName": "名",
|
"LabelName": "名",
|
||||||
|
"LabelNarrator": "ナレーター",
|
||||||
|
"LabelNarrators": "ナレーター",
|
||||||
"LabelNew": "新しい",
|
"LabelNew": "新しい",
|
||||||
"LabelNewPassword": "新しいのパスワード",
|
"LabelNewPassword": "新しいのパスワード",
|
||||||
|
"LabelNewestAuthors": "最新の著者",
|
||||||
|
"LabelNewestEpisodes": "最新エピソード",
|
||||||
"LabelPassword": "パスワード",
|
"LabelPassword": "パスワード",
|
||||||
|
"LabelPath": "パス",
|
||||||
"LabelPlaylists": "プレイリスト",
|
"LabelPlaylists": "プレイリスト",
|
||||||
"LabelPodcast": "ポッドキャスト"
|
"LabelPodcast": "ポッドキャスト",
|
||||||
|
"LabelPodcasts": "ポッドキャスト",
|
||||||
|
"LabelPreventIndexing": "フィードがiTunesおよびGoogleのポッドキャストディレクトリにインデックス登録されるのを防ぎます",
|
||||||
|
"LabelPublishYear": "公開年",
|
||||||
|
"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に保存されますが、この設定をオンにするとライブラリーの項目のフォルダーに保存されます"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
1165
client/strings/ko.json
Normal file
1165
client/strings/ko.json
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -18,6 +18,7 @@
|
||||||
"ButtonChooseAFolder": "Pasirinkite aplanką",
|
"ButtonChooseAFolder": "Pasirinkite aplanką",
|
||||||
"ButtonChooseFiles": "Pasirinkite failus",
|
"ButtonChooseFiles": "Pasirinkite failus",
|
||||||
"ButtonClearFilter": "Valyti filtrą",
|
"ButtonClearFilter": "Valyti filtrą",
|
||||||
|
"ButtonClose": "Uždaryti",
|
||||||
"ButtonCloseFeed": "Uždaryti srautą",
|
"ButtonCloseFeed": "Uždaryti srautą",
|
||||||
"ButtonCloseSession": "Uždaryti Atidarytą sesiją",
|
"ButtonCloseSession": "Uždaryti Atidarytą sesiją",
|
||||||
"ButtonCollections": "Kolekcijos",
|
"ButtonCollections": "Kolekcijos",
|
||||||
|
|
@ -251,7 +252,7 @@
|
||||||
"LabelDuration": "Trukmė",
|
"LabelDuration": "Trukmė",
|
||||||
"LabelDurationFound": "Rasta trukmė:",
|
"LabelDurationFound": "Rasta trukmė:",
|
||||||
"LabelEbook": "Elektroninė knyga",
|
"LabelEbook": "Elektroninė knyga",
|
||||||
"LabelEbooks": "Elektroninės knygos",
|
"LabelEbooks": "El. knygos",
|
||||||
"LabelEdit": "Redaguoti",
|
"LabelEdit": "Redaguoti",
|
||||||
"LabelEmail": "El. paštas",
|
"LabelEmail": "El. paštas",
|
||||||
"LabelEmailSettingsFromAddress": "Siuntėjo adresas",
|
"LabelEmailSettingsFromAddress": "Siuntėjo adresas",
|
||||||
|
|
@ -261,6 +262,7 @@
|
||||||
"LabelEmbeddedCover": "Įterptas viršelis",
|
"LabelEmbeddedCover": "Įterptas viršelis",
|
||||||
"LabelEnable": "Įjungti",
|
"LabelEnable": "Įjungti",
|
||||||
"LabelEnd": "Pabaiga",
|
"LabelEnd": "Pabaiga",
|
||||||
|
"LabelEndOfChapter": "Skyriaus pabaiga",
|
||||||
"LabelEpisode": "Epizodas",
|
"LabelEpisode": "Epizodas",
|
||||||
"LabelEpisodeTitle": "Epizodo pavadinimas",
|
"LabelEpisodeTitle": "Epizodo pavadinimas",
|
||||||
"LabelEpisodeType": "Epizodo tipas",
|
"LabelEpisodeType": "Epizodo tipas",
|
||||||
|
|
@ -282,8 +284,8 @@
|
||||||
"LabelGenre": "Žanras",
|
"LabelGenre": "Žanras",
|
||||||
"LabelGenres": "Žanrai",
|
"LabelGenres": "Žanrai",
|
||||||
"LabelHardDeleteFile": "Galutinai ištrinti failą",
|
"LabelHardDeleteFile": "Galutinai ištrinti failą",
|
||||||
"LabelHasEbook": "Turi e-knygą",
|
"LabelHasEbook": "Turi el. knygą",
|
||||||
"LabelHasSupplementaryEbook": "Turi papildomą e-knygą",
|
"LabelHasSupplementaryEbook": "Turi papildomą el. knygą",
|
||||||
"LabelHost": "Serveris",
|
"LabelHost": "Serveris",
|
||||||
"LabelHour": "Valanda",
|
"LabelHour": "Valanda",
|
||||||
"LabelIcon": "Piktograma",
|
"LabelIcon": "Piktograma",
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,7 @@
|
||||||
"HeaderAudiobookTools": "Audioboekbestandbeheer tools",
|
"HeaderAudiobookTools": "Audioboekbestandbeheer tools",
|
||||||
"HeaderAuthentication": "Authenticatie",
|
"HeaderAuthentication": "Authenticatie",
|
||||||
"HeaderBackups": "Back-ups",
|
"HeaderBackups": "Back-ups",
|
||||||
|
"HeaderBulkChapterModal": "Meerdere hoofdstukken toevoegen",
|
||||||
"HeaderChangePassword": "Wachtwoord wijzigen",
|
"HeaderChangePassword": "Wachtwoord wijzigen",
|
||||||
"HeaderChapters": "Hoofdstukken",
|
"HeaderChapters": "Hoofdstukken",
|
||||||
"HeaderChooseAFolder": "Map kiezen",
|
"HeaderChooseAFolder": "Map kiezen",
|
||||||
|
|
@ -199,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Experimentele functies",
|
"HeaderSettingsExperimental": "Experimentele functies",
|
||||||
"HeaderSettingsGeneral": "Algemeen",
|
"HeaderSettingsGeneral": "Algemeen",
|
||||||
"HeaderSettingsScanner": "Scanner",
|
"HeaderSettingsScanner": "Scanner",
|
||||||
|
"HeaderSettingsSecurity": "Beveiliging",
|
||||||
"HeaderSettingsWebClient": "Web Client",
|
"HeaderSettingsWebClient": "Web Client",
|
||||||
"HeaderSleepTimer": "Slaaptimer",
|
"HeaderSleepTimer": "Slaaptimer",
|
||||||
"HeaderStatsLargestItems": "Grootste items",
|
"HeaderStatsLargestItems": "Grootste items",
|
||||||
|
|
@ -232,7 +234,7 @@
|
||||||
"LabelAddToPlaylist": "Toevoegen aan afspeellijst",
|
"LabelAddToPlaylist": "Toevoegen aan afspeellijst",
|
||||||
"LabelAddToPlaylistBatch": "{0} onderdelen toevoegen aan afspeellijst",
|
"LabelAddToPlaylistBatch": "{0} onderdelen toevoegen aan afspeellijst",
|
||||||
"LabelAddedAt": "Toegevoegd op",
|
"LabelAddedAt": "Toegevoegd op",
|
||||||
"LabelAddedDate": "Toegevoegd {0}",
|
"LabelAddedDate": "{0} toegevoegd",
|
||||||
"LabelAdminUsersOnly": "Enkel Admin gebruikers",
|
"LabelAdminUsersOnly": "Enkel Admin gebruikers",
|
||||||
"LabelAll": "Alle",
|
"LabelAll": "Alle",
|
||||||
"LabelAllEpisodesDownloaded": "Alle afleveringen gedownload",
|
"LabelAllEpisodesDownloaded": "Alle afleveringen gedownload",
|
||||||
|
|
@ -293,6 +295,7 @@
|
||||||
"LabelContinueListening": "Verder Luisteren",
|
"LabelContinueListening": "Verder Luisteren",
|
||||||
"LabelContinueReading": "Verder lezen",
|
"LabelContinueReading": "Verder lezen",
|
||||||
"LabelContinueSeries": "Doorgaan met Serie",
|
"LabelContinueSeries": "Doorgaan met Serie",
|
||||||
|
"LabelCorsAllowed": "CORS bronnen toestaan",
|
||||||
"LabelCover": "Omslag",
|
"LabelCover": "Omslag",
|
||||||
"LabelCoverImageURL": "Omslagafbeelding-URL",
|
"LabelCoverImageURL": "Omslagafbeelding-URL",
|
||||||
"LabelCoverProvider": "Omslag bron",
|
"LabelCoverProvider": "Omslag bron",
|
||||||
|
|
@ -306,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Verwijderen uit bestandssysteem (uncheck om alleen uit database te verwijderen)",
|
"LabelDeleteFromFileSystemCheckbox": "Verwijderen uit bestandssysteem (uncheck om alleen uit database te verwijderen)",
|
||||||
"LabelDescription": "Beschrijving",
|
"LabelDescription": "Beschrijving",
|
||||||
"LabelDeselectAll": "Deselecteer alle",
|
"LabelDeselectAll": "Deselecteer alle",
|
||||||
|
"LabelDetectedPattern": "Gedetecteerd patroon:",
|
||||||
"LabelDevice": "Apparaat",
|
"LabelDevice": "Apparaat",
|
||||||
"LabelDeviceInfo": "Apparaat info",
|
"LabelDeviceInfo": "Apparaat info",
|
||||||
"LabelDeviceIsAvailableTo": "Apparaat is beschikbaar voor...",
|
"LabelDeviceIsAvailableTo": "Apparaat is beschikbaar voor...",
|
||||||
|
|
@ -374,6 +378,7 @@
|
||||||
"LabelFilterByUser": "Filter op gebruiker",
|
"LabelFilterByUser": "Filter op gebruiker",
|
||||||
"LabelFindEpisodes": "Zoek afleveringen",
|
"LabelFindEpisodes": "Zoek afleveringen",
|
||||||
"LabelFinished": "Voltooid",
|
"LabelFinished": "Voltooid",
|
||||||
|
"LabelFinishedDate": "Voltooid {0}",
|
||||||
"LabelFolder": "Map",
|
"LabelFolder": "Map",
|
||||||
"LabelFolders": "Mappen",
|
"LabelFolders": "Mappen",
|
||||||
"LabelFontBold": "Vetgedrukt",
|
"LabelFontBold": "Vetgedrukt",
|
||||||
|
|
@ -432,6 +437,8 @@
|
||||||
"LabelLibraryItem": "Bibliotheekonderdeel",
|
"LabelLibraryItem": "Bibliotheekonderdeel",
|
||||||
"LabelLibraryName": "Bibliotheeknaam",
|
"LabelLibraryName": "Bibliotheeknaam",
|
||||||
"LabelLibrarySortByProgress": "Voortuigang geüpdatet",
|
"LabelLibrarySortByProgress": "Voortuigang geüpdatet",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Datum voltooid",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Datum gestart",
|
||||||
"LabelLimit": "Limiet",
|
"LabelLimit": "Limiet",
|
||||||
"LabelLineSpacing": "Regelruimte",
|
"LabelLineSpacing": "Regelruimte",
|
||||||
"LabelListenAgain": "Opnieuw Beluisteren",
|
"LabelListenAgain": "Opnieuw Beluisteren",
|
||||||
|
|
@ -470,6 +477,7 @@
|
||||||
"LabelNewestAuthors": "Nieuwste Auteurs",
|
"LabelNewestAuthors": "Nieuwste Auteurs",
|
||||||
"LabelNewestEpisodes": "Nieuwste Afleveringen",
|
"LabelNewestEpisodes": "Nieuwste Afleveringen",
|
||||||
"LabelNextBackupDate": "Volgende back-up datum",
|
"LabelNextBackupDate": "Volgende back-up datum",
|
||||||
|
"LabelNextChapters": "Volgende hoofdstukken zijn:",
|
||||||
"LabelNextScheduledRun": "Volgende geplande run",
|
"LabelNextScheduledRun": "Volgende geplande run",
|
||||||
"LabelNoApiKeys": "Geen API keys",
|
"LabelNoApiKeys": "Geen API keys",
|
||||||
"LabelNoCustomMetadataProviders": "Geen custom metadata bronnen",
|
"LabelNoCustomMetadataProviders": "Geen custom metadata bronnen",
|
||||||
|
|
@ -487,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Max rijgrootte voor notificatie gebeurtenissen",
|
"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.",
|
"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",
|
"LabelNumberOfBooks": "Aantal Boeken",
|
||||||
|
"LabelNumberOfChapters": "Aantal hoofdstukken:",
|
||||||
"LabelNumberOfEpisodes": "# Afleveringen",
|
"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:",
|
"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.",
|
"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",
|
"LabelStartTime": "Starttijd",
|
||||||
"LabelStarted": "Gestart",
|
"LabelStarted": "Gestart",
|
||||||
"LabelStartedAt": "Gestart op",
|
"LabelStartedAt": "Gestart op",
|
||||||
|
"LabelStartedDate": "Gestart {0}",
|
||||||
"LabelStatsAudioTracks": "Audiotracks",
|
"LabelStatsAudioTracks": "Audiotracks",
|
||||||
"LabelStatsAuthors": "Auteurs",
|
"LabelStatsAuthors": "Auteurs",
|
||||||
"LabelStatsBestDay": "Beste dag",
|
"LabelStatsBestDay": "Beste dag",
|
||||||
|
|
@ -743,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Geen resultaten voor filter \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Geen resultaten voor filter \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Geen resultaten voor query",
|
"MessageBookshelfNoResultsForQuery": "Geen resultaten voor query",
|
||||||
"MessageBookshelfNoSeries": "Je hebt geen series",
|
"MessageBookshelfNoSeries": "Je hebt geen series",
|
||||||
|
"MessageBulkChapterPattern": "Hoeveel hoofdstukken wilt u met dit nummeringspatroon toevoegen?",
|
||||||
"MessageChapterEndIsAfter": "Hoofdstukeinde is na het einde van je audioboek",
|
"MessageChapterEndIsAfter": "Hoofdstukeinde is na het einde van je audioboek",
|
||||||
"MessageChapterErrorFirstNotZero": "Eerste hoofdstuk moet starten op 0",
|
"MessageChapterErrorFirstNotZero": "Eerste hoofdstuk moet starten op 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Ongeldig: starttijd moet kleiner zijn dan duur van audioboek",
|
"MessageChapterErrorStartGteDuration": "Ongeldig: starttijd moet kleiner zijn dan duur van audioboek",
|
||||||
|
|
@ -805,6 +816,8 @@
|
||||||
"MessageFeedURLWillBe": "Feed URL zal {0} zijn",
|
"MessageFeedURLWillBe": "Feed URL zal {0} zijn",
|
||||||
"MessageFetching": "Aan het ophalen...",
|
"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.",
|
"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!",
|
"MessageImportantNotice": "Belangrijke opmerking!",
|
||||||
"MessageInsertChapterBelow": "Hoofdstuk hieronder invoegen",
|
"MessageInsertChapterBelow": "Hoofdstuk hieronder invoegen",
|
||||||
"MessageInvalidAsin": "Ongeldige ASIN",
|
"MessageInvalidAsin": "Ongeldige ASIN",
|
||||||
|
|
@ -944,6 +957,7 @@
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Wordt geactiveerd wanneer automatische afleveringsdownloads zijn uitgeschakeld vanwege te veel mislukte pogingen",
|
"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",
|
"NotificationOnRSSFeedFailedDescription": "Getriggerd wanneer de RSS feed aanvraag faalt voor een automatische aflevering download",
|
||||||
"NotificationOnTestDescription": "Event voor het testen van het notificatiesysteem",
|
"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",
|
"PlaceholderNewCollection": "Nieuwe naam collectie",
|
||||||
"PlaceholderNewFolderPath": "Nieuwe locatie map",
|
"PlaceholderNewFolderPath": "Nieuwe locatie map",
|
||||||
"PlaceholderNewPlaylist": "Nieuwe naam afspeellijst",
|
"PlaceholderNewPlaylist": "Nieuwe naam afspeellijst",
|
||||||
|
|
@ -997,8 +1011,12 @@
|
||||||
"ToastBookmarkCreateFailed": "Aanmaken boekwijzer mislukt",
|
"ToastBookmarkCreateFailed": "Aanmaken boekwijzer mislukt",
|
||||||
"ToastBookmarkCreateSuccess": "boekwijzer toegevoegd",
|
"ToastBookmarkCreateSuccess": "boekwijzer toegevoegd",
|
||||||
"ToastBookmarkRemoveSuccess": "Boekwijzer verwijderd",
|
"ToastBookmarkRemoveSuccess": "Boekwijzer verwijderd",
|
||||||
|
"ToastBulkChapterInvalidCount": "Voer een nummer in tussen 1 en 150",
|
||||||
"ToastCachePurgeFailed": "Cache wissen is mislukt",
|
"ToastCachePurgeFailed": "Cache wissen is mislukt",
|
||||||
"ToastCachePurgeSuccess": "Cache succesvol verwijderd",
|
"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",
|
"ToastChaptersHaveErrors": "Hoofdstukken bevatten fouten",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "Ongeldige shift-tijd. De starttijd van het laatste hoofdstuk zou langer zijn dan de duur van dit audioboek.",
|
"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.",
|
"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",
|
"ToastInvalidImageUrl": "Ongeldige afbeeldings-URL",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "Ongeldig maximum aantal afleveringen om te downloaden",
|
"ToastInvalidMaxEpisodesToDownload": "Ongeldig maximum aantal afleveringen om te downloaden",
|
||||||
"ToastInvalidUrl": "Ongeldige URL",
|
"ToastInvalidUrl": "Ongeldige URL",
|
||||||
|
"ToastInvalidUrls": "Een of meerdere URLs zijn ongeldig",
|
||||||
"ToastItemCoverUpdateSuccess": "Omslag bijgewerkt",
|
"ToastItemCoverUpdateSuccess": "Omslag bijgewerkt",
|
||||||
"ToastItemDeletedFailed": "Item verwijderen mislukt",
|
"ToastItemDeletedFailed": "Item verwijderen mislukt",
|
||||||
"ToastItemDeletedSuccess": "Verwijderd item",
|
"ToastItemDeletedSuccess": "Verwijderd item",
|
||||||
|
|
@ -1081,6 +1100,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Afspeellijst bijgewerkt",
|
"ToastPlaylistUpdateSuccess": "Afspeellijst bijgewerkt",
|
||||||
"ToastPodcastCreateFailed": "Podcast aanmaken mislukt",
|
"ToastPodcastCreateFailed": "Podcast aanmaken mislukt",
|
||||||
"ToastPodcastCreateSuccess": "Podcast aangemaakt",
|
"ToastPodcastCreateSuccess": "Podcast aangemaakt",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Aflevering bijgewerkt",
|
||||||
"ToastPodcastGetFeedFailed": "Podcast feed ophalen mislukt",
|
"ToastPodcastGetFeedFailed": "Podcast feed ophalen mislukt",
|
||||||
"ToastPodcastNoEpisodesInFeed": "Geen afleveringen gevonden in RSS feed",
|
"ToastPodcastNoEpisodesInFeed": "Geen afleveringen gevonden in RSS feed",
|
||||||
"ToastPodcastNoRssFeed": "Podcast heeft geen RSS feed",
|
"ToastPodcastNoRssFeed": "Podcast heeft geen RSS feed",
|
||||||
|
|
@ -1131,5 +1151,13 @@
|
||||||
"ToastUserPasswordChangeSuccess": "Wachtwoord succesvol gewijzigd",
|
"ToastUserPasswordChangeSuccess": "Wachtwoord succesvol gewijzigd",
|
||||||
"ToastUserPasswordMismatch": "Wachtwoorden komen niet overeen",
|
"ToastUserPasswordMismatch": "Wachtwoorden komen niet overeen",
|
||||||
"ToastUserPasswordMustChange": "Het nieuwe wachtwoord kan niet overeenkomen met het oude wachtwoord",
|
"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)"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
"ButtonApplyChapters": "Bruk kapittel",
|
"ButtonApplyChapters": "Bruk kapittel",
|
||||||
"ButtonAuthors": "Forfattere",
|
"ButtonAuthors": "Forfattere",
|
||||||
"ButtonBack": "Tilbake",
|
"ButtonBack": "Tilbake",
|
||||||
"ButtonBatchEditPopulateFromExisting": "Opprett fra eksisterende",
|
"ButtonBatchEditPopulateFromExisting": "Fyll ut fra eksisterende",
|
||||||
"ButtonBatchEditPopulateMapDetails": "Legg til detaljer",
|
"ButtonBatchEditPopulateMapDetails": "Legg til detaljer",
|
||||||
"ButtonBrowseForFolder": "Bla gjennom mappe",
|
"ButtonBrowseForFolder": "Bla gjennom mappe",
|
||||||
"ButtonCancel": "Avbryt",
|
"ButtonCancel": "Avbryt",
|
||||||
|
|
@ -127,6 +127,7 @@
|
||||||
"HeaderAudiobookTools": "Lydbok Filbehandlingsverktøy",
|
"HeaderAudiobookTools": "Lydbok Filbehandlingsverktøy",
|
||||||
"HeaderAuthentication": "Autentisering",
|
"HeaderAuthentication": "Autentisering",
|
||||||
"HeaderBackups": "Sikkerhetskopier",
|
"HeaderBackups": "Sikkerhetskopier",
|
||||||
|
"HeaderBulkChapterModal": "Legg til flere kapitler",
|
||||||
"HeaderChangePassword": "Bytt passord",
|
"HeaderChangePassword": "Bytt passord",
|
||||||
"HeaderChapters": "Kapittel",
|
"HeaderChapters": "Kapittel",
|
||||||
"HeaderChooseAFolder": "Velg en mappe",
|
"HeaderChooseAFolder": "Velg en mappe",
|
||||||
|
|
@ -433,13 +434,13 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Ingen {0}",
|
"LabelLibraryFilterSublistEmpty": "Ingen {0}",
|
||||||
"LabelLibraryItem": "Bibliotek enhet",
|
"LabelLibraryItem": "Bibliotek enhet",
|
||||||
"LabelLibraryName": "Bibliotek navn",
|
"LabelLibraryName": "Bibliotek navn",
|
||||||
"LabelLibrarySortByProgress": "Fremgang oppdatert",
|
"LabelLibrarySortByProgress": "Fremgang: Sist oppdatert",
|
||||||
"LabelLimit": "Begrensning",
|
"LabelLimit": "Begrensning",
|
||||||
"LabelLineSpacing": "Linjemellomrom",
|
"LabelLineSpacing": "Linjemellomrom",
|
||||||
"LabelListenAgain": "Lytt igjen",
|
"LabelListenAgain": "Lytt igjen",
|
||||||
"LabelLogLevelDebug": "Debug",
|
"LabelLogLevelDebug": "Debug",
|
||||||
"LabelLogLevelInfo": "Info",
|
"LabelLogLevelInfo": "Info",
|
||||||
"LabelLogLevelWarn": "Warn",
|
"LabelLogLevelWarn": "Varsel",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Se etter nye episoder etter denne datoen",
|
"LabelLookForNewEpisodesAfterDate": "Se etter nye episoder etter denne datoen",
|
||||||
"LabelLowestPriority": "Laveste prioritet",
|
"LabelLowestPriority": "Laveste prioritet",
|
||||||
"LabelMatchExistingUsersBy": "Knytt sammen eksisterende brukere basert på",
|
"LabelMatchExistingUsersBy": "Knytt sammen eksisterende brukere basert på",
|
||||||
|
|
@ -490,6 +491,7 @@
|
||||||
"LabelNumberOfEpisodes": "# episoder",
|
"LabelNumberOfEpisodes": "# episoder",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Navnet på OpenID claim'et som inneholder avanserte tilganger for brukerhandlinger i applikasjonen som vil brukes for ikke-administratorroller (<b>hvis konfigurert</b>). Hvis claim'et mangler fra responsen, nektes tilgang til ABS. Hvis en enkelt opsjon mangler, blir behandlet som <code>false</code>. Påse at identitetstilbyderens claim stemmer overens med den forventede strukturen:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Navnet på OpenID claim'et som inneholder avanserte tilganger for brukerhandlinger i applikasjonen som vil brukes for ikke-administratorroller (<b>hvis konfigurert</b>). Hvis claim'et mangler fra responsen, nektes tilgang til ABS. Hvis en enkelt opsjon mangler, blir behandlet som <code>false</code>. Påse at identitetstilbyderens claim stemmer overens med den forventede strukturen:",
|
||||||
"LabelOpenIDClaims": "La følge valg være tomme for å slå av avanserte gruppe og tillatelser. Gruppen \"Bruker\" vil da også automatisk legges til.",
|
"LabelOpenIDClaims": "La følge valg være tomme for å slå av avanserte gruppe og tillatelser. Gruppen \"Bruker\" vil da også automatisk legges til.",
|
||||||
|
"LabelOpenIDGroupClaimDescription": "Navn på OpenID-forespørsel som inneholder en lite over brukerens grupper. Vanligvis kalt <code>grupper</code>. <b>Om konfigurert</b>, vil applikasjonen tildele roller baseret på brukerens gruppemedlemsskaper, gitt disse grupper er navngitt (uten forbehold for store og små bokstaver) 'admin', 'user' eller 'guest' i forespørsel. Forespørselen burde inneholde en liste (og hvis brukeren tilhører flere grupper), applikasjonen vil tildele rolle med høyeste adgangsnivå. Hvis ingen grupper matcher vil adgang bli nektet.",
|
||||||
"LabelOpenRSSFeed": "Åpne RSS Feed",
|
"LabelOpenRSSFeed": "Åpne RSS Feed",
|
||||||
"LabelOverwrite": "Overskriv",
|
"LabelOverwrite": "Overskriv",
|
||||||
"LabelPaginationPageXOfY": "Side {0} av {1}",
|
"LabelPaginationPageXOfY": "Side {0} av {1}",
|
||||||
|
|
@ -759,7 +761,7 @@
|
||||||
"MessageConfirmMarkSeriesFinished": "Er du sikker på at du vil markere alle bøkene i serien som fullført?",
|
"MessageConfirmMarkSeriesFinished": "Er du sikker på at du vil markere alle bøkene i serien som fullført?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Er du sikker på at du vil markere alle bøkene i serien som ikke fullført?",
|
"MessageConfirmMarkSeriesNotFinished": "Er du sikker på at du vil markere alle bøkene i serien som ikke fullført?",
|
||||||
"MessageConfirmNotificationTestTrigger": "Utløs dette varselet med test-data?",
|
"MessageConfirmNotificationTestTrigger": "Utløs dette varselet med test-data?",
|
||||||
"MessageConfirmPurgeCache": "(Purge cache) Dette vil sletter hele mappen <code>/metadata/cache</code>. <br /><br />Er du sikker på at du du vil slette cache-mappen?",
|
"MessageConfirmPurgeCache": "Tømming av mellomlagring vil slette hele mappen <code>/metadata/cache</code>. <br /><br />Er du sikker på at du du vil slette mappen?",
|
||||||
"MessageConfirmPurgeItemsCache": "(Purge items cache) Dette vil sletter hele mappen <code>/metadata/cache/items</code>.<br />Er du sikker?",
|
"MessageConfirmPurgeItemsCache": "(Purge items cache) Dette vil sletter hele mappen <code>/metadata/cache/items</code>.<br />Er du sikker?",
|
||||||
"MessageConfirmQuickEmbed": "Advarsel! Rask innbygging av metadata tar ikke backup av lyd-filene først. Forsikre deg om at du har sikkerhetskopi av filene. <br><br> Fortsett?",
|
"MessageConfirmQuickEmbed": "Advarsel! Rask innbygging av metadata tar ikke backup av lyd-filene først. Forsikre deg om at du har sikkerhetskopi av filene. <br><br> Fortsett?",
|
||||||
"MessageConfirmQuickMatchEpisodes": "Hurtig gjenkjenning av episoder overskriver detaljene hvis en match blir funnet. Kun episoder som ikke allerede er matchet blir oppdatert. Er du sikker?",
|
"MessageConfirmQuickMatchEpisodes": "Hurtig gjenkjenning av episoder overskriver detaljene hvis en match blir funnet. Kun episoder som ikke allerede er matchet blir oppdatert. Er du sikker?",
|
||||||
|
|
@ -939,6 +941,7 @@
|
||||||
"ToastCollectionItemsAddFailed": "Feil med å legge til element(er)",
|
"ToastCollectionItemsAddFailed": "Feil med å legge til element(er)",
|
||||||
"ToastCollectionRemoveSuccess": "Samling fjernet",
|
"ToastCollectionRemoveSuccess": "Samling fjernet",
|
||||||
"ToastCollectionUpdateSuccess": "samlingupdated",
|
"ToastCollectionUpdateSuccess": "samlingupdated",
|
||||||
|
"ToastCoverSearchFailed": "Finner ikke bokomslag",
|
||||||
"ToastCoverUpdateFailed": "Oppdatering av bilde feilet",
|
"ToastCoverUpdateFailed": "Oppdatering av bilde feilet",
|
||||||
"ToastDeleteFileFailed": "Kunne ikke slette fil",
|
"ToastDeleteFileFailed": "Kunne ikke slette fil",
|
||||||
"ToastDeleteFileSuccess": "Fil slettet",
|
"ToastDeleteFileSuccess": "Fil slettet",
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@
|
||||||
"ButtonReScan": "Ponowne skanowanie",
|
"ButtonReScan": "Ponowne skanowanie",
|
||||||
"ButtonRead": "Czytaj",
|
"ButtonRead": "Czytaj",
|
||||||
"ButtonReadLess": "Pokaż mniej",
|
"ButtonReadLess": "Pokaż mniej",
|
||||||
"ButtonReadMore": "Pokaż więcej",
|
"ButtonReadMore": "Czytaj więcej",
|
||||||
"ButtonRefresh": "Odśwież",
|
"ButtonRefresh": "Odśwież",
|
||||||
"ButtonRemove": "Usuń",
|
"ButtonRemove": "Usuń",
|
||||||
"ButtonRemoveAll": "Usuń wszystko",
|
"ButtonRemoveAll": "Usuń wszystko",
|
||||||
|
|
@ -96,7 +96,7 @@
|
||||||
"ButtonScrollRight": "Przewiń w prawo",
|
"ButtonScrollRight": "Przewiń w prawo",
|
||||||
"ButtonSearch": "Szukaj",
|
"ButtonSearch": "Szukaj",
|
||||||
"ButtonSelectFolderPath": "Wybierz ścieżkę folderu",
|
"ButtonSelectFolderPath": "Wybierz ścieżkę folderu",
|
||||||
"ButtonSeries": "Seria",
|
"ButtonSeries": "Serial",
|
||||||
"ButtonSetChaptersFromTracks": "Ustawiaj rozdziały na podstawie utworów",
|
"ButtonSetChaptersFromTracks": "Ustawiaj rozdziały na podstawie utworów",
|
||||||
"ButtonShare": "Udostępnij",
|
"ButtonShare": "Udostępnij",
|
||||||
"ButtonShiftTimes": "Przesunięcie czasowe",
|
"ButtonShiftTimes": "Przesunięcie czasowe",
|
||||||
|
|
@ -127,6 +127,7 @@
|
||||||
"HeaderAudiobookTools": "Narzędzia do zarządzania audiobookami",
|
"HeaderAudiobookTools": "Narzędzia do zarządzania audiobookami",
|
||||||
"HeaderAuthentication": "Uwierzytelnianie",
|
"HeaderAuthentication": "Uwierzytelnianie",
|
||||||
"HeaderBackups": "Kopie zapasowe",
|
"HeaderBackups": "Kopie zapasowe",
|
||||||
|
"HeaderBulkChapterModal": "Dodaj wiele rozdziałów",
|
||||||
"HeaderChangePassword": "Zmień hasło",
|
"HeaderChangePassword": "Zmień hasło",
|
||||||
"HeaderChapters": "Rozdziały",
|
"HeaderChapters": "Rozdziały",
|
||||||
"HeaderChooseAFolder": "Wybierz folder",
|
"HeaderChooseAFolder": "Wybierz folder",
|
||||||
|
|
@ -199,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Funkcje eksperymentalne",
|
"HeaderSettingsExperimental": "Funkcje eksperymentalne",
|
||||||
"HeaderSettingsGeneral": "Ogólne",
|
"HeaderSettingsGeneral": "Ogólne",
|
||||||
"HeaderSettingsScanner": "Skanowanie",
|
"HeaderSettingsScanner": "Skanowanie",
|
||||||
|
"HeaderSettingsSecurity": "Bezpieczeństwo",
|
||||||
"HeaderSettingsWebClient": "Klient webowy",
|
"HeaderSettingsWebClient": "Klient webowy",
|
||||||
"HeaderSleepTimer": "Wyłącznik czasowy",
|
"HeaderSleepTimer": "Wyłącznik czasowy",
|
||||||
"HeaderStatsLargestItems": "Największe pozycje",
|
"HeaderStatsLargestItems": "Największe pozycje",
|
||||||
|
|
@ -231,8 +233,8 @@
|
||||||
"LabelAddToCollectionBatch": "Dodaj {0} książki do kolekcji",
|
"LabelAddToCollectionBatch": "Dodaj {0} książki do kolekcji",
|
||||||
"LabelAddToPlaylist": "Dodaj do playlisty",
|
"LabelAddToPlaylist": "Dodaj do playlisty",
|
||||||
"LabelAddToPlaylistBatch": "Dodaj {0} pozycji do playlisty",
|
"LabelAddToPlaylistBatch": "Dodaj {0} pozycji do playlisty",
|
||||||
"LabelAddedAt": "Dodano",
|
"LabelAddedAt": "Dodano w",
|
||||||
"LabelAddedDate": "Dodano {0}",
|
"LabelAddedDate": "Dodano",
|
||||||
"LabelAdminUsersOnly": "Tylko użytkownicy administracyjni",
|
"LabelAdminUsersOnly": "Tylko użytkownicy administracyjni",
|
||||||
"LabelAll": "Wszystkie",
|
"LabelAll": "Wszystkie",
|
||||||
"LabelAllEpisodesDownloaded": "Wszystkie odcinki pobrane",
|
"LabelAllEpisodesDownloaded": "Wszystkie odcinki pobrane",
|
||||||
|
|
@ -242,6 +244,8 @@
|
||||||
"LabelAlreadyInYourLibrary": "Już istnieje w twojej bibliotece",
|
"LabelAlreadyInYourLibrary": "Już istnieje w twojej bibliotece",
|
||||||
"LabelApiKeyCreated": "Klucz API \"{0}\" został pomyślnie utworzony.",
|
"LabelApiKeyCreated": "Klucz API \"{0}\" został pomyślnie utworzony.",
|
||||||
"LabelApiKeyCreatedDescription": "Pamiętaj o skopiowaniu klucza API, ponieważ nie będziesz już mógł go zobaczyć.",
|
"LabelApiKeyCreatedDescription": "Pamiętaj o skopiowaniu klucza API, ponieważ nie będziesz już mógł go zobaczyć.",
|
||||||
|
"LabelApiKeyUser": "Wykonaj w imieniu innego użytkownika",
|
||||||
|
"LabelApiKeyUserDescription": "Ten klucz API będzie miał te same uprawnienia co użytkownik, w którego imieniu ma być używany. Wpisy w logach będą identyczne z tymi, wywołanymi przez samego użytkownika.",
|
||||||
"LabelApiToken": "API Token",
|
"LabelApiToken": "API Token",
|
||||||
"LabelAppend": "Dołącz",
|
"LabelAppend": "Dołącz",
|
||||||
"LabelAudioBitrate": "Audio Bitrate (np. 128k)",
|
"LabelAudioBitrate": "Audio Bitrate (np. 128k)",
|
||||||
|
|
@ -291,6 +295,7 @@
|
||||||
"LabelContinueListening": "Kontynuuj słuchanie",
|
"LabelContinueListening": "Kontynuuj słuchanie",
|
||||||
"LabelContinueReading": "Kontynuuj czytanie",
|
"LabelContinueReading": "Kontynuuj czytanie",
|
||||||
"LabelContinueSeries": "Kontynuuj serię",
|
"LabelContinueSeries": "Kontynuuj serię",
|
||||||
|
"LabelCorsAllowed": "Dozwolone źródła CORS",
|
||||||
"LabelCover": "Okładka",
|
"LabelCover": "Okładka",
|
||||||
"LabelCoverImageURL": "URL okładki",
|
"LabelCoverImageURL": "URL okładki",
|
||||||
"LabelCoverProvider": "Dostawca okładki",
|
"LabelCoverProvider": "Dostawca okładki",
|
||||||
|
|
@ -304,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Usuń z systemu plików (odznacz, aby usunąć tylko z bazy danych)",
|
"LabelDeleteFromFileSystemCheckbox": "Usuń z systemu plików (odznacz, aby usunąć tylko z bazy danych)",
|
||||||
"LabelDescription": "Opis",
|
"LabelDescription": "Opis",
|
||||||
"LabelDeselectAll": "Odznacz wszystko",
|
"LabelDeselectAll": "Odznacz wszystko",
|
||||||
|
"LabelDetectedPattern": "Wykryty schemat:",
|
||||||
"LabelDevice": "Urządzenie",
|
"LabelDevice": "Urządzenie",
|
||||||
"LabelDeviceInfo": "Informacja o urządzeniu",
|
"LabelDeviceInfo": "Informacja o urządzeniu",
|
||||||
"LabelDeviceIsAvailableTo": "Urządzenie jest dostępne do...",
|
"LabelDeviceIsAvailableTo": "Urządzenie jest dostępne do...",
|
||||||
|
|
@ -353,9 +359,11 @@
|
||||||
"LabelExample": "Przykład",
|
"LabelExample": "Przykład",
|
||||||
"LabelExpandSeries": "Rozwiń serie",
|
"LabelExpandSeries": "Rozwiń serie",
|
||||||
"LabelExpandSubSeries": "Rozwiń podserie",
|
"LabelExpandSubSeries": "Rozwiń podserie",
|
||||||
|
"LabelExpired": "Przeterminowane",
|
||||||
|
"LabelExpiresAt": "Wygasa w",
|
||||||
"LabelExpiresInSeconds": "Wygasa za (sekund)",
|
"LabelExpiresInSeconds": "Wygasa za (sekund)",
|
||||||
"LabelExpiresNever": "Nigdy",
|
"LabelExpiresNever": "Nigdy",
|
||||||
"LabelExplicit": "Nieprzyzwoite",
|
"LabelExplicit": "18+",
|
||||||
"LabelExplicitChecked": "Nieprzyzwoite (sprawdzone)",
|
"LabelExplicitChecked": "Nieprzyzwoite (sprawdzone)",
|
||||||
"LabelExplicitUnchecked": "Przyzwoite (niesprawdzone)",
|
"LabelExplicitUnchecked": "Przyzwoite (niesprawdzone)",
|
||||||
"LabelExportOPML": "Wyeksportuj OPML",
|
"LabelExportOPML": "Wyeksportuj OPML",
|
||||||
|
|
@ -370,11 +378,12 @@
|
||||||
"LabelFilterByUser": "Filtruj według danego użytkownika",
|
"LabelFilterByUser": "Filtruj według danego użytkownika",
|
||||||
"LabelFindEpisodes": "Znajdź odcinki",
|
"LabelFindEpisodes": "Znajdź odcinki",
|
||||||
"LabelFinished": "Zakończone",
|
"LabelFinished": "Zakończone",
|
||||||
|
"LabelFinishedDate": "Ukończone {0}",
|
||||||
"LabelFolder": "Katalog",
|
"LabelFolder": "Katalog",
|
||||||
"LabelFolders": "Foldery",
|
"LabelFolders": "Foldery",
|
||||||
"LabelFontBold": "Pogrubiony",
|
"LabelFontBold": "Pogrubiony",
|
||||||
"LabelFontBoldness": "Grubość czcionki",
|
"LabelFontBoldness": "Grubość czcionki",
|
||||||
"LabelFontFamily": "Rodzina czcionek",
|
"LabelFontFamily": "Krój pisma",
|
||||||
"LabelFontItalic": "Kursywa",
|
"LabelFontItalic": "Kursywa",
|
||||||
"LabelFontScale": "Rozmiar czcionki",
|
"LabelFontScale": "Rozmiar czcionki",
|
||||||
"LabelFontStrikethrough": "Przekreślony",
|
"LabelFontStrikethrough": "Przekreślony",
|
||||||
|
|
@ -392,7 +401,7 @@
|
||||||
"LabelHours": "Godziny",
|
"LabelHours": "Godziny",
|
||||||
"LabelIcon": "Ikona",
|
"LabelIcon": "Ikona",
|
||||||
"LabelImageURLFromTheWeb": "Link do obrazu w sieci",
|
"LabelImageURLFromTheWeb": "Link do obrazu w sieci",
|
||||||
"LabelInProgress": "W trakcie",
|
"LabelInProgress": "W toku",
|
||||||
"LabelIncludeInTracklist": "Dołącz do listy odtwarzania",
|
"LabelIncludeInTracklist": "Dołącz do listy odtwarzania",
|
||||||
"LabelIncomplete": "Nieukończone",
|
"LabelIncomplete": "Nieukończone",
|
||||||
"LabelInterval": "Interwał",
|
"LabelInterval": "Interwał",
|
||||||
|
|
@ -427,7 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Brak {0}",
|
"LabelLibraryFilterSublistEmpty": "Brak {0}",
|
||||||
"LabelLibraryItem": "Element biblioteki",
|
"LabelLibraryItem": "Element biblioteki",
|
||||||
"LabelLibraryName": "Nazwa biblioteki",
|
"LabelLibraryName": "Nazwa biblioteki",
|
||||||
"LabelLibrarySortByProgress": "Postęp zaktualizowany",
|
"LabelLibrarySortByProgress": "Postęp: Ostatnio zaktualizowane",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Postęp: Ukończone",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Postęp: Rozpoczęte",
|
||||||
"LabelLimit": "Limit",
|
"LabelLimit": "Limit",
|
||||||
"LabelLineSpacing": "Odstęp między wierszami",
|
"LabelLineSpacing": "Odstęp między wierszami",
|
||||||
"LabelListenAgain": "Słuchaj ponownie",
|
"LabelListenAgain": "Słuchaj ponownie",
|
||||||
|
|
@ -436,6 +447,7 @@
|
||||||
"LabelLogLevelWarn": "Ostrzeżenie",
|
"LabelLogLevelWarn": "Ostrzeżenie",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Szukaj nowych odcinków po dacie",
|
"LabelLookForNewEpisodesAfterDate": "Szukaj nowych odcinków po dacie",
|
||||||
"LabelLowestPriority": "Najniższy priorytet",
|
"LabelLowestPriority": "Najniższy priorytet",
|
||||||
|
"LabelMatchConfidence": "Zaufanie",
|
||||||
"LabelMatchExistingUsersBy": "Dopasuje istniejących użytkowników poprzez",
|
"LabelMatchExistingUsersBy": "Dopasuje istniejących użytkowników poprzez",
|
||||||
"LabelMatchExistingUsersByDescription": "Służy do łączenia istniejących użytkowników. Po połączeniu użytkownicy zostaną dopasowani za pomocą unikalnego identyfikatora od dostawcy SSO",
|
"LabelMatchExistingUsersByDescription": "Służy do łączenia istniejących użytkowników. Po połączeniu użytkownicy zostaną dopasowani za pomocą unikalnego identyfikatora od dostawcy SSO",
|
||||||
"LabelMaxEpisodesToDownload": "Maksymalna liczba odcinków do pobrania. Użyj 0, aby wyłączyć ograniczenie.",
|
"LabelMaxEpisodesToDownload": "Maksymalna liczba odcinków do pobrania. Użyj 0, aby wyłączyć ograniczenie.",
|
||||||
|
|
@ -465,6 +477,7 @@
|
||||||
"LabelNewestAuthors": "Najnowsi autorzy",
|
"LabelNewestAuthors": "Najnowsi autorzy",
|
||||||
"LabelNewestEpisodes": "Najnowsze odcinki",
|
"LabelNewestEpisodes": "Najnowsze odcinki",
|
||||||
"LabelNextBackupDate": "Data kolejnej kopii zapasowej",
|
"LabelNextBackupDate": "Data kolejnej kopii zapasowej",
|
||||||
|
"LabelNextChapters": "Następny odcinek:",
|
||||||
"LabelNextScheduledRun": "Następne uruchomienie",
|
"LabelNextScheduledRun": "Następne uruchomienie",
|
||||||
"LabelNoApiKeys": "Brak kluczy API",
|
"LabelNoApiKeys": "Brak kluczy API",
|
||||||
"LabelNoCustomMetadataProviders": "Brak niestandardowych dostawców metadanych",
|
"LabelNoCustomMetadataProviders": "Brak niestandardowych dostawców metadanych",
|
||||||
|
|
@ -482,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Maksymalny rozmiar kolejki dla powiadomień",
|
"LabelNotificationsMaxQueueSize": "Maksymalny rozmiar kolejki dla powiadomień",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Zdarzenia są ograniczone do 1 na sekundę. Zdarzenia będą ignorowane jeśli kolejka ma maksymalny rozmiar. Zapobiega to spamowaniu powiadomieniami.",
|
"LabelNotificationsMaxQueueSizeHelp": "Zdarzenia są ograniczone do 1 na sekundę. Zdarzenia będą ignorowane jeśli kolejka ma maksymalny rozmiar. Zapobiega to spamowaniu powiadomieniami.",
|
||||||
"LabelNumberOfBooks": "Liczba książek",
|
"LabelNumberOfBooks": "Liczba książek",
|
||||||
|
"LabelNumberOfChapters": "Liczba rozdziałów:",
|
||||||
"LabelNumberOfEpisodes": "# Odcinków",
|
"LabelNumberOfEpisodes": "# Odcinków",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Nazwa deklaracji OpenID zawierającej zaawansowane uprawnienia do działań użytkownika w aplikacji, które będą miały zastosowanie do ról innych niż administracyjne (<b>jeśli skonfigurowano</b>). Jeśli deklaracja nie zostanie uwzględniona w odpowiedzi, dostęp do ABS zostanie zablokowany. Brak jednej opcji zostanie uznany za <code>fałsz</code>. Upewnij się, że deklaracja dostawcy tożsamości jest zgodna z oczekiwaną strukturą:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Nazwa deklaracji OpenID zawierającej zaawansowane uprawnienia do działań użytkownika w aplikacji, które będą miały zastosowanie do ról innych niż administracyjne (<b>jeśli skonfigurowano</b>). Jeśli deklaracja nie zostanie uwzględniona w odpowiedzi, dostęp do ABS zostanie zablokowany. Brak jednej opcji zostanie uznany za <code>fałsz</code>. Upewnij się, że deklaracja dostawcy tożsamości jest zgodna z oczekiwaną strukturą:",
|
||||||
"LabelOpenIDClaims": "Pozostaw poniższe opcje puste, aby wyłączyć zaawansowane przypisywanie grup i uprawnień. Automatycznie zostanie przypisana grupa „Użytkownik”.",
|
"LabelOpenIDClaims": "Pozostaw poniższe opcje puste, aby wyłączyć zaawansowane przypisywanie grup i uprawnień. Automatycznie zostanie przypisana grupa „Użytkownik”.",
|
||||||
|
|
@ -559,9 +573,11 @@
|
||||||
"LabelSelectUsers": "Wybór użytkowników",
|
"LabelSelectUsers": "Wybór użytkowników",
|
||||||
"LabelSendEbookToDevice": "Wyślij ebook do...",
|
"LabelSendEbookToDevice": "Wyślij ebook do...",
|
||||||
"LabelSequence": "Kolejność",
|
"LabelSequence": "Kolejność",
|
||||||
|
"LabelSerial": "Seria",
|
||||||
"LabelSeries": "Serie",
|
"LabelSeries": "Serie",
|
||||||
"LabelSeriesName": "Nazwy serii",
|
"LabelSeriesName": "Nazwy serii",
|
||||||
"LabelSeriesProgress": "Postęp w serii",
|
"LabelSeriesProgress": "Postęp w serii",
|
||||||
|
"LabelServerLogLevel": "Poziom logowania servera",
|
||||||
"LabelServerYearReview": "Podsumowanie serwera w roku ({0})",
|
"LabelServerYearReview": "Podsumowanie serwera w roku ({0})",
|
||||||
"LabelSetEbookAsPrimary": "Ustaw jako pierwszy",
|
"LabelSetEbookAsPrimary": "Ustaw jako pierwszy",
|
||||||
"LabelSetEbookAsSupplementary": "Ustaw jako dodatkowy",
|
"LabelSetEbookAsSupplementary": "Ustaw jako dodatkowy",
|
||||||
|
|
@ -571,8 +587,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Widok półki z książkami",
|
"LabelSettingsBookshelfViewHelp": "Widok półki z książkami",
|
||||||
"LabelSettingsChromecastSupport": "Wsparcie Chromecast",
|
"LabelSettingsChromecastSupport": "Wsparcie Chromecast",
|
||||||
"LabelSettingsDateFormat": "Format daty",
|
"LabelSettingsDateFormat": "Format daty",
|
||||||
"LabelSettingsEnableWatcher": "Automatyczne skanowanie bibliotek w poszukiwaniu zmian",
|
"LabelSettingsEnableWatcher": "Automatyczne monitorowanie bibliotek w poszukiwaniu zmian",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Automatyczne skanowanie biblioteki w poszukiwaniu zmian",
|
"LabelSettingsEnableWatcherForLibrary": "Automatyczne monitorowanie biblioteki w poszukiwaniu zmian",
|
||||||
"LabelSettingsEnableWatcherHelp": "Włącza automatyczne dodawanie/aktualizację pozycji gdy wykryte zostaną zmiany w plikach. Wymaga restartu serwera",
|
"LabelSettingsEnableWatcherHelp": "Włącza automatyczne dodawanie/aktualizację pozycji gdy wykryte zostaną zmiany w plikach. Wymaga restartu serwera",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Zezwalanie na skrypty w plikach epub",
|
"LabelSettingsEpubsAllowScriptedContent": "Zezwalanie na skrypty w plikach epub",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Zezwala plikom epub na wykonywanie skryptów. Zaleca się mieć to ustawienie wyłączone, chyba że ma się zaufanie do źródła plików epub.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Zezwala plikom epub na wykonywanie skryptów. Zaleca się mieć to ustawienie wyłączone, chyba że ma się zaufanie do źródła plików epub.",
|
||||||
|
|
@ -605,6 +621,7 @@
|
||||||
"LabelSettingsStoreMetadataWithItemHelp": "Domyślnie metadane są przechowywane w folderze /metadata/items, włączenie tej opcji spowoduje, że okładka będzie przechowywana w folderze ksiązki. Tylko jedna okładka o nazwie pliku \"cover\" będzie przechowywana",
|
"LabelSettingsStoreMetadataWithItemHelp": "Domyślnie metadane są przechowywane w folderze /metadata/items, włączenie tej opcji spowoduje, że okładka będzie przechowywana w folderze ksiązki. Tylko jedna okładka o nazwie pliku \"cover\" będzie przechowywana",
|
||||||
"LabelSettingsTimeFormat": "Format czasu",
|
"LabelSettingsTimeFormat": "Format czasu",
|
||||||
"LabelShare": "Udostępnij",
|
"LabelShare": "Udostępnij",
|
||||||
|
"LabelShareDownloadableHelp": "Użytkownicy mogą przy pomocy linka ściągnąć archiwum ZIP pozycji biblioteki",
|
||||||
"LabelShareOpen": "Otwórz udział",
|
"LabelShareOpen": "Otwórz udział",
|
||||||
"LabelShareURL": "Link do udziału",
|
"LabelShareURL": "Link do udziału",
|
||||||
"LabelShowAll": "Pokaż wszystko",
|
"LabelShowAll": "Pokaż wszystko",
|
||||||
|
|
@ -612,6 +629,7 @@
|
||||||
"LabelShowSubtitles": "Pokaż Napisy",
|
"LabelShowSubtitles": "Pokaż Napisy",
|
||||||
"LabelSize": "Rozmiar",
|
"LabelSize": "Rozmiar",
|
||||||
"LabelSleepTimer": "Wyłącznik czasowy",
|
"LabelSleepTimer": "Wyłącznik czasowy",
|
||||||
|
"LabelSlug": "slug (części URL która identyfikuje konkretny zasób)",
|
||||||
"LabelSortAscending": "Rosnąco",
|
"LabelSortAscending": "Rosnąco",
|
||||||
"LabelSortDescending": "Malejąco",
|
"LabelSortDescending": "Malejąco",
|
||||||
"LabelSortPubDate": "Sortuj według daty publikacji",
|
"LabelSortPubDate": "Sortuj według daty publikacji",
|
||||||
|
|
@ -619,6 +637,7 @@
|
||||||
"LabelStartTime": "Czas rozpoczęcia",
|
"LabelStartTime": "Czas rozpoczęcia",
|
||||||
"LabelStarted": "Rozpoczęty",
|
"LabelStarted": "Rozpoczęty",
|
||||||
"LabelStartedAt": "Rozpoczęto",
|
"LabelStartedAt": "Rozpoczęto",
|
||||||
|
"LabelStartedDate": "Rozpoczęto {0}",
|
||||||
"LabelStatsAudioTracks": "Ścieżki audio",
|
"LabelStatsAudioTracks": "Ścieżki audio",
|
||||||
"LabelStatsAuthors": "Autorzy",
|
"LabelStatsAuthors": "Autorzy",
|
||||||
"LabelStatsBestDay": "Najlepszy dzień",
|
"LabelStatsBestDay": "Najlepszy dzień",
|
||||||
|
|
@ -641,11 +660,15 @@
|
||||||
"LabelTagsAccessibleToUser": "Tagi dostępne dla użytkownika",
|
"LabelTagsAccessibleToUser": "Tagi dostępne dla użytkownika",
|
||||||
"LabelTagsNotAccessibleToUser": "Znaczniki niedostępne dla użytkownika",
|
"LabelTagsNotAccessibleToUser": "Znaczniki niedostępne dla użytkownika",
|
||||||
"LabelTasks": "Uruchomione zadania",
|
"LabelTasks": "Uruchomione zadania",
|
||||||
|
"LabelTextEditorBulletedList": "Lista punktowana",
|
||||||
"LabelTextEditorLink": "Link",
|
"LabelTextEditorLink": "Link",
|
||||||
"LabelTextEditorNumberedList": "Lista numerowana",
|
"LabelTextEditorNumberedList": "Lista numerowana",
|
||||||
"LabelTextEditorUnlink": "Usuń link",
|
"LabelTextEditorUnlink": "Usuń link",
|
||||||
|
"LabelTheme": "Kompozycja",
|
||||||
"LabelThemeDark": "Ciemny",
|
"LabelThemeDark": "Ciemny",
|
||||||
"LabelThemeLight": "Jasny",
|
"LabelThemeLight": "Jasny",
|
||||||
|
"LabelThemeSepia": "Sepia",
|
||||||
|
"LabelTimeBase": "Podstawa czasu",
|
||||||
"LabelTimeDurationXHours": "{0} godzin",
|
"LabelTimeDurationXHours": "{0} godzin",
|
||||||
"LabelTimeDurationXMinutes": "{0} minuty",
|
"LabelTimeDurationXMinutes": "{0} minuty",
|
||||||
"LabelTimeDurationXSeconds": "{0} sekundy",
|
"LabelTimeDurationXSeconds": "{0} sekundy",
|
||||||
|
|
@ -668,7 +691,12 @@
|
||||||
"LabelTrackFromFilename": "Ścieżka z nazwy pliku",
|
"LabelTrackFromFilename": "Ścieżka z nazwy pliku",
|
||||||
"LabelTrackFromMetadata": "Ścieżka z metadanych",
|
"LabelTrackFromMetadata": "Ścieżka z metadanych",
|
||||||
"LabelTracks": "Ścieżki",
|
"LabelTracks": "Ścieżki",
|
||||||
|
"LabelTracksMultiTrack": "Wielościeżkowy",
|
||||||
|
"LabelTracksNone": "Brak ścieżek",
|
||||||
|
"LabelTracksSingleTrack": "Pojedyncza ścieżka",
|
||||||
|
"LabelTrailer": "Zwiastun",
|
||||||
"LabelType": "Typ",
|
"LabelType": "Typ",
|
||||||
|
"LabelUnabridged": "Pełna wersja",
|
||||||
"LabelUndo": "Wycofaj",
|
"LabelUndo": "Wycofaj",
|
||||||
"LabelUnknown": "Nieznany",
|
"LabelUnknown": "Nieznany",
|
||||||
"LabelUnknownPublishDate": "Nieznana data publikacji",
|
"LabelUnknownPublishDate": "Nieznana data publikacji",
|
||||||
|
|
@ -681,8 +709,10 @@
|
||||||
"LabelUploaderDragAndDropFilesOnly": "Przeciągnij i upuść pliki",
|
"LabelUploaderDragAndDropFilesOnly": "Przeciągnij i upuść pliki",
|
||||||
"LabelUploaderDropFiles": "Puść pliki",
|
"LabelUploaderDropFiles": "Puść pliki",
|
||||||
"LabelUploaderItemFetchMetadataHelp": "Automatycznie pobierz tytuł, autora i serie",
|
"LabelUploaderItemFetchMetadataHelp": "Automatycznie pobierz tytuł, autora i serie",
|
||||||
|
"LabelUseAdvancedOptions": "Opcje zaawansowane",
|
||||||
"LabelUseChapterTrack": "Użyj ścieżki rozdziału",
|
"LabelUseChapterTrack": "Użyj ścieżki rozdziału",
|
||||||
"LabelUseFullTrack": "Użycie ścieżki rozdziału",
|
"LabelUseFullTrack": "Użycie ścieżki rozdziału",
|
||||||
|
"LabelUseZeroForUnlimited": "Użyj 0, aby wyłączyć ograniczenia",
|
||||||
"LabelUser": "Użytkownik",
|
"LabelUser": "Użytkownik",
|
||||||
"LabelUsername": "Nazwa użytkownika",
|
"LabelUsername": "Nazwa użytkownika",
|
||||||
"LabelValue": "Wartość",
|
"LabelValue": "Wartość",
|
||||||
|
|
@ -692,6 +722,7 @@
|
||||||
"LabelViewPlayerSettings": "Zobacz ustawienia odtwarzacza",
|
"LabelViewPlayerSettings": "Zobacz ustawienia odtwarzacza",
|
||||||
"LabelViewQueue": "Wyświetlaj kolejkę odtwarzania",
|
"LabelViewQueue": "Wyświetlaj kolejkę odtwarzania",
|
||||||
"LabelVolume": "Głośność",
|
"LabelVolume": "Głośność",
|
||||||
|
"LabelWebRedirectURLsDescription": "Zezwól na te adresy URL w swoim dostawcy OAuth, aby umożliwić przekierowanie z powrotem do aplikacji internetowej po zalogowaniu:",
|
||||||
"LabelWeekdaysToRun": "Dni tygodnia",
|
"LabelWeekdaysToRun": "Dni tygodnia",
|
||||||
"LabelXBooks": "{0} książek",
|
"LabelXBooks": "{0} książek",
|
||||||
"LabelXItems": "{0} elementów",
|
"LabelXItems": "{0} elementów",
|
||||||
|
|
@ -701,14 +732,18 @@
|
||||||
"LabelYourBookmarks": "Twoje zakładki",
|
"LabelYourBookmarks": "Twoje zakładki",
|
||||||
"LabelYourPlaylists": "Twoje playlisty",
|
"LabelYourPlaylists": "Twoje playlisty",
|
||||||
"LabelYourProgress": "Twój postęp",
|
"LabelYourProgress": "Twój postęp",
|
||||||
|
"MessageAddToPlayerQueue": "Dodaj do kolejki odtwarzania",
|
||||||
"MessageAppriseDescription": "Aby użyć tej funkcji, konieczne jest posiadanie instancji <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> albo innego rozwiązania, które obsługuje schemat zapytań Apprise. <br />URL do interfejsu API powinno być całkowitą ścieżką, np., jeśli Twoje API do powiadomień jest dostępne pod adresem <code>http://192.168.1.1:8337</code> to wpisany tutaj URL powinien mieć postać: <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Aby użyć tej funkcji, konieczne jest posiadanie instancji <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> albo innego rozwiązania, które obsługuje schemat zapytań Apprise. <br />URL do interfejsu API powinno być całkowitą ścieżką, np., jeśli Twoje API do powiadomień jest dostępne pod adresem <code>http://192.168.1.1:8337</code> to wpisany tutaj URL powinien mieć postać: <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
|
"MessageAsinCheck": "Upewnij się, że używasz ASIN z poprawnego regionu Audible, nie Amazona.",
|
||||||
"MessageAuthenticationLegacyTokenWarning": "Starsze tokeny API zostaną w przyszłości usunięte. Zamiast nich należy używać <a href=\"/config/api-keys\">kluczy API</a>.",
|
"MessageAuthenticationLegacyTokenWarning": "Starsze tokeny API zostaną w przyszłości usunięte. Zamiast nich należy używać <a href=\"/config/api-keys\">kluczy API</a>.",
|
||||||
|
"MessageAuthenticationOIDCChangesRestart": "Zrestartuj serwer aby zastosować zmiany w OIDC.",
|
||||||
"MessageAuthenticationSecurityMessage": "Uwierzytelnianie zostało ulepszone ze względów bezpieczeństwa. Wszyscy użytkownicy muszą się ponownie zalogować.",
|
"MessageAuthenticationSecurityMessage": "Uwierzytelnianie zostało ulepszone ze względów bezpieczeństwa. Wszyscy użytkownicy muszą się ponownie zalogować.",
|
||||||
"MessageBackupsDescription": "Kopie zapasowe obejmują użytkowników, postępy użytkowników, szczegóły pozycji biblioteki, ustawienia serwera i obrazy przechowywane w <code>/metadata/items</code> & <code>/metadata/authors</code>. Kopie zapasowe nie obejmują żadnych plików przechowywanych w folderach biblioteki.",
|
"MessageBackupsDescription": "Kopie zapasowe obejmują użytkowników, postępy użytkowników, szczegóły pozycji biblioteki, ustawienia serwera i obrazy przechowywane w <code>/metadata/items</code> & <code>/metadata/authors</code>. Kopie zapasowe nie obejmują żadnych plików przechowywanych w folderach biblioteki.",
|
||||||
"MessageBackupsLocationEditNote": "Uwaga: Zmiana lokalizacji kopii zapasowej nie przenosi ani nie modyfikuje istniejących kopii zapasowych",
|
"MessageBackupsLocationEditNote": "Uwaga: Zmiana lokalizacji kopii zapasowej nie przenosi ani nie modyfikuje istniejących kopii zapasowych",
|
||||||
"MessageBackupsLocationNoEditNote": "Uwaga: Lokalizacja kopii zapasowej jest ustawiona poprzez zmienną środowiskową i nie może być tutaj zmieniona.",
|
"MessageBackupsLocationNoEditNote": "Uwaga: Lokalizacja kopii zapasowej jest ustawiona poprzez zmienną środowiskową i nie może być tutaj zmieniona.",
|
||||||
"MessageBackupsLocationPathEmpty": "Ścieżka do kopii zapasowej nie może być pusta",
|
"MessageBackupsLocationPathEmpty": "Ścieżka do kopii zapasowej nie może być pusta",
|
||||||
"MessageBatchEditPopulateMapDetailsAllHelp": "Wypełnij włączone pola danymi ze wszystkich elementów. Pola z wieloma wartościami zostaną scalone.",
|
"MessageBatchEditPopulateMapDetailsAllHelp": "Wypełnij włączone pola danymi ze wszystkich elementów. Pola z wieloma wartościami zostaną scalone.",
|
||||||
|
"MessageBatchEditPopulateMapDetailsItemHelp": "Wypełnij pola szczegółów mapy włączonej danymi z tego elementu",
|
||||||
"MessageBatchQuickMatchDescription": "Quick Match będzie próbował dodać brakujące okładki i metadane dla wybranych elementów. Włącz poniższe opcje, aby umożliwić Quick Match nadpisanie istniejących okładek i/lub metadanych.",
|
"MessageBatchQuickMatchDescription": "Quick Match będzie próbował dodać brakujące okładki i metadane dla wybranych elementów. Włącz poniższe opcje, aby umożliwić Quick Match nadpisanie istniejących okładek i/lub metadanych.",
|
||||||
"MessageBookshelfNoCollections": "Nie posiadasz jeszcze żadnych kolekcji",
|
"MessageBookshelfNoCollections": "Nie posiadasz jeszcze żadnych kolekcji",
|
||||||
"MessageBookshelfNoCollectionsHelp": "Kolekcje są publiczne. Wszyscy użytkownicy mający dostęp do biblioteki mogą je zobaczyć.",
|
"MessageBookshelfNoCollectionsHelp": "Kolekcje są publiczne. Wszyscy użytkownicy mający dostęp do biblioteki mogą je zobaczyć.",
|
||||||
|
|
@ -716,6 +751,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Nie znaleziono żadnych pozycji przy aktualnym filtrowaniu \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Nie znaleziono żadnych pozycji przy aktualnym filtrowaniu \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Brak wyników zapytania",
|
"MessageBookshelfNoResultsForQuery": "Brak wyników zapytania",
|
||||||
"MessageBookshelfNoSeries": "Nie masz jeszcze żadnych serii",
|
"MessageBookshelfNoSeries": "Nie masz jeszcze żadnych serii",
|
||||||
|
"MessageBulkChapterPattern": "Ile rozdziałów chcesz dodać przy pomocy tego wzorca numeracji?",
|
||||||
"MessageChapterEndIsAfter": "Koniec rozdziału następuje po zakończeniu audiobooka",
|
"MessageChapterEndIsAfter": "Koniec rozdziału następuje po zakończeniu audiobooka",
|
||||||
"MessageChapterErrorFirstNotZero": "Pierwszy rozdział musi rozpoczynać się na 0",
|
"MessageChapterErrorFirstNotZero": "Pierwszy rozdział musi rozpoczynać się na 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Nieprawidłowy czas rozpoczęcia, musi być krótszy niż długość audiobooka",
|
"MessageChapterErrorStartGteDuration": "Nieprawidłowy czas rozpoczęcia, musi być krótszy niż długość audiobooka",
|
||||||
|
|
@ -778,6 +814,8 @@
|
||||||
"MessageFeedURLWillBe": "URL kanału: {0}",
|
"MessageFeedURLWillBe": "URL kanału: {0}",
|
||||||
"MessageFetching": "Pobieranie...",
|
"MessageFetching": "Pobieranie...",
|
||||||
"MessageForceReScanDescription": "przeskanuje wszystkie pliki ponownie, jak przy świeżym skanowaniu. Tagi ID3 plików audio, pliki OPF i pliki tekstowe będą skanowane jak nowe.",
|
"MessageForceReScanDescription": "przeskanuje wszystkie pliki ponownie, jak przy świeżym skanowaniu. Tagi ID3 plików audio, pliki OPF i pliki tekstowe będą skanowane jak nowe.",
|
||||||
|
"MessageHeatmapListeningTimeTooltip": "<strong>{0} słucha</strong> na {1}",
|
||||||
|
"MessageHeatmapNoListeningSessions": "Brak sesji słuchania na {0}",
|
||||||
"MessageImportantNotice": "Ważna informacja!",
|
"MessageImportantNotice": "Ważna informacja!",
|
||||||
"MessageInsertChapterBelow": "Wstaw rozdział poniżej",
|
"MessageInsertChapterBelow": "Wstaw rozdział poniżej",
|
||||||
"MessageInvalidAsin": "Nieprawidłowy ASIN",
|
"MessageInvalidAsin": "Nieprawidłowy ASIN",
|
||||||
|
|
@ -848,13 +886,40 @@
|
||||||
"MessageResetChaptersConfirm": "Czy na pewno chcesz zresetować rozdziały i cofnąć wprowadzone zmiany?",
|
"MessageResetChaptersConfirm": "Czy na pewno chcesz zresetować rozdziały i cofnąć wprowadzone zmiany?",
|
||||||
"MessageRestoreBackupConfirm": "Czy na pewno chcesz przywrócić kopię zapasową utworzoną w dniu",
|
"MessageRestoreBackupConfirm": "Czy na pewno chcesz przywrócić kopię zapasową utworzoną w dniu",
|
||||||
"MessageRestoreBackupWarning": "Przywrócenie kopii zapasowej spowoduje nadpisanie bazy danych w folderze /config oraz okładek w folderze /metadata/items & /metadata/authors.<br /><br />Kopie zapasowe nie modyfikują żadnego pliku w folderach z plikami audio. Jeśli włączyłeś ustawienia serwera, aby przechowywać okładki i metadane w folderach biblioteki, to nie są one zapisywane w kopii zapasowej lub nadpisywane<br /><br />Wszyscy klienci korzystający z Twojego serwera będą automatycznie odświeżani.",
|
"MessageRestoreBackupWarning": "Przywrócenie kopii zapasowej spowoduje nadpisanie bazy danych w folderze /config oraz okładek w folderze /metadata/items & /metadata/authors.<br /><br />Kopie zapasowe nie modyfikują żadnego pliku w folderach z plikami audio. Jeśli włączyłeś ustawienia serwera, aby przechowywać okładki i metadane w folderach biblioteki, to nie są one zapisywane w kopii zapasowej lub nadpisywane<br /><br />Wszyscy klienci korzystający z Twojego serwera będą automatycznie odświeżani.",
|
||||||
|
"MessageScheduleLibraryScanNote": "W przypadku większości użytkowników zaleca się pozostawienie tej funkcji wyłączonej i włączenie opcji monitorowania folderów. Monitor folderów automatycznie wykrywa zmiany w folderach biblioteki. Monitor folderów nie działa w przypadku wszystkich systemów plików (np. NFS), dlatego zamiast niego można używać zaplanowanych skanowań biblioteki.",
|
||||||
|
"MessageScheduleRunEveryWeekdayAtTime": "Uruchom w każdy {0} o {1}",
|
||||||
"MessageSearchResultsFor": "Wyniki wyszukiwania dla",
|
"MessageSearchResultsFor": "Wyniki wyszukiwania dla",
|
||||||
"MessageSelected": "{0} wybranych",
|
"MessageSelected": "{0} wybranych",
|
||||||
|
"MessageSeriesSequenceCannotContainSpaces": "Sekwencja serii nie może zawierać spacji",
|
||||||
"MessageServerCouldNotBeReached": "Nie udało się uzyskać połączenia z serwerem",
|
"MessageServerCouldNotBeReached": "Nie udało się uzyskać połączenia z serwerem",
|
||||||
|
"MessageSetChaptersFromTracksDescription": "Ustaw rozdziały, używając każdego pliku audio jako rozdziału, a tytuł rozdziału jako nazwy pliku audio.",
|
||||||
"MessageShareExpirationWillBe": "Czas udostępniania <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Czas udostępniania <strong>{0}</strong>",
|
||||||
"MessageShareExpiresIn": "Wygaśnie za {0}",
|
"MessageShareExpiresIn": "Wygaśnie za {0}",
|
||||||
"MessageShareURLWillBe": "Udostępnione pod linkiem <strong>{0}</strong>",
|
"MessageShareURLWillBe": "Udostępnione pod linkiem <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "Rozpoczęcie odtwarzania \"{0}\" od {1}?",
|
"MessageStartPlaybackAtTime": "Rozpoczęcie odtwarzania \"{0}\" od {1}?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "Plik audio \"{0}\" jest niemodyfikowalny",
|
||||||
|
"MessageTaskCanceledByUser": "Zadanie anulowane przez użytkownika",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "Ściąganie odcinka \"{0}\"",
|
||||||
|
"MessageTaskEmbeddingMetadata": "Wbudowywanie medatanych",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "Wbudowywanie metadanych do audiobooka \"{0}\"",
|
||||||
|
"MessageTaskEncodingM4b": "Kodowanie M4B",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Konwersja audiobooka \"{0}\" do pojedynczego pliku m4b",
|
||||||
|
"MessageTaskFailed": "Niepowodzenie",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "Nieudana próba wykonania kopii zapasowego pliku audio \"{0}\"",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Nie udało się utworzyć katalogu cache",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "Nie udało się wbudować metadanych do pliku \"{0}\"",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "Nie udało się połączyć plików audio",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "Nie udało się przenieść pliku m4b",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "Niepowodzenie zapisania pliku metadanych",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "Pasujące książki w bibliotece \"{0}\"",
|
||||||
|
"MessageTaskNoFilesToScan": "Brak plików do skanowania",
|
||||||
|
"MessageTaskOpmlImport": "Importuj OPML",
|
||||||
|
"MessageTaskOpmlImportDescription": "Tworzenie {0} podcastów z kanałów RSS",
|
||||||
|
"MessageTaskScanItemsAdded": "Dodano {0}",
|
||||||
|
"MessageTaskScanItemsMissing": "Brakuje {0}",
|
||||||
|
"MessageTaskScanItemsUpdated": "Zaktualizowano {0}",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "Brak zmian",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "Brak prawa zapisu do folderu docelowego",
|
||||||
"MessageThinking": "Myślę...",
|
"MessageThinking": "Myślę...",
|
||||||
"MessageUploaderItemFailed": "Nie udało się przesłać",
|
"MessageUploaderItemFailed": "Nie udało się przesłać",
|
||||||
"MessageUploaderItemSuccess": "Przesłanie powiodło się!",
|
"MessageUploaderItemSuccess": "Przesłanie powiodło się!",
|
||||||
|
|
@ -912,6 +977,21 @@
|
||||||
"ToastBookmarkRemoveSuccess": "Zakładka została usunięta",
|
"ToastBookmarkRemoveSuccess": "Zakładka została usunięta",
|
||||||
"ToastCollectionRemoveSuccess": "Kolekcja usunięta",
|
"ToastCollectionRemoveSuccess": "Kolekcja usunięta",
|
||||||
"ToastCollectionUpdateSuccess": "Zaktualizowano kolekcję",
|
"ToastCollectionUpdateSuccess": "Zaktualizowano kolekcję",
|
||||||
|
"ToastCoverSearchFailed": "Nieudane wyszukiwanie okładki",
|
||||||
|
"ToastCoverUpdateFailed": "Nieudana aktualizacja okładki",
|
||||||
|
"ToastDateTimeInvalidOrIncomplete": "Niepoprawna data i czas",
|
||||||
|
"ToastDeleteFileFailed": "Usunięcie pliku nie powiodło się",
|
||||||
|
"ToastDeleteFileSuccess": "Plik został usunięty",
|
||||||
|
"ToastDeviceAddFailed": "Nieudana próba dodania urządzenia",
|
||||||
|
"ToastDeviceNameAlreadyExists": "Czytnik z taką nazwą już istnieje",
|
||||||
|
"ToastDeviceTestEmailFailed": "NIeudana próba wysłania testowego maila",
|
||||||
|
"ToastDeviceTestEmailSuccess": "Testowy email został wysłany",
|
||||||
|
"ToastEmailSettingsUpdateSuccess": "Ustawienia email zaktualizowane",
|
||||||
|
"ToastEpisodeDownloadQueueClearSuccess": "Wyczyszczono kolejkę epizodów do ściągnięcia",
|
||||||
|
"ToastEpisodeUpdateSuccess": "Zaktualizowano {0} odcinków",
|
||||||
|
"ToastInvalidImageUrl": "Nieprawidłowy URL obrazu",
|
||||||
|
"ToastInvalidUrl": "Nieprawidłowy URL",
|
||||||
|
"ToastInvalidUrls": "Jeden lub więcej URL-i są nieprawidłowe",
|
||||||
"ToastItemCoverUpdateSuccess": "Zaktualizowano okładkę",
|
"ToastItemCoverUpdateSuccess": "Zaktualizowano okładkę",
|
||||||
"ToastItemDetailsUpdateSuccess": "Zaktualizowano szczegóły",
|
"ToastItemDetailsUpdateSuccess": "Zaktualizowano szczegóły",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Nie udało się oznaczyć jako ukończone",
|
"ToastItemMarkedAsFinishedFailed": "Nie udało się oznaczyć jako ukończone",
|
||||||
|
|
@ -925,12 +1005,28 @@
|
||||||
"ToastLibraryScanFailedToStart": "Nie udało się rozpocząć skanowania",
|
"ToastLibraryScanFailedToStart": "Nie udało się rozpocząć skanowania",
|
||||||
"ToastLibraryScanStarted": "Rozpoczęto skanowanie biblioteki",
|
"ToastLibraryScanStarted": "Rozpoczęto skanowanie biblioteki",
|
||||||
"ToastLibraryUpdateSuccess": "Zaktualizowano \"{0}\" pozycji",
|
"ToastLibraryUpdateSuccess": "Zaktualizowano \"{0}\" pozycji",
|
||||||
|
"ToastMatchAllAuthorsFailed": "Nie udało się dopasować wszystkich autorów",
|
||||||
|
"ToastMustHaveAtLeastOnePath": "Musi mieć przynajmniej jedną ścieżkę",
|
||||||
|
"ToastNameEmailRequired": "Nazwa i email są wymagane",
|
||||||
|
"ToastNameRequired": "Imię jest wymagane",
|
||||||
|
"ToastNewApiKeyUserError": "Trzeba wybrać użytkownika",
|
||||||
|
"ToastNewEpisodesFound": "Znaleziono {0} nowych odcinków",
|
||||||
|
"ToastNewUserCreatedFailed": "Nie udało się utworzyć konta: \"{0}\"",
|
||||||
|
"ToastNewUserCreatedSuccess": "Utworzono nowe konto",
|
||||||
|
"ToastNewUserLibraryError": "Trzeba wybrać co najmniej jedną bibliotekę",
|
||||||
|
"ToastNewUserPasswordError": "Hasło jest wymagane, jedynie użytkownik \"root\" może posiadać puste hasło",
|
||||||
|
"ToastNewUserTagError": "Trzeba wybrać chociaż jeden tag",
|
||||||
|
"ToastNewUserUsernameError": "Wprowadź nazwę użytkownika",
|
||||||
|
"ToastNoNewEpisodesFound": "Nie znaleziono nowych odcinków",
|
||||||
|
"ToastNoRSSFeed": "Podcast nie posiada RSS Feed",
|
||||||
|
"ToastNotificationFailedMaximum": "Maks. ilość nieudanych prób musi być >= 0",
|
||||||
"ToastPlaylistCreateFailed": "Nie udało się utworzyć playlisty",
|
"ToastPlaylistCreateFailed": "Nie udało się utworzyć playlisty",
|
||||||
"ToastPlaylistCreateSuccess": "Playlista utworzona",
|
"ToastPlaylistCreateSuccess": "Playlista utworzona",
|
||||||
"ToastPlaylistRemoveSuccess": "Playlista usunięta",
|
"ToastPlaylistRemoveSuccess": "Playlista usunięta",
|
||||||
"ToastPlaylistUpdateSuccess": "Playlista zaktualizowana",
|
"ToastPlaylistUpdateSuccess": "Playlista zaktualizowana",
|
||||||
"ToastPodcastCreateFailed": "Nie udało się utworzyć podcastu",
|
"ToastPodcastCreateFailed": "Nie udało się utworzyć podcastu",
|
||||||
"ToastPodcastCreateSuccess": "Podcast został pomyślnie utworzony",
|
"ToastPodcastCreateSuccess": "Podcast został pomyślnie utworzony",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Zaktualizowano odcinki",
|
||||||
"ToastRSSFeedCloseFailed": "Zamknięcie kanału RSS nie powiodło się",
|
"ToastRSSFeedCloseFailed": "Zamknięcie kanału RSS nie powiodło się",
|
||||||
"ToastRSSFeedCloseSuccess": "Zamknięcie kanału RSS powiodło się",
|
"ToastRSSFeedCloseSuccess": "Zamknięcie kanału RSS powiodło się",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Nie udało się usunąć elementu z kolekcji",
|
"ToastRemoveItemFromCollectionFailed": "Nie udało się usunąć elementu z kolekcji",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"ButtonAdd": "Adicionar",
|
"ButtonAdd": "Adicionar",
|
||||||
|
"ButtonAddApiKey": "Adicionar chave de API",
|
||||||
"ButtonAddChapters": "Adicionar Capítulos",
|
"ButtonAddChapters": "Adicionar Capítulos",
|
||||||
"ButtonAddDevice": "Adicionar Dispositivo",
|
"ButtonAddDevice": "Adicionar Dispositivo",
|
||||||
"ButtonAddLibrary": "Adicionar Biblioteca",
|
"ButtonAddLibrary": "Adicionar Biblioteca",
|
||||||
|
|
@ -20,6 +21,7 @@
|
||||||
"ButtonChooseAFolder": "Escolha uma pasta",
|
"ButtonChooseAFolder": "Escolha uma pasta",
|
||||||
"ButtonChooseFiles": "Escolha arquivos",
|
"ButtonChooseFiles": "Escolha arquivos",
|
||||||
"ButtonClearFilter": "Limpar Filtro",
|
"ButtonClearFilter": "Limpar Filtro",
|
||||||
|
"ButtonClose": "Fechar",
|
||||||
"ButtonCloseFeed": "Fechar Feed",
|
"ButtonCloseFeed": "Fechar Feed",
|
||||||
"ButtonCloseSession": "Fechar Sessão Aberta",
|
"ButtonCloseSession": "Fechar Sessão Aberta",
|
||||||
"ButtonCollections": "Coleções",
|
"ButtonCollections": "Coleções",
|
||||||
|
|
@ -52,7 +54,7 @@
|
||||||
"ButtonNevermind": "Cancelar",
|
"ButtonNevermind": "Cancelar",
|
||||||
"ButtonNext": "Próximo",
|
"ButtonNext": "Próximo",
|
||||||
"ButtonNextChapter": "Próximo Capítulo",
|
"ButtonNextChapter": "Próximo Capítulo",
|
||||||
"ButtonNextItemInQueue": "Próximo Item da Fila",
|
"ButtonNextItemInQueue": "Próximo Item na Fila",
|
||||||
"ButtonOk": "Ok",
|
"ButtonOk": "Ok",
|
||||||
"ButtonOpenFeed": "Abrir Feed",
|
"ButtonOpenFeed": "Abrir Feed",
|
||||||
"ButtonOpenManager": "Abrir Gerenciador",
|
"ButtonOpenManager": "Abrir Gerenciador",
|
||||||
|
|
@ -119,10 +121,13 @@
|
||||||
"HeaderAccount": "Conta",
|
"HeaderAccount": "Conta",
|
||||||
"HeaderAddCustomMetadataProvider": "Adicionar Provedor de Metadados Personalizado",
|
"HeaderAddCustomMetadataProvider": "Adicionar Provedor de Metadados Personalizado",
|
||||||
"HeaderAdvanced": "Avançado",
|
"HeaderAdvanced": "Avançado",
|
||||||
|
"HeaderApiKeys": "Chaves de API",
|
||||||
"HeaderAppriseNotificationSettings": "Configuração de notificações Apprise",
|
"HeaderAppriseNotificationSettings": "Configuração de notificações Apprise",
|
||||||
"HeaderAudioTracks": "Trilhas de áudio",
|
"HeaderAudioTracks": "Trilhas de áudio",
|
||||||
"HeaderAudiobookTools": "Ferramentas de Gerenciamento de Arquivos de Audiobooks",
|
"HeaderAudiobookTools": "Ferramentas de Gerenciamento de Arquivos de Audiobooks",
|
||||||
"HeaderAuthentication": "Autenticação",
|
"HeaderAuthentication": "Autenticação",
|
||||||
|
"HeaderBackups": "Backups",
|
||||||
|
"HeaderBulkChapterModal": "Adicionar vários capítulos",
|
||||||
"HeaderChangePassword": "Trocar Senha",
|
"HeaderChangePassword": "Trocar Senha",
|
||||||
"HeaderChapters": "Capítulos",
|
"HeaderChapters": "Capítulos",
|
||||||
"HeaderChooseAFolder": "Escolha uma Pasta",
|
"HeaderChooseAFolder": "Escolha uma Pasta",
|
||||||
|
|
@ -135,10 +140,11 @@
|
||||||
"HeaderDetails": "Detalhes",
|
"HeaderDetails": "Detalhes",
|
||||||
"HeaderDownloadQueue": "Fila de Download",
|
"HeaderDownloadQueue": "Fila de Download",
|
||||||
"HeaderEbookFiles": "Arquivos Ebook",
|
"HeaderEbookFiles": "Arquivos Ebook",
|
||||||
|
"HeaderEmail": "Email",
|
||||||
"HeaderEmailSettings": "Configurações de Email",
|
"HeaderEmailSettings": "Configurações de Email",
|
||||||
"HeaderEpisodes": "Episódios",
|
"HeaderEpisodes": "Episódios",
|
||||||
"HeaderEreaderDevices": "Dispositivos Ereader",
|
"HeaderEreaderDevices": "Dispositivos leitores de ebook",
|
||||||
"HeaderEreaderSettings": "Configurações Ereader",
|
"HeaderEreaderSettings": "Configurações do leitor de ebook",
|
||||||
"HeaderFiles": "Arquivos",
|
"HeaderFiles": "Arquivos",
|
||||||
"HeaderFindChapters": "Localizar Capítulos",
|
"HeaderFindChapters": "Localizar Capítulos",
|
||||||
"HeaderIgnoredFiles": "Arquivos Ignorados",
|
"HeaderIgnoredFiles": "Arquivos Ignorados",
|
||||||
|
|
@ -151,6 +157,8 @@
|
||||||
"HeaderLibraryStats": "Estatísticas da Biblioteca",
|
"HeaderLibraryStats": "Estatísticas da Biblioteca",
|
||||||
"HeaderListeningSessions": "Sessões",
|
"HeaderListeningSessions": "Sessões",
|
||||||
"HeaderListeningStats": "Estatísticas",
|
"HeaderListeningStats": "Estatísticas",
|
||||||
|
"HeaderLogin": "Login",
|
||||||
|
"HeaderLogs": "Logs",
|
||||||
"HeaderManageGenres": "Gerenciar Gêneros",
|
"HeaderManageGenres": "Gerenciar Gêneros",
|
||||||
"HeaderManageTags": "Gerenciar Etiquetas",
|
"HeaderManageTags": "Gerenciar Etiquetas",
|
||||||
"HeaderMapDetails": "Designar Detalhes",
|
"HeaderMapDetails": "Designar Detalhes",
|
||||||
|
|
@ -158,17 +166,23 @@
|
||||||
"HeaderMetadataOrderOfPrecedence": "Ordem de Prioridade dos Metadados",
|
"HeaderMetadataOrderOfPrecedence": "Ordem de Prioridade dos Metadados",
|
||||||
"HeaderMetadataToEmbed": "Metadados a Serem Incluídos",
|
"HeaderMetadataToEmbed": "Metadados a Serem Incluídos",
|
||||||
"HeaderNewAccount": "Nova Conta",
|
"HeaderNewAccount": "Nova Conta",
|
||||||
|
"HeaderNewApiKey": "Nova chave de API",
|
||||||
"HeaderNewLibrary": "Nova Biblioteca",
|
"HeaderNewLibrary": "Nova Biblioteca",
|
||||||
|
"HeaderNotificationCreate": "Criar Notificação",
|
||||||
|
"HeaderNotificationUpdate": "Atualizar Notificação",
|
||||||
"HeaderNotifications": "Notificações",
|
"HeaderNotifications": "Notificações",
|
||||||
"HeaderOpenIDConnectAuthentication": "Autenticação via OpenID Connect",
|
"HeaderOpenIDConnectAuthentication": "Autenticação via OpenID Connect",
|
||||||
|
"HeaderOpenListeningSessions": "Abrir Sessões de Escuta",
|
||||||
"HeaderOpenRSSFeed": "Abrir Feed RSS",
|
"HeaderOpenRSSFeed": "Abrir Feed RSS",
|
||||||
"HeaderOtherFiles": "Outros Arquivos",
|
"HeaderOtherFiles": "Outros Arquivos",
|
||||||
"HeaderPasswordAuthentication": "Autenticação por Senha",
|
"HeaderPasswordAuthentication": "Autenticação por Senha",
|
||||||
"HeaderPermissions": "Permissões",
|
"HeaderPermissions": "Permissões",
|
||||||
"HeaderPlayerQueue": "Fila do reprodutor",
|
"HeaderPlayerQueue": "Fila do reprodutor",
|
||||||
|
"HeaderPlayerSettings": "Configurações do Reprodutor",
|
||||||
"HeaderPlaylist": "Lista de Reprodução",
|
"HeaderPlaylist": "Lista de Reprodução",
|
||||||
"HeaderPlaylistItems": "Itens da lista de reprodução",
|
"HeaderPlaylistItems": "Itens da lista de reprodução",
|
||||||
"HeaderPodcastsToAdd": "Podcasts para Adicionar",
|
"HeaderPodcastsToAdd": "Podcasts para Adicionar",
|
||||||
|
"HeaderPresets": "Valores predefinidos",
|
||||||
"HeaderPreviewCover": "Visualização da Capa",
|
"HeaderPreviewCover": "Visualização da Capa",
|
||||||
"HeaderRSSFeedGeneral": "Detalhes RSS",
|
"HeaderRSSFeedGeneral": "Detalhes RSS",
|
||||||
"HeaderRSSFeedIsOpen": "Feed RSS está Aberto",
|
"HeaderRSSFeedIsOpen": "Feed RSS está Aberto",
|
||||||
|
|
@ -177,6 +191,7 @@
|
||||||
"HeaderRemoveEpisodes": "Remover {0} Episódios",
|
"HeaderRemoveEpisodes": "Remover {0} Episódios",
|
||||||
"HeaderSavedMediaProgress": "Progresso da gravação das mídias",
|
"HeaderSavedMediaProgress": "Progresso da gravação das mídias",
|
||||||
"HeaderSchedule": "Programação",
|
"HeaderSchedule": "Programação",
|
||||||
|
"HeaderScheduleEpisodeDownloads": "Programar Download Automático de Episódios",
|
||||||
"HeaderScheduleLibraryScans": "Programar Verificação Automática da Biblioteca",
|
"HeaderScheduleLibraryScans": "Programar Verificação Automática da Biblioteca",
|
||||||
"HeaderSession": "Sessão",
|
"HeaderSession": "Sessão",
|
||||||
"HeaderSetBackupSchedule": "Definir Programação de Backup",
|
"HeaderSetBackupSchedule": "Definir Programação de Backup",
|
||||||
|
|
@ -185,6 +200,8 @@
|
||||||
"HeaderSettingsExperimental": "Funcionalidades experimentais",
|
"HeaderSettingsExperimental": "Funcionalidades experimentais",
|
||||||
"HeaderSettingsGeneral": "Geral",
|
"HeaderSettingsGeneral": "Geral",
|
||||||
"HeaderSettingsScanner": "Verificador",
|
"HeaderSettingsScanner": "Verificador",
|
||||||
|
"HeaderSettingsSecurity": "Segurança",
|
||||||
|
"HeaderSettingsWebClient": "Cliente Web",
|
||||||
"HeaderSleepTimer": "Timer",
|
"HeaderSleepTimer": "Timer",
|
||||||
"HeaderStatsLargestItems": "Maiores Itens",
|
"HeaderStatsLargestItems": "Maiores Itens",
|
||||||
"HeaderStatsLongestItems": "Itens mais longos (hrs)",
|
"HeaderStatsLongestItems": "Itens mais longos (hrs)",
|
||||||
|
|
@ -195,6 +212,7 @@
|
||||||
"HeaderTableOfContents": "Sumário",
|
"HeaderTableOfContents": "Sumário",
|
||||||
"HeaderTools": "Ferramentas",
|
"HeaderTools": "Ferramentas",
|
||||||
"HeaderUpdateAccount": "Atualizar Conta",
|
"HeaderUpdateAccount": "Atualizar Conta",
|
||||||
|
"HeaderUpdateApiKey": "Atualizar Chave de API",
|
||||||
"HeaderUpdateAuthor": "Atualizar Autor",
|
"HeaderUpdateAuthor": "Atualizar Autor",
|
||||||
"HeaderUpdateDetails": "Atualizar Detalhes",
|
"HeaderUpdateDetails": "Atualizar Detalhes",
|
||||||
"HeaderUpdateLibrary": "Atualizar Biblioteca",
|
"HeaderUpdateLibrary": "Atualizar Biblioteca",
|
||||||
|
|
@ -209,6 +227,7 @@
|
||||||
"LabelAccountTypeAdmin": "Administrador",
|
"LabelAccountTypeAdmin": "Administrador",
|
||||||
"LabelAccountTypeGuest": "Convidado",
|
"LabelAccountTypeGuest": "Convidado",
|
||||||
"LabelAccountTypeUser": "Usuário",
|
"LabelAccountTypeUser": "Usuário",
|
||||||
|
"LabelActivities": "Atividades",
|
||||||
"LabelActivity": "Atividade",
|
"LabelActivity": "Atividade",
|
||||||
"LabelAddToCollection": "Adicionar à Coleção",
|
"LabelAddToCollection": "Adicionar à Coleção",
|
||||||
"LabelAddToCollectionBatch": "Adicionar {0} Livros à Coleção",
|
"LabelAddToCollectionBatch": "Adicionar {0} Livros à Coleção",
|
||||||
|
|
@ -218,11 +237,20 @@
|
||||||
"LabelAddedDate": "Adicionado {0}",
|
"LabelAddedDate": "Adicionado {0}",
|
||||||
"LabelAdminUsersOnly": "Apenas usuários administradores",
|
"LabelAdminUsersOnly": "Apenas usuários administradores",
|
||||||
"LabelAll": "Todos",
|
"LabelAll": "Todos",
|
||||||
|
"LabelAllEpisodesDownloaded": "Todos os episódios baixados",
|
||||||
"LabelAllUsers": "Todos Usuários",
|
"LabelAllUsers": "Todos Usuários",
|
||||||
"LabelAllUsersExcludingGuests": "Todos usuários exceto convidados",
|
"LabelAllUsersExcludingGuests": "Todos usuários exceto convidados",
|
||||||
"LabelAllUsersIncludingGuests": "Todos usuários incluindo convidados",
|
"LabelAllUsersIncludingGuests": "Todos usuários incluindo convidados",
|
||||||
"LabelAlreadyInYourLibrary": "Já na sua biblioteca",
|
"LabelAlreadyInYourLibrary": "Já na sua biblioteca",
|
||||||
|
"LabelApiKeyCreated": "Chave de API \"{0}\" criada com sucesso.",
|
||||||
|
"LabelApiKeyCreatedDescription": "Certifique-se de copiar a chave de API agora pois não será possível vê-la novamente.",
|
||||||
|
"LabelApiKeyUser": "Agir em nome do usuário",
|
||||||
|
"LabelApiKeyUserDescription": "Esta chave de API terá as mesmas permissões que o usuário em nome de quem ela está agindo. Isso aparecerá nos logs como se o usuário estivesse fazendo a solicitação.",
|
||||||
|
"LabelApiToken": "Token de API",
|
||||||
"LabelAppend": "Acrescentar",
|
"LabelAppend": "Acrescentar",
|
||||||
|
"LabelAudioBitrate": "Bitrate de áudio (por exemplo, 128k)",
|
||||||
|
"LabelAudioChannels": "Canais de áudio (1 ou 2)",
|
||||||
|
"LabelAudioCodec": "Codec de áudio",
|
||||||
"LabelAuthor": "Autor",
|
"LabelAuthor": "Autor",
|
||||||
"LabelAuthorFirstLast": "Autor (Nome Sobrenome)",
|
"LabelAuthorFirstLast": "Autor (Nome Sobrenome)",
|
||||||
"LabelAuthorLastFirst": "Autor (Sobrenome, Nome)",
|
"LabelAuthorLastFirst": "Autor (Sobrenome, Nome)",
|
||||||
|
|
@ -235,24 +263,31 @@
|
||||||
"LabelAutoRegister": "Registrar Automaticamente",
|
"LabelAutoRegister": "Registrar Automaticamente",
|
||||||
"LabelAutoRegisterDescription": "Registra automaticamente novos usuários após login",
|
"LabelAutoRegisterDescription": "Registra automaticamente novos usuários após login",
|
||||||
"LabelBackToUser": "Voltar para Usuário",
|
"LabelBackToUser": "Voltar para Usuário",
|
||||||
|
"LabelBackupAudioFiles": "Backup dos Arquivos de Áudio",
|
||||||
"LabelBackupLocation": "Localização do Backup",
|
"LabelBackupLocation": "Localização do Backup",
|
||||||
"LabelBackupsEnableAutomaticBackups": "Ativar backups automáticos",
|
"LabelBackupsEnableAutomaticBackups": "Backups automáticos",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "Backups salvos em /metadata/backups",
|
"LabelBackupsEnableAutomaticBackupsHelp": "Backups salvos em /metadata/backups",
|
||||||
"LabelBackupsMaxBackupSize": "Tamanho máximo do backup (em GB)",
|
"LabelBackupsMaxBackupSize": "Tamanho máximo do backup (em GB) (0 para ilimitado)",
|
||||||
"LabelBackupsMaxBackupSizeHelp": "Como proteção contra uma configuração incorreta, backups darão erro se excederem o tamanho configurado.",
|
"LabelBackupsMaxBackupSizeHelp": "Como proteção contra uma configuração incorreta, backups darão erro se excederem o tamanho configurado.",
|
||||||
"LabelBackupsNumberToKeep": "Número de backups para guardar",
|
"LabelBackupsNumberToKeep": "Número de backups para guardar",
|
||||||
"LabelBackupsNumberToKeepHelp": "Apenas 1 backup será removido por vez, então, se já existem mais backups, você deve apagá-los manualmente.",
|
"LabelBackupsNumberToKeepHelp": "Apenas 1 backup será removido por vez, então, se já existem mais backups, você deve apagá-los manualmente.",
|
||||||
|
"LabelBitrate": "Bitrate",
|
||||||
|
"LabelBonus": "Bônus",
|
||||||
"LabelBooks": "Livros",
|
"LabelBooks": "Livros",
|
||||||
"LabelButtonText": "Texto do botão",
|
"LabelButtonText": "Texto do botão",
|
||||||
"LabelByAuthor": "por {0}",
|
"LabelByAuthor": "por {0}",
|
||||||
"LabelChangePassword": "Trocar Senha",
|
"LabelChangePassword": "Trocar Senha",
|
||||||
"LabelChannels": "Canais",
|
"LabelChannels": "Canais",
|
||||||
|
"LabelChapterCount": "{0} Capítulos",
|
||||||
"LabelChapterTitle": "Título do Capítulo",
|
"LabelChapterTitle": "Título do Capítulo",
|
||||||
"LabelChapters": "Capítulos",
|
"LabelChapters": "Capítulos",
|
||||||
"LabelChaptersFound": "capítulos encontrados",
|
"LabelChaptersFound": "capítulos encontrados",
|
||||||
"LabelClickForMoreInfo": "Clique para mais informações",
|
"LabelClickForMoreInfo": "Clique para mais informações",
|
||||||
|
"LabelClickToUseCurrentValue": "Clique para usar o valor atual",
|
||||||
"LabelClosePlayer": "Fechar Reprodutor",
|
"LabelClosePlayer": "Fechar Reprodutor",
|
||||||
|
"LabelCodec": "Codec",
|
||||||
"LabelCollapseSeries": "Fechar Série",
|
"LabelCollapseSeries": "Fechar Série",
|
||||||
|
"LabelCollapseSubSeries": "Fechar Sub Séries",
|
||||||
"LabelCollection": "Coleção",
|
"LabelCollection": "Coleção",
|
||||||
"LabelCollections": "Coleções",
|
"LabelCollections": "Coleções",
|
||||||
"LabelComplete": "Concluído",
|
"LabelComplete": "Concluído",
|
||||||
|
|
@ -260,17 +295,21 @@
|
||||||
"LabelContinueListening": "Continuar Escutando",
|
"LabelContinueListening": "Continuar Escutando",
|
||||||
"LabelContinueReading": "Continuar Lendo",
|
"LabelContinueReading": "Continuar Lendo",
|
||||||
"LabelContinueSeries": "Continuar Série",
|
"LabelContinueSeries": "Continuar Série",
|
||||||
|
"LabelCorsAllowed": "Origens Permitidas para CORS",
|
||||||
"LabelCover": "Capa",
|
"LabelCover": "Capa",
|
||||||
"LabelCoverImageURL": "URL da Imagem da Capa",
|
"LabelCoverImageURL": "URL da Imagem da Capa",
|
||||||
|
"LabelCoverProvider": "Provedor de Capas",
|
||||||
"LabelCreatedAt": "Criado em",
|
"LabelCreatedAt": "Criado em",
|
||||||
"LabelCronExpression": "Expressão para o Cron",
|
"LabelCronExpression": "Expressão para o Cron",
|
||||||
"LabelCurrent": "Atual",
|
"LabelCurrent": "Atual",
|
||||||
"LabelCurrently": "Atualmente:",
|
"LabelCurrently": "Atualmente:",
|
||||||
"LabelCustomCronExpression": "Expressão personalizada para o Cron:",
|
"LabelCustomCronExpression": "Expressão personalizada para o Cron:",
|
||||||
"LabelDatetime": "Data e Hora",
|
"LabelDatetime": "Data e Hora",
|
||||||
|
"LabelDays": "Dias",
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Apagar do sistema de arquivos (desmarcar para remover apenas da base de dados)",
|
"LabelDeleteFromFileSystemCheckbox": "Apagar do sistema de arquivos (desmarcar para remover apenas da base de dados)",
|
||||||
"LabelDescription": "Descrição",
|
"LabelDescription": "Descrição",
|
||||||
"LabelDeselectAll": "Desmarcar tudo",
|
"LabelDeselectAll": "Desmarcar tudo",
|
||||||
|
"LabelDetectedPattern": "Padrão detectado:",
|
||||||
"LabelDevice": "Dispositivo",
|
"LabelDevice": "Dispositivo",
|
||||||
"LabelDeviceInfo": "Informação do Dispositivo",
|
"LabelDeviceInfo": "Informação do Dispositivo",
|
||||||
"LabelDeviceIsAvailableTo": "Dispositivo está disponível para...",
|
"LabelDeviceIsAvailableTo": "Dispositivo está disponível para...",
|
||||||
|
|
@ -280,6 +319,7 @@
|
||||||
"LabelDiscover": "Descobrir",
|
"LabelDiscover": "Descobrir",
|
||||||
"LabelDownload": "Download",
|
"LabelDownload": "Download",
|
||||||
"LabelDownloadNEpisodes": "Download de {0} Episódios",
|
"LabelDownloadNEpisodes": "Download de {0} Episódios",
|
||||||
|
"LabelDownloadable": "Baixável",
|
||||||
"LabelDuration": "Duração",
|
"LabelDuration": "Duração",
|
||||||
"LabelDurationComparisonExactMatch": "(exato)",
|
"LabelDurationComparisonExactMatch": "(exato)",
|
||||||
"LabelDurationComparisonLonger": "({0} maior)",
|
"LabelDurationComparisonLonger": "({0} maior)",
|
||||||
|
|
@ -288,6 +328,7 @@
|
||||||
"LabelEbook": "Ebook",
|
"LabelEbook": "Ebook",
|
||||||
"LabelEbooks": "Ebooks",
|
"LabelEbooks": "Ebooks",
|
||||||
"LabelEdit": "Editar",
|
"LabelEdit": "Editar",
|
||||||
|
"LabelEmail": "Email",
|
||||||
"LabelEmailSettingsFromAddress": "Remetente",
|
"LabelEmailSettingsFromAddress": "Remetente",
|
||||||
"LabelEmailSettingsRejectUnauthorized": "Rejeitar certificados não autorizados",
|
"LabelEmailSettingsRejectUnauthorized": "Rejeitar certificados não autorizados",
|
||||||
"LabelEmailSettingsRejectUnauthorizedHelp": "Desativar a validação de certificados SSL pode expor sua conexão a riscos de segurança, como ataques \"man-in-the-middle\". Desative essa opção apenas se entender suas consequências e se puder confiar no servidor de email ao qual você está se conectando.",
|
"LabelEmailSettingsRejectUnauthorizedHelp": "Desativar a validação de certificados SSL pode expor sua conexão a riscos de segurança, como ataques \"man-in-the-middle\". Desative essa opção apenas se entender suas consequências e se puder confiar no servidor de email ao qual você está se conectando.",
|
||||||
|
|
@ -296,23 +337,48 @@
|
||||||
"LabelEmailSettingsTestAddress": "Endereço de teste",
|
"LabelEmailSettingsTestAddress": "Endereço de teste",
|
||||||
"LabelEmbeddedCover": "Capa Integrada",
|
"LabelEmbeddedCover": "Capa Integrada",
|
||||||
"LabelEnable": "Habilitar",
|
"LabelEnable": "Habilitar",
|
||||||
|
"LabelEncodingBackupLocation": "Um backup dos seus arquivos de áudio original será gravado em:",
|
||||||
|
"LabelEncodingChaptersNotEmbedded": "Capítulos não são integrados em audiobooks com várias trilhas.",
|
||||||
|
"LabelEncodingClearItemCache": "Certifique-se de, periodicamente, apagar os itens do cache.",
|
||||||
|
"LabelEncodingFinishedM4B": "O arquivo M4B final será colocado na sua pasta de audiobooks em:",
|
||||||
|
"LabelEncodingInfoEmbedded": "Os metadados serão integrados nas trilhas de áudio dentro da sua pasta de audiobooks.",
|
||||||
|
"LabelEncodingStartedNavigation": "Assim que a tarefa for iniciada você pode sair dessa página.",
|
||||||
|
"LabelEncodingTimeWarning": "A codificação pode durar até 30 minutos.",
|
||||||
|
"LabelEncodingWarningAdvancedSettings": "Aviso: não atualize essas configurações se não estiver familiarizado com as opções de codificação do ffmpeg.",
|
||||||
|
"LabelEncodingWatcherDisabled": "Se você desabilitou o monitoramento, será necessário fazer uma nova verificação deste audiobook depois.",
|
||||||
"LabelEnd": "Fim",
|
"LabelEnd": "Fim",
|
||||||
|
"LabelEndOfChapter": "Fim do Capítulo",
|
||||||
"LabelEpisode": "Episódio",
|
"LabelEpisode": "Episódio",
|
||||||
|
"LabelEpisodeNotLinkedToRssFeed": "Episódio não vinculado ao feed RSS",
|
||||||
|
"LabelEpisodeNumber": "Episódio #{0}",
|
||||||
"LabelEpisodeTitle": "Título do Episódio",
|
"LabelEpisodeTitle": "Título do Episódio",
|
||||||
"LabelEpisodeType": "Tipo do Episódio",
|
"LabelEpisodeType": "Tipo do Episódio",
|
||||||
|
"LabelEpisodeUrlFromRssFeed": "URL do episódio a partir do feed RSS",
|
||||||
|
"LabelEpisodes": "Episódios",
|
||||||
|
"LabelEpisodic": "Episódico",
|
||||||
"LabelExample": "Exemplo",
|
"LabelExample": "Exemplo",
|
||||||
|
"LabelExpandSeries": "Expandir Série",
|
||||||
|
"LabelExpandSubSeries": "Expandir Subséries",
|
||||||
|
"LabelExpired": "Expirado",
|
||||||
|
"LabelExpiresAt": "Expira às",
|
||||||
|
"LabelExpiresInSeconds": "Expira em (segundos)",
|
||||||
|
"LabelExpiresNever": "Nunca",
|
||||||
"LabelExplicit": "Explícito",
|
"LabelExplicit": "Explícito",
|
||||||
"LabelExplicitChecked": "Explícito (verificado)",
|
"LabelExplicitChecked": "Explícito (verificado)",
|
||||||
"LabelExplicitUnchecked": "Não explícito (não verificado)",
|
"LabelExplicitUnchecked": "Não explícito (não verificado)",
|
||||||
|
"LabelExportOPML": "Exportar OPML",
|
||||||
"LabelFeedURL": "URL do Feed",
|
"LabelFeedURL": "URL do Feed",
|
||||||
"LabelFetchingMetadata": "Buscando Metadados",
|
"LabelFetchingMetadata": "Buscando Metadados",
|
||||||
"LabelFile": "Arquivo",
|
"LabelFile": "Arquivo",
|
||||||
"LabelFileBirthtime": "Criação do Arquivo",
|
"LabelFileBirthtime": "Criação do Arquivo",
|
||||||
|
"LabelFileBornDate": "Criado {0}",
|
||||||
"LabelFileModified": "Modificação do Arquivo",
|
"LabelFileModified": "Modificação do Arquivo",
|
||||||
|
"LabelFileModifiedDate": "Modificado {0}",
|
||||||
"LabelFilename": "Nome do Arquivo",
|
"LabelFilename": "Nome do Arquivo",
|
||||||
"LabelFilterByUser": "Filtrar por Usuário",
|
"LabelFilterByUser": "Filtrar por Usuário",
|
||||||
"LabelFindEpisodes": "Localizar Episódios",
|
"LabelFindEpisodes": "Localizar Episódios",
|
||||||
"LabelFinished": "Concluído",
|
"LabelFinished": "Concluído",
|
||||||
|
"LabelFinishedDate": "Concluído {0}",
|
||||||
"LabelFolder": "Pasta",
|
"LabelFolder": "Pasta",
|
||||||
"LabelFolders": "Pastas",
|
"LabelFolders": "Pastas",
|
||||||
"LabelFontBold": "Negrito",
|
"LabelFontBold": "Negrito",
|
||||||
|
|
@ -322,13 +388,17 @@
|
||||||
"LabelFontScale": "Escala de fonte",
|
"LabelFontScale": "Escala de fonte",
|
||||||
"LabelFontStrikethrough": "Tachado",
|
"LabelFontStrikethrough": "Tachado",
|
||||||
"LabelFormat": "Formato",
|
"LabelFormat": "Formato",
|
||||||
|
"LabelFull": "Cheio",
|
||||||
"LabelGenre": "Gênero",
|
"LabelGenre": "Gênero",
|
||||||
"LabelGenres": "Gêneros",
|
"LabelGenres": "Gêneros",
|
||||||
"LabelHardDeleteFile": "Apagar definitivamente",
|
"LabelHardDeleteFile": "Apagar definitivamente",
|
||||||
"LabelHasEbook": "Tem ebook",
|
"LabelHasEbook": "Tem ebook",
|
||||||
"LabelHasSupplementaryEbook": "Tem ebook complementar",
|
"LabelHasSupplementaryEbook": "Tem ebook complementar",
|
||||||
|
"LabelHideSubtitles": "Esconder Legendas",
|
||||||
"LabelHighestPriority": "Prioridade mais alta",
|
"LabelHighestPriority": "Prioridade mais alta",
|
||||||
|
"LabelHost": "Host",
|
||||||
"LabelHour": "Hora",
|
"LabelHour": "Hora",
|
||||||
|
"LabelHours": "Horas",
|
||||||
"LabelIcon": "Ícone",
|
"LabelIcon": "Ícone",
|
||||||
"LabelImageURLFromTheWeb": "URL da imagem na internet",
|
"LabelImageURLFromTheWeb": "URL da imagem na internet",
|
||||||
"LabelInProgress": "Em Andamento",
|
"LabelInProgress": "Em Andamento",
|
||||||
|
|
@ -343,30 +413,47 @@
|
||||||
"LabelIntervalEvery6Hours": "A cada 6 horas",
|
"LabelIntervalEvery6Hours": "A cada 6 horas",
|
||||||
"LabelIntervalEveryDay": "Todo dia",
|
"LabelIntervalEveryDay": "Todo dia",
|
||||||
"LabelIntervalEveryHour": "Toda hora",
|
"LabelIntervalEveryHour": "Toda hora",
|
||||||
|
"LabelIntervalEveryMinute": "A cada minuto",
|
||||||
"LabelInvert": "Inverter",
|
"LabelInvert": "Inverter",
|
||||||
|
"LabelItem": "Item",
|
||||||
|
"LabelJumpBackwardAmount": "Tempo de retrocesso",
|
||||||
|
"LabelJumpForwardAmount": "Tempo de avanço",
|
||||||
"LabelLanguage": "Idioma",
|
"LabelLanguage": "Idioma",
|
||||||
"LabelLanguageDefaultServer": "Idioma Padrão do Servidor",
|
"LabelLanguageDefaultServer": "Idioma Padrão do Servidor",
|
||||||
"LabelLanguages": "Idiomas",
|
"LabelLanguages": "Idiomas",
|
||||||
"LabelLastBookAdded": "Último Livro Acrescentado",
|
"LabelLastBookAdded": "Último Livro Acrescentado",
|
||||||
"LabelLastBookUpdated": "Último Livro Atualizado",
|
"LabelLastBookUpdated": "Último Livro Atualizado",
|
||||||
|
"LabelLastProgressDate": "Último progresso: {0}",
|
||||||
"LabelLastSeen": "Visto pela Última Vez",
|
"LabelLastSeen": "Visto pela Última Vez",
|
||||||
"LabelLastTime": "Progresso",
|
"LabelLastTime": "Progresso",
|
||||||
"LabelLastUpdate": "Última Atualização",
|
"LabelLastUpdate": "Última Atualização",
|
||||||
|
"LabelLayout": "Layout",
|
||||||
"LabelLayoutSinglePage": "Uma página",
|
"LabelLayoutSinglePage": "Uma página",
|
||||||
"LabelLayoutSplitPage": "Página dividida",
|
"LabelLayoutSplitPage": "Página dividida",
|
||||||
"LabelLess": "Menos",
|
"LabelLess": "Menos",
|
||||||
"LabelLibrariesAccessibleToUser": "Bibliotecas Acessíveis ao Usuário",
|
"LabelLibrariesAccessibleToUser": "Bibliotecas Acessíveis ao Usuário",
|
||||||
"LabelLibrary": "Biblioteca",
|
"LabelLibrary": "Biblioteca",
|
||||||
|
"LabelLibraryFilterSublistEmpty": "Sem {0}",
|
||||||
"LabelLibraryItem": "Item da Biblioteca",
|
"LabelLibraryItem": "Item da Biblioteca",
|
||||||
"LabelLibraryName": "Nome da Biblioteca",
|
"LabelLibraryName": "Nome da Biblioteca",
|
||||||
|
"LabelLibrarySortByProgress": "Última Atualização",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Concluído",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Progresso: Iniciado",
|
||||||
"LabelLimit": "Limite",
|
"LabelLimit": "Limite",
|
||||||
"LabelLineSpacing": "Espaçamento entre linhas",
|
"LabelLineSpacing": "Espaçamento entre linhas",
|
||||||
"LabelListenAgain": "Escutar novamente",
|
"LabelListenAgain": "Escutar novamente",
|
||||||
|
"LabelLogLevelDebug": "Debug",
|
||||||
|
"LabelLogLevelInfo": "Info",
|
||||||
"LabelLogLevelWarn": "Atenção",
|
"LabelLogLevelWarn": "Atenção",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Procurar por novos Episódios após essa data",
|
"LabelLookForNewEpisodesAfterDate": "Procurar por novos Episódios após essa data",
|
||||||
"LabelLowestPriority": "Prioridade mais baixa",
|
"LabelLowestPriority": "Prioridade mais baixa",
|
||||||
|
"LabelMatchConfidence": "Confiabilidade",
|
||||||
"LabelMatchExistingUsersBy": "Consultar usuários existentes usando",
|
"LabelMatchExistingUsersBy": "Consultar usuários existentes usando",
|
||||||
"LabelMatchExistingUsersByDescription": "Utilizado para conectar usuários já existentes. Uma vez conectados, usuários serão consultados utilizando uma identificação única do seu provedor de SSO",
|
"LabelMatchExistingUsersByDescription": "Utilizado para conectar usuários já existentes. Uma vez conectados, usuários serão consultados utilizando uma identificação única do seu provedor de SSO",
|
||||||
|
"LabelMaxEpisodesToDownload": "Número máximo de episódios para baixar. Use 0 para download ilimitado.",
|
||||||
|
"LabelMaxEpisodesToDownloadPerCheck": "Número máximo de novos episódios para baixar por verificação",
|
||||||
|
"LabelMaxEpisodesToKeep": "Número máximo de episódios para manter",
|
||||||
|
"LabelMaxEpisodesToKeepHelp": "O valor 0 define que não há limite máximo. Após um novo episódio ser baixado automaticamente, o episódio mais antigo será excluído caso você tenha mais de X episódios. Apenas um episódio será excluído a cada novo download.",
|
||||||
"LabelMediaPlayer": "Reprodutor de mídia",
|
"LabelMediaPlayer": "Reprodutor de mídia",
|
||||||
"LabelMediaType": "Tipo de Mídia",
|
"LabelMediaType": "Tipo de Mídia",
|
||||||
"LabelMetaTag": "Etiqueta Meta",
|
"LabelMetaTag": "Etiqueta Meta",
|
||||||
|
|
@ -374,6 +461,7 @@
|
||||||
"LabelMetadataOrderOfPrecedenceDescription": "Fontes de metadados de alta prioridade terão preferência sobre as fontes de metadados de prioridade baixa",
|
"LabelMetadataOrderOfPrecedenceDescription": "Fontes de metadados de alta prioridade terão preferência sobre as fontes de metadados de prioridade baixa",
|
||||||
"LabelMetadataProvider": "Fonte de Metadados",
|
"LabelMetadataProvider": "Fonte de Metadados",
|
||||||
"LabelMinute": "Minuto",
|
"LabelMinute": "Minuto",
|
||||||
|
"LabelMinutes": "Minutos",
|
||||||
"LabelMissing": "Ausente",
|
"LabelMissing": "Ausente",
|
||||||
"LabelMissingEbook": "Ebook não existe",
|
"LabelMissingEbook": "Ebook não existe",
|
||||||
"LabelMissingSupplementaryEbook": "Ebook complementar não existe",
|
"LabelMissingSupplementaryEbook": "Ebook complementar não existe",
|
||||||
|
|
@ -389,7 +477,9 @@
|
||||||
"LabelNewestAuthors": "Novos Autores",
|
"LabelNewestAuthors": "Novos Autores",
|
||||||
"LabelNewestEpisodes": "Episódios mais recentes",
|
"LabelNewestEpisodes": "Episódios mais recentes",
|
||||||
"LabelNextBackupDate": "Data do próximo backup",
|
"LabelNextBackupDate": "Data do próximo backup",
|
||||||
|
"LabelNextChapters": "Próximo capítulo será:",
|
||||||
"LabelNextScheduledRun": "Próxima execução programada",
|
"LabelNextScheduledRun": "Próxima execução programada",
|
||||||
|
"LabelNoApiKeys": "Sem chaves de API",
|
||||||
"LabelNoCustomMetadataProviders": "Não existem fontes de metadados customizados",
|
"LabelNoCustomMetadataProviders": "Não existem fontes de metadados customizados",
|
||||||
"LabelNoEpisodesSelected": "Nenhum episódio selecionado",
|
"LabelNoEpisodesSelected": "Nenhum episódio selecionado",
|
||||||
"LabelNotFinished": "Não concluído",
|
"LabelNotFinished": "Não concluído",
|
||||||
|
|
@ -405,17 +495,21 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Tamanho máximo da fila de eventos de notificação",
|
"LabelNotificationsMaxQueueSize": "Tamanho máximo da fila de eventos de notificação",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Eventos estão limitados a um disparo por segundo. Eventos serão ignorados se a fila estiver no tamanho máximo. Isso evita o excesso de notificações.",
|
"LabelNotificationsMaxQueueSizeHelp": "Eventos estão limitados a um disparo por segundo. Eventos serão ignorados se a fila estiver no tamanho máximo. Isso evita o excesso de notificações.",
|
||||||
"LabelNumberOfBooks": "Número de Livros",
|
"LabelNumberOfBooks": "Número de Livros",
|
||||||
|
"LabelNumberOfChapters": "Número de capítulos:",
|
||||||
"LabelNumberOfEpisodes": "# de Episódios",
|
"LabelNumberOfEpisodes": "# de Episódios",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Nome do claim OpenID contendo as permissões avançadas para ações do usuário na aplicação para serem aplicadas aos perfis não-administradores (<b>se configurados</b>). Se o claim não estiver presente na resposta, acesso ao ABS será negado. Se apenas uma opção estiver ausente, ela será tratada como <code>false</code>. Garanta que o claim do provedor de identidade segue a estrutura esperada:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Nome do claim OpenID contendo as permissões avançadas para ações do usuário na aplicação para serem aplicadas aos perfis não-administradores (<b>se configurados</b>). Se o claim não estiver presente na resposta, acesso ao ABS será negado. Se apenas uma opção estiver ausente, ela será tratada como <code>false</code>. Garanta que o claim do provedor de identidade segue a estrutura esperada:",
|
||||||
"LabelOpenIDClaims": "Deixe as opções a seguir em branco para desativar a atribuição de grupos e permissões avançadas; nesse caso, o grupo 'Usuário' será atribuído automaticamente.",
|
"LabelOpenIDClaims": "Deixe as opções a seguir em branco para desativar a atribuição de grupos e permissões avançadas; nesse caso, o grupo 'Usuário' será atribuído automaticamente.",
|
||||||
"LabelOpenIDGroupClaimDescription": "Nome do claim OpenID contendo a lista de grupos do usuário, normalmente chamada de <code>groups</code>. <b>Se configurada</b>, a aplicação atribuirá automaticamente os perfis com base na participação do usuário nos grupos, contanto que os nomes desses grupos no claim, sem distinção entre maiúsculas e minúsculas, sejam 'admin', 'user' ou 'guest'. O claim deve conter uma lista e, se o usuário pertencer a múltiplos grupos, a aplicação atribuirá o perfil correspondendo ao maior nível de acesso. Se não houver correspondência a qualquer grupo, o acesso será negado.",
|
"LabelOpenIDGroupClaimDescription": "Nome do claim OpenID contendo a lista de grupos do usuário, normalmente chamada de <code>groups</code>. <b>Se configurada</b>, a aplicação atribuirá automaticamente os perfis com base na participação do usuário nos grupos, contanto que os nomes desses grupos no claim, sem distinção entre maiúsculas e minúsculas, sejam 'admin', 'user' ou 'guest'. O claim deve conter uma lista e, se o usuário pertencer a múltiplos grupos, a aplicação atribuirá o perfil correspondendo ao maior nível de acesso. Se não houver correspondência a qualquer grupo, o acesso será negado.",
|
||||||
"LabelOpenRSSFeed": "Abrir Feed RSS",
|
"LabelOpenRSSFeed": "Abrir Feed RSS",
|
||||||
"LabelOverwrite": "Sobrescrever",
|
"LabelOverwrite": "Sobrescrever",
|
||||||
|
"LabelPaginationPageXOfY": "Página {0} de {1}",
|
||||||
"LabelPassword": "Senha",
|
"LabelPassword": "Senha",
|
||||||
"LabelPath": "Caminho",
|
"LabelPath": "Caminho",
|
||||||
|
"LabelPermanent": "Permanente",
|
||||||
"LabelPermissionsAccessAllLibraries": "Pode Acessar Todas Bibliotecas",
|
"LabelPermissionsAccessAllLibraries": "Pode Acessar Todas Bibliotecas",
|
||||||
"LabelPermissionsAccessAllTags": "Pode Acessar Todas as Etiquetas",
|
"LabelPermissionsAccessAllTags": "Pode Acessar Todas as Etiquetas",
|
||||||
"LabelPermissionsAccessExplicitContent": "Pode Acessar Conteúdos Explícitos",
|
"LabelPermissionsAccessExplicitContent": "Pode Acessar Conteúdos Explícitos",
|
||||||
|
"LabelPermissionsCreateEreader": "Pode criar leitor de ebooks",
|
||||||
"LabelPermissionsDelete": "Pode Apagar",
|
"LabelPermissionsDelete": "Pode Apagar",
|
||||||
"LabelPermissionsDownload": "Pode Fazer Download",
|
"LabelPermissionsDownload": "Pode Fazer Download",
|
||||||
"LabelPermissionsUpdate": "Pode Atualizar",
|
"LabelPermissionsUpdate": "Pode Atualizar",
|
||||||
|
|
@ -423,25 +517,35 @@
|
||||||
"LabelPersonalYearReview": "Sua Retrospectiva Anual ({0})",
|
"LabelPersonalYearReview": "Sua Retrospectiva Anual ({0})",
|
||||||
"LabelPhotoPathURL": "Caminho/URL para Foto",
|
"LabelPhotoPathURL": "Caminho/URL para Foto",
|
||||||
"LabelPlayMethod": "Método de Reprodução",
|
"LabelPlayMethod": "Método de Reprodução",
|
||||||
|
"LabelPlaybackRateIncrementDecrement": "Valor de incremento/decremento da taxa de reprodução",
|
||||||
|
"LabelPlayerChapterNumberMarker": "{0} de {1}",
|
||||||
"LabelPlaylists": "Listas de Reprodução",
|
"LabelPlaylists": "Listas de Reprodução",
|
||||||
|
"LabelPodcast": "Podcast",
|
||||||
"LabelPodcastSearchRegion": "Região de busca do podcast",
|
"LabelPodcastSearchRegion": "Região de busca do podcast",
|
||||||
"LabelPodcastType": "Tipo de Podcast",
|
"LabelPodcastType": "Tipo de Podcast",
|
||||||
|
"LabelPodcasts": "Podcasts",
|
||||||
"LabelPort": "Porta",
|
"LabelPort": "Porta",
|
||||||
"LabelPrefixesToIgnore": "Prefixos para Ignorar (sem distinção entre maiúsculas e minúsculas)",
|
"LabelPrefixesToIgnore": "Prefixos para Ignorar (sem distinção entre maiúsculas e minúsculas)",
|
||||||
"LabelPreventIndexing": "Evitar que o seu feed seja indexado pelos diretórios de podcast do iTunes e Google",
|
"LabelPreventIndexing": "Evitar que o seu feed seja indexado pelos diretórios de podcast do iTunes e Google",
|
||||||
"LabelPrimaryEbook": "Ebook principal",
|
"LabelPrimaryEbook": "Ebook principal",
|
||||||
"LabelProgress": "Progresso",
|
"LabelProgress": "Progresso",
|
||||||
"LabelProvider": "Fonte",
|
"LabelProvider": "Fonte",
|
||||||
|
"LabelProviderAuthorizationValue": "Valor do Cabeçalho de Autorização",
|
||||||
"LabelPubDate": "Data de Publicação",
|
"LabelPubDate": "Data de Publicação",
|
||||||
"LabelPublishYear": "Ano de Publicação",
|
"LabelPublishYear": "Ano de Publicação",
|
||||||
|
"LabelPublishedDate": "Publicado {0}",
|
||||||
|
"LabelPublishedDecade": "Década de Publicação",
|
||||||
|
"LabelPublishedDecades": "Décadas de Publicação",
|
||||||
"LabelPublisher": "Editora",
|
"LabelPublisher": "Editora",
|
||||||
"LabelPublishers": "Editoras",
|
"LabelPublishers": "Editoras",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "E-mail do dono personalizado",
|
"LabelRSSFeedCustomOwnerEmail": "E-mail do dono personalizado",
|
||||||
"LabelRSSFeedCustomOwnerName": "Nome do dono personalizado",
|
"LabelRSSFeedCustomOwnerName": "Nome do dono personalizado",
|
||||||
"LabelRSSFeedOpen": "Feed RSS Aberto",
|
"LabelRSSFeedOpen": "Feed de RSS Aberto",
|
||||||
"LabelRSSFeedPreventIndexing": "Impedir Indexação",
|
"LabelRSSFeedPreventIndexing": "Impedir Indexação",
|
||||||
"LabelRSSFeedSlug": "Slug do Feed RSS",
|
"LabelRSSFeedSlug": "Slug do Feed RSS",
|
||||||
"LabelRSSFeedURL": "URL do Feed RSS",
|
"LabelRSSFeedURL": "URL do Feed RSS",
|
||||||
|
"LabelRandomly": "Aleatoriamente",
|
||||||
|
"LabelReAddSeriesToContinueListening": "Adicionar novamente a série à \"Continuar ouvindo\"",
|
||||||
"LabelRead": "Lido",
|
"LabelRead": "Lido",
|
||||||
"LabelReadAgain": "Ler novamente",
|
"LabelReadAgain": "Ler novamente",
|
||||||
"LabelReadEbookWithoutProgress": "Ler ebook sem armazenar progresso",
|
"LabelReadEbookWithoutProgress": "Ler ebook sem armazenar progresso",
|
||||||
|
|
@ -451,29 +555,41 @@
|
||||||
"LabelRedo": "Refazer",
|
"LabelRedo": "Refazer",
|
||||||
"LabelRegion": "Região",
|
"LabelRegion": "Região",
|
||||||
"LabelReleaseDate": "Data de Lançamento",
|
"LabelReleaseDate": "Data de Lançamento",
|
||||||
|
"LabelRemoveAllMetadataAbs": "Remover todos os arquivos metadata.abs",
|
||||||
|
"LabelRemoveAllMetadataJson": "Remover todos os arquivos metadata.json",
|
||||||
|
"LabelRemoveAudibleBranding": "Remover introdução e encerramento da Audible dos capítulos",
|
||||||
"LabelRemoveCover": "Remover capa",
|
"LabelRemoveCover": "Remover capa",
|
||||||
|
"LabelRemoveMetadataFile": "Remover arquivos de metadados nas pastas da biblioteca",
|
||||||
|
"LabelRemoveMetadataFileHelp": "Remover todos os arquivos metadata.json e metadata.abs em suas {0} pastas.",
|
||||||
"LabelRowsPerPage": "Linhas por Página",
|
"LabelRowsPerPage": "Linhas por Página",
|
||||||
"LabelSearchTerm": "Busca por Termo",
|
"LabelSearchTerm": "Busca por Termo",
|
||||||
"LabelSearchTitle": "Busca por Título",
|
"LabelSearchTitle": "Busca por Título",
|
||||||
"LabelSearchTitleOrASIN": "Busca por Título ou ASIN",
|
"LabelSearchTitleOrASIN": "Busca por Título ou ASIN",
|
||||||
"LabelSeason": "Temporada",
|
"LabelSeason": "Temporada",
|
||||||
|
"LabelSeasonNumber": "Temporada #{0}",
|
||||||
"LabelSelectAll": "Selecionar todos",
|
"LabelSelectAll": "Selecionar todos",
|
||||||
"LabelSelectAllEpisodes": "Selecionar todos os Episódios",
|
"LabelSelectAllEpisodes": "Selecionar todos os Episódios",
|
||||||
"LabelSelectEpisodesShowing": "Selecionar os {0} Episódios Visíveis",
|
"LabelSelectEpisodesShowing": "Selecionar os {0} Episódios Visíveis",
|
||||||
|
"LabelSelectUser": "Selecionar usuário",
|
||||||
"LabelSelectUsers": "Selecionar usuários",
|
"LabelSelectUsers": "Selecionar usuários",
|
||||||
"LabelSendEbookToDevice": "Enviar Ebook para...",
|
"LabelSendEbookToDevice": "Enviar Ebook para...",
|
||||||
"LabelSequence": "Sequência",
|
"LabelSequence": "Sequência",
|
||||||
|
"LabelSerial": "Serial",
|
||||||
"LabelSeries": "Série",
|
"LabelSeries": "Série",
|
||||||
"LabelSeriesName": "Nome da Série",
|
"LabelSeriesName": "Nome da Série",
|
||||||
"LabelSeriesProgress": "Progresso da Série",
|
"LabelSeriesProgress": "Progresso da Série",
|
||||||
|
"LabelServerLogLevel": "Nível de Logs do Servidor",
|
||||||
"LabelServerYearReview": "Retrospectiva Anual do Servidor ({0})",
|
"LabelServerYearReview": "Retrospectiva Anual do Servidor ({0})",
|
||||||
"LabelSetEbookAsPrimary": "Definir como principal",
|
"LabelSetEbookAsPrimary": "Definir como principal",
|
||||||
"LabelSetEbookAsSupplementary": "Definir como complementar",
|
"LabelSetEbookAsSupplementary": "Definir como complementar",
|
||||||
|
"LabelSettingsAllowIframe": "Permitir incorporação em iframe",
|
||||||
"LabelSettingsAudiobooksOnly": "Apenas Audiobooks",
|
"LabelSettingsAudiobooksOnly": "Apenas Audiobooks",
|
||||||
"LabelSettingsAudiobooksOnlyHelp": "Ao ativar essa configuração os arquivos de ebooks serão ignorados a não ser que estejam dentro de uma pasta com um audiobook. Nesse caso eles serão definidos como ebooks complementares",
|
"LabelSettingsAudiobooksOnlyHelp": "Ao ativar essa configuração os arquivos de ebooks serão ignorados a não ser que estejam dentro de uma pasta com um audiobook. Nesse caso eles serão definidos como ebooks complementares",
|
||||||
"LabelSettingsBookshelfViewHelp": "Aparência esqueomorfa com prateleiras de madeira",
|
"LabelSettingsBookshelfViewHelp": "Aparência esqueomorfa com prateleiras de madeira",
|
||||||
"LabelSettingsChromecastSupport": "Suporte ao Chromecast",
|
"LabelSettingsChromecastSupport": "Suporte ao Chromecast",
|
||||||
"LabelSettingsDateFormat": "Formato de data",
|
"LabelSettingsDateFormat": "Formato de data",
|
||||||
|
"LabelSettingsEnableWatcher": "Monitorar automaticamente alterações nas bibliotecas",
|
||||||
|
"LabelSettingsEnableWatcherForLibrary": "Monitorar automaticamente alterações na biblioteca",
|
||||||
"LabelSettingsEnableWatcherHelp": "Ativa o acréscimo/atualização de itens quando forem detectadas mudanças no arquivo. *Requer reiniciar o servidor",
|
"LabelSettingsEnableWatcherHelp": "Ativa o acréscimo/atualização de itens quando forem detectadas mudanças no arquivo. *Requer reiniciar o servidor",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Permitir scripts em epubs",
|
"LabelSettingsEpubsAllowScriptedContent": "Permitir scripts em epubs",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Permitir que arquivos epub executem scripts. É recomendado manter essa configuração desativada, a não ser que confie na fonte dos arquivos epub.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Permitir que arquivos epub executem scripts. É recomendado manter essa configuração desativada, a não ser que confie na fonte dos arquivos epub.",
|
||||||
|
|
@ -485,6 +601,9 @@
|
||||||
"LabelSettingsHideSingleBookSeriesHelp": "Séries com um só livro serão ocultadas na página de séries e na prateleira de séries na página principal.",
|
"LabelSettingsHideSingleBookSeriesHelp": "Séries com um só livro serão ocultadas na página de séries e na prateleira de séries na página principal.",
|
||||||
"LabelSettingsHomePageBookshelfView": "Usar visão estante na página principal",
|
"LabelSettingsHomePageBookshelfView": "Usar visão estante na página principal",
|
||||||
"LabelSettingsLibraryBookshelfView": "Usar visão estante na página da biblioteca",
|
"LabelSettingsLibraryBookshelfView": "Usar visão estante na página da biblioteca",
|
||||||
|
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "O percentual de conclusão é maior que",
|
||||||
|
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "O tempo restante é inferior a (segundos)",
|
||||||
|
"LabelSettingsLibraryMarkAsFinishedWhen": "Marcar o item de mídia como concluído quando",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Pular livros anteriores em Continuar Série",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Pular livros anteriores em Continuar Série",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "A prateleira Continuar Série na página principal de exibe o primeiro livro não iniciado em uma série que tem pelo menos um livro concluído e nenhum livro em andamento. Ativar essa configuração irá continuar a série a partir do livro mais recentemente concluído ao invés do primeiro livro não iniciado.",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "A prateleira Continuar Série na página principal de exibe o primeiro livro não iniciado em uma série que tem pelo menos um livro concluído e nenhum livro em andamento. Ativar essa configuração irá continuar a série a partir do livro mais recentemente concluído ao invés do primeiro livro não iniciado.",
|
||||||
"LabelSettingsParseSubtitles": "Analisar subtítulos",
|
"LabelSettingsParseSubtitles": "Analisar subtítulos",
|
||||||
|
|
@ -502,14 +621,24 @@
|
||||||
"LabelSettingsStoreMetadataWithItem": "Armazenar metadados com o item",
|
"LabelSettingsStoreMetadataWithItem": "Armazenar metadados com o item",
|
||||||
"LabelSettingsStoreMetadataWithItemHelp": "Por padrão os arquivos de metadados são armazenados em /metadata/items. Ao ativar essa configuração os arquivos de metadados serão armazenadas nas pastas dos itens na sua biblioteca",
|
"LabelSettingsStoreMetadataWithItemHelp": "Por padrão os arquivos de metadados são armazenados em /metadata/items. Ao ativar essa configuração os arquivos de metadados serão armazenadas nas pastas dos itens na sua biblioteca",
|
||||||
"LabelSettingsTimeFormat": "Formato da Tempo",
|
"LabelSettingsTimeFormat": "Formato da Tempo",
|
||||||
|
"LabelShare": "Compartilhar",
|
||||||
|
"LabelShareDownloadableHelp": "Permitir que os usuários com o link de compartilhamento baixem um arquivo zip do item da biblioteca.",
|
||||||
|
"LabelShareOpen": "Abrir compartilhamento",
|
||||||
|
"LabelShareURL": "Compartilhar URL",
|
||||||
"LabelShowAll": "Exibir Todos",
|
"LabelShowAll": "Exibir Todos",
|
||||||
"LabelShowSeconds": "Exibir segundos",
|
"LabelShowSeconds": "Exibir segundos",
|
||||||
|
"LabelShowSubtitles": "Mostrar Legendas",
|
||||||
"LabelSize": "Tamanho",
|
"LabelSize": "Tamanho",
|
||||||
"LabelSleepTimer": "Timer",
|
"LabelSleepTimer": "Timer",
|
||||||
|
"LabelSlug": "Slug",
|
||||||
|
"LabelSortAscending": "Crescente",
|
||||||
|
"LabelSortDescending": "Decrescente",
|
||||||
|
"LabelSortPubDate": "Ordenar por data de publicação",
|
||||||
"LabelStart": "Iniciar",
|
"LabelStart": "Iniciar",
|
||||||
"LabelStartTime": "Horário do Início",
|
"LabelStartTime": "Horário do Início",
|
||||||
"LabelStarted": "Iniciado",
|
"LabelStarted": "Iniciado",
|
||||||
"LabelStartedAt": "Iniciado Em",
|
"LabelStartedAt": "Iniciado Em",
|
||||||
|
"LabelStartedDate": "Iniciado {0}",
|
||||||
"LabelStatsAudioTracks": "Trilhas de Áudio",
|
"LabelStatsAudioTracks": "Trilhas de Áudio",
|
||||||
"LabelStatsAuthors": "Autores",
|
"LabelStatsAuthors": "Autores",
|
||||||
"LabelStatsBestDay": "Melhor Dia",
|
"LabelStatsBestDay": "Melhor Dia",
|
||||||
|
|
@ -533,12 +662,19 @@
|
||||||
"LabelTagsNotAccessibleToUser": "Etiquetas não Acessíveis Usuário",
|
"LabelTagsNotAccessibleToUser": "Etiquetas não Acessíveis Usuário",
|
||||||
"LabelTasks": "Tarefas em Execuçào",
|
"LabelTasks": "Tarefas em Execuçào",
|
||||||
"LabelTextEditorBulletedList": "Lista com marcadores",
|
"LabelTextEditorBulletedList": "Lista com marcadores",
|
||||||
|
"LabelTextEditorLink": "Link",
|
||||||
"LabelTextEditorNumberedList": "Lista numerada",
|
"LabelTextEditorNumberedList": "Lista numerada",
|
||||||
"LabelTextEditorUnlink": "Remover link",
|
"LabelTextEditorUnlink": "Remover link",
|
||||||
"LabelTheme": "Tema",
|
"LabelTheme": "Tema",
|
||||||
"LabelThemeDark": "Escuro",
|
"LabelThemeDark": "Escuro",
|
||||||
"LabelThemeLight": "Claro",
|
"LabelThemeLight": "Claro",
|
||||||
|
"LabelThemeSepia": "Sépia",
|
||||||
"LabelTimeBase": "Base de tempo",
|
"LabelTimeBase": "Base de tempo",
|
||||||
|
"LabelTimeDurationXHours": "{0} horas",
|
||||||
|
"LabelTimeDurationXMinutes": "{0} minutos",
|
||||||
|
"LabelTimeDurationXSeconds": "{0} segundos",
|
||||||
|
"LabelTimeInMinutes": "Tempo em minutos",
|
||||||
|
"LabelTimeLeft": "{0} restante",
|
||||||
"LabelTimeListened": "Tempo de escuta",
|
"LabelTimeListened": "Tempo de escuta",
|
||||||
"LabelTimeListenedToday": "Tempo de escuta hoje",
|
"LabelTimeListenedToday": "Tempo de escuta hoje",
|
||||||
"LabelTimeRemaining": "{0} restantes",
|
"LabelTimeRemaining": "{0} restantes",
|
||||||
|
|
@ -546,6 +682,7 @@
|
||||||
"LabelTitle": "Título",
|
"LabelTitle": "Título",
|
||||||
"LabelToolsEmbedMetadata": "Incluir Metadados",
|
"LabelToolsEmbedMetadata": "Incluir Metadados",
|
||||||
"LabelToolsEmbedMetadataDescription": "Incluir metadados no arquivo de áudio, com imagem da capa e capítulos.",
|
"LabelToolsEmbedMetadataDescription": "Incluir metadados no arquivo de áudio, com imagem da capa e capítulos.",
|
||||||
|
"LabelToolsM4bEncoder": "Codificador M4B",
|
||||||
"LabelToolsMakeM4b": "Gerar audiobook no formato M4B",
|
"LabelToolsMakeM4b": "Gerar audiobook no formato M4B",
|
||||||
"LabelToolsMakeM4bDescription": "Gerar um arquivo de audiobook no formato .M4B com metadados, imagem da capa e capítulos.",
|
"LabelToolsMakeM4bDescription": "Gerar um arquivo de audiobook no formato .M4B com metadados, imagem da capa e capítulos.",
|
||||||
"LabelToolsSplitM4b": "Dividir um M4B em MP3s",
|
"LabelToolsSplitM4b": "Dividir um M4B em MP3s",
|
||||||
|
|
@ -558,71 +695,105 @@
|
||||||
"LabelTracksMultiTrack": "Várias trilhas",
|
"LabelTracksMultiTrack": "Várias trilhas",
|
||||||
"LabelTracksNone": "Sem trilha",
|
"LabelTracksNone": "Sem trilha",
|
||||||
"LabelTracksSingleTrack": "Trilha única",
|
"LabelTracksSingleTrack": "Trilha única",
|
||||||
|
"LabelTrailer": "Trailer",
|
||||||
"LabelType": "Tipo",
|
"LabelType": "Tipo",
|
||||||
"LabelUnabridged": "Não Abreviada",
|
"LabelUnabridged": "Não Abreviada",
|
||||||
"LabelUndo": "Desfazer",
|
"LabelUndo": "Desfazer",
|
||||||
"LabelUnknown": "Desconhecido",
|
"LabelUnknown": "Desconhecido",
|
||||||
|
"LabelUnknownPublishDate": "Data de publicação desconhecida",
|
||||||
"LabelUpdateCover": "Atualizar Capa",
|
"LabelUpdateCover": "Atualizar Capa",
|
||||||
"LabelUpdateCoverHelp": "Permite sobrescrever capas existentes para os livros selecionados quando uma consulta for localizada",
|
"LabelUpdateCoverHelp": "Permite sobrescrever capas existentes para os livros selecionados quando uma consulta for localizada",
|
||||||
"LabelUpdateDetails": "Atualizar Detalhes",
|
"LabelUpdateDetails": "Atualizar Detalhes",
|
||||||
"LabelUpdateDetailsHelp": "Permite sobrescrever detalhes existentes para os livros selecionados quando uma consulta for localizada",
|
"LabelUpdateDetailsHelp": "Permite sobrescrever detalhes existentes para os livros selecionados quando uma consulta for localizada",
|
||||||
"LabelUpdatedAt": "Atualizado em",
|
"LabelUpdatedAt": "Atualizado em",
|
||||||
"LabelUploaderDragAndDrop": "Arraste e solte arquivos ou pastas",
|
"LabelUploaderDragAndDrop": "Arraste e solte arquivos ou pastas",
|
||||||
|
"LabelUploaderDragAndDropFilesOnly": "Arraste e solte arquivos",
|
||||||
"LabelUploaderDropFiles": "Solte os arquivos",
|
"LabelUploaderDropFiles": "Solte os arquivos",
|
||||||
"LabelUploaderItemFetchMetadataHelp": "Busca título, autor e série automaticamente",
|
"LabelUploaderItemFetchMetadataHelp": "Busca título, autor e série automaticamente",
|
||||||
|
"LabelUseAdvancedOptions": "Usar Opções Avançadas",
|
||||||
"LabelUseChapterTrack": "Usar a trilha do capítulo",
|
"LabelUseChapterTrack": "Usar a trilha do capítulo",
|
||||||
"LabelUseFullTrack": "Usar a trilha toda",
|
"LabelUseFullTrack": "Usar a trilha toda",
|
||||||
|
"LabelUseZeroForUnlimited": "Use 0 para ilimitado",
|
||||||
"LabelUser": "Usuário",
|
"LabelUser": "Usuário",
|
||||||
"LabelUsername": "Nome do usuário",
|
"LabelUsername": "Nome do usuário",
|
||||||
"LabelValue": "Valor",
|
"LabelValue": "Valor",
|
||||||
"LabelVersion": "Versão",
|
"LabelVersion": "Versão",
|
||||||
"LabelViewBookmarks": "Ver marcadores",
|
"LabelViewBookmarks": "Ver marcadores",
|
||||||
"LabelViewChapters": "Ver capítulos",
|
"LabelViewChapters": "Ver capítulos",
|
||||||
|
"LabelViewPlayerSettings": "Ver configurações do reprodutor",
|
||||||
"LabelViewQueue": "Ver fila do reprodutor",
|
"LabelViewQueue": "Ver fila do reprodutor",
|
||||||
|
"LabelVolume": "Volume",
|
||||||
|
"LabelWebRedirectURLsDescription": "Autorize esses URLs em seu provedor OAuth para permitir o redirecionamento de volta ao aplicativo web após o login:",
|
||||||
|
"LabelWebRedirectURLsSubfolder": "Subpasta de URLs de redirecionamento",
|
||||||
"LabelWeekdaysToRun": "Dias da semana para executar",
|
"LabelWeekdaysToRun": "Dias da semana para executar",
|
||||||
"LabelYearReviewHide": "Ocultar Retrospectiva Anual",
|
"LabelXBooks": "{0} livros",
|
||||||
"LabelYearReviewShow": "Exibir Retrospectiva Anual",
|
"LabelXItems": "{0} itens",
|
||||||
|
"LabelYearReviewHide": "Ocultar Retrospectiva",
|
||||||
|
"LabelYearReviewShow": "Exibir Retrospectiva",
|
||||||
"LabelYourAudiobookDuration": "Duração do seu audiobook",
|
"LabelYourAudiobookDuration": "Duração do seu audiobook",
|
||||||
"LabelYourBookmarks": "Seus Marcadores",
|
"LabelYourBookmarks": "Seus Marcadores",
|
||||||
"LabelYourPlaylists": "Suas Listas de Reprodução",
|
"LabelYourPlaylists": "Suas Listas de Reprodução",
|
||||||
"LabelYourProgress": "Seu Progresso",
|
"LabelYourProgress": "Seu Progresso",
|
||||||
"MessageAddToPlayerQueue": "Adicionar à lista do reprodutor",
|
"MessageAddToPlayerQueue": "Adicionar à lista do reprodutor",
|
||||||
"MessageAppriseDescription": "Para utilizar essa funcionalidade é preciso ter uma instância da <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API do Apprise</a> em execução ou uma api que possa tratar esses mesmos chamados. <br />A URL da API do Apprise deve conter o caminho completo da URL para enviar as notificações. Ex: se a sua instância da API estiver em <code>http://192.168.1.1:8337</code> você deve utilizar <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Para utilizar essa funcionalidade é preciso ter uma instância da <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API do Apprise</a> em execução ou uma API que possa tratar esses mesmos chamados. <br />A URL da API do Apprise deve conter o caminho completo da URL para enviar as notificações. Ex: se a sua instância da API estiver em <code>http://192.168.1.1:8337</code> você deve utilizar <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
|
"MessageAsinCheck": "Certifique-se de estar usando o ASIN da região correta da Audible, e não da Amazon.",
|
||||||
|
"MessageAuthenticationLegacyTokenWarning": "Os tokens de API legados serão removidos no futuro. Use <a href=\"/config/api-keys\">Chaves de API</a> em vez disso.",
|
||||||
|
"MessageAuthenticationOIDCChangesRestart": "Reinicie o servidor após salvar para aplicar as alterações do OIDC.",
|
||||||
|
"MessageAuthenticationSecurityMessage": "A autenticação foi aprimorada para maior segurança. Todos os usuários precisam fazer login novamente.",
|
||||||
"MessageBackupsDescription": "Backups incluem usuários, progresso dos usuários, detalhes dos itens da biblioteca, configurações do servidor e imagens armazenadas em <code>/metadata/items</code> & <code>/metadata/authors</code>. Backups <strong>não</strong> incluem quaisquer arquivos armazenados nas pastas da sua biblioteca.",
|
"MessageBackupsDescription": "Backups incluem usuários, progresso dos usuários, detalhes dos itens da biblioteca, configurações do servidor e imagens armazenadas em <code>/metadata/items</code> & <code>/metadata/authors</code>. Backups <strong>não</strong> incluem quaisquer arquivos armazenados nas pastas da sua biblioteca.",
|
||||||
|
"MessageBackupsLocationEditNote": "Observação: Atualizar o local de backup não moverá nem modificará os backups existentes",
|
||||||
|
"MessageBackupsLocationNoEditNote": "Observação: o local de backup é definido por meio de uma variável de ambiente e não pode ser alterado aqui.",
|
||||||
|
"MessageBackupsLocationPathEmpty": "O caminho do local de backup não pode ser vazio",
|
||||||
|
"MessageBatchEditPopulateMapDetailsAllHelp": "Preencha os campos habilitados com dados de todos os itens. Os campos com múltiplos valores serão mesclados",
|
||||||
|
"MessageBatchEditPopulateMapDetailsItemHelp": "Preencha os campos de detalhes do mapa habilitados com dados deste item",
|
||||||
"MessageBatchQuickMatchDescription": "Consulta Rápida tentará adicionar capas e metadados ausentes para os itens selecionados. Ative as opções abaixo para permitir que a Consulta Rápida sobrescreva capas e/ou metadados existentes.",
|
"MessageBatchQuickMatchDescription": "Consulta Rápida tentará adicionar capas e metadados ausentes para os itens selecionados. Ative as opções abaixo para permitir que a Consulta Rápida sobrescreva capas e/ou metadados existentes.",
|
||||||
"MessageBookshelfNoCollections": "Você ainda não criou coleções",
|
"MessageBookshelfNoCollections": "Você ainda não criou coleções",
|
||||||
|
"MessageBookshelfNoCollectionsHelp": "As coleções são públicas. Todos os usuários com acesso à biblioteca podem vê-las.",
|
||||||
"MessageBookshelfNoRSSFeeds": "Não existem feeds RSS abertos",
|
"MessageBookshelfNoRSSFeeds": "Não existem feeds RSS abertos",
|
||||||
"MessageBookshelfNoResultsForFilter": "Sem Resultados para o filtro \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Sem Resultados para o filtro \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Sem resultados para a consulta",
|
"MessageBookshelfNoResultsForQuery": "Sem resultados para a consulta",
|
||||||
"MessageBookshelfNoSeries": "Você não tem séries",
|
"MessageBookshelfNoSeries": "Você não tem séries",
|
||||||
|
"MessageBulkChapterPattern": "Quantos capítulos você gostaria de adicionar seguindo esse padrão de numeração?",
|
||||||
"MessageChapterEndIsAfter": "O final do capítulo está além do final do seu audiobook",
|
"MessageChapterEndIsAfter": "O final do capítulo está além do final do seu audiobook",
|
||||||
"MessageChapterErrorFirstNotZero": "O primeiro capítulo precisa começar no 0",
|
"MessageChapterErrorFirstNotZero": "O primeiro capítulo precisa começar no 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Tempo de início não é válido pois precisa ser menor do que a duração do audioboook",
|
"MessageChapterErrorStartGteDuration": "Tempo de início não é válido pois precisa ser menor do que a duração do audioboook",
|
||||||
"MessageChapterErrorStartLtPrev": "Tempo de início não é válido pois precisa ser igual ou maior que o tempo de início do capítulo anterior",
|
"MessageChapterErrorStartLtPrev": "Tempo de início não é válido pois precisa ser igual ou maior que o tempo de início do capítulo anterior",
|
||||||
"MessageChapterStartIsAfter": "Início do capítulo está além do final do seu audiobook",
|
"MessageChapterStartIsAfter": "Início do capítulo está além do final do seu audiobook",
|
||||||
|
"MessageChaptersNotFound": "Capítulos não encontrados",
|
||||||
"MessageCheckingCron": "Verificando o cron...",
|
"MessageCheckingCron": "Verificando o cron...",
|
||||||
"MessageConfirmCloseFeed": "Tem certeza de que deseja fechar esse feed?",
|
"MessageConfirmCloseFeed": "Tem certeza de que deseja fechar esse feed?",
|
||||||
|
"MessageConfirmDeleteApiKey": "Tem certeza de que deseja excluir a chave de API \"{0}\"?",
|
||||||
"MessageConfirmDeleteBackup": "Tem certeza de que deseja apagar o backup {0}?",
|
"MessageConfirmDeleteBackup": "Tem certeza de que deseja apagar o backup {0}?",
|
||||||
|
"MessageConfirmDeleteDevice": "Tem certeza de que deseja excluir o leitor de ebook \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Essa ação apagará o arquivo do seu sistema de arquivos. Tem certeza?",
|
"MessageConfirmDeleteFile": "Essa ação apagará o arquivo do seu sistema de arquivos. Tem certeza?",
|
||||||
"MessageConfirmDeleteLibrary": "Tem certeza de que deseja apagar a biblioteca \"{0}\" definitivamente?",
|
"MessageConfirmDeleteLibrary": "Tem certeza de que deseja apagar a biblioteca \"{0}\" definitivamente?",
|
||||||
"MessageConfirmDeleteLibraryItem": "Essa ação apagará o item da biblioteca do banco de dados e do seu sistema de arquivos. Tem certeza?",
|
"MessageConfirmDeleteLibraryItem": "Essa ação apagará o item da biblioteca do banco de dados e do seu sistema de arquivos. Tem certeza?",
|
||||||
"MessageConfirmDeleteLibraryItems": "Essa ação apagará {0} itens da biblioteca do banco de dados e do seu sistema de arquivos. Tem certeza?",
|
"MessageConfirmDeleteLibraryItems": "Essa ação apagará {0} itens da biblioteca do banco de dados e do seu sistema de arquivos. Tem certeza?",
|
||||||
|
"MessageConfirmDeleteMetadataProvider": "Tem certeza de que deseja excluir o provedor de metadados personalizado \"{0}\"?",
|
||||||
|
"MessageConfirmDeleteNotification": "Tem certeza de que deseja excluir esta notificação?",
|
||||||
"MessageConfirmDeleteSession": "Tem certeza de que deseja apagar essa sessão?",
|
"MessageConfirmDeleteSession": "Tem certeza de que deseja apagar essa sessão?",
|
||||||
|
"MessageConfirmEmbedMetadataInAudioFiles": "Tem certeza de que deseja incorporar metadados em arquivos de áudio {0}?",
|
||||||
"MessageConfirmForceReScan": "Tem certeza de que deseja forçar a nova verificação?",
|
"MessageConfirmForceReScan": "Tem certeza de que deseja forçar a nova verificação?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Tem certeza de que deseja marcar todos os episódios como concluídos?",
|
"MessageConfirmMarkAllEpisodesFinished": "Tem certeza de que deseja marcar todos os episódios como concluídos?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "Tem certeza de que deseja marcar todos os episódios como não concluídos?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "Tem certeza de que deseja marcar todos os episódios como não concluídos?",
|
||||||
|
"MessageConfirmMarkItemFinished": "Tem certeza de que deseja marcar \"{0}\" como concluído?",
|
||||||
|
"MessageConfirmMarkItemNotFinished": "Tem certeza de que deseja marcar \"{0}\" como não concluído?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Tem certeza de que deseja marcar todos os livros nesta série como concluídos?",
|
"MessageConfirmMarkSeriesFinished": "Tem certeza de que deseja marcar todos os livros nesta série como concluídos?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Tem certeza de que deseja marcar todos os livros nesta série como não concluídos?",
|
"MessageConfirmMarkSeriesNotFinished": "Tem certeza de que deseja marcar todos os livros nesta série como não concluídos?",
|
||||||
|
"MessageConfirmNotificationTestTrigger": "Acionar esta notificação com dados de teste?",
|
||||||
"MessageConfirmPurgeCache": "Apagar o cache irá apagar o diretório todo localizado em <code>/metadata/cache</code>. <br /><br />Tem certeza que deseja apagar o diretório de cache?",
|
"MessageConfirmPurgeCache": "Apagar o cache irá apagar o diretório todo localizado em <code>/metadata/cache</code>. <br /><br />Tem certeza que deseja apagar o diretório de cache?",
|
||||||
"MessageConfirmPurgeItemsCache": "Apagar o cache de itens irá apagar todo conteúdo da pasta <code>/metadata/cache/items</code>.<br />Tem certeza?",
|
"MessageConfirmPurgeItemsCache": "Apagar o cache de itens irá apagar todo conteúdo da pasta <code>/metadata/cache/items</code>.<br />Tem certeza?",
|
||||||
"MessageConfirmQuickEmbed": "Aviso! Inclusão rápida não fará backup dos seus arquivos de áudio. Verifique se tem um backup dos seus arquivos de áudio. <br><br>Quer continuar?",
|
"MessageConfirmQuickEmbed": "Aviso! Inclusão rápida não fará backup dos seus arquivos de áudio. Verifique se tem um backup dos seus arquivos de áudio. <br><br>Quer continuar?",
|
||||||
|
"MessageConfirmQuickMatchEpisodes": "A correspondência rápida de episódios sobrescreverá os detalhes se uma correspondência for encontrada. Somente os episódios sem correspondência serão atualizados. Tem certeza?",
|
||||||
"MessageConfirmReScanLibraryItems": "Tem certeza de que deseja uma nova verificação de {0} itens?",
|
"MessageConfirmReScanLibraryItems": "Tem certeza de que deseja uma nova verificação de {0} itens?",
|
||||||
"MessageConfirmRemoveAllChapters": "Tem certeza de que deseja remover todos os capítulos?",
|
"MessageConfirmRemoveAllChapters": "Tem certeza de que deseja remover todos os capítulos?",
|
||||||
"MessageConfirmRemoveAuthor": "Tem certeza de que deseja remover o autor \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Tem certeza de que deseja remover o autor \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Tem certeza de que deseja remover a coleção \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Tem certeza de que deseja remover a coleção \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Tem certeza de que deseja remover o episódio \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Tem certeza de que deseja remover o episódio \"{0}\"?",
|
||||||
|
"MessageConfirmRemoveEpisodeNote": "Observação: Isso não exclui o arquivo de áudio, a menos que você ative a opção \"Excluir arquivo permanentemente\"",
|
||||||
"MessageConfirmRemoveEpisodes": "Tem certeza de que deseja remover os {0} episódios?",
|
"MessageConfirmRemoveEpisodes": "Tem certeza de que deseja remover os {0} episódios?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Tem certeza de que deseja remover as {0} sessões de escuta?",
|
"MessageConfirmRemoveListeningSessions": "Tem certeza de que deseja remover as {0} sessões de escuta?",
|
||||||
|
"MessageConfirmRemoveMetadataFiles": "Tem certeza de que deseja remover todos os arquivos metadata.{0} nas pastas dos itens da sua biblioteca?",
|
||||||
"MessageConfirmRemoveNarrator": "Tem certeza de que deseja remover o narrador \"{0}\"?",
|
"MessageConfirmRemoveNarrator": "Tem certeza de que deseja remover o narrador \"{0}\"?",
|
||||||
"MessageConfirmRemovePlaylist": "Tem certeza de que deseja remover a sua lista de reprodução \"{0}\"?",
|
"MessageConfirmRemovePlaylist": "Tem certeza de que deseja remover a sua lista de reprodução \"{0}\"?",
|
||||||
"MessageConfirmRenameGenre": "Tem certeza de que deseja renomear o gênero \"{0}\" para \"{1}\" em todos os itens?",
|
"MessageConfirmRenameGenre": "Tem certeza de que deseja renomear o gênero \"{0}\" para \"{1}\" em todos os itens?",
|
||||||
|
|
@ -631,19 +802,27 @@
|
||||||
"MessageConfirmRenameTag": "Tem certeza de que deseja renomear a etiqueta \"{0}\" para \"{1}\" em todos os itens?",
|
"MessageConfirmRenameTag": "Tem certeza de que deseja renomear a etiqueta \"{0}\" para \"{1}\" em todos os itens?",
|
||||||
"MessageConfirmRenameTagMergeNote": "Aviso: Esta etiqueta já existe então elas serão combinadas.",
|
"MessageConfirmRenameTagMergeNote": "Aviso: Esta etiqueta já existe então elas serão combinadas.",
|
||||||
"MessageConfirmRenameTagWarning": "Atenção! Uma etiqueta com um nome semelhante já existe \"{0}\".",
|
"MessageConfirmRenameTagWarning": "Atenção! Uma etiqueta com um nome semelhante já existe \"{0}\".",
|
||||||
|
"MessageConfirmResetProgress": "Tem certeza de que deseja redefinir seu progresso?",
|
||||||
"MessageConfirmSendEbookToDevice": "Tem certeza de que deseja enviar {0} ebook(s) \"{1}\" para o dispositivo \"{2}\"?",
|
"MessageConfirmSendEbookToDevice": "Tem certeza de que deseja enviar {0} ebook(s) \"{1}\" para o dispositivo \"{2}\"?",
|
||||||
|
"MessageConfirmUnlinkOpenId": "Tem certeza de que deseja desvincular este usuário do OpenID?",
|
||||||
|
"MessageDaysListenedInTheLastYear": "{0} dias ouvidos no último ano",
|
||||||
"MessageDownloadingEpisode": "Realizando o download do episódio",
|
"MessageDownloadingEpisode": "Realizando o download do episódio",
|
||||||
"MessageDragFilesIntoTrackOrder": "Arraste os arquivos para ordenar as trilhas corretamente",
|
"MessageDragFilesIntoTrackOrder": "Arraste os arquivos para ordenar as trilhas corretamente",
|
||||||
|
"MessageEmbedFailed": "Falha ao incorporar!",
|
||||||
"MessageEmbedFinished": "Inclusão Concluída!",
|
"MessageEmbedFinished": "Inclusão Concluída!",
|
||||||
|
"MessageEmbedQueue": "Enfileirado para incorporação de metadados ({0} na fila)",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} Episódio(s) na fila de download",
|
"MessageEpisodesQueuedForDownload": "{0} Episódio(s) na fila de download",
|
||||||
"MessageEreaderDevices": "Para garantir a entrega dos ebooks, você pode precisar adicionar o endereço de email acima como um remetente válido para cada um dos dispositivos listados abaixo.",
|
"MessageEreaderDevices": "Para garantir a entrega dos ebooks, você pode precisar adicionar o endereço de email acima como um remetente válido para cada um dos dispositivos listados abaixo.",
|
||||||
"MessageFeedURLWillBe": "URL do Feed será {0}",
|
"MessageFeedURLWillBe": "URL do Feed será {0}",
|
||||||
"MessageFetching": "Buscando...",
|
"MessageFetching": "Buscando...",
|
||||||
"MessageForceReScanDescription": "verificará todos os arquivos, como uma verificação nova. Etiquetas ID3 de arquivos de áudio, arquivos OPF e arquivos de texto serão tratados como novos.",
|
"MessageForceReScanDescription": "verificará todos os arquivos, como uma verificação nova. Etiquetas ID3 de arquivos de áudio, arquivos OPF e arquivos de texto serão tratados como novos.",
|
||||||
|
"MessageHeatmapListeningTimeTooltip": "<strong>{0} ouvindo</strong> em {1}",
|
||||||
|
"MessageHeatmapNoListeningSessions": "Nenhuma sessão de reprodução em {0}",
|
||||||
"MessageImportantNotice": "Aviso Importante!",
|
"MessageImportantNotice": "Aviso Importante!",
|
||||||
"MessageInsertChapterBelow": "Inserir capítulo abaixo",
|
"MessageInsertChapterBelow": "Inserir capítulo abaixo",
|
||||||
"MessageItemsSelected": "{0} Itens Selecionados",
|
"MessageInvalidAsin": "ASIN inválido",
|
||||||
"MessageItemsUpdated": "{0} Itens Atualizados",
|
"MessageItemsSelected": "{0} itens selecionados",
|
||||||
|
"MessageItemsUpdated": "{0} itens atualizados",
|
||||||
"MessageJoinUsOn": "Junte-se a nós",
|
"MessageJoinUsOn": "Junte-se a nós",
|
||||||
"MessageLoading": "Carregando...",
|
"MessageLoading": "Carregando...",
|
||||||
"MessageLoadingFolders": "Carregando pastas...",
|
"MessageLoadingFolders": "Carregando pastas...",
|
||||||
|
|
@ -664,6 +843,7 @@
|
||||||
"MessageNoCollections": "Sem Coleções",
|
"MessageNoCollections": "Sem Coleções",
|
||||||
"MessageNoCoversFound": "Nenhuma Capa Encontrada",
|
"MessageNoCoversFound": "Nenhuma Capa Encontrada",
|
||||||
"MessageNoDescription": "Sem Descrições",
|
"MessageNoDescription": "Sem Descrições",
|
||||||
|
"MessageNoDevices": "Nenhum dispositivo",
|
||||||
"MessageNoDownloadsInProgress": "Não existem downloads em andamento",
|
"MessageNoDownloadsInProgress": "Não existem downloads em andamento",
|
||||||
"MessageNoDownloadsQueued": "Não existem itens na fila de download",
|
"MessageNoDownloadsQueued": "Não existem itens na fila de download",
|
||||||
"MessageNoEpisodeMatchesFound": "Não existem episódios correspondentes",
|
"MessageNoEpisodeMatchesFound": "Não existem episódios correspondentes",
|
||||||
|
|
@ -677,6 +857,7 @@
|
||||||
"MessageNoLogs": "Sem Logs",
|
"MessageNoLogs": "Sem Logs",
|
||||||
"MessageNoMediaProgress": "Sem Progresso de Mídia",
|
"MessageNoMediaProgress": "Sem Progresso de Mídia",
|
||||||
"MessageNoNotifications": "Sem Notificações",
|
"MessageNoNotifications": "Sem Notificações",
|
||||||
|
"MessageNoPodcastFeed": "Podcast inválido: Sem feed",
|
||||||
"MessageNoPodcastsFound": "Nenhum podcast encontrado",
|
"MessageNoPodcastsFound": "Nenhum podcast encontrado",
|
||||||
"MessageNoResults": "Sem resultados",
|
"MessageNoResults": "Sem resultados",
|
||||||
"MessageNoSearchResultsFor": "Sem resultados para \"{0}\"",
|
"MessageNoSearchResultsFor": "Sem resultados para \"{0}\"",
|
||||||
|
|
@ -685,12 +866,19 @@
|
||||||
"MessageNoTasksRunning": "Sem Tarefas em Execução",
|
"MessageNoTasksRunning": "Sem Tarefas em Execução",
|
||||||
"MessageNoUpdatesWereNecessary": "Nenhuma atualização é necessária",
|
"MessageNoUpdatesWereNecessary": "Nenhuma atualização é necessária",
|
||||||
"MessageNoUserPlaylists": "Você não tem listas de reprodução",
|
"MessageNoUserPlaylists": "Você não tem listas de reprodução",
|
||||||
|
"MessageNoUserPlaylistsHelp": "As listas de reprodução são privadas. Somente o usuário que as criou pode vê-las.",
|
||||||
"MessageNotYetImplemented": "Ainda não implementado",
|
"MessageNotYetImplemented": "Ainda não implementado",
|
||||||
|
"MessageOpmlPreviewNote": "Nota: esta é uma visualização do arquivo OPML processado. O título verdadeiro do podcast será recuperado do feed RSS.",
|
||||||
"MessageOr": "ou",
|
"MessageOr": "ou",
|
||||||
"MessagePauseChapter": "Pausar reprodução do capítulo",
|
"MessagePauseChapter": "Pausar reprodução do capítulo",
|
||||||
"MessagePlayChapter": "Escutar o início do capítulo",
|
"MessagePlayChapter": "Escutar o início do capítulo",
|
||||||
"MessagePlaylistCreateFromCollection": "Criar uma lista de reprodução a partir da coleção",
|
"MessagePlaylistCreateFromCollection": "Criar uma lista de reprodução a partir da coleção",
|
||||||
|
"MessagePleaseWait": "Por favor, aguarde...",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "Podcast não tem uma URL do feed RSS para ser usada na consulta",
|
"MessagePodcastHasNoRSSFeedForMatching": "Podcast não tem uma URL do feed RSS para ser usada na consulta",
|
||||||
|
"MessagePodcastSearchField": "Digite um termo para a busca ou a URL de um feed RSS",
|
||||||
|
"MessageQuickEmbedInProgress": "Incorporação rápida em andamento",
|
||||||
|
"MessageQuickEmbedQueue": "Enfileirado para incorporação rápida ({0} na fila)",
|
||||||
|
"MessageQuickMatchAllEpisodes": "Correspondência Rápida de Todos os Episódios",
|
||||||
"MessageQuickMatchDescription": "Preenche detalhes vazios do item & capa com o primeiro resultado de '{0}'. Não sobrescreve detalhes a não ser que a configuração 'Preferir metadados consultados' do servidor esteja ativa.",
|
"MessageQuickMatchDescription": "Preenche detalhes vazios do item & capa com o primeiro resultado de '{0}'. Não sobrescreve detalhes a não ser que a configuração 'Preferir metadados consultados' do servidor esteja ativa.",
|
||||||
"MessageRemoveChapter": "Remover capítulo",
|
"MessageRemoveChapter": "Remover capítulo",
|
||||||
"MessageRemoveEpisodes": "Remover {0} episódio(s)",
|
"MessageRemoveEpisodes": "Remover {0} episódio(s)",
|
||||||
|
|
@ -700,11 +888,52 @@
|
||||||
"MessageResetChaptersConfirm": "Tem certeza de que deseja resetar os capítulos e desfazer as alterações realizadas?",
|
"MessageResetChaptersConfirm": "Tem certeza de que deseja resetar os capítulos e desfazer as alterações realizadas?",
|
||||||
"MessageRestoreBackupConfirm": "Tem certeza de que deseja restaurar o backup criado em",
|
"MessageRestoreBackupConfirm": "Tem certeza de que deseja restaurar o backup criado em",
|
||||||
"MessageRestoreBackupWarning": "Restaurar um backup sobrescreverá totalmente o banco de dados localizado em /config e as imagens de capa em /metadata/items & /metadata/authors.<br /><br />Backups não alteram quaisquer arquivos nas pastas da sua biblioteca. Se a configuração do servidor de armazenar a arte da capa e os metadados nas pastas da sua biblioteca estiver ativa, esses itens não estão no backup e não serão sobrescritos.<br /><br />Todos os clientes usando o seu servidor serão atualizados automaticamente.",
|
"MessageRestoreBackupWarning": "Restaurar um backup sobrescreverá totalmente o banco de dados localizado em /config e as imagens de capa em /metadata/items & /metadata/authors.<br /><br />Backups não alteram quaisquer arquivos nas pastas da sua biblioteca. Se a configuração do servidor de armazenar a arte da capa e os metadados nas pastas da sua biblioteca estiver ativa, esses itens não estão no backup e não serão sobrescritos.<br /><br />Todos os clientes usando o seu servidor serão atualizados automaticamente.",
|
||||||
|
"MessageScheduleLibraryScanNote": "Para a maioria dos usuários, é recomendável deixar este recurso desativado e manter a configuração \"Monitorar automaticamente alterações na biblioteca\" ativada. Dessa forma alterações nas pastas da sua biblioteca serão automáticamente detectadas. Habilite essa opção se \"Monitorar automaticamente alterações na biblioteca\" não fucnionara para o seu sistema de arquivos (Como NFS).",
|
||||||
|
"MessageScheduleRunEveryWeekdayAtTime": "Executar a cada {0} às {1}",
|
||||||
"MessageSearchResultsFor": "Resultado da busca por",
|
"MessageSearchResultsFor": "Resultado da busca por",
|
||||||
"MessageSelected": "{0} selecionado(s)",
|
"MessageSelected": "{0} selecionado(s)",
|
||||||
|
"MessageSeriesSequenceCannotContainSpaces": "O identificador da série não pode conter espaços",
|
||||||
"MessageServerCouldNotBeReached": "Não foi possível estabelecer conexão com o servidor",
|
"MessageServerCouldNotBeReached": "Não foi possível estabelecer conexão com o servidor",
|
||||||
"MessageSetChaptersFromTracksDescription": "Definir os capítulos usando cada arquivo de áudio como um capítulo e o nome do arquivo como o título do capítulo",
|
"MessageSetChaptersFromTracksDescription": "Definir os capítulos usando cada arquivo de áudio como um capítulo e o nome do arquivo como o título do capítulo",
|
||||||
|
"MessageShareExpirationWillBe": "Válido até <strong>{0}</strong>",
|
||||||
|
"MessageShareExpiresIn": "Expira em {0}",
|
||||||
|
"MessageShareURLWillBe": "A URL de compartilhamento será <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "Iniciar a reprodução de \"{0}\" em {1}?",
|
"MessageStartPlaybackAtTime": "Iniciar a reprodução de \"{0}\" em {1}?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "O arquivo de áudio \"{0}\" não pode ser gravado",
|
||||||
|
"MessageTaskCanceledByUser": "Tarefa cancelada pelo usuário",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "Baixando episódio \"{0}\"",
|
||||||
|
"MessageTaskEmbeddingMetadata": "Incorporação de metadados",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "Incorporando metadados no audiolivro \"{0}\"",
|
||||||
|
"MessageTaskEncodingM4b": "Codificação M4B",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Codificação do audiolivro \"{0}\" em um único arquivo m4b",
|
||||||
|
"MessageTaskFailed": "Falhou",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "Falha ao fazer backup do arquivo de áudio \"{0}\"",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Falha ao criar o diretório de cache",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "Falha ao incorporar metadados no arquivo \"{0}\"",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "Falha ao mesclar arquivos de áudio",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "Falha ao mover o arquivo m4b",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "Falha ao gravar o arquivo de metadados",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "Livros correspondentes na biblioteca \"{0}\"",
|
||||||
|
"MessageTaskNoFilesToScan": "Não há arquivos para verificar",
|
||||||
|
"MessageTaskOpmlImport": "Importação OPML",
|
||||||
|
"MessageTaskOpmlImportDescription": "Criando podcasts a partir de feeds RSS {0}",
|
||||||
|
"MessageTaskOpmlImportFeed": "Feed de importação OPML",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "Importando o feed RSS \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "Não foi possível obter o feed do podcast",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "Criando podcast \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastExists": "O podcast já existe no caminho",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "Falha ao criar o podcast",
|
||||||
|
"MessageTaskOpmlImportFinished": "Adicionados {0} podcasts",
|
||||||
|
"MessageTaskOpmlParseFailed": "Falha ao analisar o arquivo OPML",
|
||||||
|
"MessageTaskOpmlParseFastFail": "Arquivo OPML inválido. Tag <opml> não encontrada OU tag <outline> não encontrada",
|
||||||
|
"MessageTaskOpmlParseNoneFound": "Nenhum feed encontrado no arquivo OPML",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} adicionado",
|
||||||
|
"MessageTaskScanItemsMissing": "{0} não encontrado",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} atualizado",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "Nenhuma alteração necessária",
|
||||||
|
"MessageTaskScanningFileChanges": "Verificando alterações de arquivo em \"{0}\"",
|
||||||
|
"MessageTaskScanningLibrary": "Analisando a biblioteca \"{0}\"",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "Diretório de destino sem permissão de escrita",
|
||||||
"MessageThinking": "Pensando...",
|
"MessageThinking": "Pensando...",
|
||||||
"MessageUploaderItemFailed": "Falha no upload",
|
"MessageUploaderItemFailed": "Falha no upload",
|
||||||
"MessageUploaderItemSuccess": "Upload realizado!",
|
"MessageUploaderItemSuccess": "Upload realizado!",
|
||||||
|
|
@ -722,43 +951,117 @@
|
||||||
"NoteUploaderFoldersWithMediaFiles": "Pastas com arquivos de mídia serão tratadas como itens de biblioteca distintos.",
|
"NoteUploaderFoldersWithMediaFiles": "Pastas com arquivos de mídia serão tratadas como itens de biblioteca distintos.",
|
||||||
"NoteUploaderOnlyAudioFiles": "Ao subir apenas arquivos de áudio, cada arquivo será tratado como um audiobook distinto.",
|
"NoteUploaderOnlyAudioFiles": "Ao subir apenas arquivos de áudio, cada arquivo será tratado como um audiobook distinto.",
|
||||||
"NoteUploaderUnsupportedFiles": "Arquivos não suportados serão ignorados. Ao escolher ou arrastar uma pasta, outros arquivos que não estão em uma pasta dentro do item serão ignorados.",
|
"NoteUploaderUnsupportedFiles": "Arquivos não suportados serão ignorados. Ao escolher ou arrastar uma pasta, outros arquivos que não estão em uma pasta dentro do item serão ignorados.",
|
||||||
|
"NotificationOnBackupCompletedDescription": "Acionado quando um backup é concluído",
|
||||||
|
"NotificationOnBackupFailedDescription": "Acionado quando um backup falha",
|
||||||
|
"NotificationOnEpisodeDownloadedDescription": "Acionado quando um episódio de podcast é baixado automaticamente",
|
||||||
|
"NotificationOnRSSFeedDisabledDescription": "Acionado quando os downloads automáticos de episódios são desativados devido a muitas tentativas falhas",
|
||||||
|
"NotificationOnRSSFeedFailedDescription": "Acionado quando a solicitação do feed RSS falha durante o download automático de um episódio",
|
||||||
|
"NotificationOnTestDescription": "Evento para testar o sistema de notificação",
|
||||||
|
"PlaceholderBulkChapterInput": "Digite o título de um capítulo ou use uma numeração (por exemplo, 'Episódio 1', 'Capítulo 10', '1.')",
|
||||||
"PlaceholderNewCollection": "Novo nome da coleção",
|
"PlaceholderNewCollection": "Novo nome da coleção",
|
||||||
"PlaceholderNewFolderPath": "Novo caminho para a pasta",
|
"PlaceholderNewFolderPath": "Novo caminho para a pasta",
|
||||||
"PlaceholderNewPlaylist": "Novo nome da lista de reprodução",
|
"PlaceholderNewPlaylist": "Novo nome da lista de reprodução",
|
||||||
"PlaceholderSearch": "Buscar..",
|
"PlaceholderSearch": "Buscar..",
|
||||||
"PlaceholderSearchEpisode": "Buscar Episódio..",
|
"PlaceholderSearchEpisode": "Buscar Episódio..",
|
||||||
|
"StatsAuthorsAdded": "autores adicionados",
|
||||||
|
"StatsBooksAdded": "livros adicionados",
|
||||||
|
"StatsBooksAdditional": "Algumas adições incluem…",
|
||||||
|
"StatsBooksFinished": "livros concluídos",
|
||||||
|
"StatsBooksFinishedThisYear": "Alguns livros foram finalizados este ano…",
|
||||||
|
"StatsBooksListenedTo": "livros ouvidos",
|
||||||
|
"StatsCollectionGrewTo": "Sua coleção de livros cresceu para…",
|
||||||
|
"StatsSessions": "sessões",
|
||||||
|
"StatsSpentListening": "tempo gasto ouvindo",
|
||||||
|
"StatsTopAuthor": "TOP AUTOR",
|
||||||
|
"StatsTopAuthors": "TOP AUTORES",
|
||||||
|
"StatsTopGenre": "PRINCIPAL GÊNERO",
|
||||||
|
"StatsTopGenres": "PRINCIPAL GÊNEROS",
|
||||||
|
"StatsTopMonth": "PRINCIPAL MÊS",
|
||||||
|
"StatsTopNarrator": "PRINCIPAL NARRADOR",
|
||||||
|
"StatsTopNarrators": "PRINCIPAIS NARRADORES",
|
||||||
|
"StatsTotalDuration": "Com duração total de…",
|
||||||
|
"StatsYearInReview": "RESUMO DO ANO",
|
||||||
"ToastAccountUpdateSuccess": "Conta atualizada",
|
"ToastAccountUpdateSuccess": "Conta atualizada",
|
||||||
|
"ToastAppriseUrlRequired": "É preciso digitar uma URL Apprise",
|
||||||
|
"ToastAsinRequired": "É necessário o ASIN",
|
||||||
"ToastAuthorImageRemoveSuccess": "Imagem do autor removida",
|
"ToastAuthorImageRemoveSuccess": "Imagem do autor removida",
|
||||||
|
"ToastAuthorNotFound": "Autor \"{0}\" não encontrado",
|
||||||
|
"ToastAuthorRemoveSuccess": "Autor removido",
|
||||||
|
"ToastAuthorSearchNotFound": "Autor não encontrado",
|
||||||
"ToastAuthorUpdateMerged": "Autor combinado",
|
"ToastAuthorUpdateMerged": "Autor combinado",
|
||||||
"ToastAuthorUpdateSuccess": "Autor atualizado",
|
"ToastAuthorUpdateSuccess": "Autor atualizado",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autor atualizado (nenhuma imagem encontrada)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autor atualizado (nenhuma imagem encontrada)",
|
||||||
|
"ToastBackupAppliedSuccess": "Backup aplicado",
|
||||||
"ToastBackupCreateFailed": "Falha ao criar backup",
|
"ToastBackupCreateFailed": "Falha ao criar backup",
|
||||||
"ToastBackupCreateSuccess": "Backup criado",
|
"ToastBackupCreateSuccess": "Backup criado",
|
||||||
"ToastBackupDeleteFailed": "Falha ao apagar backup",
|
"ToastBackupDeleteFailed": "Falha ao apagar backup",
|
||||||
"ToastBackupDeleteSuccess": "Backup apagado",
|
"ToastBackupDeleteSuccess": "Backup apagado",
|
||||||
|
"ToastBackupInvalidMaxKeep": "Número inválido de backups a serem mantidos",
|
||||||
|
"ToastBackupInvalidMaxSize": "Tamanho máximo de backup inválido",
|
||||||
"ToastBackupRestoreFailed": "Falha ao restaurar backup",
|
"ToastBackupRestoreFailed": "Falha ao restaurar backup",
|
||||||
"ToastBackupUploadFailed": "Falha no upload do backup",
|
"ToastBackupUploadFailed": "Falha no upload do backup",
|
||||||
"ToastBackupUploadSuccess": "Upload do backup realizado",
|
"ToastBackupUploadSuccess": "Upload do backup realizado",
|
||||||
|
"ToastBatchApplyDetailsToItemsSuccess": "Detalhes aplicados aos itens",
|
||||||
|
"ToastBatchDeleteFailed": "A exclusão em lote falhou",
|
||||||
|
"ToastBatchDeleteSuccess": "Exclusão em lote concluída com sucesso",
|
||||||
|
"ToastBatchQuickMatchFailed": "A correspondência rápida em lote falhou!",
|
||||||
|
"ToastBatchQuickMatchStarted": "Correspondência rápida em lote de {0} livros iniciada!",
|
||||||
"ToastBatchUpdateFailed": "Falha na atualização em lote",
|
"ToastBatchUpdateFailed": "Falha na atualização em lote",
|
||||||
"ToastBatchUpdateSuccess": "Atualização em lote realizada",
|
"ToastBatchUpdateSuccess": "Atualização em lote realizada",
|
||||||
"ToastBookmarkCreateFailed": "Falha ao criar marcador",
|
"ToastBookmarkCreateFailed": "Falha ao criar marcador",
|
||||||
"ToastBookmarkCreateSuccess": "Marcador adicionado",
|
"ToastBookmarkCreateSuccess": "Marcador adicionado",
|
||||||
"ToastBookmarkRemoveSuccess": "Marcador removido",
|
"ToastBookmarkRemoveSuccess": "Marcador removido",
|
||||||
|
"ToastBulkChapterInvalidCount": "Digite um número entre 1 e 150",
|
||||||
"ToastCachePurgeFailed": "Falha ao apagar o cache",
|
"ToastCachePurgeFailed": "Falha ao apagar o cache",
|
||||||
"ToastCachePurgeSuccess": "Cache apagado com sucesso",
|
"ToastCachePurgeSuccess": "Cache apagado com sucesso",
|
||||||
|
"ToastChapterLocked": "Capítulo bloqueado.",
|
||||||
|
"ToastChapterStartTimeAdjusted": "O horário de início do capítulo foi ajustado em {0} segundos",
|
||||||
|
"ToastChaptersAllLocked": "Todos os capítulos estão bloqueados. Desbloqueie alguns capítulos para alterar seus horários.",
|
||||||
"ToastChaptersHaveErrors": "Capítulos com erro",
|
"ToastChaptersHaveErrors": "Capítulos com erro",
|
||||||
|
"ToastChaptersInvalidShiftAmountLast": "Quantidade de deslocamento inválida. O horário de início do último capítulo ultrapassaria a duração deste audiolivro.",
|
||||||
|
"ToastChaptersInvalidShiftAmountStart": "Valor de deslocamento inválido. O primeiro capítulo teria duração zero ou negativa e seria sobrescrito pelo segundo capítulo. Aumente a duração inicial do segundo capítulo.",
|
||||||
"ToastChaptersMustHaveTitles": "Capítulos precisam ter títulos",
|
"ToastChaptersMustHaveTitles": "Capítulos precisam ter títulos",
|
||||||
|
"ToastChaptersRemoved": "Capítulos removidos",
|
||||||
|
"ToastChaptersUpdated": "Capítulos atualizados",
|
||||||
|
"ToastCollectionItemsAddFailed": "Falha ao adicionar itens à coleção",
|
||||||
"ToastCollectionRemoveSuccess": "Coleção removida",
|
"ToastCollectionRemoveSuccess": "Coleção removida",
|
||||||
"ToastCollectionUpdateSuccess": "Coleção atualizada",
|
"ToastCollectionUpdateSuccess": "Coleção atualizada",
|
||||||
|
"ToastConnectionNotAvailable": "Conexão indisponível. Tente novamente mais tarde",
|
||||||
|
"ToastCoverSearchFailed": "A busca pela capa falhou",
|
||||||
|
"ToastCoverUpdateFailed": "Falha na atualização da capa",
|
||||||
|
"ToastDateTimeInvalidOrIncomplete": "A data e a hora são inválidas ou estão incompletas",
|
||||||
"ToastDeleteFileFailed": "Falha ao apagar arquivo",
|
"ToastDeleteFileFailed": "Falha ao apagar arquivo",
|
||||||
"ToastDeleteFileSuccess": "Arquivo apagado",
|
"ToastDeleteFileSuccess": "Arquivo apagado",
|
||||||
|
"ToastDeviceAddFailed": "Falha ao adicionar dispositivo",
|
||||||
|
"ToastDeviceNameAlreadyExists": "Já existe um leitor de ebook com esse nome",
|
||||||
|
"ToastDeviceTestEmailFailed": "Falha ao enviar o e-mail de teste",
|
||||||
|
"ToastDeviceTestEmailSuccess": "E-mail de teste enviado",
|
||||||
|
"ToastEmailSettingsUpdateSuccess": "Configurações de e-mail atualizadas",
|
||||||
|
"ToastEncodeCancelFailed": "Falha ao cancelar a codificação",
|
||||||
|
"ToastEncodeCancelSucces": "Codificação cancelada",
|
||||||
|
"ToastEpisodeDownloadQueueClearFailed": "Falha ao limpar a fila",
|
||||||
|
"ToastEpisodeDownloadQueueClearSuccess": "Fila de downloads de episódios limpa",
|
||||||
|
"ToastEpisodeUpdateSuccess": "{0} episódios atualizados",
|
||||||
|
"ToastErrorCannotShare": "Não é possível compartilhar nativamente neste dispositivo",
|
||||||
|
"ToastFailedToCreate": "Falha ao criar",
|
||||||
|
"ToastFailedToDelete": "Falha ao excluir",
|
||||||
"ToastFailedToLoadData": "Falha ao carregar dados",
|
"ToastFailedToLoadData": "Falha ao carregar dados",
|
||||||
|
"ToastFailedToMatch": "Não foi possível encontrar correspondência",
|
||||||
|
"ToastFailedToShare": "Não foi possível compartilhar",
|
||||||
|
"ToastFailedToUpdate": "Falha ao atualizar",
|
||||||
|
"ToastInvalidImageUrl": "URL de imagem inválida",
|
||||||
|
"ToastInvalidMaxEpisodesToDownload": "Número máximo de episódios para baixar inválido",
|
||||||
|
"ToastInvalidUrl": "URL inválida",
|
||||||
|
"ToastInvalidUrls": "Um ou mais URLs são inválidos",
|
||||||
"ToastItemCoverUpdateSuccess": "Capa do item atualizada",
|
"ToastItemCoverUpdateSuccess": "Capa do item atualizada",
|
||||||
|
"ToastItemDeletedFailed": "Falha ao excluir o item",
|
||||||
|
"ToastItemDeletedSuccess": "Item excluído",
|
||||||
"ToastItemDetailsUpdateSuccess": "Detalhes do item atualizados",
|
"ToastItemDetailsUpdateSuccess": "Detalhes do item atualizados",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Falha ao marcar como Concluído",
|
"ToastItemMarkedAsFinishedFailed": "Falha ao marcar como Concluído",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Item marcado como Concluído",
|
"ToastItemMarkedAsFinishedSuccess": "Item marcado como Concluído",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Falha ao marcar como Não Concluído",
|
"ToastItemMarkedAsNotFinishedFailed": "Falha ao marcar como Não Concluído",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Item marcado como Não Concluído",
|
"ToastItemMarkedAsNotFinishedSuccess": "Item marcado como Não Concluído",
|
||||||
|
"ToastItemUpdateSuccess": "Item atualizado",
|
||||||
"ToastLibraryCreateFailed": "Falha ao criar biblioteca",
|
"ToastLibraryCreateFailed": "Falha ao criar biblioteca",
|
||||||
"ToastLibraryCreateSuccess": "Biblioteca \"{0}\" criada",
|
"ToastLibraryCreateSuccess": "Biblioteca \"{0}\" criada",
|
||||||
"ToastLibraryDeleteFailed": "Falha ao apagar biblioteca",
|
"ToastLibraryDeleteFailed": "Falha ao apagar biblioteca",
|
||||||
|
|
@ -766,28 +1069,97 @@
|
||||||
"ToastLibraryScanFailedToStart": "Falha ao iniciar verificação",
|
"ToastLibraryScanFailedToStart": "Falha ao iniciar verificação",
|
||||||
"ToastLibraryScanStarted": "Verificação da biblioteca iniciada",
|
"ToastLibraryScanStarted": "Verificação da biblioteca iniciada",
|
||||||
"ToastLibraryUpdateSuccess": "Biblioteca \"{0}\" atualizada",
|
"ToastLibraryUpdateSuccess": "Biblioteca \"{0}\" atualizada",
|
||||||
|
"ToastMatchAllAuthorsFailed": "Não foi possível encontrar correspondência para todos os autores",
|
||||||
|
"ToastMetadataFilesRemovedError": "Erro ao remover arquivos de metadados.{0}",
|
||||||
|
"ToastMetadataFilesRemovedNoneFound": "Nenhum arquivo metadados.{0} encontrado na biblioteca",
|
||||||
|
"ToastMetadataFilesRemovedNoneRemoved": "Nenhum arquivo metadados.{0} removido",
|
||||||
|
"ToastMetadataFilesRemovedSuccess": "{0} arquivos metadados.{1} removidos",
|
||||||
|
"ToastMustHaveAtLeastOnePath": "Deve ter pelo menos um caminho",
|
||||||
|
"ToastNameEmailRequired": "Nome e e-mail são obrigatórios",
|
||||||
|
"ToastNameRequired": "O nome é obrigatório",
|
||||||
|
"ToastNewApiKeyUserError": "É necessário selecionar um usuário",
|
||||||
|
"ToastNewEpisodesFound": "{0} novos episódios encontrados",
|
||||||
|
"ToastNewUserCreatedFailed": "Falha ao criar a conta: \"{0}\"",
|
||||||
|
"ToastNewUserCreatedSuccess": "Nova conta criada",
|
||||||
|
"ToastNewUserLibraryError": "É necessário selecionar pelo menos uma biblioteca",
|
||||||
|
"ToastNewUserPasswordError": "É obrigatória a criação de uma senha; somente o usuário root pode ter uma senha vazia",
|
||||||
|
"ToastNewUserTagError": "É necessário selecionar pelo menos uma etiqueta",
|
||||||
|
"ToastNewUserUsernameError": "Digite um nome de usuário",
|
||||||
|
"ToastNoNewEpisodesFound": "Nenhum episódio novo encontrado",
|
||||||
|
"ToastNoRSSFeed": "O Podcast não possui um feed RSS",
|
||||||
|
"ToastNoUpdatesNecessary": "Nenhuma atualização necessária",
|
||||||
|
"ToastNotificationCreateFailed": "Falha ao criar notificação",
|
||||||
|
"ToastNotificationDeleteFailed": "Falha ao excluir a notificação",
|
||||||
|
"ToastNotificationFailedMaximum": "O número máximo de tentativas falhas deve ser >= 0",
|
||||||
|
"ToastNotificationQueueMaximum": "A fila máxima de notificações deve ser >= 0",
|
||||||
|
"ToastNotificationSettingsUpdateSuccess": "Configurações de notificação atualizadas",
|
||||||
|
"ToastNotificationTestTriggerFailed": "Falha ao acionar a notificação de teste",
|
||||||
|
"ToastNotificationTestTriggerSuccess": "Notificação de teste acionada",
|
||||||
|
"ToastNotificationUpdateSuccess": "Notificação atualizada",
|
||||||
"ToastPlaylistCreateFailed": "Falha ao criar lista de reprodução",
|
"ToastPlaylistCreateFailed": "Falha ao criar lista de reprodução",
|
||||||
"ToastPlaylistCreateSuccess": "Lista de reprodução criada",
|
"ToastPlaylistCreateSuccess": "Lista de reprodução criada",
|
||||||
"ToastPlaylistRemoveSuccess": "Lista de reprodução removida",
|
"ToastPlaylistRemoveSuccess": "Lista de reprodução removida",
|
||||||
"ToastPlaylistUpdateSuccess": "Lista de reprodução atualizada",
|
"ToastPlaylistUpdateSuccess": "Lista de reprodução atualizada",
|
||||||
"ToastPodcastCreateFailed": "Falha ao criar podcast",
|
"ToastPodcastCreateFailed": "Falha ao criar podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast criado",
|
"ToastPodcastCreateSuccess": "Podcast criado",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Episódio atualizado",
|
||||||
|
"ToastPodcastGetFeedFailed": "Não foi possível obter o feed do podcast",
|
||||||
|
"ToastPodcastNoEpisodesInFeed": "Nenhum episódio encontrado no feed RSS",
|
||||||
|
"ToastPodcastNoRssFeed": "O podcast não possui um feed RSS",
|
||||||
|
"ToastProgressIsNotBeingSynced": "O progresso não está sendo sincronizado, reinicie a reprodução",
|
||||||
|
"ToastProviderCreatedFailed": "Falha ao adicionar o provedor",
|
||||||
|
"ToastProviderCreatedSuccess": "Novo provedor adicionado",
|
||||||
|
"ToastProviderNameAndUrlRequired": "Nome e URL obrigatórios",
|
||||||
|
"ToastProviderRemoveSuccess": "Fornecedor removido",
|
||||||
"ToastRSSFeedCloseFailed": "Falha ao fechar feed RSS",
|
"ToastRSSFeedCloseFailed": "Falha ao fechar feed RSS",
|
||||||
"ToastRSSFeedCloseSuccess": "Feed RSS fechado",
|
"ToastRSSFeedCloseSuccess": "Feed RSS fechado",
|
||||||
|
"ToastRemoveFailed": "Falha ao remover",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Falha ao remover item da coleção",
|
"ToastRemoveItemFromCollectionFailed": "Falha ao remover item da coleção",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "Item removido da coleção",
|
"ToastRemoveItemFromCollectionSuccess": "Item removido da coleção",
|
||||||
|
"ToastRemoveItemsWithIssuesFailed": "Falha ao remover itens da biblioteca com problemas",
|
||||||
|
"ToastRemoveItemsWithIssuesSuccess": "Itens da biblioteca com problemas foram removidos",
|
||||||
|
"ToastRenameFailed": "Falha ao renomear",
|
||||||
|
"ToastRescanFailed": "Falha na nova verificação para {0}",
|
||||||
|
"ToastRescanRemoved": "O item foi removido após a digitalização ser concluída",
|
||||||
|
"ToastRescanUpToDate": "A nova verificação completou o item, que estava atualizado",
|
||||||
|
"ToastRescanUpdated": "O item foi atualizado após a digitalização",
|
||||||
|
"ToastScanFailed": "Falha ao digitalizar o item da biblioteca",
|
||||||
|
"ToastSelectAtLeastOneUser": "Selecione pelo menos um usuário",
|
||||||
"ToastSendEbookToDeviceFailed": "Falha ao enviar ebook para dispositivo",
|
"ToastSendEbookToDeviceFailed": "Falha ao enviar ebook para dispositivo",
|
||||||
"ToastSendEbookToDeviceSuccess": "Ebook enviado para o dispositivo \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "Ebook enviado para o dispositivo \"{0}\"",
|
||||||
|
"ToastSeriesSubmitFailedSameName": "Não é possível adicionar duas séries com o mesmo nome",
|
||||||
"ToastSeriesUpdateFailed": "Falha ao atualizar série",
|
"ToastSeriesUpdateFailed": "Falha ao atualizar série",
|
||||||
"ToastSeriesUpdateSuccess": "Série atualizada",
|
"ToastSeriesUpdateSuccess": "Série atualizada",
|
||||||
"ToastServerSettingsUpdateSuccess": "Configurações do servidor atualizadas",
|
"ToastServerSettingsUpdateSuccess": "Configurações do servidor atualizadas",
|
||||||
|
"ToastSessionCloseFailed": "Falha ao encerrar a sessão",
|
||||||
"ToastSessionDeleteFailed": "Falha ao apagar sessão",
|
"ToastSessionDeleteFailed": "Falha ao apagar sessão",
|
||||||
"ToastSessionDeleteSuccess": "Sessão apagada",
|
"ToastSessionDeleteSuccess": "Sessão apagada",
|
||||||
|
"ToastSleepTimerDone": "Temporizador de sono concluído... zZzzZz",
|
||||||
|
"ToastSlugMustChange": "O slug possui caracteres inválidos",
|
||||||
|
"ToastSlugRequired": "Slug é necessário",
|
||||||
"ToastSocketConnected": "Socket conectado",
|
"ToastSocketConnected": "Socket conectado",
|
||||||
"ToastSocketDisconnected": "Socket desconectado",
|
"ToastSocketDisconnected": "Socket desconectado",
|
||||||
"ToastSocketFailedToConnect": "Falha na conexão do socket",
|
"ToastSocketFailedToConnect": "Falha na conexão do socket",
|
||||||
"ToastSortingPrefixesEmptyError": "É preciso ter pelo menos um prefixo de ordenação",
|
"ToastSortingPrefixesEmptyError": "É preciso ter pelo menos um prefixo de ordenação",
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Prefixos de ordenação atualizados ({0} item(ns))",
|
"ToastSortingPrefixesUpdateSuccess": "Prefixos de ordenação atualizados ({0} item(ns))",
|
||||||
|
"ToastTitleRequired": "É necessário ter um título",
|
||||||
|
"ToastUnknownError": "Erro desconhecido",
|
||||||
|
"ToastUnlinkOpenIdFailed": "Falha ao desvincular o usuário do OpenID",
|
||||||
|
"ToastUnlinkOpenIdSuccess": "Usuário desvinculado do OpenID",
|
||||||
|
"ToastUploaderFilepathExistsError": "O caminho de arquivo \"{0}\" já existe no servidor",
|
||||||
|
"ToastUploaderItemExistsInSubdirectoryError": "O item \"{0}\" está usando um subdiretório do caminho de upload.",
|
||||||
"ToastUserDeleteFailed": "Falha ao apagar usuário",
|
"ToastUserDeleteFailed": "Falha ao apagar usuário",
|
||||||
"ToastUserDeleteSuccess": "Usuário apagado"
|
"ToastUserDeleteSuccess": "Usuário apagado",
|
||||||
|
"ToastUserPasswordChangeSuccess": "Senha alterada com sucesso",
|
||||||
|
"ToastUserPasswordMismatch": "As senhas não coincidem",
|
||||||
|
"ToastUserPasswordMustChange": "A nova senha não pode ser igual à senha antiga",
|
||||||
|
"ToastUserRootRequireName": "É preciso entrar com um nome de usuário root",
|
||||||
|
"TooltipAddChapters": "Adicionar capítulo(s)",
|
||||||
|
"TooltipAddOneSecond": "Adicionar 1 segundo",
|
||||||
|
"TooltipAdjustChapterStart": "Clique para ajustar a hora de início",
|
||||||
|
"TooltipLockAllChapters": "Bloquear todos os capítulos",
|
||||||
|
"TooltipLockChapter": "Bloquear capítulo (Shift+clique para selecionar o intervalo)",
|
||||||
|
"TooltipSubtractOneSecond": "Subtrair 1 segundo",
|
||||||
|
"TooltipUnlockAllChapters": "Desbloqueie todos os capítulos",
|
||||||
|
"TooltipUnlockChapter": "Desbloquear capítulo (Shift + clique para selecionar o intervalo)"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1 +1,204 @@
|
||||||
{}
|
{
|
||||||
|
"ButtonAdd": "Adaugă",
|
||||||
|
"ButtonAddApiKey": "Adaugă cheia API",
|
||||||
|
"ButtonAddChapters": "Adaugă Capitole",
|
||||||
|
"ButtonAddDevice": "Adaugă Dispozitiv",
|
||||||
|
"ButtonAddLibrary": "Adaugă Librărie",
|
||||||
|
"ButtonAddPodcasts": "Adaugă Podcasturi",
|
||||||
|
"ButtonAddUser": "Adaugă Utilizator",
|
||||||
|
"ButtonAddYourFirstLibrary": "Adaugă prima librărie",
|
||||||
|
"ButtonApply": "Aplică",
|
||||||
|
"ButtonApplyChapters": "Aplică Capitole",
|
||||||
|
"ButtonAuthors": "Autori",
|
||||||
|
"ButtonBack": "Înapoi",
|
||||||
|
"ButtonCancel": "Anulează",
|
||||||
|
"ButtonClearFilter": "Șterge filtrul",
|
||||||
|
"ButtonClose": "Închide",
|
||||||
|
"ButtonCloseFeed": "Închide sursa",
|
||||||
|
"ButtonCloseSession": "Închide Sesiunea Curentă",
|
||||||
|
"ButtonCollections": "Colecții",
|
||||||
|
"ButtonCreate": "Creează",
|
||||||
|
"ButtonDelete": "Șterge",
|
||||||
|
"ButtonHide": "Ascunde",
|
||||||
|
"ButtonHome": "Acasă",
|
||||||
|
"ButtonIssues": "Erori",
|
||||||
|
"ButtonLatest": "Noutăți",
|
||||||
|
"ButtonLibrary": "Bibliotecă",
|
||||||
|
"ButtonOk": "OK",
|
||||||
|
"ButtonOpenFeed": "Vezi noutățile",
|
||||||
|
"ButtonPause": "Pauză",
|
||||||
|
"ButtonPlay": "Redă",
|
||||||
|
"ButtonPlaylists": "Liste",
|
||||||
|
"ButtonRead": "Citește",
|
||||||
|
"ButtonReadLess": "Mai puțin",
|
||||||
|
"ButtonReadMore": "Afișează mai mult",
|
||||||
|
"ButtonRemove": "Elimină",
|
||||||
|
"ButtonSave": "Salvează",
|
||||||
|
"ButtonSearch": "Caută",
|
||||||
|
"ButtonSeries": "Serii",
|
||||||
|
"ButtonSubmit": "Trimite",
|
||||||
|
"ButtonYes": "Da",
|
||||||
|
"HeaderAccount": "Cont",
|
||||||
|
"HeaderAdvanced": "Avansat",
|
||||||
|
"HeaderAudioTracks": "Înregistrări audio",
|
||||||
|
"HeaderChapters": "Capitole",
|
||||||
|
"HeaderCollection": "Colecție",
|
||||||
|
"HeaderCollectionItems": "Conținutul colecției",
|
||||||
|
"HeaderDetails": "Detalii",
|
||||||
|
"HeaderEbookFiles": "Ebook-uri",
|
||||||
|
"HeaderEpisodes": "Episoade",
|
||||||
|
"HeaderEreaderSettings": "Setări eReader",
|
||||||
|
"HeaderLatestEpisodes": "Episoade recente",
|
||||||
|
"HeaderLibraries": "Biblioteci",
|
||||||
|
"HeaderOpenRSSFeed": "Deschide flux RSS",
|
||||||
|
"HeaderPlaylist": "Listă de redare",
|
||||||
|
"HeaderPlaylistItems": "Conținut listă",
|
||||||
|
"HeaderRSSFeedGeneral": "Date RSS",
|
||||||
|
"HeaderRSSFeedIsOpen": "RSS activ",
|
||||||
|
"HeaderSettings": "Setări",
|
||||||
|
"HeaderSleepTimer": "Timer de somn",
|
||||||
|
"HeaderStatsMinutesListeningChart": "Minute ascultate (ultimele 7 zile)",
|
||||||
|
"HeaderStatsRecentSessions": "Sesiuni recente",
|
||||||
|
"HeaderTableOfContents": "Cuprins",
|
||||||
|
"HeaderYourStats": "Progresul tău",
|
||||||
|
"LabelAddToPlaylist": "Adaugă în listă",
|
||||||
|
"LabelAddedAt": "Adăugat la",
|
||||||
|
"LabelAddedDate": "Adăugat {0}",
|
||||||
|
"LabelAll": "Toate",
|
||||||
|
"LabelAuthor": "Autor",
|
||||||
|
"LabelAuthorFirstLast": "Autor (Prenume Nume)",
|
||||||
|
"LabelAuthorLastFirst": "Autor (Nume, Prenume)",
|
||||||
|
"LabelAuthors": "Autori",
|
||||||
|
"LabelAutoDownloadEpisodes": "Descarcă automat episoadele",
|
||||||
|
"LabelBooks": "Cărți",
|
||||||
|
"LabelChapters": "Capitole",
|
||||||
|
"LabelClosePlayer": "Închide playerul",
|
||||||
|
"LabelCollapseSeries": "Restrânge seriile",
|
||||||
|
"LabelComplete": "Finalizat",
|
||||||
|
"LabelContinueListening": "Ascultă în continuare",
|
||||||
|
"LabelContinueReading": "Continuă lectura",
|
||||||
|
"LabelContinueSeries": "Continuă seria",
|
||||||
|
"LabelDescription": "Descriere",
|
||||||
|
"LabelDiscover": "Descoperă",
|
||||||
|
"LabelDownload": "Descarcă",
|
||||||
|
"LabelDuration": "Durată",
|
||||||
|
"LabelEbook": "Carte electronică",
|
||||||
|
"LabelEbooks": "Cărți electronice",
|
||||||
|
"LabelEnable": "Activează",
|
||||||
|
"LabelEnd": "Sfârșit",
|
||||||
|
"LabelEndOfChapter": "Sfârșitul capitolului",
|
||||||
|
"LabelEpisode": "Episod",
|
||||||
|
"LabelExplicit": "Explicit",
|
||||||
|
"LabelFeedURL": "URL flux",
|
||||||
|
"LabelFile": "Fișier",
|
||||||
|
"LabelFileBirthtime": "Data creării fișierului",
|
||||||
|
"LabelFileModified": "Fișier modificat",
|
||||||
|
"LabelFilename": "Nume fișier",
|
||||||
|
"LabelFinished": "Finalizat",
|
||||||
|
"LabelFolder": "Dosar",
|
||||||
|
"LabelFontBoldness": "Grosimea fontului",
|
||||||
|
"LabelFontScale": "Mărimea fontului",
|
||||||
|
"LabelGenre": "Gen",
|
||||||
|
"LabelGenres": "Genuri",
|
||||||
|
"LabelHasEbook": "Are carte electronică",
|
||||||
|
"LabelHasSupplementaryEbook": "Are carte electronică suplimentară",
|
||||||
|
"LabelHost": "Gazdă",
|
||||||
|
"LabelInProgress": "În desfășurare",
|
||||||
|
"LabelIncomplete": "Incomplet",
|
||||||
|
"LabelLanguage": "Limbă",
|
||||||
|
"LabelLayout": "Aspect",
|
||||||
|
"LabelLayoutSinglePage": "Pagină unică",
|
||||||
|
"LabelLineSpacing": "Spațiere între rânduri",
|
||||||
|
"LabelListenAgain": "Ascultă din nou",
|
||||||
|
"LabelMediaType": "Tip media",
|
||||||
|
"LabelMissing": "Lipsă",
|
||||||
|
"LabelMore": "Mai multe",
|
||||||
|
"LabelMoreInfo": "Mai multe informații",
|
||||||
|
"LabelName": "Nume",
|
||||||
|
"LabelNarrator": "Narator",
|
||||||
|
"LabelNarrators": "Naratori",
|
||||||
|
"LabelNewestAuthors": "Autori noi",
|
||||||
|
"LabelNewestEpisodes": "Episoade noi",
|
||||||
|
"LabelNotFinished": "Nefinalizat",
|
||||||
|
"LabelNotStarted": "Neînceput",
|
||||||
|
"LabelNumberOfEpisodes": "# de Episoade",
|
||||||
|
"LabelPassword": "Parolă",
|
||||||
|
"LabelPath": "Cale",
|
||||||
|
"LabelPodcast": "Podcast",
|
||||||
|
"LabelPodcasts": "Podcasturi",
|
||||||
|
"LabelPreventIndexing": "Împiedică indexarea fluxului în directoarele iTunes și Google Podcasts",
|
||||||
|
"LabelProgress": "Progres",
|
||||||
|
"LabelPubDate": "Data publicării",
|
||||||
|
"LabelPublishYear": "Anul publicării",
|
||||||
|
"LabelPublishedDate": "Publicat la {0}",
|
||||||
|
"LabelRSSFeedCustomOwnerEmail": "Email personalizat al proprietarului",
|
||||||
|
"LabelRSSFeedCustomOwnerName": "Nume personalizat al proprietarului",
|
||||||
|
"LabelRSSFeedOpen": "Flux RSS deschis",
|
||||||
|
"LabelRSSFeedPreventIndexing": "Previne indexarea",
|
||||||
|
"LabelRSSFeedSlug": "Identificator flux RSS",
|
||||||
|
"LabelRandomly": "Aleatoriu",
|
||||||
|
"LabelRead": "Citește",
|
||||||
|
"LabelReadAgain": "Citește din nou",
|
||||||
|
"LabelRecentSeries": "Serii recente",
|
||||||
|
"LabelRecentlyAdded": "Adăugate recent",
|
||||||
|
"LabelSeason": "Sezon",
|
||||||
|
"LabelSeries": "Serii",
|
||||||
|
"LabelSetEbookAsPrimary": "Setează ca principală",
|
||||||
|
"LabelSetEbookAsSupplementary": "Setează ca suplimentară",
|
||||||
|
"LabelShowAll": "Afișează tot",
|
||||||
|
"LabelSize": "Dimensiune",
|
||||||
|
"LabelSleepTimer": "Timer de somn",
|
||||||
|
"LabelStart": "Pornește",
|
||||||
|
"LabelStatsBestDay": "Ziua cea mai bună",
|
||||||
|
"LabelStatsDailyAverage": "Medie zilnică",
|
||||||
|
"LabelStatsDays": "Zile",
|
||||||
|
"LabelStatsDaysListened": "Zile ascultate",
|
||||||
|
"LabelStatsInARow": "la rând",
|
||||||
|
"LabelStatsItemsFinished": "Finalizate",
|
||||||
|
"LabelStatsMinutes": "minute",
|
||||||
|
"LabelStatsMinutesListening": "Minute ascultate",
|
||||||
|
"LabelStatsWeekListening": "Ascultare săptămânală",
|
||||||
|
"LabelTag": "Etichetă",
|
||||||
|
"LabelTags": "Etichete",
|
||||||
|
"LabelTheme": "Temă",
|
||||||
|
"LabelThemeDark": "Întunecat",
|
||||||
|
"LabelThemeLight": "Deschis",
|
||||||
|
"LabelTimeRemaining": "{0} rămase",
|
||||||
|
"LabelTitle": "Titlu",
|
||||||
|
"LabelTracks": "Fișiere audio",
|
||||||
|
"LabelType": "Tip",
|
||||||
|
"LabelUnknown": "Necunoscut",
|
||||||
|
"LabelUser": "Utilizator",
|
||||||
|
"LabelUsername": "Nume utilizator",
|
||||||
|
"LabelYearReviewHide": "Ascunde retrospectiva anului",
|
||||||
|
"LabelYearReviewShow": "Vezi retrospectiva anului",
|
||||||
|
"LabelYourBookmarks": "Semnele tale de carte",
|
||||||
|
"LabelYourProgress": "Progresul tău",
|
||||||
|
"MessageDownloadingEpisode": "Se descarcă episodul",
|
||||||
|
"MessageEpisodesQueuedForDownload": "{0} episod(e) în așteptare pentru descărcare",
|
||||||
|
"MessageFeedURLWillBe": "Adresa fluxului va fi {0}",
|
||||||
|
"MessageFetching": "Se preiau date…",
|
||||||
|
"MessageLoading": "Se încarcă…",
|
||||||
|
"MessageMarkAsFinished": "Marchează ca finalizat",
|
||||||
|
"MessageNoBookmarks": "Fără semne de carte",
|
||||||
|
"MessageNoChapters": "Fără capitole",
|
||||||
|
"MessageNoCollections": "Fără colecții",
|
||||||
|
"MessageNoItems": "Niciun element",
|
||||||
|
"MessageNoItemsFound": "Nu s-au găsit elemente",
|
||||||
|
"MessageNoListeningSessions": "Nicio sesiune de ascultare",
|
||||||
|
"MessageNoPodcastsFound": "Nu s-au găsit podcasturi",
|
||||||
|
"MessageNoUpdatesWereNecessary": "Nu au fost necesare actualizări",
|
||||||
|
"MessageNoUserPlaylists": "Nu ai nicio listă de redare",
|
||||||
|
"MessagePodcastSearchField": "Introdu termenul de căutare sau URL-ul unui flux RSS",
|
||||||
|
"MessageReportBugsAndContribute": "Raportează erori, cere funcții noi și contribuie pe",
|
||||||
|
"NoteRSSFeedPodcastAppsHttps": "Atenționare: Majoritatea aplicațiilor de podcast cer ca URL-ul fluxului RSS să folosească HTTPS",
|
||||||
|
"NoteRSSFeedPodcastAppsPubDate": "Atenționare: unul sau mai multe episoade nu au data publicării (Pub Date). Unele aplicații de podcast o cer.",
|
||||||
|
"ToastBookmarkCreateFailed": "Nu s-a putut crea semnul de carte",
|
||||||
|
"ToastItemMarkedAsFinishedFailed": "Nu s-a putut marca drept finalizat",
|
||||||
|
"ToastItemMarkedAsNotFinishedFailed": "Nu s-a putut marca drept nefinalizat",
|
||||||
|
"ToastPlaylistCreateFailed": "Nu s-a putut crea lista de redare",
|
||||||
|
"ToastPodcastCreateFailed": "Nu s-a putut crea podcastul",
|
||||||
|
"ToastPodcastCreateSuccess": "Podcast creat cu succes",
|
||||||
|
"ToastRSSFeedCloseFailed": "Nu s-a putut închide fluxul RSS",
|
||||||
|
"ToastRSSFeedCloseSuccess": "Flux RSS închis"
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,12 +17,12 @@
|
||||||
"ButtonCancel": "Отмена",
|
"ButtonCancel": "Отмена",
|
||||||
"ButtonCancelEncode": "Отменить кодирование",
|
"ButtonCancelEncode": "Отменить кодирование",
|
||||||
"ButtonChangeRootPassword": "Поменять мастер пароль",
|
"ButtonChangeRootPassword": "Поменять мастер пароль",
|
||||||
"ButtonCheckAndDownloadNewEpisodes": "Проверка и Загрузка новых эпизодов",
|
"ButtonCheckAndDownloadNewEpisodes": "Скачать новые выпуски",
|
||||||
"ButtonChooseAFolder": "Выбор папки",
|
"ButtonChooseAFolder": "Выбор папки",
|
||||||
"ButtonChooseFiles": "Выбор файлов",
|
"ButtonChooseFiles": "Выбор файлов",
|
||||||
"ButtonClearFilter": "Очистить фильтр",
|
"ButtonClearFilter": "Очистить фильтр",
|
||||||
"ButtonClose": "Закрыть",
|
"ButtonClose": "Закрыть",
|
||||||
"ButtonCloseFeed": "Закрыть канал",
|
"ButtonCloseFeed": "Закрыть ленту",
|
||||||
"ButtonCloseSession": "Закрыть открытый сеанс",
|
"ButtonCloseSession": "Закрыть открытый сеанс",
|
||||||
"ButtonCollections": "Коллекции",
|
"ButtonCollections": "Коллекции",
|
||||||
"ButtonConfigureScanner": "Конфигурация сканера",
|
"ButtonConfigureScanner": "Конфигурация сканера",
|
||||||
|
|
@ -56,7 +56,7 @@
|
||||||
"ButtonNextChapter": "Следующая глава",
|
"ButtonNextChapter": "Следующая глава",
|
||||||
"ButtonNextItemInQueue": "Следующий элемент в очереди",
|
"ButtonNextItemInQueue": "Следующий элемент в очереди",
|
||||||
"ButtonOk": "Ок",
|
"ButtonOk": "Ок",
|
||||||
"ButtonOpenFeed": "Открыть канал",
|
"ButtonOpenFeed": "Открыть ленту",
|
||||||
"ButtonOpenManager": "Открыть менеджер",
|
"ButtonOpenManager": "Открыть менеджер",
|
||||||
"ButtonPause": "Пауза",
|
"ButtonPause": "Пауза",
|
||||||
"ButtonPlay": "Слушать",
|
"ButtonPlay": "Слушать",
|
||||||
|
|
@ -127,6 +127,7 @@
|
||||||
"HeaderAudiobookTools": "Инструменты файлов аудиокниг",
|
"HeaderAudiobookTools": "Инструменты файлов аудиокниг",
|
||||||
"HeaderAuthentication": "Аутентификация",
|
"HeaderAuthentication": "Аутентификация",
|
||||||
"HeaderBackups": "Бэкапы",
|
"HeaderBackups": "Бэкапы",
|
||||||
|
"HeaderBulkChapterModal": "Добавление нескольких глав",
|
||||||
"HeaderChangePassword": "Изменить пароль",
|
"HeaderChangePassword": "Изменить пароль",
|
||||||
"HeaderChapters": "Главы",
|
"HeaderChapters": "Главы",
|
||||||
"HeaderChooseAFolder": "Выберите папку",
|
"HeaderChooseAFolder": "Выберите папку",
|
||||||
|
|
@ -141,7 +142,7 @@
|
||||||
"HeaderEbookFiles": "Файлы e-книг",
|
"HeaderEbookFiles": "Файлы e-книг",
|
||||||
"HeaderEmail": "E-mail",
|
"HeaderEmail": "E-mail",
|
||||||
"HeaderEmailSettings": "Настройки Email",
|
"HeaderEmailSettings": "Настройки Email",
|
||||||
"HeaderEpisodes": "Эпизоды",
|
"HeaderEpisodes": "Выпуски",
|
||||||
"HeaderEreaderDevices": "Устройства E-книга",
|
"HeaderEreaderDevices": "Устройства E-книга",
|
||||||
"HeaderEreaderSettings": "Настройки E-ридера",
|
"HeaderEreaderSettings": "Настройки E-ридера",
|
||||||
"HeaderFiles": "Файлы",
|
"HeaderFiles": "Файлы",
|
||||||
|
|
@ -150,7 +151,7 @@
|
||||||
"HeaderItemFiles": "Файлы элемента",
|
"HeaderItemFiles": "Файлы элемента",
|
||||||
"HeaderItemMetadataUtils": "Утилиты",
|
"HeaderItemMetadataUtils": "Утилиты",
|
||||||
"HeaderLastListeningSession": "Последний сеанс прослушивания",
|
"HeaderLastListeningSession": "Последний сеанс прослушивания",
|
||||||
"HeaderLatestEpisodes": "Последние эпизоды",
|
"HeaderLatestEpisodes": "Последние выпуски",
|
||||||
"HeaderLibraries": "Библиотеки",
|
"HeaderLibraries": "Библиотеки",
|
||||||
"HeaderLibraryFiles": "Файлы библиотеки",
|
"HeaderLibraryFiles": "Файлы библиотеки",
|
||||||
"HeaderLibraryStats": "Статистика библиотеки",
|
"HeaderLibraryStats": "Статистика библиотеки",
|
||||||
|
|
@ -172,7 +173,7 @@
|
||||||
"HeaderNotifications": "Уведомления",
|
"HeaderNotifications": "Уведомления",
|
||||||
"HeaderOpenIDConnectAuthentication": "Аутентификация OpenID Connect",
|
"HeaderOpenIDConnectAuthentication": "Аутентификация OpenID Connect",
|
||||||
"HeaderOpenListeningSessions": "Открытые сеансы прослушивания",
|
"HeaderOpenListeningSessions": "Открытые сеансы прослушивания",
|
||||||
"HeaderOpenRSSFeed": "Открыть RSS-канал",
|
"HeaderOpenRSSFeed": "Открыть RSS-ленту",
|
||||||
"HeaderOtherFiles": "Другие файлы",
|
"HeaderOtherFiles": "Другие файлы",
|
||||||
"HeaderPasswordAuthentication": "Аутентификация по паролю",
|
"HeaderPasswordAuthentication": "Аутентификация по паролю",
|
||||||
"HeaderPermissions": "Разрешения",
|
"HeaderPermissions": "Разрешения",
|
||||||
|
|
@ -184,13 +185,13 @@
|
||||||
"HeaderPresets": "Пресеты",
|
"HeaderPresets": "Пресеты",
|
||||||
"HeaderPreviewCover": "Предпросмотр обложки",
|
"HeaderPreviewCover": "Предпросмотр обложки",
|
||||||
"HeaderRSSFeedGeneral": "Сведения о RSS",
|
"HeaderRSSFeedGeneral": "Сведения о RSS",
|
||||||
"HeaderRSSFeedIsOpen": "RSS-канал открыт",
|
"HeaderRSSFeedIsOpen": "RSS-лента открыта",
|
||||||
"HeaderRSSFeeds": "RSS-каналы",
|
"HeaderRSSFeeds": "RSS-ленты",
|
||||||
"HeaderRemoveEpisode": "Удалить эпизод",
|
"HeaderRemoveEpisode": "Удалить выпуск",
|
||||||
"HeaderRemoveEpisodes": "Удалить {0} эпизодов",
|
"HeaderRemoveEpisodes": "Удалить {0} выпусков",
|
||||||
"HeaderSavedMediaProgress": "Прогресс медиа сохранен",
|
"HeaderSavedMediaProgress": "Прогресс медиа сохранен",
|
||||||
"HeaderSchedule": "Планировщик",
|
"HeaderSchedule": "Планировщик",
|
||||||
"HeaderScheduleEpisodeDownloads": "Запланируйте автоматическую загрузку эпизодов",
|
"HeaderScheduleEpisodeDownloads": "Запланировать автоматическое скачивание выпусков",
|
||||||
"HeaderScheduleLibraryScans": "Планировщик автоматического сканирования библиотеки",
|
"HeaderScheduleLibraryScans": "Планировщик автоматического сканирования библиотеки",
|
||||||
"HeaderSession": "Сеансы",
|
"HeaderSession": "Сеансы",
|
||||||
"HeaderSetBackupSchedule": "Установить планировщик бэкапов",
|
"HeaderSetBackupSchedule": "Установить планировщик бэкапов",
|
||||||
|
|
@ -236,7 +237,7 @@
|
||||||
"LabelAddedDate": "Добавлено {0}",
|
"LabelAddedDate": "Добавлено {0}",
|
||||||
"LabelAdminUsersOnly": "Только для пользователей с правами администратора",
|
"LabelAdminUsersOnly": "Только для пользователей с правами администратора",
|
||||||
"LabelAll": "Все",
|
"LabelAll": "Все",
|
||||||
"LabelAllEpisodesDownloaded": "Все эпизоды загружены",
|
"LabelAllEpisodesDownloaded": "Все выпуски скачаны",
|
||||||
"LabelAllUsers": "Все пользователи",
|
"LabelAllUsers": "Все пользователи",
|
||||||
"LabelAllUsersExcludingGuests": "Все пользователи, кроме гостей",
|
"LabelAllUsersExcludingGuests": "Все пользователи, кроме гостей",
|
||||||
"LabelAllUsersIncludingGuests": "Все пользователи, включая гостей",
|
"LabelAllUsersIncludingGuests": "Все пользователи, включая гостей",
|
||||||
|
|
@ -254,7 +255,7 @@
|
||||||
"LabelAuthorFirstLast": "Автор (Имя Фамилия)",
|
"LabelAuthorFirstLast": "Автор (Имя Фамилия)",
|
||||||
"LabelAuthorLastFirst": "Автор (Фамилия, Имя)",
|
"LabelAuthorLastFirst": "Автор (Фамилия, Имя)",
|
||||||
"LabelAuthors": "Авторы",
|
"LabelAuthors": "Авторы",
|
||||||
"LabelAutoDownloadEpisodes": "Скачивать эпизоды автоматически",
|
"LabelAutoDownloadEpisodes": "Скачивать выпуски автоматически",
|
||||||
"LabelAutoFetchMetadata": "Автоматическое извлечение метаданных",
|
"LabelAutoFetchMetadata": "Автоматическое извлечение метаданных",
|
||||||
"LabelAutoFetchMetadataHelp": "Извлекает метаданные для названия, автора и серии для упрощения загрузки. После загрузки может потребоваться сопоставление дополнительных метаданных.",
|
"LabelAutoFetchMetadataHelp": "Извлекает метаданные для названия, автора и серии для упрощения загрузки. После загрузки может потребоваться сопоставление дополнительных метаданных.",
|
||||||
"LabelAutoLaunch": "Автозапуск",
|
"LabelAutoLaunch": "Автозапуск",
|
||||||
|
|
@ -276,7 +277,7 @@
|
||||||
"LabelButtonText": "Текст кнопки",
|
"LabelButtonText": "Текст кнопки",
|
||||||
"LabelByAuthor": "{0}",
|
"LabelByAuthor": "{0}",
|
||||||
"LabelChangePassword": "Изменить пароль",
|
"LabelChangePassword": "Изменить пароль",
|
||||||
"LabelChannels": "Каналы",
|
"LabelChannels": "Ленты",
|
||||||
"LabelChapterCount": "{0} Главы",
|
"LabelChapterCount": "{0} Главы",
|
||||||
"LabelChapterTitle": "Название главы",
|
"LabelChapterTitle": "Название главы",
|
||||||
"LabelChapters": "Главы",
|
"LabelChapters": "Главы",
|
||||||
|
|
@ -308,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Удалить из файловой системы (снимите флажок, чтобы удалить только из базы данных)",
|
"LabelDeleteFromFileSystemCheckbox": "Удалить из файловой системы (снимите флажок, чтобы удалить только из базы данных)",
|
||||||
"LabelDescription": "Описание",
|
"LabelDescription": "Описание",
|
||||||
"LabelDeselectAll": "Снять выделение",
|
"LabelDeselectAll": "Снять выделение",
|
||||||
|
"LabelDetectedPattern": "Обнаруженный образец:",
|
||||||
"LabelDevice": "Устройство",
|
"LabelDevice": "Устройство",
|
||||||
"LabelDeviceInfo": "Информация об устройстве",
|
"LabelDeviceInfo": "Информация об устройстве",
|
||||||
"LabelDeviceIsAvailableTo": "Устройство доступно для...",
|
"LabelDeviceIsAvailableTo": "Устройство доступно для...",
|
||||||
|
|
@ -316,7 +318,7 @@
|
||||||
"LabelDiscFromMetadata": "Диск из Метаданных",
|
"LabelDiscFromMetadata": "Диск из Метаданных",
|
||||||
"LabelDiscover": "Не начато",
|
"LabelDiscover": "Не начато",
|
||||||
"LabelDownload": "Скачать",
|
"LabelDownload": "Скачать",
|
||||||
"LabelDownloadNEpisodes": "Скачать {0} эпизодов",
|
"LabelDownloadNEpisodes": "Скачать {0} выпусков",
|
||||||
"LabelDownloadable": "Загружаемый",
|
"LabelDownloadable": "Загружаемый",
|
||||||
"LabelDuration": "Длительность",
|
"LabelDuration": "Длительность",
|
||||||
"LabelDurationComparisonExactMatch": "(точное совпадение)",
|
"LabelDurationComparisonExactMatch": "(точное совпадение)",
|
||||||
|
|
@ -330,7 +332,7 @@
|
||||||
"LabelEmailSettingsFromAddress": "Адрес От",
|
"LabelEmailSettingsFromAddress": "Адрес От",
|
||||||
"LabelEmailSettingsRejectUnauthorized": "Отклонение неавторизованных сертификатов",
|
"LabelEmailSettingsRejectUnauthorized": "Отклонение неавторизованных сертификатов",
|
||||||
"LabelEmailSettingsRejectUnauthorizedHelp": "Отключение проверки SSL-сертификата может подвергнуть ваше подключение рискам безопасности, таким как атаки типа \"man-in-the-middle\". Отключайте эту опцию только в том случае, если вы понимаете последствия и доверяете почтовому серверу, к которому подключаетесь.",
|
"LabelEmailSettingsRejectUnauthorizedHelp": "Отключение проверки SSL-сертификата может подвергнуть ваше подключение рискам безопасности, таким как атаки типа \"man-in-the-middle\". Отключайте эту опцию только в том случае, если вы понимаете последствия и доверяете почтовому серверу, к которому подключаетесь.",
|
||||||
"LabelEmailSettingsSecure": "Безопасность",
|
"LabelEmailSettingsSecure": "Безопасно",
|
||||||
"LabelEmailSettingsSecureHelp": "Если значение истинно, то соединение будет использовать TLS при подключении к серверу. Если значение ложно, то TLS будет использован, если сервер поддерживает расширение STARTTLS. В большинстве случаев установите это значение в истину, если вы подключаетесь к порту 465. Для порта 587 или 25 оставьте значение ложным. (из nodemailer.com/smtp/#authentication)",
|
"LabelEmailSettingsSecureHelp": "Если значение истинно, то соединение будет использовать TLS при подключении к серверу. Если значение ложно, то TLS будет использован, если сервер поддерживает расширение STARTTLS. В большинстве случаев установите это значение в истину, если вы подключаетесь к порту 465. Для порта 587 или 25 оставьте значение ложным. (из nodemailer.com/smtp/#authentication)",
|
||||||
"LabelEmailSettingsTestAddress": "Тестовый адрес",
|
"LabelEmailSettingsTestAddress": "Тестовый адрес",
|
||||||
"LabelEmbeddedCover": "Встроенная обложка",
|
"LabelEmbeddedCover": "Встроенная обложка",
|
||||||
|
|
@ -346,13 +348,13 @@
|
||||||
"LabelEncodingWatcherDisabled": "Если у вас отключено наблюдение за папкой, вам нужно будет повторно пересканировать эту аудиокнигу.",
|
"LabelEncodingWatcherDisabled": "Если у вас отключено наблюдение за папкой, вам нужно будет повторно пересканировать эту аудиокнигу.",
|
||||||
"LabelEnd": "Конец",
|
"LabelEnd": "Конец",
|
||||||
"LabelEndOfChapter": "Конец главы",
|
"LabelEndOfChapter": "Конец главы",
|
||||||
"LabelEpisode": "Эпизод",
|
"LabelEpisode": "Выпуск",
|
||||||
"LabelEpisodeNotLinkedToRssFeed": "Эпизод, не связанный с RSS-каналом",
|
"LabelEpisodeNotLinkedToRssFeed": "Выпуск, не связанный с RSS-лентой",
|
||||||
"LabelEpisodeNumber": "Эпизод #{0}",
|
"LabelEpisodeNumber": "Выпуск #{0}",
|
||||||
"LabelEpisodeTitle": "Имя эпизода",
|
"LabelEpisodeTitle": "Название выпуска",
|
||||||
"LabelEpisodeType": "Тип эпизода",
|
"LabelEpisodeType": "Тип выпуска",
|
||||||
"LabelEpisodeUrlFromRssFeed": "URL-адрес эпизода из RSS-ленты",
|
"LabelEpisodeUrlFromRssFeed": "URL-адрес выпуска из RSS-ленты",
|
||||||
"LabelEpisodes": "Эпизодов",
|
"LabelEpisodes": "Выпуски",
|
||||||
"LabelEpisodic": "Эпизодический",
|
"LabelEpisodic": "Эпизодический",
|
||||||
"LabelExample": "Пример",
|
"LabelExample": "Пример",
|
||||||
"LabelExpandSeries": "Развернуть серию",
|
"LabelExpandSeries": "Развернуть серию",
|
||||||
|
|
@ -365,7 +367,7 @@
|
||||||
"LabelExplicitChecked": "18+ (отмечено)",
|
"LabelExplicitChecked": "18+ (отмечено)",
|
||||||
"LabelExplicitUnchecked": "+18 (не отмечено)",
|
"LabelExplicitUnchecked": "+18 (не отмечено)",
|
||||||
"LabelExportOPML": "Экспорт OPML",
|
"LabelExportOPML": "Экспорт OPML",
|
||||||
"LabelFeedURL": "URL канала",
|
"LabelFeedURL": "URL-адрес ленты",
|
||||||
"LabelFetchingMetadata": "Извлечение метаданных",
|
"LabelFetchingMetadata": "Извлечение метаданных",
|
||||||
"LabelFile": "Файл",
|
"LabelFile": "Файл",
|
||||||
"LabelFileBirthtime": "Дата создания",
|
"LabelFileBirthtime": "Дата создания",
|
||||||
|
|
@ -374,13 +376,14 @@
|
||||||
"LabelFileModifiedDate": "Изменено {0}",
|
"LabelFileModifiedDate": "Изменено {0}",
|
||||||
"LabelFilename": "Имя файла",
|
"LabelFilename": "Имя файла",
|
||||||
"LabelFilterByUser": "Фильтр по пользователю",
|
"LabelFilterByUser": "Фильтр по пользователю",
|
||||||
"LabelFindEpisodes": "Найти эпизоды",
|
"LabelFindEpisodes": "Найти выпуски",
|
||||||
"LabelFinished": "Закончен",
|
"LabelFinished": "Закончен",
|
||||||
|
"LabelFinishedDate": "Завершено {0}",
|
||||||
"LabelFolder": "Папка",
|
"LabelFolder": "Папка",
|
||||||
"LabelFolders": "Папки",
|
"LabelFolders": "Папки",
|
||||||
"LabelFontBold": "Жирный",
|
"LabelFontBold": "Жирный",
|
||||||
"LabelFontBoldness": "Жирность шрифта",
|
"LabelFontBoldness": "Жирность шрифта",
|
||||||
"LabelFontFamily": "Семейство шрифтов",
|
"LabelFontFamily": "Семейство шрифта",
|
||||||
"LabelFontItalic": "Курсив",
|
"LabelFontItalic": "Курсив",
|
||||||
"LabelFontScale": "Масштаб шрифта",
|
"LabelFontScale": "Масштаб шрифта",
|
||||||
"LabelFontStrikethrough": "Зачеркнутый",
|
"LabelFontStrikethrough": "Зачеркнутый",
|
||||||
|
|
@ -433,22 +436,24 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Нет {0}",
|
"LabelLibraryFilterSublistEmpty": "Нет {0}",
|
||||||
"LabelLibraryItem": "Элемент библиотеки",
|
"LabelLibraryItem": "Элемент библиотеки",
|
||||||
"LabelLibraryName": "Имя библиотеки",
|
"LabelLibraryName": "Имя библиотеки",
|
||||||
"LabelLibrarySortByProgress": "Прогресс обновлён",
|
"LabelLibrarySortByProgress": "Прогресс: Последнее обновление",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Прогресс: Завершено",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Прогресс: Начато",
|
||||||
"LabelLimit": "Лимит",
|
"LabelLimit": "Лимит",
|
||||||
"LabelLineSpacing": "Межстрочный интервал",
|
"LabelLineSpacing": "Межстрочный интервал",
|
||||||
"LabelListenAgain": "Послушать снова",
|
"LabelListenAgain": "Послушать снова",
|
||||||
"LabelLogLevelDebug": "Debug",
|
"LabelLogLevelDebug": "Debug",
|
||||||
"LabelLogLevelInfo": "Info",
|
"LabelLogLevelInfo": "Info",
|
||||||
"LabelLogLevelWarn": "Предупреждение",
|
"LabelLogLevelWarn": "Предупреждение",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Искать новые эпизоды после этой даты",
|
"LabelLookForNewEpisodesAfterDate": "Искать новые выпуски после этой даты",
|
||||||
"LabelLowestPriority": "Самый низкий приоритет",
|
"LabelLowestPriority": "Самый низкий приоритет",
|
||||||
"LabelMatchConfidence": "Уверенность",
|
"LabelMatchConfidence": "Уверенность",
|
||||||
"LabelMatchExistingUsersBy": "Сопоставление существующих пользователей по",
|
"LabelMatchExistingUsersBy": "Сопоставление существующих пользователей по",
|
||||||
"LabelMatchExistingUsersByDescription": "Используется для подключения существующих пользователей. После подключения пользователям будет присвоен уникальный идентификатор от поставщика единого входа",
|
"LabelMatchExistingUsersByDescription": "Используется для подключения существующих пользователей. После подключения пользователям будет присвоен уникальный идентификатор от поставщика единого входа",
|
||||||
"LabelMaxEpisodesToDownload": "Максимальное количество эпизодов для загрузки. Используйте 0 для неограниченного количества.",
|
"LabelMaxEpisodesToDownload": "Максимальное количество выпусков для скачивания. Используйте 0 для неограниченного количества.",
|
||||||
"LabelMaxEpisodesToDownloadPerCheck": "Максимальное количество новых эпизодов для загрузки за одну проверку",
|
"LabelMaxEpisodesToDownloadPerCheck": "Максимальное количество новых выпусков для скачивания за один раз",
|
||||||
"LabelMaxEpisodesToKeep": "Максимальное количество сохраняемых эпизодов",
|
"LabelMaxEpisodesToKeep": "Максимальное количество сохраняемых выпусков",
|
||||||
"LabelMaxEpisodesToKeepHelp": "Значение 0 не устанавливает максимального ограничения. После автоматической загрузки нового эпизода самый старый эпизод будет удален, если у вас более X эпизодов. При этом будет удален только 1 эпизод за каждую новую загрузку.",
|
"LabelMaxEpisodesToKeepHelp": "Значение 0 не устанавливает максимального ограничения. После автоматической скачивании нового выпуска самый старый будет удалён, если у вас их уже более X выпусков. При этом будет удалён только 1 выпуск за каждое новое скачивание.",
|
||||||
"LabelMediaPlayer": "Медиа проигрыватель",
|
"LabelMediaPlayer": "Медиа проигрыватель",
|
||||||
"LabelMediaType": "Тип медиа",
|
"LabelMediaType": "Тип медиа",
|
||||||
"LabelMetaTag": "Мета тег",
|
"LabelMetaTag": "Мета тег",
|
||||||
|
|
@ -470,12 +475,13 @@
|
||||||
"LabelNew": "Новый",
|
"LabelNew": "Новый",
|
||||||
"LabelNewPassword": "Новый пароль",
|
"LabelNewPassword": "Новый пароль",
|
||||||
"LabelNewestAuthors": "Новые авторы",
|
"LabelNewestAuthors": "Новые авторы",
|
||||||
"LabelNewestEpisodes": "Новые эпизоды",
|
"LabelNewestEpisodes": "Новые выпуски",
|
||||||
"LabelNextBackupDate": "Следующая дата бэкапирования",
|
"LabelNextBackupDate": "Следующая дата бэкапирования",
|
||||||
|
"LabelNextChapters": "Следующие главы будут:",
|
||||||
"LabelNextScheduledRun": "Следущий запланированный запуск",
|
"LabelNextScheduledRun": "Следущий запланированный запуск",
|
||||||
"LabelNoApiKeys": "API ключи отсутствуют",
|
"LabelNoApiKeys": "API ключи отсутствуют",
|
||||||
"LabelNoCustomMetadataProviders": "Нет пользовательских поставщиков метаданных",
|
"LabelNoCustomMetadataProviders": "Нет пользовательских поставщиков метаданных",
|
||||||
"LabelNoEpisodesSelected": "Эпизоды не выбраны",
|
"LabelNoEpisodesSelected": "Нет выбранных выпусков",
|
||||||
"LabelNotFinished": "Не завершено",
|
"LabelNotFinished": "Не завершено",
|
||||||
"LabelNotStarted": "Не запущено",
|
"LabelNotStarted": "Не запущено",
|
||||||
"LabelNotes": "Заметки",
|
"LabelNotes": "Заметки",
|
||||||
|
|
@ -489,11 +495,12 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Макс. размер очереди для событий уведомлений",
|
"LabelNotificationsMaxQueueSize": "Макс. размер очереди для событий уведомлений",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "События ограничены 1 в секунду. События будут игнорированы если в очереди максимальное количество. Это предотвращает спам сообщениями.",
|
"LabelNotificationsMaxQueueSizeHelp": "События ограничены 1 в секунду. События будут игнорированы если в очереди максимальное количество. Это предотвращает спам сообщениями.",
|
||||||
"LabelNumberOfBooks": "Количество книг",
|
"LabelNumberOfBooks": "Количество книг",
|
||||||
"LabelNumberOfEpisodes": "# из эпизодов",
|
"LabelNumberOfChapters": "Кол-во глав:",
|
||||||
|
"LabelNumberOfEpisodes": "# из выпусков",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Имя утверждения OpenID, содержащего расширенные разрешения на действия пользователя в приложении, которые будут применяться к ролям, не являющимся администраторами (<b>если они настроены</b>). Если утверждение отсутствует в ответе, в доступе к ABS будет отказано. Если одна опция отсутствует, она будет рассматриваться как <code>false</code>. Убедитесь, что утверждение поставщика удостоверений соответствует ожидаемой структуре:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Имя утверждения OpenID, содержащего расширенные разрешения на действия пользователя в приложении, которые будут применяться к ролям, не являющимся администраторами (<b>если они настроены</b>). Если утверждение отсутствует в ответе, в доступе к ABS будет отказано. Если одна опция отсутствует, она будет рассматриваться как <code>false</code>. Убедитесь, что утверждение поставщика удостоверений соответствует ожидаемой структуре:",
|
||||||
"LabelOpenIDClaims": "Оставьте следующие параметры пустыми, чтобы отключить расширенное назначение групп и разрешений, будет автоматически присвоена группа «Пользователь».",
|
"LabelOpenIDClaims": "Оставьте следующие параметры пустыми, чтобы отключить расширенное назначение групп и разрешений, будет автоматически присвоена группа «Пользователь».",
|
||||||
"LabelOpenIDGroupClaimDescription": "Имя утверждения OpenID, содержащего список групп пользователя. Обычно их называют <code>groups</code>. <b>Если эта настройка</b> настроена, приложение будет автоматически назначать роли на основе членства пользователя в группах при условии, что эти группы названы в утверждении без учета регистра \"admin\", \"user\" или \"guest\". Утверждение должно содержать список, и если пользователь принадлежит к нескольким группам, то приложение назначит роль, соответствующую самому высокому уровню доступа. Если ни одна из групп не совпадает, доступ будет запрещен.",
|
"LabelOpenIDGroupClaimDescription": "Имя утверждения OpenID, содержащего список групп пользователя. Обычно их называют <code>groups</code>. <b>Если эта настройка</b> настроена, приложение будет автоматически назначать роли на основе членства пользователя в группах при условии, что эти группы названы в утверждении без учета регистра \"admin\", \"user\" или \"guest\". Утверждение должно содержать список, и если пользователь принадлежит к нескольким группам, то приложение назначит роль, соответствующую самому высокому уровню доступа. Если ни одна из групп не совпадает, доступ будет запрещен.",
|
||||||
"LabelOpenRSSFeed": "Открыть RSS-канал",
|
"LabelOpenRSSFeed": "Открыть RSS-ленту",
|
||||||
"LabelOverwrite": "Перезаписать",
|
"LabelOverwrite": "Перезаписать",
|
||||||
"LabelPaginationPageXOfY": "Страница {0} из {1}",
|
"LabelPaginationPageXOfY": "Страница {0} из {1}",
|
||||||
"LabelPassword": "Пароль",
|
"LabelPassword": "Пароль",
|
||||||
|
|
@ -535,8 +542,8 @@
|
||||||
"LabelRSSFeedCustomOwnerName": "Пользовательское Имя владельца",
|
"LabelRSSFeedCustomOwnerName": "Пользовательское Имя владельца",
|
||||||
"LabelRSSFeedOpen": "Открыть RSS-ленту",
|
"LabelRSSFeedOpen": "Открыть RSS-ленту",
|
||||||
"LabelRSSFeedPreventIndexing": "Запретить индексирование",
|
"LabelRSSFeedPreventIndexing": "Запретить индексирование",
|
||||||
"LabelRSSFeedSlug": "Встроить RSS-канал",
|
"LabelRSSFeedSlug": "Ключевое слово RSS-ленты",
|
||||||
"LabelRSSFeedURL": "URL RSS-канала",
|
"LabelRSSFeedURL": "URL-адрес RSS-ленты",
|
||||||
"LabelRandomly": "Случайно",
|
"LabelRandomly": "Случайно",
|
||||||
"LabelReAddSeriesToContinueListening": "Повторно добавить серию в «Продолжить слушать»",
|
"LabelReAddSeriesToContinueListening": "Повторно добавить серию в «Продолжить слушать»",
|
||||||
"LabelRead": "Читать",
|
"LabelRead": "Читать",
|
||||||
|
|
@ -561,8 +568,8 @@
|
||||||
"LabelSeason": "Сезон",
|
"LabelSeason": "Сезон",
|
||||||
"LabelSeasonNumber": "Сезон #{0}",
|
"LabelSeasonNumber": "Сезон #{0}",
|
||||||
"LabelSelectAll": "Выбрать все",
|
"LabelSelectAll": "Выбрать все",
|
||||||
"LabelSelectAllEpisodes": "Выбрать все эпизоды",
|
"LabelSelectAllEpisodes": "Выбрать все выпуски",
|
||||||
"LabelSelectEpisodesShowing": "Выберите {0} эпизодов для показа",
|
"LabelSelectEpisodesShowing": "Выберите {0} выпусков для отображения",
|
||||||
"LabelSelectUser": "Выбрать пользователя",
|
"LabelSelectUser": "Выбрать пользователя",
|
||||||
"LabelSelectUsers": "Выбор пользователей",
|
"LabelSelectUsers": "Выбор пользователей",
|
||||||
"LabelSendEbookToDevice": "Отправить e-книгу в...",
|
"LabelSendEbookToDevice": "Отправить e-книгу в...",
|
||||||
|
|
@ -581,8 +588,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Конструкция с деревянными полками",
|
"LabelSettingsBookshelfViewHelp": "Конструкция с деревянными полками",
|
||||||
"LabelSettingsChromecastSupport": "Поддержка Chromecast",
|
"LabelSettingsChromecastSupport": "Поддержка Chromecast",
|
||||||
"LabelSettingsDateFormat": "Формат даты",
|
"LabelSettingsDateFormat": "Формат даты",
|
||||||
"LabelSettingsEnableWatcher": "Автоматическое сканирование библиотек на изменение",
|
"LabelSettingsEnableWatcher": "Автоматически отслеживать изменения в библиотеках",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Автоматическое сканирование библиотеки на изменение",
|
"LabelSettingsEnableWatcherForLibrary": "Автоматический просмотр библиотеки на изменение",
|
||||||
"LabelSettingsEnableWatcherHelp": "Включает автоматическое добавление/обновление элементов при обнаружении изменений файлов. *Требуется перезапуск сервера",
|
"LabelSettingsEnableWatcherHelp": "Включает автоматическое добавление/обновление элементов при обнаружении изменений файлов. *Требуется перезапуск сервера",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Разрешение содержимого epub с скриптами",
|
"LabelSettingsEpubsAllowScriptedContent": "Разрешение содержимого epub с скриптами",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Разрешить файлам epub выполнять скрипты. Рекомендуется отключать этот параметр, если вы не доверяете источнику файлов epub.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Разрешить файлам epub выполнять скрипты. Рекомендуется отключать этот параметр, если вы не доверяете источнику файлов epub.",
|
||||||
|
|
@ -631,6 +638,7 @@
|
||||||
"LabelStartTime": "Время начала",
|
"LabelStartTime": "Время начала",
|
||||||
"LabelStarted": "Начат",
|
"LabelStarted": "Начат",
|
||||||
"LabelStartedAt": "Начато В",
|
"LabelStartedAt": "Начато В",
|
||||||
|
"LabelStartedDate": "Начато {0}",
|
||||||
"LabelStatsAudioTracks": "Аудио треки",
|
"LabelStatsAudioTracks": "Аудио треки",
|
||||||
"LabelStatsAuthors": "Авторы",
|
"LabelStatsAuthors": "Авторы",
|
||||||
"LabelStatsBestDay": "Лучший День",
|
"LabelStatsBestDay": "Лучший День",
|
||||||
|
|
@ -741,10 +749,11 @@
|
||||||
"MessageBatchQuickMatchDescription": "Быстрый Поиск попытается добавить отсутствующие обложки и метаданные для выбранных элементов. Включите параметры ниже, чтобы разрешить Быстрому Поиску перезаписывать существующие обложки и/или метаданные.",
|
"MessageBatchQuickMatchDescription": "Быстрый Поиск попытается добавить отсутствующие обложки и метаданные для выбранных элементов. Включите параметры ниже, чтобы разрешить Быстрому Поиску перезаписывать существующие обложки и/или метаданные.",
|
||||||
"MessageBookshelfNoCollections": "Вы еще не создали ни одной коллекции",
|
"MessageBookshelfNoCollections": "Вы еще не создали ни одной коллекции",
|
||||||
"MessageBookshelfNoCollectionsHelp": "Коллекции являются общедоступными. Все пользователи, имеющие доступ к библиотеке, могут их просматривать.",
|
"MessageBookshelfNoCollectionsHelp": "Коллекции являются общедоступными. Все пользователи, имеющие доступ к библиотеке, могут их просматривать.",
|
||||||
"MessageBookshelfNoRSSFeeds": "Нет открытых RSS-каналов",
|
"MessageBookshelfNoRSSFeeds": "Нет открытых RSS-лент",
|
||||||
"MessageBookshelfNoResultsForFilter": "Нет Результатов для фильтра \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Нет Результатов для фильтра \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Нет результатов для запроса",
|
"MessageBookshelfNoResultsForQuery": "Нет результатов для запроса",
|
||||||
"MessageBookshelfNoSeries": "У вас нет серий",
|
"MessageBookshelfNoSeries": "У вас нет серий",
|
||||||
|
"MessageBulkChapterPattern": "Сколько глав вы хотели бы добавить, используя эту схему нумерации?",
|
||||||
"MessageChapterEndIsAfter": "Конец главы после окончания вашей аудиокниги",
|
"MessageChapterEndIsAfter": "Конец главы после окончания вашей аудиокниги",
|
||||||
"MessageChapterErrorFirstNotZero": "Первая глава должна начинаться с 0",
|
"MessageChapterErrorFirstNotZero": "Первая глава должна начинаться с 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Неверное время начала, должно быть меньше продолжительности аудиокниги",
|
"MessageChapterErrorStartGteDuration": "Неверное время начала, должно быть меньше продолжительности аудиокниги",
|
||||||
|
|
@ -752,7 +761,7 @@
|
||||||
"MessageChapterStartIsAfter": "Глава начинается после окончания аудиокниги",
|
"MessageChapterStartIsAfter": "Глава начинается после окончания аудиокниги",
|
||||||
"MessageChaptersNotFound": "Главы не найденны",
|
"MessageChaptersNotFound": "Главы не найденны",
|
||||||
"MessageCheckingCron": "Проверка cron...",
|
"MessageCheckingCron": "Проверка cron...",
|
||||||
"MessageConfirmCloseFeed": "Вы уверены, что хотите закрыть этот канал?",
|
"MessageConfirmCloseFeed": "Вы уверены, что хотите закрыть эту ленту?",
|
||||||
"MessageConfirmDeleteApiKey": "Вы уверены, что хотите удалить API ключ \"{0}\"?",
|
"MessageConfirmDeleteApiKey": "Вы уверены, что хотите удалить API ключ \"{0}\"?",
|
||||||
"MessageConfirmDeleteBackup": "Вы уверены, что хотите удалить бэкап для {0}?",
|
"MessageConfirmDeleteBackup": "Вы уверены, что хотите удалить бэкап для {0}?",
|
||||||
"MessageConfirmDeleteDevice": "Вы уверены, что хотите удалить устройство для чтения электронных книг \"{0}\"?",
|
"MessageConfirmDeleteDevice": "Вы уверены, что хотите удалить устройство для чтения электронных книг \"{0}\"?",
|
||||||
|
|
@ -765,8 +774,8 @@
|
||||||
"MessageConfirmDeleteSession": "Вы уверены, что хотите удалить этот сеанс?",
|
"MessageConfirmDeleteSession": "Вы уверены, что хотите удалить этот сеанс?",
|
||||||
"MessageConfirmEmbedMetadataInAudioFiles": "Вы уверены, что хотите вставить метаданные в {0} аудиофайлов?",
|
"MessageConfirmEmbedMetadataInAudioFiles": "Вы уверены, что хотите вставить метаданные в {0} аудиофайлов?",
|
||||||
"MessageConfirmForceReScan": "Вы уверены, что хотите принудительно выполнить повторное сканирование?",
|
"MessageConfirmForceReScan": "Вы уверены, что хотите принудительно выполнить повторное сканирование?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Вы уверены, что хотите отметить все эпизоды как завершенные?",
|
"MessageConfirmMarkAllEpisodesFinished": "Вы уверены, что хотите отметить все выпуски как прослушанные?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "Вы уверены, что хотите отметить все эпизоды как не завершенные?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "Вы уверены, что хотите отметить все выпуски как непрослушанные?",
|
||||||
"MessageConfirmMarkItemFinished": "Вы уверены, что хотите отметить «{0}» как завершенную?",
|
"MessageConfirmMarkItemFinished": "Вы уверены, что хотите отметить «{0}» как завершенную?",
|
||||||
"MessageConfirmMarkItemNotFinished": "Вы уверены, что хотите отметить «{0}» как не завершенную?",
|
"MessageConfirmMarkItemNotFinished": "Вы уверены, что хотите отметить «{0}» как не завершенную?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Вы уверены, что хотите отметить все книги этой серии как завершенные?",
|
"MessageConfirmMarkSeriesFinished": "Вы уверены, что хотите отметить все книги этой серии как завершенные?",
|
||||||
|
|
@ -775,14 +784,14 @@
|
||||||
"MessageConfirmPurgeCache": "Очистка кэша удалит весь каталог в <code>/metadata/cache</code>. <br /><br />Вы уверены, что хотите удалить каталог кэша?",
|
"MessageConfirmPurgeCache": "Очистка кэша удалит весь каталог в <code>/metadata/cache</code>. <br /><br />Вы уверены, что хотите удалить каталог кэша?",
|
||||||
"MessageConfirmPurgeItemsCache": "Очистка кэша элементов удалит весь каталог в <code>/metadata/cache/items</code>.<br />Вы уверены?",
|
"MessageConfirmPurgeItemsCache": "Очистка кэша элементов удалит весь каталог в <code>/metadata/cache/items</code>.<br />Вы уверены?",
|
||||||
"MessageConfirmQuickEmbed": "Предупреждение! Быстрое встраивание не позволяет создавать резервные копии аудиофайлов. Убедитесь, что у вас есть резервная копия аудиофайлов. <br><br>Хотите продолжить?",
|
"MessageConfirmQuickEmbed": "Предупреждение! Быстрое встраивание не позволяет создавать резервные копии аудиофайлов. Убедитесь, что у вас есть резервная копия аудиофайлов. <br><br>Хотите продолжить?",
|
||||||
"MessageConfirmQuickMatchEpisodes": "При обнаружении совпадений информация о эпизодах быстрого поиска будет перезаписана. Будут обновлены только несопоставимые эпизоды. Вы уверены?",
|
"MessageConfirmQuickMatchEpisodes": "При обнаружении совпадений информация о выпусках быстрого поиска будет перезаписана. Будут обновлены только несопоставимые выпуски. Вы уверены?",
|
||||||
"MessageConfirmReScanLibraryItems": "Вы уверены, что хотите пересканировать {0} элементов?",
|
"MessageConfirmReScanLibraryItems": "Вы уверены, что хотите пересканировать {0} элементов?",
|
||||||
"MessageConfirmRemoveAllChapters": "Вы уверены, что хотите удалить все главы?",
|
"MessageConfirmRemoveAllChapters": "Вы уверены, что хотите удалить все главы?",
|
||||||
"MessageConfirmRemoveAuthor": "Вы уверены, что хотите удалить автора \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Вы уверены, что хотите удалить автора \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Вы уверены, что хотите удалить коллекцию \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Вы уверены, что хотите удалить коллекцию \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Вы уверены, что хотите удалить эпизод \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Вы уверены, что хотите удалить выпуск «{0}»?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Примечание: Это не приведет к удалению аудиофайла, если не включить опцию \"Жесткое удаление файла\"",
|
"MessageConfirmRemoveEpisodeNote": "Примечание: Это не приведет к удалению аудиофайла, если не включить опцию \"Жесткое удаление файла\"",
|
||||||
"MessageConfirmRemoveEpisodes": "Вы уверены, что хотите удалить {0} эпизодов?",
|
"MessageConfirmRemoveEpisodes": "Вы уверены, что хотите удалить {0} выпусков?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Вы уверены, что хотите удалить {0} сеансов прослушивания?",
|
"MessageConfirmRemoveListeningSessions": "Вы уверены, что хотите удалить {0} сеансов прослушивания?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Вы уверены, что хотите удалить все файлы metadata. {0} файлов из папок элементов вашей библиотеки?",
|
"MessageConfirmRemoveMetadataFiles": "Вы уверены, что хотите удалить все файлы metadata. {0} файлов из папок элементов вашей библиотеки?",
|
||||||
"MessageConfirmRemoveNarrator": "Вы уверены, что хотите удалить чтеца \"{0}\"?",
|
"MessageConfirmRemoveNarrator": "Вы уверены, что хотите удалить чтеца \"{0}\"?",
|
||||||
|
|
@ -797,14 +806,14 @@
|
||||||
"MessageConfirmSendEbookToDevice": "Вы уверены, что хотите отправить {0} e-книгу \"{1}\" на устройство \"{2}\"?",
|
"MessageConfirmSendEbookToDevice": "Вы уверены, что хотите отправить {0} e-книгу \"{1}\" на устройство \"{2}\"?",
|
||||||
"MessageConfirmUnlinkOpenId": "Вы уверены, что хотите отвязать этого пользователя от OpenID?",
|
"MessageConfirmUnlinkOpenId": "Вы уверены, что хотите отвязать этого пользователя от OpenID?",
|
||||||
"MessageDaysListenedInTheLastYear": "{0} дней прослушивания за последний год",
|
"MessageDaysListenedInTheLastYear": "{0} дней прослушивания за последний год",
|
||||||
"MessageDownloadingEpisode": "Эпизод скачивается",
|
"MessageDownloadingEpisode": "Скачивание выпуска",
|
||||||
"MessageDragFilesIntoTrackOrder": "Перетащите файлы для исправления порядка треков",
|
"MessageDragFilesIntoTrackOrder": "Перетащите файлы для исправления порядка треков",
|
||||||
"MessageEmbedFailed": "Вставка не удалась!",
|
"MessageEmbedFailed": "Вставка не удалась!",
|
||||||
"MessageEmbedFinished": "Встраивание завершено!",
|
"MessageEmbedFinished": "Встраивание завершено!",
|
||||||
"MessageEmbedQueue": "Поставлен в очередь для внедрения метаданных ({0} в очереди)",
|
"MessageEmbedQueue": "Поставлен в очередь для внедрения метаданных ({0} в очереди)",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} Эпизод(ов) запланировано для закачки",
|
"MessageEpisodesQueuedForDownload": "{0} выпуск(ов) запланировано для скачивания",
|
||||||
"MessageEreaderDevices": "Чтобы обеспечить доставку электронных книг, вам может потребоваться добавить указанный выше адрес электронной почты в качестве действительного отправителя для каждого устройства, перечисленного ниже.",
|
"MessageEreaderDevices": "Чтобы обеспечить доставку электронных книг, вам может потребоваться добавить указанный выше адрес электронной почты в качестве действительного отправителя для каждого устройства, перечисленного ниже.",
|
||||||
"MessageFeedURLWillBe": "URL канала будет {0}",
|
"MessageFeedURLWillBe": "URL-адрес ленты будет {0}",
|
||||||
"MessageFetching": "Завершается...",
|
"MessageFetching": "Завершается...",
|
||||||
"MessageForceReScanDescription": "будет сканировать все файлы снова, как свежее сканирование. Теги ID3 аудиофайлов, OPF-файлы и текстовые файлы будут сканироваться как новые.",
|
"MessageForceReScanDescription": "будет сканировать все файлы снова, как свежее сканирование. Теги ID3 аудиофайлов, OPF-файлы и текстовые файлы будут сканироваться как новые.",
|
||||||
"MessageHeatmapListeningTimeTooltip": "<strong>{0} прослушивание</strong> на {1}",
|
"MessageHeatmapListeningTimeTooltip": "<strong>{0} прослушивание</strong> на {1}",
|
||||||
|
|
@ -821,8 +830,8 @@
|
||||||
"MessageM4BFailed": "M4B Ошибка!",
|
"MessageM4BFailed": "M4B Ошибка!",
|
||||||
"MessageM4BFinished": "M4B Завершено!",
|
"MessageM4BFinished": "M4B Завершено!",
|
||||||
"MessageMapChapterTitles": "Сопоставление названий глав с существующими главами аудиокниги без корректировки временных меток",
|
"MessageMapChapterTitles": "Сопоставление названий глав с существующими главами аудиокниги без корректировки временных меток",
|
||||||
"MessageMarkAllEpisodesFinished": "Отметить все эпизоды как завершенные",
|
"MessageMarkAllEpisodesFinished": "Отметить все выпуски как прослушанные",
|
||||||
"MessageMarkAllEpisodesNotFinished": "Отметить все эпизоды как не завершенные",
|
"MessageMarkAllEpisodesNotFinished": "Отметить все выпуски как непрослушанные",
|
||||||
"MessageMarkAsFinished": "Отметить, как завершенную",
|
"MessageMarkAsFinished": "Отметить, как завершенную",
|
||||||
"MessageMarkAsNotFinished": "Отметить, как не завершенную",
|
"MessageMarkAsNotFinished": "Отметить, как не завершенную",
|
||||||
"MessageMatchBooksDescription": "попытается сопоставить книги в библиотеке с книгой из выбранного поставщика поиска и заполнить пустые детали и обложку. Не перезаписывает сведения.",
|
"MessageMatchBooksDescription": "попытается сопоставить книги в библиотеке с книгой из выбранного поставщика поиска и заполнить пустые детали и обложку. Не перезаписывает сведения.",
|
||||||
|
|
@ -837,8 +846,8 @@
|
||||||
"MessageNoDevices": "Нет устройств",
|
"MessageNoDevices": "Нет устройств",
|
||||||
"MessageNoDownloadsInProgress": "В настоящее время загрузка не выполняется",
|
"MessageNoDownloadsInProgress": "В настоящее время загрузка не выполняется",
|
||||||
"MessageNoDownloadsQueued": "Нет загрузок в очереди",
|
"MessageNoDownloadsQueued": "Нет загрузок в очереди",
|
||||||
"MessageNoEpisodeMatchesFound": "Совпадения эпизодов не найдены",
|
"MessageNoEpisodeMatchesFound": "Совпадения выпусков не найдены",
|
||||||
"MessageNoEpisodes": "Нет эпизодов",
|
"MessageNoEpisodes": "Нету выпусков",
|
||||||
"MessageNoFoldersAvailable": "Нет доступных папок",
|
"MessageNoFoldersAvailable": "Нет доступных папок",
|
||||||
"MessageNoGenres": "Нет жанров",
|
"MessageNoGenres": "Нет жанров",
|
||||||
"MessageNoIssues": "Нет проблем",
|
"MessageNoIssues": "Нет проблем",
|
||||||
|
|
@ -848,7 +857,7 @@
|
||||||
"MessageNoLogs": "Нет записей",
|
"MessageNoLogs": "Нет записей",
|
||||||
"MessageNoMediaProgress": "Нет прогресса медиа",
|
"MessageNoMediaProgress": "Нет прогресса медиа",
|
||||||
"MessageNoNotifications": "Нет уведомлений",
|
"MessageNoNotifications": "Нет уведомлений",
|
||||||
"MessageNoPodcastFeed": "Недопустимый подкаст: Нет канала",
|
"MessageNoPodcastFeed": "Недопустимый подкаст: Нет ленты",
|
||||||
"MessageNoPodcastsFound": "Подкасты не найдены",
|
"MessageNoPodcastsFound": "Подкасты не найдены",
|
||||||
"MessageNoResults": "Нет результатов",
|
"MessageNoResults": "Нет результатов",
|
||||||
"MessageNoSearchResultsFor": "Нет результатов поиска для \"{0}\"",
|
"MessageNoSearchResultsFor": "Нет результатов поиска для \"{0}\"",
|
||||||
|
|
@ -859,27 +868,27 @@
|
||||||
"MessageNoUserPlaylists": "У вас нет плейлистов",
|
"MessageNoUserPlaylists": "У вас нет плейлистов",
|
||||||
"MessageNoUserPlaylistsHelp": "Списки воспроизведения являются конфиденциальными. Только пользователь, который их создает, может их видеть.",
|
"MessageNoUserPlaylistsHelp": "Списки воспроизведения являются конфиденциальными. Только пользователь, который их создает, может их видеть.",
|
||||||
"MessageNotYetImplemented": "Пока не реализовано",
|
"MessageNotYetImplemented": "Пока не реализовано",
|
||||||
"MessageOpmlPreviewNote": "Примечание: Это предварительный просмотр разобранного файла OPML. Фактическое название подкаста будет взято из RSS-канала.",
|
"MessageOpmlPreviewNote": "Примечание: Это предварительный просмотр разобранного файла OPML. Фактическое название подкаста будет взято из RSS-ленты.",
|
||||||
"MessageOr": "или",
|
"MessageOr": "или",
|
||||||
"MessagePauseChapter": "Пауза воспроизведения главы",
|
"MessagePauseChapter": "Пауза воспроизведения главы",
|
||||||
"MessagePlayChapter": "Прослушать начало главы",
|
"MessagePlayChapter": "Прослушать начало главы",
|
||||||
"MessagePlaylistCreateFromCollection": "Создать плейлист из коллекции",
|
"MessagePlaylistCreateFromCollection": "Создать плейлист из коллекции",
|
||||||
"MessagePleaseWait": "Пожалуйста подождите...",
|
"MessagePleaseWait": "Пожалуйста подождите...",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "Подкаст не имеет URL-адреса RSS-канала, который можно использовать для поиска",
|
"MessagePodcastHasNoRSSFeedForMatching": "Подкаст не имеет URL-адреса RSS-ленты, который можно использовать для поиска",
|
||||||
"MessagePodcastSearchField": "Введите поисковый запрос или URL-адрес RSS-канала",
|
"MessagePodcastSearchField": "Введите поисковый запрос или URL-адрес RSS-ленты",
|
||||||
"MessageQuickEmbedInProgress": "Быстрое внедрение в процессе выполнения",
|
"MessageQuickEmbedInProgress": "Быстрое внедрение в процессе выполнения",
|
||||||
"MessageQuickEmbedQueue": "Поставлен в очередь для быстрого внедрения ({0} в очереди)",
|
"MessageQuickEmbedQueue": "Поставлен в очередь для быстрого внедрения ({0} в очереди)",
|
||||||
"MessageQuickMatchAllEpisodes": "Быстрое сопоставление всех эпизодов",
|
"MessageQuickMatchAllEpisodes": "Быстрое сопоставление всех выпусков",
|
||||||
"MessageQuickMatchDescription": "Заполняет пустые детали элемента и обложку первым результатом поиска из «{0}». Не перезаписывает сведения, если не включен параметр сервера 'Предпочитать метаданные поиска'.",
|
"MessageQuickMatchDescription": "Заполняет пустые детали элемента и обложку первым результатом поиска из «{0}». Не перезаписывает сведения, если не включен параметр сервера 'Предпочитать метаданные поиска'.",
|
||||||
"MessageRemoveChapter": "Удалить главу",
|
"MessageRemoveChapter": "Удалить главу",
|
||||||
"MessageRemoveEpisodes": "Удалить {0} эпизод(ов)",
|
"MessageRemoveEpisodes": "Удалить {0} выпуск(ов)",
|
||||||
"MessageRemoveFromPlayerQueue": "Удалить из очереди воспроизведения",
|
"MessageRemoveFromPlayerQueue": "Удалить из очереди воспроизведения",
|
||||||
"MessageRemoveUserWarning": "Вы уверены, что хотите навсегда удалить пользователя \"{0}\"?",
|
"MessageRemoveUserWarning": "Вы уверены, что хотите навсегда удалить пользователя \"{0}\"?",
|
||||||
"MessageReportBugsAndContribute": "Сообщайте об ошибках, запрашивайте функции и вносите свой вклад на",
|
"MessageReportBugsAndContribute": "Сообщайте об ошибках, запрашивайте функции и вносите свой вклад на",
|
||||||
"MessageResetChaptersConfirm": "Вы уверены, что хотите сбросить главы и отменить внесенные изменения?",
|
"MessageResetChaptersConfirm": "Вы уверены, что хотите сбросить главы и отменить внесенные изменения?",
|
||||||
"MessageRestoreBackupConfirm": "Вы уверены, что хотите восстановить резервную копию, созданную",
|
"MessageRestoreBackupConfirm": "Вы уверены, что хотите восстановить резервную копию, созданную",
|
||||||
"MessageRestoreBackupWarning": "Восстановление резервной копии перезапишет всю базу данных, расположенную в /config, и обложки изображений в /metadata/items и /metadata/authors.<br/><br/>Бэкапы не изменяют файлы в папках библиотеки. Если вы включили параметры сервера для хранения обложек и метаданных в папках библиотеки, то они не резервируются и не перезаписываются.<br/><br/>Все клиенты, использующие ваш сервер, будут автоматически обновлены.",
|
"MessageRestoreBackupWarning": "Восстановление резервной копии перезапишет всю базу данных, расположенную в /config, и обложки изображений в /metadata/items и /metadata/authors.<br/><br/>Бэкапы не изменяют файлы в папках библиотеки. Если вы включили параметры сервера для хранения обложек и метаданных в папках библиотеки, то они не резервируются и не перезаписываются.<br/><br/>Все клиенты, использующие ваш сервер, будут автоматически обновлены.",
|
||||||
"MessageScheduleLibraryScanNote": "Большинству пользователей рекомендуется отключить эту функцию и включить функцию просмотра папок. Программа просмотра папок автоматически обнаружит изменения в папках вашей библиотеки. Программа просмотра папок работает не для каждой файловой системы (например, NFS), поэтому вместо этого можно использовать запланированные проверки библиотеки.",
|
"MessageScheduleLibraryScanNote": "Большинству пользователей рекомендуется отключить эту функцию и оставить включённой функцию \"Автоматически отслеживать изменения в библиотеках\" - она будет автоматически обнаруживать изменения в папках вашей библиотеки. Включите эту функцию если \"Автоматически отслеживать изменения в библиотеках\" не работает для вашей файловой системы (например, NFS).",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Запуск каждые {0} по {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Запуск каждые {0} по {1}",
|
||||||
"MessageSearchResultsFor": "Результаты поиска для",
|
"MessageSearchResultsFor": "Результаты поиска для",
|
||||||
"MessageSelected": "{0} выбрано",
|
"MessageSelected": "{0} выбрано",
|
||||||
|
|
@ -892,7 +901,7 @@
|
||||||
"MessageStartPlaybackAtTime": "Начать воспроизведение для \"{0}\" с {1}?",
|
"MessageStartPlaybackAtTime": "Начать воспроизведение для \"{0}\" с {1}?",
|
||||||
"MessageTaskAudioFileNotWritable": "Аудиофайл \"{0}\" недоступен для записи",
|
"MessageTaskAudioFileNotWritable": "Аудиофайл \"{0}\" недоступен для записи",
|
||||||
"MessageTaskCanceledByUser": "Задание отменено пользователем",
|
"MessageTaskCanceledByUser": "Задание отменено пользователем",
|
||||||
"MessageTaskDownloadingEpisodeDescription": "Загрузка эпизода \"{0}\"",
|
"MessageTaskDownloadingEpisodeDescription": "Скачивание выпуска «{0}»",
|
||||||
"MessageTaskEmbeddingMetadata": "Внедрение метаданных",
|
"MessageTaskEmbeddingMetadata": "Внедрение метаданных",
|
||||||
"MessageTaskEmbeddingMetadataDescription": "Встраивание метаданных в аудиокнигу \"{0}\"",
|
"MessageTaskEmbeddingMetadataDescription": "Встраивание метаданных в аудиокнигу \"{0}\"",
|
||||||
"MessageTaskEncodingM4b": "Кодировка M4B",
|
"MessageTaskEncodingM4b": "Кодировка M4B",
|
||||||
|
|
@ -907,9 +916,9 @@
|
||||||
"MessageTaskMatchingBooksInLibrary": "Сопоставление книг в библиотеке \"{0}\"",
|
"MessageTaskMatchingBooksInLibrary": "Сопоставление книг в библиотеке \"{0}\"",
|
||||||
"MessageTaskNoFilesToScan": "Нет файлов для сканирования",
|
"MessageTaskNoFilesToScan": "Нет файлов для сканирования",
|
||||||
"MessageTaskOpmlImport": "Импорт OPML",
|
"MessageTaskOpmlImport": "Импорт OPML",
|
||||||
"MessageTaskOpmlImportDescription": "Создание подкастов из {0} RSS-каналов",
|
"MessageTaskOpmlImportDescription": "Создание подкастов из {0} RSS-ленты",
|
||||||
"MessageTaskOpmlImportFeed": "Канал импорта OPML",
|
"MessageTaskOpmlImportFeed": "Канал импорта OPML",
|
||||||
"MessageTaskOpmlImportFeedDescription": "Импорт RSS-канала \"{0}\"",
|
"MessageTaskOpmlImportFeedDescription": "Импорт RSS-ленты «{0}»",
|
||||||
"MessageTaskOpmlImportFeedFailed": "Не удалось получить ленту подкаста",
|
"MessageTaskOpmlImportFeedFailed": "Не удалось получить ленту подкаста",
|
||||||
"MessageTaskOpmlImportFeedPodcastDescription": "Создание подкаста \"{0}\"",
|
"MessageTaskOpmlImportFeedPodcastDescription": "Создание подкаста \"{0}\"",
|
||||||
"MessageTaskOpmlImportFeedPodcastExists": "Подкаст уже существует по адресу",
|
"MessageTaskOpmlImportFeedPodcastExists": "Подкаст уже существует по адресу",
|
||||||
|
|
@ -917,7 +926,7 @@
|
||||||
"MessageTaskOpmlImportFinished": "Добавлено {0} подкастов",
|
"MessageTaskOpmlImportFinished": "Добавлено {0} подкастов",
|
||||||
"MessageTaskOpmlParseFailed": "Не удалось разобрать OPML-файл",
|
"MessageTaskOpmlParseFailed": "Не удалось разобрать OPML-файл",
|
||||||
"MessageTaskOpmlParseFastFail": "Недопустимый тег <opml> файла OPML не найден ИЛИ тег <outline> не найден",
|
"MessageTaskOpmlParseFastFail": "Недопустимый тег <opml> файла OPML не найден ИЛИ тег <outline> не найден",
|
||||||
"MessageTaskOpmlParseNoneFound": "В OPML-файле не найдено ни одного канала",
|
"MessageTaskOpmlParseNoneFound": "В OPML-файле не найдено ни одной ленты",
|
||||||
"MessageTaskScanItemsAdded": "{0} добавлено",
|
"MessageTaskScanItemsAdded": "{0} добавлено",
|
||||||
"MessageTaskScanItemsMissing": "{0} отсутствует",
|
"MessageTaskScanItemsMissing": "{0} отсутствует",
|
||||||
"MessageTaskScanItemsUpdated": "{0} обновлено",
|
"MessageTaskScanItemsUpdated": "{0} обновлено",
|
||||||
|
|
@ -937,22 +946,23 @@
|
||||||
"NoteChangeRootPassword": "Пользователь root — единственный пользователь, который может иметь пустой пароль",
|
"NoteChangeRootPassword": "Пользователь root — единственный пользователь, который может иметь пустой пароль",
|
||||||
"NoteChapterEditorTimes": "Примечание: Время начала первой главы должно оставаться в 0:00, а время начала последней главы не может превышать продолжительность этой аудиокниги.",
|
"NoteChapterEditorTimes": "Примечание: Время начала первой главы должно оставаться в 0:00, а время начала последней главы не может превышать продолжительность этой аудиокниги.",
|
||||||
"NoteFolderPicker": "Примечание: папки, уже сопоставленные, не будут отображаться",
|
"NoteFolderPicker": "Примечание: папки, уже сопоставленные, не будут отображаться",
|
||||||
"NoteRSSFeedPodcastAppsHttps": "Предупреждение: Большинству приложений подкастов потребуется, чтобы URL-адрес RSS-канала использовал HTTPS",
|
"NoteRSSFeedPodcastAppsHttps": "Предупреждение: Большинству приложений подкастов потребуется, чтобы URL-адрес RSS-ленты использовал HTTPS",
|
||||||
"NoteRSSFeedPodcastAppsPubDate": "Предупреждение: 1 или более эпизодов не имеют даты публикации. Некоторые приложения для подкастов требуют этого.",
|
"NoteRSSFeedPodcastAppsPubDate": "Предупреждение: 1 или более выпусков не имеют даты публикации. Некоторые приложения для подкастов требуют этого.",
|
||||||
"NoteUploaderFoldersWithMediaFiles": "Папки с медиафайлами будут обрабатываться как отдельные элементы библиотеки.",
|
"NoteUploaderFoldersWithMediaFiles": "Папки с медиафайлами будут обрабатываться как отдельные элементы библиотеки.",
|
||||||
"NoteUploaderOnlyAudioFiles": "Если загружать только аудиофайлы, то каждый аудиофайл будет обрабатываться как отдельная аудиокнига.",
|
"NoteUploaderOnlyAudioFiles": "Если загружать только аудиофайлы, то каждый аудиофайл будет обрабатываться как отдельная аудиокнига.",
|
||||||
"NoteUploaderUnsupportedFiles": "Неподдерживаемые файлы игнорируются. При выборе или удалении папки другие файлы, не находящиеся в папке элемента, игнорируются.",
|
"NoteUploaderUnsupportedFiles": "Неподдерживаемые файлы игнорируются. При выборе или удалении папки другие файлы, не находящиеся в папке элемента, игнорируются.",
|
||||||
"NotificationOnBackupCompletedDescription": "Запускается при завершении резервного копирования",
|
"NotificationOnBackupCompletedDescription": "Запускается при завершении резервного копирования",
|
||||||
"NotificationOnBackupFailedDescription": "Срабатывает при сбое резервного копирования",
|
"NotificationOnBackupFailedDescription": "Срабатывает при сбое резервного копирования",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Запускается при автоматической загрузке эпизода подкаста",
|
"NotificationOnEpisodeDownloadedDescription": "Запускается при автоматической скачивании выпуска подкаста",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Срабатывает, когда автоматическая загрузка эпизодов отключена из-за слишком большого количества неудачных попыток",
|
"NotificationOnRSSFeedDisabledDescription": "Срабатывает, когда автоматическая скачка выпусков отключена из-за слишком большого количества неудачных попыток",
|
||||||
"NotificationOnRSSFeedFailedDescription": "Срабатывает при сбое запроса RSS-канала на автоматическую загрузку эпизода",
|
"NotificationOnRSSFeedFailedDescription": "Срабатывает при сбое запроса RSS-ленты на автоматическую скачивание выпуска",
|
||||||
"NotificationOnTestDescription": "Событие для тестирования системы оповещения",
|
"NotificationOnTestDescription": "Событие для тестирования системы оповещения",
|
||||||
|
"PlaceholderBulkChapterInput": "Введите название главы или используйте нумерацию (например, «Выпуск 1», «Глава 10», «1.»)",
|
||||||
"PlaceholderNewCollection": "Новое имя коллекции",
|
"PlaceholderNewCollection": "Новое имя коллекции",
|
||||||
"PlaceholderNewFolderPath": "Путь к новой папке",
|
"PlaceholderNewFolderPath": "Путь к новой папке",
|
||||||
"PlaceholderNewPlaylist": "Новое название плейлиста",
|
"PlaceholderNewPlaylist": "Новое название плейлиста",
|
||||||
"PlaceholderSearch": "Поиск...",
|
"PlaceholderSearch": "Поиск...",
|
||||||
"PlaceholderSearchEpisode": "Поиск эпизода...",
|
"PlaceholderSearchEpisode": "Поиск выпуска...",
|
||||||
"StatsAuthorsAdded": "авторов добавлено",
|
"StatsAuthorsAdded": "авторов добавлено",
|
||||||
"StatsBooksAdded": "книг добавлено",
|
"StatsBooksAdded": "книг добавлено",
|
||||||
"StatsBooksAdditional": "Некоторые дополнения включают в себя…",
|
"StatsBooksAdditional": "Некоторые дополнения включают в себя…",
|
||||||
|
|
@ -1001,8 +1011,12 @@
|
||||||
"ToastBookmarkCreateFailed": "Не удалось создать закладку",
|
"ToastBookmarkCreateFailed": "Не удалось создать закладку",
|
||||||
"ToastBookmarkCreateSuccess": "Добавлена закладка",
|
"ToastBookmarkCreateSuccess": "Добавлена закладка",
|
||||||
"ToastBookmarkRemoveSuccess": "Закладка удалена",
|
"ToastBookmarkRemoveSuccess": "Закладка удалена",
|
||||||
|
"ToastBulkChapterInvalidCount": "Введите число от 1 до 150",
|
||||||
"ToastCachePurgeFailed": "Не удалось очистить кэш",
|
"ToastCachePurgeFailed": "Не удалось очистить кэш",
|
||||||
"ToastCachePurgeSuccess": "Кэш успешно очищен",
|
"ToastCachePurgeSuccess": "Кэш успешно очищен",
|
||||||
|
"ToastChapterLocked": "Глава заблокирована.",
|
||||||
|
"ToastChapterStartTimeAdjusted": "Время начала главы скорректировано на {0} секунд",
|
||||||
|
"ToastChaptersAllLocked": "Все главы заблокированы. Разблокируйте некоторые главы, чтобы сдвинуть их время.",
|
||||||
"ToastChaptersHaveErrors": "Главы имеют ошибки",
|
"ToastChaptersHaveErrors": "Главы имеют ошибки",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "Некорректное значение сдвига. Начало последней главы будет превышать продолжительность этой аудиокниги.",
|
"ToastChaptersInvalidShiftAmountLast": "Некорректное значение сдвига. Начало последней главы будет превышать продолжительность этой аудиокниги.",
|
||||||
"ToastChaptersInvalidShiftAmountStart": "Некорректное значение сдвига. Первая глава будет иметь нулевую или отрицательную длину и будет перезаписана второй главой. Увеличьте начальную продолжительность второй главы.",
|
"ToastChaptersInvalidShiftAmountStart": "Некорректное значение сдвига. Первая глава будет иметь нулевую или отрицательную длину и будет перезаписана второй главой. Увеличьте начальную продолжительность второй главы.",
|
||||||
|
|
@ -1012,6 +1026,8 @@
|
||||||
"ToastCollectionItemsAddFailed": "Не удалось добавить элемент(ы) в коллекцию",
|
"ToastCollectionItemsAddFailed": "Не удалось добавить элемент(ы) в коллекцию",
|
||||||
"ToastCollectionRemoveSuccess": "Коллекция удалена",
|
"ToastCollectionRemoveSuccess": "Коллекция удалена",
|
||||||
"ToastCollectionUpdateSuccess": "Коллекция обновлена",
|
"ToastCollectionUpdateSuccess": "Коллекция обновлена",
|
||||||
|
"ToastConnectionNotAvailable": "Подключение недоступно. Пожалуйста попробуйте позже",
|
||||||
|
"ToastCoverSearchFailed": "Ошибка поиска обложки",
|
||||||
"ToastCoverUpdateFailed": "Не удалось обновить обложку",
|
"ToastCoverUpdateFailed": "Не удалось обновить обложку",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Дата и время указаны неверно или не до конца",
|
"ToastDateTimeInvalidOrIncomplete": "Дата и время указаны неверно или не до конца",
|
||||||
"ToastDeleteFileFailed": "Не удалось удалить файл",
|
"ToastDeleteFileFailed": "Не удалось удалить файл",
|
||||||
|
|
@ -1024,8 +1040,8 @@
|
||||||
"ToastEncodeCancelFailed": "Не удалось отменить кодирование",
|
"ToastEncodeCancelFailed": "Не удалось отменить кодирование",
|
||||||
"ToastEncodeCancelSucces": "Кодирование отменено",
|
"ToastEncodeCancelSucces": "Кодирование отменено",
|
||||||
"ToastEpisodeDownloadQueueClearFailed": "Не удалось очистить очередь",
|
"ToastEpisodeDownloadQueueClearFailed": "Не удалось очистить очередь",
|
||||||
"ToastEpisodeDownloadQueueClearSuccess": "Очередь загрузки эпизода очищена",
|
"ToastEpisodeDownloadQueueClearSuccess": "Очищена очередь скачивания выпусков",
|
||||||
"ToastEpisodeUpdateSuccess": "{0 эпизодов обновлено",
|
"ToastEpisodeUpdateSuccess": "{0} выпусков обновлено",
|
||||||
"ToastErrorCannotShare": "Невозможно предоставить общий доступ на этом устройстве",
|
"ToastErrorCannotShare": "Невозможно предоставить общий доступ на этом устройстве",
|
||||||
"ToastFailedToCreate": "Не удалось создать",
|
"ToastFailedToCreate": "Не удалось создать",
|
||||||
"ToastFailedToDelete": "Не удалось удалить",
|
"ToastFailedToDelete": "Не удалось удалить",
|
||||||
|
|
@ -1034,7 +1050,7 @@
|
||||||
"ToastFailedToShare": "Не удалось поделиться",
|
"ToastFailedToShare": "Не удалось поделиться",
|
||||||
"ToastFailedToUpdate": "Не удалось обновить",
|
"ToastFailedToUpdate": "Не удалось обновить",
|
||||||
"ToastInvalidImageUrl": "Неверный URL изображения",
|
"ToastInvalidImageUrl": "Неверный URL изображения",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "Недопустимое максимальное количество загружаемых эпизодов",
|
"ToastInvalidMaxEpisodesToDownload": "Недопустимое максимальное количество скачиваемых выпусков",
|
||||||
"ToastInvalidUrl": "Неверный URL",
|
"ToastInvalidUrl": "Неверный URL",
|
||||||
"ToastInvalidUrls": "Один или несколько URL неверны",
|
"ToastInvalidUrls": "Один или несколько URL неверны",
|
||||||
"ToastItemCoverUpdateSuccess": "Обложка элемента обновлена",
|
"ToastItemCoverUpdateSuccess": "Обложка элемента обновлена",
|
||||||
|
|
@ -1062,15 +1078,15 @@
|
||||||
"ToastNameEmailRequired": "Имя и адрес электронной почты обязательны",
|
"ToastNameEmailRequired": "Имя и адрес электронной почты обязательны",
|
||||||
"ToastNameRequired": "Имя обязательно для заполнения",
|
"ToastNameRequired": "Имя обязательно для заполнения",
|
||||||
"ToastNewApiKeyUserError": "Необходимо выбрать пользователя",
|
"ToastNewApiKeyUserError": "Необходимо выбрать пользователя",
|
||||||
"ToastNewEpisodesFound": "{0} новых эпизодов найдено",
|
"ToastNewEpisodesFound": "Найдено {0} новых выпусков",
|
||||||
"ToastNewUserCreatedFailed": "Не удалось создать учетную запись: \"{0}\"",
|
"ToastNewUserCreatedFailed": "Не удалось создать учетную запись: \"{0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "Новая учетная запись создана",
|
"ToastNewUserCreatedSuccess": "Новая учетная запись создана",
|
||||||
"ToastNewUserLibraryError": "Необходимо выбрать хотя бы одну библиотеку",
|
"ToastNewUserLibraryError": "Необходимо выбрать хотя бы одну библиотеку",
|
||||||
"ToastNewUserPasswordError": "Должен иметь пароль, только пользователь root может иметь пустой пароль",
|
"ToastNewUserPasswordError": "Должен иметь пароль, только пользователь root может иметь пустой пароль",
|
||||||
"ToastNewUserTagError": "Необходимо выбрать хотя бы один тег",
|
"ToastNewUserTagError": "Необходимо выбрать хотя бы один тег",
|
||||||
"ToastNewUserUsernameError": "Введите имя пользователя",
|
"ToastNewUserUsernameError": "Введите имя пользователя",
|
||||||
"ToastNoNewEpisodesFound": "Новых эпизодов не найдено",
|
"ToastNoNewEpisodesFound": "Новых выпусков нету",
|
||||||
"ToastNoRSSFeed": "У подкаста нет RSS-канала",
|
"ToastNoRSSFeed": "У подкаста нет RSS-ленты",
|
||||||
"ToastNoUpdatesNecessary": "Обновления не требуются",
|
"ToastNoUpdatesNecessary": "Обновления не требуются",
|
||||||
"ToastNotificationCreateFailed": "Не удалось создать уведомление",
|
"ToastNotificationCreateFailed": "Не удалось создать уведомление",
|
||||||
"ToastNotificationDeleteFailed": "Не удалось удалить уведомление",
|
"ToastNotificationDeleteFailed": "Не удалось удалить уведомление",
|
||||||
|
|
@ -1086,16 +1102,17 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Плейлист обновлен",
|
"ToastPlaylistUpdateSuccess": "Плейлист обновлен",
|
||||||
"ToastPodcastCreateFailed": "Не удалось создать подкаст",
|
"ToastPodcastCreateFailed": "Не удалось создать подкаст",
|
||||||
"ToastPodcastCreateSuccess": "Подкаст успешно создан",
|
"ToastPodcastCreateSuccess": "Подкаст успешно создан",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Выпуск обновлён",
|
||||||
"ToastPodcastGetFeedFailed": "Не удалось получить ленту подкастов",
|
"ToastPodcastGetFeedFailed": "Не удалось получить ленту подкастов",
|
||||||
"ToastPodcastNoEpisodesInFeed": "В RSS-ленте эпизодов не найдено",
|
"ToastPodcastNoEpisodesInFeed": "В RSS-ленте выпусков не найдено",
|
||||||
"ToastPodcastNoRssFeed": "В подкасте нет RSS-канала",
|
"ToastPodcastNoRssFeed": "В подкасте нет RSS-ленты",
|
||||||
"ToastProgressIsNotBeingSynced": "Прогресс не синхронизируется, перезапустите воспроизведение",
|
"ToastProgressIsNotBeingSynced": "Прогресс не синхронизируется, перезапустите воспроизведение",
|
||||||
"ToastProviderCreatedFailed": "Не удалось добавить провайдера",
|
"ToastProviderCreatedFailed": "Не удалось добавить провайдера",
|
||||||
"ToastProviderCreatedSuccess": "Добавлен новый провайдер",
|
"ToastProviderCreatedSuccess": "Добавлен новый провайдер",
|
||||||
"ToastProviderNameAndUrlRequired": "Имя и URL обязательные",
|
"ToastProviderNameAndUrlRequired": "Имя и URL обязательные",
|
||||||
"ToastProviderRemoveSuccess": "Провайдер удален",
|
"ToastProviderRemoveSuccess": "Провайдер удален",
|
||||||
"ToastRSSFeedCloseFailed": "Не удалось закрыть RSS-канал",
|
"ToastRSSFeedCloseFailed": "Не удалось закрыть RSS-ленту",
|
||||||
"ToastRSSFeedCloseSuccess": "RSS-канал закрыт",
|
"ToastRSSFeedCloseSuccess": "RSS-лента закрыта",
|
||||||
"ToastRemoveFailed": "Не удалось удалить",
|
"ToastRemoveFailed": "Не удалось удалить",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Не удалось удалить элемент из коллекции",
|
"ToastRemoveItemFromCollectionFailed": "Не удалось удалить элемент из коллекции",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "Элемент удален из коллекции",
|
"ToastRemoveItemFromCollectionSuccess": "Элемент удален из коллекции",
|
||||||
|
|
@ -1136,5 +1153,13 @@
|
||||||
"ToastUserPasswordChangeSuccess": "Пароль успешно изменен",
|
"ToastUserPasswordChangeSuccess": "Пароль успешно изменен",
|
||||||
"ToastUserPasswordMismatch": "Пароли не совпадают",
|
"ToastUserPasswordMismatch": "Пароли не совпадают",
|
||||||
"ToastUserPasswordMustChange": "Новый пароль не может совпадать со старым паролем",
|
"ToastUserPasswordMustChange": "Новый пароль не может совпадать со старым паролем",
|
||||||
"ToastUserRootRequireName": "Необходимо ввести имя пользователя root"
|
"ToastUserRootRequireName": "Необходимо ввести имя пользователя root",
|
||||||
|
"TooltipAddChapters": "Добавить главу(ы)",
|
||||||
|
"TooltipAddOneSecond": "Добавить 1 секунду",
|
||||||
|
"TooltipAdjustChapterStart": "Нажмите, чтобы настроить время начала",
|
||||||
|
"TooltipLockAllChapters": "Заблокировать все главы",
|
||||||
|
"TooltipLockChapter": "Заблокировать главу (Shift+клик для диапазона)",
|
||||||
|
"TooltipSubtractOneSecond": "Вычтите 1 секунду",
|
||||||
|
"TooltipUnlockAllChapters": "Разблокируйте все главы",
|
||||||
|
"TooltipUnlockChapter": "Разблокируйте главу (Shift+клик для диапазона)"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
{
|
{
|
||||||
"ButtonAdd": "Pridať",
|
"ButtonAdd": "Pridať",
|
||||||
|
"ButtonAddApiKey": "Pridať kľúč API",
|
||||||
"ButtonAddChapters": "Pridať kapitoly",
|
"ButtonAddChapters": "Pridať kapitoly",
|
||||||
"ButtonAddDevice": "Pridať zariadenie",
|
"ButtonAddDevice": "Pridať zariadenie",
|
||||||
"ButtonAddLibrary": "Pridať knižnicu",
|
"ButtonAddLibrary": "Pridať knižnicu",
|
||||||
"ButtonAddPodcasts": "Pridať podcasty",
|
"ButtonAddPodcasts": "Pridať podcasty",
|
||||||
"ButtonAddUser": "Pridať užívateľa",
|
"ButtonAddUser": "Pridať používateľa",
|
||||||
"ButtonAddYourFirstLibrary": "Pridajte vašu prvú knižnicu",
|
"ButtonAddYourFirstLibrary": "Pridajte vašu prvú knižnicu",
|
||||||
"ButtonApply": "Použiť",
|
"ButtonApply": "Použiť",
|
||||||
"ButtonApplyChapters": "Použiť kapitoly",
|
"ButtonApplyChapters": "Použiť kapitoly",
|
||||||
|
|
@ -20,6 +21,7 @@
|
||||||
"ButtonChooseAFolder": "Vyberte priečinok",
|
"ButtonChooseAFolder": "Vyberte priečinok",
|
||||||
"ButtonChooseFiles": "Vyberte súbory",
|
"ButtonChooseFiles": "Vyberte súbory",
|
||||||
"ButtonClearFilter": "Zrušiť filter",
|
"ButtonClearFilter": "Zrušiť filter",
|
||||||
|
"ButtonClose": "Uzavrieť",
|
||||||
"ButtonCloseFeed": "Zatvoriť zdroj",
|
"ButtonCloseFeed": "Zatvoriť zdroj",
|
||||||
"ButtonCloseSession": "Ukončiť otvorené pripojenie",
|
"ButtonCloseSession": "Ukončiť otvorené pripojenie",
|
||||||
"ButtonCollections": "Kolekcie",
|
"ButtonCollections": "Kolekcie",
|
||||||
|
|
@ -119,11 +121,13 @@
|
||||||
"HeaderAccount": "Účet",
|
"HeaderAccount": "Účet",
|
||||||
"HeaderAddCustomMetadataProvider": "Pridať vastný zdroj metadát",
|
"HeaderAddCustomMetadataProvider": "Pridať vastný zdroj metadát",
|
||||||
"HeaderAdvanced": "Pokročilé",
|
"HeaderAdvanced": "Pokročilé",
|
||||||
|
"HeaderApiKeys": "Kľúče API",
|
||||||
"HeaderAppriseNotificationSettings": "Nastavenie Apprise notifikácií",
|
"HeaderAppriseNotificationSettings": "Nastavenie Apprise notifikácií",
|
||||||
"HeaderAudioTracks": "Zvukové stopy",
|
"HeaderAudioTracks": "Zvukové stopy",
|
||||||
"HeaderAudiobookTools": "Nástroje na správu súborov audiokníh",
|
"HeaderAudiobookTools": "Nástroje na správu súborov audiokníh",
|
||||||
"HeaderAuthentication": "Overenie",
|
"HeaderAuthentication": "Overenie",
|
||||||
"HeaderBackups": "Zálohy",
|
"HeaderBackups": "Zálohy",
|
||||||
|
"HeaderBulkChapterModal": "Pridať viaceré kapitoly",
|
||||||
"HeaderChangePassword": "Zmeniť heslo",
|
"HeaderChangePassword": "Zmeniť heslo",
|
||||||
"HeaderChapters": "Kapitoly",
|
"HeaderChapters": "Kapitoly",
|
||||||
"HeaderChooseAFolder": "Vybrať priečinok",
|
"HeaderChooseAFolder": "Vybrať priečinok",
|
||||||
|
|
@ -162,6 +166,7 @@
|
||||||
"HeaderMetadataOrderOfPrecedence": "Metadáta pravidiel poradia",
|
"HeaderMetadataOrderOfPrecedence": "Metadáta pravidiel poradia",
|
||||||
"HeaderMetadataToEmbed": "Metadáta na vloženie",
|
"HeaderMetadataToEmbed": "Metadáta na vloženie",
|
||||||
"HeaderNewAccount": "Nový účet",
|
"HeaderNewAccount": "Nový účet",
|
||||||
|
"HeaderNewApiKey": "Nový kľúč API",
|
||||||
"HeaderNewLibrary": "Nová knižnica",
|
"HeaderNewLibrary": "Nová knižnica",
|
||||||
"HeaderNotificationCreate": "Vytvoriť notifikáciu",
|
"HeaderNotificationCreate": "Vytvoriť notifikáciu",
|
||||||
"HeaderNotificationUpdate": "Aktualizovať notifikáciu",
|
"HeaderNotificationUpdate": "Aktualizovať notifikáciu",
|
||||||
|
|
@ -195,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Experimentálne funkcie",
|
"HeaderSettingsExperimental": "Experimentálne funkcie",
|
||||||
"HeaderSettingsGeneral": "Hlavné",
|
"HeaderSettingsGeneral": "Hlavné",
|
||||||
"HeaderSettingsScanner": "Skener",
|
"HeaderSettingsScanner": "Skener",
|
||||||
|
"HeaderSettingsSecurity": "Zabezpečenie",
|
||||||
"HeaderSettingsWebClient": "Webový klient",
|
"HeaderSettingsWebClient": "Webový klient",
|
||||||
"HeaderSleepTimer": "Časovač spánku",
|
"HeaderSleepTimer": "Časovač spánku",
|
||||||
"HeaderStatsLargestItems": "Najväčšie položky",
|
"HeaderStatsLargestItems": "Najväčšie položky",
|
||||||
|
|
@ -206,6 +212,7 @@
|
||||||
"HeaderTableOfContents": "Obsah",
|
"HeaderTableOfContents": "Obsah",
|
||||||
"HeaderTools": "Nástroje",
|
"HeaderTools": "Nástroje",
|
||||||
"HeaderUpdateAccount": "Aktualizovať účet",
|
"HeaderUpdateAccount": "Aktualizovať účet",
|
||||||
|
"HeaderUpdateApiKey": "Aktualizovať kľúč API",
|
||||||
"HeaderUpdateAuthor": "Aktualizovať autora",
|
"HeaderUpdateAuthor": "Aktualizovať autora",
|
||||||
"HeaderUpdateDetails": "Aktualizovať detaily",
|
"HeaderUpdateDetails": "Aktualizovať detaily",
|
||||||
"HeaderUpdateLibrary": "Aktualizovať knižnicu",
|
"HeaderUpdateLibrary": "Aktualizovať knižnicu",
|
||||||
|
|
@ -235,6 +242,10 @@
|
||||||
"LabelAllUsersExcludingGuests": "Všetci užívatelia okrem hostí",
|
"LabelAllUsersExcludingGuests": "Všetci užívatelia okrem hostí",
|
||||||
"LabelAllUsersIncludingGuests": "Všetci užívatelia vrátane hostí",
|
"LabelAllUsersIncludingGuests": "Všetci užívatelia vrátane hostí",
|
||||||
"LabelAlreadyInYourLibrary": "Už v tvojej knižnici",
|
"LabelAlreadyInYourLibrary": "Už v tvojej knižnici",
|
||||||
|
"LabelApiKeyCreated": "Kľúč API \"{0}\" bol úspešne vytvorený.",
|
||||||
|
"LabelApiKeyCreatedDescription": "Skopírujte si kľúč API teraz, neskôr ho už neuvidíte.",
|
||||||
|
"LabelApiKeyUser": "Vykonáva v mene používateľa",
|
||||||
|
"LabelApiKeyUserDescription": "Uvedená API bude mať rovnaké práva ako používateľ, v mene ktorého koná. Rovnako v záznamoch budú jednotlivé krky uvedené, ako keby ich vykonal samotný používateľ.",
|
||||||
"LabelApiToken": "API Token",
|
"LabelApiToken": "API Token",
|
||||||
"LabelAppend": "Pridať",
|
"LabelAppend": "Pridať",
|
||||||
"LabelAudioBitrate": "Bitrate audio stopy (napr. 128k)",
|
"LabelAudioBitrate": "Bitrate audio stopy (napr. 128k)",
|
||||||
|
|
@ -284,6 +295,7 @@
|
||||||
"LabelContinueListening": "Pokračovať v počúvaní",
|
"LabelContinueListening": "Pokračovať v počúvaní",
|
||||||
"LabelContinueReading": "Pokračovať v čítaní",
|
"LabelContinueReading": "Pokračovať v čítaní",
|
||||||
"LabelContinueSeries": "Pokračovať v sérii",
|
"LabelContinueSeries": "Pokračovať v sérii",
|
||||||
|
"LabelCorsAllowed": "CORS Origins povolené",
|
||||||
"LabelCover": "Prebal",
|
"LabelCover": "Prebal",
|
||||||
"LabelCoverImageURL": "URL obrázku prebalu",
|
"LabelCoverImageURL": "URL obrázku prebalu",
|
||||||
"LabelCoverProvider": "Poskytovateľ prebalu",
|
"LabelCoverProvider": "Poskytovateľ prebalu",
|
||||||
|
|
@ -297,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Zmazať zo systému (odškrtni len pre odstránenie z databázy)",
|
"LabelDeleteFromFileSystemCheckbox": "Zmazať zo systému (odškrtni len pre odstránenie z databázy)",
|
||||||
"LabelDescription": "Popis",
|
"LabelDescription": "Popis",
|
||||||
"LabelDeselectAll": "Odznačiť všetko",
|
"LabelDeselectAll": "Odznačiť všetko",
|
||||||
|
"LabelDetectedPattern": "Identifikovaný vzor:",
|
||||||
"LabelDevice": "Zariadenie",
|
"LabelDevice": "Zariadenie",
|
||||||
"LabelDeviceInfo": "Informácie o zariadení",
|
"LabelDeviceInfo": "Informácie o zariadení",
|
||||||
"LabelDeviceIsAvailableTo": "Zariadenie je k dispozícii...",
|
"LabelDeviceIsAvailableTo": "Zariadenie je k dispozícii...",
|
||||||
|
|
@ -346,6 +359,10 @@
|
||||||
"LabelExample": "Príklad",
|
"LabelExample": "Príklad",
|
||||||
"LabelExpandSeries": "Rozbaliť série",
|
"LabelExpandSeries": "Rozbaliť série",
|
||||||
"LabelExpandSubSeries": "Rozbaliť podsérie",
|
"LabelExpandSubSeries": "Rozbaliť podsérie",
|
||||||
|
"LabelExpired": "Vypršal",
|
||||||
|
"LabelExpiresAt": "Vyprší",
|
||||||
|
"LabelExpiresInSeconds": "Vyprší za (sekúnd)",
|
||||||
|
"LabelExpiresNever": "Nikdy",
|
||||||
"LabelExplicit": "Explicitný obsah",
|
"LabelExplicit": "Explicitný obsah",
|
||||||
"LabelExplicitChecked": "Explicitné (zaškrtnuté)",
|
"LabelExplicitChecked": "Explicitné (zaškrtnuté)",
|
||||||
"LabelExplicitUnchecked": "Ne-explicitné (nezaškrtnuté)",
|
"LabelExplicitUnchecked": "Ne-explicitné (nezaškrtnuté)",
|
||||||
|
|
@ -361,6 +378,7 @@
|
||||||
"LabelFilterByUser": "Užívateľský filter",
|
"LabelFilterByUser": "Užívateľský filter",
|
||||||
"LabelFindEpisodes": "Nájsť epizódy",
|
"LabelFindEpisodes": "Nájsť epizódy",
|
||||||
"LabelFinished": "Ukončené",
|
"LabelFinished": "Ukončené",
|
||||||
|
"LabelFinishedDate": "Dokončené {0}",
|
||||||
"LabelFolder": "Priečinok",
|
"LabelFolder": "Priečinok",
|
||||||
"LabelFolders": "Priečinky",
|
"LabelFolders": "Priečinky",
|
||||||
"LabelFontBold": "Tučné",
|
"LabelFontBold": "Tučné",
|
||||||
|
|
@ -405,6 +423,7 @@
|
||||||
"LabelLanguages": "Jazyky",
|
"LabelLanguages": "Jazyky",
|
||||||
"LabelLastBookAdded": "Posledná pridaná kniha",
|
"LabelLastBookAdded": "Posledná pridaná kniha",
|
||||||
"LabelLastBookUpdated": "Posledná aktualizovaná kniha",
|
"LabelLastBookUpdated": "Posledná aktualizovaná kniha",
|
||||||
|
"LabelLastProgressDate": "Posledný pokrok: {0}",
|
||||||
"LabelLastSeen": "Posledne videné",
|
"LabelLastSeen": "Posledne videné",
|
||||||
"LabelLastTime": "Posledný čas",
|
"LabelLastTime": "Posledný čas",
|
||||||
"LabelLastUpdate": "Posledná aktualizácia",
|
"LabelLastUpdate": "Posledná aktualizácia",
|
||||||
|
|
@ -417,6 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Žiadne {0}",
|
"LabelLibraryFilterSublistEmpty": "Žiadne {0}",
|
||||||
"LabelLibraryItem": "Položka knižnice",
|
"LabelLibraryItem": "Položka knižnice",
|
||||||
"LabelLibraryName": "Názov knižnice",
|
"LabelLibraryName": "Názov knižnice",
|
||||||
|
"LabelLibrarySortByProgress": "Pokrok: Aktualizované",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Pokrok: Dokončené",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Pokrok: Začiatok",
|
||||||
"LabelLimit": "Limit",
|
"LabelLimit": "Limit",
|
||||||
"LabelLineSpacing": "Riadkovanie",
|
"LabelLineSpacing": "Riadkovanie",
|
||||||
"LabelListenAgain": "Počúvať znova",
|
"LabelListenAgain": "Počúvať znova",
|
||||||
|
|
@ -425,6 +447,7 @@
|
||||||
"LabelLogLevelWarn": "Varovanie",
|
"LabelLogLevelWarn": "Varovanie",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Hľadať nové epizódy od uvedeného dátumu",
|
"LabelLookForNewEpisodesAfterDate": "Hľadať nové epizódy od uvedeného dátumu",
|
||||||
"LabelLowestPriority": "Najnižšia priorita",
|
"LabelLowestPriority": "Najnižšia priorita",
|
||||||
|
"LabelMatchConfidence": "Istota",
|
||||||
"LabelMatchExistingUsersBy": "Vyhľadaj vytvorených užívateľov podľa",
|
"LabelMatchExistingUsersBy": "Vyhľadaj vytvorených užívateľov podľa",
|
||||||
"LabelMatchExistingUsersByDescription": "Používané na pripájanie vytvorených užívateľov. Po pripojení budú užívatelia vyhľadaní na základe jedinečného id poskytnutého Vaším poskytovateľom SSO",
|
"LabelMatchExistingUsersByDescription": "Používané na pripájanie vytvorených užívateľov. Po pripojení budú užívatelia vyhľadaní na základe jedinečného id poskytnutého Vaším poskytovateľom SSO",
|
||||||
"LabelMaxEpisodesToDownload": "Stiahnuť maximálne # epizód. Pre neobmedzené sťahovanie zadajte 0.",
|
"LabelMaxEpisodesToDownload": "Stiahnuť maximálne # epizód. Pre neobmedzené sťahovanie zadajte 0.",
|
||||||
|
|
@ -454,7 +477,9 @@
|
||||||
"LabelNewestAuthors": "Najnovší autori",
|
"LabelNewestAuthors": "Najnovší autori",
|
||||||
"LabelNewestEpisodes": "Najnovšie epizódy",
|
"LabelNewestEpisodes": "Najnovšie epizódy",
|
||||||
"LabelNextBackupDate": "Ďalší dátum zálohovania",
|
"LabelNextBackupDate": "Ďalší dátum zálohovania",
|
||||||
|
"LabelNextChapters": "Nasledujúce kapitoly:",
|
||||||
"LabelNextScheduledRun": "Ďalší plánovaný beh",
|
"LabelNextScheduledRun": "Ďalší plánovaný beh",
|
||||||
|
"LabelNoApiKeys": "Žiadne API kľúče",
|
||||||
"LabelNoCustomMetadataProviders": "Žiadne vlastné zdroje metadát",
|
"LabelNoCustomMetadataProviders": "Žiadne vlastné zdroje metadát",
|
||||||
"LabelNoEpisodesSelected": "Neboli vybrané žiadne epizódy",
|
"LabelNoEpisodesSelected": "Neboli vybrané žiadne epizódy",
|
||||||
"LabelNotFinished": "Nedokončené",
|
"LabelNotFinished": "Nedokončené",
|
||||||
|
|
@ -470,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Maximálna dĺžka fronty oznámení",
|
"LabelNotificationsMaxQueueSize": "Maximálna dĺžka fronty oznámení",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Odosielanie udalostí je ohraničené na jedno oznámenie za sekundu. Novovzniknuté udalosti budú ignorované, ak bude fronta oznámení naplnená. Toto nastavenie zabraňuje nevyžiadanému zahlteniu oznámeniami.",
|
"LabelNotificationsMaxQueueSizeHelp": "Odosielanie udalostí je ohraničené na jedno oznámenie za sekundu. Novovzniknuté udalosti budú ignorované, ak bude fronta oznámení naplnená. Toto nastavenie zabraňuje nevyžiadanému zahlteniu oznámeniami.",
|
||||||
"LabelNumberOfBooks": "Počet kníh",
|
"LabelNumberOfBooks": "Počet kníh",
|
||||||
|
"LabelNumberOfChapters": "Počet kapitol:",
|
||||||
"LabelNumberOfEpisodes": "# z epizód",
|
"LabelNumberOfEpisodes": "# z epizód",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Názov OpenID predpokladá prítomnosť pokročilých povolení pre užívateľské akcie v rámci aplikácie, ktoré sú aplikovateľné na ne-administrátorské role (<b>ak sú nakonfigurované</b>). Ak potvrdenie takýchto pokročilých povolení nie je v odozve prítomné, prístup do ABS bude automaticky zamietnutý. Ak v odozve chýba len niektoré z očakávaných nastavení, tak bude jeho hodnota automaticky nastavená na <code>false</code>. Uistite sa prosím, že forma odozvy poskytovateľa identity má nasledovnú štruktúru:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Názov OpenID predpokladá prítomnosť pokročilých povolení pre užívateľské akcie v rámci aplikácie, ktoré sú aplikovateľné na ne-administrátorské role (<b>ak sú nakonfigurované</b>). Ak potvrdenie takýchto pokročilých povolení nie je v odozve prítomné, prístup do ABS bude automaticky zamietnutý. Ak v odozve chýba len niektoré z očakávaných nastavení, tak bude jeho hodnota automaticky nastavená na <code>false</code>. Uistite sa prosím, že forma odozvy poskytovateľa identity má nasledovnú štruktúru:",
|
||||||
"LabelOpenIDClaims": "Ak ponecháte nasledujúce nastavenia prázdne, pokročilé nastavenia skupín a povolení nebudú aktivované a automaticky bude nastavená skupina 'Užívateľ'.",
|
"LabelOpenIDClaims": "Ak ponecháte nasledujúce nastavenia prázdne, pokročilé nastavenia skupín a povolení nebudú aktivované a automaticky bude nastavená skupina 'Užívateľ'.",
|
||||||
|
|
@ -544,6 +570,7 @@
|
||||||
"LabelSelectAll": "Vybrať všetko",
|
"LabelSelectAll": "Vybrať všetko",
|
||||||
"LabelSelectAllEpisodes": "Vybrať všetky epizódy",
|
"LabelSelectAllEpisodes": "Vybrať všetky epizódy",
|
||||||
"LabelSelectEpisodesShowing": "Vybrať {0} zobrazených epizód",
|
"LabelSelectEpisodesShowing": "Vybrať {0} zobrazených epizód",
|
||||||
|
"LabelSelectUser": "Vyberte používateľa",
|
||||||
"LabelSelectUsers": "Vybrať užívateľov",
|
"LabelSelectUsers": "Vybrať užívateľov",
|
||||||
"LabelSendEbookToDevice": "Poslať e-knihu do...",
|
"LabelSendEbookToDevice": "Poslať e-knihu do...",
|
||||||
"LabelSequence": "Postupnosť",
|
"LabelSequence": "Postupnosť",
|
||||||
|
|
@ -611,6 +638,7 @@
|
||||||
"LabelStartTime": "Čas spustenia",
|
"LabelStartTime": "Čas spustenia",
|
||||||
"LabelStarted": "Začaté",
|
"LabelStarted": "Začaté",
|
||||||
"LabelStartedAt": "Začaté v",
|
"LabelStartedAt": "Začaté v",
|
||||||
|
"LabelStartedDate": "Začaté {0}",
|
||||||
"LabelStatsAudioTracks": "Zvukové stopy",
|
"LabelStatsAudioTracks": "Zvukové stopy",
|
||||||
"LabelStatsAuthors": "Autori",
|
"LabelStatsAuthors": "Autori",
|
||||||
"LabelStatsBestDay": "Najlepší deň",
|
"LabelStatsBestDay": "Najlepší deň",
|
||||||
|
|
@ -640,6 +668,7 @@
|
||||||
"LabelTheme": "Téma",
|
"LabelTheme": "Téma",
|
||||||
"LabelThemeDark": "Tmavá",
|
"LabelThemeDark": "Tmavá",
|
||||||
"LabelThemeLight": "Svetlá",
|
"LabelThemeLight": "Svetlá",
|
||||||
|
"LabelThemeSepia": "Sépia",
|
||||||
"LabelTimeBase": "Časová základňa",
|
"LabelTimeBase": "Časová základňa",
|
||||||
"LabelTimeDurationXHours": "{0} hodín",
|
"LabelTimeDurationXHours": "{0} hodín",
|
||||||
"LabelTimeDurationXMinutes": "{0} minút",
|
"LabelTimeDurationXMinutes": "{0} minút",
|
||||||
|
|
@ -708,7 +737,9 @@
|
||||||
"MessageAddToPlayerQueue": "Pridať do zoznamu prehrávania",
|
"MessageAddToPlayerQueue": "Pridať do zoznamu prehrávania",
|
||||||
"MessageAppriseDescription": "Aby ste mohli používať túto funkciumusíte mať k dispozícii inštanciu <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> alebo inú, ktorá dokáže spracovávať rovnaké požiadavky/requesty.<br/>Apprise URL musí byť úplná URL určená na zasielanie notifikácií, tj. ak napr. vaša APi beží na <code>http://192.168.1.1:8337</code>, vložte do daného poľa <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Aby ste mohli používať túto funkciumusíte mať k dispozícii inštanciu <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> alebo inú, ktorá dokáže spracovávať rovnaké požiadavky/requesty.<br/>Apprise URL musí byť úplná URL určená na zasielanie notifikácií, tj. ak napr. vaša APi beží na <code>http://192.168.1.1:8337</code>, vložte do daného poľa <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Uistite sa, že používate ASIN zo správneho regiónu Audible, nie Amazonu.",
|
"MessageAsinCheck": "Uistite sa, že používate ASIN zo správneho regiónu Audible, nie Amazonu.",
|
||||||
|
"MessageAuthenticationLegacyTokenWarning": "Zastaralé API toleny budú v budúcnosti odstránené. Použite miesto nich <a href=\"/config/api-keys\">API kľúče</a>.",
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Reštartujte svoj server po uložení, aby mohli byť použité zmeny OIDC.",
|
"MessageAuthenticationOIDCChangesRestart": "Reštartujte svoj server po uložení, aby mohli byť použité zmeny OIDC.",
|
||||||
|
"MessageAuthenticationSecurityMessage": "Overovanie bolo kvôli bezpečnosti vylepšené. Všetci používatelia sa musia znova prihlásiť.",
|
||||||
"MessageBackupsDescription": "Zálohy pokrývajú používateľov, ich aktuálne stavy počúvania, detaily položiek knižnice, nastavenia servera a obrázky uložené v <code>/metadata/items</code> a <code>/metadata/authors</code>. Zálohy <strong>neobsahujú</strong> súbory v priečinkoch vašich knižníc.",
|
"MessageBackupsDescription": "Zálohy pokrývajú používateľov, ich aktuálne stavy počúvania, detaily položiek knižnice, nastavenia servera a obrázky uložené v <code>/metadata/items</code> a <code>/metadata/authors</code>. Zálohy <strong>neobsahujú</strong> súbory v priečinkoch vašich knižníc.",
|
||||||
"MessageBackupsLocationEditNote": "Poznámka: Zmena umiestnenia záloh nepresunie ani nezmení existujúce zálohy",
|
"MessageBackupsLocationEditNote": "Poznámka: Zmena umiestnenia záloh nepresunie ani nezmení existujúce zálohy",
|
||||||
"MessageBackupsLocationNoEditNote": "Poznámka: Umietnenie záloh je nastavené prostredníctvom premennej prostredia a nie je ho možné zmeniť z tohto miesta.",
|
"MessageBackupsLocationNoEditNote": "Poznámka: Umietnenie záloh je nastavené prostredníctvom premennej prostredia a nie je ho možné zmeniť z tohto miesta.",
|
||||||
|
|
@ -722,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Žiadny výsledok filtrovania \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Žiadny výsledok filtrovania \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Žiadne výsledky dopytu",
|
"MessageBookshelfNoResultsForQuery": "Žiadne výsledky dopytu",
|
||||||
"MessageBookshelfNoSeries": "Nemáte žiadne série",
|
"MessageBookshelfNoSeries": "Nemáte žiadne série",
|
||||||
|
"MessageBulkChapterPattern": "Koľko ďalších kapitol si želáte pridať s týmto spôsobom číslovania?",
|
||||||
"MessageChapterEndIsAfter": "Koniec kapitoly je až za koncom vašej audioknihy",
|
"MessageChapterEndIsAfter": "Koniec kapitoly je až za koncom vašej audioknihy",
|
||||||
"MessageChapterErrorFirstNotZero": "Prvá kapitola musí začínať na 0",
|
"MessageChapterErrorFirstNotZero": "Prvá kapitola musí začínať na 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Neplatný čas začiatku musí byť menší ako celkové trvanie audioknihy",
|
"MessageChapterErrorStartGteDuration": "Neplatný čas začiatku musí byť menší ako celkové trvanie audioknihy",
|
||||||
|
|
@ -730,6 +762,7 @@
|
||||||
"MessageChaptersNotFound": "Kapitoly nenájdené",
|
"MessageChaptersNotFound": "Kapitoly nenájdené",
|
||||||
"MessageCheckingCron": "Kontrola cron-u...",
|
"MessageCheckingCron": "Kontrola cron-u...",
|
||||||
"MessageConfirmCloseFeed": "Ste si istý, že chcete zavrieť tento zdroj?",
|
"MessageConfirmCloseFeed": "Ste si istý, že chcete zavrieť tento zdroj?",
|
||||||
|
"MessageConfirmDeleteApiKey": "Ste si istý, že chcete zmazať API kľúč \"{0}\"?",
|
||||||
"MessageConfirmDeleteBackup": "Ste si istý, že chcete zmazať zálohu {0}?",
|
"MessageConfirmDeleteBackup": "Ste si istý, že chcete zmazať zálohu {0}?",
|
||||||
"MessageConfirmDeleteDevice": "Ste si istý, že chcete zmazať zariadenie čítačky e-kníh \"{0}\"?",
|
"MessageConfirmDeleteDevice": "Ste si istý, že chcete zmazať zariadenie čítačky e-kníh \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Týmto odstránite súbor z vášho súborového systému. Ste si istý?",
|
"MessageConfirmDeleteFile": "Týmto odstránite súbor z vášho súborového systému. Ste si istý?",
|
||||||
|
|
@ -783,6 +816,8 @@
|
||||||
"MessageFeedURLWillBe": "URL zdroja bude {0}",
|
"MessageFeedURLWillBe": "URL zdroja bude {0}",
|
||||||
"MessageFetching": "Získavam...",
|
"MessageFetching": "Získavam...",
|
||||||
"MessageForceReScanDescription": "preskenuje všetky súbory ako pri prvom skenovaní. ID3 štítky zvukových súborov, OPF súbory a textové súbory budú nanovo naskenované.",
|
"MessageForceReScanDescription": "preskenuje všetky súbory ako pri prvom skenovaní. ID3 štítky zvukových súborov, OPF súbory a textové súbory budú nanovo naskenované.",
|
||||||
|
"MessageHeatmapListeningTimeTooltip": "<strong>{0} počúvajúcich</strong> na {1}",
|
||||||
|
"MessageHeatmapNoListeningSessions": "Žiadne relácie počúvania na {0}",
|
||||||
"MessageImportantNotice": "Dôležité upozornenie!",
|
"MessageImportantNotice": "Dôležité upozornenie!",
|
||||||
"MessageInsertChapterBelow": "Vložte kapitolu nižšie",
|
"MessageInsertChapterBelow": "Vložte kapitolu nižšie",
|
||||||
"MessageInvalidAsin": "Neplatné ASIN",
|
"MessageInvalidAsin": "Neplatné ASIN",
|
||||||
|
|
@ -922,6 +957,7 @@
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Spustí sa, keď je automatické sťahovanie epizód pozastavené z dôvodu veľkého počtu zlyhaní",
|
"NotificationOnRSSFeedDisabledDescription": "Spustí sa, keď je automatické sťahovanie epizód pozastavené z dôvodu veľkého počtu zlyhaní",
|
||||||
"NotificationOnRSSFeedFailedDescription": "Spustí sa v prípade, keď zlyhá požiadavka RSS zdroja na automatické stiahnutie epizódy",
|
"NotificationOnRSSFeedFailedDescription": "Spustí sa v prípade, keď zlyhá požiadavka RSS zdroja na automatické stiahnutie epizódy",
|
||||||
"NotificationOnTestDescription": "Udalosť určená na testovanie systému notifikácií",
|
"NotificationOnTestDescription": "Udalosť určená na testovanie systému notifikácií",
|
||||||
|
"PlaceholderBulkChapterInput": "Zadajte názov kapitoly alebo použite číslovanie (napr., 'Epizóda 1', 'Kapitola 10', '1.')",
|
||||||
"PlaceholderNewCollection": "Názov novej zbierky",
|
"PlaceholderNewCollection": "Názov novej zbierky",
|
||||||
"PlaceholderNewFolderPath": "Umiestnenie nového priečinka",
|
"PlaceholderNewFolderPath": "Umiestnenie nového priečinka",
|
||||||
"PlaceholderNewPlaylist": "Názov nového playlistu",
|
"PlaceholderNewPlaylist": "Názov nového playlistu",
|
||||||
|
|
@ -975,8 +1011,12 @@
|
||||||
"ToastBookmarkCreateFailed": "Vytvorenie záložky zlyhalo",
|
"ToastBookmarkCreateFailed": "Vytvorenie záložky zlyhalo",
|
||||||
"ToastBookmarkCreateSuccess": "Záložka pridaná",
|
"ToastBookmarkCreateSuccess": "Záložka pridaná",
|
||||||
"ToastBookmarkRemoveSuccess": "Záložka odstránená",
|
"ToastBookmarkRemoveSuccess": "Záložka odstránená",
|
||||||
|
"ToastBulkChapterInvalidCount": "Zadajte číslo medzi 1 a 150",
|
||||||
"ToastCachePurgeFailed": "Vyčistenie vyrovnávacej pamäte zlyhalo",
|
"ToastCachePurgeFailed": "Vyčistenie vyrovnávacej pamäte zlyhalo",
|
||||||
"ToastCachePurgeSuccess": "Vyrovnávacia pamäť vyčistená",
|
"ToastCachePurgeSuccess": "Vyrovnávacia pamäť vyčistená",
|
||||||
|
"ToastChapterLocked": "Kapitola je zamknutá.",
|
||||||
|
"ToastChapterStartTimeAdjusted": "Čas začiatku kapitoly upravený o {0} sek.",
|
||||||
|
"ToastChaptersAllLocked": "Všetky kapitoly sú zamknuté. Odomknite niektoré kapitoly, aby ste posunuli ich časy.",
|
||||||
"ToastChaptersHaveErrors": "Kapitoly obsahujú chyby",
|
"ToastChaptersHaveErrors": "Kapitoly obsahujú chyby",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "Neplatná hodnota veľkosti posunutia. Začiatok poslednej kapitoly by ležal za koncom audioknihy.",
|
"ToastChaptersInvalidShiftAmountLast": "Neplatná hodnota veľkosti posunutia. Začiatok poslednej kapitoly by ležal za koncom audioknihy.",
|
||||||
"ToastChaptersInvalidShiftAmountStart": "Nesprávna hodnota posunutia. Prvá kapitola by mala nulovú alebo zápornú dĺžku a bola by nahradená nasledujúcou kapitolou. Navýšte čas začiatku druhej kapitoly.",
|
"ToastChaptersInvalidShiftAmountStart": "Nesprávna hodnota posunutia. Prvá kapitola by mala nulovú alebo zápornú dĺžku a bola by nahradená nasledujúcou kapitolou. Navýšte čas začiatku druhej kapitoly.",
|
||||||
|
|
@ -1001,6 +1041,8 @@
|
||||||
"ToastEpisodeDownloadQueueClearSuccess": "Poradie sťahovania bolo vyčistené",
|
"ToastEpisodeDownloadQueueClearSuccess": "Poradie sťahovania bolo vyčistené",
|
||||||
"ToastEpisodeUpdateSuccess": "{0} epizód bolo aktualizovaných",
|
"ToastEpisodeUpdateSuccess": "{0} epizód bolo aktualizovaných",
|
||||||
"ToastErrorCannotShare": "Na tomto zariadení nie je možné zdielať vybraným spôsobom",
|
"ToastErrorCannotShare": "Na tomto zariadení nie je možné zdielať vybraným spôsobom",
|
||||||
|
"ToastFailedToCreate": "Vytvorenie zlyhalo",
|
||||||
|
"ToastFailedToDelete": "Zmazanie zlyhalo",
|
||||||
"ToastFailedToLoadData": "Načítanie údajov zlyhalo",
|
"ToastFailedToLoadData": "Načítanie údajov zlyhalo",
|
||||||
"ToastFailedToMatch": "Spárovanie zlyhalo",
|
"ToastFailedToMatch": "Spárovanie zlyhalo",
|
||||||
"ToastFailedToShare": "Zdieľanie zlyhalo",
|
"ToastFailedToShare": "Zdieľanie zlyhalo",
|
||||||
|
|
@ -1008,6 +1050,7 @@
|
||||||
"ToastInvalidImageUrl": "Neplatná URL obrázku",
|
"ToastInvalidImageUrl": "Neplatná URL obrázku",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "Neplatný maximálny počet epizód na stiahnutie",
|
"ToastInvalidMaxEpisodesToDownload": "Neplatný maximálny počet epizód na stiahnutie",
|
||||||
"ToastInvalidUrl": "Neplatná URL",
|
"ToastInvalidUrl": "Neplatná URL",
|
||||||
|
"ToastInvalidUrls": "Jedna alebo viac URL liniek sú neplatné",
|
||||||
"ToastItemCoverUpdateSuccess": "Prebal položky bol aktualizovaný",
|
"ToastItemCoverUpdateSuccess": "Prebal položky bol aktualizovaný",
|
||||||
"ToastItemDeletedFailed": "Odstránenie položky zlyhalo",
|
"ToastItemDeletedFailed": "Odstránenie položky zlyhalo",
|
||||||
"ToastItemDeletedSuccess": "Položka bola odstránená",
|
"ToastItemDeletedSuccess": "Položka bola odstránená",
|
||||||
|
|
@ -1032,6 +1075,7 @@
|
||||||
"ToastMustHaveAtLeastOnePath": "Musí mať aspoň jednu cestu umiestnenia",
|
"ToastMustHaveAtLeastOnePath": "Musí mať aspoň jednu cestu umiestnenia",
|
||||||
"ToastNameEmailRequired": "Meno a e-mail sú povinné",
|
"ToastNameEmailRequired": "Meno a e-mail sú povinné",
|
||||||
"ToastNameRequired": "Meno je povinné",
|
"ToastNameRequired": "Meno je povinné",
|
||||||
|
"ToastNewApiKeyUserError": "Musíte vybrať používateľa",
|
||||||
"ToastNewEpisodesFound": "Bolo nájdených {0} nových epizód",
|
"ToastNewEpisodesFound": "Bolo nájdených {0} nových epizód",
|
||||||
"ToastNewUserCreatedFailed": "Vytvorenie účtu zlyhalo: \"{0}\"",
|
"ToastNewUserCreatedFailed": "Vytvorenie účtu zlyhalo: \"{0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "Nový účet bol vytvorený",
|
"ToastNewUserCreatedSuccess": "Nový účet bol vytvorený",
|
||||||
|
|
@ -1056,6 +1100,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Playlist bol aktualizovaný",
|
"ToastPlaylistUpdateSuccess": "Playlist bol aktualizovaný",
|
||||||
"ToastPodcastCreateFailed": "Vytvorenie podcastu zlyhalo",
|
"ToastPodcastCreateFailed": "Vytvorenie podcastu zlyhalo",
|
||||||
"ToastPodcastCreateSuccess": "Podcast bol vytvorený",
|
"ToastPodcastCreateSuccess": "Podcast bol vytvorený",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Epizóda bola aktualizovaná",
|
||||||
"ToastPodcastGetFeedFailed": "Získanie zdroja podcastu zlyhalo",
|
"ToastPodcastGetFeedFailed": "Získanie zdroja podcastu zlyhalo",
|
||||||
"ToastPodcastNoEpisodesInFeed": "Na RSS zdroji neboli nájdené žiadne epizódy",
|
"ToastPodcastNoEpisodesInFeed": "Na RSS zdroji neboli nájdené žiadne epizódy",
|
||||||
"ToastPodcastNoRssFeed": "Podcast nemá RSS zdroj",
|
"ToastPodcastNoRssFeed": "Podcast nemá RSS zdroj",
|
||||||
|
|
@ -1106,5 +1151,13 @@
|
||||||
"ToastUserPasswordChangeSuccess": "Zmena hesla prebehla úspešne",
|
"ToastUserPasswordChangeSuccess": "Zmena hesla prebehla úspešne",
|
||||||
"ToastUserPasswordMismatch": "Heslá sa nezhodujú",
|
"ToastUserPasswordMismatch": "Heslá sa nezhodujú",
|
||||||
"ToastUserPasswordMustChange": "Nové heslo sa nesmie zhodovať so starým",
|
"ToastUserPasswordMustChange": "Nové heslo sa nesmie zhodovať so starým",
|
||||||
"ToastUserRootRequireName": "Musíte zadať používateľské meno root používateľa"
|
"ToastUserRootRequireName": "Musíte zadať používateľské meno root používateľa",
|
||||||
|
"TooltipAddChapters": "Pridať kapitolu(-y)",
|
||||||
|
"TooltipAddOneSecond": "Pridať 1 sekundu",
|
||||||
|
"TooltipAdjustChapterStart": "Kliknite, ak chcete zmeniť začiatočný čas",
|
||||||
|
"TooltipLockAllChapters": "Zamknúť všetky kapitoly",
|
||||||
|
"TooltipLockChapter": "Zamknúť kapitolu (Shift+klik pre skupinu)",
|
||||||
|
"TooltipSubtractOneSecond": "Odobrať 1 sekundu",
|
||||||
|
"TooltipUnlockAllChapters": "Odomknúť všetky kapitoly",
|
||||||
|
"TooltipUnlockChapter": "Odomknúť kapitolu (Shift+klik pre skupinu)"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,7 @@
|
||||||
"HeaderAudiobookTools": "Orodja za upravljanje datotek zvočnih knjig",
|
"HeaderAudiobookTools": "Orodja za upravljanje datotek zvočnih knjig",
|
||||||
"HeaderAuthentication": "Avtentikacija",
|
"HeaderAuthentication": "Avtentikacija",
|
||||||
"HeaderBackups": "Varnostne kopije",
|
"HeaderBackups": "Varnostne kopije",
|
||||||
|
"HeaderBulkChapterModal": "Dodaj več poglavij",
|
||||||
"HeaderChangePassword": "Zamenjaj geslo",
|
"HeaderChangePassword": "Zamenjaj geslo",
|
||||||
"HeaderChapters": "Poglavja",
|
"HeaderChapters": "Poglavja",
|
||||||
"HeaderChooseAFolder": "Izberite mapo",
|
"HeaderChooseAFolder": "Izberite mapo",
|
||||||
|
|
@ -199,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Eksperimentalne funkcije",
|
"HeaderSettingsExperimental": "Eksperimentalne funkcije",
|
||||||
"HeaderSettingsGeneral": "Splošno",
|
"HeaderSettingsGeneral": "Splošno",
|
||||||
"HeaderSettingsScanner": "Pregledovalnik",
|
"HeaderSettingsScanner": "Pregledovalnik",
|
||||||
|
"HeaderSettingsSecurity": "Varnost",
|
||||||
"HeaderSettingsWebClient": "Spletni odjemalec",
|
"HeaderSettingsWebClient": "Spletni odjemalec",
|
||||||
"HeaderSleepTimer": "Časovnik za izklop",
|
"HeaderSleepTimer": "Časovnik za izklop",
|
||||||
"HeaderStatsLargestItems": "Največji elementi",
|
"HeaderStatsLargestItems": "Največji elementi",
|
||||||
|
|
@ -293,6 +295,7 @@
|
||||||
"LabelContinueListening": "Nadaljuj poslušanje",
|
"LabelContinueListening": "Nadaljuj poslušanje",
|
||||||
"LabelContinueReading": "Nadaljuj branje",
|
"LabelContinueReading": "Nadaljuj branje",
|
||||||
"LabelContinueSeries": "Nadaljuj s serijo",
|
"LabelContinueSeries": "Nadaljuj s serijo",
|
||||||
|
"LabelCorsAllowed": "Dovoljeni CORS viri",
|
||||||
"LabelCover": "Naslovnica",
|
"LabelCover": "Naslovnica",
|
||||||
"LabelCoverImageURL": "URL naslovne slike",
|
"LabelCoverImageURL": "URL naslovne slike",
|
||||||
"LabelCoverProvider": "Ponudnik naslovnic",
|
"LabelCoverProvider": "Ponudnik naslovnic",
|
||||||
|
|
@ -306,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Izbriši iz datotečnega sistema (počisti polje, če želiš odstraniti samo iz zbirke podatkov)",
|
"LabelDeleteFromFileSystemCheckbox": "Izbriši iz datotečnega sistema (počisti polje, če želiš odstraniti samo iz zbirke podatkov)",
|
||||||
"LabelDescription": "Opis",
|
"LabelDescription": "Opis",
|
||||||
"LabelDeselectAll": "Odznači vse",
|
"LabelDeselectAll": "Odznači vse",
|
||||||
|
"LabelDetectedPattern": "Zaznan vzorec:",
|
||||||
"LabelDevice": "Naprava",
|
"LabelDevice": "Naprava",
|
||||||
"LabelDeviceInfo": "Podatki o napravi",
|
"LabelDeviceInfo": "Podatki o napravi",
|
||||||
"LabelDeviceIsAvailableTo": "Naprava je na voljo za...",
|
"LabelDeviceIsAvailableTo": "Naprava je na voljo za...",
|
||||||
|
|
@ -374,6 +378,7 @@
|
||||||
"LabelFilterByUser": "Filtriraj po uporabniku",
|
"LabelFilterByUser": "Filtriraj po uporabniku",
|
||||||
"LabelFindEpisodes": "Poišči epizode",
|
"LabelFindEpisodes": "Poišči epizode",
|
||||||
"LabelFinished": "Zaključeno",
|
"LabelFinished": "Zaključeno",
|
||||||
|
"LabelFinishedDate": "Končano {0}",
|
||||||
"LabelFolder": "Mapa",
|
"LabelFolder": "Mapa",
|
||||||
"LabelFolders": "Mape",
|
"LabelFolders": "Mape",
|
||||||
"LabelFontBold": "Krepko",
|
"LabelFontBold": "Krepko",
|
||||||
|
|
@ -431,7 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Ne {0}",
|
"LabelLibraryFilterSublistEmpty": "Ne {0}",
|
||||||
"LabelLibraryItem": "Element knjižnice",
|
"LabelLibraryItem": "Element knjižnice",
|
||||||
"LabelLibraryName": "Ime knjižnice",
|
"LabelLibraryName": "Ime knjižnice",
|
||||||
"LabelLibrarySortByProgress": "Napredek posodobljen",
|
"LabelLibrarySortByProgress": "Napredek: Nazadnje posodobljen",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Napredej: Končano",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Napredek: Začeto",
|
||||||
"LabelLimit": "Omejitev",
|
"LabelLimit": "Omejitev",
|
||||||
"LabelLineSpacing": "Vrstični razmak",
|
"LabelLineSpacing": "Vrstični razmak",
|
||||||
"LabelListenAgain": "Poslušaj znova",
|
"LabelListenAgain": "Poslušaj znova",
|
||||||
|
|
@ -470,6 +477,7 @@
|
||||||
"LabelNewestAuthors": "Najnovejši avtorji",
|
"LabelNewestAuthors": "Najnovejši avtorji",
|
||||||
"LabelNewestEpisodes": "Najnovejše epizode",
|
"LabelNewestEpisodes": "Najnovejše epizode",
|
||||||
"LabelNextBackupDate": "Naslednji datum varnostnega kopiranja",
|
"LabelNextBackupDate": "Naslednji datum varnostnega kopiranja",
|
||||||
|
"LabelNextChapters": "Naslednja poglavja bodo:",
|
||||||
"LabelNextScheduledRun": "Naslednji načrtovani zagon",
|
"LabelNextScheduledRun": "Naslednji načrtovani zagon",
|
||||||
"LabelNoApiKeys": "Ni API ključev",
|
"LabelNoApiKeys": "Ni API ključev",
|
||||||
"LabelNoCustomMetadataProviders": "Ni ponudnikov metapodatkov po meri",
|
"LabelNoCustomMetadataProviders": "Ni ponudnikov metapodatkov po meri",
|
||||||
|
|
@ -487,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Največja velikost čakalne vrste za dogodke obvestil",
|
"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.",
|
"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",
|
"LabelNumberOfBooks": "Število knjig",
|
||||||
|
"LabelNumberOfChapters": "Število poglavij:",
|
||||||
"LabelNumberOfEpisodes": "# epizod",
|
"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:",
|
"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'.",
|
"LabelOpenIDClaims": "Pustite naslednje možnosti prazne, da onemogočite napredno dodeljevanje skupin in dovoljenj, nato pa samodejno dodelite skupino 'Uporabnik'.",
|
||||||
|
|
@ -579,8 +588,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeuomorfna oblika z lesenimi policami",
|
"LabelSettingsBookshelfViewHelp": "Skeuomorfna oblika z lesenimi policami",
|
||||||
"LabelSettingsChromecastSupport": "Podpora za Chromecast",
|
"LabelSettingsChromecastSupport": "Podpora za Chromecast",
|
||||||
"LabelSettingsDateFormat": "Oblika datuma",
|
"LabelSettingsDateFormat": "Oblika datuma",
|
||||||
"LabelSettingsEnableWatcher": "Samodejno preglej knjižnice za spremembe",
|
"LabelSettingsEnableWatcher": "Samodejno preišči knjižnice za spremembe",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Samodejno preglej knjižnico za spremembe",
|
"LabelSettingsEnableWatcherForLibrary": "Samodejno preišči knjižnico za spremembe",
|
||||||
"LabelSettingsEnableWatcherHelp": "Omogoča samodejno dodajanje/posodabljanje elementov, ko so zaznane spremembe datoteke. *Potreben je ponovni zagon strežnika",
|
"LabelSettingsEnableWatcherHelp": "Omogoča samodejno dodajanje/posodabljanje elementov, ko so zaznane spremembe datoteke. *Potreben je ponovni zagon strežnika",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Dovoli skriptirano vsebino v epubih",
|
"LabelSettingsEpubsAllowScriptedContent": "Dovoli skriptirano vsebino v epubih",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Dovoli datotekam epub izvajanje skript. Priporočljivo je, da to nastavitev pustite onemogočeno, razen če zaupate viru datotek epub.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Dovoli datotekam epub izvajanje skript. Priporočljivo je, da to nastavitev pustite onemogočeno, razen če zaupate viru datotek epub.",
|
||||||
|
|
@ -629,6 +638,7 @@
|
||||||
"LabelStartTime": "Čas začetka",
|
"LabelStartTime": "Čas začetka",
|
||||||
"LabelStarted": "Začeto",
|
"LabelStarted": "Začeto",
|
||||||
"LabelStartedAt": "Začeto ob",
|
"LabelStartedAt": "Začeto ob",
|
||||||
|
"LabelStartedDate": "Začeto {0}",
|
||||||
"LabelStatsAudioTracks": "Zvočni posnetki",
|
"LabelStatsAudioTracks": "Zvočni posnetki",
|
||||||
"LabelStatsAuthors": "Avtorji",
|
"LabelStatsAuthors": "Avtorji",
|
||||||
"LabelStatsBestDay": "Najboljši dan",
|
"LabelStatsBestDay": "Najboljši dan",
|
||||||
|
|
@ -743,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Ni rezultatov za filter \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Ni rezultatov za filter \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Ni rezultatov za poizvedbo",
|
"MessageBookshelfNoResultsForQuery": "Ni rezultatov za poizvedbo",
|
||||||
"MessageBookshelfNoSeries": "Nimate serij",
|
"MessageBookshelfNoSeries": "Nimate serij",
|
||||||
|
"MessageBulkChapterPattern": "Koliko poglavij želite dodati s tem vzorcem oštevilčenja?",
|
||||||
"MessageChapterEndIsAfter": "Konec poglavja je po koncu zvočne knjige",
|
"MessageChapterEndIsAfter": "Konec poglavja je po koncu zvočne knjige",
|
||||||
"MessageChapterErrorFirstNotZero": "Prvo poglavje se mora začeti pri 0",
|
"MessageChapterErrorFirstNotZero": "Prvo poglavje se mora začeti pri 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Neveljaven začetni čas, mora biti krajši od trajanja zvočne knjige",
|
"MessageChapterErrorStartGteDuration": "Neveljaven začetni čas, mora biti krajši od trajanja zvočne knjige",
|
||||||
|
|
@ -805,6 +816,8 @@
|
||||||
"MessageFeedURLWillBe": "URL vira bo {0}",
|
"MessageFeedURLWillBe": "URL vira bo {0}",
|
||||||
"MessageFetching": "Pridobivam...",
|
"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.",
|
"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!",
|
"MessageImportantNotice": "Pomembno obvestilo!",
|
||||||
"MessageInsertChapterBelow": "Spodaj vstavite poglavje",
|
"MessageInsertChapterBelow": "Spodaj vstavite poglavje",
|
||||||
"MessageInvalidAsin": "Neveljaven ASIN",
|
"MessageInvalidAsin": "Neveljaven ASIN",
|
||||||
|
|
@ -875,7 +888,7 @@
|
||||||
"MessageResetChaptersConfirm": "Ali ste prepričani, da želite ponastaviti poglavja in razveljaviti spremembe, ki ste jih naredili?",
|
"MessageResetChaptersConfirm": "Ali ste prepričani, da želite ponastaviti poglavja in razveljaviti spremembe, ki ste jih naredili?",
|
||||||
"MessageRestoreBackupConfirm": "Ali ste prepričani, da želite obnoviti varnostno kopijo, ustvarjeno ob",
|
"MessageRestoreBackupConfirm": "Ali ste prepričani, da želite obnoviti varnostno kopijo, ustvarjeno ob",
|
||||||
"MessageRestoreBackupWarning": "Obnovitev varnostne kopije bo prepisala celotno zbirko podatkov, ki se nahaja v /config, in zajema slike v /metadata/items in /metadata/authors.<br /><br />Varnostne kopije ne spreminjajo nobenih datotek v mapah vaše knjižnice. Če ste omogočili nastavitve strežnika za shranjevanje naslovnic in metapodatkov v mapah vaše knjižnice, potem ti niso varnostno kopirani ali prepisani.<br /><br />Vsi odjemalci, ki uporabljajo vaš strežnik, bodo samodejno osveženi.",
|
"MessageRestoreBackupWarning": "Obnovitev varnostne kopije bo prepisala celotno zbirko podatkov, ki se nahaja v /config, in zajema slike v /metadata/items in /metadata/authors.<br /><br />Varnostne kopije ne spreminjajo nobenih datotek v mapah vaše knjižnice. Če ste omogočili nastavitve strežnika za shranjevanje naslovnic in metapodatkov v mapah vaše knjižnice, potem ti niso varnostno kopirani ali prepisani.<br /><br />Vsi odjemalci, ki uporabljajo vaš strežnik, bodo samodejno osveženi.",
|
||||||
"MessageScheduleLibraryScanNote": "Za večino uporabnikov je priporočljivo, da to funkcijo pustite onemogočeno in ohranite nastavitev pregledovalnika map omogočeno. Pregledovalnik map bo samodejno zaznal spremembe v mapah vaše knjižnice. Pregledovalnik map ne deluje za vse datotečne sisteme (na primer NFS), zato lahko namesto tega uporabite načrtovane preglede knjižnic.",
|
"MessageScheduleLibraryScanNote": "Za večino uporabnikov je priporočljivo, da to funkcijo pustijo onemogočeno in ohranijo nastavitev »Samodejno spremljaj knjižnico za spremembe« omogočeno – samodejno bo zaznala spremembe v mapah vaše knjižnice. Omogočite to funkcijo, če »Samodejno spremljaj knjižnico za spremembe« ne deluje za vaš datotečni sistem (kot je NFS).",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Zaženi vsakih {0} ob {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Zaženi vsakih {0} ob {1}",
|
||||||
"MessageSearchResultsFor": "Rezultati iskanja za",
|
"MessageSearchResultsFor": "Rezultati iskanja za",
|
||||||
"MessageSelected": "{0} izbrano",
|
"MessageSelected": "{0} izbrano",
|
||||||
|
|
@ -944,6 +957,7 @@
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Sproži se, ko so samodejni prenosi epizod onemogočeni zaradi preveč neuspelih poskusov",
|
"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",
|
"NotificationOnRSSFeedFailedDescription": "Sproži se, ko zahteva za vir RSS za samodejni prenos epizode ne uspe",
|
||||||
"NotificationOnTestDescription": "Dogodek za testiranje sistema obveščanja",
|
"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",
|
"PlaceholderNewCollection": "Novo ime zbirke",
|
||||||
"PlaceholderNewFolderPath": "Pot nove mape",
|
"PlaceholderNewFolderPath": "Pot nove mape",
|
||||||
"PlaceholderNewPlaylist": "Novo ime seznama predvajanja",
|
"PlaceholderNewPlaylist": "Novo ime seznama predvajanja",
|
||||||
|
|
@ -997,8 +1011,12 @@
|
||||||
"ToastBookmarkCreateFailed": "Zaznamka ni bilo mogoče ustvariti",
|
"ToastBookmarkCreateFailed": "Zaznamka ni bilo mogoče ustvariti",
|
||||||
"ToastBookmarkCreateSuccess": "Zaznamek dodan",
|
"ToastBookmarkCreateSuccess": "Zaznamek dodan",
|
||||||
"ToastBookmarkRemoveSuccess": "Zaznamek odstranjen",
|
"ToastBookmarkRemoveSuccess": "Zaznamek odstranjen",
|
||||||
|
"ToastBulkChapterInvalidCount": "Vnesite število med 1 in 150",
|
||||||
"ToastCachePurgeFailed": "Čiščenje predpomnilnika ni uspelo",
|
"ToastCachePurgeFailed": "Čiščenje predpomnilnika ni uspelo",
|
||||||
"ToastCachePurgeSuccess": "Predpomnilnik je bil uspešno očiščen",
|
"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",
|
"ToastChaptersHaveErrors": "Poglavja imajo napake",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "Neveljavna vrednost zamika. Začetni čas zadnjega poglavja bi presegel trajanje te zvočne knjige.",
|
"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.",
|
"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.",
|
||||||
|
|
@ -1008,6 +1026,8 @@
|
||||||
"ToastCollectionItemsAddFailed": "Dodajanje elementov v zbirko ni uspelo",
|
"ToastCollectionItemsAddFailed": "Dodajanje elementov v zbirko ni uspelo",
|
||||||
"ToastCollectionRemoveSuccess": "Zbirka je bila odstranjena",
|
"ToastCollectionRemoveSuccess": "Zbirka je bila odstranjena",
|
||||||
"ToastCollectionUpdateSuccess": "Zbirka je bila posodobljena",
|
"ToastCollectionUpdateSuccess": "Zbirka je bila posodobljena",
|
||||||
|
"ToastConnectionNotAvailable": "Povezava ni na voljo. Poskusite znova pozneje",
|
||||||
|
"ToastCoverSearchFailed": "Iskanje naslovnice ni uspelo",
|
||||||
"ToastCoverUpdateFailed": "Posodobitev naslovnice ni uspela",
|
"ToastCoverUpdateFailed": "Posodobitev naslovnice ni uspela",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Datum in čas sta neveljavna ali nepopolna",
|
"ToastDateTimeInvalidOrIncomplete": "Datum in čas sta neveljavna ali nepopolna",
|
||||||
"ToastDeleteFileFailed": "Brisanje datoteke ni uspelo",
|
"ToastDeleteFileFailed": "Brisanje datoteke ni uspelo",
|
||||||
|
|
@ -1032,6 +1052,7 @@
|
||||||
"ToastInvalidImageUrl": "Neveljaven URL slike",
|
"ToastInvalidImageUrl": "Neveljaven URL slike",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "Neveljavno največje število epizod za prenos",
|
"ToastInvalidMaxEpisodesToDownload": "Neveljavno največje število epizod za prenos",
|
||||||
"ToastInvalidUrl": "Neveljaven URL",
|
"ToastInvalidUrl": "Neveljaven URL",
|
||||||
|
"ToastInvalidUrls": "Eden ali več URL-jev je neveljavnih",
|
||||||
"ToastItemCoverUpdateSuccess": "Naslovnica elementa je bila posodobljena",
|
"ToastItemCoverUpdateSuccess": "Naslovnica elementa je bila posodobljena",
|
||||||
"ToastItemDeletedFailed": "Elementa ni bilo mogoče izbrisati",
|
"ToastItemDeletedFailed": "Elementa ni bilo mogoče izbrisati",
|
||||||
"ToastItemDeletedSuccess": "Element je bil izbrisan",
|
"ToastItemDeletedSuccess": "Element je bil izbrisan",
|
||||||
|
|
@ -1081,6 +1102,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Seznam predvajanja je bil posodobljen",
|
"ToastPlaylistUpdateSuccess": "Seznam predvajanja je bil posodobljen",
|
||||||
"ToastPodcastCreateFailed": "Podcasta ni bilo mogoče ustvariti",
|
"ToastPodcastCreateFailed": "Podcasta ni bilo mogoče ustvariti",
|
||||||
"ToastPodcastCreateSuccess": "Podcast je bil uspešno ustvarjen",
|
"ToastPodcastCreateSuccess": "Podcast je bil uspešno ustvarjen",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Epizoda je bila posodobljena",
|
||||||
"ToastPodcastGetFeedFailed": "Vira podcasta ni bilo mogoče pridobiti",
|
"ToastPodcastGetFeedFailed": "Vira podcasta ni bilo mogoče pridobiti",
|
||||||
"ToastPodcastNoEpisodesInFeed": "V viru RSS ni bilo mogoče najti nobene epizode",
|
"ToastPodcastNoEpisodesInFeed": "V viru RSS ni bilo mogoče najti nobene epizode",
|
||||||
"ToastPodcastNoRssFeed": "Podcast nima vira RSS",
|
"ToastPodcastNoRssFeed": "Podcast nima vira RSS",
|
||||||
|
|
@ -1131,5 +1153,13 @@
|
||||||
"ToastUserPasswordChangeSuccess": "Geslo je bilo uspešno spremenjeno",
|
"ToastUserPasswordChangeSuccess": "Geslo je bilo uspešno spremenjeno",
|
||||||
"ToastUserPasswordMismatch": "Gesli se ne ujemata",
|
"ToastUserPasswordMismatch": "Gesli se ne ujemata",
|
||||||
"ToastUserPasswordMustChange": "Novo geslo se ne sme ujemati s starim geslom",
|
"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)"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -104,9 +104,9 @@
|
||||||
"ButtonStartM4BEncode": "Starta M4B-omkodning",
|
"ButtonStartM4BEncode": "Starta M4B-omkodning",
|
||||||
"ButtonStartMetadataEmbed": "Infoga metadata",
|
"ButtonStartMetadataEmbed": "Infoga metadata",
|
||||||
"ButtonStats": "Statistik",
|
"ButtonStats": "Statistik",
|
||||||
"ButtonSubmit": "Skicka",
|
"ButtonSubmit": "Spara",
|
||||||
"ButtonTest": "Testa",
|
"ButtonTest": "Testa",
|
||||||
"ButtonUnlinkOpenId": "Koppla från OpenID",
|
"ButtonUnlinkOpenId": "Koppla ifrån OpenID",
|
||||||
"ButtonUpload": "Ladda upp",
|
"ButtonUpload": "Ladda upp",
|
||||||
"ButtonUploadBackup": "Läs in säkerhetskopia",
|
"ButtonUploadBackup": "Läs in säkerhetskopia",
|
||||||
"ButtonUploadCover": "Ladda upp omslag",
|
"ButtonUploadCover": "Ladda upp omslag",
|
||||||
|
|
@ -127,6 +127,7 @@
|
||||||
"HeaderAudiobookTools": "Hantering av ljudboksfiler",
|
"HeaderAudiobookTools": "Hantering av ljudboksfiler",
|
||||||
"HeaderAuthentication": "Autentisering",
|
"HeaderAuthentication": "Autentisering",
|
||||||
"HeaderBackups": "Säkerhetskopior",
|
"HeaderBackups": "Säkerhetskopior",
|
||||||
|
"HeaderBulkChapterModal": "Addera flera kapitel",
|
||||||
"HeaderChangePassword": "Ändra lösenord",
|
"HeaderChangePassword": "Ändra lösenord",
|
||||||
"HeaderChapters": "Kapitel",
|
"HeaderChapters": "Kapitel",
|
||||||
"HeaderChooseAFolder": "Välj en mapp",
|
"HeaderChooseAFolder": "Välj en mapp",
|
||||||
|
|
@ -181,6 +182,7 @@
|
||||||
"HeaderPlaylist": "Spellista",
|
"HeaderPlaylist": "Spellista",
|
||||||
"HeaderPlaylistItems": "Böcker i spellistan",
|
"HeaderPlaylistItems": "Böcker i spellistan",
|
||||||
"HeaderPodcastsToAdd": "Podcaster att lägga till",
|
"HeaderPodcastsToAdd": "Podcaster att lägga till",
|
||||||
|
"HeaderPresets": "Förinställningar",
|
||||||
"HeaderPreviewCover": "Förhandsgranska omslag",
|
"HeaderPreviewCover": "Förhandsgranska omslag",
|
||||||
"HeaderRSSFeedGeneral": "RSS-information",
|
"HeaderRSSFeedGeneral": "RSS-information",
|
||||||
"HeaderRSSFeedIsOpen": "RSS-flödet är öppet",
|
"HeaderRSSFeedIsOpen": "RSS-flödet är öppet",
|
||||||
|
|
@ -198,6 +200,7 @@
|
||||||
"HeaderSettingsExperimental": "Experimentella funktioner",
|
"HeaderSettingsExperimental": "Experimentella funktioner",
|
||||||
"HeaderSettingsGeneral": "Allmänt",
|
"HeaderSettingsGeneral": "Allmänt",
|
||||||
"HeaderSettingsScanner": "Skanner",
|
"HeaderSettingsScanner": "Skanner",
|
||||||
|
"HeaderSettingsSecurity": "Säkerhet",
|
||||||
"HeaderSettingsWebClient": "Webklient",
|
"HeaderSettingsWebClient": "Webklient",
|
||||||
"HeaderSleepTimer": "Timer för att sova",
|
"HeaderSleepTimer": "Timer för att sova",
|
||||||
"HeaderStatsLargestItems": "Största objekten",
|
"HeaderStatsLargestItems": "Största objekten",
|
||||||
|
|
@ -241,6 +244,7 @@
|
||||||
"LabelAlreadyInYourLibrary": "Finns redan i samlingen",
|
"LabelAlreadyInYourLibrary": "Finns redan i samlingen",
|
||||||
"LabelApiKeyCreated": "API-nyckel \"{0}\" har adderats.",
|
"LabelApiKeyCreated": "API-nyckel \"{0}\" har adderats.",
|
||||||
"LabelApiKeyCreatedDescription": "Se till att kopiera API-nyckeln omedelbart eftersom du inte kommer att kunna se den igen.",
|
"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.",
|
"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",
|
"LabelApiToken": "API-token",
|
||||||
"LabelAppend": "Lägg till",
|
"LabelAppend": "Lägg till",
|
||||||
|
|
@ -291,12 +295,13 @@
|
||||||
"LabelContinueListening": "Fortsätt att lyssna",
|
"LabelContinueListening": "Fortsätt att lyssna",
|
||||||
"LabelContinueReading": "Fortsätt att läsa",
|
"LabelContinueReading": "Fortsätt att läsa",
|
||||||
"LabelContinueSeries": "Fortsätt med serien",
|
"LabelContinueSeries": "Fortsätt med serien",
|
||||||
|
"LabelCorsAllowed": "Godkänd CORS Origins",
|
||||||
"LabelCover": "Omslag",
|
"LabelCover": "Omslag",
|
||||||
"LabelCoverImageURL": "URL till omslagsbild",
|
"LabelCoverImageURL": "URL till omslagsbild",
|
||||||
"LabelCoverProvider": "Källa för omslag",
|
"LabelCoverProvider": "Källa för omslag",
|
||||||
"LabelCreatedAt": "Skapad",
|
"LabelCreatedAt": "Skapad",
|
||||||
"LabelCronExpression": "Schemaläggning med hjälp av Cron (Cron Expression)",
|
"LabelCronExpression": "Schemaläggning med hjälp av Cron (Cron Expression)",
|
||||||
"LabelCurrent": "Nuvarande plats",
|
"LabelCurrent": "Nuvarande",
|
||||||
"LabelCurrently": "För närvarande:",
|
"LabelCurrently": "För närvarande:",
|
||||||
"LabelCustomCronExpression": "Anpassat Cron-uttryck:",
|
"LabelCustomCronExpression": "Anpassat Cron-uttryck:",
|
||||||
"LabelDatetime": "Datum och klockslag",
|
"LabelDatetime": "Datum och klockslag",
|
||||||
|
|
@ -304,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Ta även bort från filsystem (avmarkera = raderar endast från databasen)",
|
"LabelDeleteFromFileSystemCheckbox": "Ta även bort från filsystem (avmarkera = raderar endast från databasen)",
|
||||||
"LabelDescription": "Beskrivning",
|
"LabelDescription": "Beskrivning",
|
||||||
"LabelDeselectAll": "Avmarkera alla",
|
"LabelDeselectAll": "Avmarkera alla",
|
||||||
|
"LabelDetectedPattern": "Identifierat mönster:",
|
||||||
"LabelDevice": "Enhet",
|
"LabelDevice": "Enhet",
|
||||||
"LabelDeviceInfo": "Enhetsinformation",
|
"LabelDeviceInfo": "Enhetsinformation",
|
||||||
"LabelDeviceIsAvailableTo": "Enhet är tillgänglig för...",
|
"LabelDeviceIsAvailableTo": "Enhet är tillgänglig för...",
|
||||||
|
|
@ -325,9 +331,9 @@
|
||||||
"LabelEmail": "E-post",
|
"LabelEmail": "E-post",
|
||||||
"LabelEmailSettingsFromAddress": "Från e-postadress",
|
"LabelEmailSettingsFromAddress": "Från e-postadress",
|
||||||
"LabelEmailSettingsRejectUnauthorized": "Avvisa icke-autentiserade certifikat",
|
"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",
|
"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",
|
"LabelEmailSettingsTestAddress": "E-postadress för test",
|
||||||
"LabelEmbeddedCover": "Infogat omslag",
|
"LabelEmbeddedCover": "Infogat omslag",
|
||||||
"LabelEnable": "Aktivera",
|
"LabelEnable": "Aktivera",
|
||||||
|
|
@ -364,27 +370,28 @@
|
||||||
"LabelFeedURL": "URL-adress för flödet",
|
"LabelFeedURL": "URL-adress för flödet",
|
||||||
"LabelFetchingMetadata": "Hämtar metadata",
|
"LabelFetchingMetadata": "Hämtar metadata",
|
||||||
"LabelFile": "Fil",
|
"LabelFile": "Fil",
|
||||||
"LabelFileBirthtime": "Tidpunkt, fil skapad",
|
"LabelFileBirthtime": "Tidpunkt, adderad",
|
||||||
"LabelFileBornDate": "Skapad {0}",
|
"LabelFileBornDate": "Skapad {0}",
|
||||||
"LabelFileModified": "Tidpunkt, fil ändrad",
|
"LabelFileModified": "Tidpunkt, ändrad",
|
||||||
"LabelFileModifiedDate": "Ändrad {0}",
|
"LabelFileModifiedDate": "Ändrad {0}",
|
||||||
"LabelFilename": "Filnamn",
|
"LabelFilename": "Filnamn",
|
||||||
"LabelFilterByUser": "Välj användare",
|
"LabelFilterByUser": "Välj användare",
|
||||||
"LabelFindEpisodes": "Sök avsnitt",
|
"LabelFindEpisodes": "Sök avsnitt",
|
||||||
"LabelFinished": "Avslutad",
|
"LabelFinished": "Avslutad",
|
||||||
|
"LabelFinishedDate": "Avslutad {0}",
|
||||||
"LabelFolder": "Mapp",
|
"LabelFolder": "Mapp",
|
||||||
"LabelFolders": "Mappar",
|
"LabelFolders": "Mappar",
|
||||||
"LabelFontBold": "Fetstil",
|
"LabelFontBold": "Fetstil",
|
||||||
"LabelFontBoldness": "Fetstil",
|
"LabelFontBoldness": "Fetstil",
|
||||||
"LabelFontFamily": "Typsnittsfamilj",
|
"LabelFontFamily": "Typsnittsfamilj",
|
||||||
"LabelFontItalic": "Kursiv",
|
"LabelFontItalic": "Kursiv",
|
||||||
"LabelFontScale": "Skala på typsnitt",
|
"LabelFontScale": "Storlek på typsnitt",
|
||||||
"LabelFontStrikethrough": "Genomstruken",
|
"LabelFontStrikethrough": "Genomstruken",
|
||||||
"LabelFormat": "Format",
|
"LabelFormat": "Format",
|
||||||
"LabelFull": "Komplett",
|
"LabelFull": "Komplett",
|
||||||
"LabelGenre": "Kategori",
|
"LabelGenre": "Kategori",
|
||||||
"LabelGenres": "Kategorier",
|
"LabelGenres": "Kategorier",
|
||||||
"LabelHardDeleteFile": "Hård radering av fil",
|
"LabelHardDeleteFile": "Permanent radering av fil",
|
||||||
"LabelHasEbook": "Har e-bok",
|
"LabelHasEbook": "Har e-bok",
|
||||||
"LabelHasSupplementaryEbook": "Har kompletterande e-bok",
|
"LabelHasSupplementaryEbook": "Har kompletterande e-bok",
|
||||||
"LabelHideSubtitles": "Dölj underrubriker",
|
"LabelHideSubtitles": "Dölj underrubriker",
|
||||||
|
|
@ -416,6 +423,7 @@
|
||||||
"LabelLanguages": "Språk",
|
"LabelLanguages": "Språk",
|
||||||
"LabelLastBookAdded": "Bok senast adderad",
|
"LabelLastBookAdded": "Bok senast adderad",
|
||||||
"LabelLastBookUpdated": "Bok senast uppdaterad",
|
"LabelLastBookUpdated": "Bok senast uppdaterad",
|
||||||
|
"LabelLastProgressDate": "Senaste framsteg: {0}",
|
||||||
"LabelLastSeen": "Senast inloggad",
|
"LabelLastSeen": "Senast inloggad",
|
||||||
"LabelLastTime": "Senaste tillfället",
|
"LabelLastTime": "Senaste tillfället",
|
||||||
"LabelLastUpdate": "Senast uppdaterad",
|
"LabelLastUpdate": "Senast uppdaterad",
|
||||||
|
|
@ -428,6 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Ingen {0}",
|
"LabelLibraryFilterSublistEmpty": "Ingen {0}",
|
||||||
"LabelLibraryItem": "Objekt",
|
"LabelLibraryItem": "Objekt",
|
||||||
"LabelLibraryName": "Biblioteksnamn",
|
"LabelLibraryName": "Biblioteksnamn",
|
||||||
|
"LabelLibrarySortByProgress": "Framsteg: senast uppdaterat",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Framsteg: avslutad",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Framsteg: påbörjad",
|
||||||
"LabelLimit": "Begränsning",
|
"LabelLimit": "Begränsning",
|
||||||
"LabelLineSpacing": "Radavstånd",
|
"LabelLineSpacing": "Radavstånd",
|
||||||
"LabelListenAgain": "Lyssna igen",
|
"LabelListenAgain": "Lyssna igen",
|
||||||
|
|
@ -438,7 +449,7 @@
|
||||||
"LabelLowestPriority": "Lägst prioritet",
|
"LabelLowestPriority": "Lägst prioritet",
|
||||||
"LabelMatchConfidence": "Förtroende",
|
"LabelMatchConfidence": "Förtroende",
|
||||||
"LabelMatchExistingUsersBy": "Matcha befintliga användare med",
|
"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).",
|
"LabelMaxEpisodesToDownload": "Maximalt antal avsnitt att ladda ner (0 = obegränsat).",
|
||||||
"LabelMaxEpisodesToDownloadPerCheck": "Maximalt antal nya avsnitt att ladda ner per tillfälle",
|
"LabelMaxEpisodesToDownloadPerCheck": "Maximalt antal nya avsnitt att ladda ner per tillfälle",
|
||||||
"LabelMaxEpisodesToKeep": "Maximalt antal avsnitt att behålla",
|
"LabelMaxEpisodesToKeep": "Maximalt antal avsnitt att behålla",
|
||||||
|
|
@ -461,11 +472,12 @@
|
||||||
"LabelName": "Namn",
|
"LabelName": "Namn",
|
||||||
"LabelNarrator": "Uppläsare",
|
"LabelNarrator": "Uppläsare",
|
||||||
"LabelNarrators": "Uppläsare",
|
"LabelNarrators": "Uppläsare",
|
||||||
"LabelNew": "Ny plats",
|
"LabelNew": "Nytt",
|
||||||
"LabelNewPassword": "Nytt lösenord",
|
"LabelNewPassword": "Nytt lösenord",
|
||||||
"LabelNewestAuthors": "Senaste författarna",
|
"LabelNewestAuthors": "Senaste författarna",
|
||||||
"LabelNewestEpisodes": "Senaste avsnitten",
|
"LabelNewestEpisodes": "Senaste avsnitten",
|
||||||
"LabelNextBackupDate": "Nästa tillfälle för säkerhetskopiering",
|
"LabelNextBackupDate": "Nästa tillfälle för säkerhetskopiering",
|
||||||
|
"LabelNextChapters": "Nästa kapitel kommer att vara:",
|
||||||
"LabelNextScheduledRun": "Nästa schemalagda körning",
|
"LabelNextScheduledRun": "Nästa schemalagda körning",
|
||||||
"LabelNoApiKeys": "Ingen API-nyckel",
|
"LabelNoApiKeys": "Ingen API-nyckel",
|
||||||
"LabelNoCustomMetadataProviders": "Ingen egen källa för metadata",
|
"LabelNoCustomMetadataProviders": "Ingen egen källa för metadata",
|
||||||
|
|
@ -473,16 +485,17 @@
|
||||||
"LabelNotFinished": "Ej avslutad",
|
"LabelNotFinished": "Ej avslutad",
|
||||||
"LabelNotStarted": "Ej påbörjad",
|
"LabelNotStarted": "Ej påbörjad",
|
||||||
"LabelNotes": "Anteckningar",
|
"LabelNotes": "Anteckningar",
|
||||||
"LabelNotificationAppriseURL": "Apprise URL(er)",
|
"LabelNotificationAppriseURL": "Apprise URL-adress(er)",
|
||||||
"LabelNotificationAvailableVariables": "Tillgängliga variabler",
|
"LabelNotificationAvailableVariables": "Tillgängliga variabler",
|
||||||
"LabelNotificationBodyTemplate": "Kroppsmall",
|
"LabelNotificationBodyTemplate": "Kroppsmall",
|
||||||
"LabelNotificationEvent": "Aviseringshändelse",
|
"LabelNotificationEvent": "Händelser som skickar ett meddelande",
|
||||||
"LabelNotificationTitleTemplate": "Titelsmall",
|
"LabelNotificationTitleTemplate": "Titelsmall",
|
||||||
"LabelNotificationsMaxFailedAttempts": "Max antal misslyckade försök",
|
"LabelNotificationsMaxFailedAttempts": "Max antal misslyckade försök",
|
||||||
"LabelNotificationsMaxFailedAttemptsHelp": "Aviseringar inaktiveras när de misslyckas med att skickas så många gånger",
|
"LabelNotificationsMaxFailedAttemptsHelp": "Aviseringar inaktiveras när de misslyckas med att skickas så många gånger",
|
||||||
"LabelNotificationsMaxQueueSize": "Max köstorlek för aviseringsevenemang",
|
"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.",
|
"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",
|
"LabelNumberOfBooks": "Antal böcker",
|
||||||
|
"LabelNumberOfChapters": "Antal kapitel:",
|
||||||
"LabelNumberOfEpisodes": "# av Avsnitt",
|
"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:",
|
"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'.",
|
"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",
|
"LabelPrimaryEbook": "Primär e-bok",
|
||||||
"LabelProgress": "Framsteg",
|
"LabelProgress": "Framsteg",
|
||||||
"LabelProvider": "Källa",
|
"LabelProvider": "Källa",
|
||||||
|
"LabelProviderAuthorizationValue": "Värde för auktoriseringsheader",
|
||||||
"LabelPubDate": "Publiceringsdatum",
|
"LabelPubDate": "Publiceringsdatum",
|
||||||
"LabelPublishYear": "Utgivningsår",
|
"LabelPublishYear": "Utgivningsår",
|
||||||
"LabelPublishedDate": "Publicerad {0}",
|
"LabelPublishedDate": "Publicerad {0}",
|
||||||
|
|
@ -526,7 +540,7 @@
|
||||||
"LabelPublishers": "Utgivare",
|
"LabelPublishers": "Utgivare",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Anpassad ägarens e-post",
|
"LabelRSSFeedCustomOwnerEmail": "Anpassad ägarens e-post",
|
||||||
"LabelRSSFeedCustomOwnerName": "Anpassat ägarnamn",
|
"LabelRSSFeedCustomOwnerName": "Anpassat ägarnamn",
|
||||||
"LabelRSSFeedOpen": "Öppna RSS-flöde",
|
"LabelRSSFeedOpen": "RSS-flöde öppet",
|
||||||
"LabelRSSFeedPreventIndexing": "Förhindra indexering",
|
"LabelRSSFeedPreventIndexing": "Förhindra indexering",
|
||||||
"LabelRSSFeedSlug": "RSS-flödesslag",
|
"LabelRSSFeedSlug": "RSS-flödesslag",
|
||||||
"LabelRSSFeedURL": "URL-adress för RSS-flödet",
|
"LabelRSSFeedURL": "URL-adress för RSS-flödet",
|
||||||
|
|
@ -574,8 +588,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Bakgrund med ett utseende liknande en bokhylla i trä",
|
"LabelSettingsBookshelfViewHelp": "Bakgrund med ett utseende liknande en bokhylla i trä",
|
||||||
"LabelSettingsChromecastSupport": "Stöd för Chromecast",
|
"LabelSettingsChromecastSupport": "Stöd för Chromecast",
|
||||||
"LabelSettingsDateFormat": "Datumformat",
|
"LabelSettingsDateFormat": "Datumformat",
|
||||||
"LabelSettingsEnableWatcher": "Upptäck automatiskt förändringar i biblioteket",
|
"LabelSettingsEnableWatcher": "Bevaka automatiskt förändringar i biblioteken",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Upptäck automatiskt förändringar i biblioteket",
|
"LabelSettingsEnableWatcherForLibrary": "Bevaka biblioteket automatiskt efter ändringar",
|
||||||
"LabelSettingsEnableWatcherHelp": "Aktiverar automatik att upptäcka när objekt<br>adderas, uppdateras eller raderas.<br>OBS: Kräver en omstart av servern",
|
"LabelSettingsEnableWatcherHelp": "Aktiverar automatik att upptäcka när objekt<br>adderas, uppdateras eller raderas.<br>OBS: Kräver en omstart av servern",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Tillåt e-böcker i epubs-format som innehåller script",
|
"LabelSettingsEpubsAllowScriptedContent": "Tillåt e-böcker i epubs-format som innehåller script",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Tillåt att epub-filer får innehålla script.<br>Det rekommenderas att denna inställning är<br>avstängd när du inte litar på källan för epub-filerna.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Tillåt att epub-filer får innehålla script.<br>Det rekommenderas att denna inställning är<br>avstängd när du inte litar på källan för epub-filerna.",
|
||||||
|
|
@ -609,18 +623,22 @@
|
||||||
"LabelSettingsTimeFormat": "Tidsformat",
|
"LabelSettingsTimeFormat": "Tidsformat",
|
||||||
"LabelShare": "Dela",
|
"LabelShare": "Dela",
|
||||||
"LabelShareDownloadableHelp": "Tillåt att användare som fått en delad länk att ladda ner ett komprimerat objekt från biblioteket.",
|
"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",
|
"LabelShareURL": "Dela URL-länk",
|
||||||
"LabelShowAll": "Visa alla",
|
"LabelShowAll": "Visa alla",
|
||||||
"LabelShowSeconds": "Visa i sekunder",
|
"LabelShowSeconds": "Visa i sekunder",
|
||||||
"LabelShowSubtitles": "Visa underrubriker",
|
"LabelShowSubtitles": "Visa underrubriker",
|
||||||
"LabelSize": "Storlek",
|
"LabelSize": "Storlek",
|
||||||
"LabelSleepTimer": "Sovtimer",
|
"LabelSleepTimer": "Sovtimer",
|
||||||
|
"LabelSlug": "Kortnamn",
|
||||||
"LabelSortAscending": "Stigande",
|
"LabelSortAscending": "Stigande",
|
||||||
"LabelSortDescending": "Fallande",
|
"LabelSortDescending": "Fallande",
|
||||||
|
"LabelSortPubDate": "Sortera efter publiceringsdatum",
|
||||||
"LabelStart": "Start",
|
"LabelStart": "Start",
|
||||||
"LabelStartTime": "Starttid",
|
"LabelStartTime": "Starttid",
|
||||||
"LabelStarted": "Startad",
|
"LabelStarted": "Startad",
|
||||||
"LabelStartedAt": "Startades",
|
"LabelStartedAt": "Startades",
|
||||||
|
"LabelStartedDate": "Påbörjad {0}",
|
||||||
"LabelStatsAudioTracks": "Ljudfiler",
|
"LabelStatsAudioTracks": "Ljudfiler",
|
||||||
"LabelStatsAuthors": "Författare",
|
"LabelStatsAuthors": "Författare",
|
||||||
"LabelStatsBestDay": "Bästa dag",
|
"LabelStatsBestDay": "Bästa dag",
|
||||||
|
|
@ -673,10 +691,10 @@
|
||||||
"LabelTotalTimeListened": "Total tid lyssnad",
|
"LabelTotalTimeListened": "Total tid lyssnad",
|
||||||
"LabelTrackFromFilename": "Plats från filnamnet",
|
"LabelTrackFromFilename": "Plats från filnamnet",
|
||||||
"LabelTrackFromMetadata": "Plats från metadata",
|
"LabelTrackFromMetadata": "Plats från metadata",
|
||||||
"LabelTracks": "Spår",
|
"LabelTracks": "Ljudspår",
|
||||||
"LabelTracksMultiTrack": "Flerspårigt",
|
"LabelTracksMultiTrack": "Flera ljudspår",
|
||||||
"LabelTracksNone": "Inga spår",
|
"LabelTracksNone": "Inga ljudspår",
|
||||||
"LabelTracksSingleTrack": "Enspårigt",
|
"LabelTracksSingleTrack": "Ett ljudspår",
|
||||||
"LabelTrailer": "Trailer",
|
"LabelTrailer": "Trailer",
|
||||||
"LabelType": "Typ",
|
"LabelType": "Typ",
|
||||||
"LabelUnabridged": "Oavkortad",
|
"LabelUnabridged": "Oavkortad",
|
||||||
|
|
@ -705,6 +723,8 @@
|
||||||
"LabelViewPlayerSettings": "Visa inställningar för uppspelning",
|
"LabelViewPlayerSettings": "Visa inställningar för uppspelning",
|
||||||
"LabelViewQueue": "Visa spellista",
|
"LabelViewQueue": "Visa spellista",
|
||||||
"LabelVolume": "Volym",
|
"LabelVolume": "Volym",
|
||||||
|
"LabelWebRedirectURLsDescription": "Auktorisera dessa URLer i din OAuth-leverantör för att tillåta omdirigering tillbaka till webbappen efter inloggning:",
|
||||||
|
"LabelWebRedirectURLsSubfolder": "Undermappar för omdirigeringslänkar",
|
||||||
"LabelWeekdaysToRun": "Veckodagar att köra skanning",
|
"LabelWeekdaysToRun": "Veckodagar att köra skanning",
|
||||||
"LabelXBooks": "{0} böcker",
|
"LabelXBooks": "{0} böcker",
|
||||||
"LabelXItems": "{0} objekt",
|
"LabelXItems": "{0} objekt",
|
||||||
|
|
@ -715,7 +735,8 @@
|
||||||
"LabelYourPlaylists": "Dina spellistor",
|
"LabelYourPlaylists": "Dina spellistor",
|
||||||
"LabelYourProgress": "Framsteg",
|
"LabelYourProgress": "Framsteg",
|
||||||
"MessageAddToPlayerQueue": "Lägg till i spellistan",
|
"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>.",
|
"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).",
|
"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.",
|
"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.",
|
||||||
|
|
@ -732,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Inga resultat för filter \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Inga resultat för filter \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Sökningen gav inget resultat",
|
"MessageBookshelfNoResultsForQuery": "Sökningen gav inget resultat",
|
||||||
"MessageBookshelfNoSeries": "Du har inga serier",
|
"MessageBookshelfNoSeries": "Du har inga serier",
|
||||||
|
"MessageBulkChapterPattern": "Hur många kapitel vill du lägga till med detta numreringsmönster?",
|
||||||
"MessageChapterEndIsAfter": "Kapitelns slut är efter din ljudboks slut",
|
"MessageChapterEndIsAfter": "Kapitelns slut är efter din ljudboks slut",
|
||||||
"MessageChapterErrorFirstNotZero": "Första kapitlet måste börja vid 0",
|
"MessageChapterErrorFirstNotZero": "Första kapitlet måste börja vid 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Ogiltig starttid, måste vara mindre än ljudbokens längd",
|
"MessageChapterErrorStartGteDuration": "Ogiltig starttid, måste vara mindre än ljudbokens längd",
|
||||||
|
|
@ -758,8 +780,9 @@
|
||||||
"MessageConfirmMarkItemNotFinished": "Är du säker på att du vill markera \"{0}\" som ej avslutad?",
|
"MessageConfirmMarkItemNotFinished": "Är du säker på att du vill markera \"{0}\" som ej avslutad?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Är du säker på att du vill markera alla böcker i denna serie som avslutade?",
|
"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?",
|
"MessageConfirmMarkSeriesNotFinished": "Är du säker på att du vill markera alla böcker i denna serie som ej avslutade?",
|
||||||
|
"MessageConfirmNotificationTestTrigger": "Trigga denna avisering med testdata?",
|
||||||
"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?",
|
"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?",
|
"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?",
|
"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?",
|
"MessageConfirmReScanLibraryItems": "Är du säker på att du vill göra en ny skanning för {0} objekt?",
|
||||||
|
|
@ -767,6 +790,7 @@
|
||||||
"MessageConfirmRemoveAuthor": "Är du säker på att du vill ta bort författaren \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Är du säker på att du vill ta bort författaren \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Är du säker på att du vill ta bort samlingen \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Är du säker på att du vill ta bort samlingen \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Är du säker på att du vill radera avsnittet \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Är du säker på att du vill radera avsnittet \"{0}\"?",
|
||||||
|
"MessageConfirmRemoveEpisodeNote": "OBSERERA: Detta tar inte bort ljudfilen om inte \"Permanent radering av fil\" är aktiverad",
|
||||||
"MessageConfirmRemoveEpisodes": "Är du säker på att du vill radera {0} avsnitt?",
|
"MessageConfirmRemoveEpisodes": "Är du säker på att du vill radera {0} avsnitt?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Är du säker på att du vill radera {0} lyssningstillfällen?",
|
"MessageConfirmRemoveListeningSessions": "Är du säker på att du vill radera {0} lyssningstillfällen?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Är du säker på att du vill radera filerna 'metadata.{0}' i alla mappar i ditt bibliotek?",
|
"MessageConfirmRemoveMetadataFiles": "Är du säker på att du vill radera filerna 'metadata.{0}' i alla mappar i ditt bibliotek?",
|
||||||
|
|
@ -784,29 +808,33 @@
|
||||||
"MessageDaysListenedInTheLastYear": "{0} dagars lyssnande det senaste året",
|
"MessageDaysListenedInTheLastYear": "{0} dagars lyssnande det senaste året",
|
||||||
"MessageDownloadingEpisode": "Laddar ner avsnitt",
|
"MessageDownloadingEpisode": "Laddar ner avsnitt",
|
||||||
"MessageDragFilesIntoTrackOrder": "Ändra ordningen genom att klicka och dra filerna till rätt plats",
|
"MessageDragFilesIntoTrackOrder": "Ändra ordningen genom att klicka och dra filerna till rätt plats",
|
||||||
|
"MessageEmbedFailed": "Inbäddning misslyckades!",
|
||||||
"MessageEmbedFinished": "Inbäddning genomförd!",
|
"MessageEmbedFinished": "Inbäddning genomförd!",
|
||||||
|
"MessageEmbedQueue": "Köad för inbäddning av metadata plats ({0} i kön)",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} avsnitt i kö för nedladdning",
|
"MessageEpisodesQueuedForDownload": "{0} avsnitt i kö för nedladdning",
|
||||||
"MessageEreaderDevices": "För att säkerställa överföring av e-böcker kan du bli tvungen<br>att addera ovanstående e-postadress som godkänd avsändare<br>för varje enhet angiven nedan.",
|
"MessageEreaderDevices": "För att säkerställa överföring av e-böcker kan du bli tvungen<br>att addera ovanstående e-postadress som godkänd avsändare<br>för varje enhet angiven nedan.",
|
||||||
"MessageFeedURLWillBe": "Flödes-URL kommer att vara {0}",
|
"MessageFeedURLWillBe": "Flödes-URL kommer att vara {0}",
|
||||||
"MessageFetching": "Hämtar...",
|
"MessageFetching": "Hämtar...",
|
||||||
"MessageForceReScanDescription": "kommer att göra en omgångssökning av alla filer som en färsk sökning. ID3-taggar för ljudfiler, OPF-filer och textfiler kommer att sökas som nya.",
|
"MessageForceReScanDescription": "kommer att göra en omgångssökning av alla filer som en färsk sökning. ID3-taggar för ljudfiler, OPF-filer och textfiler kommer att sökas som nya.",
|
||||||
|
"MessageHeatmapListeningTimeTooltip": "<strong>{0} lyssnar</strong> på {1}",
|
||||||
|
"MessageHeatmapNoListeningSessions": "Inga lyssningssessioner på {0}",
|
||||||
"MessageImportantNotice": "Viktig meddelande!",
|
"MessageImportantNotice": "Viktig meddelande!",
|
||||||
"MessageInsertChapterBelow": "Infoga kapitel nedanför",
|
"MessageInsertChapterBelow": "Infoga kapitel nedanför",
|
||||||
"MessageInvalidAsin": "Felaktig ASIN-kod",
|
"MessageInvalidAsin": "Felaktig ASIN-kod",
|
||||||
"MessageItemsSelected": "{0} objekt markerade",
|
"MessageItemsSelected": "{0} objekt markerade",
|
||||||
"MessageItemsUpdated": "{0} Objekt uppdaterade",
|
"MessageItemsUpdated": "{0} objekt uppdaterade",
|
||||||
"MessageJoinUsOn": "Anslut dig till oss på",
|
"MessageJoinUsOn": "Anslut dig till oss på",
|
||||||
"MessageLoading": "Laddar...",
|
"MessageLoading": "Laddar...",
|
||||||
"MessageLoadingFolders": "Laddar mappar...",
|
"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>.",
|
"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!",
|
"MessageM4BFailed": "Skapandet av en M4B-fil misslyckades!",
|
||||||
"MessageM4BFinished": "M4B klar!",
|
"MessageM4BFinished": "Omkodningen till M4B är genomförd!",
|
||||||
"MessageMapChapterTitles": "Kartlägg kapitelrubriker till dina befintliga ljudbokskapitel utan att justera tidstämplar",
|
"MessageMapChapterTitles": "Kartlägg kapitelrubriker till dina befintliga ljudbokskapitel utan att justera tidstämplar",
|
||||||
"MessageMarkAllEpisodesFinished": "Markera alla avsnitt som avslutade",
|
"MessageMarkAllEpisodesFinished": "Markera alla avsnitt som avslutade",
|
||||||
"MessageMarkAllEpisodesNotFinished": "Markera alla avsnitt som ej avslutade",
|
"MessageMarkAllEpisodesNotFinished": "Markera alla avsnitt som ej avslutade",
|
||||||
"MessageMarkAsFinished": "Markera som avslutad",
|
"MessageMarkAsFinished": "Markera som avslutad",
|
||||||
"MessageMarkAsNotFinished": "Markera som ej 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 de uppgifter som saknas och addera omslag som saknas. Inga befintliga uppgifter kommer att ersättas.",
|
||||||
"MessageNoAudioTracks": "Inga ljudfiler har hittats",
|
"MessageNoAudioTracks": "Inga ljudfiler har hittats",
|
||||||
"MessageNoAuthors": "Inga författare",
|
"MessageNoAuthors": "Inga författare",
|
||||||
"MessageNoBackups": "Inga säkerhetskopior",
|
"MessageNoBackups": "Inga säkerhetskopior",
|
||||||
|
|
@ -829,6 +857,7 @@
|
||||||
"MessageNoLogs": "Inga loggningsinformation finns",
|
"MessageNoLogs": "Inga loggningsinformation finns",
|
||||||
"MessageNoMediaProgress": "Ingen medieförlopp",
|
"MessageNoMediaProgress": "Ingen medieförlopp",
|
||||||
"MessageNoNotifications": "Inga aviseringar",
|
"MessageNoNotifications": "Inga aviseringar",
|
||||||
|
"MessageNoPodcastFeed": "Felaktig podcast: ingen ström",
|
||||||
"MessageNoPodcastsFound": "Inga podcasts hittade",
|
"MessageNoPodcastsFound": "Inga podcasts hittade",
|
||||||
"MessageNoResults": "Inga resultat",
|
"MessageNoResults": "Inga resultat",
|
||||||
"MessageNoSearchResultsFor": "Inga sökresultat för \"{0}\"",
|
"MessageNoSearchResultsFor": "Inga sökresultat för \"{0}\"",
|
||||||
|
|
@ -839,6 +868,7 @@
|
||||||
"MessageNoUserPlaylists": "Du har inga spellistor",
|
"MessageNoUserPlaylists": "Du har inga spellistor",
|
||||||
"MessageNoUserPlaylistsHelp": "Spellistor är privata. Endast den användare som skapat listan kan se den.",
|
"MessageNoUserPlaylistsHelp": "Spellistor är privata. Endast den användare som skapat listan kan se den.",
|
||||||
"MessageNotYetImplemented": "Ännu inte implementerad",
|
"MessageNotYetImplemented": "Ännu inte implementerad",
|
||||||
|
"MessageOpmlPreviewNote": "Obs: Detta är en förhandsvisning av den analyserade OPML-filen. Den faktiska podcasttiteln kommer att hämtas från RSS-flödet.",
|
||||||
"MessageOr": "eller",
|
"MessageOr": "eller",
|
||||||
"MessagePauseChapter": "Pausa kapiteluppspelning",
|
"MessagePauseChapter": "Pausa kapiteluppspelning",
|
||||||
"MessagePlayChapter": "Lyssna på kapitlets början",
|
"MessagePlayChapter": "Lyssna på kapitlets början",
|
||||||
|
|
@ -858,7 +888,7 @@
|
||||||
"MessageResetChaptersConfirm": "Är du säker på att du vill återställa alla kapitel och ångra de ändringarna du gjort?",
|
"MessageResetChaptersConfirm": "Är du säker på att du vill återställa alla kapitel och ångra de ändringarna du gjort?",
|
||||||
"MessageRestoreBackupConfirm": "Är du säker på att du vill läsa in säkerhetskopian som skapades den",
|
"MessageRestoreBackupConfirm": "Är du säker på att du vill läsa in säkerhetskopian som skapades den",
|
||||||
"MessageRestoreBackupWarning": "Att återställa en säkerhetskopia kommer att skriva över hela databasen som finns i /config och omslagsbilder i /metadata/items & /metadata/authors.<br /><br />Säkerhetskopior ändrar inte några filer i dina biblioteksmappar. Om du har aktiverat serverinställningar för att lagra omslagskonst och metadata i dina biblioteksmappar säkerhetskopieras eller skrivs de inte över.<br /><br />Alla klienter som använder din server kommer att uppdateras automatiskt.",
|
"MessageRestoreBackupWarning": "Att återställa en säkerhetskopia kommer att skriva över hela databasen som finns i /config och omslagsbilder i /metadata/items & /metadata/authors.<br /><br />Säkerhetskopior ändrar inte några filer i dina biblioteksmappar. Om du har aktiverat serverinställningar för att lagra omslagskonst och metadata i dina biblioteksmappar säkerhetskopieras eller skrivs de inte över.<br /><br />Alla klienter som använder din server kommer att uppdateras automatiskt.",
|
||||||
"MessageScheduleLibraryScanNote": "För de flesta användare rekommenderas att denna funktion ej aktiveras. Istället bör funktionen som automatisk upptäcker ändringar i biblioteket vara aktiverad. För vissa filsystem (som t.ex. NFS) fungerar inte denna funktion. Då kan schemalagda skanningar av biblioteken användas istället.",
|
"MessageScheduleLibraryScanNote": "För de flesta användare rekommenderas det att låta den här funktionen vara inaktiverad och att inställningen \"Bevaka biblioteket automatiskt efter ändringar\" är aktiverad – den kommer automatiskt att upptäcka ändringar i dina biblioteksmappar. Aktivera den här funktionen om \"Bevaka biblioteket automatiskt efter ändringar\" inte fungerar för ditt filsystem (som NFS).",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Startar varje {0} klockan {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Startar varje {0} klockan {1}",
|
||||||
"MessageSearchResultsFor": "Sökresultat för",
|
"MessageSearchResultsFor": "Sökresultat för",
|
||||||
"MessageSelected": "{0} valda",
|
"MessageSelected": "{0} valda",
|
||||||
|
|
@ -867,12 +897,14 @@
|
||||||
"MessageSetChaptersFromTracksDescription": "Använd varje ljudfil som ett kapitel och ljudfilens namn som kapitlets rubrik",
|
"MessageSetChaptersFromTracksDescription": "Använd varje ljudfil som ett kapitel och ljudfilens namn som kapitlets rubrik",
|
||||||
"MessageShareExpirationWillBe": "Giltig till kommer att bli <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Giltig till kommer att bli <strong>{0}</strong>",
|
||||||
"MessageShareExpiresIn": "Upphör om {0}",
|
"MessageShareExpiresIn": "Upphör om {0}",
|
||||||
"MessageStartPlaybackAtTime": "Starta uppspelning av \"{0}\" vid tidpunkt {1}?",
|
"MessageShareURLWillBe": "Delningslänken kommer att vara <strong>{0}</strong>",
|
||||||
|
"MessageStartPlaybackAtTime": "Starta uppspelning av \"{0}\" från tidpunkt {1}?",
|
||||||
"MessageTaskAudioFileNotWritable": "Det går inte att skriva till ljudfilen \"{0}\"",
|
"MessageTaskAudioFileNotWritable": "Det går inte att skriva till ljudfilen \"{0}\"",
|
||||||
"MessageTaskCanceledByUser": "Uppgiften avslutades av användaren",
|
"MessageTaskCanceledByUser": "Uppgiften avslutades av användaren",
|
||||||
"MessageTaskDownloadingEpisodeDescription": "Laddar ner avsnitt \"{0}\"",
|
"MessageTaskDownloadingEpisodeDescription": "Laddar ner avsnitt \"{0}\"",
|
||||||
"MessageTaskEmbeddingMetadata": "Infogar metadata",
|
"MessageTaskEmbeddingMetadata": "Infogar metadata",
|
||||||
"MessageTaskEmbeddingMetadataDescription": "Infogar metadata i ljudboken \"{0}\"",
|
"MessageTaskEmbeddingMetadataDescription": "Infogar metadata i ljudboken \"{0}\"",
|
||||||
|
"MessageTaskEncodingM4b": "Kodar M4B",
|
||||||
"MessageTaskEncodingM4bDescription": "Omkodning av ljudbok \"{0}\" till en M4B-fil",
|
"MessageTaskEncodingM4bDescription": "Omkodning av ljudbok \"{0}\" till en M4B-fil",
|
||||||
"MessageTaskFailed": "Misslyckades",
|
"MessageTaskFailed": "Misslyckades",
|
||||||
"MessageTaskFailedToBackupAudioFile": "Misslyckades med att göra backup på ljudfil \"{0}\"",
|
"MessageTaskFailedToBackupAudioFile": "Misslyckades med att göra backup på ljudfil \"{0}\"",
|
||||||
|
|
@ -883,8 +915,11 @@
|
||||||
"MessageTaskFailedToWriteMetadataFile": "Misslyckades med att skapa filen med metadata",
|
"MessageTaskFailedToWriteMetadataFile": "Misslyckades med att skapa filen med metadata",
|
||||||
"MessageTaskMatchingBooksInLibrary": "Matchar böcker i biblioteket \"{0}\"",
|
"MessageTaskMatchingBooksInLibrary": "Matchar böcker i biblioteket \"{0}\"",
|
||||||
"MessageTaskNoFilesToScan": "Inga filer finns tillgängliga för skanning",
|
"MessageTaskNoFilesToScan": "Inga filer finns tillgängliga för skanning",
|
||||||
|
"MessageTaskOpmlImport": "OPML-import",
|
||||||
"MessageTaskOpmlImportDescription": "Skapar podcasts från {0} RSS-flöden",
|
"MessageTaskOpmlImportDescription": "Skapar podcasts från {0} RSS-flöden",
|
||||||
|
"MessageTaskOpmlImportFeed": "OPML importflöde",
|
||||||
"MessageTaskOpmlImportFeedDescription": "Importerar RSS-flödet \"{0}\"",
|
"MessageTaskOpmlImportFeedDescription": "Importerar RSS-flödet \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "Det gick inte att hämta poddflödet",
|
||||||
"MessageTaskOpmlImportFeedPodcastDescription": "Skapar podcast \"{0}\"",
|
"MessageTaskOpmlImportFeedPodcastDescription": "Skapar podcast \"{0}\"",
|
||||||
"MessageTaskOpmlImportFeedPodcastExists": "En podcast finns redan med den adressen",
|
"MessageTaskOpmlImportFeedPodcastExists": "En podcast finns redan med den adressen",
|
||||||
"MessageTaskOpmlImportFeedPodcastFailed": "Misslyckades med att skapa podcast",
|
"MessageTaskOpmlImportFeedPodcastFailed": "Misslyckades med att skapa podcast",
|
||||||
|
|
@ -919,6 +954,10 @@
|
||||||
"NotificationOnBackupCompletedDescription": "Aktiveras när en backup är genomförd",
|
"NotificationOnBackupCompletedDescription": "Aktiveras när en backup är genomförd",
|
||||||
"NotificationOnBackupFailedDescription": "Aktiveras när en backup misslyckas",
|
"NotificationOnBackupFailedDescription": "Aktiveras när en backup misslyckas",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Aktiveras när avsnitt i en podcast automatiskt har hämtats",
|
"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",
|
"PlaceholderNewCollection": "Nytt namn på samlingen",
|
||||||
"PlaceholderNewFolderPath": "Ny sökväg till mappen",
|
"PlaceholderNewFolderPath": "Ny sökväg till mappen",
|
||||||
"PlaceholderNewPlaylist": "Nytt namn på spellistan",
|
"PlaceholderNewPlaylist": "Nytt namn på spellistan",
|
||||||
|
|
@ -943,7 +982,7 @@
|
||||||
"StatsTotalDuration": "Med den totala längden…",
|
"StatsTotalDuration": "Med den totala längden…",
|
||||||
"StatsYearInReview": "- SAMMANSTÄLLNING AV ÅRET",
|
"StatsYearInReview": "- SAMMANSTÄLLNING AV ÅRET",
|
||||||
"ToastAccountUpdateSuccess": "Kontot har uppdaterats",
|
"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",
|
"ToastAsinRequired": "En ASIN-kod krävs",
|
||||||
"ToastAuthorImageRemoveSuccess": "Författarens bild borttagen",
|
"ToastAuthorImageRemoveSuccess": "Författarens bild borttagen",
|
||||||
"ToastAuthorNotFound": "Författaren \"{0}\" kunde inte identifieras",
|
"ToastAuthorNotFound": "Författaren \"{0}\" kunde inte identifieras",
|
||||||
|
|
@ -961,23 +1000,34 @@
|
||||||
"ToastBackupInvalidMaxSize": "Felaktig storlek på backup har angivits",
|
"ToastBackupInvalidMaxSize": "Felaktig storlek på backup har angivits",
|
||||||
"ToastBackupRestoreFailed": "Det gick inte att återställa säkerhetskopian",
|
"ToastBackupRestoreFailed": "Det gick inte att återställa säkerhetskopian",
|
||||||
"ToastBackupUploadFailed": "Det gick inte att ladda upp 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",
|
"ToastBatchApplyDetailsToItemsSuccess": "Informationen har adderats till alla objekt",
|
||||||
|
"ToastBatchDeleteFailed": "Det gick inte att radera batch",
|
||||||
|
"ToastBatchDeleteSuccess": "Batch borttagning lyckades",
|
||||||
|
"ToastBatchQuickMatchFailed": "Snabbmatchning av batch misslyckades!",
|
||||||
"ToastBatchQuickMatchStarted": "Snabbmatchning av {0} böcker har påbörjats!",
|
"ToastBatchQuickMatchStarted": "Snabbmatchning av {0} böcker har påbörjats!",
|
||||||
"ToastBatchUpdateFailed": "Batchuppdateringen misslyckades",
|
"ToastBatchUpdateFailed": "Batchuppdateringen misslyckades",
|
||||||
"ToastBatchUpdateSuccess": "Batchuppdateringen lyckades",
|
"ToastBatchUpdateSuccess": "Batchuppdateringen lyckades",
|
||||||
"ToastBookmarkCreateFailed": "Det gick inte att skapa bokmärket",
|
"ToastBookmarkCreateFailed": "Det gick inte att skapa bokmärket",
|
||||||
"ToastBookmarkCreateSuccess": "Bokmärket har adderats",
|
"ToastBookmarkCreateSuccess": "Bokmärket har adderats",
|
||||||
"ToastBookmarkRemoveSuccess": "Bokmärket har raderats",
|
"ToastBookmarkRemoveSuccess": "Bokmärket har raderats",
|
||||||
|
"ToastBulkChapterInvalidCount": "Ange ett nummer mellan 1 och 150",
|
||||||
"ToastCachePurgeFailed": "Misslyckades med att rensa cachen",
|
"ToastCachePurgeFailed": "Misslyckades med att rensa cachen",
|
||||||
"ToastCachePurgeSuccess": "Rensning av cachen har genomförts",
|
"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",
|
"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",
|
"ToastChaptersMustHaveTitles": "Kapitel måste ha titlar",
|
||||||
"ToastChaptersRemoved": "Kapitlen har raderats",
|
"ToastChaptersRemoved": "Kapitlen har raderats",
|
||||||
"ToastChaptersUpdated": "Kapitlen har uppdaterats",
|
"ToastChaptersUpdated": "Kapitlen har uppdaterats",
|
||||||
"ToastCollectionItemsAddFailed": "Misslyckades med att addera böcker till samlingen",
|
"ToastCollectionItemsAddFailed": "Misslyckades med att addera böcker till samlingen",
|
||||||
"ToastCollectionRemoveSuccess": "Samlingen har raderats",
|
"ToastCollectionRemoveSuccess": "Samlingen har raderats",
|
||||||
"ToastCollectionUpdateSuccess": "Samlingen har uppdaterats",
|
"ToastCollectionUpdateSuccess": "Samlingen har uppdaterats",
|
||||||
|
"ToastConnectionNotAvailable": "Uppkopplingen är inte tillgänglig. Var vänlig försök senare.",
|
||||||
|
"ToastCoverSearchFailed": "Sökningen efter omslag misslyckades",
|
||||||
"ToastCoverUpdateFailed": "Uppdatering av omslag misslyckades",
|
"ToastCoverUpdateFailed": "Uppdatering av omslag misslyckades",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Datum och klockslag är felaktigt eller ej komplett",
|
"ToastDateTimeInvalidOrIncomplete": "Datum och klockslag är felaktigt eller ej komplett",
|
||||||
"ToastDeleteFileFailed": "Misslyckades att radera filen",
|
"ToastDeleteFileFailed": "Misslyckades att radera filen",
|
||||||
|
|
@ -992,6 +1042,7 @@
|
||||||
"ToastEpisodeDownloadQueueClearFailed": "Misslyckades med att tömma kön",
|
"ToastEpisodeDownloadQueueClearFailed": "Misslyckades med att tömma kön",
|
||||||
"ToastEpisodeDownloadQueueClearSuccess": "Kö för nedladdning av avsnitt har tömts",
|
"ToastEpisodeDownloadQueueClearSuccess": "Kö för nedladdning av avsnitt har tömts",
|
||||||
"ToastEpisodeUpdateSuccess": "{0} avsnitt uppdaterades",
|
"ToastEpisodeUpdateSuccess": "{0} avsnitt uppdaterades",
|
||||||
|
"ToastErrorCannotShare": "Kan inte dela direkt på den här enheten",
|
||||||
"ToastFailedToCreate": "Misslyckades med att addera",
|
"ToastFailedToCreate": "Misslyckades med att addera",
|
||||||
"ToastFailedToDelete": "Misslyckades med att radera",
|
"ToastFailedToDelete": "Misslyckades med att radera",
|
||||||
"ToastFailedToLoadData": "Misslyckades med att ladda data",
|
"ToastFailedToLoadData": "Misslyckades med att ladda data",
|
||||||
|
|
@ -999,8 +1050,9 @@
|
||||||
"ToastFailedToShare": "Misslyckades med att dela",
|
"ToastFailedToShare": "Misslyckades med att dela",
|
||||||
"ToastFailedToUpdate": "Misslyckades med att uppdatera",
|
"ToastFailedToUpdate": "Misslyckades med att uppdatera",
|
||||||
"ToastInvalidImageUrl": "Felaktig URL-adress till omslagsbilden",
|
"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",
|
"ToastInvalidUrl": "Felaktig URL-adress",
|
||||||
|
"ToastInvalidUrls": "En eller flera URL-adresser är felaktig",
|
||||||
"ToastItemCoverUpdateSuccess": "Objektets omslag har uppdaterats",
|
"ToastItemCoverUpdateSuccess": "Objektets omslag har uppdaterats",
|
||||||
"ToastItemDeletedFailed": "Misslyckades med att radera objektet",
|
"ToastItemDeletedFailed": "Misslyckades med att radera objektet",
|
||||||
"ToastItemDeletedSuccess": "Objektet har raderats",
|
"ToastItemDeletedSuccess": "Objektet har raderats",
|
||||||
|
|
@ -1022,6 +1074,7 @@
|
||||||
"ToastMetadataFilesRemovedNoneFound": "Inga 'metadata.{0}' filer hittades i biblioteket",
|
"ToastMetadataFilesRemovedNoneFound": "Inga 'metadata.{0}' filer hittades i biblioteket",
|
||||||
"ToastMetadataFilesRemovedNoneRemoved": "Inga 'metadata.{0}' filer raderades",
|
"ToastMetadataFilesRemovedNoneRemoved": "Inga 'metadata.{0}' filer raderades",
|
||||||
"ToastMetadataFilesRemovedSuccess": "{0} 'metadata.{1}' raderades",
|
"ToastMetadataFilesRemovedSuccess": "{0} 'metadata.{1}' raderades",
|
||||||
|
"ToastMustHaveAtLeastOnePath": "Måste ha minst en sökväg",
|
||||||
"ToastNameEmailRequired": "Ett namn och en e-postadress måste anges",
|
"ToastNameEmailRequired": "Ett namn och en e-postadress måste anges",
|
||||||
"ToastNameRequired": "Ett namn måste anges",
|
"ToastNameRequired": "Ett namn måste anges",
|
||||||
"ToastNewApiKeyUserError": "En användare måste väljas",
|
"ToastNewApiKeyUserError": "En användare måste väljas",
|
||||||
|
|
@ -1029,7 +1082,7 @@
|
||||||
"ToastNewUserCreatedFailed": "Misslyckades med att skapa kontot \"{0}\"",
|
"ToastNewUserCreatedFailed": "Misslyckades med att skapa kontot \"{0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "Ett nytt konto har skapats",
|
"ToastNewUserCreatedSuccess": "Ett nytt konto har skapats",
|
||||||
"ToastNewUserLibraryError": "Minst ett bibliotek måste anges",
|
"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",
|
"ToastNewUserTagError": "Minst en tagg måste läggas till",
|
||||||
"ToastNewUserUsernameError": "Ange ett användarnamn",
|
"ToastNewUserUsernameError": "Ange ett användarnamn",
|
||||||
"ToastNoNewEpisodesFound": "Inga nya avsnitt kunde hittas",
|
"ToastNoNewEpisodesFound": "Inga nya avsnitt kunde hittas",
|
||||||
|
|
@ -1037,7 +1090,11 @@
|
||||||
"ToastNoUpdatesNecessary": "Inga uppdateringar var nödvändiga",
|
"ToastNoUpdatesNecessary": "Inga uppdateringar var nödvändiga",
|
||||||
"ToastNotificationCreateFailed": "Misslyckades med att skapa meddelandet",
|
"ToastNotificationCreateFailed": "Misslyckades med att skapa meddelandet",
|
||||||
"ToastNotificationDeleteFailed": "Misslyckades med att radera meddelandet",
|
"ToastNotificationDeleteFailed": "Misslyckades med att radera meddelandet",
|
||||||
|
"ToastNotificationFailedMaximum": "Maximalt antal misslyckade försök måste vara större än eller lika med 0",
|
||||||
|
"ToastNotificationQueueMaximum": "Maximala antalet aviseringsköer måste vara >= 0",
|
||||||
"ToastNotificationSettingsUpdateSuccess": "Inställningarna för meddelanden har ändrats",
|
"ToastNotificationSettingsUpdateSuccess": "Inställningarna för meddelanden har ändrats",
|
||||||
|
"ToastNotificationTestTriggerFailed": "Misslyckades med att skicka testmeddelandet",
|
||||||
|
"ToastNotificationTestTriggerSuccess": "Triggade testavisering",
|
||||||
"ToastNotificationUpdateSuccess": "Meddelandet har uppdaterats",
|
"ToastNotificationUpdateSuccess": "Meddelandet har uppdaterats",
|
||||||
"ToastPlaylistCreateFailed": "Det gick inte att skapa spellistan",
|
"ToastPlaylistCreateFailed": "Det gick inte att skapa spellistan",
|
||||||
"ToastPlaylistCreateSuccess": "Spellistan skapad",
|
"ToastPlaylistCreateSuccess": "Spellistan skapad",
|
||||||
|
|
@ -1045,8 +1102,11 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Spellistan har uppdaterats",
|
"ToastPlaylistUpdateSuccess": "Spellistan har uppdaterats",
|
||||||
"ToastPodcastCreateFailed": "Misslyckades med att skapa podcasten",
|
"ToastPodcastCreateFailed": "Misslyckades med att skapa podcasten",
|
||||||
"ToastPodcastCreateSuccess": "Podcasten skapades framgångsrikt",
|
"ToastPodcastCreateSuccess": "Podcasten skapades framgångsrikt",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Avsnittet har uppdaterats",
|
||||||
|
"ToastPodcastGetFeedFailed": "Det gick inte att hämta poddflödet",
|
||||||
"ToastPodcastNoEpisodesInFeed": "Inga avsnitt finns i RSS-flödet",
|
"ToastPodcastNoEpisodesInFeed": "Inga avsnitt finns i RSS-flödet",
|
||||||
"ToastPodcastNoRssFeed": "Denna podcast har ingen RSS-flöde",
|
"ToastPodcastNoRssFeed": "Denna podcast har ingen RSS-flöde",
|
||||||
|
"ToastProgressIsNotBeingSynced": "Förloppet synkroniseras inte, starta om uppspelningen",
|
||||||
"ToastProviderCreatedFailed": "Misslyckades med att addera en källa",
|
"ToastProviderCreatedFailed": "Misslyckades med att addera en källa",
|
||||||
"ToastProviderCreatedSuccess": "En ny källa har adderats",
|
"ToastProviderCreatedSuccess": "En ny källa har adderats",
|
||||||
"ToastProviderNameAndUrlRequired": "Ett namn och en URL-adress krävs",
|
"ToastProviderNameAndUrlRequired": "Ett namn och en URL-adress krävs",
|
||||||
|
|
@ -1068,12 +1128,15 @@
|
||||||
"ToastSendEbookToDeviceFailed": "Misslyckades med att skicka e-boken till enheten",
|
"ToastSendEbookToDeviceFailed": "Misslyckades med att skicka e-boken till enheten",
|
||||||
"ToastSendEbookToDeviceSuccess": "E-boken skickad till enheten \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "E-boken skickad till enheten \"{0}\"",
|
||||||
"ToastSeriesSubmitFailedSameName": "Det är inte möjligt att addera två serier med samma namn",
|
"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",
|
"ToastSeriesUpdateSuccess": "Uppdateringen av serierna lyckades",
|
||||||
"ToastServerSettingsUpdateSuccess": "Inställningarna för servern har uppdaterats",
|
"ToastServerSettingsUpdateSuccess": "Inställningarna för servern har uppdaterats",
|
||||||
|
"ToastSessionCloseFailed": "Misslyckades med att avsluta sessionen",
|
||||||
"ToastSessionDeleteFailed": "Misslyckades med att ta bort sessionen",
|
"ToastSessionDeleteFailed": "Misslyckades med att ta bort sessionen",
|
||||||
"ToastSessionDeleteSuccess": "Sessionen borttagen",
|
"ToastSessionDeleteSuccess": "Sessionen borttagen",
|
||||||
"ToastSleepTimerDone": "Timer har stängt av lyssning. Sov gott... zZzzZz",
|
"ToastSleepTimerDone": "Timer har stängt av lyssning. Sov gott... zZzzZz",
|
||||||
|
"ToastSlugMustChange": "Slug innehåller ogiltiga tecken",
|
||||||
|
"ToastSlugRequired": "Slug krävs",
|
||||||
"ToastSocketConnected": "Socket ansluten",
|
"ToastSocketConnected": "Socket ansluten",
|
||||||
"ToastSocketDisconnected": "Socket frånkopplad",
|
"ToastSocketDisconnected": "Socket frånkopplad",
|
||||||
"ToastSocketFailedToConnect": "Socket misslyckades med att ansluta",
|
"ToastSocketFailedToConnect": "Socket misslyckades med att ansluta",
|
||||||
|
|
@ -1084,10 +1147,19 @@
|
||||||
"ToastUnlinkOpenIdFailed": "Misslyckades med att koppla bort användaren från OpenID",
|
"ToastUnlinkOpenIdFailed": "Misslyckades med att koppla bort användaren från OpenID",
|
||||||
"ToastUnlinkOpenIdSuccess": "Användaren har kopplats bort från OpenID",
|
"ToastUnlinkOpenIdSuccess": "Användaren har kopplats bort från OpenID",
|
||||||
"ToastUploaderFilepathExistsError": "En fil med namnet \"{0}\" finns redan på servern",
|
"ToastUploaderFilepathExistsError": "En fil med namnet \"{0}\" finns redan på servern",
|
||||||
|
"ToastUploaderItemExistsInSubdirectoryError": "Objektet \"{0}\" använder en underkatalog till uppladdningssökvägen.",
|
||||||
"ToastUserDeleteFailed": "Misslyckades med att ta bort användaren",
|
"ToastUserDeleteFailed": "Misslyckades med att ta bort användaren",
|
||||||
"ToastUserDeleteSuccess": "Användaren borttagen",
|
"ToastUserDeleteSuccess": "Användaren borttagen",
|
||||||
"ToastUserPasswordChangeSuccess": "Lösenordet har ändrats",
|
"ToastUserPasswordChangeSuccess": "Lösenordet har ändrats",
|
||||||
"ToastUserPasswordMismatch": "Lösenorden är inte identiska",
|
"ToastUserPasswordMismatch": "Lösenorden är inte identiska",
|
||||||
"ToastUserPasswordMustChange": "Det nya lösenordet kan inte vara samma som det gamla",
|
"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)"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -76,7 +76,7 @@
|
||||||
"ButtonReScan": "Пересканувати",
|
"ButtonReScan": "Пересканувати",
|
||||||
"ButtonRead": "Читати",
|
"ButtonRead": "Читати",
|
||||||
"ButtonReadLess": "Згорнути",
|
"ButtonReadLess": "Згорнути",
|
||||||
"ButtonReadMore": "Читати далі",
|
"ButtonReadMore": "Читати більше",
|
||||||
"ButtonRefresh": "Оновити",
|
"ButtonRefresh": "Оновити",
|
||||||
"ButtonRemove": "Видалити",
|
"ButtonRemove": "Видалити",
|
||||||
"ButtonRemoveAll": "Видалити все",
|
"ButtonRemoveAll": "Видалити все",
|
||||||
|
|
@ -127,6 +127,7 @@
|
||||||
"HeaderAudiobookTools": "Інструменти керування файлами книг",
|
"HeaderAudiobookTools": "Інструменти керування файлами книг",
|
||||||
"HeaderAuthentication": "Автентифікація",
|
"HeaderAuthentication": "Автентифікація",
|
||||||
"HeaderBackups": "Резервні копії",
|
"HeaderBackups": "Резервні копії",
|
||||||
|
"HeaderBulkChapterModal": "Додати кілька розділів",
|
||||||
"HeaderChangePassword": "Змінити пароль",
|
"HeaderChangePassword": "Змінити пароль",
|
||||||
"HeaderChapters": "Глави",
|
"HeaderChapters": "Глави",
|
||||||
"HeaderChooseAFolder": "Обрати теку",
|
"HeaderChooseAFolder": "Обрати теку",
|
||||||
|
|
@ -292,7 +293,7 @@
|
||||||
"LabelComplete": "Завершити",
|
"LabelComplete": "Завершити",
|
||||||
"LabelConfirmPassword": "Підтвердити пароль",
|
"LabelConfirmPassword": "Підтвердити пароль",
|
||||||
"LabelContinueListening": "Слухати далі",
|
"LabelContinueListening": "Слухати далі",
|
||||||
"LabelContinueReading": "Читати далі",
|
"LabelContinueReading": "Продовжити читання",
|
||||||
"LabelContinueSeries": "Продовжити серії",
|
"LabelContinueSeries": "Продовжити серії",
|
||||||
"LabelCorsAllowed": "Дозволені джерела CORS",
|
"LabelCorsAllowed": "Дозволені джерела CORS",
|
||||||
"LabelCover": "Обкладинка",
|
"LabelCover": "Обкладинка",
|
||||||
|
|
@ -308,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Видалити з файлової системи (зніміть прапорець, щоб видалити лише з бази даних)",
|
"LabelDeleteFromFileSystemCheckbox": "Видалити з файлової системи (зніміть прапорець, щоб видалити лише з бази даних)",
|
||||||
"LabelDescription": "Опис",
|
"LabelDescription": "Опис",
|
||||||
"LabelDeselectAll": "Скасувати вибір",
|
"LabelDeselectAll": "Скасувати вибір",
|
||||||
|
"LabelDetectedPattern": "Виявлений візерунок:",
|
||||||
"LabelDevice": "Пристрій",
|
"LabelDevice": "Пристрій",
|
||||||
"LabelDeviceInfo": "Про пристрій",
|
"LabelDeviceInfo": "Про пристрій",
|
||||||
"LabelDeviceIsAvailableTo": "Пристрій доступний для...",
|
"LabelDeviceIsAvailableTo": "Пристрій доступний для...",
|
||||||
|
|
@ -376,11 +378,12 @@
|
||||||
"LabelFilterByUser": "Фільтрувати за користувачем",
|
"LabelFilterByUser": "Фільтрувати за користувачем",
|
||||||
"LabelFindEpisodes": "Знайти епізоди",
|
"LabelFindEpisodes": "Знайти епізоди",
|
||||||
"LabelFinished": "Завершено",
|
"LabelFinished": "Завершено",
|
||||||
|
"LabelFinishedDate": "Завершено {0}",
|
||||||
"LabelFolder": "Тека",
|
"LabelFolder": "Тека",
|
||||||
"LabelFolders": "Теки",
|
"LabelFolders": "Теки",
|
||||||
"LabelFontBold": "Жирний",
|
"LabelFontBold": "Жирний",
|
||||||
"LabelFontBoldness": "Товщина шрифту",
|
"LabelFontBoldness": "Товщина шрифту",
|
||||||
"LabelFontFamily": "Гарнітура",
|
"LabelFontFamily": "Сімейство шрифтів",
|
||||||
"LabelFontItalic": "Курсив",
|
"LabelFontItalic": "Курсив",
|
||||||
"LabelFontScale": "Розмір шрифту",
|
"LabelFontScale": "Розмір шрифту",
|
||||||
"LabelFontStrikethrough": "Закреслений",
|
"LabelFontStrikethrough": "Закреслений",
|
||||||
|
|
@ -433,7 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "Ні {0}",
|
"LabelLibraryFilterSublistEmpty": "Ні {0}",
|
||||||
"LabelLibraryItem": "Елемент бібліотеки",
|
"LabelLibraryItem": "Елемент бібліотеки",
|
||||||
"LabelLibraryName": "Назва бібліотеки",
|
"LabelLibraryName": "Назва бібліотеки",
|
||||||
"LabelLibrarySortByProgress": "Прогрес оновлено",
|
"LabelLibrarySortByProgress": "Прогрес: Останнє оновлення",
|
||||||
|
"LabelLibrarySortByProgressFinished": "Прогрес: Завершено",
|
||||||
|
"LabelLibrarySortByProgressStarted": "Прогрес: Розпочато",
|
||||||
"LabelLimit": "Обмеження",
|
"LabelLimit": "Обмеження",
|
||||||
"LabelLineSpacing": "Відстань між рядками",
|
"LabelLineSpacing": "Відстань між рядками",
|
||||||
"LabelListenAgain": "Слухати знову",
|
"LabelListenAgain": "Слухати знову",
|
||||||
|
|
@ -472,6 +477,7 @@
|
||||||
"LabelNewestAuthors": "Нові автори",
|
"LabelNewestAuthors": "Нові автори",
|
||||||
"LabelNewestEpisodes": "Нові епізоди",
|
"LabelNewestEpisodes": "Нові епізоди",
|
||||||
"LabelNextBackupDate": "Дата наступного резервного копіювання",
|
"LabelNextBackupDate": "Дата наступного резервного копіювання",
|
||||||
|
"LabelNextChapters": "Наступні розділи будуть:",
|
||||||
"LabelNextScheduledRun": "Наступний запланований запуск",
|
"LabelNextScheduledRun": "Наступний запланований запуск",
|
||||||
"LabelNoApiKeys": "Без ключів API",
|
"LabelNoApiKeys": "Без ключів API",
|
||||||
"LabelNoCustomMetadataProviders": "Без постачальників метаданих",
|
"LabelNoCustomMetadataProviders": "Без постачальників метаданих",
|
||||||
|
|
@ -489,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "Ліміт розміру черги сповіщень",
|
"LabelNotificationsMaxQueueSize": "Ліміт розміру черги сповіщень",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Події обмежені до 1 на секунду. Події буде проігноровано, якщо ліміт черги досягнуто. Це запобігає спаму сповіщеннями.",
|
"LabelNotificationsMaxQueueSizeHelp": "Події обмежені до 1 на секунду. Події буде проігноровано, якщо ліміт черги досягнуто. Це запобігає спаму сповіщеннями.",
|
||||||
"LabelNumberOfBooks": "Кількість книг",
|
"LabelNumberOfBooks": "Кількість книг",
|
||||||
|
"LabelNumberOfChapters": "Кількість розділів:",
|
||||||
"LabelNumberOfEpisodes": "Кількість серій",
|
"LabelNumberOfEpisodes": "Кількість серій",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Назва OpenID claim, що містить розширені дозволи на дії користувачів у додатку, які будуть застосовуватися до ролей, що не є адміністраторами (<b>якщо налаштовано</b>). Якщо у відповіді нема claim, у доступі до Audiobookshelf буде відмовлено. Якщо відсутня хоча б одна опція, відповідь буде вважатися <code>хибною</code>. Переконайтеся, що запит постачальника ідентифікаційних даних відповідає очікуваній структурі:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Назва OpenID claim, що містить розширені дозволи на дії користувачів у додатку, які будуть застосовуватися до ролей, що не є адміністраторами (<b>якщо налаштовано</b>). Якщо у відповіді нема claim, у доступі до Audiobookshelf буде відмовлено. Якщо відсутня хоча б одна опція, відповідь буде вважатися <code>хибною</code>. Переконайтеся, що запит постачальника ідентифікаційних даних відповідає очікуваній структурі:",
|
||||||
"LabelOpenIDClaims": "Не змінюйте наступні параметри, аби вимкнути розширене призначення груп і дозволів, автоматично призначаючи групу 'Користувач'.",
|
"LabelOpenIDClaims": "Не змінюйте наступні параметри, аби вимкнути розширене призначення груп і дозволів, автоматично призначаючи групу 'Користувач'.",
|
||||||
|
|
@ -581,8 +588,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "Імітує вигляд дерев'яних полиць",
|
"LabelSettingsBookshelfViewHelp": "Імітує вигляд дерев'яних полиць",
|
||||||
"LabelSettingsChromecastSupport": "Підтримка Chromecast",
|
"LabelSettingsChromecastSupport": "Підтримка Chromecast",
|
||||||
"LabelSettingsDateFormat": "Формат дати",
|
"LabelSettingsDateFormat": "Формат дати",
|
||||||
"LabelSettingsEnableWatcher": "Автоматично сканувати бібліотеки на наявність змін",
|
"LabelSettingsEnableWatcher": "Автоматично відстежувати зміни в бібліотеках",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Автоматично сканувати бібліотеку на наявність змін",
|
"LabelSettingsEnableWatcherForLibrary": "Автоматично відстежувати зміни в бібліотеці",
|
||||||
"LabelSettingsEnableWatcherHelp": "Вмикає автоматичне додавання/оновлення елементів, коли спостерігаються зміни файлів. *Потребує перезавантаження сервера",
|
"LabelSettingsEnableWatcherHelp": "Вмикає автоматичне додавання/оновлення елементів, коли спостерігаються зміни файлів. *Потребує перезавантаження сервера",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Дозволити JavaScript-вміст у epub",
|
"LabelSettingsEpubsAllowScriptedContent": "Дозволити JavaScript-вміст у epub",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Дозволяти epub-файлам виконувати код. Вмикайте цей параметр лише якщо ви довіряєте джерелу epub-файлів.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Дозволяти epub-файлам виконувати код. Вмикайте цей параметр лише якщо ви довіряєте джерелу epub-файлів.",
|
||||||
|
|
@ -631,6 +638,7 @@
|
||||||
"LabelStartTime": "Час початку",
|
"LabelStartTime": "Час початку",
|
||||||
"LabelStarted": "Стартував",
|
"LabelStarted": "Стартував",
|
||||||
"LabelStartedAt": "Почато з",
|
"LabelStartedAt": "Почато з",
|
||||||
|
"LabelStartedDate": "Розпочато {0}",
|
||||||
"LabelStatsAudioTracks": "Аудіодоріжки",
|
"LabelStatsAudioTracks": "Аудіодоріжки",
|
||||||
"LabelStatsAuthors": "Автори",
|
"LabelStatsAuthors": "Автори",
|
||||||
"LabelStatsBestDay": "Найкращий день",
|
"LabelStatsBestDay": "Найкращий день",
|
||||||
|
|
@ -745,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "Немає результатів з фільтром \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Немає результатів з фільтром \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Немає результатів за запитом",
|
"MessageBookshelfNoResultsForQuery": "Немає результатів за запитом",
|
||||||
"MessageBookshelfNoSeries": "У вас немає серій",
|
"MessageBookshelfNoSeries": "У вас немає серій",
|
||||||
|
"MessageBulkChapterPattern": "Скільки розділів ви хочете додати за допомогою цієї схеми нумерації?",
|
||||||
"MessageChapterEndIsAfter": "Кінець глави після завершення аудіокниги",
|
"MessageChapterEndIsAfter": "Кінець глави після завершення аудіокниги",
|
||||||
"MessageChapterErrorFirstNotZero": "Перша глава повинна починатися з 0",
|
"MessageChapterErrorFirstNotZero": "Перша глава повинна починатися з 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Час початку має бути меншим за тривалість аудіокниги",
|
"MessageChapterErrorStartGteDuration": "Час початку має бути меншим за тривалість аудіокниги",
|
||||||
|
|
@ -879,7 +888,7 @@
|
||||||
"MessageResetChaptersConfirm": "Ви впевнені, що хочете скинути глави та скасувати внесені зміни?",
|
"MessageResetChaptersConfirm": "Ви впевнені, що хочете скинути глави та скасувати внесені зміни?",
|
||||||
"MessageRestoreBackupConfirm": "Ви впевнені, що хочете відновити резервну копію, створену",
|
"MessageRestoreBackupConfirm": "Ви впевнені, що хочете відновити резервну копію, створену",
|
||||||
"MessageRestoreBackupWarning": "Відновлення резервної копії перезапише всю базу даних у /config і зображення обкладинок у /metadata/items та /metadata/authors.<br /><br />Резервні копії не змінюють файли у теках бібліотеки. Якщо у налаштуваннях сервера увімкнено збереження обкладинок і метаданих у теках бібліотеки, вони не створюються під час резервного копіювання і не перезаписуються.<br /><br />Всі клієнти, що користуються вашим сервером, будуть автоматично оновлені.",
|
"MessageRestoreBackupWarning": "Відновлення резервної копії перезапише всю базу даних у /config і зображення обкладинок у /metadata/items та /metadata/authors.<br /><br />Резервні копії не змінюють файли у теках бібліотеки. Якщо у налаштуваннях сервера увімкнено збереження обкладинок і метаданих у теках бібліотеки, вони не створюються під час резервного копіювання і не перезаписуються.<br /><br />Всі клієнти, що користуються вашим сервером, будуть автоматично оновлені.",
|
||||||
"MessageScheduleLibraryScanNote": "Для більшості користувачів рекомендується залишити цю функцію вимкненою та залишити параметр перегляду папок увімкненим. Засіб спостереження за папками автоматично виявить зміни в папках вашої бібліотеки. Засіб спостереження за папками не працює для кожної файлової системи (наприклад, NFS), тому замість нього можна використовувати сканування бібліотек за розкладом.",
|
"MessageScheduleLibraryScanNote": "Для більшості користувачів рекомендується відключити цю функцію та підтримувати налаштування \"Автоматично переглядати бібліотеку для змін\" - вона автоматично виявить зміни в ваших папках бібліотеки. Звісніть цю функцію, якщо для вашої файлової системи (наприклад, NFS) не працює \"Автоматично переглядати бібліотеку.",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Запуск кожні {0} о {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Запуск кожні {0} о {1}",
|
||||||
"MessageSearchResultsFor": "Результати пошуку для",
|
"MessageSearchResultsFor": "Результати пошуку для",
|
||||||
"MessageSelected": "Вибрано: {0}",
|
"MessageSelected": "Вибрано: {0}",
|
||||||
|
|
@ -948,6 +957,7 @@
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Виконується, коли автоматичне завантаження епізодів вимкнено через забагато невдалих спроб",
|
"NotificationOnRSSFeedDisabledDescription": "Виконується, коли автоматичне завантаження епізодів вимкнено через забагато невдалих спроб",
|
||||||
"NotificationOnRSSFeedFailedDescription": "Виконується, коли запит RSS-каналу не вдається для автоматичного завантаження епізоду",
|
"NotificationOnRSSFeedFailedDescription": "Виконується, коли запит RSS-каналу не вдається для автоматичного завантаження епізоду",
|
||||||
"NotificationOnTestDescription": "Подія для тестування системи сповіщень",
|
"NotificationOnTestDescription": "Подія для тестування системи сповіщень",
|
||||||
|
"PlaceholderBulkChapterInput": "Введіть назву розділу або використовуйте нумерацію (наприклад, «Епізод 1», «Розділ 10», «1.»)",
|
||||||
"PlaceholderNewCollection": "Нова назва добірки",
|
"PlaceholderNewCollection": "Нова назва добірки",
|
||||||
"PlaceholderNewFolderPath": "Новий шлях до теки",
|
"PlaceholderNewFolderPath": "Новий шлях до теки",
|
||||||
"PlaceholderNewPlaylist": "Нова назва списку",
|
"PlaceholderNewPlaylist": "Нова назва списку",
|
||||||
|
|
@ -1001,8 +1011,12 @@
|
||||||
"ToastBookmarkCreateFailed": "Не вдалося створити закладку",
|
"ToastBookmarkCreateFailed": "Не вдалося створити закладку",
|
||||||
"ToastBookmarkCreateSuccess": "Закладку додано",
|
"ToastBookmarkCreateSuccess": "Закладку додано",
|
||||||
"ToastBookmarkRemoveSuccess": "Закладку видалено",
|
"ToastBookmarkRemoveSuccess": "Закладку видалено",
|
||||||
|
"ToastBulkChapterInvalidCount": "Введіть число від 1 до 150",
|
||||||
"ToastCachePurgeFailed": "Не вдалося очистити кеш",
|
"ToastCachePurgeFailed": "Не вдалося очистити кеш",
|
||||||
"ToastCachePurgeSuccess": "Кеш очищено",
|
"ToastCachePurgeSuccess": "Кеш очищено",
|
||||||
|
"ToastChapterLocked": "Розділ заблоковано.",
|
||||||
|
"ToastChapterStartTimeAdjusted": "Час початку розділу змінено на {0} секунд",
|
||||||
|
"ToastChaptersAllLocked": "Усі розділи заблоковано. Розблокуйте деякі розділи, щоб змістити їхній час.",
|
||||||
"ToastChaptersHaveErrors": "Глави містять помилки",
|
"ToastChaptersHaveErrors": "Глави містять помилки",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "Недійсна тривалість зсуву. Час початку останнього розділу перевищує тривалість цієї аудіокниги.",
|
"ToastChaptersInvalidShiftAmountLast": "Недійсна тривалість зсуву. Час початку останнього розділу перевищує тривалість цієї аудіокниги.",
|
||||||
"ToastChaptersInvalidShiftAmountStart": "Недійсна величина зсуву. Перший розділ матиме нульову або від’ємну тривалість і буде перезаписаний другим розділом. Збільште початкову тривалість другого розділу.",
|
"ToastChaptersInvalidShiftAmountStart": "Недійсна величина зсуву. Перший розділ матиме нульову або від’ємну тривалість і буде перезаписаний другим розділом. Збільште початкову тривалість другого розділу.",
|
||||||
|
|
@ -1012,6 +1026,8 @@
|
||||||
"ToastCollectionItemsAddFailed": "Не вдалося додати елемент(и) до колекції",
|
"ToastCollectionItemsAddFailed": "Не вдалося додати елемент(и) до колекції",
|
||||||
"ToastCollectionRemoveSuccess": "Добірку видалено",
|
"ToastCollectionRemoveSuccess": "Добірку видалено",
|
||||||
"ToastCollectionUpdateSuccess": "Добірку оновлено",
|
"ToastCollectionUpdateSuccess": "Добірку оновлено",
|
||||||
|
"ToastConnectionNotAvailable": "З’єднання недоступне. Спробуйте пізніше",
|
||||||
|
"ToastCoverSearchFailed": "Пошук обкладинки не вдався",
|
||||||
"ToastCoverUpdateFailed": "Не вдалося оновити обкладинку",
|
"ToastCoverUpdateFailed": "Не вдалося оновити обкладинку",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Дата й час недійсні або неповні",
|
"ToastDateTimeInvalidOrIncomplete": "Дата й час недійсні або неповні",
|
||||||
"ToastDeleteFileFailed": "Не вдалося видалити файл",
|
"ToastDeleteFileFailed": "Не вдалося видалити файл",
|
||||||
|
|
@ -1086,6 +1102,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "Список відтворення оновлено",
|
"ToastPlaylistUpdateSuccess": "Список відтворення оновлено",
|
||||||
"ToastPodcastCreateFailed": "Не вдалося створити подкаст",
|
"ToastPodcastCreateFailed": "Не вдалося створити подкаст",
|
||||||
"ToastPodcastCreateSuccess": "Подкаст успішно створено",
|
"ToastPodcastCreateSuccess": "Подкаст успішно створено",
|
||||||
|
"ToastPodcastEpisodeUpdated": "Епізод оновлено",
|
||||||
"ToastPodcastGetFeedFailed": "Не вдалося отримати фід подкасту",
|
"ToastPodcastGetFeedFailed": "Не вдалося отримати фід подкасту",
|
||||||
"ToastPodcastNoEpisodesInFeed": "У RSS-каналі не знайдено епізодів",
|
"ToastPodcastNoEpisodesInFeed": "У RSS-каналі не знайдено епізодів",
|
||||||
"ToastPodcastNoRssFeed": "Подкаст не має RSS-каналу",
|
"ToastPodcastNoRssFeed": "Подкаст не має RSS-каналу",
|
||||||
|
|
@ -1136,5 +1153,13 @@
|
||||||
"ToastUserPasswordChangeSuccess": "Пароль успішно змінено",
|
"ToastUserPasswordChangeSuccess": "Пароль успішно змінено",
|
||||||
"ToastUserPasswordMismatch": "Паролі не збігаються",
|
"ToastUserPasswordMismatch": "Паролі не збігаються",
|
||||||
"ToastUserPasswordMustChange": "Новий пароль не може співпадати з попереднім",
|
"ToastUserPasswordMustChange": "Новий пароль не може співпадати з попереднім",
|
||||||
"ToastUserRootRequireName": "Потрібно ввести ім'я користувача root"
|
"ToastUserRootRequireName": "Потрібно ввести ім'я користувача root",
|
||||||
|
"TooltipAddChapters": "Додати розділ(и)",
|
||||||
|
"TooltipAddOneSecond": "Додати 1 секунду",
|
||||||
|
"TooltipAdjustChapterStart": "Натисніть, щоб налаштувати час початку",
|
||||||
|
"TooltipLockAllChapters": "Заблокувати всі розділи",
|
||||||
|
"TooltipLockChapter": "Заблокувати розділ (Shift+клацання для діапазону)",
|
||||||
|
"TooltipSubtractOneSecond": "Відніміть 1 секунду",
|
||||||
|
"TooltipUnlockAllChapters": "Розблокувати всі розділи",
|
||||||
|
"TooltipUnlockChapter": "Розблокувати розділ (Shift+клацання для діапазону)"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"ButtonAdd": "Thêm",
|
"ButtonAdd": "Thêm",
|
||||||
|
"ButtonAddApiKey": "Thêm API Key",
|
||||||
"ButtonAddChapters": "Thêm Chương",
|
"ButtonAddChapters": "Thêm Chương",
|
||||||
"ButtonAddDevice": "Thêm Thiết Bị",
|
"ButtonAddDevice": "Thêm Thiết Bị",
|
||||||
"ButtonAddLibrary": "Thêm Thư Viện",
|
"ButtonAddLibrary": "Thêm Thư Viện",
|
||||||
|
|
@ -9,6 +10,7 @@
|
||||||
"ButtonApply": "Áp Dụng",
|
"ButtonApply": "Áp Dụng",
|
||||||
"ButtonApplyChapters": "Áp Dụng Chương",
|
"ButtonApplyChapters": "Áp Dụng Chương",
|
||||||
"ButtonAuthors": "Tác Giả",
|
"ButtonAuthors": "Tác Giả",
|
||||||
|
"ButtonBack": "Quay lại",
|
||||||
"ButtonBrowseForFolder": "Duyệt Thư Mục",
|
"ButtonBrowseForFolder": "Duyệt Thư Mục",
|
||||||
"ButtonCancel": "Hủy",
|
"ButtonCancel": "Hủy",
|
||||||
"ButtonCancelEncode": "Hủy Mã Hóa",
|
"ButtonCancelEncode": "Hủy Mã Hóa",
|
||||||
|
|
@ -17,7 +19,9 @@
|
||||||
"ButtonChooseAFolder": "Chọn một thư mục",
|
"ButtonChooseAFolder": "Chọn một thư mục",
|
||||||
"ButtonChooseFiles": "Chọn tập tin",
|
"ButtonChooseFiles": "Chọn tập tin",
|
||||||
"ButtonClearFilter": "Xóa Bộ Lọc",
|
"ButtonClearFilter": "Xóa Bộ Lọc",
|
||||||
|
"ButtonClose": "Đóng",
|
||||||
"ButtonCloseFeed": "Đóng Feed",
|
"ButtonCloseFeed": "Đóng Feed",
|
||||||
|
"ButtonCloseSession": "Đóng phiên hiện tại",
|
||||||
"ButtonCollections": "Bộ Sưu Tập",
|
"ButtonCollections": "Bộ Sưu Tập",
|
||||||
"ButtonConfigureScanner": "Cấu Hình Bộ Quét",
|
"ButtonConfigureScanner": "Cấu Hình Bộ Quét",
|
||||||
"ButtonCreate": "Tạo",
|
"ButtonCreate": "Tạo",
|
||||||
|
|
@ -27,6 +31,10 @@
|
||||||
"ButtonEdit": "Chỉnh Sửa",
|
"ButtonEdit": "Chỉnh Sửa",
|
||||||
"ButtonEditChapters": "Chỉnh Sửa Chương",
|
"ButtonEditChapters": "Chỉnh Sửa Chương",
|
||||||
"ButtonEditPodcast": "Chỉnh Sửa Podcast",
|
"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 Đủ",
|
"ButtonFullPath": "Đường Dẫn Đầy Đủ",
|
||||||
"ButtonHide": "Ẩn",
|
"ButtonHide": "Ẩn",
|
||||||
"ButtonHome": "Trang Chủ",
|
"ButtonHome": "Trang Chủ",
|
||||||
|
|
@ -44,21 +52,28 @@
|
||||||
"ButtonNevermind": "Không Sao",
|
"ButtonNevermind": "Không Sao",
|
||||||
"ButtonNext": "Tiếp Theo",
|
"ButtonNext": "Tiếp Theo",
|
||||||
"ButtonNextChapter": "Chương 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",
|
"ButtonOpenFeed": "Mở Feed",
|
||||||
"ButtonOpenManager": "Mở Quản Lý",
|
"ButtonOpenManager": "Mở Quản Lý",
|
||||||
"ButtonPause": "Tạm Dừng",
|
"ButtonPause": "Tạm Dừng",
|
||||||
"ButtonPlay": "Phát",
|
"ButtonPlay": "Phát",
|
||||||
|
"ButtonPlayAll": "Phát tất cả",
|
||||||
"ButtonPlaying": "Đang Phát",
|
"ButtonPlaying": "Đang Phát",
|
||||||
"ButtonPlaylists": "Danh Sách Phát",
|
"ButtonPlaylists": "Danh Sách Phát",
|
||||||
"ButtonPrevious": "Trước",
|
"ButtonPrevious": "Trước",
|
||||||
"ButtonPreviousChapter": "Chương 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",
|
"ButtonPurgeAllCache": "Xóa Sạch Tất Cả Bộ Nhớ Cache",
|
||||||
"ButtonPurgeItemsCache": "Xóa Sạch Bộ Nhớ Cache Các Mục",
|
"ButtonPurgeItemsCache": "Xóa Sạch Bộ Nhớ Cache Các Mục",
|
||||||
"ButtonQueueAddItem": "Thêm vào hàng đợi",
|
"ButtonQueueAddItem": "Thêm vào hàng đợi",
|
||||||
"ButtonQueueRemoveItem": "Xóa khỏi hàng đợi",
|
"ButtonQueueRemoveItem": "Xóa khỏi hàng đợi",
|
||||||
|
"ButtonQuickEmbed": "Nhúng nhanh",
|
||||||
"ButtonQuickMatch": "Khớp Nhanh",
|
"ButtonQuickMatch": "Khớp Nhanh",
|
||||||
"ButtonReScan": "Quét Lại",
|
"ButtonReScan": "Quét Lại",
|
||||||
"ButtonRead": "Đọc",
|
"ButtonRead": "Đọc",
|
||||||
|
"ButtonReadLess": "Thu gọn",
|
||||||
|
"ButtonReadMore": "Đọc thêm",
|
||||||
"ButtonRefresh": "Làm Mới",
|
"ButtonRefresh": "Làm Mới",
|
||||||
"ButtonRemove": "Xóa",
|
"ButtonRemove": "Xóa",
|
||||||
"ButtonRemoveAll": "Xóa Tất Cả",
|
"ButtonRemoveAll": "Xóa Tất Cả",
|
||||||
|
|
@ -74,6 +89,8 @@
|
||||||
"ButtonSaveTracklist": "Lưu Danh Sách Track",
|
"ButtonSaveTracklist": "Lưu Danh Sách Track",
|
||||||
"ButtonScan": "Quét",
|
"ButtonScan": "Quét",
|
||||||
"ButtonScanLibrary": "Quét Thư Viện",
|
"ButtonScanLibrary": "Quét Thư Viện",
|
||||||
|
"ButtonScrollLeft": "Cuộn trái",
|
||||||
|
"ButtonScrollRight": "Cuộn phải",
|
||||||
"ButtonSearch": "Tìm Kiếm",
|
"ButtonSearch": "Tìm Kiếm",
|
||||||
"ButtonSelectFolderPath": "Chọn Đường Dẫn Thư Mục",
|
"ButtonSelectFolderPath": "Chọn Đường Dẫn Thư Mục",
|
||||||
"ButtonSetChaptersFromTracks": "Đặt chương từ các track",
|
"ButtonSetChaptersFromTracks": "Đặt chương từ các track",
|
||||||
|
|
@ -82,8 +99,10 @@
|
||||||
"ButtonShow": "Hiện",
|
"ButtonShow": "Hiện",
|
||||||
"ButtonStartM4BEncode": "Bắt đầu Mã Hóa M4B",
|
"ButtonStartM4BEncode": "Bắt đầu Mã Hóa M4B",
|
||||||
"ButtonStartMetadataEmbed": "Bắt đầu Nhúng Dữ Liệu",
|
"ButtonStartMetadataEmbed": "Bắt đầu Nhúng Dữ Liệu",
|
||||||
|
"ButtonStats": "Dữ liệu",
|
||||||
"ButtonSubmit": "Gửi",
|
"ButtonSubmit": "Gửi",
|
||||||
"ButtonTest": "Kiểm Tra",
|
"ButtonTest": "Kiểm Tra",
|
||||||
|
"ButtonUnlinkOpenId": "Huỷ liên kết OpenID",
|
||||||
"ButtonUpload": "Tải Lên",
|
"ButtonUpload": "Tải Lên",
|
||||||
"ButtonUploadBackup": "Tải Lên Bản Sao Lưu",
|
"ButtonUploadBackup": "Tải Lên Bản Sao Lưu",
|
||||||
"ButtonUploadCover": "Tải Lên Bìa",
|
"ButtonUploadCover": "Tải Lên Bìa",
|
||||||
|
|
@ -98,7 +117,7 @@
|
||||||
"HeaderAccount": "Tài Khoản",
|
"HeaderAccount": "Tài Khoản",
|
||||||
"HeaderAdvanced": "Nâng Cao",
|
"HeaderAdvanced": "Nâng Cao",
|
||||||
"HeaderAppriseNotificationSettings": "Cài Đặt Thông Báo Apprise",
|
"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",
|
"HeaderAudiobookTools": "Công Cụ Quản Lý Tệp Truyện Nói",
|
||||||
"HeaderAuthentication": "Xác Thực",
|
"HeaderAuthentication": "Xác Thực",
|
||||||
"HeaderBackups": "Bản Sao Lưu",
|
"HeaderBackups": "Bản Sao Lưu",
|
||||||
|
|
@ -106,9 +125,10 @@
|
||||||
"HeaderChapters": "Chương",
|
"HeaderChapters": "Chương",
|
||||||
"HeaderChooseAFolder": "Chọn Một Thư Mục",
|
"HeaderChooseAFolder": "Chọn Một Thư Mục",
|
||||||
"HeaderCollection": "Bộ Sưu Tập",
|
"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",
|
"HeaderCover": "Bìa",
|
||||||
"HeaderCurrentDownloads": "Tải Xuống Hiện Tại",
|
"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",
|
"HeaderCustomMetadataProviders": "Các Nhà Cung Cấp Metadata Tùy Chỉnh",
|
||||||
"HeaderDetails": "Chi Tiết",
|
"HeaderDetails": "Chi Tiết",
|
||||||
"HeaderDownloadQueue": "Hàng Đợi Tải Xuống",
|
"HeaderDownloadQueue": "Hàng Đợi Tải Xuống",
|
||||||
|
|
@ -139,6 +159,8 @@
|
||||||
"HeaderMetadataToEmbed": "Metadata để nhúng",
|
"HeaderMetadataToEmbed": "Metadata để nhúng",
|
||||||
"HeaderNewAccount": "Tài Khoản Mới",
|
"HeaderNewAccount": "Tài Khoản Mới",
|
||||||
"HeaderNewLibrary": "Thư Việ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",
|
"HeaderNotifications": "Thông Báo",
|
||||||
"HeaderOpenIDConnectAuthentication": "Xác Thực Mở ID Connect",
|
"HeaderOpenIDConnectAuthentication": "Xác Thực Mở ID Connect",
|
||||||
"HeaderOpenRSSFeed": "Mở RSS Feed",
|
"HeaderOpenRSSFeed": "Mở RSS Feed",
|
||||||
|
|
@ -146,6 +168,7 @@
|
||||||
"HeaderPasswordAuthentication": "Xác Thực Mật Khẩu",
|
"HeaderPasswordAuthentication": "Xác Thực Mật Khẩu",
|
||||||
"HeaderPermissions": "Quyền Hạn",
|
"HeaderPermissions": "Quyền Hạn",
|
||||||
"HeaderPlayerQueue": "Hàng Đợi Người Chơi",
|
"HeaderPlayerQueue": "Hàng Đợi Người Chơi",
|
||||||
|
"HeaderPlayerSettings": "Cài đặt trình phát",
|
||||||
"HeaderPlaylist": "Danh Sách Phát",
|
"HeaderPlaylist": "Danh Sách Phát",
|
||||||
"HeaderPlaylistItems": "Các Mục Danh Sách Phát",
|
"HeaderPlaylistItems": "Các Mục Danh Sách Phát",
|
||||||
"HeaderPodcastsToAdd": "Podcasts để Thêm",
|
"HeaderPodcastsToAdd": "Podcasts để Thêm",
|
||||||
|
|
@ -156,6 +179,7 @@
|
||||||
"HeaderRemoveEpisodes": "Xóa {0} Tập",
|
"HeaderRemoveEpisodes": "Xóa {0} Tập",
|
||||||
"HeaderSavedMediaProgress": "Tiến Trình Phương Tiện Đã Lưu",
|
"HeaderSavedMediaProgress": "Tiến Trình Phương Tiện Đã Lưu",
|
||||||
"HeaderSchedule": "Lịch Trình",
|
"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",
|
"HeaderScheduleLibraryScans": "Lên Lịch Quét Tự Động Thư Viện",
|
||||||
"HeaderSession": "Phiên",
|
"HeaderSession": "Phiên",
|
||||||
"HeaderSetBackupSchedule": "Đặt Lịch Sao Lưu",
|
"HeaderSetBackupSchedule": "Đặt Lịch Sao Lưu",
|
||||||
|
|
@ -164,6 +188,7 @@
|
||||||
"HeaderSettingsExperimental": "Tính Năng Thử Nghiệm",
|
"HeaderSettingsExperimental": "Tính Năng Thử Nghiệm",
|
||||||
"HeaderSettingsGeneral": "Chung",
|
"HeaderSettingsGeneral": "Chung",
|
||||||
"HeaderSettingsScanner": "Máy Quét",
|
"HeaderSettingsScanner": "Máy Quét",
|
||||||
|
"HeaderSettingsSecurity": "Bảo mật",
|
||||||
"HeaderSleepTimer": "Hẹn Giờ Tắt",
|
"HeaderSleepTimer": "Hẹn Giờ Tắt",
|
||||||
"HeaderStatsLargestItems": "Các Mục Lớn Nhất",
|
"HeaderStatsLargestItems": "Các Mục Lớn Nhất",
|
||||||
"HeaderStatsLongestItems": "Các Mục Dài Nhất (giờ)",
|
"HeaderStatsLongestItems": "Các Mục Dài Nhất (giờ)",
|
||||||
|
|
@ -174,6 +199,7 @@
|
||||||
"HeaderTableOfContents": "Mục Lục",
|
"HeaderTableOfContents": "Mục Lục",
|
||||||
"HeaderTools": "Công Cụ",
|
"HeaderTools": "Công Cụ",
|
||||||
"HeaderUpdateAccount": "Cập Nhật Tài Khoản",
|
"HeaderUpdateAccount": "Cập Nhật Tài Khoản",
|
||||||
|
"HeaderUpdateApiKey": "Cập nhập API Key",
|
||||||
"HeaderUpdateAuthor": "Cập Nhật Tác Giả",
|
"HeaderUpdateAuthor": "Cập Nhật Tác Giả",
|
||||||
"HeaderUpdateDetails": "Cập Nhật Chi Tiết",
|
"HeaderUpdateDetails": "Cập Nhật Chi Tiết",
|
||||||
"HeaderUpdateLibrary": "Cập Nhật Thư Viện",
|
"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",
|
"LabelAddToCollectionBatch": "Thêm {0} Sách vào Bộ Sưu Tập",
|
||||||
"LabelAddToPlaylist": "Thêm vào Danh Sách Phát",
|
"LabelAddToPlaylist": "Thêm vào Danh Sách Phát",
|
||||||
"LabelAddedAt": "Đã Thêm Lúc",
|
"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)",
|
"LabelBackupsMaxBackupSize": "Maximum backup size (in GB)",
|
||||||
"LabelBooks": "Sách",
|
"LabelBooks": "Sách",
|
||||||
"LabelButtonText": "Nút Văn Bản",
|
"LabelButtonText": "Nút Văn Bản",
|
||||||
|
|
@ -231,7 +259,7 @@
|
||||||
"LabelDownloadNEpisodes": "Tải Xuống {0} Tập",
|
"LabelDownloadNEpisodes": "Tải Xuống {0} Tập",
|
||||||
"LabelDuration": "Thời Lượng",
|
"LabelDuration": "Thời Lượng",
|
||||||
"LabelDurationFound": "Thời lượng được tìm thấy:",
|
"LabelDurationFound": "Thời lượng được tìm thấy:",
|
||||||
"LabelEbooks": "Các Ebook",
|
"LabelEbooks": "",
|
||||||
"LabelEdit": "Chỉnh Sửa",
|
"LabelEdit": "Chỉnh Sửa",
|
||||||
"LabelEmailSettingsFromAddress": "Địa chỉ Gửi từ",
|
"LabelEmailSettingsFromAddress": "Địa chỉ Gửi từ",
|
||||||
"LabelEmailSettingsSecure": "Bảo Mật",
|
"LabelEmailSettingsSecure": "Bảo Mật",
|
||||||
|
|
@ -257,6 +285,7 @@
|
||||||
"LabelFolder": "Thư Mục",
|
"LabelFolder": "Thư Mục",
|
||||||
"LabelFolders": "Các Thư Mục",
|
"LabelFolders": "Các Thư Mục",
|
||||||
"LabelFontBold": "Đậm",
|
"LabelFontBold": "Đậm",
|
||||||
|
"LabelFontBoldness": "Chữ đậm",
|
||||||
"LabelFontFamily": "Gia đình font",
|
"LabelFontFamily": "Gia đình font",
|
||||||
"LabelFontItalic": "Nghiêng",
|
"LabelFontItalic": "Nghiêng",
|
||||||
"LabelFontScale": "Tỷ lệ font",
|
"LabelFontScale": "Tỷ lệ font",
|
||||||
|
|
@ -268,7 +297,7 @@
|
||||||
"LabelHasEbook": "Có ebook",
|
"LabelHasEbook": "Có ebook",
|
||||||
"LabelHasSupplementaryEbook": "Có ebook bổ sung",
|
"LabelHasSupplementaryEbook": "Có ebook bổ sung",
|
||||||
"LabelHighestPriority": "Ưu tiên cao nhất",
|
"LabelHighestPriority": "Ưu tiên cao nhất",
|
||||||
"LabelHost": "Máy chủ",
|
"LabelHost": "Máy Chủ",
|
||||||
"LabelHour": "Giờ",
|
"LabelHour": "Giờ",
|
||||||
"LabelIcon": "Biểu tượng",
|
"LabelIcon": "Biểu tượng",
|
||||||
"LabelImageURLFromTheWeb": "URL hình ảnh từ web",
|
"LabelImageURLFromTheWeb": "URL hình ảnh từ web",
|
||||||
|
|
@ -303,7 +332,7 @@
|
||||||
"LabelLibraryName": "Tên thư viện",
|
"LabelLibraryName": "Tên thư viện",
|
||||||
"LabelLimit": "Giới hạn",
|
"LabelLimit": "Giới hạn",
|
||||||
"LabelLineSpacing": "Khoảng cách dòng",
|
"LabelLineSpacing": "Khoảng cách dòng",
|
||||||
"LabelListenAgain": "Nghe lại",
|
"LabelListenAgain": "Nghe Lại",
|
||||||
"LabelLogLevelDebug": "Gỡ lỗi",
|
"LabelLogLevelDebug": "Gỡ lỗi",
|
||||||
"LabelLogLevelInfo": "Thông tin",
|
"LabelLogLevelInfo": "Thông tin",
|
||||||
"LabelLogLevelWarn": "Cảnh báo",
|
"LabelLogLevelWarn": "Cảnh báo",
|
||||||
|
|
@ -312,13 +341,13 @@
|
||||||
"LabelMatchExistingUsersBy": "Kết hợp người dùng hiện có theo",
|
"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",
|
"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",
|
"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",
|
"LabelMetaTag": "Thẻ Meta",
|
||||||
"LabelMetaTags": "Các 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",
|
"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",
|
"LabelMetadataProvider": "Nhà cung cấp siêu dữ liệu",
|
||||||
"LabelMinute": "Phút",
|
"LabelMinute": "Phút",
|
||||||
"LabelMissing": "Thiếu",
|
"LabelMissing": "",
|
||||||
"LabelMissingEbook": "Không có ebook",
|
"LabelMissingEbook": "Không có ebook",
|
||||||
"LabelMissingSupplementaryEbook": "Không có ebook bổ sung",
|
"LabelMissingSupplementaryEbook": "Không có ebook bổ sung",
|
||||||
"LabelMobileRedirectURIs": "URI chuyển hướng di động được cho phép",
|
"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",
|
"LabelNextBackupDate": "Ngày sao lưu tiếp theo",
|
||||||
"LabelNextScheduledRun": "Chạy tiếp theo theo lịch trình",
|
"LabelNextScheduledRun": "Chạy tiếp theo theo lịch trình",
|
||||||
"LabelNoEpisodesSelected": "Không có tập nào được chọn",
|
"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",
|
"LabelNotStarted": "Chưa bắt đầu",
|
||||||
"LabelNotes": "Ghi chú",
|
"LabelNotes": "Ghi chú",
|
||||||
"LabelNotificationAppriseURL": "URL(s) thông báo",
|
"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",
|
"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.",
|
"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",
|
"LabelNumberOfBooks": "Số lượng Sách",
|
||||||
"LabelNumberOfEpisodes": "# của Tập",
|
"LabelNumberOfEpisodes": "Số lượng tập",
|
||||||
"LabelOpenRSSFeed": "Mở RSS Feed",
|
"LabelOpenRSSFeed": "Mở RSS Feed",
|
||||||
"LabelOverwrite": "Ghi đè",
|
"LabelOverwrite": "Ghi đè",
|
||||||
"LabelPassword": "Mật khẩu",
|
"LabelPassword": "Mật khẩu",
|
||||||
|
|
@ -364,17 +393,19 @@
|
||||||
"LabelPhotoPathURL": "Đường dẫn/URL ảnh",
|
"LabelPhotoPathURL": "Đường dẫn/URL ảnh",
|
||||||
"LabelPlayMethod": "Phương pháp phát",
|
"LabelPlayMethod": "Phương pháp phát",
|
||||||
"LabelPlaylists": "Danh sách phát",
|
"LabelPlaylists": "Danh sách phát",
|
||||||
|
"LabelPodcast": "Podcast",
|
||||||
"LabelPodcastSearchRegion": "Vùng tìm kiếm podcast",
|
"LabelPodcastSearchRegion": "Vùng tìm kiếm podcast",
|
||||||
"LabelPodcastType": "Loại Podcast",
|
"LabelPodcastType": "Loại Podcast",
|
||||||
"LabelPodcasts": "Các podcast",
|
"LabelPodcasts": "Podcasts",
|
||||||
"LabelPort": "Cổng",
|
"LabelPort": "Cổng",
|
||||||
"LabelPrefixesToIgnore": "Tiền tố để bỏ qua (không phân biệt chữ hoa/chữ thườ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",
|
"LabelPrimaryEbook": "Ebook chính",
|
||||||
"LabelProgress": "Tiến độ",
|
"LabelProgress": "Tiến độ",
|
||||||
"LabelProvider": "Nhà cung cấp",
|
"LabelProvider": "Nhà cung cấp",
|
||||||
"LabelPubDate": "Ngày Xuất bản",
|
"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",
|
"LabelPublisher": "Nhà xuất bản",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Email chủ sở hữu tùy chỉnh",
|
"LabelRSSFeedCustomOwnerEmail": "Email chủ sở hữu tùy chỉnh",
|
||||||
"LabelRSSFeedCustomOwnerName": "Tên chủ sở hữu tùy chỉnh",
|
"LabelRSSFeedCustomOwnerName": "Tên chủ sở hữu tùy chỉnh",
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,7 @@
|
||||||
"HeaderAudiobookTools": "有声读物文件管理工具",
|
"HeaderAudiobookTools": "有声读物文件管理工具",
|
||||||
"HeaderAuthentication": "身份验证",
|
"HeaderAuthentication": "身份验证",
|
||||||
"HeaderBackups": "备份",
|
"HeaderBackups": "备份",
|
||||||
|
"HeaderBulkChapterModal": "添加多个章节",
|
||||||
"HeaderChangePassword": "更改密码",
|
"HeaderChangePassword": "更改密码",
|
||||||
"HeaderChapters": "章节",
|
"HeaderChapters": "章节",
|
||||||
"HeaderChooseAFolder": "选择文件夹",
|
"HeaderChooseAFolder": "选择文件夹",
|
||||||
|
|
@ -308,6 +309,7 @@
|
||||||
"LabelDeleteFromFileSystemCheckbox": "从文件系统删除 (取消选中仅从数据库中删除)",
|
"LabelDeleteFromFileSystemCheckbox": "从文件系统删除 (取消选中仅从数据库中删除)",
|
||||||
"LabelDescription": "描述",
|
"LabelDescription": "描述",
|
||||||
"LabelDeselectAll": "全部取消选择",
|
"LabelDeselectAll": "全部取消选择",
|
||||||
|
"LabelDetectedPattern": "检测到的编号格式:",
|
||||||
"LabelDevice": "设备",
|
"LabelDevice": "设备",
|
||||||
"LabelDeviceInfo": "设备信息",
|
"LabelDeviceInfo": "设备信息",
|
||||||
"LabelDeviceIsAvailableTo": "设备可用于...",
|
"LabelDeviceIsAvailableTo": "设备可用于...",
|
||||||
|
|
@ -376,11 +378,12 @@
|
||||||
"LabelFilterByUser": "按用户筛选",
|
"LabelFilterByUser": "按用户筛选",
|
||||||
"LabelFindEpisodes": "查找剧集",
|
"LabelFindEpisodes": "查找剧集",
|
||||||
"LabelFinished": "已听完",
|
"LabelFinished": "已听完",
|
||||||
|
"LabelFinishedDate": "完成于 {0}",
|
||||||
"LabelFolder": "文件夹",
|
"LabelFolder": "文件夹",
|
||||||
"LabelFolders": "文件夹",
|
"LabelFolders": "文件夹",
|
||||||
"LabelFontBold": "加粗",
|
"LabelFontBold": "加粗",
|
||||||
"LabelFontBoldness": "字体粗细",
|
"LabelFontBoldness": "字体粗细",
|
||||||
"LabelFontFamily": "字体系列",
|
"LabelFontFamily": "字体",
|
||||||
"LabelFontItalic": "斜体",
|
"LabelFontItalic": "斜体",
|
||||||
"LabelFontScale": "字体比例",
|
"LabelFontScale": "字体比例",
|
||||||
"LabelFontStrikethrough": "删除线",
|
"LabelFontStrikethrough": "删除线",
|
||||||
|
|
@ -433,7 +436,9 @@
|
||||||
"LabelLibraryFilterSublistEmpty": "没有 {0}",
|
"LabelLibraryFilterSublistEmpty": "没有 {0}",
|
||||||
"LabelLibraryItem": "媒体库项目",
|
"LabelLibraryItem": "媒体库项目",
|
||||||
"LabelLibraryName": "媒体库名称",
|
"LabelLibraryName": "媒体库名称",
|
||||||
"LabelLibrarySortByProgress": "进度更新时间",
|
"LabelLibrarySortByProgress": "收听进度: 上次收听时间",
|
||||||
|
"LabelLibrarySortByProgressFinished": "收听进度: 已完成的",
|
||||||
|
"LabelLibrarySortByProgressStarted": "收听进度: 已开始的",
|
||||||
"LabelLimit": "限制",
|
"LabelLimit": "限制",
|
||||||
"LabelLineSpacing": "行间距",
|
"LabelLineSpacing": "行间距",
|
||||||
"LabelListenAgain": "再次收听",
|
"LabelListenAgain": "再次收听",
|
||||||
|
|
@ -472,6 +477,7 @@
|
||||||
"LabelNewestAuthors": "最新作者",
|
"LabelNewestAuthors": "最新作者",
|
||||||
"LabelNewestEpisodes": "最新剧集",
|
"LabelNewestEpisodes": "最新剧集",
|
||||||
"LabelNextBackupDate": "下次备份日期",
|
"LabelNextBackupDate": "下次备份日期",
|
||||||
|
"LabelNextChapters": "后续章节示例:",
|
||||||
"LabelNextScheduledRun": "下次任务运行",
|
"LabelNextScheduledRun": "下次任务运行",
|
||||||
"LabelNoApiKeys": "无 API 密钥",
|
"LabelNoApiKeys": "无 API 密钥",
|
||||||
"LabelNoCustomMetadataProviders": "没有自定义元数据提供商",
|
"LabelNoCustomMetadataProviders": "没有自定义元数据提供商",
|
||||||
|
|
@ -489,6 +495,7 @@
|
||||||
"LabelNotificationsMaxQueueSize": "通知事件的最大队列大小",
|
"LabelNotificationsMaxQueueSize": "通知事件的最大队列大小",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "通知事件被限制为每秒触发 1 个. 如果队列处于最大大小, 则将忽略事件. 这可以防止通知垃圾邮件.",
|
"LabelNotificationsMaxQueueSizeHelp": "通知事件被限制为每秒触发 1 个. 如果队列处于最大大小, 则将忽略事件. 这可以防止通知垃圾邮件.",
|
||||||
"LabelNumberOfBooks": "图书数量",
|
"LabelNumberOfBooks": "图书数量",
|
||||||
|
"LabelNumberOfChapters": "章节数量:",
|
||||||
"LabelNumberOfEpisodes": "# 集数",
|
"LabelNumberOfEpisodes": "# 集数",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "OpenID 声明的名称, 该声明包含应用程序内用户操作的高级权限, 该权限将应用于非管理员角色(<b>如果已配置</b>). 如果响应中缺少声明, 获取 ABS 的权限将被拒绝. 如果缺少单个选项, 它将被视为 <code>禁用</code>. 确保身份提供商的声明与预期结构匹配:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "OpenID 声明的名称, 该声明包含应用程序内用户操作的高级权限, 该权限将应用于非管理员角色(<b>如果已配置</b>). 如果响应中缺少声明, 获取 ABS 的权限将被拒绝. 如果缺少单个选项, 它将被视为 <code>禁用</code>. 确保身份提供商的声明与预期结构匹配:",
|
||||||
"LabelOpenIDClaims": "将以下选项留空以禁用高级组和权限分配, 然后自动分配 'User' 组.",
|
"LabelOpenIDClaims": "将以下选项留空以禁用高级组和权限分配, 然后自动分配 'User' 组.",
|
||||||
|
|
@ -581,8 +588,8 @@
|
||||||
"LabelSettingsBookshelfViewHelp": "带有木架子的拟物化设计",
|
"LabelSettingsBookshelfViewHelp": "带有木架子的拟物化设计",
|
||||||
"LabelSettingsChromecastSupport": "Chromecast 支持",
|
"LabelSettingsChromecastSupport": "Chromecast 支持",
|
||||||
"LabelSettingsDateFormat": "日期格式",
|
"LabelSettingsDateFormat": "日期格式",
|
||||||
"LabelSettingsEnableWatcher": "自动扫描库以查找更改",
|
"LabelSettingsEnableWatcher": "自动检测媒体库变化",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "自动扫描库以查找更改",
|
"LabelSettingsEnableWatcherForLibrary": "自动检测媒体库变化",
|
||||||
"LabelSettingsEnableWatcherHelp": "当检测到文件更改时, 启用项目的自动添加/更新. *需要重新启动服务器",
|
"LabelSettingsEnableWatcherHelp": "当检测到文件更改时, 启用项目的自动添加/更新. *需要重新启动服务器",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "允许 epubs 中包含脚本内容",
|
"LabelSettingsEpubsAllowScriptedContent": "允许 epubs 中包含脚本内容",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "允许 epub 文件执行脚本. 建议将此设置保持禁用, 除非你信任 epub 文件的来源.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "允许 epub 文件执行脚本. 建议将此设置保持禁用, 除非你信任 epub 文件的来源.",
|
||||||
|
|
@ -631,6 +638,7 @@
|
||||||
"LabelStartTime": "开始时间",
|
"LabelStartTime": "开始时间",
|
||||||
"LabelStarted": "开始于",
|
"LabelStarted": "开始于",
|
||||||
"LabelStartedAt": "收听始于",
|
"LabelStartedAt": "收听始于",
|
||||||
|
"LabelStartedDate": "开始于 {0}",
|
||||||
"LabelStatsAudioTracks": "音轨",
|
"LabelStatsAudioTracks": "音轨",
|
||||||
"LabelStatsAuthors": "作者",
|
"LabelStatsAuthors": "作者",
|
||||||
"LabelStatsBestDay": "单日最高",
|
"LabelStatsBestDay": "单日最高",
|
||||||
|
|
@ -745,6 +753,7 @@
|
||||||
"MessageBookshelfNoResultsForFilter": "过滤器无结果 \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "过滤器无结果 \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "没有可查询的结果",
|
"MessageBookshelfNoResultsForQuery": "没有可查询的结果",
|
||||||
"MessageBookshelfNoSeries": "你没有系列",
|
"MessageBookshelfNoSeries": "你没有系列",
|
||||||
|
"MessageBulkChapterPattern": "您想用此编号模式添加多少个章节?",
|
||||||
"MessageChapterEndIsAfter": "章节结束是在有声读物结束之后",
|
"MessageChapterEndIsAfter": "章节结束是在有声读物结束之后",
|
||||||
"MessageChapterErrorFirstNotZero": "第一章节必须从 0 开始",
|
"MessageChapterErrorFirstNotZero": "第一章节必须从 0 开始",
|
||||||
"MessageChapterErrorStartGteDuration": "无效的开始时间, 必须小于有声读物持续时间",
|
"MessageChapterErrorStartGteDuration": "无效的开始时间, 必须小于有声读物持续时间",
|
||||||
|
|
@ -879,7 +888,7 @@
|
||||||
"MessageResetChaptersConfirm": "你确定要重置章节并撤消你所做的更改吗?",
|
"MessageResetChaptersConfirm": "你确定要重置章节并撤消你所做的更改吗?",
|
||||||
"MessageRestoreBackupConfirm": "你确定要恢复创建的这个备份",
|
"MessageRestoreBackupConfirm": "你确定要恢复创建的这个备份",
|
||||||
"MessageRestoreBackupWarning": "恢复备份将覆盖位于 /config 的整个数据库并覆盖 /metadata/items & /metadata/authors 中的图像.<br /><br />备份不会修改媒体库文件夹中的任何文件. 如果你已启用服务器设置将封面和元数据存储在库文件夹中,则不会备份或覆盖这些内容.<br /><br />将自动刷新使用服务器的所有客户端.",
|
"MessageRestoreBackupWarning": "恢复备份将覆盖位于 /config 的整个数据库并覆盖 /metadata/items & /metadata/authors 中的图像.<br /><br />备份不会修改媒体库文件夹中的任何文件. 如果你已启用服务器设置将封面和元数据存储在库文件夹中,则不会备份或覆盖这些内容.<br /><br />将自动刷新使用服务器的所有客户端.",
|
||||||
"MessageScheduleLibraryScanNote": "对于大多数用户, 建议禁用此功能并保持文件夹监视程序设置启用. 文件夹监视程序将自动检测库文件夹中的更改. 文件夹监视程序不适用于每个文件系统 (如 NFS), 因此可以使用计划库扫描.",
|
"MessageScheduleLibraryScanNote": "对于大多数用户, 建议保持此功能关闭并启用 \"自动检测媒体库变化\" 选项, 它会自动检测媒体库文件夹中的更改. 如果 \"自动检测媒体库变化\" 在你的文件系统 (例如 NFS) 上无法正常工作, 请启用此功能.",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "每 {0} 的 {1} 执行",
|
"MessageScheduleRunEveryWeekdayAtTime": "每 {0} 的 {1} 执行",
|
||||||
"MessageSearchResultsFor": "搜索结果",
|
"MessageSearchResultsFor": "搜索结果",
|
||||||
"MessageSelected": "{0} 已选择",
|
"MessageSelected": "{0} 已选择",
|
||||||
|
|
@ -948,6 +957,7 @@
|
||||||
"NotificationOnRSSFeedDisabledDescription": "由于尝试失败次数过多而导致剧集自动下载被禁用时触发",
|
"NotificationOnRSSFeedDisabledDescription": "由于尝试失败次数过多而导致剧集自动下载被禁用时触发",
|
||||||
"NotificationOnRSSFeedFailedDescription": "当用于自动下载剧集的 RSS 源请求失败时触发",
|
"NotificationOnRSSFeedFailedDescription": "当用于自动下载剧集的 RSS 源请求失败时触发",
|
||||||
"NotificationOnTestDescription": "测试通知系统的事件",
|
"NotificationOnTestDescription": "测试通知系统的事件",
|
||||||
|
"PlaceholderBulkChapterInput": "请输入章节标题, 或使用编号格式 (例如: \"Episode 1\", \"Chapter 10\", \"1.\")",
|
||||||
"PlaceholderNewCollection": "输入收藏夹名称",
|
"PlaceholderNewCollection": "输入收藏夹名称",
|
||||||
"PlaceholderNewFolderPath": "输入文件夹路径",
|
"PlaceholderNewFolderPath": "输入文件夹路径",
|
||||||
"PlaceholderNewPlaylist": "输入播放列表名称",
|
"PlaceholderNewPlaylist": "输入播放列表名称",
|
||||||
|
|
@ -1001,8 +1011,12 @@
|
||||||
"ToastBookmarkCreateFailed": "创建书签失败",
|
"ToastBookmarkCreateFailed": "创建书签失败",
|
||||||
"ToastBookmarkCreateSuccess": "书签已添加",
|
"ToastBookmarkCreateSuccess": "书签已添加",
|
||||||
"ToastBookmarkRemoveSuccess": "书签已删除",
|
"ToastBookmarkRemoveSuccess": "书签已删除",
|
||||||
|
"ToastBulkChapterInvalidCount": "输入一个1到150之间的整数",
|
||||||
"ToastCachePurgeFailed": "清除缓存失败",
|
"ToastCachePurgeFailed": "清除缓存失败",
|
||||||
"ToastCachePurgeSuccess": "缓存清除成功",
|
"ToastCachePurgeSuccess": "缓存清除成功",
|
||||||
|
"ToastChapterLocked": "章节已锁定.",
|
||||||
|
"ToastChapterStartTimeAdjusted": "章节开始时间已调整 {0} 秒",
|
||||||
|
"ToastChaptersAllLocked": "所有章节均已锁定. 请解锁要调整时间的章节.",
|
||||||
"ToastChaptersHaveErrors": "章节有错误",
|
"ToastChaptersHaveErrors": "章节有错误",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "偏移量无效. 最后一章的开始时间将超过这本有声读物的持续时间.",
|
"ToastChaptersInvalidShiftAmountLast": "偏移量无效. 最后一章的开始时间将超过这本有声读物的持续时间.",
|
||||||
"ToastChaptersInvalidShiftAmountStart": "偏移量无效. 第一章的长度将为零或负数, 并会被第二章覆盖. 请增加第二章的起始时长.",
|
"ToastChaptersInvalidShiftAmountStart": "偏移量无效. 第一章的长度将为零或负数, 并会被第二章覆盖. 请增加第二章的起始时长.",
|
||||||
|
|
@ -1012,6 +1026,8 @@
|
||||||
"ToastCollectionItemsAddFailed": "项目添加到收藏夹失败",
|
"ToastCollectionItemsAddFailed": "项目添加到收藏夹失败",
|
||||||
"ToastCollectionRemoveSuccess": "收藏夹已删除",
|
"ToastCollectionRemoveSuccess": "收藏夹已删除",
|
||||||
"ToastCollectionUpdateSuccess": "收藏夹已更新",
|
"ToastCollectionUpdateSuccess": "收藏夹已更新",
|
||||||
|
"ToastConnectionNotAvailable": "连接不可用. 请稍后重试",
|
||||||
|
"ToastCoverSearchFailed": "封面搜索失败",
|
||||||
"ToastCoverUpdateFailed": "封面更新失败",
|
"ToastCoverUpdateFailed": "封面更新失败",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "日期和时间无效或不完整",
|
"ToastDateTimeInvalidOrIncomplete": "日期和时间无效或不完整",
|
||||||
"ToastDeleteFileFailed": "删除文件失败",
|
"ToastDeleteFileFailed": "删除文件失败",
|
||||||
|
|
@ -1086,6 +1102,7 @@
|
||||||
"ToastPlaylistUpdateSuccess": "播放列表已更新",
|
"ToastPlaylistUpdateSuccess": "播放列表已更新",
|
||||||
"ToastPodcastCreateFailed": "创建播客失败",
|
"ToastPodcastCreateFailed": "创建播客失败",
|
||||||
"ToastPodcastCreateSuccess": "已成功创建播客",
|
"ToastPodcastCreateSuccess": "已成功创建播客",
|
||||||
|
"ToastPodcastEpisodeUpdated": "剧集已更新",
|
||||||
"ToastPodcastGetFeedFailed": "无法获取播客信息",
|
"ToastPodcastGetFeedFailed": "无法获取播客信息",
|
||||||
"ToastPodcastNoEpisodesInFeed": "RSS 订阅中未找到任何剧集",
|
"ToastPodcastNoEpisodesInFeed": "RSS 订阅中未找到任何剧集",
|
||||||
"ToastPodcastNoRssFeed": "播客没有 RSS 源",
|
"ToastPodcastNoRssFeed": "播客没有 RSS 源",
|
||||||
|
|
@ -1136,5 +1153,13 @@
|
||||||
"ToastUserPasswordChangeSuccess": "密码修改成功",
|
"ToastUserPasswordChangeSuccess": "密码修改成功",
|
||||||
"ToastUserPasswordMismatch": "密码不匹配",
|
"ToastUserPasswordMismatch": "密码不匹配",
|
||||||
"ToastUserPasswordMustChange": "新密码不能与旧密码相同",
|
"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",
|
"name": "audiobookshelf",
|
||||||
"version": "2.28.0",
|
"version": "2.31.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.28.0",
|
"version": "2.31.0",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.27.2",
|
"axios": "^0.27.2",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.28.0",
|
"version": "2.31.0",
|
||||||
"buildNumber": 1,
|
"buildNumber": 1,
|
||||||
"description": "Self-hosted audiobook and podcast server",
|
"description": "Self-hosted audiobook and podcast server",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
"client": "cd client && npm ci && npm run generate",
|
"client": "cd client && npm ci && npm run generate",
|
||||||
"prod": "npm run client && npm ci && node index.js",
|
"prod": "npm run client && npm ci && node index.js",
|
||||||
"build-win": "npm run client && pkg -t node20-win-x64 -o ./dist/win/audiobookshelf -C GZip .",
|
"build-win": "npm run client && pkg -t node20-win-x64 -o ./dist/win/audiobookshelf -C GZip .",
|
||||||
|
"build-win-no-compress": "npm run client && pkg -t node20-win-x64 -o ./dist/win/audiobookshelf .",
|
||||||
"build-linux": "build/linuxpackager",
|
"build-linux": "build/linuxpackager",
|
||||||
"docker": "docker buildx build --platform linux/amd64,linux/arm64 --push . -t advplyr/audiobookshelf",
|
"docker": "docker buildx build --platform linux/amd64,linux/arm64 --push . -t advplyr/audiobookshelf",
|
||||||
"docker-amd64-local": "docker buildx build --platform linux/amd64 --load . -t advplyr/audiobookshelf-amd64-local",
|
"docker-amd64-local": "docker buildx build --platform linux/amd64 --load . -t advplyr/audiobookshelf-amd64-local",
|
||||||
|
|
|
||||||
|
|
@ -355,7 +355,7 @@ This application is built using [NodeJs](https://nodejs.org/).
|
||||||
|
|
||||||
### Localization
|
### 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
|
### Dev Container Setup
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -243,6 +243,7 @@ class Auth {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store the authentication method for long
|
// 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 })
|
res.cookie('auth_method', authMethod, { maxAge: 1000 * 60 * 60 * 24 * 365 * 10, httpOnly: true })
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
@ -258,6 +259,7 @@ class Auth {
|
||||||
// Handle token generation and get userResponse object
|
// Handle token generation and get userResponse object
|
||||||
// For API based auth (e.g. mobile), we will return the refresh token in the response
|
// For API based auth (e.g. mobile), we will return the refresh token in the response
|
||||||
const isApiBased = this.isAuthMethodAPIBased(req.cookies.auth_method)
|
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)
|
const userResponse = await this.handleLoginSuccess(req, res, isApiBased)
|
||||||
|
|
||||||
if (isApiBased) {
|
if (isApiBased) {
|
||||||
|
|
@ -298,6 +300,8 @@ class Auth {
|
||||||
userResponse.user.refreshToken = returnTokens ? refreshToken : null
|
userResponse.user.refreshToken = returnTokens ? refreshToken : null
|
||||||
userResponse.user.accessToken = accessToken
|
userResponse.user.accessToken = accessToken
|
||||||
|
|
||||||
|
Logger.debug(`[Auth] handleLoginSuccess: returnTokens: ${returnTokens}, isRefreshTokenInResponse: ${!!userResponse.user.refreshToken}`)
|
||||||
|
|
||||||
if (!returnTokens) {
|
if (!returnTokens) {
|
||||||
this.tokenManager.setRefreshTokenCookie(req, res, refreshToken)
|
this.tokenManager.setRefreshTokenCookie(req, res, refreshToken)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ const axios = require('axios')
|
||||||
const { version } = require('../package.json')
|
const { version } = require('../package.json')
|
||||||
|
|
||||||
// Utils
|
// Utils
|
||||||
|
const is = require('./libs/requestIp/isJs')
|
||||||
const fileUtils = require('./utils/fileUtils')
|
const fileUtils = require('./utils/fileUtils')
|
||||||
const { toNumber } = require('./utils/index')
|
const { toNumber } = require('./utils/index')
|
||||||
const Logger = require('./Logger')
|
const Logger = require('./Logger')
|
||||||
|
|
@ -406,8 +407,7 @@ class Server {
|
||||||
const nextApp = next({ dev: Logger.isDev, dir: ReactClientPath })
|
const nextApp = next({ dev: Logger.isDev, dir: ReactClientPath })
|
||||||
const handle = nextApp.getRequestHandler()
|
const handle = nextApp.getRequestHandler()
|
||||||
await nextApp.prepare()
|
await nextApp.prepare()
|
||||||
router.get('*', (req, res) => handle(req, res))
|
router.all('*', (req, res) => handle(req, res))
|
||||||
router.post('/internal-api/*', (req, res) => handle(req, res))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const unixSocketPrefix = 'unix/'
|
const unixSocketPrefix = 'unix/'
|
||||||
|
|
@ -419,7 +419,7 @@ class Server {
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
this.server.listen(this.Port, this.Host, () => {
|
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}`)
|
else Logger.info(`Listening on port :${this.Port}`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ const SocketIO = require('socket.io')
|
||||||
const Logger = require('./Logger')
|
const Logger = require('./Logger')
|
||||||
const Database = require('./Database')
|
const Database = require('./Database')
|
||||||
const TokenManager = require('./auth/TokenManager')
|
const TokenManager = require('./auth/TokenManager')
|
||||||
|
const CoverSearchManager = require('./managers/CoverSearchManager')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef SocketClient
|
* @typedef SocketClient
|
||||||
|
|
@ -180,6 +181,10 @@ class SocketAuthority {
|
||||||
// Scanning
|
// Scanning
|
||||||
socket.on('cancel_scan', (libraryId) => this.cancelScan(libraryId))
|
socket.on('cancel_scan', (libraryId) => this.cancelScan(libraryId))
|
||||||
|
|
||||||
|
// Cover search streaming
|
||||||
|
socket.on('search_covers', (payload) => this.handleCoverSearch(socket, payload))
|
||||||
|
socket.on('cancel_cover_search', (requestId) => this.handleCancelCoverSearch(socket, requestId))
|
||||||
|
|
||||||
// Logs
|
// Logs
|
||||||
socket.on('set_log_listener', (level) => Logger.addSocketListener(socket, level))
|
socket.on('set_log_listener', (level) => Logger.addSocketListener(socket, level))
|
||||||
socket.on('remove_log_listener', () => Logger.removeSocketListener(socket.id))
|
socket.on('remove_log_listener', () => Logger.removeSocketListener(socket.id))
|
||||||
|
|
@ -200,6 +205,10 @@ class SocketAuthority {
|
||||||
|
|
||||||
const disconnectTime = Date.now() - _client.connected_at
|
const disconnectTime = Date.now() - _client.connected_at
|
||||||
Logger.info(`[SocketAuthority] Socket ${socket.id} disconnected from client "${_client.user.username}" after ${disconnectTime}ms (Reason: ${reason})`)
|
Logger.info(`[SocketAuthority] Socket ${socket.id} disconnected from client "${_client.user.username}" after ${disconnectTime}ms (Reason: ${reason})`)
|
||||||
|
|
||||||
|
// Cancel any active cover searches for this socket
|
||||||
|
this.cancelSocketCoverSearches(socket.id)
|
||||||
|
|
||||||
delete this.clients[socket.id]
|
delete this.clients[socket.id]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
@ -300,5 +309,100 @@ class SocketAuthority {
|
||||||
Logger.debug('[SocketAuthority] Cancel scan', id)
|
Logger.debug('[SocketAuthority] Cancel scan', id)
|
||||||
this.Server.cancelLibraryScan(id)
|
this.Server.cancelLibraryScan(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle cover search request via WebSocket
|
||||||
|
* @param {SocketIO.Socket} socket
|
||||||
|
* @param {Object} payload
|
||||||
|
*/
|
||||||
|
async handleCoverSearch(socket, payload) {
|
||||||
|
const client = this.clients[socket.id]
|
||||||
|
if (!client?.user) {
|
||||||
|
Logger.error('[SocketAuthority] Unauthorized cover search request')
|
||||||
|
socket.emit('cover_search_error', {
|
||||||
|
requestId: payload.requestId,
|
||||||
|
error: 'Unauthorized'
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const { requestId, title, author, provider, podcast } = payload
|
||||||
|
|
||||||
|
if (!requestId || !title) {
|
||||||
|
Logger.error('[SocketAuthority] Invalid cover search request')
|
||||||
|
socket.emit('cover_search_error', {
|
||||||
|
requestId,
|
||||||
|
error: 'Invalid request parameters'
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.info(`[SocketAuthority] User ${client.user.username} initiated cover search ${requestId}`)
|
||||||
|
|
||||||
|
// Callback for streaming results to client
|
||||||
|
const onResult = (result) => {
|
||||||
|
socket.emit('cover_search_result', {
|
||||||
|
requestId,
|
||||||
|
provider: result.provider,
|
||||||
|
covers: result.covers,
|
||||||
|
total: result.total
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Callback when search completes
|
||||||
|
const onComplete = () => {
|
||||||
|
Logger.info(`[SocketAuthority] Cover search ${requestId} completed`)
|
||||||
|
socket.emit('cover_search_complete', { requestId })
|
||||||
|
}
|
||||||
|
|
||||||
|
// Callback for provider errors
|
||||||
|
const onError = (provider, errorMessage) => {
|
||||||
|
socket.emit('cover_search_provider_error', {
|
||||||
|
requestId,
|
||||||
|
provider,
|
||||||
|
error: errorMessage
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start the search
|
||||||
|
CoverSearchManager.startSearch(requestId, { title, author, provider, podcast }, onResult, onComplete, onError).catch((error) => {
|
||||||
|
Logger.error(`[SocketAuthority] Cover search ${requestId} failed:`, error)
|
||||||
|
socket.emit('cover_search_error', {
|
||||||
|
requestId,
|
||||||
|
error: error.message
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle cancel cover search request
|
||||||
|
* @param {SocketIO.Socket} socket
|
||||||
|
* @param {string} requestId
|
||||||
|
*/
|
||||||
|
handleCancelCoverSearch(socket, requestId) {
|
||||||
|
const client = this.clients[socket.id]
|
||||||
|
if (!client?.user) {
|
||||||
|
Logger.error('[SocketAuthority] Unauthorized cancel cover search request')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.info(`[SocketAuthority] User ${client.user.username} cancelled cover search ${requestId}`)
|
||||||
|
|
||||||
|
const cancelled = CoverSearchManager.cancelSearch(requestId)
|
||||||
|
if (cancelled) {
|
||||||
|
socket.emit('cover_search_cancelled', { requestId })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel all cover searches associated with a socket (called on disconnect)
|
||||||
|
* @param {string} socketId
|
||||||
|
*/
|
||||||
|
cancelSocketCoverSearches(socketId) {
|
||||||
|
// Get all active search request IDs and cancel those that might belong to this socket
|
||||||
|
// Since we don't track socket-to-request mapping, we log this for debugging
|
||||||
|
// The client will handle reconnection gracefully
|
||||||
|
Logger.debug(`[SocketAuthority] Socket ${socketId} disconnected, any active searches will timeout`)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
module.exports = new SocketAuthority()
|
module.exports = new SocketAuthority()
|
||||||
|
|
|
||||||
|
|
@ -527,7 +527,16 @@ class OidcAuthStrategy {
|
||||||
|
|
||||||
// For absolute URLs, ensure they point to the same origin
|
// For absolute URLs, ensure they point to the same origin
|
||||||
const callbackUrlObj = new URL(callbackUrl)
|
const callbackUrlObj = new URL(callbackUrl)
|
||||||
const currentProtocol = req.secure || req.get('x-forwarded-proto') === 'https' ? 'https' : 'http'
|
// NPM appends both http and https in x-forwarded-proto sometimes, so we need to check for both
|
||||||
|
const xfp = (req.get('x-forwarded-proto') || '').toLowerCase()
|
||||||
|
const currentProtocol =
|
||||||
|
req.secure ||
|
||||||
|
xfp
|
||||||
|
.split(',')
|
||||||
|
.map((s) => s.trim())
|
||||||
|
.includes('https')
|
||||||
|
? 'https'
|
||||||
|
: 'http'
|
||||||
const currentHost = req.get('host')
|
const currentHost = req.get('host')
|
||||||
|
|
||||||
// Check if protocol and host match exactly
|
// Check if protocol and host match exactly
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,9 @@ class TokenManager {
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
/** @type {number} Refresh token expiry in seconds */
|
/** @type {number} Refresh token expiry in seconds */
|
||||||
this.RefreshTokenExpiry = parseInt(process.env.REFRESH_TOKEN_EXPIRY) || 7 * 24 * 60 * 60 // 7 days
|
this.RefreshTokenExpiry = parseInt(process.env.REFRESH_TOKEN_EXPIRY) || 30 * 24 * 60 * 60 // 30 days
|
||||||
/** @type {number} Access token expiry in seconds */
|
/** @type {number} Access token expiry in seconds */
|
||||||
this.AccessTokenExpiry = parseInt(process.env.ACCESS_TOKEN_EXPIRY) || 12 * 60 * 60 // 12 hours
|
this.AccessTokenExpiry = parseInt(process.env.ACCESS_TOKEN_EXPIRY) || 1 * 60 * 60 // 1 hour
|
||||||
|
|
||||||
if (parseInt(process.env.REFRESH_TOKEN_EXPIRY) > 0) {
|
if (parseInt(process.env.REFRESH_TOKEN_EXPIRY) > 0) {
|
||||||
Logger.info(`[TokenManager] Refresh token expiry set from ENV variable to ${this.RefreshTokenExpiry} seconds`)
|
Logger.info(`[TokenManager] Refresh token expiry set from ENV variable to ${this.RefreshTokenExpiry} seconds`)
|
||||||
|
|
|
||||||
|
|
@ -221,13 +221,11 @@ class LibraryController {
|
||||||
const includeArray = (req.query.include || '').split(',')
|
const includeArray = (req.query.include || '').split(',')
|
||||||
if (includeArray.includes('filterdata')) {
|
if (includeArray.includes('filterdata')) {
|
||||||
const filterdata = await libraryFilters.getFilterData(req.library.mediaType, req.library.id)
|
const filterdata = await libraryFilters.getFilterData(req.library.mediaType, req.library.id)
|
||||||
const customMetadataProviders = await Database.customMetadataProviderModel.getForClientByMediaType(req.library.mediaType)
|
|
||||||
|
|
||||||
return res.json({
|
return res.json({
|
||||||
filterdata,
|
filterdata,
|
||||||
issues: filterdata.numIssues,
|
issues: filterdata.numIssues,
|
||||||
numUserPlaylists: await Database.playlistModel.getNumPlaylistsForUserAndLibrary(req.user.id, req.library.id),
|
numUserPlaylists: await Database.playlistModel.getNumPlaylistsForUserAndLibrary(req.user.id, req.library.id),
|
||||||
customMetadataProviders,
|
|
||||||
library: req.library.toOldJSON()
|
library: req.library.toOldJSON()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,9 @@ class MiscController {
|
||||||
Logger.warn('Cannot disable iframe when ALLOW_IFRAME is enabled in environment')
|
Logger.warn('Cannot disable iframe when ALLOW_IFRAME is enabled in environment')
|
||||||
return res.status(400).send('Cannot disable iframe when ALLOW_IFRAME is enabled in environment')
|
return res.status(400).send('Cannot disable iframe when ALLOW_IFRAME is enabled in environment')
|
||||||
}
|
}
|
||||||
|
if (settingsUpdate.allowedOrigins && !Array.isArray(settingsUpdate.allowedOrigins)) {
|
||||||
|
return res.status(400).send('allowedOrigins must be an array')
|
||||||
|
}
|
||||||
|
|
||||||
const madeUpdates = Database.serverSettings.update(settingsUpdate)
|
const madeUpdates = Database.serverSettings.update(settingsUpdate)
|
||||||
if (madeUpdates) {
|
if (madeUpdates) {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,29 @@ const BookFinder = require('../finders/BookFinder')
|
||||||
const PodcastFinder = require('../finders/PodcastFinder')
|
const PodcastFinder = require('../finders/PodcastFinder')
|
||||||
const AuthorFinder = require('../finders/AuthorFinder')
|
const AuthorFinder = require('../finders/AuthorFinder')
|
||||||
const Database = require('../Database')
|
const Database = require('../Database')
|
||||||
const { isValidASIN } = require('../utils')
|
const { isValidASIN, getQueryParamAsString, ValidationError, NotFoundError } = require('../utils')
|
||||||
|
|
||||||
|
// Provider name mappings for display purposes
|
||||||
|
const providerMap = {
|
||||||
|
all: 'All',
|
||||||
|
best: 'Best',
|
||||||
|
google: 'Google Books',
|
||||||
|
itunes: 'iTunes',
|
||||||
|
openlibrary: 'Open Library',
|
||||||
|
fantlab: 'FantLab.ru',
|
||||||
|
audiobookcovers: 'AudiobookCovers.com',
|
||||||
|
audible: 'Audible.com',
|
||||||
|
'audible.ca': 'Audible.ca',
|
||||||
|
'audible.uk': 'Audible.co.uk',
|
||||||
|
'audible.au': 'Audible.com.au',
|
||||||
|
'audible.fr': 'Audible.fr',
|
||||||
|
'audible.de': 'Audible.de',
|
||||||
|
'audible.jp': 'Audible.co.jp',
|
||||||
|
'audible.it': 'Audible.it',
|
||||||
|
'audible.in': 'Audible.in',
|
||||||
|
'audible.es': 'Audible.es',
|
||||||
|
audnexus: 'Audnexus'
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef RequestUserObject
|
* @typedef RequestUserObject
|
||||||
|
|
@ -16,6 +38,44 @@ const { isValidASIN } = require('../utils')
|
||||||
class SearchController {
|
class SearchController {
|
||||||
constructor() {}
|
constructor() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches a library item by ID
|
||||||
|
* @param {string} id - Library item ID
|
||||||
|
* @param {string} methodName - Name of the calling method for logging
|
||||||
|
* @returns {Promise<import('../models/LibraryItem').LibraryItemExpanded>}
|
||||||
|
*/
|
||||||
|
static async fetchLibraryItem(id) {
|
||||||
|
const libraryItem = await Database.libraryItemModel.getExpandedById(id)
|
||||||
|
if (!libraryItem) {
|
||||||
|
throw new NotFoundError(`library item "${id}" not found`)
|
||||||
|
}
|
||||||
|
return libraryItem
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maps custom metadata providers to standardized format
|
||||||
|
* @param {Array} providers - Array of custom provider objects
|
||||||
|
* @returns {Array<{value: string, text: string}>}
|
||||||
|
*/
|
||||||
|
static mapCustomProviders(providers) {
|
||||||
|
return providers.map((provider) => ({
|
||||||
|
value: provider.getSlug(),
|
||||||
|
text: provider.name
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static helper method to format provider for client (for use in array methods)
|
||||||
|
* @param {string} providerValue - Provider identifier
|
||||||
|
* @returns {{value: string, text: string}}
|
||||||
|
*/
|
||||||
|
static formatProvider(providerValue) {
|
||||||
|
return {
|
||||||
|
value: providerValue,
|
||||||
|
text: providerMap[providerValue] || providerValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET: /api/search/books
|
* GET: /api/search/books
|
||||||
*
|
*
|
||||||
|
|
@ -23,19 +83,25 @@ class SearchController {
|
||||||
* @param {Response} res
|
* @param {Response} res
|
||||||
*/
|
*/
|
||||||
async findBooks(req, res) {
|
async findBooks(req, res) {
|
||||||
const id = req.query.id
|
try {
|
||||||
const libraryItem = await Database.libraryItemModel.getExpandedById(id)
|
const query = req.query
|
||||||
const provider = req.query.provider || 'google'
|
const provider = getQueryParamAsString(query, 'provider', 'google')
|
||||||
const title = req.query.title || ''
|
const title = getQueryParamAsString(query, 'title', '')
|
||||||
const author = req.query.author || ''
|
const author = getQueryParamAsString(query, 'author', '')
|
||||||
|
const id = getQueryParamAsString(query, 'id', undefined)
|
||||||
|
|
||||||
if (typeof provider !== 'string' || typeof title !== 'string' || typeof author !== 'string') {
|
// Fetch library item
|
||||||
Logger.error(`[SearchController] findBooks: Invalid request query params`)
|
const libraryItem = id ? await SearchController.fetchLibraryItem(id) : null
|
||||||
return res.status(400).send('Invalid request query params')
|
|
||||||
|
const results = await BookFinder.search(libraryItem, provider, title, author)
|
||||||
|
res.json(results)
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`[SearchController] findBooks: ${error.message}`)
|
||||||
|
if (error instanceof ValidationError || error instanceof NotFoundError) {
|
||||||
|
return res.status(error.status).json({ error: error.message })
|
||||||
|
}
|
||||||
|
return res.status(500).json({ error: 'Internal server error' })
|
||||||
}
|
}
|
||||||
|
|
||||||
const results = await BookFinder.search(libraryItem, provider, title, author)
|
|
||||||
res.json(results)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -45,20 +111,24 @@ class SearchController {
|
||||||
* @param {Response} res
|
* @param {Response} res
|
||||||
*/
|
*/
|
||||||
async findCovers(req, res) {
|
async findCovers(req, res) {
|
||||||
const query = req.query
|
try {
|
||||||
const podcast = query.podcast == 1
|
const query = req.query
|
||||||
|
const podcast = query.podcast === '1' || query.podcast === 1
|
||||||
|
const title = getQueryParamAsString(query, 'title', '', true)
|
||||||
|
const author = getQueryParamAsString(query, 'author', '')
|
||||||
|
const provider = getQueryParamAsString(query, 'provider', 'google')
|
||||||
|
|
||||||
if (!query.title || typeof query.title !== 'string') {
|
let results = null
|
||||||
Logger.error(`[SearchController] findCovers: Invalid title sent in query`)
|
if (podcast) results = await PodcastFinder.findCovers(title)
|
||||||
return res.sendStatus(400)
|
else results = await BookFinder.findCovers(provider, title, author)
|
||||||
|
res.json({ results })
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`[SearchController] findCovers: ${error.message}`)
|
||||||
|
if (error instanceof ValidationError) {
|
||||||
|
return res.status(error.status).json({ error: error.message })
|
||||||
|
}
|
||||||
|
return res.status(500).json({ error: 'Internal server error' })
|
||||||
}
|
}
|
||||||
|
|
||||||
let results = null
|
|
||||||
if (podcast) results = await PodcastFinder.findCovers(query.title)
|
|
||||||
else results = await BookFinder.findCovers(query.provider || 'google', query.title, query.author || '')
|
|
||||||
res.json({
|
|
||||||
results
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -69,34 +139,42 @@ class SearchController {
|
||||||
* @param {Response} res
|
* @param {Response} res
|
||||||
*/
|
*/
|
||||||
async findPodcasts(req, res) {
|
async findPodcasts(req, res) {
|
||||||
const term = req.query.term
|
try {
|
||||||
const country = req.query.country || 'us'
|
const query = req.query
|
||||||
if (!term) {
|
const term = getQueryParamAsString(query, 'term', '', true)
|
||||||
Logger.error('[SearchController] Invalid request query param "term" is required')
|
const country = getQueryParamAsString(query, 'country', 'us')
|
||||||
return res.status(400).send('Invalid request query param "term" is required')
|
|
||||||
}
|
|
||||||
|
|
||||||
const results = await PodcastFinder.search(term, {
|
const results = await PodcastFinder.search(term, { country })
|
||||||
country
|
res.json(results)
|
||||||
})
|
} catch (error) {
|
||||||
res.json(results)
|
Logger.error(`[SearchController] findPodcasts: ${error.message}`)
|
||||||
|
if (error instanceof ValidationError) {
|
||||||
|
return res.status(error.status).json({ error: error.message })
|
||||||
|
}
|
||||||
|
return res.status(500).json({ error: 'Internal server error' })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET: /api/search/authors
|
* GET: /api/search/authors
|
||||||
|
* Note: This endpoint is not currently used in the web client.
|
||||||
*
|
*
|
||||||
* @param {RequestWithUser} req
|
* @param {RequestWithUser} req
|
||||||
* @param {Response} res
|
* @param {Response} res
|
||||||
*/
|
*/
|
||||||
async findAuthor(req, res) {
|
async findAuthor(req, res) {
|
||||||
const query = req.query.q
|
try {
|
||||||
if (!query || typeof query !== 'string') {
|
const query = getQueryParamAsString(req.query, 'q', '', true)
|
||||||
Logger.error(`[SearchController] findAuthor: Invalid query param`)
|
|
||||||
return res.status(400).send('Invalid query param')
|
|
||||||
}
|
|
||||||
|
|
||||||
const author = await AuthorFinder.findAuthorByName(query)
|
const author = await AuthorFinder.findAuthorByName(query)
|
||||||
res.json(author)
|
res.json(author)
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`[SearchController] findAuthor: ${error.message}`)
|
||||||
|
if (error instanceof ValidationError) {
|
||||||
|
return res.status(error.status).json({ error: error.message })
|
||||||
|
}
|
||||||
|
return res.status(500).json({ error: 'Internal server error' })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -106,16 +184,55 @@ class SearchController {
|
||||||
* @param {Response} res
|
* @param {Response} res
|
||||||
*/
|
*/
|
||||||
async findChapters(req, res) {
|
async findChapters(req, res) {
|
||||||
const asin = req.query.asin
|
try {
|
||||||
if (!isValidASIN(asin.toUpperCase())) {
|
const query = req.query
|
||||||
return res.json({ error: 'Invalid ASIN', stringKey: 'MessageInvalidAsin' })
|
const asin = getQueryParamAsString(query, 'asin', '', true)
|
||||||
|
const region = getQueryParamAsString(query, 'region', 'us').toLowerCase()
|
||||||
|
|
||||||
|
if (!isValidASIN(asin.toUpperCase())) throw new ValidationError('asin', 'is invalid')
|
||||||
|
|
||||||
|
const chapterData = await BookFinder.findChapters(asin, region)
|
||||||
|
if (!chapterData) {
|
||||||
|
return res.json({ error: 'Chapters not found', stringKey: 'MessageChaptersNotFound' })
|
||||||
|
}
|
||||||
|
res.json(chapterData)
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`[SearchController] findChapters: ${error.message}`)
|
||||||
|
if (error instanceof ValidationError) {
|
||||||
|
if (error.paramName === 'asin') {
|
||||||
|
return res.json({ error: 'Invalid ASIN', stringKey: 'MessageInvalidAsin' })
|
||||||
|
}
|
||||||
|
if (error.paramName === 'region') {
|
||||||
|
return res.json({ error: 'Invalid region', stringKey: 'MessageInvalidRegion' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res.status(500).json({ error: 'Internal server error' })
|
||||||
}
|
}
|
||||||
const region = (req.query.region || 'us').toLowerCase()
|
}
|
||||||
const chapterData = await BookFinder.findChapters(asin, region)
|
|
||||||
if (!chapterData) {
|
/**
|
||||||
return res.json({ error: 'Chapters not found', stringKey: 'MessageChaptersNotFound' })
|
* GET: /api/search/providers
|
||||||
|
* Get all available metadata providers
|
||||||
|
*
|
||||||
|
* @param {RequestWithUser} req
|
||||||
|
* @param {Response} res
|
||||||
|
*/
|
||||||
|
async getAllProviders(req, res) {
|
||||||
|
const customProviders = await Database.customMetadataProviderModel.findAll()
|
||||||
|
|
||||||
|
const customBookProviders = customProviders.filter((p) => p.mediaType === 'book')
|
||||||
|
const customPodcastProviders = customProviders.filter((p) => p.mediaType === 'podcast')
|
||||||
|
|
||||||
|
const bookProviders = BookFinder.providers.filter((p) => p !== 'audiobookcovers')
|
||||||
|
|
||||||
|
// Build minimized payload with custom providers merged in
|
||||||
|
const providers = {
|
||||||
|
books: [...bookProviders.map((p) => SearchController.formatProvider(p)), ...SearchController.mapCustomProviders(customBookProviders)],
|
||||||
|
booksCovers: [SearchController.formatProvider('best'), ...BookFinder.providers.map((p) => SearchController.formatProvider(p)), ...SearchController.mapCustomProviders(customBookProviders), SearchController.formatProvider('all')],
|
||||||
|
podcasts: [SearchController.formatProvider('itunes'), ...SearchController.mapCustomProviders(customPodcastProviders)]
|
||||||
}
|
}
|
||||||
res.json(chapterData)
|
|
||||||
|
res.json({ providers })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
module.exports = new SearchController()
|
module.exports = new SearchController()
|
||||||
|
|
|
||||||
|
|
@ -339,9 +339,9 @@ class SessionController {
|
||||||
var playbackSession = this.playbackSessionManager.getSession(req.params.id)
|
var playbackSession = this.playbackSessionManager.getSession(req.params.id)
|
||||||
if (!playbackSession) return res.sendStatus(404)
|
if (!playbackSession) return res.sendStatus(404)
|
||||||
|
|
||||||
if (playbackSession.userId !== req.user.id) {
|
if (playbackSession.userId !== req.user.id && !req.user.isAdminOrUp) {
|
||||||
Logger.error(`[SessionController] User "${req.user.username}" attempting to access session belonging to another user "${req.params.id}"`)
|
Logger.error(`[SessionController] Non-admin user "${req.user.username}" attempting to access session belonging to another user "${req.params.id}"`)
|
||||||
return res.sendStatus(404)
|
return res.sendStatus(403)
|
||||||
}
|
}
|
||||||
|
|
||||||
req.playbackSession = playbackSession
|
req.playbackSession = playbackSession
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ const { levenshteinDistance, levenshteinSimilarity, escapeRegExp, isValidASIN }
|
||||||
const htmlSanitizer = require('../utils/htmlSanitizer')
|
const htmlSanitizer = require('../utils/htmlSanitizer')
|
||||||
|
|
||||||
class BookFinder {
|
class BookFinder {
|
||||||
#providerResponseTimeout = 30000
|
#providerResponseTimeout = 10000
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.openLibrary = new OpenLibrary()
|
this.openLibrary = new OpenLibrary()
|
||||||
|
|
@ -385,6 +385,11 @@ class BookFinder {
|
||||||
|
|
||||||
if (!title) return books
|
if (!title) return books
|
||||||
|
|
||||||
|
// Truncate excessively long inputs to prevent ReDoS attacks
|
||||||
|
const MAX_INPUT_LENGTH = 500
|
||||||
|
title = title.substring(0, MAX_INPUT_LENGTH)
|
||||||
|
author = author?.substring(0, MAX_INPUT_LENGTH) || author
|
||||||
|
|
||||||
const isTitleAsin = isValidASIN(title.toUpperCase())
|
const isTitleAsin = isValidASIN(title.toUpperCase())
|
||||||
|
|
||||||
let actualTitleQuery = title
|
let actualTitleQuery = title
|
||||||
|
|
@ -402,7 +407,8 @@ class BookFinder {
|
||||||
let authorCandidates = new BookFinder.AuthorCandidates(cleanAuthor, this.audnexus)
|
let authorCandidates = new BookFinder.AuthorCandidates(cleanAuthor, this.audnexus)
|
||||||
|
|
||||||
// Remove underscores and parentheses with their contents, and replace with a separator
|
// Remove underscores and parentheses with their contents, and replace with a separator
|
||||||
const cleanTitle = title.replace(/\[.*?\]|\(.*?\)|{.*?}|_/g, ' - ')
|
// Use negated character classes to prevent ReDoS vulnerability (input length validated at entry point)
|
||||||
|
const cleanTitle = title.replace(/\[[^\]]*\]|\([^)]*\)|{[^}]*}|_/g, ' - ')
|
||||||
// Split title into hypen-separated parts
|
// Split title into hypen-separated parts
|
||||||
const titleParts = cleanTitle.split(/ - | -|- /)
|
const titleParts = cleanTitle.split(/ - | -|- /)
|
||||||
for (const titlePart of titleParts) authorCandidates.add(titlePart)
|
for (const titlePart of titleParts) authorCandidates.add(titlePart)
|
||||||
|
|
@ -422,7 +428,7 @@ class BookFinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (books.length) {
|
if (books.length && libraryItem) {
|
||||||
const isAudibleProvider = provider.startsWith('audible')
|
const isAudibleProvider = provider.startsWith('audible')
|
||||||
const libraryItemDurationMinutes = libraryItem?.media?.duration ? libraryItem.media.duration / 60 : null
|
const libraryItemDurationMinutes = libraryItem?.media?.duration ? libraryItem.media.duration / 60 : null
|
||||||
|
|
||||||
|
|
@ -608,6 +614,14 @@ class BookFinder {
|
||||||
Logger.debug(`[BookFinder] Found ${providerResults.length} covers from ${providerString}`)
|
Logger.debug(`[BookFinder] Found ${providerResults.length} covers from ${providerString}`)
|
||||||
searchResults.push(...providerResults)
|
searchResults.push(...providerResults)
|
||||||
}
|
}
|
||||||
|
} else if (provider === 'best') {
|
||||||
|
// Best providers: google, fantlab, and audible.com
|
||||||
|
const bestProviders = ['google', 'fantlab', 'audible']
|
||||||
|
for (const providerString of bestProviders) {
|
||||||
|
const providerResults = await this.search(null, providerString, title, author, options)
|
||||||
|
Logger.debug(`[BookFinder] Found ${providerResults.length} covers from ${providerString}`)
|
||||||
|
searchResults.push(...providerResults)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
searchResults = await this.search(null, provider, title, author, options)
|
searchResults = await this.search(null, provider, title, author, options)
|
||||||
}
|
}
|
||||||
|
|
@ -660,7 +674,9 @@ function cleanTitleForCompares(title, keepSubtitle = false) {
|
||||||
let stripped = keepSubtitle ? title : stripSubtitle(title)
|
let stripped = keepSubtitle ? title : stripSubtitle(title)
|
||||||
|
|
||||||
// Remove text in paranthesis (i.e. "Ender's Game (Ender's Saga)" becomes "Ender's Game")
|
// Remove text in paranthesis (i.e. "Ender's Game (Ender's Saga)" becomes "Ender's Game")
|
||||||
let cleaned = stripped.replace(/ *\([^)]*\) */g, '')
|
// Use negated character class to prevent ReDoS vulnerability (input length validated at entry point)
|
||||||
|
let cleaned = stripped.replace(/\([^)]*\)/g, '') // Remove parenthetical content
|
||||||
|
cleaned = cleaned.replace(/\s+/g, ' ').trim() // Clean up any resulting multiple spaces
|
||||||
|
|
||||||
// Remove single quotes (i.e. "Ender's Game" becomes "Enders Game")
|
// Remove single quotes (i.e. "Ender's Game" becomes "Enders Game")
|
||||||
cleaned = cleaned.replace(/'/g, '')
|
cleaned = cleaned.replace(/'/g, '')
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@ class PodcastFinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {string} term
|
* @param {string} term
|
||||||
* @param {{country:string}} options
|
* @param {{country:string}} options
|
||||||
* @returns {Promise<import('../providers/iTunes').iTunesPodcastSearchResult[]>}
|
* @returns {Promise<import('../providers/iTunes').iTunesPodcastSearchResult[]>}
|
||||||
*/
|
*/
|
||||||
async search(term, options = {}) {
|
async search(term, options = {}) {
|
||||||
|
|
@ -20,12 +20,16 @@ class PodcastFinder {
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} term
|
||||||
|
* @returns {Promise<string[]>}
|
||||||
|
*/
|
||||||
async findCovers(term) {
|
async findCovers(term) {
|
||||||
if (!term) return null
|
if (!term) return null
|
||||||
Logger.debug(`[iTunes] Searching for podcast covers with term "${term}"`)
|
Logger.debug(`[iTunes] Searching for podcast covers with term "${term}"`)
|
||||||
var results = await this.iTunesApi.searchPodcasts(term)
|
const results = await this.iTunesApi.searchPodcasts(term)
|
||||||
if (!results) return []
|
if (!results) return []
|
||||||
return results.map(r => r.cover).filter(r => r)
|
return results.map((r) => r.cover).filter((r) => r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
module.exports = new PodcastFinder()
|
module.exports = new PodcastFinder()
|
||||||
|
|
|
||||||
|
|
@ -48,9 +48,14 @@ class BackupManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
const backupsDirExists = await fs.pathExists(this.backupPath)
|
try {
|
||||||
if (!backupsDirExists) {
|
const backupsDirExists = await fs.pathExists(this.backupPath)
|
||||||
await fs.ensureDir(this.backupPath)
|
if (!backupsDirExists) {
|
||||||
|
await fs.ensureDir(this.backupPath)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`[BackupManager] Failed to ensure backup directory at "${this.backupPath}": ${error.message}`)
|
||||||
|
throw new Error(`[BackupManager] Failed to ensure backup directory at "${this.backupPath}"`, { cause: error })
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.loadBackups()
|
await this.loadBackups()
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,15 @@ class CacheManager {
|
||||||
this.ImageCachePath = Path.join(this.CachePath, 'images')
|
this.ImageCachePath = Path.join(this.CachePath, 'images')
|
||||||
this.ItemCachePath = Path.join(this.CachePath, 'items')
|
this.ItemCachePath = Path.join(this.CachePath, 'items')
|
||||||
|
|
||||||
await fs.ensureDir(this.CachePath)
|
try {
|
||||||
await fs.ensureDir(this.CoverCachePath)
|
await fs.ensureDir(this.CachePath)
|
||||||
await fs.ensureDir(this.ImageCachePath)
|
await fs.ensureDir(this.CoverCachePath)
|
||||||
await fs.ensureDir(this.ItemCachePath)
|
await fs.ensureDir(this.ImageCachePath)
|
||||||
|
await fs.ensureDir(this.ItemCachePath)
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`[CacheManager] Failed to create cache directories at "${this.CachePath}": ${error.message}`)
|
||||||
|
throw new Error(`[CacheManager] Failed to create cache directories at "${this.CachePath}"`, { cause: error })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async handleCoverCache(res, libraryItemId, options = {}) {
|
async handleCoverCache(res, libraryItemId, options = {}) {
|
||||||
|
|
|
||||||
254
server/managers/CoverSearchManager.js
Normal file
254
server/managers/CoverSearchManager.js
Normal file
|
|
@ -0,0 +1,254 @@
|
||||||
|
const { setMaxListeners } = require('events')
|
||||||
|
const Logger = require('../Logger')
|
||||||
|
const BookFinder = require('../finders/BookFinder')
|
||||||
|
const PodcastFinder = require('../finders/PodcastFinder')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manager for handling streaming cover search across multiple providers
|
||||||
|
*/
|
||||||
|
class CoverSearchManager {
|
||||||
|
constructor() {
|
||||||
|
/** @type {Map<string, AbortController>} Map of requestId to AbortController */
|
||||||
|
this.activeSearches = new Map()
|
||||||
|
|
||||||
|
// Default timeout for each provider search
|
||||||
|
this.providerTimeout = 10000 // 10 seconds
|
||||||
|
|
||||||
|
// Set to 0 to disable the max listeners limit
|
||||||
|
// We need one listener per provider (15+) and may have multiple concurrent searches
|
||||||
|
this.maxListeners = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start a streaming cover search
|
||||||
|
* @param {string} requestId - Unique identifier for this search request
|
||||||
|
* @param {Object} searchParams - Search parameters
|
||||||
|
* @param {string} searchParams.title - Title to search for
|
||||||
|
* @param {string} searchParams.author - Author to search for (optional)
|
||||||
|
* @param {string} searchParams.provider - Provider to search (or 'all')
|
||||||
|
* @param {boolean} searchParams.podcast - Whether this is a podcast search
|
||||||
|
* @param {Function} onResult - Callback for each result chunk
|
||||||
|
* @param {Function} onComplete - Callback when search completes
|
||||||
|
* @param {Function} onError - Callback for errors
|
||||||
|
*/
|
||||||
|
async startSearch(requestId, searchParams, onResult, onComplete, onError) {
|
||||||
|
if (this.activeSearches.has(requestId)) {
|
||||||
|
Logger.warn(`[CoverSearchManager] Search with requestId ${requestId} already exists`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const abortController = new AbortController()
|
||||||
|
|
||||||
|
// Increase max listeners on this signal to accommodate parallel provider searches
|
||||||
|
// AbortSignal is an EventTarget, so we use the events module's setMaxListeners
|
||||||
|
setMaxListeners(this.maxListeners, abortController.signal)
|
||||||
|
|
||||||
|
this.activeSearches.set(requestId, abortController)
|
||||||
|
|
||||||
|
Logger.info(`[CoverSearchManager] Starting search ${requestId} with params:`, searchParams)
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { title, author, provider, podcast } = searchParams
|
||||||
|
|
||||||
|
if (podcast) {
|
||||||
|
await this.searchPodcastCovers(requestId, title, abortController.signal, onResult, onError)
|
||||||
|
} else {
|
||||||
|
await this.searchBookCovers(requestId, provider, title, author, abortController.signal, onResult, onError)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!abortController.signal.aborted) {
|
||||||
|
onComplete()
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
if (error.name === 'AbortError') {
|
||||||
|
Logger.info(`[CoverSearchManager] Search ${requestId} was cancelled`)
|
||||||
|
} else {
|
||||||
|
Logger.error(`[CoverSearchManager] Search ${requestId} failed:`, error)
|
||||||
|
onError(error.message)
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
this.activeSearches.delete(requestId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel an active search
|
||||||
|
* @param {string} requestId - Request ID to cancel
|
||||||
|
*/
|
||||||
|
cancelSearch(requestId) {
|
||||||
|
const abortController = this.activeSearches.get(requestId)
|
||||||
|
if (abortController) {
|
||||||
|
Logger.info(`[CoverSearchManager] Cancelling search ${requestId}`)
|
||||||
|
abortController.abort()
|
||||||
|
this.activeSearches.delete(requestId)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search for podcast covers
|
||||||
|
*/
|
||||||
|
async searchPodcastCovers(requestId, title, signal, onResult, onError) {
|
||||||
|
try {
|
||||||
|
const results = await this.executeWithTimeout(() => PodcastFinder.findCovers(title), this.providerTimeout, signal)
|
||||||
|
|
||||||
|
if (signal.aborted) return
|
||||||
|
|
||||||
|
const covers = this.extractCoversFromResults(results)
|
||||||
|
if (covers.length > 0) {
|
||||||
|
onResult({
|
||||||
|
provider: 'itunes',
|
||||||
|
covers,
|
||||||
|
total: covers.length
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
if (error.name !== 'AbortError') {
|
||||||
|
Logger.error(`[CoverSearchManager] Podcast search failed:`, error)
|
||||||
|
onError('itunes', error.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search for book covers across providers
|
||||||
|
*/
|
||||||
|
async searchBookCovers(requestId, provider, title, author, signal, onResult, onError) {
|
||||||
|
let providers = []
|
||||||
|
|
||||||
|
if (provider === 'all') {
|
||||||
|
providers = [...BookFinder.providers]
|
||||||
|
} else if (provider === 'best') {
|
||||||
|
// Best providers: google, fantlab, and audible.com
|
||||||
|
providers = ['google', 'fantlab', 'audible']
|
||||||
|
} else {
|
||||||
|
providers = [provider]
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.debug(`[CoverSearchManager] Searching ${providers.length} providers in parallel`)
|
||||||
|
|
||||||
|
// Search all providers in parallel
|
||||||
|
const searchPromises = providers.map(async (providerName) => {
|
||||||
|
if (signal.aborted) return
|
||||||
|
|
||||||
|
try {
|
||||||
|
const searchResults = await this.executeWithTimeout(() => BookFinder.search(null, providerName, title, author || ''), this.providerTimeout, signal)
|
||||||
|
|
||||||
|
if (signal.aborted) return
|
||||||
|
|
||||||
|
const covers = this.extractCoversFromResults(searchResults)
|
||||||
|
|
||||||
|
Logger.debug(`[CoverSearchManager] Found ${covers.length} covers from ${providerName}`)
|
||||||
|
|
||||||
|
if (covers.length > 0) {
|
||||||
|
onResult({
|
||||||
|
provider: providerName,
|
||||||
|
covers,
|
||||||
|
total: covers.length
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
if (error.name !== 'AbortError') {
|
||||||
|
Logger.warn(`[CoverSearchManager] Provider ${providerName} failed:`, error.message)
|
||||||
|
onError(providerName, error.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
await Promise.allSettled(searchPromises)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a promise with timeout and abort signal
|
||||||
|
*/
|
||||||
|
async executeWithTimeout(fn, timeout, signal) {
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
let abortHandler = null
|
||||||
|
let timeoutId = null
|
||||||
|
|
||||||
|
// Cleanup function to ensure we always remove listeners
|
||||||
|
const cleanup = () => {
|
||||||
|
if (timeoutId) {
|
||||||
|
clearTimeout(timeoutId)
|
||||||
|
timeoutId = null
|
||||||
|
}
|
||||||
|
if (abortHandler) {
|
||||||
|
signal.removeEventListener('abort', abortHandler)
|
||||||
|
abortHandler = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up timeout
|
||||||
|
timeoutId = setTimeout(() => {
|
||||||
|
cleanup()
|
||||||
|
const error = new Error('Provider timeout')
|
||||||
|
error.name = 'TimeoutError'
|
||||||
|
reject(error)
|
||||||
|
}, timeout)
|
||||||
|
|
||||||
|
// Check if already aborted
|
||||||
|
if (signal.aborted) {
|
||||||
|
cleanup()
|
||||||
|
const error = new Error('Search cancelled')
|
||||||
|
error.name = 'AbortError'
|
||||||
|
reject(error)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up abort handler
|
||||||
|
abortHandler = () => {
|
||||||
|
cleanup()
|
||||||
|
const error = new Error('Search cancelled')
|
||||||
|
error.name = 'AbortError'
|
||||||
|
reject(error)
|
||||||
|
}
|
||||||
|
signal.addEventListener('abort', abortHandler)
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await fn()
|
||||||
|
cleanup()
|
||||||
|
resolve(result)
|
||||||
|
} catch (error) {
|
||||||
|
cleanup()
|
||||||
|
reject(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract cover URLs from search results
|
||||||
|
*/
|
||||||
|
extractCoversFromResults(results) {
|
||||||
|
const covers = []
|
||||||
|
if (!Array.isArray(results)) return covers
|
||||||
|
|
||||||
|
results.forEach((result) => {
|
||||||
|
if (typeof result === 'string') {
|
||||||
|
covers.push(result)
|
||||||
|
}
|
||||||
|
if (result.covers && Array.isArray(result.covers)) {
|
||||||
|
covers.push(...result.covers)
|
||||||
|
}
|
||||||
|
if (result.cover) {
|
||||||
|
covers.push(result.cover)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Remove duplicates
|
||||||
|
return [...new Set(covers)]
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel all active searches (cleanup on server shutdown)
|
||||||
|
*/
|
||||||
|
cancelAllSearches() {
|
||||||
|
Logger.info(`[CoverSearchManager] Cancelling ${this.activeSearches.size} active searches`)
|
||||||
|
for (const [requestId, abortController] of this.activeSearches.entries()) {
|
||||||
|
abortController.abort()
|
||||||
|
}
|
||||||
|
this.activeSearches.clear()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = new CoverSearchManager()
|
||||||
|
|
@ -37,8 +37,13 @@ class LogManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
async ensureLogDirs() {
|
async ensureLogDirs() {
|
||||||
await fs.ensureDir(this.DailyLogPath)
|
try {
|
||||||
await fs.ensureDir(this.ScanLogPath)
|
await fs.ensureDir(this.DailyLogPath)
|
||||||
|
await fs.ensureDir(this.ScanLogPath)
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`[LogManager] Failed to create log directories at "${this.DailyLogPath}": ${error.message}`)
|
||||||
|
throw new Error(`[LogManager] Failed to create log directories at "${this.DailyLogPath}"`, { cause: error })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -102,20 +107,20 @@ class LogManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {string} filename
|
* @param {string} filename
|
||||||
*/
|
*/
|
||||||
async removeLogFile(filename) {
|
async removeLogFile(filename) {
|
||||||
const fullPath = Path.join(this.DailyLogPath, filename)
|
const fullPath = Path.join(this.DailyLogPath, filename)
|
||||||
const exists = await fs.pathExists(fullPath)
|
const exists = await fs.pathExists(fullPath)
|
||||||
if (!exists) {
|
if (!exists) {
|
||||||
Logger.error(TAG, 'Invalid log dne ' + fullPath)
|
Logger.error(TAG, 'Invalid log dne ' + fullPath)
|
||||||
this.dailyLogFiles = this.dailyLogFiles.filter(dlf => dlf !== filename)
|
this.dailyLogFiles = this.dailyLogFiles.filter((dlf) => dlf !== filename)
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
await fs.unlink(fullPath)
|
await fs.unlink(fullPath)
|
||||||
Logger.info(TAG, 'Removed daily log: ' + filename)
|
Logger.info(TAG, 'Removed daily log: ' + filename)
|
||||||
this.dailyLogFiles = this.dailyLogFiles.filter(dlf => dlf !== filename)
|
this.dailyLogFiles = this.dailyLogFiles.filter((dlf) => dlf !== filename)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.error(TAG, 'Failed to unlink log file ' + fullPath)
|
Logger.error(TAG, 'Failed to unlink log file ' + fullPath)
|
||||||
}
|
}
|
||||||
|
|
@ -123,8 +128,8 @@ class LogManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {LogObject} logObj
|
* @param {LogObject} logObj
|
||||||
*/
|
*/
|
||||||
async logToFile(logObj) {
|
async logToFile(logObj) {
|
||||||
// Fatal crashes get logged to a separate file
|
// Fatal crashes get logged to a separate file
|
||||||
|
|
@ -152,8 +157,8 @@ class LogManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {LogObject} logObj
|
* @param {LogObject} logObj
|
||||||
*/
|
*/
|
||||||
async logCrashToFile(logObj) {
|
async logCrashToFile(logObj) {
|
||||||
const line = JSON.stringify(logObj) + '\n'
|
const line = JSON.stringify(logObj) + '\n'
|
||||||
|
|
@ -161,18 +166,18 @@ class LogManager {
|
||||||
const logsDir = Path.join(global.MetadataPath, 'logs')
|
const logsDir = Path.join(global.MetadataPath, 'logs')
|
||||||
await fs.ensureDir(logsDir)
|
await fs.ensureDir(logsDir)
|
||||||
const crashLogPath = Path.join(logsDir, 'crash_logs.txt')
|
const crashLogPath = Path.join(logsDir, 'crash_logs.txt')
|
||||||
return fs.writeFile(crashLogPath, line, { flag: "a+" }).catch((error) => {
|
return fs.writeFile(crashLogPath, line, { flag: 'a+' }).catch((error) => {
|
||||||
console.log('[LogManager] Appended crash log', error)
|
console.log('[LogManager] Appended crash log', error)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Most recent 5000 daily logs
|
* Most recent 5000 daily logs
|
||||||
*
|
*
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
getMostRecentCurrentDailyLogs() {
|
getMostRecentCurrentDailyLogs() {
|
||||||
return this.currentDailyLog?.logs.slice(-5000) || ''
|
return this.currentDailyLog?.logs.slice(-5000) || ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
module.exports = LogManager
|
module.exports = LogManager
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,12 @@ class MigrationManager {
|
||||||
if (!(await fs.pathExists(this.configPath))) throw new Error(`Config path does not exist: ${this.configPath}`)
|
if (!(await fs.pathExists(this.configPath))) throw new Error(`Config path does not exist: ${this.configPath}`)
|
||||||
|
|
||||||
this.migrationsDir = path.join(this.configPath, 'migrations')
|
this.migrationsDir = path.join(this.configPath, 'migrations')
|
||||||
await fs.ensureDir(this.migrationsDir)
|
try {
|
||||||
|
await fs.ensureDir(this.migrationsDir)
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`[MigrationManager] Failed to create migrations directory at "${this.migrationsDir}": ${error.message}`)
|
||||||
|
throw new Error(`[MigrationManager] Failed to create migrations directory at "${this.migrationsDir}"`, { cause: error })
|
||||||
|
}
|
||||||
|
|
||||||
this.serverVersion = this.extractVersionFromTag(serverVersion)
|
this.serverVersion = this.extractVersionFromTag(serverVersion)
|
||||||
if (!this.serverVersion) throw new Error(`Invalid server version: ${serverVersion}. Expected a version tag like v1.2.3.`)
|
if (!this.serverVersion) throw new Error(`Invalid server version: ${serverVersion}. Expected a version tag like v1.2.3.`)
|
||||||
|
|
|
||||||
|
|
@ -459,7 +459,12 @@ class PlaybackSessionManager {
|
||||||
* Remove all stream folders in `/metadata/streams`
|
* Remove all stream folders in `/metadata/streams`
|
||||||
*/
|
*/
|
||||||
async removeOrphanStreams() {
|
async removeOrphanStreams() {
|
||||||
await fs.ensureDir(this.StreamsPath)
|
try {
|
||||||
|
await fs.ensureDir(this.StreamsPath)
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`[PlaybackSessionManager] Failed to create streams directory at "${this.StreamsPath}": ${error.message}`)
|
||||||
|
throw new Error(`[PlaybackSessionManager] Failed to create streams directory at "${this.StreamsPath}"`, { cause: error })
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
const streamsInPath = await fs.readdir(this.StreamsPath)
|
const streamsInPath = await fs.readdir(this.StreamsPath)
|
||||||
for (const streamId of streamsInPath) {
|
for (const streamId of streamsInPath) {
|
||||||
|
|
|
||||||
|
|
@ -121,28 +121,27 @@ class PodcastManager {
|
||||||
await fs.mkdir(this.currentDownload.libraryItem.path)
|
await fs.mkdir(this.currentDownload.libraryItem.path)
|
||||||
}
|
}
|
||||||
|
|
||||||
let success = false
|
// Download episode and tag it
|
||||||
if (this.currentDownload.isMp3) {
|
const ffmpegDownloadResponse = await ffmpegHelpers.downloadPodcastEpisode(this.currentDownload).catch((error) => {
|
||||||
// Download episode and tag it
|
Logger.error(`[PodcastManager] Podcast Episode download failed`, error)
|
||||||
const ffmpegDownloadResponse = await ffmpegHelpers.downloadPodcastEpisode(this.currentDownload).catch((error) => {
|
})
|
||||||
Logger.error(`[PodcastManager] Podcast Episode download failed`, error)
|
let success = !!ffmpegDownloadResponse?.success
|
||||||
})
|
|
||||||
success = !!ffmpegDownloadResponse?.success
|
|
||||||
|
|
||||||
// If failed due to ffmpeg error, retry without tagging
|
if (success) {
|
||||||
// e.g. RSS feed may have incorrect file extension and file type
|
// Attempt to ffprobe and add podcast episode audio file
|
||||||
// See https://github.com/advplyr/audiobookshelf/issues/3837
|
success = await this.scanAddPodcastEpisodeAudioFile()
|
||||||
if (!success && ffmpegDownloadResponse?.isFfmpegError) {
|
if (!success) {
|
||||||
Logger.info(`[PodcastManager] Retrying episode download without tagging`)
|
Logger.error(`[PodcastManager] Failed to scan and add podcast episode audio file - removing file`)
|
||||||
// Download episode only
|
await fs.remove(this.currentDownload.targetPath)
|
||||||
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 or ffprobe error, retry without tagging
|
||||||
|
// e.g. RSS feed may have incorrect file extension and file type
|
||||||
|
// See https://github.com/advplyr/audiobookshelf/issues/3837
|
||||||
|
// e.g. Ffmpeg may be download the file without streams causing the ffprobe to fail
|
||||||
|
if (!success && !ffmpegDownloadResponse?.isRequestError) {
|
||||||
|
Logger.info(`[PodcastManager] Retrying episode download without tagging`)
|
||||||
// Download episode only
|
// Download episode only
|
||||||
success = await downloadFile(this.currentDownload.url, this.currentDownload.targetPath)
|
success = await downloadFile(this.currentDownload.url, this.currentDownload.targetPath)
|
||||||
.then(() => true)
|
.then(() => true)
|
||||||
|
|
@ -150,23 +149,20 @@ class PodcastManager {
|
||||||
Logger.error(`[PodcastManager] Podcast Episode download failed`, error)
|
Logger.error(`[PodcastManager] Podcast Episode download failed`, error)
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
success = await this.scanAddPodcastEpisodeAudioFile()
|
||||||
|
if (!success) {
|
||||||
|
Logger.error(`[PodcastManager] Failed to scan and add podcast episode audio file - removing file`)
|
||||||
|
await fs.remove(this.currentDownload.targetPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
success = await this.scanAddPodcastEpisodeAudioFile()
|
Logger.info(`[PodcastManager] Successfully downloaded podcast episode "${this.currentDownload.episodeTitle}"`)
|
||||||
if (!success) {
|
this.currentDownload.setFinished(true)
|
||||||
await fs.remove(this.currentDownload.targetPath)
|
task.setFinished()
|
||||||
this.currentDownload.setFinished(false)
|
|
||||||
const taskFailedString = {
|
|
||||||
text: 'Failed',
|
|
||||||
key: 'MessageTaskFailed'
|
|
||||||
}
|
|
||||||
task.setFailed(taskFailedString)
|
|
||||||
} else {
|
|
||||||
Logger.info(`[PodcastManager] Successfully downloaded podcast episode "${this.currentDownload.episodeTitle}"`)
|
|
||||||
this.currentDownload.setFinished(true)
|
|
||||||
task.setFinished()
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
const taskFailedString = {
|
const taskFailedString = {
|
||||||
text: 'Failed',
|
text: 'Failed',
|
||||||
|
|
|
||||||
|
|
@ -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 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 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(
|
return this.create(
|
||||||
{
|
{
|
||||||
title,
|
title,
|
||||||
|
|
@ -205,6 +212,11 @@ class Podcast extends Model {
|
||||||
if (payload.metadata) {
|
if (payload.metadata) {
|
||||||
const stringKeys = ['title', 'author', 'releaseDate', 'feedUrl', 'imageUrl', 'description', 'itunesPageUrl', 'itunesId', 'itunesArtistId', 'language', 'type']
|
const stringKeys = ['title', 'author', 'releaseDate', 'feedUrl', 'imageUrl', 'description', 'itunesPageUrl', 'itunesId', 'itunesArtistId', 'language', 'type']
|
||||||
stringKeys.forEach((key) => {
|
stringKeys.forEach((key) => {
|
||||||
|
// Convert numbers to strings
|
||||||
|
if (typeof payload.metadata[key] === 'number') {
|
||||||
|
payload.metadata[key] = String(payload.metadata[key])
|
||||||
|
}
|
||||||
|
|
||||||
let newKey = key
|
let newKey = key
|
||||||
if (key === 'type') {
|
if (key === 'type') {
|
||||||
newKey = 'podcastType'
|
newKey = 'podcastType'
|
||||||
|
|
|
||||||
|
|
@ -63,16 +63,6 @@ class PodcastEpisodeDownload {
|
||||||
const enclosureType = this.rssPodcastEpisode.enclosure.type
|
const enclosureType = this.rssPodcastEpisode.enclosure.type
|
||||||
return typeof enclosureType === 'string' ? enclosureType : null
|
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() {
|
get episodeTitle() {
|
||||||
return this.rssPodcastEpisode.title
|
return this.rssPodcastEpisode.title
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ class Stream extends EventEmitter {
|
||||||
return [AudioMimeType.FLAC, AudioMimeType.OPUS, AudioMimeType.WMA, AudioMimeType.AIFF, AudioMimeType.WEBM, AudioMimeType.WEBMA, AudioMimeType.AWB, AudioMimeType.CAF]
|
return [AudioMimeType.FLAC, AudioMimeType.OPUS, AudioMimeType.WMA, AudioMimeType.AIFF, AudioMimeType.WEBM, AudioMimeType.WEBMA, AudioMimeType.AWB, AudioMimeType.CAF]
|
||||||
}
|
}
|
||||||
get codecsToForceAAC() {
|
get codecsToForceAAC() {
|
||||||
return ['alac']
|
return ['alac', 'ac3', 'eac3']
|
||||||
}
|
}
|
||||||
get userToken() {
|
get userToken() {
|
||||||
return this.user.token
|
return this.user.token
|
||||||
|
|
@ -146,7 +146,7 @@ class Stream extends EventEmitter {
|
||||||
|
|
||||||
async generatePlaylist() {
|
async generatePlaylist() {
|
||||||
await fs.ensureDir(this.streamPath)
|
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
|
return this.clientPlaylistUri
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -273,7 +273,16 @@ class Stream extends EventEmitter {
|
||||||
audioCodec = 'aac'
|
audioCodec = 'aac'
|
||||||
}
|
}
|
||||||
|
|
||||||
this.ffmpeg.addOption([`-loglevel ${logLevel}`, '-map 0:a', `-c:a ${audioCodec}`])
|
const codecOptions = [`-loglevel ${logLevel}`, '-map 0:a']
|
||||||
|
|
||||||
|
if (['ac3', 'eac3'].includes(this.tracksCodec) && this.tracks.length > 0 && this.tracks[0].bitRate && this.tracks[0].channels) {
|
||||||
|
// In case for ac3/eac3 it needs to be passed the bitrate and channels to avoid ffmpeg errors
|
||||||
|
codecOptions.push(`-c:a ${audioCodec}`, `-b:a ${this.tracks[0].bitRate}`, `-ac ${this.tracks[0].channels}`)
|
||||||
|
} else {
|
||||||
|
codecOptions.push(`-c:a ${audioCodec}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.ffmpeg.addOption(codecOptions)
|
||||||
const hlsOptions = ['-f hls', '-copyts', '-avoid_negative_ts make_non_negative', '-max_delay 5000000', '-max_muxing_queue_size 2048', `-hls_time 6`, `-hls_segment_type ${this.hlsSegmentType}`, `-start_number ${this.segmentStartNumber}`, '-hls_playlist_type vod', '-hls_list_size 0', '-hls_allow_cache 0']
|
const hlsOptions = ['-f hls', '-copyts', '-avoid_negative_ts make_non_negative', '-max_delay 5000000', '-max_muxing_queue_size 2048', `-hls_time 6`, `-hls_segment_type ${this.hlsSegmentType}`, `-start_number ${this.segmentStartNumber}`, '-hls_playlist_type vod', '-hls_list_size 0', '-hls_allow_cache 0']
|
||||||
this.ffmpeg.addOption(hlsOptions)
|
this.ffmpeg.addOption(hlsOptions)
|
||||||
if (this.hlsSegmentType === 'fmp4') {
|
if (this.hlsSegmentType === 'fmp4') {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ const Logger = require('../Logger')
|
||||||
const { isValidASIN } = require('../utils/index')
|
const { isValidASIN } = require('../utils/index')
|
||||||
|
|
||||||
class Audible {
|
class Audible {
|
||||||
#responseTimeout = 30000
|
#responseTimeout = 10000
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.regionMap = {
|
this.regionMap = {
|
||||||
|
|
@ -106,7 +106,7 @@ class Audible {
|
||||||
return res.data
|
return res.data
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error('[Audible] ASIN search error', error)
|
Logger.error('[Audible] ASIN search error', error.message)
|
||||||
return null
|
return null
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -158,7 +158,7 @@ class Audible {
|
||||||
return Promise.all(res.data.products.map((result) => this.asinSearch(result.asin, region, timeout)))
|
return Promise.all(res.data.products.map((result) => this.asinSearch(result.asin, region, timeout)))
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error('[Audible] query search error', error)
|
Logger.error('[Audible] query search error', error.message)
|
||||||
return []
|
return []
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ const axios = require('axios')
|
||||||
const Logger = require('../Logger')
|
const Logger = require('../Logger')
|
||||||
|
|
||||||
class AudiobookCovers {
|
class AudiobookCovers {
|
||||||
#responseTimeout = 30000
|
#responseTimeout = 10000
|
||||||
|
|
||||||
constructor() {}
|
constructor() {}
|
||||||
|
|
||||||
|
|
@ -24,7 +24,7 @@ class AudiobookCovers {
|
||||||
})
|
})
|
||||||
.then((res) => res?.data || [])
|
.then((res) => res?.data || [])
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error('[AudiobookCovers] Cover search error', error)
|
Logger.error('[AudiobookCovers] Cover search error', error.message)
|
||||||
return []
|
return []
|
||||||
})
|
})
|
||||||
return items.map((item) => ({ cover: item.versions.png.original }))
|
return items.map((item) => ({ cover: item.versions.png.original }))
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ class Audnexus {
|
||||||
return this._processRequest(this.limiter(() => axios.get(authorRequestUrl)))
|
return this._processRequest(this.limiter(() => axios.get(authorRequestUrl)))
|
||||||
.then((res) => res.data || [])
|
.then((res) => res.data || [])
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error(`[Audnexus] Author ASIN request failed for ${name}`, error)
|
Logger.error(`[Audnexus] Author ASIN request failed for ${name}`, error.message)
|
||||||
return []
|
return []
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -82,7 +82,7 @@ class Audnexus {
|
||||||
return this._processRequest(this.limiter(() => axios.get(authorRequestUrl.toString())))
|
return this._processRequest(this.limiter(() => axios.get(authorRequestUrl.toString())))
|
||||||
.then((res) => res.data)
|
.then((res) => res.data)
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error(`[Audnexus] Author request failed for ${asin}`, error)
|
Logger.error(`[Audnexus] Author request failed for ${asin}`, error.message)
|
||||||
return null
|
return null
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -158,7 +158,7 @@ class Audnexus {
|
||||||
return this._processRequest(this.limiter(() => axios.get(chaptersRequestUrl.toString())))
|
return this._processRequest(this.limiter(() => axios.get(chaptersRequestUrl.toString())))
|
||||||
.then((res) => res.data)
|
.then((res) => res.data)
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error(`[Audnexus] Chapter ASIN request failed for ${asin}/${region}`, error)
|
Logger.error(`[Audnexus] Chapter ASIN request failed for ${asin}/${region}`, error.message)
|
||||||
return null
|
return null
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ const Logger = require('../Logger')
|
||||||
const htmlSanitizer = require('../utils/htmlSanitizer')
|
const htmlSanitizer = require('../utils/htmlSanitizer')
|
||||||
|
|
||||||
class CustomProviderAdapter {
|
class CustomProviderAdapter {
|
||||||
#responseTimeout = 30000
|
#responseTimeout = 10000
|
||||||
|
|
||||||
constructor() {}
|
constructor() {}
|
||||||
|
|
||||||
|
|
@ -61,7 +61,7 @@ class CustomProviderAdapter {
|
||||||
return res.data.matches
|
return res.data.matches
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error('[CustomMetadataProvider] Search error', error)
|
Logger.error('[CustomMetadataProvider] Search error', error.message)
|
||||||
return []
|
return []
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ const axios = require('axios')
|
||||||
const Logger = require('../Logger')
|
const Logger = require('../Logger')
|
||||||
|
|
||||||
class FantLab {
|
class FantLab {
|
||||||
#responseTimeout = 30000
|
#responseTimeout = 10000
|
||||||
// 7 - other
|
// 7 - other
|
||||||
// 11 - essay
|
// 11 - essay
|
||||||
// 12 - article
|
// 12 - article
|
||||||
|
|
@ -48,7 +48,7 @@ class FantLab {
|
||||||
return res.data || []
|
return res.data || []
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error('[FantLab] search error', error)
|
Logger.error('[FantLab] search error', error.message)
|
||||||
return []
|
return []
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -77,7 +77,7 @@ class FantLab {
|
||||||
return resp.data || null
|
return resp.data || null
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error(`[FantLab] work info request for url "${url}" error`, error)
|
Logger.error(`[FantLab] work info request for url "${url}" error`, error.message)
|
||||||
return null
|
return null
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -193,7 +193,7 @@ class FantLab {
|
||||||
return resp.data || null
|
return resp.data || null
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error(`[FantLab] search cover from edition with url "${url}" error`, error)
|
Logger.error(`[FantLab] search cover from edition with url "${url}" error`, error.message)
|
||||||
return null
|
return null
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ const axios = require('axios')
|
||||||
const Logger = require('../Logger')
|
const Logger = require('../Logger')
|
||||||
|
|
||||||
class GoogleBooks {
|
class GoogleBooks {
|
||||||
#responseTimeout = 30000
|
#responseTimeout = 10000
|
||||||
|
|
||||||
constructor() {}
|
constructor() {}
|
||||||
|
|
||||||
|
|
@ -67,7 +67,7 @@ class GoogleBooks {
|
||||||
return res.data.items
|
return res.data.items
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error('[GoogleBooks] Volume search error', error)
|
Logger.error('[GoogleBooks] Volume search error', error.message)
|
||||||
return []
|
return []
|
||||||
})
|
})
|
||||||
return items.map((item) => this.cleanResult(item))
|
return items.map((item) => this.cleanResult(item))
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
const axios = require('axios').default
|
const axios = require('axios').default
|
||||||
|
|
||||||
class OpenLibrary {
|
class OpenLibrary {
|
||||||
#responseTimeout = 30000
|
#responseTimeout = 10000
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.baseUrl = 'https://openlibrary.org'
|
this.baseUrl = 'https://openlibrary.org'
|
||||||
|
|
@ -23,7 +23,7 @@ class OpenLibrary {
|
||||||
return res.data
|
return res.data
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed', error)
|
console.error('Failed', error.message)
|
||||||
return null
|
return null
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ const htmlSanitizer = require('../utils/htmlSanitizer')
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class iTunes {
|
class iTunes {
|
||||||
#responseTimeout = 30000
|
#responseTimeout = 10000
|
||||||
|
|
||||||
constructor() {}
|
constructor() {}
|
||||||
|
|
||||||
|
|
@ -63,7 +63,7 @@ class iTunes {
|
||||||
return response.data.results || []
|
return response.data.results || []
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
Logger.error(`[iTunes] search request error`, error)
|
Logger.error(`[iTunes] search request error`, error.message)
|
||||||
return []
|
return []
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -283,6 +283,7 @@ class ApiRouter {
|
||||||
this.router.get('/search/podcast', SearchController.findPodcasts.bind(this))
|
this.router.get('/search/podcast', SearchController.findPodcasts.bind(this))
|
||||||
this.router.get('/search/authors', SearchController.findAuthor.bind(this))
|
this.router.get('/search/authors', SearchController.findAuthor.bind(this))
|
||||||
this.router.get('/search/chapters', SearchController.findChapters.bind(this))
|
this.router.get('/search/chapters', SearchController.findChapters.bind(this))
|
||||||
|
this.router.get('/search/providers', SearchController.getAllProviders.bind(this))
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cache Routes (Admin and up)
|
// Cache Routes (Admin and up)
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ module.exports.resizeImage = resizeImage
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {import('../objects/PodcastEpisodeDownload')} podcastEpisodeDownload
|
* @param {import('../objects/PodcastEpisodeDownload')} podcastEpisodeDownload
|
||||||
* @returns {Promise<{success: boolean, isFfmpegError?: boolean}>}
|
* @returns {Promise<{success: boolean, isRequestError?: boolean}>}
|
||||||
*/
|
*/
|
||||||
module.exports.downloadPodcastEpisode = (podcastEpisodeDownload) => {
|
module.exports.downloadPodcastEpisode = (podcastEpisodeDownload) => {
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
|
|
@ -118,6 +118,7 @@ module.exports.downloadPodcastEpisode = (podcastEpisodeDownload) => {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
responseType: 'stream',
|
responseType: 'stream',
|
||||||
headers: {
|
headers: {
|
||||||
|
Accept: '*/*',
|
||||||
'User-Agent': userAgent
|
'User-Agent': userAgent
|
||||||
},
|
},
|
||||||
timeout: global.PodcastDownloadTimeout
|
timeout: global.PodcastDownloadTimeout
|
||||||
|
|
@ -138,7 +139,8 @@ module.exports.downloadPodcastEpisode = (podcastEpisodeDownload) => {
|
||||||
|
|
||||||
if (!response) {
|
if (!response) {
|
||||||
return resolve({
|
return resolve({
|
||||||
success: false
|
success: false,
|
||||||
|
isRequestError: true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -203,8 +205,7 @@ module.exports.downloadPodcastEpisode = (podcastEpisodeDownload) => {
|
||||||
Logger.error(`Full stderr dump for episode url "${podcastEpisodeDownload.url}": ${stderrLines.join('\n')}`)
|
Logger.error(`Full stderr dump for episode url "${podcastEpisodeDownload.url}": ${stderrLines.join('\n')}`)
|
||||||
}
|
}
|
||||||
resolve({
|
resolve({
|
||||||
success: false,
|
success: false
|
||||||
isFfmpegError: true
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
ffmpeg.on('progress', (progress) => {
|
ffmpeg.on('progress', (progress) => {
|
||||||
|
|
|
||||||
|
|
@ -476,7 +476,7 @@ module.exports.getWindowsDrives = async () => {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
return new Promise((resolve, reject) => {
|
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) {
|
if (error) {
|
||||||
reject(error)
|
reject(error)
|
||||||
return
|
return
|
||||||
|
|
@ -485,10 +485,9 @@ module.exports.getWindowsDrives = async () => {
|
||||||
?.split(/\r?\n/)
|
?.split(/\r?\n/)
|
||||||
.map((line) => line.trim())
|
.map((line) => line.trim())
|
||||||
.filter((line) => line)
|
.filter((line) => line)
|
||||||
.slice(1)
|
|
||||||
const validDrives = []
|
const validDrives = []
|
||||||
for (const drive of drives) {
|
for (const drive of drives) {
|
||||||
let drivepath = drive + '/'
|
let drivepath = drive + ':/'
|
||||||
if (await fs.pathExists(drivepath)) {
|
if (await fs.pathExists(drivepath)) {
|
||||||
validDrives.push(drivepath)
|
validDrives.push(drivepath)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue