mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-07-31 14:33:52 -04:00
Compare commits
No commits in common. "master" and "v2.22.0" have entirely different histories.
19
Dockerfile
19
Dockerfile
@ -1,9 +1,5 @@
|
|||||||
ARG NUSQLITE3_DIR="/usr/local/lib/nusqlite3"
|
|
||||||
ARG NUSQLITE3_PATH="${NUSQLITE3_DIR}/libnusqlite3.so"
|
|
||||||
|
|
||||||
### STAGE 0: Build client ###
|
### STAGE 0: Build client ###
|
||||||
FROM node:20-alpine AS build-client
|
FROM node:20-alpine AS build-client
|
||||||
|
|
||||||
WORKDIR /client
|
WORKDIR /client
|
||||||
COPY /client /client
|
COPY /client /client
|
||||||
RUN npm ci && npm cache clean --force
|
RUN npm ci && npm cache clean --force
|
||||||
@ -12,9 +8,6 @@ RUN npm run generate
|
|||||||
### STAGE 1: Build server ###
|
### STAGE 1: Build server ###
|
||||||
FROM node:20-alpine AS build-server
|
FROM node:20-alpine AS build-server
|
||||||
|
|
||||||
ARG NUSQLITE3_DIR
|
|
||||||
ARG TARGETPLATFORM
|
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
RUN apk add --no-cache --update \
|
RUN apk add --no-cache --update \
|
||||||
@ -28,6 +21,11 @@ WORKDIR /server
|
|||||||
COPY index.js package* /server
|
COPY index.js package* /server
|
||||||
COPY /server /server/server
|
COPY /server /server/server
|
||||||
|
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
|
ENV NUSQLITE3_DIR="/usr/local/lib/nusqlite3"
|
||||||
|
ENV NUSQLITE3_PATH="${NUSQLITE3_DIR}/libnusqlite3.so"
|
||||||
|
|
||||||
RUN case "$TARGETPLATFORM" in \
|
RUN case "$TARGETPLATFORM" in \
|
||||||
"linux/amd64") \
|
"linux/amd64") \
|
||||||
curl -L -o /tmp/library.zip "https://github.com/mikiher/nunicode-sqlite/releases/download/v1.2/libnusqlite3-linux-musl-x64.zip" ;; \
|
curl -L -o /tmp/library.zip "https://github.com/mikiher/nunicode-sqlite/releases/download/v1.2/libnusqlite3-linux-musl-x64.zip" ;; \
|
||||||
@ -43,9 +41,6 @@ RUN npm ci --only=production
|
|||||||
### STAGE 2: Create minimal runtime image ###
|
### STAGE 2: Create minimal runtime image ###
|
||||||
FROM node:20-alpine
|
FROM node:20-alpine
|
||||||
|
|
||||||
ARG NUSQLITE3_DIR
|
|
||||||
ARG NUSQLITE3_PATH
|
|
||||||
|
|
||||||
# Install only runtime dependencies
|
# Install only runtime dependencies
|
||||||
RUN apk add --no-cache --update \
|
RUN apk add --no-cache --update \
|
||||||
tzdata \
|
tzdata \
|
||||||
@ -57,17 +52,13 @@ WORKDIR /app
|
|||||||
# Copy compiled frontend and server from build stages
|
# Copy compiled frontend and server from build stages
|
||||||
COPY --from=build-client /client/dist /app/client/dist
|
COPY --from=build-client /client/dist /app/client/dist
|
||||||
COPY --from=build-server /server /app
|
COPY --from=build-server /server /app
|
||||||
COPY --from=build-server ${NUSQLITE3_PATH} ${NUSQLITE3_PATH}
|
|
||||||
|
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
|
||||||
ENV PORT=80
|
ENV PORT=80
|
||||||
ENV NODE_ENV=production
|
|
||||||
ENV CONFIG_PATH="/config"
|
ENV CONFIG_PATH="/config"
|
||||||
ENV METADATA_PATH="/metadata"
|
ENV METADATA_PATH="/metadata"
|
||||||
ENV SOURCE="docker"
|
ENV SOURCE="docker"
|
||||||
ENV NUSQLITE3_DIR=${NUSQLITE3_DIR}
|
|
||||||
ENV NUSQLITE3_PATH=${NUSQLITE3_PATH}
|
|
||||||
|
|
||||||
ENTRYPOINT ["tini", "--"]
|
ENTRYPOINT ["tini", "--"]
|
||||||
CMD ["node", "index.js"]
|
CMD ["node", "index.js"]
|
||||||
|
@ -217,16 +217,6 @@ export default {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.results.episodes?.length) {
|
|
||||||
shelves.push({
|
|
||||||
id: 'episodes',
|
|
||||||
label: 'Episodes',
|
|
||||||
labelStringKey: 'LabelEpisodes',
|
|
||||||
type: 'episode',
|
|
||||||
entities: this.results.episodes.map((res) => res.libraryItem)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.results.series?.length) {
|
if (this.results.series?.length) {
|
||||||
shelves.push({
|
shelves.push({
|
||||||
id: 'series',
|
id: 'series',
|
||||||
|
@ -70,11 +70,6 @@ export default {
|
|||||||
title: this.$strings.HeaderUsers,
|
title: this.$strings.HeaderUsers,
|
||||||
path: '/config/users'
|
path: '/config/users'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: 'config-api-keys',
|
|
||||||
title: this.$strings.HeaderApiKeys,
|
|
||||||
path: '/config/api-keys'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: 'config-sessions',
|
id: 'config-sessions',
|
||||||
title: this.$strings.HeaderListeningSessions,
|
title: this.$strings.HeaderListeningSessions,
|
||||||
|
@ -778,6 +778,10 @@ export default {
|
|||||||
windowResize() {
|
windowResize() {
|
||||||
this.executeRebuild()
|
this.executeRebuild()
|
||||||
},
|
},
|
||||||
|
socketInit() {
|
||||||
|
// Server settings are set on socket init
|
||||||
|
this.executeRebuild()
|
||||||
|
},
|
||||||
initListeners() {
|
initListeners() {
|
||||||
window.addEventListener('resize', this.windowResize)
|
window.addEventListener('resize', this.windowResize)
|
||||||
|
|
||||||
@ -790,6 +794,7 @@ export default {
|
|||||||
})
|
})
|
||||||
|
|
||||||
this.$eventBus.$on('bookshelf_clear_selection', this.clearSelectedEntities)
|
this.$eventBus.$on('bookshelf_clear_selection', this.clearSelectedEntities)
|
||||||
|
this.$eventBus.$on('socket_init', this.socketInit)
|
||||||
this.$eventBus.$on('user-settings', this.settingsUpdated)
|
this.$eventBus.$on('user-settings', this.settingsUpdated)
|
||||||
|
|
||||||
if (this.$root.socket) {
|
if (this.$root.socket) {
|
||||||
@ -821,6 +826,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.$eventBus.$off('bookshelf_clear_selection', this.clearSelectedEntities)
|
this.$eventBus.$off('bookshelf_clear_selection', this.clearSelectedEntities)
|
||||||
|
this.$eventBus.$off('socket_init', this.socketInit)
|
||||||
this.$eventBus.$off('user-settings', this.settingsUpdated)
|
this.$eventBus.$off('user-settings', this.settingsUpdated)
|
||||||
|
|
||||||
if (this.$root.socket) {
|
if (this.$root.socket) {
|
||||||
|
@ -116,7 +116,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="w-full h-12 px-1 py-2 border-t border-black/20 bg-bg absolute left-0" :style="{ bottom: streamLibraryItem ? '224px' : '65px' }">
|
<div class="w-full h-12 px-1 py-2 border-t border-black/20 bg-bg absolute left-0" :style="{ bottom: streamLibraryItem ? '224px' : '65px' }">
|
||||||
<p class="underline font-mono text-xs text-center text-gray-300 leading-3 mb-1 cursor-pointer" @click="clickChangelog">v{{ $config.version }}</p>
|
<p class="underline font-mono text-xs text-center text-gray-300 leading-3 mb-1" @click="clickChangelog">v{{ $config.version }}</p>
|
||||||
<a v-if="hasUpdate" :href="githubTagUrl" target="_blank" class="text-warning text-xxs text-center block leading-3">Update</a>
|
<a v-if="hasUpdate" :href="githubTagUrl" target="_blank" class="text-warning text-xxs text-center block leading-3">Update</a>
|
||||||
<p v-else class="text-xxs text-gray-400 leading-3 text-center italic">{{ Source }}</p>
|
<p v-else class="text-xxs text-gray-400 leading-3 text-center italic">{{ Source }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -71,6 +71,9 @@ export default {
|
|||||||
coverHeight() {
|
coverHeight() {
|
||||||
return this.cardHeight
|
return this.cardHeight
|
||||||
},
|
},
|
||||||
|
userToken() {
|
||||||
|
return this.store.getters['user/getToken']
|
||||||
|
},
|
||||||
_author() {
|
_author() {
|
||||||
return this.author || {}
|
return this.author || {}
|
||||||
},
|
},
|
||||||
|
@ -13,17 +13,9 @@
|
|||||||
<div class="grow" />
|
<div class="grow" />
|
||||||
<p class="text-sm md:text-base">{{ book.publishedYear }}</p>
|
<p class="text-sm md:text-base">{{ book.publishedYear }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
<p v-if="book.author" class="text-gray-300 text-xs md:text-sm">{{ $getString('LabelByAuthor', [book.author]) }}</p>
|
||||||
<div class="flex items-center">
|
<p v-if="book.narrator" class="text-gray-400 text-xs">{{ $strings.LabelNarrators }}: {{ book.narrator }}</p>
|
||||||
<div>
|
<p v-if="book.duration" class="text-gray-400 text-xs">{{ $strings.LabelDuration }}: {{ $elapsedPrettyExtended(bookDuration, false) }} {{ bookDurationComparison }}</p>
|
||||||
<p v-if="book.author" class="text-gray-300 text-xs md:text-sm">{{ $getString('LabelByAuthor', [book.author]) }}</p>
|
|
||||||
<p v-if="book.narrator" class="text-gray-400 text-xs">{{ $strings.LabelNarrators }}: {{ book.narrator }}</p>
|
|
||||||
<p v-if="book.duration" class="text-gray-400 text-xs">{{ $strings.LabelDuration }}: {{ $elapsedPrettyExtended(bookDuration, false) }} {{ bookDurationComparison }}</p>
|
|
||||||
</div>
|
|
||||||
<div class="grow" />
|
|
||||||
<div v-if="book.matchConfidence" class="rounded-full px-2 py-1 text-xs whitespace-nowrap text-white" :class="book.matchConfidence > 0.95 ? 'bg-success/80' : 'bg-info/80'">{{ $strings.LabelMatchConfidence }}: {{ (book.matchConfidence * 100).toFixed(0) }}%</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="book.series?.length" class="flex py-1 -mx-1">
|
<div v-if="book.series?.length" class="flex py-1 -mx-1">
|
||||||
<div v-for="(series, index) in book.series" :key="index" class="bg-white/10 rounded-full px-1 py-0.5 mx-1">
|
<div v-for="(series, index) in book.series" :key="index" class="bg-white/10 rounded-full px-1 py-0.5 mx-1">
|
||||||
<p class="leading-3 text-xs text-gray-400">
|
<p class="leading-3 text-xs text-gray-400">
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="flex items-center h-full px-1 overflow-hidden">
|
|
||||||
<covers-book-cover :library-item="libraryItem" :width="coverWidth" :book-cover-aspect-ratio="bookCoverAspectRatio" />
|
|
||||||
<div class="grow px-2 episodeSearchCardContent">
|
|
||||||
<p class="truncate text-sm">{{ episodeTitle }}</p>
|
|
||||||
<p class="text-xs text-gray-200 truncate">{{ podcastTitle }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
libraryItem: {
|
|
||||||
type: Object,
|
|
||||||
default: () => {}
|
|
||||||
},
|
|
||||||
episode: {
|
|
||||||
type: Object,
|
|
||||||
default: () => {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
bookCoverAspectRatio() {
|
|
||||||
return this.$store.getters['libraries/getBookCoverAspectRatio']
|
|
||||||
},
|
|
||||||
coverWidth() {
|
|
||||||
if (this.bookCoverAspectRatio === 1) return 50 * 1.2
|
|
||||||
return 50
|
|
||||||
},
|
|
||||||
media() {
|
|
||||||
return this.libraryItem?.media || {}
|
|
||||||
},
|
|
||||||
mediaMetadata() {
|
|
||||||
return this.media.metadata || {}
|
|
||||||
},
|
|
||||||
episodeTitle() {
|
|
||||||
return this.episode.title || 'No Title'
|
|
||||||
},
|
|
||||||
podcastTitle() {
|
|
||||||
return this.mediaMetadata.title || 'No Title'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {},
|
|
||||||
mounted() {}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.episodeSearchCardContent {
|
|
||||||
width: calc(100% - 80px);
|
|
||||||
height: 75px;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -101,8 +101,7 @@
|
|||||||
<!-- Podcast Episode # -->
|
<!-- Podcast Episode # -->
|
||||||
<div cy-id="podcastEpisodeNumber" v-if="recentEpisodeNumber !== null && !isHovering && !isSelectionMode && !processing" class="absolute rounded-lg bg-black/90 box-shadow-md z-10" :style="{ top: 0.375 + 'em', right: 0.375 + 'em', padding: `${0.1}em ${0.25}em` }">
|
<div cy-id="podcastEpisodeNumber" v-if="recentEpisodeNumber !== null && !isHovering && !isSelectionMode && !processing" class="absolute rounded-lg bg-black/90 box-shadow-md z-10" :style="{ top: 0.375 + 'em', right: 0.375 + 'em', padding: `${0.1}em ${0.25}em` }">
|
||||||
<p :style="{ fontSize: 0.8 + 'em' }">
|
<p :style="{ fontSize: 0.8 + 'em' }">
|
||||||
Episode
|
Episode<span v-if="recentEpisodeNumber"> #{{ recentEpisodeNumber }}</span>
|
||||||
<span v-if="recentEpisodeNumber">#{{ recentEpisodeNumber }}</span>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -199,10 +198,7 @@ export default {
|
|||||||
return this.store.getters['user/getSizeMultiplier']
|
return this.store.getters['user/getSizeMultiplier']
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.store.getters['getServerSetting']('dateFormat')
|
return this.store.state.serverSettings.dateFormat
|
||||||
},
|
|
||||||
timeFormat() {
|
|
||||||
return this.store.getters['getServerSetting']('timeFormat')
|
|
||||||
},
|
},
|
||||||
_libraryItem() {
|
_libraryItem() {
|
||||||
return this.libraryItem || {}
|
return this.libraryItem || {}
|
||||||
@ -349,10 +345,6 @@ export default {
|
|||||||
if (this.mediaMetadata.publishedYear) return this.$getString('LabelPublishedDate', [this.mediaMetadata.publishedYear])
|
if (this.mediaMetadata.publishedYear) return this.$getString('LabelPublishedDate', [this.mediaMetadata.publishedYear])
|
||||||
return '\u00A0'
|
return '\u00A0'
|
||||||
}
|
}
|
||||||
if (this.orderBy === 'progress') {
|
|
||||||
if (!this.userProgressLastUpdated) return '\u00A0'
|
|
||||||
return this.$getString('LabelLastProgressDate', [this.$formatDatetime(this.userProgressLastUpdated, this.dateFormat, this.timeFormat)])
|
|
||||||
}
|
|
||||||
return null
|
return null
|
||||||
},
|
},
|
||||||
episodeProgress() {
|
episodeProgress() {
|
||||||
@ -385,10 +377,6 @@ export default {
|
|||||||
let progressPercent = this.itemIsFinished ? 1 : this.booksInSeries ? this.seriesProgressPercent : this.useEBookProgress ? this.userProgress?.ebookProgress || 0 : this.userProgress?.progress || 0
|
let progressPercent = this.itemIsFinished ? 1 : this.booksInSeries ? this.seriesProgressPercent : this.useEBookProgress ? this.userProgress?.ebookProgress || 0 : this.userProgress?.progress || 0
|
||||||
return Math.max(Math.min(1, progressPercent), 0)
|
return Math.max(Math.min(1, progressPercent), 0)
|
||||||
},
|
},
|
||||||
userProgressLastUpdated() {
|
|
||||||
if (!this.userProgress) return null
|
|
||||||
return this.userProgress.lastUpdate
|
|
||||||
},
|
|
||||||
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
|
||||||
|
@ -71,7 +71,7 @@ export default {
|
|||||||
return this.height * this.sizeMultiplier
|
return this.height * this.sizeMultiplier
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.store.getters['getServerSetting']('dateFormat')
|
return this.store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
labelFontSize() {
|
labelFontSize() {
|
||||||
if (this.width < 160) return 0.75
|
if (this.width < 160) return 0.75
|
||||||
|
@ -39,15 +39,6 @@
|
|||||||
</li>
|
</li>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<p v-if="episodeResults.length" class="uppercase text-xs text-gray-400 my-1 px-1 font-semibold">{{ $strings.LabelEpisodes }}</p>
|
|
||||||
<template v-for="item in episodeResults">
|
|
||||||
<li :key="item.libraryItem.recentEpisode.id" class="text-gray-50 select-none relative cursor-pointer hover:bg-black-400 py-1" role="option" @click="clickOption">
|
|
||||||
<nuxt-link :to="`/item/${item.libraryItem.id}`">
|
|
||||||
<cards-episode-search-card :episode="item.libraryItem.recentEpisode" :library-item="item.libraryItem" />
|
|
||||||
</nuxt-link>
|
|
||||||
</li>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<p v-if="authorResults.length" class="uppercase text-xs text-gray-400 mb-1 mt-3 px-1 font-semibold">{{ $strings.LabelAuthors }}</p>
|
<p v-if="authorResults.length" class="uppercase text-xs text-gray-400 mb-1 mt-3 px-1 font-semibold">{{ $strings.LabelAuthors }}</p>
|
||||||
<template v-for="item in authorResults">
|
<template v-for="item in authorResults">
|
||||||
<li :key="item.id" class="text-gray-50 select-none relative cursor-pointer hover:bg-black-400 py-1" role="option" @click="clickOption">
|
<li :key="item.id" class="text-gray-50 select-none relative cursor-pointer hover:bg-black-400 py-1" role="option" @click="clickOption">
|
||||||
@ -109,7 +100,6 @@ export default {
|
|||||||
isFetching: false,
|
isFetching: false,
|
||||||
search: null,
|
search: null,
|
||||||
podcastResults: [],
|
podcastResults: [],
|
||||||
episodeResults: [],
|
|
||||||
bookResults: [],
|
bookResults: [],
|
||||||
authorResults: [],
|
authorResults: [],
|
||||||
seriesResults: [],
|
seriesResults: [],
|
||||||
@ -125,7 +115,7 @@ export default {
|
|||||||
return this.$store.state.libraries.currentLibraryId
|
return this.$store.state.libraries.currentLibraryId
|
||||||
},
|
},
|
||||||
totalResults() {
|
totalResults() {
|
||||||
return this.bookResults.length + this.seriesResults.length + this.authorResults.length + this.tagResults.length + this.genreResults.length + this.podcastResults.length + this.narratorResults.length + this.episodeResults.length
|
return this.bookResults.length + this.seriesResults.length + this.authorResults.length + this.tagResults.length + this.genreResults.length + this.podcastResults.length + this.narratorResults.length
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -142,7 +132,6 @@ export default {
|
|||||||
this.search = null
|
this.search = null
|
||||||
this.lastSearch = null
|
this.lastSearch = null
|
||||||
this.podcastResults = []
|
this.podcastResults = []
|
||||||
this.episodeResults = []
|
|
||||||
this.bookResults = []
|
this.bookResults = []
|
||||||
this.authorResults = []
|
this.authorResults = []
|
||||||
this.seriesResults = []
|
this.seriesResults = []
|
||||||
@ -186,7 +175,6 @@ export default {
|
|||||||
if (!this.isFetching) return
|
if (!this.isFetching) return
|
||||||
|
|
||||||
this.podcastResults = searchResults.podcast || []
|
this.podcastResults = searchResults.podcast || []
|
||||||
this.episodeResults = searchResults.episodes || []
|
|
||||||
this.bookResults = searchResults.book || []
|
this.bookResults = searchResults.book || []
|
||||||
this.authorResults = searchResults.authors || []
|
this.authorResults = searchResults.authors || []
|
||||||
this.seriesResults = searchResults.series || []
|
this.seriesResults = searchResults.series || []
|
||||||
|
@ -94,9 +94,6 @@ export default {
|
|||||||
userIsAdminOrUp() {
|
userIsAdminOrUp() {
|
||||||
return this.$store.getters['user/getIsAdminOrUp']
|
return this.$store.getters['user/getIsAdminOrUp']
|
||||||
},
|
},
|
||||||
userCanAccessExplicitContent() {
|
|
||||||
return this.$store.getters['user/getUserCanAccessExplicitContent']
|
|
||||||
},
|
|
||||||
libraryMediaType() {
|
libraryMediaType() {
|
||||||
return this.$store.getters['libraries/getCurrentLibraryMediaType']
|
return this.$store.getters['libraries/getCurrentLibraryMediaType']
|
||||||
},
|
},
|
||||||
@ -242,15 +239,6 @@ export default {
|
|||||||
sublist: false
|
sublist: false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
if (this.userCanAccessExplicitContent) {
|
|
||||||
items.push({
|
|
||||||
text: this.$strings.LabelExplicit,
|
|
||||||
value: 'explicit',
|
|
||||||
sublist: false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.userIsAdminOrUp) {
|
if (this.userIsAdminOrUp) {
|
||||||
items.push({
|
items.push({
|
||||||
text: this.$strings.LabelShareOpen,
|
text: this.$strings.LabelShareOpen,
|
||||||
@ -261,7 +249,7 @@ export default {
|
|||||||
return items
|
return items
|
||||||
},
|
},
|
||||||
podcastItems() {
|
podcastItems() {
|
||||||
const items = [
|
return [
|
||||||
{
|
{
|
||||||
text: this.$strings.LabelAll,
|
text: this.$strings.LabelAll,
|
||||||
value: 'all'
|
value: 'all'
|
||||||
@ -288,23 +276,8 @@ export default {
|
|||||||
text: this.$strings.ButtonIssues,
|
text: this.$strings.ButtonIssues,
|
||||||
value: 'issues',
|
value: 'issues',
|
||||||
sublist: false
|
sublist: false
|
||||||
},
|
|
||||||
{
|
|
||||||
text: this.$strings.LabelRSSFeedOpen,
|
|
||||||
value: 'feed-open',
|
|
||||||
sublist: false
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
if (this.userCanAccessExplicitContent) {
|
|
||||||
items.push({
|
|
||||||
text: this.$strings.LabelExplicit,
|
|
||||||
value: 'explicit',
|
|
||||||
sublist: false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return items
|
|
||||||
},
|
},
|
||||||
selectItems() {
|
selectItems() {
|
||||||
if (this.isSeries) return this.seriesItems
|
if (this.isSeries) return this.seriesItems
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<ul v-show="showMenu" class="librarySortMenu absolute z-10 mt-1 w-full bg-bg border border-black-200 shadow-lg max-h-96 rounded-md py-1 ring-1 ring-black/5 overflow-auto focus:outline-hidden text-sm" role="menu">
|
<ul v-show="showMenu" class="absolute z-10 mt-1 w-full bg-bg border border-black-200 shadow-lg max-h-96 rounded-md py-1 ring-1 ring-black/5 overflow-auto focus:outline-hidden text-sm" role="menu">
|
||||||
<template v-for="item in selectItems">
|
<template v-for="item in selectItems">
|
||||||
<li :key="item.value" class="select-none relative py-2 pr-9 cursor-pointer hover:bg-white/5" :class="item.value === selected ? 'bg-white/5 text-yellow-400' : 'text-gray-200 hover:text-white'" role="menuitem" @click="clickedOption(item.value)">
|
<li :key="item.value" class="select-none relative py-2 pr-9 cursor-pointer hover:bg-white/5" :class="item.value === selected ? 'bg-white/5 text-yellow-400' : 'text-gray-200 hover:text-white'" role="menuitem" @click="clickedOption(item.value)">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
@ -130,10 +130,6 @@ export default {
|
|||||||
text: this.$strings.LabelFileModified,
|
text: this.$strings.LabelFileModified,
|
||||||
value: 'mtimeMs'
|
value: 'mtimeMs'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
text: this.$strings.LabelLibrarySortByProgress,
|
|
||||||
value: 'progress'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
text: this.$strings.LabelRandomly,
|
text: this.$strings.LabelRandomly,
|
||||||
value: 'random'
|
value: 'random'
|
||||||
@ -195,9 +191,3 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.librarySortMenu {
|
|
||||||
max-height: calc(100vh - 125px);
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -39,6 +39,9 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
userToken() {
|
||||||
|
return this.$store.getters['user/getToken']
|
||||||
|
},
|
||||||
_author() {
|
_author() {
|
||||||
return this.author || {}
|
return this.author || {}
|
||||||
},
|
},
|
||||||
|
@ -309,9 +309,9 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
console.log('Account updated', data.user)
|
console.log('Account updated', data.user)
|
||||||
|
|
||||||
if (data.user.id === this.user.id && data.user.accessToken !== this.user.accessToken) {
|
if (data.user.id === this.user.id && data.user.token !== this.user.token) {
|
||||||
console.log('Current user access token was updated')
|
console.log('Current user token was updated')
|
||||||
this.$store.commit('user/setAccessToken', data.user.accessToken)
|
this.$store.commit('user/setUserToken', data.user.token)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$toast.success(this.$strings.ToastAccountUpdateSuccess)
|
this.$toast.success(this.$strings.ToastAccountUpdateSuccess)
|
||||||
@ -351,6 +351,9 @@ export default {
|
|||||||
this.$toast.error(errMsg || 'Failed to create account')
|
this.$toast.error(errMsg || 'Failed to create account')
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
toggleActive() {
|
||||||
|
this.newUser.isActive = !this.newUser.isActive
|
||||||
|
},
|
||||||
userTypeUpdated(type) {
|
userTypeUpdated(type) {
|
||||||
this.newUser.permissions = {
|
this.newUser.permissions = {
|
||||||
download: type !== 'guest',
|
download: type !== 'guest',
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
<template>
|
|
||||||
<modals-modal ref="modal" v-model="show" name="api-key-created" :width="800" :height="'unset'" persistent>
|
|
||||||
<template #outer>
|
|
||||||
<div class="absolute top-0 left-0 p-5 w-2/3 overflow-hidden">
|
|
||||||
<p class="text-3xl text-white truncate">{{ title }}</p>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<form @submit.prevent="submitForm">
|
|
||||||
<div class="px-4 w-full text-sm py-6 rounded-lg bg-bg shadow-lg border border-black-300 overflow-y-auto overflow-x-hidden" style="min-height: 200px; max-height: 80vh">
|
|
||||||
<div class="w-full p-8">
|
|
||||||
<p class="text-lg text-white mb-4">{{ $getString('LabelApiKeyCreated', [apiKeyName]) }}</p>
|
|
||||||
|
|
||||||
<p class="text-lg text-white mb-4">{{ $strings.LabelApiKeyCreatedDescription }}</p>
|
|
||||||
|
|
||||||
<ui-text-input label="API Key" :value="apiKeyKey" readonly show-copy />
|
|
||||||
|
|
||||||
<div class="flex justify-end mt-4">
|
|
||||||
<ui-btn color="bg-primary" @click="show = false">{{ $strings.ButtonClose }}</ui-btn>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</modals-modal>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
value: Boolean,
|
|
||||||
apiKey: {
|
|
||||||
type: Object,
|
|
||||||
default: () => null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
show: {
|
|
||||||
get() {
|
|
||||||
return this.value
|
|
||||||
},
|
|
||||||
set(val) {
|
|
||||||
this.$emit('input', val)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
title() {
|
|
||||||
return this.$strings.HeaderNewApiKey
|
|
||||||
},
|
|
||||||
apiKeyName() {
|
|
||||||
return this.apiKey?.name || ''
|
|
||||||
},
|
|
||||||
apiKeyKey() {
|
|
||||||
return this.apiKey?.apiKey || ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {},
|
|
||||||
mounted() {}
|
|
||||||
}
|
|
||||||
</script>
|
|
@ -1,198 +0,0 @@
|
|||||||
<template>
|
|
||||||
<modals-modal ref="modal" v-model="show" name="api-key" :width="800" :height="'unset'" :processing="processing">
|
|
||||||
<template #outer>
|
|
||||||
<div class="absolute top-0 left-0 p-5 w-2/3 overflow-hidden">
|
|
||||||
<p class="text-3xl text-white truncate">{{ title }}</p>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<form @submit.prevent="submitForm">
|
|
||||||
<div class="px-4 w-full text-sm py-6 rounded-lg bg-bg shadow-lg border border-black-300 overflow-y-auto overflow-x-hidden" style="min-height: 400px; max-height: 80vh">
|
|
||||||
<div class="w-full p-8">
|
|
||||||
<div class="flex py-2">
|
|
||||||
<div class="w-1/2 px-2">
|
|
||||||
<ui-text-input-with-label v-model.trim="newApiKey.name" :readonly="!isNew" :label="$strings.LabelName" />
|
|
||||||
</div>
|
|
||||||
<div v-if="isNew" class="w-1/2 px-2">
|
|
||||||
<ui-text-input-with-label v-model.trim="newApiKey.expiresIn" :label="$strings.LabelExpiresInSeconds" type="number" :min="0" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex items-center pt-4 pb-2 gap-2">
|
|
||||||
<div class="flex items-center px-2">
|
|
||||||
<p class="px-3 font-semibold" id="user-enabled-toggle">{{ $strings.LabelEnable }}</p>
|
|
||||||
<ui-toggle-switch :disabled="isExpired && !apiKey.isActive" labeledBy="user-enabled-toggle" v-model="newApiKey.isActive" />
|
|
||||||
</div>
|
|
||||||
<div v-if="isExpired" class="px-2">
|
|
||||||
<p class="text-sm text-error">{{ $strings.LabelExpired }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="w-full border-t border-b border-black-200 py-4 px-3 mt-4">
|
|
||||||
<p class="text-lg mb-2 font-semibold">{{ $strings.LabelApiKeyUser }}</p>
|
|
||||||
<p class="text-sm mb-2 text-gray-400">{{ $strings.LabelApiKeyUserDescription }}</p>
|
|
||||||
<ui-select-input v-model="newApiKey.userId" :disabled="isExpired && !apiKey.isActive" :items="userItems" :placeholder="$strings.LabelSelectUser" :label="$strings.LabelApiKeyUser" label-hidden />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex pt-4 px-2">
|
|
||||||
<div class="grow" />
|
|
||||||
<ui-btn color="bg-success" type="submit">{{ $strings.ButtonSubmit }}</ui-btn>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</modals-modal>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
value: Boolean,
|
|
||||||
apiKey: {
|
|
||||||
type: Object,
|
|
||||||
default: () => null
|
|
||||||
},
|
|
||||||
users: {
|
|
||||||
type: Array,
|
|
||||||
default: () => []
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
processing: false,
|
|
||||||
newApiKey: {},
|
|
||||||
isNew: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
show: {
|
|
||||||
handler(newVal) {
|
|
||||||
if (newVal) {
|
|
||||||
this.init()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
show: {
|
|
||||||
get() {
|
|
||||||
return this.value
|
|
||||||
},
|
|
||||||
set(val) {
|
|
||||||
this.$emit('input', val)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
title() {
|
|
||||||
return this.isNew ? this.$strings.HeaderNewApiKey : this.$strings.HeaderUpdateApiKey
|
|
||||||
},
|
|
||||||
userItems() {
|
|
||||||
return this.users
|
|
||||||
.filter((u) => {
|
|
||||||
// Only show root user if the current user is root
|
|
||||||
return u.type !== 'root' || this.$store.getters['user/getIsRoot']
|
|
||||||
})
|
|
||||||
.map((u) => ({ text: u.username, value: u.id, subtext: u.type }))
|
|
||||||
},
|
|
||||||
isExpired() {
|
|
||||||
if (!this.apiKey || !this.apiKey.expiresAt) return false
|
|
||||||
|
|
||||||
return new Date(this.apiKey.expiresAt).getTime() < Date.now()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
submitForm() {
|
|
||||||
if (!this.newApiKey.name) {
|
|
||||||
this.$toast.error(this.$strings.ToastNameRequired)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.newApiKey.userId) {
|
|
||||||
this.$toast.error(this.$strings.ToastNewApiKeyUserError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isNew) {
|
|
||||||
this.submitCreateApiKey()
|
|
||||||
} else {
|
|
||||||
this.submitUpdateApiKey()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
submitUpdateApiKey() {
|
|
||||||
if (this.newApiKey.isActive === this.apiKey.isActive && this.newApiKey.userId === this.apiKey.userId) {
|
|
||||||
this.$toast.info(this.$strings.ToastNoUpdatesNecessary)
|
|
||||||
this.show = false
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const apiKey = {
|
|
||||||
isActive: this.newApiKey.isActive,
|
|
||||||
userId: this.newApiKey.userId
|
|
||||||
}
|
|
||||||
|
|
||||||
this.processing = true
|
|
||||||
this.$axios
|
|
||||||
.$patch(`/api/api-keys/${this.apiKey.id}`, apiKey)
|
|
||||||
.then((data) => {
|
|
||||||
this.processing = false
|
|
||||||
if (data.error) {
|
|
||||||
this.$toast.error(`${this.$strings.ToastFailedToUpdate}: ${data.error}`)
|
|
||||||
} else {
|
|
||||||
this.show = false
|
|
||||||
this.$emit('updated', data.apiKey)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
this.processing = false
|
|
||||||
console.error('Failed to update apiKey', error)
|
|
||||||
var errMsg = error.response ? error.response.data || '' : ''
|
|
||||||
this.$toast.error(errMsg || this.$strings.ToastFailedToUpdate)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
submitCreateApiKey() {
|
|
||||||
const apiKey = { ...this.newApiKey }
|
|
||||||
|
|
||||||
if (this.newApiKey.expiresIn) {
|
|
||||||
apiKey.expiresIn = parseInt(this.newApiKey.expiresIn)
|
|
||||||
} else {
|
|
||||||
delete apiKey.expiresIn
|
|
||||||
}
|
|
||||||
|
|
||||||
this.processing = true
|
|
||||||
this.$axios
|
|
||||||
.$post('/api/api-keys', apiKey)
|
|
||||||
.then((data) => {
|
|
||||||
this.processing = false
|
|
||||||
if (data.error) {
|
|
||||||
this.$toast.error(this.$strings.ToastFailedToCreate + ': ' + data.error)
|
|
||||||
} else {
|
|
||||||
this.show = false
|
|
||||||
this.$emit('created', data.apiKey)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
this.processing = false
|
|
||||||
console.error('Failed to create apiKey', error)
|
|
||||||
var errMsg = error.response ? error.response.data || '' : ''
|
|
||||||
this.$toast.error(errMsg || this.$strings.ToastFailedToCreate)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
init() {
|
|
||||||
this.isNew = !this.apiKey
|
|
||||||
|
|
||||||
if (this.apiKey) {
|
|
||||||
this.newApiKey = {
|
|
||||||
name: this.apiKey.name,
|
|
||||||
isActive: this.apiKey.isActive,
|
|
||||||
userId: this.apiKey.userId
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.newApiKey = {
|
|
||||||
name: null,
|
|
||||||
expiresIn: null,
|
|
||||||
isActive: true,
|
|
||||||
userId: null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {}
|
|
||||||
}
|
|
||||||
</script>
|
|
@ -79,10 +79,10 @@ export default {
|
|||||||
return !this.bookmarks.find((bm) => Math.abs(this.currentTime - bm.time) < 1)
|
return !this.bookmarks.find((bm) => Math.abs(this.currentTime - bm.time) < 1)
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
timeFormat() {
|
timeFormat() {
|
||||||
return this.$store.getters['getServerSetting']('timeFormat')
|
return this.$store.state.serverSettings.timeFormat
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
<ui-text-input-with-label ref="sequenceInput" v-model="selectedSeries.sequence" :label="$strings.LabelSequence" />
|
<ui-text-input-with-label ref="sequenceInput" v-model="selectedSeries.sequence" :label="$strings.LabelSequence" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="error" class="text-error text-sm mt-2 p-1">{{ error }}</div>
|
|
||||||
<div class="flex justify-end mt-2 p-1">
|
<div class="flex justify-end mt-2 p-1">
|
||||||
<ui-btn type="submit">{{ $strings.ButtonSubmit }}</ui-btn>
|
<ui-btn type="submit">{{ $strings.ButtonSubmit }}</ui-btn>
|
||||||
</div>
|
</div>
|
||||||
@ -35,17 +34,12 @@ export default {
|
|||||||
existingSeriesNames: {
|
existingSeriesNames: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => []
|
default: () => []
|
||||||
},
|
|
||||||
originalSeriesSequence: {
|
|
||||||
type: String,
|
|
||||||
default: null
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
el: null,
|
el: null,
|
||||||
content: null,
|
content: null
|
||||||
error: null
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@ -91,17 +85,10 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
submitSeriesForm() {
|
submitSeriesForm() {
|
||||||
this.error = null
|
|
||||||
|
|
||||||
if (this.$refs.newSeriesSelect) {
|
if (this.$refs.newSeriesSelect) {
|
||||||
this.$refs.newSeriesSelect.blur()
|
this.$refs.newSeriesSelect.blur()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.selectedSeries.sequence !== this.originalSeriesSequence && this.selectedSeries.sequence.includes(' ')) {
|
|
||||||
this.error = this.$strings.MessageSeriesSequenceCannotContainSpaces
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.$emit('submit')
|
this.$emit('submit')
|
||||||
},
|
},
|
||||||
clickClose() {
|
clickClose() {
|
||||||
@ -113,7 +100,6 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
setShow() {
|
setShow() {
|
||||||
this.error = null
|
|
||||||
if (!this.el || !this.content) {
|
if (!this.el || !this.content) {
|
||||||
this.init()
|
this.init()
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="w-full md:w-1/3">
|
<div class="w-full md:w-1/3">
|
||||||
<p v-if="!isMediaItemShareSession" class="font-semibold uppercase text-xs text-gray-400 tracking-wide mb-2 mt-6 md:mt-0">{{ $strings.LabelUser }}</p>
|
<p v-if="!isMediaItemShareSession" class="font-semibold uppercase text-xs text-gray-400 tracking-wide mb-2 mt-6 md:mt-0">{{ $strings.LabelUser }}</p>
|
||||||
<p v-if="!isMediaItemShareSession" class="mb-1 text-xs">{{ username }}</p>
|
<p v-if="!isMediaItemShareSession" class="mb-1 text-xs">{{ _session.userId }}</p>
|
||||||
|
|
||||||
<p class="font-semibold uppercase text-xs text-gray-400 tracking-wide mt-6 mb-2">{{ $strings.LabelMediaPlayer }}</p>
|
<p class="font-semibold uppercase text-xs text-gray-400 tracking-wide mt-6 mb-2">{{ $strings.LabelMediaPlayer }}</p>
|
||||||
<p class="mb-1">{{ playMethodName }}</p>
|
<p class="mb-1">{{ playMethodName }}</p>
|
||||||
@ -132,9 +132,6 @@ export default {
|
|||||||
_session() {
|
_session() {
|
||||||
return this.session || {}
|
return this.session || {}
|
||||||
},
|
},
|
||||||
username() {
|
|
||||||
return this._session.user?.username || this._session.userId || ''
|
|
||||||
},
|
|
||||||
deviceInfo() {
|
deviceInfo() {
|
||||||
return this._session.deviceInfo || {}
|
return this._session.deviceInfo || {}
|
||||||
},
|
},
|
||||||
@ -162,10 +159,10 @@ export default {
|
|||||||
return 'Unknown'
|
return 'Unknown'
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
timeFormat() {
|
timeFormat() {
|
||||||
return this.$store.getters['getServerSetting']('timeFormat')
|
return this.$store.state.serverSettings.timeFormat
|
||||||
},
|
},
|
||||||
isOpenSession() {
|
isOpenSession() {
|
||||||
return !!this._session.open
|
return !!this._session.open
|
||||||
|
@ -23,7 +23,7 @@ export default {
|
|||||||
processing: Boolean,
|
processing: Boolean,
|
||||||
persistent: {
|
persistent: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: true
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: [String, Number],
|
type: [String, Number],
|
||||||
@ -99,7 +99,7 @@ export default {
|
|||||||
this.preventClickoutside = false
|
this.preventClickoutside = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (this.processing || this.persistent) return
|
if (this.processing && this.persistent) return
|
||||||
if (ev.srcElement && ev.srcElement.classList.contains('modal-bg')) {
|
if (ev.srcElement && ev.srcElement.classList.contains('modal-bg')) {
|
||||||
this.show = false
|
this.show = false
|
||||||
}
|
}
|
||||||
|
@ -144,7 +144,7 @@ export default {
|
|||||||
expirationDateString() {
|
expirationDateString() {
|
||||||
if (!this.expireDurationSeconds) return this.$strings.LabelPermanent
|
if (!this.expireDurationSeconds) return this.$strings.LabelPermanent
|
||||||
const dateMs = Date.now() + this.expireDurationSeconds * 1000
|
const dateMs = Date.now() + this.expireDurationSeconds * 1000
|
||||||
return this.$formatDatetime(dateMs, this.$store.getters['getServerSetting']('dateFormat'), this.$store.getters['getServerSetting']('timeFormat'))
|
return this.$formatDatetime(dateMs, this.$store.state.serverSettings.dateFormat, this.$store.state.serverSettings.timeFormat)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -40,7 +40,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
releasesToShow() {
|
releasesToShow() {
|
||||||
return this.versionData?.releasesToShow || []
|
return this.versionData?.releasesToShow || []
|
||||||
|
@ -29,6 +29,9 @@ export default {
|
|||||||
media() {
|
media() {
|
||||||
return this.libraryItem.media || {}
|
return this.libraryItem.media || {}
|
||||||
},
|
},
|
||||||
|
userToken() {
|
||||||
|
return this.$store.getters['user/getToken']
|
||||||
|
},
|
||||||
userCanUpdate() {
|
userCanUpdate() {
|
||||||
return this.$store.getters['user/getUserCanUpdate']
|
return this.$store.getters['user/getUserCanUpdate']
|
||||||
},
|
},
|
||||||
|
@ -35,14 +35,7 @@
|
|||||||
<widgets-podcast-type-indicator :type="episode.episodeType" />
|
<widgets-podcast-type-indicator :type="episode.episodeType" />
|
||||||
</div>
|
</div>
|
||||||
<p v-if="episode.subtitle" class="mb-1 text-sm text-gray-300 line-clamp-2">{{ episode.subtitle }}</p>
|
<p v-if="episode.subtitle" class="mb-1 text-sm text-gray-300 line-clamp-2">{{ episode.subtitle }}</p>
|
||||||
<div class="flex items-center space-x-2">
|
<p class="text-xs text-gray-300">Published {{ episode.publishedAt ? $dateDistanceFromNow(episode.publishedAt) : 'Unknown' }}</p>
|
||||||
<!-- published -->
|
|
||||||
<p class="text-xs text-gray-300 w-40">Published {{ episode.publishedAt ? $dateDistanceFromNow(episode.publishedAt) : 'Unknown' }}</p>
|
|
||||||
<!-- duration -->
|
|
||||||
<p v-if="episode.durationSeconds && !isNaN(episode.durationSeconds)" class="text-xs text-gray-300 min-w-28">{{ $strings.LabelDuration }}: {{ $elapsedPretty(episode.durationSeconds) }}</p>
|
|
||||||
<!-- size -->
|
|
||||||
<p v-if="episode.enclosure?.length && !isNaN(episode.enclosure.length) && Number(episode.enclosure.length) > 0" class="text-xs text-gray-300">{{ $strings.LabelSize }}: {{ $bytesPretty(Number(episode.enclosure.length)) }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -251,8 +244,8 @@ export default {
|
|||||||
const sizeInMb = payloadSize / 1024 / 1024
|
const sizeInMb = payloadSize / 1024 / 1024
|
||||||
const sizeInMbPretty = sizeInMb.toFixed(2) + 'MB'
|
const sizeInMbPretty = sizeInMb.toFixed(2) + 'MB'
|
||||||
console.log('Request size', sizeInMb)
|
console.log('Request size', sizeInMb)
|
||||||
if (sizeInMb > 9.99) {
|
if (sizeInMb > 4.99) {
|
||||||
return this.$toast.error(`Request is too large (${sizeInMbPretty}) should be < 10Mb`)
|
return this.$toast.error(`Request is too large (${sizeInMbPretty}) should be < 5Mb`)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.processing = true
|
this.processing = true
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
{{ $getString('MessageConfirmRemoveEpisode', [episodeTitle]) }}
|
{{ $getString('MessageConfirmRemoveEpisode', [episodeTitle]) }}
|
||||||
</p>
|
</p>
|
||||||
<p v-else class="text-lg text-gray-200 mb-4">{{ $getString('MessageConfirmRemoveEpisodes', [episodes.length]) }}</p>
|
<p v-else class="text-lg text-gray-200 mb-4">{{ $getString('MessageConfirmRemoveEpisodes', [episodes.length]) }}</p>
|
||||||
<p class="text-xs font-semibold text-warning/90">{{ $strings.MessageConfirmRemoveEpisodeNote }}</p>
|
<p class="text-xs font-semibold text-warning/90">Note: This does not delete the audio file unless toggling "Hard delete file"</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-between items-center pt-4">
|
<div class="flex justify-between items-center pt-4">
|
||||||
<ui-checkbox v-model="hardDeleteFile" :label="$strings.LabelHardDeleteFile" check-color="error" checkbox-bg="bg" small label-class="text-base text-gray-200 pl-3" />
|
<ui-checkbox v-model="hardDeleteFile" :label="$strings.LabelHardDeleteFile" check-color="error" checkbox-bg="bg" small label-class="text-base text-gray-200 pl-3" />
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p dir="auto" class="text-lg font-semibold mb-6">{{ title }}</p>
|
<p dir="auto" class="text-lg font-semibold mb-6">{{ title }}</p>
|
||||||
<div v-if="description" dir="auto" class="default-style less-spacing" @click="handleDescriptionClick" v-html="description" />
|
<div v-if="description" dir="auto" class="default-style less-spacing" v-html="description" />
|
||||||
<p v-else class="mb-2">{{ $strings.MessageNoDescription }}</p>
|
<p v-else class="mb-2">{{ $strings.MessageNoDescription }}</p>
|
||||||
|
|
||||||
<div class="w-full h-px bg-white/5 my-4" />
|
<div class="w-full h-px bg-white/5 my-4" />
|
||||||
@ -34,12 +34,6 @@
|
|||||||
{{ audioFileSize }}
|
{{ audioFileSize }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="grow">
|
|
||||||
<p class="font-semibold text-xs mb-1">{{ $strings.LabelDuration }}</p>
|
|
||||||
<p class="mb-2 text-xs">
|
|
||||||
{{ audioFileDuration }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</modals-modal>
|
</modals-modal>
|
||||||
@ -74,7 +68,7 @@ export default {
|
|||||||
return this.episode.title || 'No Episode Title'
|
return this.episode.title || 'No Episode Title'
|
||||||
},
|
},
|
||||||
description() {
|
description() {
|
||||||
return this.parseDescription(this.episode.description || '')
|
return this.episode.description || ''
|
||||||
},
|
},
|
||||||
media() {
|
media() {
|
||||||
return this.libraryItem?.media || {}
|
return this.libraryItem?.media || {}
|
||||||
@ -96,49 +90,11 @@ export default {
|
|||||||
|
|
||||||
return this.$bytesPretty(size)
|
return this.$bytesPretty(size)
|
||||||
},
|
},
|
||||||
audioFileDuration() {
|
|
||||||
const duration = this.episode.duration || 0
|
|
||||||
return this.$elapsedPretty(duration)
|
|
||||||
},
|
|
||||||
bookCoverAspectRatio() {
|
bookCoverAspectRatio() {
|
||||||
return this.$store.getters['libraries/getBookCoverAspectRatio']
|
return this.$store.getters['libraries/getBookCoverAspectRatio']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {},
|
||||||
handleDescriptionClick(e) {
|
|
||||||
if (e.target.matches('span.time-marker')) {
|
|
||||||
const time = parseInt(e.target.dataset.time)
|
|
||||||
if (!isNaN(time)) {
|
|
||||||
this.$eventBus.$emit('play-item', {
|
|
||||||
episodeId: this.episodeId,
|
|
||||||
libraryItemId: this.libraryItem.id,
|
|
||||||
startTime: time
|
|
||||||
})
|
|
||||||
}
|
|
||||||
e.preventDefault()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
parseDescription(description) {
|
|
||||||
const timeMarkerLinkRegex = /<a href="#([^"]*?\b\d{1,2}:\d{1,2}(?::\d{1,2})?)">(.*?)<\/a>/g
|
|
||||||
const timeMarkerRegex = /\b\d{1,2}:\d{1,2}(?::\d{1,2})?\b/g
|
|
||||||
|
|
||||||
function convertToSeconds(time) {
|
|
||||||
const timeParts = time.split(':').map(Number)
|
|
||||||
return timeParts.reduce((acc, part, index) => acc * 60 + part, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
return description
|
|
||||||
.replace(timeMarkerLinkRegex, (match, href, displayTime) => {
|
|
||||||
const time = displayTime.match(timeMarkerRegex)[0]
|
|
||||||
const seekTimeInSeconds = convertToSeconds(time)
|
|
||||||
return `<span class="time-marker cursor-pointer text-blue-400 hover:text-blue-300" data-time="${seekTimeInSeconds}">${displayTime}</span>`
|
|
||||||
})
|
|
||||||
.replace(timeMarkerRegex, (match) => {
|
|
||||||
const seekTimeInSeconds = convertToSeconds(match)
|
|
||||||
return `<span class="time-marker cursor-pointer text-blue-400 hover:text-blue-300" data-time="${seekTimeInSeconds}">${match}</span>`
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {}
|
mounted() {}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -129,6 +129,9 @@ export default {
|
|||||||
return `${hoursRounded}h`
|
return `${hoursRounded}h`
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
token() {
|
||||||
|
return this.$store.getters['user/getToken']
|
||||||
|
},
|
||||||
timeRemaining() {
|
timeRemaining() {
|
||||||
if (this.useChapterTrack && this.currentChapter) {
|
if (this.useChapterTrack && this.currentChapter) {
|
||||||
var currChapTime = this.currentTime - this.currentChapter.start
|
var currChapTime = this.currentTime - this.currentChapter.start
|
||||||
|
@ -104,6 +104,9 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
userToken() {
|
||||||
|
return this.$store.getters['user/getToken']
|
||||||
|
},
|
||||||
libraryItemId() {
|
libraryItemId() {
|
||||||
return this.libraryItem?.id
|
return this.libraryItem?.id
|
||||||
},
|
},
|
||||||
@ -231,7 +234,10 @@ export default {
|
|||||||
async extract() {
|
async extract() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
var buff = await this.$axios.$get(this.ebookUrl, {
|
var buff = await this.$axios.$get(this.ebookUrl, {
|
||||||
responseType: 'blob'
|
responseType: 'blob',
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${this.userToken}`
|
||||||
|
}
|
||||||
})
|
})
|
||||||
const archive = await Archive.open(buff)
|
const archive = await Archive.open(buff)
|
||||||
const originalFilesObject = await archive.getFilesObject()
|
const originalFilesObject = await archive.getFilesObject()
|
||||||
|
@ -57,6 +57,9 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
userToken() {
|
||||||
|
return this.$store.getters['user/getToken']
|
||||||
|
},
|
||||||
/** @returns {string} */
|
/** @returns {string} */
|
||||||
libraryItemId() {
|
libraryItemId() {
|
||||||
return this.libraryItem?.id
|
return this.libraryItem?.id
|
||||||
@ -94,37 +97,27 @@ export default {
|
|||||||
},
|
},
|
||||||
ebookUrl() {
|
ebookUrl() {
|
||||||
if (this.fileId) {
|
if (this.fileId) {
|
||||||
return `/api/items/${this.libraryItemId}/ebook/${this.fileId}`
|
return `${this.$config.routerBasePath}/api/items/${this.libraryItemId}/ebook/${this.fileId}`
|
||||||
}
|
}
|
||||||
return `/api/items/${this.libraryItemId}/ebook`
|
return `${this.$config.routerBasePath}/api/items/${this.libraryItemId}/ebook`
|
||||||
},
|
},
|
||||||
themeRules() {
|
themeRules() {
|
||||||
const theme = this.ereaderSettings.theme
|
const isDark = this.ereaderSettings.theme === 'dark'
|
||||||
const isDark = theme === 'dark'
|
const fontColor = isDark ? '#fff' : '#000'
|
||||||
const isSepia = theme === 'sepia'
|
const backgroundColor = isDark ? 'rgb(35 35 35)' : 'rgb(255, 255, 255)'
|
||||||
|
|
||||||
const fontColor = isDark
|
|
||||||
? '#fff'
|
|
||||||
: isSepia
|
|
||||||
? '#5b4636'
|
|
||||||
: '#000'
|
|
||||||
|
|
||||||
const backgroundColor = isDark
|
|
||||||
? 'rgb(35 35 35)'
|
|
||||||
: isSepia
|
|
||||||
? 'rgb(244, 236, 216)'
|
|
||||||
: 'rgb(255, 255, 255)'
|
|
||||||
|
|
||||||
const lineSpacing = this.ereaderSettings.lineSpacing / 100
|
const lineSpacing = this.ereaderSettings.lineSpacing / 100
|
||||||
const fontScale = this.ereaderSettings.fontScale / 100
|
|
||||||
const textStroke = this.ereaderSettings.textStroke / 100
|
const fontScale = this.ereaderSettings.fontScale / 100
|
||||||
|
|
||||||
|
const textStroke = this.ereaderSettings.textStroke / 100
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'*': {
|
'*': {
|
||||||
color: `${fontColor}!important`,
|
color: `${fontColor}!important`,
|
||||||
'background-color': `${backgroundColor}!important`,
|
'background-color': `${backgroundColor}!important`,
|
||||||
'line-height': `${lineSpacing * fontScale}rem!important`,
|
'line-height': lineSpacing * fontScale + 'rem!important',
|
||||||
'-webkit-text-stroke': `${textStroke}px ${fontColor}!important`
|
'-webkit-text-stroke': textStroke + 'px ' + fontColor + '!important'
|
||||||
},
|
},
|
||||||
a: {
|
a: {
|
||||||
color: `${fontColor}!important`
|
color: `${fontColor}!important`
|
||||||
@ -316,24 +309,14 @@ export default {
|
|||||||
/** @type {EpubReader} */
|
/** @type {EpubReader} */
|
||||||
const reader = this
|
const reader = this
|
||||||
|
|
||||||
// Use axios to make request because we have token refresh logic in interceptor
|
|
||||||
const customRequest = async (url) => {
|
|
||||||
try {
|
|
||||||
return this.$axios.$get(url, {
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
})
|
|
||||||
} catch (error) {
|
|
||||||
console.error('EpubReader.initEpub customRequest failed:', error)
|
|
||||||
throw error
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @type {ePub.Book} */
|
/** @type {ePub.Book} */
|
||||||
reader.book = new ePub(reader.ebookUrl, {
|
reader.book = new ePub(reader.ebookUrl, {
|
||||||
width: this.readerWidth,
|
width: this.readerWidth,
|
||||||
height: this.readerHeight - 50,
|
height: this.readerHeight - 50,
|
||||||
openAs: 'epub',
|
openAs: 'epub',
|
||||||
requestMethod: customRequest
|
requestHeaders: {
|
||||||
|
Authorization: `Bearer ${this.userToken}`
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
/** @type {ePub.Rendition} */
|
/** @type {ePub.Rendition} */
|
||||||
@ -354,33 +337,29 @@ export default {
|
|||||||
this.applyTheme()
|
this.applyTheme()
|
||||||
})
|
})
|
||||||
|
|
||||||
reader.book.ready
|
reader.book.ready.then(() => {
|
||||||
.then(() => {
|
// set up event listeners
|
||||||
// set up event listeners
|
reader.rendition.on('relocated', reader.relocated)
|
||||||
reader.rendition.on('relocated', reader.relocated)
|
reader.rendition.on('keydown', reader.keyUp)
|
||||||
reader.rendition.on('keydown', reader.keyUp)
|
|
||||||
|
|
||||||
reader.rendition.on('touchstart', (event) => {
|
reader.rendition.on('touchstart', (event) => {
|
||||||
this.$emit('touchstart', event)
|
this.$emit('touchstart', event)
|
||||||
})
|
})
|
||||||
reader.rendition.on('touchend', (event) => {
|
reader.rendition.on('touchend', (event) => {
|
||||||
this.$emit('touchend', event)
|
this.$emit('touchend', event)
|
||||||
})
|
})
|
||||||
|
|
||||||
// load ebook cfi locations
|
// load ebook cfi locations
|
||||||
const savedLocations = this.loadLocations()
|
const savedLocations = this.loadLocations()
|
||||||
if (savedLocations) {
|
if (savedLocations) {
|
||||||
reader.book.locations.load(savedLocations)
|
reader.book.locations.load(savedLocations)
|
||||||
} else {
|
} else {
|
||||||
reader.book.locations.generate().then(() => {
|
reader.book.locations.generate().then(() => {
|
||||||
this.checkSaveLocations(reader.book.locations.save())
|
this.checkSaveLocations(reader.book.locations.save())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
this.getChapters()
|
this.getChapters()
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
|
||||||
console.error('EpubReader.initEpub failed:', error)
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
getChapters() {
|
getChapters() {
|
||||||
// Load the list of chapters in the book. See https://github.com/futurepress/epub.js/issues/759
|
// Load the list of chapters in the book. See https://github.com/futurepress/epub.js/issues/759
|
||||||
|
@ -26,6 +26,9 @@ export default {
|
|||||||
return {}
|
return {}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
userToken() {
|
||||||
|
return this.$store.getters['user/getToken']
|
||||||
|
},
|
||||||
libraryItemId() {
|
libraryItemId() {
|
||||||
return this.libraryItem?.id
|
return this.libraryItem?.id
|
||||||
},
|
},
|
||||||
@ -93,8 +96,11 @@ export default {
|
|||||||
},
|
},
|
||||||
async initMobi() {
|
async initMobi() {
|
||||||
// Fetch mobi file as blob
|
// Fetch mobi file as blob
|
||||||
const buff = await this.$axios.$get(this.ebookUrl, {
|
var buff = await this.$axios.$get(this.ebookUrl, {
|
||||||
responseType: 'blob'
|
responseType: 'blob',
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${this.userToken}`
|
||||||
|
}
|
||||||
})
|
})
|
||||||
var reader = new FileReader()
|
var reader = new FileReader()
|
||||||
reader.onload = async (event) => {
|
reader.onload = async (event) => {
|
||||||
|
@ -55,8 +55,7 @@ export default {
|
|||||||
loadedRatio: 0,
|
loadedRatio: 0,
|
||||||
page: 1,
|
page: 1,
|
||||||
numPages: 0,
|
numPages: 0,
|
||||||
pdfDocInitParams: null,
|
pdfDocInitParams: null
|
||||||
isRefreshing: false
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -153,34 +152,7 @@ export default {
|
|||||||
this.page++
|
this.page++
|
||||||
this.updateProgress()
|
this.updateProgress()
|
||||||
},
|
},
|
||||||
async refreshToken() {
|
error(err) {
|
||||||
if (this.isRefreshing) return
|
|
||||||
this.isRefreshing = true
|
|
||||||
const newAccessToken = await this.$store.dispatch('user/refreshToken').catch((error) => {
|
|
||||||
console.error('Failed to refresh token', error)
|
|
||||||
return null
|
|
||||||
})
|
|
||||||
if (!newAccessToken) {
|
|
||||||
// Redirect to login on failed refresh
|
|
||||||
this.$router.push('/login')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Force Vue to re-render the PDF component by creating a new object
|
|
||||||
this.pdfDocInitParams = {
|
|
||||||
url: this.ebookUrl,
|
|
||||||
httpHeaders: {
|
|
||||||
Authorization: `Bearer ${newAccessToken}`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.isRefreshing = false
|
|
||||||
},
|
|
||||||
async error(err) {
|
|
||||||
if (err && err.status === 401) {
|
|
||||||
console.log('Received 401 error, refreshing token')
|
|
||||||
await this.refreshToken()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
console.error(err)
|
console.error(err)
|
||||||
},
|
},
|
||||||
resize() {
|
resize() {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-if="show" id="reader" :data-theme="ereaderTheme" class="group absolute top-0 left-0 w-full z-60 data-[theme=dark]:bg-primary data-[theme=dark]:text-white data-[theme=light]:bg-white data-[theme=light]:text-black data-[theme=sepia]:bg-[rgb(244,236,216)] data-[theme=sepia]:text-[#5b4636]" :class="{ 'reader-player-open': !!streamLibraryItem }">
|
<div v-if="show" id="reader" :data-theme="ereaderTheme" class="group absolute top-0 left-0 w-full z-60 data-[theme=dark]:bg-primary data-[theme=dark]:text-white data-[theme=light]:bg-white data-[theme=light]:text-black" :class="{ 'reader-player-open': !!streamLibraryItem }">
|
||||||
<div class="absolute top-4 left-4 z-20 flex items-center">
|
<div class="absolute top-4 left-4 z-20 flex items-center">
|
||||||
<button v-if="isEpub" @click="toggleToC" type="button" aria-label="Table of contents menu" class="inline-flex opacity-80 hover:opacity-100">
|
<button v-if="isEpub" @click="toggleToC" type="button" aria-label="Table of contents menu" class="inline-flex opacity-80 hover:opacity-100">
|
||||||
<span class="material-symbols text-2xl">menu</span>
|
<span class="material-symbols text-2xl">menu</span>
|
||||||
@ -27,12 +27,7 @@
|
|||||||
|
|
||||||
<!-- TOC side nav -->
|
<!-- TOC side nav -->
|
||||||
<div v-if="tocOpen" class="w-full h-full overflow-y-scroll absolute inset-0 bg-black/20 z-20" @click.stop.prevent="toggleToC"></div>
|
<div v-if="tocOpen" class="w-full h-full overflow-y-scroll absolute inset-0 bg-black/20 z-20" @click.stop.prevent="toggleToC"></div>
|
||||||
<div
|
<div v-if="isEpub" class="w-96 h-full max-h-full absolute top-0 left-0 shadow-xl transition-transform z-30 group-data-[theme=dark]:bg-primary group-data-[theme=dark]:text-white group-data-[theme=light]:bg-white group-data-[theme=light]:text-black" :class="tocOpen ? 'translate-x-0' : '-translate-x-96'" @click.stop.prevent>
|
||||||
v-if="isEpub"
|
|
||||||
class="w-96 h-full max-h-full absolute top-0 left-0 shadow-xl transition-transform z-30 group-data-[theme=dark]:bg-primary group-data-[theme=dark]:text-white group-data-[theme=light]:bg-white group-data-[theme=light]:text-black group-data-[theme=sepia]:bg-[rgb(244,236,216)] group-data-[theme=sepia]:text-[#5b4636]"
|
|
||||||
:class="tocOpen ? 'translate-x-0' : '-translate-x-96'"
|
|
||||||
@click.stop.prevent
|
|
||||||
>
|
|
||||||
<div class="flex flex-col p-4 h-full">
|
<div class="flex flex-col p-4 h-full">
|
||||||
<div class="flex items-center mb-2">
|
<div class="flex items-center mb-2">
|
||||||
<button @click.stop.prevent="toggleToC" type="button" aria-label="Close table of contents" class="inline-flex opacity-80 hover:opacity-100">
|
<button @click.stop.prevent="toggleToC" type="button" aria-label="Close table of contents" class="inline-flex opacity-80 hover:opacity-100">
|
||||||
@ -42,7 +37,7 @@
|
|||||||
<p class="text-lg font-semibold ml-2">{{ $strings.HeaderTableOfContents }}</p>
|
<p class="text-lg font-semibold ml-2">{{ $strings.HeaderTableOfContents }}</p>
|
||||||
</div>
|
</div>
|
||||||
<form @submit.prevent="searchBook" @click.stop.prevent>
|
<form @submit.prevent="searchBook" @click.stop.prevent>
|
||||||
<ui-text-input clearable ref="input" @clear="searchBook" v-model="searchQuery" :placeholder="$strings.PlaceholderSearch" custom-input-class="text-inherit !bg-inherit" class="h-8 w-full text-sm flex mb-2" />
|
<ui-text-input clearable ref="input" @clear="searchBook" v-model="searchQuery" :placeholder="$strings.PlaceholderSearch" class="h-8 w-full text-sm flex mb-2" />
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div class="overflow-y-auto">
|
<div class="overflow-y-auto">
|
||||||
@ -186,10 +181,6 @@ export default {
|
|||||||
text: this.$strings.LabelThemeDark,
|
text: this.$strings.LabelThemeDark,
|
||||||
value: 'dark'
|
value: 'dark'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
text: this.$strings.LabelThemeSepia,
|
|
||||||
value: 'sepia'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
text: this.$strings.LabelThemeLight,
|
text: this.$strings.LabelThemeLight,
|
||||||
value: 'light'
|
value: 'light'
|
||||||
@ -275,6 +266,9 @@ export default {
|
|||||||
isComic() {
|
isComic() {
|
||||||
return this.ebookFormat == 'cbz' || this.ebookFormat == 'cbr'
|
return this.ebookFormat == 'cbz' || this.ebookFormat == 'cbr'
|
||||||
},
|
},
|
||||||
|
userToken() {
|
||||||
|
return this.$store.getters['user/getToken']
|
||||||
|
},
|
||||||
keepProgress() {
|
keepProgress() {
|
||||||
return this.$store.state.ereaderKeepProgress
|
return this.$store.state.ereaderKeepProgress
|
||||||
},
|
},
|
||||||
|
@ -1,177 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div>
|
|
||||||
<div class="text-center">
|
|
||||||
<table v-if="apiKeys.length > 0" id="api-keys">
|
|
||||||
<tr>
|
|
||||||
<th>{{ $strings.LabelName }}</th>
|
|
||||||
<th class="w-44">{{ $strings.LabelApiKeyUser }}</th>
|
|
||||||
<th class="w-32">{{ $strings.LabelExpiresAt }}</th>
|
|
||||||
<th class="w-32">{{ $strings.LabelCreatedAt }}</th>
|
|
||||||
<th class="w-32"></th>
|
|
||||||
</tr>
|
|
||||||
<tr v-for="apiKey in apiKeys" :key="apiKey.id" :class="apiKey.isActive ? '' : 'bg-error/10!'">
|
|
||||||
<td>
|
|
||||||
<div class="flex items-center">
|
|
||||||
<p class="pl-2 truncate">{{ apiKey.name }}</p>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="text-xs">
|
|
||||||
<nuxt-link v-if="apiKey.user" :to="`/config/users/${apiKey.user.id}`" class="text-xs hover:underline">
|
|
||||||
{{ apiKey.user.username }}
|
|
||||||
</nuxt-link>
|
|
||||||
<p v-else class="text-xs">Error</p>
|
|
||||||
</td>
|
|
||||||
<td class="text-xs">
|
|
||||||
<p v-if="apiKey.expiresAt" class="text-xs" :title="apiKey.expiresAt">{{ getExpiresAtText(apiKey) }}</p>
|
|
||||||
<p v-else class="text-xs">{{ $strings.LabelExpiresNever }}</p>
|
|
||||||
</td>
|
|
||||||
<td class="text-xs font-mono">
|
|
||||||
<ui-tooltip direction="top" :text="$formatJsDatetime(new Date(apiKey.createdAt), dateFormat, timeFormat)">
|
|
||||||
{{ $formatJsDate(new Date(apiKey.createdAt), dateFormat) }}
|
|
||||||
</ui-tooltip>
|
|
||||||
</td>
|
|
||||||
<td class="py-0">
|
|
||||||
<div class="w-full flex justify-left">
|
|
||||||
<div class="h-8 w-8 flex items-center justify-center text-white/50 hover:text-white/100 cursor-pointer" @click.stop="editApiKey(apiKey)">
|
|
||||||
<button type="button" :aria-label="$strings.ButtonEdit" class="material-symbols text-base">edit</button>
|
|
||||||
</div>
|
|
||||||
<div class="h-8 w-8 flex items-center justify-center text-white/50 hover:text-error cursor-pointer" @click.stop="deleteApiKeyClick(apiKey)">
|
|
||||||
<button type="button" :aria-label="$strings.ButtonDelete" class="material-symbols text-base">delete</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<p v-else class="text-base text-gray-300 py-4">{{ $strings.LabelNoApiKeys }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
apiKeys: [],
|
|
||||||
isDeletingApiKey: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
dateFormat() {
|
|
||||||
return this.$store.state.serverSettings.dateFormat
|
|
||||||
},
|
|
||||||
timeFormat() {
|
|
||||||
return this.$store.state.serverSettings.timeFormat
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
getExpiresAtText(apiKey) {
|
|
||||||
if (new Date(apiKey.expiresAt).getTime() < Date.now()) {
|
|
||||||
return this.$strings.LabelExpired
|
|
||||||
}
|
|
||||||
return this.$formatJsDatetime(new Date(apiKey.expiresAt), this.dateFormat, this.timeFormat)
|
|
||||||
},
|
|
||||||
deleteApiKeyClick(apiKey) {
|
|
||||||
if (this.isDeletingApiKey) return
|
|
||||||
|
|
||||||
const payload = {
|
|
||||||
message: this.$getString('MessageConfirmDeleteApiKey', [apiKey.name]),
|
|
||||||
callback: (confirmed) => {
|
|
||||||
if (confirmed) {
|
|
||||||
this.deleteApiKey(apiKey)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
type: 'yesNo'
|
|
||||||
}
|
|
||||||
this.$store.commit('globals/setConfirmPrompt', payload)
|
|
||||||
},
|
|
||||||
deleteApiKey(apiKey) {
|
|
||||||
this.isDeletingApiKey = true
|
|
||||||
this.$axios
|
|
||||||
.$delete(`/api/api-keys/${apiKey.id}`)
|
|
||||||
.then((data) => {
|
|
||||||
if (data.error) {
|
|
||||||
this.$toast.error(data.error)
|
|
||||||
} else {
|
|
||||||
this.removeApiKey(apiKey.id)
|
|
||||||
this.$emit('numApiKeys', this.apiKeys.length)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error('Failed to delete apiKey', error)
|
|
||||||
this.$toast.error(this.$strings.ToastFailedToDelete)
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
this.isDeletingApiKey = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
editApiKey(apiKey) {
|
|
||||||
this.$emit('edit', apiKey)
|
|
||||||
},
|
|
||||||
addApiKey(apiKey) {
|
|
||||||
this.apiKeys.push(apiKey)
|
|
||||||
},
|
|
||||||
removeApiKey(apiKeyId) {
|
|
||||||
this.apiKeys = this.apiKeys.filter((a) => a.id !== apiKeyId)
|
|
||||||
},
|
|
||||||
updateApiKey(apiKey) {
|
|
||||||
this.apiKeys = this.apiKeys.map((a) => (a.id === apiKey.id ? apiKey : a))
|
|
||||||
},
|
|
||||||
loadApiKeys() {
|
|
||||||
this.$axios
|
|
||||||
.$get('/api/api-keys')
|
|
||||||
.then((res) => {
|
|
||||||
this.apiKeys = res.apiKeys.sort((a, b) => {
|
|
||||||
return a.createdAt - b.createdAt
|
|
||||||
})
|
|
||||||
this.$emit('numApiKeys', this.apiKeys.length)
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error('Failed to load apiKeys', error)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.loadApiKeys()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
#api-keys {
|
|
||||||
table-layout: fixed;
|
|
||||||
border-collapse: collapse;
|
|
||||||
border: 1px solid #474747;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#api-keys td,
|
|
||||||
#api-keys th {
|
|
||||||
/* border: 1px solid #2e2e2e; */
|
|
||||||
padding: 8px 8px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
#api-keys td.py-0 {
|
|
||||||
padding: 0px 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#api-keys tr:nth-child(even) {
|
|
||||||
background-color: #373838;
|
|
||||||
}
|
|
||||||
|
|
||||||
#api-keys tr:nth-child(odd) {
|
|
||||||
background-color: #2f2f2f;
|
|
||||||
}
|
|
||||||
|
|
||||||
#api-keys tr:hover {
|
|
||||||
background-color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
#api-keys th {
|
|
||||||
font-size: 0.8rem;
|
|
||||||
font-weight: 600;
|
|
||||||
padding-top: 5px;
|
|
||||||
padding-bottom: 5px;
|
|
||||||
background-color: #272727;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -78,10 +78,10 @@ export default {
|
|||||||
return this.$store.getters['user/getToken']
|
return this.$store.getters['user/getToken']
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
timeFormat() {
|
timeFormat() {
|
||||||
return this.$store.getters['getServerSetting']('timeFormat')
|
return this.$store.state.serverSettings.timeFormat
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -49,6 +49,9 @@ export default {
|
|||||||
libraryItemId() {
|
libraryItemId() {
|
||||||
return this.libraryItem.id
|
return this.libraryItem.id
|
||||||
},
|
},
|
||||||
|
userToken() {
|
||||||
|
return this.$store.getters['user/getToken']
|
||||||
|
},
|
||||||
userCanDownload() {
|
userCanDownload() {
|
||||||
return this.$store.getters['user/getUserCanDownload']
|
return this.$store.getters['user/getUserCanDownload']
|
||||||
},
|
},
|
||||||
|
@ -53,6 +53,9 @@ export default {
|
|||||||
libraryItemId() {
|
libraryItemId() {
|
||||||
return this.libraryItem.id
|
return this.libraryItem.id
|
||||||
},
|
},
|
||||||
|
userToken() {
|
||||||
|
return this.$store.getters['user/getToken']
|
||||||
|
},
|
||||||
userCanDownload() {
|
userCanDownload() {
|
||||||
return this.$store.getters['user/getUserCanDownload']
|
return this.$store.getters['user/getUserCanDownload']
|
||||||
},
|
},
|
||||||
|
@ -76,10 +76,10 @@ export default {
|
|||||||
return usermap
|
return usermap
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
timeFormat() {
|
timeFormat() {
|
||||||
return this.$store.getters['getServerSetting']('timeFormat')
|
return this.$store.state.serverSettings.timeFormat
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -112,7 +112,7 @@ export default {
|
|||||||
return this.episode?.publishedAt
|
return this.episode?.publishedAt
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.store.getters['getServerSetting']('dateFormat')
|
return this.store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
itemProgress() {
|
itemProgress() {
|
||||||
return this.store.getters['user/getUserMediaProgress'](this.libraryItemId, this.episodeId)
|
return this.store.getters['user/getUserMediaProgress'](this.libraryItemId, this.episodeId)
|
||||||
|
@ -239,10 +239,10 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
timeFormat() {
|
timeFormat() {
|
||||||
return this.$store.getters['getServerSetting']('timeFormat')
|
return this.$store.state.serverSettings.timeFormat
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -85,6 +85,9 @@ export default {
|
|||||||
this.$emit('input', val)
|
this.$emit('input', val)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
userToken() {
|
||||||
|
return this.$store.getters['user/getToken']
|
||||||
|
},
|
||||||
wrapperClass() {
|
wrapperClass() {
|
||||||
var classes = []
|
var classes = []
|
||||||
if (this.disabled) classes.push('bg-black-300')
|
if (this.disabled) classes.push('bg-black-300')
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="relative w-full">
|
<div class="relative w-full">
|
||||||
<p v-if="label && !labelHidden" class="text-sm font-semibold px-1" :class="disabled ? 'text-gray-300' : ''">{{ label }}</p>
|
<p v-if="label" class="text-sm font-semibold px-1" :class="disabled ? 'text-gray-300' : ''">{{ label }}</p>
|
||||||
<button ref="buttonWrapper" type="button" :aria-label="longLabel" :disabled="disabled" class="relative w-full border rounded-sm shadow-xs pl-3 pr-8 py-2 text-left sm:text-sm" :class="buttonClass" aria-haspopup="listbox" aria-expanded="true" @click.stop.prevent="clickShowMenu">
|
<button ref="buttonWrapper" type="button" :aria-label="longLabel" :disabled="disabled" class="relative w-full border rounded-sm shadow-xs pl-3 pr-8 py-2 text-left sm:text-sm" :class="buttonClass" aria-haspopup="listbox" aria-expanded="true" @click.stop.prevent="clickShowMenu">
|
||||||
<span class="flex items-center">
|
<span class="flex items-center">
|
||||||
<span class="block truncate font-sans" :class="{ 'font-semibold': selectedSubtext, 'text-sm': small, 'text-gray-400': !selectedText }">{{ selectedText || placeholder }}</span>
|
<span class="block truncate font-sans" :class="{ 'font-semibold': selectedSubtext, 'text-sm': small }">{{ selectedText }}</span>
|
||||||
<span v-if="selectedSubtext">: </span>
|
<span v-if="selectedSubtext">: </span>
|
||||||
<span v-if="selectedSubtext" class="font-normal block truncate font-sans text-sm text-gray-400">{{ selectedSubtext }}</span>
|
<span v-if="selectedSubtext" class="font-normal block truncate font-sans text-sm text-gray-400">{{ selectedSubtext }}</span>
|
||||||
</span>
|
</span>
|
||||||
@ -36,15 +36,10 @@ export default {
|
|||||||
type: String,
|
type: String,
|
||||||
default: ''
|
default: ''
|
||||||
},
|
},
|
||||||
labelHidden: Boolean,
|
|
||||||
items: {
|
items: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => []
|
default: () => []
|
||||||
},
|
},
|
||||||
placeholder: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
disabled: Boolean,
|
disabled: Boolean,
|
||||||
small: Boolean,
|
small: Boolean,
|
||||||
menuMaxHeight: {
|
menuMaxHeight: {
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<em v-if="note" class="font-normal text-xs pl-2">{{ note }}</em>
|
<em v-if="note" class="font-normal text-xs pl-2">{{ note }}</em>
|
||||||
</label>
|
</label>
|
||||||
</slot>
|
</slot>
|
||||||
<ui-text-input :placeholder="placeholder || label" :inputId="identifier" ref="input" v-model="inputValue" :disabled="disabled" :readonly="readonly" :type="type" :min="min" :show-copy="showCopy" class="w-full" :class="inputClass" :trim-whitespace="trimWhitespace" @blur="inputBlurred" />
|
<ui-text-input :placeholder="placeholder || label" :inputId="identifier" ref="input" v-model="inputValue" :disabled="disabled" :readonly="readonly" :type="type" :show-copy="showCopy" class="w-full" :class="inputClass" :trim-whitespace="trimWhitespace" @blur="inputBlurred" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -21,7 +21,6 @@ export default {
|
|||||||
type: String,
|
type: String,
|
||||||
default: 'text'
|
default: 'text'
|
||||||
},
|
},
|
||||||
min: [String, Number],
|
|
||||||
readonly: Boolean,
|
readonly: Boolean,
|
||||||
disabled: Boolean,
|
disabled: Boolean,
|
||||||
inputClass: String,
|
inputClass: String,
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</trix-toolbar>
|
</trix-toolbar>
|
||||||
<trix-editor :toolbar="toolbarId" :contenteditable="!disabledEditor" :class="['trix-content']" ref="trix" :input="computedId" :placeholder="placeholder" @trix-change="handleContentChange" @trix-initialize="handleInitialize" @trix-focus="processTrixFocus" @trix-blur="processTrixBlur" @trix-attachment-add="handleAttachmentAdd" />
|
<trix-editor :toolbar="toolbarId" :contenteditable="!disabledEditor" :class="['trix-content']" ref="trix" :input="computedId" :placeholder="placeholder" @trix-change="handleContentChange" @trix-initialize="handleInitialize" @trix-focus="processTrixFocus" @trix-blur="processTrixBlur" />
|
||||||
<input type="hidden" :name="inputName" :id="computedId" :value="editorContent" />
|
<input type="hidden" :name="inputName" :id="computedId" :value="editorContent" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -316,10 +316,6 @@ export default {
|
|||||||
if (this.$refs.trix && this.$refs.trix.blur) {
|
if (this.$refs.trix && this.$refs.trix.blur) {
|
||||||
this.$refs.trix.blur()
|
this.$refs.trix.blur()
|
||||||
}
|
}
|
||||||
},
|
|
||||||
handleAttachmentAdd(event) {
|
|
||||||
// Prevent pasting in images/any files from the browser
|
|
||||||
event.attachment.remove()
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -85,7 +85,7 @@ export default {
|
|||||||
nextRun() {
|
nextRun() {
|
||||||
if (!this.cronExpression) return ''
|
if (!this.cronExpression) return ''
|
||||||
const parsed = this.$getNextScheduledDate(this.cronExpression)
|
const parsed = this.$getNextScheduledDate(this.cronExpression)
|
||||||
return this.$formatJsDatetime(parsed, this.$store.getters['getServerSetting']('dateFormat'), this.$store.getters['getServerSetting']('timeFormat')) || ''
|
return this.$formatJsDatetime(parsed, this.$store.state.serverSettings.dateFormat, this.$store.state.serverSettings.timeFormat) || ''
|
||||||
},
|
},
|
||||||
description() {
|
description() {
|
||||||
if ((this.selectedInterval !== 'custom' || !this.selectedWeekdays.length) && this.selectedInterval !== 'daily') return ''
|
if ((this.selectedInterval !== 'custom' || !this.selectedWeekdays.length) && this.selectedInterval !== 'daily') return ''
|
||||||
|
@ -143,18 +143,10 @@ export default {
|
|||||||
localStorage.setItem('embedMetadataCodec', val)
|
localStorage.setItem('embedMetadataCodec', val)
|
||||||
},
|
},
|
||||||
getEncodingOptions() {
|
getEncodingOptions() {
|
||||||
if (this.showAdvancedView) {
|
return {
|
||||||
return {
|
codec: this.selectedCodec || 'aac',
|
||||||
codec: this.customCodec || this.selectedCodec || 'aac',
|
bitrate: this.selectedBitrate || '128k',
|
||||||
bitrate: this.customBitrate || this.selectedBitrate || '128k',
|
channels: this.selectedChannels || 2
|
||||||
channels: this.customChannels || this.selectedChannels || 2
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
codec: this.selectedCodec || 'aac',
|
|
||||||
bitrate: this.selectedBitrate || '128k',
|
|
||||||
channels: this.selectedChannels || 2
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
setPreset() {
|
setPreset() {
|
||||||
@ -170,7 +162,7 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
// Find closest bitrate rounding up
|
// Find closest bitrate rounding up
|
||||||
const bitratesToMatch = [32, 64, 128, 192]
|
const bitratesToMatch = [32, 64, 128, 192]
|
||||||
const closestBitrate = bitratesToMatch.find((bitrate) => bitrate >= this.currentBitrate) || 192
|
const closestBitrate = bitratesToMatch.find((bitrate) => bitrate >= this.currentBitrate)
|
||||||
this.selectedBitrate = closestBitrate + 'k'
|
this.selectedBitrate = closestBitrate + 'k'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<ui-multi-select-query-input v-model="seriesItems" text-key="displayName" :label="$strings.LabelSeries" :disabled="disabled" readonly show-edit @edit="editSeriesItem" @add="addNewSeries" />
|
<ui-multi-select-query-input v-model="seriesItems" text-key="displayName" :label="$strings.LabelSeries" :disabled="disabled" readonly show-edit @edit="editSeriesItem" @add="addNewSeries" />
|
||||||
|
|
||||||
<modals-edit-series-input-inner-modal v-model="showSeriesForm" :selected-series="selectedSeries" :existing-series-names="existingSeriesNames" :original-series-sequence="originalSeriesSequence" @submit="submitSeriesForm" />
|
<modals-edit-series-input-inner-modal v-model="showSeriesForm" :selected-series="selectedSeries" :existing-series-names="existingSeriesNames" @submit="submitSeriesForm" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -18,7 +18,6 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
selectedSeries: null,
|
selectedSeries: null,
|
||||||
originalSeriesSequence: null,
|
|
||||||
showSeriesForm: false
|
showSeriesForm: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -60,7 +59,6 @@ export default {
|
|||||||
..._series
|
..._series
|
||||||
}
|
}
|
||||||
|
|
||||||
this.originalSeriesSequence = _series.sequence
|
|
||||||
this.showSeriesForm = true
|
this.showSeriesForm = true
|
||||||
},
|
},
|
||||||
addNewSeries() {
|
addNewSeries() {
|
||||||
@ -70,7 +68,6 @@ export default {
|
|||||||
sequence: ''
|
sequence: ''
|
||||||
}
|
}
|
||||||
|
|
||||||
this.originalSeriesSequence = null
|
|
||||||
this.showSeriesForm = true
|
this.showSeriesForm = true
|
||||||
},
|
},
|
||||||
submitSeriesForm() {
|
submitSeriesForm() {
|
||||||
|
@ -40,7 +40,6 @@ describe('LazySeriesCard', () => {
|
|||||||
},
|
},
|
||||||
$store: {
|
$store: {
|
||||||
getters: {
|
getters: {
|
||||||
getServerSetting: () => 'MM/dd/yyyy',
|
|
||||||
'user/getUserCanUpdate': true,
|
'user/getUserCanUpdate': true,
|
||||||
'user/getUserMediaProgress': (id) => null,
|
'user/getUserMediaProgress': (id) => null,
|
||||||
'user/getSizeMultiplier': 1,
|
'user/getSizeMultiplier': 1,
|
||||||
|
@ -33,7 +33,6 @@ export default {
|
|||||||
return {
|
return {
|
||||||
socket: null,
|
socket: null,
|
||||||
isSocketConnected: false,
|
isSocketConnected: false,
|
||||||
isSocketAuthenticated: false,
|
|
||||||
isFirstSocketConnection: true,
|
isFirstSocketConnection: true,
|
||||||
socketConnectionToastId: null,
|
socketConnectionToastId: null,
|
||||||
currentLang: null,
|
currentLang: null,
|
||||||
@ -82,28 +81,9 @@ export default {
|
|||||||
document.body.classList.add('app-bar')
|
document.body.classList.add('app-bar')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
tokenRefreshed(newAccessToken) {
|
|
||||||
if (this.isSocketConnected && !this.isSocketAuthenticated) {
|
|
||||||
console.log('[SOCKET] Re-authenticating socket after token refresh')
|
|
||||||
this.socket.emit('auth', newAccessToken)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
updateSocketConnectionToast(content, type, timeout) {
|
updateSocketConnectionToast(content, type, timeout) {
|
||||||
if (this.socketConnectionToastId !== null && this.socketConnectionToastId !== undefined) {
|
if (this.socketConnectionToastId !== null && this.socketConnectionToastId !== undefined) {
|
||||||
const toastUpdateOptions = {
|
this.$toast.update(this.socketConnectionToastId, { content: content, options: { timeout: timeout, type: type, closeButton: false, position: 'bottom-center', onClose: () => null, closeOnClick: timeout !== null } }, false)
|
||||||
content: content,
|
|
||||||
options: {
|
|
||||||
timeout: timeout,
|
|
||||||
type: type,
|
|
||||||
closeButton: false,
|
|
||||||
position: 'bottom-center',
|
|
||||||
onClose: () => {
|
|
||||||
this.socketConnectionToastId = null
|
|
||||||
},
|
|
||||||
closeOnClick: timeout !== null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.$toast.update(this.socketConnectionToastId, toastUpdateOptions, false)
|
|
||||||
} else {
|
} else {
|
||||||
this.socketConnectionToastId = this.$toast[type](content, { position: 'bottom-center', timeout: timeout, closeButton: false, closeOnClick: timeout !== null })
|
this.socketConnectionToastId = this.$toast[type](content, { position: 'bottom-center', timeout: timeout, closeButton: false, closeOnClick: timeout !== null })
|
||||||
}
|
}
|
||||||
@ -129,7 +109,7 @@ export default {
|
|||||||
this.updateSocketConnectionToast(this.$strings.ToastSocketDisconnected, 'error', null)
|
this.updateSocketConnectionToast(this.$strings.ToastSocketDisconnected, 'error', null)
|
||||||
},
|
},
|
||||||
reconnect() {
|
reconnect() {
|
||||||
console.log('[SOCKET] reconnected')
|
console.error('[SOCKET] reconnected')
|
||||||
},
|
},
|
||||||
reconnectAttempt(val) {
|
reconnectAttempt(val) {
|
||||||
console.log(`[SOCKET] reconnect attempt ${val}`)
|
console.log(`[SOCKET] reconnect attempt ${val}`)
|
||||||
@ -140,10 +120,6 @@ export default {
|
|||||||
reconnectFailed() {
|
reconnectFailed() {
|
||||||
console.error('[SOCKET] reconnect failed')
|
console.error('[SOCKET] reconnect failed')
|
||||||
},
|
},
|
||||||
authFailed(payload) {
|
|
||||||
console.error('[SOCKET] auth failed', payload.message)
|
|
||||||
this.isSocketAuthenticated = false
|
|
||||||
},
|
|
||||||
init(payload) {
|
init(payload) {
|
||||||
console.log('Init Payload', payload)
|
console.log('Init Payload', payload)
|
||||||
|
|
||||||
@ -151,7 +127,7 @@ export default {
|
|||||||
this.$store.commit('users/setUsersOnline', payload.usersOnline)
|
this.$store.commit('users/setUsersOnline', payload.usersOnline)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isSocketAuthenticated = true
|
this.$eventBus.$emit('socket_init')
|
||||||
},
|
},
|
||||||
streamOpen(stream) {
|
streamOpen(stream) {
|
||||||
if (this.$refs.mediaPlayerContainer) this.$refs.mediaPlayerContainer.streamOpen(stream)
|
if (this.$refs.mediaPlayerContainer) this.$refs.mediaPlayerContainer.streamOpen(stream)
|
||||||
@ -378,15 +354,6 @@ export default {
|
|||||||
this.$store.commit('scanners/removeCustomMetadataProvider', provider)
|
this.$store.commit('scanners/removeCustomMetadataProvider', provider)
|
||||||
},
|
},
|
||||||
initializeSocket() {
|
initializeSocket() {
|
||||||
if (this.$root.socket) {
|
|
||||||
// Can happen in dev due to hot reload
|
|
||||||
console.warn('Socket already initialized')
|
|
||||||
this.socket = this.$root.socket
|
|
||||||
this.isSocketConnected = this.$root.socket?.connected
|
|
||||||
this.isFirstSocketConnection = false
|
|
||||||
this.socketConnectionToastId = null
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.socket = this.$nuxtSocket({
|
this.socket = this.$nuxtSocket({
|
||||||
name: process.env.NODE_ENV === 'development' ? 'dev' : 'prod',
|
name: process.env.NODE_ENV === 'development' ? 'dev' : 'prod',
|
||||||
persist: 'main',
|
persist: 'main',
|
||||||
@ -397,7 +364,6 @@ export default {
|
|||||||
path: `${this.$config.routerBasePath}/socket.io`
|
path: `${this.$config.routerBasePath}/socket.io`
|
||||||
})
|
})
|
||||||
this.$root.socket = this.socket
|
this.$root.socket = this.socket
|
||||||
this.isSocketAuthenticated = false
|
|
||||||
console.log('Socket initialized')
|
console.log('Socket initialized')
|
||||||
|
|
||||||
// Pre-defined socket events
|
// Pre-defined socket events
|
||||||
@ -411,7 +377,6 @@ export default {
|
|||||||
|
|
||||||
// Event received after authorizing socket
|
// Event received after authorizing socket
|
||||||
this.socket.on('init', this.init)
|
this.socket.on('init', this.init)
|
||||||
this.socket.on('auth_failed', this.authFailed)
|
|
||||||
|
|
||||||
// Stream Listeners
|
// Stream Listeners
|
||||||
this.socket.on('stream_open', this.streamOpen)
|
this.socket.on('stream_open', this.streamOpen)
|
||||||
@ -606,7 +571,6 @@ export default {
|
|||||||
this.updateBodyClass()
|
this.updateBodyClass()
|
||||||
this.resize()
|
this.resize()
|
||||||
this.$eventBus.$on('change-lang', this.changeLanguage)
|
this.$eventBus.$on('change-lang', this.changeLanguage)
|
||||||
this.$eventBus.$on('token_refreshed', this.tokenRefreshed)
|
|
||||||
window.addEventListener('resize', this.resize)
|
window.addEventListener('resize', this.resize)
|
||||||
window.addEventListener('keydown', this.keyDown)
|
window.addEventListener('keydown', this.keyDown)
|
||||||
|
|
||||||
@ -630,7 +594,6 @@ export default {
|
|||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
this.$eventBus.$off('change-lang', this.changeLanguage)
|
this.$eventBus.$off('change-lang', this.changeLanguage)
|
||||||
this.$eventBus.$off('token_refreshed', this.tokenRefreshed)
|
|
||||||
window.removeEventListener('resize', this.resize)
|
window.removeEventListener('resize', this.resize)
|
||||||
window.removeEventListener('keydown', this.keyDown)
|
window.removeEventListener('keydown', this.keyDown)
|
||||||
}
|
}
|
||||||
|
@ -73,8 +73,7 @@ module.exports = {
|
|||||||
|
|
||||||
// Axios module configuration: https://go.nuxtjs.dev/config-axios
|
// Axios module configuration: https://go.nuxtjs.dev/config-axios
|
||||||
axios: {
|
axios: {
|
||||||
baseURL: routerBasePath,
|
baseURL: routerBasePath
|
||||||
progress: false
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// nuxt/pwa https://pwa.nuxtjs.org
|
// nuxt/pwa https://pwa.nuxtjs.org
|
||||||
|
4
client/package-lock.json
generated
4
client/package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "audiobookshelf-client",
|
"name": "audiobookshelf-client",
|
||||||
"version": "2.26.3",
|
"version": "2.22.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "audiobookshelf-client",
|
"name": "audiobookshelf-client",
|
||||||
"version": "2.26.3",
|
"version": "2.22.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.26.3",
|
"version": "2.22.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",
|
||||||
|
@ -182,19 +182,18 @@ export default {
|
|||||||
password: this.password,
|
password: this.password,
|
||||||
newPassword: this.newPassword
|
newPassword: this.newPassword
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then((res) => {
|
||||||
this.$toast.success(this.$strings.ToastUserPasswordChangeSuccess)
|
if (res.success) {
|
||||||
this.resetForm()
|
this.$toast.success(this.$strings.ToastUserPasswordChangeSuccess)
|
||||||
|
this.resetForm()
|
||||||
|
} else {
|
||||||
|
this.$toast.error(res.error || this.$strings.ToastUnknownError)
|
||||||
|
}
|
||||||
|
this.changingPassword = false
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to change password', error)
|
console.error(error)
|
||||||
let errorMessage = this.$strings.ToastUnknownError
|
this.$toast.error(this.$strings.ToastUnknownError)
|
||||||
if (error.response?.data && typeof error.response.data === 'string') {
|
|
||||||
errorMessage = error.response.data
|
|
||||||
}
|
|
||||||
this.$toast.error(errorMessage)
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
this.changingPassword = false
|
this.changingPassword = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
@ -28,14 +28,14 @@
|
|||||||
<div class="flex justify-center flex-wrap lg:flex-nowrap gap-4">
|
<div class="flex justify-center flex-wrap lg:flex-nowrap gap-4">
|
||||||
<div class="w-full max-w-2xl border border-white/10 bg-bg">
|
<div class="w-full max-w-2xl border border-white/10 bg-bg">
|
||||||
<div class="flex py-2 px-4">
|
<div class="flex py-2 px-4">
|
||||||
<div class="w-28 min-w-28 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelMetaTag }}</div>
|
<div class="w-1/3 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelMetaTag }}</div>
|
||||||
<div class="grow text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelValue }}</div>
|
<div class="w-2/3 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelValue }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full max-h-72 overflow-auto">
|
<div class="w-full max-h-72 overflow-auto">
|
||||||
<template v-for="(value, key, index) in metadataObject">
|
<template v-for="(value, key, index) in metadataObject">
|
||||||
<div :key="key" class="flex py-1 px-4 text-sm" :class="index % 2 === 0 ? 'bg-primary/25' : ''">
|
<div :key="key" class="flex py-1 px-4 text-sm" :class="index % 2 === 0 ? 'bg-primary/25' : ''">
|
||||||
<div class="w-28 min-w-28 font-semibold">{{ key }}</div>
|
<div class="w-1/3 font-semibold">{{ key }}</div>
|
||||||
<div class="grow">
|
<div class="w-2/3">
|
||||||
{{ value }}
|
{{ value }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -45,18 +45,18 @@
|
|||||||
<div class="w-full max-w-2xl border border-white/10 bg-bg">
|
<div class="w-full max-w-2xl border border-white/10 bg-bg">
|
||||||
<div class="flex py-2 px-4 bg-primary/25">
|
<div class="flex py-2 px-4 bg-primary/25">
|
||||||
<div class="grow text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelChapterTitle }}</div>
|
<div class="grow text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelChapterTitle }}</div>
|
||||||
<div class="w-16 min-w-16 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelStart }}</div>
|
<div class="w-24 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelStart }}</div>
|
||||||
<div class="w-16 min-w-16 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelEnd }}</div>
|
<div class="w-24 text-xs font-semibold uppercase text-gray-200">{{ $strings.LabelEnd }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full max-h-72 overflow-auto">
|
<div class="w-full max-h-72 overflow-auto">
|
||||||
<p v-if="!metadataChapters.length" class="py-5 text-center text-gray-200">{{ $strings.MessageNoChapters }}</p>
|
<p v-if="!metadataChapters.length" class="py-5 text-center text-gray-200">{{ $strings.MessageNoChapters }}</p>
|
||||||
<template v-for="(chapter, index) in metadataChapters">
|
<template v-for="(chapter, index) in metadataChapters">
|
||||||
<div :key="index" class="flex py-1 px-4 text-sm" :class="index % 2 === 1 ? 'bg-primary/25' : ''">
|
<div :key="index" class="flex py-1 px-4 text-sm" :class="index % 2 === 1 ? 'bg-primary/25' : ''">
|
||||||
<div class="grow font-semibold">{{ chapter.title }}</div>
|
<div class="grow font-semibold">{{ chapter.title }}</div>
|
||||||
<div class="w-16 min-w-16">
|
<div class="w-24">
|
||||||
{{ $secondsToTimestamp(chapter.start) }}
|
{{ $secondsToTimestamp(chapter.start) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="w-16 min-w-16">
|
<div class="w-24">
|
||||||
{{ $secondsToTimestamp(chapter.end) }}
|
{{ $secondsToTimestamp(chapter.end) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -356,8 +356,6 @@ export default {
|
|||||||
|
|
||||||
const encodeOptions = this.$refs.encoderOptionsCard.getEncodingOptions()
|
const encodeOptions = this.$refs.encoderOptionsCard.getEncodingOptions()
|
||||||
|
|
||||||
this.encodingOptions = encodeOptions
|
|
||||||
|
|
||||||
const queryParams = new URLSearchParams(encodeOptions)
|
const queryParams = new URLSearchParams(encodeOptions)
|
||||||
|
|
||||||
this.processing = true
|
this.processing = true
|
||||||
|
@ -53,7 +53,6 @@ export default {
|
|||||||
else if (pageName === 'sessions') return this.$strings.HeaderListeningSessions
|
else if (pageName === 'sessions') return this.$strings.HeaderListeningSessions
|
||||||
else if (pageName === 'stats') return this.$strings.HeaderYourStats
|
else if (pageName === 'stats') return this.$strings.HeaderYourStats
|
||||||
else if (pageName === 'users') return this.$strings.HeaderUsers
|
else if (pageName === 'users') return this.$strings.HeaderUsers
|
||||||
else if (pageName === 'api-keys') return this.$strings.HeaderApiKeys
|
|
||||||
else if (pageName === 'item-metadata-utils') return this.$strings.HeaderItemMetadataUtils
|
else if (pageName === 'item-metadata-utils') return this.$strings.HeaderItemMetadataUtils
|
||||||
else if (pageName === 'rss-feeds') return this.$strings.HeaderRSSFeeds
|
else if (pageName === 'rss-feeds') return this.$strings.HeaderRSSFeeds
|
||||||
else if (pageName === 'email') return this.$strings.HeaderEmail
|
else if (pageName === 'email') return this.$strings.HeaderEmail
|
||||||
|
@ -1,84 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div>
|
|
||||||
<app-settings-content :header-text="$strings.HeaderApiKeys">
|
|
||||||
<template #header-items>
|
|
||||||
<div v-if="numApiKeys" class="mx-2 px-1.5 rounded-lg bg-primary/50 text-gray-300/90 text-sm inline-flex items-center justify-center">
|
|
||||||
<span>{{ numApiKeys }}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
|
|
||||||
<a href="https://www.audiobookshelf.org/guides/api-keys" target="_blank" class="inline-flex">
|
|
||||||
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
|
|
||||||
</a>
|
|
||||||
</ui-tooltip>
|
|
||||||
|
|
||||||
<div class="grow" />
|
|
||||||
|
|
||||||
<ui-btn color="bg-primary" :disabled="loadingUsers || users.length === 0" small @click="setShowApiKeyModal()">{{ $strings.ButtonAddApiKey }}</ui-btn>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<tables-api-keys-table ref="apiKeysTable" class="pt-2" @edit="setShowApiKeyModal" @numApiKeys="(count) => (numApiKeys = count)" />
|
|
||||||
</app-settings-content>
|
|
||||||
<modals-api-key-modal ref="apiKeyModal" v-model="showApiKeyModal" :api-key="selectedApiKey" :users="users" @created="apiKeyCreated" @updated="apiKeyUpdated" />
|
|
||||||
<modals-api-key-created-modal ref="apiKeyCreatedModal" v-model="showApiKeyCreatedModal" :api-key="selectedApiKey" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
asyncData({ store, redirect }) {
|
|
||||||
if (!store.getters['user/getIsAdminOrUp']) {
|
|
||||||
redirect('/')
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
loadingUsers: false,
|
|
||||||
selectedApiKey: null,
|
|
||||||
showApiKeyModal: false,
|
|
||||||
showApiKeyCreatedModal: false,
|
|
||||||
numApiKeys: 0,
|
|
||||||
users: []
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
apiKeyCreated(apiKey) {
|
|
||||||
this.numApiKeys++
|
|
||||||
this.selectedApiKey = apiKey
|
|
||||||
this.showApiKeyCreatedModal = true
|
|
||||||
if (this.$refs.apiKeysTable) {
|
|
||||||
this.$refs.apiKeysTable.addApiKey(apiKey)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
apiKeyUpdated(apiKey) {
|
|
||||||
if (this.$refs.apiKeysTable) {
|
|
||||||
this.$refs.apiKeysTable.updateApiKey(apiKey)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
setShowApiKeyModal(selectedApiKey) {
|
|
||||||
this.selectedApiKey = selectedApiKey
|
|
||||||
this.showApiKeyModal = true
|
|
||||||
},
|
|
||||||
loadUsers() {
|
|
||||||
this.loadingUsers = true
|
|
||||||
this.$axios
|
|
||||||
.$get('/api/users')
|
|
||||||
.then((res) => {
|
|
||||||
this.users = res.users.sort((a, b) => {
|
|
||||||
return a.createdAt - b.createdAt
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error('Failed', error)
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
this.loadingUsers = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.loadUsers()
|
|
||||||
},
|
|
||||||
beforeDestroy() {}
|
|
||||||
}
|
|
||||||
</script>
|
|
@ -78,10 +78,10 @@ export default {
|
|||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
timeFormat() {
|
timeFormat() {
|
||||||
return this.$store.getters['getServerSetting']('timeFormat')
|
return this.$store.state.serverSettings.timeFormat
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -6,82 +6,80 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="listeningSessions.length" class="block max-w-full relative">
|
<div v-if="listeningSessions.length" class="block max-w-full relative">
|
||||||
<div class="overflow-x-auto">
|
<table class="userSessionsTable">
|
||||||
<table class="userSessionsTable">
|
<tr class="bg-primary/40">
|
||||||
<tr class="bg-primary/40">
|
<th class="w-6 min-w-6 text-left hidden md:table-cell h-11">
|
||||||
<th class="w-6 min-w-6 text-left hidden md:table-cell h-11">
|
<ui-checkbox v-model="isAllSelected" :partial="numSelected > 0 && !isAllSelected" small checkbox-bg="bg" />
|
||||||
<ui-checkbox v-model="isAllSelected" :partial="numSelected > 0 && !isAllSelected" small checkbox-bg="bg" />
|
</th>
|
||||||
</th>
|
<th v-if="numSelected" class="grow text-left" :colspan="7">
|
||||||
<th v-if="numSelected" class="grow text-left" :colspan="7">
|
<div class="flex items-center">
|
||||||
<div class="flex items-center">
|
<p>{{ $getString('MessageSelected', [numSelected]) }}</p>
|
||||||
<p>{{ $getString('MessageSelected', [numSelected]) }}</p>
|
<div class="grow" />
|
||||||
<div class="grow" />
|
<ui-btn small color="bg-error" :loading="deletingSessions" @click.stop="removeSessionsClick">{{ $strings.ButtonRemove }}</ui-btn>
|
||||||
<ui-btn small color="bg-error" :loading="deletingSessions" @click.stop="removeSessionsClick">{{ $strings.ButtonRemove }}</ui-btn>
|
</div>
|
||||||
</div>
|
</th>
|
||||||
</th>
|
<th v-if="!numSelected" class="grow sm:grow-0 sm:w-48 sm:max-w-48 text-left group cursor-pointer" @click.stop="sortColumn('displayTitle')">
|
||||||
<th v-if="!numSelected" class="grow sm:grow-0 sm:w-48 sm:max-w-48 text-left group cursor-pointer" @click.stop="sortColumn('displayTitle')">
|
<div class="inline-flex items-center">
|
||||||
<div class="inline-flex items-center">
|
{{ $strings.LabelItem }} <span :class="{ 'opacity-0 group-hover:opacity-30': !isSortSelected('displayTitle') }" class="material-symbols text-base pl-px">{{ sortDesc ? 'arrow_drop_down' : 'arrow_drop_up' }}</span>
|
||||||
{{ $strings.LabelItem }} <span :class="{ 'opacity-0 group-hover:opacity-30': !isSortSelected('displayTitle') }" class="material-symbols text-base pl-px">{{ sortDesc ? 'arrow_drop_down' : 'arrow_drop_up' }}</span>
|
</div>
|
||||||
</div>
|
</th>
|
||||||
</th>
|
<th v-if="!numSelected" class="w-20 min-w-20 text-left hidden md:table-cell">{{ $strings.LabelUser }}</th>
|
||||||
<th v-if="!numSelected" class="w-20 min-w-20 text-left hidden md:table-cell">{{ $strings.LabelUser }}</th>
|
<th v-if="!numSelected" class="w-26 min-w-26 text-left hidden md:table-cell group cursor-pointer" @click.stop="sortColumn('playMethod')">
|
||||||
<th v-if="!numSelected" class="w-26 min-w-26 text-left hidden md:table-cell group cursor-pointer" @click.stop="sortColumn('playMethod')">
|
<div class="inline-flex items-center">
|
||||||
<div class="inline-flex items-center">
|
{{ $strings.LabelPlayMethod }} <span :class="{ 'opacity-0 group-hover:opacity-30': !isSortSelected('playMethod') }" class="material-symbols text-base pl-px">{{ sortDesc ? 'arrow_drop_down' : 'arrow_drop_up' }}</span>
|
||||||
{{ $strings.LabelPlayMethod }} <span :class="{ 'opacity-0 group-hover:opacity-30': !isSortSelected('playMethod') }" class="material-symbols text-base pl-px">{{ sortDesc ? 'arrow_drop_down' : 'arrow_drop_up' }}</span>
|
</div>
|
||||||
</div>
|
</th>
|
||||||
</th>
|
<th v-if="!numSelected" class="w-32 min-w-32 text-left hidden sm:table-cell">{{ $strings.LabelDeviceInfo }}</th>
|
||||||
<th v-if="!numSelected" class="w-32 min-w-32 text-left hidden sm:table-cell">{{ $strings.LabelDeviceInfo }}</th>
|
<th v-if="!numSelected" class="w-24 min-w-24 sm:w-32 sm:min-w-32 group cursor-pointer" @click.stop="sortColumn('timeListening')">
|
||||||
<th v-if="!numSelected" class="w-24 min-w-24 sm:w-32 sm:min-w-32 group cursor-pointer" @click.stop="sortColumn('timeListening')">
|
<div class="inline-flex items-center">
|
||||||
<div class="inline-flex items-center">
|
{{ $strings.LabelTimeListened }} <span :class="{ 'opacity-0 group-hover:opacity-30': !isSortSelected('timeListening') }" class="material-symbols text-base pl-px hidden sm:inline-block">{{ sortDesc ? 'arrow_drop_down' : 'arrow_drop_up' }}</span>
|
||||||
{{ $strings.LabelTimeListened }} <span :class="{ 'opacity-0 group-hover:opacity-30': !isSortSelected('timeListening') }" class="material-symbols text-base pl-px hidden sm:inline-block">{{ sortDesc ? 'arrow_drop_down' : 'arrow_drop_up' }}</span>
|
</div>
|
||||||
</div>
|
</th>
|
||||||
</th>
|
<th v-if="!numSelected" class="w-24 min-w-24 group cursor-pointer" @click.stop="sortColumn('currentTime')">
|
||||||
<th v-if="!numSelected" class="w-24 min-w-24 group cursor-pointer" @click.stop="sortColumn('currentTime')">
|
<div class="inline-flex items-center">
|
||||||
<div class="inline-flex items-center">
|
{{ $strings.LabelLastTime }} <span :class="{ 'opacity-0 group-hover:opacity-30': !isSortSelected('currentTime') }" class="material-symbols text-base pl-px hidden sm:inline-block">{{ sortDesc ? 'arrow_drop_down' : 'arrow_drop_up' }}</span>
|
||||||
{{ $strings.LabelLastTime }} <span :class="{ 'opacity-0 group-hover:opacity-30': !isSortSelected('currentTime') }" class="material-symbols text-base pl-px hidden sm:inline-block">{{ sortDesc ? 'arrow_drop_down' : 'arrow_drop_up' }}</span>
|
</div>
|
||||||
</div>
|
</th>
|
||||||
</th>
|
<th v-if="!numSelected" class="grow hidden sm:table-cell cursor-pointer group" @click.stop="sortColumn('updatedAt')">
|
||||||
<th v-if="!numSelected" class="grow hidden sm:table-cell cursor-pointer group" @click.stop="sortColumn('updatedAt')">
|
<div class="inline-flex items-center">
|
||||||
<div class="inline-flex items-center">
|
{{ $strings.LabelLastUpdate }} <span :class="{ 'opacity-0 group-hover:opacity-30': !isSortSelected('updatedAt') }" class="material-symbols text-base pl-px">{{ sortDesc ? 'arrow_drop_down' : 'arrow_drop_up' }}</span>
|
||||||
{{ $strings.LabelLastUpdate }} <span :class="{ 'opacity-0 group-hover:opacity-30': !isSortSelected('updatedAt') }" class="material-symbols text-base pl-px">{{ sortDesc ? 'arrow_drop_down' : 'arrow_drop_up' }}</span>
|
</div>
|
||||||
</div>
|
</th>
|
||||||
</th>
|
</tr>
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr v-for="session in listeningSessions" :key="session.id" :class="{ selected: session.selected }" class="cursor-pointer" @click="clickSessionRow(session)">
|
<tr v-for="session in listeningSessions" :key="session.id" :class="{ selected: session.selected }" class="cursor-pointer" @click="clickSessionRow(session)">
|
||||||
<td class="hidden md:table-cell py-1 max-w-6 relative">
|
<td class="hidden md:table-cell py-1 max-w-6 relative">
|
||||||
<ui-checkbox v-model="session.selected" small checkbox-bg="bg" />
|
<ui-checkbox v-model="session.selected" small checkbox-bg="bg" />
|
||||||
<!-- overlay of the checkbox so that the entire box is clickable -->
|
<!-- overlay of the checkbox so that the entire box is clickable -->
|
||||||
<div class="absolute inset-0 w-full h-full" @click.stop="session.selected = !session.selected" />
|
<div class="absolute inset-0 w-full h-full" @click.stop="session.selected = !session.selected" />
|
||||||
</td>
|
</td>
|
||||||
<td class="py-1 grow sm:grow-0 sm:w-48 sm:max-w-48">
|
<td class="py-1 grow sm:grow-0 sm:w-48 sm:max-w-48">
|
||||||
<p class="text-xs text-gray-200 truncate">{{ session.displayTitle }}</p>
|
<p class="text-xs text-gray-200 truncate">{{ session.displayTitle }}</p>
|
||||||
<p class="text-xs text-gray-400 truncate">{{ session.displayAuthor }}</p>
|
<p class="text-xs text-gray-400 truncate">{{ session.displayAuthor }}</p>
|
||||||
</td>
|
</td>
|
||||||
<td class="hidden md:table-cell w-20 min-w-20">
|
<td class="hidden md:table-cell w-20 min-w-20">
|
||||||
<p v-if="filteredUserUsername" class="text-xs">{{ filteredUserUsername }}</p>
|
<p v-if="filteredUserUsername" class="text-xs">{{ filteredUserUsername }}</p>
|
||||||
<p v-else class="text-xs">{{ session.user ? session.user.username : 'N/A' }}</p>
|
<p v-else class="text-xs">{{ session.user ? session.user.username : 'N/A' }}</p>
|
||||||
</td>
|
</td>
|
||||||
<td class="hidden md:table-cell w-26 min-w-26">
|
<td class="hidden md:table-cell w-26 min-w-26">
|
||||||
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
|
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
|
||||||
</td>
|
</td>
|
||||||
<td class="hidden sm:table-cell max-w-32 min-w-32">
|
<td class="hidden sm:table-cell max-w-32 min-w-32">
|
||||||
<p class="text-xs truncate" v-html="getDeviceInfoString(session.deviceInfo)" />
|
<p class="text-xs truncate" v-html="getDeviceInfoString(session.deviceInfo)" />
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center w-24 min-w-24 sm:w-32 sm:min-w-32">
|
<td class="text-center w-24 min-w-24 sm:w-32 sm:min-w-32">
|
||||||
<p class="text-xs font-mono">{{ $elapsedPrettyLocalized(session.timeListening) }}</p>
|
<p class="text-xs font-mono">{{ $elapsedPretty(session.timeListening) }}</p>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center hover:underline w-24 min-w-24" @click.stop="clickCurrentTime(session)">
|
<td class="text-center hover:underline w-24 min-w-24" @click.stop="clickCurrentTime(session)">
|
||||||
<p class="text-xs font-mono">{{ $secondsToTimestamp(session.currentTime) }}</p>
|
<p class="text-xs font-mono">{{ $secondsToTimestamp(session.currentTime) }}</p>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center hidden sm:table-cell">
|
<td class="text-center hidden sm:table-cell">
|
||||||
<ui-tooltip v-if="session.updatedAt" direction="top" :text="$formatDatetime(session.updatedAt, dateFormat, timeFormat)">
|
<ui-tooltip v-if="session.updatedAt" direction="top" :text="$formatDatetime(session.updatedAt, dateFormat, timeFormat)">
|
||||||
<p class="text-xs text-gray-200">{{ $dateDistanceFromNow(session.updatedAt) }}</p>
|
<p class="text-xs text-gray-200">{{ $dateDistanceFromNow(session.updatedAt) }}</p>
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
<!-- table bottom options -->
|
<!-- table bottom options -->
|
||||||
<div class="flex items-center my-2">
|
<div class="flex items-center my-2">
|
||||||
<div class="grow" />
|
<div class="grow" />
|
||||||
@ -252,10 +250,10 @@ export default {
|
|||||||
return user?.username || null
|
return user?.username || null
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
timeFormat() {
|
timeFormat() {
|
||||||
return this.$store.getters['getServerSetting']('timeFormat')
|
return this.$store.state.serverSettings.timeFormat
|
||||||
},
|
},
|
||||||
numSelected() {
|
numSelected() {
|
||||||
return this.listeningSessions.filter((s) => s.selected).length
|
return this.listeningSessions.filter((s) => s.selected).length
|
||||||
|
@ -13,10 +13,8 @@
|
|||||||
<widgets-online-indicator :value="!!userOnline" />
|
<widgets-online-indicator :value="!!userOnline" />
|
||||||
<h1 class="text-xl pl-2">{{ username }}</h1>
|
<h1 class="text-xl pl-2">{{ username }}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="legacyToken" class="text-xs space-y-2 mt-4">
|
<div v-if="userToken" class="flex text-xs mt-4">
|
||||||
<ui-text-input-with-label label="Legacy API Token" :value="legacyToken" readonly show-copy />
|
<ui-text-input-with-label :label="$strings.LabelApiToken" :value="userToken" readonly show-copy />
|
||||||
|
|
||||||
<p class="text-warning" v-html="$strings.MessageAuthenticationLegacyTokenWarning" />
|
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full h-px bg-white/10 my-2" />
|
<div class="w-full h-px bg-white/10 my-2" />
|
||||||
<div class="py-2">
|
<div class="py-2">
|
||||||
@ -102,11 +100,8 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
legacyToken() {
|
|
||||||
return this.user.token
|
|
||||||
},
|
|
||||||
userToken() {
|
userToken() {
|
||||||
return this.user.accessToken
|
return this.user.token
|
||||||
},
|
},
|
||||||
bookCoverAspectRatio() {
|
bookCoverAspectRatio() {
|
||||||
return this.$store.getters['libraries/getBookCoverAspectRatio']
|
return this.$store.getters['libraries/getBookCoverAspectRatio']
|
||||||
@ -134,10 +129,10 @@ export default {
|
|||||||
return this.listeningSessions.sessions[0]
|
return this.listeningSessions.sessions[0]
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
timeFormat() {
|
timeFormat() {
|
||||||
return this.$store.getters['getServerSetting']('timeFormat')
|
return this.$store.state.serverSettings.timeFormat
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -19,41 +19,39 @@
|
|||||||
<div class="py-2">
|
<div class="py-2">
|
||||||
<h1 class="text-lg mb-2 text-white/90 px-2 sm:px-0">{{ $strings.HeaderListeningSessions }}</h1>
|
<h1 class="text-lg mb-2 text-white/90 px-2 sm:px-0">{{ $strings.HeaderListeningSessions }}</h1>
|
||||||
<div v-if="listeningSessions.length">
|
<div v-if="listeningSessions.length">
|
||||||
<div class="overflow-x-auto">
|
<table class="userSessionsTable">
|
||||||
<table class="userSessionsTable">
|
<tr class="bg-primary/40">
|
||||||
<tr class="bg-primary/40">
|
<th class="w-48 min-w-48 text-left">{{ $strings.LabelItem }}</th>
|
||||||
<th class="w-48 min-w-48 text-left">{{ $strings.LabelItem }}</th>
|
<th class="w-32 min-w-32 text-left hidden md:table-cell">{{ $strings.LabelPlayMethod }}</th>
|
||||||
<th class="w-32 min-w-32 text-left hidden md:table-cell">{{ $strings.LabelPlayMethod }}</th>
|
<th class="w-32 min-w-32 text-left hidden sm:table-cell">{{ $strings.LabelDeviceInfo }}</th>
|
||||||
<th class="w-32 min-w-32 text-left hidden sm:table-cell">{{ $strings.LabelDeviceInfo }}</th>
|
<th class="w-32 min-w-32">{{ $strings.LabelTimeListened }}</th>
|
||||||
<th class="w-32 min-w-32">{{ $strings.LabelTimeListened }}</th>
|
<th class="w-16 min-w-16">{{ $strings.LabelLastTime }}</th>
|
||||||
<th class="w-16 min-w-16">{{ $strings.LabelLastTime }}</th>
|
<th class="grow hidden sm:table-cell">{{ $strings.LabelLastUpdate }}</th>
|
||||||
<th class="grow hidden sm:table-cell">{{ $strings.LabelLastUpdate }}</th>
|
</tr>
|
||||||
</tr>
|
<tr v-for="session in listeningSessions" :key="session.id" class="cursor-pointer" @click="showSession(session)">
|
||||||
<tr v-for="session in listeningSessions" :key="session.id" class="cursor-pointer" @click="showSession(session)">
|
<td class="py-1 max-w-48">
|
||||||
<td class="py-1 max-w-48">
|
<p class="text-xs text-gray-200 truncate">{{ session.displayTitle }}</p>
|
||||||
<p class="text-xs text-gray-200 truncate">{{ session.displayTitle }}</p>
|
<p class="text-xs text-gray-400 truncate">{{ session.displayAuthor }}</p>
|
||||||
<p class="text-xs text-gray-400 truncate">{{ session.displayAuthor }}</p>
|
</td>
|
||||||
</td>
|
<td class="hidden md:table-cell">
|
||||||
<td class="hidden md:table-cell">
|
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
|
||||||
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
|
</td>
|
||||||
</td>
|
<td class="hidden sm:table-cell min-w-32 max-w-32">
|
||||||
<td class="hidden sm:table-cell min-w-32 max-w-32">
|
<p class="text-xs truncate" v-html="getDeviceInfoString(session.deviceInfo)" />
|
||||||
<p class="text-xs truncate" v-html="getDeviceInfoString(session.deviceInfo)" />
|
</td>
|
||||||
</td>
|
<td class="text-center">
|
||||||
<td class="text-center">
|
<p class="text-xs font-mono">{{ $elapsedPretty(session.timeListening) }}</p>
|
||||||
<p class="text-xs font-mono">{{ $elapsedPrettyLocalized(session.timeListening) }}</p>
|
</td>
|
||||||
</td>
|
<td class="text-center hover:underline" @click.stop="clickCurrentTime(session)">
|
||||||
<td class="text-center hover:underline" @click.stop="clickCurrentTime(session)">
|
<p class="text-xs font-mono">{{ $secondsToTimestamp(session.currentTime) }}</p>
|
||||||
<p class="text-xs font-mono">{{ $secondsToTimestamp(session.currentTime) }}</p>
|
</td>
|
||||||
</td>
|
<td class="text-center hidden sm:table-cell">
|
||||||
<td class="text-center hidden sm:table-cell">
|
<ui-tooltip v-if="session.updatedAt" direction="top" :text="$formatDatetime(session.updatedAt, dateFormat, timeFormat)">
|
||||||
<ui-tooltip v-if="session.updatedAt" direction="top" :text="$formatDatetime(session.updatedAt, dateFormat, timeFormat)">
|
<p class="text-xs text-gray-200">{{ $dateDistanceFromNow(session.updatedAt) }}</p>
|
||||||
<p class="text-xs text-gray-200">{{ $dateDistanceFromNow(session.updatedAt) }}</p>
|
</ui-tooltip>
|
||||||
</ui-tooltip>
|
</td>
|
||||||
</td>
|
</tr>
|
||||||
</tr>
|
</table>
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="flex items-center justify-end py-1">
|
<div class="flex items-center justify-end py-1">
|
||||||
<ui-icon-btn icon="arrow_back_ios_new" :size="7" icon-font-size="1rem" class="mx-1" :disabled="currentPage === 0" @click="prevPage" />
|
<ui-icon-btn icon="arrow_back_ios_new" :size="7" icon-font-size="1rem" class="mx-1" :disabled="currentPage === 0" @click="prevPage" />
|
||||||
<p class="text-sm mx-1">{{ $getString('LabelPaginationPageXOfY', [currentPage + 1, numPages]) }}</p>
|
<p class="text-sm mx-1">{{ $getString('LabelPaginationPageXOfY', [currentPage + 1, numPages]) }}</p>
|
||||||
@ -100,10 +98,10 @@ export default {
|
|||||||
return this.$store.getters['users/getIsUserOnline'](this.user.id)
|
return this.$store.getters['users/getIsUserOnline'](this.user.id)
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
timeFormat() {
|
timeFormat() {
|
||||||
return this.$store.getters['getServerSetting']('timeFormat')
|
return this.$store.state.serverSettings.timeFormat
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -193,7 +193,7 @@ export default {
|
|||||||
return `${process.env.serverUrl}/api/items/${this.libraryItemId}/download?token=${this.userToken}`
|
return `${process.env.serverUrl}/api/items/${this.libraryItemId}/download?token=${this.userToken}`
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
userIsAdminOrUp() {
|
userIsAdminOrUp() {
|
||||||
return this.$store.getters['user/getIsAdminOrUp']
|
return this.$store.getters['user/getIsAdminOrUp']
|
||||||
@ -819,17 +819,6 @@ export default {
|
|||||||
-webkit-line-clamp: 4;
|
-webkit-line-clamp: 4;
|
||||||
max-height: calc(6 * 1lh);
|
max-height: calc(6 * 1lh);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Safari-specific fix for the description clamping */
|
|
||||||
@supports (-webkit-touch-callout: none) {
|
|
||||||
#item-description {
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
overflow: hidden;
|
|
||||||
max-height: calc(6 * 1lh);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#item-description.show-full {
|
#item-description.show-full {
|
||||||
-webkit-line-clamp: unset;
|
-webkit-line-clamp: unset;
|
||||||
max-height: 999rem;
|
max-height: 999rem;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr v-for="narrator in narrators" :key="narrator.id">
|
<tr v-for="narrator in narrators" :key="narrator.id">
|
||||||
<td>
|
<td>
|
||||||
<nuxt-link v-if="selectedNarrator?.id !== narrator.id" :to="`/library/${currentLibraryId}/bookshelf?filter=narrators.${narrator.id}`" class="text-sm md:text-base text-gray-100 hover:underline">{{ narrator.name }}</nuxt-link>
|
<p v-if="selectedNarrator?.id !== narrator.id" class="text-sm md:text-base text-gray-100">{{ narrator.name }}</p>
|
||||||
<form v-else @submit.prevent="saveClick">
|
<form v-else @submit.prevent="saveClick">
|
||||||
<ui-text-input v-model="newNarratorName" />
|
<ui-text-input v-model="newNarratorName" />
|
||||||
</form>
|
</form>
|
||||||
|
@ -141,7 +141,7 @@ export default {
|
|||||||
return episodeIds
|
return episodeIds
|
||||||
},
|
},
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.getters['getServerSetting']('dateFormat')
|
return this.$store.state.serverSettings.dateFormat
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -22,7 +22,6 @@ export default {
|
|||||||
})
|
})
|
||||||
results = {
|
results = {
|
||||||
podcasts: results?.podcast || [],
|
podcasts: results?.podcast || [],
|
||||||
episodes: results?.episodes || [],
|
|
||||||
books: results?.book || [],
|
books: results?.book || [],
|
||||||
authors: results?.authors || [],
|
authors: results?.authors || [],
|
||||||
series: results?.series || [],
|
series: results?.series || [],
|
||||||
@ -62,7 +61,6 @@ export default {
|
|||||||
})
|
})
|
||||||
this.results = {
|
this.results = {
|
||||||
podcasts: results?.podcast || [],
|
podcasts: results?.podcast || [],
|
||||||
episodes: results?.episodes || [],
|
|
||||||
books: results?.book || [],
|
books: results?.book || [],
|
||||||
authors: results?.authors || [],
|
authors: results?.authors || [],
|
||||||
series: results?.series || [],
|
series: results?.series || [],
|
||||||
|
@ -40,15 +40,6 @@
|
|||||||
|
|
||||||
<p v-if="error" class="text-error text-center py-2">{{ error }}</p>
|
<p v-if="error" class="text-error text-center py-2">{{ error }}</p>
|
||||||
|
|
||||||
<div v-if="showNewAuthSystemMessage" class="mb-4">
|
|
||||||
<widgets-alert type="warning">
|
|
||||||
<div>
|
|
||||||
<p>{{ $strings.MessageAuthenticationSecurityMessage }}</p>
|
|
||||||
<a v-if="showNewAuthSystemAdminMessage" href="https://github.com/advplyr/audiobookshelf/discussions/4460" target="_blank" class="underline">{{ $strings.LabelMoreInfo }}</a>
|
|
||||||
</div>
|
|
||||||
</widgets-alert>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<form v-show="login_local" @submit.prevent="submitForm">
|
<form v-show="login_local" @submit.prevent="submitForm">
|
||||||
<label class="text-xs text-gray-300 uppercase">{{ $strings.LabelUsername }}</label>
|
<label class="text-xs text-gray-300 uppercase">{{ $strings.LabelUsername }}</label>
|
||||||
<ui-text-input v-model.trim="username" :disabled="processing" class="mb-3 w-full" inputName="username" />
|
<ui-text-input v-model.trim="username" :disabled="processing" class="mb-3 w-full" inputName="username" />
|
||||||
@ -94,10 +85,7 @@ export default {
|
|||||||
MetadataPath: '',
|
MetadataPath: '',
|
||||||
login_local: true,
|
login_local: true,
|
||||||
login_openid: false,
|
login_openid: false,
|
||||||
authFormData: null,
|
authFormData: null
|
||||||
// New JWT auth system re-login flags
|
|
||||||
showNewAuthSystemMessage: false,
|
|
||||||
showNewAuthSystemAdminMessage: false
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@ -191,17 +179,11 @@ export default {
|
|||||||
|
|
||||||
this.$store.commit('libraries/setCurrentLibrary', userDefaultLibraryId)
|
this.$store.commit('libraries/setCurrentLibrary', userDefaultLibraryId)
|
||||||
this.$store.commit('user/setUser', user)
|
this.$store.commit('user/setUser', user)
|
||||||
// Access token only returned from login, not authorize
|
|
||||||
if (user.accessToken) {
|
|
||||||
this.$store.commit('user/setAccessToken', user.accessToken)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.$store.dispatch('user/loadUserSettings')
|
this.$store.dispatch('user/loadUserSettings')
|
||||||
},
|
},
|
||||||
async submitForm() {
|
async submitForm() {
|
||||||
this.error = null
|
this.error = null
|
||||||
this.showNewAuthSystemMessage = false
|
|
||||||
this.showNewAuthSystemAdminMessage = false
|
|
||||||
this.processing = true
|
this.processing = true
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
@ -228,8 +210,6 @@ export default {
|
|||||||
|
|
||||||
this.processing = true
|
this.processing = true
|
||||||
|
|
||||||
this.$store.commit('user/setAccessToken', token)
|
|
||||||
|
|
||||||
return this.$axios
|
return this.$axios
|
||||||
.$post('/api/authorize', null, {
|
.$post('/api/authorize', null, {
|
||||||
headers: {
|
headers: {
|
||||||
@ -237,24 +217,14 @@ export default {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
// Force re-login if user is using an old token with no expiration
|
|
||||||
if (res.user.isOldToken) {
|
|
||||||
this.username = res.user.username
|
|
||||||
this.showNewAuthSystemMessage = true
|
|
||||||
// Admin user sees link to github discussion
|
|
||||||
this.showNewAuthSystemAdminMessage = res.user.type === 'admin' || res.user.type === 'root'
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setUser(res)
|
this.setUser(res)
|
||||||
|
this.processing = false
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Authorize error', error)
|
console.error('Authorize error', error)
|
||||||
return false
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
this.processing = false
|
this.processing = false
|
||||||
|
return false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
checkStatus() {
|
checkStatus() {
|
||||||
@ -310,9 +280,8 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
// Token passed as query parameter after successful oidc login
|
if (this.$route.query?.setToken) {
|
||||||
if (this.$route.query?.accessToken) {
|
localStorage.setItem('token', this.$route.query.setToken)
|
||||||
localStorage.setItem('token', this.$route.query.accessToken)
|
|
||||||
}
|
}
|
||||||
if (localStorage.getItem('token')) {
|
if (localStorage.getItem('token')) {
|
||||||
if (await this.checkAuth()) return // if valid user no need to check status
|
if (await this.checkAuth()) return // if valid user no need to check status
|
||||||
|
@ -359,14 +359,15 @@ export default {
|
|||||||
// Check if path already exists before starting upload
|
// Check if path already exists before starting upload
|
||||||
// uploading fails if path already exists
|
// uploading fails if path already exists
|
||||||
for (const item of items) {
|
for (const item of items) {
|
||||||
|
const filepath = Path.join(this.selectedFolder.fullPath, item.directory)
|
||||||
const exists = await this.$axios
|
const exists = await this.$axios
|
||||||
.$post(`/api/filesystem/pathexists`, { directory: item.directory, folderPath: this.selectedFolder.fullPath })
|
.$post(`/api/filesystem/pathexists`, { filepath, directory: item.directory, folderPath: this.selectedFolder.fullPath })
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
if (data.exists) {
|
if (data.exists) {
|
||||||
if (data.libraryItemTitle) {
|
if (data.libraryItemTitle) {
|
||||||
this.$toast.error(this.$getString('ToastUploaderItemExistsInSubdirectoryError', [data.libraryItemTitle]))
|
this.$toast.error(this.$getString('ToastUploaderItemExistsInSubdirectoryError', [data.libraryItemTitle]))
|
||||||
} else {
|
} else {
|
||||||
this.$toast.error(this.$getString('ToastUploaderFilepathExistsError', [Path.join(this.selectedFolder.fullPath, item.directory)]))
|
this.$toast.error(this.$getString('ToastUploaderFilepathExistsError', [filepath]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return data.exists
|
return data.exists
|
||||||
|
@ -1,19 +1,4 @@
|
|||||||
export default function ({ $axios, store, $root, app }) {
|
export default function ({ $axios, store, $config }) {
|
||||||
// Track if we're currently refreshing to prevent multiple refresh attempts
|
|
||||||
let isRefreshing = false
|
|
||||||
let failedQueue = []
|
|
||||||
|
|
||||||
const processQueue = (error, token = null) => {
|
|
||||||
failedQueue.forEach(({ resolve, reject }) => {
|
|
||||||
if (error) {
|
|
||||||
reject(error)
|
|
||||||
} else {
|
|
||||||
resolve(token)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
failedQueue = []
|
|
||||||
}
|
|
||||||
|
|
||||||
$axios.onRequest((config) => {
|
$axios.onRequest((config) => {
|
||||||
if (!config.url) {
|
if (!config.url) {
|
||||||
console.error('Axios request invalid config', config)
|
console.error('Axios request invalid config', config)
|
||||||
@ -22,7 +7,7 @@ export default function ({ $axios, store, $root, app }) {
|
|||||||
if (config.url.startsWith('http:') || config.url.startsWith('https:')) {
|
if (config.url.startsWith('http:') || config.url.startsWith('https:')) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const bearerToken = store.getters['user/getToken']
|
const bearerToken = store.state.user.user?.token || null
|
||||||
if (bearerToken) {
|
if (bearerToken) {
|
||||||
config.headers.common['Authorization'] = `Bearer ${bearerToken}`
|
config.headers.common['Authorization'] = `Bearer ${bearerToken}`
|
||||||
}
|
}
|
||||||
@ -32,79 +17,9 @@ export default function ({ $axios, store, $root, app }) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
$axios.onError(async (error) => {
|
$axios.onError((error) => {
|
||||||
const originalRequest = error.config
|
|
||||||
const code = parseInt(error.response && error.response.status)
|
const code = parseInt(error.response && error.response.status)
|
||||||
const message = error.response ? error.response.data || 'Unknown Error' : 'Unknown Error'
|
const message = error.response ? error.response.data || 'Unknown Error' : 'Unknown Error'
|
||||||
|
|
||||||
console.error('Axios error', code, message)
|
console.error('Axios error', code, message)
|
||||||
|
|
||||||
// Handle 401 Unauthorized (token expired)
|
|
||||||
if (code === 401 && !originalRequest._retry) {
|
|
||||||
// Skip refresh for auth endpoints to prevent infinite loops
|
|
||||||
if (originalRequest.url === '/auth/refresh' || originalRequest.url === '/login') {
|
|
||||||
// Refresh failed or login failed, redirect to login
|
|
||||||
store.commit('user/setUser', null)
|
|
||||||
store.commit('user/setAccessToken', null)
|
|
||||||
app.router.push('/login')
|
|
||||||
return Promise.reject(error)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isRefreshing) {
|
|
||||||
// If already refreshing, queue this request
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
failedQueue.push({ resolve, reject })
|
|
||||||
})
|
|
||||||
.then((token) => {
|
|
||||||
if (!originalRequest.headers) {
|
|
||||||
originalRequest.headers = {}
|
|
||||||
}
|
|
||||||
originalRequest.headers['Authorization'] = `Bearer ${token}`
|
|
||||||
return $axios(originalRequest)
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
return Promise.reject(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
originalRequest._retry = true
|
|
||||||
isRefreshing = true
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Attempt to refresh the token
|
|
||||||
// Updates store if successful, otherwise clears store and throw error
|
|
||||||
const newAccessToken = await store.dispatch('user/refreshToken')
|
|
||||||
if (!newAccessToken) {
|
|
||||||
console.error('No new access token received')
|
|
||||||
return Promise.reject(error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update the original request with new token
|
|
||||||
if (!originalRequest.headers) {
|
|
||||||
originalRequest.headers = {}
|
|
||||||
}
|
|
||||||
originalRequest.headers['Authorization'] = `Bearer ${newAccessToken}`
|
|
||||||
|
|
||||||
// Process any queued requests
|
|
||||||
processQueue(null, newAccessToken)
|
|
||||||
|
|
||||||
// Retry the original request
|
|
||||||
return $axios(originalRequest)
|
|
||||||
} catch (refreshError) {
|
|
||||||
console.error('Token refresh failed:', refreshError)
|
|
||||||
|
|
||||||
// Process queued requests with error
|
|
||||||
processQueue(refreshError, null)
|
|
||||||
|
|
||||||
// Redirect to login
|
|
||||||
app.router.push('/login')
|
|
||||||
|
|
||||||
return Promise.reject(refreshError)
|
|
||||||
} finally {
|
|
||||||
isRefreshing = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.reject(error)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ import { supplant } from './utils'
|
|||||||
const defaultCode = 'en-us'
|
const defaultCode = 'en-us'
|
||||||
|
|
||||||
const languageCodeMap = {
|
const languageCodeMap = {
|
||||||
ar: { label: 'عربي', dateFnsLocale: 'ar' },
|
|
||||||
bg: { label: 'Български', dateFnsLocale: 'bg' },
|
bg: { label: 'Български', dateFnsLocale: 'bg' },
|
||||||
bn: { label: 'বাংলা', dateFnsLocale: 'bn' },
|
bn: { label: 'বাংলা', dateFnsLocale: 'bn' },
|
||||||
ca: { label: 'Català', dateFnsLocale: 'ca' },
|
ca: { label: 'Català', dateFnsLocale: 'ca' },
|
||||||
|
@ -37,48 +37,6 @@ Vue.prototype.$elapsedPretty = (seconds, useFullNames = false, useMilliseconds =
|
|||||||
return `${hours} ${useFullNames ? `hour${hours === 1 ? '' : 's'}` : 'hr'} ${minutes} ${useFullNames ? `minute${minutes === 1 ? '' : 's'}` : 'min'}`
|
return `${hours} ${useFullNames ? `hour${hours === 1 ? '' : 's'}` : 'hr'} ${minutes} ${useFullNames ? `minute${minutes === 1 ? '' : 's'}` : 'min'}`
|
||||||
}
|
}
|
||||||
|
|
||||||
Vue.prototype.$elapsedPrettyLocalized = (seconds, useFullNames = false, useMilliseconds = false) => {
|
|
||||||
if (isNaN(seconds) || seconds === null) return ''
|
|
||||||
|
|
||||||
try {
|
|
||||||
const df = new Intl.DurationFormat(Vue.prototype.$languageCodes.current, {
|
|
||||||
style: useFullNames ? 'long' : 'short'
|
|
||||||
})
|
|
||||||
|
|
||||||
const duration = {}
|
|
||||||
|
|
||||||
if (seconds < 60) {
|
|
||||||
if (useMilliseconds && seconds < 1) {
|
|
||||||
duration.milliseconds = Math.floor(seconds * 1000)
|
|
||||||
} else {
|
|
||||||
duration.seconds = Math.floor(seconds)
|
|
||||||
}
|
|
||||||
} else if (seconds < 3600) {
|
|
||||||
// 1 hour
|
|
||||||
duration.minutes = Math.floor(seconds / 60)
|
|
||||||
} else if (seconds < 86400) {
|
|
||||||
// 1 day
|
|
||||||
duration.hours = Math.floor(seconds / 3600)
|
|
||||||
const minutes = Math.floor((seconds % 3600) / 60)
|
|
||||||
if (minutes > 0) {
|
|
||||||
duration.minutes = minutes
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
duration.days = Math.floor(seconds / 86400)
|
|
||||||
const hours = Math.floor((seconds % 86400) / 3600)
|
|
||||||
if (hours > 0) {
|
|
||||||
duration.hours = hours
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return df.format(duration)
|
|
||||||
} catch (error) {
|
|
||||||
// Handle not supported
|
|
||||||
console.warn('Intl.DurationFormat not supported, not localizing duration')
|
|
||||||
return Vue.prototype.$elapsedPretty(seconds, useFullNames, useMilliseconds)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Vue.prototype.$secondsToTimestamp = (seconds, includeMs = false, alwaysIncludeHours = false) => {
|
Vue.prototype.$secondsToTimestamp = (seconds, includeMs = false, alwaysIncludeHours = false) => {
|
||||||
if (!seconds) {
|
if (!seconds) {
|
||||||
return alwaysIncludeHours ? '00:00:00' : '0:00'
|
return alwaysIncludeHours ? '00:00:00' : '0:00'
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
export const state = () => ({
|
export const state = () => ({
|
||||||
user: null,
|
user: null,
|
||||||
accessToken: null,
|
|
||||||
settings: {
|
settings: {
|
||||||
orderBy: 'media.metadata.title',
|
orderBy: 'media.metadata.title',
|
||||||
orderDesc: false,
|
orderDesc: false,
|
||||||
@ -26,19 +25,19 @@ export const getters = {
|
|||||||
getIsRoot: (state) => state.user && state.user.type === 'root',
|
getIsRoot: (state) => state.user && state.user.type === 'root',
|
||||||
getIsAdminOrUp: (state) => state.user && (state.user.type === 'admin' || state.user.type === 'root'),
|
getIsAdminOrUp: (state) => state.user && (state.user.type === 'admin' || state.user.type === 'root'),
|
||||||
getToken: (state) => {
|
getToken: (state) => {
|
||||||
return state.accessToken || null
|
return state.user?.token || null
|
||||||
},
|
},
|
||||||
getUserMediaProgress:
|
getUserMediaProgress:
|
||||||
(state) =>
|
(state) =>
|
||||||
(libraryItemId, episodeId = null) => {
|
(libraryItemId, episodeId = null) => {
|
||||||
if (!state.user?.mediaProgress) return null
|
if (!state.user.mediaProgress) return null
|
||||||
return state.user.mediaProgress.find((li) => {
|
return state.user.mediaProgress.find((li) => {
|
||||||
if (episodeId && li.episodeId !== episodeId) return false
|
if (episodeId && li.episodeId !== episodeId) return false
|
||||||
return li.libraryItemId == libraryItemId
|
return li.libraryItemId == libraryItemId
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
getUserBookmarksForItem: (state) => (libraryItemId) => {
|
getUserBookmarksForItem: (state) => (libraryItemId) => {
|
||||||
if (!state.user?.bookmarks) return []
|
if (!state.user.bookmarks) return []
|
||||||
return state.user.bookmarks.filter((bm) => bm.libraryItemId === libraryItemId)
|
return state.user.bookmarks.filter((bm) => bm.libraryItemId === libraryItemId)
|
||||||
},
|
},
|
||||||
getUserSetting: (state) => (key) => {
|
getUserSetting: (state) => (key) => {
|
||||||
@ -59,9 +58,6 @@ export const getters = {
|
|||||||
getUserCanAccessAllLibraries: (state) => {
|
getUserCanAccessAllLibraries: (state) => {
|
||||||
return !!state.user?.permissions?.accessAllLibraries
|
return !!state.user?.permissions?.accessAllLibraries
|
||||||
},
|
},
|
||||||
getUserCanAccessExplicitContent: (state) => {
|
|
||||||
return !!state.user?.permissions?.accessExplicitContent
|
|
||||||
},
|
|
||||||
getLibrariesAccessible: (state, getters) => {
|
getLibrariesAccessible: (state, getters) => {
|
||||||
if (!state.user) return []
|
if (!state.user) return []
|
||||||
if (getters.getUserCanAccessAllLibraries) return []
|
if (getters.getUserCanAccessAllLibraries) return []
|
||||||
@ -92,7 +88,7 @@ export const actions = {
|
|||||||
if (state.settings.orderBy == 'media.duration') {
|
if (state.settings.orderBy == 'media.duration') {
|
||||||
settingsUpdate.orderBy = 'media.numTracks'
|
settingsUpdate.orderBy = 'media.numTracks'
|
||||||
}
|
}
|
||||||
if (state.settings.orderBy == 'media.metadata.publishedYear' || state.settings.orderBy == 'progress') {
|
if (state.settings.orderBy == 'media.metadata.publishedYear') {
|
||||||
settingsUpdate.orderBy = 'media.metadata.title'
|
settingsUpdate.orderBy = 'media.metadata.title'
|
||||||
}
|
}
|
||||||
const invalidFilters = ['series', 'authors', 'narrators', 'publishers', 'publishedDecades', 'languages', 'progress', 'issues', 'ebooks', 'abridged']
|
const invalidFilters = ['series', 'authors', 'narrators', 'publishers', 'publishedDecades', 'languages', 'progress', 'issues', 'ebooks', 'abridged']
|
||||||
@ -146,43 +142,22 @@ export const actions = {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to load userSettings from local storage', error)
|
console.error('Failed to load userSettings from local storage', error)
|
||||||
}
|
}
|
||||||
},
|
|
||||||
refreshToken({ state, commit }) {
|
|
||||||
return this.$axios
|
|
||||||
.$post('/auth/refresh')
|
|
||||||
.then(async (response) => {
|
|
||||||
const newAccessToken = response.user.accessToken
|
|
||||||
commit('setUser', response.user)
|
|
||||||
commit('setAccessToken', newAccessToken)
|
|
||||||
// Emit event used to re-authenticate socket in default.vue since $root is not available here
|
|
||||||
if (this.$eventBus) {
|
|
||||||
this.$eventBus.$emit('token_refreshed', newAccessToken)
|
|
||||||
}
|
|
||||||
return newAccessToken
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error('Failed to refresh token', error)
|
|
||||||
commit('setUser', null)
|
|
||||||
commit('setAccessToken', null)
|
|
||||||
// Calling function handles redirect to login
|
|
||||||
throw error
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const mutations = {
|
export const mutations = {
|
||||||
setUser(state, user) {
|
setUser(state, user) {
|
||||||
state.user = user
|
state.user = user
|
||||||
},
|
if (user) {
|
||||||
setAccessToken(state, token) {
|
if (user.token) localStorage.setItem('token', user.token)
|
||||||
if (!token) {
|
|
||||||
localStorage.removeItem('token')
|
|
||||||
state.accessToken = null
|
|
||||||
} else {
|
} else {
|
||||||
state.accessToken = token
|
localStorage.removeItem('token')
|
||||||
localStorage.setItem('token', token)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
setUserToken(state, token) {
|
||||||
|
state.user.token = token
|
||||||
|
localStorage.setItem('token', token)
|
||||||
|
},
|
||||||
updateMediaProgress(state, { id, data }) {
|
updateMediaProgress(state, { id, data }) {
|
||||||
if (!state.user) return
|
if (!state.user) return
|
||||||
if (!data) {
|
if (!data) {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -177,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "Плейлист",
|
"HeaderPlaylist": "Плейлист",
|
||||||
"HeaderPlaylistItems": "Елементи от плейлист",
|
"HeaderPlaylistItems": "Елементи от плейлист",
|
||||||
"HeaderPodcastsToAdd": "Подкасти за Добавяне",
|
"HeaderPodcastsToAdd": "Подкасти за Добавяне",
|
||||||
"HeaderPresets": "Настройки по подразбиране",
|
|
||||||
"HeaderPreviewCover": "Преглед на Корица",
|
"HeaderPreviewCover": "Преглед на Корица",
|
||||||
"HeaderRSSFeedGeneral": "RSS подробности",
|
"HeaderRSSFeedGeneral": "RSS подробности",
|
||||||
"HeaderRSSFeedIsOpen": "RSS емисията е отворена",
|
"HeaderRSSFeedIsOpen": "RSS емисията е отворена",
|
||||||
@ -220,7 +219,6 @@
|
|||||||
"LabelAccountTypeAdmin": "Администратор",
|
"LabelAccountTypeAdmin": "Администратор",
|
||||||
"LabelAccountTypeGuest": "Гост",
|
"LabelAccountTypeGuest": "Гост",
|
||||||
"LabelAccountTypeUser": "Потребител",
|
"LabelAccountTypeUser": "Потребител",
|
||||||
"LabelActivities": "Дейности",
|
|
||||||
"LabelActivity": "Дейност",
|
"LabelActivity": "Дейност",
|
||||||
"LabelAddToCollection": "Добави в Колекция",
|
"LabelAddToCollection": "Добави в Колекция",
|
||||||
"LabelAddToCollectionBatch": "Добави {0} Книги в Колекция",
|
"LabelAddToCollectionBatch": "Добави {0} Книги в Колекция",
|
||||||
@ -255,7 +253,7 @@
|
|||||||
"LabelBackupLocation": "Местоположение на Архив",
|
"LabelBackupLocation": "Местоположение на Архив",
|
||||||
"LabelBackupsEnableAutomaticBackups": "Включи автоматично архивиране",
|
"LabelBackupsEnableAutomaticBackups": "Включи автоматично архивиране",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "Архиви запазени в /metadata/backups",
|
"LabelBackupsEnableAutomaticBackupsHelp": "Архиви запазени в /metadata/backups",
|
||||||
"LabelBackupsMaxBackupSize": "Максимален размер на архива (в GB) (0 за неограничен)",
|
"LabelBackupsMaxBackupSize": "Максимален размер на архива (в GB)",
|
||||||
"LabelBackupsMaxBackupSizeHelp": "За защита срещу грешки в конфигурацията, архивите ще се провалят ако надхвърлят конфигурирания размер.",
|
"LabelBackupsMaxBackupSizeHelp": "За защита срещу грешки в конфигурацията, архивите ще се провалят ако надхвърлят конфигурирания размер.",
|
||||||
"LabelBackupsNumberToKeep": "Брой архиви за запазване",
|
"LabelBackupsNumberToKeep": "Брой архиви за запазване",
|
||||||
"LabelBackupsNumberToKeepHelp": "Само 1 архив ще бъде премахнат на веднъж, така че ако вече имате повече архиви от това трябва да ги премахнете ръчно.",
|
"LabelBackupsNumberToKeepHelp": "Само 1 архив ще бъде премахнат на веднъж, така че ако вече имате повече архиви от това трябва да ги премахнете ръчно.",
|
||||||
@ -285,7 +283,6 @@
|
|||||||
"LabelContinueSeries": "Продължи серии",
|
"LabelContinueSeries": "Продължи серии",
|
||||||
"LabelCover": "Корица",
|
"LabelCover": "Корица",
|
||||||
"LabelCoverImageURL": "URL на Корица",
|
"LabelCoverImageURL": "URL на Корица",
|
||||||
"LabelCoverProvider": "Източник за обложки",
|
|
||||||
"LabelCreatedAt": "Създадено на",
|
"LabelCreatedAt": "Създадено на",
|
||||||
"LabelCronExpression": "Cron израз",
|
"LabelCronExpression": "Cron израз",
|
||||||
"LabelCurrent": "Текущо",
|
"LabelCurrent": "Текущо",
|
||||||
@ -328,20 +325,11 @@
|
|||||||
"LabelEncodingClearItemCache": "Уверете се, че периодично изчиствате кеша на елементите.",
|
"LabelEncodingClearItemCache": "Уверете се, че периодично изчиствате кеша на елементите.",
|
||||||
"LabelEncodingFinishedM4B": "Завършеният M4B файл ще бъде поставен в папката на вашите аудиокниги на:",
|
"LabelEncodingFinishedM4B": "Завършеният M4B файл ще бъде поставен в папката на вашите аудиокниги на:",
|
||||||
"LabelEncodingInfoEmbedded": "Метаданните ще бъдат вградени в аудио траковете в папката на вашите аудиокниги.",
|
"LabelEncodingInfoEmbedded": "Метаданните ще бъдат вградени в аудио траковете в папката на вашите аудиокниги.",
|
||||||
"LabelEncodingStartedNavigation": "Когато задачата е стартирана, можете да смените тази страница.",
|
|
||||||
"LabelEncodingTimeWarning": "Кодирането може да отнеме до 30 минути.",
|
|
||||||
"LabelEncodingWarningAdvancedSettings": "Внимание: Не променяйте тези настройки, ако не сте запознати с ffmpeg настройките за кодиране.",
|
|
||||||
"LabelEncodingWatcherDisabled": "Ако сте изключили наблюдението на папки, ще е нужно да сканирате повторно аудио книгата.",
|
|
||||||
"LabelEnd": "Край",
|
"LabelEnd": "Край",
|
||||||
"LabelEndOfChapter": "Край на глава",
|
"LabelEndOfChapter": "Край на глава",
|
||||||
"LabelEpisode": "Епизод",
|
"LabelEpisode": "Епизод",
|
||||||
"LabelEpisodeNotLinkedToRssFeed": "Епизодът не е свързан с RSS канал",
|
|
||||||
"LabelEpisodeNumber": "Епизод #{0}",
|
|
||||||
"LabelEpisodeTitle": "Заглавие на Епизод",
|
"LabelEpisodeTitle": "Заглавие на Епизод",
|
||||||
"LabelEpisodeType": "Тип на Епизод",
|
"LabelEpisodeType": "Тип на Епизод",
|
||||||
"LabelEpisodeUrlFromRssFeed": "URL адрес на епизод от RSS канал",
|
|
||||||
"LabelEpisodes": "Епизоди",
|
|
||||||
"LabelEpisodic": "Епизодичен",
|
|
||||||
"LabelExample": "Пример",
|
"LabelExample": "Пример",
|
||||||
"LabelExpandSeries": "Покажи сериите",
|
"LabelExpandSeries": "Покажи сериите",
|
||||||
"LabelExpandSubSeries": "Покажи съб сериите",
|
"LabelExpandSubSeries": "Покажи съб сериите",
|
||||||
@ -353,9 +341,7 @@
|
|||||||
"LabelFetchingMetadata": "Взимане на Метаданни",
|
"LabelFetchingMetadata": "Взимане на Метаданни",
|
||||||
"LabelFile": "Файл",
|
"LabelFile": "Файл",
|
||||||
"LabelFileBirthtime": "Дата на създаване на файла",
|
"LabelFileBirthtime": "Дата на създаване на файла",
|
||||||
"LabelFileBornDate": "Роден {0}",
|
|
||||||
"LabelFileModified": "Дата на модификация на файла",
|
"LabelFileModified": "Дата на модификация на файла",
|
||||||
"LabelFileModifiedDate": "Променен {0}",
|
|
||||||
"LabelFilename": "Име на файла",
|
"LabelFilename": "Име на файла",
|
||||||
"LabelFilterByUser": "Филтриране по Потребител",
|
"LabelFilterByUser": "Филтриране по Потребител",
|
||||||
"LabelFindEpisodes": "Намери Епизоди",
|
"LabelFindEpisodes": "Намери Епизоди",
|
||||||
@ -369,17 +355,14 @@
|
|||||||
"LabelFontScale": "Мащаб на шрифта",
|
"LabelFontScale": "Мащаб на шрифта",
|
||||||
"LabelFontStrikethrough": "Зачертан",
|
"LabelFontStrikethrough": "Зачертан",
|
||||||
"LabelFormat": "Формат",
|
"LabelFormat": "Формат",
|
||||||
"LabelFull": "Пълен",
|
|
||||||
"LabelGenre": "Жанр",
|
"LabelGenre": "Жанр",
|
||||||
"LabelGenres": "Жанрове",
|
"LabelGenres": "Жанрове",
|
||||||
"LabelHardDeleteFile": "Пълно Изтриване на Файл",
|
"LabelHardDeleteFile": "Пълно Изтриване на Файл",
|
||||||
"LabelHasEbook": "Има е-книга",
|
"LabelHasEbook": "Има е-книга",
|
||||||
"LabelHasSupplementaryEbook": "Има допълнителна е-книга",
|
"LabelHasSupplementaryEbook": "Има допълнителна е-книга",
|
||||||
"LabelHideSubtitles": "Скрий субтитри",
|
|
||||||
"LabelHighestPriority": "Най-висок Приоритет",
|
"LabelHighestPriority": "Най-висок Приоритет",
|
||||||
"LabelHost": "Хост",
|
"LabelHost": "Хост",
|
||||||
"LabelHour": "Час",
|
"LabelHour": "Час",
|
||||||
"LabelHours": "Часа",
|
|
||||||
"LabelIcon": "Икона",
|
"LabelIcon": "Икона",
|
||||||
"LabelImageURLFromTheWeb": "URL на Изображение от Интернет",
|
"LabelImageURLFromTheWeb": "URL на Изображение от Интернет",
|
||||||
"LabelInProgress": "В процес на изпълнение",
|
"LabelInProgress": "В процес на изпълнение",
|
||||||
@ -394,11 +377,8 @@
|
|||||||
"LabelIntervalEvery6Hours": "Всеки 6 часа",
|
"LabelIntervalEvery6Hours": "Всеки 6 часа",
|
||||||
"LabelIntervalEveryDay": "Всеки ден",
|
"LabelIntervalEveryDay": "Всеки ден",
|
||||||
"LabelIntervalEveryHour": "Всеки час",
|
"LabelIntervalEveryHour": "Всеки час",
|
||||||
"LabelIntervalEveryMinute": "Всяка минута",
|
|
||||||
"LabelInvert": "Обърни",
|
"LabelInvert": "Обърни",
|
||||||
"LabelItem": "Елемент",
|
"LabelItem": "Елемент",
|
||||||
"LabelJumpBackwardAmount": "Количество за прескачане назад",
|
|
||||||
"LabelJumpForwardAmount": "Количество за прескачане напред",
|
|
||||||
"LabelLanguage": "Език",
|
"LabelLanguage": "Език",
|
||||||
"LabelLanguageDefaultServer": "Език по подразбиране на сървъра",
|
"LabelLanguageDefaultServer": "Език по подразбиране на сървъра",
|
||||||
"LabelLanguages": "Езици",
|
"LabelLanguages": "Езици",
|
||||||
@ -413,7 +393,6 @@
|
|||||||
"LabelLess": "По-малко",
|
"LabelLess": "По-малко",
|
||||||
"LabelLibrariesAccessibleToUser": "Библиотеки Достъпни за Потребителя",
|
"LabelLibrariesAccessibleToUser": "Библиотеки Достъпни за Потребителя",
|
||||||
"LabelLibrary": "Библиотека",
|
"LabelLibrary": "Библиотека",
|
||||||
"LabelLibraryFilterSublistEmpty": "Не {0}",
|
|
||||||
"LabelLibraryItem": "Елемент на Библиотека",
|
"LabelLibraryItem": "Елемент на Библиотека",
|
||||||
"LabelLibraryName": "Име на Библиотека",
|
"LabelLibraryName": "Име на Библиотека",
|
||||||
"LabelLimit": "Лимит",
|
"LabelLimit": "Лимит",
|
||||||
@ -426,10 +405,6 @@
|
|||||||
"LabelLowestPriority": "Най-нисък Приоритет",
|
"LabelLowestPriority": "Най-нисък Приоритет",
|
||||||
"LabelMatchExistingUsersBy": "Съпостави съществуващи потребители по",
|
"LabelMatchExistingUsersBy": "Съпостави съществуващи потребители по",
|
||||||
"LabelMatchExistingUsersByDescription": "Използва се за свързване на съществуващи потребители. След свързване потребителите ще бъдат съпоставени по уникален идентификатор от вашия доставчик на SSO",
|
"LabelMatchExistingUsersByDescription": "Използва се за свързване на съществуващи потребители. След свързване потребителите ще бъдат съпоставени по уникален идентификатор от вашия доставчик на SSO",
|
||||||
"LabelMaxEpisodesToDownload": "Максимален брой епизоди за сваляне. Използвай 0 за неограничен.",
|
|
||||||
"LabelMaxEpisodesToDownloadPerCheck": "Максимален брой нови епизоди за сваляне за проверка",
|
|
||||||
"LabelMaxEpisodesToKeep": "Максимален брой епизоди за запазване",
|
|
||||||
"LabelMaxEpisodesToKeepHelp": "Стойност 0 указва без максимален лимит. След като нов епизод е автоматично свален, най-старият епизод ще бъде изтрит, ако имате повече от X епизода. Само по един епизод ще бъде изтриван за всеки нов свален такъв.",
|
|
||||||
"LabelMediaPlayer": "Медия Плейър",
|
"LabelMediaPlayer": "Медия Плейър",
|
||||||
"LabelMediaType": "Тип медия",
|
"LabelMediaType": "Тип медия",
|
||||||
"LabelMetaTag": "Мета Таг",
|
"LabelMetaTag": "Мета Таг",
|
||||||
@ -437,7 +412,6 @@
|
|||||||
"LabelMetadataOrderOfPrecedenceDescription": "По-високите източници на метаданни ще заменят по-ниските",
|
"LabelMetadataOrderOfPrecedenceDescription": "По-високите източници на метаданни ще заменят по-ниските",
|
||||||
"LabelMetadataProvider": "Доставчик на Метаданни",
|
"LabelMetadataProvider": "Доставчик на Метаданни",
|
||||||
"LabelMinute": "Минута",
|
"LabelMinute": "Минута",
|
||||||
"LabelMinutes": "Минути",
|
|
||||||
"LabelMissing": "Липсващо",
|
"LabelMissing": "Липсващо",
|
||||||
"LabelMissingEbook": "Няма електронна книга",
|
"LabelMissingEbook": "Няма електронна книга",
|
||||||
"LabelMissingSupplementaryEbook": "Няма допълнителна електронна книга",
|
"LabelMissingSupplementaryEbook": "Няма допълнителна електронна книга",
|
||||||
@ -475,14 +449,11 @@
|
|||||||
"LabelOpenIDGroupClaimDescription": "Име на OpenID твърдението, което съдържа списък с групите на потребителя. Обикновено се нарича <code>groups</code>. <b>Ако е конфигурирано</b>, приложението автоматично ще присвоява роли въз основа на членството на потребителя в групи, при условие че тези групи са наименувани без чувствителност към регистъра като 'admin', 'user' или 'guest' в твърдението. Твърдението трябва да съдържа списък и ако потребителят принадлежи към множество групи, приложението ще присвои ролята, съответстваща на най-високото ниво на достъп. Ако няма съвпадение с група, достъпът ще бъде отказан.",
|
"LabelOpenIDGroupClaimDescription": "Име на OpenID твърдението, което съдържа списък с групите на потребителя. Обикновено се нарича <code>groups</code>. <b>Ако е конфигурирано</b>, приложението автоматично ще присвоява роли въз основа на членството на потребителя в групи, при условие че тези групи са наименувани без чувствителност към регистъра като 'admin', 'user' или 'guest' в твърдението. Твърдението трябва да съдържа списък и ако потребителят принадлежи към множество групи, приложението ще присвои ролята, съответстваща на най-високото ниво на достъп. Ако няма съвпадение с група, достъпът ще бъде отказан.",
|
||||||
"LabelOpenRSSFeed": "Отвори RSS Feed",
|
"LabelOpenRSSFeed": "Отвори RSS Feed",
|
||||||
"LabelOverwrite": "Презапиши",
|
"LabelOverwrite": "Презапиши",
|
||||||
"LabelPaginationPageXOfY": "Страница {0} от {1}",
|
|
||||||
"LabelPassword": "Парола",
|
"LabelPassword": "Парола",
|
||||||
"LabelPath": "Път",
|
"LabelPath": "Път",
|
||||||
"LabelPermanent": "Постоянен",
|
|
||||||
"LabelPermissionsAccessAllLibraries": "Може да достъпи до всички библиотеки",
|
"LabelPermissionsAccessAllLibraries": "Може да достъпи до всички библиотеки",
|
||||||
"LabelPermissionsAccessAllTags": "Може да достъпи всички тагове",
|
"LabelPermissionsAccessAllTags": "Може да достъпи всички тагове",
|
||||||
"LabelPermissionsAccessExplicitContent": "Може да достъпи експлицитно съдържание",
|
"LabelPermissionsAccessExplicitContent": "Може да достъпи експлицитно съдържание",
|
||||||
"LabelPermissionsCreateEreader": "Може да създава електронен четец",
|
|
||||||
"LabelPermissionsDelete": "Може да трие",
|
"LabelPermissionsDelete": "Може да трие",
|
||||||
"LabelPermissionsDownload": "Може да сваля",
|
"LabelPermissionsDownload": "Може да сваля",
|
||||||
"LabelPermissionsUpdate": "Може да обновява",
|
"LabelPermissionsUpdate": "Може да обновява",
|
||||||
@ -490,8 +461,6 @@
|
|||||||
"LabelPersonalYearReview": "Преглед на годината Ви ({0})",
|
"LabelPersonalYearReview": "Преглед на годината Ви ({0})",
|
||||||
"LabelPhotoPathURL": "Път/URL на Снимка",
|
"LabelPhotoPathURL": "Път/URL на Снимка",
|
||||||
"LabelPlayMethod": "Метод на Пускане",
|
"LabelPlayMethod": "Метод на Пускане",
|
||||||
"LabelPlaybackRateIncrementDecrement": "Размер на увеличаване/намаляне при скоростта на възпроизвеждане",
|
|
||||||
"LabelPlayerChapterNumberMarker": "{0} от {1}",
|
|
||||||
"LabelPlaylists": "Плейлисти",
|
"LabelPlaylists": "Плейлисти",
|
||||||
"LabelPodcast": "Подкаст",
|
"LabelPodcast": "Подкаст",
|
||||||
"LabelPodcastSearchRegion": "Регион за Търсене на Подкасти",
|
"LabelPodcastSearchRegion": "Регион за Търсене на Подкасти",
|
||||||
@ -503,12 +472,9 @@
|
|||||||
"LabelPrimaryEbook": "Основна Електронна Книга",
|
"LabelPrimaryEbook": "Основна Електронна Книга",
|
||||||
"LabelProgress": "Прогрес",
|
"LabelProgress": "Прогрес",
|
||||||
"LabelProvider": "Доставчик",
|
"LabelProvider": "Доставчик",
|
||||||
"LabelProviderAuthorizationValue": "Стойност на Authorization Header",
|
|
||||||
"LabelPubDate": "Дата на публикуване",
|
"LabelPubDate": "Дата на публикуване",
|
||||||
"LabelPublishYear": "Година на публикуване",
|
"LabelPublishYear": "Година на публикуване",
|
||||||
"LabelPublishedDate": "Публикувани {0}",
|
"LabelPublishedDate": "Публикувани {0}",
|
||||||
"LabelPublishedDecade": "Десетилетие на публикуване",
|
|
||||||
"LabelPublishedDecades": "Десетилетия на публикуване",
|
|
||||||
"LabelPublisher": "Издател",
|
"LabelPublisher": "Издател",
|
||||||
"LabelPublishers": "Издателство",
|
"LabelPublishers": "Издателство",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Персонализиран имейл на собственика",
|
"LabelRSSFeedCustomOwnerEmail": "Персонализиран имейл на собственика",
|
||||||
@ -518,7 +484,6 @@
|
|||||||
"LabelRSSFeedSlug": "идентификатор на RSS емисия",
|
"LabelRSSFeedSlug": "идентификатор на RSS емисия",
|
||||||
"LabelRSSFeedURL": "URL на RSS емисия",
|
"LabelRSSFeedURL": "URL на RSS емисия",
|
||||||
"LabelRandomly": "Случайно",
|
"LabelRandomly": "Случайно",
|
||||||
"LabelReAddSeriesToContinueListening": "Добави отново в \"Продължете да слушате\"",
|
|
||||||
"LabelRead": "Прочети",
|
"LabelRead": "Прочети",
|
||||||
"LabelReadAgain": "Прочети отново",
|
"LabelReadAgain": "Прочети отново",
|
||||||
"LabelReadEbookWithoutProgress": "Прочети електронната книга без записване прогрес",
|
"LabelReadEbookWithoutProgress": "Прочети електронната книга без записване прогрес",
|
||||||
@ -528,40 +493,29 @@
|
|||||||
"LabelRedo": "Повтори",
|
"LabelRedo": "Повтори",
|
||||||
"LabelRegion": "Регион",
|
"LabelRegion": "Регион",
|
||||||
"LabelReleaseDate": "Дата на Издаване",
|
"LabelReleaseDate": "Дата на Издаване",
|
||||||
"LabelRemoveAllMetadataAbs": "Премахни всички metadata.abs файлове",
|
|
||||||
"LabelRemoveAllMetadataJson": "Премахни всички metadata.json файлове",
|
|
||||||
"LabelRemoveAudibleBranding": "Премахни въведението и заключението на Audible от главите",
|
|
||||||
"LabelRemoveCover": "Премахни Корица",
|
"LabelRemoveCover": "Премахни Корица",
|
||||||
"LabelRemoveMetadataFile": "Премахни файловете с метаданни от папката на библиотеката",
|
|
||||||
"LabelRemoveMetadataFileHelp": "Премахни всички metadata.json и metadata.abs файлове от вашата {0} папка.",
|
|
||||||
"LabelRowsPerPage": "Редове на Страница",
|
"LabelRowsPerPage": "Редове на Страница",
|
||||||
"LabelSearchTerm": "Търси Термин",
|
"LabelSearchTerm": "Търси Термин",
|
||||||
"LabelSearchTitle": "Търси Заглавие",
|
"LabelSearchTitle": "Търси Заглавие",
|
||||||
"LabelSearchTitleOrASIN": "Търси Заглавие или ASIN",
|
"LabelSearchTitleOrASIN": "Търси Заглавие или ASIN",
|
||||||
"LabelSeason": "Сезон",
|
"LabelSeason": "Сезон",
|
||||||
"LabelSeasonNumber": "Сезон #{0}",
|
|
||||||
"LabelSelectAll": "Избери всичко",
|
"LabelSelectAll": "Избери всичко",
|
||||||
"LabelSelectAllEpisodes": "Избери всички епизоди",
|
"LabelSelectAllEpisodes": "Избери всички епизоди",
|
||||||
"LabelSelectEpisodesShowing": "Избери {0} епизоди показани",
|
"LabelSelectEpisodesShowing": "Избери {0} епизоди показани",
|
||||||
"LabelSelectUsers": "Избери Потребители",
|
"LabelSelectUsers": "Избери Потребители",
|
||||||
"LabelSendEbookToDevice": "Изпрати електронна книга до ...",
|
"LabelSendEbookToDevice": "Изпрати електронна книга до ...",
|
||||||
"LabelSequence": "Последователност",
|
"LabelSequence": "Последователност",
|
||||||
"LabelSerial": "Сериал",
|
|
||||||
"LabelSeries": "От сериите",
|
"LabelSeries": "От сериите",
|
||||||
"LabelSeriesName": "Име на Серия",
|
"LabelSeriesName": "Име на Серия",
|
||||||
"LabelSeriesProgress": "Прогрес на Серия",
|
"LabelSeriesProgress": "Прогрес на Серия",
|
||||||
"LabelServerLogLevel": "Ниво на сървърен журнал",
|
|
||||||
"LabelServerYearReview": "Преглед на годината на сървъра ({0})",
|
"LabelServerYearReview": "Преглед на годината на сървъра ({0})",
|
||||||
"LabelSetEbookAsPrimary": "Направи главен",
|
"LabelSetEbookAsPrimary": "Направи главен",
|
||||||
"LabelSetEbookAsSupplementary": "Направи второстепенен",
|
"LabelSetEbookAsSupplementary": "Направи второстепенен",
|
||||||
"LabelSettingsAllowIframe": "Разреши вграждане в iframe",
|
|
||||||
"LabelSettingsAudiobooksOnly": "Само аудиокниги",
|
"LabelSettingsAudiobooksOnly": "Само аудиокниги",
|
||||||
"LabelSettingsAudiobooksOnlyHelp": "Активирането на тази настройка ще игнорира файловете на електронни книги, освен ако не са в папка с аудиокниги, в което случай ще бъдат зададени като допълнителни електронни книги",
|
"LabelSettingsAudiobooksOnlyHelp": "Активирането на тази настройка ще игнорира файловете на електронни книги, освен ако не са в папка с аудиокниги, в което случай ще бъдат зададени като допълнителни електронни книги",
|
||||||
"LabelSettingsBookshelfViewHelp": "Скеуморфен дизайн с дървени рафтове",
|
"LabelSettingsBookshelfViewHelp": "Скеуморфен дизайн с дървени рафтове",
|
||||||
"LabelSettingsChromecastSupport": "Chromecast поддръжка",
|
"LabelSettingsChromecastSupport": "Chromecast поддръжка",
|
||||||
"LabelSettingsDateFormat": "Формат на Дата",
|
"LabelSettingsDateFormat": "Формат на Дата",
|
||||||
"LabelSettingsEnableWatcher": "Автоматично сканиране на библиотеките за промени",
|
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Автоматично сканиране на библиотеката за промени",
|
|
||||||
"LabelSettingsEnableWatcherHelp": "Включва автоматичното добавяне/обновяване на елементи, когато се открият промени във файловете. *Изисква рестарт на сървъра",
|
"LabelSettingsEnableWatcherHelp": "Включва автоматичното добавяне/обновяване на елементи, когато се открият промени във файловете. *Изисква рестарт на сървъра",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Позволи скриптово съдържание в epub-и",
|
"LabelSettingsEpubsAllowScriptedContent": "Позволи скриптово съдържание в epub-и",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Позволи epub файловете да изпълняват скриптове. Препоръчително е да бъде изключено освен ако не се доверявате на източника на epub файловете.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Позволи epub файловете да изпълняват скриптове. Препоръчително е да бъде изключено освен ако не се доверявате на източника на epub файловете.",
|
||||||
@ -573,13 +527,10 @@
|
|||||||
"LabelSettingsHideSingleBookSeriesHelp": "Сериите с една книга ще бъдат скрити от страницата на серията и рафтовете на началната страница.",
|
"LabelSettingsHideSingleBookSeriesHelp": "Сериите с една книга ще бъдат скрити от страницата на серията и рафтовете на началната страница.",
|
||||||
"LabelSettingsHomePageBookshelfView": "Начална страница изглед на рафт",
|
"LabelSettingsHomePageBookshelfView": "Начална страница изглед на рафт",
|
||||||
"LabelSettingsLibraryBookshelfView": "Библиотека изглед на рафт",
|
"LabelSettingsLibraryBookshelfView": "Библиотека изглед на рафт",
|
||||||
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "Процент завършеност е по-голям от",
|
|
||||||
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Оставащо време е по-малко от (секунди)",
|
|
||||||
"LabelSettingsLibraryMarkAsFinishedWhen": "Отбелязване на мултимедиен елемент като завършен когато",
|
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Пропусни предишни книги в Продължи Поредица",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Пропусни предишни книги в Продължи Поредица",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Рафтът на началната страница 'Продължи поредицата' показва първата книга, която не е започната в поредици, в които има поне една завършена книга и няма книги в процес на четене. Активирането на тази настройка ще продължи поредицата от най-далечната завършена книга вместо от първата незапочната книга.",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Рафтът на началната страница 'Продължи поредицата' показва първата книга, която не е започната в поредици, в които има поне една завършена книга и няма книги в процес на четене. Активирането на тази настройка ще продължи поредицата от най-далечната завършена книга вместо от първата незапочната книга.",
|
||||||
"LabelSettingsParseSubtitles": "Извлечи подзаглавия",
|
"LabelSettingsParseSubtitles": "Извлечи подзаглавия",
|
||||||
"LabelSettingsParseSubtitlesHelp": "Извлича подзаглавия от имената на папките на аудио книгите.<br>Подзаглавията трябва да бъдат разделени с \" - \"<br>например \"Заглавие на Книга - Тук е подзаглавието\" има подзаглавие \"Тук е подзаглавието\"",
|
"LabelSettingsParseSubtitlesHelp": "Извлича подзаглавия от имената на папките на аудиокнигите.<br>Подзаглавията трябва да бъдат разделени с \" - \"<br>например \"Заглавие на Книга - Тук е Подзаглавито\" има подзаглавие \"Тук е Подзаглавито\"",
|
||||||
"LabelSettingsPreferMatchedMetadata": "Предпочети съвпадащи метаданни",
|
"LabelSettingsPreferMatchedMetadata": "Предпочети съвпадащи метаданни",
|
||||||
"LabelSettingsPreferMatchedMetadataHelp": "Съвпадащите данни ще заменят детайлите на елемента при използване на Бързо Съпоставяне. По подразбиране Бързото Съпоставяне ще попълни само липсващите детайли.",
|
"LabelSettingsPreferMatchedMetadataHelp": "Съвпадащите данни ще заменят детайлите на елемента при използване на Бързо Съпоставяне. По подразбиране Бързото Съпоставяне ще попълни само липсващите детайли.",
|
||||||
"LabelSettingsSkipMatchingBooksWithASIN": "Пропусни съвпадащи книги, които вече имат ASIN",
|
"LabelSettingsSkipMatchingBooksWithASIN": "Пропусни съвпадащи книги, които вече имат ASIN",
|
||||||
@ -593,19 +544,11 @@
|
|||||||
"LabelSettingsStoreMetadataWithItem": "Запази метаданните с елемента",
|
"LabelSettingsStoreMetadataWithItem": "Запази метаданните с елемента",
|
||||||
"LabelSettingsStoreMetadataWithItemHelp": "По подразбиране метаданните се съхраняват в /metadata/items, като активирате тази настройка метаданните ще се съхраняват в папката на елемента на вашата библиотека",
|
"LabelSettingsStoreMetadataWithItemHelp": "По подразбиране метаданните се съхраняват в /metadata/items, като активирате тази настройка метаданните ще се съхраняват в папката на елемента на вашата библиотека",
|
||||||
"LabelSettingsTimeFormat": "Формат на Време",
|
"LabelSettingsTimeFormat": "Формат на Време",
|
||||||
"LabelShare": "Сподели",
|
|
||||||
"LabelShareDownloadableHelp": "Разреши на потребителите през връзка за споделяне да свалят zip файл с мултимедийния елемент.",
|
|
||||||
"LabelShareOpen": "Общодостъпно",
|
|
||||||
"LabelShareURL": "URL за споделяне",
|
|
||||||
"LabelShowAll": "Покажи всички",
|
"LabelShowAll": "Покажи всички",
|
||||||
"LabelShowSeconds": "Покажи секунди",
|
"LabelShowSeconds": "Покажи секунди",
|
||||||
"LabelShowSubtitles": "Показвай подзаглавия",
|
|
||||||
"LabelSize": "Размер",
|
"LabelSize": "Размер",
|
||||||
"LabelSleepTimer": "Таймер за изключване",
|
"LabelSleepTimer": "Таймер за изключване",
|
||||||
"LabelSlug": "Слъг",
|
"LabelSlug": "Слъг",
|
||||||
"LabelSortAscending": "Възходящ",
|
|
||||||
"LabelSortDescending": "Низходящ",
|
|
||||||
"LabelSortPubDate": "Подреди по дата на публикуване",
|
|
||||||
"LabelStart": "Старт",
|
"LabelStart": "Старт",
|
||||||
"LabelStartTime": "Начално Време",
|
"LabelStartTime": "Начално Време",
|
||||||
"LabelStarted": "Стартирано",
|
"LabelStarted": "Стартирано",
|
||||||
@ -640,11 +583,6 @@
|
|||||||
"LabelThemeDark": "Тъмна",
|
"LabelThemeDark": "Тъмна",
|
||||||
"LabelThemeLight": "Светла",
|
"LabelThemeLight": "Светла",
|
||||||
"LabelTimeBase": "Времева Основа",
|
"LabelTimeBase": "Времева Основа",
|
||||||
"LabelTimeDurationXHours": "{0} часа",
|
|
||||||
"LabelTimeDurationXMinutes": "{0} минути",
|
|
||||||
"LabelTimeDurationXSeconds": "{0} секунди",
|
|
||||||
"LabelTimeInMinutes": "Време в минути",
|
|
||||||
"LabelTimeLeft": "остава {0}",
|
|
||||||
"LabelTimeListened": "Време Слушано",
|
"LabelTimeListened": "Време Слушано",
|
||||||
"LabelTimeListenedToday": "Време Слушано Днес",
|
"LabelTimeListenedToday": "Време Слушано Днес",
|
||||||
"LabelTimeRemaining": "{0} оставащи",
|
"LabelTimeRemaining": "{0} оставащи",
|
||||||
@ -652,7 +590,6 @@
|
|||||||
"LabelTitle": "Заглавие",
|
"LabelTitle": "Заглавие",
|
||||||
"LabelToolsEmbedMetadata": "Вграждане на Метаданни",
|
"LabelToolsEmbedMetadata": "Вграждане на Метаданни",
|
||||||
"LabelToolsEmbedMetadataDescription": "Вграждане на метаданни в аудио файлове, включително корица и глави.",
|
"LabelToolsEmbedMetadataDescription": "Вграждане на метаданни в аудио файлове, включително корица и глави.",
|
||||||
"LabelToolsM4bEncoder": "M4B кодировчик",
|
|
||||||
"LabelToolsMakeM4b": "Направи M4B Аудиокнига Файл",
|
"LabelToolsMakeM4b": "Направи M4B Аудиокнига Файл",
|
||||||
"LabelToolsMakeM4bDescription": "Генериране на .M4B аудиокнига файл с вградени метаданни, корица и глави.",
|
"LabelToolsMakeM4bDescription": "Генериране на .M4B аудиокнига файл с вградени метаданни, корица и глави.",
|
||||||
"LabelToolsSplitM4b": "Раздели M4B на MP3-ки",
|
"LabelToolsSplitM4b": "Раздели M4B на MP3-ки",
|
||||||
@ -665,32 +602,26 @@
|
|||||||
"LabelTracksMultiTrack": "Многоканален",
|
"LabelTracksMultiTrack": "Многоканален",
|
||||||
"LabelTracksNone": "Няма канали",
|
"LabelTracksNone": "Няма канали",
|
||||||
"LabelTracksSingleTrack": "Единичен канал",
|
"LabelTracksSingleTrack": "Единичен канал",
|
||||||
"LabelTrailer": "Трейлър",
|
|
||||||
"LabelType": "Тип",
|
"LabelType": "Тип",
|
||||||
"LabelUnabridged": "Несъкратен",
|
"LabelUnabridged": "Несъкратен",
|
||||||
"LabelUndo": "Отмени",
|
"LabelUndo": "Отмени",
|
||||||
"LabelUnknown": "Неизвестен",
|
"LabelUnknown": "Неизвестен",
|
||||||
"LabelUnknownPublishDate": "Неизвестна дата на публикуване",
|
|
||||||
"LabelUpdateCover": "Обнови Корица",
|
"LabelUpdateCover": "Обнови Корица",
|
||||||
"LabelUpdateCoverHelp": "Позволи презаписване на съществуващите корици за избраните книги, когато се намери съвпадение",
|
"LabelUpdateCoverHelp": "Позволи презаписване на съществуващите корици за избраните книги, когато се намери съвпадение",
|
||||||
"LabelUpdateDetails": "Обнови Детайли",
|
"LabelUpdateDetails": "Обнови Детайли",
|
||||||
"LabelUpdateDetailsHelp": "Позволи презаписване на съществуващите детайли за избраните книги, когато се намери съвпадение",
|
"LabelUpdateDetailsHelp": "Позволи презаписване на съществуващите детайли за избраните книги, когато се намери съвпадение",
|
||||||
"LabelUpdatedAt": "Обновено на",
|
"LabelUpdatedAt": "Обновено на",
|
||||||
"LabelUploaderDragAndDrop": "Плъзни и Пусни Файлове или Папки",
|
"LabelUploaderDragAndDrop": "Плъзни и Пусни Файлове или Папки",
|
||||||
"LabelUploaderDragAndDropFilesOnly": "Извлачване на файлове",
|
|
||||||
"LabelUploaderDropFiles": "Пусни Файлове",
|
"LabelUploaderDropFiles": "Пусни Файлове",
|
||||||
"LabelUploaderItemFetchMetadataHelp": "Автоматично вземи заглавие, автор и серия",
|
"LabelUploaderItemFetchMetadataHelp": "Автоматично вземи заглавие, автор и серия",
|
||||||
"LabelUseAdvancedOptions": "Използвай разширени опции",
|
|
||||||
"LabelUseChapterTrack": "Използвай канал за глава",
|
"LabelUseChapterTrack": "Използвай канал за глава",
|
||||||
"LabelUseFullTrack": "Използвай пълен канал",
|
"LabelUseFullTrack": "Използвай пълен канал",
|
||||||
"LabelUseZeroForUnlimited": "Използвай 0 за неограничен",
|
|
||||||
"LabelUser": "Потребител",
|
"LabelUser": "Потребител",
|
||||||
"LabelUsername": "Потребителско име",
|
"LabelUsername": "Потребителско име",
|
||||||
"LabelValue": "Стойност",
|
"LabelValue": "Стойност",
|
||||||
"LabelVersion": "Версия",
|
"LabelVersion": "Версия",
|
||||||
"LabelViewBookmarks": "Виж Отметки",
|
"LabelViewBookmarks": "Виж Отметки",
|
||||||
"LabelViewChapters": "Виж Глави",
|
"LabelViewChapters": "Виж Глави",
|
||||||
"LabelViewPlayerSettings": "Виж настройки на плеъра",
|
|
||||||
"LabelViewQueue": "Виж Опашка",
|
"LabelViewQueue": "Виж Опашка",
|
||||||
"LabelVolume": "Сила на Звука",
|
"LabelVolume": "Сила на Звука",
|
||||||
"LabelWeekdaysToRun": "Делници за изпълнение",
|
"LabelWeekdaysToRun": "Делници за изпълнение",
|
||||||
|
@ -177,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "Llista de Reproducció",
|
"HeaderPlaylist": "Llista de Reproducció",
|
||||||
"HeaderPlaylistItems": "Elements de la Llista de Reproducció",
|
"HeaderPlaylistItems": "Elements de la Llista de Reproducció",
|
||||||
"HeaderPodcastsToAdd": "Pòdcasts a afegir",
|
"HeaderPodcastsToAdd": "Pòdcasts a afegir",
|
||||||
"HeaderPresets": "Valors predefinits",
|
|
||||||
"HeaderPreviewCover": "Previsualització de la Portada",
|
"HeaderPreviewCover": "Previsualització de la Portada",
|
||||||
"HeaderRSSFeedGeneral": "Detalls RSS",
|
"HeaderRSSFeedGeneral": "Detalls RSS",
|
||||||
"HeaderRSSFeedIsOpen": "La Font RSS està oberta",
|
"HeaderRSSFeedIsOpen": "La Font RSS està oberta",
|
||||||
@ -440,7 +439,7 @@
|
|||||||
"LabelMinute": "Minut",
|
"LabelMinute": "Minut",
|
||||||
"LabelMinutes": "Minuts",
|
"LabelMinutes": "Minuts",
|
||||||
"LabelMissing": "Absent",
|
"LabelMissing": "Absent",
|
||||||
"LabelMissingEbook": "No té llibre electrònic",
|
"LabelMissingEbook": "No té ebook",
|
||||||
"LabelMissingSupplementaryEbook": "No té ebook complementari",
|
"LabelMissingSupplementaryEbook": "No té ebook complementari",
|
||||||
"LabelMobileRedirectURIs": "URI de redirecció mòbil permeses",
|
"LabelMobileRedirectURIs": "URI de redirecció mòbil permeses",
|
||||||
"LabelMobileRedirectURIsDescription": "Aquesta és una llista blanca d'URI de redirecció vàlides per a aplicacions mòbils. El predeterminat és <code> audiobookshelf</code>, que pots eliminar o complementar amb URI addicionals per a la integració d'aplicacions de tercers. Usant un asterisc (<code> *</code>) com a única entrada que permet qualsevol URI.",
|
"LabelMobileRedirectURIsDescription": "Aquesta és una llista blanca d'URI de redirecció vàlides per a aplicacions mòbils. El predeterminat és <code> audiobookshelf</code>, que pots eliminar o complementar amb URI addicionals per a la integració d'aplicacions de tercers. Usant un asterisc (<code> *</code>) com a única entrada que permet qualsevol URI.",
|
||||||
@ -498,25 +497,25 @@
|
|||||||
"LabelPodcastType": "Tipus de pòdcast",
|
"LabelPodcastType": "Tipus de pòdcast",
|
||||||
"LabelPodcasts": "Pòdcasts",
|
"LabelPodcasts": "Pòdcasts",
|
||||||
"LabelPort": "Port",
|
"LabelPort": "Port",
|
||||||
"LabelPrefixesToIgnore": "Prefixos a ignorar (no distingeix entre majúscules i minúscules)",
|
"LabelPrefixesToIgnore": "Prefixos per Ignorar (no distingeix entre majúscules i minúscules.)",
|
||||||
"LabelPreventIndexing": "Evita que el vostre canal l'indexin els directoris de pòdcasts de l'iTunes i Google",
|
"LabelPreventIndexing": "Evita que el vostre canal l'indexin els directoris de pòdcasts de l'iTunes i Google",
|
||||||
"LabelPrimaryEbook": "Llibre electrònic principal",
|
"LabelPrimaryEbook": "Ebook Principal",
|
||||||
"LabelProgress": "Progrés",
|
"LabelProgress": "Progrés",
|
||||||
"LabelProvider": "Proveïdor",
|
"LabelProvider": "Proveïdor",
|
||||||
"LabelProviderAuthorizationValue": "Valor de l'encapçalament d'autorització",
|
"LabelProviderAuthorizationValue": "Valor de l'encapçalament d'autorització",
|
||||||
"LabelPubDate": "Data de publicació",
|
"LabelPubDate": "Data de Publicació",
|
||||||
"LabelPublishYear": "Any de publicació",
|
"LabelPublishYear": "Any de Publicació",
|
||||||
"LabelPublishedDate": "Publicat {0}",
|
"LabelPublishedDate": "Publicat {0}",
|
||||||
"LabelPublishedDecade": "Dècada de publicació",
|
"LabelPublishedDecade": "Dècada de Publicació",
|
||||||
"LabelPublishedDecades": "Dècades Publicades",
|
"LabelPublishedDecades": "Dècades Publicades",
|
||||||
"LabelPublisher": "Editor",
|
"LabelPublisher": "Editor",
|
||||||
"LabelPublishers": "Editors",
|
"LabelPublishers": "Editors",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Correu Electrònic Personalitzat del Propietari",
|
"LabelRSSFeedCustomOwnerEmail": "Correu Electrònic Personalitzat del Propietari",
|
||||||
"LabelRSSFeedCustomOwnerName": "Nom Personalitzat del Propietari",
|
"LabelRSSFeedCustomOwnerName": "Nom Personalitzat del Propietari",
|
||||||
"LabelRSSFeedOpen": "Font RSS Oberta",
|
"LabelRSSFeedOpen": "Font RSS Oberta",
|
||||||
"LabelRSSFeedPreventIndexing": "Evita la indexació",
|
"LabelRSSFeedPreventIndexing": "Evitar l'indexació",
|
||||||
"LabelRSSFeedSlug": "URL semàntic del canal RSS",
|
"LabelRSSFeedSlug": "Font RSS Slug",
|
||||||
"LabelRSSFeedURL": "URL del canal RSS",
|
"LabelRSSFeedURL": "URL de la Font RSS",
|
||||||
"LabelRandomly": "A l'atzar",
|
"LabelRandomly": "A l'atzar",
|
||||||
"LabelReAddSeriesToContinueListening": "Reafegir la sèrie per continuar escoltant-la",
|
"LabelReAddSeriesToContinueListening": "Reafegir la sèrie per continuar escoltant-la",
|
||||||
"LabelRead": "Llegit",
|
"LabelRead": "Llegit",
|
||||||
@ -525,47 +524,45 @@
|
|||||||
"LabelRecentSeries": "Sèries recents",
|
"LabelRecentSeries": "Sèries recents",
|
||||||
"LabelRecentlyAdded": "Addicions recents",
|
"LabelRecentlyAdded": "Addicions recents",
|
||||||
"LabelRecommended": "Recomanats",
|
"LabelRecommended": "Recomanats",
|
||||||
"LabelRedo": "Refés",
|
"LabelRedo": "Refer",
|
||||||
"LabelRegion": "Regió",
|
"LabelRegion": "Regió",
|
||||||
"LabelReleaseDate": "Data d'estrena",
|
"LabelReleaseDate": "Data d'Estrena",
|
||||||
"LabelRemoveAllMetadataAbs": "Elimina tots els fitxers metadata.abs",
|
"LabelRemoveAllMetadataAbs": "Eliminar tots els fitxers metadata.abs",
|
||||||
"LabelRemoveAllMetadataJson": "Elimina tots els fitxers metadata.json",
|
"LabelRemoveAllMetadataJson": "Eliminar tots els fitxers metadata.json",
|
||||||
"LabelRemoveAudibleBranding": "Elimina la introducció i el tancament de l'Audible dels capítols",
|
"LabelRemoveCover": "Eliminar Coberta",
|
||||||
"LabelRemoveCover": "Elimina la coberta",
|
|
||||||
"LabelRemoveMetadataFile": "Eliminar fitxers de metadades en carpetes d'elements de biblioteca",
|
"LabelRemoveMetadataFile": "Eliminar fitxers de metadades en carpetes d'elements de biblioteca",
|
||||||
"LabelRemoveMetadataFileHelp": "Elimina tots els fitxers metadata.json i metadata.abs de les vostres carpetes {0}.",
|
"LabelRemoveMetadataFileHelp": "Elimina tots els fitxers metadata.json i metadata.abs de les teves carpetes {0}.",
|
||||||
"LabelRowsPerPage": "Files per pàgina",
|
"LabelRowsPerPage": "Files per Pàgina",
|
||||||
"LabelSearchTerm": "Cerca terme",
|
"LabelSearchTerm": "Cercar Terme",
|
||||||
"LabelSearchTitle": "Cerca títol",
|
"LabelSearchTitle": "Cercar Títol",
|
||||||
"LabelSearchTitleOrASIN": "Cerca títol o ASIN",
|
"LabelSearchTitleOrASIN": "Cercar Títol o ASIN",
|
||||||
"LabelSeason": "Temporada",
|
"LabelSeason": "Temporada",
|
||||||
"LabelSeasonNumber": "{0}a temporada",
|
"LabelSeasonNumber": "Temporada #{0}",
|
||||||
"LabelSelectAll": "Selecciona-ho tot",
|
"LabelSelectAll": "Seleccionar tot",
|
||||||
"LabelSelectAllEpisodes": "Selecciona tots els episodis",
|
"LabelSelectAllEpisodes": "Seleccionar tots els episodis",
|
||||||
"LabelSelectEpisodesShowing": "Seleccionar els {0} episodis visibles",
|
"LabelSelectEpisodesShowing": "Seleccionar els {0} episodis visibles",
|
||||||
"LabelSelectUsers": "Seleccionar usuaris",
|
"LabelSelectUsers": "Seleccionar usuaris",
|
||||||
"LabelSendEbookToDevice": "Enviar Ebook a...",
|
"LabelSendEbookToDevice": "Enviar Ebook a...",
|
||||||
"LabelSequence": "Seqüència",
|
"LabelSequence": "Seqüència",
|
||||||
"LabelSerial": "En sèrie",
|
"LabelSerial": "En sèrie",
|
||||||
"LabelSeries": "Sèrie",
|
"LabelSeries": "Sèries",
|
||||||
"LabelSeriesName": "Nom de la sèrie",
|
"LabelSeriesName": "Nom de la Sèrie",
|
||||||
"LabelSeriesProgress": "Progrés de la sèrie",
|
"LabelSeriesProgress": "Progrés de la Sèrie",
|
||||||
"LabelServerLogLevel": "Nivell de registre del servidor",
|
"LabelServerLogLevel": "Nivell de registre del servidor",
|
||||||
"LabelServerYearReview": "Resum de l'any del servidor ({0})",
|
"LabelServerYearReview": "Resum de l'any del servidor ({0})",
|
||||||
"LabelSetEbookAsPrimary": "Establir com a principal",
|
"LabelSetEbookAsPrimary": "Establir com a principal",
|
||||||
"LabelSetEbookAsSupplementary": "Establir com a suplementari",
|
"LabelSetEbookAsSupplementary": "Establir com a suplementari",
|
||||||
"LabelSettingsAudiobooksOnly": "Només audiollibres",
|
"LabelSettingsAudiobooksOnly": "Només Audiollibres",
|
||||||
"LabelSettingsAudiobooksOnlyHelp": "En activar aquesta opció s'ignoraran els fitxers de llibre electrònic, excepte si estan dins d'una carpeta d'audiollibre; en aquest cas es marcaran com a llibres suplementaris",
|
"LabelSettingsAudiobooksOnlyHelp": "Activant aquesta opció s'ignoraran els fitxers d'ebook, excepte si estan dins d'una carpeta d'audiollibre, en aquest cas es marcaran com ebooks suplementaris",
|
||||||
"LabelSettingsBookshelfViewHelp": "Disseny esqueomorf amb prestatgeries de fusta",
|
"LabelSettingsBookshelfViewHelp": "Disseny esqueomorf amb prestatgeries de fusta",
|
||||||
"LabelSettingsChromecastSupport": "Compatibilitat amb Chromecast",
|
"LabelSettingsChromecastSupport": "Compatibilitat amb Chromecast",
|
||||||
"LabelSettingsDateFormat": "Format de data",
|
"LabelSettingsDateFormat": "Format de Data",
|
||||||
"LabelSettingsEnableWatcherHelp": "Permet afegir/actualitzar elements automàticament quan es detectin canvis en els fitxers. *Requereix reiniciar el servidor",
|
"LabelSettingsEnableWatcherHelp": "Permet afegir/actualitzar elements automàticament quan es detectin canvis en els fitxers. *Requereix reiniciar el servidor",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Permetre scripts en epubs",
|
"LabelSettingsEpubsAllowScriptedContent": "Permetre scripts en epubs",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Permetre que els fitxers epub executin scripts. Es recomana mantenir aquesta opció desactivada tret que confiïs en l'origen dels fitxers epub.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Permetre que els fitxers epub executin scripts. Es recomana mantenir aquesta opció desactivada tret que confiïs en l'origen dels fitxers epub.",
|
||||||
"LabelSettingsExperimentalFeatures": "Funcions Experimentals",
|
"LabelSettingsExperimentalFeatures": "Funcions Experimentals",
|
||||||
"LabelSettingsExperimentalFeaturesHelp": "Funcions en desenvolupament que es beneficiarien dels teus comentaris i experiències de prova. Feu clic aquí per obrir una conversa a Github.",
|
"LabelSettingsExperimentalFeaturesHelp": "Funcions en desenvolupament que es beneficiarien dels teus comentaris i experiències de prova. Feu clic aquí per obrir una conversa a Github.",
|
||||||
"LabelSettingsFindCovers": "Troba cobertes",
|
"LabelSettingsFindCovers": "Troba cobertes",
|
||||||
"LabelSettingsHideSingleBookSeries": "Amaga les sèries amb un sol llibre",
|
|
||||||
"LabelSettingsParseSubtitles": "Analitza els subtítols",
|
"LabelSettingsParseSubtitles": "Analitza els subtítols",
|
||||||
"LabelSettingsSortingIgnorePrefixes": "Ignora els prefixos en ordenar",
|
"LabelSettingsSortingIgnorePrefixes": "Ignora els prefixos en ordenar",
|
||||||
"LabelSettingsTimeFormat": "Format d'hora",
|
"LabelSettingsTimeFormat": "Format d'hora",
|
||||||
@ -578,8 +575,6 @@
|
|||||||
"LabelSize": "Mida",
|
"LabelSize": "Mida",
|
||||||
"LabelSleepTimer": "Temporitzador de repòs",
|
"LabelSleepTimer": "Temporitzador de repòs",
|
||||||
"LabelSlug": "Slug",
|
"LabelSlug": "Slug",
|
||||||
"LabelSortAscending": "Ascendent",
|
|
||||||
"LabelSortDescending": "Descendent",
|
|
||||||
"LabelStart": "Inicia",
|
"LabelStart": "Inicia",
|
||||||
"LabelStartTime": "Hora d'inici",
|
"LabelStartTime": "Hora d'inici",
|
||||||
"LabelStarted": "Iniciat",
|
"LabelStarted": "Iniciat",
|
||||||
@ -667,20 +662,19 @@
|
|||||||
"LabelViewPlayerSettings": "Mostra els ajustaments del reproductor",
|
"LabelViewPlayerSettings": "Mostra els ajustaments del reproductor",
|
||||||
"LabelViewQueue": "Mostra cua del reproductor",
|
"LabelViewQueue": "Mostra cua del reproductor",
|
||||||
"LabelVolume": "Volum",
|
"LabelVolume": "Volum",
|
||||||
"LabelWebRedirectURLsDescription": "Autoritzeu aquests URL al vostre proveïdor OAuth per a permetre redirigir a l’aplicació web després d'iniciar sessió:",
|
"LabelWebRedirectURLsDescription": "Autoritza aquestes URL al teu proveïdor OAuth per permetre redirecció a l'aplicació web després d'iniciar sessió:",
|
||||||
"LabelWebRedirectURLsSubfolder": "Subcarpeta per a URL de redirecció",
|
"LabelWebRedirectURLsSubfolder": "Subcarpeta per a URL de redirecció",
|
||||||
"LabelWeekdaysToRun": "Executar en dies de la setmana",
|
"LabelWeekdaysToRun": "Executar en dies de la setmana",
|
||||||
"LabelXBooks": "{0} llibres",
|
"LabelXBooks": "{0} llibres",
|
||||||
"LabelXItems": "{0} elements",
|
"LabelXItems": "{0} elements",
|
||||||
"LabelYearReviewHide": "Oculta resum de l'any",
|
"LabelYearReviewHide": "Oculta resum de l'any",
|
||||||
"LabelYearReviewShow": "Mostra resum de l'any",
|
"LabelYearReviewShow": "Mostra resum de l'any",
|
||||||
"LabelYourAudiobookDuration": "Duració del vostre audiollibre",
|
"LabelYourAudiobookDuration": "Duració del teu audiollibre",
|
||||||
"LabelYourBookmarks": "Els vostres marcadors",
|
"LabelYourBookmarks": "Els vostres marcadors",
|
||||||
"LabelYourPlaylists": "Les vostres llistes",
|
"LabelYourPlaylists": "Les teves llistes",
|
||||||
"LabelYourProgress": "El vostre progrés",
|
"LabelYourProgress": "El vostre progrés",
|
||||||
"MessageAddToPlayerQueue": "Afegeix a la cua del reproductor",
|
"MessageAddToPlayerQueue": "Afegeix a la cua del reproductor",
|
||||||
"MessageAppriseDescription": "Per utilitzar aquesta funció, hauràs de tenir l'<a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API d'Apprise</a> en funcionament o una API que gestioni resultats similars. <br/>La URL de l'API d'Apprise ha de tenir la mateixa ruta d'arxius que on s'envien les notificacions. Per exemple: si la teva API és a <code>http://192.168.1.1:8337</code>, llavors posaries <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Per utilitzar aquesta funció, hauràs de tenir l'<a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API d'Apprise</a> en funcionament o una API que gestioni resultats similars. <br/>La URL de l'API d'Apprise ha de tenir la mateixa ruta d'arxius que on s'envien les notificacions. Per exemple: si la teva API és a <code>http://192.168.1.1:8337</code>, llavors posaries <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Reengegueu el servidor després de desar perquè s'hi apliquin els canvis d'OIDC.",
|
|
||||||
"MessageBackupsDescription": "Les còpies de seguretat inclouen: usuaris, progrés dels usuaris, detalls dels elements de la biblioteca, configuració del servidor i imatges a <code>/metadata/items</code> i <code>/metadata/authors</code>. Les còpies de seguretat <strong>NO</strong> inclouen cap fitxer guardat a la carpeta de la teva biblioteca.",
|
"MessageBackupsDescription": "Les còpies de seguretat inclouen: usuaris, progrés dels usuaris, detalls dels elements de la biblioteca, configuració del servidor i imatges a <code>/metadata/items</code> i <code>/metadata/authors</code>. Les còpies de seguretat <strong>NO</strong> inclouen cap fitxer guardat a la carpeta de la teva biblioteca.",
|
||||||
"MessageBackupsLocationEditNote": "Nota: Actualitzar la ubicació de la còpia de seguretat no mourà ni modificarà les còpies existents",
|
"MessageBackupsLocationEditNote": "Nota: Actualitzar la ubicació de la còpia de seguretat no mourà ni modificarà les còpies existents",
|
||||||
"MessageBackupsLocationNoEditNote": "Nota: La ubicació de la còpia de seguretat es defineix mitjançant una variable d'entorn i no es pot modificar aquí.",
|
"MessageBackupsLocationNoEditNote": "Nota: La ubicació de la còpia de seguretat es defineix mitjançant una variable d'entorn i no es pot modificar aquí.",
|
||||||
@ -691,7 +685,7 @@
|
|||||||
"MessageBookshelfNoRSSFeeds": "Cap font RSS està oberta",
|
"MessageBookshelfNoRSSFeeds": "Cap font RSS està oberta",
|
||||||
"MessageBookshelfNoResultsForFilter": "Cap resultat per al filtre «{0}: {1}»",
|
"MessageBookshelfNoResultsForFilter": "Cap resultat per al filtre «{0}: {1}»",
|
||||||
"MessageBookshelfNoResultsForQuery": "Cap resultat per a la consulta",
|
"MessageBookshelfNoResultsForQuery": "Cap resultat per a la consulta",
|
||||||
"MessageBookshelfNoSeries": "No teniu cap sèrie",
|
"MessageBookshelfNoSeries": "No tens cap sèrie",
|
||||||
"MessageChapterEndIsAfter": "El final del capítol és després del final del teu audiollibre",
|
"MessageChapterEndIsAfter": "El final del capítol és després del final del teu audiollibre",
|
||||||
"MessageChapterErrorFirstNotZero": "El primer capítol ha de començar a 0",
|
"MessageChapterErrorFirstNotZero": "El primer capítol ha de començar a 0",
|
||||||
"MessageChapterErrorStartGteDuration": "El temps d'inici no és vàlid: ha de ser inferior a la durada de l'audiollibre",
|
"MessageChapterErrorStartGteDuration": "El temps d'inici no és vàlid: ha de ser inferior a la durada de l'audiollibre",
|
||||||
@ -718,7 +712,7 @@
|
|||||||
"MessageConfirmMarkSeriesFinished": "Segur que voleu marcar tots els llibres d'aquesta sèrie com a acabats?",
|
"MessageConfirmMarkSeriesFinished": "Segur que voleu marcar tots els llibres d'aquesta sèrie com a acabats?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Segur que voleu marcar tots els llibres d'aquesta sèrie com a no acabats?",
|
"MessageConfirmMarkSeriesNotFinished": "Segur que voleu marcar tots els llibres d'aquesta sèrie com a no acabats?",
|
||||||
"MessageConfirmNotificationTestTrigger": "Voleu activar aquesta notificació amb dades de prova?",
|
"MessageConfirmNotificationTestTrigger": "Voleu activar aquesta notificació amb dades de prova?",
|
||||||
"MessageConfirmPurgeCache": "Purgar la memòria cau suprimirà tot el directori localitzat a <code>/metadata/cache</code>. <br /><br />Segur que voleu eliminar-lo?",
|
"MessageConfirmPurgeCache": "Esborrar la memòria cau eliminarà tot el directori localitzat a <code>/metadata/cache</code>. <br /><br />Estàs segur que vols eliminar-lo?",
|
||||||
"MessageConfirmPurgeItemsCache": "Esborrar la memòria cau dels elements eliminarà el directori <code>/metadata/cache/items</code>.<br />Estàs segur?",
|
"MessageConfirmPurgeItemsCache": "Esborrar la memòria cau dels elements eliminarà el directori <code>/metadata/cache/items</code>.<br />Estàs segur?",
|
||||||
"MessageConfirmQuickEmbed": "Avís: la incrustació ràpida no fa còpies de seguretat dels vostres fitxers d'àudio. Assegureu-vos d'haver-ne fet una còpia abans. <br><br>Voleu continuar?",
|
"MessageConfirmQuickEmbed": "Avís: la incrustació ràpida no fa còpies de seguretat dels vostres fitxers d'àudio. Assegureu-vos d'haver-ne fet una còpia abans. <br><br>Voleu continuar?",
|
||||||
"MessageConfirmQuickMatchEpisodes": "El reconeixement ràpid sobreescriurà els detalls si es troba una coincidència. Estàs segur?",
|
"MessageConfirmQuickMatchEpisodes": "El reconeixement ràpid sobreescriurà els detalls si es troba una coincidència. Estàs segur?",
|
||||||
@ -754,7 +748,6 @@
|
|||||||
"MessageInvalidAsin": "L'ASIN no és vàlid",
|
"MessageInvalidAsin": "L'ASIN no és vàlid",
|
||||||
"MessageItemsSelected": "{0} elements seleccionats",
|
"MessageItemsSelected": "{0} elements seleccionats",
|
||||||
"MessageItemsUpdated": "{0} elements actualitzats",
|
"MessageItemsUpdated": "{0} elements actualitzats",
|
||||||
"MessageJoinUsOn": "Uniu-vos a nosaltres a",
|
|
||||||
"MessageLoading": "S'està carregant...",
|
"MessageLoading": "S'està carregant...",
|
||||||
"MessageLoadingFolders": "S'estan carregant les carpetes...",
|
"MessageLoadingFolders": "S'estan carregant les carpetes...",
|
||||||
"MessageMarkAllEpisodesFinished": "Marca tots els episodis com a acabats",
|
"MessageMarkAllEpisodesFinished": "Marca tots els episodis com a acabats",
|
||||||
@ -805,25 +798,23 @@
|
|||||||
"MessageQuickEmbedInProgress": "Integració ràpida en procés",
|
"MessageQuickEmbedInProgress": "Integració ràpida en procés",
|
||||||
"MessageQuickEmbedQueue": "En cua per a inserció ràpida ({0} en cua)",
|
"MessageQuickEmbedQueue": "En cua per a inserció ràpida ({0} en cua)",
|
||||||
"MessageQuickMatchAllEpisodes": "Combina ràpidament tots els episodis",
|
"MessageQuickMatchAllEpisodes": "Combina ràpidament tots els episodis",
|
||||||
"MessageQuickMatchDescription": "Emplena els detalls i la coberta dels elements buits amb el resultat de la primera coincidència de «{0}». No sobreescriu els detalls tret que s'activi el paràmetre del servidor «Prefereix metadades coincidents».",
|
"MessageQuickMatchDescription": "Omple detalls d'elements buits i portades amb els primers resultats de '{0}'. No sobreescriu els detalls tret que l'opció \"Preferir metadades trobades\" del servidor estigui habilitada.",
|
||||||
"MessageRemoveChapter": "Elimina el capítol",
|
"MessageRemoveChapter": "Eliminar capítols",
|
||||||
"MessageRemoveEpisodes": "Elimina {0} episodi(s)",
|
"MessageRemoveEpisodes": "Eliminar {0} episodi(s)",
|
||||||
"MessageRemoveFromPlayerQueue": "Elimina de la cua del reproductor",
|
"MessageRemoveFromPlayerQueue": "Eliminar de la cua del reproductor",
|
||||||
"MessageRemoveUserWarning": "Segur que voleu suprimir permanentment l'usuari «{0}»?",
|
"MessageRemoveUserWarning": "Segur que voleu suprimir permanentment l'usuari «{0}»?",
|
||||||
"MessageReportBugsAndContribute": "Informa d'errors, sol·licita funcions i contribueix a",
|
"MessageReportBugsAndContribute": "Informa d'errors, sol·licita funcions i contribueix a",
|
||||||
"MessageResetChaptersConfirm": "Segur que voleu desfer els canvis i revertir els capítols al seu estat original?",
|
"MessageResetChaptersConfirm": "Segur que voleu desfer els canvis i revertir els capítols al seu estat original?",
|
||||||
"MessageRestoreBackupConfirm": "Segur que voleu restaurar la còpia de seguretat creada a",
|
"MessageRestoreBackupConfirm": "Segur que voleu restaurar la còpia de seguretat creada a",
|
||||||
"MessageRestoreBackupWarning": "Restaurar sobreescriurà tota la base de dades situada a /config i les imatges de portades a /metadata/items i /metadata/authors.<br /><br />La còpia de seguretat no modifica cap fitxer a les carpetes de la teva biblioteca. Si has activat l'opció del servidor per guardar portades i metadades a les carpetes de la biblioteca, aquests fitxers no es guarden ni sobreescriuen.<br /><br />Tots els clients que utilitzin el teu servidor s'actualitzaran automàticament.",
|
"MessageRestoreBackupWarning": "Restaurar sobreescriurà tota la base de dades situada a /config i les imatges de portades a /metadata/items i /metadata/authors.<br /><br />La còpia de seguretat no modifica cap fitxer a les carpetes de la teva biblioteca. Si has activat l'opció del servidor per guardar portades i metadades a les carpetes de la biblioteca, aquests fitxers no es guarden ni sobreescriuen.<br /><br />Tots els clients que utilitzin el teu servidor s'actualitzaran automàticament.",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Executa cada {0} a les {1}",
|
|
||||||
"MessageSearchResultsFor": "Resultats de la cerca de",
|
"MessageSearchResultsFor": "Resultats de la cerca de",
|
||||||
"MessageSelected": "{0} seleccionat(s)",
|
"MessageSelected": "{0} seleccionat(s)",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "La seqüència de la sèrie no pot contenir espais",
|
|
||||||
"MessageServerCouldNotBeReached": "No es va poder establir la connexió amb el servidor",
|
"MessageServerCouldNotBeReached": "No es va poder establir la connexió amb el servidor",
|
||||||
"MessageSetChaptersFromTracksDescription": "Establir capítols utilitzant cada fitxer d'àudio com un capítol i el títol del capítol com el nom del fitxer d'àudio",
|
"MessageSetChaptersFromTracksDescription": "Establir capítols utilitzant cada fitxer d'àudio com un capítol i el títol del capítol com el nom del fitxer d'àudio",
|
||||||
"MessageShareExpirationWillBe": "La caducitat serà <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "La caducitat serà <strong>{0}</strong>",
|
||||||
"MessageShareExpiresIn": "Caduca en {0}",
|
"MessageShareExpiresIn": "Caduca en {0}",
|
||||||
"MessageShareURLWillBe": "La URL per compartir serà <strong>{0}</strong>",
|
"MessageShareURLWillBe": "La URL per compartir serà <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "Voleu començar la reproducció per a «{0}» a {1}?",
|
"MessageStartPlaybackAtTime": "Començar la reproducció per a \"{0}\" a {1}?",
|
||||||
"MessageTaskAudioFileNotWritable": "El fitxer d'àudio «{0}» no es pot escriure",
|
"MessageTaskAudioFileNotWritable": "El fitxer d'àudio «{0}» no es pot escriure",
|
||||||
"MessageTaskCanceledByUser": "Tasca cancel·lada per l'usuari",
|
"MessageTaskCanceledByUser": "Tasca cancel·lada per l'usuari",
|
||||||
"MessageTaskDownloadingEpisodeDescription": "S'està baixant l'episodi «{0}»",
|
"MessageTaskDownloadingEpisodeDescription": "S'està baixant l'episodi «{0}»",
|
||||||
@ -847,7 +838,7 @@
|
|||||||
"MessageTaskOpmlImportFeedFailed": "No s'ha pogut obtenir el canal del pòdcast",
|
"MessageTaskOpmlImportFeedFailed": "No s'ha pogut obtenir el canal del pòdcast",
|
||||||
"MessageTaskOpmlImportFeedPodcastDescription": "S'està creant el pòdcast «{0}»",
|
"MessageTaskOpmlImportFeedPodcastDescription": "S'està creant el pòdcast «{0}»",
|
||||||
"MessageTaskOpmlImportFeedPodcastExists": "El pòdcast ja existeix al camí",
|
"MessageTaskOpmlImportFeedPodcastExists": "El pòdcast ja existeix al camí",
|
||||||
"MessageTaskOpmlImportFeedPodcastFailed": "No s'ha pogut crear el pòdcast",
|
"MessageTaskOpmlImportFeedPodcastFailed": "Error en crear el podcast",
|
||||||
"MessageTaskOpmlImportFinished": "S'han afegit {0} pòdcasts",
|
"MessageTaskOpmlImportFinished": "S'han afegit {0} pòdcasts",
|
||||||
"MessageTaskOpmlParseFailed": "No s'ha pogut analitzar el fitxer OPML",
|
"MessageTaskOpmlParseFailed": "No s'ha pogut analitzar el fitxer OPML",
|
||||||
"MessageTaskOpmlParseFastFail": "No s'ha trobat l'etiqueta <opml> o <outline> al fitxer OPML",
|
"MessageTaskOpmlParseFastFail": "No s'ha trobat l'etiqueta <opml> o <outline> al fitxer OPML",
|
||||||
@ -866,13 +857,13 @@
|
|||||||
"MessageValidCronExpression": "Expressió de cron vàlida",
|
"MessageValidCronExpression": "Expressió de cron vàlida",
|
||||||
"MessageWatcherIsDisabledGlobally": "El watcher està desactivat globalment a la configuració del servidor",
|
"MessageWatcherIsDisabledGlobally": "El watcher està desactivat globalment a la configuració del servidor",
|
||||||
"MessageXLibraryIsEmpty": "La biblioteca {0} està buida!",
|
"MessageXLibraryIsEmpty": "La biblioteca {0} està buida!",
|
||||||
"MessageYourAudiobookDurationIsLonger": "La durada del vostre audiollibre és major que la durada trobada",
|
"MessageYourAudiobookDurationIsLonger": "La durada del teu audiollibre és més llarga que la durada trobada",
|
||||||
"MessageYourAudiobookDurationIsShorter": "La durada del vostre audiollibre és menor que la durada trobada",
|
"MessageYourAudiobookDurationIsShorter": "La durada del teu audiollibre és més curta que la durada trobada",
|
||||||
"NoteChangeRootPassword": "L'usuari Root és l'únic usuari que pot no tenir una contrasenya",
|
"NoteChangeRootPassword": "L'usuari Root és l'únic usuari que pot no tenir una contrasenya",
|
||||||
"NoteChapterEditorTimes": "Nota: el temps d'inici del primer capítol ha de romandre a 0:00, i el temps d'inici de l'últim capítol no pot superar la durada de l'audiollibre.",
|
"NoteChapterEditorTimes": "Nota: El temps d'inici del primer capítol ha de romandre a 0:00, i el temps d'inici de l'últim capítol no pot superar la durada de l'audiollibre.",
|
||||||
"NoteFolderPicker": "Nota: les carpetes ja assignades no es mostraran",
|
"NoteFolderPicker": "Nota: Les carpetes ja assignades no es mostraran",
|
||||||
"NoteRSSFeedPodcastAppsHttps": "Avís: la majoria d'aplicacions de pòdcast requereixen que l'URL del canal RSS utilitzi HTTPS",
|
"NoteRSSFeedPodcastAppsHttps": "Advertència: La majoria d'aplicacions de podcast requereixen que la URL de la font RSS utilitzi HTTPS",
|
||||||
"NoteRSSFeedPodcastAppsPubDate": "Avís: un o més dels vostres episodis no tenen data de publicació. Algunes aplicacions de pòdcast ho requereixen.",
|
"NoteRSSFeedPodcastAppsPubDate": "Advertència: Un o més dels teus episodis no tenen data de publicació. Algunes aplicacions de podcast ho requereixen.",
|
||||||
"NoteUploaderFoldersWithMediaFiles": "Les carpetes amb fitxers multimèdia es gestionaran com a elements separats a la biblioteca.",
|
"NoteUploaderFoldersWithMediaFiles": "Les carpetes amb fitxers multimèdia es gestionaran com a elements separats a la biblioteca.",
|
||||||
"NoteUploaderOnlyAudioFiles": "Si només puges fitxers d'àudio, cada fitxer es gestionarà com un audiollibre separat.",
|
"NoteUploaderOnlyAudioFiles": "Si només puges fitxers d'àudio, cada fitxer es gestionarà com un audiollibre separat.",
|
||||||
"NoteUploaderUnsupportedFiles": "Els fitxers no compatibles seran ignorats. Si selecciona o arrossega una carpeta, els fitxers que no estiguin dins d'una subcarpeta seran ignorats.",
|
"NoteUploaderUnsupportedFiles": "Els fitxers no compatibles seran ignorats. Si selecciona o arrossega una carpeta, els fitxers que no estiguin dins d'una subcarpeta seran ignorats.",
|
||||||
@ -881,7 +872,7 @@
|
|||||||
"NotificationOnEpisodeDownloadedDescription": "S'activa quan es descarrega automàticament un episodi d'un podcast",
|
"NotificationOnEpisodeDownloadedDescription": "S'activa quan es descarrega automàticament un episodi d'un podcast",
|
||||||
"NotificationOnTestDescription": "Esdeveniment per provar el sistema de notificacions",
|
"NotificationOnTestDescription": "Esdeveniment per provar el sistema de notificacions",
|
||||||
"PlaceholderNewCollection": "Nou nom de la col·lecció",
|
"PlaceholderNewCollection": "Nou nom de la col·lecció",
|
||||||
"PlaceholderNewFolderPath": "Camí de carpeta nou",
|
"PlaceholderNewFolderPath": "Nova ruta de carpeta",
|
||||||
"PlaceholderNewPlaylist": "Nou nom de la llista de reproducció",
|
"PlaceholderNewPlaylist": "Nou nom de la llista de reproducció",
|
||||||
"PlaceholderSearch": "Cerca...",
|
"PlaceholderSearch": "Cerca...",
|
||||||
"PlaceholderSearchEpisode": "Cerca d'episodis...",
|
"PlaceholderSearchEpisode": "Cerca d'episodis...",
|
||||||
@ -923,7 +914,6 @@
|
|||||||
"ToastBackupRestoreFailed": "Error en restaurar la còpia de seguretat",
|
"ToastBackupRestoreFailed": "Error en restaurar la còpia de seguretat",
|
||||||
"ToastBackupUploadFailed": "Error en carregar la còpia de seguretat",
|
"ToastBackupUploadFailed": "Error en carregar la còpia de seguretat",
|
||||||
"ToastBackupUploadSuccess": "Còpia de seguretat carregada",
|
"ToastBackupUploadSuccess": "Còpia de seguretat carregada",
|
||||||
"ToastBatchApplyDetailsToItemsSuccess": "S'han aplicat els detalls als elements",
|
|
||||||
"ToastBatchDeleteFailed": "Error en l'eliminació per lots",
|
"ToastBatchDeleteFailed": "Error en l'eliminació per lots",
|
||||||
"ToastBatchDeleteSuccess": "Eliminació per lots correcte",
|
"ToastBatchDeleteSuccess": "Eliminació per lots correcte",
|
||||||
"ToastBatchQuickMatchFailed": "Error en la sincronització ràpida per lots!",
|
"ToastBatchQuickMatchFailed": "Error en la sincronització ràpida per lots!",
|
||||||
@ -936,8 +926,6 @@
|
|||||||
"ToastCachePurgeFailed": "Error en purgar la memòria cau",
|
"ToastCachePurgeFailed": "Error en purgar la memòria cau",
|
||||||
"ToastCachePurgeSuccess": "Memòria cau purgada amb èxit",
|
"ToastCachePurgeSuccess": "Memòria cau purgada amb èxit",
|
||||||
"ToastChaptersHaveErrors": "Els capítols tenen errors",
|
"ToastChaptersHaveErrors": "Els capítols tenen errors",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "La quantitat de desplaçament no és vàlida. L'hora d'inici de l'últim capítol s'estendria més enllà de la durada d'aquest audiollibre.",
|
|
||||||
"ToastChaptersInvalidShiftAmountStart": "La quantitat de desplaçament no és vàlida. El primer capítol tindria una durada zero o negativa i el sobreescriuria el segon capítol. Augmenteu la durada inicial del segon capítol.",
|
|
||||||
"ToastChaptersMustHaveTitles": "Els capítols han de tenir un títol",
|
"ToastChaptersMustHaveTitles": "Els capítols han de tenir un títol",
|
||||||
"ToastChaptersRemoved": "Capítols eliminats",
|
"ToastChaptersRemoved": "Capítols eliminats",
|
||||||
"ToastChaptersUpdated": "Capítols actualitzats",
|
"ToastChaptersUpdated": "Capítols actualitzats",
|
||||||
@ -945,7 +933,6 @@
|
|||||||
"ToastCollectionRemoveSuccess": "Col·lecció eliminada",
|
"ToastCollectionRemoveSuccess": "Col·lecció eliminada",
|
||||||
"ToastCollectionUpdateSuccess": "Col·lecció actualitzada",
|
"ToastCollectionUpdateSuccess": "Col·lecció actualitzada",
|
||||||
"ToastCoverUpdateFailed": "Error en actualitzar la portada",
|
"ToastCoverUpdateFailed": "Error en actualitzar la portada",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "La data i hora no és vàlida o està incompleta",
|
|
||||||
"ToastDeleteFileFailed": "No s'ha pogut suprimir el fitxer",
|
"ToastDeleteFileFailed": "No s'ha pogut suprimir el fitxer",
|
||||||
"ToastDeleteFileSuccess": "Fitxer suprimit",
|
"ToastDeleteFileSuccess": "Fitxer suprimit",
|
||||||
"ToastDeviceAddFailed": "Error en afegir el dispositiu",
|
"ToastDeviceAddFailed": "Error en afegir el dispositiu",
|
||||||
@ -983,7 +970,7 @@
|
|||||||
"ToastLibraryScanStarted": "S'ha iniciat l'escaneig de la biblioteca",
|
"ToastLibraryScanStarted": "S'ha iniciat l'escaneig de la biblioteca",
|
||||||
"ToastLibraryUpdateSuccess": "S'ha actualitzat la biblioteca «{0}»",
|
"ToastLibraryUpdateSuccess": "S'ha actualitzat la biblioteca «{0}»",
|
||||||
"ToastMatchAllAuthorsFailed": "No coincideix amb tots els autors",
|
"ToastMatchAllAuthorsFailed": "No coincideix amb tots els autors",
|
||||||
"ToastMetadataFilesRemovedError": "S’ha produït un error en eliminar els fitxers metadata.{0}",
|
"ToastMetadataFilesRemovedError": "Error en eliminar metadades de {0} arxius",
|
||||||
"ToastMetadataFilesRemovedNoneFound": "No hi ha cap fitxer metadata.{0} a la biblioteca",
|
"ToastMetadataFilesRemovedNoneFound": "No hi ha cap fitxer metadata.{0} a la biblioteca",
|
||||||
"ToastMetadataFilesRemovedNoneRemoved": "No s'ha eliminat cap fitxer metadata.{0}",
|
"ToastMetadataFilesRemovedNoneRemoved": "No s'ha eliminat cap fitxer metadata.{0}",
|
||||||
"ToastMetadataFilesRemovedSuccess": "{0} metadades eliminades en {1} arxius",
|
"ToastMetadataFilesRemovedSuccess": "{0} metadades eliminades en {1} arxius",
|
||||||
@ -993,18 +980,18 @@
|
|||||||
"ToastNewEpisodesFound": "{0} episodi(s) nou(s) trobat(s)",
|
"ToastNewEpisodesFound": "{0} episodi(s) nou(s) trobat(s)",
|
||||||
"ToastNewUserCreatedFailed": "No s'ha pogut crear el compte: «{0}»",
|
"ToastNewUserCreatedFailed": "No s'ha pogut crear el compte: «{0}»",
|
||||||
"ToastNewUserCreatedSuccess": "Nou compte creat",
|
"ToastNewUserCreatedSuccess": "Nou compte creat",
|
||||||
"ToastNewUserLibraryError": "S'ha de seleccionar almenys una biblioteca",
|
"ToastNewUserLibraryError": "Ha de seleccionar almenys una biblioteca",
|
||||||
"ToastNewUserPasswordError": "Cal una contrasenya; només l'usuari primari pot estar sense contrasenya",
|
"ToastNewUserPasswordError": "Necessites una contrasenya, només el root pot estar sense contrasenya",
|
||||||
"ToastNewUserTagError": "S'ha de seleccionar almenys una etiqueta",
|
"ToastNewUserTagError": "Selecciona almenys una etiqueta",
|
||||||
"ToastNewUserUsernameError": "Introduïu un nom d'usuari",
|
"ToastNewUserUsernameError": "Introdueix un nom d'usuari",
|
||||||
"ToastNoNewEpisodesFound": "No s'han trobat nous episodis",
|
"ToastNoNewEpisodesFound": "No s'han trobat nous episodis",
|
||||||
"ToastNoRSSFeed": "El pòdcast no té canal RSS",
|
"ToastNoRSSFeed": "El pòdcast no té canal RSS",
|
||||||
"ToastNoUpdatesNecessary": "No cal actualitzar",
|
"ToastNoUpdatesNecessary": "No cal actualitzar",
|
||||||
"ToastNotificationCreateFailed": "No s'ha pogut crear la notificació",
|
"ToastNotificationCreateFailed": "Error en crear la notificació",
|
||||||
"ToastNotificationDeleteFailed": "No s'ha pogut suprimir la notificació",
|
"ToastNotificationDeleteFailed": "Error en eliminar la notificació",
|
||||||
"ToastNotificationFailedMaximum": "El nombre màxim d'intents fallits ha de ser ≥ 0",
|
"ToastNotificationFailedMaximum": "El nombre màxim d'intents fallits ha de ser ≥ 0",
|
||||||
"ToastNotificationQueueMaximum": "La cua de notificació màxima ha de ser ≥ 0",
|
"ToastNotificationQueueMaximum": "La cua de notificació màxima ha de ser ≥ 0",
|
||||||
"ToastNotificationSettingsUpdateSuccess": "S'han actualitzat els paràmetres de notificacions",
|
"ToastNotificationSettingsUpdateSuccess": "Configuració de notificació actualitzada",
|
||||||
"ToastNotificationTestTriggerFailed": "No s'ha pogut activar la notificació de prova",
|
"ToastNotificationTestTriggerFailed": "No s'ha pogut activar la notificació de prova",
|
||||||
"ToastNotificationTestTriggerSuccess": "Notificació de prova activada",
|
"ToastNotificationTestTriggerSuccess": "Notificació de prova activada",
|
||||||
"ToastNotificationUpdateSuccess": "Notificació actualitzada",
|
"ToastNotificationUpdateSuccess": "Notificació actualitzada",
|
||||||
@ -1037,8 +1024,7 @@
|
|||||||
"ToastScanFailed": "No s'ha pogut escanejar l'element de la biblioteca",
|
"ToastScanFailed": "No s'ha pogut escanejar l'element de la biblioteca",
|
||||||
"ToastSelectAtLeastOneUser": "Selecciona almenys un usuari",
|
"ToastSelectAtLeastOneUser": "Selecciona almenys un usuari",
|
||||||
"ToastSendEbookToDeviceFailed": "Error en enviar l'ebook al dispositiu",
|
"ToastSendEbookToDeviceFailed": "Error en enviar l'ebook al dispositiu",
|
||||||
"ToastSendEbookToDeviceSuccess": "El llibre electrònic s'ha enviat al dispositiu «{0}»",
|
"ToastSendEbookToDeviceSuccess": "Ebook enviat al dispositiu \"{0}\"",
|
||||||
"ToastSeriesSubmitFailedSameName": "No és possible afegir dues sèries amb el mateix nom",
|
|
||||||
"ToastSeriesUpdateFailed": "Error en actualitzar la sèrie",
|
"ToastSeriesUpdateFailed": "Error en actualitzar la sèrie",
|
||||||
"ToastSeriesUpdateSuccess": "Sèrie actualitzada",
|
"ToastSeriesUpdateSuccess": "Sèrie actualitzada",
|
||||||
"ToastServerSettingsUpdateSuccess": "Configuració del servidor actualitzada",
|
"ToastServerSettingsUpdateSuccess": "Configuració del servidor actualitzada",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Přidat",
|
"ButtonAdd": "Přidat",
|
||||||
"ButtonAddApiKey": "Přidat API klíč",
|
|
||||||
"ButtonAddChapters": "Přidat kapitoly",
|
"ButtonAddChapters": "Přidat kapitoly",
|
||||||
"ButtonAddDevice": "Přidat zařízení",
|
"ButtonAddDevice": "Přidat zařízení",
|
||||||
"ButtonAddLibrary": "Přidat knihovnu",
|
"ButtonAddLibrary": "Přidat knihovnu",
|
||||||
@ -21,7 +20,6 @@
|
|||||||
"ButtonChooseAFolder": "Vybrat složku",
|
"ButtonChooseAFolder": "Vybrat složku",
|
||||||
"ButtonChooseFiles": "Vybrat soubory",
|
"ButtonChooseFiles": "Vybrat soubory",
|
||||||
"ButtonClearFilter": "Vymazat filtr",
|
"ButtonClearFilter": "Vymazat filtr",
|
||||||
"ButtonClose": "Zavřít",
|
|
||||||
"ButtonCloseFeed": "Zavřít kanál",
|
"ButtonCloseFeed": "Zavřít kanál",
|
||||||
"ButtonCloseSession": "Zavřít otevřenou relaci",
|
"ButtonCloseSession": "Zavřít otevřenou relaci",
|
||||||
"ButtonCollections": "Kolekce",
|
"ButtonCollections": "Kolekce",
|
||||||
@ -121,7 +119,6 @@
|
|||||||
"HeaderAccount": "Účet",
|
"HeaderAccount": "Účet",
|
||||||
"HeaderAddCustomMetadataProvider": "Přidat vlastního poskytovatele metadat",
|
"HeaderAddCustomMetadataProvider": "Přidat vlastního poskytovatele metadat",
|
||||||
"HeaderAdvanced": "Pokročilé",
|
"HeaderAdvanced": "Pokročilé",
|
||||||
"HeaderApiKeys": "API klíče",
|
|
||||||
"HeaderAppriseNotificationSettings": "Nastavení oznámení Apprise",
|
"HeaderAppriseNotificationSettings": "Nastavení oznámení Apprise",
|
||||||
"HeaderAudioTracks": "Zvukové stopy",
|
"HeaderAudioTracks": "Zvukové stopy",
|
||||||
"HeaderAudiobookTools": "Nástroje pro správu souborů audioknih",
|
"HeaderAudiobookTools": "Nástroje pro správu souborů audioknih",
|
||||||
@ -157,7 +154,7 @@
|
|||||||
"HeaderListeningSessions": "Poslechové relace",
|
"HeaderListeningSessions": "Poslechové relace",
|
||||||
"HeaderListeningStats": "Statistiky poslechu",
|
"HeaderListeningStats": "Statistiky poslechu",
|
||||||
"HeaderLogin": "Přihlásit",
|
"HeaderLogin": "Přihlásit",
|
||||||
"HeaderLogs": "Logy",
|
"HeaderLogs": "Záznamy",
|
||||||
"HeaderManageGenres": "Spravovat žánry",
|
"HeaderManageGenres": "Spravovat žánry",
|
||||||
"HeaderManageTags": "Spravovat štítky",
|
"HeaderManageTags": "Spravovat štítky",
|
||||||
"HeaderMapDetails": "Podrobnosti mapování",
|
"HeaderMapDetails": "Podrobnosti mapování",
|
||||||
@ -165,7 +162,6 @@
|
|||||||
"HeaderMetadataOrderOfPrecedence": "Pořadí priorit metadat",
|
"HeaderMetadataOrderOfPrecedence": "Pořadí priorit metadat",
|
||||||
"HeaderMetadataToEmbed": "Metadata k vložení",
|
"HeaderMetadataToEmbed": "Metadata k vložení",
|
||||||
"HeaderNewAccount": "Nový účet",
|
"HeaderNewAccount": "Nový účet",
|
||||||
"HeaderNewApiKey": "Nový API klíč",
|
|
||||||
"HeaderNewLibrary": "Nová knihovna",
|
"HeaderNewLibrary": "Nová knihovna",
|
||||||
"HeaderNotificationCreate": "Vytvořit notifikaci",
|
"HeaderNotificationCreate": "Vytvořit notifikaci",
|
||||||
"HeaderNotificationUpdate": "Aktualizovat notifikaci",
|
"HeaderNotificationUpdate": "Aktualizovat notifikaci",
|
||||||
@ -181,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "Seznam skladeb",
|
"HeaderPlaylist": "Seznam skladeb",
|
||||||
"HeaderPlaylistItems": "Položky seznamu přehrávání",
|
"HeaderPlaylistItems": "Položky seznamu přehrávání",
|
||||||
"HeaderPodcastsToAdd": "Podcasty k přidání",
|
"HeaderPodcastsToAdd": "Podcasty k přidání",
|
||||||
"HeaderPresets": "Předvolba",
|
|
||||||
"HeaderPreviewCover": "Náhled obálky",
|
"HeaderPreviewCover": "Náhled obálky",
|
||||||
"HeaderRSSFeedGeneral": "Podrobnosti o RSS",
|
"HeaderRSSFeedGeneral": "Podrobnosti o RSS",
|
||||||
"HeaderRSSFeedIsOpen": "Informační kanál RSS je otevřený",
|
"HeaderRSSFeedIsOpen": "Informační kanál RSS je otevřený",
|
||||||
@ -210,7 +205,6 @@
|
|||||||
"HeaderTableOfContents": "Obsah",
|
"HeaderTableOfContents": "Obsah",
|
||||||
"HeaderTools": "Nástroje",
|
"HeaderTools": "Nástroje",
|
||||||
"HeaderUpdateAccount": "Aktualizovat účet",
|
"HeaderUpdateAccount": "Aktualizovat účet",
|
||||||
"HeaderUpdateApiKey": "Aktualizovat API klíč",
|
|
||||||
"HeaderUpdateAuthor": "Aktualizovat autora",
|
"HeaderUpdateAuthor": "Aktualizovat autora",
|
||||||
"HeaderUpdateDetails": "Aktualizovat podrobnosti",
|
"HeaderUpdateDetails": "Aktualizovat podrobnosti",
|
||||||
"HeaderUpdateLibrary": "Aktualizovat knihovnu",
|
"HeaderUpdateLibrary": "Aktualizovat knihovnu",
|
||||||
@ -240,10 +234,6 @@
|
|||||||
"LabelAllUsersExcludingGuests": "Všichni uživatelé kromě hostů",
|
"LabelAllUsersExcludingGuests": "Všichni uživatelé kromě hostů",
|
||||||
"LabelAllUsersIncludingGuests": "Všichni uživatelé včetně hostů",
|
"LabelAllUsersIncludingGuests": "Všichni uživatelé včetně hostů",
|
||||||
"LabelAlreadyInYourLibrary": "Již ve vaší knihovně",
|
"LabelAlreadyInYourLibrary": "Již ve vaší knihovně",
|
||||||
"LabelApiKeyCreated": "API klíč \"{0}\" byl úspěšně vytvořen.",
|
|
||||||
"LabelApiKeyCreatedDescription": "Zkopírujte si API klíč nyní, později již nebude možné jej zobrazit.",
|
|
||||||
"LabelApiKeyUser": "Vydávat se za uživatele",
|
|
||||||
"LabelApiKeyUserDescription": "Tento API klíč bude mít stejná oprávnění jako uživatel za něhož vystupuje. V protokolech to bude vypadat jako kdyby požadavky vytvářel přímo daný uživatel.",
|
|
||||||
"LabelApiToken": "API Token",
|
"LabelApiToken": "API Token",
|
||||||
"LabelAppend": "Připojit",
|
"LabelAppend": "Připojit",
|
||||||
"LabelAudioBitrate": "Bitový tok zvuku (např. 128k)",
|
"LabelAudioBitrate": "Bitový tok zvuku (např. 128k)",
|
||||||
@ -355,15 +345,11 @@
|
|||||||
"LabelExample": "Příklad",
|
"LabelExample": "Příklad",
|
||||||
"LabelExpandSeries": "Rozbalit série",
|
"LabelExpandSeries": "Rozbalit série",
|
||||||
"LabelExpandSubSeries": "Rozbalit podsérie",
|
"LabelExpandSubSeries": "Rozbalit podsérie",
|
||||||
"LabelExpired": "Expirovaný",
|
"LabelExplicit": "Explicitní",
|
||||||
"LabelExpiresAt": "Expiruje v",
|
|
||||||
"LabelExpiresInSeconds": "Expiruje za (sekundy)",
|
|
||||||
"LabelExpiresNever": "Nikdy",
|
|
||||||
"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",
|
||||||
"LabelFeedURL": "URL kanálu",
|
"LabelFeedURL": "URL zdroje",
|
||||||
"LabelFetchingMetadata": "Získávání metadat",
|
"LabelFetchingMetadata": "Získávání metadat",
|
||||||
"LabelFile": "Soubor",
|
"LabelFile": "Soubor",
|
||||||
"LabelFileBirthtime": "Čas vzniku souboru",
|
"LabelFileBirthtime": "Čas vzniku souboru",
|
||||||
@ -468,7 +454,6 @@
|
|||||||
"LabelNewestEpisodes": "Nejnovější epizody",
|
"LabelNewestEpisodes": "Nejnovější epizody",
|
||||||
"LabelNextBackupDate": "Datum příští zálohy",
|
"LabelNextBackupDate": "Datum příští zálohy",
|
||||||
"LabelNextScheduledRun": "Další naplánované spuštění",
|
"LabelNextScheduledRun": "Další naplánované spuštění",
|
||||||
"LabelNoApiKeys": "Žádné API klíče",
|
|
||||||
"LabelNoCustomMetadataProviders": "Žádní vlastní poskytovatelé metadat",
|
"LabelNoCustomMetadataProviders": "Žádní vlastní poskytovatelé metadat",
|
||||||
"LabelNoEpisodesSelected": "Nebyly vybrány žádné epizody",
|
"LabelNoEpisodesSelected": "Nebyly vybrány žádné epizody",
|
||||||
"LabelNotFinished": "Nedokončeno",
|
"LabelNotFinished": "Nedokončeno",
|
||||||
@ -528,9 +513,9 @@
|
|||||||
"LabelPublishers": "Vydavatelé",
|
"LabelPublishers": "Vydavatelé",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Vlastní e-mail vlastníka",
|
"LabelRSSFeedCustomOwnerEmail": "Vlastní e-mail vlastníka",
|
||||||
"LabelRSSFeedCustomOwnerName": "Vlastní jméno vlastníka",
|
"LabelRSSFeedCustomOwnerName": "Vlastní jméno vlastníka",
|
||||||
"LabelRSSFeedOpen": "RSS kanál otevřen",
|
"LabelRSSFeedOpen": "Otevření RSS kanálu",
|
||||||
"LabelRSSFeedPreventIndexing": "Zabránit indexování",
|
"LabelRSSFeedPreventIndexing": "Zabránit indexování",
|
||||||
"LabelRSSFeedSlug": "Klíčové slovo kanálu RSS",
|
"LabelRSSFeedSlug": "RSS kanál Slug",
|
||||||
"LabelRSSFeedURL": "URL RSS kanálu",
|
"LabelRSSFeedURL": "URL RSS kanálu",
|
||||||
"LabelRandomly": "Náhodně",
|
"LabelRandomly": "Náhodně",
|
||||||
"LabelReAddSeriesToContinueListening": "Znovu přidat sérii k pokračování poslechu",
|
"LabelReAddSeriesToContinueListening": "Znovu přidat sérii k pokračování poslechu",
|
||||||
@ -545,7 +530,6 @@
|
|||||||
"LabelReleaseDate": "Datum vydání",
|
"LabelReleaseDate": "Datum vydání",
|
||||||
"LabelRemoveAllMetadataAbs": "Odebrat všechny soubory metadata.abs",
|
"LabelRemoveAllMetadataAbs": "Odebrat všechny soubory metadata.abs",
|
||||||
"LabelRemoveAllMetadataJson": "Smazat všechny soubory metadata.json",
|
"LabelRemoveAllMetadataJson": "Smazat všechny soubory metadata.json",
|
||||||
"LabelRemoveAudibleBranding": "Odebrat úvod a závěr Audible z kapitol",
|
|
||||||
"LabelRemoveCover": "Odstranit obálku",
|
"LabelRemoveCover": "Odstranit obálku",
|
||||||
"LabelRemoveMetadataFile": "Odstranit soubory metadat ve složkách položek knihovny",
|
"LabelRemoveMetadataFile": "Odstranit soubory metadat ve složkách položek knihovny",
|
||||||
"LabelRemoveMetadataFileHelp": "Odstraníte všechny soubory metadata.json a metadata.abs ve svých složkách {0}.",
|
"LabelRemoveMetadataFileHelp": "Odstraníte všechny soubory metadata.json a metadata.abs ve svých složkách {0}.",
|
||||||
@ -558,7 +542,6 @@
|
|||||||
"LabelSelectAll": "Vybrat vše",
|
"LabelSelectAll": "Vybrat vše",
|
||||||
"LabelSelectAllEpisodes": "Vybrat všechny epizody",
|
"LabelSelectAllEpisodes": "Vybrat všechny epizody",
|
||||||
"LabelSelectEpisodesShowing": "Vyberte {0} epizody, které se zobrazují",
|
"LabelSelectEpisodesShowing": "Vyberte {0} epizody, které se zobrazují",
|
||||||
"LabelSelectUser": "Vybrat uživatele",
|
|
||||||
"LabelSelectUsers": "Vybrat uživatele",
|
"LabelSelectUsers": "Vybrat uživatele",
|
||||||
"LabelSendEbookToDevice": "Odeslat e-knihu do...",
|
"LabelSendEbookToDevice": "Odeslat e-knihu do...",
|
||||||
"LabelSequence": "Sekvence",
|
"LabelSequence": "Sekvence",
|
||||||
@ -566,7 +549,7 @@
|
|||||||
"LabelSeries": "Série",
|
"LabelSeries": "Série",
|
||||||
"LabelSeriesName": "Název série",
|
"LabelSeriesName": "Název série",
|
||||||
"LabelSeriesProgress": "Průběh série",
|
"LabelSeriesProgress": "Průběh série",
|
||||||
"LabelServerLogLevel": "Úroveň Logování serveru",
|
"LabelServerLogLevel": "Úroveň protokolu serveru",
|
||||||
"LabelServerYearReview": "Přehled roku na serveru ({0})",
|
"LabelServerYearReview": "Přehled roku na serveru ({0})",
|
||||||
"LabelSetEbookAsPrimary": "Nastavit jako primární",
|
"LabelSetEbookAsPrimary": "Nastavit jako primární",
|
||||||
"LabelSetEbookAsSupplementary": "Nastavit jako doplňkové",
|
"LabelSetEbookAsSupplementary": "Nastavit jako doplňkové",
|
||||||
@ -722,10 +705,6 @@
|
|||||||
"LabelYourProgress": "Váš pokrok",
|
"LabelYourProgress": "Váš pokrok",
|
||||||
"MessageAddToPlayerQueue": "Přidat do fronty přehrávače",
|
"MessageAddToPlayerQueue": "Přidat do fronty přehrávače",
|
||||||
"MessageAppriseDescription": "Abyste mohli používat tuto funkci, musíte mít spuštěnou instanci <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> nebo API, které bude zpracovávat stejné požadavky. <br />Adresa URL API Apprise by měla být úplná URL cesta pro odeslání oznámení, např. pokud je vaše instance API obsluhována na adrese <code>http://192.168.1.1:8337</code> pak byste měli zadat <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Abyste mohli používat tuto funkci, musíte mít spuštěnou instanci <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> nebo API, které bude zpracovávat stejné požadavky. <br />Adresa URL API Apprise by měla být úplná URL cesta pro odeslání oznámení, např. pokud je vaše instance API obsluhována na adrese <code>http://192.168.1.1:8337</code> pak byste měli zadat <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Ujistěte se, že používáte ASIN ze správného regionu Audible a ne z Amazonu.",
|
|
||||||
"MessageAuthenticationLegacyTokenWarning": "Zastaralé API tokeny budou v budoucnu odstraněny. Použijte místo nich <a href=\"/config/api-keys\">API klíče</a>.",
|
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Po uložení restartujte server, aby se změny OIDC použily.",
|
|
||||||
"MessageAuthenticationSecurityMessage": "Bezpečnost autentizace byla vylepšena. Všichni uživatelé se musí znovu přihlásit.",
|
|
||||||
"MessageBackupsDescription": "Zálohy zahrnují uživatele, průběh uživatele, podrobnosti o položkách knihovny, nastavení serveru a obrázky uložené v <code>/metadata/items</code> a <code>/metadata/authors</code>. Zálohy <strong>ne</strong> zahrnují všechny soubory uložené ve složkách knihovny.",
|
"MessageBackupsDescription": "Zálohy zahrnují uživatele, průběh uživatele, podrobnosti o položkách knihovny, nastavení serveru a obrázky uložené v <code>/metadata/items</code> a <code>/metadata/authors</code>. Zálohy <strong>ne</strong> zahrnují všechny soubory uložené ve složkách knihovny.",
|
||||||
"MessageBackupsLocationEditNote": "Poznámka: Změna umístění záloh nepřesune ani nezmění existující zálohy",
|
"MessageBackupsLocationEditNote": "Poznámka: Změna umístění záloh nepřesune ani nezmění existující zálohy",
|
||||||
"MessageBackupsLocationNoEditNote": "Poznámka: Umístění záloh je nastavené z proměnných prostředí a nelze zde změnit.",
|
"MessageBackupsLocationNoEditNote": "Poznámka: Umístění záloh je nastavené z proměnných prostředí a nelze zde změnit.",
|
||||||
@ -744,10 +723,8 @@
|
|||||||
"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",
|
||||||
"MessageChapterErrorStartLtPrev": "Neplatný čas začátku, musí být větší nebo roven času začátku předchozí kapitoly",
|
"MessageChapterErrorStartLtPrev": "Neplatný čas začátku, musí být větší nebo roven času začátku předchozí kapitoly",
|
||||||
"MessageChapterStartIsAfter": "Začátek kapitoly přesahuje konec audioknihy",
|
"MessageChapterStartIsAfter": "Začátek kapitoly přesahuje konec audioknihy",
|
||||||
"MessageChaptersNotFound": "Kapitoly nenalezeny",
|
|
||||||
"MessageCheckingCron": "Kontrola cronu...",
|
"MessageCheckingCron": "Kontrola cronu...",
|
||||||
"MessageConfirmCloseFeed": "Opravdu chcete zavřít tento kanál?",
|
"MessageConfirmCloseFeed": "Opravdu chcete zavřít tento kanál?",
|
||||||
"MessageConfirmDeleteApiKey": "Opravdu chcete vymazat API klíč \"{0}\"?",
|
|
||||||
"MessageConfirmDeleteBackup": "Opravdu chcete smazat zálohu pro {0}?",
|
"MessageConfirmDeleteBackup": "Opravdu chcete smazat zálohu pro {0}?",
|
||||||
"MessageConfirmDeleteDevice": "Opravdu chcete vymazat zařízení e-reader \"{0}\"?",
|
"MessageConfirmDeleteDevice": "Opravdu chcete vymazat zařízení e-reader \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Tento krok smaže soubor ze souborového systému. Jsi si jisti?",
|
"MessageConfirmDeleteFile": "Tento krok smaže soubor ze souborového systému. Jsi si jisti?",
|
||||||
@ -775,7 +752,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "Opravdu chcete odstranit autora \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Opravdu chcete odstranit autora \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Opravdu chcete odstranit kolekci \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Opravdu chcete odstranit kolekci \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Opravdu chcete odstranit epizodu \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Opravdu chcete odstranit epizodu \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Poznámka: Tím se zvukový soubor neodstraní, pokud nepřepnete volbu “Tvrdé odstranění souboru“",
|
|
||||||
"MessageConfirmRemoveEpisodes": "Opravdu chcete odstranit {0} epizody?",
|
"MessageConfirmRemoveEpisodes": "Opravdu chcete odstranit {0} epizody?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Opravdu chcete odebrat {0} poslechových relací?",
|
"MessageConfirmRemoveListeningSessions": "Opravdu chcete odebrat {0} poslechových relací?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Jste si jisti, že chcete odstranit všechny metadata.{0} soubory ve složkách s položkami ve vaší knihovně?",
|
"MessageConfirmRemoveMetadataFiles": "Jste si jisti, že chcete odstranit všechny metadata.{0} soubory ve složkách s položkami ve vaší knihovně?",
|
||||||
@ -803,13 +779,12 @@
|
|||||||
"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é.",
|
||||||
"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",
|
|
||||||
"MessageItemsSelected": "{0} vybraných položek",
|
"MessageItemsSelected": "{0} vybraných položek",
|
||||||
"MessageItemsUpdated": "{0} položky byly aktualizovány",
|
"MessageItemsUpdated": "{0} položky byly aktualizovány",
|
||||||
"MessageJoinUsOn": "Přidejte se k nám",
|
"MessageJoinUsOn": "Přidejte se k nám",
|
||||||
"MessageLoading": "Načítá se...",
|
"MessageLoading": "Načítá se...",
|
||||||
"MessageLoadingFolders": "Načítám složky...",
|
"MessageLoadingFolders": "Načítám složky...",
|
||||||
"MessageLogsDescription": "Logy se ukládají do souborů JSON v <code>/metadata/logs</code>. Logy o pádech jsou uloženy v <code>/metadata/logs/crash_logs.txt</code>.",
|
"MessageLogsDescription": "Protokoly se ukládají do souborů JSON v <code>/metadata/logs</code>. Protokoly o pádech jsou uloženy v <code>/metadata/logs/crash_logs.txt</code>.",
|
||||||
"MessageM4BFailed": "M4B se nezdařil!",
|
"MessageM4BFailed": "M4B se nezdařil!",
|
||||||
"MessageM4BFinished": "M4B dokončen!",
|
"MessageM4BFinished": "M4B dokončen!",
|
||||||
"MessageMapChapterTitles": "Mapování názvů kapitol ke stávajícím kapitolám audioknihy bez úpravy časových razítek",
|
"MessageMapChapterTitles": "Mapování názvů kapitol ke stávajícím kapitolám audioknihy bez úpravy časových razítek",
|
||||||
@ -833,11 +808,11 @@
|
|||||||
"MessageNoEpisodes": "Žádné epizody",
|
"MessageNoEpisodes": "Žádné epizody",
|
||||||
"MessageNoFoldersAvailable": "Nejsou k dispozici žádné složky",
|
"MessageNoFoldersAvailable": "Nejsou k dispozici žádné složky",
|
||||||
"MessageNoGenres": "Žádné žánry",
|
"MessageNoGenres": "Žádné žánry",
|
||||||
"MessageNoIssues": "Žádné problémy",
|
"MessageNoIssues": "Žádné výtisk",
|
||||||
"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é protokoly",
|
||||||
"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",
|
||||||
@ -875,7 +850,6 @@
|
|||||||
"MessageScheduleRunEveryWeekdayAtTime": "Spusť každý {0} v {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Spusť každý {0} v {1}",
|
||||||
"MessageSearchResultsFor": "Výsledky hledání pro",
|
"MessageSearchResultsFor": "Výsledky hledání pro",
|
||||||
"MessageSelected": "{0} vybráno",
|
"MessageSelected": "{0} vybráno",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Sekvence série nesmí obsahovat mezery",
|
|
||||||
"MessageServerCouldNotBeReached": "Server je nedostupný",
|
"MessageServerCouldNotBeReached": "Server je nedostupný",
|
||||||
"MessageSetChaptersFromTracksDescription": "Nastavit kapitoly jako kapitolu a název kapitoly jako název zvukového souboru",
|
"MessageSetChaptersFromTracksDescription": "Nastavit kapitoly jako kapitolu a název kapitoly jako název zvukového souboru",
|
||||||
"MessageShareExpirationWillBe": "Expiruje <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Expiruje <strong>{0}</strong>",
|
||||||
@ -937,8 +911,6 @@
|
|||||||
"NotificationOnBackupCompletedDescription": "Spuštěno po dokončení zálohování",
|
"NotificationOnBackupCompletedDescription": "Spuštěno po dokončení zálohování",
|
||||||
"NotificationOnBackupFailedDescription": "Spuštěno pokud zálohování selže",
|
"NotificationOnBackupFailedDescription": "Spuštěno pokud zálohování selže",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Spuštěno při automatickém stažení epizody podcastu",
|
"NotificationOnEpisodeDownloadedDescription": "Spuštěno při automatickém stažení epizody podcastu",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Aktivováno když je automatické stahování pozastaveno z důvodu příliš mnoho neůspěšných pokusů",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Aktivováno když selže RSS kanál pro stahování epizod",
|
|
||||||
"NotificationOnTestDescription": "Akce pro otestování upozorňovacího systému",
|
"NotificationOnTestDescription": "Akce pro otestování upozorňovacího systému",
|
||||||
"PlaceholderNewCollection": "Nový název kolekce",
|
"PlaceholderNewCollection": "Nový název kolekce",
|
||||||
"PlaceholderNewFolderPath": "Nová cesta ke složce",
|
"PlaceholderNewFolderPath": "Nová cesta ke složce",
|
||||||
@ -983,7 +955,7 @@
|
|||||||
"ToastBackupRestoreFailed": "Nepodařilo se obnovit zálohu",
|
"ToastBackupRestoreFailed": "Nepodařilo se obnovit zálohu",
|
||||||
"ToastBackupUploadFailed": "Nepodařilo se nahrát zálohu",
|
"ToastBackupUploadFailed": "Nepodařilo se nahrát zálohu",
|
||||||
"ToastBackupUploadSuccess": "Záloha nahrána",
|
"ToastBackupUploadSuccess": "Záloha nahrána",
|
||||||
"ToastBatchApplyDetailsToItemsSuccess": "Detaily byly aplikované na položky",
|
"ToastBatchApplyDetailsToItemsSuccess": "Detaily aplikované na položky",
|
||||||
"ToastBatchDeleteFailed": "Hromadné smazání selhalo",
|
"ToastBatchDeleteFailed": "Hromadné smazání selhalo",
|
||||||
"ToastBatchDeleteSuccess": "Hromadné smazání proběhlo úspěšně",
|
"ToastBatchDeleteSuccess": "Hromadné smazání proběhlo úspěšně",
|
||||||
"ToastBatchQuickMatchFailed": "Rychlá schoda dávky se nezdařila!",
|
"ToastBatchQuickMatchFailed": "Rychlá schoda dávky se nezdařila!",
|
||||||
@ -996,8 +968,6 @@
|
|||||||
"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",
|
||||||
"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.",
|
|
||||||
"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.",
|
|
||||||
"ToastChaptersMustHaveTitles": "Kapitoly musí mít názvy",
|
"ToastChaptersMustHaveTitles": "Kapitoly musí mít názvy",
|
||||||
"ToastChaptersRemoved": "Kapitoly odstraněny",
|
"ToastChaptersRemoved": "Kapitoly odstraněny",
|
||||||
"ToastChaptersUpdated": "Kapitola aktualizována",
|
"ToastChaptersUpdated": "Kapitola aktualizována",
|
||||||
@ -1019,8 +989,6 @@
|
|||||||
"ToastEpisodeDownloadQueueClearSuccess": "Fronta stahování epizod je prázdná",
|
"ToastEpisodeDownloadQueueClearSuccess": "Fronta stahování epizod je prázdná",
|
||||||
"ToastEpisodeUpdateSuccess": "{0} epizod aktualizováno",
|
"ToastEpisodeUpdateSuccess": "{0} epizod aktualizováno",
|
||||||
"ToastErrorCannotShare": "Na tomto zařízení nelze nativně sdílet",
|
"ToastErrorCannotShare": "Na tomto zařízení nelze nativně sdílet",
|
||||||
"ToastFailedToCreate": "Nepodařilo se vytvořit",
|
|
||||||
"ToastFailedToDelete": "Nepodařilo se odstranit",
|
|
||||||
"ToastFailedToLoadData": "Nepodařilo se načíst data",
|
"ToastFailedToLoadData": "Nepodařilo se načíst data",
|
||||||
"ToastFailedToMatch": "Nepodařilo se spárovat",
|
"ToastFailedToMatch": "Nepodařilo se spárovat",
|
||||||
"ToastFailedToShare": "Sdílení selhalo",
|
"ToastFailedToShare": "Sdílení selhalo",
|
||||||
@ -1052,7 +1020,6 @@
|
|||||||
"ToastMustHaveAtLeastOnePath": "Musí mít minimálně jednu cestu",
|
"ToastMustHaveAtLeastOnePath": "Musí mít minimálně jednu cestu",
|
||||||
"ToastNameEmailRequired": "Jméno a email jsou vyžadovány",
|
"ToastNameEmailRequired": "Jméno a email jsou vyžadovány",
|
||||||
"ToastNameRequired": "Jméno je vyžadováno",
|
"ToastNameRequired": "Jméno je vyžadováno",
|
||||||
"ToastNewApiKeyUserError": "Je nutné vybrat uživatele",
|
|
||||||
"ToastNewEpisodesFound": "{0} nových epizod bylo nalezeno",
|
"ToastNewEpisodesFound": "{0} nových epizod bylo nalezeno",
|
||||||
"ToastNewUserCreatedFailed": "Chyba při vytváření účtu: \"{0}\"",
|
"ToastNewUserCreatedFailed": "Chyba při vytváření účtu: \"{0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "Vytvořen nový účet",
|
"ToastNewUserCreatedSuccess": "Vytvořen nový účet",
|
||||||
@ -1121,7 +1088,7 @@
|
|||||||
"ToastUnlinkOpenIdFailed": "Chyba při odpárování uživatele z OpenID",
|
"ToastUnlinkOpenIdFailed": "Chyba při odpárování uživatele z OpenID",
|
||||||
"ToastUnlinkOpenIdSuccess": "Uživatel odpárován z uživatele z OpenID",
|
"ToastUnlinkOpenIdSuccess": "Uživatel odpárován z uživatele z OpenID",
|
||||||
"ToastUploaderFilepathExistsError": "Soubor \"{0}\" na serveru již existuje",
|
"ToastUploaderFilepathExistsError": "Soubor \"{0}\" na serveru již existuje",
|
||||||
"ToastUploaderItemExistsInSubdirectoryError": "Položka \"{0}\" používá podadresář cesty pro nahrání.",
|
"ToastUploaderItemExistsInSubdirectoryError": "Položka \"{0}\" používá podsložku nahrávané cesty.",
|
||||||
"ToastUserDeleteFailed": "Nepodařilo se smazat uživatele",
|
"ToastUserDeleteFailed": "Nepodařilo se smazat uživatele",
|
||||||
"ToastUserDeleteSuccess": "Uživatel smazán",
|
"ToastUserDeleteSuccess": "Uživatel smazán",
|
||||||
"ToastUserPasswordChangeSuccess": "Heslo bylo změněno úspěšně",
|
"ToastUserPasswordChangeSuccess": "Heslo bylo změněno úspěšně",
|
||||||
|
@ -177,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "Afspilningsliste",
|
"HeaderPlaylist": "Afspilningsliste",
|
||||||
"HeaderPlaylistItems": "Afspilningsliste Elementer",
|
"HeaderPlaylistItems": "Afspilningsliste Elementer",
|
||||||
"HeaderPodcastsToAdd": "Podcasts til Tilføjelse",
|
"HeaderPodcastsToAdd": "Podcasts til Tilføjelse",
|
||||||
"HeaderPresets": "Forudindstillinger",
|
|
||||||
"HeaderPreviewCover": "Forhåndsvis Omslag",
|
"HeaderPreviewCover": "Forhåndsvis Omslag",
|
||||||
"HeaderRSSFeedGeneral": "RSS Detaljer",
|
"HeaderRSSFeedGeneral": "RSS Detaljer",
|
||||||
"HeaderRSSFeedIsOpen": "RSS Feed er Åben",
|
"HeaderRSSFeedIsOpen": "RSS Feed er Åben",
|
||||||
@ -514,7 +513,7 @@
|
|||||||
"LabelPublishers": "Forlag",
|
"LabelPublishers": "Forlag",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Brugerdefineret ejerens e-mail",
|
"LabelRSSFeedCustomOwnerEmail": "Brugerdefineret ejerens e-mail",
|
||||||
"LabelRSSFeedCustomOwnerName": "Brugerdefineret ejerens navn",
|
"LabelRSSFeedCustomOwnerName": "Brugerdefineret ejerens navn",
|
||||||
"LabelRSSFeedOpen": "RSS-feed åbent",
|
"LabelRSSFeedOpen": "Åben RSS-feed",
|
||||||
"LabelRSSFeedPreventIndexing": "Forhindrer indeksering",
|
"LabelRSSFeedPreventIndexing": "Forhindrer indeksering",
|
||||||
"LabelRSSFeedSlug": "RSS-feed-slug",
|
"LabelRSSFeedSlug": "RSS-feed-slug",
|
||||||
"LabelRSSFeedURL": "RSS-feed-URL",
|
"LabelRSSFeedURL": "RSS-feed-URL",
|
||||||
@ -531,7 +530,6 @@
|
|||||||
"LabelReleaseDate": "Udgivelsesdato",
|
"LabelReleaseDate": "Udgivelsesdato",
|
||||||
"LabelRemoveAllMetadataAbs": "Fjern alle metadata.abs filer",
|
"LabelRemoveAllMetadataAbs": "Fjern alle metadata.abs filer",
|
||||||
"LabelRemoveAllMetadataJson": "Fjern alle metadata.json filer",
|
"LabelRemoveAllMetadataJson": "Fjern alle metadata.json filer",
|
||||||
"LabelRemoveAudibleBranding": "Fjern Audible intro og outro fra kapitler",
|
|
||||||
"LabelRemoveCover": "Fjern omslag",
|
"LabelRemoveCover": "Fjern omslag",
|
||||||
"LabelRemoveMetadataFile": "Fjern alle metadata filer i biblioteksmapper",
|
"LabelRemoveMetadataFile": "Fjern alle metadata filer i biblioteksmapper",
|
||||||
"LabelRemoveMetadataFileHelp": "Fjern alle metadata.json og metadata.abs filer i dine {0} mapper.",
|
"LabelRemoveMetadataFileHelp": "Fjern alle metadata.json og metadata.abs filer i dine {0} mapper.",
|
||||||
@ -606,7 +604,6 @@
|
|||||||
"LabelSlug": "Snegl",
|
"LabelSlug": "Snegl",
|
||||||
"LabelSortAscending": "Stigende",
|
"LabelSortAscending": "Stigende",
|
||||||
"LabelSortDescending": "Faldende",
|
"LabelSortDescending": "Faldende",
|
||||||
"LabelSortPubDate": "Sortér Pub Dato",
|
|
||||||
"LabelStart": "Start",
|
"LabelStart": "Start",
|
||||||
"LabelStartTime": "Starttid",
|
"LabelStartTime": "Starttid",
|
||||||
"LabelStarted": "Startet",
|
"LabelStarted": "Startet",
|
||||||
@ -707,8 +704,6 @@
|
|||||||
"LabelYourProgress": "Din fremgang",
|
"LabelYourProgress": "Din fremgang",
|
||||||
"MessageAddToPlayerQueue": "Tilføj til afspilningskø",
|
"MessageAddToPlayerQueue": "Tilføj til afspilningskø",
|
||||||
"MessageAppriseDescription": "For at bruge denne funktion skal du have en instans af <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kørende eller en API, der håndterer de samme anmodninger. <br /> Apprise API-webadressen skal være den fulde URL-sti for at sende underretningen, f.eks. hvis din API-instans er tilgængelig på <code>http://192.168.1.1:8337</code>, så skal du bruge <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "For at bruge denne funktion skal du have en instans af <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kørende eller en API, der håndterer de samme anmodninger. <br /> Apprise API-webadressen skal være den fulde URL-sti for at sende underretningen, f.eks. hvis din API-instans er tilgængelig på <code>http://192.168.1.1:8337</code>, så skal du bruge <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Sikr dig at du bruger ASIN fra den korrekte Audible region, ikke Amazon.",
|
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Genstart sin server efter du har gemt for at bekræfte OIDC ændringer.",
|
|
||||||
"MessageBackupsDescription": "Backups inkluderer brugere, brugerfremskridt, biblioteksvareoplysninger, serverindstillinger og billeder gemt i <code>/metadata/items</code> og <code>/metadata/authors</code>. Backups inkluderer <strong>ikke</strong> nogen filer gemt i dine biblioteksmapper.",
|
"MessageBackupsDescription": "Backups inkluderer brugere, brugerfremskridt, biblioteksvareoplysninger, serverindstillinger og billeder gemt i <code>/metadata/items</code> og <code>/metadata/authors</code>. Backups inkluderer <strong>ikke</strong> nogen filer gemt i dine biblioteksmapper.",
|
||||||
"MessageBackupsLocationEditNote": "Note: Opdatering af backup sti vil ikke fjerne eller modificere eksisterende backups",
|
"MessageBackupsLocationEditNote": "Note: Opdatering af backup sti vil ikke fjerne eller modificere eksisterende backups",
|
||||||
"MessageBackupsLocationNoEditNote": "Note: Backup sti er sat igennem miljøvariabel og kan ikke ændres her.",
|
"MessageBackupsLocationNoEditNote": "Note: Backup sti er sat igennem miljøvariabel og kan ikke ændres her.",
|
||||||
@ -727,7 +722,6 @@
|
|||||||
"MessageChapterErrorStartGteDuration": "Ugyldig starttid skal være mindre end lydbogens varighed",
|
"MessageChapterErrorStartGteDuration": "Ugyldig starttid skal være mindre end lydbogens varighed",
|
||||||
"MessageChapterErrorStartLtPrev": "Ugyldig starttid skal være større end eller lig med den foregående kapitels starttid",
|
"MessageChapterErrorStartLtPrev": "Ugyldig starttid skal være større end eller lig med den foregående kapitels starttid",
|
||||||
"MessageChapterStartIsAfter": "Kapitelstarten er efter slutningen af din lydbog",
|
"MessageChapterStartIsAfter": "Kapitelstarten er efter slutningen af din lydbog",
|
||||||
"MessageChaptersNotFound": "Kapitler ikke fundet",
|
|
||||||
"MessageCheckingCron": "Tjekker cron...",
|
"MessageCheckingCron": "Tjekker cron...",
|
||||||
"MessageConfirmCloseFeed": "Er du sikker på, at du vil lukke dette feed?",
|
"MessageConfirmCloseFeed": "Er du sikker på, at du vil lukke dette feed?",
|
||||||
"MessageConfirmDeleteBackup": "Er du sikker på, at du vil slette backup for {0}?",
|
"MessageConfirmDeleteBackup": "Er du sikker på, at du vil slette backup for {0}?",
|
||||||
@ -784,7 +778,6 @@
|
|||||||
"MessageForceReScanDescription": "vil scanne alle filer igen som en frisk scanning. Lydfilens ID3-tags, OPF-filer og tekstfiler scannes som nye.",
|
"MessageForceReScanDescription": "vil scanne alle filer igen som en frisk scanning. Lydfilens ID3-tags, OPF-filer og tekstfiler scannes som nye.",
|
||||||
"MessageImportantNotice": "Vigtig besked!",
|
"MessageImportantNotice": "Vigtig besked!",
|
||||||
"MessageInsertChapterBelow": "Indsæt kapitel nedenfor",
|
"MessageInsertChapterBelow": "Indsæt kapitel nedenfor",
|
||||||
"MessageInvalidAsin": "Ugyldig ASIN",
|
|
||||||
"MessageItemsSelected": "{0} elementer valgt",
|
"MessageItemsSelected": "{0} elementer valgt",
|
||||||
"MessageItemsUpdated": "{0} elementer opdateret",
|
"MessageItemsUpdated": "{0} elementer opdateret",
|
||||||
"MessageJoinUsOn": "Deltag i os på",
|
"MessageJoinUsOn": "Deltag i os på",
|
||||||
@ -856,7 +849,6 @@
|
|||||||
"MessageScheduleRunEveryWeekdayAtTime": "Kør hvert {0} af {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Kør hvert {0} af {1}",
|
||||||
"MessageSearchResultsFor": "Søgeresultater for",
|
"MessageSearchResultsFor": "Søgeresultater for",
|
||||||
"MessageSelected": "{0} valgt",
|
"MessageSelected": "{0} valgt",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Serie sekvens kan ikke indeholde mellemrum",
|
|
||||||
"MessageServerCouldNotBeReached": "Serveren kunne ikke nås",
|
"MessageServerCouldNotBeReached": "Serveren kunne ikke nås",
|
||||||
"MessageSetChaptersFromTracksDescription": "Indstil kapitler ved at bruge hver lydfil som et kapitel og kapiteloverskrift som lydfilnavn",
|
"MessageSetChaptersFromTracksDescription": "Indstil kapitler ved at bruge hver lydfil som et kapitel og kapiteloverskrift som lydfilnavn",
|
||||||
"MessageShareExpirationWillBe": "Udløb vil være <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Udløb vil være <strong>{0}</strong>",
|
||||||
@ -918,8 +910,6 @@
|
|||||||
"NotificationOnBackupCompletedDescription": "Udløst når backup er færdig",
|
"NotificationOnBackupCompletedDescription": "Udløst når backup er færdig",
|
||||||
"NotificationOnBackupFailedDescription": "Udløst når backup fejler",
|
"NotificationOnBackupFailedDescription": "Udløst når backup fejler",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Udløst når et podcast afsnit er automatisk downloadet",
|
"NotificationOnEpisodeDownloadedDescription": "Udløst når et podcast afsnit er automatisk downloadet",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Aktiveret når automatiske episode-downloads er slået fra, på grund af for mange forsøg",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Aktiveret når anmodning om RSS-feedet fejler for en automatisk episode-download",
|
|
||||||
"NotificationOnTestDescription": "Event for test af notifikationssystemet",
|
"NotificationOnTestDescription": "Event for test af notifikationssystemet",
|
||||||
"PlaceholderNewCollection": "Nyt samlingnavn",
|
"PlaceholderNewCollection": "Nyt samlingnavn",
|
||||||
"PlaceholderNewFolderPath": "Ny mappes sti",
|
"PlaceholderNewFolderPath": "Ny mappes sti",
|
||||||
@ -964,7 +954,6 @@
|
|||||||
"ToastBackupRestoreFailed": "Mislykkedes gendannelse af sikkerhedskopi",
|
"ToastBackupRestoreFailed": "Mislykkedes gendannelse af sikkerhedskopi",
|
||||||
"ToastBackupUploadFailed": "Mislykkedes upload af sikkerhedskopi",
|
"ToastBackupUploadFailed": "Mislykkedes upload af sikkerhedskopi",
|
||||||
"ToastBackupUploadSuccess": "Sikkerhedskopi uploadet",
|
"ToastBackupUploadSuccess": "Sikkerhedskopi uploadet",
|
||||||
"ToastBatchApplyDetailsToItemsSuccess": "Detaljer bekræftet på element",
|
|
||||||
"ToastBatchDeleteFailed": "Batch slet fejlede",
|
"ToastBatchDeleteFailed": "Batch slet fejlede",
|
||||||
"ToastBatchDeleteSuccess": "Batch slet succes",
|
"ToastBatchDeleteSuccess": "Batch slet succes",
|
||||||
"ToastBatchQuickMatchFailed": "Batch Hurtig Match fejlede!",
|
"ToastBatchQuickMatchFailed": "Batch Hurtig Match fejlede!",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Hinzufügen",
|
"ButtonAdd": "Hinzufügen",
|
||||||
"ButtonAddApiKey": "API-Schlüssel hinzufügen",
|
|
||||||
"ButtonAddChapters": "Kapitel hinzufügen",
|
"ButtonAddChapters": "Kapitel hinzufügen",
|
||||||
"ButtonAddDevice": "Gerät hinzufügen",
|
"ButtonAddDevice": "Gerät hinzufügen",
|
||||||
"ButtonAddLibrary": "Bibliothek hinzufügen",
|
"ButtonAddLibrary": "Bibliothek hinzufügen",
|
||||||
@ -21,7 +20,6 @@
|
|||||||
"ButtonChooseAFolder": "Wähle einen Ordner",
|
"ButtonChooseAFolder": "Wähle einen Ordner",
|
||||||
"ButtonChooseFiles": "Wähle eine Datei",
|
"ButtonChooseFiles": "Wähle eine Datei",
|
||||||
"ButtonClearFilter": "Filter löschen",
|
"ButtonClearFilter": "Filter löschen",
|
||||||
"ButtonClose": "Schließen",
|
|
||||||
"ButtonCloseFeed": "Feed schließen",
|
"ButtonCloseFeed": "Feed schließen",
|
||||||
"ButtonCloseSession": "Offene Sitzung schließen",
|
"ButtonCloseSession": "Offene Sitzung schließen",
|
||||||
"ButtonCollections": "Sammlungen",
|
"ButtonCollections": "Sammlungen",
|
||||||
@ -34,7 +32,7 @@
|
|||||||
"ButtonEditChapters": "Kapitel bearbeiten",
|
"ButtonEditChapters": "Kapitel bearbeiten",
|
||||||
"ButtonEditPodcast": "Podcast bearbeiten",
|
"ButtonEditPodcast": "Podcast bearbeiten",
|
||||||
"ButtonEnable": "Aktivieren",
|
"ButtonEnable": "Aktivieren",
|
||||||
"ButtonFireAndFail": "Abschicken und fehlschlagen",
|
"ButtonFireAndFail": "Abfeuern und versagen",
|
||||||
"ButtonFireOnTest": "Test-Event abfeuern",
|
"ButtonFireOnTest": "Test-Event abfeuern",
|
||||||
"ButtonForceReScan": "Komplett-Scan (alle Medien)",
|
"ButtonForceReScan": "Komplett-Scan (alle Medien)",
|
||||||
"ButtonFullPath": "Vollständiger Pfad",
|
"ButtonFullPath": "Vollständiger Pfad",
|
||||||
@ -55,7 +53,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": "Einverstanden",
|
||||||
"ButtonOpenFeed": "Feed öffnen",
|
"ButtonOpenFeed": "Feed öffnen",
|
||||||
"ButtonOpenManager": "Manager öffnen",
|
"ButtonOpenManager": "Manager öffnen",
|
||||||
"ButtonPause": "Pausieren",
|
"ButtonPause": "Pausieren",
|
||||||
@ -90,7 +88,7 @@
|
|||||||
"ButtonSave": "Speichern",
|
"ButtonSave": "Speichern",
|
||||||
"ButtonSaveAndClose": "Speichern & Schließen",
|
"ButtonSaveAndClose": "Speichern & Schließen",
|
||||||
"ButtonSaveTracklist": "Speichere die Titelliste",
|
"ButtonSaveTracklist": "Speichere die Titelliste",
|
||||||
"ButtonScan": "Scannen",
|
"ButtonScan": "Partial-Scan (nur geänderte/neue Medien)",
|
||||||
"ButtonScanLibrary": "Bibliothek scannen",
|
"ButtonScanLibrary": "Bibliothek scannen",
|
||||||
"ButtonScrollLeft": "Nach Links scrollen",
|
"ButtonScrollLeft": "Nach Links scrollen",
|
||||||
"ButtonScrollRight": "Nach Rechts scrollen",
|
"ButtonScrollRight": "Nach Rechts scrollen",
|
||||||
@ -121,7 +119,6 @@
|
|||||||
"HeaderAccount": "Konto",
|
"HeaderAccount": "Konto",
|
||||||
"HeaderAddCustomMetadataProvider": "Benutzerdefinierten Metadatenanbieter hinzufügen",
|
"HeaderAddCustomMetadataProvider": "Benutzerdefinierten Metadatenanbieter hinzufügen",
|
||||||
"HeaderAdvanced": "Erweitert",
|
"HeaderAdvanced": "Erweitert",
|
||||||
"HeaderApiKeys": "API-Schlüssel",
|
|
||||||
"HeaderAppriseNotificationSettings": "Apprise Benachrichtigungseinstellungen",
|
"HeaderAppriseNotificationSettings": "Apprise Benachrichtigungseinstellungen",
|
||||||
"HeaderAudioTracks": "Audiodateien",
|
"HeaderAudioTracks": "Audiodateien",
|
||||||
"HeaderAudiobookTools": "Hörbuch-Dateiverwaltungswerkzeuge",
|
"HeaderAudiobookTools": "Hörbuch-Dateiverwaltungswerkzeuge",
|
||||||
@ -165,7 +162,6 @@
|
|||||||
"HeaderMetadataOrderOfPrecedence": "Metadaten Rangfolge",
|
"HeaderMetadataOrderOfPrecedence": "Metadaten Rangfolge",
|
||||||
"HeaderMetadataToEmbed": "Einzubettende Metadaten",
|
"HeaderMetadataToEmbed": "Einzubettende Metadaten",
|
||||||
"HeaderNewAccount": "Neues Konto",
|
"HeaderNewAccount": "Neues Konto",
|
||||||
"HeaderNewApiKey": "Neuen API-Schlüssel erstellen",
|
|
||||||
"HeaderNewLibrary": "Neue Bibliothek",
|
"HeaderNewLibrary": "Neue Bibliothek",
|
||||||
"HeaderNotificationCreate": "Benachrichtigung erstellen",
|
"HeaderNotificationCreate": "Benachrichtigung erstellen",
|
||||||
"HeaderNotificationUpdate": "Benachrichtigung bearbeiten",
|
"HeaderNotificationUpdate": "Benachrichtigung bearbeiten",
|
||||||
@ -181,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "Wiedergabeliste",
|
"HeaderPlaylist": "Wiedergabeliste",
|
||||||
"HeaderPlaylistItems": "Einträge in der Wiedergabeliste",
|
"HeaderPlaylistItems": "Einträge in der Wiedergabeliste",
|
||||||
"HeaderPodcastsToAdd": "Podcasts zum Hinzufügen",
|
"HeaderPodcastsToAdd": "Podcasts zum Hinzufügen",
|
||||||
"HeaderPresets": "Voreinstellungen",
|
|
||||||
"HeaderPreviewCover": "Vorschau Titelbild",
|
"HeaderPreviewCover": "Vorschau Titelbild",
|
||||||
"HeaderRSSFeedGeneral": "RSS Details",
|
"HeaderRSSFeedGeneral": "RSS Details",
|
||||||
"HeaderRSSFeedIsOpen": "RSS-Feed ist geöffnet",
|
"HeaderRSSFeedIsOpen": "RSS-Feed ist geöffnet",
|
||||||
@ -210,7 +205,6 @@
|
|||||||
"HeaderTableOfContents": "Inhaltsverzeichnis",
|
"HeaderTableOfContents": "Inhaltsverzeichnis",
|
||||||
"HeaderTools": "Werkzeuge",
|
"HeaderTools": "Werkzeuge",
|
||||||
"HeaderUpdateAccount": "Konto aktualisieren",
|
"HeaderUpdateAccount": "Konto aktualisieren",
|
||||||
"HeaderUpdateApiKey": "API-Schlüssel aktualisieren",
|
|
||||||
"HeaderUpdateAuthor": "Autor aktualisieren",
|
"HeaderUpdateAuthor": "Autor aktualisieren",
|
||||||
"HeaderUpdateDetails": "Details aktualisieren",
|
"HeaderUpdateDetails": "Details aktualisieren",
|
||||||
"HeaderUpdateLibrary": "Bibliothek aktualisieren",
|
"HeaderUpdateLibrary": "Bibliothek aktualisieren",
|
||||||
@ -240,10 +234,6 @@
|
|||||||
"LabelAllUsersExcludingGuests": "Alle Benutzer außer Gästen",
|
"LabelAllUsersExcludingGuests": "Alle Benutzer außer Gästen",
|
||||||
"LabelAllUsersIncludingGuests": "Alle Benutzer und Gäste",
|
"LabelAllUsersIncludingGuests": "Alle Benutzer und Gäste",
|
||||||
"LabelAlreadyInYourLibrary": "Bereits in der Bibliothek",
|
"LabelAlreadyInYourLibrary": "Bereits in der Bibliothek",
|
||||||
"LabelApiKeyCreated": "API-Schlüssel \"{0}\" erfolgreich erstellt.",
|
|
||||||
"LabelApiKeyCreatedDescription": "Speichere den API-Schlüssel an einem sicheren Ort, du wirst ihn später nicht mehr abrufen können.",
|
|
||||||
"LabelApiKeyUser": "Im Kontext eines Nutzers agieren",
|
|
||||||
"LabelApiKeyUserDescription": "Dieser API-Schlüssel hat die gleichen Berechtigungen wie der Benutzer, in dessen Namen er erstellt wurde .In den Protokollen wird es aussehen, als ob der Benutzer die Anfrage durchführte.",
|
|
||||||
"LabelApiToken": "API Schlüssel",
|
"LabelApiToken": "API Schlüssel",
|
||||||
"LabelAppend": "Anhängen",
|
"LabelAppend": "Anhängen",
|
||||||
"LabelAudioBitrate": "Audiobitrate (z. B. 128 kbit/s)",
|
"LabelAudioBitrate": "Audiobitrate (z. B. 128 kbit/s)",
|
||||||
@ -355,11 +345,7 @@
|
|||||||
"LabelExample": "Beispiel",
|
"LabelExample": "Beispiel",
|
||||||
"LabelExpandSeries": "Serie ausklappen",
|
"LabelExpandSeries": "Serie ausklappen",
|
||||||
"LabelExpandSubSeries": "Unterserie ausklappen",
|
"LabelExpandSubSeries": "Unterserie ausklappen",
|
||||||
"LabelExpired": "Abgelaufen",
|
"LabelExplicit": "Explizit (Altersbeschränkung)",
|
||||||
"LabelExpiresAt": "Läuft ab am",
|
|
||||||
"LabelExpiresInSeconds": "Ablauf in (seconds) Sekunden",
|
|
||||||
"LabelExpiresNever": "Niemals",
|
|
||||||
"LabelExplicit": "Explizit",
|
|
||||||
"LabelExplicitChecked": "Explicit (Altersbeschränkung) (angehakt)",
|
"LabelExplicitChecked": "Explicit (Altersbeschränkung) (angehakt)",
|
||||||
"LabelExplicitUnchecked": "Not Explicit (Altersbeschränkung) (nicht angehakt)",
|
"LabelExplicitUnchecked": "Not Explicit (Altersbeschränkung) (nicht angehakt)",
|
||||||
"LabelExportOPML": "OPML exportieren",
|
"LabelExportOPML": "OPML exportieren",
|
||||||
@ -438,7 +424,6 @@
|
|||||||
"LabelLogLevelWarn": "Warnungen",
|
"LabelLogLevelWarn": "Warnungen",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Suche nach neuen Episoden nach diesem Datum",
|
"LabelLookForNewEpisodesAfterDate": "Suche nach neuen Episoden nach diesem Datum",
|
||||||
"LabelLowestPriority": "Niedrigste Priorität",
|
"LabelLowestPriority": "Niedrigste Priorität",
|
||||||
"LabelMatchConfidence": "Zuversicht",
|
|
||||||
"LabelMatchExistingUsersBy": "Zuordnen existierender Benutzer mit",
|
"LabelMatchExistingUsersBy": "Zuordnen existierender Benutzer mit",
|
||||||
"LabelMatchExistingUsersByDescription": "Wird zum Verbinden vorhandener Benutzer verwendet. Sobald die Verbindung hergestellt ist, wird den Benutzern eine eindeutige ID vom SSO-Anbieter zugeordnet",
|
"LabelMatchExistingUsersByDescription": "Wird zum Verbinden vorhandener Benutzer verwendet. Sobald die Verbindung hergestellt ist, wird den Benutzern eine eindeutige ID vom SSO-Anbieter zugeordnet",
|
||||||
"LabelMaxEpisodesToDownload": "Max. Anzahl an Episoden zum Herunterladen, 0 für unbegrenzte Episoden.",
|
"LabelMaxEpisodesToDownload": "Max. Anzahl an Episoden zum Herunterladen, 0 für unbegrenzte Episoden.",
|
||||||
@ -469,7 +454,6 @@
|
|||||||
"LabelNewestEpisodes": "Neueste Episoden",
|
"LabelNewestEpisodes": "Neueste Episoden",
|
||||||
"LabelNextBackupDate": "Nächstes Sicherungsdatum",
|
"LabelNextBackupDate": "Nächstes Sicherungsdatum",
|
||||||
"LabelNextScheduledRun": "Nächster planmäßiger Durchlauf",
|
"LabelNextScheduledRun": "Nächster planmäßiger Durchlauf",
|
||||||
"LabelNoApiKeys": "Keine API-Schlüssel vorhanden",
|
|
||||||
"LabelNoCustomMetadataProviders": "Keine benutzerdefinierten Metadata Anbieter",
|
"LabelNoCustomMetadataProviders": "Keine benutzerdefinierten Metadata Anbieter",
|
||||||
"LabelNoEpisodesSelected": "Keine Episoden ausgewählt",
|
"LabelNoEpisodesSelected": "Keine Episoden ausgewählt",
|
||||||
"LabelNotFinished": "Nicht beendet",
|
"LabelNotFinished": "Nicht beendet",
|
||||||
@ -546,7 +530,6 @@
|
|||||||
"LabelReleaseDate": "Veröffentlichungsdatum",
|
"LabelReleaseDate": "Veröffentlichungsdatum",
|
||||||
"LabelRemoveAllMetadataAbs": "Alle metadata.abs Dateien löschen",
|
"LabelRemoveAllMetadataAbs": "Alle metadata.abs Dateien löschen",
|
||||||
"LabelRemoveAllMetadataJson": "Alle metadata.json Dateien löschen",
|
"LabelRemoveAllMetadataJson": "Alle metadata.json Dateien löschen",
|
||||||
"LabelRemoveAudibleBranding": "Audible Intro sowie Outro aus Kapiteln entfernen",
|
|
||||||
"LabelRemoveCover": "Entferne Titelbild",
|
"LabelRemoveCover": "Entferne Titelbild",
|
||||||
"LabelRemoveMetadataFile": "Metadaten-Dateien in Bibliotheksordnern löschen",
|
"LabelRemoveMetadataFile": "Metadaten-Dateien in Bibliotheksordnern löschen",
|
||||||
"LabelRemoveMetadataFileHelp": "Alle metadata.json und metadata.abs Dateien aus den Ordnern {0} löschen.",
|
"LabelRemoveMetadataFileHelp": "Alle metadata.json und metadata.abs Dateien aus den Ordnern {0} löschen.",
|
||||||
@ -559,7 +542,6 @@
|
|||||||
"LabelSelectAll": "Alles auswählen",
|
"LabelSelectAll": "Alles auswählen",
|
||||||
"LabelSelectAllEpisodes": "Alle Episoden auswählen",
|
"LabelSelectAllEpisodes": "Alle Episoden auswählen",
|
||||||
"LabelSelectEpisodesShowing": "{0} ausgewählte Episoden werden angezeigt",
|
"LabelSelectEpisodesShowing": "{0} ausgewählte Episoden werden angezeigt",
|
||||||
"LabelSelectUser": "Ausgewählter Benutzer",
|
|
||||||
"LabelSelectUsers": "Benutzer auswählen",
|
"LabelSelectUsers": "Benutzer auswählen",
|
||||||
"LabelSendEbookToDevice": "E-Buch senden an …",
|
"LabelSendEbookToDevice": "E-Buch senden an …",
|
||||||
"LabelSequence": "Reihenfolge",
|
"LabelSequence": "Reihenfolge",
|
||||||
@ -724,9 +706,6 @@
|
|||||||
"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": "Stellen Sie sicher, dass Sie die ASIN aus der richtigen Audible Region verwenden, nicht Amazon.",
|
||||||
"MessageAuthenticationLegacyTokenWarning": "Alte API tokens werden in Zukunft entfernt. Benutze stattdessen <a href=\"/config/api-keys\">API Keys</a>.",
|
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Nach dem Speichern muss der Server neugestartet werden um die OIDC Änderungen zu übernehmen.",
|
|
||||||
"MessageAuthenticationSecurityMessage": "Die Anmeldung wurde abgesichert. Benutzersitzungen werden getrennt, alle Benutzer müssen sich erneut anmelden.",
|
|
||||||
"MessageBackupsDescription": "In einer Sicherung werden Benutzer, Benutzerfortschritte, Details zu den Bibliotheksobjekten, Servereinstellungen und Bilder welche in <code>/metadata/items</code> & <code>/metadata/authors</code> gespeichert sind gespeichert. Sicherungen enthalten keine Dateien welche in den einzelnen Bibliotheksordnern (Medien-Ordnern) gespeichert sind.",
|
"MessageBackupsDescription": "In einer Sicherung werden Benutzer, Benutzerfortschritte, Details zu den Bibliotheksobjekten, Servereinstellungen und Bilder welche in <code>/metadata/items</code> & <code>/metadata/authors</code> gespeichert sind gespeichert. Sicherungen enthalten keine Dateien welche in den einzelnen Bibliotheksordnern (Medien-Ordnern) gespeichert sind.",
|
||||||
"MessageBackupsLocationEditNote": "Hinweis: Durch das Aktualisieren des Backup-Speicherorts werden vorhandene Sicherungen nicht verschoben oder geändert",
|
"MessageBackupsLocationEditNote": "Hinweis: Durch das Aktualisieren des Backup-Speicherorts werden vorhandene Sicherungen nicht verschoben oder geändert",
|
||||||
"MessageBackupsLocationNoEditNote": "Hinweis: Der Sicherungsspeicherort wird über eine Umgebungsvariable festgelegt und kann hier nicht geändert werden.",
|
"MessageBackupsLocationNoEditNote": "Hinweis: Der Sicherungsspeicherort wird über eine Umgebungsvariable festgelegt und kann hier nicht geändert werden.",
|
||||||
@ -748,7 +727,6 @@
|
|||||||
"MessageChaptersNotFound": "Kapitel gefunden nicht",
|
"MessageChaptersNotFound": "Kapitel gefunden nicht",
|
||||||
"MessageCheckingCron": "Überprüfe Cron...",
|
"MessageCheckingCron": "Überprüfe Cron...",
|
||||||
"MessageConfirmCloseFeed": "Feed wird geschlossen! Bist du dir sicher?",
|
"MessageConfirmCloseFeed": "Feed wird geschlossen! Bist du dir sicher?",
|
||||||
"MessageConfirmDeleteApiKey": "Möchtest du den API-Schlüssel \"{0}\" wirklich entfernen ?",
|
|
||||||
"MessageConfirmDeleteBackup": "Sicherung für {0} wird gelöscht! Bist du dir sicher?",
|
"MessageConfirmDeleteBackup": "Sicherung für {0} wird gelöscht! Bist du dir sicher?",
|
||||||
"MessageConfirmDeleteDevice": "Möchtest du das Lesegerät „{0}“ wirklich löschen?",
|
"MessageConfirmDeleteDevice": "Möchtest du das Lesegerät „{0}“ wirklich löschen?",
|
||||||
"MessageConfirmDeleteFile": "Datei wird vom System gelöscht! Bist du dir sicher?",
|
"MessageConfirmDeleteFile": "Datei wird vom System gelöscht! Bist du dir sicher?",
|
||||||
@ -776,7 +754,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "Autor \"{0}\" wird enfernt! Bist du dir sicher?",
|
"MessageConfirmRemoveAuthor": "Autor \"{0}\" wird enfernt! Bist du dir sicher?",
|
||||||
"MessageConfirmRemoveCollection": "Sammlung \"{0}\" wird entfernt! Bist du dir sicher?",
|
"MessageConfirmRemoveCollection": "Sammlung \"{0}\" wird entfernt! Bist du dir sicher?",
|
||||||
"MessageConfirmRemoveEpisode": "Episode \"{0}\" wird entfernt! Bist du dir sicher?",
|
"MessageConfirmRemoveEpisode": "Episode \"{0}\" wird entfernt! Bist du dir sicher?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Hinweis: Die Audiodatei wird nicht gelöscht, es sei denn \"Datei dauerhaft löschen\" ist aktiviert",
|
|
||||||
"MessageConfirmRemoveEpisodes": "{0} Episoden werden entfernt! Bist du dir sicher?",
|
"MessageConfirmRemoveEpisodes": "{0} Episoden werden entfernt! Bist du dir sicher?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Bist du dir sicher, dass du {0} Hörsitzungen enfernen möchtest?",
|
"MessageConfirmRemoveListeningSessions": "Bist du dir sicher, dass du {0} Hörsitzungen enfernen möchtest?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Bist du sicher, dass du alle metadata.{0} Dateien in deinen Bibliotheksordnern löschen willst?",
|
"MessageConfirmRemoveMetadataFiles": "Bist du sicher, dass du alle metadata.{0} Dateien in deinen Bibliotheksordnern löschen willst?",
|
||||||
@ -872,13 +849,12 @@
|
|||||||
"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 Nutzer wird empfohlen, diese Funktion deaktiviert zu lassen und stattdessen die Ordnerüberwachung aktiviert zu lassen. Die Ordnerüberwachung erkennt automatisch Änderungen in deinen Bibliotheksordnern. Da die Ordnerüberwachung jedoch nicht mit jedem Dateisystem (z.B. NFS) funktioniert, können alternativ hier geplante Bibliotheks-Scans aktiviert werden.",
|
||||||
"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",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Serie Abfolge kann keine Leerzeichen enthalten",
|
|
||||||
"MessageServerCouldNotBeReached": "Server kann nicht erreicht werden",
|
"MessageServerCouldNotBeReached": "Server kann nicht erreicht werden",
|
||||||
"MessageSetChaptersFromTracksDescription": "Kapitelerstellung basiert auf den existierenden einzelnen Audiodateien. Pro existierende Audiodatei wird 1 Kapitel erstellt, wobei deren Kapitelname aus dem Audiodateinamen extrahiert wird",
|
"MessageSetChaptersFromTracksDescription": "Kaitelerstellung basiert auf den existierenden einzelnen Audiodateien. Pro existierende Audiodatei wird 1 Kapitel erstellt, wobei deren Kapitelname aus dem Audiodateinamen extrahiert wird",
|
||||||
"MessageShareExpirationWillBe": "Läuft am <strong>{0}</strong> ab",
|
"MessageShareExpirationWillBe": "Läuft am <strong>{0}</strong> ab",
|
||||||
"MessageShareExpiresIn": "Läuft in {0} ab",
|
"MessageShareExpiresIn": "Läuft in {0} ab",
|
||||||
"MessageShareURLWillBe": "Der Freigabe Link wird <strong>{0}</strong> sein",
|
"MessageShareURLWillBe": "Der Freigabe Link wird <strong>{0}</strong> sein",
|
||||||
@ -938,8 +914,6 @@
|
|||||||
"NotificationOnBackupCompletedDescription": "Wird ausgeführt wenn ein Backup erstellt wurde",
|
"NotificationOnBackupCompletedDescription": "Wird ausgeführt wenn ein Backup erstellt wurde",
|
||||||
"NotificationOnBackupFailedDescription": "Wird ausgeführt wenn ein Backup fehlgeschlagen ist",
|
"NotificationOnBackupFailedDescription": "Wird ausgeführt wenn ein Backup fehlgeschlagen ist",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Wird ausgeführt wenn eine Podcast Folge automatisch heruntergeladen wird",
|
"NotificationOnEpisodeDownloadedDescription": "Wird ausgeführt wenn eine Podcast Folge automatisch heruntergeladen wird",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Wird ausgeführt wenn automatische Downloads von Episoden wegen zu vielen fehlgeschlagenen Versuchen deaktiviert sind",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Wird ausgelöst, wenn die RSS-Feed-Anforderung für einen automatischen Episoden-Download fehlschlägt",
|
|
||||||
"NotificationOnTestDescription": "Wird ausgeführt wenn das Benachrichtigungssystem getestet wird",
|
"NotificationOnTestDescription": "Wird ausgeführt wenn das Benachrichtigungssystem getestet wird",
|
||||||
"PlaceholderNewCollection": "Neuer Sammlungsname",
|
"PlaceholderNewCollection": "Neuer Sammlungsname",
|
||||||
"PlaceholderNewFolderPath": "Neuer Ordnerpfad",
|
"PlaceholderNewFolderPath": "Neuer Ordnerpfad",
|
||||||
@ -997,8 +971,6 @@
|
|||||||
"ToastCachePurgeFailed": "Cache leeren fehlgeschlagen",
|
"ToastCachePurgeFailed": "Cache leeren fehlgeschlagen",
|
||||||
"ToastCachePurgeSuccess": "Cache geleert",
|
"ToastCachePurgeSuccess": "Cache geleert",
|
||||||
"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.",
|
|
||||||
"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.",
|
|
||||||
"ToastChaptersMustHaveTitles": "Kapitel benötigen eindeutige Namen",
|
"ToastChaptersMustHaveTitles": "Kapitel benötigen eindeutige Namen",
|
||||||
"ToastChaptersRemoved": "Kapitel entfernt",
|
"ToastChaptersRemoved": "Kapitel entfernt",
|
||||||
"ToastChaptersUpdated": "Kapitel aktualisiert",
|
"ToastChaptersUpdated": "Kapitel aktualisiert",
|
||||||
@ -1020,9 +992,7 @@
|
|||||||
"ToastEpisodeDownloadQueueClearSuccess": "Warteschlange für Episoden-Downloads gelöscht",
|
"ToastEpisodeDownloadQueueClearSuccess": "Warteschlange für Episoden-Downloads gelöscht",
|
||||||
"ToastEpisodeUpdateSuccess": "{0} Episoden aktualisiert",
|
"ToastEpisodeUpdateSuccess": "{0} Episoden aktualisiert",
|
||||||
"ToastErrorCannotShare": "Das kann nicht nativ auf diesem Gerät freigegeben werden",
|
"ToastErrorCannotShare": "Das kann nicht nativ auf diesem Gerät freigegeben werden",
|
||||||
"ToastFailedToCreate": "Fehler beim Erzeugen",
|
"ToastFailedToLoadData": "Daten laden fehlgeschlagen",
|
||||||
"ToastFailedToDelete": "Fehler beim Löschen",
|
|
||||||
"ToastFailedToLoadData": "Fehler beim laden der Daten",
|
|
||||||
"ToastFailedToMatch": "Fehler beim Abgleich",
|
"ToastFailedToMatch": "Fehler beim Abgleich",
|
||||||
"ToastFailedToShare": "Fehler beim Teilen",
|
"ToastFailedToShare": "Fehler beim Teilen",
|
||||||
"ToastFailedToUpdate": "Aktualisierung ist fehlgeschlagen",
|
"ToastFailedToUpdate": "Aktualisierung ist fehlgeschlagen",
|
||||||
@ -1053,7 +1023,6 @@
|
|||||||
"ToastMustHaveAtLeastOnePath": "Es muss mindestens ein Pfad angegeben werden",
|
"ToastMustHaveAtLeastOnePath": "Es muss mindestens ein Pfad angegeben werden",
|
||||||
"ToastNameEmailRequired": "Name und E-Mail sind erforderlich",
|
"ToastNameEmailRequired": "Name und E-Mail sind erforderlich",
|
||||||
"ToastNameRequired": "Name ist erforderlich",
|
"ToastNameRequired": "Name ist erforderlich",
|
||||||
"ToastNewApiKeyUserError": "Bitte wähle einen Benutzer aus (Pflichtfeld)",
|
|
||||||
"ToastNewEpisodesFound": "{0} neue Episoden gefunden",
|
"ToastNewEpisodesFound": "{0} neue Episoden gefunden",
|
||||||
"ToastNewUserCreatedFailed": "Fehler beim erstellen des Accounts: \"{ 0}\"",
|
"ToastNewUserCreatedFailed": "Fehler beim erstellen des Accounts: \"{ 0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "Neuer Account erstellt",
|
"ToastNewUserCreatedSuccess": "Neuer Account erstellt",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Add",
|
"ButtonAdd": "Add",
|
||||||
"ButtonAddApiKey": "Add API Key",
|
|
||||||
"ButtonAddChapters": "Add Chapters",
|
"ButtonAddChapters": "Add Chapters",
|
||||||
"ButtonAddDevice": "Add Device",
|
"ButtonAddDevice": "Add Device",
|
||||||
"ButtonAddLibrary": "Add Library",
|
"ButtonAddLibrary": "Add Library",
|
||||||
@ -21,7 +20,6 @@
|
|||||||
"ButtonChooseAFolder": "Choose a folder",
|
"ButtonChooseAFolder": "Choose a folder",
|
||||||
"ButtonChooseFiles": "Choose files",
|
"ButtonChooseFiles": "Choose files",
|
||||||
"ButtonClearFilter": "Clear Filter",
|
"ButtonClearFilter": "Clear Filter",
|
||||||
"ButtonClose": "Close",
|
|
||||||
"ButtonCloseFeed": "Close Feed",
|
"ButtonCloseFeed": "Close Feed",
|
||||||
"ButtonCloseSession": "Close Open Session",
|
"ButtonCloseSession": "Close Open Session",
|
||||||
"ButtonCollections": "Collections",
|
"ButtonCollections": "Collections",
|
||||||
@ -121,7 +119,6 @@
|
|||||||
"HeaderAccount": "Account",
|
"HeaderAccount": "Account",
|
||||||
"HeaderAddCustomMetadataProvider": "Add Custom Metadata Provider",
|
"HeaderAddCustomMetadataProvider": "Add Custom Metadata Provider",
|
||||||
"HeaderAdvanced": "Advanced",
|
"HeaderAdvanced": "Advanced",
|
||||||
"HeaderApiKeys": "API Keys",
|
|
||||||
"HeaderAppriseNotificationSettings": "Apprise Notification Settings",
|
"HeaderAppriseNotificationSettings": "Apprise Notification Settings",
|
||||||
"HeaderAudioTracks": "Audio Tracks",
|
"HeaderAudioTracks": "Audio Tracks",
|
||||||
"HeaderAudiobookTools": "Audiobook File Management Tools",
|
"HeaderAudiobookTools": "Audiobook File Management Tools",
|
||||||
@ -165,7 +162,6 @@
|
|||||||
"HeaderMetadataOrderOfPrecedence": "Metadata order of precedence",
|
"HeaderMetadataOrderOfPrecedence": "Metadata order of precedence",
|
||||||
"HeaderMetadataToEmbed": "Metadata to embed",
|
"HeaderMetadataToEmbed": "Metadata to embed",
|
||||||
"HeaderNewAccount": "New Account",
|
"HeaderNewAccount": "New Account",
|
||||||
"HeaderNewApiKey": "New API Key",
|
|
||||||
"HeaderNewLibrary": "New Library",
|
"HeaderNewLibrary": "New Library",
|
||||||
"HeaderNotificationCreate": "Create Notification",
|
"HeaderNotificationCreate": "Create Notification",
|
||||||
"HeaderNotificationUpdate": "Update Notification",
|
"HeaderNotificationUpdate": "Update Notification",
|
||||||
@ -210,7 +206,6 @@
|
|||||||
"HeaderTableOfContents": "Table of Contents",
|
"HeaderTableOfContents": "Table of Contents",
|
||||||
"HeaderTools": "Tools",
|
"HeaderTools": "Tools",
|
||||||
"HeaderUpdateAccount": "Update Account",
|
"HeaderUpdateAccount": "Update Account",
|
||||||
"HeaderUpdateApiKey": "Update API Key",
|
|
||||||
"HeaderUpdateAuthor": "Update Author",
|
"HeaderUpdateAuthor": "Update Author",
|
||||||
"HeaderUpdateDetails": "Update Details",
|
"HeaderUpdateDetails": "Update Details",
|
||||||
"HeaderUpdateLibrary": "Update Library",
|
"HeaderUpdateLibrary": "Update Library",
|
||||||
@ -240,10 +235,6 @@
|
|||||||
"LabelAllUsersExcludingGuests": "All users excluding guests",
|
"LabelAllUsersExcludingGuests": "All users excluding guests",
|
||||||
"LabelAllUsersIncludingGuests": "All users including guests",
|
"LabelAllUsersIncludingGuests": "All users including guests",
|
||||||
"LabelAlreadyInYourLibrary": "Already in your library",
|
"LabelAlreadyInYourLibrary": "Already in your library",
|
||||||
"LabelApiKeyCreated": "API Key \"{0}\" created successfully.",
|
|
||||||
"LabelApiKeyCreatedDescription": "Make sure to copy the API key now as you will not be able to see this again.",
|
|
||||||
"LabelApiKeyUser": "Act on behalf of user",
|
|
||||||
"LabelApiKeyUserDescription": "This API key will have the same permissions as the user it is acting on behalf of. This will appear the same in logs as if the user was making the request.",
|
|
||||||
"LabelApiToken": "API Token",
|
"LabelApiToken": "API Token",
|
||||||
"LabelAppend": "Append",
|
"LabelAppend": "Append",
|
||||||
"LabelAudioBitrate": "Audio Bitrate (e.g. 128k)",
|
"LabelAudioBitrate": "Audio Bitrate (e.g. 128k)",
|
||||||
@ -355,10 +346,6 @@
|
|||||||
"LabelExample": "Example",
|
"LabelExample": "Example",
|
||||||
"LabelExpandSeries": "Expand Series",
|
"LabelExpandSeries": "Expand Series",
|
||||||
"LabelExpandSubSeries": "Expand Sub Series",
|
"LabelExpandSubSeries": "Expand Sub Series",
|
||||||
"LabelExpired": "Expired",
|
|
||||||
"LabelExpiresAt": "Expires At",
|
|
||||||
"LabelExpiresInSeconds": "Expires in (seconds)",
|
|
||||||
"LabelExpiresNever": "Never",
|
|
||||||
"LabelExplicit": "Explicit",
|
"LabelExplicit": "Explicit",
|
||||||
"LabelExplicitChecked": "Explicit (checked)",
|
"LabelExplicitChecked": "Explicit (checked)",
|
||||||
"LabelExplicitUnchecked": "Not Explicit (unchecked)",
|
"LabelExplicitUnchecked": "Not Explicit (unchecked)",
|
||||||
@ -418,7 +405,6 @@
|
|||||||
"LabelLanguages": "Languages",
|
"LabelLanguages": "Languages",
|
||||||
"LabelLastBookAdded": "Last Book Added",
|
"LabelLastBookAdded": "Last Book Added",
|
||||||
"LabelLastBookUpdated": "Last Book Updated",
|
"LabelLastBookUpdated": "Last Book Updated",
|
||||||
"LabelLastProgressDate": "Last progress: {0}",
|
|
||||||
"LabelLastSeen": "Last Seen",
|
"LabelLastSeen": "Last Seen",
|
||||||
"LabelLastTime": "Last Time",
|
"LabelLastTime": "Last Time",
|
||||||
"LabelLastUpdate": "Last Update",
|
"LabelLastUpdate": "Last Update",
|
||||||
@ -431,7 +417,6 @@
|
|||||||
"LabelLibraryFilterSublistEmpty": "No {0}",
|
"LabelLibraryFilterSublistEmpty": "No {0}",
|
||||||
"LabelLibraryItem": "Library Item",
|
"LabelLibraryItem": "Library Item",
|
||||||
"LabelLibraryName": "Library Name",
|
"LabelLibraryName": "Library Name",
|
||||||
"LabelLibrarySortByProgress": "Progress Updated",
|
|
||||||
"LabelLimit": "Limit",
|
"LabelLimit": "Limit",
|
||||||
"LabelLineSpacing": "Line spacing",
|
"LabelLineSpacing": "Line spacing",
|
||||||
"LabelListenAgain": "Listen Again",
|
"LabelListenAgain": "Listen Again",
|
||||||
@ -440,7 +425,6 @@
|
|||||||
"LabelLogLevelWarn": "Warn",
|
"LabelLogLevelWarn": "Warn",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Look for new episodes after this date",
|
"LabelLookForNewEpisodesAfterDate": "Look for new episodes after this date",
|
||||||
"LabelLowestPriority": "Lowest Priority",
|
"LabelLowestPriority": "Lowest Priority",
|
||||||
"LabelMatchConfidence": "Confidence",
|
|
||||||
"LabelMatchExistingUsersBy": "Match existing users by",
|
"LabelMatchExistingUsersBy": "Match existing users by",
|
||||||
"LabelMatchExistingUsersByDescription": "Used for connecting existing users. Once connected, users will be matched by a unique id from your SSO provider",
|
"LabelMatchExistingUsersByDescription": "Used for connecting existing users. Once connected, users will be matched by a unique id from your SSO provider",
|
||||||
"LabelMaxEpisodesToDownload": "Max # of episodes to download. Use 0 for unlimited.",
|
"LabelMaxEpisodesToDownload": "Max # of episodes to download. Use 0 for unlimited.",
|
||||||
@ -471,7 +455,6 @@
|
|||||||
"LabelNewestEpisodes": "Newest Episodes",
|
"LabelNewestEpisodes": "Newest Episodes",
|
||||||
"LabelNextBackupDate": "Next backup date",
|
"LabelNextBackupDate": "Next backup date",
|
||||||
"LabelNextScheduledRun": "Next scheduled run",
|
"LabelNextScheduledRun": "Next scheduled run",
|
||||||
"LabelNoApiKeys": "No API keys",
|
|
||||||
"LabelNoCustomMetadataProviders": "No custom metadata providers",
|
"LabelNoCustomMetadataProviders": "No custom metadata providers",
|
||||||
"LabelNoEpisodesSelected": "No episodes selected",
|
"LabelNoEpisodesSelected": "No episodes selected",
|
||||||
"LabelNotFinished": "Not Finished",
|
"LabelNotFinished": "Not Finished",
|
||||||
@ -561,7 +544,6 @@
|
|||||||
"LabelSelectAll": "Select all",
|
"LabelSelectAll": "Select all",
|
||||||
"LabelSelectAllEpisodes": "Select all episodes",
|
"LabelSelectAllEpisodes": "Select all episodes",
|
||||||
"LabelSelectEpisodesShowing": "Select {0} episodes showing",
|
"LabelSelectEpisodesShowing": "Select {0} episodes showing",
|
||||||
"LabelSelectUser": "Select user",
|
|
||||||
"LabelSelectUsers": "Select users",
|
"LabelSelectUsers": "Select users",
|
||||||
"LabelSendEbookToDevice": "Send Ebook to...",
|
"LabelSendEbookToDevice": "Send Ebook to...",
|
||||||
"LabelSequence": "Sequence",
|
"LabelSequence": "Sequence",
|
||||||
@ -658,7 +640,6 @@
|
|||||||
"LabelTheme": "Theme",
|
"LabelTheme": "Theme",
|
||||||
"LabelThemeDark": "Dark",
|
"LabelThemeDark": "Dark",
|
||||||
"LabelThemeLight": "Light",
|
"LabelThemeLight": "Light",
|
||||||
"LabelThemeSepia": "Sepia",
|
|
||||||
"LabelTimeBase": "Time Base",
|
"LabelTimeBase": "Time Base",
|
||||||
"LabelTimeDurationXHours": "{0} hours",
|
"LabelTimeDurationXHours": "{0} hours",
|
||||||
"LabelTimeDurationXMinutes": "{0} minutes",
|
"LabelTimeDurationXMinutes": "{0} minutes",
|
||||||
@ -727,9 +708,7 @@
|
|||||||
"MessageAddToPlayerQueue": "Add to player queue",
|
"MessageAddToPlayerQueue": "Add to player queue",
|
||||||
"MessageAppriseDescription": "To use this feature you will need to have an instance of <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> running or an api that will handle those same requests. <br />The Apprise API Url should be the full URL path to send the notification, e.g., if your API instance is served at <code>http://192.168.1.1:8337</code> then you would put <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "To use this feature you will need to have an instance of <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> running or an api that will handle those same requests. <br />The Apprise API Url should be the full URL path to send the notification, e.g., if your API instance is served at <code>http://192.168.1.1:8337</code> then you would put <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Ensure you are using the ASIN from the correct Audible region, not Amazon.",
|
"MessageAsinCheck": "Ensure you are using the ASIN from the correct Audible region, not Amazon.",
|
||||||
"MessageAuthenticationLegacyTokenWarning": "Legacy API tokens will be removed in the future. Use <a href=\"/config/api-keys\">API Keys</a> instead.",
|
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Restart your server after saving to apply OIDC changes.",
|
"MessageAuthenticationOIDCChangesRestart": "Restart your server after saving to apply OIDC changes.",
|
||||||
"MessageAuthenticationSecurityMessage": "Authentication has been improved for security. All users are required to re-login.",
|
|
||||||
"MessageBackupsDescription": "Backups include users, user progress, library item details, server settings, and images stored in <code>/metadata/items</code> & <code>/metadata/authors</code>. Backups <strong>do not</strong> include any files stored in your library folders.",
|
"MessageBackupsDescription": "Backups include users, user progress, library item details, server settings, and images stored in <code>/metadata/items</code> & <code>/metadata/authors</code>. Backups <strong>do not</strong> include any files stored in your library folders.",
|
||||||
"MessageBackupsLocationEditNote": "Note: Updating the backup location will not move or modify existing backups",
|
"MessageBackupsLocationEditNote": "Note: Updating the backup location will not move or modify existing backups",
|
||||||
"MessageBackupsLocationNoEditNote": "Note: The backup location is set through an environment variable and cannot be changed here.",
|
"MessageBackupsLocationNoEditNote": "Note: The backup location is set through an environment variable and cannot be changed here.",
|
||||||
@ -751,7 +730,6 @@
|
|||||||
"MessageChaptersNotFound": "Chapters not found",
|
"MessageChaptersNotFound": "Chapters not found",
|
||||||
"MessageCheckingCron": "Checking cron...",
|
"MessageCheckingCron": "Checking cron...",
|
||||||
"MessageConfirmCloseFeed": "Are you sure you want to close this feed?",
|
"MessageConfirmCloseFeed": "Are you sure you want to close this feed?",
|
||||||
"MessageConfirmDeleteApiKey": "Are you sure you want to delete API key \"{0}\"?",
|
|
||||||
"MessageConfirmDeleteBackup": "Are you sure you want to delete backup for {0}?",
|
"MessageConfirmDeleteBackup": "Are you sure you want to delete backup for {0}?",
|
||||||
"MessageConfirmDeleteDevice": "Are you sure you want to delete e-reader device \"{0}\"?",
|
"MessageConfirmDeleteDevice": "Are you sure you want to delete e-reader device \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "This will delete the file from your file system. Are you sure?",
|
"MessageConfirmDeleteFile": "This will delete the file from your file system. Are you sure?",
|
||||||
@ -779,7 +757,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "Are you sure you want to remove author \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Are you sure you want to remove author \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Are you sure you want to remove collection \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Are you sure you want to remove collection \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Are you sure you want to remove episode \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Are you sure you want to remove episode \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Note: This does not delete the audio file unless toggling \"Hard delete file\"",
|
|
||||||
"MessageConfirmRemoveEpisodes": "Are you sure you want to remove {0} episodes?",
|
"MessageConfirmRemoveEpisodes": "Are you sure you want to remove {0} episodes?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Are you sure you want to remove {0} listening sessions?",
|
"MessageConfirmRemoveListeningSessions": "Are you sure you want to remove {0} listening sessions?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Are you sure you want to remove all metadata.{0} files in your library item folders?",
|
"MessageConfirmRemoveMetadataFiles": "Are you sure you want to remove all metadata.{0} files in your library item folders?",
|
||||||
@ -879,7 +856,6 @@
|
|||||||
"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",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Series sequence cannot contain spaces",
|
|
||||||
"MessageServerCouldNotBeReached": "Server could not be reached",
|
"MessageServerCouldNotBeReached": "Server could not be reached",
|
||||||
"MessageSetChaptersFromTracksDescription": "Set chapters using each audio file as a chapter and chapter title as the audio file name",
|
"MessageSetChaptersFromTracksDescription": "Set chapters using each audio file as a chapter and chapter title as the audio file name",
|
||||||
"MessageShareExpirationWillBe": "Expiration will be <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Expiration will be <strong>{0}</strong>",
|
||||||
@ -941,8 +917,6 @@
|
|||||||
"NotificationOnBackupCompletedDescription": "Triggered when a backup is completed",
|
"NotificationOnBackupCompletedDescription": "Triggered when a backup is completed",
|
||||||
"NotificationOnBackupFailedDescription": "Triggered when a backup fails",
|
"NotificationOnBackupFailedDescription": "Triggered when a backup fails",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Triggered when a podcast episode is auto-downloaded",
|
"NotificationOnEpisodeDownloadedDescription": "Triggered when a podcast episode is auto-downloaded",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Triggered when automatic episode downloads are disabled due to too many failed attempts",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Triggered when the RSS feed request fails for an automatic episode download",
|
|
||||||
"NotificationOnTestDescription": "Event for testing the notification system",
|
"NotificationOnTestDescription": "Event for testing the notification system",
|
||||||
"PlaceholderNewCollection": "New collection name",
|
"PlaceholderNewCollection": "New collection name",
|
||||||
"PlaceholderNewFolderPath": "New folder path",
|
"PlaceholderNewFolderPath": "New folder path",
|
||||||
@ -1023,8 +997,6 @@
|
|||||||
"ToastEpisodeDownloadQueueClearSuccess": "Episode download queue cleared",
|
"ToastEpisodeDownloadQueueClearSuccess": "Episode download queue cleared",
|
||||||
"ToastEpisodeUpdateSuccess": "{0} episodes updated",
|
"ToastEpisodeUpdateSuccess": "{0} episodes updated",
|
||||||
"ToastErrorCannotShare": "Cannot share natively on this device",
|
"ToastErrorCannotShare": "Cannot share natively on this device",
|
||||||
"ToastFailedToCreate": "Failed to create",
|
|
||||||
"ToastFailedToDelete": "Failed to delete",
|
|
||||||
"ToastFailedToLoadData": "Failed to load data",
|
"ToastFailedToLoadData": "Failed to load data",
|
||||||
"ToastFailedToMatch": "Failed to match",
|
"ToastFailedToMatch": "Failed to match",
|
||||||
"ToastFailedToShare": "Failed to share",
|
"ToastFailedToShare": "Failed to share",
|
||||||
@ -1056,7 +1028,6 @@
|
|||||||
"ToastMustHaveAtLeastOnePath": "Must have at least one path",
|
"ToastMustHaveAtLeastOnePath": "Must have at least one path",
|
||||||
"ToastNameEmailRequired": "Name and email are required",
|
"ToastNameEmailRequired": "Name and email are required",
|
||||||
"ToastNameRequired": "Name is required",
|
"ToastNameRequired": "Name is required",
|
||||||
"ToastNewApiKeyUserError": "Must select a user",
|
|
||||||
"ToastNewEpisodesFound": "{0} new episodes found",
|
"ToastNewEpisodesFound": "{0} new episodes found",
|
||||||
"ToastNewUserCreatedFailed": "Failed to create account: \"{0}\"",
|
"ToastNewUserCreatedFailed": "Failed to create account: \"{0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "New account created",
|
"ToastNewUserCreatedSuccess": "New account created",
|
||||||
|
@ -462,17 +462,17 @@
|
|||||||
"LabelNotes": "Notas",
|
"LabelNotes": "Notas",
|
||||||
"LabelNotificationAppriseURL": "URL(s) de Apprise",
|
"LabelNotificationAppriseURL": "URL(s) de Apprise",
|
||||||
"LabelNotificationAvailableVariables": "Variables disponibles",
|
"LabelNotificationAvailableVariables": "Variables disponibles",
|
||||||
"LabelNotificationBodyTemplate": "Plantilla de cuerpo",
|
"LabelNotificationBodyTemplate": "Plantilla de Cuerpo",
|
||||||
"LabelNotificationEvent": "Evento de notificación",
|
"LabelNotificationEvent": "Evento de Notificación",
|
||||||
"LabelNotificationTitleTemplate": "Plantilla de título",
|
"LabelNotificationTitleTemplate": "Plantilla de Titulo",
|
||||||
"LabelNotificationsMaxFailedAttempts": "Máximo de intentos fallidos",
|
"LabelNotificationsMaxFailedAttempts": "Máximo de Intentos Fallidos",
|
||||||
"LabelNotificationsMaxFailedAttemptsHelp": "Las notificaciones se desactivan después de fallar este número de veces",
|
"LabelNotificationsMaxFailedAttemptsHelp": "Las notificaciones se desactivan después de fallar este número de veces",
|
||||||
"LabelNotificationsMaxQueueSize": "Tamaño máximo de la cola de notificaciones",
|
"LabelNotificationsMaxQueueSize": "Tamaño máximo de la cola de notificaciones",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Las notificaciones están limitadas a 1 por segundo. Las notificaciones serán ignoradas si llegan al numero máximo de cola para prevenir spam de eventos.",
|
"LabelNotificationsMaxQueueSizeHelp": "Las notificaciones están limitadas a 1 por segundo. Las notificaciones serán ignoradas si llegan al numero máximo de cola para prevenir spam de eventos.",
|
||||||
"LabelNumberOfBooks": "Número de libros",
|
"LabelNumberOfBooks": "Número de libros",
|
||||||
"LabelNumberOfEpisodes": "N.º de episodios",
|
"LabelNumberOfEpisodes": "N.º de episodios",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Nombre de la notificación de OpenID que contiene permisos avanzados para acciones de usuario dentro de la aplicación que se aplicarán a roles que no sean de administrador (<b>si están configurados</b>). Si el reclamo no aparece en la respuesta, se denegará el acceso a ABS. Si falta una sola opción, se tratará como <code>falsa</code>. Asegúrese de que la notificación del proveedor de identidades coincida con la estructura esperada:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Nombre de la notificación de OpenID que contiene permisos avanzados para acciones de usuario dentro de la aplicación que se aplicarán a roles que no sean de administrador (<b>si están configurados</b>). Si el reclamo no aparece en la respuesta, se denegará el acceso a ABS. Si falta una sola opción, se tratará como <code>falsa</code>. Asegúrese de que la notificación del proveedor de identidades coincida con la estructura esperada:",
|
||||||
"LabelOpenIDClaims": "Deje las siguientes opciones vacías para desactivar la asignación avanzada de grupos y permisos, lo que asignaría de manera automática al grupo «Usuario».",
|
"LabelOpenIDClaims": "Deje las siguientes opciones vacías para deshabilitar la asignación avanzada de grupos y permisos, lo que asignaría de manera automática al grupo 'Usuario'.",
|
||||||
"LabelOpenIDGroupClaimDescription": "Nombre de la declaración OpenID que contiene una lista de grupos del usuario. Comúnmente conocidos como <code>grupos</code>. <b>Si se configura</b>, la aplicación asignará automáticamente roles en función de la pertenencia a grupos del usuario, siempre que estos grupos se denominen \"admin\", \"user\" o \"guest\" en la notificación. La solicitud debe contener una lista, y si un usuario pertenece a varios grupos, la aplicación asignará el rol correspondiente al mayor nivel de acceso. Si ningún grupo coincide, se denegará el acceso.",
|
"LabelOpenIDGroupClaimDescription": "Nombre de la declaración OpenID que contiene una lista de grupos del usuario. Comúnmente conocidos como <code>grupos</code>. <b>Si se configura</b>, la aplicación asignará automáticamente roles en función de la pertenencia a grupos del usuario, siempre que estos grupos se denominen \"admin\", \"user\" o \"guest\" en la notificación. La solicitud debe contener una lista, y si un usuario pertenece a varios grupos, la aplicación asignará el rol correspondiente al mayor nivel de acceso. Si ningún grupo coincide, se denegará el acceso.",
|
||||||
"LabelOpenRSSFeed": "Abrir suministro RSS",
|
"LabelOpenRSSFeed": "Abrir suministro RSS",
|
||||||
"LabelOverwrite": "Sobrescribir",
|
"LabelOverwrite": "Sobrescribir",
|
||||||
@ -499,7 +499,7 @@
|
|||||||
"LabelPodcastType": "Tipo de pódcast",
|
"LabelPodcastType": "Tipo de pódcast",
|
||||||
"LabelPodcasts": "Pódcast",
|
"LabelPodcasts": "Pódcast",
|
||||||
"LabelPort": "Puerto",
|
"LabelPort": "Puerto",
|
||||||
"LabelPrefixesToIgnore": "Prefijos para ignorar (no distingue entre mayúsculas y minúsculas)",
|
"LabelPrefixesToIgnore": "Prefijos para Ignorar (no distingue entre mayúsculas y minúsculas.)",
|
||||||
"LabelPreventIndexing": "Evite que los directorios de pódcast de iTunes y Google indicen su suministro",
|
"LabelPreventIndexing": "Evite que los directorios de pódcast de iTunes y Google indicen su suministro",
|
||||||
"LabelPrimaryEbook": "Libro electrónico principal",
|
"LabelPrimaryEbook": "Libro electrónico principal",
|
||||||
"LabelProgress": "Progreso",
|
"LabelProgress": "Progreso",
|
||||||
@ -515,7 +515,7 @@
|
|||||||
"LabelRSSFeedCustomOwnerEmail": "Correo electrónico de dueño personalizado",
|
"LabelRSSFeedCustomOwnerEmail": "Correo electrónico de dueño personalizado",
|
||||||
"LabelRSSFeedCustomOwnerName": "Nombre de dueño personalizado",
|
"LabelRSSFeedCustomOwnerName": "Nombre de dueño personalizado",
|
||||||
"LabelRSSFeedOpen": "Suministro RSS abierto",
|
"LabelRSSFeedOpen": "Suministro RSS abierto",
|
||||||
"LabelRSSFeedPreventIndexing": "Evitar indización",
|
"LabelRSSFeedPreventIndexing": "Prevenir indexado",
|
||||||
"LabelRSSFeedSlug": "«Slug» de suministro RSS",
|
"LabelRSSFeedSlug": "«Slug» de suministro RSS",
|
||||||
"LabelRSSFeedURL": "URL de suministro RSS",
|
"LabelRSSFeedURL": "URL de suministro RSS",
|
||||||
"LabelRandomly": "Aleatorio",
|
"LabelRandomly": "Aleatorio",
|
||||||
@ -531,7 +531,6 @@
|
|||||||
"LabelReleaseDate": "Fecha de estreno",
|
"LabelReleaseDate": "Fecha de estreno",
|
||||||
"LabelRemoveAllMetadataAbs": "Eliminar todos los archivos metadata.abs",
|
"LabelRemoveAllMetadataAbs": "Eliminar todos los archivos metadata.abs",
|
||||||
"LabelRemoveAllMetadataJson": "Eliminar todos los archivos metadata.json",
|
"LabelRemoveAllMetadataJson": "Eliminar todos los archivos metadata.json",
|
||||||
"LabelRemoveAudibleBranding": "Quitar introducción y cierre de Audible de los capítulos",
|
|
||||||
"LabelRemoveCover": "Quitar cubierta",
|
"LabelRemoveCover": "Quitar cubierta",
|
||||||
"LabelRemoveMetadataFile": "Eliminar archivos de metadatos en carpetas de elementos de biblioteca",
|
"LabelRemoveMetadataFile": "Eliminar archivos de metadatos en carpetas de elementos de biblioteca",
|
||||||
"LabelRemoveMetadataFileHelp": "Elimine todos los archivos metadata.json y metadata.abs de sus carpetas {0}.",
|
"LabelRemoveMetadataFileHelp": "Elimine todos los archivos metadata.json y metadata.abs de sus carpetas {0}.",
|
||||||
@ -540,7 +539,7 @@
|
|||||||
"LabelSearchTitle": "Buscar título",
|
"LabelSearchTitle": "Buscar título",
|
||||||
"LabelSearchTitleOrASIN": "Buscar título o ASIN",
|
"LabelSearchTitleOrASIN": "Buscar título o ASIN",
|
||||||
"LabelSeason": "Temporada",
|
"LabelSeason": "Temporada",
|
||||||
"LabelSeasonNumber": "{0}.ª temporada",
|
"LabelSeasonNumber": "Sesión #{0}",
|
||||||
"LabelSelectAll": "Seleccionar todo",
|
"LabelSelectAll": "Seleccionar todo",
|
||||||
"LabelSelectAllEpisodes": "Seleccionar todos los episodios",
|
"LabelSelectAllEpisodes": "Seleccionar todos los episodios",
|
||||||
"LabelSelectEpisodesShowing": "Seleccionar los {0} episodios visibles",
|
"LabelSelectEpisodesShowing": "Seleccionar los {0} episodios visibles",
|
||||||
@ -708,7 +707,6 @@
|
|||||||
"MessageAddToPlayerQueue": "Agregar a fila del Reproductor",
|
"MessageAddToPlayerQueue": "Agregar a fila del Reproductor",
|
||||||
"MessageAppriseDescription": "Para usar esta función deberás tener <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">la API de Apprise</a> corriendo o una API que maneje los mismos resultados. <br/>La URL de la API de Apprise debe tener la misma ruta de archivos que donde se envían las notificaciones. Por ejemplo: si su API esta en <code>http://192.168.1.1:8337</code> entonces pondría <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Para usar esta función deberás tener <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">la API de Apprise</a> corriendo o una API que maneje los mismos resultados. <br/>La URL de la API de Apprise debe tener la misma ruta de archivos que donde se envían las notificaciones. Por ejemplo: si su API esta en <code>http://192.168.1.1:8337</code> entonces pondría <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Cerciórese de usar el ASIN de la región correcta de Audible, no de Amazon.",
|
"MessageAsinCheck": "Cerciórese de usar el ASIN de la región correcta de Audible, no de Amazon.",
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Reinicie el servidor tras el guardado para aplicar los cambios de OIDC.",
|
|
||||||
"MessageBackupsDescription": "Los respaldos incluyen: usuarios, el progreso del los usuarios, los detalles de los elementos de la biblioteca, la configuración del servidor y las imágenes en <code>/metadata/items</code> y <code>/metadata/authors</code>. Los Respaldos <strong>NO</strong> incluyen ningún archivo guardado en la carpeta de tu biblioteca.",
|
"MessageBackupsDescription": "Los respaldos incluyen: usuarios, el progreso del los usuarios, los detalles de los elementos de la biblioteca, la configuración del servidor y las imágenes en <code>/metadata/items</code> y <code>/metadata/authors</code>. Los Respaldos <strong>NO</strong> incluyen ningún archivo guardado en la carpeta de tu biblioteca.",
|
||||||
"MessageBackupsLocationEditNote": "Nota: actualizar la ubicación de la copia de respaldo no moverá ni modificará los respaldos existentes",
|
"MessageBackupsLocationEditNote": "Nota: actualizar la ubicación de la copia de respaldo no moverá ni modificará los respaldos existentes",
|
||||||
"MessageBackupsLocationNoEditNote": "Nota: la ubicación de la copia de respaldo se establece a través de una variable de entorno y no se puede cambiar aquí.",
|
"MessageBackupsLocationNoEditNote": "Nota: la ubicación de la copia de respaldo se establece a través de una variable de entorno y no se puede cambiar aquí.",
|
||||||
@ -750,7 +748,7 @@
|
|||||||
"MessageConfirmNotificationTestTrigger": "¿Activar esta notificación con datos de prueba?",
|
"MessageConfirmNotificationTestTrigger": "¿Activar esta notificación con datos de prueba?",
|
||||||
"MessageConfirmPurgeCache": "Purgar la antememoria eliminará el directorio completo ubicado en <code>/metadata/cache</code>. <br /><br />¿Confirma que quiere eliminar el directorio de antememoria?",
|
"MessageConfirmPurgeCache": "Purgar la antememoria eliminará el directorio completo ubicado en <code>/metadata/cache</code>. <br /><br />¿Confirma que quiere eliminar el directorio de antememoria?",
|
||||||
"MessageConfirmPurgeItemsCache": "Purgar la antememoria de elementos eliminará el directorio completo ubicado en <code>/metadata/cache/items</code>.<br />¿Lo confirma?",
|
"MessageConfirmPurgeItemsCache": "Purgar la antememoria de elementos eliminará el directorio completo ubicado en <code>/metadata/cache/items</code>.<br />¿Lo confirma?",
|
||||||
"MessageConfirmQuickEmbed": "Atención: la incrustación rápida no realiza copias de respaldo a ninguno de sus archivos de audio. Cerciórese de haber realizado una copia de los mismos previamente. <br><br>¿Quiere continuar?",
|
"MessageConfirmQuickEmbed": "¡Advertencia! La integración rápida no realiza copias de seguridad a ninguno de tus archivos de audio. Asegúrate de haber realizado una copia de los mismos previamente. <br><br>¿Deseas continuar?",
|
||||||
"MessageConfirmQuickMatchEpisodes": "El reconocimiento rápido de extensiones sobrescribirá los detalles si se encuentra una coincidencia. Se actualizarán las extensiones no reconocidas. ¿Quiere continuar?",
|
"MessageConfirmQuickMatchEpisodes": "El reconocimiento rápido de extensiones sobrescribirá los detalles si se encuentra una coincidencia. Se actualizarán las extensiones no reconocidas. ¿Quiere continuar?",
|
||||||
"MessageConfirmReScanLibraryItems": "¿Confirma que quiere volver a analizar {0} elementos?",
|
"MessageConfirmReScanLibraryItems": "¿Confirma que quiere volver a analizar {0} elementos?",
|
||||||
"MessageConfirmRemoveAllChapters": "¿Confirma que quiere quitar todos los capítulos?",
|
"MessageConfirmRemoveAllChapters": "¿Confirma que quiere quitar todos los capítulos?",
|
||||||
@ -843,7 +841,7 @@
|
|||||||
"MessageQuickEmbedInProgress": "Integración rápida en proceso",
|
"MessageQuickEmbedInProgress": "Integración rápida en proceso",
|
||||||
"MessageQuickEmbedQueue": "En cola para inserción rápida ({0} en cola)",
|
"MessageQuickEmbedQueue": "En cola para inserción rápida ({0} en cola)",
|
||||||
"MessageQuickMatchAllEpisodes": "Combina rápidamente todos los episodios",
|
"MessageQuickMatchAllEpisodes": "Combina rápidamente todos los episodios",
|
||||||
"MessageQuickMatchDescription": "Rellena los detalles y la cubierta de los elementos vacíos con el primer resultado coincidente de «{0}». No sobrescribe los detalles a menos que se active la opción del servidor «Preferir metadatos coincidentes».",
|
"MessageQuickMatchDescription": "Rellenar detalles de elementos vacíos y portada con los primeros resultados de '{0}'. No sobrescribe los detalles a menos que la opción \"Preferir Metadatos Encontrados\" del servidor esté habilitada.",
|
||||||
"MessageRemoveChapter": "Quitar capítulo",
|
"MessageRemoveChapter": "Quitar capítulo",
|
||||||
"MessageRemoveEpisodes": "Quitar {0} episodio(s)",
|
"MessageRemoveEpisodes": "Quitar {0} episodio(s)",
|
||||||
"MessageRemoveFromPlayerQueue": "Quitar de la cola de reproducción",
|
"MessageRemoveFromPlayerQueue": "Quitar de la cola de reproducción",
|
||||||
@ -856,7 +854,6 @@
|
|||||||
"MessageScheduleRunEveryWeekdayAtTime": "Ejecutar cada {0} a las {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Ejecutar cada {0} a las {1}",
|
||||||
"MessageSearchResultsFor": "Resultados de la búsqueda de",
|
"MessageSearchResultsFor": "Resultados de la búsqueda de",
|
||||||
"MessageSelected": "{0} seleccionado(s)",
|
"MessageSelected": "{0} seleccionado(s)",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "La secuencia de la serie no puede contener espacios",
|
|
||||||
"MessageServerCouldNotBeReached": "No se pudo establecer la conexión con el servidor",
|
"MessageServerCouldNotBeReached": "No se pudo establecer la conexión con el servidor",
|
||||||
"MessageSetChaptersFromTracksDescription": "Establecer capítulos usando cada archivo de audio como un capítulo y el título del capítulo como el nombre del archivo de audio",
|
"MessageSetChaptersFromTracksDescription": "Establecer capítulos usando cada archivo de audio como un capítulo y el título del capítulo como el nombre del archivo de audio",
|
||||||
"MessageShareExpirationWillBe": "La caducidad será <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "La caducidad será <strong>{0}</strong>",
|
||||||
@ -957,35 +954,33 @@
|
|||||||
"ToastBackupCreateSuccess": "Respaldo creado",
|
"ToastBackupCreateSuccess": "Respaldo creado",
|
||||||
"ToastBackupDeleteFailed": "Error al eliminar respaldo",
|
"ToastBackupDeleteFailed": "Error al eliminar respaldo",
|
||||||
"ToastBackupDeleteSuccess": "Respaldo eliminado",
|
"ToastBackupDeleteSuccess": "Respaldo eliminado",
|
||||||
"ToastBackupInvalidMaxKeep": "Número no válido de copias de respaldo para conservar",
|
"ToastBackupInvalidMaxKeep": "Número no válido de copias de seguridad a conservar",
|
||||||
"ToastBackupInvalidMaxSize": "Tamaño máximo de copia de respaldo no válido",
|
"ToastBackupInvalidMaxSize": "Tamaño máximo de copia de seguridad no válido",
|
||||||
"ToastBackupRestoreFailed": "Error al restaurar el respaldo",
|
"ToastBackupRestoreFailed": "Error al restaurar el respaldo",
|
||||||
"ToastBackupUploadFailed": "Error al cargar la copia de respaldo",
|
"ToastBackupUploadFailed": "Error al subir el respaldo",
|
||||||
"ToastBackupUploadSuccess": "Respaldo cargado",
|
"ToastBackupUploadSuccess": "Respaldo cargado",
|
||||||
"ToastBatchApplyDetailsToItemsSuccess": "Detalles aplicados a los elementos",
|
"ToastBatchApplyDetailsToItemsSuccess": "Detalles aplicados a los elementos",
|
||||||
"ToastBatchDeleteFailed": "Falló la eliminación por lotes",
|
"ToastBatchDeleteFailed": "Error al eliminar por lotes",
|
||||||
"ToastBatchDeleteSuccess": "Se eliminó por lotes correctamente",
|
"ToastBatchDeleteSuccess": "Borrado por lotes correcto",
|
||||||
"ToastBatchQuickMatchFailed": "¡Error en la sincronización rápida por lotes!",
|
"ToastBatchQuickMatchFailed": "¡Error en la sincronización rápida por lotes!",
|
||||||
"ToastBatchQuickMatchStarted": "¡Se inició el lote de búsqueda rápida de {0} libros!",
|
"ToastBatchQuickMatchStarted": "¡Se inició el lote de búsqueda rápida de {0} libros!",
|
||||||
"ToastBatchUpdateFailed": "Falló la actualización por lotes",
|
"ToastBatchUpdateFailed": "Subida masiva fallida",
|
||||||
"ToastBatchUpdateSuccess": "Se actualizó por lotes correctamente",
|
"ToastBatchUpdateSuccess": "Subida masiva exitosa",
|
||||||
"ToastBookmarkCreateFailed": "No se pudo crear el marcador",
|
"ToastBookmarkCreateFailed": "Error al crear marcador",
|
||||||
"ToastBookmarkCreateSuccess": "Marcador añadido",
|
"ToastBookmarkCreateSuccess": "Marcador Agregado",
|
||||||
"ToastBookmarkRemoveSuccess": "Marcador eliminado",
|
"ToastBookmarkRemoveSuccess": "Marcador eliminado",
|
||||||
"ToastCachePurgeFailed": "No se pudo purgar la antememoria",
|
"ToastCachePurgeFailed": "Error al purgar el caché",
|
||||||
"ToastCachePurgeSuccess": "Se purgó la antememoria correctamente",
|
"ToastCachePurgeSuccess": "Caché purgado de manera exitosa",
|
||||||
"ToastChaptersHaveErrors": "Los capítulos tienen errores",
|
"ToastChaptersHaveErrors": "Los capítulos tienen errores",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "Cantidad de desplazamiento no válida. La hora de inicio del último capítulo se extendería más allá de la duración de este audiolibro.",
|
"ToastChaptersMustHaveTitles": "Los capítulos tienen que tener un título",
|
||||||
"ToastChaptersInvalidShiftAmountStart": "Cantidad de desplazamiento no válida. El primer capítulo tendría una duración cero o negativa y lo sobrescribiría el segundo capítulo. Aumente la duración inicial del segundo capítulo.",
|
|
||||||
"ToastChaptersMustHaveTitles": "Los capítulos deben tener título",
|
|
||||||
"ToastChaptersRemoved": "Capítulos eliminados",
|
"ToastChaptersRemoved": "Capítulos eliminados",
|
||||||
"ToastChaptersUpdated": "Capítulos actualizados",
|
"ToastChaptersUpdated": "Capítulos actualizados",
|
||||||
"ToastCollectionItemsAddFailed": "Artículo(s) añadido(s) a la colección fallido(s)",
|
"ToastCollectionItemsAddFailed": "Artículo(s) añadido(s) a la colección fallido(s)",
|
||||||
"ToastCollectionRemoveSuccess": "Colección quitada",
|
"ToastCollectionRemoveSuccess": "Colección quitada",
|
||||||
"ToastCollectionUpdateSuccess": "Colección actualizada",
|
"ToastCollectionUpdateSuccess": "Colección actualizada",
|
||||||
"ToastCoverUpdateFailed": "Error al actualizar la cubierta",
|
"ToastCoverUpdateFailed": "Error al actualizar la cubierta",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Fecha y hora no válidas o incompletas",
|
"ToastDateTimeInvalidOrIncomplete": "Fecha y hora inválidas o incompletas",
|
||||||
"ToastDeleteFileFailed": "Falló la eliminación del archivo",
|
"ToastDeleteFileFailed": "Error el eliminar archivo",
|
||||||
"ToastDeleteFileSuccess": "Archivo eliminado",
|
"ToastDeleteFileSuccess": "Archivo eliminado",
|
||||||
"ToastDeviceAddFailed": "Error al añadir dispositivo",
|
"ToastDeviceAddFailed": "Error al añadir dispositivo",
|
||||||
"ToastDeviceNameAlreadyExists": "Un libro electrónico ya existe con ese nombre",
|
"ToastDeviceNameAlreadyExists": "Un libro electrónico ya existe con ese nombre",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Ajouter",
|
"ButtonAdd": "Ajouter",
|
||||||
"ButtonAddApiKey": "Ajouter une clé API",
|
|
||||||
"ButtonAddChapters": "Ajouter des chapitres",
|
"ButtonAddChapters": "Ajouter des chapitres",
|
||||||
"ButtonAddDevice": "Ajouter un appareil",
|
"ButtonAddDevice": "Ajouter un appareil",
|
||||||
"ButtonAddLibrary": "Ajouter une bibliothèque",
|
"ButtonAddLibrary": "Ajouter une bibliothèque",
|
||||||
@ -21,7 +20,6 @@
|
|||||||
"ButtonChooseAFolder": "Sélectionner un dossier",
|
"ButtonChooseAFolder": "Sélectionner un dossier",
|
||||||
"ButtonChooseFiles": "Sélectionner des fichiers",
|
"ButtonChooseFiles": "Sélectionner des fichiers",
|
||||||
"ButtonClearFilter": "Effacer le filtre",
|
"ButtonClearFilter": "Effacer le filtre",
|
||||||
"ButtonClose": "Fermer",
|
|
||||||
"ButtonCloseFeed": "Fermer le flux",
|
"ButtonCloseFeed": "Fermer le flux",
|
||||||
"ButtonCloseSession": "Fermer la session",
|
"ButtonCloseSession": "Fermer la session",
|
||||||
"ButtonCollections": "Collections",
|
"ButtonCollections": "Collections",
|
||||||
@ -121,7 +119,6 @@
|
|||||||
"HeaderAccount": "Compte",
|
"HeaderAccount": "Compte",
|
||||||
"HeaderAddCustomMetadataProvider": "Ajouter un fournisseur de métadonnées personnalisé",
|
"HeaderAddCustomMetadataProvider": "Ajouter un fournisseur de métadonnées personnalisé",
|
||||||
"HeaderAdvanced": "Avancé",
|
"HeaderAdvanced": "Avancé",
|
||||||
"HeaderApiKeys": "Clés API",
|
|
||||||
"HeaderAppriseNotificationSettings": "Configuration des notifications Apprise",
|
"HeaderAppriseNotificationSettings": "Configuration des notifications Apprise",
|
||||||
"HeaderAudioTracks": "Pistes audio",
|
"HeaderAudioTracks": "Pistes audio",
|
||||||
"HeaderAudiobookTools": "Outils de gestion de fichiers de livres audio",
|
"HeaderAudiobookTools": "Outils de gestion de fichiers de livres audio",
|
||||||
@ -165,7 +162,6 @@
|
|||||||
"HeaderMetadataOrderOfPrecedence": "Ordre de priorité des métadonnées",
|
"HeaderMetadataOrderOfPrecedence": "Ordre de priorité des métadonnées",
|
||||||
"HeaderMetadataToEmbed": "Métadonnées à intégrer",
|
"HeaderMetadataToEmbed": "Métadonnées à intégrer",
|
||||||
"HeaderNewAccount": "Nouveau compte",
|
"HeaderNewAccount": "Nouveau compte",
|
||||||
"HeaderNewApiKey": "Nouvelle clé API",
|
|
||||||
"HeaderNewLibrary": "Nouvelle bibliothèque",
|
"HeaderNewLibrary": "Nouvelle bibliothèque",
|
||||||
"HeaderNotificationCreate": "Créer une notification",
|
"HeaderNotificationCreate": "Créer une notification",
|
||||||
"HeaderNotificationUpdate": "Mise à jour de la notification",
|
"HeaderNotificationUpdate": "Mise à jour de la notification",
|
||||||
@ -181,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "Liste de lecture",
|
"HeaderPlaylist": "Liste de lecture",
|
||||||
"HeaderPlaylistItems": "Éléments de la liste de lecture",
|
"HeaderPlaylistItems": "Éléments de la liste de lecture",
|
||||||
"HeaderPodcastsToAdd": "Podcasts à ajouter",
|
"HeaderPodcastsToAdd": "Podcasts à ajouter",
|
||||||
"HeaderPresets": "Préréglages",
|
|
||||||
"HeaderPreviewCover": "Prévisualiser la couverture",
|
"HeaderPreviewCover": "Prévisualiser la couverture",
|
||||||
"HeaderRSSFeedGeneral": "Détails du flux RSS",
|
"HeaderRSSFeedGeneral": "Détails du flux RSS",
|
||||||
"HeaderRSSFeedIsOpen": "Le flux RSS est actif",
|
"HeaderRSSFeedIsOpen": "Le flux RSS est actif",
|
||||||
@ -210,7 +205,6 @@
|
|||||||
"HeaderTableOfContents": "Table des matières",
|
"HeaderTableOfContents": "Table des matières",
|
||||||
"HeaderTools": "Outils",
|
"HeaderTools": "Outils",
|
||||||
"HeaderUpdateAccount": "Mettre à jour le compte",
|
"HeaderUpdateAccount": "Mettre à jour le compte",
|
||||||
"HeaderUpdateApiKey": "Mettre à jour la clé API",
|
|
||||||
"HeaderUpdateAuthor": "Mettre à jour l’auteur",
|
"HeaderUpdateAuthor": "Mettre à jour l’auteur",
|
||||||
"HeaderUpdateDetails": "Mettre à jour les détails",
|
"HeaderUpdateDetails": "Mettre à jour les détails",
|
||||||
"HeaderUpdateLibrary": "Mettre à jour la bibliothèque",
|
"HeaderUpdateLibrary": "Mettre à jour la bibliothèque",
|
||||||
@ -240,10 +234,6 @@
|
|||||||
"LabelAllUsersExcludingGuests": "Tous les utilisateurs à l’exception des invités",
|
"LabelAllUsersExcludingGuests": "Tous les utilisateurs à l’exception des invités",
|
||||||
"LabelAllUsersIncludingGuests": "Tous les utilisateurs, y compris les invités",
|
"LabelAllUsersIncludingGuests": "Tous les utilisateurs, y compris les invités",
|
||||||
"LabelAlreadyInYourLibrary": "Déjà dans la bibliothèque",
|
"LabelAlreadyInYourLibrary": "Déjà dans la bibliothèque",
|
||||||
"LabelApiKeyCreated": "La clé API « {0} » a été créée avec succès.",
|
|
||||||
"LabelApiKeyCreatedDescription": "Assurez-vous de copier la clé API maintenant car vous ne pourrez plus la voir.",
|
|
||||||
"LabelApiKeyUser": "Agir au nom de l’utilisateur",
|
|
||||||
"LabelApiKeyUserDescription": "Cette clé API disposera des mêmes autorisations que l’utilisateur pour lequel elle agit. Elle apparaîtra dans les journaux comme si c’était l’utilisateur qui effectuait la requête.",
|
|
||||||
"LabelApiToken": "Token API",
|
"LabelApiToken": "Token API",
|
||||||
"LabelAppend": "Ajouter",
|
"LabelAppend": "Ajouter",
|
||||||
"LabelAudioBitrate": "Débit audio (par exemple 128k)",
|
"LabelAudioBitrate": "Débit audio (par exemple 128k)",
|
||||||
@ -290,7 +280,7 @@
|
|||||||
"LabelCollections": "Collections",
|
"LabelCollections": "Collections",
|
||||||
"LabelComplete": "Complet",
|
"LabelComplete": "Complet",
|
||||||
"LabelConfirmPassword": "Confirmer le mot de passe",
|
"LabelConfirmPassword": "Confirmer le mot de passe",
|
||||||
"LabelContinueListening": "Continuer l'écoute",
|
"LabelContinueListening": "Continuer la lecture",
|
||||||
"LabelContinueReading": "Continuer la lecture",
|
"LabelContinueReading": "Continuer la lecture",
|
||||||
"LabelContinueSeries": "Continuer les séries",
|
"LabelContinueSeries": "Continuer les séries",
|
||||||
"LabelCover": "Couverture",
|
"LabelCover": "Couverture",
|
||||||
@ -313,7 +303,7 @@
|
|||||||
"LabelDiscFromFilename": "Depuis le fichier",
|
"LabelDiscFromFilename": "Depuis le fichier",
|
||||||
"LabelDiscFromMetadata": "Depuis les métadonnées",
|
"LabelDiscFromMetadata": "Depuis les métadonnées",
|
||||||
"LabelDiscover": "Découvrir",
|
"LabelDiscover": "Découvrir",
|
||||||
"LabelDownload": "Télécharger",
|
"LabelDownload": "Téléchargement",
|
||||||
"LabelDownloadNEpisodes": "Télécharger {0} épisode(s)",
|
"LabelDownloadNEpisodes": "Télécharger {0} épisode(s)",
|
||||||
"LabelDownloadable": "Téléchargeable",
|
"LabelDownloadable": "Téléchargeable",
|
||||||
"LabelDuration": "Durée",
|
"LabelDuration": "Durée",
|
||||||
@ -355,10 +345,6 @@
|
|||||||
"LabelExample": "Exemple",
|
"LabelExample": "Exemple",
|
||||||
"LabelExpandSeries": "Développer la série",
|
"LabelExpandSeries": "Développer la série",
|
||||||
"LabelExpandSubSeries": "Développer les sous-séries",
|
"LabelExpandSubSeries": "Développer les sous-séries",
|
||||||
"LabelExpired": "Expiré",
|
|
||||||
"LabelExpiresAt": "Expire à",
|
|
||||||
"LabelExpiresInSeconds": "Expire dans (secondes)",
|
|
||||||
"LabelExpiresNever": "Jamais",
|
|
||||||
"LabelExplicit": "Restriction",
|
"LabelExplicit": "Restriction",
|
||||||
"LabelExplicitChecked": "Explicite (vérifié)",
|
"LabelExplicitChecked": "Explicite (vérifié)",
|
||||||
"LabelExplicitUnchecked": "Non explicite (non vérifié)",
|
"LabelExplicitUnchecked": "Non explicite (non vérifié)",
|
||||||
@ -468,7 +454,6 @@
|
|||||||
"LabelNewestEpisodes": "Épisodes récents",
|
"LabelNewestEpisodes": "Épisodes récents",
|
||||||
"LabelNextBackupDate": "Date de la prochaine sauvegarde",
|
"LabelNextBackupDate": "Date de la prochaine sauvegarde",
|
||||||
"LabelNextScheduledRun": "Prochain lancement prévu",
|
"LabelNextScheduledRun": "Prochain lancement prévu",
|
||||||
"LabelNoApiKeys": "Aucune clé API",
|
|
||||||
"LabelNoCustomMetadataProviders": "Aucun fournisseurs de métadonnées personnalisés",
|
"LabelNoCustomMetadataProviders": "Aucun fournisseurs de métadonnées personnalisés",
|
||||||
"LabelNoEpisodesSelected": "Aucun épisode sélectionné",
|
"LabelNoEpisodesSelected": "Aucun épisode sélectionné",
|
||||||
"LabelNotFinished": "Non terminé",
|
"LabelNotFinished": "Non terminé",
|
||||||
@ -545,7 +530,6 @@
|
|||||||
"LabelReleaseDate": "Date de parution",
|
"LabelReleaseDate": "Date de parution",
|
||||||
"LabelRemoveAllMetadataAbs": "Supprimer tous les fichiers metadata.abs",
|
"LabelRemoveAllMetadataAbs": "Supprimer tous les fichiers metadata.abs",
|
||||||
"LabelRemoveAllMetadataJson": "Supprimer tous les fichiers metadata.json",
|
"LabelRemoveAllMetadataJson": "Supprimer tous les fichiers metadata.json",
|
||||||
"LabelRemoveAudibleBranding": "Supprimer l’intro et la fin Audible des chapitres",
|
|
||||||
"LabelRemoveCover": "Supprimer la couverture",
|
"LabelRemoveCover": "Supprimer la couverture",
|
||||||
"LabelRemoveMetadataFile": "Supprimer les fichiers de métadonnées dans les dossiers des éléments de la bibliothèque",
|
"LabelRemoveMetadataFile": "Supprimer les fichiers de métadonnées dans les dossiers des éléments de la bibliothèque",
|
||||||
"LabelRemoveMetadataFileHelp": "Supprimer tous les fichiers metadata.json et metadata.abs de vos dossiers {0}.",
|
"LabelRemoveMetadataFileHelp": "Supprimer tous les fichiers metadata.json et metadata.abs de vos dossiers {0}.",
|
||||||
@ -558,7 +542,6 @@
|
|||||||
"LabelSelectAll": "Tout sélectionner",
|
"LabelSelectAll": "Tout sélectionner",
|
||||||
"LabelSelectAllEpisodes": "Sélectionner tous les épisodes",
|
"LabelSelectAllEpisodes": "Sélectionner tous les épisodes",
|
||||||
"LabelSelectEpisodesShowing": "Sélectionner {0} épisode(s) en cours",
|
"LabelSelectEpisodesShowing": "Sélectionner {0} épisode(s) en cours",
|
||||||
"LabelSelectUser": "Sélectionner l’utilisateur",
|
|
||||||
"LabelSelectUsers": "Sélectionner les utilisateurs",
|
"LabelSelectUsers": "Sélectionner les utilisateurs",
|
||||||
"LabelSendEbookToDevice": "Envoyer le livre numérique à…",
|
"LabelSendEbookToDevice": "Envoyer le livre numérique à…",
|
||||||
"LabelSequence": "Séquence",
|
"LabelSequence": "Séquence",
|
||||||
@ -722,10 +705,6 @@
|
|||||||
"LabelYourProgress": "Votre progression",
|
"LabelYourProgress": "Votre progression",
|
||||||
"MessageAddToPlayerQueue": "Ajouter en file d’attente",
|
"MessageAddToPlayerQueue": "Ajouter en file d’attente",
|
||||||
"MessageAppriseDescription": "Nécessite une instance d’<a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API Apprise</a> pour utiliser cette fonctionnalité ou une api qui prend en charge les mêmes requêtes.<br />L’URL de l’API Apprise doit comprendre le chemin complet pour envoyer la notification. Par exemple, si votre instance écoute sur <code>http://192.168.1.1:8337</code> alors vous devez mettre <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Nécessite une instance d’<a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API Apprise</a> pour utiliser cette fonctionnalité ou une api qui prend en charge les mêmes requêtes.<br />L’URL de l’API Apprise doit comprendre le chemin complet pour envoyer la notification. Par exemple, si votre instance écoute sur <code>http://192.168.1.1:8337</code> alors vous devez mettre <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Assurez-vous d’utiliser l’ASIN de la bonne région Audible, et non d’Amazon.",
|
|
||||||
"MessageAuthenticationLegacyTokenWarning": "Les jetons d’API hérités seront supprimés à l’avenir. Utilisez plutôt les <a href=\"/config/api-keys\">clés API</a>.",
|
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Redémarrez votre serveur après avoir enregistré pour appliquer les modifications OIDC.",
|
|
||||||
"MessageAuthenticationSecurityMessage": "L’authentification a été améliorée pour plus de sécurité. Tous les utilisateurs doivent se reconnecter.",
|
|
||||||
"MessageBackupsDescription": "Les sauvegardes incluent les utilisateurs, la progression des utilisateurs, les détails des éléments de la bibliothèque, les paramètres du serveur et les images stockées dans <code>/metadata/items</code> & <code>/metadata/authors</code>. Les sauvegardes <strong>n’incluent pas</strong> les fichiers stockés dans les dossiers de votre bibliothèque.",
|
"MessageBackupsDescription": "Les sauvegardes incluent les utilisateurs, la progression des utilisateurs, les détails des éléments de la bibliothèque, les paramètres du serveur et les images stockées dans <code>/metadata/items</code> & <code>/metadata/authors</code>. Les sauvegardes <strong>n’incluent pas</strong> les fichiers stockés dans les dossiers de votre bibliothèque.",
|
||||||
"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.",
|
||||||
@ -744,10 +723,8 @@
|
|||||||
"MessageChapterErrorStartGteDuration": "Horodatage invalide car il doit débuter avant la fin du livre",
|
"MessageChapterErrorStartGteDuration": "Horodatage invalide car il doit débuter avant la fin du livre",
|
||||||
"MessageChapterErrorStartLtPrev": "Horodatage invalide car il doit débuter au moins après le précédent chapitre",
|
"MessageChapterErrorStartLtPrev": "Horodatage invalide car il doit débuter au moins après le précédent chapitre",
|
||||||
"MessageChapterStartIsAfter": "Le premier chapitre est situé au début de votre livre audio",
|
"MessageChapterStartIsAfter": "Le premier chapitre est situé au début de votre livre audio",
|
||||||
"MessageChaptersNotFound": "Chapitres non trouvés",
|
|
||||||
"MessageCheckingCron": "Vérification du cron…",
|
"MessageCheckingCron": "Vérification du cron…",
|
||||||
"MessageConfirmCloseFeed": "Êtes-vous sûr·e de vouloir fermer ce flux ?",
|
"MessageConfirmCloseFeed": "Êtes-vous sûr·e de vouloir fermer ce flux ?",
|
||||||
"MessageConfirmDeleteApiKey": "Êtes-vous sûr de vouloir supprimer la clé API « {0} » ?",
|
|
||||||
"MessageConfirmDeleteBackup": "Êtes-vous sûr·e de vouloir supprimer la sauvegarde de « {0} » ?",
|
"MessageConfirmDeleteBackup": "Êtes-vous sûr·e de vouloir supprimer la sauvegarde de « {0} » ?",
|
||||||
"MessageConfirmDeleteDevice": "Êtes-vous sûr·e de vouloir supprimer la liseuse « {0} » ?",
|
"MessageConfirmDeleteDevice": "Êtes-vous sûr·e de vouloir supprimer la liseuse « {0} » ?",
|
||||||
"MessageConfirmDeleteFile": "Cela supprimera le fichier de votre système de fichiers. Êtes-vous sûr ?",
|
"MessageConfirmDeleteFile": "Cela supprimera le fichier de votre système de fichiers. Êtes-vous sûr ?",
|
||||||
@ -775,7 +752,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "Êtes-vous sûr·e de vouloir supprimer l’auteur « {0} » ?",
|
"MessageConfirmRemoveAuthor": "Êtes-vous sûr·e de vouloir supprimer l’auteur « {0} » ?",
|
||||||
"MessageConfirmRemoveCollection": "Êtes-vous sûr·e de vouloir supprimer la collection « {0} » ?",
|
"MessageConfirmRemoveCollection": "Êtes-vous sûr·e de vouloir supprimer la collection « {0} » ?",
|
||||||
"MessageConfirmRemoveEpisode": "Êtes-vous sûr·e de vouloir supprimer l’épisode « {0} » ?",
|
"MessageConfirmRemoveEpisode": "Êtes-vous sûr·e de vouloir supprimer l’épisode « {0} » ?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Remarque : cela ne supprime pas le fichier audio, sauf si vous activez « Supprimer définitivement le fichier »",
|
|
||||||
"MessageConfirmRemoveEpisodes": "Êtes-vous sûr·e de vouloir supprimer {0} épisodes ?",
|
"MessageConfirmRemoveEpisodes": "Êtes-vous sûr·e de vouloir supprimer {0} épisodes ?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Êtes-vous sûr·e de vouloir supprimer {0} sessions d’écoute ?",
|
"MessageConfirmRemoveListeningSessions": "Êtes-vous sûr·e de vouloir supprimer {0} sessions d’écoute ?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Êtes-vous sûr·e de vouloir supprimer tous les fichiers « metatadata.{0} » des dossiers d’éléments de votre bibliothèque ?",
|
"MessageConfirmRemoveMetadataFiles": "Êtes-vous sûr·e de vouloir supprimer tous les fichiers « metatadata.{0} » des dossiers d’éléments de votre bibliothèque ?",
|
||||||
@ -803,7 +779,6 @@
|
|||||||
"MessageForceReScanDescription": "analysera de nouveau tous les fichiers. Les étiquettes ID3 des fichiers audio, les fichiers OPF et les fichiers texte seront analysés comme s’ils étaient nouveaux.",
|
"MessageForceReScanDescription": "analysera de nouveau tous les fichiers. Les étiquettes ID3 des fichiers audio, les fichiers OPF et les fichiers texte seront analysés comme s’ils étaient nouveaux.",
|
||||||
"MessageImportantNotice": "Information importante !",
|
"MessageImportantNotice": "Information importante !",
|
||||||
"MessageInsertChapterBelow": "Insérer le chapitre ci-dessous",
|
"MessageInsertChapterBelow": "Insérer le chapitre ci-dessous",
|
||||||
"MessageInvalidAsin": "ASIN invalide",
|
|
||||||
"MessageItemsSelected": "{0} éléments sélectionnés",
|
"MessageItemsSelected": "{0} éléments sélectionnés",
|
||||||
"MessageItemsUpdated": "{0} éléments mis à jour",
|
"MessageItemsUpdated": "{0} éléments mis à jour",
|
||||||
"MessageJoinUsOn": "Rejoignez-nous sur",
|
"MessageJoinUsOn": "Rejoignez-nous sur",
|
||||||
@ -875,7 +850,6 @@
|
|||||||
"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",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "La séquence de séries ne peut pas contenir d’espaces",
|
|
||||||
"MessageServerCouldNotBeReached": "Serveur inaccessible",
|
"MessageServerCouldNotBeReached": "Serveur inaccessible",
|
||||||
"MessageSetChaptersFromTracksDescription": "Positionne un chapitre par fichier audio, avec le titre du fichier comme titre de chapitre",
|
"MessageSetChaptersFromTracksDescription": "Positionne un chapitre par fichier audio, avec le titre du fichier comme titre de chapitre",
|
||||||
"MessageShareExpirationWillBe": "Expire le <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Expire le <strong>{0}</strong>",
|
||||||
@ -937,8 +911,6 @@
|
|||||||
"NotificationOnBackupCompletedDescription": "Déclenché lorsqu’une sauvegarde est terminée",
|
"NotificationOnBackupCompletedDescription": "Déclenché lorsqu’une sauvegarde est terminée",
|
||||||
"NotificationOnBackupFailedDescription": "Déclenché lorsqu'une sauvegarde échoue",
|
"NotificationOnBackupFailedDescription": "Déclenché lorsqu'une sauvegarde échoue",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Déclenché lorsqu’un épisode de podcast est téléchargé automatiquement",
|
"NotificationOnEpisodeDownloadedDescription": "Déclenché lorsqu’un épisode de podcast est téléchargé automatiquement",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Déclenché lorsque les téléchargements automatiques d’épisodes sont désactivés en raison d’un trop grand nombre de tentatives infructueuses",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Déclenché lorsque la demande de flux RSS échoue pour un téléchargement automatique d’épisode",
|
|
||||||
"NotificationOnTestDescription": "Événement pour tester le système de notification",
|
"NotificationOnTestDescription": "Événement pour tester le système de notification",
|
||||||
"PlaceholderNewCollection": "Nom de la nouvelle collection",
|
"PlaceholderNewCollection": "Nom de la nouvelle collection",
|
||||||
"PlaceholderNewFolderPath": "Nouveau chemin de dossier",
|
"PlaceholderNewFolderPath": "Nouveau chemin de dossier",
|
||||||
@ -996,8 +968,6 @@
|
|||||||
"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",
|
||||||
"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.",
|
|
||||||
"ToastChaptersInvalidShiftAmountStart": "Durée de décalage non valide. Le premier chapitre aurait une longueur nulle ou négative et serait écrasé par le second. Augmentez la durée de début du second chapitre.",
|
|
||||||
"ToastChaptersMustHaveTitles": "Les chapitre doivent avoir un titre",
|
"ToastChaptersMustHaveTitles": "Les chapitre doivent avoir un titre",
|
||||||
"ToastChaptersRemoved": "Chapitres supprimés",
|
"ToastChaptersRemoved": "Chapitres supprimés",
|
||||||
"ToastChaptersUpdated": "Chapitres mis à jour",
|
"ToastChaptersUpdated": "Chapitres mis à jour",
|
||||||
@ -1019,8 +989,6 @@
|
|||||||
"ToastEpisodeDownloadQueueClearSuccess": "File d’attente de téléchargement des épisodes effacée",
|
"ToastEpisodeDownloadQueueClearSuccess": "File d’attente de téléchargement des épisodes effacée",
|
||||||
"ToastEpisodeUpdateSuccess": "{0} épisodes mis à jour",
|
"ToastEpisodeUpdateSuccess": "{0} épisodes mis à jour",
|
||||||
"ToastErrorCannotShare": "Impossible de partager nativement sur cet appareil",
|
"ToastErrorCannotShare": "Impossible de partager nativement sur cet appareil",
|
||||||
"ToastFailedToCreate": "Échec de la création",
|
|
||||||
"ToastFailedToDelete": "Échec de la suppression",
|
|
||||||
"ToastFailedToLoadData": "Échec du chargement des données",
|
"ToastFailedToLoadData": "Échec du chargement des données",
|
||||||
"ToastFailedToMatch": "Échec de la correspondance",
|
"ToastFailedToMatch": "Échec de la correspondance",
|
||||||
"ToastFailedToShare": "Échec du partage",
|
"ToastFailedToShare": "Échec du partage",
|
||||||
@ -1052,7 +1020,6 @@
|
|||||||
"ToastMustHaveAtLeastOnePath": "Doit avoir au moins un chemin",
|
"ToastMustHaveAtLeastOnePath": "Doit avoir au moins un chemin",
|
||||||
"ToastNameEmailRequired": "Le nom et le courriel sont requis",
|
"ToastNameEmailRequired": "Le nom et le courriel sont requis",
|
||||||
"ToastNameRequired": "Le nom est requis",
|
"ToastNameRequired": "Le nom est requis",
|
||||||
"ToastNewApiKeyUserError": "Vous devez sélectionner un utilisateur",
|
|
||||||
"ToastNewEpisodesFound": "{0} nouveaux épisodes trouvés",
|
"ToastNewEpisodesFound": "{0} nouveaux épisodes trouvés",
|
||||||
"ToastNewUserCreatedFailed": "La création du compte à échouée : « {0} »",
|
"ToastNewUserCreatedFailed": "La création du compte à échouée : « {0} »",
|
||||||
"ToastNewUserCreatedSuccess": "Nouveau compte créé",
|
"ToastNewUserCreatedSuccess": "Nouveau compte créé",
|
||||||
|
@ -9,9 +9,6 @@
|
|||||||
"ButtonApply": "લાગુ કરો",
|
"ButtonApply": "લાગુ કરો",
|
||||||
"ButtonApplyChapters": "પ્રકરણો લાગુ કરો",
|
"ButtonApplyChapters": "પ્રકરણો લાગુ કરો",
|
||||||
"ButtonAuthors": "લેખકો",
|
"ButtonAuthors": "લેખકો",
|
||||||
"ButtonBack": "પાછા",
|
|
||||||
"ButtonBatchEditPopulateFromExisting": "હાલની માહિતીમાંથી ભરો",
|
|
||||||
"ButtonBatchEditPopulateMapDetails": "નકશાની વિગત ભરો",
|
|
||||||
"ButtonBrowseForFolder": "ફોલ્ડર માટે જુઓ",
|
"ButtonBrowseForFolder": "ફોલ્ડર માટે જુઓ",
|
||||||
"ButtonCancel": "રદ કરો",
|
"ButtonCancel": "રદ કરો",
|
||||||
"ButtonCancelEncode": "એન્કોડ રદ કરો",
|
"ButtonCancelEncode": "એન્કોડ રદ કરો",
|
||||||
@ -30,14 +27,11 @@
|
|||||||
"ButtonEdit": "સંપાદિત કરો",
|
"ButtonEdit": "સંપાદિત કરો",
|
||||||
"ButtonEditChapters": "પ્રકરણો સંપાદિત કરો",
|
"ButtonEditChapters": "પ્રકરણો સંપાદિત કરો",
|
||||||
"ButtonEditPodcast": "પોડકાસ્ટ સંપાદિત કરો",
|
"ButtonEditPodcast": "પોડકાસ્ટ સંપાદિત કરો",
|
||||||
"ButtonEnable": "સક્રિય કરો",
|
|
||||||
"ButtonForceReScan": "બળપૂર્વક ફરીથી સ્કેન કરો",
|
"ButtonForceReScan": "બળપૂર્વક ફરીથી સ્કેન કરો",
|
||||||
"ButtonFullPath": "સંપૂર્ણ પથ",
|
"ButtonFullPath": "સંપૂર્ણ પથ",
|
||||||
"ButtonHide": "છુપાવો",
|
"ButtonHide": "છુપાવો",
|
||||||
"ButtonHome": "ઘર",
|
"ButtonHome": "ઘર",
|
||||||
"ButtonIssues": "સમસ્યાઓ",
|
"ButtonIssues": "સમસ્યાઓ",
|
||||||
"ButtonJumpBackward": "પાછળ જાવો",
|
|
||||||
"ButtonJumpForward": "આગળ જાવો",
|
|
||||||
"ButtonLatest": "નવીનતમ",
|
"ButtonLatest": "નવીનતમ",
|
||||||
"ButtonLibrary": "પુસ્તકાલય",
|
"ButtonLibrary": "પુસ્તકાલય",
|
||||||
"ButtonLogout": "લૉગ આઉટ",
|
"ButtonLogout": "લૉગ આઉટ",
|
||||||
@ -47,32 +41,19 @@
|
|||||||
"ButtonMatchAllAuthors": "બધા મેળ ખાતા લેખકો શોધો",
|
"ButtonMatchAllAuthors": "બધા મેળ ખાતા લેખકો શોધો",
|
||||||
"ButtonMatchBooks": "મેળ ખાતી પુસ્તકો શોધો",
|
"ButtonMatchBooks": "મેળ ખાતી પુસ્તકો શોધો",
|
||||||
"ButtonNevermind": "કંઈ વાંધો નહીં",
|
"ButtonNevermind": "કંઈ વાંધો નહીં",
|
||||||
"ButtonNext": "આગળ જાઓ",
|
|
||||||
"ButtonNextChapter": "આગળનું અધ્યાય",
|
|
||||||
"ButtonNextItemInQueue": "કતારમાં આવતું આગળનું અધ્યાય",
|
|
||||||
"ButtonOk": "ઓકે",
|
"ButtonOk": "ઓકે",
|
||||||
"ButtonOpenFeed": "ફીડ ખોલો",
|
"ButtonOpenFeed": "ફીડ ખોલો",
|
||||||
"ButtonOpenManager": "મેનેજર ખોલો",
|
"ButtonOpenManager": "મેનેજર ખોલો",
|
||||||
"ButtonPause": "વિરામ",
|
|
||||||
"ButtonPlay": "ચલાવો",
|
"ButtonPlay": "ચલાવો",
|
||||||
"ButtonPlayAll": "બધું ચલાવો",
|
|
||||||
"ButtonPlaying": "ચલાવી રહ્યું છે",
|
"ButtonPlaying": "ચલાવી રહ્યું છે",
|
||||||
"ButtonPlaylists": "પ્લેલિસ્ટ",
|
"ButtonPlaylists": "પ્લેલિસ્ટ",
|
||||||
"ButtonPrevious": "પાછળનું",
|
|
||||||
"ButtonPreviousChapter": "પાછળનું અધ્યાય",
|
|
||||||
"ButtonProbeAudioFile": "ઑડિયો ફાઇલ તપાસો",
|
|
||||||
"ButtonPurgeAllCache": "બધો Cache કાઢી નાખો",
|
"ButtonPurgeAllCache": "બધો Cache કાઢી નાખો",
|
||||||
"ButtonPurgeItemsCache": "વસ્તુઓનો Cache કાઢી નાખો",
|
"ButtonPurgeItemsCache": "વસ્તુઓનો Cache કાઢી નાખો",
|
||||||
"ButtonQueueAddItem": "કતારમાં ઉમેરો",
|
"ButtonQueueAddItem": "કતારમાં ઉમેરો",
|
||||||
"ButtonQueueRemoveItem": "કતારથી કાઢી નાખો",
|
"ButtonQueueRemoveItem": "કતારથી કાઢી નાખો",
|
||||||
"ButtonQuickEmbed": "ઝડપથી સમાવેશ કરો",
|
|
||||||
"ButtonQuickEmbedMetadata": "ઝડપથી મેટાડેટા સમાવવો",
|
|
||||||
"ButtonQuickMatch": "ઝડપી મેળ ખવડાવો",
|
"ButtonQuickMatch": "ઝડપી મેળ ખવડાવો",
|
||||||
"ButtonReScan": "ફરીથી સ્કેન કરો",
|
"ButtonReScan": "ફરીથી સ્કેન કરો",
|
||||||
"ButtonRead": "વાંચો",
|
"ButtonRead": "વાંચો",
|
||||||
"ButtonReadLess": "ઓછું વાંચો",
|
|
||||||
"ButtonReadMore": "વધારે વાંચો",
|
|
||||||
"ButtonRefresh": "તાજું કરો",
|
|
||||||
"ButtonRemove": "કાઢી નાખો",
|
"ButtonRemove": "કાઢી નાખો",
|
||||||
"ButtonRemoveAll": "બધું કાઢી નાખો",
|
"ButtonRemoveAll": "બધું કાઢી નાખો",
|
||||||
"ButtonRemoveAllLibraryItems": "બધું પુસ્તકાલય વસ્તુઓ કાઢી નાખો",
|
"ButtonRemoveAllLibraryItems": "બધું પુસ્તકાલય વસ્તુઓ કાઢી નાખો",
|
||||||
@ -87,21 +68,16 @@
|
|||||||
"ButtonSaveTracklist": "ટ્રેક યાદી સાચવો",
|
"ButtonSaveTracklist": "ટ્રેક યાદી સાચવો",
|
||||||
"ButtonScan": "સ્કેન કરો",
|
"ButtonScan": "સ્કેન કરો",
|
||||||
"ButtonScanLibrary": "પુસ્તકાલય સ્કેન કરો",
|
"ButtonScanLibrary": "પુસ્તકાલય સ્કેન કરો",
|
||||||
"ButtonScrollLeft": "ડાબે",
|
|
||||||
"ButtonScrollRight": "જમણે",
|
|
||||||
"ButtonSearch": "શોધો",
|
"ButtonSearch": "શોધો",
|
||||||
"ButtonSelectFolderPath": "ફોલ્ડર પથ પસંદ કરો",
|
"ButtonSelectFolderPath": "ફોલ્ડર પથ પસંદ કરો",
|
||||||
"ButtonSeries": "સિરીઝ",
|
"ButtonSeries": "સિરીઝ",
|
||||||
"ButtonSetChaptersFromTracks": "ટ્રેક્સથી પ્રકરણો સેટ કરો",
|
"ButtonSetChaptersFromTracks": "ટ્રેક્સથી પ્રકરણો સેટ કરો",
|
||||||
"ButtonShare": "શેર કરો",
|
|
||||||
"ButtonShiftTimes": "સમય શિફ્ટ કરો",
|
"ButtonShiftTimes": "સમય શિફ્ટ કરો",
|
||||||
"ButtonShow": "બતાવો",
|
"ButtonShow": "બતાવો",
|
||||||
"ButtonStartM4BEncode": "M4B એન્કોડ શરૂ કરો",
|
"ButtonStartM4BEncode": "M4B એન્કોડ શરૂ કરો",
|
||||||
"ButtonStartMetadataEmbed": "મેટાડેટા એમ્બેડ શરૂ કરો",
|
"ButtonStartMetadataEmbed": "મેટાડેટા એમ્બેડ શરૂ કરો",
|
||||||
"ButtonStats": "આંકડા",
|
|
||||||
"ButtonSubmit": "સબમિટ કરો",
|
"ButtonSubmit": "સબમિટ કરો",
|
||||||
"ButtonTest": "પરખ કરો",
|
"ButtonTest": "પરખ કરો",
|
||||||
"ButtonUnlinkOpenId": "OpenID દૂર કરો",
|
|
||||||
"ButtonUpload": "અપલોડ કરો",
|
"ButtonUpload": "અપલોડ કરો",
|
||||||
"ButtonUploadBackup": "બેકઅપ અપલોડ કરો",
|
"ButtonUploadBackup": "બેકઅપ અપલોડ કરો",
|
||||||
"ButtonUploadCover": "કવર અપલોડ કરો",
|
"ButtonUploadCover": "કવર અપલોડ કરો",
|
||||||
@ -110,16 +86,11 @@
|
|||||||
"ButtonUserEdit": "વપરાશકર્તા {0} સંપાદિત કરો",
|
"ButtonUserEdit": "વપરાશકર્તા {0} સંપાદિત કરો",
|
||||||
"ButtonViewAll": "બધું જુઓ",
|
"ButtonViewAll": "બધું જુઓ",
|
||||||
"ButtonYes": "હા",
|
"ButtonYes": "હા",
|
||||||
"ErrorUploadFetchMetadataAPI": "મેટાડેટા મેળવવામાં તકલીફ આવી",
|
|
||||||
"ErrorUploadFetchMetadataNoResults": "મેટાડેટા મેળવી શક્યા નહીં – કૃપા કરીને શીર્ષક અને/અથવા લેખકનું નામ અપડેટ કરવાનો પ્રયત્ન કરો",
|
|
||||||
"ErrorUploadLacksTitle": "શીર્ષક હોવું આવશ્યક છે",
|
|
||||||
"HeaderAccount": "એકાઉન્ટ",
|
"HeaderAccount": "એકાઉન્ટ",
|
||||||
"HeaderAddCustomMetadataProvider": "કસ્ટમ મેટાડેટા પ્રોવાઇડર ઉમેરો",
|
|
||||||
"HeaderAdvanced": "અડ્વાન્સડ",
|
"HeaderAdvanced": "અડ્વાન્સડ",
|
||||||
"HeaderAppriseNotificationSettings": "Apprise સૂચના સેટિંગ્સ",
|
"HeaderAppriseNotificationSettings": "Apprise સૂચના સેટિંગ્સ",
|
||||||
"HeaderAudioTracks": "ઓડિયો ટ્રેક્સ",
|
"HeaderAudioTracks": "ઓડિયો ટ્રેક્સ",
|
||||||
"HeaderAudiobookTools": "ઓડિયોબુક ફાઇલ વ્યવસ્થાપન ટૂલ્સ",
|
"HeaderAudiobookTools": "ઓડિયોબુક ફાઇલ વ્યવસ્થાપન ટૂલ્સ",
|
||||||
"HeaderAuthentication": "પ્રમાણીકરણ",
|
|
||||||
"HeaderBackups": "બેકઅપ્સ",
|
"HeaderBackups": "બેકઅપ્સ",
|
||||||
"HeaderChangePassword": "પાસવર્ડ બદલો",
|
"HeaderChangePassword": "પાસવર્ડ બદલો",
|
||||||
"HeaderChapters": "પ્રકરણો",
|
"HeaderChapters": "પ્રકરણો",
|
||||||
@ -128,7 +99,6 @@
|
|||||||
"HeaderCollectionItems": "સંગ્રહ વસ્તુઓ",
|
"HeaderCollectionItems": "સંગ્રહ વસ્તુઓ",
|
||||||
"HeaderCover": "આવરણ",
|
"HeaderCover": "આવરણ",
|
||||||
"HeaderCurrentDownloads": "વર્તમાન ડાઉનલોડ્સ",
|
"HeaderCurrentDownloads": "વર્તમાન ડાઉનલોડ્સ",
|
||||||
"HeaderCustomMetadataProviders": "કસ્ટમ મેટાડેટા પ્રોવાઇડર્સ",
|
|
||||||
"HeaderDetails": "વિગતો",
|
"HeaderDetails": "વિગતો",
|
||||||
"HeaderDownloadQueue": "ડાઉનલોડ કતાર",
|
"HeaderDownloadQueue": "ડાઉનલોડ કતાર",
|
||||||
"HeaderEbookFiles": "ઇબુક ફાઇલો",
|
"HeaderEbookFiles": "ઇબુક ફાઇલો",
|
||||||
@ -159,7 +129,6 @@
|
|||||||
"HeaderMetadataToEmbed": "એમ્બેડ કરવા માટે મેટાડેટા",
|
"HeaderMetadataToEmbed": "એમ્બેડ કરવા માટે મેટાડેટા",
|
||||||
"HeaderNewAccount": "નવું એકાઉન્ટ",
|
"HeaderNewAccount": "નવું એકાઉન્ટ",
|
||||||
"HeaderNewLibrary": "નવી પુસ્તકાલય",
|
"HeaderNewLibrary": "નવી પુસ્તકાલય",
|
||||||
"HeaderNotificationCreate": "સૂચના બનાવો",
|
|
||||||
"HeaderNotifications": "સૂચનાઓ",
|
"HeaderNotifications": "સૂચનાઓ",
|
||||||
"HeaderOpenRSSFeed": "RSS ફીડ ખોલો",
|
"HeaderOpenRSSFeed": "RSS ફીડ ખોલો",
|
||||||
"HeaderOtherFiles": "અન્ય ફાઇલો",
|
"HeaderOtherFiles": "અન્ય ફાઇલો",
|
||||||
|
@ -10,8 +10,6 @@
|
|||||||
"ButtonApplyChapters": "החל פרקים",
|
"ButtonApplyChapters": "החל פרקים",
|
||||||
"ButtonAuthors": "סופרים",
|
"ButtonAuthors": "סופרים",
|
||||||
"ButtonBack": "חזור",
|
"ButtonBack": "חזור",
|
||||||
"ButtonBatchEditPopulateFromExisting": "מלא משדות קיימים",
|
|
||||||
"ButtonBatchEditPopulateMapDetails": "מלא פרטי מפה",
|
|
||||||
"ButtonBrowseForFolder": "עיין בתיקייה",
|
"ButtonBrowseForFolder": "עיין בתיקייה",
|
||||||
"ButtonCancel": "ביטול",
|
"ButtonCancel": "ביטול",
|
||||||
"ButtonCancelEncode": "בטל קידוד",
|
"ButtonCancelEncode": "בטל קידוד",
|
||||||
@ -31,9 +29,7 @@
|
|||||||
"ButtonEdit": "ערוך",
|
"ButtonEdit": "ערוך",
|
||||||
"ButtonEditChapters": "ערוך פרקים",
|
"ButtonEditChapters": "ערוך פרקים",
|
||||||
"ButtonEditPodcast": "ערוך פודקאסט",
|
"ButtonEditPodcast": "ערוך פודקאסט",
|
||||||
"ButtonEnable": "אפשר",
|
"ButtonEnable": "הפעל",
|
||||||
"ButtonFireAndFail": "שלח בכישלון",
|
|
||||||
"ButtonFireOnTest": "שלח באירוע בדיקה",
|
|
||||||
"ButtonForceReScan": "סרוק מחדש בכוח",
|
"ButtonForceReScan": "סרוק מחדש בכוח",
|
||||||
"ButtonFullPath": "נתיב מלא",
|
"ButtonFullPath": "נתיב מלא",
|
||||||
"ButtonHide": "הסתר",
|
"ButtonHide": "הסתר",
|
||||||
@ -41,7 +37,7 @@
|
|||||||
"ButtonIssues": "תקלות",
|
"ButtonIssues": "תקלות",
|
||||||
"ButtonJumpBackward": "דלג אחורה",
|
"ButtonJumpBackward": "דלג אחורה",
|
||||||
"ButtonJumpForward": "דלג קדימה",
|
"ButtonJumpForward": "דלג קדימה",
|
||||||
"ButtonLatest": "אחרון",
|
"ButtonLatest": "חדש ביותר",
|
||||||
"ButtonLibrary": "ספרייה",
|
"ButtonLibrary": "ספרייה",
|
||||||
"ButtonLogout": "התנתק",
|
"ButtonLogout": "התנתק",
|
||||||
"ButtonLookup": "חפש",
|
"ButtonLookup": "חפש",
|
||||||
@ -74,7 +70,7 @@
|
|||||||
"ButtonReScan": "סרוק מחדש",
|
"ButtonReScan": "סרוק מחדש",
|
||||||
"ButtonRead": "קרא",
|
"ButtonRead": "קרא",
|
||||||
"ButtonReadLess": "קרא פחות",
|
"ButtonReadLess": "קרא פחות",
|
||||||
"ButtonReadMore": "קרא עוד",
|
"ButtonReadMore": "קרא יותר",
|
||||||
"ButtonRefresh": "רענן",
|
"ButtonRefresh": "רענן",
|
||||||
"ButtonRemove": "הסר",
|
"ButtonRemove": "הסר",
|
||||||
"ButtonRemoveAll": "הסר הכל",
|
"ButtonRemoveAll": "הסר הכל",
|
||||||
@ -90,9 +86,7 @@
|
|||||||
"ButtonSaveTracklist": "שמור רשימת רצועות",
|
"ButtonSaveTracklist": "שמור רשימת רצועות",
|
||||||
"ButtonScan": "סרוק",
|
"ButtonScan": "סרוק",
|
||||||
"ButtonScanLibrary": "סרוק ספרייה",
|
"ButtonScanLibrary": "סרוק ספרייה",
|
||||||
"ButtonScrollLeft": "גלול שמאלה",
|
"ButtonSearch": "חפש",
|
||||||
"ButtonScrollRight": "גלול ימינה",
|
|
||||||
"ButtonSearch": "חיפוש",
|
|
||||||
"ButtonSelectFolderPath": "בחר נתיב לתיקייה",
|
"ButtonSelectFolderPath": "בחר נתיב לתיקייה",
|
||||||
"ButtonSeries": "סדרה",
|
"ButtonSeries": "סדרה",
|
||||||
"ButtonSetChaptersFromTracks": "קבע פרקים לפי הרצועות",
|
"ButtonSetChaptersFromTracks": "קבע פרקים לפי הרצועות",
|
||||||
@ -102,7 +96,7 @@
|
|||||||
"ButtonStartM4BEncode": "התחל קידוד M4B",
|
"ButtonStartM4BEncode": "התחל קידוד M4B",
|
||||||
"ButtonStartMetadataEmbed": "התחל הטמעת מטא-נתונים",
|
"ButtonStartMetadataEmbed": "התחל הטמעת מטא-נתונים",
|
||||||
"ButtonStats": "סטטיסטיקות",
|
"ButtonStats": "סטטיסטיקות",
|
||||||
"ButtonSubmit": "שליחה",
|
"ButtonSubmit": "שלח",
|
||||||
"ButtonTest": "בדיקה",
|
"ButtonTest": "בדיקה",
|
||||||
"ButtonUnlinkOpenId": "נתק OpenID",
|
"ButtonUnlinkOpenId": "נתק OpenID",
|
||||||
"ButtonUpload": "העלה",
|
"ButtonUpload": "העלה",
|
||||||
@ -128,26 +122,26 @@
|
|||||||
"HeaderChapters": "פרקים",
|
"HeaderChapters": "פרקים",
|
||||||
"HeaderChooseAFolder": "בחר תיקייה",
|
"HeaderChooseAFolder": "בחר תיקייה",
|
||||||
"HeaderCollection": "אוסף",
|
"HeaderCollection": "אוסף",
|
||||||
"HeaderCollectionItems": "פרטי אוסף",
|
"HeaderCollectionItems": "פריטי אוסף",
|
||||||
"HeaderCover": "כריכה",
|
"HeaderCover": "כריכה",
|
||||||
"HeaderCurrentDownloads": "הורדות נוכחיות",
|
"HeaderCurrentDownloads": "הורדות נוכחיות",
|
||||||
"HeaderCustomMessageOnLogin": "הודעה מותאמת אישית בהתחברות",
|
"HeaderCustomMessageOnLogin": "הודעה מותאמת אישית בהתחברות",
|
||||||
"HeaderCustomMetadataProviders": "ספקי מטא-נתונים מותאמים אישית",
|
"HeaderCustomMetadataProviders": "ספקי מטא-נתונים מותאמים אישית",
|
||||||
"HeaderDetails": "פרטים",
|
"HeaderDetails": "פרטים",
|
||||||
"HeaderDownloadQueue": "תור הורדה",
|
"HeaderDownloadQueue": "תור הורדה",
|
||||||
"HeaderEbookFiles": "קבצי Ebook",
|
"HeaderEbookFiles": "קבצי ספר אלקטרוני",
|
||||||
"HeaderEmail": "אימייל",
|
"HeaderEmail": "אימייל",
|
||||||
"HeaderEmailSettings": "הגדרות אימייל",
|
"HeaderEmailSettings": "הגדרות אימייל",
|
||||||
"HeaderEpisodes": "פרקים",
|
"HeaderEpisodes": "פרקים",
|
||||||
"HeaderEreaderDevices": "התקני קריאה דיגיטליים",
|
"HeaderEreaderDevices": "התקני קריאה דיגיטליים",
|
||||||
"HeaderEreaderSettings": "הגדרות קורא אלקטרוני",
|
"HeaderEreaderSettings": "הגדרות התקני קריאה דיגיטליים",
|
||||||
"HeaderFiles": "קבצים",
|
"HeaderFiles": "קבצים",
|
||||||
"HeaderFindChapters": "מצא פרקים",
|
"HeaderFindChapters": "מצא פרקים",
|
||||||
"HeaderIgnoredFiles": "קבצים שנתעלמו",
|
"HeaderIgnoredFiles": "קבצים שנתעלמו",
|
||||||
"HeaderItemFiles": "קבצי פריט",
|
"HeaderItemFiles": "קבצי פריט",
|
||||||
"HeaderItemMetadataUtils": "כלי מטא-נתונים",
|
"HeaderItemMetadataUtils": "כלי מטא-נתונים",
|
||||||
"HeaderLastListeningSession": "הפעלת האזנה אחרונה",
|
"HeaderLastListeningSession": "הפעלת האזנה אחרונה",
|
||||||
"HeaderLatestEpisodes": "פרקים אחרונים",
|
"HeaderLatestEpisodes": "הפרקים העדכניים ביותר",
|
||||||
"HeaderLibraries": "ספריות",
|
"HeaderLibraries": "ספריות",
|
||||||
"HeaderLibraryFiles": "קבצי ספרייה",
|
"HeaderLibraryFiles": "קבצי ספרייה",
|
||||||
"HeaderLibraryStats": "סטטיסטיקות ספרייה",
|
"HeaderLibraryStats": "סטטיסטיקות ספרייה",
|
||||||
@ -177,9 +171,8 @@
|
|||||||
"HeaderPlaylist": "רשימת השמעה",
|
"HeaderPlaylist": "רשימת השמעה",
|
||||||
"HeaderPlaylistItems": "פריטי רשימת השמעה",
|
"HeaderPlaylistItems": "פריטי רשימת השמעה",
|
||||||
"HeaderPodcastsToAdd": "פודקאסטים להוספה",
|
"HeaderPodcastsToAdd": "פודקאסטים להוספה",
|
||||||
"HeaderPresets": "קביעות מוגדרות מראש",
|
|
||||||
"HeaderPreviewCover": "תצוגה מקדימה של כריכה",
|
"HeaderPreviewCover": "תצוגה מקדימה של כריכה",
|
||||||
"HeaderRSSFeedGeneral": "פרטי RSS",
|
"HeaderRSSFeedGeneral": "פרטי ערוץ RSS",
|
||||||
"HeaderRSSFeedIsOpen": "ערוץ RSS פתוח",
|
"HeaderRSSFeedIsOpen": "ערוץ RSS פתוח",
|
||||||
"HeaderRSSFeeds": "ערוצי RSS",
|
"HeaderRSSFeeds": "ערוצי RSS",
|
||||||
"HeaderRemoveEpisode": "הסר פרק",
|
"HeaderRemoveEpisode": "הסר פרק",
|
||||||
@ -195,15 +188,14 @@
|
|||||||
"HeaderSettingsExperimental": "תכונות ניסיוניות",
|
"HeaderSettingsExperimental": "תכונות ניסיוניות",
|
||||||
"HeaderSettingsGeneral": "כללי",
|
"HeaderSettingsGeneral": "כללי",
|
||||||
"HeaderSettingsScanner": "סורק",
|
"HeaderSettingsScanner": "סורק",
|
||||||
"HeaderSettingsWebClient": "מערך",
|
|
||||||
"HeaderSleepTimer": "טיימר שינה",
|
"HeaderSleepTimer": "טיימר שינה",
|
||||||
"HeaderStatsLargestItems": "הפריטים הגדולים ביותר",
|
"HeaderStatsLargestItems": "הפריטים הגדולים ביותר",
|
||||||
"HeaderStatsLongestItems": "הפריטים הארוכים ביותר (בשעות)",
|
"HeaderStatsLongestItems": "הפריטים הארוכים ביותר (בשעות)",
|
||||||
"HeaderStatsMinutesListeningChart": "דקות האזנה (7 ימים אחרונים)",
|
"HeaderStatsMinutesListeningChart": "דקות האזנה (בימים האחרונים)",
|
||||||
"HeaderStatsRecentSessions": "האזנות אחרונות",
|
"HeaderStatsRecentSessions": "הפעלות אחרונות",
|
||||||
"HeaderStatsTop10Authors": "10 היוצרים המובילים",
|
"HeaderStatsTop10Authors": "10 היוצרים המובילים",
|
||||||
"HeaderStatsTop5Genres": "הז'אנרים המובילים 5",
|
"HeaderStatsTop5Genres": "הז'אנרים המובילים 5",
|
||||||
"HeaderTableOfContents": "תוכן עניינים",
|
"HeaderTableOfContents": "תוכן העניינים",
|
||||||
"HeaderTools": "כלים",
|
"HeaderTools": "כלים",
|
||||||
"HeaderUpdateAccount": "עדכן חשבון",
|
"HeaderUpdateAccount": "עדכן חשבון",
|
||||||
"HeaderUpdateAuthor": "עדכן יוצר",
|
"HeaderUpdateAuthor": "עדכן יוצר",
|
||||||
@ -220,17 +212,15 @@
|
|||||||
"LabelAccountTypeAdmin": "מנהל",
|
"LabelAccountTypeAdmin": "מנהל",
|
||||||
"LabelAccountTypeGuest": "אורח",
|
"LabelAccountTypeGuest": "אורח",
|
||||||
"LabelAccountTypeUser": "משתמש",
|
"LabelAccountTypeUser": "משתמש",
|
||||||
"LabelActivities": "פעילויות",
|
|
||||||
"LabelActivity": "פעילות",
|
"LabelActivity": "פעילות",
|
||||||
"LabelAddToCollection": "הוסף לאוסף",
|
"LabelAddToCollection": "הוסף לאוסף",
|
||||||
"LabelAddToCollectionBatch": "הוסף {0} ספרים לאוסף",
|
"LabelAddToCollectionBatch": "הוסף {0} ספרים לאוסף",
|
||||||
"LabelAddToPlaylist": "הוסף לרשימת השמעה",
|
"LabelAddToPlaylist": "הוסף לרשימת השמעה",
|
||||||
"LabelAddToPlaylistBatch": "הוסף {0} פריטים לרשימת השמעה",
|
"LabelAddToPlaylistBatch": "הוסף {0} פריטים לרשימת השמעה",
|
||||||
"LabelAddedAt": "נוסף ב-",
|
"LabelAddedAt": "נוסף בתאריך",
|
||||||
"LabelAddedDate": "נוסף ב-{0}",
|
"LabelAddedDate": "נוסף ב-{0}",
|
||||||
"LabelAdminUsersOnly": "רק מנהלים",
|
"LabelAdminUsersOnly": "רק מנהלים",
|
||||||
"LabelAll": "הכל",
|
"LabelAll": "הכל",
|
||||||
"LabelAllEpisodesDownloaded": "כל הפרקים הורדו",
|
|
||||||
"LabelAllUsers": "כל המשתמשים",
|
"LabelAllUsers": "כל המשתמשים",
|
||||||
"LabelAllUsersExcludingGuests": "כל המשתמשים, ללא אורחים",
|
"LabelAllUsersExcludingGuests": "כל המשתמשים, ללא אורחים",
|
||||||
"LabelAllUsersIncludingGuests": "כל המשתמשים כולל אורחים",
|
"LabelAllUsersIncludingGuests": "כל המשתמשים כולל אורחים",
|
||||||
@ -240,10 +230,10 @@
|
|||||||
"LabelAudioBitrate": "קצב סיביות (לדוגמא 128k)",
|
"LabelAudioBitrate": "קצב סיביות (לדוגמא 128k)",
|
||||||
"LabelAudioChannels": "ערוצי קול (1 או 2)",
|
"LabelAudioChannels": "ערוצי קול (1 או 2)",
|
||||||
"LabelAudioCodec": "קידוד קול",
|
"LabelAudioCodec": "קידוד קול",
|
||||||
"LabelAuthor": "סופר",
|
"LabelAuthor": "יוצר",
|
||||||
"LabelAuthorFirstLast": "סופר (שם, משפחה)",
|
"LabelAuthorFirstLast": "יוצר (שם פרטי שם משפחה)",
|
||||||
"LabelAuthorLastFirst": "סופר (משפחה, שם)",
|
"LabelAuthorLastFirst": "יוצר (שם משפחה, שם פרטי)",
|
||||||
"LabelAuthors": "סופרים",
|
"LabelAuthors": "יוצרים",
|
||||||
"LabelAutoDownloadEpisodes": "הורד פרקים באופן אוטומטי",
|
"LabelAutoDownloadEpisodes": "הורד פרקים באופן אוטומטי",
|
||||||
"LabelAutoFetchMetadata": "חפש והורד מטא-נתונים באופן אוטומטי",
|
"LabelAutoFetchMetadata": "חפש והורד מטא-נתונים באופן אוטומטי",
|
||||||
"LabelAutoFetchMetadataHelp": "מחפש ומוריד מטא-נתונים לשדות כותרת, יוצר וסדרה כדי לשפר את תהליך ההעלאה. ייתכן שיהיה צורך להתאים מטא-נתונים נוסף לאחר ההעלאה.",
|
"LabelAutoFetchMetadataHelp": "מחפש ומוריד מטא-נתונים לשדות כותרת, יוצר וסדרה כדי לשפר את תהליך ההעלאה. ייתכן שיהיה צורך להתאים מטא-נתונים נוסף לאחר ההעלאה.",
|
||||||
@ -252,48 +242,36 @@
|
|||||||
"LabelAutoRegister": "הרשמה אוטומטית",
|
"LabelAutoRegister": "הרשמה אוטומטית",
|
||||||
"LabelAutoRegisterDescription": "יצירת משתמשים חדשים אוטומטית לאחר התחברות",
|
"LabelAutoRegisterDescription": "יצירת משתמשים חדשים אוטומטית לאחר התחברות",
|
||||||
"LabelBackToUser": "חזרה למשתמש",
|
"LabelBackToUser": "חזרה למשתמש",
|
||||||
"LabelBackupAudioFiles": "גיבוי קבצי שמע",
|
|
||||||
"LabelBackupLocation": "מיקום גיבוי",
|
"LabelBackupLocation": "מיקום גיבוי",
|
||||||
"LabelBackupsEnableAutomaticBackups": "גיבויים אוטומטיים",
|
"LabelBackupsEnableAutomaticBackups": "הפעל גיבויים אוטומטיים",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "גיבויים שמורים ב /metadata/backups",
|
"LabelBackupsEnableAutomaticBackupsHelp": "גיבויים שמורים ב /metadata/backups",
|
||||||
"LabelBackupsMaxBackupSize": "גודל הגיבוי המרבי (בג'יגה-בייט) (0 - ללא הגבלה)",
|
"LabelBackupsMaxBackupSize": "גודל הגיבוי המרבי (בג'יגה-בייט)",
|
||||||
"LabelBackupsMaxBackupSizeHelp": "כהגנה על עצמך מפני תצורה שגויה, הגיבויים ייכשלו אם הם יעברו את הגודל שהוגדר.",
|
"LabelBackupsMaxBackupSizeHelp": "כהגנה על עצמך מפני תצורה שגויה, הגיבויים ייכשלו אם הם יעברו את הגודל שהוגדר.",
|
||||||
"LabelBackupsNumberToKeep": "מספר הגיבויים לשמירה",
|
"LabelBackupsNumberToKeep": "מספר הגיבויים לשמירה",
|
||||||
"LabelBackupsNumberToKeepHelp": "רק גיבוי אחד יוסר בכל פעם, לכן אם יש לך כבר יותר מגיבוי אחד יש להסיר אותם באופן ידני.",
|
"LabelBackupsNumberToKeepHelp": "רק גיבוי אחד יוסר בכל פעם, לכן אם יש לך כבר יותר מגיבוי אחד יש להסיר אותם באופן ידני.",
|
||||||
"LabelBitrate": "קצב סיביות",
|
"LabelBitrate": "קצב סיביות",
|
||||||
"LabelBonus": "בונוס",
|
|
||||||
"LabelBooks": "ספרים",
|
"LabelBooks": "ספרים",
|
||||||
"LabelButtonText": "טקסט לחצן",
|
"LabelButtonText": "טקסט לחצן",
|
||||||
"LabelByAuthor": "על ידי {0}",
|
|
||||||
"LabelChangePassword": "שינוי סיסמה",
|
"LabelChangePassword": "שינוי סיסמה",
|
||||||
"LabelChannels": "ערוצים",
|
"LabelChannels": "ערוצים",
|
||||||
"LabelChapterCount": "{0} פרקים",
|
|
||||||
"LabelChapterTitle": "כותרת הפרק",
|
"LabelChapterTitle": "כותרת הפרק",
|
||||||
"LabelChapters": "פרקים",
|
"LabelChapters": "פרקים",
|
||||||
"LabelChaptersFound": "פרקים שנמצאו",
|
"LabelChaptersFound": "פרקים שנמצאו",
|
||||||
"LabelClickForMoreInfo": "לחץ למידע נוסף",
|
"LabelClickForMoreInfo": "לחץ למידע נוסף",
|
||||||
"LabelClickToUseCurrentValue": "לחץ לשימוש בערך הנוכחי",
|
|
||||||
"LabelClosePlayer": "סגור נגן",
|
"LabelClosePlayer": "סגור נגן",
|
||||||
"LabelCodec": "Coded",
|
"LabelCollapseSeries": "צמצום סדרה",
|
||||||
"LabelCollapseSeries": "הסתר סדרה",
|
|
||||||
"LabelCollapseSubSeries": "הסתר תת סדרה",
|
|
||||||
"LabelCollection": "אוסף",
|
"LabelCollection": "אוסף",
|
||||||
"LabelCollections": "אוספים",
|
"LabelCollections": "אוספים",
|
||||||
"LabelComplete": "הושלם",
|
"LabelComplete": "מלא",
|
||||||
"LabelConfirmPassword": "אישור סיסמה",
|
"LabelConfirmPassword": "אישור סיסמה",
|
||||||
"LabelContinueListening": "המשך האזנה",
|
"LabelContinueListening": "המשך האזנה",
|
||||||
"LabelContinueReading": "המשך קריאה",
|
"LabelContinueReading": "המשך קריאה",
|
||||||
"LabelContinueSeries": "המשך סדרה",
|
"LabelContinueSeries": "המשך סדרה",
|
||||||
"LabelCover": "כריכה",
|
"LabelCover": "כריכה",
|
||||||
"LabelCoverImageURL": "כתובת התמונה ברשת",
|
"LabelCoverImageURL": "כתובת התמונה ברשת",
|
||||||
"LabelCoverProvider": "ספק כריכה",
|
|
||||||
"LabelCreatedAt": "נוצר בתאריך",
|
"LabelCreatedAt": "נוצר בתאריך",
|
||||||
"LabelCronExpression": "ביטוי cron",
|
|
||||||
"LabelCurrent": "נוכחי",
|
"LabelCurrent": "נוכחי",
|
||||||
"LabelCurrently": "כעת:",
|
"LabelCurrently": "כעת:",
|
||||||
"LabelCustomCronExpression": "ביטוי cron מותאם אישית:",
|
|
||||||
"LabelDatetime": "Datetime",
|
|
||||||
"LabelDays": "ימים",
|
|
||||||
"LabelDeleteFromFileSystemCheckbox": "מחיקה מהמערכת הקבצים (הסר סימון למחיקה רק ממסד הנתונים)",
|
"LabelDeleteFromFileSystemCheckbox": "מחיקה מהמערכת הקבצים (הסר סימון למחיקה רק ממסד הנתונים)",
|
||||||
"LabelDescription": "תיאור",
|
"LabelDescription": "תיאור",
|
||||||
"LabelDeselectAll": "הסר בחירת כל הפריטים",
|
"LabelDeselectAll": "הסר בחירת כל הפריטים",
|
||||||
@ -304,83 +282,51 @@
|
|||||||
"LabelDiscFromFilename": "דיסק משם הקובץ",
|
"LabelDiscFromFilename": "דיסק משם הקובץ",
|
||||||
"LabelDiscFromMetadata": "דיסק מהמטא-נתונים",
|
"LabelDiscFromMetadata": "דיסק מהמטא-נתונים",
|
||||||
"LabelDiscover": "גלה",
|
"LabelDiscover": "גלה",
|
||||||
"LabelDownload": "הורדה",
|
"LabelDownload": "הורד",
|
||||||
"LabelDownloadNEpisodes": "הורד {0} פרקים",
|
"LabelDownloadNEpisodes": "הורד {0} פרקים",
|
||||||
"LabelDownloadable": "ניתן להורדה",
|
|
||||||
"LabelDuration": "משך",
|
"LabelDuration": "משך",
|
||||||
"LabelDurationComparisonExactMatch": "(התאמה מדוייקת)",
|
|
||||||
"LabelDurationComparisonLonger": "({0} ארוך יותר)",
|
|
||||||
"LabelDurationComparisonShorter": "({0} קצר יותר)",
|
|
||||||
"LabelDurationFound": "משך נמצא:",
|
"LabelDurationFound": "משך נמצא:",
|
||||||
"LabelEbook": "ספר אלקטרוני",
|
"LabelEbook": "ספר אלקטרוני",
|
||||||
"LabelEbooks": "ספרים אלקטרוניים",
|
"LabelEbooks": "ספרים אלקטרוניים",
|
||||||
"LabelEdit": "עריכה",
|
"LabelEdit": "עריכה",
|
||||||
"LabelEmail": "דואר אלקטרוני",
|
"LabelEmail": "דואר אלקטרוני",
|
||||||
"LabelEmailSettingsFromAddress": "מאת",
|
"LabelEmailSettingsFromAddress": "מאת",
|
||||||
"LabelEmailSettingsRejectUnauthorized": "דחה תעודות לא מאושרות",
|
|
||||||
"LabelEmailSettingsRejectUnauthorizedHelp": "השבתת אימות תעודת SSL עלולה לחשוף את החיבור שלך לסיכוני אבטחה, כגון התקפות \"אדם באמצע\". השבת אפשרות זו רק אם אתה מבין את ההשלכות ובוטח בשרת הדואר שאליו אתה מתחבר.",
|
|
||||||
"LabelEmailSettingsSecure": "מאובטח",
|
"LabelEmailSettingsSecure": "מאובטח",
|
||||||
"LabelEmailSettingsSecureHelp": "אם מופעל, החיבור ישתמש ב-TLS בעת ההתחברות לשרת. אם לא, אז TLS יהיה בשימוש אם השרת תומך בהרחבת STARTTLS. ברוב המקרים מומלץ להפעיל את הגדרה זו אם אתה מתחבר לפורט 465. לפורט 587 או 25, השאר כבוי. (from nodemailer.com/smtp/#authentication)",
|
"LabelEmailSettingsSecureHelp": "אם מופעל, החיבור ישתמש ב-TLS בעת ההתחברות לשרת. אם לא, אז TLS יהיה בשימוש אם השרת תומך בהרחבת STARTTLS. ברוב המקרים מומלץ להפעיל את הגדרה זו אם אתה מתחבר לפורט 465. לפורט 587 או 25, השאר כבוי. (from nodemailer.com/smtp/#authentication)",
|
||||||
"LabelEmailSettingsTestAddress": "כתובת לבדיקה",
|
"LabelEmailSettingsTestAddress": "כתובת לבדיקה",
|
||||||
"LabelEmbeddedCover": "כריכה מוטמעת",
|
"LabelEmbeddedCover": "כריכה מוטמעת",
|
||||||
"LabelEnable": "אפשר",
|
"LabelEnable": "הפעל",
|
||||||
"LabelEncodingBackupLocation": "גיבוי של קבצי אודיו מקוריים יישמר ב:",
|
"LabelEnd": "סיום",
|
||||||
"LabelEncodingChaptersNotEmbedded": "פרקים אינם מוטבעים בספרי אודיו מרובי רצועות.",
|
|
||||||
"LabelEncodingClearItemCache": "הקפד לנקות מטמון פריטים מעת לעת.",
|
|
||||||
"LabelEncodingFinishedM4B": "קובץ M4B סופי יישמר בתיקייה ה-audiobook ב:",
|
|
||||||
"LabelEncodingInfoEmbedded": "מטה דאטה יוטמע ברצועות השמע בתוך תיקיית ה-audiobook.",
|
|
||||||
"LabelEncodingStartedNavigation": "לאחר שהמשימה תתחיל אפשר לנווט לדף אחר.",
|
|
||||||
"LabelEncodingTimeWarning": "קידוד יכול להימשך עד 30 דקות.",
|
|
||||||
"LabelEncodingWarningAdvancedSettings": "אזהרה: אל תעדכן את ההגדרות האלה אלא אם כן אתה מכיר את אפשרויות קידוד ffmpeg.",
|
|
||||||
"LabelEncodingWatcherDisabled": "אם ה-watcher כבוי, יש לסרוק את הספר מחדש לאחר מכן.",
|
|
||||||
"LabelEnd": "סוף",
|
|
||||||
"LabelEndOfChapter": "סוף הפרק",
|
|
||||||
"LabelEpisode": "פרק",
|
"LabelEpisode": "פרק",
|
||||||
"LabelEpisodeNotLinkedToRssFeed": "פרק לא מקושר לערוץ RSS",
|
|
||||||
"LabelEpisodeNumber": "פרק #{0}",
|
|
||||||
"LabelEpisodeTitle": "כותרת הפרק",
|
"LabelEpisodeTitle": "כותרת הפרק",
|
||||||
"LabelEpisodeType": "סוג הפרק",
|
"LabelEpisodeType": "סוג הפרק",
|
||||||
"LabelEpisodeUrlFromRssFeed": "קישור פרק מערוץ RSS",
|
|
||||||
"LabelEpisodes": "פרקים",
|
|
||||||
"LabelEpisodic": "ארעי",
|
|
||||||
"LabelExample": "דוגמה",
|
"LabelExample": "דוגמה",
|
||||||
"LabelExpandSeries": "הרחב סדרה",
|
|
||||||
"LabelExpandSubSeries": "הרחב תת סדרה",
|
|
||||||
"LabelExplicit": "בוטה",
|
"LabelExplicit": "בוטה",
|
||||||
"LabelExplicitChecked": "בוטה (מסומן)",
|
|
||||||
"LabelExplicitUnchecked": "לא בוטה (לא מסומן)",
|
|
||||||
"LabelExportOPML": "ייצוא OPML",
|
|
||||||
"LabelFeedURL": "כתובת ערוץ",
|
"LabelFeedURL": "כתובת ערוץ",
|
||||||
"LabelFetchingMetadata": "מושך מטא-נתונים",
|
"LabelFetchingMetadata": "מושך מטא-נתונים",
|
||||||
"LabelFile": "קובץ",
|
"LabelFile": "קובץ",
|
||||||
"LabelFileBirthtime": "זמן יצירת הקובץ",
|
"LabelFileBirthtime": "זמן יצירת הקובץ",
|
||||||
"LabelFileBornDate": "נוצר {0}",
|
"LabelFileModified": "הקובץ שונה",
|
||||||
"LabelFileModified": "קובץ נערך",
|
"LabelFilename": "שם הקובץ",
|
||||||
"LabelFileModifiedDate": "שונה {0}",
|
|
||||||
"LabelFilename": "שם קובץ",
|
|
||||||
"LabelFilterByUser": "סינון לפי משתמש",
|
"LabelFilterByUser": "סינון לפי משתמש",
|
||||||
"LabelFindEpisodes": "מצא פרקים",
|
"LabelFindEpisodes": "מצא פרקים",
|
||||||
"LabelFinished": "הושלם",
|
"LabelFinished": "הושלם",
|
||||||
"LabelFolder": "תיקייה",
|
"LabelFolder": "תיקייה",
|
||||||
"LabelFolders": "תיקיות",
|
"LabelFolders": "תיקיות",
|
||||||
"LabelFontBold": "מודגש",
|
"LabelFontBold": "מודגש",
|
||||||
"LabelFontBoldness": "עובי פונט",
|
|
||||||
"LabelFontFamily": "משפחת הפונטים",
|
"LabelFontFamily": "משפחת הפונטים",
|
||||||
"LabelFontItalic": "נטוי",
|
"LabelFontItalic": "נטוי",
|
||||||
"LabelFontScale": "גודל פונט",
|
"LabelFontScale": "קנה מידה של הפונט",
|
||||||
"LabelFontStrikethrough": "קו חוצה",
|
"LabelFontStrikethrough": "קו חוצה",
|
||||||
"LabelFormat": "תבנית",
|
"LabelFormat": "תבנית",
|
||||||
"LabelFull": "מלא",
|
"LabelGenre": "ז'אנר",
|
||||||
"LabelGenre": "סגנון",
|
"LabelGenres": "ז'אנרים",
|
||||||
"LabelGenres": "סגנונות",
|
|
||||||
"LabelHardDeleteFile": "מחיקה חזקה של הקובץ",
|
"LabelHardDeleteFile": "מחיקה חזקה של הקובץ",
|
||||||
"LabelHasEbook": "קיים ספר אלקטרוני",
|
"LabelHasEbook": "ספר אלקטרוני קיים",
|
||||||
"LabelHasSupplementaryEbook": "קיים ספר אלקטרוני משלים",
|
"LabelHasSupplementaryEbook": "קיים ספר אלקטרוני נלווה",
|
||||||
"LabelHideSubtitles": "הסתר תת כותרות",
|
|
||||||
"LabelHighestPriority": "העדיפות הגבוהה ביותר",
|
"LabelHighestPriority": "העדיפות הגבוהה ביותר",
|
||||||
"LabelHost": "מארח",
|
"LabelHost": "מארח",
|
||||||
"LabelHour": "שעה",
|
"LabelHour": "שעה",
|
||||||
"LabelHours": "שעות",
|
|
||||||
"LabelIcon": "סמל",
|
"LabelIcon": "סמל",
|
||||||
"LabelImageURLFromTheWeb": "כתובת התמונה מהרשת",
|
"LabelImageURLFromTheWeb": "כתובת התמונה מהרשת",
|
||||||
"LabelInProgress": "בתהליך",
|
"LabelInProgress": "בתהליך",
|
||||||
@ -395,30 +341,25 @@
|
|||||||
"LabelIntervalEvery6Hours": "כל 6 שעות",
|
"LabelIntervalEvery6Hours": "כל 6 שעות",
|
||||||
"LabelIntervalEveryDay": "כל יום",
|
"LabelIntervalEveryDay": "כל יום",
|
||||||
"LabelIntervalEveryHour": "כל שעה",
|
"LabelIntervalEveryHour": "כל שעה",
|
||||||
"LabelIntervalEveryMinute": "כל דקה",
|
|
||||||
"LabelInvert": "הפוך",
|
"LabelInvert": "הפוך",
|
||||||
"LabelItem": "פריט",
|
"LabelItem": "פריט",
|
||||||
"LabelJumpBackwardAmount": "כמות הרצה לאחור",
|
|
||||||
"LabelJumpForwardAmount": "כמות הרצה קדימה",
|
|
||||||
"LabelLanguage": "שפה",
|
"LabelLanguage": "שפה",
|
||||||
"LabelLanguageDefaultServer": "שפת ברירת המחדל של השרת",
|
"LabelLanguageDefaultServer": "שפת ברירת המחדל של השרת",
|
||||||
"LabelLanguages": "שפות",
|
|
||||||
"LabelLastBookAdded": "הספר האחרון שנוסף",
|
"LabelLastBookAdded": "הספר האחרון שנוסף",
|
||||||
"LabelLastBookUpdated": "הספר האחרון שעודכן",
|
"LabelLastBookUpdated": "הספר האחרון שעודכן",
|
||||||
"LabelLastSeen": "נראה לאחרונה",
|
"LabelLastSeen": "נראה לאחרונה",
|
||||||
"LabelLastTime": "הזמן האחרון",
|
"LabelLastTime": "הזמן האחרון",
|
||||||
"LabelLastUpdate": "עדכון אחרון",
|
"LabelLastUpdate": "עדכון אחרון",
|
||||||
"LabelLayout": "Layout",
|
"LabelLayout": "פריסה",
|
||||||
"LabelLayoutSinglePage": "עמוד יחיד",
|
"LabelLayoutSinglePage": "דף בודד",
|
||||||
"LabelLayoutSplitPage": "פיצול הדף",
|
"LabelLayoutSplitPage": "פיצול הדף",
|
||||||
"LabelLess": "פחות",
|
"LabelLess": "פחות",
|
||||||
"LabelLibrariesAccessibleToUser": "ספריות נגישות למשתמש",
|
"LabelLibrariesAccessibleToUser": "ספריות נגישות למשתמש",
|
||||||
"LabelLibrary": "ספרייה",
|
"LabelLibrary": "ספרייה",
|
||||||
"LabelLibraryFilterSublistEmpty": "לא {0}",
|
|
||||||
"LabelLibraryItem": "פריט ספרייה",
|
"LabelLibraryItem": "פריט ספרייה",
|
||||||
"LabelLibraryName": "שם הספרייה",
|
"LabelLibraryName": "שם הספרייה",
|
||||||
"LabelLimit": "מגבלה",
|
"LabelLimit": "מגבלה",
|
||||||
"LabelLineSpacing": "מרווח שורה",
|
"LabelLineSpacing": "ריווח שורות",
|
||||||
"LabelListenAgain": "האזן שוב",
|
"LabelListenAgain": "האזן שוב",
|
||||||
"LabelLogLevelDebug": "דיבוג",
|
"LabelLogLevelDebug": "דיבוג",
|
||||||
"LabelLogLevelInfo": "מידע",
|
"LabelLogLevelInfo": "מידע",
|
||||||
@ -427,10 +368,6 @@
|
|||||||
"LabelLowestPriority": "העדיפות הנמוכה ביותר",
|
"LabelLowestPriority": "העדיפות הנמוכה ביותר",
|
||||||
"LabelMatchExistingUsersBy": "התאם משתמשים קיימים לפי",
|
"LabelMatchExistingUsersBy": "התאם משתמשים קיימים לפי",
|
||||||
"LabelMatchExistingUsersByDescription": "משמש לחיבור משתמשים קיימים. לאחר החיבור, המשתמשים יותאמו לפי זיהוי ייחודי מספק ה-SSO שלך",
|
"LabelMatchExistingUsersByDescription": "משמש לחיבור משתמשים קיימים. לאחר החיבור, המשתמשים יותאמו לפי זיהוי ייחודי מספק ה-SSO שלך",
|
||||||
"LabelMaxEpisodesToDownload": "מספר פרקים מקסימלי להורדה. 0 - ללא הגבלה.",
|
|
||||||
"LabelMaxEpisodesToDownloadPerCheck": "מספר פרקים חדשים מקסימלי להורדה בכל בדיקה",
|
|
||||||
"LabelMaxEpisodesToKeep": "מספר פרקים מקסימלי לשמור",
|
|
||||||
"LabelMaxEpisodesToKeepHelp": "ערך של 0 קובע ללא מגבלה. לאחר הורדה אוטומטית של פרק חדש יימחק את הפרק הישן ביותר אם יש לך יותר מ-X פרקים. פעולה זו תמחק רק פרק אחד לכל הורדה חדשה.",
|
|
||||||
"LabelMediaPlayer": "נגן מדיה",
|
"LabelMediaPlayer": "נגן מדיה",
|
||||||
"LabelMediaType": "סוג מדיה",
|
"LabelMediaType": "סוג מדיה",
|
||||||
"LabelMetaTag": "תג מטא",
|
"LabelMetaTag": "תג מטא",
|
||||||
@ -438,7 +375,6 @@
|
|||||||
"LabelMetadataOrderOfPrecedenceDescription": "מקורות המטא-נתונים עם עדיפות גבוהה יחליפו מקורות עם עדיפות נמוכה יותר",
|
"LabelMetadataOrderOfPrecedenceDescription": "מקורות המטא-נתונים עם עדיפות גבוהה יחליפו מקורות עם עדיפות נמוכה יותר",
|
||||||
"LabelMetadataProvider": "ספק מטא-נתונים",
|
"LabelMetadataProvider": "ספק מטא-נתונים",
|
||||||
"LabelMinute": "דקה",
|
"LabelMinute": "דקה",
|
||||||
"LabelMinutes": "דקות",
|
|
||||||
"LabelMissing": "חסר",
|
"LabelMissing": "חסר",
|
||||||
"LabelMissingEbook": "אין ספר אלקטרוני",
|
"LabelMissingEbook": "אין ספר אלקטרוני",
|
||||||
"LabelMissingSupplementaryEbook": "אין ספר אלקטרוני נלווה",
|
"LabelMissingSupplementaryEbook": "אין ספר אלקטרוני נלווה",
|
||||||
@ -451,11 +387,10 @@
|
|||||||
"LabelNarrators": "מספרים",
|
"LabelNarrators": "מספרים",
|
||||||
"LabelNew": "חדש",
|
"LabelNew": "חדש",
|
||||||
"LabelNewPassword": "סיסמה חדשה",
|
"LabelNewPassword": "סיסמה חדשה",
|
||||||
"LabelNewestAuthors": "הסופרים האחרונים",
|
"LabelNewestAuthors": "הסופרים החדשים ביותר",
|
||||||
"LabelNewestEpisodes": "הפרקים החדשים ביותר",
|
"LabelNewestEpisodes": "הפרקים החדשים ביותר",
|
||||||
"LabelNextBackupDate": "תאריך הגיבוי הבא",
|
"LabelNextBackupDate": "תאריך הגיבוי הבא",
|
||||||
"LabelNextScheduledRun": "הרצה מתוזמנת הבאה",
|
"LabelNextScheduledRun": "הרצה מתוזמנת הבאה",
|
||||||
"LabelNoCustomMetadataProviders": "אין ספקי מטא-נתונים מותאמים אישית",
|
|
||||||
"LabelNoEpisodesSelected": "לא נבחרו פרקים",
|
"LabelNoEpisodesSelected": "לא נבחרו פרקים",
|
||||||
"LabelNotFinished": "לא הושלם",
|
"LabelNotFinished": "לא הושלם",
|
||||||
"LabelNotStarted": "לא התחיל",
|
"LabelNotStarted": "לא התחיל",
|
||||||
@ -470,9 +405,7 @@
|
|||||||
"LabelNotificationsMaxQueueSize": "גודל התור המרבי לאירועי התראה",
|
"LabelNotificationsMaxQueueSize": "גודל התור המרבי לאירועי התראה",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "האירועים מוגבלים לשליחה אחת לשנייה. האירועים יתעלמו אם התור מלא. הגדרה זו נועדה למנוע ספאם התראות.",
|
"LabelNotificationsMaxQueueSizeHelp": "האירועים מוגבלים לשליחה אחת לשנייה. האירועים יתעלמו אם התור מלא. הגדרה זו נועדה למנוע ספאם התראות.",
|
||||||
"LabelNumberOfBooks": "מספר הספרים",
|
"LabelNumberOfBooks": "מספר הספרים",
|
||||||
"LabelNumberOfEpisodes": "# פרקים",
|
"LabelNumberOfEpisodes": "מספר הפרקים",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "שם OpenID claim המכילה הרשאות מתקדמות לפעולות משתמש בתוך האפליקציה, אשר יחולו על תפקידים שאינם מנהלי מערכת (<b>אם הוגדרה</b>). אם התביעה חסרה בתגובה, הגישה ל-ABS תידחה. אם אפשרות אחת חסרה, היא תטופל כ-<code>false</code> יש לוודא שטענת ספק הזהויות תואמת את המבנה הצפוי:",
|
|
||||||
"LabelOpenIDClaims": "השאר את האפשרויות הבאות ריקות כדי להשבית הקצאת קבוצות והרשאות מתקדמת, ולאחר מכן להקצות אוטומטית את קבוצת 'משתמש'.",
|
|
||||||
"LabelOpenRSSFeed": "פתח ערוץ RSS",
|
"LabelOpenRSSFeed": "פתח ערוץ RSS",
|
||||||
"LabelOverwrite": "לשכפל",
|
"LabelOverwrite": "לשכפל",
|
||||||
"LabelPassword": "סיסמה",
|
"LabelPassword": "סיסמה",
|
||||||
@ -500,15 +433,13 @@
|
|||||||
"LabelProvider": "ספק",
|
"LabelProvider": "ספק",
|
||||||
"LabelPubDate": "תאריך פרסום",
|
"LabelPubDate": "תאריך פרסום",
|
||||||
"LabelPublishYear": "שנת הפרסום",
|
"LabelPublishYear": "שנת הפרסום",
|
||||||
"LabelPublishedDate": "פורסם {0}",
|
|
||||||
"LabelPublisher": "מוציא לאור",
|
"LabelPublisher": "מוציא לאור",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "אימייל בעלים מותאם אישית",
|
"LabelRSSFeedCustomOwnerEmail": "אימייל בעלים מותאם אישית",
|
||||||
"LabelRSSFeedCustomOwnerName": "שם בעלים מותאם אישית",
|
"LabelRSSFeedCustomOwnerName": "שם בעלים מותאם אישית",
|
||||||
"LabelRSSFeedOpen": "ערוץ RSS פתוח",
|
"LabelRSSFeedOpen": "פתח ערוץ RSS",
|
||||||
"LabelRSSFeedPreventIndexing": "מנע רישום",
|
"LabelRSSFeedPreventIndexing": "מנע רישום",
|
||||||
"LabelRSSFeedSlug": "Slug של ערוץ ה-RSS",
|
"LabelRSSFeedSlug": "Slug של ערוץ ה-RSS",
|
||||||
"LabelRSSFeedURL": "כתובת ערוץ ה-RSS",
|
"LabelRSSFeedURL": "כתובת ערוץ ה-RSS",
|
||||||
"LabelRandomly": "באופן אקראי",
|
|
||||||
"LabelRead": "קריאה",
|
"LabelRead": "קריאה",
|
||||||
"LabelReadAgain": "קרא שוב",
|
"LabelReadAgain": "קרא שוב",
|
||||||
"LabelReadEbookWithoutProgress": "קרא/י ספר אלקטרוני ללא שמירת התקדמות",
|
"LabelReadEbookWithoutProgress": "קרא/י ספר אלקטרוני ללא שמירת התקדמות",
|
||||||
@ -534,7 +465,7 @@
|
|||||||
"LabelSeriesProgress": "התקדמות בסדרה",
|
"LabelSeriesProgress": "התקדמות בסדרה",
|
||||||
"LabelServerYearReview": "השנה בסקירה של השרת ({0})",
|
"LabelServerYearReview": "השנה בסקירה של השרת ({0})",
|
||||||
"LabelSetEbookAsPrimary": "קבע כראשי",
|
"LabelSetEbookAsPrimary": "קבע כראשי",
|
||||||
"LabelSetEbookAsSupplementary": "קבע כמשלים",
|
"LabelSetEbookAsSupplementary": "קבע כספר אלקטרוני נלווה",
|
||||||
"LabelSettingsAudiobooksOnly": "רק ספרי קול",
|
"LabelSettingsAudiobooksOnly": "רק ספרי קול",
|
||||||
"LabelSettingsAudiobooksOnlyHelp": "הפעלת ההגדרה הזו תתעלם מקבצי ספרים אלקטרוניים אלא אם כן הם נמצאים בתיקיית ספרי קול, שבמקרה זה יקבעו כספרים אלקטרוניים נלווים",
|
"LabelSettingsAudiobooksOnlyHelp": "הפעלת ההגדרה הזו תתעלם מקבצי ספרים אלקטרוניים אלא אם כן הם נמצאים בתיקיית ספרי קול, שבמקרה זה יקבעו כספרים אלקטרוניים נלווים",
|
||||||
"LabelSettingsBookshelfViewHelp": "עיצוב סקאומורפי עם מדפי עץ",
|
"LabelSettingsBookshelfViewHelp": "עיצוב סקאומורפי עם מדפי עץ",
|
||||||
@ -569,7 +500,7 @@
|
|||||||
"LabelShowAll": "הצג הכל",
|
"LabelShowAll": "הצג הכל",
|
||||||
"LabelSize": "גודל",
|
"LabelSize": "גודל",
|
||||||
"LabelSleepTimer": "טיימר שינה",
|
"LabelSleepTimer": "טיימר שינה",
|
||||||
"LabelStart": "התחל",
|
"LabelStart": "התחלה",
|
||||||
"LabelStartTime": "זמן התחלה",
|
"LabelStartTime": "זמן התחלה",
|
||||||
"LabelStarted": "התחיל",
|
"LabelStarted": "התחיל",
|
||||||
"LabelStartedAt": "התחיל ב",
|
"LabelStartedAt": "התחיל ב",
|
||||||
@ -645,8 +576,8 @@
|
|||||||
"LabelViewQueue": "הצג תור נגן",
|
"LabelViewQueue": "הצג תור נגן",
|
||||||
"LabelVolume": "עוצמת קול",
|
"LabelVolume": "עוצמת קול",
|
||||||
"LabelWeekdaysToRun": "ימי השבוע להרצה",
|
"LabelWeekdaysToRun": "ימי השבוע להרצה",
|
||||||
"LabelYearReviewHide": "הסתר סקירת שנה",
|
"LabelYearReviewHide": "הסתר שנת סקירה",
|
||||||
"LabelYearReviewShow": "הצג סקירת שנה",
|
"LabelYearReviewShow": "הצג שנת סקירה",
|
||||||
"LabelYourAudiobookDuration": "משך הספר הקולי שלך",
|
"LabelYourAudiobookDuration": "משך הספר הקולי שלך",
|
||||||
"LabelYourBookmarks": "הסימניות שלך",
|
"LabelYourBookmarks": "הסימניות שלך",
|
||||||
"LabelYourPlaylists": "הפלייליסטים שלך",
|
"LabelYourPlaylists": "הפלייליסטים שלך",
|
||||||
@ -697,8 +628,8 @@
|
|||||||
"MessageDownloadingEpisode": "מוריד פרק",
|
"MessageDownloadingEpisode": "מוריד פרק",
|
||||||
"MessageDragFilesIntoTrackOrder": "גרור קבצים לסדר ההשמעה נכון",
|
"MessageDragFilesIntoTrackOrder": "גרור קבצים לסדר ההשמעה נכון",
|
||||||
"MessageEmbedFinished": "ההטמעה הושלמה!",
|
"MessageEmbedFinished": "ההטמעה הושלמה!",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} פרק/ים בתור להורדה",
|
"MessageEpisodesQueuedForDownload": "{0} פרקים בתור להורדה",
|
||||||
"MessageFeedURLWillBe": "כתובת ה- URL של הערוץ תהיה {0}",
|
"MessageFeedURLWillBe": "כתובת URL של העדכון תהיה {0}",
|
||||||
"MessageFetching": "מושך...",
|
"MessageFetching": "מושך...",
|
||||||
"MessageForceReScanDescription": "תבוצע סריקה מחדש כמו סריקה חדש מאפס, תגי ID3 של קבצי קול, קבצי OPF, וקבצי טקסט ייסרקו כחדשים.",
|
"MessageForceReScanDescription": "תבוצע סריקה מחדש כמו סריקה חדש מאפס, תגי ID3 של קבצי קול, קבצי OPF, וקבצי טקסט ייסרקו כחדשים.",
|
||||||
"MessageImportantNotice": "הודעה חשובה!",
|
"MessageImportantNotice": "הודעה חשובה!",
|
||||||
@ -713,7 +644,7 @@
|
|||||||
"MessageMapChapterTitles": "מפה שמות פרקים לפרקי הספר השמורים שלך ללא שינוי תגי זמן",
|
"MessageMapChapterTitles": "מפה שמות פרקים לפרקי הספר השמורים שלך ללא שינוי תגי זמן",
|
||||||
"MessageMarkAllEpisodesFinished": "סמן את כל הפרקים כהסתיימו",
|
"MessageMarkAllEpisodesFinished": "סמן את כל הפרקים כהסתיימו",
|
||||||
"MessageMarkAllEpisodesNotFinished": "סמן את כל הפרקים כלא הסתיימו",
|
"MessageMarkAllEpisodesNotFinished": "סמן את כל הפרקים כלא הסתיימו",
|
||||||
"MessageMarkAsFinished": "סמן כהושלם",
|
"MessageMarkAsFinished": "סמן כהסתיים",
|
||||||
"MessageMarkAsNotFinished": "סמן כלא הסתיים",
|
"MessageMarkAsNotFinished": "סמן כלא הסתיים",
|
||||||
"MessageMatchBooksDescription": "ינסה להתאים ספרים בספריית הספרים שלך עם ספר מספק החיפוש הנבחר וימלא פרטים ריקים ותמונות כריכה. לא יחליף פרטים קיימים.",
|
"MessageMatchBooksDescription": "ינסה להתאים ספרים בספריית הספרים שלך עם ספר מספק החיפוש הנבחר וימלא פרטים ריקים ותמונות כריכה. לא יחליף פרטים קיימים.",
|
||||||
"MessageNoAudioTracks": "אין רצועות שמע",
|
"MessageNoAudioTracks": "אין רצועות שמע",
|
||||||
@ -743,7 +674,7 @@
|
|||||||
"MessageNoSeries": "אין סדרות",
|
"MessageNoSeries": "אין סדרות",
|
||||||
"MessageNoTags": "אין תגיות",
|
"MessageNoTags": "אין תגיות",
|
||||||
"MessageNoTasksRunning": "אין משימות פעילות",
|
"MessageNoTasksRunning": "אין משימות פעילות",
|
||||||
"MessageNoUpdatesWereNecessary": "לא נדרש עדכון",
|
"MessageNoUpdatesWereNecessary": "לא היה צורך בעדכונים",
|
||||||
"MessageNoUserPlaylists": "אין לך רשימות השמעה",
|
"MessageNoUserPlaylists": "אין לך רשימות השמעה",
|
||||||
"MessageNotYetImplemented": "עדיין לא מיושם",
|
"MessageNotYetImplemented": "עדיין לא מיושם",
|
||||||
"MessageOr": "או",
|
"MessageOr": "או",
|
||||||
@ -751,7 +682,6 @@
|
|||||||
"MessagePlayChapter": "הקשב לתחילת הפרק",
|
"MessagePlayChapter": "הקשב לתחילת הפרק",
|
||||||
"MessagePlaylistCreateFromCollection": "צור רשימת השמעה מאוסף",
|
"MessagePlaylistCreateFromCollection": "צור רשימת השמעה מאוסף",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "לפודקאסט אין כתובת URL של ערוץ RSS להתאמה",
|
"MessagePodcastHasNoRSSFeedForMatching": "לפודקאסט אין כתובת URL של ערוץ RSS להתאמה",
|
||||||
"MessagePodcastSearchField": "הזן מונח חיפוש או כתובת URL של ערוץ RSS",
|
|
||||||
"MessageQuickMatchDescription": "ממלא פרטים ריקים וכריכות עם התוצאה הראשונה מ '{0}'. לא ימחק פרטים אלא אם הגדרת השרת 'העדף מטה-נתונים מותאמים' מופעלת.",
|
"MessageQuickMatchDescription": "ממלא פרטים ריקים וכריכות עם התוצאה הראשונה מ '{0}'. לא ימחק פרטים אלא אם הגדרת השרת 'העדף מטה-נתונים מותאמים' מופעלת.",
|
||||||
"MessageRemoveChapter": "הסר פרק",
|
"MessageRemoveChapter": "הסר פרק",
|
||||||
"MessageRemoveEpisodes": "הסר {0} פרקים",
|
"MessageRemoveEpisodes": "הסר {0} פרקים",
|
||||||
@ -778,7 +708,7 @@
|
|||||||
"NoteChangeRootPassword": "המשתמש root הוא המשתמש היחיד שיכולה להיות לו סיסמה ריקה",
|
"NoteChangeRootPassword": "המשתמש root הוא המשתמש היחיד שיכולה להיות לו סיסמה ריקה",
|
||||||
"NoteChapterEditorTimes": "הערה: זמן ההתחלה של הפרק הראשון חייב להישאר 0:00 וזמן ההתחלה של הפרק האחרון לא יכול לחרוג מהזמן של ספר השמע.",
|
"NoteChapterEditorTimes": "הערה: זמן ההתחלה של הפרק הראשון חייב להישאר 0:00 וזמן ההתחלה של הפרק האחרון לא יכול לחרוג מהזמן של ספר השמע.",
|
||||||
"NoteFolderPicker": "הערה: תיקיות שכבר מופו לא יוצגו",
|
"NoteFolderPicker": "הערה: תיקיות שכבר מופו לא יוצגו",
|
||||||
"NoteRSSFeedPodcastAppsHttps": "אזהרה: רוב אפליקציות הפודקאסטים ידרשו שכתובת האתר של ערוץ ה-RSS תשתמש ב-HTTPS",
|
"NoteRSSFeedPodcastAppsHttps": "אזהרה: רוב יישומי הפודקאסט דורשים שכתובת ה-URL ערוץ ה-RSS תשתמש ב-HTTPS",
|
||||||
"NoteRSSFeedPodcastAppsPubDate": "אזהרה: פרק אחד או יותר לא מכילים תאריך פרסום. חלק מיישומי הפודקאסט דורשים זאת.",
|
"NoteRSSFeedPodcastAppsPubDate": "אזהרה: פרק אחד או יותר לא מכילים תאריך פרסום. חלק מיישומי הפודקאסט דורשים זאת.",
|
||||||
"NoteUploaderFoldersWithMediaFiles": "תיקיות עם קבצי מדיה יעובדו כפריטי ספריה נפרדים.",
|
"NoteUploaderFoldersWithMediaFiles": "תיקיות עם קבצי מדיה יעובדו כפריטי ספריה נפרדים.",
|
||||||
"NoteUploaderOnlyAudioFiles": "אם מועלים רק קבצי שמע, כל קובץ שמע יעובד כספר שמע נפרד.",
|
"NoteUploaderOnlyAudioFiles": "אם מועלים רק קבצי שמע, כל קובץ שמע יעובד כספר שמע נפרד.",
|
||||||
@ -811,7 +741,7 @@
|
|||||||
"ToastCollectionUpdateSuccess": "האוסף עודכן בהצלחה",
|
"ToastCollectionUpdateSuccess": "האוסף עודכן בהצלחה",
|
||||||
"ToastItemCoverUpdateSuccess": "כריכת הפריט עודכנה בהצלחה",
|
"ToastItemCoverUpdateSuccess": "כריכת הפריט עודכנה בהצלחה",
|
||||||
"ToastItemDetailsUpdateSuccess": "פרטי הפריט עודכנו בהצלחה",
|
"ToastItemDetailsUpdateSuccess": "פרטי הפריט עודכנו בהצלחה",
|
||||||
"ToastItemMarkedAsFinishedFailed": "סימון כפריט שהושלם נכשל",
|
"ToastItemMarkedAsFinishedFailed": "סימון כפריט כהושלם נכשל",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "הפריט סומן כהושלם בהצלחה",
|
"ToastItemMarkedAsFinishedSuccess": "הפריט סומן כהושלם בהצלחה",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "סימון כפריט שלא הושלם נכשל",
|
"ToastItemMarkedAsNotFinishedFailed": "סימון כפריט שלא הושלם נכשל",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "הפריט סומן כלא הושלם בהצלחה",
|
"ToastItemMarkedAsNotFinishedSuccess": "הפריט סומן כלא הושלם בהצלחה",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Dodaj",
|
"ButtonAdd": "Dodaj",
|
||||||
"ButtonAddApiKey": "Dodaj API ključ",
|
|
||||||
"ButtonAddChapters": "Dodaj poglavlja",
|
"ButtonAddChapters": "Dodaj poglavlja",
|
||||||
"ButtonAddDevice": "Dodaj uređaj",
|
"ButtonAddDevice": "Dodaj uređaj",
|
||||||
"ButtonAddLibrary": "Dodaj knjižnicu",
|
"ButtonAddLibrary": "Dodaj knjižnicu",
|
||||||
@ -21,7 +20,6 @@
|
|||||||
"ButtonChooseAFolder": "Odaberi mapu",
|
"ButtonChooseAFolder": "Odaberi mapu",
|
||||||
"ButtonChooseFiles": "Odaberi datoteke",
|
"ButtonChooseFiles": "Odaberi datoteke",
|
||||||
"ButtonClearFilter": "Poništi filter",
|
"ButtonClearFilter": "Poništi filter",
|
||||||
"ButtonClose": "Zatvori",
|
|
||||||
"ButtonCloseFeed": "Zatvori izvor",
|
"ButtonCloseFeed": "Zatvori izvor",
|
||||||
"ButtonCloseSession": "Zatvori otvorenu sesiju",
|
"ButtonCloseSession": "Zatvori otvorenu sesiju",
|
||||||
"ButtonCollections": "Zbirke",
|
"ButtonCollections": "Zbirke",
|
||||||
@ -121,7 +119,6 @@
|
|||||||
"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",
|
||||||
"HeaderApiKeys": "API ključevi",
|
|
||||||
"HeaderAppriseNotificationSettings": "Postavke obavijesti Apprise",
|
"HeaderAppriseNotificationSettings": "Postavke obavijesti Apprise",
|
||||||
"HeaderAudioTracks": "Zvučni zapisi",
|
"HeaderAudioTracks": "Zvučni zapisi",
|
||||||
"HeaderAudiobookTools": "Alati za upravljanje datotekama zvučnih knjiga",
|
"HeaderAudiobookTools": "Alati za upravljanje datotekama zvučnih knjiga",
|
||||||
@ -165,7 +162,6 @@
|
|||||||
"HeaderMetadataOrderOfPrecedence": "Redoslijed prihvaćanja meta-podataka",
|
"HeaderMetadataOrderOfPrecedence": "Redoslijed prihvaćanja meta-podataka",
|
||||||
"HeaderMetadataToEmbed": "Meta-podatci za ugradnju",
|
"HeaderMetadataToEmbed": "Meta-podatci za ugradnju",
|
||||||
"HeaderNewAccount": "Novi korisnički račun",
|
"HeaderNewAccount": "Novi korisnički račun",
|
||||||
"HeaderNewApiKey": "Novi API ključ",
|
|
||||||
"HeaderNewLibrary": "Nova knjižnica",
|
"HeaderNewLibrary": "Nova knjižnica",
|
||||||
"HeaderNotificationCreate": "Izradi obavijest",
|
"HeaderNotificationCreate": "Izradi obavijest",
|
||||||
"HeaderNotificationUpdate": "Ažuriraj obavijest",
|
"HeaderNotificationUpdate": "Ažuriraj obavijest",
|
||||||
@ -181,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "Popis za izvođenje",
|
"HeaderPlaylist": "Popis za izvođenje",
|
||||||
"HeaderPlaylistItems": "Stavke popisa za izvođenje",
|
"HeaderPlaylistItems": "Stavke popisa za izvođenje",
|
||||||
"HeaderPodcastsToAdd": "Podcasti za dodavanje",
|
"HeaderPodcastsToAdd": "Podcasti za dodavanje",
|
||||||
"HeaderPresets": "Predlošci postavki",
|
|
||||||
"HeaderPreviewCover": "Pretpregled naslovnice",
|
"HeaderPreviewCover": "Pretpregled naslovnice",
|
||||||
"HeaderRSSFeedGeneral": "RSS pojedinosti",
|
"HeaderRSSFeedGeneral": "RSS pojedinosti",
|
||||||
"HeaderRSSFeedIsOpen": "RSS izvor je otvoren",
|
"HeaderRSSFeedIsOpen": "RSS izvor je otvoren",
|
||||||
@ -210,7 +205,6 @@
|
|||||||
"HeaderTableOfContents": "Sadržaj",
|
"HeaderTableOfContents": "Sadržaj",
|
||||||
"HeaderTools": "Alati",
|
"HeaderTools": "Alati",
|
||||||
"HeaderUpdateAccount": "Ažuriraj korisnički račun",
|
"HeaderUpdateAccount": "Ažuriraj korisnički račun",
|
||||||
"HeaderUpdateApiKey": "Ažuriraj API ključ",
|
|
||||||
"HeaderUpdateAuthor": "Ažuriraj autora",
|
"HeaderUpdateAuthor": "Ažuriraj autora",
|
||||||
"HeaderUpdateDetails": "Ažuriraj pojedinosti",
|
"HeaderUpdateDetails": "Ažuriraj pojedinosti",
|
||||||
"HeaderUpdateLibrary": "Ažuriraj knjižnicu",
|
"HeaderUpdateLibrary": "Ažuriraj knjižnicu",
|
||||||
@ -240,10 +234,6 @@
|
|||||||
"LabelAllUsersExcludingGuests": "Svi korisnici osim gostiju",
|
"LabelAllUsersExcludingGuests": "Svi korisnici osim gostiju",
|
||||||
"LabelAllUsersIncludingGuests": "Svi korisnici uključujući i goste",
|
"LabelAllUsersIncludingGuests": "Svi korisnici uključujući i goste",
|
||||||
"LabelAlreadyInYourLibrary": "Već u vašoj knjižnici",
|
"LabelAlreadyInYourLibrary": "Već u vašoj knjižnici",
|
||||||
"LabelApiKeyCreated": "API ključ \"{0}\" uspješno izrađen.",
|
|
||||||
"LabelApiKeyCreatedDescription": "Ne zaboravite odmah kopirati API ključ jer ga više nećete moći vidjeti.",
|
|
||||||
"LabelApiKeyUser": "Izvršavaj u ime korisnika",
|
|
||||||
"LabelApiKeyUserDescription": "Ovaj API ključ imat će iste dozvole kao i korisnik u čije ime djeluje. U zapisnicima će biti zabilježeno da je korisnik slao zahtjeve.",
|
|
||||||
"LabelApiToken": "API Token",
|
"LabelApiToken": "API Token",
|
||||||
"LabelAppend": "Pridodaj",
|
"LabelAppend": "Pridodaj",
|
||||||
"LabelAudioBitrate": "Kvaliteta zvučnog zapisa (npr. 128k)",
|
"LabelAudioBitrate": "Kvaliteta zvučnog zapisa (npr. 128k)",
|
||||||
@ -355,11 +345,7 @@
|
|||||||
"LabelExample": "Primjer",
|
"LabelExample": "Primjer",
|
||||||
"LabelExpandSeries": "Serijal prikaži prošireno",
|
"LabelExpandSeries": "Serijal prikaži prošireno",
|
||||||
"LabelExpandSubSeries": "Podserijal prikaži prošireno",
|
"LabelExpandSubSeries": "Podserijal prikaži prošireno",
|
||||||
"LabelExpired": "Istekao",
|
"LabelExplicit": "Eksplicitni sadržaj",
|
||||||
"LabelExpiresAt": "Istječe",
|
|
||||||
"LabelExpiresInSeconds": "Istječe za (sekundi)",
|
|
||||||
"LabelExpiresNever": "Nikada",
|
|
||||||
"LabelExplicit": "Eksplicitno",
|
|
||||||
"LabelExplicitChecked": "Eksplicitni sadržaj (označeno)",
|
"LabelExplicitChecked": "Eksplicitni sadržaj (označeno)",
|
||||||
"LabelExplicitUnchecked": "Nije eksplicitni sadržaj (odznačeno)",
|
"LabelExplicitUnchecked": "Nije eksplicitni sadržaj (odznačeno)",
|
||||||
"LabelExportOPML": "Izvoz OPML-a",
|
"LabelExportOPML": "Izvoz OPML-a",
|
||||||
@ -468,7 +454,6 @@
|
|||||||
"LabelNewestEpisodes": "Najnoviji nastavci",
|
"LabelNewestEpisodes": "Najnoviji nastavci",
|
||||||
"LabelNextBackupDate": "Sljedeća izrada sigurnosne kopije",
|
"LabelNextBackupDate": "Sljedeća izrada sigurnosne kopije",
|
||||||
"LabelNextScheduledRun": "Sljedeće zakazano izvođenje",
|
"LabelNextScheduledRun": "Sljedeće zakazano izvođenje",
|
||||||
"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": "Nije dovršeno",
|
||||||
@ -545,7 +530,6 @@
|
|||||||
"LabelReleaseDate": "Datum izlaska",
|
"LabelReleaseDate": "Datum izlaska",
|
||||||
"LabelRemoveAllMetadataAbs": "Ukloni sve datoteke metadata.abs",
|
"LabelRemoveAllMetadataAbs": "Ukloni sve datoteke metadata.abs",
|
||||||
"LabelRemoveAllMetadataJson": "Ukloni sve datoteke metadata.json",
|
"LabelRemoveAllMetadataJson": "Ukloni sve datoteke metadata.json",
|
||||||
"LabelRemoveAudibleBranding": "Ukloni Audibleove najave i odjave iz poglavlja",
|
|
||||||
"LabelRemoveCover": "Ukloni naslovnicu",
|
"LabelRemoveCover": "Ukloni naslovnicu",
|
||||||
"LabelRemoveMetadataFile": "Ukloni datoteke s meta-podatcima iz mapa knjižničkih stavki",
|
"LabelRemoveMetadataFile": "Ukloni datoteke s meta-podatcima iz mapa knjižničkih stavki",
|
||||||
"LabelRemoveMetadataFileHelp": "Uklanjanje svih datoteka metadata.json i metadata.abs u vaših {0} mapa.",
|
"LabelRemoveMetadataFileHelp": "Uklanjanje svih datoteka metadata.json i metadata.abs u vaših {0} mapa.",
|
||||||
@ -558,7 +542,6 @@
|
|||||||
"LabelSelectAll": "Označi sve",
|
"LabelSelectAll": "Označi sve",
|
||||||
"LabelSelectAllEpisodes": "Označi sve nastavke",
|
"LabelSelectAllEpisodes": "Označi sve nastavke",
|
||||||
"LabelSelectEpisodesShowing": "Prikazujem {0} odabranih nastavaka",
|
"LabelSelectEpisodesShowing": "Prikazujem {0} odabranih nastavaka",
|
||||||
"LabelSelectUser": "Odaberite korisnika",
|
|
||||||
"LabelSelectUsers": "Označi korisnike",
|
"LabelSelectUsers": "Označi korisnike",
|
||||||
"LabelSendEbookToDevice": "Pošalji e-knjigu …",
|
"LabelSendEbookToDevice": "Pošalji e-knjigu …",
|
||||||
"LabelSequence": "Slijed",
|
"LabelSequence": "Slijed",
|
||||||
@ -723,9 +706,6 @@
|
|||||||
"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": "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>.",
|
||||||
"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> .",
|
|
||||||
"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.",
|
|
||||||
"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, 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.",
|
||||||
"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.",
|
||||||
@ -747,7 +727,6 @@
|
|||||||
"MessageChaptersNotFound": "Poglavlja nisu pronađena",
|
"MessageChaptersNotFound": "Poglavlja nisu pronađena",
|
||||||
"MessageCheckingCron": "Provjeravam cron...",
|
"MessageCheckingCron": "Provjeravam cron...",
|
||||||
"MessageConfirmCloseFeed": "Sigurno želite zatvoriti ovaj izvor?",
|
"MessageConfirmCloseFeed": "Sigurno želite zatvoriti ovaj izvor?",
|
||||||
"MessageConfirmDeleteApiKey": "Sigurno želite izbrisati API ključ \"{0}\"?",
|
|
||||||
"MessageConfirmDeleteBackup": "Sigurno želite izbrisati sigurnosnu kopiju za {0}?",
|
"MessageConfirmDeleteBackup": "Sigurno želite izbrisati sigurnosnu kopiju za {0}?",
|
||||||
"MessageConfirmDeleteDevice": "Sigurno želite izbrisati e-čitač \"{0}\"?",
|
"MessageConfirmDeleteDevice": "Sigurno želite izbrisati e-čitač \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Ovo će izbrisati datoteke s datotečnog sustava. Jeste li sigurni?",
|
"MessageConfirmDeleteFile": "Ovo će izbrisati datoteke s datotečnog sustava. Jeste li sigurni?",
|
||||||
@ -775,7 +754,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "Sigurno želite ukloniti autora \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Sigurno želite ukloniti autora \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Sigurno želite obrisati kolekciju \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Sigurno želite obrisati kolekciju \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Sigurno želite ukloniti nastavak \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Sigurno želite ukloniti nastavak \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Napomena: Ova funkcija neće izbrisati zvučnu datoteku ukoliko ne uključite opciju \"Izbriši datoteku zauvijek\"",
|
|
||||||
"MessageConfirmRemoveEpisodes": "Sigurno želite ukloniti {0} nastavaka?",
|
"MessageConfirmRemoveEpisodes": "Sigurno želite ukloniti {0} nastavaka?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Sigurno želite ukloniti {0} sesija slušanja?",
|
"MessageConfirmRemoveListeningSessions": "Sigurno želite ukloniti {0} sesija slušanja?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Sigurno želite ukloniti sve datoteke metadata.{0} u mapama vaših knjižničkih stavki?",
|
"MessageConfirmRemoveMetadataFiles": "Sigurno želite ukloniti sve datoteke metadata.{0} u mapama vaših knjižničkih stavki?",
|
||||||
@ -875,7 +853,6 @@
|
|||||||
"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",
|
|
||||||
"MessageServerCouldNotBeReached": "Nije moguće pristupiti poslužitelju",
|
"MessageServerCouldNotBeReached": "Nije 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 se zvučnom datotekom kao poglavljem i nazivom datoteke kao naslovom poglavlja",
|
||||||
"MessageShareExpirationWillBe": "Vrijeme isteka će biti <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Vrijeme isteka će biti <strong>{0}</strong>",
|
||||||
@ -937,8 +914,6 @@
|
|||||||
"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",
|
|
||||||
"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",
|
||||||
"PlaceholderNewCollection": "Ime nove zbirke",
|
"PlaceholderNewCollection": "Ime nove zbirke",
|
||||||
"PlaceholderNewFolderPath": "Nova putanja mape",
|
"PlaceholderNewFolderPath": "Nova putanja mape",
|
||||||
@ -996,8 +971,6 @@
|
|||||||
"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",
|
||||||
"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.",
|
|
||||||
"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",
|
||||||
@ -1019,8 +992,6 @@
|
|||||||
"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",
|
||||||
"ToastFailedToCreate": "Izrada nije uspjela",
|
|
||||||
"ToastFailedToDelete": "Brisanje nije uspjelo",
|
|
||||||
"ToastFailedToLoadData": "Učitavanje podataka nije uspjelo",
|
"ToastFailedToLoadData": "Učitavanje podataka nije uspjelo",
|
||||||
"ToastFailedToMatch": "Nije prepoznato",
|
"ToastFailedToMatch": "Nije prepoznato",
|
||||||
"ToastFailedToShare": "Dijeljenje nije uspjelo",
|
"ToastFailedToShare": "Dijeljenje nije uspjelo",
|
||||||
@ -1052,7 +1023,6 @@
|
|||||||
"ToastMustHaveAtLeastOnePath": "Mora postojati barem jedna putanja",
|
"ToastMustHaveAtLeastOnePath": "Mora postojati barem jedna putanja",
|
||||||
"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",
|
|
||||||
"ToastNewEpisodesFound": "pronađeno {0} novih nastavaka",
|
"ToastNewEpisodesFound": "pronađeno {0} novih nastavaka",
|
||||||
"ToastNewUserCreatedFailed": "Račun \"{0}\" nije uspješno izrađen",
|
"ToastNewUserCreatedFailed": "Račun \"{0}\" nije uspješno izrađen",
|
||||||
"ToastNewUserCreatedSuccess": "Novi račun izrađen",
|
"ToastNewUserCreatedSuccess": "Novi račun izrađen",
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"ButtonAuthors": "Szerzők",
|
"ButtonAuthors": "Szerzők",
|
||||||
"ButtonBack": "Vissza",
|
"ButtonBack": "Vissza",
|
||||||
"ButtonBatchEditPopulateFromExisting": "Létezőből feltöltés",
|
"ButtonBatchEditPopulateFromExisting": "Létezőből feltöltés",
|
||||||
"ButtonBatchEditPopulateMapDetails": "A térkép részleteinek feltöltése",
|
"ButtonBatchEditPopulateMapDetails": "",
|
||||||
"ButtonBrowseForFolder": "Mappa keresése",
|
"ButtonBrowseForFolder": "Mappa keresése",
|
||||||
"ButtonCancel": "Mégse",
|
"ButtonCancel": "Mégse",
|
||||||
"ButtonCancelEncode": "Kódolás megszakítása",
|
"ButtonCancelEncode": "Kódolás megszakítása",
|
||||||
@ -177,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "Lejátszási lista",
|
"HeaderPlaylist": "Lejátszási lista",
|
||||||
"HeaderPlaylistItems": "Lejátszási lista elemek",
|
"HeaderPlaylistItems": "Lejátszási lista elemek",
|
||||||
"HeaderPodcastsToAdd": "Hozzáadandó podcastok",
|
"HeaderPodcastsToAdd": "Hozzáadandó podcastok",
|
||||||
"HeaderPresets": "Alapbeállítások",
|
|
||||||
"HeaderPreviewCover": "Borító előnézete",
|
"HeaderPreviewCover": "Borító előnézete",
|
||||||
"HeaderRSSFeedGeneral": "RSS részletek",
|
"HeaderRSSFeedGeneral": "RSS részletek",
|
||||||
"HeaderRSSFeedIsOpen": "RSS hírcsatorna nyitva van",
|
"HeaderRSSFeedIsOpen": "RSS hírcsatorna nyitva van",
|
||||||
@ -220,7 +219,6 @@
|
|||||||
"LabelAccountTypeAdmin": "Adminisztrátor",
|
"LabelAccountTypeAdmin": "Adminisztrátor",
|
||||||
"LabelAccountTypeGuest": "Vendég",
|
"LabelAccountTypeGuest": "Vendég",
|
||||||
"LabelAccountTypeUser": "Felhasználó",
|
"LabelAccountTypeUser": "Felhasználó",
|
||||||
"LabelActivities": "Tevékenységek",
|
|
||||||
"LabelActivity": "Tevékenység",
|
"LabelActivity": "Tevékenység",
|
||||||
"LabelAddToCollection": "Hozzáadás a gyűjteményhez",
|
"LabelAddToCollection": "Hozzáadás a gyűjteményhez",
|
||||||
"LabelAddToCollectionBatch": "{0} könyv hozzáadása a gyűjteményhez",
|
"LabelAddToCollectionBatch": "{0} könyv hozzáadása a gyűjteményhez",
|
||||||
@ -230,7 +228,6 @@
|
|||||||
"LabelAddedDate": "{0} Hozzáadva",
|
"LabelAddedDate": "{0} Hozzáadva",
|
||||||
"LabelAdminUsersOnly": "Csak admin felhasználók",
|
"LabelAdminUsersOnly": "Csak admin felhasználók",
|
||||||
"LabelAll": "Összes",
|
"LabelAll": "Összes",
|
||||||
"LabelAllEpisodesDownloaded": "Minden epizód letöltve",
|
|
||||||
"LabelAllUsers": "Minden felhasználó",
|
"LabelAllUsers": "Minden felhasználó",
|
||||||
"LabelAllUsersExcludingGuests": "Minden felhasználó, vendégek kivételével",
|
"LabelAllUsersExcludingGuests": "Minden felhasználó, vendégek kivételével",
|
||||||
"LabelAllUsersIncludingGuests": "Minden felhasználó, beleértve a vendégeket is",
|
"LabelAllUsersIncludingGuests": "Minden felhasználó, beleértve a vendégeket is",
|
||||||
@ -254,7 +251,7 @@
|
|||||||
"LabelBackToUser": "Vissza a felhasználóhoz",
|
"LabelBackToUser": "Vissza a felhasználóhoz",
|
||||||
"LabelBackupAudioFiles": "Audiófájlok biztonsági mentése",
|
"LabelBackupAudioFiles": "Audiófájlok biztonsági mentése",
|
||||||
"LabelBackupLocation": "Biztonsági másolat helye",
|
"LabelBackupLocation": "Biztonsági másolat helye",
|
||||||
"LabelBackupsEnableAutomaticBackups": "Automatikus biztonsági másolatok",
|
"LabelBackupsEnableAutomaticBackups": "Automatikus biztonsági másolatok engedélyezése",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "Biztonsági másolatok mentése a /metadata/backups mappába",
|
"LabelBackupsEnableAutomaticBackupsHelp": "Biztonsági másolatok mentése a /metadata/backups mappába",
|
||||||
"LabelBackupsMaxBackupSize": "Maximális biztonsági másolat méret (GB-ban) (0-tól végtelenig)",
|
"LabelBackupsMaxBackupSize": "Maximális biztonsági másolat méret (GB-ban) (0-tól végtelenig)",
|
||||||
"LabelBackupsMaxBackupSizeHelp": "A rossz konfiguráció elleni védelem érdekében a biztonsági másolatok meghiúsulnak, ha meghaladják a beállított méretet.",
|
"LabelBackupsMaxBackupSizeHelp": "A rossz konfiguráció elleni védelem érdekében a biztonsági másolatok meghiúsulnak, ha meghaladják a beállított méretet.",
|
||||||
@ -278,7 +275,7 @@
|
|||||||
"LabelCollapseSeries": "Sorozat összecsukása",
|
"LabelCollapseSeries": "Sorozat ö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ény",
|
||||||
"LabelComplete": "Kész",
|
"LabelComplete": "Kész",
|
||||||
"LabelConfirmPassword": "Jelszó megerősítése",
|
"LabelConfirmPassword": "Jelszó megerősítése",
|
||||||
"LabelContinueListening": "Hallgatás folytatása",
|
"LabelContinueListening": "Hallgatás folytatása",
|
||||||
@ -286,7 +283,6 @@
|
|||||||
"LabelContinueSeries": "Sorozat folytatása",
|
"LabelContinueSeries": "Sorozat folytatása",
|
||||||
"LabelCover": "Borító",
|
"LabelCover": "Borító",
|
||||||
"LabelCoverImageURL": "Borítókép URL",
|
"LabelCoverImageURL": "Borítókép URL",
|
||||||
"LabelCoverProvider": "Borító Szolgáltató",
|
|
||||||
"LabelCreatedAt": "Létrehozás ideje",
|
"LabelCreatedAt": "Létrehozás ideje",
|
||||||
"LabelCronExpression": "Cron kifejezés",
|
"LabelCronExpression": "Cron kifejezés",
|
||||||
"LabelCurrent": "Jelenlegi",
|
"LabelCurrent": "Jelenlegi",
|
||||||
@ -395,8 +391,7 @@
|
|||||||
"LabelIntervalEvery6Hours": "Minden 6 órában",
|
"LabelIntervalEvery6Hours": "Minden 6 órában",
|
||||||
"LabelIntervalEveryDay": "Minden nap",
|
"LabelIntervalEveryDay": "Minden nap",
|
||||||
"LabelIntervalEveryHour": "Minden órában",
|
"LabelIntervalEveryHour": "Minden órában",
|
||||||
"LabelIntervalEveryMinute": "Minden percben",
|
"LabelInvert": "Megfordítás",
|
||||||
"LabelInvert": "Inverz",
|
|
||||||
"LabelItem": "Elem",
|
"LabelItem": "Elem",
|
||||||
"LabelJumpBackwardAmount": "Visszafelé ugrás mennyisége",
|
"LabelJumpBackwardAmount": "Visszafelé ugrás mennyisége",
|
||||||
"LabelJumpForwardAmount": "Előre ugrás mennyisége",
|
"LabelJumpForwardAmount": "Előre ugrás mennyisége",
|
||||||
@ -491,7 +486,6 @@
|
|||||||
"LabelPersonalYearReview": "Az éved összefoglalása ({0})",
|
"LabelPersonalYearReview": "Az éved összefoglalása ({0})",
|
||||||
"LabelPhotoPathURL": "Fénykép útvonal/URL",
|
"LabelPhotoPathURL": "Fénykép útvonal/URL",
|
||||||
"LabelPlayMethod": "Lejátszási módszer",
|
"LabelPlayMethod": "Lejátszási módszer",
|
||||||
"LabelPlaybackRateIncrementDecrement": "Lejátszási sebesség növelés/csökkentés értéke",
|
|
||||||
"LabelPlayerChapterNumberMarker": "{0} a {1} -ből",
|
"LabelPlayerChapterNumberMarker": "{0} a {1} -ből",
|
||||||
"LabelPlaylists": "Lejátszási listák",
|
"LabelPlaylists": "Lejátszási listák",
|
||||||
"LabelPodcast": "Podcast",
|
"LabelPodcast": "Podcast",
|
||||||
@ -514,7 +508,7 @@
|
|||||||
"LabelPublishers": "Kiadók",
|
"LabelPublishers": "Kiadók",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Egyéni tulajdonos e-mail",
|
"LabelRSSFeedCustomOwnerEmail": "Egyéni tulajdonos e-mail",
|
||||||
"LabelRSSFeedCustomOwnerName": "Egyéni tulajdonos neve",
|
"LabelRSSFeedCustomOwnerName": "Egyéni tulajdonos neve",
|
||||||
"LabelRSSFeedOpen": "RSS-hírcsatorna nyitva",
|
"LabelRSSFeedOpen": "RSS hírcsatorna nyitva",
|
||||||
"LabelRSSFeedPreventIndexing": "Indexelés megakadályozása",
|
"LabelRSSFeedPreventIndexing": "Indexelés megakadályozása",
|
||||||
"LabelRSSFeedSlug": "RSS hírcsatorna slug",
|
"LabelRSSFeedSlug": "RSS hírcsatorna slug",
|
||||||
"LabelRSSFeedURL": "RSS hírcsatorna URL",
|
"LabelRSSFeedURL": "RSS hírcsatorna URL",
|
||||||
@ -531,7 +525,6 @@
|
|||||||
"LabelReleaseDate": "Megjelenés dátuma",
|
"LabelReleaseDate": "Megjelenés dátuma",
|
||||||
"LabelRemoveAllMetadataAbs": "Az összes metadata.abs fájl eltávolítása",
|
"LabelRemoveAllMetadataAbs": "Az összes metadata.abs fájl eltávolítása",
|
||||||
"LabelRemoveAllMetadataJson": "Az összes metadata.json fájl eltávolítása",
|
"LabelRemoveAllMetadataJson": "Az összes metadata.json fájl eltávolítása",
|
||||||
"LabelRemoveAudibleBranding": "Audible intro és outro eltávolítása a fejezetekből",
|
|
||||||
"LabelRemoveCover": "Borító eltávolítása",
|
"LabelRemoveCover": "Borító eltávolítása",
|
||||||
"LabelRemoveMetadataFile": "Metaadatfájlok eltávolítása a könyvtár elemek mappáiból",
|
"LabelRemoveMetadataFile": "Metaadatfájlok eltávolítása a könyvtár elemek mappáiból",
|
||||||
"LabelRemoveMetadataFileHelp": "A metadata.json és metadata.abs fájlokat eltávolítása a {0} mappáidból.",
|
"LabelRemoveMetadataFileHelp": "A metadata.json és metadata.abs fájlokat eltávolítása a {0} mappáidból.",
|
||||||
@ -561,8 +554,6 @@
|
|||||||
"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",
|
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Változások automatikus vizsgálata 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.",
|
||||||
@ -606,7 +597,6 @@
|
|||||||
"LabelSlug": "Rövid cím",
|
"LabelSlug": "Rövid cím",
|
||||||
"LabelSortAscending": "Emelkedő",
|
"LabelSortAscending": "Emelkedő",
|
||||||
"LabelSortDescending": "Csökkenő",
|
"LabelSortDescending": "Csökkenő",
|
||||||
"LabelSortPubDate": "Rendezés megjelenés dátuma szerint",
|
|
||||||
"LabelStart": "Kezdés",
|
"LabelStart": "Kezdés",
|
||||||
"LabelStartTime": "Kezdési idő",
|
"LabelStartTime": "Kezdési idő",
|
||||||
"LabelStarted": "Elkezdődött",
|
"LabelStarted": "Elkezdődött",
|
||||||
@ -707,17 +697,12 @@
|
|||||||
"LabelYourProgress": "Haladásod",
|
"LabelYourProgress": "Haladásod",
|
||||||
"MessageAddToPlayerQueue": "Hozzáadás a lejátszó sorhoz",
|
"MessageAddToPlayerQueue": "Hozzáadás a lejátszó sorhoz",
|
||||||
"MessageAppriseDescription": "Ennek a funkció használatához futtatnia kell egy <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> példányt vagy egy olyan API-t, amely kezeli ezeket a kéréseket. <br />Az Apprise API URL-nek a teljes URL útvonalat kell tartalmaznia az értesítés elküldéséhez, például, ha az API példánya a <code>http://192.168.1.1:8337</code> címen szolgáltatva, akkor <code>http://192.168.1.1:8337/notify</code> értéket kell megadnia.",
|
"MessageAppriseDescription": "Ennek a funkció használatához futtatnia kell egy <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> példányt vagy egy olyan API-t, amely kezeli ezeket a kéréseket. <br />Az Apprise API URL-nek a teljes URL útvonalat kell tartalmaznia az értesítés elküldéséhez, például, ha az API példánya a <code>http://192.168.1.1:8337</code> címen szolgáltatva, akkor <code>http://192.168.1.1:8337/notify</code> értéket kell megadnia.",
|
||||||
"MessageAsinCheck": "Győződjön meg róla, hogy az ASIN-t a megfelelő Audible régióból használja, nem az Amazonból.",
|
|
||||||
"MessageAuthenticationOIDCChangesRestart": "A mentés után indítsa újra a szervert az OIDC módosítások alkalmazásához.",
|
|
||||||
"MessageBackupsDescription": "A biztonsági másolatok tartalmazzák a felhasználókat, a felhasználói haladást, a könyvtári elem részleteit, a szerver beállításait és a képeket, amelyek a <code>/metadata/items</code> és <code>/metadata/authors</code> mappákban vannak tárolva. A biztonsági másolatok <strong>nem</strong> tartalmazzák a könyvtári mappákban tárolt fájlokat.",
|
"MessageBackupsDescription": "A biztonsági másolatok tartalmazzák a felhasználókat, a felhasználói haladást, a könyvtári elem részleteit, a szerver beállításait és a képeket, amelyek a <code>/metadata/items</code> és <code>/metadata/authors</code> mappákban vannak tárolva. A biztonsági másolatok <strong>nem</strong> tartalmazzák a könyvtári mappákban tárolt fájlokat.",
|
||||||
"MessageBackupsLocationEditNote": "Megjegyzés: A biztonsági mentés helyének frissítése nem mozgatja vagy módosítja a meglévő biztonsági mentéseket",
|
"MessageBackupsLocationEditNote": "Megjegyzés: A biztonsági mentés helyének frissítése nem mozgatja vagy módosítja a meglévő biztonsági mentéseket",
|
||||||
"MessageBackupsLocationNoEditNote": "Megjegyzés: A biztonsági mentés helye egy környezeti változóval van beállítva, és itt nem módosítható.",
|
"MessageBackupsLocationNoEditNote": "Megjegyzés: A biztonsági mentés helye egy környezeti változóval van beállítva, és itt nem módosítható.",
|
||||||
"MessageBackupsLocationPathEmpty": "A biztonsági mentés helyének elérési útvonala nem lehet üres",
|
"MessageBackupsLocationPathEmpty": "A biztonsági mentés helyének elérési útvonala nem lehet üres",
|
||||||
"MessageBatchEditPopulateMapDetailsAllHelp": "Az engedélyezett mezők feltöltése az összes elem adatával. A több értéket tartalmazó mezők összevonásra kerülnek",
|
|
||||||
"MessageBatchEditPopulateMapDetailsItemHelp": "A térkép engedélyezett adatmezőinek feltöltése ezen elem adataival",
|
|
||||||
"MessageBatchQuickMatchDescription": "A Gyors egyeztetés megpróbálja hozzáadni a hiányzó borítókat és metaadatokat a kiválasztott elemekhez. Engedélyezze az alábbi opciókat, hogy a Gyors egyeztetés felülírhassa a meglévő borítókat és/vagy metaadatokat.",
|
"MessageBatchQuickMatchDescription": "A Gyors egyeztetés megpróbálja hozzáadni a hiányzó borítókat és metaadatokat a kiválasztott elemekhez. Engedélyezze az alábbi opciókat, hogy a Gyors egyeztetés felülírhassa a meglévő borítókat és/vagy metaadatokat.",
|
||||||
"MessageBookshelfNoCollections": "Még nem készített gyűjteményeket",
|
"MessageBookshelfNoCollections": "Még nem készített gyűjteményeket",
|
||||||
"MessageBookshelfNoCollectionsHelp": "A gyűjtemények nyilvánosak. Minden, a könyvtárhoz hozzáféréssel rendelkező felhasználó láthatja őket.",
|
|
||||||
"MessageBookshelfNoRSSFeeds": "Nincsenek nyitott RSS hírcsatornák",
|
"MessageBookshelfNoRSSFeeds": "Nincsenek nyitott RSS hírcsatornák",
|
||||||
"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",
|
||||||
@ -727,7 +712,6 @@
|
|||||||
"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",
|
||||||
"MessageChapterErrorStartLtPrev": "Érvénytelen kezdési idő, nagyobbnak kell lennie, mint az előző fejezet kezdési ideje",
|
"MessageChapterErrorStartLtPrev": "Érvénytelen kezdési idő, nagyobbnak kell lennie, mint az előző fejezet kezdési ideje",
|
||||||
"MessageChapterStartIsAfter": "A fejezet kezdete a hangoskönyv végét követi",
|
"MessageChapterStartIsAfter": "A fejezet kezdete a hangoskönyv végét követi",
|
||||||
"MessageChaptersNotFound": "Fejezetek nem találhatók",
|
|
||||||
"MessageCheckingCron": "Cron ellenőrzése...",
|
"MessageCheckingCron": "Cron ellenőrzése...",
|
||||||
"MessageConfirmCloseFeed": "Biztosan be szeretné zárni ezt a hírcsatornát?",
|
"MessageConfirmCloseFeed": "Biztosan be szeretné zárni ezt a hírcsatornát?",
|
||||||
"MessageConfirmDeleteBackup": "Biztosan törölni szeretné a(z) {0} biztonsági másolatot?",
|
"MessageConfirmDeleteBackup": "Biztosan törölni szeretné a(z) {0} biztonsági másolatot?",
|
||||||
@ -757,7 +741,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "Biztosan eltávolítja a(z) \"{0}\" szerzőt?",
|
"MessageConfirmRemoveAuthor": "Biztosan eltávolítja a(z) \"{0}\" szerzőt?",
|
||||||
"MessageConfirmRemoveCollection": "Biztosan eltávolítja a(z) \"{0}\" gyűjteményt?",
|
"MessageConfirmRemoveCollection": "Biztosan eltávolítja a(z) \"{0}\" gyűjteményt?",
|
||||||
"MessageConfirmRemoveEpisode": "Biztosan eltávolítja a(z) \"{0}\" epizódot?",
|
"MessageConfirmRemoveEpisode": "Biztosan eltávolítja a(z) \"{0}\" epizódot?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Megjegyzés: Ez nem törli a hangfájlt, kivéve, ha a \"Hangfájl végleges törlése\" be van kapcsolva",
|
|
||||||
"MessageConfirmRemoveEpisodes": "Biztosan eltávolítja a(z) {0} epizódot?",
|
"MessageConfirmRemoveEpisodes": "Biztosan eltávolítja a(z) {0} epizódot?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Biztosan eltávolítja a(z) {0} hallgatási munkamenetet?",
|
"MessageConfirmRemoveListeningSessions": "Biztosan eltávolítja a(z) {0} hallgatási munkamenetet?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Biztos, hogy az összes metaadatot el akarja távolítani {0} fájl van könyvtár mappáiban?",
|
"MessageConfirmRemoveMetadataFiles": "Biztos, hogy az összes metaadatot el akarja távolítani {0} fájl van könyvtár mappáiban?",
|
||||||
@ -785,7 +768,6 @@
|
|||||||
"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.",
|
||||||
"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",
|
|
||||||
"MessageItemsSelected": "{0} kiválasztott elem",
|
"MessageItemsSelected": "{0} kiválasztott elem",
|
||||||
"MessageItemsUpdated": "{0} frissített elem",
|
"MessageItemsUpdated": "{0} frissített elem",
|
||||||
"MessageJoinUsOn": "Csatlakozzon hozzánk a",
|
"MessageJoinUsOn": "Csatlakozzon hozzánk a",
|
||||||
@ -831,7 +813,6 @@
|
|||||||
"MessageNoTasksRunning": "Nincsenek futó feladatok",
|
"MessageNoTasksRunning": "Nincsenek futó feladatok",
|
||||||
"MessageNoUpdatesWereNecessary": "Nem volt szükség frissítésekre",
|
"MessageNoUpdatesWereNecessary": "Nem volt szükség frissítésekre",
|
||||||
"MessageNoUserPlaylists": "Nincsenek felhasználói lejátszási listák",
|
"MessageNoUserPlaylists": "Nincsenek felhasználói lejátszási listák",
|
||||||
"MessageNoUserPlaylistsHelp": "A lejátszási listák személyesek. Csak az a felhasználó láthatja őket, aki létrehozta őket.",
|
|
||||||
"MessageNotYetImplemented": "Még nem implementált",
|
"MessageNotYetImplemented": "Még nem implementált",
|
||||||
"MessageOpmlPreviewNote": "Megjegyzés: Ez egy előnézeti kép az elemzett OPML fájlról. A podcast tényleges címe az RSS hírcsatornából származik.",
|
"MessageOpmlPreviewNote": "Megjegyzés: Ez egy előnézeti kép az elemzett OPML fájlról. A podcast tényleges címe az RSS hírcsatornából származik.",
|
||||||
"MessageOr": "vagy",
|
"MessageOr": "vagy",
|
||||||
@ -854,10 +835,8 @@
|
|||||||
"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. 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.",
|
||||||
"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",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Sorozat sorrend nem tartalmazhat szóközt",
|
|
||||||
"MessageServerCouldNotBeReached": "A szervert nem lehet elérni",
|
"MessageServerCouldNotBeReached": "A szervert nem lehet elérni",
|
||||||
"MessageSetChaptersFromTracksDescription": "Fejezetek beállítása minden egyes hangfájlt egy fejezetként használva, és a fejezet címét a hangfájl neveként",
|
"MessageSetChaptersFromTracksDescription": "Fejezetek beállítása minden egyes hangfájlt egy fejezetként használva, és a fejezet címét a hangfájl neveként",
|
||||||
"MessageShareExpirationWillBe": "A lejárat: <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "A lejárat: <strong>{0}</strong>",
|
||||||
@ -882,7 +861,6 @@
|
|||||||
"MessageTaskNoFilesToScan": "Nincs beolvasandó fájl",
|
"MessageTaskNoFilesToScan": "Nincs beolvasandó fájl",
|
||||||
"MessageTaskOpmlImport": "OPML import",
|
"MessageTaskOpmlImport": "OPML import",
|
||||||
"MessageTaskOpmlImportDescription": "Podcastok létrehozása {0} RSS hírcsatornából",
|
"MessageTaskOpmlImportDescription": "Podcastok létrehozása {0} RSS hírcsatornából",
|
||||||
"MessageTaskOpmlImportFeed": "OPML import hírcsatorna",
|
|
||||||
"MessageTaskOpmlImportFeedDescription": "RSS feed „{0}” importálása",
|
"MessageTaskOpmlImportFeedDescription": "RSS feed „{0}” importálása",
|
||||||
"MessageTaskOpmlImportFeedFailed": "Nem sikerült letölteni a podcast feedet",
|
"MessageTaskOpmlImportFeedFailed": "Nem sikerült letölteni a podcast feedet",
|
||||||
"MessageTaskOpmlImportFeedPodcastDescription": "„{0}” podcast létrehozása",
|
"MessageTaskOpmlImportFeedPodcastDescription": "„{0}” podcast létrehozása",
|
||||||
@ -891,7 +869,6 @@
|
|||||||
"MessageTaskOpmlImportFinished": "{0} podcast hozzáadva",
|
"MessageTaskOpmlImportFinished": "{0} podcast hozzáadva",
|
||||||
"MessageTaskOpmlParseFailed": "Az OPML fájl elemzése nem sikerült",
|
"MessageTaskOpmlParseFailed": "Az OPML fájl elemzése nem sikerült",
|
||||||
"MessageTaskOpmlParseFastFail": "Érvénytelen OPML fájl: <opml> tag nem található VAGY nem találtak <outline> taget",
|
"MessageTaskOpmlParseFastFail": "Érvénytelen OPML fájl: <opml> tag nem található VAGY nem találtak <outline> taget",
|
||||||
"MessageTaskOpmlParseNoneFound": "Nem található feed az OPML fájlban",
|
|
||||||
"MessageTaskScanItemsAdded": "{0} hozzáadva",
|
"MessageTaskScanItemsAdded": "{0} hozzáadva",
|
||||||
"MessageTaskScanItemsMissing": "{0} hiányzik",
|
"MessageTaskScanItemsMissing": "{0} hiányzik",
|
||||||
"MessageTaskScanItemsUpdated": "{0} frissítve",
|
"MessageTaskScanItemsUpdated": "{0} frissítve",
|
||||||
@ -919,8 +896,6 @@
|
|||||||
"NotificationOnBackupCompletedDescription": "A biztonsági mentés befejezésekor aktiválódik",
|
"NotificationOnBackupCompletedDescription": "A biztonsági mentés befejezésekor aktiválódik",
|
||||||
"NotificationOnBackupFailedDescription": "A biztonsági mentés sikertelensége esetén aktiválódik",
|
"NotificationOnBackupFailedDescription": "A biztonsági mentés sikertelensége esetén aktiválódik",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Egy podcast epizód automatikus letöltésekor aktiválódik",
|
"NotificationOnEpisodeDownloadedDescription": "Egy podcast epizód automatikus letöltésekor aktiválódik",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Akkor lép működésbe, ha az automatikus epizódletöltés a túl sok sikertelen próbálkozás miatt letiltásra kerül",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Akkor aktiválódik, ha az RSS feed kérés sikertelen az automatikus epizódletöltésnél",
|
|
||||||
"NotificationOnTestDescription": "Esemény az értesítési rendszer teszteléséhez",
|
"NotificationOnTestDescription": "Esemény az értesítési rendszer teszteléséhez",
|
||||||
"PlaceholderNewCollection": "Új gyűjtemény neve",
|
"PlaceholderNewCollection": "Új gyűjtemény neve",
|
||||||
"PlaceholderNewFolderPath": "Új mappa útvonala",
|
"PlaceholderNewFolderPath": "Új mappa útvonala",
|
||||||
@ -965,11 +940,8 @@
|
|||||||
"ToastBackupRestoreFailed": "A biztonsági mentés visszaállítása sikertelen",
|
"ToastBackupRestoreFailed": "A biztonsági mentés visszaállítása sikertelen",
|
||||||
"ToastBackupUploadFailed": "A biztonsági mentés feltöltése sikertelen",
|
"ToastBackupUploadFailed": "A biztonsági mentés feltöltése sikertelen",
|
||||||
"ToastBackupUploadSuccess": "Biztonsági mentés feltöltve",
|
"ToastBackupUploadSuccess": "Biztonsági mentés feltöltve",
|
||||||
"ToastBatchApplyDetailsToItemsSuccess": "Tételekre alkalmazott részletek",
|
|
||||||
"ToastBatchDeleteFailed": "A tömeges törlés nem sikerült",
|
"ToastBatchDeleteFailed": "A tömeges törlés nem sikerült",
|
||||||
"ToastBatchDeleteSuccess": "Sikeres tömeges törlés",
|
"ToastBatchDeleteSuccess": "Sikeres tömeges törlés",
|
||||||
"ToastBatchQuickMatchFailed": "Tömeges Gyors Egyeztetés sikertelen!",
|
|
||||||
"ToastBatchQuickMatchStarted": "{0} könyv Tömeges Gyors Egyeztetése elkezdődött!",
|
|
||||||
"ToastBatchUpdateFailed": "Kötegelt frissítés sikertelen",
|
"ToastBatchUpdateFailed": "Kötegelt frissítés sikertelen",
|
||||||
"ToastBatchUpdateSuccess": "Kötegelt frissítés sikeres",
|
"ToastBatchUpdateSuccess": "Kötegelt frissítés sikeres",
|
||||||
"ToastBookmarkCreateFailed": "Könyvjelző létrehozása sikertelen",
|
"ToastBookmarkCreateFailed": "Könyvjelző létrehozása sikertelen",
|
||||||
@ -978,12 +950,9 @@
|
|||||||
"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",
|
||||||
"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.",
|
|
||||||
"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.",
|
|
||||||
"ToastChaptersMustHaveTitles": "A fejezeteknek címekkel kell rendelkezniük",
|
"ToastChaptersMustHaveTitles": "A fejezeteknek címekkel kell rendelkezniük",
|
||||||
"ToastChaptersRemoved": "Fejezetek eltávolítva",
|
"ToastChaptersRemoved": "Fejezetek eltávolítva",
|
||||||
"ToastChaptersUpdated": "Fejezetek frissítve",
|
"ToastChaptersUpdated": "Fejezetek frissítve",
|
||||||
"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",
|
||||||
"ToastCoverUpdateFailed": "A borító frissítése nem sikerült",
|
"ToastCoverUpdateFailed": "A borító frissítése nem sikerült",
|
||||||
@ -998,7 +967,6 @@
|
|||||||
"ToastEncodeCancelFailed": "A kódolás törlése sikertelen volt",
|
"ToastEncodeCancelFailed": "A kódolás törlése sikertelen volt",
|
||||||
"ToastEncodeCancelSucces": "Kódolás törölve",
|
"ToastEncodeCancelSucces": "Kódolás törölve",
|
||||||
"ToastEpisodeDownloadQueueClearFailed": "Nem sikerült törölni a várólistát",
|
"ToastEpisodeDownloadQueueClearFailed": "Nem sikerült törölni a várólistát",
|
||||||
"ToastEpisodeDownloadQueueClearSuccess": "Epizód letöltési várólista törölve",
|
|
||||||
"ToastEpisodeUpdateSuccess": "{0} epizód frissítve",
|
"ToastEpisodeUpdateSuccess": "{0} epizód frissítve",
|
||||||
"ToastErrorCannotShare": "Ezen az eszközön nem lehet natívan megosztani",
|
"ToastErrorCannotShare": "Ezen az eszközön nem lehet natívan megosztani",
|
||||||
"ToastFailedToLoadData": "Sikertelen adatbetöltés",
|
"ToastFailedToLoadData": "Sikertelen adatbetöltés",
|
||||||
@ -1006,7 +974,6 @@
|
|||||||
"ToastFailedToShare": "Nem sikerült megosztani",
|
"ToastFailedToShare": "Nem sikerült megosztani",
|
||||||
"ToastFailedToUpdate": "Nem sikerült frissíteni",
|
"ToastFailedToUpdate": "Nem sikerült frissíteni",
|
||||||
"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",
|
|
||||||
"ToastInvalidUrl": "Érvénytelen URL",
|
"ToastInvalidUrl": "Érvénytelen URL",
|
||||||
"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",
|
||||||
@ -1044,11 +1011,8 @@
|
|||||||
"ToastNoUpdatesNecessary": "Nincs szükség frissítésre",
|
"ToastNoUpdatesNecessary": "Nincs szükség frissítésre",
|
||||||
"ToastNotificationCreateFailed": "Értesítés létrehozása sikertelen",
|
"ToastNotificationCreateFailed": "Értesítés létrehozása sikertelen",
|
||||||
"ToastNotificationDeleteFailed": "Értesítés törlése sikertelen",
|
"ToastNotificationDeleteFailed": "Értesítés törlése sikertelen",
|
||||||
"ToastNotificationFailedMaximum": "A sikertelen kísérletek maximális száma >= 0 kell, hogy legyen",
|
|
||||||
"ToastNotificationQueueMaximum": "Az értesítési sor maximális száma >= 0 kell, hogy legyen",
|
|
||||||
"ToastNotificationSettingsUpdateSuccess": "Értesítési beállítások frissítve",
|
"ToastNotificationSettingsUpdateSuccess": "Értesítési beállítások frissítve",
|
||||||
"ToastNotificationTestTriggerFailed": "Nem sikerült a tesztértesítést elindítani",
|
"ToastNotificationTestTriggerFailed": "Nem sikerült a tesztértesítést elindítani",
|
||||||
"ToastNotificationTestTriggerSuccess": "Kiváltott tesztértesítés",
|
|
||||||
"ToastNotificationUpdateSuccess": "Értesítés frissítve",
|
"ToastNotificationUpdateSuccess": "Értesítés frissítve",
|
||||||
"ToastPlaylistCreateFailed": "Lejátszási lista létrehozása sikertelen",
|
"ToastPlaylistCreateFailed": "Lejátszási lista létrehozása sikertelen",
|
||||||
"ToastPlaylistCreateSuccess": "Lejátszási lista létrehozva",
|
"ToastPlaylistCreateSuccess": "Lejátszási lista létrehozva",
|
||||||
@ -1056,7 +1020,6 @@
|
|||||||
"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",
|
||||||
"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",
|
||||||
"ToastProgressIsNotBeingSynced": "Az előrehaladás nem szinkronizálódik, a lejátszás újraindul",
|
"ToastProgressIsNotBeingSynced": "Az előrehaladás nem szinkronizálódik, a lejátszás újraindul",
|
||||||
@ -1069,18 +1032,10 @@
|
|||||||
"ToastRemoveFailed": "Sikertelen eltávolítás",
|
"ToastRemoveFailed": "Sikertelen eltávolítás",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Tétel eltávolítása a gyűjteményből sikertelen",
|
"ToastRemoveItemFromCollectionFailed": "Tétel eltávolítása a gyűjteményből sikertelen",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "Tétel eltávolítva a gyűjteményből",
|
"ToastRemoveItemFromCollectionSuccess": "Tétel eltávolítva a gyűjteményből",
|
||||||
"ToastRemoveItemsWithIssuesFailed": "Nem sikerült eltávolítani a hibás könyvtárelemeket",
|
|
||||||
"ToastRemoveItemsWithIssuesSuccess": "Hibás könyvtárelemek eltávolítva",
|
|
||||||
"ToastRenameFailed": "Sikertelen átnevezés",
|
"ToastRenameFailed": "Sikertelen átnevezés",
|
||||||
"ToastRescanFailed": "Sikertelen újrakeresés a következőnél: {0}",
|
|
||||||
"ToastRescanRemoved": "A teljes újrabeolvasás befejezve, elem eltávolítva",
|
|
||||||
"ToastRescanUpToDate": "A teljes újrabeolvasás befejezve, elem naprakész volt",
|
|
||||||
"ToastRescanUpdated": "A teljes újrabeolvasás befejezve, elem frissítve",
|
|
||||||
"ToastScanFailed": "Nem sikerült beolvasni a könyvtárelemet",
|
|
||||||
"ToastSelectAtLeastOneUser": "Válasszon legalább egy felhasználót",
|
"ToastSelectAtLeastOneUser": "Válasszon legalább egy felhasználót",
|
||||||
"ToastSendEbookToDeviceFailed": "E-könyv küldése az eszközre sikertelen",
|
"ToastSendEbookToDeviceFailed": "E-könyv küldése az eszközre sikertelen",
|
||||||
"ToastSendEbookToDeviceSuccess": "E-könyv elküldve az eszközre \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "E-könyv elküldve az eszközre \"{0}\"",
|
||||||
"ToastSeriesSubmitFailedSameName": "Nem lehet két azonos nevű sorozatot hozzáadni",
|
|
||||||
"ToastSeriesUpdateFailed": "Sorozat frissítése sikertelen",
|
"ToastSeriesUpdateFailed": "Sorozat frissítése sikertelen",
|
||||||
"ToastSeriesUpdateSuccess": "Sorozat frissítése sikeres",
|
"ToastSeriesUpdateSuccess": "Sorozat frissítése sikeres",
|
||||||
"ToastServerSettingsUpdateSuccess": "Szerver beállítások frissítve",
|
"ToastServerSettingsUpdateSuccess": "Szerver beállítások frissítve",
|
||||||
@ -1088,8 +1043,6 @@
|
|||||||
"ToastSessionDeleteFailed": "Munkamenet törlése sikertelen",
|
"ToastSessionDeleteFailed": "Munkamenet törlése sikertelen",
|
||||||
"ToastSessionDeleteSuccess": "Munkamenet törölve",
|
"ToastSessionDeleteSuccess": "Munkamenet törölve",
|
||||||
"ToastSleepTimerDone": "Alvásidőzítő kész... zZzzZZz",
|
"ToastSleepTimerDone": "Alvásidőzítő kész... zZzzZZz",
|
||||||
"ToastSlugMustChange": "A Slug érvénytelen karaktereket tartalmaz",
|
|
||||||
"ToastSlugRequired": "Slug szükséges",
|
|
||||||
"ToastSocketConnected": "Socket csatlakoztatva",
|
"ToastSocketConnected": "Socket csatlakoztatva",
|
||||||
"ToastSocketDisconnected": "Socket lecsatlakoztatva",
|
"ToastSocketDisconnected": "Socket lecsatlakoztatva",
|
||||||
"ToastSocketFailedToConnect": "A Socket csatlakoztatása sikertelen",
|
"ToastSocketFailedToConnect": "A Socket csatlakoztatása sikertelen",
|
||||||
@ -1097,14 +1050,9 @@
|
|||||||
"ToastSortingPrefixesUpdateSuccess": "Rendezési előtagok frissítése ({0} elem)",
|
"ToastSortingPrefixesUpdateSuccess": "Rendezési előtagok frissítése ({0} elem)",
|
||||||
"ToastTitleRequired": "A cím kötelező",
|
"ToastTitleRequired": "A cím kötelező",
|
||||||
"ToastUnknownError": "Ismeretlen hiba",
|
"ToastUnknownError": "Ismeretlen hiba",
|
||||||
"ToastUnlinkOpenIdFailed": "Nem sikerült leválasztani a felhasználót az OpenID-ről",
|
|
||||||
"ToastUnlinkOpenIdSuccess": "Felhasználó leválasztva az OpenID-ről",
|
|
||||||
"ToastUploaderFilepathExistsError": "A \"{0}\" fájl elérési útja már létezik a szerveren",
|
|
||||||
"ToastUploaderItemExistsInSubdirectoryError": "A „{0}” elem a feltöltési útvonal egy alkönyvtárát használja.",
|
|
||||||
"ToastUserDeleteFailed": "Felhasználó törlése sikertelen",
|
"ToastUserDeleteFailed": "Felhasználó törlése sikertelen",
|
||||||
"ToastUserDeleteSuccess": "Felhasználó törölve",
|
"ToastUserDeleteSuccess": "Felhasználó törölve",
|
||||||
"ToastUserPasswordChangeSuccess": "Jelszó sikeresen megváltoztatva",
|
"ToastUserPasswordChangeSuccess": "Jelszó sikeresen megváltoztatva",
|
||||||
"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"
|
||||||
}
|
}
|
||||||
|
@ -1,27 +1,25 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Aggiungi",
|
"ButtonAdd": "Aggiungi",
|
||||||
"ButtonAddApiKey": "Aggiungi chiave API",
|
|
||||||
"ButtonAddChapters": "Aggiungi Capitoli",
|
"ButtonAddChapters": "Aggiungi Capitoli",
|
||||||
"ButtonAddDevice": "Aggiungi Dispositivo",
|
"ButtonAddDevice": "Aggiungi Dispositivo",
|
||||||
"ButtonAddLibrary": "Aggiungi Libreria",
|
"ButtonAddLibrary": "Aggiungi Libreria",
|
||||||
"ButtonAddPodcasts": "Aggiungi Podcast",
|
"ButtonAddPodcasts": "Aggiungi Podcast",
|
||||||
"ButtonAddUser": "Aggiungi Utente",
|
"ButtonAddUser": "Aggiungi User",
|
||||||
"ButtonAddYourFirstLibrary": "Aggiungi la tua prima libreria",
|
"ButtonAddYourFirstLibrary": "Aggiungi la tua prima libreria",
|
||||||
"ButtonApply": "Applica",
|
"ButtonApply": "Applica",
|
||||||
"ButtonApplyChapters": "Applica Capitoli",
|
"ButtonApplyChapters": "Applica",
|
||||||
"ButtonAuthors": "Autori",
|
"ButtonAuthors": "Autori",
|
||||||
"ButtonBack": "Indietro",
|
"ButtonBack": "Indietro",
|
||||||
"ButtonBatchEditPopulateFromExisting": "Popola da esistente",
|
"ButtonBatchEditPopulateFromExisting": "Popola da esistente",
|
||||||
"ButtonBatchEditPopulateMapDetails": "Inserisci i dettagli della mappa",
|
"ButtonBatchEditPopulateMapDetails": "Inserisci i dettagli della mappa",
|
||||||
"ButtonBrowseForFolder": "Sfoglia per Cartella",
|
"ButtonBrowseForFolder": "Per Cartella",
|
||||||
"ButtonCancel": "Annulla",
|
"ButtonCancel": "Cancella",
|
||||||
"ButtonCancelEncode": "Ferma la codifica",
|
"ButtonCancelEncode": "Ferma la codifica",
|
||||||
"ButtonChangeRootPassword": "Cambia la Password di root",
|
"ButtonChangeRootPassword": "Cambia la Password di root",
|
||||||
"ButtonCheckAndDownloadNewEpisodes": "Controlla & scarica i nuovi episodi",
|
"ButtonCheckAndDownloadNewEpisodes": "Controlla & scarica i nuovi episodi",
|
||||||
"ButtonChooseAFolder": "Seleziona la Cartella",
|
"ButtonChooseAFolder": "Seleziona la Cartella",
|
||||||
"ButtonChooseFiles": "Seleziona i File",
|
"ButtonChooseFiles": "Seleziona i File",
|
||||||
"ButtonClearFilter": "Elimina filtri",
|
"ButtonClearFilter": "Elimina filtri",
|
||||||
"ButtonClose": "Chiudi",
|
|
||||||
"ButtonCloseFeed": "Chiudi flusso",
|
"ButtonCloseFeed": "Chiudi flusso",
|
||||||
"ButtonCloseSession": "Chiudi la sessione aperta",
|
"ButtonCloseSession": "Chiudi la sessione aperta",
|
||||||
"ButtonCollections": "Raccolte",
|
"ButtonCollections": "Raccolte",
|
||||||
@ -283,8 +281,8 @@
|
|||||||
"LabelCollections": "Raccolte",
|
"LabelCollections": "Raccolte",
|
||||||
"LabelComplete": "Completo",
|
"LabelComplete": "Completo",
|
||||||
"LabelConfirmPassword": "Conferma Password",
|
"LabelConfirmPassword": "Conferma Password",
|
||||||
"LabelContinueListening": "Continua l'ascolto",
|
"LabelContinueListening": "Continua ad Ascoltare",
|
||||||
"LabelContinueReading": "Continua la lettura",
|
"LabelContinueReading": "Continua la Lettura",
|
||||||
"LabelContinueSeries": "Continua serie",
|
"LabelContinueSeries": "Continua serie",
|
||||||
"LabelCover": "Copertina",
|
"LabelCover": "Copertina",
|
||||||
"LabelCoverImageURL": "Indirizzo della cover URL",
|
"LabelCoverImageURL": "Indirizzo della cover URL",
|
||||||
@ -516,7 +514,7 @@
|
|||||||
"LabelPublishers": "Editori",
|
"LabelPublishers": "Editori",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "E-mail del proprietario personalizzato",
|
"LabelRSSFeedCustomOwnerEmail": "E-mail del proprietario personalizzato",
|
||||||
"LabelRSSFeedCustomOwnerName": "Nome del proprietario personalizzato",
|
"LabelRSSFeedCustomOwnerName": "Nome del proprietario personalizzato",
|
||||||
"LabelRSSFeedOpen": "Feed RSS aperto",
|
"LabelRSSFeedOpen": "Flusso RSS aperto",
|
||||||
"LabelRSSFeedPreventIndexing": "Impedisci l'indicizzazione",
|
"LabelRSSFeedPreventIndexing": "Impedisci l'indicizzazione",
|
||||||
"LabelRSSFeedSlug": "Parole chiave del flusso RSS",
|
"LabelRSSFeedSlug": "Parole chiave del flusso RSS",
|
||||||
"LabelRSSFeedURL": "URL del flusso RSS",
|
"LabelRSSFeedURL": "URL del flusso RSS",
|
||||||
@ -710,7 +708,6 @@
|
|||||||
"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.",
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Riavvia il tuo server dopo aver salvato per applicare le modifiche OIDC.",
|
|
||||||
"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.",
|
||||||
@ -858,7 +855,6 @@
|
|||||||
"MessageScheduleRunEveryWeekdayAtTime": "Esegui ogni {0} alle {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Esegui ogni {0} alle {1}",
|
||||||
"MessageSearchResultsFor": "cerca risultati per",
|
"MessageSearchResultsFor": "cerca risultati per",
|
||||||
"MessageSelected": "{0} selezionati",
|
"MessageSelected": "{0} selezionati",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "La sequenza della serie non può contenere spazi",
|
|
||||||
"MessageServerCouldNotBeReached": "Impossibile raggiungere il server",
|
"MessageServerCouldNotBeReached": "Impossibile raggiungere il server",
|
||||||
"MessageSetChaptersFromTracksDescription": "Impostare i capitoli utilizzando ciascun file audio come capitolo e il titolo del capitolo come nome del file audio",
|
"MessageSetChaptersFromTracksDescription": "Impostare i capitoli utilizzando ciascun file audio come capitolo e il titolo del capitolo come nome del file audio",
|
||||||
"MessageShareExpirationWillBe": "Scadrà tra <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Scadrà tra <strong>{0}</strong>",
|
||||||
@ -920,8 +916,6 @@
|
|||||||
"NotificationOnBackupCompletedDescription": "Attivato al completamento di un backup",
|
"NotificationOnBackupCompletedDescription": "Attivato al completamento di un backup",
|
||||||
"NotificationOnBackupFailedDescription": "Attivato quando un backup fallisce",
|
"NotificationOnBackupFailedDescription": "Attivato quando un backup fallisce",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Attivato quando un episodio di podcast viene scaricato automaticamente",
|
"NotificationOnEpisodeDownloadedDescription": "Attivato quando un episodio di podcast viene scaricato automaticamente",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Attivato quando i download automatici degli episodi vengono disabilitati a causa di troppi tentativi falliti",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Attivato quando la richiesta del feed RSS per il download automatico di un episodio fallisce",
|
|
||||||
"NotificationOnTestDescription": "test il sistema di notifica",
|
"NotificationOnTestDescription": "test il sistema di notifica",
|
||||||
"PlaceholderNewCollection": "Nome Nuova Raccolta",
|
"PlaceholderNewCollection": "Nome Nuova Raccolta",
|
||||||
"PlaceholderNewFolderPath": "Nuovo Percorso Cartella",
|
"PlaceholderNewFolderPath": "Nuovo Percorso Cartella",
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
"ButtonCloseSession": "Sluit Sessie",
|
"ButtonCloseSession": "Sluit Sessie",
|
||||||
"ButtonCollections": "Collecties",
|
"ButtonCollections": "Collecties",
|
||||||
"ButtonConfigureScanner": "Configureer scanner",
|
"ButtonConfigureScanner": "Configureer scanner",
|
||||||
"ButtonCreate": "Aanmaken",
|
"ButtonCreate": "Creëer",
|
||||||
"ButtonCreateBackup": "Maak back-up",
|
"ButtonCreateBackup": "Maak back-up",
|
||||||
"ButtonDelete": "Verwijder",
|
"ButtonDelete": "Verwijder",
|
||||||
"ButtonDownloadQueue": "Wachtrij",
|
"ButtonDownloadQueue": "Wachtrij",
|
||||||
@ -43,9 +43,9 @@
|
|||||||
"ButtonJumpForward": "Spring vooruit",
|
"ButtonJumpForward": "Spring vooruit",
|
||||||
"ButtonLatest": "Meest recent",
|
"ButtonLatest": "Meest recent",
|
||||||
"ButtonLibrary": "Bibliotheek",
|
"ButtonLibrary": "Bibliotheek",
|
||||||
"ButtonLogout": "Uitloggen",
|
"ButtonLogout": "Log uit",
|
||||||
"ButtonLookup": "Zoeken",
|
"ButtonLookup": "Zoeken",
|
||||||
"ButtonManageTracks": "Tracks beheren",
|
"ButtonManageTracks": "Beheer tracks",
|
||||||
"ButtonMapChapterTitles": "Hoofdstuktitels mappen",
|
"ButtonMapChapterTitles": "Hoofdstuktitels mappen",
|
||||||
"ButtonMatchAllAuthors": "Alle auteurs matchen",
|
"ButtonMatchAllAuthors": "Alle auteurs matchen",
|
||||||
"ButtonMatchBooks": "Alle boeken matchen",
|
"ButtonMatchBooks": "Alle boeken matchen",
|
||||||
@ -72,7 +72,7 @@
|
|||||||
"ButtonQuickEmbedMetadata": "Snel Metadata Insluiten",
|
"ButtonQuickEmbedMetadata": "Snel Metadata Insluiten",
|
||||||
"ButtonQuickMatch": "Snelle match",
|
"ButtonQuickMatch": "Snelle match",
|
||||||
"ButtonReScan": "Nieuwe scan",
|
"ButtonReScan": "Nieuwe scan",
|
||||||
"ButtonRead": "Lezen",
|
"ButtonRead": "Lees",
|
||||||
"ButtonReadLess": "Lees minder",
|
"ButtonReadLess": "Lees minder",
|
||||||
"ButtonReadMore": "Lees meer",
|
"ButtonReadMore": "Lees meer",
|
||||||
"ButtonRefresh": "Verversen",
|
"ButtonRefresh": "Verversen",
|
||||||
@ -107,7 +107,7 @@
|
|||||||
"ButtonUnlinkOpenId": "OpenID Ontkoppelen",
|
"ButtonUnlinkOpenId": "OpenID Ontkoppelen",
|
||||||
"ButtonUpload": "Upload",
|
"ButtonUpload": "Upload",
|
||||||
"ButtonUploadBackup": "Upload back-up",
|
"ButtonUploadBackup": "Upload back-up",
|
||||||
"ButtonUploadCover": "Omslag uploaden",
|
"ButtonUploadCover": "Upload cover",
|
||||||
"ButtonUploadOPMLFile": "Upload OPML-bestand",
|
"ButtonUploadOPMLFile": "Upload OPML-bestand",
|
||||||
"ButtonUserDelete": "Verwijder gebruiker {0}",
|
"ButtonUserDelete": "Verwijder gebruiker {0}",
|
||||||
"ButtonUserEdit": "Wijzig gebruiker {0}",
|
"ButtonUserEdit": "Wijzig gebruiker {0}",
|
||||||
@ -177,8 +177,7 @@
|
|||||||
"HeaderPlaylist": "Afspeellijst",
|
"HeaderPlaylist": "Afspeellijst",
|
||||||
"HeaderPlaylistItems": "Onderdelen in afspeellijst",
|
"HeaderPlaylistItems": "Onderdelen in afspeellijst",
|
||||||
"HeaderPodcastsToAdd": "Toe te voegen podcasts",
|
"HeaderPodcastsToAdd": "Toe te voegen podcasts",
|
||||||
"HeaderPresets": "Voorinstellingen",
|
"HeaderPreviewCover": "Preview cover",
|
||||||
"HeaderPreviewCover": "Voorbeeld omslag",
|
|
||||||
"HeaderRSSFeedGeneral": "RSS-details",
|
"HeaderRSSFeedGeneral": "RSS-details",
|
||||||
"HeaderRSSFeedIsOpen": "RSS-feed is open",
|
"HeaderRSSFeedIsOpen": "RSS-feed is open",
|
||||||
"HeaderRSSFeeds": "RSS-feeds",
|
"HeaderRSSFeeds": "RSS-feeds",
|
||||||
@ -285,7 +284,7 @@
|
|||||||
"LabelContinueReading": "Verder lezen",
|
"LabelContinueReading": "Verder lezen",
|
||||||
"LabelContinueSeries": "Doorgaan met Serie",
|
"LabelContinueSeries": "Doorgaan met Serie",
|
||||||
"LabelCover": "Omslag",
|
"LabelCover": "Omslag",
|
||||||
"LabelCoverImageURL": "Omslagafbeelding-URL",
|
"LabelCoverImageURL": "Coverafbeelding URL",
|
||||||
"LabelCoverProvider": "Omslag bron",
|
"LabelCoverProvider": "Omslag bron",
|
||||||
"LabelCreatedAt": "Gecreëerd op",
|
"LabelCreatedAt": "Gecreëerd op",
|
||||||
"LabelCronExpression": "Cron-uitdrukking",
|
"LabelCronExpression": "Cron-uitdrukking",
|
||||||
@ -322,7 +321,7 @@
|
|||||||
"LabelEmailSettingsSecure": "Veilig",
|
"LabelEmailSettingsSecure": "Veilig",
|
||||||
"LabelEmailSettingsSecureHelp": "Als 'waar', dan gebruikt de verbinding TLS om met de server te verbinden. Als 'onwaar', dan wordt TLS gebruikt als de server de STARTTLS-extensie ondersteunt. In de meeste gevallen kies je voor 'waar' verbindt met poort 465. Voo poort 587 of 25, laat op 'onwaar'. (van nodemailer.com/smtp/#authentication)",
|
"LabelEmailSettingsSecureHelp": "Als 'waar', dan gebruikt de verbinding TLS om met de server te verbinden. Als 'onwaar', dan wordt TLS gebruikt als de server de STARTTLS-extensie ondersteunt. In de meeste gevallen kies je voor 'waar' verbindt met poort 465. Voo poort 587 of 25, laat op 'onwaar'. (van nodemailer.com/smtp/#authentication)",
|
||||||
"LabelEmailSettingsTestAddress": "Test-adres",
|
"LabelEmailSettingsTestAddress": "Test-adres",
|
||||||
"LabelEmbeddedCover": "Omslag in bestand",
|
"LabelEmbeddedCover": "Ingesloten cover",
|
||||||
"LabelEnable": "Inschakelen",
|
"LabelEnable": "Inschakelen",
|
||||||
"LabelEncodingBackupLocation": "Er wordt een back-up van uw originele audiobestanden opgeslagen in:",
|
"LabelEncodingBackupLocation": "Er wordt een back-up van uw originele audiobestanden opgeslagen in:",
|
||||||
"LabelEncodingChaptersNotEmbedded": "Hoofdstukken zijn niet ingesloten in audioboeken met meerdere sporen.",
|
"LabelEncodingChaptersNotEmbedded": "Hoofdstukken zijn niet ingesloten in audioboeken met meerdere sporen.",
|
||||||
@ -331,7 +330,7 @@
|
|||||||
"LabelEncodingInfoEmbedded": "Metagegevens worden ingesloten in de audiotracks in uw audioboekmap.",
|
"LabelEncodingInfoEmbedded": "Metagegevens worden ingesloten in de audiotracks in uw audioboekmap.",
|
||||||
"LabelEncodingStartedNavigation": "Eenmaal de taak is gestart kan u weg navigeren van deze pagina.",
|
"LabelEncodingStartedNavigation": "Eenmaal de taak is gestart kan u weg navigeren van deze pagina.",
|
||||||
"LabelEncodingTimeWarning": "Encoding kan tot 30 minuten duren.",
|
"LabelEncodingTimeWarning": "Encoding kan tot 30 minuten duren.",
|
||||||
"LabelEncodingWarningAdvancedSettings": "Waarschuwing: pas deze instellingen niet aan tenzij u bekend bent met de coderingsopties van ffmpeg.",
|
"LabelEncodingWarningAdvancedSettings": "Waarschuwing: update deze instellingen niet tenzij u bekend bent met de coderingsopties van ffmpeg.",
|
||||||
"LabelEncodingWatcherDisabled": "Als u de watcher hebt uitgeschakeld, moet u het audioboek daarna opnieuw scannen.",
|
"LabelEncodingWatcherDisabled": "Als u de watcher hebt uitgeschakeld, moet u het audioboek daarna opnieuw scannen.",
|
||||||
"LabelEnd": "Einde",
|
"LabelEnd": "Einde",
|
||||||
"LabelEndOfChapter": "Einde van het Hoofdstuk",
|
"LabelEndOfChapter": "Einde van het Hoofdstuk",
|
||||||
@ -373,7 +372,7 @@
|
|||||||
"LabelFull": "Vol",
|
"LabelFull": "Vol",
|
||||||
"LabelGenre": "Genre",
|
"LabelGenre": "Genre",
|
||||||
"LabelGenres": "Genres",
|
"LabelGenres": "Genres",
|
||||||
"LabelHardDeleteFile": "Bestand permanent verwijderen",
|
"LabelHardDeleteFile": "Hard-delete bestand",
|
||||||
"LabelHasEbook": "Heeft Ebook",
|
"LabelHasEbook": "Heeft Ebook",
|
||||||
"LabelHasSupplementaryEbook": "Heeft aanvullend Ebook",
|
"LabelHasSupplementaryEbook": "Heeft aanvullend Ebook",
|
||||||
"LabelHideSubtitles": "Ondertitels Verstoppen",
|
"LabelHideSubtitles": "Ondertitels Verstoppen",
|
||||||
@ -395,7 +394,6 @@
|
|||||||
"LabelIntervalEvery6Hours": "Iedere 6 uur",
|
"LabelIntervalEvery6Hours": "Iedere 6 uur",
|
||||||
"LabelIntervalEveryDay": "Iedere dag",
|
"LabelIntervalEveryDay": "Iedere dag",
|
||||||
"LabelIntervalEveryHour": "Ieder uur",
|
"LabelIntervalEveryHour": "Ieder uur",
|
||||||
"LabelIntervalEveryMinute": "Elke minuut",
|
|
||||||
"LabelInvert": "Omdraaien",
|
"LabelInvert": "Omdraaien",
|
||||||
"LabelItem": "Onderdeel",
|
"LabelItem": "Onderdeel",
|
||||||
"LabelJumpBackwardAmount": "Terugspoelen hoeveelheid",
|
"LabelJumpBackwardAmount": "Terugspoelen hoeveelheid",
|
||||||
@ -407,7 +405,7 @@
|
|||||||
"LabelLastBookUpdated": "Laatst bijgewerkte boek",
|
"LabelLastBookUpdated": "Laatst bijgewerkte boek",
|
||||||
"LabelLastSeen": "Laatst gezien",
|
"LabelLastSeen": "Laatst gezien",
|
||||||
"LabelLastTime": "Laatste keer",
|
"LabelLastTime": "Laatste keer",
|
||||||
"LabelLastUpdate": "Laatste wijziging",
|
"LabelLastUpdate": "Laatste update",
|
||||||
"LabelLayout": "Layout",
|
"LabelLayout": "Layout",
|
||||||
"LabelLayoutSinglePage": "Enkele pagina",
|
"LabelLayoutSinglePage": "Enkele pagina",
|
||||||
"LabelLayoutSplitPage": "Gesplitste pagina",
|
"LabelLayoutSplitPage": "Gesplitste pagina",
|
||||||
@ -426,7 +424,7 @@
|
|||||||
"LabelLookForNewEpisodesAfterDate": "Zoek naar nieuwe afleveringen na deze datum",
|
"LabelLookForNewEpisodesAfterDate": "Zoek naar nieuwe afleveringen na deze datum",
|
||||||
"LabelLowestPriority": "Laagste Prioriteit",
|
"LabelLowestPriority": "Laagste Prioriteit",
|
||||||
"LabelMatchExistingUsersBy": "Bestaande gebruikers matchen op",
|
"LabelMatchExistingUsersBy": "Bestaande gebruikers matchen op",
|
||||||
"LabelMatchExistingUsersByDescription": "Wordt gebruikt om bestaande gebruikers te verbinden. Zodra ze verbonden zijn, worden gebruikers gekoppeld aan een unieke id van uw SSO-provider",
|
"LabelMatchExistingUsersByDescription": "Wordt gebruikt om bestaande gebruikers te verbinden. Zodra ze verbonden zijn, worden gebruikers gekoppeld aan een unieke id van uw SSO-provider.",
|
||||||
"LabelMaxEpisodesToDownload": "Maximale # afleveringen om te downloaden. Gebruik 0 voor ongelimiteerd.",
|
"LabelMaxEpisodesToDownload": "Maximale # afleveringen om te downloaden. Gebruik 0 voor ongelimiteerd.",
|
||||||
"LabelMaxEpisodesToDownloadPerCheck": "Maximale # nieuwe afleveringen om te downloaden per check",
|
"LabelMaxEpisodesToDownloadPerCheck": "Maximale # nieuwe afleveringen om te downloaden per check",
|
||||||
"LabelMaxEpisodesToKeep": "Maximale # afleveringen om te houden",
|
"LabelMaxEpisodesToKeep": "Maximale # afleveringen om te houden",
|
||||||
@ -514,7 +512,7 @@
|
|||||||
"LabelPublishers": "Uitgevers",
|
"LabelPublishers": "Uitgevers",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Aangepast e-mailadres eigenaar",
|
"LabelRSSFeedCustomOwnerEmail": "Aangepast e-mailadres eigenaar",
|
||||||
"LabelRSSFeedCustomOwnerName": "Aangepaste naam eigenaar",
|
"LabelRSSFeedCustomOwnerName": "Aangepaste naam eigenaar",
|
||||||
"LabelRSSFeedOpen": "RSS Feed Open",
|
"LabelRSSFeedOpen": "RSS-feed open",
|
||||||
"LabelRSSFeedPreventIndexing": "Voorkom indexering",
|
"LabelRSSFeedPreventIndexing": "Voorkom indexering",
|
||||||
"LabelRSSFeedSlug": "RSS-feed slug",
|
"LabelRSSFeedSlug": "RSS-feed slug",
|
||||||
"LabelRSSFeedURL": "RSS-feed URL",
|
"LabelRSSFeedURL": "RSS-feed URL",
|
||||||
@ -531,8 +529,7 @@
|
|||||||
"LabelReleaseDate": "Verschijningsdatum",
|
"LabelReleaseDate": "Verschijningsdatum",
|
||||||
"LabelRemoveAllMetadataAbs": "Verwijder alle metadata.abs bestanden",
|
"LabelRemoveAllMetadataAbs": "Verwijder alle metadata.abs bestanden",
|
||||||
"LabelRemoveAllMetadataJson": "Verwijder alle metadata.json bestanden",
|
"LabelRemoveAllMetadataJson": "Verwijder alle metadata.json bestanden",
|
||||||
"LabelRemoveAudibleBranding": "Verwijder Audible intro en outro uit hoofdstukken",
|
"LabelRemoveCover": "Verwijder cover",
|
||||||
"LabelRemoveCover": "Omslag verwijderen",
|
|
||||||
"LabelRemoveMetadataFile": "Verwijder metadata bestanden in bibliotheek item folders",
|
"LabelRemoveMetadataFile": "Verwijder metadata bestanden in bibliotheek item folders",
|
||||||
"LabelRemoveMetadataFileHelp": "Verwijder alle metadata.json en metadata.abs bestanden in uw {0} folders.",
|
"LabelRemoveMetadataFileHelp": "Verwijder alle metadata.json en metadata.abs bestanden in uw {0} folders.",
|
||||||
"LabelRowsPerPage": "Rijen per pagina",
|
"LabelRowsPerPage": "Rijen per pagina",
|
||||||
@ -560,16 +557,14 @@
|
|||||||
"LabelSettingsAudiobooksOnlyHelp": "Deze instelling inschakelen zorgt ervoor dat ebook-bestanden genegeerd worden tenzij ze in een audiobook-map staan, in welk geval ze worden ingesteld als supplementaire ebooks",
|
"LabelSettingsAudiobooksOnlyHelp": "Deze instelling inschakelen zorgt ervoor dat ebook-bestanden genegeerd worden tenzij ze in een audiobook-map staan, in welk geval ze worden ingesteld als supplementaire ebooks",
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeumorphisch design met houten planken",
|
"LabelSettingsBookshelfViewHelp": "Skeumorphisch design met houten planken",
|
||||||
"LabelSettingsChromecastSupport": "Chromecast ondersteuning",
|
"LabelSettingsChromecastSupport": "Chromecast ondersteuning",
|
||||||
"LabelSettingsDateFormat": "Datumnotatie",
|
"LabelSettingsDateFormat": "Datum format",
|
||||||
"LabelSettingsEnableWatcher": "Bibliotheken automatisch scannen op wijzigingen",
|
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Bibliotheek automatisch scannen op wijzigingen",
|
|
||||||
"LabelSettingsEnableWatcherHelp": "Zorgt voor het automatisch toevoegen/bijwerken van onderdelen als bestandswijzigingen worden gedetecteerd. *Vereist herstarten van server",
|
"LabelSettingsEnableWatcherHelp": "Zorgt voor het automatisch toevoegen/bijwerken van onderdelen als bestandswijzigingen worden gedetecteerd. *Vereist herstarten van server",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Sta scripted content toe in epubs",
|
"LabelSettingsEpubsAllowScriptedContent": "Sta scripted content toe in epubs",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Sta toe dat epub-bestanden scripts uitvoeren. Het wordt aanbevolen om deze instelling uitgeschakeld te houden, tenzij u de bron van de epub-bestanden vertrouwt.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Sta toe dat epub-bestanden scripts uitvoeren. Het wordt aanbevolen om deze instelling uitgeschakeld te houden, tenzij u de bron van de epub-bestanden vertrouwt.",
|
||||||
"LabelSettingsExperimentalFeatures": "Experimentele functies",
|
"LabelSettingsExperimentalFeatures": "Experimentele functies",
|
||||||
"LabelSettingsExperimentalFeaturesHelp": "Functies in ontwikkeling die je feedback en testing kunnen gebruiken. Klik om de Github-discussie te openen.",
|
"LabelSettingsExperimentalFeaturesHelp": "Functies in ontwikkeling die je feedback en testing kunnen gebruiken. Klik om de Github-discussie te openen.",
|
||||||
"LabelSettingsFindCovers": "Omslagen zoeken",
|
"LabelSettingsFindCovers": "Zoek covers",
|
||||||
"LabelSettingsFindCoversHelp": "Als je audioboek geen omslag in het bestand of in de map heeft, zal de scanner automatisch proberen een omslag te vinden.<br>Opmerking: Dit kan de scantijd verlengen",
|
"LabelSettingsFindCoversHelp": "Als je audioboek geen ingesloten cover of cover in de map heeft, zal de scanner proberen een cover te vinden.<br>Opmerking: Dit zal de scan-duur verlengen",
|
||||||
"LabelSettingsHideSingleBookSeries": "Verberg series met een enkel boek",
|
"LabelSettingsHideSingleBookSeries": "Verberg series met een enkel boek",
|
||||||
"LabelSettingsHideSingleBookSeriesHelp": "Series die slechts een enkel boek bevatten worden verborgen op de seriespagina en de homepagina-planken.",
|
"LabelSettingsHideSingleBookSeriesHelp": "Series die slechts een enkel boek bevatten worden verborgen op de seriespagina en de homepagina-planken.",
|
||||||
"LabelSettingsHomePageBookshelfView": "Boekenplank-view voor homepagina",
|
"LabelSettingsHomePageBookshelfView": "Boekenplank-view voor homepagina",
|
||||||
@ -579,18 +574,18 @@
|
|||||||
"LabelSettingsLibraryMarkAsFinishedWhen": "Markeer media item wanneer voltooid",
|
"LabelSettingsLibraryMarkAsFinishedWhen": "Markeer media item wanneer voltooid",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Sla eedere boeken in Serie Verderzetten over",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Sla eedere boeken in Serie Verderzetten over",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "De Continue Series home page shelf toont het eerste boek dat nog niet is begonnen in series waarvan er minstens één is voltooid en er geen boeken in uitvoering zijn. Als u deze instelling inschakelt, wordt de serie voortgezet vanaf het boek dat het verst is voltooid in plaats van het eerste boek dat nog niet is begonnen.",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "De Continue Series home page shelf toont het eerste boek dat nog niet is begonnen in series waarvan er minstens één is voltooid en er geen boeken in uitvoering zijn. Als u deze instelling inschakelt, wordt de serie voortgezet vanaf het boek dat het verst is voltooid in plaats van het eerste boek dat nog niet is begonnen.",
|
||||||
"LabelSettingsParseSubtitles": "Subtitel afleiden uit foldernaam",
|
"LabelSettingsParseSubtitles": "Parseer subtitel",
|
||||||
"LabelSettingsParseSubtitlesHelp": "Haal subtitels uit mapnaam van audioboek.<br>Subtitel moet gescheiden zijn met \" - \"<br>b.v. \"Boektitel - Een Subtitel Hier\" heeft als subtitel \"Een Subtitel Hier\"",
|
"LabelSettingsParseSubtitlesHelp": "Haal subtitels uit mapnaam van audioboek.<br>Subtitel moet gescheiden zijn met \" - \"<br>b.v. \"Boektitel - Een Subtitel Hier\" heeft als subtitel \"Een Subtitel Hier\"",
|
||||||
"LabelSettingsPreferMatchedMetadata": "Geef voorkeur aan gematchte metadata",
|
"LabelSettingsPreferMatchedMetadata": "Prefereer gematchte metadata",
|
||||||
"LabelSettingsPreferMatchedMetadataHelp": "Gematchte data zal onderdeeldetails overschrijven bij gebruik van Quick Match. Standaard vult Quick Match uitsluitend ontbrekende details aan.",
|
"LabelSettingsPreferMatchedMetadataHelp": "Gematchte data zal onderdeeldetails overschrijven bij gebruik van Quick Match. Standaard vult Quick Match uitsluitend ontbrekende details aan.",
|
||||||
"LabelSettingsSkipMatchingBooksWithASIN": "Sla matchen van boeken over die al over een ASIN beschikken",
|
"LabelSettingsSkipMatchingBooksWithASIN": "Sla matchen van boeken over die al over een ASIN beschikken",
|
||||||
"LabelSettingsSkipMatchingBooksWithISBN": "Sla matchen van boeken over die al over een ISBN beschikken",
|
"LabelSettingsSkipMatchingBooksWithISBN": "Sla matchen van boeken over die al over een ISBN beschikken",
|
||||||
"LabelSettingsSortingIgnorePrefixes": "Negeer voorvoegsels bij sorteren",
|
"LabelSettingsSortingIgnorePrefixes": "Negeer voorvoegsels bij sorteren",
|
||||||
"LabelSettingsSortingIgnorePrefixesHelp": "b.v. voor voorvoegsel \"The\" wordt titel \"The Title\" dan gesorteerd als \"Title, The\"",
|
"LabelSettingsSortingIgnorePrefixesHelp": "b.v. voor voorvoegsel \"The\" wordt titel \"The Title\" dan gesorteerd als \"Title, The\"",
|
||||||
"LabelSettingsSquareBookCovers": "Gebruik vierkante boekomslagen",
|
"LabelSettingsSquareBookCovers": "Gebruik vierkante boekcovers",
|
||||||
"LabelSettingsSquareBookCoversHelp": "Gebruik vierkante boekomslagen in plaats van standaard 1,6:1",
|
"LabelSettingsSquareBookCoversHelp": "Prefereer gebruik van vierkante covers boven standaard 1.6:1 boekcovers",
|
||||||
"LabelSettingsStoreCoversWithItem": "Bewaar omslagen bij onderdeel",
|
"LabelSettingsStoreCoversWithItem": "Bewaar covers bij onderdeel",
|
||||||
"LabelSettingsStoreCoversWithItemHelp": "Omslagen worden standaard in /metadata/items opgeslagen. Bij inschakelen worden ze in de map van het bibliotheekitem zelf opgeslagen. Slechts een bestand genaamd \"cover\" zal worden bewaard",
|
"LabelSettingsStoreCoversWithItemHelp": "Standaard worden covers bewaard in /metadata/items, door deze instelling in te schakelen zullen covers in de map van je bibliotheekonderdeel bewaard worden. Slechts een bestand genaamd \"cover\" zal worden bewaard",
|
||||||
"LabelSettingsStoreMetadataWithItem": "Bewaar metadata bij onderdeel",
|
"LabelSettingsStoreMetadataWithItem": "Bewaar metadata bij onderdeel",
|
||||||
"LabelSettingsStoreMetadataWithItemHelp": "Standaard worden metadata-bestanden bewaard in /metadata/items, door deze instelling in te schakelen zullen metadata bestanden in de map van je bibliotheekonderdeel bewaard worden",
|
"LabelSettingsStoreMetadataWithItemHelp": "Standaard worden metadata-bestanden bewaard in /metadata/items, door deze instelling in te schakelen zullen metadata bestanden in de map van je bibliotheekonderdeel bewaard worden",
|
||||||
"LabelSettingsTimeFormat": "Tijdformat",
|
"LabelSettingsTimeFormat": "Tijdformat",
|
||||||
@ -606,7 +601,6 @@
|
|||||||
"LabelSlug": "Slak",
|
"LabelSlug": "Slak",
|
||||||
"LabelSortAscending": "Oplopend",
|
"LabelSortAscending": "Oplopend",
|
||||||
"LabelSortDescending": "Aflopend",
|
"LabelSortDescending": "Aflopend",
|
||||||
"LabelSortPubDate": "Sorteer Pub Datum",
|
|
||||||
"LabelStart": "Start",
|
"LabelStart": "Start",
|
||||||
"LabelStartTime": "Starttijd",
|
"LabelStartTime": "Starttijd",
|
||||||
"LabelStarted": "Gestart",
|
"LabelStarted": "Gestart",
|
||||||
@ -652,12 +646,12 @@
|
|||||||
"LabelTimeToShift": "Tijd op te schuiven in seconden",
|
"LabelTimeToShift": "Tijd op te schuiven in seconden",
|
||||||
"LabelTitle": "Titel",
|
"LabelTitle": "Titel",
|
||||||
"LabelToolsEmbedMetadata": "Metadata insluiten",
|
"LabelToolsEmbedMetadata": "Metadata insluiten",
|
||||||
"LabelToolsEmbedMetadataDescription": "Metadata insluiten in audiobestanden, inclusief omslagafbeelding en hoofdstukken.",
|
"LabelToolsEmbedMetadataDescription": "Metadata insluiten in audiobestanden, inclusief coverafbeelding en hoofdstukken.",
|
||||||
"LabelToolsM4bEncoder": "M4B Encoder",
|
"LabelToolsM4bEncoder": "M4B Encoder",
|
||||||
"LabelToolsMakeM4b": "Maak M4B-audioboekbestand",
|
"LabelToolsMakeM4b": "Maak M4B-audioboekbestand",
|
||||||
"LabelToolsMakeM4bDescription": "Genereer een .M4B-audioboekbestand met ingesloten metadata, omslagafbeelding en hoofdstukken.",
|
"LabelToolsMakeM4bDescription": "Genereer een .M4B-audioboekbestand met ingesloten metadata, coverafbeelding en hoofdstukken.",
|
||||||
"LabelToolsSplitM4b": "Splitst M4B in MP3's",
|
"LabelToolsSplitM4b": "Splitst M4B in MP3's",
|
||||||
"LabelToolsSplitM4bDescription": "Maak MP3's van een M4B, gesplitst per hoofdstuk met ingesloten metadata, omslagafbeelding en hoofdstukken.",
|
"LabelToolsSplitM4bDescription": "Maak MP3's van een M4B, gesplitst per hoofdstuk met ingesloten metadata, coverafbeelding en hoofdstukken.",
|
||||||
"LabelTotalDuration": "Totale duur",
|
"LabelTotalDuration": "Totale duur",
|
||||||
"LabelTotalTimeListened": "Totale tijd geluisterd",
|
"LabelTotalTimeListened": "Totale tijd geluisterd",
|
||||||
"LabelTrackFromFilename": "Track vanuit bestandsnaam",
|
"LabelTrackFromFilename": "Track vanuit bestandsnaam",
|
||||||
@ -672,8 +666,8 @@
|
|||||||
"LabelUndo": "Ongedaan maken",
|
"LabelUndo": "Ongedaan maken",
|
||||||
"LabelUnknown": "Onbekend",
|
"LabelUnknown": "Onbekend",
|
||||||
"LabelUnknownPublishDate": "Onbekende uitgeefdatum",
|
"LabelUnknownPublishDate": "Onbekende uitgeefdatum",
|
||||||
"LabelUpdateCover": "Omslag bijwerken",
|
"LabelUpdateCover": "Cover bijwerken",
|
||||||
"LabelUpdateCoverHelp": "Sta overschrijven van bestaande omslagen toe voor de geselecteerde boeken wanneer een match is gevonden",
|
"LabelUpdateCoverHelp": "Sta overschrijven van bestaande covers toe voor de geselecteerde boeken wanneer een match is gevonden",
|
||||||
"LabelUpdateDetails": "Details bijwerken",
|
"LabelUpdateDetails": "Details bijwerken",
|
||||||
"LabelUpdateDetailsHelp": "Sta overschrijven van bestaande details toe voor de geselecteerde boeken wanneer een match is gevonden",
|
"LabelUpdateDetailsHelp": "Sta overschrijven van bestaande details toe voor de geselecteerde boeken wanneer een match is gevonden",
|
||||||
"LabelUpdatedAt": "Bijgewerkt op",
|
"LabelUpdatedAt": "Bijgewerkt op",
|
||||||
@ -707,15 +701,13 @@
|
|||||||
"LabelYourProgress": "Je voortgang",
|
"LabelYourProgress": "Je voortgang",
|
||||||
"MessageAddToPlayerQueue": "Toevoegen aan wachtrij",
|
"MessageAddToPlayerQueue": "Toevoegen aan wachtrij",
|
||||||
"MessageAppriseDescription": "Om deze functie te gebruiken heb je een draaiende instantie van <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> nodig of een api die dezelfde requests afhandelt. <br />De Apprise API Url moet het volledige URL-pad zijn om de notificatie te verzenden, b.v., als je API-instantie draait op <code>http://192.168.1.1:8337</code> dan zou je <code>http://192.168.1.1:8337/notify</code> gebruiken.",
|
"MessageAppriseDescription": "Om deze functie te gebruiken heb je een draaiende instantie van <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> nodig of een api die dezelfde requests afhandelt. <br />De Apprise API Url moet het volledige URL-pad zijn om de notificatie te verzenden, b.v., als je API-instantie draait op <code>http://192.168.1.1:8337</code> dan zou je <code>http://192.168.1.1:8337/notify</code> gebruiken.",
|
||||||
"MessageAsinCheck": "Zorg ervoor dat u de ASIN van de juiste Audible-regio gebruikt, niet die van Amazon.",
|
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Start uw server opnieuw op nadat u het opslaan hebt uitgevoerd, om de OIDC-wijzigingen toe te passen.",
|
|
||||||
"MessageBackupsDescription": "Back-ups omvatten gebruikers, gebruikers' voortgang, bibliotheekonderdeeldetails, serverinstellingen en afbeeldingen bewaard in <code>/metadata/items</code> & <code>/metadata/authors</code>. Back-ups <strong>bevatten niet</strong> de bestanden bewaard in je bibliotheekmappen.",
|
"MessageBackupsDescription": "Back-ups omvatten gebruikers, gebruikers' voortgang, bibliotheekonderdeeldetails, serverinstellingen en afbeeldingen bewaard in <code>/metadata/items</code> & <code>/metadata/authors</code>. Back-ups <strong>bevatten niet</strong> de bestanden bewaard in je bibliotheekmappen.",
|
||||||
"MessageBackupsLocationEditNote": "Let op: het bijwerken van de back-uplocatie zal bestaande back-ups niet verplaatsen of wijzigen",
|
"MessageBackupsLocationEditNote": "Let op: het bijwerken van de back-uplocatie zal bestaande back-ups niet verplaatsen of wijzigen",
|
||||||
"MessageBackupsLocationNoEditNote": "Let op: De back-uplocatie wordt ingesteld via een omgevingsvariabele en kan hier niet worden gewijzigd.",
|
"MessageBackupsLocationNoEditNote": "Let op: De back-uplocatie wordt ingesteld via een omgevingsvariabele en kan hier niet worden gewijzigd.",
|
||||||
"MessageBackupsLocationPathEmpty": "Backup locatie pad kan niet leeg zijn",
|
"MessageBackupsLocationPathEmpty": "Backup locatie pad kan niet leeg zijn",
|
||||||
"MessageBatchEditPopulateMapDetailsAllHelp": "Vul actieve velden in met data van alle items. Velden met meerdere waarden zullen worden samengevoegd",
|
"MessageBatchEditPopulateMapDetailsAllHelp": "Vul actieve velden in met data van alle items. Velden met meerdere waarden zullen worden samengevoegd",
|
||||||
"MessageBatchEditPopulateMapDetailsItemHelp": "Vul actieve folder detail velden met de data van dit item",
|
"MessageBatchEditPopulateMapDetailsItemHelp": "Vul actieve folder detail velden met de data van dit item",
|
||||||
"MessageBatchQuickMatchDescription": "Quick Match probeert ontbrekende omslagen en metadata toe te voegen aan de geselecteerde items. Schakel de opties hieronder in om Quick Match bestaande omslagen en/of metadata te laten overschrijven.",
|
"MessageBatchQuickMatchDescription": "Quick Match zal proberen ontbrekende covers en metadata voor de geselecteerde onderdelen te matchten. Schakel de opties hieronder in om Quick Match toe te staan bestaande covers en/of metadata te overschrijven.",
|
||||||
"MessageBookshelfNoCollections": "Je hebt nog geen collecties gemaakt",
|
"MessageBookshelfNoCollections": "Je hebt nog geen collecties gemaakt",
|
||||||
"MessageBookshelfNoCollectionsHelp": "Collecties zijn publiekelijk. Alle gebruikers met toegang tot de bibliotheek kunnen ze zien.",
|
"MessageBookshelfNoCollectionsHelp": "Collecties zijn publiekelijk. Alle gebruikers met toegang tot de bibliotheek kunnen ze zien.",
|
||||||
"MessageBookshelfNoRSSFeeds": "Geen RSS-feeds geopend",
|
"MessageBookshelfNoRSSFeeds": "Geen RSS-feeds geopend",
|
||||||
@ -727,7 +719,6 @@
|
|||||||
"MessageChapterErrorStartGteDuration": "Ongeldig: starttijd moet kleiner zijn dan duur van audioboek",
|
"MessageChapterErrorStartGteDuration": "Ongeldig: starttijd moet kleiner zijn dan duur van audioboek",
|
||||||
"MessageChapterErrorStartLtPrev": "Ongeldig: starttijd moet be groter zijn dan of equal aan starttijd van vorig hoofdstuk",
|
"MessageChapterErrorStartLtPrev": "Ongeldig: starttijd moet be groter zijn dan of equal aan starttijd van vorig hoofdstuk",
|
||||||
"MessageChapterStartIsAfter": "Start van hoofdstuk is na het einde van je audioboek",
|
"MessageChapterStartIsAfter": "Start van hoofdstuk is na het einde van je audioboek",
|
||||||
"MessageChaptersNotFound": "Hoofdstukken niet gevonden",
|
|
||||||
"MessageCheckingCron": "Cron aan het checken...",
|
"MessageCheckingCron": "Cron aan het checken...",
|
||||||
"MessageConfirmCloseFeed": "Ben je zeker dat je deze feed wil sluiten?",
|
"MessageConfirmCloseFeed": "Ben je zeker dat je deze feed wil sluiten?",
|
||||||
"MessageConfirmDeleteBackup": "Weet je zeker dat je de backup voor {0} wil verwijderen?",
|
"MessageConfirmDeleteBackup": "Weet je zeker dat je de backup voor {0} wil verwijderen?",
|
||||||
@ -757,7 +748,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "Weet je zeker dat je auteur \"{0}\" wil verwijderen?",
|
"MessageConfirmRemoveAuthor": "Weet je zeker dat je auteur \"{0}\" wil verwijderen?",
|
||||||
"MessageConfirmRemoveCollection": "Weet je zeker dat je de collectie \"{0}\" wil verwijderen?",
|
"MessageConfirmRemoveCollection": "Weet je zeker dat je de collectie \"{0}\" wil verwijderen?",
|
||||||
"MessageConfirmRemoveEpisode": "Weet je zeker dat je de aflevering \"{0}\" wil verwijderen?",
|
"MessageConfirmRemoveEpisode": "Weet je zeker dat je de aflevering \"{0}\" wil verwijderen?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Let op: Het audiobestand wordt niet verwijderd, tenzij je ‘Bestand permanent verwijderen’ inschakelt",
|
|
||||||
"MessageConfirmRemoveEpisodes": "Weet je zeker dat je {0} afleveringen wil verwijderen?",
|
"MessageConfirmRemoveEpisodes": "Weet je zeker dat je {0} afleveringen wil verwijderen?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Weet je zeker dat je {0} luistersessies wilt verwijderen?",
|
"MessageConfirmRemoveListeningSessions": "Weet je zeker dat je {0} luistersessies wilt verwijderen?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Bent u zeker dat u alle metadata wil verwijderen. {0} bestanden in uw bibliotheel item folders?",
|
"MessageConfirmRemoveMetadataFiles": "Bent u zeker dat u alle metadata wil verwijderen. {0} bestanden in uw bibliotheel item folders?",
|
||||||
@ -785,9 +775,8 @@
|
|||||||
"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.",
|
||||||
"MessageImportantNotice": "Belangrijke opmerking!",
|
"MessageImportantNotice": "Belangrijke opmerking!",
|
||||||
"MessageInsertChapterBelow": "Hoofdstuk hieronder invoegen",
|
"MessageInsertChapterBelow": "Hoofdstuk hieronder invoegen",
|
||||||
"MessageInvalidAsin": "Ongeldige ASIN",
|
"MessageItemsSelected": "{0} onderdelen geselecteerd",
|
||||||
"MessageItemsSelected": "{0} items geselecteerd",
|
"MessageItemsUpdated": "{0} onderdelen bijgewerkt",
|
||||||
"MessageItemsUpdated": "{0} items bijgewerkt",
|
|
||||||
"MessageJoinUsOn": "Doe mee op",
|
"MessageJoinUsOn": "Doe mee op",
|
||||||
"MessageLoading": "Aan het laden...",
|
"MessageLoading": "Aan het laden...",
|
||||||
"MessageLoadingFolders": "Mappen aan het laden...",
|
"MessageLoadingFolders": "Mappen aan het laden...",
|
||||||
@ -799,14 +788,14 @@
|
|||||||
"MessageMarkAllEpisodesNotFinished": "Markeer alle afleveringen als niet voltooid",
|
"MessageMarkAllEpisodesNotFinished": "Markeer alle afleveringen als niet voltooid",
|
||||||
"MessageMarkAsFinished": "Markeer als Voltooid",
|
"MessageMarkAsFinished": "Markeer als Voltooid",
|
||||||
"MessageMarkAsNotFinished": "Markeer als Niet Voltooid",
|
"MessageMarkAsNotFinished": "Markeer als Niet Voltooid",
|
||||||
"MessageMatchBooksDescription": "zal proberen boeken in de bibliotheek te koppelen aan een boek uit de geselecteerde bron en ontbrekende gegevens en een omslag toe te voegen. Overschrijft geen bestaande gegevens.",
|
"MessageMatchBooksDescription": "zal proberen boeken in de bibliotheek te matchen met een boek uit de geselecteerde bron en lege details en coverafbeelding te vullen. Overschrijft details niet.",
|
||||||
"MessageNoAudioTracks": "Geen audiotracks",
|
"MessageNoAudioTracks": "Geen audiotracks",
|
||||||
"MessageNoAuthors": "Geen auteurs",
|
"MessageNoAuthors": "Geen auteurs",
|
||||||
"MessageNoBackups": "Geen back-ups",
|
"MessageNoBackups": "Geen back-ups",
|
||||||
"MessageNoBookmarks": "Geen boekwijzers",
|
"MessageNoBookmarks": "Geen boekwijzers",
|
||||||
"MessageNoChapters": "Geen hoofdstukken",
|
"MessageNoChapters": "Geen hoofdstukken",
|
||||||
"MessageNoCollections": "Geen collecties",
|
"MessageNoCollections": "Geen collecties",
|
||||||
"MessageNoCoversFound": "Geen omslagen gevonden",
|
"MessageNoCoversFound": "Geen covers gevonden",
|
||||||
"MessageNoDescription": "Geen beschrijving",
|
"MessageNoDescription": "Geen beschrijving",
|
||||||
"MessageNoDevices": "Geen Apparaten",
|
"MessageNoDevices": "Geen Apparaten",
|
||||||
"MessageNoDownloadsInProgress": "Geen downloads bezig op dit moment",
|
"MessageNoDownloadsInProgress": "Geen downloads bezig op dit moment",
|
||||||
@ -819,7 +808,7 @@
|
|||||||
"MessageNoItems": "Geen onderdelen",
|
"MessageNoItems": "Geen onderdelen",
|
||||||
"MessageNoItemsFound": "Geen onderdelen gevonden",
|
"MessageNoItemsFound": "Geen onderdelen gevonden",
|
||||||
"MessageNoListeningSessions": "Geen luistersessies",
|
"MessageNoListeningSessions": "Geen luistersessies",
|
||||||
"MessageNoLogs": "Geen logbestanden",
|
"MessageNoLogs": "Geen logs",
|
||||||
"MessageNoMediaProgress": "Geen mediavoortgang",
|
"MessageNoMediaProgress": "Geen mediavoortgang",
|
||||||
"MessageNoNotifications": "Geen notificaties",
|
"MessageNoNotifications": "Geen notificaties",
|
||||||
"MessageNoPodcastFeed": "Ongeldige podcast: Geen Feed",
|
"MessageNoPodcastFeed": "Ongeldige podcast: Geen Feed",
|
||||||
@ -844,7 +833,7 @@
|
|||||||
"MessageQuickEmbedInProgress": "Snelle inbedding in uitvoering",
|
"MessageQuickEmbedInProgress": "Snelle inbedding in uitvoering",
|
||||||
"MessageQuickEmbedQueue": "In de wachtrij voor snelle insluiting ({0} in wachtrij)",
|
"MessageQuickEmbedQueue": "In de wachtrij voor snelle insluiting ({0} in wachtrij)",
|
||||||
"MessageQuickMatchAllEpisodes": "Alle Afleveringen Snel Matchen",
|
"MessageQuickMatchAllEpisodes": "Alle Afleveringen Snel Matchen",
|
||||||
"MessageQuickMatchDescription": "Vult ontbrekende gegevens & omslag met eerste matchresultaat van '{0}'. Overschrijft gegevens alleen als de serverinstelling ‘Geef voorkeur aan gematchte metadata’ is ingeschakeld.",
|
"MessageQuickMatchDescription": "Vul lege onderdeeldetails & cover met eerste matchresultaat van '{0}'. Overschrijft geen details tenzij 'Prefereer gematchte metadata' serverinstelling is ingeschakeld.",
|
||||||
"MessageRemoveChapter": "Verwijder hoofdstuk",
|
"MessageRemoveChapter": "Verwijder hoofdstuk",
|
||||||
"MessageRemoveEpisodes": "Verwijder {0} aflevering(en)",
|
"MessageRemoveEpisodes": "Verwijder {0} aflevering(en)",
|
||||||
"MessageRemoveFromPlayerQueue": "Verwijder uit afspeelwachtrij",
|
"MessageRemoveFromPlayerQueue": "Verwijder uit afspeelwachtrij",
|
||||||
@ -852,12 +841,10 @@
|
|||||||
"MessageReportBugsAndContribute": "Rapporteer bugs, vraag functionaliteiten aan en draag bij op",
|
"MessageReportBugsAndContribute": "Rapporteer bugs, vraag functionaliteiten aan en draag bij op",
|
||||||
"MessageResetChaptersConfirm": "Weet je zeker dat je de hoofdstukken wil resetten en de wijzigingen die je gemaakt hebt ongedaan wil maken?",
|
"MessageResetChaptersConfirm": "Weet je zeker dat je de hoofdstukken wil resetten en de wijzigingen die je gemaakt hebt ongedaan wil maken?",
|
||||||
"MessageRestoreBackupConfirm": "Weet je zeker dat je wil herstellen met behulp van de back-up gemaakt op",
|
"MessageRestoreBackupConfirm": "Weet je zeker dat je wil herstellen met behulp van de back-up gemaakt op",
|
||||||
"MessageRestoreBackupWarning": "Een back-up herstellen zal de volledige database in /config en de omslagen in /metadata/items & /metadata/authors overschrijven.<br /><br />Back-ups wijzigen geen bestanden in je bibliotheekmappen. Als je de serverinstelling gebruikt om omslagen en metadata in je bibliotheekmappen te bewaren dan worden deze niet geback-upt of overschreven.<br /><br />Alle apparaten die je server gebruiken, worden automatisch ververst.",
|
"MessageRestoreBackupWarning": "Herstellen met een back-up zal de volledige database in /config en de covers in /metadata/items & /metadata/authors overschrijven.<br /><br />Back-ups wijzigen geen bestanden in je bibliotheekmappen. Als je de serverinstelling gebruikt om covers en metadata in je bibliotheekmappen te bewaren dan worden deze niet geback-upt of overschreven.<br /><br />Alle clients die van je server gebruik maken zullen automatisch worden ververst.",
|
||||||
"MessageScheduleLibraryScanNote": "Voor de meeste gebruikers is het raadzaam om deze functie uitgeschakeld te laten en de folder watcher-instelling ingeschakeld te houden. De folder watcher detecteert automatisch wijzigingen in uw bibliotheekmappen. De folder watcher werkt niet voor elk bestandssysteem (zoals NFS), dus geplande bibliotheekscans kunnen in plaats daarvan worden gebruikt.",
|
"MessageScheduleLibraryScanNote": "Voor de meeste gebruikers is het raadzaam om deze functie uitgeschakeld te laten en de folder watcher-instelling ingeschakeld te houden. De folder watcher detecteert automatisch wijzigingen in uw bibliotheekmappen. De folder watcher werkt niet voor elk bestandssysteem (zoals NFS), dus geplande bibliotheekscans kunnen in plaats daarvan worden gebruikt.",
|
||||||
"MessageScheduleRunEveryWeekdayAtTime": "Elke {0} uitvoeren op {1}",
|
|
||||||
"MessageSearchResultsFor": "Zoekresultaten voor",
|
"MessageSearchResultsFor": "Zoekresultaten voor",
|
||||||
"MessageSelected": "{0} geselecteerd",
|
"MessageSelected": "{0} geselecteerd",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Serievolgorde mag geen spaties bevatten",
|
|
||||||
"MessageServerCouldNotBeReached": "Server niet bereikbaar",
|
"MessageServerCouldNotBeReached": "Server niet bereikbaar",
|
||||||
"MessageSetChaptersFromTracksDescription": "Stel hoofdstukken in met ieder audiobestand als een hoofdstuk en de audiobestandsnaam als hoofdstuktitel",
|
"MessageSetChaptersFromTracksDescription": "Stel hoofdstukken in met ieder audiobestand als een hoofdstuk en de audiobestandsnaam als hoofdstuktitel",
|
||||||
"MessageShareExpirationWillBe": "Vervaldatum is <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Vervaldatum is <strong>{0}</strong>",
|
||||||
@ -919,8 +906,6 @@
|
|||||||
"NotificationOnBackupCompletedDescription": "Wordt geactiveerd wanneer een back-up is voltooid",
|
"NotificationOnBackupCompletedDescription": "Wordt geactiveerd wanneer een back-up is voltooid",
|
||||||
"NotificationOnBackupFailedDescription": "Wordt geactiveerd wanneer een back-up mislukt",
|
"NotificationOnBackupFailedDescription": "Wordt geactiveerd wanneer een back-up mislukt",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Wordt geactiveerd wanneer een podcastaflevering automatisch wordt gedownload",
|
"NotificationOnEpisodeDownloadedDescription": "Wordt geactiveerd wanneer een podcastaflevering automatisch wordt gedownload",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Wordt geactiveerd wanneer automatische afleveringsdownloads zijn uitgeschakeld vanwege te veel mislukte pogingen",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Getriggerd wanneer de RSS feed aanvraag faalt voor een automatische aflevering download",
|
|
||||||
"NotificationOnTestDescription": "Event voor het testen van het notificatiesysteem",
|
"NotificationOnTestDescription": "Event voor het testen van het notificatiesysteem",
|
||||||
"PlaceholderNewCollection": "Nieuwe naam collectie",
|
"PlaceholderNewCollection": "Nieuwe naam collectie",
|
||||||
"PlaceholderNewFolderPath": "Nieuwe locatie map",
|
"PlaceholderNewFolderPath": "Nieuwe locatie map",
|
||||||
@ -965,7 +950,6 @@
|
|||||||
"ToastBackupRestoreFailed": "Herstellen back-up mislukt",
|
"ToastBackupRestoreFailed": "Herstellen back-up mislukt",
|
||||||
"ToastBackupUploadFailed": "Uploaden back-up mislukt",
|
"ToastBackupUploadFailed": "Uploaden back-up mislukt",
|
||||||
"ToastBackupUploadSuccess": "Back-up geüpload",
|
"ToastBackupUploadSuccess": "Back-up geüpload",
|
||||||
"ToastBatchApplyDetailsToItemsSuccess": "Details toegepast op items",
|
|
||||||
"ToastBatchDeleteFailed": "Batch verwijderen mislukt",
|
"ToastBatchDeleteFailed": "Batch verwijderen mislukt",
|
||||||
"ToastBatchDeleteSuccess": "Batch verwijderen gelukt",
|
"ToastBatchDeleteSuccess": "Batch verwijderen gelukt",
|
||||||
"ToastBatchQuickMatchFailed": "Batch Snel Vergelijken mislukt!",
|
"ToastBatchQuickMatchFailed": "Batch Snel Vergelijken mislukt!",
|
||||||
@ -978,15 +962,13 @@
|
|||||||
"ToastCachePurgeFailed": "Cache wissen is mislukt",
|
"ToastCachePurgeFailed": "Cache wissen is mislukt",
|
||||||
"ToastCachePurgeSuccess": "Cache succesvol verwijderd",
|
"ToastCachePurgeSuccess": "Cache succesvol verwijderd",
|
||||||
"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.",
|
|
||||||
"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.",
|
|
||||||
"ToastChaptersMustHaveTitles": "Hoofdstukken moeten titels hebben",
|
"ToastChaptersMustHaveTitles": "Hoofdstukken moeten titels hebben",
|
||||||
"ToastChaptersRemoved": "Hoofdstukken verwijderd",
|
"ToastChaptersRemoved": "Hoofdstukken verwijderd",
|
||||||
"ToastChaptersUpdated": "Hoofdstukken bijgewerkt",
|
"ToastChaptersUpdated": "Hoofdstukken bijgewerkt",
|
||||||
"ToastCollectionItemsAddFailed": "Item(s) toegevoegd aan collectie mislukt",
|
"ToastCollectionItemsAddFailed": "Item(s) toegevoegd aan collectie mislukt",
|
||||||
"ToastCollectionRemoveSuccess": "Collectie verwijderd",
|
"ToastCollectionRemoveSuccess": "Collectie verwijderd",
|
||||||
"ToastCollectionUpdateSuccess": "Collectie bijgewerkt",
|
"ToastCollectionUpdateSuccess": "Collectie bijgewerkt",
|
||||||
"ToastCoverUpdateFailed": "Omslag bijwerken mislukt",
|
"ToastCoverUpdateFailed": "Cover update mislukt",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Datum en tijd ongeldig of onvolledig",
|
"ToastDateTimeInvalidOrIncomplete": "Datum en tijd ongeldig of onvolledig",
|
||||||
"ToastDeleteFileFailed": "Bestand verwijderen mislukt",
|
"ToastDeleteFileFailed": "Bestand verwijderen mislukt",
|
||||||
"ToastDeleteFileSuccess": "Bestand verwijderd",
|
"ToastDeleteFileSuccess": "Bestand verwijderd",
|
||||||
@ -1008,7 +990,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",
|
||||||
"ToastItemCoverUpdateSuccess": "Omslag bijgewerkt",
|
"ToastItemCoverUpdateSuccess": "Cover onderdeel bijgewerkt",
|
||||||
"ToastItemDeletedFailed": "Item verwijderen mislukt",
|
"ToastItemDeletedFailed": "Item verwijderen mislukt",
|
||||||
"ToastItemDeletedSuccess": "Verwijderd item",
|
"ToastItemDeletedSuccess": "Verwijderd item",
|
||||||
"ToastItemDetailsUpdateSuccess": "Details onderdeel bijgewerkt",
|
"ToastItemDetailsUpdateSuccess": "Details onderdeel bijgewerkt",
|
||||||
@ -1080,7 +1062,6 @@
|
|||||||
"ToastSelectAtLeastOneUser": "Selecteer ten minste een gebruiker",
|
"ToastSelectAtLeastOneUser": "Selecteer ten minste een gebruiker",
|
||||||
"ToastSendEbookToDeviceFailed": "Ebook naar apparaat sturen mislukt",
|
"ToastSendEbookToDeviceFailed": "Ebook naar apparaat sturen mislukt",
|
||||||
"ToastSendEbookToDeviceSuccess": "Ebook verstuurd naar apparaat \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "Ebook verstuurd naar apparaat \"{0}\"",
|
||||||
"ToastSeriesSubmitFailedSameName": "Kan niet twee series met dezelfde naam toevoegen",
|
|
||||||
"ToastSeriesUpdateFailed": "Bijwerken serie mislukt",
|
"ToastSeriesUpdateFailed": "Bijwerken serie mislukt",
|
||||||
"ToastSeriesUpdateSuccess": "Bijwerken serie gelukt",
|
"ToastSeriesUpdateSuccess": "Bijwerken serie gelukt",
|
||||||
"ToastServerSettingsUpdateSuccess": "Server instellingen bijgewerkt",
|
"ToastServerSettingsUpdateSuccess": "Server instellingen bijgewerkt",
|
||||||
@ -1099,8 +1080,6 @@
|
|||||||
"ToastUnknownError": "Onbekende fout",
|
"ToastUnknownError": "Onbekende fout",
|
||||||
"ToastUnlinkOpenIdFailed": "Gebruiker ontkoppelen van OpenID mislukt",
|
"ToastUnlinkOpenIdFailed": "Gebruiker ontkoppelen van OpenID mislukt",
|
||||||
"ToastUnlinkOpenIdSuccess": "Gebruiker ontkoppeld van OpenID",
|
"ToastUnlinkOpenIdSuccess": "Gebruiker ontkoppeld van OpenID",
|
||||||
"ToastUploaderFilepathExistsError": "Bestandspad \"{0}\" bestaat al op de server",
|
|
||||||
"ToastUploaderItemExistsInSubdirectoryError": "Item \"{0}\" gebruikt een submap van het uploadpad.",
|
|
||||||
"ToastUserDeleteFailed": "Verwijderen gebruiker mislukt",
|
"ToastUserDeleteFailed": "Verwijderen gebruiker mislukt",
|
||||||
"ToastUserDeleteSuccess": "Gebruiker verwijderd",
|
"ToastUserDeleteSuccess": "Gebruiker verwijderd",
|
||||||
"ToastUserPasswordChangeSuccess": "Wachtwoord succesvol gewijzigd",
|
"ToastUserPasswordChangeSuccess": "Wachtwoord succesvol gewijzigd",
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
"ButtonAddYourFirstLibrary": "Legg til ditt første bibliotek",
|
"ButtonAddYourFirstLibrary": "Legg til ditt første bibliotek",
|
||||||
"ButtonApply": "Bruk",
|
"ButtonApply": "Bruk",
|
||||||
"ButtonApplyChapters": "Bruk kapittel",
|
"ButtonApplyChapters": "Bruk kapittel",
|
||||||
"ButtonAuthors": "Forfattere",
|
"ButtonAuthors": "Forfatter",
|
||||||
"ButtonBack": "Tilbake",
|
"ButtonBack": "Tilbake",
|
||||||
"ButtonBrowseForFolder": "Bla gjennom mappe",
|
"ButtonBrowseForFolder": "Bla gjennom mappe",
|
||||||
"ButtonCancel": "Avbryt",
|
"ButtonCancel": "Avbryt",
|
||||||
@ -175,7 +175,6 @@
|
|||||||
"HeaderPlaylist": "Spilleliste",
|
"HeaderPlaylist": "Spilleliste",
|
||||||
"HeaderPlaylistItems": "Spillelisteelement",
|
"HeaderPlaylistItems": "Spillelisteelement",
|
||||||
"HeaderPodcastsToAdd": "Podcaster å legge til",
|
"HeaderPodcastsToAdd": "Podcaster å legge til",
|
||||||
"HeaderPresets": "Forhåndsinnstillinger",
|
|
||||||
"HeaderPreviewCover": "Forhåndsvis omslag",
|
"HeaderPreviewCover": "Forhåndsvis omslag",
|
||||||
"HeaderRSSFeedGeneral": "RSS Detailer",
|
"HeaderRSSFeedGeneral": "RSS Detailer",
|
||||||
"HeaderRSSFeedIsOpen": "RSS Feed er åpen",
|
"HeaderRSSFeedIsOpen": "RSS Feed er åpen",
|
||||||
@ -218,7 +217,6 @@
|
|||||||
"LabelAccountTypeAdmin": "Administrator",
|
"LabelAccountTypeAdmin": "Administrator",
|
||||||
"LabelAccountTypeGuest": "Gjest",
|
"LabelAccountTypeGuest": "Gjest",
|
||||||
"LabelAccountTypeUser": "Bruker",
|
"LabelAccountTypeUser": "Bruker",
|
||||||
"LabelActivities": "Aktiviteter",
|
|
||||||
"LabelActivity": "Aktivitet",
|
"LabelActivity": "Aktivitet",
|
||||||
"LabelAddToCollection": "Legg til i samling",
|
"LabelAddToCollection": "Legg til i samling",
|
||||||
"LabelAddToCollectionBatch": "Legg {0} bøker til samling",
|
"LabelAddToCollectionBatch": "Legg {0} bøker til samling",
|
||||||
@ -228,7 +226,6 @@
|
|||||||
"LabelAddedDate": "La til {0}",
|
"LabelAddedDate": "La til {0}",
|
||||||
"LabelAdminUsersOnly": "Kun administratorer",
|
"LabelAdminUsersOnly": "Kun administratorer",
|
||||||
"LabelAll": "Alle",
|
"LabelAll": "Alle",
|
||||||
"LabelAllEpisodesDownloaded": "Alle nedlastede episoder",
|
|
||||||
"LabelAllUsers": "Alle brukere",
|
"LabelAllUsers": "Alle brukere",
|
||||||
"LabelAllUsersExcludingGuests": "Alle brukere bortsett fra gjester",
|
"LabelAllUsersExcludingGuests": "Alle brukere bortsett fra gjester",
|
||||||
"LabelAllUsersIncludingGuests": "Alle brukere inkludert gjester",
|
"LabelAllUsersIncludingGuests": "Alle brukere inkludert gjester",
|
||||||
@ -284,7 +281,6 @@
|
|||||||
"LabelContinueSeries": "Fortsett serier",
|
"LabelContinueSeries": "Fortsett serier",
|
||||||
"LabelCover": "Omslag",
|
"LabelCover": "Omslag",
|
||||||
"LabelCoverImageURL": "Omslagsbilde URL",
|
"LabelCoverImageURL": "Omslagsbilde URL",
|
||||||
"LabelCoverProvider": "Tilbyder av omslagsbilde",
|
|
||||||
"LabelCreatedAt": "Dato opprettet",
|
"LabelCreatedAt": "Dato opprettet",
|
||||||
"LabelCronExpression": "Cron uttrykk",
|
"LabelCronExpression": "Cron uttrykk",
|
||||||
"LabelCurrent": "Nåværende",
|
"LabelCurrent": "Nåværende",
|
||||||
@ -393,7 +389,6 @@
|
|||||||
"LabelIntervalEvery6Hours": "Hver 6. timer",
|
"LabelIntervalEvery6Hours": "Hver 6. timer",
|
||||||
"LabelIntervalEveryDay": "Hver dag",
|
"LabelIntervalEveryDay": "Hver dag",
|
||||||
"LabelIntervalEveryHour": "Hver time",
|
"LabelIntervalEveryHour": "Hver time",
|
||||||
"LabelIntervalEveryMinute": "Hvert minutt",
|
|
||||||
"LabelInvert": "Inverter",
|
"LabelInvert": "Inverter",
|
||||||
"LabelItem": "Enhet",
|
"LabelItem": "Enhet",
|
||||||
"LabelJumpBackwardAmount": "Hopp bakover med",
|
"LabelJumpBackwardAmount": "Hopp bakover med",
|
||||||
@ -469,7 +464,6 @@
|
|||||||
"LabelNotificationsMaxQueueSizeHelp": "Hendelser er begrenset til avfyre én gang per sekund. Hendelser blir ignorert om køen er full. Dette forhindrer overflod av varslinger.",
|
"LabelNotificationsMaxQueueSizeHelp": "Hendelser er begrenset til avfyre én gang per sekund. Hendelser blir ignorert om køen er full. Dette forhindrer overflod av varslinger.",
|
||||||
"LabelNumberOfBooks": "Antall bøker",
|
"LabelNumberOfBooks": "Antall bøker",
|
||||||
"LabelNumberOfEpisodes": "Antall episoder",
|
"LabelNumberOfEpisodes": "Antall episoder",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Navnet på OpenID claim'et som inneholder avanserte tilganger for brukerhandlinger i applikasjonen som vil brukes for ikke-administratorroller (<b>hvis konfigurert</b>). Hvis claim'et mangler fra responsen, nektes tilgang til ABS. Hvis en enkelt opsjon mangler, blir behandlet som <code>false</code>. Påse at identitetstilbyderens claim stemmer overens med den forventede strukturen:",
|
|
||||||
"LabelOpenIDClaims": "La følge valg være tomme for å slå av avanserte gruppe og tillatelser. Gruppen \"Bruker\" vil da også automatisk legges til.",
|
"LabelOpenIDClaims": "La følge valg være tomme for å slå av avanserte gruppe og tillatelser. Gruppen \"Bruker\" vil da også automatisk legges til.",
|
||||||
"LabelOpenRSSFeed": "Åpne RSS Feed",
|
"LabelOpenRSSFeed": "Åpne RSS Feed",
|
||||||
"LabelOverwrite": "Overskriv",
|
"LabelOverwrite": "Overskriv",
|
||||||
@ -527,7 +521,6 @@
|
|||||||
"LabelReleaseDate": "Utgivelsesdato",
|
"LabelReleaseDate": "Utgivelsesdato",
|
||||||
"LabelRemoveAllMetadataAbs": "Fjern alle metadata.abs filer",
|
"LabelRemoveAllMetadataAbs": "Fjern alle metadata.abs filer",
|
||||||
"LabelRemoveAllMetadataJson": "Fjern alle metadata.json filer",
|
"LabelRemoveAllMetadataJson": "Fjern alle metadata.json filer",
|
||||||
"LabelRemoveAudibleBranding": "Fjern Audible inn- og utledning fra kapitler",
|
|
||||||
"LabelRemoveCover": "Fjern omslag",
|
"LabelRemoveCover": "Fjern omslag",
|
||||||
"LabelRemoveMetadataFile": "Fjern metadata-filer fra biblioteks-mapper",
|
"LabelRemoveMetadataFile": "Fjern metadata-filer fra biblioteks-mapper",
|
||||||
"LabelRemoveMetadataFileHelp": "Fjern alle metadata.json og metadata.abs i alle {0} mappene.",
|
"LabelRemoveMetadataFileHelp": "Fjern alle metadata.json og metadata.abs i alle {0} mappene.",
|
||||||
@ -557,8 +550,6 @@
|
|||||||
"LabelSettingsBookshelfViewHelp": "Skeuomorf design med hyller av ved",
|
"LabelSettingsBookshelfViewHelp": "Skeuomorf design med hyller av ved",
|
||||||
"LabelSettingsChromecastSupport": "Chromecast støtte",
|
"LabelSettingsChromecastSupport": "Chromecast støtte",
|
||||||
"LabelSettingsDateFormat": "Dato Format",
|
"LabelSettingsDateFormat": "Dato Format",
|
||||||
"LabelSettingsEnableWatcher": "Skann biblioteker automatisk for endringer",
|
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Skann bibliotek automatisk for endringer",
|
|
||||||
"LabelSettingsEnableWatcherHelp": "Aktiverer automatisk opprettelse/oppdatering av enheter når filendringer er oppdaget. *Krever restart av server*",
|
"LabelSettingsEnableWatcherHelp": "Aktiverer automatisk opprettelse/oppdatering av enheter når filendringer er oppdaget. *Krever restart av server*",
|
||||||
"LabelSettingsEpubsAllowScriptedContent": "Tillat scripting i innholdet i ebub-bøker",
|
"LabelSettingsEpubsAllowScriptedContent": "Tillat scripting i innholdet i ebub-bøker",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Tillat epub-filer å kjøre script. Det er anbefalt å slå av denne innstillingen med mindre du stoler på kilden til epub-filene.",
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Tillat epub-filer å kjøre script. Det er anbefalt å slå av denne innstillingen med mindre du stoler på kilden til epub-filene.",
|
||||||
@ -602,7 +593,6 @@
|
|||||||
"LabelSlug": "Slug",
|
"LabelSlug": "Slug",
|
||||||
"LabelSortAscending": "Stigende",
|
"LabelSortAscending": "Stigende",
|
||||||
"LabelSortDescending": "Synkende",
|
"LabelSortDescending": "Synkende",
|
||||||
"LabelSortPubDate": "Sorter etter publiseringsdato",
|
|
||||||
"LabelStart": "Start",
|
"LabelStart": "Start",
|
||||||
"LabelStartTime": "Start Tid",
|
"LabelStartTime": "Start Tid",
|
||||||
"LabelStarted": "Startet",
|
"LabelStarted": "Startet",
|
||||||
@ -703,8 +693,6 @@
|
|||||||
"LabelYourProgress": "Din fremgang",
|
"LabelYourProgress": "Din fremgang",
|
||||||
"MessageAddToPlayerQueue": "Legg til i kø",
|
"MessageAddToPlayerQueue": "Legg til i kø",
|
||||||
"MessageAppriseDescription": "For å bruke denne funksjonen trenger du en instans av <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kjørende eller et API som håndterer disse forespørslene. <br />Apprise API URL skal være hele URL-en til varslingen, f.eks., hvis din API-instans er på <code>http://192.168.1.1:8337</code> så skal du bruke <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "For å bruke denne funksjonen trenger du en instans av <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kjørende eller et API som håndterer disse forespørslene. <br />Apprise API URL skal være hele URL-en til varslingen, f.eks., hvis din API-instans er på <code>http://192.168.1.1:8337</code> så skal du bruke <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Påse at du bruker ASIN fra den riktige Audible-regionen, ikke Amazon.",
|
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Etter å ha lagret, start serveren din på nytt for at OIDC-endringene skal tre i kraft.",
|
|
||||||
"MessageBackupsDescription": "Sikkerhetskopier inkluderer, brukerfremgang, detaljer om bibliotekgjenstander, tjener instillinger og bilder lagret under <code>/metadata/items</code> og <code>/metadata/authors</code>. Sikkerhetskopier <strong>vil ikke</strong> inkludere filer som er lagret i bibliotek mappene.",
|
"MessageBackupsDescription": "Sikkerhetskopier inkluderer, brukerfremgang, detaljer om bibliotekgjenstander, tjener instillinger og bilder lagret under <code>/metadata/items</code> og <code>/metadata/authors</code>. Sikkerhetskopier <strong>vil ikke</strong> inkludere filer som er lagret i bibliotek mappene.",
|
||||||
"MessageBackupsLocationEditNote": "Viktig: Endring av mappen for sikkerhetskopi hverken endrer eller flytter eksisterende sikkerhetskopier!",
|
"MessageBackupsLocationEditNote": "Viktig: Endring av mappen for sikkerhetskopi hverken endrer eller flytter eksisterende sikkerhetskopier!",
|
||||||
"MessageBackupsLocationNoEditNote": "NB: Mappen for sikkerhetskopi settes i en miljøvariabel og kan ikke endres her.",
|
"MessageBackupsLocationNoEditNote": "NB: Mappen for sikkerhetskopi settes i en miljøvariabel og kan ikke endres her.",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Dodaj",
|
"ButtonAdd": "Dodaj",
|
||||||
"ButtonAddApiKey": "Dodaj klucz API",
|
|
||||||
"ButtonAddChapters": "Dodaj rozdziały",
|
"ButtonAddChapters": "Dodaj rozdziały",
|
||||||
"ButtonAddDevice": "Dodaj urządzenie",
|
"ButtonAddDevice": "Dodaj urządzenie",
|
||||||
"ButtonAddLibrary": "Dodaj bibliotekę",
|
"ButtonAddLibrary": "Dodaj bibliotekę",
|
||||||
@ -21,7 +20,6 @@
|
|||||||
"ButtonChooseAFolder": "Wybierz folder",
|
"ButtonChooseAFolder": "Wybierz folder",
|
||||||
"ButtonChooseFiles": "Wybierz pliki",
|
"ButtonChooseFiles": "Wybierz pliki",
|
||||||
"ButtonClearFilter": "Wyczyść filtr",
|
"ButtonClearFilter": "Wyczyść filtr",
|
||||||
"ButtonClose": "Zamknij",
|
|
||||||
"ButtonCloseFeed": "Zamknij kanał",
|
"ButtonCloseFeed": "Zamknij kanał",
|
||||||
"ButtonCloseSession": "Zamknij otwartą sesję",
|
"ButtonCloseSession": "Zamknij otwartą sesję",
|
||||||
"ButtonCollections": "Kolekcje",
|
"ButtonCollections": "Kolekcje",
|
||||||
@ -121,7 +119,6 @@
|
|||||||
"HeaderAccount": "Konto",
|
"HeaderAccount": "Konto",
|
||||||
"HeaderAddCustomMetadataProvider": "Dodaj niestandardowego dostawcę metadanych",
|
"HeaderAddCustomMetadataProvider": "Dodaj niestandardowego dostawcę metadanych",
|
||||||
"HeaderAdvanced": "Zaawansowane",
|
"HeaderAdvanced": "Zaawansowane",
|
||||||
"HeaderApiKeys": "Klucze API",
|
|
||||||
"HeaderAppriseNotificationSettings": "Ustawienia powiadomień Apprise",
|
"HeaderAppriseNotificationSettings": "Ustawienia powiadomień Apprise",
|
||||||
"HeaderAudioTracks": "Ścieżki audio",
|
"HeaderAudioTracks": "Ścieżki audio",
|
||||||
"HeaderAudiobookTools": "Narzędzia do zarządzania audiobookami",
|
"HeaderAudiobookTools": "Narzędzia do zarządzania audiobookami",
|
||||||
@ -165,7 +162,6 @@
|
|||||||
"HeaderMetadataOrderOfPrecedence": "Kolejność metadanych",
|
"HeaderMetadataOrderOfPrecedence": "Kolejność metadanych",
|
||||||
"HeaderMetadataToEmbed": "Metadane do osadzenia",
|
"HeaderMetadataToEmbed": "Metadane do osadzenia",
|
||||||
"HeaderNewAccount": "Nowe konto",
|
"HeaderNewAccount": "Nowe konto",
|
||||||
"HeaderNewApiKey": "Nowy klucz API",
|
|
||||||
"HeaderNewLibrary": "Nowa biblioteka",
|
"HeaderNewLibrary": "Nowa biblioteka",
|
||||||
"HeaderNotificationCreate": "Utwórz powiadomienie",
|
"HeaderNotificationCreate": "Utwórz powiadomienie",
|
||||||
"HeaderNotificationUpdate": "Zaktualizuj powiadomienie",
|
"HeaderNotificationUpdate": "Zaktualizuj powiadomienie",
|
||||||
@ -181,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "Playlista",
|
"HeaderPlaylist": "Playlista",
|
||||||
"HeaderPlaylistItems": "Pozycje listy odtwarzania",
|
"HeaderPlaylistItems": "Pozycje listy odtwarzania",
|
||||||
"HeaderPodcastsToAdd": "Podcasty do dodania",
|
"HeaderPodcastsToAdd": "Podcasty do dodania",
|
||||||
"HeaderPresets": "Ustawienia wstępne",
|
|
||||||
"HeaderPreviewCover": "Podgląd okładki",
|
"HeaderPreviewCover": "Podgląd okładki",
|
||||||
"HeaderRSSFeedGeneral": "Szczegóły RSS",
|
"HeaderRSSFeedGeneral": "Szczegóły RSS",
|
||||||
"HeaderRSSFeedIsOpen": "Kanał RSS jest otwarty",
|
"HeaderRSSFeedIsOpen": "Kanał RSS jest otwarty",
|
||||||
@ -210,7 +205,6 @@
|
|||||||
"HeaderTableOfContents": "Spis treści",
|
"HeaderTableOfContents": "Spis treści",
|
||||||
"HeaderTools": "Narzędzia",
|
"HeaderTools": "Narzędzia",
|
||||||
"HeaderUpdateAccount": "Zaktualizuj konto",
|
"HeaderUpdateAccount": "Zaktualizuj konto",
|
||||||
"HeaderUpdateApiKey": "Aktualizuj klucz API",
|
|
||||||
"HeaderUpdateAuthor": "Zaktualizuj autorów",
|
"HeaderUpdateAuthor": "Zaktualizuj autorów",
|
||||||
"HeaderUpdateDetails": "Zaktualizuj szczegóły",
|
"HeaderUpdateDetails": "Zaktualizuj szczegóły",
|
||||||
"HeaderUpdateLibrary": "Zaktualizuj bibliotekę",
|
"HeaderUpdateLibrary": "Zaktualizuj bibliotekę",
|
||||||
@ -225,7 +219,6 @@
|
|||||||
"LabelAccountTypeAdmin": "Administrator",
|
"LabelAccountTypeAdmin": "Administrator",
|
||||||
"LabelAccountTypeGuest": "Gość",
|
"LabelAccountTypeGuest": "Gość",
|
||||||
"LabelAccountTypeUser": "Użytkownik",
|
"LabelAccountTypeUser": "Użytkownik",
|
||||||
"LabelActivities": "Aktywności",
|
|
||||||
"LabelActivity": "Aktywność",
|
"LabelActivity": "Aktywność",
|
||||||
"LabelAddToCollection": "Dodaj do kolekcji",
|
"LabelAddToCollection": "Dodaj do kolekcji",
|
||||||
"LabelAddToCollectionBatch": "Dodaj {0} książki do kolekcji",
|
"LabelAddToCollectionBatch": "Dodaj {0} książki do kolekcji",
|
||||||
@ -235,12 +228,10 @@
|
|||||||
"LabelAddedDate": "Dodano {0}",
|
"LabelAddedDate": "Dodano {0}",
|
||||||
"LabelAdminUsersOnly": "Tylko użytkownicy administracyjni",
|
"LabelAdminUsersOnly": "Tylko użytkownicy administracyjni",
|
||||||
"LabelAll": "Wszystkie",
|
"LabelAll": "Wszystkie",
|
||||||
"LabelAllEpisodesDownloaded": "Wszystkie odcinki pobrane",
|
|
||||||
"LabelAllUsers": "Wszyscy użytkownicy",
|
"LabelAllUsers": "Wszyscy użytkownicy",
|
||||||
"LabelAllUsersExcludingGuests": "Wszyscy użytkownicy z wyłączeniem gości",
|
"LabelAllUsersExcludingGuests": "Wszyscy użytkownicy z wyłączeniem gości",
|
||||||
"LabelAllUsersIncludingGuests": "Wszyscy użytkownicy, łącznie z gośćmi",
|
"LabelAllUsersIncludingGuests": "Wszyscy użytkownicy, łącznie z gośćmi",
|
||||||
"LabelAlreadyInYourLibrary": "Już istnieje w twojej bibliotece",
|
"LabelAlreadyInYourLibrary": "Już istnieje w twojej bibliotece",
|
||||||
"LabelApiKeyCreated": "Klucz API \"{0}\" został pomyślnie utworzony.",
|
|
||||||
"LabelApiToken": "API Token",
|
"LabelApiToken": "API Token",
|
||||||
"LabelAppend": "Dołącz",
|
"LabelAppend": "Dołącz",
|
||||||
"LabelAudioBitrate": "Audio Bitrate (np. 128k)",
|
"LabelAudioBitrate": "Audio Bitrate (np. 128k)",
|
||||||
@ -254,7 +245,6 @@
|
|||||||
"LabelAutoFetchMetadata": "Automatycznie pobierz metadane",
|
"LabelAutoFetchMetadata": "Automatycznie pobierz metadane",
|
||||||
"LabelAutoFetchMetadataHelp": "Pobiera metadane dotyczące tytułu, autora i serii, aby usprawnić przesyłanie. Po przesłaniu może być konieczne dopasowanie dodatkowych metadanych.",
|
"LabelAutoFetchMetadataHelp": "Pobiera metadane dotyczące tytułu, autora i serii, aby usprawnić przesyłanie. Po przesłaniu może być konieczne dopasowanie dodatkowych metadanych.",
|
||||||
"LabelAutoLaunch": "Uruchom automatycznie",
|
"LabelAutoLaunch": "Uruchom automatycznie",
|
||||||
"LabelAutoLaunchDescription": "Automatyczne przekierowanie do dostawcy uwierzytelniania podczas przechodzenia na stronę logowania (ręczna zamiana ścieżki <code>/login?autoLaunch=0</code>)",
|
|
||||||
"LabelAutoRegister": "Automatyczna rejestracja",
|
"LabelAutoRegister": "Automatyczna rejestracja",
|
||||||
"LabelAutoRegisterDescription": "Automatycznie utwórz nowych użytkowników po zalogowaniu",
|
"LabelAutoRegisterDescription": "Automatycznie utwórz nowych użytkowników po zalogowaniu",
|
||||||
"LabelBackToUser": "Powrót",
|
"LabelBackToUser": "Powrót",
|
||||||
@ -292,7 +282,6 @@
|
|||||||
"LabelContinueSeries": "Kontynuuj serię",
|
"LabelContinueSeries": "Kontynuuj serię",
|
||||||
"LabelCover": "Okładka",
|
"LabelCover": "Okładka",
|
||||||
"LabelCoverImageURL": "URL okładki",
|
"LabelCoverImageURL": "URL okładki",
|
||||||
"LabelCoverProvider": "Dostawca okładki",
|
|
||||||
"LabelCreatedAt": "Utworzone",
|
"LabelCreatedAt": "Utworzone",
|
||||||
"LabelCronExpression": "Wyrażenie CRON",
|
"LabelCronExpression": "Wyrażenie CRON",
|
||||||
"LabelCurrent": "Aktualny",
|
"LabelCurrent": "Aktualny",
|
||||||
@ -330,18 +319,12 @@
|
|||||||
"LabelEmbeddedCover": "Wbudowana okładka",
|
"LabelEmbeddedCover": "Wbudowana okładka",
|
||||||
"LabelEnable": "Włącz",
|
"LabelEnable": "Włącz",
|
||||||
"LabelEncodingBackupLocation": "Kopia zapasowa twoich oryginalnych plików audio będzie się znajdować w:",
|
"LabelEncodingBackupLocation": "Kopia zapasowa twoich oryginalnych plików audio będzie się znajdować w:",
|
||||||
"LabelEncodingChaptersNotEmbedded": "W audiobookach wielościeżkowych rozdziały nie są osadzone.",
|
|
||||||
"LabelEncodingClearItemCache": "Pamiętaj o okresowym czyszczeniu pamięci podręcznej elementów.",
|
|
||||||
"LabelEncodingFinishedM4B": "Ukończony plik M4B zostanie umieszczony w folderze audiobooka pod adresem:",
|
|
||||||
"LabelEncodingInfoEmbedded": "Metadane zostaną osadzone w ścieżkach audio w folderze z audiobookiem.",
|
|
||||||
"LabelEnd": "Zakończ",
|
"LabelEnd": "Zakończ",
|
||||||
"LabelEndOfChapter": "Koniec rozdziału",
|
"LabelEndOfChapter": "Koniec rozdziału",
|
||||||
"LabelEpisode": "Odcinek",
|
"LabelEpisode": "Odcinek",
|
||||||
"LabelEpisodeTitle": "Tytuł odcinka",
|
"LabelEpisodeTitle": "Tytuł odcinka",
|
||||||
"LabelEpisodeType": "Typ odcinka",
|
"LabelEpisodeType": "Typ odcinka",
|
||||||
"LabelEpisodeUrlFromRssFeed": "Adres URL odcinka z kanału RSS",
|
|
||||||
"LabelEpisodes": "Epizody",
|
"LabelEpisodes": "Epizody",
|
||||||
"LabelEpisodic": "Epizodyczny",
|
|
||||||
"LabelExample": "Przykład",
|
"LabelExample": "Przykład",
|
||||||
"LabelExpandSeries": "Rozwiń serie",
|
"LabelExpandSeries": "Rozwiń serie",
|
||||||
"LabelExpandSubSeries": "Rozwiń podserie",
|
"LabelExpandSubSeries": "Rozwiń podserie",
|
||||||
@ -369,7 +352,6 @@
|
|||||||
"LabelFontScale": "Rozmiar czcionki",
|
"LabelFontScale": "Rozmiar czcionki",
|
||||||
"LabelFontStrikethrough": "Przekreślony",
|
"LabelFontStrikethrough": "Przekreślony",
|
||||||
"LabelFormat": "Format",
|
"LabelFormat": "Format",
|
||||||
"LabelFull": "Pełny",
|
|
||||||
"LabelGenre": "Gatunek",
|
"LabelGenre": "Gatunek",
|
||||||
"LabelGenres": "Gatunki",
|
"LabelGenres": "Gatunki",
|
||||||
"LabelHardDeleteFile": "Usuń trwale plik",
|
"LabelHardDeleteFile": "Usuń trwale plik",
|
||||||
@ -394,7 +376,6 @@
|
|||||||
"LabelIntervalEvery6Hours": "Co 6 godzin",
|
"LabelIntervalEvery6Hours": "Co 6 godzin",
|
||||||
"LabelIntervalEveryDay": "Każdego dnia",
|
"LabelIntervalEveryDay": "Każdego dnia",
|
||||||
"LabelIntervalEveryHour": "Każdej godziny",
|
"LabelIntervalEveryHour": "Każdej godziny",
|
||||||
"LabelIntervalEveryMinute": "Co minutę",
|
|
||||||
"LabelInvert": "Inversja",
|
"LabelInvert": "Inversja",
|
||||||
"LabelItem": "Pozycja",
|
"LabelItem": "Pozycja",
|
||||||
"LabelJumpBackwardAmount": "Przeskocz do tyłu o:",
|
"LabelJumpBackwardAmount": "Przeskocz do tyłu o:",
|
||||||
@ -426,9 +407,6 @@
|
|||||||
"LabelLowestPriority": "Najniższy priorytet",
|
"LabelLowestPriority": "Najniższy priorytet",
|
||||||
"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.",
|
|
||||||
"LabelMaxEpisodesToKeep": "Maksymalna liczba odcinków do zachowania",
|
|
||||||
"LabelMaxEpisodesToKeepHelp": "Wartość 0 wyłącza maksymalny limit. Po automatycznym pobraniu nowego odcinka, najstarszy odcinek zostanie usunięty, jeśli masz ich więcej niż X. Spowoduje to usunięcie tylko 1 odcinka na nowe pobieranie.",
|
|
||||||
"LabelMediaPlayer": "Odtwarzacz",
|
"LabelMediaPlayer": "Odtwarzacz",
|
||||||
"LabelMediaType": "Typ mediów",
|
"LabelMediaType": "Typ mediów",
|
||||||
"LabelMetaTag": "Tag",
|
"LabelMetaTag": "Tag",
|
||||||
@ -441,7 +419,6 @@
|
|||||||
"LabelMissingEbook": "Nie posiada ebooka",
|
"LabelMissingEbook": "Nie posiada ebooka",
|
||||||
"LabelMissingSupplementaryEbook": "Nie posiada dodatkowego ebooka",
|
"LabelMissingSupplementaryEbook": "Nie posiada dodatkowego ebooka",
|
||||||
"LabelMobileRedirectURIs": "Dozwolone URI przekierowań mobilnych",
|
"LabelMobileRedirectURIs": "Dozwolone URI przekierowań mobilnych",
|
||||||
"LabelMobileRedirectURIsDescription": "To jest biała lista prawidłowych adresów URI przekierowań dla aplikacji mobilnych. Domyślny adres to <code>audiobookshelf://oauth</code>, który można usunąć lub dodać inne adresy URI w celu integracji z aplikacjami innych firm. Użycie gwiazdki (<code>*</code>) jako jedynego wpisu zezwala na dowolny URI.",
|
|
||||||
"LabelMore": "Więcej",
|
"LabelMore": "Więcej",
|
||||||
"LabelMoreInfo": "Więcej informacji",
|
"LabelMoreInfo": "Więcej informacji",
|
||||||
"LabelName": "Nazwa",
|
"LabelName": "Nazwa",
|
||||||
@ -471,14 +448,12 @@
|
|||||||
"LabelNumberOfEpisodes": "# Odcinków",
|
"LabelNumberOfEpisodes": "# Odcinków",
|
||||||
"LabelOpenRSSFeed": "Otwórz kanał RSS",
|
"LabelOpenRSSFeed": "Otwórz kanał RSS",
|
||||||
"LabelOverwrite": "Nadpisz",
|
"LabelOverwrite": "Nadpisz",
|
||||||
"LabelPaginationPageXOfY": "Strona {0} z {1}",
|
|
||||||
"LabelPassword": "Hasło",
|
"LabelPassword": "Hasło",
|
||||||
"LabelPath": "Ścieżka",
|
"LabelPath": "Ścieżka",
|
||||||
"LabelPermanent": "Stałe",
|
"LabelPermanent": "Stałe",
|
||||||
"LabelPermissionsAccessAllLibraries": "Ma dostęp do wszystkich bibliotek",
|
"LabelPermissionsAccessAllLibraries": "Ma dostęp do wszystkich bibliotek",
|
||||||
"LabelPermissionsAccessAllTags": "Ma dostęp do wszystkich tagów",
|
"LabelPermissionsAccessAllTags": "Ma dostęp do wszystkich tagów",
|
||||||
"LabelPermissionsAccessExplicitContent": "Ma dostęp do treści oznacznych jako nieprzyzwoite",
|
"LabelPermissionsAccessExplicitContent": "Ma dostęp do treści oznacznych jako nieprzyzwoite",
|
||||||
"LabelPermissionsCreateEreader": "Możliwość stworzenia czytnika e-booków",
|
|
||||||
"LabelPermissionsDelete": "Ma możliwość usuwania",
|
"LabelPermissionsDelete": "Ma możliwość usuwania",
|
||||||
"LabelPermissionsDownload": "Ma możliwość pobierania",
|
"LabelPermissionsDownload": "Ma możliwość pobierania",
|
||||||
"LabelPermissionsUpdate": "Ma możliwość aktualizowania",
|
"LabelPermissionsUpdate": "Ma możliwość aktualizowania",
|
||||||
@ -486,25 +461,19 @@
|
|||||||
"LabelPersonalYearReview": "Podsumowanie twojego roku ({0})",
|
"LabelPersonalYearReview": "Podsumowanie twojego roku ({0})",
|
||||||
"LabelPhotoPathURL": "Scieżka/URL do zdjęcia",
|
"LabelPhotoPathURL": "Scieżka/URL do zdjęcia",
|
||||||
"LabelPlayMethod": "Metoda odtwarzania",
|
"LabelPlayMethod": "Metoda odtwarzania",
|
||||||
"LabelPlayerChapterNumberMarker": "{0} z {1}",
|
|
||||||
"LabelPlaylists": "Listy odtwarzania",
|
"LabelPlaylists": "Listy odtwarzania",
|
||||||
"LabelPodcast": "Podcast",
|
|
||||||
"LabelPodcastSearchRegion": "Obszar wyszukiwania podcastów",
|
"LabelPodcastSearchRegion": "Obszar wyszukiwania podcastów",
|
||||||
"LabelPodcastType": "Typ podcastu",
|
|
||||||
"LabelPodcasts": "Podcasty",
|
"LabelPodcasts": "Podcasty",
|
||||||
"LabelPort": "Port",
|
|
||||||
"LabelPrefixesToIgnore": "Ignorowane prefiksy (wielkość liter nie ma znaczenia)",
|
"LabelPrefixesToIgnore": "Ignorowane prefiksy (wielkość liter nie ma znaczenia)",
|
||||||
"LabelPreventIndexing": "Zapobiega indeksowaniu przez iTunes i Google",
|
"LabelPreventIndexing": "Zapobiega indeksowaniu przez iTunes i Google",
|
||||||
"LabelPrimaryEbook": "Główny ebook",
|
"LabelPrimaryEbook": "Główny ebook",
|
||||||
"LabelProgress": "Postęp",
|
"LabelProgress": "Postęp",
|
||||||
"LabelProvider": "Dostawca",
|
"LabelProvider": "Dostawca",
|
||||||
"LabelProviderAuthorizationValue": "Wartość nagłówka autoryzacji",
|
|
||||||
"LabelPubDate": "Data publikacji",
|
"LabelPubDate": "Data publikacji",
|
||||||
"LabelPublishYear": "Rok publikacji",
|
"LabelPublishYear": "Rok publikacji",
|
||||||
"LabelPublishedDate": "Opublikowano {0}",
|
|
||||||
"LabelPublisher": "Wydawca",
|
"LabelPublisher": "Wydawca",
|
||||||
"LabelPublishers": "Wydawcy",
|
"LabelPublishers": "Wydawcy",
|
||||||
"LabelRSSFeedOpen": "Otwarty Kanał RSS",
|
"LabelRSSFeedOpen": "RSS Feed otwarty",
|
||||||
"LabelRSSFeedPreventIndexing": "Zapobiegaj indeksowaniu",
|
"LabelRSSFeedPreventIndexing": "Zapobiegaj indeksowaniu",
|
||||||
"LabelRSSFeedURL": "URL kanały RSS",
|
"LabelRSSFeedURL": "URL kanały RSS",
|
||||||
"LabelRandomly": "Losowo",
|
"LabelRandomly": "Losowo",
|
||||||
@ -516,22 +485,15 @@
|
|||||||
"LabelRecentlyAdded": "Niedawno dodane",
|
"LabelRecentlyAdded": "Niedawno dodane",
|
||||||
"LabelRecommended": "Polecane",
|
"LabelRecommended": "Polecane",
|
||||||
"LabelRedo": "Wycofaj",
|
"LabelRedo": "Wycofaj",
|
||||||
"LabelRegion": "Region",
|
|
||||||
"LabelReleaseDate": "Data wydania",
|
"LabelReleaseDate": "Data wydania",
|
||||||
"LabelRemoveAllMetadataAbs": "Usuń wszystkie pliki metadata.abs",
|
|
||||||
"LabelRemoveAllMetadataJson": "Usuń wszystkie pliki metadata.json",
|
|
||||||
"LabelRemoveCover": "Usuń okładkę",
|
"LabelRemoveCover": "Usuń okładkę",
|
||||||
"LabelRemoveMetadataFile": "Usuń pliki metadanych z folderów biblioteki",
|
|
||||||
"LabelRemoveMetadataFileHelp": "Usuń wszystkie pliki metadata.json i metadata.abs z {0} folderów.",
|
|
||||||
"LabelRowsPerPage": "Wierszy na stronę",
|
"LabelRowsPerPage": "Wierszy na stronę",
|
||||||
"LabelSearchTerm": "Wyszukiwanie frazy",
|
"LabelSearchTerm": "Wyszukiwanie frazy",
|
||||||
"LabelSearchTitle": "Wyszukaj tytuł",
|
"LabelSearchTitle": "Wyszukaj tytuł",
|
||||||
"LabelSearchTitleOrASIN": "Szukaj tytuł lub ASIN",
|
"LabelSearchTitleOrASIN": "Szukaj tytuł lub ASIN",
|
||||||
"LabelSeason": "Sezon",
|
"LabelSeason": "Sezon",
|
||||||
"LabelSeasonNumber": "Sezon #{0}",
|
|
||||||
"LabelSelectAll": "Wybierz wszystko",
|
"LabelSelectAll": "Wybierz wszystko",
|
||||||
"LabelSelectAllEpisodes": "Wybierz wszystkie odcinki",
|
"LabelSelectAllEpisodes": "Wybierz wszystkie odcinki",
|
||||||
"LabelSelectEpisodesShowing": "Wybierz {0} wyświetlanych odcinków",
|
|
||||||
"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ść",
|
||||||
@ -546,8 +508,6 @@
|
|||||||
"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",
|
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Automatyczne skanowanie 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.",
|
||||||
@ -559,8 +519,6 @@
|
|||||||
"LabelSettingsHideSingleBookSeriesHelp": "Serie, które posiadają tylko jedną książkę, nie będą pokazywane na stronie z seriami i na stronie domowej z półkami.",
|
"LabelSettingsHideSingleBookSeriesHelp": "Serie, które posiadają tylko jedną książkę, nie będą pokazywane na stronie z seriami i na stronie domowej z półkami.",
|
||||||
"LabelSettingsHomePageBookshelfView": "Widok półki z książkami na stronie głównej",
|
"LabelSettingsHomePageBookshelfView": "Widok półki z książkami na stronie głównej",
|
||||||
"LabelSettingsLibraryBookshelfView": "Widok półki z książkami na stronie biblioteki",
|
"LabelSettingsLibraryBookshelfView": "Widok półki z książkami na stronie biblioteki",
|
||||||
"LabelSettingsLibraryMarkAsFinishedWhen": "Oznacz element multimedialny jako ukończony, gdy",
|
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Pomiń poprzednie książki przy kontynuacji serii",
|
|
||||||
"LabelSettingsParseSubtitles": "Przetwarzaj podtytuły",
|
"LabelSettingsParseSubtitles": "Przetwarzaj podtytuły",
|
||||||
"LabelSettingsParseSubtitlesHelp": "Opcja pozwala na pobranie podtytułu z nazwy folderu z audiobookiem. <br>Podtytuł musi być rozdzielony za pomocą separatora \" - \"<br>Przykład: \"Book Title - A Subtitle Here\" podtytuł \"A Subtitle Here\"",
|
"LabelSettingsParseSubtitlesHelp": "Opcja pozwala na pobranie podtytułu z nazwy folderu z audiobookiem. <br>Podtytuł musi być rozdzielony za pomocą separatora \" - \"<br>Przykład: \"Book Title - A Subtitle Here\" podtytuł \"A Subtitle Here\"",
|
||||||
"LabelSettingsPreferMatchedMetadata": "Preferowanie dopasowanych metadanych",
|
"LabelSettingsPreferMatchedMetadata": "Preferowanie dopasowanych metadanych",
|
||||||
@ -584,9 +542,6 @@
|
|||||||
"LabelShowSubtitles": "Pokaż Napisy",
|
"LabelShowSubtitles": "Pokaż Napisy",
|
||||||
"LabelSize": "Rozmiar",
|
"LabelSize": "Rozmiar",
|
||||||
"LabelSleepTimer": "Wyłącznik czasowy",
|
"LabelSleepTimer": "Wyłącznik czasowy",
|
||||||
"LabelSortAscending": "Rosnąco",
|
|
||||||
"LabelSortDescending": "Malejąco",
|
|
||||||
"LabelSortPubDate": "Sortuj według daty publikacji",
|
|
||||||
"LabelStart": "Rozpocznij",
|
"LabelStart": "Rozpocznij",
|
||||||
"LabelStartTime": "Czas rozpoczęcia",
|
"LabelStartTime": "Czas rozpoczęcia",
|
||||||
"LabelStarted": "Rozpoczęty",
|
"LabelStarted": "Rozpoczęty",
|
||||||
@ -608,21 +563,14 @@
|
|||||||
"LabelStatsWeekListening": "Tydzień słuchania",
|
"LabelStatsWeekListening": "Tydzień słuchania",
|
||||||
"LabelSubtitle": "Podtytuł",
|
"LabelSubtitle": "Podtytuł",
|
||||||
"LabelSupportedFileTypes": "Obsługiwane typy plików",
|
"LabelSupportedFileTypes": "Obsługiwane typy plików",
|
||||||
"LabelTag": "Znacznik",
|
|
||||||
"LabelTags": "Tagi",
|
"LabelTags": "Tagi",
|
||||||
"LabelTagsAccessibleToUser": "Tagi dostępne dla użytkownika",
|
"LabelTagsAccessibleToUser": "Tagi dostępne dla użytkownika",
|
||||||
"LabelTagsNotAccessibleToUser": "Znaczniki niedostępne dla użytkownika",
|
|
||||||
"LabelTasks": "Uruchomione zadania",
|
|
||||||
"LabelTextEditorLink": "Link",
|
|
||||||
"LabelTextEditorNumberedList": "Lista numerowana",
|
|
||||||
"LabelTextEditorUnlink": "Usuń link",
|
|
||||||
"LabelThemeDark": "Ciemny",
|
"LabelThemeDark": "Ciemny",
|
||||||
"LabelThemeLight": "Jasny",
|
"LabelThemeLight": "Jasny",
|
||||||
"LabelTimeDurationXHours": "{0} godzin",
|
"LabelTimeDurationXHours": "{0} godzin",
|
||||||
"LabelTimeDurationXMinutes": "{0} minuty",
|
"LabelTimeDurationXMinutes": "{0} minuty",
|
||||||
"LabelTimeDurationXSeconds": "{0} sekundy",
|
"LabelTimeDurationXSeconds": "{0} sekundy",
|
||||||
"LabelTimeInMinutes": "Czas w minutach",
|
"LabelTimeInMinutes": "Czas w minutach",
|
||||||
"LabelTimeLeft": "pozostało {0}",
|
|
||||||
"LabelTimeListened": "Czas odtwarzania",
|
"LabelTimeListened": "Czas odtwarzania",
|
||||||
"LabelTimeListenedToday": "Czas odtwarzania dzisiaj",
|
"LabelTimeListenedToday": "Czas odtwarzania dzisiaj",
|
||||||
"LabelTimeRemaining": "Pozostało {0}",
|
"LabelTimeRemaining": "Pozostało {0}",
|
||||||
@ -630,7 +578,6 @@
|
|||||||
"LabelTitle": "Tytuł",
|
"LabelTitle": "Tytuł",
|
||||||
"LabelToolsEmbedMetadata": "Załącz metadane",
|
"LabelToolsEmbedMetadata": "Załącz metadane",
|
||||||
"LabelToolsEmbedMetadataDescription": "Załącz metadane do plików audio (okładkę oraz znaczniki rozdziałów).",
|
"LabelToolsEmbedMetadataDescription": "Załącz metadane do plików audio (okładkę oraz znaczniki rozdziałów).",
|
||||||
"LabelToolsM4bEncoder": "Enkoder M4B",
|
|
||||||
"LabelToolsMakeM4b": "Generuj plik M4B",
|
"LabelToolsMakeM4b": "Generuj plik M4B",
|
||||||
"LabelToolsMakeM4bDescription": "Tworzy plik w formacie .M4B, który zawiera metadane, okładkę oraz rozdziały.",
|
"LabelToolsMakeM4bDescription": "Tworzy plik w formacie .M4B, który zawiera metadane, okładkę oraz rozdziały.",
|
||||||
"LabelToolsSplitM4b": "Podziel plik .M4B na pliki .MP3",
|
"LabelToolsSplitM4b": "Podziel plik .M4B na pliki .MP3",
|
||||||
@ -643,14 +590,12 @@
|
|||||||
"LabelType": "Typ",
|
"LabelType": "Typ",
|
||||||
"LabelUndo": "Wycofaj",
|
"LabelUndo": "Wycofaj",
|
||||||
"LabelUnknown": "Nieznany",
|
"LabelUnknown": "Nieznany",
|
||||||
"LabelUnknownPublishDate": "Nieznana data publikacji",
|
|
||||||
"LabelUpdateCover": "Zaktalizuj odkładkę",
|
"LabelUpdateCover": "Zaktalizuj odkładkę",
|
||||||
"LabelUpdateCoverHelp": "Umożliwienie nadpisania istniejących okładek dla wybranych książek w przypadku znalezienia dopasowania",
|
"LabelUpdateCoverHelp": "Umożliwienie nadpisania istniejących okładek dla wybranych książek w przypadku znalezienia dopasowania",
|
||||||
"LabelUpdateDetails": "Zaktualizuj szczegóły",
|
"LabelUpdateDetails": "Zaktualizuj szczegóły",
|
||||||
"LabelUpdateDetailsHelp": "Umożliwienie nadpisania istniejących szczegółów dla wybranych książek w przypadku znalezienia dopasowania",
|
"LabelUpdateDetailsHelp": "Umożliwienie nadpisania istniejących szczegółów dla wybranych książek w przypadku znalezienia dopasowania",
|
||||||
"LabelUpdatedAt": "Zaktualizowano",
|
"LabelUpdatedAt": "Zaktualizowano",
|
||||||
"LabelUploaderDragAndDrop": "Przeciągnij i puść foldery lub pliki",
|
"LabelUploaderDragAndDrop": "Przeciągnij i puść foldery lub 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",
|
||||||
"LabelUseChapterTrack": "Użyj ścieżki rozdziału",
|
"LabelUseChapterTrack": "Użyj ścieżki rozdziału",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Добавить",
|
"ButtonAdd": "Добавить",
|
||||||
"ButtonAddApiKey": "Добавить API ключ",
|
|
||||||
"ButtonAddChapters": "Добавить главы",
|
"ButtonAddChapters": "Добавить главы",
|
||||||
"ButtonAddDevice": "Добавить устройство",
|
"ButtonAddDevice": "Добавить устройство",
|
||||||
"ButtonAddLibrary": "Добавить библиотеку",
|
"ButtonAddLibrary": "Добавить библиотеку",
|
||||||
@ -21,7 +20,6 @@
|
|||||||
"ButtonChooseAFolder": "Выбор папки",
|
"ButtonChooseAFolder": "Выбор папки",
|
||||||
"ButtonChooseFiles": "Выбор файлов",
|
"ButtonChooseFiles": "Выбор файлов",
|
||||||
"ButtonClearFilter": "Очистить фильтр",
|
"ButtonClearFilter": "Очистить фильтр",
|
||||||
"ButtonClose": "Закрыть",
|
|
||||||
"ButtonCloseFeed": "Закрыть канал",
|
"ButtonCloseFeed": "Закрыть канал",
|
||||||
"ButtonCloseSession": "Закрыть открытый сеанс",
|
"ButtonCloseSession": "Закрыть открытый сеанс",
|
||||||
"ButtonCollections": "Коллекции",
|
"ButtonCollections": "Коллекции",
|
||||||
@ -121,7 +119,6 @@
|
|||||||
"HeaderAccount": "Учетная запись",
|
"HeaderAccount": "Учетная запись",
|
||||||
"HeaderAddCustomMetadataProvider": "Добавление пользовательского поставщика метаданных",
|
"HeaderAddCustomMetadataProvider": "Добавление пользовательского поставщика метаданных",
|
||||||
"HeaderAdvanced": "Дополнительно",
|
"HeaderAdvanced": "Дополнительно",
|
||||||
"HeaderApiKeys": "API ключи",
|
|
||||||
"HeaderAppriseNotificationSettings": "Настройки оповещений",
|
"HeaderAppriseNotificationSettings": "Настройки оповещений",
|
||||||
"HeaderAudioTracks": "Аудио треки",
|
"HeaderAudioTracks": "Аудио треки",
|
||||||
"HeaderAudiobookTools": "Инструменты файлов аудиокниг",
|
"HeaderAudiobookTools": "Инструменты файлов аудиокниг",
|
||||||
@ -165,7 +162,6 @@
|
|||||||
"HeaderMetadataOrderOfPrecedence": "Порядок приоритета метаданных",
|
"HeaderMetadataOrderOfPrecedence": "Порядок приоритета метаданных",
|
||||||
"HeaderMetadataToEmbed": "Метаинформация для встраивания",
|
"HeaderMetadataToEmbed": "Метаинформация для встраивания",
|
||||||
"HeaderNewAccount": "Новая учетная запись",
|
"HeaderNewAccount": "Новая учетная запись",
|
||||||
"HeaderNewApiKey": "Новый API ключ",
|
|
||||||
"HeaderNewLibrary": "Новая библиотека",
|
"HeaderNewLibrary": "Новая библиотека",
|
||||||
"HeaderNotificationCreate": "Создать уведомление",
|
"HeaderNotificationCreate": "Создать уведомление",
|
||||||
"HeaderNotificationUpdate": "Уведомление об обновлении",
|
"HeaderNotificationUpdate": "Уведомление об обновлении",
|
||||||
@ -181,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "Плейлист",
|
"HeaderPlaylist": "Плейлист",
|
||||||
"HeaderPlaylistItems": "Элементы списка воспроизведения",
|
"HeaderPlaylistItems": "Элементы списка воспроизведения",
|
||||||
"HeaderPodcastsToAdd": "Подкасты для добавления",
|
"HeaderPodcastsToAdd": "Подкасты для добавления",
|
||||||
"HeaderPresets": "Пресеты",
|
|
||||||
"HeaderPreviewCover": "Предпросмотр обложки",
|
"HeaderPreviewCover": "Предпросмотр обложки",
|
||||||
"HeaderRSSFeedGeneral": "Сведения о RSS",
|
"HeaderRSSFeedGeneral": "Сведения о RSS",
|
||||||
"HeaderRSSFeedIsOpen": "RSS-канал открыт",
|
"HeaderRSSFeedIsOpen": "RSS-канал открыт",
|
||||||
@ -210,22 +205,21 @@
|
|||||||
"HeaderTableOfContents": "Содержание",
|
"HeaderTableOfContents": "Содержание",
|
||||||
"HeaderTools": "Инструменты",
|
"HeaderTools": "Инструменты",
|
||||||
"HeaderUpdateAccount": "Обновить учетную запись",
|
"HeaderUpdateAccount": "Обновить учетную запись",
|
||||||
"HeaderUpdateApiKey": "Обновить API ключ",
|
|
||||||
"HeaderUpdateAuthor": "Обновить автора",
|
"HeaderUpdateAuthor": "Обновить автора",
|
||||||
"HeaderUpdateDetails": "Обновить детали",
|
"HeaderUpdateDetails": "Обновить детали",
|
||||||
"HeaderUpdateLibrary": "Обновить библиотеку",
|
"HeaderUpdateLibrary": "Обновить библиотеку",
|
||||||
"HeaderUsers": "Пользователи",
|
"HeaderUsers": "Пользователи",
|
||||||
"HeaderYearReview": "Итоги {0} года",
|
"HeaderYearReview": "Итоги {0} года",
|
||||||
"HeaderYourStats": "Ваша статистика",
|
"HeaderYourStats": "Ваша статистика",
|
||||||
"LabelAbridged": "Сокращенная форма",
|
"LabelAbridged": "Сокращенное издание",
|
||||||
"LabelAbridgedChecked": "Сокращено (отмечено)",
|
"LabelAbridgedChecked": "Сокращено (отмечено)",
|
||||||
"LabelAbridgedUnchecked": "Полное издание (не отмечено)",
|
"LabelAbridgedUnchecked": "Без сокращений (не отмечено)",
|
||||||
"LabelAccessibleBy": "Доступ",
|
"LabelAccessibleBy": "Доступ",
|
||||||
"LabelAccountType": "Тип учетной записи",
|
"LabelAccountType": "Тип учетной записи",
|
||||||
"LabelAccountTypeAdmin": "Администратор",
|
"LabelAccountTypeAdmin": "Администратор",
|
||||||
"LabelAccountTypeGuest": "Гость",
|
"LabelAccountTypeGuest": "Гость",
|
||||||
"LabelAccountTypeUser": "Пользователь",
|
"LabelAccountTypeUser": "Пользователь",
|
||||||
"LabelActivities": "События",
|
"LabelActivities": "Мероприятия",
|
||||||
"LabelActivity": "Активность",
|
"LabelActivity": "Активность",
|
||||||
"LabelAddToCollection": "Добавить в коллекцию",
|
"LabelAddToCollection": "Добавить в коллекцию",
|
||||||
"LabelAddToCollectionBatch": "Добавить {0} книг в коллекцию",
|
"LabelAddToCollectionBatch": "Добавить {0} книг в коллекцию",
|
||||||
@ -240,10 +234,6 @@
|
|||||||
"LabelAllUsersExcludingGuests": "Все пользователи, кроме гостей",
|
"LabelAllUsersExcludingGuests": "Все пользователи, кроме гостей",
|
||||||
"LabelAllUsersIncludingGuests": "Все пользователи, включая гостей",
|
"LabelAllUsersIncludingGuests": "Все пользователи, включая гостей",
|
||||||
"LabelAlreadyInYourLibrary": "Уже в Вашей библиотеке",
|
"LabelAlreadyInYourLibrary": "Уже в Вашей библиотеке",
|
||||||
"LabelApiKeyCreated": "API ключ \"{0}\" успешно создан.",
|
|
||||||
"LabelApiKeyCreatedDescription": "Обязательно скопируйте API-ключ сейчас, так как вы больше не сможете его увидеть.",
|
|
||||||
"LabelApiKeyUser": "Управление от пользователя",
|
|
||||||
"LabelApiKeyUserDescription": "Этот API-ключ будет иметь те же права доступа, что и пользователь, от имени которого он действует. В логах это будет отображаться так же, как если бы пользователь отправлял запрос.",
|
|
||||||
"LabelApiToken": "Токен API",
|
"LabelApiToken": "Токен API",
|
||||||
"LabelAppend": "Добавить",
|
"LabelAppend": "Добавить",
|
||||||
"LabelAudioBitrate": "Битрейт (напр. 128k)",
|
"LabelAudioBitrate": "Битрейт (напр. 128k)",
|
||||||
@ -355,13 +345,9 @@
|
|||||||
"LabelExample": "Пример",
|
"LabelExample": "Пример",
|
||||||
"LabelExpandSeries": "Развернуть серию",
|
"LabelExpandSeries": "Развернуть серию",
|
||||||
"LabelExpandSubSeries": "Развернуть подсерию",
|
"LabelExpandSubSeries": "Развернуть подсерию",
|
||||||
"LabelExpired": "Истекший",
|
"LabelExplicit": "Явный",
|
||||||
"LabelExpiresAt": "Истекает в",
|
"LabelExplicitChecked": "Явный (отмечено)",
|
||||||
"LabelExpiresInSeconds": "Истекает через (секунд)",
|
"LabelExplicitUnchecked": "Не явно (не отмечено)",
|
||||||
"LabelExpiresNever": "Никогда",
|
|
||||||
"LabelExplicit": "18+",
|
|
||||||
"LabelExplicitChecked": "18+ (отмечено)",
|
|
||||||
"LabelExplicitUnchecked": "+18 (не отмечено)",
|
|
||||||
"LabelExportOPML": "Экспорт OPML",
|
"LabelExportOPML": "Экспорт OPML",
|
||||||
"LabelFeedURL": "URL канала",
|
"LabelFeedURL": "URL канала",
|
||||||
"LabelFetchingMetadata": "Извлечение метаданных",
|
"LabelFetchingMetadata": "Извлечение метаданных",
|
||||||
@ -438,7 +424,6 @@
|
|||||||
"LabelLogLevelWarn": "Предупреждение",
|
"LabelLogLevelWarn": "Предупреждение",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Искать новые эпизоды после этой даты",
|
"LabelLookForNewEpisodesAfterDate": "Искать новые эпизоды после этой даты",
|
||||||
"LabelLowestPriority": "Самый низкий приоритет",
|
"LabelLowestPriority": "Самый низкий приоритет",
|
||||||
"LabelMatchConfidence": "Уверенность",
|
|
||||||
"LabelMatchExistingUsersBy": "Сопоставление существующих пользователей по",
|
"LabelMatchExistingUsersBy": "Сопоставление существующих пользователей по",
|
||||||
"LabelMatchExistingUsersByDescription": "Используется для подключения существующих пользователей. После подключения пользователям будет присвоен уникальный идентификатор от поставщика единого входа",
|
"LabelMatchExistingUsersByDescription": "Используется для подключения существующих пользователей. После подключения пользователям будет присвоен уникальный идентификатор от поставщика единого входа",
|
||||||
"LabelMaxEpisodesToDownload": "Максимальное количество эпизодов для загрузки. Используйте 0 для неограниченного количества.",
|
"LabelMaxEpisodesToDownload": "Максимальное количество эпизодов для загрузки. Используйте 0 для неограниченного количества.",
|
||||||
@ -469,7 +454,6 @@
|
|||||||
"LabelNewestEpisodes": "Новые эпизоды",
|
"LabelNewestEpisodes": "Новые эпизоды",
|
||||||
"LabelNextBackupDate": "Следующая дата бэкапирования",
|
"LabelNextBackupDate": "Следующая дата бэкапирования",
|
||||||
"LabelNextScheduledRun": "Следущий запланированный запуск",
|
"LabelNextScheduledRun": "Следущий запланированный запуск",
|
||||||
"LabelNoApiKeys": "API ключи отсутствуют",
|
|
||||||
"LabelNoCustomMetadataProviders": "Нет пользовательских поставщиков метаданных",
|
"LabelNoCustomMetadataProviders": "Нет пользовательских поставщиков метаданных",
|
||||||
"LabelNoEpisodesSelected": "Эпизоды не выбраны",
|
"LabelNoEpisodesSelected": "Эпизоды не выбраны",
|
||||||
"LabelNotFinished": "Не завершено",
|
"LabelNotFinished": "Не завершено",
|
||||||
@ -529,7 +513,7 @@
|
|||||||
"LabelPublishers": "Издатели",
|
"LabelPublishers": "Издатели",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Пользовательский Email владельца",
|
"LabelRSSFeedCustomOwnerEmail": "Пользовательский Email владельца",
|
||||||
"LabelRSSFeedCustomOwnerName": "Пользовательское Имя владельца",
|
"LabelRSSFeedCustomOwnerName": "Пользовательское Имя владельца",
|
||||||
"LabelRSSFeedOpen": "Открыть RSS-ленту",
|
"LabelRSSFeedOpen": "Открыть RSS-канал",
|
||||||
"LabelRSSFeedPreventIndexing": "Запретить индексирование",
|
"LabelRSSFeedPreventIndexing": "Запретить индексирование",
|
||||||
"LabelRSSFeedSlug": "Встроить RSS-канал",
|
"LabelRSSFeedSlug": "Встроить RSS-канал",
|
||||||
"LabelRSSFeedURL": "URL RSS-канала",
|
"LabelRSSFeedURL": "URL RSS-канала",
|
||||||
@ -546,7 +530,6 @@
|
|||||||
"LabelReleaseDate": "Дата выхода",
|
"LabelReleaseDate": "Дата выхода",
|
||||||
"LabelRemoveAllMetadataAbs": "Удалите все файлы metadata.abs",
|
"LabelRemoveAllMetadataAbs": "Удалите все файлы metadata.abs",
|
||||||
"LabelRemoveAllMetadataJson": "Удалите все файлы metadata.json",
|
"LabelRemoveAllMetadataJson": "Удалите все файлы metadata.json",
|
||||||
"LabelRemoveAudibleBranding": "Удалить вступление и концовку Audible из глав",
|
|
||||||
"LabelRemoveCover": "Удалить обложку",
|
"LabelRemoveCover": "Удалить обложку",
|
||||||
"LabelRemoveMetadataFile": "Удаление файлов метаданных в папках элементов библиотеки",
|
"LabelRemoveMetadataFile": "Удаление файлов метаданных в папках элементов библиотеки",
|
||||||
"LabelRemoveMetadataFileHelp": "Удалите все файлы metadata.json и metadata.abs из ваших папок {0}.",
|
"LabelRemoveMetadataFileHelp": "Удалите все файлы metadata.json и metadata.abs из ваших папок {0}.",
|
||||||
@ -559,7 +542,6 @@
|
|||||||
"LabelSelectAll": "Выбрать все",
|
"LabelSelectAll": "Выбрать все",
|
||||||
"LabelSelectAllEpisodes": "Выбрать все эпизоды",
|
"LabelSelectAllEpisodes": "Выбрать все эпизоды",
|
||||||
"LabelSelectEpisodesShowing": "Выберите {0} эпизодов для показа",
|
"LabelSelectEpisodesShowing": "Выберите {0} эпизодов для показа",
|
||||||
"LabelSelectUser": "Выбрать пользователя",
|
|
||||||
"LabelSelectUsers": "Выбор пользователей",
|
"LabelSelectUsers": "Выбор пользователей",
|
||||||
"LabelSendEbookToDevice": "Отправить e-книгу в...",
|
"LabelSendEbookToDevice": "Отправить e-книгу в...",
|
||||||
"LabelSequence": "Последовательность",
|
"LabelSequence": "Последовательность",
|
||||||
@ -724,9 +706,6 @@
|
|||||||
"MessageAddToPlayerQueue": "Добавить в очередь проигрывателя",
|
"MessageAddToPlayerQueue": "Добавить в очередь проигрывателя",
|
||||||
"MessageAppriseDescription": "Для использования этой функции необходимо иметь запущенный экземпляр <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> или api которое обрабатывает те же самые запросы. <br />URL-адрес API Apprise должен быть полным URL-адресом для отправки уведомления, т.е., если API запущено по адресу <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> или api которое обрабатывает те же самые запросы. <br />URL-адрес API Apprise должен быть полным URL-адресом для отправки уведомления, т.е., если API запущено по адресу <code>http://192.168.1.1:8337</code> тогда нужно указать <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Убедитесь, что вы используете ASIN из правильной региональной зоны Audible, а не из Amazon.",
|
"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": "Примечание: Обновление местоположения резервной копии не приведет к перемещению или изменению существующих резервных копий",
|
"MessageBackupsLocationEditNote": "Примечание: Обновление местоположения резервной копии не приведет к перемещению или изменению существующих резервных копий",
|
||||||
"MessageBackupsLocationNoEditNote": "Примечание: Местоположение резервного копирования задается с помощью переменной среды и не может быть изменено здесь.",
|
"MessageBackupsLocationNoEditNote": "Примечание: Местоположение резервного копирования задается с помощью переменной среды и не может быть изменено здесь.",
|
||||||
@ -748,7 +727,6 @@
|
|||||||
"MessageChaptersNotFound": "Главы не найденны",
|
"MessageChaptersNotFound": "Главы не найденны",
|
||||||
"MessageCheckingCron": "Проверка cron...",
|
"MessageCheckingCron": "Проверка cron...",
|
||||||
"MessageConfirmCloseFeed": "Вы уверены, что хотите закрыть этот канал?",
|
"MessageConfirmCloseFeed": "Вы уверены, что хотите закрыть этот канал?",
|
||||||
"MessageConfirmDeleteApiKey": "Вы уверены, что хотите удалить API ключ \"{0}\"?",
|
|
||||||
"MessageConfirmDeleteBackup": "Вы уверены, что хотите удалить бэкап для {0}?",
|
"MessageConfirmDeleteBackup": "Вы уверены, что хотите удалить бэкап для {0}?",
|
||||||
"MessageConfirmDeleteDevice": "Вы уверены, что хотите удалить устройство для чтения электронных книг \"{0}\"?",
|
"MessageConfirmDeleteDevice": "Вы уверены, что хотите удалить устройство для чтения электронных книг \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Это удалит файл из Вашей файловой системы. Вы уверены?",
|
"MessageConfirmDeleteFile": "Это удалит файл из Вашей файловой системы. Вы уверены?",
|
||||||
@ -776,7 +754,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "Вы уверены, что хотите удалить автора \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Вы уверены, что хотите удалить автора \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Вы уверены, что хотите удалить коллекцию \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Вы уверены, что хотите удалить коллекцию \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Вы уверены, что хотите удалить эпизод \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Вы уверены, что хотите удалить эпизод \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Примечание: Это не приведет к удалению аудиофайла, если не включить опцию \"Жесткое удаление файла\"",
|
|
||||||
"MessageConfirmRemoveEpisodes": "Вы уверены, что хотите удалить {0} эпизодов?",
|
"MessageConfirmRemoveEpisodes": "Вы уверены, что хотите удалить {0} эпизодов?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Вы уверены, что хотите удалить {0} сеансов прослушивания?",
|
"MessageConfirmRemoveListeningSessions": "Вы уверены, что хотите удалить {0} сеансов прослушивания?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Вы уверены, что хотите удалить все файлы metadata. {0} файлов из папок элементов вашей библиотеки?",
|
"MessageConfirmRemoveMetadataFiles": "Вы уверены, что хотите удалить все файлы metadata. {0} файлов из папок элементов вашей библиотеки?",
|
||||||
@ -876,7 +853,6 @@
|
|||||||
"MessageScheduleRunEveryWeekdayAtTime": "Запуск каждые {0} по {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Запуск каждые {0} по {1}",
|
||||||
"MessageSearchResultsFor": "Результаты поиска для",
|
"MessageSearchResultsFor": "Результаты поиска для",
|
||||||
"MessageSelected": "{0} выбрано",
|
"MessageSelected": "{0} выбрано",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Последовательность серии должна быть без пропусков",
|
|
||||||
"MessageServerCouldNotBeReached": "Не удалось связаться с сервером",
|
"MessageServerCouldNotBeReached": "Не удалось связаться с сервером",
|
||||||
"MessageSetChaptersFromTracksDescription": "Установка глав с использованием каждого аудиофайла в качестве главы и заголовка главы в качестве имени аудиофайла",
|
"MessageSetChaptersFromTracksDescription": "Установка глав с использованием каждого аудиофайла в качестве главы и заголовка главы в качестве имени аудиофайла",
|
||||||
"MessageShareExpirationWillBe": "Срок действия истекает <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Срок действия истекает <strong>{0}</strong>",
|
||||||
@ -938,8 +914,6 @@
|
|||||||
"NotificationOnBackupCompletedDescription": "Запускается при завершении резервного копирования",
|
"NotificationOnBackupCompletedDescription": "Запускается при завершении резервного копирования",
|
||||||
"NotificationOnBackupFailedDescription": "Срабатывает при сбое резервного копирования",
|
"NotificationOnBackupFailedDescription": "Срабатывает при сбое резервного копирования",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Запускается при автоматической загрузке эпизода подкаста",
|
"NotificationOnEpisodeDownloadedDescription": "Запускается при автоматической загрузке эпизода подкаста",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Срабатывает, когда автоматическая загрузка эпизодов отключена из-за слишком большого количества неудачных попыток",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Срабатывает при сбое запроса RSS-канала на автоматическую загрузку эпизода",
|
|
||||||
"NotificationOnTestDescription": "Событие для тестирования системы оповещения",
|
"NotificationOnTestDescription": "Событие для тестирования системы оповещения",
|
||||||
"PlaceholderNewCollection": "Новое имя коллекции",
|
"PlaceholderNewCollection": "Новое имя коллекции",
|
||||||
"PlaceholderNewFolderPath": "Путь к новой папке",
|
"PlaceholderNewFolderPath": "Путь к новой папке",
|
||||||
@ -997,8 +971,6 @@
|
|||||||
"ToastCachePurgeFailed": "Не удалось очистить кэш",
|
"ToastCachePurgeFailed": "Не удалось очистить кэш",
|
||||||
"ToastCachePurgeSuccess": "Кэш успешно очищен",
|
"ToastCachePurgeSuccess": "Кэш успешно очищен",
|
||||||
"ToastChaptersHaveErrors": "Главы имеют ошибки",
|
"ToastChaptersHaveErrors": "Главы имеют ошибки",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "Некорректное значение сдвига. Начало последней главы будет превышать продолжительность этой аудиокниги.",
|
|
||||||
"ToastChaptersInvalidShiftAmountStart": "Некорректное значение сдвига. Первая глава будет иметь нулевую или отрицательную длину и будет перезаписана второй главой. Увеличьте начальную продолжительность второй главы.",
|
|
||||||
"ToastChaptersMustHaveTitles": "Главы должны содержать названия",
|
"ToastChaptersMustHaveTitles": "Главы должны содержать названия",
|
||||||
"ToastChaptersRemoved": "Удалены главы",
|
"ToastChaptersRemoved": "Удалены главы",
|
||||||
"ToastChaptersUpdated": "Обновленные главы",
|
"ToastChaptersUpdated": "Обновленные главы",
|
||||||
@ -1020,8 +992,6 @@
|
|||||||
"ToastEpisodeDownloadQueueClearSuccess": "Очередь загрузки эпизода очищена",
|
"ToastEpisodeDownloadQueueClearSuccess": "Очередь загрузки эпизода очищена",
|
||||||
"ToastEpisodeUpdateSuccess": "{0 эпизодов обновлено",
|
"ToastEpisodeUpdateSuccess": "{0 эпизодов обновлено",
|
||||||
"ToastErrorCannotShare": "Невозможно предоставить общий доступ на этом устройстве",
|
"ToastErrorCannotShare": "Невозможно предоставить общий доступ на этом устройстве",
|
||||||
"ToastFailedToCreate": "Не удалось создать",
|
|
||||||
"ToastFailedToDelete": "Не удалось удалить",
|
|
||||||
"ToastFailedToLoadData": "Не удалось загрузить данные",
|
"ToastFailedToLoadData": "Не удалось загрузить данные",
|
||||||
"ToastFailedToMatch": "Не удалось найти совпадения",
|
"ToastFailedToMatch": "Не удалось найти совпадения",
|
||||||
"ToastFailedToShare": "Не удалось поделиться",
|
"ToastFailedToShare": "Не удалось поделиться",
|
||||||
@ -1053,7 +1023,6 @@
|
|||||||
"ToastMustHaveAtLeastOnePath": "Должен быть хотя бы один путь",
|
"ToastMustHaveAtLeastOnePath": "Должен быть хотя бы один путь",
|
||||||
"ToastNameEmailRequired": "Имя и адрес электронной почты обязательны",
|
"ToastNameEmailRequired": "Имя и адрес электронной почты обязательны",
|
||||||
"ToastNameRequired": "Имя обязательно для заполнения",
|
"ToastNameRequired": "Имя обязательно для заполнения",
|
||||||
"ToastNewApiKeyUserError": "Необходимо выбрать пользователя",
|
|
||||||
"ToastNewEpisodesFound": "{0} новых эпизодов найдено",
|
"ToastNewEpisodesFound": "{0} новых эпизодов найдено",
|
||||||
"ToastNewUserCreatedFailed": "Не удалось создать учетную запись: \"{0}\"",
|
"ToastNewUserCreatedFailed": "Не удалось создать учетную запись: \"{0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "Новая учетная запись создана",
|
"ToastNewUserCreatedSuccess": "Новая учетная запись создана",
|
||||||
|
@ -346,7 +346,7 @@
|
|||||||
"LabelExample": "Príklad",
|
"LabelExample": "Príklad",
|
||||||
"LabelExpandSeries": "Rozbaliť série",
|
"LabelExpandSeries": "Rozbaliť série",
|
||||||
"LabelExpandSubSeries": "Rozbaliť podsérie",
|
"LabelExpandSubSeries": "Rozbaliť podsérie",
|
||||||
"LabelExplicit": "Explicitný obsah",
|
"LabelExplicit": "Explicitné",
|
||||||
"LabelExplicitChecked": "Explicitné (zaškrtnuté)",
|
"LabelExplicitChecked": "Explicitné (zaškrtnuté)",
|
||||||
"LabelExplicitUnchecked": "Ne-explicitné (nezaškrtnuté)",
|
"LabelExplicitUnchecked": "Ne-explicitné (nezaškrtnuté)",
|
||||||
"LabelExportOPML": "Exportovať OPML",
|
"LabelExportOPML": "Exportovať OPML",
|
||||||
@ -470,7 +470,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",
|
||||||
"LabelNumberOfEpisodes": "# z epizód",
|
"LabelNumberOfEpisodes": "# 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ľ'.",
|
||||||
"LabelOpenIDGroupClaimDescription": "Pri názve požiadavky OpenID sa predpokladá, že obsahuje zoznam užívateľských skupín. Bežne označovaný ako <code>groups</code>. <b>Ak je správne nakonfigurovaný</b>, aplikácia automaticky pridelí role podľa príslušnosti k užívateľským skupinám pod podmienkou, že sú tieto skupiny v požiadavke nazvané (bez ohľadu na veľkosť písmen) ako 'admin', 'user' alebo 'guest'. Požiadavka musí obsahovať zoznam skupín a ak užívateľ patrí do viacerých skupín, aplikácia mu priradí rolu, ktorá zodpovedá skupine s najvyššími prístupovými právami. Ak sa žiadna z poskytnutých skupín nezhoduje, prístup bude zamietnutý.",
|
"LabelOpenIDGroupClaimDescription": "Pri názve požiadavky OpenID sa predpokladá, že obsahuje zoznam užívateľských skupín. Bežne označovaný ako <code>groups</code>. <b>Ak je správne nakonfigurovaný</b>, aplikácia automaticky pridelí role podľa príslušnosti k užívateľským skupinám pod podmienkou, že sú tieto skupiny v požiadavke nazvané (bez ohľadu na veľkosť písmen) ako 'admin', 'user' alebo 'guest'. Požiadavka musí obsahovať zoznam skupín a ak užívateľ patrí do viacerých skupín, aplikácia mu priradí rolu, ktorá zodpovedá skupine s najvyššími prístupovými právami. Ak sa žiadna z poskytnutých skupín nezhoduje, prístup bude zamietnutý.",
|
||||||
@ -500,12 +500,12 @@
|
|||||||
"LabelPodcasts": "Podcasty",
|
"LabelPodcasts": "Podcasty",
|
||||||
"LabelPort": "Prístav",
|
"LabelPort": "Prístav",
|
||||||
"LabelPrefixesToIgnore": "Ignorované predpony (bez ohľadu na veľkosť písmen)",
|
"LabelPrefixesToIgnore": "Ignorované predpony (bez ohľadu na veľkosť písmen)",
|
||||||
"LabelPreventIndexing": "Zabráni indexácii vašich zdrojov službami iTunes a Google podcast directories",
|
"LabelPreventIndexing": "Zabráňte indexovaniu Vášho zdroja službami iTunes a Google podcasts directories",
|
||||||
"LabelPrimaryEbook": "Primárny e-book",
|
"LabelPrimaryEbook": "Primárny e-book",
|
||||||
"LabelProgress": "Stav",
|
"LabelProgress": "Pokrok",
|
||||||
"LabelProvider": "Poskytovateľ",
|
"LabelProvider": "Poskytovateľ",
|
||||||
"LabelProviderAuthorizationValue": "Obsah hlavičky autorizácie",
|
"LabelProviderAuthorizationValue": "Obsah hlavičky autorizácie",
|
||||||
"LabelPubDate": "Dátum publikovania",
|
"LabelPubDate": "Dátum vydania",
|
||||||
"LabelPublishYear": "Rok vydania",
|
"LabelPublishYear": "Rok vydania",
|
||||||
"LabelPublishedDate": "Vydané {0}",
|
"LabelPublishedDate": "Vydané {0}",
|
||||||
"LabelPublishedDecade": "Dekáda vydania",
|
"LabelPublishedDecade": "Dekáda vydania",
|
||||||
@ -520,7 +520,7 @@
|
|||||||
"LabelRSSFeedURL": "URL RSS zdroja",
|
"LabelRSSFeedURL": "URL RSS zdroja",
|
||||||
"LabelRandomly": "Náhodne",
|
"LabelRandomly": "Náhodne",
|
||||||
"LabelReAddSeriesToContinueListening": "Znova pridať série do pokračujúceho počúvania",
|
"LabelReAddSeriesToContinueListening": "Znova pridať série do pokračujúceho počúvania",
|
||||||
"LabelRead": "Načítať",
|
"LabelRead": "Čítať",
|
||||||
"LabelReadAgain": "Čítať znova",
|
"LabelReadAgain": "Čítať znova",
|
||||||
"LabelReadEbookWithoutProgress": "Čítať e-knihu bez sledovania pokroku",
|
"LabelReadEbookWithoutProgress": "Čítať e-knihu bez sledovania pokroku",
|
||||||
"LabelRecentSeries": "Posledné série",
|
"LabelRecentSeries": "Posledné série",
|
||||||
@ -531,7 +531,6 @@
|
|||||||
"LabelReleaseDate": "Dátum vydania",
|
"LabelReleaseDate": "Dátum vydania",
|
||||||
"LabelRemoveAllMetadataAbs": "Odstrániť všetky súbory metadata.abs",
|
"LabelRemoveAllMetadataAbs": "Odstrániť všetky súbory metadata.abs",
|
||||||
"LabelRemoveAllMetadataJson": "Odstrániť všetky súbory metadata.json",
|
"LabelRemoveAllMetadataJson": "Odstrániť všetky súbory metadata.json",
|
||||||
"LabelRemoveAudibleBranding": "Odstrániť z kapitol Audible intro a outro",
|
|
||||||
"LabelRemoveCover": "Odstrániť prebal",
|
"LabelRemoveCover": "Odstrániť prebal",
|
||||||
"LabelRemoveMetadataFile": "Odstrániť súbory metadát z priečinkov položiek v knižnici",
|
"LabelRemoveMetadataFile": "Odstrániť súbory metadát z priečinkov položiek v knižnici",
|
||||||
"LabelRemoveMetadataFileHelp": "Odstrániť všetky súbory metadata.json a metadata.abs vo Vašich {0} priečinkoch.",
|
"LabelRemoveMetadataFileHelp": "Odstrániť všetky súbory metadata.json a metadata.abs vo Vašich {0} priečinkoch.",
|
||||||
@ -548,7 +547,7 @@
|
|||||||
"LabelSendEbookToDevice": "Poslať e-knihu do...",
|
"LabelSendEbookToDevice": "Poslať e-knihu do...",
|
||||||
"LabelSequence": "Postupnosť",
|
"LabelSequence": "Postupnosť",
|
||||||
"LabelSerial": "Na pokračovanie",
|
"LabelSerial": "Na pokračovanie",
|
||||||
"LabelSeries": "Série",
|
"LabelSeries": "Séria",
|
||||||
"LabelSeriesName": "Názov série",
|
"LabelSeriesName": "Názov série",
|
||||||
"LabelSeriesProgress": "Pokrok série",
|
"LabelSeriesProgress": "Pokrok série",
|
||||||
"LabelServerLogLevel": "Úroveň logovania servera",
|
"LabelServerLogLevel": "Úroveň logovania servera",
|
||||||
@ -607,7 +606,7 @@
|
|||||||
"LabelSortAscending": "Vzostupne",
|
"LabelSortAscending": "Vzostupne",
|
||||||
"LabelSortDescending": "Zostupne",
|
"LabelSortDescending": "Zostupne",
|
||||||
"LabelSortPubDate": "Zoradiť podľa dátumu vydania",
|
"LabelSortPubDate": "Zoradiť podľa dátumu vydania",
|
||||||
"LabelStart": "Spustiť",
|
"LabelStart": "Začiatok",
|
||||||
"LabelStartTime": "Čas spustenia",
|
"LabelStartTime": "Čas spustenia",
|
||||||
"LabelStarted": "Začaté",
|
"LabelStarted": "Začaté",
|
||||||
"LabelStartedAt": "Začaté v",
|
"LabelStartedAt": "Začaté v",
|
||||||
@ -615,7 +614,7 @@
|
|||||||
"LabelStatsAuthors": "Autori",
|
"LabelStatsAuthors": "Autori",
|
||||||
"LabelStatsBestDay": "Najlepší deň",
|
"LabelStatsBestDay": "Najlepší deň",
|
||||||
"LabelStatsDailyAverage": "Denný priemer",
|
"LabelStatsDailyAverage": "Denný priemer",
|
||||||
"LabelStatsDays": "Dní",
|
"LabelStatsDays": "Dni",
|
||||||
"LabelStatsDaysListened": "Dní počúvania",
|
"LabelStatsDaysListened": "Dní počúvania",
|
||||||
"LabelStatsHours": "Hodiny",
|
"LabelStatsHours": "Hodiny",
|
||||||
"LabelStatsInARow": "v rade",
|
"LabelStatsInARow": "v rade",
|
||||||
@ -648,7 +647,7 @@
|
|||||||
"LabelTimeLeft": "{0} ponechaných",
|
"LabelTimeLeft": "{0} ponechaných",
|
||||||
"LabelTimeListened": "Čas počúvania",
|
"LabelTimeListened": "Čas počúvania",
|
||||||
"LabelTimeListenedToday": "Dnešný čas počúvania",
|
"LabelTimeListenedToday": "Dnešný čas počúvania",
|
||||||
"LabelTimeRemaining": "Zostáva {0}",
|
"LabelTimeRemaining": "{0} zostávajúcich",
|
||||||
"LabelTimeToShift": "Čas posunutia v sekundách",
|
"LabelTimeToShift": "Čas posunutia v sekundách",
|
||||||
"LabelTitle": "Názov",
|
"LabelTitle": "Názov",
|
||||||
"LabelToolsEmbedMetadata": "Vlož metadáta",
|
"LabelToolsEmbedMetadata": "Vlož metadáta",
|
||||||
@ -685,7 +684,7 @@
|
|||||||
"LabelUseChapterTrack": "Použiť stopu kapitoly",
|
"LabelUseChapterTrack": "Použiť stopu kapitoly",
|
||||||
"LabelUseFullTrack": "Použiť celú stopu",
|
"LabelUseFullTrack": "Použiť celú stopu",
|
||||||
"LabelUseZeroForUnlimited": "Použito 0 pre neobmedzené",
|
"LabelUseZeroForUnlimited": "Použito 0 pre neobmedzené",
|
||||||
"LabelUser": "Používateľ",
|
"LabelUser": "Užívateľ",
|
||||||
"LabelUsername": "Prihlasovacie meno",
|
"LabelUsername": "Prihlasovacie meno",
|
||||||
"LabelValue": "Hodnota",
|
"LabelValue": "Hodnota",
|
||||||
"LabelVersion": "Verzia",
|
"LabelVersion": "Verzia",
|
||||||
@ -704,11 +703,10 @@
|
|||||||
"LabelYourAudiobookDuration": "Dĺžka Vašej audioknihy",
|
"LabelYourAudiobookDuration": "Dĺžka Vašej audioknihy",
|
||||||
"LabelYourBookmarks": "Vaše záložky",
|
"LabelYourBookmarks": "Vaše záložky",
|
||||||
"LabelYourPlaylists": "Vaše playlisty",
|
"LabelYourPlaylists": "Vaše playlisty",
|
||||||
"LabelYourProgress": "Váš aktuálny stav",
|
"LabelYourProgress": "Váš pokrok",
|
||||||
"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.",
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Reštartujte svoj server po uložení, aby mohli byť použité zmeny OIDC.",
|
|
||||||
"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.",
|
||||||
@ -757,7 +755,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "Ste si istý, že chcete odstrániť autora \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Ste si istý, že chcete odstrániť autora \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Ste si istý, že chcete odstrániť zbierku \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Ste si istý, že chcete odstrániť zbierku \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Ste si istý, že chcete odstrániť epizódu \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Ste si istý, že chcete odstrániť epizódu \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Poznámka: Tento krok neodstráni zvukový súbor, pokiaľ nezaškrtnete voľbu \"Nezvratné zmazanie súborov\"",
|
|
||||||
"MessageConfirmRemoveEpisodes": "Ste si istý, že chcete odstrániť {0} epizód?",
|
"MessageConfirmRemoveEpisodes": "Ste si istý, že chcete odstrániť {0} epizód?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Ste si istý, že chcete odstrániť týchto {0} relácií?",
|
"MessageConfirmRemoveListeningSessions": "Ste si istý, že chcete odstrániť týchto {0} relácií?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Ste si istý, že chcete odstrániť všetky súbory metadata.{0} z priečinkov položiek vašej knižnice?",
|
"MessageConfirmRemoveMetadataFiles": "Ste si istý, že chcete odstrániť všetky súbory metadata.{0} z priečinkov položiek vašej knižnice?",
|
||||||
@ -778,10 +775,10 @@
|
|||||||
"MessageEmbedFailed": "Vloženie zlyhalo!",
|
"MessageEmbedFailed": "Vloženie zlyhalo!",
|
||||||
"MessageEmbedFinished": "Vloženie skončené!",
|
"MessageEmbedFinished": "Vloženie skončené!",
|
||||||
"MessageEmbedQueue": "Zaradené do fronty na vloženie metadát ({0} v zozname)",
|
"MessageEmbedQueue": "Zaradené do fronty na vloženie metadát ({0} v zozname)",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} epizód(a) v zozname na sťahovanie",
|
"MessageEpisodesQueuedForDownload": "{0} epizód(-a) v zozname na sťahovanie",
|
||||||
"MessageEreaderDevices": "Na zaistenie dodania e-kníh môže byť nutné zadanie vyššie uvedenej e-mailovej adresy ako overeného odosielateľa v každom z nižšie vypísaných zariadení.",
|
"MessageEreaderDevices": "Na zaistenie dodania e-kníh môže byť nutné zadanie vyššie uvedenej e-mailovej adresy ako overeného odosielateľa v každom z nižšie vypísaných zariadení.",
|
||||||
"MessageFeedURLWillBe": "URL zdroja bude {0}",
|
"MessageFeedURLWillBe": "URL zdroja bude {0}",
|
||||||
"MessageFetching": "Získavam...",
|
"MessageFetching": "Prebieha načítanie...",
|
||||||
"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é.",
|
||||||
"MessageImportantNotice": "Dôležité upozornenie!",
|
"MessageImportantNotice": "Dôležité upozornenie!",
|
||||||
"MessageInsertChapterBelow": "Vložte kapitolu nižšie",
|
"MessageInsertChapterBelow": "Vložte kapitolu nižšie",
|
||||||
@ -789,7 +786,7 @@
|
|||||||
"MessageItemsSelected": "{0} vybraných položiek",
|
"MessageItemsSelected": "{0} vybraných položiek",
|
||||||
"MessageItemsUpdated": "{0} aktualizovaných položiek",
|
"MessageItemsUpdated": "{0} aktualizovaných položiek",
|
||||||
"MessageJoinUsOn": "Pridajte sa k nám",
|
"MessageJoinUsOn": "Pridajte sa k nám",
|
||||||
"MessageLoading": "Načítavam...",
|
"MessageLoading": "Načítanie...",
|
||||||
"MessageLoadingFolders": "Načítanie priečinkov...",
|
"MessageLoadingFolders": "Načítanie priečinkov...",
|
||||||
"MessageLogsDescription": "Záznamy logovania sú uložené v <code>/metadata/logs</code> vo forme JSON súborov. Záznamy kritických chýb sú uložené v <code>/metadata/logs/crash_logs.txt</code>.",
|
"MessageLogsDescription": "Záznamy logovania sú uložené v <code>/metadata/logs</code> vo forme JSON súborov. Záznamy kritických chýb sú uložené v <code>/metadata/logs/crash_logs.txt</code>.",
|
||||||
"MessageM4BFailed": "M4B zlyhalo!",
|
"MessageM4BFailed": "M4B zlyhalo!",
|
||||||
@ -829,7 +826,7 @@
|
|||||||
"MessageNoSeries": "Žiadne série",
|
"MessageNoSeries": "Žiadne série",
|
||||||
"MessageNoTags": "Žiadne štítky",
|
"MessageNoTags": "Žiadne štítky",
|
||||||
"MessageNoTasksRunning": "Žiadne prebiehajúce úlohy",
|
"MessageNoTasksRunning": "Žiadne prebiehajúce úlohy",
|
||||||
"MessageNoUpdatesWereNecessary": "Neboli potrebné žiadne aktualizácie",
|
"MessageNoUpdatesWereNecessary": "Žiadne nutné aktualizácie",
|
||||||
"MessageNoUserPlaylists": "Nemáte žiadny playlist",
|
"MessageNoUserPlaylists": "Nemáte žiadny playlist",
|
||||||
"MessageNoUserPlaylistsHelp": "Playlisty sú súkromné. Každý playlist môže vidieť iba používateľ, ktorý ho vytvoril.",
|
"MessageNoUserPlaylistsHelp": "Playlisty sú súkromné. Každý playlist môže vidieť iba používateľ, ktorý ho vytvoril.",
|
||||||
"MessageNotYetImplemented": "Ešte neimplementované",
|
"MessageNotYetImplemented": "Ešte neimplementované",
|
||||||
@ -857,7 +854,6 @@
|
|||||||
"MessageScheduleRunEveryWeekdayAtTime": "Spustiť každú {0} o {1}",
|
"MessageScheduleRunEveryWeekdayAtTime": "Spustiť každú {0} o {1}",
|
||||||
"MessageSearchResultsFor": "Výsledky vyhľadávania pre",
|
"MessageSearchResultsFor": "Výsledky vyhľadávania pre",
|
||||||
"MessageSelected": "{0} vybrané",
|
"MessageSelected": "{0} vybrané",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Poradie série nemôže obsahovať medzery",
|
|
||||||
"MessageServerCouldNotBeReached": "Nepodarilo sa pripojiť na server",
|
"MessageServerCouldNotBeReached": "Nepodarilo sa pripojiť na server",
|
||||||
"MessageSetChaptersFromTracksDescription": "Nastaviť jednotlivé zvukové súbory ako kapitoly a názvy zvukových súborov ako názvy týchto kapitol",
|
"MessageSetChaptersFromTracksDescription": "Nastaviť jednotlivé zvukové súbory ako kapitoly a názvy zvukových súborov ako názvy týchto kapitol",
|
||||||
"MessageShareExpirationWillBe": "Expiruje <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Expiruje <strong>{0}</strong>",
|
||||||
@ -911,16 +907,14 @@
|
|||||||
"NoteChangeRootPassword": "Root používateľ je jediný používateľ, ktorý môže mať prázdne heslo",
|
"NoteChangeRootPassword": "Root používateľ je jediný používateľ, ktorý môže mať prázdne heslo",
|
||||||
"NoteChapterEditorTimes": "Poznámka: Prvá kapitola musí vždy začínať v 0:00 a začiatok poslednej kapitoly nemôže prekročiť trvanie tejto audioknihy.",
|
"NoteChapterEditorTimes": "Poznámka: Prvá kapitola musí vždy začínať v 0:00 a začiatok poslednej kapitoly nemôže prekročiť trvanie tejto audioknihy.",
|
||||||
"NoteFolderPicker": "Poznámka: Priečinky, ktoré už boli priradené, sa ďalej nezobrazujú",
|
"NoteFolderPicker": "Poznámka: Priečinky, ktoré už boli priradené, sa ďalej nezobrazujú",
|
||||||
"NoteRSSFeedPodcastAppsHttps": "Varovanie: Väčšina podcastových aplikácií požaduje URL RSS zdroja s HTTPS",
|
"NoteRSSFeedPodcastAppsHttps": "Varovanie: Väčšina podcastových aplikácií vyžaduje, aby URL RSS zdroja vyžívala HTTPS",
|
||||||
"NoteRSSFeedPodcastAppsPubDate": "Varovanie: 1 alebo viac vašich epizód neobsahuje infomáciu o dátum vydania. Niektoré podcastové ju vyžadujú.",
|
"NoteRSSFeedPodcastAppsPubDate": "Varovanie: 1 alebo viacero vašich epizód neobsahuje infomáciu o dátume vydania. Niektoré podcastové aplikácie ju vyžadujú.",
|
||||||
"NoteUploaderFoldersWithMediaFiles": "Priečinky obsahujúce súbory médií budú považované za samostatné položky knižnice.",
|
"NoteUploaderFoldersWithMediaFiles": "Priečinky obsahujúce súbory médií budú považované za samostatné položky knižnice.",
|
||||||
"NoteUploaderOnlyAudioFiles": "Ak budú nahraté iba zvukové súbory, každý zvukový súbor bude považovaný za samostatnú audioknihu.",
|
"NoteUploaderOnlyAudioFiles": "Ak budú nahraté iba zvukové súbory, každý zvukový súbor bude považovaný za samostatnú audioknihu.",
|
||||||
"NoteUploaderUnsupportedFiles": "Nepodporované súbory budú ignorované. Pri výbere alebo prenesení priečinka, budú všetky súbory, ktoré nie sú v priečinku niektorej z položiek, ignorované.",
|
"NoteUploaderUnsupportedFiles": "Nepodporované súbory budú ignorované. Pri výbere alebo prenesení priečinka, budú všetky súbory, ktoré nie sú v priečinku niektorej z položiek, ignorované.",
|
||||||
"NotificationOnBackupCompletedDescription": "Spustené po dokončení zálohovania",
|
"NotificationOnBackupCompletedDescription": "Spustené po dokončení zálohovania",
|
||||||
"NotificationOnBackupFailedDescription": "Spustené pri zlyhaní zálohovania",
|
"NotificationOnBackupFailedDescription": "Spustené pri zlyhaní zálohovania",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Spustené po automatickom stiahnutí epizódy podcastu",
|
"NotificationOnEpisodeDownloadedDescription": "Spustené po automatickom stiahnutí epizódy podcastu",
|
||||||
"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",
|
|
||||||
"NotificationOnTestDescription": "Udalosť určená na testovanie systému notifikácií",
|
"NotificationOnTestDescription": "Udalosť určená na testovanie systému notifikácií",
|
||||||
"PlaceholderNewCollection": "Názov novej zbierky",
|
"PlaceholderNewCollection": "Názov novej zbierky",
|
||||||
"PlaceholderNewFolderPath": "Umiestnenie nového priečinka",
|
"PlaceholderNewFolderPath": "Umiestnenie nového priečinka",
|
||||||
@ -978,8 +972,6 @@
|
|||||||
"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á",
|
||||||
"ToastChaptersHaveErrors": "Kapitoly obsahujú chyby",
|
"ToastChaptersHaveErrors": "Kapitoly obsahujú chyby",
|
||||||
"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.",
|
|
||||||
"ToastChaptersMustHaveTitles": "Kapitoly musia mať názvy",
|
"ToastChaptersMustHaveTitles": "Kapitoly musia mať názvy",
|
||||||
"ToastChaptersRemoved": "Kapitoly boli odstránené",
|
"ToastChaptersRemoved": "Kapitoly boli odstránené",
|
||||||
"ToastChaptersUpdated": "Kapitoly boli aktualizované",
|
"ToastChaptersUpdated": "Kapitoly boli aktualizované",
|
||||||
|
@ -514,7 +514,7 @@
|
|||||||
"LabelPublishers": "Izdajatelji",
|
"LabelPublishers": "Izdajatelji",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "E-pošta lastnika po meri",
|
"LabelRSSFeedCustomOwnerEmail": "E-pošta lastnika po meri",
|
||||||
"LabelRSSFeedCustomOwnerName": "Ime lastnika po meri",
|
"LabelRSSFeedCustomOwnerName": "Ime lastnika po meri",
|
||||||
"LabelRSSFeedOpen": "RSS vir je odprt",
|
"LabelRSSFeedOpen": "Odprt vir RSS",
|
||||||
"LabelRSSFeedPreventIndexing": "Prepreči indeksiranje",
|
"LabelRSSFeedPreventIndexing": "Prepreči indeksiranje",
|
||||||
"LabelRSSFeedSlug": "Slug RSS vira",
|
"LabelRSSFeedSlug": "Slug RSS vira",
|
||||||
"LabelRSSFeedURL": "URL vira RSS",
|
"LabelRSSFeedURL": "URL vira RSS",
|
||||||
@ -531,7 +531,6 @@
|
|||||||
"LabelReleaseDate": "Datum izdaje",
|
"LabelReleaseDate": "Datum izdaje",
|
||||||
"LabelRemoveAllMetadataAbs": "Odstrani vse datoteke metadata.abs",
|
"LabelRemoveAllMetadataAbs": "Odstrani vse datoteke metadata.abs",
|
||||||
"LabelRemoveAllMetadataJson": "Odstrani vse datoteke metadata.json",
|
"LabelRemoveAllMetadataJson": "Odstrani vse datoteke metadata.json",
|
||||||
"LabelRemoveAudibleBranding": "Odstrani Audible uvod in zaključek iz poglavij",
|
|
||||||
"LabelRemoveCover": "Odstrani naslovnico",
|
"LabelRemoveCover": "Odstrani naslovnico",
|
||||||
"LabelRemoveMetadataFile": "Odstrani datoteke z metapodatki v mapah elementov knjižnice",
|
"LabelRemoveMetadataFile": "Odstrani datoteke z metapodatki v mapah elementov knjižnice",
|
||||||
"LabelRemoveMetadataFileHelp": "Odstrani vse datoteke metadata.json in metadata.abs v svojih mapah {0}.",
|
"LabelRemoveMetadataFileHelp": "Odstrani vse datoteke metadata.json in metadata.abs v svojih mapah {0}.",
|
||||||
@ -708,7 +707,6 @@
|
|||||||
"MessageAddToPlayerQueue": "Dodaj v čakalno vrsto predvajalnika",
|
"MessageAddToPlayerQueue": "Dodaj v čakalno vrsto predvajalnika",
|
||||||
"MessageAppriseDescription": "Če želite uporabljati to funkcijo, morate imeti zagnano namestitev <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API Apprise</a> ali API, ki bo obravnavala te iste zahteve. <br />Url API-ja Apprise mora biti celotna pot URL-ja za pošiljanje obvestila, npr. če je vaša namestitev API-ja postrežena na <code>http://192.168.1.1:8337</code>, bi morali vnesti <code >http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "Če želite uporabljati to funkcijo, morate imeti zagnano namestitev <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API Apprise</a> ali API, ki bo obravnavala te iste zahteve. <br />Url API-ja Apprise mora biti celotna pot URL-ja za pošiljanje obvestila, npr. če je vaša namestitev API-ja postrežena na <code>http://192.168.1.1:8337</code>, bi morali vnesti <code >http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Prepričajte se, da uporabljate ASIN iz pravilne zvočne regije, ne iz Amazona.",
|
"MessageAsinCheck": "Prepričajte se, da uporabljate ASIN iz pravilne zvočne regije, ne iz Amazona.",
|
||||||
"MessageAuthenticationOIDCChangesRestart": "Za uveljavitev OIDC sprememb, po shranjevanju znova zaženite strežnik.",
|
|
||||||
"MessageBackupsDescription": "Varnostne kopije vključujejo uporabnike, napredek uporabnikov, podrobnosti elementov knjižnice, nastavitve strežnika in slike, shranjene v <code>/metadata/items</code> & <code>/metadata/authors</code>. Varnostne kopije <strong>ne</strong> vključujejo datotek, shranjenih v mapah vaše knjižnice.",
|
"MessageBackupsDescription": "Varnostne kopije vključujejo uporabnike, napredek uporabnikov, podrobnosti elementov knjižnice, nastavitve strežnika in slike, shranjene v <code>/metadata/items</code> & <code>/metadata/authors</code>. Varnostne kopije <strong>ne</strong> vključujejo datotek, shranjenih v mapah vaše knjižnice.",
|
||||||
"MessageBackupsLocationEditNote": "Opomba: Posodabljanje lokacije varnostne kopije ne bo premaknilo ali spremenilo obstoječih varnostnih kopij",
|
"MessageBackupsLocationEditNote": "Opomba: Posodabljanje lokacije varnostne kopije ne bo premaknilo ali spremenilo obstoječih varnostnih kopij",
|
||||||
"MessageBackupsLocationNoEditNote": "Opomba: Lokacija varnostne kopije je nastavljena s spremenljivko okolja in je tu ni mogoče spremeniti.",
|
"MessageBackupsLocationNoEditNote": "Opomba: Lokacija varnostne kopije je nastavljena s spremenljivko okolja in je tu ni mogoče spremeniti.",
|
||||||
@ -757,7 +755,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "Ali ste prepričani, da želite odstraniti avtorja \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Ali ste prepričani, da želite odstraniti avtorja \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Ali ste prepričani, da želite odstraniti zbirko \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Ali ste prepričani, da želite odstraniti zbirko \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Ali ste prepričani, da želite odstraniti epizodo \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Ali ste prepričani, da želite odstraniti epizodo \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Opomba: S tem se zvočna datoteka ne izbriše, razen če vklopite možnost \"Trdo brisanje datoteke\"",
|
|
||||||
"MessageConfirmRemoveEpisodes": "Ali ste prepričani, da želite odstraniti {0} epizod?",
|
"MessageConfirmRemoveEpisodes": "Ali ste prepričani, da želite odstraniti {0} epizod?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Ali ste prepričani, da želite odstraniti {0} sej poslušanja?",
|
"MessageConfirmRemoveListeningSessions": "Ali ste prepričani, da želite odstraniti {0} sej poslušanja?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Ali ste prepričani, da želite odstraniti vse metapodatke.{0} v mapah elementov knjižnice?",
|
"MessageConfirmRemoveMetadataFiles": "Ali ste prepričani, da želite odstraniti vse metapodatke.{0} v mapah elementov knjižnice?",
|
||||||
@ -857,7 +854,6 @@
|
|||||||
"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",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Zaporedje serij ne sme vsebovati presledkov",
|
|
||||||
"MessageServerCouldNotBeReached": "Strežnika ni bilo mogoče doseči",
|
"MessageServerCouldNotBeReached": "Strežnika ni bilo mogoče doseči",
|
||||||
"MessageSetChaptersFromTracksDescription": "Nastavi poglavja z uporabo vsake zvočne datoteke kot poglavja in naslova poglavja kot imena zvočne datoteke",
|
"MessageSetChaptersFromTracksDescription": "Nastavi poglavja z uporabo vsake zvočne datoteke kot poglavja in naslova poglavja kot imena zvočne datoteke",
|
||||||
"MessageShareExpirationWillBe": "Potečeno bo <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Potečeno bo <strong>{0}</strong>",
|
||||||
@ -919,8 +915,6 @@
|
|||||||
"NotificationOnBackupCompletedDescription": "Sproži se, ko je varnostno kopiranje končano",
|
"NotificationOnBackupCompletedDescription": "Sproži se, ko je varnostno kopiranje končano",
|
||||||
"NotificationOnBackupFailedDescription": "Sproži se, ko varnostno kopiranje ne uspe",
|
"NotificationOnBackupFailedDescription": "Sproži se, ko varnostno kopiranje ne uspe",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Sproži se, ko se epizoda podcasta samodejno prenese",
|
"NotificationOnEpisodeDownloadedDescription": "Sproži se, ko se epizoda podcasta samodejno prenese",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Sproži se, ko so samodejni prenosi epizod onemogočeni zaradi preveč neuspelih poskusov",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Sproži se, ko zahteva za vir RSS za samodejni prenos epizode ne uspe",
|
|
||||||
"NotificationOnTestDescription": "Dogodek za testiranje sistema obveščanja",
|
"NotificationOnTestDescription": "Dogodek za testiranje sistema obveščanja",
|
||||||
"PlaceholderNewCollection": "Novo ime zbirke",
|
"PlaceholderNewCollection": "Novo ime zbirke",
|
||||||
"PlaceholderNewFolderPath": "Pot nove mape",
|
"PlaceholderNewFolderPath": "Pot nove mape",
|
||||||
@ -978,8 +972,6 @@
|
|||||||
"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",
|
||||||
"ToastChaptersHaveErrors": "Poglavja imajo napake",
|
"ToastChaptersHaveErrors": "Poglavja imajo napake",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "Neveljavna vrednost zamika. Začetni čas zadnjega poglavja bi presegel trajanje te zvočne knjige.",
|
|
||||||
"ToastChaptersInvalidShiftAmountStart": "Neveljavna vrednost zamika. Prvo poglavje bi imelo ničelno ali negativno dolžino in bi ga prepisalo drugo poglavje. Povečajte začetno trajanje drugega poglavja.",
|
|
||||||
"ToastChaptersMustHaveTitles": "Poglavja morajo imeti naslove",
|
"ToastChaptersMustHaveTitles": "Poglavja morajo imeti naslove",
|
||||||
"ToastChaptersRemoved": "Poglavja so odstranjena",
|
"ToastChaptersRemoved": "Poglavja so odstranjena",
|
||||||
"ToastChaptersUpdated": "Poglavja so posodobljena",
|
"ToastChaptersUpdated": "Poglavja so posodobljena",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Lägg till",
|
"ButtonAdd": "Lägg till",
|
||||||
"ButtonAddApiKey": "Addera API-nyckel",
|
|
||||||
"ButtonAddChapters": "Lägg till kapitel",
|
"ButtonAddChapters": "Lägg till kapitel",
|
||||||
"ButtonAddDevice": "Lägg till enhet",
|
"ButtonAddDevice": "Lägg till enhet",
|
||||||
"ButtonAddLibrary": "Lägg till bibliotek",
|
"ButtonAddLibrary": "Lägg till bibliotek",
|
||||||
@ -21,7 +20,6 @@
|
|||||||
"ButtonChooseAFolder": "Välj en mapp",
|
"ButtonChooseAFolder": "Välj en mapp",
|
||||||
"ButtonChooseFiles": "Välj filer",
|
"ButtonChooseFiles": "Välj filer",
|
||||||
"ButtonClearFilter": "Rensa filter",
|
"ButtonClearFilter": "Rensa filter",
|
||||||
"ButtonClose": "Stäng",
|
|
||||||
"ButtonCloseFeed": "Stäng flöde",
|
"ButtonCloseFeed": "Stäng flöde",
|
||||||
"ButtonCloseSession": "Stäng öppen session",
|
"ButtonCloseSession": "Stäng öppen session",
|
||||||
"ButtonCollections": "Samlingar",
|
"ButtonCollections": "Samlingar",
|
||||||
@ -121,7 +119,6 @@
|
|||||||
"HeaderAccount": "Konto",
|
"HeaderAccount": "Konto",
|
||||||
"HeaderAddCustomMetadataProvider": "Addera egen källa för metadata",
|
"HeaderAddCustomMetadataProvider": "Addera egen källa för metadata",
|
||||||
"HeaderAdvanced": "Avancerad",
|
"HeaderAdvanced": "Avancerad",
|
||||||
"HeaderApiKeys": "API-nyckel",
|
|
||||||
"HeaderAppriseNotificationSettings": "Inställningar av meddelanden med Apprise",
|
"HeaderAppriseNotificationSettings": "Inställningar av meddelanden med Apprise",
|
||||||
"HeaderAudioTracks": "Ljudfiler",
|
"HeaderAudioTracks": "Ljudfiler",
|
||||||
"HeaderAudiobookTools": "Hantering av ljudboksfiler",
|
"HeaderAudiobookTools": "Hantering av ljudboksfiler",
|
||||||
@ -165,7 +162,6 @@
|
|||||||
"HeaderMetadataOrderOfPrecedence": "Prioriteringsordning vid inläsning av metadata",
|
"HeaderMetadataOrderOfPrecedence": "Prioriteringsordning vid inläsning av metadata",
|
||||||
"HeaderMetadataToEmbed": "Metadata som kommer att adderas",
|
"HeaderMetadataToEmbed": "Metadata som kommer att adderas",
|
||||||
"HeaderNewAccount": "Nytt konto",
|
"HeaderNewAccount": "Nytt konto",
|
||||||
"HeaderNewApiKey": "Ny API-nyckel",
|
|
||||||
"HeaderNewLibrary": "Nytt bibliotek",
|
"HeaderNewLibrary": "Nytt bibliotek",
|
||||||
"HeaderNotificationCreate": "Addera ett meddelande",
|
"HeaderNotificationCreate": "Addera ett meddelande",
|
||||||
"HeaderNotificationUpdate": "Uppdateringsnotis",
|
"HeaderNotificationUpdate": "Uppdateringsnotis",
|
||||||
@ -209,7 +205,6 @@
|
|||||||
"HeaderTableOfContents": "Innehållsförteckning",
|
"HeaderTableOfContents": "Innehållsförteckning",
|
||||||
"HeaderTools": "Verktyg",
|
"HeaderTools": "Verktyg",
|
||||||
"HeaderUpdateAccount": "Uppdatera konto",
|
"HeaderUpdateAccount": "Uppdatera konto",
|
||||||
"HeaderUpdateApiKey": "Uppdatera API-nyckel",
|
|
||||||
"HeaderUpdateAuthor": "Uppdatera författare",
|
"HeaderUpdateAuthor": "Uppdatera författare",
|
||||||
"HeaderUpdateDetails": "Uppdatera detaljer om boken",
|
"HeaderUpdateDetails": "Uppdatera detaljer om boken",
|
||||||
"HeaderUpdateLibrary": "Uppdatera bibliotek",
|
"HeaderUpdateLibrary": "Uppdatera bibliotek",
|
||||||
@ -239,9 +234,6 @@
|
|||||||
"LabelAllUsersExcludingGuests": "Alla användare utom gäster",
|
"LabelAllUsersExcludingGuests": "Alla användare utom gäster",
|
||||||
"LabelAllUsersIncludingGuests": "Alla användare inklusive gäster",
|
"LabelAllUsersIncludingGuests": "Alla användare inklusive gäster",
|
||||||
"LabelAlreadyInYourLibrary": "Finns redan i samlingen",
|
"LabelAlreadyInYourLibrary": "Finns redan i samlingen",
|
||||||
"LabelApiKeyCreated": "API-nyckel \"{0}\" har adderats.",
|
|
||||||
"LabelApiKeyCreatedDescription": "Se till att kopiera API-nyckeln omedelbart eftersom du inte kommer att kunna se den igen.",
|
|
||||||
"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",
|
||||||
"LabelAudioBitrate": "Bitrate (t.ex. 128k)",
|
"LabelAudioBitrate": "Bitrate (t.ex. 128k)",
|
||||||
@ -353,11 +345,7 @@
|
|||||||
"LabelExample": "Exempel",
|
"LabelExample": "Exempel",
|
||||||
"LabelExpandSeries": "Expandera serier",
|
"LabelExpandSeries": "Expandera serier",
|
||||||
"LabelExpandSubSeries": "Expandera Underserier",
|
"LabelExpandSubSeries": "Expandera Underserier",
|
||||||
"LabelExpired": "Upphört",
|
"LabelExplicit": "Explicit version",
|
||||||
"LabelExpiresAt": "Gäller till och med",
|
|
||||||
"LabelExpiresInSeconds": "Upphör om (sekunder)",
|
|
||||||
"LabelExpiresNever": "Aldrig",
|
|
||||||
"LabelExplicit": "Bestämd",
|
|
||||||
"LabelExplicitChecked": "Explicit version (markerad)",
|
"LabelExplicitChecked": "Explicit version (markerad)",
|
||||||
"LabelExplicitUnchecked": "Ej Explicit version (ej markerad)",
|
"LabelExplicitUnchecked": "Ej Explicit version (ej markerad)",
|
||||||
"LabelExportOPML": "Exportera OPML-information",
|
"LabelExportOPML": "Exportera OPML-information",
|
||||||
@ -466,7 +454,6 @@
|
|||||||
"LabelNewestEpisodes": "Senaste avsnitten",
|
"LabelNewestEpisodes": "Senaste avsnitten",
|
||||||
"LabelNextBackupDate": "Nästa tillfälle för säkerhetskopiering",
|
"LabelNextBackupDate": "Nästa tillfälle för säkerhetskopiering",
|
||||||
"LabelNextScheduledRun": "Nästa schemalagda körning",
|
"LabelNextScheduledRun": "Nästa schemalagda körning",
|
||||||
"LabelNoApiKeys": "Ingen API-nyckel",
|
|
||||||
"LabelNoCustomMetadataProviders": "Ingen egen källa för metadata",
|
"LabelNoCustomMetadataProviders": "Ingen egen källa för metadata",
|
||||||
"LabelNoEpisodesSelected": "Inga avsnitt har valts",
|
"LabelNoEpisodesSelected": "Inga avsnitt har valts",
|
||||||
"LabelNotFinished": "Ej avslutad",
|
"LabelNotFinished": "Ej avslutad",
|
||||||
@ -483,15 +470,11 @@
|
|||||||
"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",
|
||||||
"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:",
|
|
||||||
"LabelOpenIDClaims": "Lämna följande alternativ tomma för att inaktivera avancerad grupp- och behörighetstilldelning, och tilldela då automatiskt gruppen 'Användare'.",
|
|
||||||
"LabelOpenIDGroupClaimDescription": "Namn på OpenID-anspråket som innehåller en lista över användarens grupper. Vanligtvis kallat <code>groups</code>. <b>Om det är konfigurerat</b> kommer programmet automatiskt att tilldela roller baserat på användarens gruppmedlemskap, förutsatt att dessa grupper namnges utan att skiftlägeskänsligt tolkas som 'admin', 'user' eller 'guest' i anspråket. Anspråket ska innehålla en lista, och om en användare tillhör flera grupper kommer programmet att tilldela den roll som motsvarar den högsta åtkomstnivån. Om ingen grupp matchar kommer åtkomst att nekas.",
|
|
||||||
"LabelOpenRSSFeed": "Öppna RSS-flöde",
|
"LabelOpenRSSFeed": "Öppna RSS-flöde",
|
||||||
"LabelOverwrite": "Skriv över",
|
"LabelOverwrite": "Skriv över",
|
||||||
"LabelPaginationPageXOfY": "Sida {0} av {1}",
|
"LabelPaginationPageXOfY": "Sida {0} av {1}",
|
||||||
"LabelPassword": "Lösenord",
|
"LabelPassword": "Lösenord",
|
||||||
"LabelPath": "Sökväg",
|
"LabelPath": "Sökväg",
|
||||||
"LabelPermanent": "Permanent",
|
|
||||||
"LabelPermissionsAccessAllLibraries": "Kan komma åt alla bibliotek",
|
"LabelPermissionsAccessAllLibraries": "Kan komma åt alla bibliotek",
|
||||||
"LabelPermissionsAccessAllTags": "Kan komma åt alla taggar",
|
"LabelPermissionsAccessAllTags": "Kan komma åt alla taggar",
|
||||||
"LabelPermissionsAccessExplicitContent": "Kan komma åt explicit version",
|
"LabelPermissionsAccessExplicitContent": "Kan komma åt explicit version",
|
||||||
@ -503,7 +486,6 @@
|
|||||||
"LabelPersonalYearReview": "En sammanställning av ditt år, sidan {0}",
|
"LabelPersonalYearReview": "En sammanställning av ditt år, sidan {0}",
|
||||||
"LabelPhotoPathURL": "Bildsökväg/URL",
|
"LabelPhotoPathURL": "Bildsökväg/URL",
|
||||||
"LabelPlayMethod": "Spelläge",
|
"LabelPlayMethod": "Spelläge",
|
||||||
"LabelPlaybackRateIncrementDecrement": "Uppspelningshastighetsökning/minskning",
|
|
||||||
"LabelPlayerChapterNumberMarker": "{0} av {1}",
|
"LabelPlayerChapterNumberMarker": "{0} av {1}",
|
||||||
"LabelPlaylists": "Spellistor",
|
"LabelPlaylists": "Spellistor",
|
||||||
"LabelPodcast": "Podcast",
|
"LabelPodcast": "Podcast",
|
||||||
@ -542,7 +524,6 @@
|
|||||||
"LabelReleaseDate": "Utgivningsdatum",
|
"LabelReleaseDate": "Utgivningsdatum",
|
||||||
"LabelRemoveAllMetadataAbs": "Radera alla 'metadata.abs' filer",
|
"LabelRemoveAllMetadataAbs": "Radera alla 'metadata.abs' filer",
|
||||||
"LabelRemoveAllMetadataJson": "Radera alla 'metadata.json' filer",
|
"LabelRemoveAllMetadataJson": "Radera alla 'metadata.json' filer",
|
||||||
"LabelRemoveAudibleBranding": "Ta bort Audible intro och outro från kapitel",
|
|
||||||
"LabelRemoveCover": "Ta bort omslag",
|
"LabelRemoveCover": "Ta bort omslag",
|
||||||
"LabelRemoveMetadataFile": "Radera metadata-filer i alla mappar i biblioteket",
|
"LabelRemoveMetadataFile": "Radera metadata-filer i alla mappar i biblioteket",
|
||||||
"LabelRemoveMetadataFileHelp": "Radera alla 'metadata.json' och 'metadata.abs' filer i dina {0} mappar.",
|
"LabelRemoveMetadataFileHelp": "Radera alla 'metadata.json' och 'metadata.abs' filer i dina {0} mappar.",
|
||||||
@ -555,7 +536,6 @@
|
|||||||
"LabelSelectAll": "Välj alla",
|
"LabelSelectAll": "Välj alla",
|
||||||
"LabelSelectAllEpisodes": "Välj alla avsnitt",
|
"LabelSelectAllEpisodes": "Välj alla avsnitt",
|
||||||
"LabelSelectEpisodesShowing": "Välj {0} avsnitt som visas",
|
"LabelSelectEpisodesShowing": "Välj {0} avsnitt som visas",
|
||||||
"LabelSelectUser": "Välj användare",
|
|
||||||
"LabelSelectUsers": "Välj användare",
|
"LabelSelectUsers": "Välj användare",
|
||||||
"LabelSendEbookToDevice": "Skicka e-bok till...",
|
"LabelSendEbookToDevice": "Skicka e-bok till...",
|
||||||
"LabelSequence": "Ordningsnummer",
|
"LabelSequence": "Ordningsnummer",
|
||||||
@ -714,7 +694,6 @@
|
|||||||
"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> 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>.",
|
||||||
"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.",
|
|
||||||
"MessageBackupsDescription": "Säkerhetskopior inkluderar användare, användarnas framsteg, biblioteksobjekt,<br>serverinställningar och bilder lagrade i <code>/metadata/items</code> & <code>/metadata/authors</code>.<br>De inkluderar <strong>INTE</strong> några filer lagrade i dina biblioteksmappar.",
|
"MessageBackupsDescription": "Säkerhetskopior inkluderar användare, användarnas framsteg, biblioteksobjekt,<br>serverinställningar och bilder lagrade i <code>/metadata/items</code> & <code>/metadata/authors</code>.<br>De inkluderar <strong>INTE</strong> några filer lagrade i dina biblioteksmappar.",
|
||||||
"MessageBackupsLocationEditNote": "OBS: När du ändrar plats för säkerhetskopiorna så flyttas INTE gamla säkerhetskopior dit",
|
"MessageBackupsLocationEditNote": "OBS: När du ändrar plats för säkerhetskopiorna så flyttas INTE gamla säkerhetskopior dit",
|
||||||
"MessageBackupsLocationNoEditNote": "OBS: Platsen där säkerhetskopiorna lagras bestäms av en central inställning och kan inte ändras här.",
|
"MessageBackupsLocationNoEditNote": "OBS: Platsen där säkerhetskopiorna lagras bestäms av en central inställning och kan inte ändras här.",
|
||||||
@ -735,7 +714,6 @@
|
|||||||
"MessageChapterStartIsAfter": "Kapitlets start är efter din ljudboks slut",
|
"MessageChapterStartIsAfter": "Kapitlets start är efter din ljudboks slut",
|
||||||
"MessageCheckingCron": "Kontrollerar cron...",
|
"MessageCheckingCron": "Kontrollerar cron...",
|
||||||
"MessageConfirmCloseFeed": "Är du säker på att du vill stänga detta flöde?",
|
"MessageConfirmCloseFeed": "Är du säker på att du vill stänga detta flöde?",
|
||||||
"MessageConfirmDeleteApiKey": "Är du säker på att du vill radera API-nyckel \"{0}\"?",
|
|
||||||
"MessageConfirmDeleteBackup": "Är du säker på att du vill radera säkerhetskopian för {0}?",
|
"MessageConfirmDeleteBackup": "Är du säker på att du vill radera säkerhetskopian för {0}?",
|
||||||
"MessageConfirmDeleteDevice": "Är du säkert på att du vill radera enheten för e-böcker \"{0}\"?",
|
"MessageConfirmDeleteDevice": "Är du säkert på att du vill radera enheten för e-böcker \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Detta kommer att radera filen från ditt filsystem. Är du säker?",
|
"MessageConfirmDeleteFile": "Detta kommer att radera filen från ditt filsystem. Är du säker?",
|
||||||
@ -786,7 +764,6 @@
|
|||||||
"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.",
|
||||||
"MessageImportantNotice": "Viktig meddelande!",
|
"MessageImportantNotice": "Viktig meddelande!",
|
||||||
"MessageInsertChapterBelow": "Infoga kapitel nedanför",
|
"MessageInsertChapterBelow": "Infoga kapitel nedanför",
|
||||||
"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å",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Ekle",
|
"ButtonAdd": "Ekle",
|
||||||
"ButtonAddApiKey": "API Anahtarı Ekle",
|
|
||||||
"ButtonAddChapters": "Bölüm Ekle",
|
"ButtonAddChapters": "Bölüm Ekle",
|
||||||
"ButtonAddDevice": "Cihaz Ekle",
|
"ButtonAddDevice": "Cihaz Ekle",
|
||||||
"ButtonAddLibrary": "Kütüphane Ekle",
|
"ButtonAddLibrary": "Kütüphane Ekle",
|
||||||
@ -21,7 +20,6 @@
|
|||||||
"ButtonChooseAFolder": "Klasör seç",
|
"ButtonChooseAFolder": "Klasör seç",
|
||||||
"ButtonChooseFiles": "Dosya seç",
|
"ButtonChooseFiles": "Dosya seç",
|
||||||
"ButtonClearFilter": "Filtreyi Temizle",
|
"ButtonClearFilter": "Filtreyi Temizle",
|
||||||
"ButtonClose": "Kapat",
|
|
||||||
"ButtonCloseFeed": "Akışı Kapat",
|
"ButtonCloseFeed": "Akışı Kapat",
|
||||||
"ButtonCloseSession": "Acık Oturumu Kapat",
|
"ButtonCloseSession": "Acık Oturumu Kapat",
|
||||||
"ButtonCollections": "Koleksiyonlar",
|
"ButtonCollections": "Koleksiyonlar",
|
||||||
@ -97,17 +95,7 @@
|
|||||||
"ButtonSearch": "Ara",
|
"ButtonSearch": "Ara",
|
||||||
"ButtonSelectFolderPath": "Klasör Yolunu Seç",
|
"ButtonSelectFolderPath": "Klasör Yolunu Seç",
|
||||||
"ButtonSeries": "Seriler",
|
"ButtonSeries": "Seriler",
|
||||||
"ButtonShare": "Paylaş",
|
|
||||||
"ButtonStats": "İstatistikler",
|
|
||||||
"ButtonSubmit": "Gönder",
|
"ButtonSubmit": "Gönder",
|
||||||
"ButtonTest": "Dene",
|
|
||||||
"ButtonUnlinkOpenId": "OpenID ilişiğini kaldır",
|
|
||||||
"ButtonUpload": "Yükle",
|
|
||||||
"ButtonUploadBackup": "Yedeği Yükle",
|
|
||||||
"ButtonUploadCover": "Kapağı Yükle",
|
|
||||||
"ButtonUploadOPMLFile": "OPML Dosyası Yükle",
|
|
||||||
"ButtonUserDelete": "{0} kullanıcısını sil.",
|
|
||||||
"ButtonUserEdit": "{0} kullanıcısını düzenle",
|
|
||||||
"ButtonViewAll": "Tümünü Görüntüle",
|
"ButtonViewAll": "Tümünü Görüntüle",
|
||||||
"ButtonYes": "Evet",
|
"ButtonYes": "Evet",
|
||||||
"ErrorUploadFetchMetadataAPI": "Üst veriyi almakta hata",
|
"ErrorUploadFetchMetadataAPI": "Üst veriyi almakta hata",
|
||||||
@ -116,7 +104,6 @@
|
|||||||
"HeaderAccount": "Hesap",
|
"HeaderAccount": "Hesap",
|
||||||
"HeaderAddCustomMetadataProvider": "Özel Üstveri Sağlayıcısı Ekle",
|
"HeaderAddCustomMetadataProvider": "Özel Üstveri Sağlayıcısı Ekle",
|
||||||
"HeaderAdvanced": "Gelişmiş",
|
"HeaderAdvanced": "Gelişmiş",
|
||||||
"HeaderApiKeys": "API Anahtarları",
|
|
||||||
"HeaderAppriseNotificationSettings": "Bildirim Ayarlarının Haberini Ver",
|
"HeaderAppriseNotificationSettings": "Bildirim Ayarlarının Haberini Ver",
|
||||||
"HeaderAudioTracks": "Ses Kanalları",
|
"HeaderAudioTracks": "Ses Kanalları",
|
||||||
"HeaderAudiobookTools": "Sesli Kitap Dosya Yönetim Araçları",
|
"HeaderAudiobookTools": "Sesli Kitap Dosya Yönetim Araçları",
|
||||||
@ -124,23 +111,13 @@
|
|||||||
"HeaderBackups": "Yedeklemeler",
|
"HeaderBackups": "Yedeklemeler",
|
||||||
"HeaderChangePassword": "Parolayı Değiştir",
|
"HeaderChangePassword": "Parolayı Değiştir",
|
||||||
"HeaderChapters": "Bölümler",
|
"HeaderChapters": "Bölümler",
|
||||||
"HeaderChooseAFolder": "Klasör Seç",
|
|
||||||
"HeaderCollection": "Koleksiyon",
|
"HeaderCollection": "Koleksiyon",
|
||||||
"HeaderCollectionItems": "Koleksiyon Öğeleri",
|
"HeaderCollectionItems": "Koleksiyon Öğeleri",
|
||||||
"HeaderCover": "Kapak",
|
|
||||||
"HeaderCurrentDownloads": "Geçerli İndirmeler",
|
|
||||||
"HeaderCustomMessageOnLogin": "Girişteki Kişiselleştirilmiş Mesaj",
|
|
||||||
"HeaderCustomMetadataProviders": "Kişiselleştirilmiş Metadata Sağlayıcıları",
|
|
||||||
"HeaderDetails": "Detaylar",
|
"HeaderDetails": "Detaylar",
|
||||||
"HeaderDownloadQueue": "Kuyruktakileri İndir",
|
|
||||||
"HeaderEbookFiles": "Ebook Dosyaları",
|
"HeaderEbookFiles": "Ebook Dosyaları",
|
||||||
"HeaderEmail": "Email",
|
|
||||||
"HeaderEmailSettings": "Email Ayarları",
|
|
||||||
"HeaderEpisodes": "Bölümler",
|
"HeaderEpisodes": "Bölümler",
|
||||||
"HeaderEreaderDevices": "Ekitap Cihazları",
|
|
||||||
"HeaderEreaderSettings": "Ereader Ayarları",
|
"HeaderEreaderSettings": "Ereader Ayarları",
|
||||||
"HeaderFiles": "Dosyalar",
|
"HeaderFiles": "Dosyalar",
|
||||||
"HeaderFindChapters": "Bölümleri Bul",
|
|
||||||
"HeaderIgnoredFiles": "Görmezden Gelinen Dosyalar",
|
"HeaderIgnoredFiles": "Görmezden Gelinen Dosyalar",
|
||||||
"HeaderItemFiles": "Öğe Dosyaları",
|
"HeaderItemFiles": "Öğe Dosyaları",
|
||||||
"HeaderItemMetadataUtils": "Öğe Üstveri Araçları",
|
"HeaderItemMetadataUtils": "Öğe Üstveri Araçları",
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Додати",
|
"ButtonAdd": "Додати",
|
||||||
"ButtonAddApiKey": "Додати ключ API",
|
|
||||||
"ButtonAddChapters": "Додати глави",
|
"ButtonAddChapters": "Додати глави",
|
||||||
"ButtonAddDevice": "Додати пристрій",
|
"ButtonAddDevice": "Додати пристрій",
|
||||||
"ButtonAddLibrary": "Додати бібліотеку",
|
"ButtonAddLibrary": "Додати бібліотеку",
|
||||||
"ButtonAddPodcasts": "Додати подкасти",
|
"ButtonAddPodcasts": "Додати подкаст",
|
||||||
"ButtonAddUser": "Додати користувача",
|
"ButtonAddUser": "Додати користувача",
|
||||||
"ButtonAddYourFirstLibrary": "Додайте вашу першу бібліотеку",
|
"ButtonAddYourFirstLibrary": "Додайте вашу першу бібліотеку",
|
||||||
"ButtonApply": "Застосувати",
|
"ButtonApply": "Застосувати",
|
||||||
@ -17,11 +16,10 @@
|
|||||||
"ButtonCancel": "Скасувати",
|
"ButtonCancel": "Скасувати",
|
||||||
"ButtonCancelEncode": "Скасувати кодування",
|
"ButtonCancelEncode": "Скасувати кодування",
|
||||||
"ButtonChangeRootPassword": "Змінити кореневий пароль",
|
"ButtonChangeRootPassword": "Змінити кореневий пароль",
|
||||||
"ButtonCheckAndDownloadNewEpisodes": "Перевірити та скачати нові епізоди",
|
"ButtonCheckAndDownloadNewEpisodes": "Перевірити та завантажити нові епізоди",
|
||||||
"ButtonChooseAFolder": "Обрати теку",
|
"ButtonChooseAFolder": "Обрати теку",
|
||||||
"ButtonChooseFiles": "Обрати файли",
|
"ButtonChooseFiles": "Обрати файли",
|
||||||
"ButtonClearFilter": "Очистити фільтр",
|
"ButtonClearFilter": "Очистити фільтр",
|
||||||
"ButtonClose": "Закрити",
|
|
||||||
"ButtonCloseFeed": "Закрити стрічку",
|
"ButtonCloseFeed": "Закрити стрічку",
|
||||||
"ButtonCloseSession": "Закрити відкритий сеанс",
|
"ButtonCloseSession": "Закрити відкритий сеанс",
|
||||||
"ButtonCollections": "Добірки",
|
"ButtonCollections": "Добірки",
|
||||||
@ -34,8 +32,8 @@
|
|||||||
"ButtonEditChapters": "Редагувати глави",
|
"ButtonEditChapters": "Редагувати глави",
|
||||||
"ButtonEditPodcast": "Редагувати подкаст",
|
"ButtonEditPodcast": "Редагувати подкаст",
|
||||||
"ButtonEnable": "Увімкнути",
|
"ButtonEnable": "Увімкнути",
|
||||||
"ButtonFireAndFail": "Виконати і завершити з помилкою",
|
"ButtonFireAndFail": "Вогонь і невдача",
|
||||||
"ButtonFireOnTest": "Виконати подію onTest",
|
"ButtonFireOnTest": "Випробування на вогнестійкість",
|
||||||
"ButtonForceReScan": "Примусово сканувати",
|
"ButtonForceReScan": "Примусово сканувати",
|
||||||
"ButtonFullPath": "Повний шлях",
|
"ButtonFullPath": "Повний шлях",
|
||||||
"ButtonHide": "Приховати",
|
"ButtonHide": "Приховати",
|
||||||
@ -46,7 +44,7 @@
|
|||||||
"ButtonLatest": "Останні",
|
"ButtonLatest": "Останні",
|
||||||
"ButtonLibrary": "Бібліотека",
|
"ButtonLibrary": "Бібліотека",
|
||||||
"ButtonLogout": "Вийти",
|
"ButtonLogout": "Вийти",
|
||||||
"ButtonLookup": "Пошуки",
|
"ButtonLookup": "Пошук",
|
||||||
"ButtonManageTracks": "Керувати доріжками",
|
"ButtonManageTracks": "Керувати доріжками",
|
||||||
"ButtonMapChapterTitles": "Призначити назви глав",
|
"ButtonMapChapterTitles": "Призначити назви глав",
|
||||||
"ButtonMatchAllAuthors": "Віднайти усіх авторів",
|
"ButtonMatchAllAuthors": "Віднайти усіх авторів",
|
||||||
@ -59,7 +57,7 @@
|
|||||||
"ButtonOpenFeed": "Відкрити стрічку",
|
"ButtonOpenFeed": "Відкрити стрічку",
|
||||||
"ButtonOpenManager": "Відкрити менеджер",
|
"ButtonOpenManager": "Відкрити менеджер",
|
||||||
"ButtonPause": "Пауза",
|
"ButtonPause": "Пауза",
|
||||||
"ButtonPlay": "Відтворити",
|
"ButtonPlay": "Слухати",
|
||||||
"ButtonPlayAll": "Відтворити все",
|
"ButtonPlayAll": "Відтворити все",
|
||||||
"ButtonPlaying": "Відтворюється",
|
"ButtonPlaying": "Відтворюється",
|
||||||
"ButtonPlaylists": "Списки відтворення",
|
"ButtonPlaylists": "Списки відтворення",
|
||||||
@ -88,7 +86,7 @@
|
|||||||
"ButtonResetToDefault": "Скинути до стандартних",
|
"ButtonResetToDefault": "Скинути до стандартних",
|
||||||
"ButtonRestore": "Відновити",
|
"ButtonRestore": "Відновити",
|
||||||
"ButtonSave": "Зберегти",
|
"ButtonSave": "Зберегти",
|
||||||
"ButtonSaveAndClose": "Зберегти і закрити",
|
"ButtonSaveAndClose": "Зберегти та закрити",
|
||||||
"ButtonSaveTracklist": "Зберегти порядок",
|
"ButtonSaveTracklist": "Зберегти порядок",
|
||||||
"ButtonScan": "Сканувати",
|
"ButtonScan": "Сканувати",
|
||||||
"ButtonScanLibrary": "Сканувати бібліотеку",
|
"ButtonScanLibrary": "Сканувати бібліотеку",
|
||||||
@ -105,7 +103,7 @@
|
|||||||
"ButtonStartMetadataEmbed": "Почати вбудування метаданих",
|
"ButtonStartMetadataEmbed": "Почати вбудування метаданих",
|
||||||
"ButtonStats": "Статистика",
|
"ButtonStats": "Статистика",
|
||||||
"ButtonSubmit": "Надіслати",
|
"ButtonSubmit": "Надіслати",
|
||||||
"ButtonTest": "Тест",
|
"ButtonTest": "Перевірити",
|
||||||
"ButtonUnlinkOpenId": "Вимкнути OpenID",
|
"ButtonUnlinkOpenId": "Вимкнути OpenID",
|
||||||
"ButtonUpload": "Завантажити",
|
"ButtonUpload": "Завантажити",
|
||||||
"ButtonUploadBackup": "Завантажити резервну копію",
|
"ButtonUploadBackup": "Завантажити резервну копію",
|
||||||
@ -117,11 +115,10 @@
|
|||||||
"ButtonYes": "Так",
|
"ButtonYes": "Так",
|
||||||
"ErrorUploadFetchMetadataAPI": "Помилка при отриманні метаданих",
|
"ErrorUploadFetchMetadataAPI": "Помилка при отриманні метаданих",
|
||||||
"ErrorUploadFetchMetadataNoResults": "Не вдалося отримати метадані — спробуйте оновити заголовок та/або автора",
|
"ErrorUploadFetchMetadataNoResults": "Не вдалося отримати метадані — спробуйте оновити заголовок та/або автора",
|
||||||
"ErrorUploadLacksTitle": "Потрібна назва",
|
"ErrorUploadLacksTitle": "Назва обов'язкова",
|
||||||
"HeaderAccount": "Профіль",
|
"HeaderAccount": "Профіль",
|
||||||
"HeaderAddCustomMetadataProvider": "Додати користувацький постачальник метаданих",
|
"HeaderAddCustomMetadataProvider": "Додати користувацький постачальник метаданих",
|
||||||
"HeaderAdvanced": "Розширені",
|
"HeaderAdvanced": "Розширені",
|
||||||
"HeaderApiKeys": "Ключі API",
|
|
||||||
"HeaderAppriseNotificationSettings": "Налаштування сповіщень Apprise",
|
"HeaderAppriseNotificationSettings": "Налаштування сповіщень Apprise",
|
||||||
"HeaderAudioTracks": "Аудіодоріжки",
|
"HeaderAudioTracks": "Аудіодоріжки",
|
||||||
"HeaderAudiobookTools": "Інструменти керування файлами книг",
|
"HeaderAudiobookTools": "Інструменти керування файлами книг",
|
||||||
@ -133,11 +130,11 @@
|
|||||||
"HeaderCollection": "Добірка",
|
"HeaderCollection": "Добірка",
|
||||||
"HeaderCollectionItems": "Елементи добірки",
|
"HeaderCollectionItems": "Елементи добірки",
|
||||||
"HeaderCover": "Обкладинка",
|
"HeaderCover": "Обкладинка",
|
||||||
"HeaderCurrentDownloads": "Поточні скачування",
|
"HeaderCurrentDownloads": "Поточні завантаження",
|
||||||
"HeaderCustomMessageOnLogin": "Повідомлення при вході",
|
"HeaderCustomMessageOnLogin": "Повідомлення при вході",
|
||||||
"HeaderCustomMetadataProviders": "Постачальники метаданих",
|
"HeaderCustomMetadataProviders": "Постачальники метаданих",
|
||||||
"HeaderDetails": "Подробиці",
|
"HeaderDetails": "Подробиці",
|
||||||
"HeaderDownloadQueue": "Черга скачувань",
|
"HeaderDownloadQueue": "Черга завантажень",
|
||||||
"HeaderEbookFiles": "Файли електронних книг",
|
"HeaderEbookFiles": "Файли електронних книг",
|
||||||
"HeaderEmail": "Електронна пошта",
|
"HeaderEmail": "Електронна пошта",
|
||||||
"HeaderEmailSettings": "Налаштування електронної пошти",
|
"HeaderEmailSettings": "Налаштування електронної пошти",
|
||||||
@ -155,17 +152,16 @@
|
|||||||
"HeaderLibraryFiles": "Файли бібліотеки",
|
"HeaderLibraryFiles": "Файли бібліотеки",
|
||||||
"HeaderLibraryStats": "Статистика бібліотеки",
|
"HeaderLibraryStats": "Статистика бібліотеки",
|
||||||
"HeaderListeningSessions": "Сеанси прослуховування",
|
"HeaderListeningSessions": "Сеанси прослуховування",
|
||||||
"HeaderListeningStats": "Статистика прослуховування",
|
"HeaderListeningStats": "Статистика відтворення",
|
||||||
"HeaderLogin": "Вхід",
|
"HeaderLogin": "Вхід",
|
||||||
"HeaderLogs": "Журнал",
|
"HeaderLogs": "Журнал",
|
||||||
"HeaderManageGenres": "Керувати жанрами",
|
"HeaderManageGenres": "Керувати жанрами",
|
||||||
"HeaderManageTags": "Керувати мітками",
|
"HeaderManageTags": "Керувати мітками",
|
||||||
"HeaderMapDetails": "Призначити подробиці",
|
"HeaderMapDetails": "Призначити подробиці",
|
||||||
"HeaderMatch": "Допасуй",
|
"HeaderMatch": "Пошук",
|
||||||
"HeaderMetadataOrderOfPrecedence": "Порядок метаданих",
|
"HeaderMetadataOrderOfPrecedence": "Порядок метаданих",
|
||||||
"HeaderMetadataToEmbed": "Вбудувати метадані",
|
"HeaderMetadataToEmbed": "Вбудувати метадані",
|
||||||
"HeaderNewAccount": "Новий профіль",
|
"HeaderNewAccount": "Новий профіль",
|
||||||
"HeaderNewApiKey": "Новий ключ API",
|
|
||||||
"HeaderNewLibrary": "Нова бібліотека",
|
"HeaderNewLibrary": "Нова бібліотека",
|
||||||
"HeaderNotificationCreate": "Створити сповіщення",
|
"HeaderNotificationCreate": "Створити сповіщення",
|
||||||
"HeaderNotificationUpdate": "Оновити сповіщення",
|
"HeaderNotificationUpdate": "Оновити сповіщення",
|
||||||
@ -180,7 +176,7 @@
|
|||||||
"HeaderPlayerSettings": "Налаштування програвача",
|
"HeaderPlayerSettings": "Налаштування програвача",
|
||||||
"HeaderPlaylist": "Список відтворення",
|
"HeaderPlaylist": "Список відтворення",
|
||||||
"HeaderPlaylistItems": "Елементи списку відтворення",
|
"HeaderPlaylistItems": "Елементи списку відтворення",
|
||||||
"HeaderPodcastsToAdd": "Подкасти для додання",
|
"HeaderPodcastsToAdd": "Додати подкасти",
|
||||||
"HeaderPresets": "Пресети",
|
"HeaderPresets": "Пресети",
|
||||||
"HeaderPreviewCover": "Попередній перегляд",
|
"HeaderPreviewCover": "Попередній перегляд",
|
||||||
"HeaderRSSFeedGeneral": "Подробиці RSS",
|
"HeaderRSSFeedGeneral": "Подробиці RSS",
|
||||||
@ -190,7 +186,7 @@
|
|||||||
"HeaderRemoveEpisodes": "Видалити епізодів: {0}",
|
"HeaderRemoveEpisodes": "Видалити епізодів: {0}",
|
||||||
"HeaderSavedMediaProgress": "Збережений прогрес медіа",
|
"HeaderSavedMediaProgress": "Збережений прогрес медіа",
|
||||||
"HeaderSchedule": "Розклад",
|
"HeaderSchedule": "Розклад",
|
||||||
"HeaderScheduleEpisodeDownloads": "Запланувати автоматичне скачування епізодів",
|
"HeaderScheduleEpisodeDownloads": "Запланувати автоматичне завантаження епізодів",
|
||||||
"HeaderScheduleLibraryScans": "Розклад автосканування бібліотеки",
|
"HeaderScheduleLibraryScans": "Розклад автосканування бібліотеки",
|
||||||
"HeaderSession": "Сеанс",
|
"HeaderSession": "Сеанс",
|
||||||
"HeaderSetBackupSchedule": "Встановити розклад резервного копіювання",
|
"HeaderSetBackupSchedule": "Встановити розклад резервного копіювання",
|
||||||
@ -210,7 +206,6 @@
|
|||||||
"HeaderTableOfContents": "Зміст",
|
"HeaderTableOfContents": "Зміст",
|
||||||
"HeaderTools": "Інструменти",
|
"HeaderTools": "Інструменти",
|
||||||
"HeaderUpdateAccount": "Оновити профіль",
|
"HeaderUpdateAccount": "Оновити профіль",
|
||||||
"HeaderUpdateApiKey": "Оновити ключ API",
|
|
||||||
"HeaderUpdateAuthor": "Оновити автора",
|
"HeaderUpdateAuthor": "Оновити автора",
|
||||||
"HeaderUpdateDetails": "Оновити подробиці",
|
"HeaderUpdateDetails": "Оновити подробиці",
|
||||||
"HeaderUpdateLibrary": "Оновити бібліотеку",
|
"HeaderUpdateLibrary": "Оновити бібліотеку",
|
||||||
@ -228,25 +223,21 @@
|
|||||||
"LabelActivities": "Діяльність",
|
"LabelActivities": "Діяльність",
|
||||||
"LabelActivity": "Активність",
|
"LabelActivity": "Активність",
|
||||||
"LabelAddToCollection": "Додати у добірку",
|
"LabelAddToCollection": "Додати у добірку",
|
||||||
"LabelAddToCollectionBatch": "Додати {0} книг до добірки",
|
"LabelAddToCollectionBatch": "Додати книги до добірки: {0}",
|
||||||
"LabelAddToPlaylist": "Додати до списку відтворення",
|
"LabelAddToPlaylist": "Додати до списку відтворення",
|
||||||
"LabelAddToPlaylistBatch": "Додати {0} елементів до списку відтворення",
|
"LabelAddToPlaylistBatch": "Додано елементів у список відтворення: {0}",
|
||||||
"LabelAddedAt": "Дата додавання",
|
"LabelAddedAt": "Дата додавання",
|
||||||
"LabelAddedDate": "Додано {0}",
|
"LabelAddedDate": "Додано {0}",
|
||||||
"LabelAdminUsersOnly": "Тільки для адміністраторів",
|
"LabelAdminUsersOnly": "Тільки для адміністраторів",
|
||||||
"LabelAll": "Усе",
|
"LabelAll": "Усе",
|
||||||
"LabelAllEpisodesDownloaded": "Усі епізоди скачано",
|
"LabelAllEpisodesDownloaded": "Усі серії завантажено",
|
||||||
"LabelAllUsers": "Усі користувачі",
|
"LabelAllUsers": "Усі користувачі",
|
||||||
"LabelAllUsersExcludingGuests": "Усі, крім гостей",
|
"LabelAllUsersExcludingGuests": "Усі, крім гостей",
|
||||||
"LabelAllUsersIncludingGuests": "Усі, включно з гостями",
|
"LabelAllUsersIncludingGuests": "Усі, включно з гостями",
|
||||||
"LabelAlreadyInYourLibrary": "Вже у вашій бібліотеці",
|
"LabelAlreadyInYourLibrary": "Вже у вашій бібліотеці",
|
||||||
"LabelApiKeyCreated": "Ключ API \"{0}\" успішно створено.",
|
|
||||||
"LabelApiKeyCreatedDescription": "Обов’язково скопіюйте ключ API зараз, оскільки ви більше не зможете його побачити.",
|
|
||||||
"LabelApiKeyUser": "Діяти від імені користувача",
|
|
||||||
"LabelApiKeyUserDescription": "Цей ключ API матиме ті самі дозволи, що й користувач, від імені якого він діє. Це відображатиметься в журналах так само, як і в разі надсилання запиту користувачем.",
|
|
||||||
"LabelApiToken": "Токен API",
|
"LabelApiToken": "Токен API",
|
||||||
"LabelAppend": "Додати",
|
"LabelAppend": "Додати",
|
||||||
"LabelAudioBitrate": "Бітрейт аудіо (наприклад, 128k)",
|
"LabelAudioBitrate": "Бітрейт аудіо (напр. 128k)",
|
||||||
"LabelAudioChannels": "Канали аудіо (1 або 2)",
|
"LabelAudioChannels": "Канали аудіо (1 або 2)",
|
||||||
"LabelAudioCodec": "Аудіокодек",
|
"LabelAudioCodec": "Аудіокодек",
|
||||||
"LabelAuthor": "Автор",
|
"LabelAuthor": "Автор",
|
||||||
@ -265,18 +256,18 @@
|
|||||||
"LabelBackupLocation": "Розташування резервних копій",
|
"LabelBackupLocation": "Розташування резервних копій",
|
||||||
"LabelBackupsEnableAutomaticBackups": "Автоматичне резервне копіювання",
|
"LabelBackupsEnableAutomaticBackups": "Автоматичне резервне копіювання",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "Резервні копії збережено у /metadata/backups",
|
"LabelBackupsEnableAutomaticBackupsHelp": "Резервні копії збережено у /metadata/backups",
|
||||||
"LabelBackupsMaxBackupSize": "Максимальний розмір резервної копії (у ГБ) (0 — без обмежень)",
|
"LabelBackupsMaxBackupSize": "Максимальний розмір резервної копії (у ГБ) (0 — необмежене)",
|
||||||
"LabelBackupsMaxBackupSizeHelp": "У якості захисту від неправильного налаштування, резервну копію не буде збережено, якщо її розмір перевищуватиме вказаний.",
|
"LabelBackupsMaxBackupSizeHelp": "У якості захисту від неправильного налаштування, резервну копію не буде збережено, якщо її розмір перевищуватиме вказаний.",
|
||||||
"LabelBackupsNumberToKeep": "Кількість резервних копій",
|
"LabelBackupsNumberToKeep": "Кількість резервних копій",
|
||||||
"LabelBackupsNumberToKeepHelp": "Видаляється лише 1 резервна копія за раз, тому якщо у вас більше копій, видаліть їх вручну.",
|
"LabelBackupsNumberToKeepHelp": "Лиш 1 резервну копію буде видалено за раз, тож якщо їх багато, то вам варто видалити їх вручну.",
|
||||||
"LabelBitrate": "Бітрейт",
|
"LabelBitrate": "Бітрейт",
|
||||||
"LabelBonus": "Бонус",
|
"LabelBonus": "Бонус",
|
||||||
"LabelBooks": "Книг",
|
"LabelBooks": "Книги",
|
||||||
"LabelButtonText": "Текст кнопки",
|
"LabelButtonText": "Текст кнопки",
|
||||||
"LabelByAuthor": "від {0}",
|
"LabelByAuthor": "від {0}",
|
||||||
"LabelChangePassword": "Змінити пароль",
|
"LabelChangePassword": "Змінити пароль",
|
||||||
"LabelChannels": "Канали",
|
"LabelChannels": "Канали",
|
||||||
"LabelChapterCount": "{0} глав",
|
"LabelChapterCount": "{0} Глав",
|
||||||
"LabelChapterTitle": "Назва глави",
|
"LabelChapterTitle": "Назва глави",
|
||||||
"LabelChapters": "Глави",
|
"LabelChapters": "Глави",
|
||||||
"LabelChaptersFound": "глав знайдено",
|
"LabelChaptersFound": "глав знайдено",
|
||||||
@ -313,9 +304,9 @@
|
|||||||
"LabelDiscFromFilename": "Диск за назвою файлу",
|
"LabelDiscFromFilename": "Диск за назвою файлу",
|
||||||
"LabelDiscFromMetadata": "Диск за метаданими",
|
"LabelDiscFromMetadata": "Диск за метаданими",
|
||||||
"LabelDiscover": "Огляд",
|
"LabelDiscover": "Огляд",
|
||||||
"LabelDownload": "Скачати",
|
"LabelDownload": "Завантажити",
|
||||||
"LabelDownloadNEpisodes": "Скачати {0} епізодів",
|
"LabelDownloadNEpisodes": "Завантажити епізодів: {0}",
|
||||||
"LabelDownloadable": "Можна скачати",
|
"LabelDownloadable": "Можна завантажити",
|
||||||
"LabelDuration": "Тривалість",
|
"LabelDuration": "Тривалість",
|
||||||
"LabelDurationComparisonExactMatch": "(повний збіг)",
|
"LabelDurationComparisonExactMatch": "(повний збіг)",
|
||||||
"LabelDurationComparisonLonger": "(на {0} довше)",
|
"LabelDurationComparisonLonger": "(на {0} довше)",
|
||||||
@ -355,20 +346,16 @@
|
|||||||
"LabelExample": "Приклад",
|
"LabelExample": "Приклад",
|
||||||
"LabelExpandSeries": "Розгорнути серії",
|
"LabelExpandSeries": "Розгорнути серії",
|
||||||
"LabelExpandSubSeries": "Розгорнути підсерії",
|
"LabelExpandSubSeries": "Розгорнути підсерії",
|
||||||
"LabelExpired": "Термін дії минув",
|
"LabelExplicit": "Відверта",
|
||||||
"LabelExpiresAt": "Термін дії закінчується о",
|
|
||||||
"LabelExpiresInSeconds": "Термін дії закінчується через (секунди)",
|
|
||||||
"LabelExpiresNever": "Ніколи",
|
|
||||||
"LabelExplicit": "Відвертий",
|
|
||||||
"LabelExplicitChecked": "Відверта (з прапорцем)",
|
"LabelExplicitChecked": "Відверта (з прапорцем)",
|
||||||
"LabelExplicitUnchecked": "Не відверта (без прапорця)",
|
"LabelExplicitUnchecked": "Не відверта (без прапорця)",
|
||||||
"LabelExportOPML": "Експорт OPML",
|
"LabelExportOPML": "Експорт OPML",
|
||||||
"LabelFeedURL": "Адреса стрічки",
|
"LabelFeedURL": "Адреса стрічки",
|
||||||
"LabelFetchingMetadata": "Отримання метаданих",
|
"LabelFetchingMetadata": "Отримання метаданих",
|
||||||
"LabelFile": "Файл",
|
"LabelFile": "Файл",
|
||||||
"LabelFileBirthtime": "Дата створення файлу",
|
"LabelFileBirthtime": "Дата створення",
|
||||||
"LabelFileBornDate": "Народився {0}",
|
"LabelFileBornDate": "Народився {0}",
|
||||||
"LabelFileModified": "Дата зміни файлу",
|
"LabelFileModified": "Дата змінення",
|
||||||
"LabelFileModifiedDate": "Змінено {0}",
|
"LabelFileModifiedDate": "Змінено {0}",
|
||||||
"LabelFilename": "Ім'я файлу",
|
"LabelFilename": "Ім'я файлу",
|
||||||
"LabelFilterByUser": "Фільтрувати за користувачем",
|
"LabelFilterByUser": "Фільтрувати за користувачем",
|
||||||
@ -408,7 +395,7 @@
|
|||||||
"LabelIntervalEvery6Hours": "Кожні 6 годин",
|
"LabelIntervalEvery6Hours": "Кожні 6 годин",
|
||||||
"LabelIntervalEveryDay": "Щодня",
|
"LabelIntervalEveryDay": "Щодня",
|
||||||
"LabelIntervalEveryHour": "Щогодини",
|
"LabelIntervalEveryHour": "Щогодини",
|
||||||
"LabelIntervalEveryMinute": "Щохвилини",
|
"LabelIntervalEveryMinute": "Кожну хвилину",
|
||||||
"LabelInvert": "Інвертувати",
|
"LabelInvert": "Інвертувати",
|
||||||
"LabelItem": "Елемент",
|
"LabelItem": "Елемент",
|
||||||
"LabelJumpBackwardAmount": "Час переходу назад",
|
"LabelJumpBackwardAmount": "Час переходу назад",
|
||||||
@ -438,13 +425,12 @@
|
|||||||
"LabelLogLevelWarn": "Увага",
|
"LabelLogLevelWarn": "Увага",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Шукати нові епізоди після вказаної дати",
|
"LabelLookForNewEpisodesAfterDate": "Шукати нові епізоди після вказаної дати",
|
||||||
"LabelLowestPriority": "Найнижчий пріоритет",
|
"LabelLowestPriority": "Найнижчий пріоритет",
|
||||||
"LabelMatchConfidence": "Впевненість",
|
|
||||||
"LabelMatchExistingUsersBy": "Шукати наявних користувачів за",
|
"LabelMatchExistingUsersBy": "Шукати наявних користувачів за",
|
||||||
"LabelMatchExistingUsersByDescription": "Використовується для підключення наявних користувачів. Після підключення користувач отримає унікальний id від вашого сервісу SSO",
|
"LabelMatchExistingUsersByDescription": "Використовується для підключення наявних користувачів. Після підключення користувач отримає унікальний id від вашого сервісу SSO",
|
||||||
"LabelMaxEpisodesToDownload": "Максимальна кількість епізодів для скачування. Використовуйте 0 для необмеженої кількості.",
|
"LabelMaxEpisodesToDownload": "Максимальна кількість епізодів для завантаження. Використовуйте 0 для необмеженої кількості.",
|
||||||
"LabelMaxEpisodesToDownloadPerCheck": "Максимальна кількість нових епізодів для скачування за перевірку",
|
"LabelMaxEpisodesToDownloadPerCheck": "Максимальна кількість нових епізодів для завантаження за перевірку",
|
||||||
"LabelMaxEpisodesToKeep": "Максимальна кількість епізодів для зберігання",
|
"LabelMaxEpisodesToKeep": "Максимальна кількість епізодів для зберігання",
|
||||||
"LabelMaxEpisodesToKeepHelp": "Значення 0 — без обмежень. Після автоматичного завантаження нового епізоду буде видалено найстаріший, якщо їх більше X. Видаляється лише 1 епізод за одне нове завантаження.",
|
"LabelMaxEpisodesToKeepHelp": "Значення 0 не встановлює обмеження. Після автоматичного завантаження нового епізоду, буде видалено найстаріший епізод, якщо у вас більше ніж X епізодів. Видаляється лише 1 епізод за одне нове завантаження.",
|
||||||
"LabelMediaPlayer": "Програвач медіа",
|
"LabelMediaPlayer": "Програвач медіа",
|
||||||
"LabelMediaType": "Тип медіа",
|
"LabelMediaType": "Тип медіа",
|
||||||
"LabelMetaTag": "Метатег",
|
"LabelMetaTag": "Метатег",
|
||||||
@ -469,7 +455,6 @@
|
|||||||
"LabelNewestEpisodes": "Нові епізоди",
|
"LabelNewestEpisodes": "Нові епізоди",
|
||||||
"LabelNextBackupDate": "Дата наступного резервного копіювання",
|
"LabelNextBackupDate": "Дата наступного резервного копіювання",
|
||||||
"LabelNextScheduledRun": "Наступний запланований запуск",
|
"LabelNextScheduledRun": "Наступний запланований запуск",
|
||||||
"LabelNoApiKeys": "Без ключів API",
|
|
||||||
"LabelNoCustomMetadataProviders": "Без постачальників метаданих",
|
"LabelNoCustomMetadataProviders": "Без постачальників метаданих",
|
||||||
"LabelNoEpisodesSelected": "Не вибрано жодного епізоду",
|
"LabelNoEpisodesSelected": "Не вибрано жодного епізоду",
|
||||||
"LabelNotFinished": "Незавершені",
|
"LabelNotFinished": "Незавершені",
|
||||||
@ -500,7 +485,7 @@
|
|||||||
"LabelPermissionsAccessExplicitContent": "Доступ до відвертого вмісту",
|
"LabelPermissionsAccessExplicitContent": "Доступ до відвертого вмісту",
|
||||||
"LabelPermissionsCreateEreader": "Можна створити читалку",
|
"LabelPermissionsCreateEreader": "Можна створити читалку",
|
||||||
"LabelPermissionsDelete": "Може видаляти",
|
"LabelPermissionsDelete": "Може видаляти",
|
||||||
"LabelPermissionsDownload": "Може скачувати",
|
"LabelPermissionsDownload": "Може завантажувати",
|
||||||
"LabelPermissionsUpdate": "Може оновлювати",
|
"LabelPermissionsUpdate": "Може оновлювати",
|
||||||
"LabelPermissionsUpload": "Може завантажувати",
|
"LabelPermissionsUpload": "Може завантажувати",
|
||||||
"LabelPersonalYearReview": "Ваші підсумки року ({0})",
|
"LabelPersonalYearReview": "Ваші підсумки року ({0})",
|
||||||
@ -529,7 +514,7 @@
|
|||||||
"LabelPublishers": "Видавці",
|
"LabelPublishers": "Видавці",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Користувацька електронна адреса власника",
|
"LabelRSSFeedCustomOwnerEmail": "Користувацька електронна адреса власника",
|
||||||
"LabelRSSFeedCustomOwnerName": "Користувацьке ім'я власника",
|
"LabelRSSFeedCustomOwnerName": "Користувацьке ім'я власника",
|
||||||
"LabelRSSFeedOpen": "RSS-канал відкритий",
|
"LabelRSSFeedOpen": "RSS-канал відкрито",
|
||||||
"LabelRSSFeedPreventIndexing": "Запобігати індексації",
|
"LabelRSSFeedPreventIndexing": "Запобігати індексації",
|
||||||
"LabelRSSFeedSlug": "Назва RSS-каналу",
|
"LabelRSSFeedSlug": "Назва RSS-каналу",
|
||||||
"LabelRSSFeedURL": "Адреса RSS-каналу",
|
"LabelRSSFeedURL": "Адреса RSS-каналу",
|
||||||
@ -557,9 +542,8 @@
|
|||||||
"LabelSeason": "Сезон",
|
"LabelSeason": "Сезон",
|
||||||
"LabelSeasonNumber": "Сезон #{0}",
|
"LabelSeasonNumber": "Сезон #{0}",
|
||||||
"LabelSelectAll": "Вибрати все",
|
"LabelSelectAll": "Вибрати все",
|
||||||
"LabelSelectAllEpisodes": "Вибрати всі епізоди",
|
"LabelSelectAllEpisodes": "Вибрати всі серії",
|
||||||
"LabelSelectEpisodesShowing": "Вибрати {0} показаних епізодів",
|
"LabelSelectEpisodesShowing": "Обрати показані епізоди: {0}",
|
||||||
"LabelSelectUser": "Виберіть користувача",
|
|
||||||
"LabelSelectUsers": "Вибрати користувачів",
|
"LabelSelectUsers": "Вибрати користувачів",
|
||||||
"LabelSendEbookToDevice": "Надіслати електронну книгу на...",
|
"LabelSendEbookToDevice": "Надіслати електронну книгу на...",
|
||||||
"LabelSequence": "Послідовність",
|
"LabelSequence": "Послідовність",
|
||||||
@ -611,7 +595,7 @@
|
|||||||
"LabelSettingsStoreMetadataWithItemHelp": "За замовчуванням файли метаданих зберігаються у /metadata/items. Цей параметр увімкне збереження метаданих у теці елемента бібліотеки",
|
"LabelSettingsStoreMetadataWithItemHelp": "За замовчуванням файли метаданих зберігаються у /metadata/items. Цей параметр увімкне збереження метаданих у теці елемента бібліотеки",
|
||||||
"LabelSettingsTimeFormat": "Формат часу",
|
"LabelSettingsTimeFormat": "Формат часу",
|
||||||
"LabelShare": "Поділитися",
|
"LabelShare": "Поділитися",
|
||||||
"LabelShareDownloadableHelp": "Дозволяє користувачам із посиланням для спільного доступу скачування zip-файлу елемента бібліотеки.",
|
"LabelShareDownloadableHelp": "Дозволяє користувачам із посиланням для спільного доступу завантажувати zip-файл елемента бібліотеки.",
|
||||||
"LabelShareOpen": "Поділитися відкрито",
|
"LabelShareOpen": "Поділитися відкрито",
|
||||||
"LabelShareURL": "Поділитися URL",
|
"LabelShareURL": "Поділитися URL",
|
||||||
"LabelShowAll": "Показати все",
|
"LabelShowAll": "Показати все",
|
||||||
@ -724,101 +708,96 @@
|
|||||||
"MessageAddToPlayerQueue": "Додати до черги відтворення",
|
"MessageAddToPlayerQueue": "Додати до черги відтворення",
|
||||||
"MessageAppriseDescription": "Щоб скористатися цією функцією, вам потрібно мати запущену <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> або API, що оброблятиме ті ж запити. <br />Аби надсилати сповіщення, URL-адреса API Apprise мусить бути повною, наприклад, якщо ваш API розміщено за адресою <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> або API, що оброблятиме ті ж запити. <br />Аби надсилати сповіщення, URL-адреса API Apprise мусить бути повною, наприклад, якщо ваш API розміщено за адресою <code>http://192.168.1.1:8337</code>, то необхідно вказати адресу <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "Переконайтесь, що ви використовуєте ASIN з правильної регіональної Audible зони, а не з Amazon.",
|
"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": "Примітка: оновлення розташування резервної копії не переносить та не змінює існуючих копій",
|
"MessageBackupsLocationEditNote": "Примітка: оновлення розташування резервної копії не переносить та не змінює існуючих копій",
|
||||||
"MessageBackupsLocationNoEditNote": "Примітка: розташування резервної копії встановлюється за допомогою змінної середовища та не може бути змінене тут.",
|
"MessageBackupsLocationNoEditNote": "Примітка: розташування резервної копії встановлюється за допомогою змінної середовища та не може бути змінене тут.",
|
||||||
"MessageBackupsLocationPathEmpty": "Шлях розташування резервної копії не може бути порожнім",
|
"MessageBackupsLocationPathEmpty": "Шлях розташування резервної копії не може бути порожнім",
|
||||||
"MessageBatchEditPopulateMapDetailsAllHelp": "Заповнити увімкнені поля даними з усіх елементів. Поля з кількома значеннями буде об’єднано",
|
"MessageBatchEditPopulateMapDetailsAllHelp": "Заповнити увімкнені поля даними з усіх елементів. Поля з кількома значеннями буде об’єднано",
|
||||||
"MessageBatchEditPopulateMapDetailsItemHelp": "Заповнити увімкнені поля деталізації даними з цього елемента",
|
"MessageBatchEditPopulateMapDetailsItemHelp": "Заповніть увімкнені поля деталей карти даними з цього елемента",
|
||||||
"MessageBatchQuickMatchDescription": "Швидкий пошук спробує знайти відсутні обкладинки та метадані обраних елементів. Увімкніть налаштування нижче, аби дозволити заміну наявних обкладинок та/або метаданих під час швидкого пошуку.",
|
"MessageBatchQuickMatchDescription": "Швидкий пошук спробує знайти відсутні обкладинки та метадані обраних елементів. Увімкніть налаштування нижче, аби дозволити заміну наявних обкладинок та/або метаданих під час швидкого пошуку.",
|
||||||
"MessageBookshelfNoCollections": "Ви ще не створили жодної добірки",
|
"MessageBookshelfNoCollections": "Ви не створили жодної добірки",
|
||||||
"MessageBookshelfNoCollectionsHelp": "Колекції публічні. Їх можуть бачити всі користувачі, які мають доступ до бібліотеки.",
|
"MessageBookshelfNoCollectionsHelp": "Колекції публічні. Їх можуть бачити всі користувачі, які мають доступ до бібліотеки.",
|
||||||
"MessageBookshelfNoRSSFeeds": "Немає відкритих RSS-каналів",
|
"MessageBookshelfNoRSSFeeds": "Немає відкритих RSS-каналів",
|
||||||
"MessageBookshelfNoResultsForFilter": "Немає результатів з фільтром \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Немає результатів з фільтром \"{0}: {1}\"",
|
||||||
"MessageBookshelfNoResultsForQuery": "Немає результатів за запитом",
|
"MessageBookshelfNoResultsForQuery": "Немає результатів за запитом",
|
||||||
"MessageBookshelfNoSeries": "У вас немає серій",
|
"MessageBookshelfNoSeries": "Серії відсутні",
|
||||||
"MessageChapterEndIsAfter": "Кінець глави після завершення аудіокниги",
|
"MessageChapterEndIsAfter": "Кінець глави знаходиться після закінчення книги",
|
||||||
"MessageChapterErrorFirstNotZero": "Перша глава повинна починатися з 0",
|
"MessageChapterErrorFirstNotZero": "Перша глава мусить починатися з 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Час початку має бути меншим за тривалість аудіокниги",
|
"MessageChapterErrorStartGteDuration": "Час початку мусить бути меншим за тривалість аудіокниги",
|
||||||
"MessageChapterErrorStartLtPrev": "Час початку має бути більшим або рівним часу початку попередньої глави",
|
"MessageChapterErrorStartLtPrev": "Неприпустимий час початку, має бути більшим за час початку попередньої глави",
|
||||||
"MessageChapterStartIsAfter": "Початок глави після завершення аудіокниги",
|
"MessageChapterStartIsAfter": "Початок глави знаходиться після закінчення книги",
|
||||||
"MessageChaptersNotFound": "Розділи не знайдені",
|
"MessageChaptersNotFound": "Розділи не знайдені",
|
||||||
"MessageCheckingCron": "Перевірка планувальника...",
|
"MessageCheckingCron": "Перевірка планувальника...",
|
||||||
"MessageConfirmCloseFeed": "Ви дійсно бажаєте закрити цей канал?",
|
"MessageConfirmCloseFeed": "Ви дійсно бажаєте закрити цей канал?",
|
||||||
"MessageConfirmDeleteApiKey": "Ви впевнені, що хочете видалити ключ API? \"{0}\"?",
|
|
||||||
"MessageConfirmDeleteBackup": "Ви дійсно бажаєте видалити резервну копію за {0}?",
|
"MessageConfirmDeleteBackup": "Ви дійсно бажаєте видалити резервну копію за {0}?",
|
||||||
"MessageConfirmDeleteDevice": "Ви впевнені, що хочете видалити пристрій для читання \"{0}\"?",
|
"MessageConfirmDeleteDevice": "Ви впевнені, що хочете видалити пристрій для читання \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Файл буде видалено з вашої файлової системи. Ви впевнені?",
|
"MessageConfirmDeleteFile": "Файл буде видалено з вашої файлової системи. Ви впевнені?",
|
||||||
"MessageConfirmDeleteLibrary": "Ви дійсно бажаєте назавжди видалити бібліотеку \"{0}\"?",
|
"MessageConfirmDeleteLibrary": "Ви дійсно бажаєте назавжди видалити бібліотеку \"{0}\"?",
|
||||||
"MessageConfirmDeleteLibraryItem": "Елемент бібліотеки буде видалено з бази даних і файлової системи. Ви впевнені?",
|
"MessageConfirmDeleteLibraryItem": "Елемент бібліотеки буде видалено з бази даних та вашої файлової системи. Ви впевнені?",
|
||||||
"MessageConfirmDeleteLibraryItems": "Буде видалено {0} елементів бібліотеки з бази даних і файлової системи. Ви впевнені?",
|
"MessageConfirmDeleteLibraryItems": "З бази даних та вашої файлової системи будуть видалені елементи бібліотеки: {0}. Ви впевнені?",
|
||||||
"MessageConfirmDeleteMetadataProvider": "Ви впевнені, що хочете видалити користувацького постачальника метаданих \"{0}\"?",
|
"MessageConfirmDeleteMetadataProvider": "Ви впевнені, що хочете видалити користувацького постачальника метаданих \"{0}\"?",
|
||||||
"MessageConfirmDeleteNotification": "Ви впевнені, що хочете видалити це сповіщення?",
|
"MessageConfirmDeleteNotification": "Ви впевнені, що хочете видалити це сповіщення?",
|
||||||
"MessageConfirmDeleteSession": "Ви дійсно бажаєте видалити цей сеанс?",
|
"MessageConfirmDeleteSession": "Ви дійсно бажаєте видалити цей сеанс?",
|
||||||
"MessageConfirmEmbedMetadataInAudioFiles": "Ви впевнені, що хочете вбудувати метадані у {0} аудіофайлів?",
|
"MessageConfirmEmbedMetadataInAudioFiles": "Ви впевнені, що хочете вставити метадані в {0} аудіофайлів?",
|
||||||
"MessageConfirmForceReScan": "Ви дійсно бажаєте примусово пересканувати?",
|
"MessageConfirmForceReScan": "Ви дійсно бажаєте примусово пересканувати?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Ви впевнені, що хочете позначити всі епізоди завершеними?",
|
"MessageConfirmMarkAllEpisodesFinished": "Ви дійсно бажаєте позначити усі епізоди завершеними?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "Ви впевнені, що хочете позначити всі епізоди незавершеними?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "Ви дійсно бажаєте позначити усі епізоди незавершеними?",
|
||||||
"MessageConfirmMarkItemFinished": "Ви впевнені, що хочете позначити \"{0}\" як завершене?",
|
"MessageConfirmMarkItemFinished": "Ви впевнені, що хочете позначити \"{0}\" як завершене?",
|
||||||
"MessageConfirmMarkItemNotFinished": "Ви впевнені, що хочете позначити \"{0}\" як незавершене?",
|
"MessageConfirmMarkItemNotFinished": "Ви впевнені, що хочете позначити \"{0}\" як незавершене?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Ви дійсно бажаєте позначити усі книги серії завершеними?",
|
"MessageConfirmMarkSeriesFinished": "Ви дійсно бажаєте позначити усі книги серії завершеними?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Ви дійсно бажаєте позначити всі книги серії незавершеними?",
|
"MessageConfirmMarkSeriesNotFinished": "Ви дійсно бажаєте позначити всі книги серії незавершеними?",
|
||||||
"MessageConfirmNotificationTestTrigger": "Активувати це сповіщення з тестовими даними?",
|
"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>Продовжити?",
|
||||||
"MessageConfirmQuickMatchEpisodes": "Швидке співставлення епізодів перезапише подробиці, якщо знайдено відповідність. Оновлюються лише невідповідні епізоди. Ви впевнені?",
|
"MessageConfirmQuickMatchEpisodes": "При виявленні співпадінь інформація про епізоди швидкого пошуку буде перезаписана. Будуть оновлені тільки несуперечливі епізоди. Ви впевнені?",
|
||||||
"MessageConfirmReScanLibraryItems": "Ви впевнені, що хочете пересканувати {0} елементів?",
|
"MessageConfirmReScanLibraryItems": "Ви дійсно бажаєте пересканувати елементи: {0}?",
|
||||||
"MessageConfirmRemoveAllChapters": "Ви дійсно бажаєте видалити усі глави?",
|
"MessageConfirmRemoveAllChapters": "Ви дійсно бажаєте видалити усі глави?",
|
||||||
"MessageConfirmRemoveAuthor": "Ви дійсно бажаєте видалити автора \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Ви дійсно бажаєте видалити автора \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Ви дійсно бажаєте видалити добірку \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Ви дійсно бажаєте видалити добірку \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Ви дійсно бажаєте видалити епізод \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Ви дійсно бажаєте видалити епізод \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "Примітка: Це не видаляє аудіофайл, якщо не перемикає \"файл жорсткого видалення\"",
|
|
||||||
"MessageConfirmRemoveEpisodes": "Ви дійсно бажаєте видалити епізодів: {0}?",
|
"MessageConfirmRemoveEpisodes": "Ви дійсно бажаєте видалити епізодів: {0}?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Ви дійсно бажаєте видалити сеанси прослуховування: {0}?",
|
"MessageConfirmRemoveListeningSessions": "Ви дійсно бажаєте видалити сеанси прослуховування: {0}?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "Ви впевнені, що хочете видалити всі файли metadata.{0} у папках елементів вашої бібліотеки?",
|
"MessageConfirmRemoveMetadataFiles": "Ви впевнені, що хочете видалити всі файли metadata.{0} у папках елементів вашої бібліотеки?",
|
||||||
"MessageConfirmRemoveNarrator": "Ви дійсно бажаєте видалити читця \"{0}\"?",
|
"MessageConfirmRemoveNarrator": "Ви дійсно бажаєте видалити читця \"{0}\"?",
|
||||||
"MessageConfirmRemovePlaylist": "Ви дійсно бажаєте видалити ваш список відтворення \"{0}\"?",
|
"MessageConfirmRemovePlaylist": "Ви дійсно бажаєте видалити список відтворення \"{0}\"?",
|
||||||
"MessageConfirmRenameGenre": "Ви впевнені, що хочете перейменувати жанр \"{0}\" на \"{1}\" для всіх елементів?",
|
"MessageConfirmRenameGenre": "Ви дійсно бажаєте замінити жанр \"{0}\" на \"{1}\" для усіх елементів?",
|
||||||
"MessageConfirmRenameGenreMergeNote": "Примітка: Такий жанр вже існує, тому вони будуть об'єднані.",
|
"MessageConfirmRenameGenreMergeNote": "Примітка: такий жанр вже існує, тож їх буде об'єднано.",
|
||||||
"MessageConfirmRenameGenreWarning": "Увага! Схожий жанр з іншом регістром вже існує \"{0}\".",
|
"MessageConfirmRenameGenreWarning": "Увага! Вже існує схожий жанр у іншому регістрі \"{0}\".",
|
||||||
"MessageConfirmRenameTag": "Ви впевнені, що хочете перейменувати мітку \"{0}\" на \"{1}\" для всіх елементів?",
|
"MessageConfirmRenameTag": "Ви дійсно бажаєте замінити мітку \"{0}\" на \"{1}\" для усіх елементів?",
|
||||||
"MessageConfirmRenameTagMergeNote": "Примітка: Така мітка вже існує, тому вони будуть об'єднані.",
|
"MessageConfirmRenameTagMergeNote": "Примітка: така мітка вже існує, тож їх буде об'єднано.",
|
||||||
"MessageConfirmRenameTagWarning": "Увага! Схожа мітка з іншою регістром вже існує \"{0}\".",
|
"MessageConfirmRenameTagWarning": "Увага! Вже існує схожа мітка у іншому регістрі \"{0}\".",
|
||||||
"MessageConfirmResetProgress": "Ви впевнені, що хочете скинути свій прогрес?",
|
"MessageConfirmResetProgress": "Ви впевнені, що хочете скинути свій прогрес?",
|
||||||
"MessageConfirmSendEbookToDevice": "Ви дійсно хочете відправити на пристрій \"{2}\" електроні книги: {0}, \"{1}\"?",
|
"MessageConfirmSendEbookToDevice": "Ви дійсно хочете відправити на пристрій \"{2}\" електроні книги: {0}, \"{1}\"?",
|
||||||
"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 та текстові файли будуть проскановані як нові.",
|
||||||
"MessageImportantNotice": "Важливе повідомлення!",
|
"MessageImportantNotice": "Важливе повідомлення!",
|
||||||
"MessageInsertChapterBelow": "Введіть главу нижче",
|
"MessageInsertChapterBelow": "Введіть главу нижче",
|
||||||
"MessageInvalidAsin": "Невірний ASIN",
|
"MessageInvalidAsin": "Невірний ASIN",
|
||||||
"MessageItemsSelected": "Вибрано {0} елементів",
|
"MessageItemsSelected": "Вибрано елементів: {0}",
|
||||||
"MessageItemsUpdated": "Оновлено {0} елементів",
|
"MessageItemsUpdated": "Оновлено елементів: {0}",
|
||||||
"MessageJoinUsOn": "Приєднуйтесь до",
|
"MessageJoinUsOn": "Приєднуйтесь до",
|
||||||
"MessageLoading": "Завантаження...",
|
"MessageLoading": "Завантаження...",
|
||||||
"MessageLoadingFolders": "Завантаження папок...",
|
"MessageLoadingFolders": "Завантаження тек...",
|
||||||
"MessageLogsDescription": "Журнали зберігаються у <code>/metadata/logs</code> як JSON-файли. Журнали збоїв зберігаються у <code>/metadata/logs/crash_logs.txt</code>.",
|
"MessageLogsDescription": "Журнали зберігаються у <code>/metadata/logs</code> як JSON-файли. Журнали збоїв зберігаються у <code>/metadata/logs/crash_logs.txt</code>.",
|
||||||
"MessageM4BFailed": "Помилка M4B!",
|
"MessageM4BFailed": "Помилка M4B!",
|
||||||
"MessageM4BFinished": "M4B створено!",
|
"MessageM4BFinished": "M4B створено!",
|
||||||
"MessageMapChapterTitles": "Встановіть назви глав вашої аудіокниги без зміни часових міток",
|
"MessageMapChapterTitles": "Встановіть назви глав вашої аудіокниги без визначення налаштувань тривалості",
|
||||||
"MessageMarkAllEpisodesFinished": "Позначити всі епізоди завершеними",
|
"MessageMarkAllEpisodesFinished": "Позначити всі епізоди завершеними",
|
||||||
"MessageMarkAllEpisodesNotFinished": "Позначити всі епізоди незавершеними",
|
"MessageMarkAllEpisodesNotFinished": "Позначити всі епізоди незавершеними",
|
||||||
"MessageMarkAsFinished": "Позначити як завершене",
|
"MessageMarkAsFinished": "Позначити завершеним",
|
||||||
"MessageMarkAsNotFinished": "Позначити як незавершене",
|
"MessageMarkAsNotFinished": "Позначити незавершеним",
|
||||||
"MessageMatchBooksDescription": "Спробує знайти книги у бібліотеці у вибраному джерелі пошуку та заповнити порожні подробиці й обкладинку. Не перезаписує подробиці.",
|
"MessageMatchBooksDescription": "Спробує віднайти книгу у вказаному джерелі пошуку та встановити подробиці та обкладинку, яких бракує. Не перезаписує подробиці.",
|
||||||
"MessageNoAudioTracks": "Аудіодоріжки відсутні",
|
"MessageNoAudioTracks": "Аудіодоріжки відсутні",
|
||||||
"MessageNoAuthors": "Автори відсутні",
|
"MessageNoAuthors": "Автори відсутні",
|
||||||
"MessageNoBackups": "Резервні копії відсутні",
|
"MessageNoBackups": "Резервні копії відсутні",
|
||||||
@ -828,8 +807,8 @@
|
|||||||
"MessageNoCoversFound": "Обкладинок не знайдено",
|
"MessageNoCoversFound": "Обкладинок не знайдено",
|
||||||
"MessageNoDescription": "Без опису",
|
"MessageNoDescription": "Без опису",
|
||||||
"MessageNoDevices": "Немає пристроїв",
|
"MessageNoDevices": "Немає пристроїв",
|
||||||
"MessageNoDownloadsInProgress": "Немає активних скачувань",
|
"MessageNoDownloadsInProgress": "Немає активних завантажень",
|
||||||
"MessageNoDownloadsQueued": "Немає скачувань у черзі",
|
"MessageNoDownloadsQueued": "Немає завантажень у черзі",
|
||||||
"MessageNoEpisodeMatchesFound": "Відповідних епізодів не знайдено",
|
"MessageNoEpisodeMatchesFound": "Відповідних епізодів не знайдено",
|
||||||
"MessageNoEpisodes": "Епізоди відсутні",
|
"MessageNoEpisodes": "Епізоди відсутні",
|
||||||
"MessageNoFoldersAvailable": "Немає доступних тек",
|
"MessageNoFoldersAvailable": "Немає доступних тек",
|
||||||
@ -838,21 +817,21 @@
|
|||||||
"MessageNoItems": "Елементи відсутні",
|
"MessageNoItems": "Елементи відсутні",
|
||||||
"MessageNoItemsFound": "Елементів не знайдено",
|
"MessageNoItemsFound": "Елементів не знайдено",
|
||||||
"MessageNoListeningSessions": "Сеанси прослуховування відсутні",
|
"MessageNoListeningSessions": "Сеанси прослуховування відсутні",
|
||||||
"MessageNoLogs": "Немає журналів'",
|
"MessageNoLogs": "Немає журнал",
|
||||||
"MessageNoMediaProgress": "Прогрес відсутній",
|
"MessageNoMediaProgress": "Прогрес відсутній",
|
||||||
"MessageNoNotifications": "Сповіщення відсутні",
|
"MessageNoNotifications": "Сповіщення відсутні",
|
||||||
"MessageNoPodcastFeed": "Некоректний подкаст: немає каналу",
|
"MessageNoPodcastFeed": "Невірний подкаст: Немає каналу",
|
||||||
"MessageNoPodcastsFound": "Подкастів не знайдено",
|
"MessageNoPodcastsFound": "Подкастів не знайдено",
|
||||||
"MessageNoResults": "Немає результатів",
|
"MessageNoResults": "Немає результатів",
|
||||||
"MessageNoSearchResultsFor": "Немає результатів пошуку для \"{0}\"",
|
"MessageNoSearchResultsFor": "Немає результатів пошуку для \"{0}\"",
|
||||||
"MessageNoSeries": "Немає серій",
|
"MessageNoSeries": "Без серії",
|
||||||
"MessageNoTags": "Немає міток",
|
"MessageNoTags": "Без міток",
|
||||||
"MessageNoTasksRunning": "Немає активних завдань",
|
"MessageNoTasksRunning": "Немає активних завдань",
|
||||||
"MessageNoUpdatesWereNecessary": "Оновлення не потрібні",
|
"MessageNoUpdatesWereNecessary": "Оновлень не потрібно",
|
||||||
"MessageNoUserPlaylists": "У вас немає списків відтворення",
|
"MessageNoUserPlaylists": "У вас немає списків відтворення",
|
||||||
"MessageNoUserPlaylistsHelp": "Списки відтворення приватні. Лише користувач, який їх створив, може їх бачити.",
|
"MessageNoUserPlaylistsHelp": "Списки відтворення приватні. Лише користувач, який їх створює, може бачити їх.",
|
||||||
"MessageNotYetImplemented": "Ще не реалізовано",
|
"MessageNotYetImplemented": "Ще не реалізовано",
|
||||||
"MessageOpmlPreviewNote": "Примітка: це попередній перегляд OPML-файлу. Актуальна назва подкасту буде взята з RSS-каналу.",
|
"MessageOpmlPreviewNote": "Примітка: це попередній перегляд OPML-файлу. Актуальна назва подкасту буде завантажена з RSS-каналу.",
|
||||||
"MessageOr": "або",
|
"MessageOr": "або",
|
||||||
"MessagePauseChapter": "Призупинити відтворення глави",
|
"MessagePauseChapter": "Призупинити відтворення глави",
|
||||||
"MessagePlayChapter": "Слухати початок глави",
|
"MessagePlayChapter": "Слухати початок глави",
|
||||||
@ -861,7 +840,7 @@
|
|||||||
"MessagePodcastHasNoRSSFeedForMatching": "Подкаст не має RSS-каналу для пошуку",
|
"MessagePodcastHasNoRSSFeedForMatching": "Подкаст не має RSS-каналу для пошуку",
|
||||||
"MessagePodcastSearchField": "Введіть пошуковий запит або URL RSS-стрічки",
|
"MessagePodcastSearchField": "Введіть пошуковий запит або URL RSS-стрічки",
|
||||||
"MessageQuickEmbedInProgress": "Швидке вбудовування в процесі",
|
"MessageQuickEmbedInProgress": "Швидке вбудовування в процесі",
|
||||||
"MessageQuickEmbedQueue": "У черзі на швидке вбудовування ({0} в черзі)",
|
"MessageQuickEmbedQueue": "В черзі на швидке вбудовування ({0} в черзі)",
|
||||||
"MessageQuickMatchAllEpisodes": "Швидке співставлення всіх епізодів",
|
"MessageQuickMatchAllEpisodes": "Швидке співставлення всіх епізодів",
|
||||||
"MessageQuickMatchDescription": "Заповнити відсутні подробиці та обкладинку першим результатом пошуку '{0}'. Не перезаписує подробиці, якщо не увімкнено параметр \"Надавати перевагу віднайденим метаданим\".",
|
"MessageQuickMatchDescription": "Заповнити відсутні подробиці та обкладинку першим результатом пошуку '{0}'. Не перезаписує подробиці, якщо не увімкнено параметр \"Надавати перевагу віднайденим метаданим\".",
|
||||||
"MessageRemoveChapter": "Видалити главу",
|
"MessageRemoveChapter": "Видалити главу",
|
||||||
@ -869,23 +848,22 @@
|
|||||||
"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}",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "Послідовність серій не може містити пробілів",
|
|
||||||
"MessageServerCouldNotBeReached": "Не вдалося підключитися до сервера",
|
"MessageServerCouldNotBeReached": "Не вдалося підключитися до сервера",
|
||||||
"MessageSetChaptersFromTracksDescription": "Створити глави з аудіодоріжок, встановивши назви файлів за заголовки",
|
"MessageSetChaptersFromTracksDescription": "Створити глави з аудіодоріжок, встановивши назви файлів за заголовки",
|
||||||
"MessageShareExpirationWillBe": "Термін сплине за <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "Термін сплине за <strong>{0}</strong>",
|
||||||
"MessageShareExpiresIn": "Спливає через {0}",
|
"MessageShareExpiresIn": "Сплине за {0}",
|
||||||
"MessageShareURLWillBe": "URL для спільного доступу — <strong>{0}</strong>",
|
"MessageShareURLWillBe": "Поширюваний URL - <strong>{0}</strong>",
|
||||||
"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",
|
||||||
@ -900,19 +878,19 @@
|
|||||||
"MessageTaskMatchingBooksInLibrary": "Відповідність книг у бібліотеці \"{0}\"",
|
"MessageTaskMatchingBooksInLibrary": "Відповідність книг у бібліотеці \"{0}\"",
|
||||||
"MessageTaskNoFilesToScan": "Немає файлів для сканування",
|
"MessageTaskNoFilesToScan": "Немає файлів для сканування",
|
||||||
"MessageTaskOpmlImport": "Імпорт OPML",
|
"MessageTaskOpmlImport": "Імпорт OPML",
|
||||||
"MessageTaskOpmlImportDescription": "Створення подкастів з {0} RSS-каналів",
|
"MessageTaskOpmlImportDescription": "Створення подкастів з {0} RSS-стрічок",
|
||||||
"MessageTaskOpmlImportFeed": "Імпорт RSS-каналу OPML",
|
"MessageTaskOpmlImportFeed": "Канал імпорту OPML",
|
||||||
"MessageTaskOpmlImportFeedDescription": "Імпорт RSS-каналу \"{0}\"",
|
"MessageTaskOpmlImportFeedDescription": "Імпорт RSS-каналу \"{0}\"",
|
||||||
"MessageTaskOpmlImportFeedFailed": "Не вдалося отримати подкаст-канал",
|
"MessageTaskOpmlImportFeedFailed": "Не вдалося отримати подкаст-стрічку",
|
||||||
"MessageTaskOpmlImportFeedPodcastDescription": "Створення подкасту \"{0}\"",
|
"MessageTaskOpmlImportFeedPodcastDescription": "Створення подкасту \"{0}\"",
|
||||||
"MessageTaskOpmlImportFeedPodcastExists": "Подкаст вже існує за цим шляхом",
|
"MessageTaskOpmlImportFeedPodcastExists": "Подкаст вже існує за цим шляхом",
|
||||||
"MessageTaskOpmlImportFeedPodcastFailed": "Не вдалося створити подкаст",
|
"MessageTaskOpmlImportFeedPodcastFailed": "Не вдалося створити подкаст",
|
||||||
"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} оновлено",
|
||||||
"MessageTaskScanNoChangesNeeded": "Змін не потрібно",
|
"MessageTaskScanNoChangesNeeded": "Змін не потрібно",
|
||||||
"MessageTaskScanningFileChanges": "Сканування змін файлів у \"{0}\"",
|
"MessageTaskScanningFileChanges": "Сканування змін файлів у \"{0}\"",
|
||||||
@ -922,24 +900,22 @@
|
|||||||
"MessageUploaderItemFailed": "Не вдалося завантажити",
|
"MessageUploaderItemFailed": "Не вдалося завантажити",
|
||||||
"MessageUploaderItemSuccess": "Успішно завантажено!",
|
"MessageUploaderItemSuccess": "Успішно завантажено!",
|
||||||
"MessageUploading": "Завантаження...",
|
"MessageUploading": "Завантаження...",
|
||||||
"MessageValidCronExpression": "Коректний cron-вираз",
|
"MessageValidCronExpression": "Допустима команда cron",
|
||||||
"MessageWatcherIsDisabledGlobally": "Спостерігача вимкнено у глобальних налаштуваннях сервера",
|
"MessageWatcherIsDisabledGlobally": "Спостерігача вимкнено в налаштуваннях сервера",
|
||||||
"MessageXLibraryIsEmpty": "Бібліотека {0} порожня!",
|
"MessageXLibraryIsEmpty": "Бібліотека {0} порожня!",
|
||||||
"MessageYourAudiobookDurationIsLonger": "Тривалість вашої аудіокниги більша за знайдену",
|
"MessageYourAudiobookDurationIsLonger": "Тривалість вашої аудіокниги довша за віднайдену",
|
||||||
"MessageYourAudiobookDurationIsShorter": "Тривалість вашої аудіокниги менша за знайдену",
|
"MessageYourAudiobookDurationIsShorter": "Тривалість вашої аудіокниги коротша за віднайдену",
|
||||||
"NoteChangeRootPassword": "Тільки користувач root може мати порожній пароль",
|
"NoteChangeRootPassword": "Тільки користувач root — єдиний, хто може мати порожній пароль",
|
||||||
"NoteChapterEditorTimes": "Примітка: Перша глава повинна починатися з 0:00, а час початку останньої глави не може перевищувати тривалість цієї аудіокниги.",
|
"NoteChapterEditorTimes": "Примітка: Перша глава мусить починатися з 0:00, а час початку останньої глави не може бути більшим за зазначену тривалість аудіокниги.",
|
||||||
"NoteFolderPicker": "Примітка: вже додані папки не відображаються",
|
"NoteFolderPicker": "Примітка: вже обрані теки не буде показано",
|
||||||
"NoteRSSFeedPodcastAppsHttps": "Попередження: більшість додатків подкастів вимагають використання HTTPS для RSS-каналу",
|
"NoteRSSFeedPodcastAppsHttps": "Попередження: Більшість додатків подкастів вимагатимуть використання протоколу HTTPS від RSS-каналу",
|
||||||
"NoteRSSFeedPodcastAppsPubDate": "Попередження: один або більше ваших епізодів не мають дати публікації. Деякі додатки подкастів цього вимагають.",
|
"NoteRSSFeedPodcastAppsPubDate": "Попередження: 1 або більше ваших епізодів не мають дати публікації. Деякі додатки подкастів вимагають це.",
|
||||||
"NoteUploaderFoldersWithMediaFiles": "Теки з медіафайлами обробляються як окремі елементи бібліотеки.",
|
"NoteUploaderFoldersWithMediaFiles": "Теки з медіафайлами буде оброблено як окремі елементи бібліотеки.",
|
||||||
"NoteUploaderOnlyAudioFiles": "Якщо завантажувати лише аудіофайли, кожен файл буде окремою аудіокнигою.",
|
"NoteUploaderOnlyAudioFiles": "Якщо завантажувати лише аудіофайли, то кожен файл буде оброблено як окрему книгу.",
|
||||||
"NoteUploaderUnsupportedFiles": "Непідтримувані файли ігноруються. При виборі або перетягуванні теки, файли поза теками елементів ігноруються.",
|
"NoteUploaderUnsupportedFiles": "Непідтримувані файли пропущено. Під час вибору або перетягування теки, файли, що знаходяться поза текою, пропускаються.",
|
||||||
"NotificationOnBackupCompletedDescription": "Виконується після завершення резервного копіювання",
|
"NotificationOnBackupCompletedDescription": "Запускається після завершення резервного копіювання",
|
||||||
"NotificationOnBackupFailedDescription": "Виконується при помилці резервного копіювання",
|
"NotificationOnBackupFailedDescription": "Срабатывает при збої резервного копіювання",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Виконується при автоматичному завантаженні епізоду подкасту",
|
"NotificationOnEpisodeDownloadedDescription": "Запускається при автоматичному завантаженні епізоду подкасту",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "Виконується, коли автоматичне завантаження епізодів вимкнено через забагато невдалих спроб",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "Виконується, коли запит RSS-каналу не вдається для автоматичного завантаження епізоду",
|
|
||||||
"NotificationOnTestDescription": "Подія для тестування системи сповіщень",
|
"NotificationOnTestDescription": "Подія для тестування системи сповіщень",
|
||||||
"PlaceholderNewCollection": "Нова назва добірки",
|
"PlaceholderNewCollection": "Нова назва добірки",
|
||||||
"PlaceholderNewFolderPath": "Новий шлях до теки",
|
"PlaceholderNewFolderPath": "Новий шлях до теки",
|
||||||
@ -1017,17 +993,15 @@
|
|||||||
"ToastEncodeCancelFailed": "Не вдалося скасувати кодування",
|
"ToastEncodeCancelFailed": "Не вдалося скасувати кодування",
|
||||||
"ToastEncodeCancelSucces": "Кодування скасовано",
|
"ToastEncodeCancelSucces": "Кодування скасовано",
|
||||||
"ToastEpisodeDownloadQueueClearFailed": "Не вдалося очистити чергу",
|
"ToastEpisodeDownloadQueueClearFailed": "Не вдалося очистити чергу",
|
||||||
"ToastEpisodeDownloadQueueClearSuccess": "Чергу на скачування епізодів очищено",
|
"ToastEpisodeDownloadQueueClearSuccess": "Чергу на завантаження епізодів очищено",
|
||||||
"ToastEpisodeUpdateSuccess": "{0} епізодів оновлено",
|
"ToastEpisodeUpdateSuccess": "{0} епізодів оновлено",
|
||||||
"ToastErrorCannotShare": "Не можна типово поширити на цей пристрій",
|
"ToastErrorCannotShare": "Не можна типово поширити на цей пристрій",
|
||||||
"ToastFailedToCreate": "Не вдалося створити",
|
|
||||||
"ToastFailedToDelete": "Не вдалося видалити",
|
|
||||||
"ToastFailedToLoadData": "Не вдалося завантажити дані",
|
"ToastFailedToLoadData": "Не вдалося завантажити дані",
|
||||||
"ToastFailedToMatch": "Не вдалося знайти відповідність",
|
"ToastFailedToMatch": "Не вдалося знайти відповідність",
|
||||||
"ToastFailedToShare": "Не вдалося поділитися",
|
"ToastFailedToShare": "Не вдалося поділитися",
|
||||||
"ToastFailedToUpdate": "Не вдалося оновити",
|
"ToastFailedToUpdate": "Не вдалося оновити",
|
||||||
"ToastInvalidImageUrl": "Невірний URL зображення",
|
"ToastInvalidImageUrl": "Невірний URL зображення",
|
||||||
"ToastInvalidMaxEpisodesToDownload": "Невірна кількість епізодів для скачування",
|
"ToastInvalidMaxEpisodesToDownload": "Невірна кількість епізодів для завантаження",
|
||||||
"ToastInvalidUrl": "Невірний URL",
|
"ToastInvalidUrl": "Невірний URL",
|
||||||
"ToastItemCoverUpdateSuccess": "Обкладинку елемента оновлено",
|
"ToastItemCoverUpdateSuccess": "Обкладинку елемента оновлено",
|
||||||
"ToastItemDeletedFailed": "Не вдалося видалити елемент",
|
"ToastItemDeletedFailed": "Не вдалося видалити елемент",
|
||||||
@ -1053,7 +1027,6 @@
|
|||||||
"ToastMustHaveAtLeastOnePath": "Повинен бути хоча б один шлях",
|
"ToastMustHaveAtLeastOnePath": "Повинен бути хоча б один шлях",
|
||||||
"ToastNameEmailRequired": "Ім'я та електронна пошта обов'язкові",
|
"ToastNameEmailRequired": "Ім'я та електронна пошта обов'язкові",
|
||||||
"ToastNameRequired": "Ім'я обов'язкове",
|
"ToastNameRequired": "Ім'я обов'язкове",
|
||||||
"ToastNewApiKeyUserError": "Потрібно вибрати користувача",
|
|
||||||
"ToastNewEpisodesFound": "{0} нових епізодів знайдено",
|
"ToastNewEpisodesFound": "{0} нових епізодів знайдено",
|
||||||
"ToastNewUserCreatedFailed": "Не вдалося створити акаунт: \"{0}\"",
|
"ToastNewUserCreatedFailed": "Не вдалося створити акаунт: \"{0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "Новий акаунт створено",
|
"ToastNewUserCreatedSuccess": "Новий акаунт створено",
|
||||||
@ -1088,7 +1061,7 @@
|
|||||||
"ToastProviderRemoveSuccess": "Постачальник видалений",
|
"ToastProviderRemoveSuccess": "Постачальник видалений",
|
||||||
"ToastRSSFeedCloseFailed": "Не вдалося закрити RSS-канал",
|
"ToastRSSFeedCloseFailed": "Не вдалося закрити RSS-канал",
|
||||||
"ToastRSSFeedCloseSuccess": "RSS-канал закрито",
|
"ToastRSSFeedCloseSuccess": "RSS-канал закрито",
|
||||||
"ToastRemoveFailed": "Не вдалося вилучити",
|
"ToastRemoveFailed": "Не вдалося видалити",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Не вдалося видалити елемент із добірки",
|
"ToastRemoveItemFromCollectionFailed": "Не вдалося видалити елемент із добірки",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "Елемент видалено з добірки",
|
"ToastRemoveItemFromCollectionSuccess": "Елемент видалено з добірки",
|
||||||
"ToastRemoveItemsWithIssuesFailed": "Не вдалося видалити елементи бібліотеки з проблемами",
|
"ToastRemoveItemsWithIssuesFailed": "Не вдалося видалити елементи бібліотеки з проблемами",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "添加",
|
"ButtonAdd": "添加",
|
||||||
"ButtonAddApiKey": "添加 API 密钥",
|
|
||||||
"ButtonAddChapters": "添加章节",
|
"ButtonAddChapters": "添加章节",
|
||||||
"ButtonAddDevice": "添加设备",
|
"ButtonAddDevice": "添加设备",
|
||||||
"ButtonAddLibrary": "添加库",
|
"ButtonAddLibrary": "添加库",
|
||||||
@ -12,7 +11,7 @@
|
|||||||
"ButtonAuthors": "作者",
|
"ButtonAuthors": "作者",
|
||||||
"ButtonBack": "返回",
|
"ButtonBack": "返回",
|
||||||
"ButtonBatchEditPopulateFromExisting": "用现有内容填充",
|
"ButtonBatchEditPopulateFromExisting": "用现有内容填充",
|
||||||
"ButtonBatchEditPopulateMapDetails": "填入此项详情",
|
"ButtonBatchEditPopulateMapDetails": "填充地图详细信息",
|
||||||
"ButtonBrowseForFolder": "浏览文件夹",
|
"ButtonBrowseForFolder": "浏览文件夹",
|
||||||
"ButtonCancel": "取消",
|
"ButtonCancel": "取消",
|
||||||
"ButtonCancelEncode": "取消编码",
|
"ButtonCancelEncode": "取消编码",
|
||||||
@ -21,9 +20,8 @@
|
|||||||
"ButtonChooseAFolder": "选择文件夹",
|
"ButtonChooseAFolder": "选择文件夹",
|
||||||
"ButtonChooseFiles": "选择文件",
|
"ButtonChooseFiles": "选择文件",
|
||||||
"ButtonClearFilter": "清除过滤器",
|
"ButtonClearFilter": "清除过滤器",
|
||||||
"ButtonClose": "关闭",
|
|
||||||
"ButtonCloseFeed": "关闭源",
|
"ButtonCloseFeed": "关闭源",
|
||||||
"ButtonCloseSession": "关闭活动会话",
|
"ButtonCloseSession": "关闭开放会话",
|
||||||
"ButtonCollections": "收藏",
|
"ButtonCollections": "收藏",
|
||||||
"ButtonConfigureScanner": "配置扫描",
|
"ButtonConfigureScanner": "配置扫描",
|
||||||
"ButtonCreate": "创建",
|
"ButtonCreate": "创建",
|
||||||
@ -75,7 +73,7 @@
|
|||||||
"ButtonQuickMatch": "快速匹配",
|
"ButtonQuickMatch": "快速匹配",
|
||||||
"ButtonReScan": "重新扫描",
|
"ButtonReScan": "重新扫描",
|
||||||
"ButtonRead": "读取",
|
"ButtonRead": "读取",
|
||||||
"ButtonReadLess": "收起",
|
"ButtonReadLess": "阅读较少",
|
||||||
"ButtonReadMore": "阅读更多",
|
"ButtonReadMore": "阅读更多",
|
||||||
"ButtonRefresh": "刷新",
|
"ButtonRefresh": "刷新",
|
||||||
"ButtonRemove": "移除",
|
"ButtonRemove": "移除",
|
||||||
@ -121,7 +119,6 @@
|
|||||||
"HeaderAccount": "帐户",
|
"HeaderAccount": "帐户",
|
||||||
"HeaderAddCustomMetadataProvider": "添加自定义元数据提供商",
|
"HeaderAddCustomMetadataProvider": "添加自定义元数据提供商",
|
||||||
"HeaderAdvanced": "高级",
|
"HeaderAdvanced": "高级",
|
||||||
"HeaderApiKeys": "API 密钥",
|
|
||||||
"HeaderAppriseNotificationSettings": "测试通知设置",
|
"HeaderAppriseNotificationSettings": "测试通知设置",
|
||||||
"HeaderAudioTracks": "音轨",
|
"HeaderAudioTracks": "音轨",
|
||||||
"HeaderAudiobookTools": "有声读物文件管理工具",
|
"HeaderAudiobookTools": "有声读物文件管理工具",
|
||||||
@ -165,13 +162,12 @@
|
|||||||
"HeaderMetadataOrderOfPrecedence": "元数据优先级",
|
"HeaderMetadataOrderOfPrecedence": "元数据优先级",
|
||||||
"HeaderMetadataToEmbed": "嵌入元数据",
|
"HeaderMetadataToEmbed": "嵌入元数据",
|
||||||
"HeaderNewAccount": "新建帐户",
|
"HeaderNewAccount": "新建帐户",
|
||||||
"HeaderNewApiKey": "新建 API 密钥",
|
|
||||||
"HeaderNewLibrary": "新建媒体库",
|
"HeaderNewLibrary": "新建媒体库",
|
||||||
"HeaderNotificationCreate": "创建通知",
|
"HeaderNotificationCreate": "创建通知",
|
||||||
"HeaderNotificationUpdate": "更新通知",
|
"HeaderNotificationUpdate": "更新通知",
|
||||||
"HeaderNotifications": "通知",
|
"HeaderNotifications": "通知",
|
||||||
"HeaderOpenIDConnectAuthentication": "OpenID 连接身份验证",
|
"HeaderOpenIDConnectAuthentication": "OpenID 连接身份验证",
|
||||||
"HeaderOpenListeningSessions": "活动中会话",
|
"HeaderOpenListeningSessions": "打开收听会话",
|
||||||
"HeaderOpenRSSFeed": "打开 RSS 源",
|
"HeaderOpenRSSFeed": "打开 RSS 源",
|
||||||
"HeaderOtherFiles": "其他文件",
|
"HeaderOtherFiles": "其他文件",
|
||||||
"HeaderPasswordAuthentication": "密码认证",
|
"HeaderPasswordAuthentication": "密码认证",
|
||||||
@ -181,7 +177,6 @@
|
|||||||
"HeaderPlaylist": "播放列表",
|
"HeaderPlaylist": "播放列表",
|
||||||
"HeaderPlaylistItems": "播放列表项目",
|
"HeaderPlaylistItems": "播放列表项目",
|
||||||
"HeaderPodcastsToAdd": "要添加的播客",
|
"HeaderPodcastsToAdd": "要添加的播客",
|
||||||
"HeaderPresets": "预设",
|
|
||||||
"HeaderPreviewCover": "预览封面",
|
"HeaderPreviewCover": "预览封面",
|
||||||
"HeaderRSSFeedGeneral": "RSS 详细信息",
|
"HeaderRSSFeedGeneral": "RSS 详细信息",
|
||||||
"HeaderRSSFeedIsOpen": "RSS 源已打开",
|
"HeaderRSSFeedIsOpen": "RSS 源已打开",
|
||||||
@ -210,14 +205,13 @@
|
|||||||
"HeaderTableOfContents": "目录",
|
"HeaderTableOfContents": "目录",
|
||||||
"HeaderTools": "工具",
|
"HeaderTools": "工具",
|
||||||
"HeaderUpdateAccount": "更新帐户",
|
"HeaderUpdateAccount": "更新帐户",
|
||||||
"HeaderUpdateApiKey": "更新 API 密钥",
|
|
||||||
"HeaderUpdateAuthor": "更新作者",
|
"HeaderUpdateAuthor": "更新作者",
|
||||||
"HeaderUpdateDetails": "更新详情",
|
"HeaderUpdateDetails": "更新详情",
|
||||||
"HeaderUpdateLibrary": "更新媒体库",
|
"HeaderUpdateLibrary": "更新媒体库",
|
||||||
"HeaderUsers": "用户",
|
"HeaderUsers": "用户",
|
||||||
"HeaderYearReview": "{0} 年回顾",
|
"HeaderYearReview": "{0} 年回顾",
|
||||||
"HeaderYourStats": "你的统计数据",
|
"HeaderYourStats": "你的统计数据",
|
||||||
"LabelAbridged": "删节版",
|
"LabelAbridged": "概要",
|
||||||
"LabelAbridgedChecked": "删节版 (已勾选)",
|
"LabelAbridgedChecked": "删节版 (已勾选)",
|
||||||
"LabelAbridgedUnchecked": "未删节版 (未勾选)",
|
"LabelAbridgedUnchecked": "未删节版 (未勾选)",
|
||||||
"LabelAccessibleBy": "可访问",
|
"LabelAccessibleBy": "可访问",
|
||||||
@ -240,10 +234,6 @@
|
|||||||
"LabelAllUsersExcludingGuests": "除访客外的所有用户",
|
"LabelAllUsersExcludingGuests": "除访客外的所有用户",
|
||||||
"LabelAllUsersIncludingGuests": "包括访客的所有用户",
|
"LabelAllUsersIncludingGuests": "包括访客的所有用户",
|
||||||
"LabelAlreadyInYourLibrary": "已存在你的库中",
|
"LabelAlreadyInYourLibrary": "已存在你的库中",
|
||||||
"LabelApiKeyCreated": "API 密钥 \"{0}\" 创建成功.",
|
|
||||||
"LabelApiKeyCreatedDescription": "请确保现在就复制 API 密钥, 之后将无法再次查看.",
|
|
||||||
"LabelApiKeyUser": "代用户操作",
|
|
||||||
"LabelApiKeyUserDescription": "此 API 密钥将具有与其代理的用户相同的权限. 在日志中, 其请求将被视为由该用户直接发出.",
|
|
||||||
"LabelApiToken": "API 令牌",
|
"LabelApiToken": "API 令牌",
|
||||||
"LabelAppend": "附加",
|
"LabelAppend": "附加",
|
||||||
"LabelAudioBitrate": "音频比特率 (例如: 128k)",
|
"LabelAudioBitrate": "音频比特率 (例如: 128k)",
|
||||||
@ -329,7 +319,7 @@
|
|||||||
"LabelEmailSettingsRejectUnauthorized": "拒绝未经授权的证书",
|
"LabelEmailSettingsRejectUnauthorized": "拒绝未经授权的证书",
|
||||||
"LabelEmailSettingsRejectUnauthorizedHelp": "禁用SSL证书验证可能会使你的连接面临安全风险, 例如中间人攻击. 只有当你了解其中的含义并信任所连接的邮件服务器时, 才能禁用此选项.",
|
"LabelEmailSettingsRejectUnauthorizedHelp": "禁用SSL证书验证可能会使你的连接面临安全风险, 例如中间人攻击. 只有当你了解其中的含义并信任所连接的邮件服务器时, 才能禁用此选项.",
|
||||||
"LabelEmailSettingsSecure": "安全",
|
"LabelEmailSettingsSecure": "安全",
|
||||||
"LabelEmailSettingsSecureHelp": "开启此选项时, 将始终通过TLS连接服务器. 关闭此选项时, 仅在服务器支持STARTTLS扩展时使用TLS. 在大多数情况下, 如果连接到端口465, 请将此项设为开启. 如果连接到端口587或25, 请将此设置保持为关闭. (来自nodemailer.com/smtp/#authentication)",
|
"LabelEmailSettingsSecureHelp": "如果选是, 则连接将在连接到服务器时使用TLS. 如果选否, 则若服务器支持STARTTLS扩展, 则使用TLS. 在大多数情况下, 如果连接到端口465, 请将该值设置为是. 对于端口587或25, 请保持为否. (来自nodemailer.com/smtp/#authentication)",
|
||||||
"LabelEmailSettingsTestAddress": "测试地址",
|
"LabelEmailSettingsTestAddress": "测试地址",
|
||||||
"LabelEmbeddedCover": "嵌入封面",
|
"LabelEmbeddedCover": "嵌入封面",
|
||||||
"LabelEnable": "启用",
|
"LabelEnable": "启用",
|
||||||
@ -355,19 +345,15 @@
|
|||||||
"LabelExample": "示例",
|
"LabelExample": "示例",
|
||||||
"LabelExpandSeries": "展开系列",
|
"LabelExpandSeries": "展开系列",
|
||||||
"LabelExpandSubSeries": "展开子系列",
|
"LabelExpandSubSeries": "展开子系列",
|
||||||
"LabelExpired": "已过期",
|
"LabelExplicit": "信息准确",
|
||||||
"LabelExpiresAt": "过期时间",
|
"LabelExplicitChecked": "明确(已选中)",
|
||||||
"LabelExpiresInSeconds": "有效期 (秒)",
|
"LabelExplicitUnchecked": "不明确 (未选中)",
|
||||||
"LabelExpiresNever": "从不",
|
|
||||||
"LabelExplicit": "含成人内容",
|
|
||||||
"LabelExplicitChecked": "成人内容 (已核实)",
|
|
||||||
"LabelExplicitUnchecked": "无成人内容 (未核实)",
|
|
||||||
"LabelExportOPML": "导出 OPML",
|
"LabelExportOPML": "导出 OPML",
|
||||||
"LabelFeedURL": "源 URL",
|
"LabelFeedURL": "源 URL",
|
||||||
"LabelFetchingMetadata": "正在获取元数据",
|
"LabelFetchingMetadata": "正在获取元数据",
|
||||||
"LabelFile": "文件",
|
"LabelFile": "文件",
|
||||||
"LabelFileBirthtime": "文件创建时间",
|
"LabelFileBirthtime": "文件创建时间",
|
||||||
"LabelFileBornDate": "添加于 {0}",
|
"LabelFileBornDate": "生于 {0}",
|
||||||
"LabelFileModified": "文件修改时间",
|
"LabelFileModified": "文件修改时间",
|
||||||
"LabelFileModifiedDate": "已修改 {0}",
|
"LabelFileModifiedDate": "已修改 {0}",
|
||||||
"LabelFilename": "文件名",
|
"LabelFilename": "文件名",
|
||||||
@ -438,7 +424,6 @@
|
|||||||
"LabelLogLevelWarn": "警告",
|
"LabelLogLevelWarn": "警告",
|
||||||
"LabelLookForNewEpisodesAfterDate": "在此日期后查找新剧集",
|
"LabelLookForNewEpisodesAfterDate": "在此日期后查找新剧集",
|
||||||
"LabelLowestPriority": "最低优先级",
|
"LabelLowestPriority": "最低优先级",
|
||||||
"LabelMatchConfidence": "置信度",
|
|
||||||
"LabelMatchExistingUsersBy": "匹配现有用户",
|
"LabelMatchExistingUsersBy": "匹配现有用户",
|
||||||
"LabelMatchExistingUsersByDescription": "用于连接现有用户. 连接后, 用户将通过 SSO 提供商提供的唯一 id 进行匹配",
|
"LabelMatchExistingUsersByDescription": "用于连接现有用户. 连接后, 用户将通过 SSO 提供商提供的唯一 id 进行匹配",
|
||||||
"LabelMaxEpisodesToDownload": "可下载的最大集数. 输入 0 表示无限制.",
|
"LabelMaxEpisodesToDownload": "可下载的最大集数. 输入 0 表示无限制.",
|
||||||
@ -469,7 +454,6 @@
|
|||||||
"LabelNewestEpisodes": "最新剧集",
|
"LabelNewestEpisodes": "最新剧集",
|
||||||
"LabelNextBackupDate": "下次备份日期",
|
"LabelNextBackupDate": "下次备份日期",
|
||||||
"LabelNextScheduledRun": "下次任务运行",
|
"LabelNextScheduledRun": "下次任务运行",
|
||||||
"LabelNoApiKeys": "无 API 密钥",
|
|
||||||
"LabelNoCustomMetadataProviders": "没有自定义元数据提供商",
|
"LabelNoCustomMetadataProviders": "没有自定义元数据提供商",
|
||||||
"LabelNoEpisodesSelected": "未选择任何剧集",
|
"LabelNoEpisodesSelected": "未选择任何剧集",
|
||||||
"LabelNotFinished": "未听完",
|
"LabelNotFinished": "未听完",
|
||||||
@ -497,7 +481,7 @@
|
|||||||
"LabelPermanent": "永久的",
|
"LabelPermanent": "永久的",
|
||||||
"LabelPermissionsAccessAllLibraries": "可以访问所有媒体库",
|
"LabelPermissionsAccessAllLibraries": "可以访问所有媒体库",
|
||||||
"LabelPermissionsAccessAllTags": "可以访问所有标签",
|
"LabelPermissionsAccessAllTags": "可以访问所有标签",
|
||||||
"LabelPermissionsAccessExplicitContent": "可以访问成人内容",
|
"LabelPermissionsAccessExplicitContent": "可以访问显式内容",
|
||||||
"LabelPermissionsCreateEreader": "可以创建电子阅读器",
|
"LabelPermissionsCreateEreader": "可以创建电子阅读器",
|
||||||
"LabelPermissionsDelete": "可以删除",
|
"LabelPermissionsDelete": "可以删除",
|
||||||
"LabelPermissionsDownload": "可以下载",
|
"LabelPermissionsDownload": "可以下载",
|
||||||
@ -546,7 +530,6 @@
|
|||||||
"LabelReleaseDate": "发布日期",
|
"LabelReleaseDate": "发布日期",
|
||||||
"LabelRemoveAllMetadataAbs": "删除所有 metadata.abs 文件",
|
"LabelRemoveAllMetadataAbs": "删除所有 metadata.abs 文件",
|
||||||
"LabelRemoveAllMetadataJson": "删除所有 metadata.json 文件",
|
"LabelRemoveAllMetadataJson": "删除所有 metadata.json 文件",
|
||||||
"LabelRemoveAudibleBranding": "删除章节中的 Audible 简介和结尾",
|
|
||||||
"LabelRemoveCover": "移除封面",
|
"LabelRemoveCover": "移除封面",
|
||||||
"LabelRemoveMetadataFile": "删除库项目文件夹中的元数据文件",
|
"LabelRemoveMetadataFile": "删除库项目文件夹中的元数据文件",
|
||||||
"LabelRemoveMetadataFileHelp": "删除 {0} 文件夹中的所有 metadata.json 和 metadata.abs 文件.",
|
"LabelRemoveMetadataFileHelp": "删除 {0} 文件夹中的所有 metadata.json 和 metadata.abs 文件.",
|
||||||
@ -559,7 +542,6 @@
|
|||||||
"LabelSelectAll": "全选",
|
"LabelSelectAll": "全选",
|
||||||
"LabelSelectAllEpisodes": "选择所有剧集",
|
"LabelSelectAllEpisodes": "选择所有剧集",
|
||||||
"LabelSelectEpisodesShowing": "选择正在播放的 {0} 剧集",
|
"LabelSelectEpisodesShowing": "选择正在播放的 {0} 剧集",
|
||||||
"LabelSelectUser": "选择用户",
|
|
||||||
"LabelSelectUsers": "选择用户",
|
"LabelSelectUsers": "选择用户",
|
||||||
"LabelSendEbookToDevice": "发送电子书到...",
|
"LabelSendEbookToDevice": "发送电子书到...",
|
||||||
"LabelSequence": "序列",
|
"LabelSequence": "序列",
|
||||||
@ -626,15 +608,15 @@
|
|||||||
"LabelStart": "开始",
|
"LabelStart": "开始",
|
||||||
"LabelStartTime": "开始时间",
|
"LabelStartTime": "开始时间",
|
||||||
"LabelStarted": "开始于",
|
"LabelStarted": "开始于",
|
||||||
"LabelStartedAt": "收听始于",
|
"LabelStartedAt": "从这开始",
|
||||||
"LabelStatsAudioTracks": "音轨",
|
"LabelStatsAudioTracks": "音轨",
|
||||||
"LabelStatsAuthors": "作者",
|
"LabelStatsAuthors": "作者",
|
||||||
"LabelStatsBestDay": "单日最高",
|
"LabelStatsBestDay": "最好的一天",
|
||||||
"LabelStatsDailyAverage": "每日平均值",
|
"LabelStatsDailyAverage": "每日平均值",
|
||||||
"LabelStatsDays": "连续",
|
"LabelStatsDays": "天",
|
||||||
"LabelStatsDaysListened": "收听天数",
|
"LabelStatsDaysListened": "收听天数",
|
||||||
"LabelStatsHours": "小时",
|
"LabelStatsHours": "小时",
|
||||||
"LabelStatsInARow": "天",
|
"LabelStatsInARow": "在一行",
|
||||||
"LabelStatsItemsFinished": "已完成的项目",
|
"LabelStatsItemsFinished": "已完成的项目",
|
||||||
"LabelStatsItemsInLibrary": "媒体库中的项目",
|
"LabelStatsItemsInLibrary": "媒体库中的项目",
|
||||||
"LabelStatsMinutes": "分钟",
|
"LabelStatsMinutes": "分钟",
|
||||||
@ -724,15 +706,12 @@
|
|||||||
"MessageAddToPlayerQueue": "添加到播放队列",
|
"MessageAddToPlayerQueue": "添加到播放队列",
|
||||||
"MessageAppriseDescription": "要使用此功能,你需要运行一个 <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> 实例或一个可以处理这些相同请求的 API. <br />Apprise API Url 应该是发送通知的完整 URL 路径, 例如: 如果你的 API 实例运行在 <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> 实例或一个可以处理这些相同请求的 API. <br />Apprise API Url 应该是发送通知的完整 URL 路径, 例如: 如果你的 API 实例运行在 <code>http://192.168.1.1:8337</code>, 那么你可以输入 <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageAsinCheck": "确保你使用的 ASIN 来自正确的 Audible 地区, 而不是亚马逊.",
|
"MessageAsinCheck": "确保你使用的 ASIN 来自正确的 Audible 地区, 而不是亚马逊.",
|
||||||
"MessageAuthenticationLegacyTokenWarning": "旧版 API 令牌将来会被移除. 请改用 <a href=\"/config/api-keys\">API 密钥</a>.",
|
|
||||||
"MessageAuthenticationOIDCChangesRestart": "保存后重新启动服务器以应用 OIDC 更改.",
|
|
||||||
"MessageAuthenticationSecurityMessage": "身份验证安全性已增强, 所有用户都需要重新登录.",
|
|
||||||
"MessageBackupsDescription": "备份包括用户, 用户进度, 媒体库项目详细信息, 服务器设置和图像, 存储在 <code>/metadata/items</code> & <code>/metadata/authors</code>. 备份不包括存储在你的媒体库文件夹中的任何文件.",
|
"MessageBackupsDescription": "备份包括用户, 用户进度, 媒体库项目详细信息, 服务器设置和图像, 存储在 <code>/metadata/items</code> & <code>/metadata/authors</code>. 备份不包括存储在你的媒体库文件夹中的任何文件.",
|
||||||
"MessageBackupsLocationEditNote": "注意: 更新备份位置不会移动或修改现有备份",
|
"MessageBackupsLocationEditNote": "注意: 更新备份位置不会移动或修改现有备份",
|
||||||
"MessageBackupsLocationNoEditNote": "注意: 备份位置是通过环境变量设置的, 不能在此处更改.",
|
"MessageBackupsLocationNoEditNote": "注意: 备份位置是通过环境变量设置的, 不能在此处更改.",
|
||||||
"MessageBackupsLocationPathEmpty": "备份位置路径不能为空",
|
"MessageBackupsLocationPathEmpty": "备份位置路径不能为空",
|
||||||
"MessageBatchEditPopulateMapDetailsAllHelp": "使用所有项目的数据填充已启用的字段. 具有多个值的字段将被合并",
|
"MessageBatchEditPopulateMapDetailsAllHelp": "使用所有项目的数据填充已启用的字段. 具有多个值的字段将被合并",
|
||||||
"MessageBatchEditPopulateMapDetailsItemHelp": "提取此项目的信息, 填入上方所有勾选的编辑框中",
|
"MessageBatchEditPopulateMapDetailsItemHelp": "使用此项目的数据填充已启用的地图详细信息字段",
|
||||||
"MessageBatchQuickMatchDescription": "快速匹配将尝试为所选项目添加缺少的封面和元数据. 启用以下选项以允许快速匹配覆盖现有封面和或元数据.",
|
"MessageBatchQuickMatchDescription": "快速匹配将尝试为所选项目添加缺少的封面和元数据. 启用以下选项以允许快速匹配覆盖现有封面和或元数据.",
|
||||||
"MessageBookshelfNoCollections": "你尚未进行任何收藏",
|
"MessageBookshelfNoCollections": "你尚未进行任何收藏",
|
||||||
"MessageBookshelfNoCollectionsHelp": "收藏是公开的. 所有有权访问图书馆的用户都可以看到它们.",
|
"MessageBookshelfNoCollectionsHelp": "收藏是公开的. 所有有权访问图书馆的用户都可以看到它们.",
|
||||||
@ -748,7 +727,6 @@
|
|||||||
"MessageChaptersNotFound": "未找到章节",
|
"MessageChaptersNotFound": "未找到章节",
|
||||||
"MessageCheckingCron": "检查计划任务...",
|
"MessageCheckingCron": "检查计划任务...",
|
||||||
"MessageConfirmCloseFeed": "你确定要关闭此订阅源吗?",
|
"MessageConfirmCloseFeed": "你确定要关闭此订阅源吗?",
|
||||||
"MessageConfirmDeleteApiKey": "你确定要删除 API 密钥 \"{0}\" 吗?",
|
|
||||||
"MessageConfirmDeleteBackup": "你确定要删除备份 {0}?",
|
"MessageConfirmDeleteBackup": "你确定要删除备份 {0}?",
|
||||||
"MessageConfirmDeleteDevice": "你确定要删除电子阅读器设备 \"{0}\" 吗?",
|
"MessageConfirmDeleteDevice": "你确定要删除电子阅读器设备 \"{0}\" 吗?",
|
||||||
"MessageConfirmDeleteFile": "这将从文件系统中删除该文件. 你确定吗?",
|
"MessageConfirmDeleteFile": "这将从文件系统中删除该文件. 你确定吗?",
|
||||||
@ -776,7 +754,6 @@
|
|||||||
"MessageConfirmRemoveAuthor": "你确定要删除作者 \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "你确定要删除作者 \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "你确定要移除收藏 \"{0}\"?",
|
"MessageConfirmRemoveCollection": "你确定要移除收藏 \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "你确定要移除剧集 \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "你确定要移除剧集 \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisodeNote": "注意: 此操作不会删除音频文件, 除非勾选 \"完全删除文件\" 选项",
|
|
||||||
"MessageConfirmRemoveEpisodes": "你确定要移除 {0} 剧集?",
|
"MessageConfirmRemoveEpisodes": "你确定要移除 {0} 剧集?",
|
||||||
"MessageConfirmRemoveListeningSessions": "你确定要移除 {0} 收听会话吗?",
|
"MessageConfirmRemoveListeningSessions": "你确定要移除 {0} 收听会话吗?",
|
||||||
"MessageConfirmRemoveMetadataFiles": "你确实要删除库项目文件夹中的所有 metadata.{0} 文件吗?",
|
"MessageConfirmRemoveMetadataFiles": "你确实要删除库项目文件夹中的所有 metadata.{0} 文件吗?",
|
||||||
@ -807,7 +784,7 @@
|
|||||||
"MessageInvalidAsin": "无效的 ASIN",
|
"MessageInvalidAsin": "无效的 ASIN",
|
||||||
"MessageItemsSelected": "已选定 {0} 个项目",
|
"MessageItemsSelected": "已选定 {0} 个项目",
|
||||||
"MessageItemsUpdated": "已更新 {0} 个项目",
|
"MessageItemsUpdated": "已更新 {0} 个项目",
|
||||||
"MessageJoinUsOn": "加入我们的",
|
"MessageJoinUsOn": "加入我们",
|
||||||
"MessageLoading": "正在加载...",
|
"MessageLoading": "正在加载...",
|
||||||
"MessageLoadingFolders": "加载文件夹...",
|
"MessageLoadingFolders": "加载文件夹...",
|
||||||
"MessageLogsDescription": "日志以 JSON 文件形式存储在 <code>/metadata/logs</code> 目录中. 崩溃日志存储在 <code>/metadata/logs/crash_logs.txt</code> 目录中.",
|
"MessageLogsDescription": "日志以 JSON 文件形式存储在 <code>/metadata/logs</code> 目录中. 崩溃日志存储在 <code>/metadata/logs/crash_logs.txt</code> 目录中.",
|
||||||
@ -868,15 +845,14 @@
|
|||||||
"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} 已选择",
|
||||||
"MessageSeriesSequenceCannotContainSpaces": "系列序列不能包含空格",
|
|
||||||
"MessageServerCouldNotBeReached": "无法访问服务器",
|
"MessageServerCouldNotBeReached": "无法访问服务器",
|
||||||
"MessageSetChaptersFromTracksDescription": "把每个音频文件设置为章节并将章节标题设置为音频文件名",
|
"MessageSetChaptersFromTracksDescription": "把每个音频文件设置为章节并将章节标题设置为音频文件名",
|
||||||
"MessageShareExpirationWillBe": "到期日期为 <strong>{0}</strong>",
|
"MessageShareExpirationWillBe": "到期日期为 <strong>{0}</strong>",
|
||||||
@ -937,9 +913,7 @@
|
|||||||
"NoteUploaderUnsupportedFiles": "不支持的文件将被忽略. 选择或删除文件夹时, 将忽略不在项目文件夹中的其他文件.",
|
"NoteUploaderUnsupportedFiles": "不支持的文件将被忽略. 选择或删除文件夹时, 将忽略不在项目文件夹中的其他文件.",
|
||||||
"NotificationOnBackupCompletedDescription": "备份完成时触发",
|
"NotificationOnBackupCompletedDescription": "备份完成时触发",
|
||||||
"NotificationOnBackupFailedDescription": "备份失败时触发",
|
"NotificationOnBackupFailedDescription": "备份失败时触发",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "当播客节目自动下载完成时触发",
|
"NotificationOnEpisodeDownloadedDescription": "当播客节目自动下载时触发",
|
||||||
"NotificationOnRSSFeedDisabledDescription": "由于尝试失败次数过多而导致剧集自动下载被禁用时触发",
|
|
||||||
"NotificationOnRSSFeedFailedDescription": "当用于自动下载剧集的 RSS 源请求失败时触发",
|
|
||||||
"NotificationOnTestDescription": "测试通知系统的事件",
|
"NotificationOnTestDescription": "测试通知系统的事件",
|
||||||
"PlaceholderNewCollection": "输入收藏夹名称",
|
"PlaceholderNewCollection": "输入收藏夹名称",
|
||||||
"PlaceholderNewFolderPath": "输入文件夹路径",
|
"PlaceholderNewFolderPath": "输入文件夹路径",
|
||||||
@ -997,8 +971,6 @@
|
|||||||
"ToastCachePurgeFailed": "清除缓存失败",
|
"ToastCachePurgeFailed": "清除缓存失败",
|
||||||
"ToastCachePurgeSuccess": "缓存清除成功",
|
"ToastCachePurgeSuccess": "缓存清除成功",
|
||||||
"ToastChaptersHaveErrors": "章节有错误",
|
"ToastChaptersHaveErrors": "章节有错误",
|
||||||
"ToastChaptersInvalidShiftAmountLast": "偏移量无效. 最后一章的开始时间将超过这本有声读物的持续时间.",
|
|
||||||
"ToastChaptersInvalidShiftAmountStart": "偏移量无效. 第一章的长度将为零或负数, 并会被第二章覆盖. 请增加第二章的起始时长.",
|
|
||||||
"ToastChaptersMustHaveTitles": "章节必须有标题",
|
"ToastChaptersMustHaveTitles": "章节必须有标题",
|
||||||
"ToastChaptersRemoved": "已删除章节",
|
"ToastChaptersRemoved": "已删除章节",
|
||||||
"ToastChaptersUpdated": "章节已更新",
|
"ToastChaptersUpdated": "章节已更新",
|
||||||
@ -1020,8 +992,6 @@
|
|||||||
"ToastEpisodeDownloadQueueClearSuccess": "剧集下载队列已清空",
|
"ToastEpisodeDownloadQueueClearSuccess": "剧集下载队列已清空",
|
||||||
"ToastEpisodeUpdateSuccess": "已更新 {0} 剧集",
|
"ToastEpisodeUpdateSuccess": "已更新 {0} 剧集",
|
||||||
"ToastErrorCannotShare": "无法在此设备上本地共享",
|
"ToastErrorCannotShare": "无法在此设备上本地共享",
|
||||||
"ToastFailedToCreate": "创建失败",
|
|
||||||
"ToastFailedToDelete": "删除失败",
|
|
||||||
"ToastFailedToLoadData": "加载数据失败",
|
"ToastFailedToLoadData": "加载数据失败",
|
||||||
"ToastFailedToMatch": "匹配失败",
|
"ToastFailedToMatch": "匹配失败",
|
||||||
"ToastFailedToShare": "分享失败",
|
"ToastFailedToShare": "分享失败",
|
||||||
@ -1053,7 +1023,6 @@
|
|||||||
"ToastMustHaveAtLeastOnePath": "必须至少有一个路径",
|
"ToastMustHaveAtLeastOnePath": "必须至少有一个路径",
|
||||||
"ToastNameEmailRequired": "姓名和电子邮件为必填项",
|
"ToastNameEmailRequired": "姓名和电子邮件为必填项",
|
||||||
"ToastNameRequired": "姓名为必填项",
|
"ToastNameRequired": "姓名为必填项",
|
||||||
"ToastNewApiKeyUserError": "必须选择一个用户",
|
|
||||||
"ToastNewEpisodesFound": "找到 {0} 个新剧集",
|
"ToastNewEpisodesFound": "找到 {0} 个新剧集",
|
||||||
"ToastNewUserCreatedFailed": "无法创建帐户: \"{0}\"",
|
"ToastNewUserCreatedFailed": "无法创建帐户: \"{0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "已创建新帐户",
|
"ToastNewUserCreatedSuccess": "已创建新帐户",
|
||||||
|
7
index.js
7
index.js
@ -4,9 +4,7 @@ const optionDefinitions = [
|
|||||||
{ name: 'port', alias: 'p', type: String },
|
{ name: 'port', alias: 'p', type: String },
|
||||||
{ name: 'host', alias: 'h', type: String },
|
{ name: 'host', alias: 'h', type: String },
|
||||||
{ name: 'source', alias: 's', type: String },
|
{ name: 'source', alias: 's', type: String },
|
||||||
{ name: 'dev', alias: 'd', type: Boolean },
|
{ name: 'dev', alias: 'd', type: Boolean }
|
||||||
// Run in production mode and use dev.js config
|
|
||||||
{ name: 'prod-with-dev-env', alias: 'r', type: Boolean }
|
|
||||||
]
|
]
|
||||||
|
|
||||||
const commandLineArgs = require('./server/libs/commandLineArgs')
|
const commandLineArgs = require('./server/libs/commandLineArgs')
|
||||||
@ -19,7 +17,7 @@ const server = require('./server/Server')
|
|||||||
global.appRoot = __dirname
|
global.appRoot = __dirname
|
||||||
|
|
||||||
const isDev = process.env.NODE_ENV !== 'production'
|
const isDev = process.env.NODE_ENV !== 'production'
|
||||||
if (isDev || options['prod-with-dev-env']) {
|
if (isDev) {
|
||||||
const devEnv = require('./dev').config
|
const devEnv = require('./dev').config
|
||||||
if (devEnv.Port) process.env.PORT = devEnv.Port
|
if (devEnv.Port) process.env.PORT = devEnv.Port
|
||||||
if (devEnv.ConfigPath) process.env.CONFIG_PATH = devEnv.ConfigPath
|
if (devEnv.ConfigPath) process.env.CONFIG_PATH = devEnv.ConfigPath
|
||||||
@ -30,7 +28,6 @@ if (isDev || options['prod-with-dev-env']) {
|
|||||||
if (devEnv.SkipBinariesCheck) process.env.SKIP_BINARIES_CHECK = '1'
|
if (devEnv.SkipBinariesCheck) process.env.SKIP_BINARIES_CHECK = '1'
|
||||||
if (devEnv.AllowIframe) process.env.ALLOW_IFRAME = '1'
|
if (devEnv.AllowIframe) process.env.ALLOW_IFRAME = '1'
|
||||||
if (devEnv.BackupPath) process.env.BACKUP_PATH = devEnv.BackupPath
|
if (devEnv.BackupPath) process.env.BACKUP_PATH = devEnv.BackupPath
|
||||||
if (devEnv.ReactClientPath) process.env.REACT_CLIENT_PATH = devEnv.ReactClientPath
|
|
||||||
process.env.SOURCE = 'local'
|
process.env.SOURCE = 'local'
|
||||||
process.env.ROUTER_BASE_PATH = devEnv.RouterBasePath ?? '/audiobookshelf'
|
process.env.ROUTER_BASE_PATH = devEnv.RouterBasePath ?? '/audiobookshelf'
|
||||||
}
|
}
|
||||||
|
20
package-lock.json
generated
20
package-lock.json
generated
@ -1,18 +1,17 @@
|
|||||||
{
|
{
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.26.3",
|
"version": "2.22.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.26.3",
|
"version": "2.22.0",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.27.2",
|
"axios": "^0.27.2",
|
||||||
"cookie-parser": "^1.4.6",
|
"cookie-parser": "^1.4.6",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-rate-limit": "^7.5.1",
|
|
||||||
"express-session": "^1.17.3",
|
"express-session": "^1.17.3",
|
||||||
"graceful-fs": "^4.2.10",
|
"graceful-fs": "^4.2.10",
|
||||||
"htmlparser2": "^8.0.1",
|
"htmlparser2": "^8.0.1",
|
||||||
@ -1894,21 +1893,6 @@
|
|||||||
"node": ">= 0.10.0"
|
"node": ">= 0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/express-rate-limit": {
|
|
||||||
"version": "7.5.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz",
|
|
||||||
"integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 16"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/express-rate-limit"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"express": ">= 4.11"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/express-session": {
|
"node_modules/express-session": {
|
||||||
"version": "1.17.3",
|
"version": "1.17.3",
|
||||||
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
|
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.26.3",
|
"version": "2.22.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",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "nodemon --watch server index.js -- --dev",
|
"dev": "nodemon --watch server index.js -- --dev",
|
||||||
"start": "node index.js",
|
"start": "node index.js",
|
||||||
"start-dev": "node index.js --prod-with-dev-env",
|
|
||||||
"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 .",
|
||||||
@ -40,7 +39,6 @@
|
|||||||
"axios": "^0.27.2",
|
"axios": "^0.27.2",
|
||||||
"cookie-parser": "^1.4.6",
|
"cookie-parser": "^1.4.6",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-rate-limit": "^7.5.1",
|
|
||||||
"express-session": "^1.17.3",
|
"express-session": "^1.17.3",
|
||||||
"graceful-fs": "^4.2.10",
|
"graceful-fs": "^4.2.10",
|
||||||
"htmlparser2": "^8.0.1",
|
"htmlparser2": "^8.0.1",
|
||||||
|
906
server/Auth.js
906
server/Auth.js
File diff suppressed because it is too large
Load Diff
@ -42,16 +42,6 @@ class Database {
|
|||||||
return this.models.user
|
return this.models.user
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @type {typeof import('./models/Session')} */
|
|
||||||
get sessionModel() {
|
|
||||||
return this.models.session
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @type {typeof import('./models/ApiKey')} */
|
|
||||||
get apiKeyModel() {
|
|
||||||
return this.models.apiKey
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @type {typeof import('./models/Library')} */
|
/** @type {typeof import('./models/Library')} */
|
||||||
get libraryModel() {
|
get libraryModel() {
|
||||||
return this.models.library
|
return this.models.library
|
||||||
@ -321,8 +311,6 @@ class Database {
|
|||||||
|
|
||||||
buildModels(force = false) {
|
buildModels(force = false) {
|
||||||
require('./models/User').init(this.sequelize)
|
require('./models/User').init(this.sequelize)
|
||||||
require('./models/Session').init(this.sequelize)
|
|
||||||
require('./models/ApiKey').init(this.sequelize)
|
|
||||||
require('./models/Library').init(this.sequelize)
|
require('./models/Library').init(this.sequelize)
|
||||||
require('./models/LibraryFolder').init(this.sequelize)
|
require('./models/LibraryFolder').init(this.sequelize)
|
||||||
require('./models/Book').init(this.sequelize)
|
require('./models/Book').init(this.sequelize)
|
||||||
@ -668,9 +656,6 @@ class Database {
|
|||||||
* Series should have atleast one Book
|
* Series should have atleast one Book
|
||||||
* Book and Podcast must have an associated LibraryItem (and vice versa)
|
* Book and Podcast must have an associated LibraryItem (and vice versa)
|
||||||
* Remove playback sessions that are 3 seconds or less
|
* Remove playback sessions that are 3 seconds or less
|
||||||
* Remove duplicate mediaProgresses
|
|
||||||
* Remove expired auth sessions
|
|
||||||
* Deactivate expired api keys
|
|
||||||
*/
|
*/
|
||||||
async cleanDatabase() {
|
async cleanDatabase() {
|
||||||
// Remove invalid Podcast records
|
// Remove invalid Podcast records
|
||||||
@ -780,60 +765,6 @@ class Database {
|
|||||||
if (badSessionsRemoved > 0) {
|
if (badSessionsRemoved > 0) {
|
||||||
Logger.warn(`Removed ${badSessionsRemoved} sessions that were 3 seconds or less`)
|
Logger.warn(`Removed ${badSessionsRemoved} sessions that were 3 seconds or less`)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove mediaProgresses with duplicate mediaItemId (remove the oldest updatedAt or if updatedAt is the same, remove arbitrary one)
|
|
||||||
const [duplicateMediaProgresses] = await this.sequelize.query(`SELECT mp1.id, mp1.mediaItemId
|
|
||||||
FROM mediaProgresses mp1
|
|
||||||
WHERE EXISTS (
|
|
||||||
SELECT 1
|
|
||||||
FROM mediaProgresses mp2
|
|
||||||
WHERE mp2.mediaItemId = mp1.mediaItemId
|
|
||||||
AND mp2.userId = mp1.userId
|
|
||||||
AND (
|
|
||||||
mp2.updatedAt > mp1.updatedAt
|
|
||||||
OR (mp2.updatedAt = mp1.updatedAt AND mp2.id < mp1.id)
|
|
||||||
)
|
|
||||||
)`)
|
|
||||||
for (const duplicateMediaProgress of duplicateMediaProgresses) {
|
|
||||||
Logger.warn(`Found duplicate mediaProgress for mediaItem "${duplicateMediaProgress.mediaItemId}" - removing it`)
|
|
||||||
await this.mediaProgressModel.destroy({
|
|
||||||
where: { id: duplicateMediaProgress.id }
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove expired Session records
|
|
||||||
await this.cleanupExpiredSessions()
|
|
||||||
|
|
||||||
// Deactivate expired api keys
|
|
||||||
await this.deactivateExpiredApiKeys()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Deactivate expired api keys
|
|
||||||
*/
|
|
||||||
async deactivateExpiredApiKeys() {
|
|
||||||
try {
|
|
||||||
const affectedCount = await this.apiKeyModel.deactivateExpiredApiKeys()
|
|
||||||
if (affectedCount > 0) {
|
|
||||||
Logger.info(`[Database] Deactivated ${affectedCount} expired api keys`)
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
Logger.error(`[Database] Error deactivating expired api keys: ${error.message}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clean up expired sessions from the database
|
|
||||||
*/
|
|
||||||
async cleanupExpiredSessions() {
|
|
||||||
try {
|
|
||||||
const deletedCount = await this.sessionModel.cleanupExpiredSessions()
|
|
||||||
if (deletedCount > 0) {
|
|
||||||
Logger.info(`[Database] Cleaned up ${deletedCount} expired sessions`)
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
Logger.error(`[Database] Error cleaning up expired sessions: ${error.message}`)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async createTextSearchQuery(query) {
|
async createTextSearchQuery(query) {
|
||||||
|
118
server/Server.js
118
server/Server.js
@ -12,7 +12,6 @@ const { version } = require('../package.json')
|
|||||||
|
|
||||||
// Utils
|
// Utils
|
||||||
const fileUtils = require('./utils/fileUtils')
|
const fileUtils = require('./utils/fileUtils')
|
||||||
const { toNumber } = require('./utils/index')
|
|
||||||
const Logger = require('./Logger')
|
const Logger = require('./Logger')
|
||||||
|
|
||||||
const Auth = require('./Auth')
|
const Auth = require('./Auth')
|
||||||
@ -85,8 +84,12 @@ class Server {
|
|||||||
global.DisableSsrfRequestFilter = (url) => whitelistedUrls.includes(new URL(url).hostname)
|
global.DisableSsrfRequestFilter = (url) => whitelistedUrls.includes(new URL(url).hostname)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
global.PodcastDownloadTimeout = toNumber(process.env.PODCAST_DOWNLOAD_TIMEOUT, 30000)
|
|
||||||
global.MaxFailedEpisodeChecks = toNumber(process.env.MAX_FAILED_EPISODE_CHECKS, 24)
|
if (process.env.PODCAST_DOWNLOAD_TIMEOUT) {
|
||||||
|
global.PodcastDownloadTimeout = process.env.PODCAST_DOWNLOAD_TIMEOUT
|
||||||
|
} else {
|
||||||
|
global.PodcastDownloadTimeout = 30000
|
||||||
|
}
|
||||||
|
|
||||||
if (!fs.pathExistsSync(global.ConfigPath)) {
|
if (!fs.pathExistsSync(global.ConfigPath)) {
|
||||||
fs.mkdirSync(global.ConfigPath)
|
fs.mkdirSync(global.ConfigPath)
|
||||||
@ -156,11 +159,14 @@ class Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await Database.init(false)
|
await Database.init(false)
|
||||||
// Create or set JWT secret in token manager
|
|
||||||
await this.auth.tokenManager.initTokenSecret()
|
|
||||||
|
|
||||||
await Logger.logManager.init()
|
await Logger.logManager.init()
|
||||||
|
|
||||||
|
// Create token secret if does not exist (Added v2.1.0)
|
||||||
|
if (!Database.serverSettings.tokenSecret) {
|
||||||
|
await this.auth.initTokenSecret()
|
||||||
|
}
|
||||||
|
|
||||||
await this.cleanUserData() // Remove invalid user item progress
|
await this.cleanUserData() // Remove invalid user item progress
|
||||||
await CacheManager.ensureCachePaths()
|
await CacheManager.ensureCachePaths()
|
||||||
|
|
||||||
@ -217,7 +223,6 @@ class Server {
|
|||||||
|
|
||||||
async start() {
|
async start() {
|
||||||
Logger.info('=== Starting Server ===')
|
Logger.info('=== Starting Server ===')
|
||||||
|
|
||||||
this.initProcessEventListeners()
|
this.initProcessEventListeners()
|
||||||
await this.init()
|
await this.init()
|
||||||
|
|
||||||
@ -240,7 +245,7 @@ class Server {
|
|||||||
* Running in development allows cors to allow testing the mobile apps in the browser
|
* Running in development allows cors to allow testing the mobile apps in the browser
|
||||||
* or env variable ALLOW_CORS = '1'
|
* or env variable ALLOW_CORS = '1'
|
||||||
*/
|
*/
|
||||||
if (global.AllowCors || Logger.isDev || req.path.match(/\/api\/items\/([a-z0-9-]{36})\/(ebook|cover)(\/[0-9]+)?/)) {
|
if (Logger.isDev || req.path.match(/\/api\/items\/([a-z0-9-]{36})\/(ebook|cover)(\/[0-9]+)?/)) {
|
||||||
const allowedOrigins = ['capacitor://localhost', 'http://localhost']
|
const allowedOrigins = ['capacitor://localhost', 'http://localhost']
|
||||||
if (global.AllowCors || Logger.isDev || allowedOrigins.some((o) => o === req.get('origin'))) {
|
if (global.AllowCors || Logger.isDev || allowedOrigins.some((o) => o === req.get('origin'))) {
|
||||||
res.header('Access-Control-Allow-Origin', req.get('origin'))
|
res.header('Access-Control-Allow-Origin', req.get('origin'))
|
||||||
@ -261,7 +266,7 @@ class Server {
|
|||||||
// enable express-session
|
// enable express-session
|
||||||
app.use(
|
app.use(
|
||||||
expressSession({
|
expressSession({
|
||||||
secret: this.auth.tokenManager.TokenSecret,
|
secret: global.ServerSettings.tokenSecret,
|
||||||
resave: false,
|
resave: false,
|
||||||
saveUninitialized: false,
|
saveUninitialized: false,
|
||||||
cookie: {
|
cookie: {
|
||||||
@ -279,7 +284,6 @@ class Server {
|
|||||||
await this.auth.initPassportJs()
|
await this.auth.initPassportJs()
|
||||||
|
|
||||||
const router = express.Router()
|
const router = express.Router()
|
||||||
|
|
||||||
// if RouterBasePath is set, modify all requests to include the base path
|
// if RouterBasePath is set, modify all requests to include the base path
|
||||||
app.use((req, res, next) => {
|
app.use((req, res, next) => {
|
||||||
const urlStartsWithRouterBasePath = req.url.startsWith(global.RouterBasePath)
|
const urlStartsWithRouterBasePath = req.url.startsWith(global.RouterBasePath)
|
||||||
@ -306,14 +310,16 @@ class Server {
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
router.use(express.urlencoded({ extended: true, limit: '5mb' }))
|
router.use(express.urlencoded({ extended: true, limit: '5mb' }))
|
||||||
|
router.use(express.json({ limit: '5mb' }))
|
||||||
// Skip JSON parsing for internal-api routes
|
|
||||||
router.use(/^(?!\/internal-api).*/, express.json({ limit: '10mb' }))
|
|
||||||
|
|
||||||
router.use('/api', this.auth.ifAuthNeeded(this.authMiddleware.bind(this)), this.apiRouter.router)
|
router.use('/api', this.auth.ifAuthNeeded(this.authMiddleware.bind(this)), this.apiRouter.router)
|
||||||
router.use('/hls', this.hlsRouter.router)
|
router.use('/hls', this.hlsRouter.router)
|
||||||
router.use('/public', this.publicRouter.router)
|
router.use('/public', this.publicRouter.router)
|
||||||
|
|
||||||
|
// Static path to generated nuxt
|
||||||
|
const distPath = Path.join(global.appRoot, '/client/dist')
|
||||||
|
router.use(express.static(distPath))
|
||||||
|
|
||||||
// Static folder
|
// Static folder
|
||||||
router.use(express.static(Path.join(global.appRoot, 'static')))
|
router.use(express.static(Path.join(global.appRoot, 'static')))
|
||||||
|
|
||||||
@ -333,6 +339,32 @@ class Server {
|
|||||||
// Auth routes
|
// Auth routes
|
||||||
await this.auth.initAuthRoutes(router)
|
await this.auth.initAuthRoutes(router)
|
||||||
|
|
||||||
|
// Client dynamic routes
|
||||||
|
const dynamicRoutes = [
|
||||||
|
'/item/:id',
|
||||||
|
'/author/:id',
|
||||||
|
'/audiobook/:id/chapters',
|
||||||
|
'/audiobook/:id/edit',
|
||||||
|
'/audiobook/:id/manage',
|
||||||
|
'/library/:library',
|
||||||
|
'/library/:library/search',
|
||||||
|
'/library/:library/bookshelf/:id?',
|
||||||
|
'/library/:library/authors',
|
||||||
|
'/library/:library/narrators',
|
||||||
|
'/library/:library/stats',
|
||||||
|
'/library/:library/series/:id?',
|
||||||
|
'/library/:library/podcast/search',
|
||||||
|
'/library/:library/podcast/latest',
|
||||||
|
'/library/:library/podcast/download-queue',
|
||||||
|
'/config/users/:id',
|
||||||
|
'/config/users/:id/sessions',
|
||||||
|
'/config/item-metadata-utils/:id',
|
||||||
|
'/collection/:id',
|
||||||
|
'/playlist/:id',
|
||||||
|
'/share/:slug'
|
||||||
|
]
|
||||||
|
dynamicRoutes.forEach((route) => router.get(route, (req, res) => res.sendFile(Path.join(distPath, 'index.html'))))
|
||||||
|
|
||||||
router.post('/init', (req, res) => {
|
router.post('/init', (req, res) => {
|
||||||
if (Database.hasRootUser) {
|
if (Database.hasRootUser) {
|
||||||
Logger.error(`[Server] attempt to init server when server already has a root user`)
|
Logger.error(`[Server] attempt to init server when server already has a root user`)
|
||||||
@ -363,62 +395,10 @@ class Server {
|
|||||||
})
|
})
|
||||||
router.get('/healthcheck', (req, res) => res.sendStatus(200))
|
router.get('/healthcheck', (req, res) => res.sendStatus(200))
|
||||||
|
|
||||||
const ReactClientPath = process.env.REACT_CLIENT_PATH
|
this.server.listen(this.Port, this.Host, () => {
|
||||||
if (!ReactClientPath) {
|
if (this.Host) Logger.info(`Listening on http://${this.Host}:${this.Port}`)
|
||||||
// Static path to generated nuxt
|
else Logger.info(`Listening on port :${this.Port}`)
|
||||||
const distPath = Path.join(global.appRoot, '/client/dist')
|
})
|
||||||
router.use(express.static(distPath))
|
|
||||||
|
|
||||||
// Client dynamic routes
|
|
||||||
const dynamicRoutes = [
|
|
||||||
'/item/:id',
|
|
||||||
'/author/:id',
|
|
||||||
'/audiobook/:id/chapters',
|
|
||||||
'/audiobook/:id/edit',
|
|
||||||
'/audiobook/:id/manage',
|
|
||||||
'/library/:library',
|
|
||||||
'/library/:library/search',
|
|
||||||
'/library/:library/bookshelf/:id?',
|
|
||||||
'/library/:library/authors',
|
|
||||||
'/library/:library/narrators',
|
|
||||||
'/library/:library/stats',
|
|
||||||
'/library/:library/series/:id?',
|
|
||||||
'/library/:library/podcast/search',
|
|
||||||
'/library/:library/podcast/latest',
|
|
||||||
'/library/:library/podcast/download-queue',
|
|
||||||
'/config/users/:id',
|
|
||||||
'/config/users/:id/sessions',
|
|
||||||
'/config/item-metadata-utils/:id',
|
|
||||||
'/collection/:id',
|
|
||||||
'/playlist/:id',
|
|
||||||
'/share/:slug'
|
|
||||||
]
|
|
||||||
dynamicRoutes.forEach((route) => router.get(route, (req, res) => res.sendFile(Path.join(distPath, 'index.html'))))
|
|
||||||
} else {
|
|
||||||
// This is for using the experimental Next.js client
|
|
||||||
Logger.info(`Using React client at ${ReactClientPath}`)
|
|
||||||
const nextPath = Path.join(ReactClientPath, 'node_modules/next')
|
|
||||||
const next = require(nextPath)
|
|
||||||
const nextApp = next({ dev: Logger.isDev, dir: ReactClientPath })
|
|
||||||
const handle = nextApp.getRequestHandler()
|
|
||||||
await nextApp.prepare()
|
|
||||||
router.get('*', (req, res) => handle(req, res))
|
|
||||||
router.post('/internal-api/*', (req, res) => handle(req, res))
|
|
||||||
}
|
|
||||||
|
|
||||||
const unixSocketPrefix = 'unix/'
|
|
||||||
if (this.Host?.startsWith(unixSocketPrefix)) {
|
|
||||||
const sockPath = this.Host.slice(unixSocketPrefix.length)
|
|
||||||
this.server.listen(sockPath, async () => {
|
|
||||||
await fs.chmod(sockPath, 0o666)
|
|
||||||
Logger.info(`Listening on unix socket ${sockPath}`)
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
this.server.listen(this.Port, this.Host, () => {
|
|
||||||
if (this.Host) Logger.info(`Listening on http://${this.Host}:${this.Port}`)
|
|
||||||
else Logger.info(`Listening on port :${this.Port}`)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start listening for socket connections
|
// Start listening for socket connections
|
||||||
SocketAuthority.initialize(this)
|
SocketAuthority.initialize(this)
|
||||||
@ -428,7 +408,7 @@ class Server {
|
|||||||
Logger.info(`[Server] Initializing new server`)
|
Logger.info(`[Server] Initializing new server`)
|
||||||
const newRoot = req.body.newRoot
|
const newRoot = req.body.newRoot
|
||||||
const rootUsername = newRoot.username || 'root'
|
const rootUsername = newRoot.username || 'root'
|
||||||
const rootPash = newRoot.password ? await this.auth.localAuthStrategy.hashPassword(newRoot.password) : ''
|
const rootPash = newRoot.password ? await this.auth.hashPass(newRoot.password) : ''
|
||||||
if (!rootPash) Logger.warn(`[Server] Creating root user with no password`)
|
if (!rootPash) Logger.warn(`[Server] Creating root user with no password`)
|
||||||
await Database.createRootUser(rootUsername, rootPash, this.auth)
|
await Database.createRootUser(rootUsername, rootPash, this.auth)
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user