mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-06-05 02:02:44 +02:00
Compare commits
144 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cf5598aeb9 | |||
| 8cf3d648ea | |||
| 212311a980 | |||
| c9522dc25d | |||
| 37af753402 | |||
| d8c5627cf8 | |||
| 4f926b37db | |||
| fefc16bd13 | |||
| 1b1b71a9b6 | |||
| 086532652e | |||
| 4e8b4720a1 | |||
| 4a7ada28fb | |||
| 1710285674 | |||
| a6bb61d998 | |||
| 5ec05dfa84 | |||
| 83e854aa13 | |||
| 634f809159 | |||
| e5cf141834 | |||
| 8610b68d3f | |||
| f3e3bddc94 | |||
| 7ef3284cc5 | |||
| 3494586f77 | |||
| faaf99e6bb | |||
| 1078ba2111 | |||
| 2ad69300f5 | |||
| d2f3fa7fdf | |||
| 64fcb6270b | |||
| 562c30cff4 | |||
| 7108501d24 | |||
| 37eae3406c | |||
| 501dc938e6 | |||
| c5ecd35fe9 | |||
| 7cd8d7f44d | |||
| 567a9a4e58 | |||
| 58f4a0cfbb | |||
| e6c0b697aa | |||
| 35f60d699d | |||
| c219be0970 | |||
| c72ce843fa | |||
| c606059a3a | |||
| 049a8bdc6d | |||
| 9752f744ca | |||
| 4be6fb789c | |||
| afc56e5259 | |||
| d47f8521d5 | |||
| 7f853d426a | |||
| e9008c615d | |||
| 01f081ef5a | |||
| 7ee174e0d5 | |||
| 24439f86e0 | |||
| fbd3ce3b72 | |||
| 96f8b54b51 | |||
| 9c94a78e29 | |||
| a14e3dd137 | |||
| e37673bd67 | |||
| 6aa10d20a1 | |||
| 68a92acb7a | |||
| 8aa7cc9ca5 | |||
| e6c087c3bb | |||
| 39a2097152 | |||
| 6a8003917e | |||
| d5a17ddc8c | |||
| 48bbf0d649 | |||
| 0bc58c254f | |||
| b2d41f0583 | |||
| 0d31d20f0f | |||
| bb7938f66d | |||
| 5b22e945da | |||
| decde230aa | |||
| 1dec8ae122 | |||
| 8512d5e693 | |||
| bb481ccfb4 | |||
| 12bce48ef5 | |||
| 013c7c776e | |||
| 8f96d20a23 | |||
| 1a8811b69a | |||
| d796849d74 | |||
| 942bd0859f | |||
| 072028c740 | |||
| 0d08aecd56 | |||
| 22ad16e11b | |||
| 2f49a08c7d | |||
| fcacda74cb | |||
| fa0c90de70 | |||
| c1197314ac | |||
| 0b31792660 | |||
| b35fabbe55 | |||
| 8cd8a157a6 | |||
| 86aece6828 | |||
| f9edadbafd | |||
| 6a388cd4fe | |||
| 9d17e9ff48 | |||
| 662b7d01b8 | |||
| a19bc4b4e4 | |||
| a545aa5c39 | |||
| 8493e56b11 | |||
| 21c77dccce | |||
| 55164803b0 | |||
| 5c49a8ce6a | |||
| 854f308eae | |||
| 16ba6b53ba | |||
| 0af29a378a | |||
| def34a860b | |||
| f8034e1b78 | |||
| 01fbea02f1 | |||
| 3d9af89e24 | |||
| d430d9f3ed | |||
| 0c24a1e626 | |||
| 1099dbe642 | |||
| 2df3277dcd | |||
| 6ae14213f5 | |||
| 61bd029303 | |||
| 5b09bd8242 | |||
| 703477b157 | |||
| 03ff5d8ae1 | |||
| 220f7ef7cd | |||
| 682a99dd43 | |||
| fac5de582d | |||
| 7cbf9de8ca | |||
| ce213c3d89 | |||
| 32cd0360e6 | |||
| 1ec23a5699 | |||
| 48330f6432 | |||
| 28358debbc | |||
| 54b7ed6117 | |||
| 0cfd2ee63b | |||
| 37a0990741 | |||
| 7a0cd1eb34 | |||
| ac3277da09 | |||
| 65d1e7be56 | |||
| 80685afa7e | |||
| f892453892 | |||
| 422bb8c31c | |||
| 6fb1202c1c | |||
| 4ddd2788f0 | |||
| 8a28029809 | |||
| 423a2129d1 | |||
| a338097514 | |||
| 84b67abb03 | |||
| 5ec8406653 | |||
| b3ce300d32 | |||
| 3f93b93d9e | |||
| e32c83db63 | |||
| 0344a63b48 |
@@ -70,6 +70,7 @@ jobs:
|
|||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
tags: ${{ github.event.inputs.tags || steps.meta.outputs.tags }}
|
tags: ${{ github.event.inputs.tags || steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
context: .
|
context: .
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
push: true
|
push: true
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
/ffmpeg*
|
/ffmpeg*
|
||||||
/ffprobe*
|
/ffprobe*
|
||||||
/unicode*
|
/unicode*
|
||||||
|
/libnusqlite3*
|
||||||
|
|
||||||
sw.*
|
sw.*
|
||||||
.DS_STORE
|
.DS_STORE
|
||||||
|
|||||||
+25
-9
@@ -11,20 +11,36 @@ FROM node:20-alpine
|
|||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
RUN apk update && \
|
RUN apk update && \
|
||||||
apk add --no-cache --update \
|
apk add --no-cache --update \
|
||||||
curl \
|
curl \
|
||||||
tzdata \
|
tzdata \
|
||||||
ffmpeg \
|
ffmpeg \
|
||||||
make \
|
make \
|
||||||
gcompat \
|
gcompat \
|
||||||
python3 \
|
python3 \
|
||||||
g++ \
|
g++ \
|
||||||
tini
|
tini \
|
||||||
|
unzip
|
||||||
|
|
||||||
COPY --from=build /client/dist /client/dist
|
COPY --from=build /client/dist /client/dist
|
||||||
COPY index.js package* /
|
COPY index.js package* /
|
||||||
COPY server server
|
COPY server server
|
||||||
|
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
|
ENV NUSQLITE3_DIR="/usr/local/lib/nusqlite3"
|
||||||
|
ENV NUSQLITE3_PATH="${NUSQLITE3_DIR}/libnusqlite3.so"
|
||||||
|
|
||||||
|
RUN case "$TARGETPLATFORM" in \
|
||||||
|
"linux/amd64") \
|
||||||
|
curl -L -o /tmp/library.zip "https://github.com/mikiher/nunicode-sqlite/releases/download/v1.1/libnusqlite3-linux-x64.zip" ;; \
|
||||||
|
"linux/arm64") \
|
||||||
|
curl -L -o /tmp/library.zip "https://github.com/mikiher/nunicode-sqlite/releases/download/v1.1/libnusqlite3-linux-arm64.zip" ;; \
|
||||||
|
*) echo "Unsupported platform: $TARGETPLATFORM" && exit 1 ;; \
|
||||||
|
esac && \
|
||||||
|
unzip /tmp/library.zip -d $NUSQLITE3_DIR && \
|
||||||
|
rm /tmp/library.zip
|
||||||
|
|
||||||
RUN npm ci --only=production
|
RUN npm ci --only=production
|
||||||
|
|
||||||
RUN apk del make python3 g++
|
RUN apk del make python3 g++
|
||||||
|
|||||||
@@ -264,7 +264,6 @@ export default {
|
|||||||
libraryItems.forEach((item) => {
|
libraryItems.forEach((item) => {
|
||||||
let subtitle = ''
|
let subtitle = ''
|
||||||
if (item.mediaType === 'book') subtitle = item.media.metadata.authors.map((au) => au.name).join(', ')
|
if (item.mediaType === 'book') subtitle = item.media.metadata.authors.map((au) => au.name).join(', ')
|
||||||
else if (item.mediaType === 'music') subtitle = item.media.metadata.artists.join(', ')
|
|
||||||
queueItems.push({
|
queueItems.push({
|
||||||
libraryItemId: item.id,
|
libraryItemId: item.id,
|
||||||
libraryId: item.libraryId,
|
libraryId: item.libraryId,
|
||||||
|
|||||||
@@ -347,6 +347,13 @@ export default {
|
|||||||
libraryItemsAdded(libraryItems) {
|
libraryItemsAdded(libraryItems) {
|
||||||
console.log('libraryItems added', libraryItems)
|
console.log('libraryItems added', libraryItems)
|
||||||
|
|
||||||
|
// First items added to library
|
||||||
|
const isThisLibrary = libraryItems.some((li) => li.libraryId === this.currentLibraryId)
|
||||||
|
if (!this.shelves.length && !this.search && isThisLibrary) {
|
||||||
|
this.fetchCategories()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
const recentlyAddedShelf = this.shelves.find((shelf) => shelf.id === 'recently-added')
|
const recentlyAddedShelf = this.shelves.find((shelf) => shelf.id === 'recently-added')
|
||||||
if (!recentlyAddedShelf) return
|
if (!recentlyAddedShelf) return
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
{{ seriesName }}
|
{{ seriesName }}
|
||||||
</p>
|
</p>
|
||||||
<div class="w-6 h-6 rounded-full bg-black bg-opacity-30 flex items-center justify-center ml-3">
|
<div class="w-6 h-6 rounded-full bg-black bg-opacity-30 flex items-center justify-center ml-3">
|
||||||
<span class="font-mono">{{ numShowing }}</span>
|
<span class="font-mono">{{ $formatNumber(numShowing) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-grow" />
|
<div class="flex-grow" />
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- library & collections page -->
|
<!-- library & collections page -->
|
||||||
<template v-else-if="page !== 'search' && page !== 'podcast-search' && page !== 'recent-episodes' && !isHome">
|
<template v-else-if="page !== 'search' && page !== 'podcast-search' && page !== 'recent-episodes' && !isHome">
|
||||||
<p class="hidden md:block">{{ numShowing }} {{ entityName }}</p>
|
<p class="hidden md:block">{{ $formatNumber(numShowing) }} {{ entityName }}</p>
|
||||||
|
|
||||||
<div class="flex-grow hidden sm:inline-block" />
|
<div class="flex-grow hidden sm:inline-block" />
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
<controls-sort-select v-if="isSeriesPage && !isBatchSelecting" v-model="settings.seriesSortBy" :descending.sync="settings.seriesSortDesc" :items="seriesSortItems" class="w-36 sm:w-44 md:w-48 h-7.5 ml-1 sm:ml-4" @change="updateSeriesSort" />
|
<controls-sort-select v-if="isSeriesPage && !isBatchSelecting" v-model="settings.seriesSortBy" :descending.sync="settings.seriesSortDesc" :items="seriesSortItems" class="w-36 sm:w-44 md:w-48 h-7.5 ml-1 sm:ml-4" @change="updateSeriesSort" />
|
||||||
|
|
||||||
<!-- issues page remove all button -->
|
<!-- issues page remove all button -->
|
||||||
<ui-btn v-if="isIssuesFilter && userCanDelete && !isBatchSelecting" :loading="processingIssues" color="error" small class="ml-4" @click="removeAllIssues">{{ $strings.ButtonRemoveAll }} {{ numShowing }} {{ entityName }}</ui-btn>
|
<ui-btn v-if="isIssuesFilter && userCanDelete && !isBatchSelecting" :loading="processingIssues" color="error" small class="ml-4" @click="removeAllIssues">{{ $strings.ButtonRemoveAll }} {{ $formatNumber(numShowing) }} {{ entityName }}</ui-btn>
|
||||||
|
|
||||||
<ui-context-menu-dropdown v-if="contextMenuItems.length" :items="contextMenuItems" :menu-width="110" class="ml-2" @action="contextMenuAction" />
|
<ui-context-menu-dropdown v-if="contextMenuItems.length" :items="contextMenuItems" :menu-width="110" class="ml-2" @action="contextMenuAction" />
|
||||||
</template>
|
</template>
|
||||||
@@ -246,9 +246,6 @@ export default {
|
|||||||
isPodcastLibrary() {
|
isPodcastLibrary() {
|
||||||
return this.currentLibraryMediaType === 'podcast'
|
return this.currentLibraryMediaType === 'podcast'
|
||||||
},
|
},
|
||||||
isMusicLibrary() {
|
|
||||||
return this.currentLibraryMediaType === 'music'
|
|
||||||
},
|
|
||||||
isLibraryPage() {
|
isLibraryPage() {
|
||||||
return this.page === ''
|
return this.page === ''
|
||||||
},
|
},
|
||||||
@@ -281,7 +278,6 @@ export default {
|
|||||||
},
|
},
|
||||||
entityName() {
|
entityName() {
|
||||||
if (this.isAlbumsPage) return 'Albums'
|
if (this.isAlbumsPage) return 'Albums'
|
||||||
if (this.isMusicLibrary) return 'Tracks'
|
|
||||||
|
|
||||||
if (this.isPodcastLibrary) return this.$strings.LabelPodcasts
|
if (this.isPodcastLibrary) return this.$strings.LabelPodcasts
|
||||||
if (!this.page) return this.$strings.LabelBooks
|
if (!this.page) return this.$strings.LabelBooks
|
||||||
@@ -477,7 +473,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to re-add series to continue listening', error)
|
console.error('Failed to re-add series to continue listening', error)
|
||||||
this.$toast.error(this.$strings.ToastItemUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.processingSeries = false
|
this.processingSeries = false
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-if="streamLibraryItem" id="mediaPlayerContainer" class="w-full fixed bottom-0 left-0 right-0 h-48 lg:h-40 z-50 bg-primary px-2 lg:px-4 pb-1 lg:pb-4 pt-2">
|
<div v-if="streamLibraryItem" id="mediaPlayerContainer" class="w-full fixed bottom-0 left-0 right-0 h-48 lg:h-40 z-50 bg-primary px-2 lg:px-4 pb-1 lg:pb-4 pt-2">
|
||||||
<div id="videoDock" />
|
|
||||||
<div class="absolute left-2 top-2 lg:left-4 cursor-pointer">
|
<div class="absolute left-2 top-2 lg:left-4 cursor-pointer">
|
||||||
<covers-book-cover expand-on-click :library-item="streamLibraryItem" :width="bookCoverWidth" :book-cover-aspect-ratio="coverAspectRatio" />
|
<covers-book-cover expand-on-click :library-item="streamLibraryItem" :width="bookCoverWidth" :book-cover-aspect-ratio="coverAspectRatio" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-start mb-6 lg:mb-0" :class="playerHandler.isVideo ? 'ml-4 pl-96' : isSquareCover ? 'pl-18 sm:pl-24' : 'pl-12 sm:pl-16'">
|
<div class="flex items-start mb-6 lg:mb-0" :class="isSquareCover ? 'pl-18 sm:pl-24' : 'pl-12 sm:pl-16'">
|
||||||
<div class="min-w-0 w-full">
|
<div class="min-w-0 w-full">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<nuxt-link :to="`/item/${streamLibraryItem.id}`" class="hover:underline cursor-pointer text-sm sm:text-lg block truncate">
|
<nuxt-link :to="`/item/${streamLibraryItem.id}`" class="hover:underline cursor-pointer text-sm sm:text-lg block truncate">
|
||||||
@@ -12,10 +11,9 @@
|
|||||||
</nuxt-link>
|
</nuxt-link>
|
||||||
<widgets-explicit-indicator v-if="isExplicit" />
|
<widgets-explicit-indicator v-if="isExplicit" />
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!playerHandler.isVideo" class="text-gray-400 flex items-center w-1/2 sm:w-4/5 lg:w-2/5">
|
<div class="text-gray-400 flex items-center w-1/2 sm:w-4/5 lg:w-2/5">
|
||||||
<span class="material-symbols text-sm">person</span>
|
<span class="material-symbols text-sm">person</span>
|
||||||
<div v-if="podcastAuthor" class="pl-1 sm:pl-1.5 text-xs sm:text-base">{{ podcastAuthor }}</div>
|
<div v-if="podcastAuthor" class="pl-1 sm:pl-1.5 text-xs sm:text-base">{{ podcastAuthor }}</div>
|
||||||
<div v-else-if="musicArtists" class="pl-1 sm:pl-1.5 text-xs sm:text-base">{{ musicArtists }}</div>
|
|
||||||
<div v-else-if="authors.length" class="pl-1 sm:pl-1.5 text-xs sm:text-base truncate">
|
<div v-else-if="authors.length" class="pl-1 sm:pl-1.5 text-xs sm:text-base truncate">
|
||||||
<nuxt-link v-for="(author, index) in authors" :key="index" :to="`/author/${author.id}`" class="hover:underline">{{ author.name }}<span v-if="index < authors.length - 1">, </span></nuxt-link>
|
<nuxt-link v-for="(author, index) in authors" :key="index" :to="`/author/${author.id}`" class="hover:underline">{{ author.name }}<span v-if="index < authors.length - 1">, </span></nuxt-link>
|
||||||
</div>
|
</div>
|
||||||
@@ -140,9 +138,6 @@ export default {
|
|||||||
isPodcast() {
|
isPodcast() {
|
||||||
return this.streamLibraryItem?.mediaType === 'podcast'
|
return this.streamLibraryItem?.mediaType === 'podcast'
|
||||||
},
|
},
|
||||||
isMusic() {
|
|
||||||
return this.streamLibraryItem?.mediaType === 'music'
|
|
||||||
},
|
|
||||||
isExplicit() {
|
isExplicit() {
|
||||||
return !!this.mediaMetadata.explicit
|
return !!this.mediaMetadata.explicit
|
||||||
},
|
},
|
||||||
@@ -174,10 +169,6 @@ export default {
|
|||||||
if (!this.isPodcast) return null
|
if (!this.isPodcast) return null
|
||||||
return this.mediaMetadata.author || 'Unknown'
|
return this.mediaMetadata.author || 'Unknown'
|
||||||
},
|
},
|
||||||
musicArtists() {
|
|
||||||
if (!this.isMusic) return null
|
|
||||||
return this.mediaMetadata.artists.join(', ')
|
|
||||||
},
|
|
||||||
hasNextItemInQueue() {
|
hasNextItemInQueue() {
|
||||||
return this.currentPlayerQueueIndex < this.playerQueueItems.length - 1
|
return this.currentPlayerQueueIndex < this.playerQueueItems.length - 1
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -95,14 +95,6 @@
|
|||||||
<div v-show="isPodcastSearchPage" class="h-full w-0.5 bg-yellow-400 absolute top-0 left-0" />
|
<div v-show="isPodcastSearchPage" class="h-full w-0.5 bg-yellow-400 absolute top-0 left-0" />
|
||||||
</nuxt-link>
|
</nuxt-link>
|
||||||
|
|
||||||
<nuxt-link v-if="isMusicLibrary" :to="`/library/${currentLibraryId}/bookshelf/albums`" class="w-full h-20 flex flex-col items-center justify-center text-white text-opacity-80 border-b border-primary border-opacity-70 hover:bg-primary cursor-pointer relative" :class="isMusicAlbumsPage ? 'bg-primary bg-opacity-80' : 'bg-bg bg-opacity-60'">
|
|
||||||
<span class="material-symbols text-xl">album</span>
|
|
||||||
|
|
||||||
<p class="pt-1.5 text-center leading-4" style="font-size: 0.9rem">Albums</p>
|
|
||||||
|
|
||||||
<div v-show="isMusicAlbumsPage" class="h-full w-0.5 bg-yellow-400 absolute top-0 left-0" />
|
|
||||||
</nuxt-link>
|
|
||||||
|
|
||||||
<nuxt-link v-if="isPodcastLibrary && userIsAdminOrUp" :to="`/library/${currentLibraryId}/podcast/download-queue`" class="w-full h-20 flex flex-col items-center justify-center text-white text-opacity-80 border-b border-primary border-opacity-70 hover:bg-primary cursor-pointer relative" :class="isPodcastDownloadQueuePage ? 'bg-primary bg-opacity-80' : 'bg-bg bg-opacity-60'">
|
<nuxt-link v-if="isPodcastLibrary && userIsAdminOrUp" :to="`/library/${currentLibraryId}/podcast/download-queue`" class="w-full h-20 flex flex-col items-center justify-center text-white text-opacity-80 border-b border-primary border-opacity-70 hover:bg-primary cursor-pointer relative" :class="isPodcastDownloadQueuePage ? 'bg-primary bg-opacity-80' : 'bg-bg bg-opacity-60'">
|
||||||
<span class="material-symbols text-2xl"></span>
|
<span class="material-symbols text-2xl"></span>
|
||||||
|
|
||||||
@@ -172,9 +164,6 @@ export default {
|
|||||||
isPodcastLibrary() {
|
isPodcastLibrary() {
|
||||||
return this.currentLibraryMediaType === 'podcast'
|
return this.currentLibraryMediaType === 'podcast'
|
||||||
},
|
},
|
||||||
isMusicLibrary() {
|
|
||||||
return this.currentLibraryMediaType === 'music'
|
|
||||||
},
|
|
||||||
isPodcastDownloadQueuePage() {
|
isPodcastDownloadQueuePage() {
|
||||||
return this.$route.name === 'library-library-podcast-download-queue'
|
return this.$route.name === 'library-library-podcast-download-queue'
|
||||||
},
|
},
|
||||||
@@ -184,9 +173,6 @@ export default {
|
|||||||
isPodcastLatestPage() {
|
isPodcastLatestPage() {
|
||||||
return this.$route.name === 'library-library-podcast-latest'
|
return this.$route.name === 'library-library-podcast-latest'
|
||||||
},
|
},
|
||||||
isMusicAlbumsPage() {
|
|
||||||
return this.paramId === 'albums'
|
|
||||||
},
|
|
||||||
homePage() {
|
homePage() {
|
||||||
return this.$route.name === 'library-library'
|
return this.$route.name === 'library-library'
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
<p class="truncate text-sm">{{ title }}</p>
|
<p class="truncate text-sm">{{ title }}</p>
|
||||||
|
|
||||||
<p class="truncate text-xs text-gray-300">{{ description }}</p>
|
<p class="truncate text-xs text-gray-300">{{ description }}</p>
|
||||||
|
<p v-if="specialMessage" class="truncate text-xs text-gray-300">{{ specialMessage }}</p>
|
||||||
|
|
||||||
<p v-if="isFailed && failedMessage" class="text-xs truncate text-red-500">{{ failedMessage }}</p>
|
<p v-if="isFailed && failedMessage" class="text-xs truncate text-red-500">{{ failedMessage }}</p>
|
||||||
<p v-else-if="!isFinished && cancelingScan" class="text-xs truncate">Canceling...</p>
|
<p v-else-if="!isFinished && cancelingScan" class="text-xs truncate">Canceling...</p>
|
||||||
@@ -26,7 +27,16 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
cancelingScan: false
|
cancelingScan: false,
|
||||||
|
specialMessage: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
task: {
|
||||||
|
immediate: true,
|
||||||
|
handler() {
|
||||||
|
this.initTask()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -34,14 +44,17 @@ export default {
|
|||||||
return this.$store.getters['user/getIsAdminOrUp']
|
return this.$store.getters['user/getIsAdminOrUp']
|
||||||
},
|
},
|
||||||
title() {
|
title() {
|
||||||
|
if (this.task.titleKey && this.$strings[this.task.titleKey]) {
|
||||||
|
return this.$getString(this.task.titleKey, this.task.titleSubs)
|
||||||
|
}
|
||||||
return this.task.title || 'No Title'
|
return this.task.title || 'No Title'
|
||||||
},
|
},
|
||||||
description() {
|
description() {
|
||||||
|
if (this.task.descriptionKey && this.$strings[this.task.descriptionKey]) {
|
||||||
|
return this.$getString(this.task.descriptionKey, this.task.descriptionSubs)
|
||||||
|
}
|
||||||
return this.task.description || ''
|
return this.task.description || ''
|
||||||
},
|
},
|
||||||
details() {
|
|
||||||
return this.task.details || 'Unknown'
|
|
||||||
},
|
|
||||||
isFinished() {
|
isFinished() {
|
||||||
return !!this.task.isFinished
|
return !!this.task.isFinished
|
||||||
},
|
},
|
||||||
@@ -52,6 +65,9 @@ export default {
|
|||||||
return this.isFinished && !this.isFailed
|
return this.isFinished && !this.isFailed
|
||||||
},
|
},
|
||||||
failedMessage() {
|
failedMessage() {
|
||||||
|
if (this.task.errorKey && this.$strings[this.task.errorKey]) {
|
||||||
|
return this.$getString(this.task.errorKey, this.task.errorSubs)
|
||||||
|
}
|
||||||
return this.task.error || ''
|
return this.task.error || ''
|
||||||
},
|
},
|
||||||
action() {
|
action() {
|
||||||
@@ -87,6 +103,21 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
initTask() {
|
||||||
|
// special message for library scan tasks
|
||||||
|
if (this.task?.data?.scanResults) {
|
||||||
|
const scanResults = this.task.data.scanResults
|
||||||
|
const strs = []
|
||||||
|
if (scanResults.added) strs.push(this.$getString('MessageTaskScanItemsAdded', [scanResults.added]))
|
||||||
|
if (scanResults.updated) strs.push(this.$getString('MessageTaskScanItemsUpdated', [scanResults.updated]))
|
||||||
|
if (scanResults.missing) strs.push(this.$getString('MessageTaskScanItemsMissing', [scanResults.missing]))
|
||||||
|
const changesDetected = strs.length > 0 ? strs.join(', ') : this.$strings.MessageTaskScanNoChangesNeeded
|
||||||
|
const timeElapsed = scanResults.elapsed ? ` (${this.$elapsedPretty(scanResults.elapsed / 1000, false, true)})` : ''
|
||||||
|
this.specialMessage = `${changesDetected}${timeElapsed}`
|
||||||
|
} else {
|
||||||
|
this.specialMessage = ''
|
||||||
|
}
|
||||||
|
},
|
||||||
cancelScan() {
|
cancelScan() {
|
||||||
const libraryId = this.task?.data?.libraryId
|
const libraryId = this.task?.data?.libraryId
|
||||||
if (!libraryId) {
|
if (!libraryId) {
|
||||||
|
|||||||
@@ -226,9 +226,6 @@ export default {
|
|||||||
isPodcast() {
|
isPodcast() {
|
||||||
return this.mediaType === 'podcast' || this.store.getters['libraries/getCurrentLibraryMediaType'] === 'podcast'
|
return this.mediaType === 'podcast' || this.store.getters['libraries/getCurrentLibraryMediaType'] === 'podcast'
|
||||||
},
|
},
|
||||||
isMusic() {
|
|
||||||
return this.mediaType === 'music'
|
|
||||||
},
|
|
||||||
isExplicit() {
|
isExplicit() {
|
||||||
return this.mediaMetadata.explicit || false
|
return this.mediaMetadata.explicit || false
|
||||||
},
|
},
|
||||||
@@ -336,7 +333,6 @@ export default {
|
|||||||
displayLineTwo() {
|
displayLineTwo() {
|
||||||
if (this.recentEpisode) return this.title
|
if (this.recentEpisode) return this.title
|
||||||
if (this.isPodcast) return this.author
|
if (this.isPodcast) return this.author
|
||||||
if (this.isMusic) return this.artist
|
|
||||||
if (this.collapsedSeries) return ''
|
if (this.collapsedSeries) return ''
|
||||||
if (this.isAuthorBookshelfView) {
|
if (this.isAuthorBookshelfView) {
|
||||||
return this.mediaMetadata.publishedYear || ''
|
return this.mediaMetadata.publishedYear || ''
|
||||||
@@ -364,7 +360,6 @@ export default {
|
|||||||
return this.store.getters['user/getUserMediaProgress'](this.libraryItemId, this.recentEpisode.id)
|
return this.store.getters['user/getUserMediaProgress'](this.libraryItemId, this.recentEpisode.id)
|
||||||
},
|
},
|
||||||
userProgress() {
|
userProgress() {
|
||||||
if (this.isMusic) return null
|
|
||||||
if (this.episodeProgress) return this.episodeProgress
|
if (this.episodeProgress) return this.episodeProgress
|
||||||
return this.store.getters['user/getUserMediaProgress'](this.libraryItemId)
|
return this.store.getters['user/getUserMediaProgress'](this.libraryItemId)
|
||||||
},
|
},
|
||||||
@@ -420,7 +415,7 @@ export default {
|
|||||||
return !this.isSelectionMode && !this.showPlayButton && this.ebookFormat
|
return !this.isSelectionMode && !this.showPlayButton && this.ebookFormat
|
||||||
},
|
},
|
||||||
showPlayButton() {
|
showPlayButton() {
|
||||||
return !this.isSelectionMode && !this.isMissing && !this.isInvalid && !this.isStreaming && (this.numTracks || this.recentEpisode || this.isMusic)
|
return !this.isSelectionMode && !this.isMissing && !this.isInvalid && !this.isStreaming && (this.numTracks || this.recentEpisode)
|
||||||
},
|
},
|
||||||
showSmallEBookIcon() {
|
showSmallEBookIcon() {
|
||||||
return !this.isSelectionMode && this.ebookFormat
|
return !this.isSelectionMode && this.ebookFormat
|
||||||
@@ -464,8 +459,6 @@ export default {
|
|||||||
return this.store.getters['user/getIsAdminOrUp']
|
return this.store.getters['user/getIsAdminOrUp']
|
||||||
},
|
},
|
||||||
moreMenuItems() {
|
moreMenuItems() {
|
||||||
if (this.isMusic) return []
|
|
||||||
|
|
||||||
if (this.recentEpisode) {
|
if (this.recentEpisode) {
|
||||||
const items = [
|
const items = [
|
||||||
{
|
{
|
||||||
@@ -823,7 +816,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to remove series from home', error)
|
console.error('Failed to remove series from home', error)
|
||||||
this.$toast.error(this.$strings.ToastFailedToUpdateUser)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.processing = false
|
this.processing = false
|
||||||
@@ -841,7 +834,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to hide item from home', error)
|
console.error('Failed to hide item from home', error)
|
||||||
this.$toast.error(this.$strings.ToastFailedToUpdateUser)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.processing = false
|
this.processing = false
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update notification', error)
|
console.error('Failed to update notification', error)
|
||||||
this.$toast.error(this.$strings.ToastNotificationUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.enabling = false
|
this.enabling = false
|
||||||
|
|||||||
@@ -27,38 +27,6 @@
|
|||||||
<nuxt-link :to="`/library/${libraryId}/bookshelf?filter=publishers.${$encode(publisher)}`" class="hover:underline">{{ publisher }}</nuxt-link>
|
<nuxt-link :to="`/library/${libraryId}/bookshelf?filter=publishers.${$encode(publisher)}`" class="hover:underline">{{ publisher }}</nuxt-link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="musicAlbum" class="flex py-0.5">
|
|
||||||
<div class="w-24 min-w-24 sm:w-32 sm:min-w-32">
|
|
||||||
<span class="text-white text-opacity-60 uppercase text-sm">Album</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{ musicAlbum }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="musicAlbumArtist" class="flex py-0.5">
|
|
||||||
<div class="w-24 min-w-24 sm:w-32 sm:min-w-32">
|
|
||||||
<span class="text-white text-opacity-60 uppercase text-sm">Album Artist</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{ musicAlbumArtist }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="musicTrackPretty" class="flex py-0.5">
|
|
||||||
<div class="w-24 min-w-24 sm:w-32 sm:min-w-32">
|
|
||||||
<span class="text-white text-opacity-60 uppercase text-sm">Track</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{ musicTrackPretty }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="musicDiscPretty" class="flex py-0.5">
|
|
||||||
<div class="w-24 min-w-24 sm:w-32 sm:min-w-32">
|
|
||||||
<span class="text-white text-opacity-60 uppercase text-sm">Disc</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{ musicDiscPretty }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="podcastType" class="flex py-0.5">
|
<div v-if="podcastType" class="flex py-0.5">
|
||||||
<div class="w-24 min-w-24 sm:w-32 sm:min-w-32">
|
<div class="w-24 min-w-24 sm:w-32 sm:min-w-32">
|
||||||
<span class="text-white text-opacity-60 uppercase text-sm">{{ $strings.LabelPodcastType }}</span>
|
<span class="text-white text-opacity-60 uppercase text-sm">{{ $strings.LabelPodcastType }}</span>
|
||||||
@@ -97,7 +65,7 @@
|
|||||||
<nuxt-link :to="`/library/${libraryId}/bookshelf?filter=languages.${$encode(language)}`" class="hover:underline">{{ language }}</nuxt-link>
|
<nuxt-link :to="`/library/${libraryId}/bookshelf?filter=languages.${$encode(language)}`" class="hover:underline">{{ language }}</nuxt-link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="tracks.length || audioFile || (isPodcast && totalPodcastDuration)" class="flex py-0.5">
|
<div v-if="tracks.length || (isPodcast && totalPodcastDuration)" class="flex py-0.5">
|
||||||
<div class="w-24 min-w-24 sm:w-32 sm:min-w-32">
|
<div class="w-24 min-w-24 sm:w-32 sm:min-w-32">
|
||||||
<span class="text-white text-opacity-60 uppercase text-sm">{{ $strings.LabelDuration }}</span>
|
<span class="text-white text-opacity-60 uppercase text-sm">{{ $strings.LabelDuration }}</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -134,10 +102,6 @@ export default {
|
|||||||
isPodcast() {
|
isPodcast() {
|
||||||
return this.libraryItem.mediaType === 'podcast'
|
return this.libraryItem.mediaType === 'podcast'
|
||||||
},
|
},
|
||||||
audioFile() {
|
|
||||||
// Music track
|
|
||||||
return this.media.audioFile
|
|
||||||
},
|
|
||||||
media() {
|
media() {
|
||||||
return this.libraryItem.media || {}
|
return this.libraryItem.media || {}
|
||||||
},
|
},
|
||||||
@@ -168,25 +132,6 @@ export default {
|
|||||||
publisher() {
|
publisher() {
|
||||||
return this.mediaMetadata.publisher || ''
|
return this.mediaMetadata.publisher || ''
|
||||||
},
|
},
|
||||||
musicArtists() {
|
|
||||||
return this.mediaMetadata.artists || []
|
|
||||||
},
|
|
||||||
musicAlbum() {
|
|
||||||
return this.mediaMetadata.album || ''
|
|
||||||
},
|
|
||||||
musicAlbumArtist() {
|
|
||||||
return this.mediaMetadata.albumArtist || ''
|
|
||||||
},
|
|
||||||
musicTrackPretty() {
|
|
||||||
if (!this.mediaMetadata.trackNumber) return null
|
|
||||||
if (!this.mediaMetadata.trackTotal) return this.mediaMetadata.trackNumber
|
|
||||||
return `${this.mediaMetadata.trackNumber} / ${this.mediaMetadata.trackTotal}`
|
|
||||||
},
|
|
||||||
musicDiscPretty() {
|
|
||||||
if (!this.mediaMetadata.discNumber) return null
|
|
||||||
if (!this.mediaMetadata.discTotal) return this.mediaMetadata.discNumber
|
|
||||||
return `${this.mediaMetadata.discNumber} / ${this.mediaMetadata.discTotal}`
|
|
||||||
},
|
|
||||||
narrators() {
|
narrators() {
|
||||||
return this.mediaMetadata.narrators || []
|
return this.mediaMetadata.narrators || []
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -98,9 +98,6 @@ export default {
|
|||||||
isPodcast() {
|
isPodcast() {
|
||||||
return this.libraryMediaType === 'podcast'
|
return this.libraryMediaType === 'podcast'
|
||||||
},
|
},
|
||||||
isMusic() {
|
|
||||||
return this.libraryMediaType === 'music'
|
|
||||||
},
|
|
||||||
seriesItems() {
|
seriesItems() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
@@ -274,35 +271,9 @@ export default {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
musicItems() {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
text: this.$strings.LabelAll,
|
|
||||||
value: 'all'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: this.$strings.LabelGenre,
|
|
||||||
textPlural: this.$strings.LabelGenres,
|
|
||||||
value: 'genres',
|
|
||||||
sublist: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: this.$strings.LabelTag,
|
|
||||||
textPlural: this.$strings.LabelTags,
|
|
||||||
value: 'tags',
|
|
||||||
sublist: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: this.$strings.ButtonIssues,
|
|
||||||
value: 'issues',
|
|
||||||
sublist: false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
selectItems() {
|
selectItems() {
|
||||||
if (this.isSeries) return this.seriesItems
|
if (this.isSeries) return this.seriesItems
|
||||||
if (this.isPodcast) return this.podcastItems
|
if (this.isPodcast) return this.podcastItems
|
||||||
if (this.isMusic) return this.musicItems
|
|
||||||
return this.bookItems
|
return this.bookItems
|
||||||
},
|
},
|
||||||
selectedItemSublist() {
|
selectedItemSublist() {
|
||||||
|
|||||||
@@ -56,9 +56,6 @@ export default {
|
|||||||
isPodcast() {
|
isPodcast() {
|
||||||
return this.libraryMediaType === 'podcast'
|
return this.libraryMediaType === 'podcast'
|
||||||
},
|
},
|
||||||
isMusic() {
|
|
||||||
return this.libraryMediaType === 'music'
|
|
||||||
},
|
|
||||||
podcastItems() {
|
podcastItems() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
@@ -148,40 +145,10 @@ export default {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
musicItems() {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
text: this.$strings.LabelTitle,
|
|
||||||
value: 'media.metadata.title'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: this.$strings.LabelAddedAt,
|
|
||||||
value: 'addedAt'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: this.$strings.LabelSize,
|
|
||||||
value: 'size'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: this.$strings.LabelDuration,
|
|
||||||
value: 'media.duration'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: this.$strings.LabelFileBirthtime,
|
|
||||||
value: 'birthtimeMs'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: this.$strings.LabelFileModified,
|
|
||||||
value: 'mtimeMs'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
selectItems() {
|
selectItems() {
|
||||||
let items = null
|
let items = null
|
||||||
if (this.isPodcast) {
|
if (this.isPodcast) {
|
||||||
items = this.podcastItems
|
items = this.podcastItems
|
||||||
} else if (this.isMusic) {
|
|
||||||
items = this.musicItems
|
|
||||||
} else if (this.$store.getters['user/getUserSetting']('filterBy').startsWith('series.')) {
|
} else if (this.$store.getters['user/getUserSetting']('filterBy').startsWith('series.')) {
|
||||||
items = this.seriesItems
|
items = this.seriesItems
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div ref="wrapper" class="relative ml-4 sm:ml-8" v-click-outside="clickOutside">
|
<div ref="wrapper" class="relative ml-4 sm:ml-8" v-click-outside="clickOutside">
|
||||||
<div class="flex items-center justify-center text-gray-300 cursor-pointer h-full" @mousedown.prevent @mouseup.prevent @click="setShowMenu(true)">
|
<div class="flex items-center justify-center text-gray-300 cursor-pointer h-full" @mousedown.prevent @mouseup.prevent @click="setShowMenu(true)">
|
||||||
<span class="font-mono uppercase text-gray-200 text-sm sm:text-base">{{ playbackRate.toFixed(1) }}<span class="text-base">x</span></span>
|
<span class="text-gray-200 text-sm sm:text-base">{{ playbackRate.toFixed(1) }}<span class="text-base">x</span></span>
|
||||||
</div>
|
</div>
|
||||||
<div v-show="showMenu" class="absolute -top-20 z-20 bg-bg border-black-200 border shadow-xl rounded-lg" :style="{ left: menuLeft + 'px' }">
|
<div v-show="showMenu" class="absolute -top-[5.5rem] z-20 bg-bg border-black-200 border shadow-xl rounded-lg" :style="{ left: menuLeft + 'px' }">
|
||||||
<div class="absolute -bottom-1.5 right-0 w-full flex justify-center" :style="{ left: arrowLeft + 'px' }">
|
<div class="absolute -bottom-1.5 right-0 w-full flex justify-center" :style="{ left: arrowLeft + 'px' }">
|
||||||
<div class="arrow-down" />
|
<div class="arrow-down" />
|
||||||
</div>
|
</div>
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
<template v-for="rate in rates">
|
<template v-for="rate in rates">
|
||||||
<div :key="rate" class="h-full border-black-300 w-11 cursor-pointer border rounded-sm" :class="value === rate ? 'bg-black-100' : 'hover:bg-black hover:bg-opacity-10'" style="min-width: 44px; max-width: 44px" @click="set(rate)">
|
<div :key="rate" class="h-full border-black-300 w-11 cursor-pointer border rounded-sm" :class="value === rate ? 'bg-black-100' : 'hover:bg-black hover:bg-opacity-10'" style="min-width: 44px; max-width: 44px" @click="set(rate)">
|
||||||
<div class="w-full h-full flex justify-center items-center">
|
<div class="w-full h-full flex justify-center items-center">
|
||||||
<p class="text-xs text-center font-mono">{{ rate }}<span class="text-sm">x</span></p>
|
<p class="text-xs text-center">{{ rate }}<span class="text-sm">x</span></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full py-1 px-4">
|
<div class="w-full py-1 px-1">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<ui-icon-btn :disabled="!canDecrement" icon="remove" @click="decrement" />
|
<ui-icon-btn :disabled="!canDecrement" icon="remove" @click="decrement" />
|
||||||
<p class="px-2 text-2xl sm:text-3xl">{{ playbackRate }}<span class="text-2xl">x</span></p>
|
<p class="px-2 text-2xl sm:text-3xl">{{ playbackRate }}<span class="text-2xl">x</span></p>
|
||||||
@@ -41,7 +41,7 @@ export default {
|
|||||||
currentPlaybackRate: 0,
|
currentPlaybackRate: 0,
|
||||||
MIN_SPEED: 0.5,
|
MIN_SPEED: 0.5,
|
||||||
MAX_SPEED: 10,
|
MAX_SPEED: 10,
|
||||||
menuLeft: -92,
|
menuLeft: -96,
|
||||||
arrowLeft: 0
|
arrowLeft: 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -89,9 +89,9 @@ export default {
|
|||||||
if (boundingBox.left + 110 > window.innerWidth - 10) {
|
if (boundingBox.left + 110 > window.innerWidth - 10) {
|
||||||
this.menuLeft = window.innerWidth - 230 - boundingBox.left
|
this.menuLeft = window.innerWidth - 230 - boundingBox.left
|
||||||
|
|
||||||
this.arrowLeft = Math.abs(this.menuLeft) - 92
|
this.arrowLeft = Math.abs(this.menuLeft) - 96
|
||||||
} else {
|
} else {
|
||||||
this.menuLeft = -92
|
this.menuLeft = -96
|
||||||
this.arrowLeft = 0
|
this.arrowLeft = 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
<span class="material-symbols text-2xl sm:text-3xl">{{ volumeIcon }}</span>
|
<span class="material-symbols text-2xl sm:text-3xl">{{ volumeIcon }}</span>
|
||||||
</button>
|
</button>
|
||||||
<transition name="menux">
|
<transition name="menux">
|
||||||
<div v-show="isOpen" class="volumeMenu h-6 absolute bottom-2 w-28 px-2 bg-bg shadow-sm rounded-lg" style="left: -116px">
|
<div v-show="isOpen" class="volumeMenu h-28 absolute bottom-2 w-6 py-2 bg-bg shadow-sm rounded-lg" style="top: -116px">
|
||||||
<div ref="volumeTrack" class="h-1 w-full bg-gray-500 my-2.5 relative cursor-pointer rounded-full" @mousedown="mousedownTrack" @click="clickVolumeTrack">
|
<div ref="volumeTrack" class="w-1 h-full bg-gray-500 mx-2.5 relative cursor-pointer rounded-full" @mousedown="mousedownTrack" @click="clickVolumeTrack">
|
||||||
<div class="bg-gray-100 h-full absolute left-0 top-0 pointer-events-none rounded-full" :style="{ width: volume * trackWidth + 'px' }" />
|
<div class="bg-gray-100 w-full absolute left-0 bottom-0 pointer-events-none rounded-full" :style="{ height: volume * trackHeight + 'px' }" />
|
||||||
<div class="w-2.5 h-2.5 bg-white shadow-sm rounded-full absolute pointer-events-none" :class="isDragging ? 'transform scale-125 origin-center' : ''" :style="{ left: cursorLeft + 'px', top: '-3px' }" />
|
<div class="w-2.5 h-2.5 bg-white shadow-sm rounded-full absolute pointer-events-none" :class="isDragging ? 'transform scale-125 origin-center' : ''" :style="{ bottom: cursorBottom + 'px', left: '-3px' }" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
@@ -24,10 +24,10 @@ export default {
|
|||||||
isOpen: false,
|
isOpen: false,
|
||||||
isDragging: false,
|
isDragging: false,
|
||||||
isHovering: false,
|
isHovering: false,
|
||||||
posX: 0,
|
posY: 0,
|
||||||
lastValue: 0.5,
|
lastValue: 0.5,
|
||||||
isMute: false,
|
isMute: false,
|
||||||
trackWidth: 112 - 20,
|
trackHeight: 112 - 20,
|
||||||
openTimeout: null
|
openTimeout: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -45,9 +45,9 @@ export default {
|
|||||||
this.$emit('input', val)
|
this.$emit('input', val)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
cursorLeft() {
|
cursorBottom() {
|
||||||
var left = this.trackWidth * this.volume
|
var bottom = this.trackHeight * this.volume
|
||||||
return left - 3
|
return bottom - 3
|
||||||
},
|
},
|
||||||
volumeIcon() {
|
volumeIcon() {
|
||||||
if (this.volume <= 0) return 'volume_mute'
|
if (this.volume <= 0) return 'volume_mute'
|
||||||
@@ -89,17 +89,10 @@ export default {
|
|||||||
}, 600)
|
}, 600)
|
||||||
},
|
},
|
||||||
mousemove(e) {
|
mousemove(e) {
|
||||||
var diff = this.posX - e.x
|
var diff = this.posY - e.y
|
||||||
this.posX = e.x
|
this.posY = e.y
|
||||||
var volShift = 0
|
var volShift = diff / this.trackHeight
|
||||||
if (diff < 0) {
|
var newVol = this.volume + volShift
|
||||||
// Volume up
|
|
||||||
volShift = diff / this.trackWidth
|
|
||||||
} else {
|
|
||||||
// volume down
|
|
||||||
volShift = diff / this.trackWidth
|
|
||||||
}
|
|
||||||
var newVol = this.volume - volShift
|
|
||||||
newVol = Math.min(Math.max(0, newVol), 1)
|
newVol = Math.min(Math.max(0, newVol), 1)
|
||||||
this.volume = newVol
|
this.volume = newVol
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
@@ -113,8 +106,8 @@ export default {
|
|||||||
},
|
},
|
||||||
mousedownTrack(e) {
|
mousedownTrack(e) {
|
||||||
this.isDragging = true
|
this.isDragging = true
|
||||||
this.posX = e.x
|
this.posY = e.y
|
||||||
var vol = e.offsetX / this.trackWidth
|
var vol = 1 - e.offsetY / this.trackHeight
|
||||||
vol = Math.min(Math.max(vol, 0), 1)
|
vol = Math.min(Math.max(vol, 0), 1)
|
||||||
this.volume = vol
|
this.volume = vol
|
||||||
document.body.addEventListener('mousemove', this.mousemove)
|
document.body.addEventListener('mousemove', this.mousemove)
|
||||||
@@ -137,7 +130,7 @@ export default {
|
|||||||
this.clickVolumeIcon()
|
this.clickVolumeIcon()
|
||||||
},
|
},
|
||||||
clickVolumeTrack(e) {
|
clickVolumeTrack(e) {
|
||||||
var vol = e.offsetX / this.trackWidth
|
var vol = 1 - e.offsetY / this.trackHeight
|
||||||
vol = Math.min(Math.max(vol, 0), 1)
|
vol = Math.min(Math.max(vol, 0), 1)
|
||||||
this.volume = vol
|
this.volume = vol
|
||||||
}
|
}
|
||||||
@@ -147,7 +140,7 @@ export default {
|
|||||||
this.isMute = true
|
this.isMute = true
|
||||||
}
|
}
|
||||||
const storageVolume = localStorage.getItem('volume')
|
const storageVolume = localStorage.getItem('volume')
|
||||||
if (storageVolume) {
|
if (storageVolume && !isNaN(storageVolume)) {
|
||||||
this.volume = parseFloat(storageVolume)
|
this.volume = parseFloat(storageVolume)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -296,7 +296,7 @@ export default {
|
|||||||
.then((data) => {
|
.then((data) => {
|
||||||
this.processing = false
|
this.processing = false
|
||||||
if (data.error) {
|
if (data.error) {
|
||||||
this.$toast.error(`${this.$strings.ToastAccountUpdateFailed}: ${data.error}`)
|
this.$toast.error(`${this.$strings.ToastFailedToUpdate}: ${data.error}`)
|
||||||
} else {
|
} else {
|
||||||
console.log('Account updated', data.user)
|
console.log('Account updated', data.user)
|
||||||
|
|
||||||
@@ -313,7 +313,7 @@ export default {
|
|||||||
this.processing = false
|
this.processing = false
|
||||||
console.error('Failed to update account', error)
|
console.error('Failed to update account', error)
|
||||||
var errMsg = error.response ? error.response.data || '' : ''
|
var errMsg = error.response ? error.response.data || '' : ''
|
||||||
this.$toast.error(errMsg || this.$strings.ToastFailedToUpdateAccount)
|
this.$toast.error(errMsg || this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
submitCreateAccount() {
|
submitCreateAccount() {
|
||||||
@@ -351,7 +351,7 @@ export default {
|
|||||||
update: type === 'admin',
|
update: type === 'admin',
|
||||||
delete: type === 'admin',
|
delete: type === 'admin',
|
||||||
upload: type === 'admin',
|
upload: type === 'admin',
|
||||||
accessExplicitContent: true,
|
accessExplicitContent: type === 'admin',
|
||||||
accessAllLibraries: true,
|
accessAllLibraries: true,
|
||||||
accessAllTags: true,
|
accessAllTags: true,
|
||||||
selectedTagsNotAccessible: false
|
selectedTagsNotAccessible: false
|
||||||
@@ -386,7 +386,7 @@ export default {
|
|||||||
upload: false,
|
upload: false,
|
||||||
accessAllLibraries: true,
|
accessAllLibraries: true,
|
||||||
accessAllTags: true,
|
accessAllTags: true,
|
||||||
accessExplicitContent: true,
|
accessExplicitContent: false,
|
||||||
selectedTagsNotAccessible: false
|
selectedTagsNotAccessible: false
|
||||||
},
|
},
|
||||||
librariesAccessible: [],
|
librariesAccessible: [],
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ export default {
|
|||||||
this.$toast.success(this.$strings.ToastBookmarkUpdateSuccess)
|
this.$toast.success(this.$strings.ToastBookmarkUpdateSuccess)
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
this.$toast.error(this.$strings.ToastBookmarkUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
console.error(error)
|
console.error(error)
|
||||||
})
|
})
|
||||||
this.show = false
|
this.show = false
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ export default {
|
|||||||
var result = await this.$axios.$patch(`/api/authors/${this.authorId}`, updatePayload).catch((error) => {
|
var result = await this.$axios.$patch(`/api/authors/${this.authorId}`, updatePayload).catch((error) => {
|
||||||
console.error('Failed', error)
|
console.error('Failed', error)
|
||||||
const errorMsg = error.response ? error.response.data : null
|
const errorMsg = error.response ? error.response.data : null
|
||||||
this.$toast.error(errorMsg || this.$strings.ToastAuthorUpdateFailed)
|
this.$toast.error(errorMsg || this.$strings.ToastFailedToUpdate)
|
||||||
return null
|
return null
|
||||||
})
|
})
|
||||||
if (result) {
|
if (result) {
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ export default {
|
|||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update collection', error)
|
console.error('Failed to update collection', error)
|
||||||
this.processing = false
|
this.processing = false
|
||||||
this.$toast.error(this.$strings.ToastCollectionUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update device', error)
|
console.error('Failed to update device', error)
|
||||||
this.$toast.error(this.$strings.ToastDeviceUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.processing = false
|
this.processing = false
|
||||||
|
|||||||
@@ -623,7 +623,7 @@ export default {
|
|||||||
this.clearSelectedMatch()
|
this.clearSelectedMatch()
|
||||||
this.$emit('selectTab', 'details')
|
this.$emit('selectTab', 'details')
|
||||||
} else {
|
} else {
|
||||||
this.$toast.error(this.$strings.ToastItemDetailsUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.clearSelectedMatch()
|
this.clearSelectedMatch()
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ export default {
|
|||||||
if (error.response && error.response.data) {
|
if (error.response && error.response.data) {
|
||||||
this.$toast.error(error.response.data)
|
this.$toast.error(error.response.data)
|
||||||
} else {
|
} else {
|
||||||
this.$toast.error(this.$strings.ToastLibraryUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
}
|
}
|
||||||
this.processing = false
|
this.processing = false
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update notification', error)
|
console.error('Failed to update notification', error)
|
||||||
this.$toast.error(this.$strings.ToastNotificationUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.processing = false
|
this.processing = false
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to remove items from playlist', error)
|
console.error('Failed to remove items from playlist', error)
|
||||||
this.$toast.error(this.$strings.ToastPlaylistUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
this.processing = false
|
this.processing = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -153,7 +153,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to add items to playlist', error)
|
console.error('Failed to add items to playlist', error)
|
||||||
this.$toast.error(this.$strings.ToastPlaylistUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
this.processing = false
|
this.processing = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ export default {
|
|||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update playlist', error)
|
console.error('Failed to update playlist', error)
|
||||||
this.processing = false
|
this.processing = false
|
||||||
this.$toast.error(this.$strings.ToastPlaylistUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,38 +1,37 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex items-center pt-4 pb-2 lg:pt-0 lg:pb-2">
|
<div class="flex justify-center pt-4 pb-2 lg:pt-0 lg:pb-2">
|
||||||
<div class="flex-grow" />
|
<div class="flex items-center justify-center flex-grow">
|
||||||
<template v-if="!loading">
|
<template v-if="!loading">
|
||||||
<ui-tooltip direction="top" :text="$strings.ButtonPreviousChapter" class="mr-4 lg:mr-8">
|
<ui-tooltip direction="top" :text="$strings.ButtonPreviousChapter" class="mr-4 lg:mr-8">
|
||||||
<button :aria-label="$strings.ButtonPreviousChapter" class="text-gray-300" @mousedown.prevent @mouseup.prevent @click.stop="prevChapter">
|
<button :aria-label="$strings.ButtonPreviousChapter" class="text-gray-300" @mousedown.prevent @mouseup.prevent @click.stop="prevChapter">
|
||||||
<span class="material-symbols text-2xl sm:text-3xl">first_page</span>
|
<span class="material-symbols text-2xl sm:text-3xl">first_page</span>
|
||||||
|
</button>
|
||||||
|
</ui-tooltip>
|
||||||
|
<ui-tooltip direction="top" :text="jumpBackwardText">
|
||||||
|
<button :aria-label="jumpForwardText" class="text-gray-300" @mousedown.prevent @mouseup.prevent @click.stop="jumpBackward">
|
||||||
|
<span class="material-symbols text-2xl sm:text-3xl">replay</span>
|
||||||
|
</button>
|
||||||
|
</ui-tooltip>
|
||||||
|
<button :aria-label="paused ? $strings.ButtonPlay : $strings.ButtonPause" class="p-2 shadow-sm bg-accent flex items-center justify-center rounded-full text-primary mx-4 lg:mx-8" :class="seekLoading ? 'animate-spin' : ''" @mousedown.prevent @mouseup.prevent @click.stop="playPause">
|
||||||
|
<span class="material-symbols fill text-2xl">{{ seekLoading ? 'autorenew' : paused ? 'play_arrow' : 'pause' }}</span>
|
||||||
</button>
|
</button>
|
||||||
</ui-tooltip>
|
<ui-tooltip direction="top" :text="jumpForwardText">
|
||||||
<ui-tooltip direction="top" :text="jumpBackwardText">
|
<button :aria-label="jumpForwardText" class="text-gray-300" @mousedown.prevent @mouseup.prevent @click.stop="jumpForward">
|
||||||
<button :aria-label="jumpForwardText" class="text-gray-300" @mousedown.prevent @mouseup.prevent @click.stop="jumpBackward">
|
<span class="material-symbols text-2xl sm:text-3xl">forward_media</span>
|
||||||
<span class="material-symbols text-2xl sm:text-3xl">replay</span>
|
</button>
|
||||||
</button>
|
</ui-tooltip>
|
||||||
</ui-tooltip>
|
<ui-tooltip direction="top" :text="hasNextLabel" class="ml-4 lg:ml-8">
|
||||||
<button :aria-label="paused ? $strings.ButtonPlay : $strings.ButtonPause" class="p-2 shadow-sm bg-accent flex items-center justify-center rounded-full text-primary mx-4 lg:mx-8" :class="seekLoading ? 'animate-spin' : ''" @mousedown.prevent @mouseup.prevent @click.stop="playPause">
|
<button :aria-label="hasNextLabel" :disabled="!hasNext" class="text-gray-300 disabled:text-gray-500" @mousedown.prevent @mouseup.prevent @click.stop="next">
|
||||||
<span class="material-symbols fill text-2xl">{{ seekLoading ? 'autorenew' : paused ? 'play_arrow' : 'pause' }}</span>
|
<span class="material-symbols text-2xl sm:text-3xl">last_page</span>
|
||||||
</button>
|
</button>
|
||||||
<ui-tooltip direction="top" :text="jumpForwardText">
|
</ui-tooltip>
|
||||||
<button :aria-label="jumpForwardText" class="text-gray-300" @mousedown.prevent @mouseup.prevent @click.stop="jumpForward">
|
</template>
|
||||||
<span class="material-symbols text-2xl sm:text-3xl">forward_media</span>
|
<template v-else>
|
||||||
</button>
|
<div class="cursor-pointer p-2 shadow-sm bg-accent flex items-center justify-center rounded-full text-primary mx-8 animate-spin">
|
||||||
</ui-tooltip>
|
<span class="material-symbols text-2xl">autorenew</span>
|
||||||
<ui-tooltip direction="top" :text="hasNextLabel" class="ml-4 lg:ml-8">
|
</div>
|
||||||
<button :aria-label="hasNextLabel" :disabled="!hasNext" class="text-gray-300 disabled:text-gray-500" @mousedown.prevent @mouseup.prevent @click.stop="next">
|
</template>
|
||||||
<span class="material-symbols text-2xl sm:text-3xl">last_page</span>
|
</div>
|
||||||
</button>
|
|
||||||
</ui-tooltip>
|
|
||||||
<controls-playback-speed-control v-model="playbackRateInput" @input="playbackRateUpdated" @change="playbackRateChanged" />
|
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
<div class="cursor-pointer p-2 shadow-sm bg-accent flex items-center justify-center rounded-full text-primary mx-8 animate-spin">
|
|
||||||
<span class="material-symbols text-2xl">autorenew</span>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<div class="flex-grow" />
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -41,7 +40,6 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
seekLoading: Boolean,
|
seekLoading: Boolean,
|
||||||
playbackRate: Number,
|
|
||||||
paused: Boolean,
|
paused: Boolean,
|
||||||
hasNextChapter: Boolean,
|
hasNextChapter: Boolean,
|
||||||
hasNextItemInQueue: Boolean
|
hasNextItemInQueue: Boolean
|
||||||
@@ -50,14 +48,6 @@ export default {
|
|||||||
return {}
|
return {}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
playbackRateInput: {
|
|
||||||
get() {
|
|
||||||
return this.playbackRate
|
|
||||||
},
|
|
||||||
set(val) {
|
|
||||||
this.$emit('update:playbackRate', val)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
jumpForwardText() {
|
jumpForwardText() {
|
||||||
return this.getJumpText('jumpForwardAmount', this.$strings.ButtonJumpForward)
|
return this.getJumpText('jumpForwardAmount', this.$strings.ButtonJumpForward)
|
||||||
},
|
},
|
||||||
@@ -89,15 +79,6 @@ export default {
|
|||||||
jumpForward() {
|
jumpForward() {
|
||||||
this.$emit('jumpForward')
|
this.$emit('jumpForward')
|
||||||
},
|
},
|
||||||
playbackRateUpdated(playbackRate) {
|
|
||||||
this.$emit('setPlaybackRate', playbackRate)
|
|
||||||
},
|
|
||||||
playbackRateChanged(playbackRate) {
|
|
||||||
this.$emit('setPlaybackRate', playbackRate)
|
|
||||||
this.$store.dispatch('user/updateUserSettings', { playbackRate }).catch((err) => {
|
|
||||||
console.error('Failed to update settings', err)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
getJumpText(setting, prefix) {
|
getJumpText(setting, prefix) {
|
||||||
const amount = this.$store.getters['user/getUserSetting'](setting)
|
const amount = this.$store.getters['user/getUserSetting'](setting)
|
||||||
if (!amount) return prefix
|
if (!amount) return prefix
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<div class="w-full -mt-6">
|
<div class="w-full -mt-6">
|
||||||
<div class="w-full relative mb-1">
|
<div class="w-full relative mb-1">
|
||||||
<div class="absolute -top-10 lg:top-0 right-0 lg:right-2 flex items-center h-full">
|
<div class="absolute -top-10 lg:top-0 right-0 lg:right-2 flex items-center h-full">
|
||||||
<!-- <span class="material-symbols text-2xl cursor-pointer" @click="toggleFullscreen(true)">expand_less</span> -->
|
<controls-playback-speed-control v-model="playbackRate" @input="setPlaybackRate" @change="playbackRateChanged" class="mx-2 block" />
|
||||||
|
|
||||||
<ui-tooltip direction="top" :text="$strings.LabelVolume">
|
<ui-tooltip direction="left" :text="$strings.LabelVolume">
|
||||||
<controls-volume-control ref="volumeControl" v-model="volume" @input="setVolume" class="mx-2 hidden sm:block" />
|
<controls-volume-control ref="volumeControl" v-model="volume" @input="setVolume" class="mx-2 hidden sm:block" />
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<span v-if="!sleepTimerSet" class="material-symbols text-2xl">snooze</span>
|
<span v-if="!sleepTimerSet" class="material-symbols text-2xl">snooze</span>
|
||||||
<div v-else class="flex items-center">
|
<div v-else class="flex items-center">
|
||||||
<span class="material-symbols text-lg text-warning">snooze</span>
|
<span class="material-symbols text-lg text-warning">snooze</span>
|
||||||
<p class="text-sm sm:text-lg text-warning font-mono font-semibold text-center px-0.5 sm:pb-0.5 sm:min-w-8">{{ sleepTimerRemainingString }}</p>
|
<p class="text-sm sm:text-lg text-warning font-semibold text-center px-0.5 sm:pb-0.5 sm:min-w-8">{{ sleepTimerRemainingString }}</p>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
@@ -48,15 +48,19 @@
|
|||||||
|
|
||||||
<player-track-bar ref="trackbar" :loading="loading" :chapters="chapters" :duration="duration" :current-chapter="currentChapter" :playback-rate="playbackRate" @seek="seek" />
|
<player-track-bar ref="trackbar" :loading="loading" :chapters="chapters" :duration="duration" :current-chapter="currentChapter" :playback-rate="playbackRate" @seek="seek" />
|
||||||
|
|
||||||
<div class="flex">
|
<div class="relative flex items-center justify-between">
|
||||||
<p ref="currentTimestamp" class="font-mono text-xxs sm:text-sm text-gray-100 pointer-events-auto">00:00:00</p>
|
<div class="flex-grow flex items-center">
|
||||||
<p class="font-mono text-sm hidden sm:block text-gray-100 pointer-events-auto"> / {{ progressPercent }}%</p>
|
<p ref="currentTimestamp" class="font-mono text-xxs sm:text-sm text-gray-100 pointer-events-auto">00:00:00</p>
|
||||||
<div class="flex-grow" />
|
<p class="font-mono text-sm hidden sm:block text-gray-100 pointer-events-auto"> / {{ progressPercent }}%</p>
|
||||||
<p class="text-xs sm:text-sm text-gray-300 pt-0.5 px-2 truncate">
|
</div>
|
||||||
{{ currentChapterName }} <span v-if="useChapterTrack" class="text-xs text-gray-400"> ({{ $getString('LabelPlayerChapterNumberMarker', [currentChapterIndex + 1, chapters.length]) }})</span>
|
<div class="absolute left-1/2 transform -translate-x-1/2">
|
||||||
</p>
|
<p class="text-xs sm:text-sm text-gray-300 pt-0.5 px-2 truncate">
|
||||||
<div class="flex-grow" />
|
{{ currentChapterName }} <span v-if="useChapterTrack" class="text-xs text-gray-400"> ({{ $getString('LabelPlayerChapterNumberMarker', [currentChapterIndex + 1, chapters.length]) }})</span>
|
||||||
<p class="font-mono text-xxs sm:text-sm text-gray-100 pointer-events-auto">{{ timeRemainingPretty }}</p>
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="flex-grow flex items-center justify-end">
|
||||||
|
<p class="font-mono text-xxs sm:text-sm text-gray-100 pointer-events-auto">{{ timeRemainingPretty }}</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<modals-chapters-modal v-model="showChaptersModal" :current-chapter="currentChapter" :playback-rate="playbackRate" :chapters="chapters" @select="selectChapter" />
|
<modals-chapters-modal v-model="showChaptersModal" :current-chapter="currentChapter" :playback-rate="playbackRate" :chapters="chapters" @select="selectChapter" />
|
||||||
@@ -178,22 +182,6 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
toggleFullscreen(isFullscreen) {
|
toggleFullscreen(isFullscreen) {
|
||||||
this.$store.commit('setPlayerIsFullscreen', isFullscreen)
|
this.$store.commit('setPlayerIsFullscreen', isFullscreen)
|
||||||
|
|
||||||
var videoPlayerEl = document.getElementById('video-player')
|
|
||||||
if (videoPlayerEl) {
|
|
||||||
if (isFullscreen) {
|
|
||||||
videoPlayerEl.style.width = '100vw'
|
|
||||||
videoPlayerEl.style.height = '100vh'
|
|
||||||
videoPlayerEl.style.top = '0px'
|
|
||||||
videoPlayerEl.style.left = '0px'
|
|
||||||
} else {
|
|
||||||
videoPlayerEl.style.width = '384px'
|
|
||||||
videoPlayerEl.style.height = '216px'
|
|
||||||
videoPlayerEl.style.top = 'unset'
|
|
||||||
videoPlayerEl.style.bottom = '80px'
|
|
||||||
videoPlayerEl.style.left = '16px'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
setDuration(duration) {
|
setDuration(duration) {
|
||||||
this.duration = duration
|
this.duration = duration
|
||||||
@@ -240,6 +228,12 @@ export default {
|
|||||||
this.playbackRate = Number((this.playbackRate - 0.1).toFixed(1))
|
this.playbackRate = Number((this.playbackRate - 0.1).toFixed(1))
|
||||||
this.setPlaybackRate(this.playbackRate)
|
this.setPlaybackRate(this.playbackRate)
|
||||||
},
|
},
|
||||||
|
playbackRateChanged(playbackRate) {
|
||||||
|
this.setPlaybackRate(playbackRate)
|
||||||
|
this.$store.dispatch('user/updateUserSettings', { playbackRate }).catch((err) => {
|
||||||
|
console.error('Failed to update settings', err)
|
||||||
|
})
|
||||||
|
},
|
||||||
setPlaybackRate(playbackRate) {
|
setPlaybackRate(playbackRate) {
|
||||||
this.$emit('setPlaybackRate', playbackRate)
|
this.$emit('setPlaybackRate', playbackRate)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -35,22 +35,22 @@
|
|||||||
<div class="flex justify-between pt-12">
|
<div class="flex justify-between pt-12">
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-center">{{ $strings.LabelStatsWeekListening }}</p>
|
<p class="text-sm text-center">{{ $strings.LabelStatsWeekListening }}</p>
|
||||||
<p class="text-5xl font-semibold text-center" style="line-height: 0.85">{{ totalMinutesListeningThisWeek }}</p>
|
<p class="text-5xl font-semibold text-center" style="line-height: 0.85">{{ $formatNumber(totalMinutesListeningThisWeek) }}</p>
|
||||||
<p class="text-sm text-center">{{ $strings.LabelStatsMinutes }}</p>
|
<p class="text-sm text-center">{{ $strings.LabelStatsMinutes }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-center">{{ $strings.LabelStatsDailyAverage }}</p>
|
<p class="text-sm text-center">{{ $strings.LabelStatsDailyAverage }}</p>
|
||||||
<p class="text-5xl font-semibold text-center" style="line-height: 0.85">{{ averageMinutesPerDay }}</p>
|
<p class="text-5xl font-semibold text-center" style="line-height: 0.85">{{ $formatNumber(averageMinutesPerDay) }}</p>
|
||||||
<p class="text-sm text-center">{{ $strings.LabelStatsMinutes }}</p>
|
<p class="text-sm text-center">{{ $strings.LabelStatsMinutes }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-center">{{ $strings.LabelStatsBestDay }}</p>
|
<p class="text-sm text-center">{{ $strings.LabelStatsBestDay }}</p>
|
||||||
<p class="text-5xl font-semibold text-center" style="line-height: 0.85">{{ mostListenedDay }}</p>
|
<p class="text-5xl font-semibold text-center" style="line-height: 0.85">{{ $formatNumber(mostListenedDay) }}</p>
|
||||||
<p class="text-sm text-center">{{ $strings.LabelStatsMinutes }}</p>
|
<p class="text-sm text-center">{{ $strings.LabelStatsMinutes }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm text-center">{{ $strings.LabelStatsDays }}</p>
|
<p class="text-sm text-center">{{ $strings.LabelStatsDays }}</p>
|
||||||
<p class="text-5xl font-semibold text-center" style="line-height: 0.85">{{ daysInARow }}</p>
|
<p class="text-5xl font-semibold text-center" style="line-height: 0.85">{{ $formatNumber(daysInARow) }}</p>
|
||||||
<p class="text-sm text-center">{{ $strings.LabelStatsInARow }}</p>
|
<p class="text-sm text-center">{{ $strings.LabelStatsInARow }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update collection', error)
|
console.error('Failed to update collection', error)
|
||||||
this.$toast.error(this.$strings.ToastCollectionUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
editBook(book) {
|
editBook(book) {
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update playlist', error)
|
console.error('Failed to update playlist', error)
|
||||||
this.$toast.error(this.$strings.ToastPlaylistUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
init() {
|
init() {
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to remove item from playlist', error)
|
console.error('Failed to remove item from playlist', error)
|
||||||
this.$toast.error(this.$strings.ToastPlaylistUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.processingRemove = false
|
this.processingRemove = false
|
||||||
|
|||||||
@@ -129,10 +129,12 @@ module.exports = {
|
|||||||
// Build Configuration: https://go.nuxtjs.dev/config-build
|
// Build Configuration: https://go.nuxtjs.dev/config-build
|
||||||
build: {
|
build: {
|
||||||
postcss: {
|
postcss: {
|
||||||
plugins: {
|
postcssOptions: {
|
||||||
tailwindcss: {},
|
plugins: {
|
||||||
autoprefixer: {},
|
tailwindcss: {},
|
||||||
},
|
autoprefixer: {},
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watchers: {
|
watchers: {
|
||||||
|
|||||||
Generated
+3106
-2020
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "audiobookshelf-client",
|
"name": "audiobookshelf-client",
|
||||||
"version": "2.13.3",
|
"version": "2.14.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",
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
"fast-average-color": "^9.4.0",
|
"fast-average-color": "^9.4.0",
|
||||||
"hls.js": "^1.5.7",
|
"hls.js": "^1.5.7",
|
||||||
"libarchive.js": "^1.3.0",
|
"libarchive.js": "^1.3.0",
|
||||||
"nuxt": "^2.17.3",
|
"nuxt": "^2.18.1",
|
||||||
"nuxt-socket-io": "^1.1.18",
|
"nuxt-socket-io": "^1.1.18",
|
||||||
"trix": "^1.3.1",
|
"trix": "^1.3.1",
|
||||||
"v-click-outside": "^3.1.2",
|
"v-click-outside": "^3.1.2",
|
||||||
|
|||||||
@@ -499,7 +499,7 @@ export default {
|
|||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
this.saving = false
|
this.saving = false
|
||||||
console.error('Failed to update chapters', error)
|
console.error('Failed to update chapters', error)
|
||||||
this.$toast.error('Failed to update chapters')
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
applyChapterNamesOnly() {
|
applyChapterNamesOnly() {
|
||||||
@@ -628,15 +628,27 @@ export default {
|
|||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.saving = false
|
this.saving = false
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
libraryItemUpdated(libraryItem) {
|
||||||
|
if (libraryItem.id === this.libraryItem.id) {
|
||||||
|
if (!!libraryItem.media.metadata.asin && this.mediaMetadata.asin !== libraryItem.media.metadata.asin) {
|
||||||
|
this.asinInput = libraryItem.media.metadata.asin
|
||||||
|
}
|
||||||
|
this.libraryItem = libraryItem
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.regionInput = localStorage.getItem('audibleRegion') || 'US'
|
this.regionInput = localStorage.getItem('audibleRegion') || 'US'
|
||||||
this.asinInput = this.mediaMetadata.asin || null
|
this.asinInput = this.mediaMetadata.asin || null
|
||||||
this.initChapters()
|
this.initChapters()
|
||||||
|
|
||||||
|
this.$eventBus.$on(`${this.libraryItem.id}_updated`, this.libraryItemUpdated)
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
this.destroyAudioEl()
|
this.destroyAudioEl()
|
||||||
|
|
||||||
|
this.$eventBus.$off(`${this.libraryItem.id}_updated`, this.libraryItemUpdated)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<ui-btn v-if="showPlayButton" :disabled="streaming" color="success" :padding-x="4" small class="flex items-center h-9 mr-2" @click="clickPlay">
|
<ui-btn v-if="showPlayButton" :disabled="streaming" color="success" :padding-x="4" small class="flex items-center h-9 mr-2" @click="clickPlay">
|
||||||
<span v-show="!streaming" class="material-symbols fill text-2xl -ml-2 pr-1 text-white">play_arrow</span>
|
<span v-show="!streaming" class="material-symbols fill text-2xl -ml-2 pr-1 text-white">play_arrow</span>
|
||||||
{{ streaming ? $strings.ButtonPlaying : $strings.ButtonPlay }}
|
{{ streaming ? $strings.ButtonPlaying : $strings.ButtonPlayAll }}
|
||||||
</ui-btn>
|
</ui-btn>
|
||||||
|
|
||||||
<!-- RSS feed -->
|
<!-- RSS feed -->
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update server settings', error)
|
console.error('Failed to update server settings', error)
|
||||||
this.$toast.error(this.$strings.ToastServerSettingsUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.savingSettings = false
|
this.savingSettings = false
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to save backup path', error)
|
console.error('Failed to save backup path', error)
|
||||||
const errorMsg = error.response?.data || this.$strings.ToastBackupPathUpdateFailed
|
const errorMsg = error.response?.data || this.$strings.ToastFailedToUpdate
|
||||||
this.$toast.error(errorMsg)
|
this.$toast.error(errorMsg)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update email settings', error)
|
console.error('Failed to update email settings', error)
|
||||||
this.$toast.error(this.$strings.ToastEmailSettingsUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.savingSettings = false
|
this.savingSettings = false
|
||||||
|
|||||||
@@ -290,7 +290,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update prefixes', error)
|
console.error('Failed to update prefixes', error)
|
||||||
this.$toast.error(this.$strings.ToastSortingPrefixesUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.savingPrefixes = false
|
this.savingPrefixes = false
|
||||||
@@ -328,7 +328,6 @@ export default {
|
|||||||
.dispatch('updateServerSettings', payload)
|
.dispatch('updateServerSettings', payload)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.updatingServerSettings = false
|
this.updatingServerSettings = false
|
||||||
this.$toast.success(this.$strings.ToastServerSettingsUpdateSuccess)
|
|
||||||
|
|
||||||
if (payload.language) {
|
if (payload.language) {
|
||||||
// Updating language after save allows for re-rendering
|
// Updating language after save allows for re-rendering
|
||||||
@@ -338,7 +337,7 @@ export default {
|
|||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update server settings', error)
|
console.error('Failed to update server settings', error)
|
||||||
this.updatingServerSettings = false
|
this.updatingServerSettings = false
|
||||||
this.$toast.error(this.$strings.ToastServerSettingsUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
initServerSettings() {
|
initServerSettings() {
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Failed to update notification settings', error)
|
console.error('Failed to update notification settings', error)
|
||||||
this.$toast.error(this.$strings.ToastNotificationSettingsUpdateFailed)
|
this.$toast.error(this.$strings.ToastFailedToUpdate)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.savingSettings = false
|
this.savingSettings = false
|
||||||
|
|||||||
@@ -39,16 +39,11 @@
|
|||||||
><span :key="index" v-if="index < seriesList.length - 1">, </span>
|
><span :key="index" v-if="index < seriesList.length - 1">, </span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-if="!isVideo">
|
<p v-if="isPodcast" class="mb-2 mt-0.5 text-gray-200 text-lg md:text-xl">{{ $getString('LabelByAuthor', [podcastAuthor]) }}</p>
|
||||||
<p v-if="isPodcast" class="mb-2 mt-0.5 text-gray-200 text-lg md:text-xl">{{ $getString('LabelByAuthor', [podcastAuthor]) }}</p>
|
<p v-else-if="authors.length" class="mb-2 mt-0.5 text-gray-200 text-lg md:text-xl max-w-[calc(100vw-2rem)] overflow-hidden overflow-ellipsis">
|
||||||
<p v-else-if="musicArtists.length" class="mb-2 mt-0.5 text-gray-200 text-lg md:text-xl max-w-[calc(100vw-2rem)] overflow-hidden overflow-ellipsis">
|
by <nuxt-link v-for="(author, index) in authors" :key="index" :to="`/author/${author.id}`" class="hover:underline">{{ author.name }}<span v-if="index < authors.length - 1">, </span></nuxt-link>
|
||||||
<nuxt-link v-for="(artist, index) in musicArtists" :key="index" :to="`/artist/${$encode(artist)}`" class="hover:underline">{{ artist }}<span v-if="index < musicArtists.length - 1">, </span></nuxt-link>
|
</p>
|
||||||
</p>
|
<p v-else class="mb-2 mt-0.5 text-gray-200 text-xl">by Unknown</p>
|
||||||
<p v-else-if="authors.length" class="mb-2 mt-0.5 text-gray-200 text-lg md:text-xl max-w-[calc(100vw-2rem)] overflow-hidden overflow-ellipsis">
|
|
||||||
by <nuxt-link v-for="(author, index) in authors" :key="index" :to="`/author/${author.id}`" class="hover:underline">{{ author.name }}<span v-if="index < authors.length - 1">, </span></nuxt-link>
|
|
||||||
</p>
|
|
||||||
<p v-else class="mb-2 mt-0.5 text-gray-200 text-xl">by Unknown</p>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<content-library-item-details :library-item="libraryItem" />
|
<content-library-item-details :library-item="libraryItem" />
|
||||||
</div>
|
</div>
|
||||||
@@ -109,7 +104,7 @@
|
|||||||
<ui-icon-btn icon="" outlined class="mx-0.5" @click="editClick" />
|
<ui-icon-btn icon="" outlined class="mx-0.5" @click="editClick" />
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
|
|
||||||
<ui-tooltip v-if="!isPodcast && !isMusic" :text="userIsFinished ? $strings.MessageMarkAsNotFinished : $strings.MessageMarkAsFinished" direction="top">
|
<ui-tooltip v-if="!isPodcast" :text="userIsFinished ? $strings.MessageMarkAsNotFinished : $strings.MessageMarkAsFinished" direction="top">
|
||||||
<ui-read-icon-btn :disabled="isProcessingReadUpdate" :is-read="userIsFinished" class="mx-0.5" @click="toggleFinished" />
|
<ui-read-icon-btn :disabled="isProcessingReadUpdate" :is-read="userIsFinished" class="mx-0.5" @click="toggleFinished" />
|
||||||
</ui-tooltip>
|
</ui-tooltip>
|
||||||
|
|
||||||
@@ -220,12 +215,6 @@ export default {
|
|||||||
isPodcast() {
|
isPodcast() {
|
||||||
return this.libraryItem.mediaType === 'podcast'
|
return this.libraryItem.mediaType === 'podcast'
|
||||||
},
|
},
|
||||||
isVideo() {
|
|
||||||
return this.libraryItem.mediaType === 'video'
|
|
||||||
},
|
|
||||||
isMusic() {
|
|
||||||
return this.libraryItem.mediaType === 'music'
|
|
||||||
},
|
|
||||||
isMissing() {
|
isMissing() {
|
||||||
return this.libraryItem.isMissing
|
return this.libraryItem.isMissing
|
||||||
},
|
},
|
||||||
@@ -240,8 +229,6 @@ export default {
|
|||||||
},
|
},
|
||||||
showPlayButton() {
|
showPlayButton() {
|
||||||
if (this.isMissing || this.isInvalid) return false
|
if (this.isMissing || this.isInvalid) return false
|
||||||
if (this.isMusic) return !!this.audioFile
|
|
||||||
if (this.isVideo) return !!this.videoFile
|
|
||||||
if (this.isPodcast) return this.podcastEpisodes.length
|
if (this.isPodcast) return this.podcastEpisodes.length
|
||||||
return this.tracks.length
|
return this.tracks.length
|
||||||
},
|
},
|
||||||
@@ -292,9 +279,6 @@ export default {
|
|||||||
authors() {
|
authors() {
|
||||||
return this.mediaMetadata.authors || []
|
return this.mediaMetadata.authors || []
|
||||||
},
|
},
|
||||||
musicArtists() {
|
|
||||||
return this.mediaMetadata.artists || []
|
|
||||||
},
|
|
||||||
series() {
|
series() {
|
||||||
return this.mediaMetadata.series || []
|
return this.mediaMetadata.series || []
|
||||||
},
|
},
|
||||||
@@ -309,7 +293,7 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
duration() {
|
duration() {
|
||||||
if (!this.tracks.length && !this.audioFile) return 0
|
if (!this.tracks.length) return 0
|
||||||
return this.media.duration
|
return this.media.duration
|
||||||
},
|
},
|
||||||
libraryFiles() {
|
libraryFiles() {
|
||||||
@@ -321,18 +305,10 @@ export default {
|
|||||||
ebookFile() {
|
ebookFile() {
|
||||||
return this.media.ebookFile
|
return this.media.ebookFile
|
||||||
},
|
},
|
||||||
videoFile() {
|
|
||||||
return this.media.videoFile
|
|
||||||
},
|
|
||||||
audioFile() {
|
|
||||||
// Music track
|
|
||||||
return this.media.audioFile
|
|
||||||
},
|
|
||||||
description() {
|
description() {
|
||||||
return this.mediaMetadata.description || ''
|
return this.mediaMetadata.description || ''
|
||||||
},
|
},
|
||||||
userMediaProgress() {
|
userMediaProgress() {
|
||||||
if (this.isMusic) return null
|
|
||||||
return this.$store.getters['user/getUserMediaProgress'](this.libraryItemId)
|
return this.$store.getters['user/getUserMediaProgress'](this.libraryItemId)
|
||||||
},
|
},
|
||||||
userIsFinished() {
|
userIsFinished() {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<ui-btn v-if="showPlayButton" :disabled="streaming" color="success" :padding-x="4" small class="flex items-center h-9 mr-2" @click="clickPlay">
|
<ui-btn v-if="showPlayButton" :disabled="streaming" color="success" :padding-x="4" small class="flex items-center h-9 mr-2" @click="clickPlay">
|
||||||
<span v-show="!streaming" class="material-symbols fill text-2xl -ml-2 pr-1 text-white">play_arrow</span>
|
<span v-show="!streaming" class="material-symbols fill text-2xl -ml-2 pr-1 text-white">play_arrow</span>
|
||||||
{{ streaming ? $strings.ButtonPlaying : $strings.ButtonPlay }}
|
{{ streaming ? $strings.ButtonPlaying : $strings.ButtonPlayAll }}
|
||||||
</ui-btn>
|
</ui-btn>
|
||||||
|
|
||||||
<ui-icon-btn icon="edit" class="mx-0.5" @click="editClick" />
|
<ui-icon-btn icon="edit" class="mx-0.5" @click="editClick" />
|
||||||
|
|||||||
@@ -384,12 +384,6 @@ export default {
|
|||||||
else itemsFailed++
|
else itemsFailed++
|
||||||
this.updateItemCardStatus(item.index, result ? 'success' : 'failed')
|
this.updateItemCardStatus(item.index, result ? 'success' : 'failed')
|
||||||
}
|
}
|
||||||
if (itemsUploaded) {
|
|
||||||
this.$toast.success(`Successfully uploaded ${itemsUploaded} item${itemsUploaded > 1 ? 's' : ''}`)
|
|
||||||
}
|
|
||||||
if (itemsFailed) {
|
|
||||||
this.$toast.success(`Failed to upload ${itemsFailed} item${itemsFailed > 1 ? 's' : ''}`)
|
|
||||||
}
|
|
||||||
this.processing = false
|
this.processing = false
|
||||||
this.uploadFinished = true
|
this.uploadFinished = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,260 +0,0 @@
|
|||||||
import Hls from 'hls.js'
|
|
||||||
import EventEmitter from 'events'
|
|
||||||
|
|
||||||
export default class LocalVideoPlayer extends EventEmitter {
|
|
||||||
constructor(ctx) {
|
|
||||||
super()
|
|
||||||
|
|
||||||
this.ctx = ctx
|
|
||||||
this.player = null
|
|
||||||
|
|
||||||
this.libraryItem = null
|
|
||||||
this.videoTrack = null
|
|
||||||
this.isHlsTranscode = null
|
|
||||||
this.hlsInstance = null
|
|
||||||
this.usingNativeplayer = false
|
|
||||||
this.startTime = 0
|
|
||||||
this.playWhenReady = false
|
|
||||||
this.defaultPlaybackRate = 1
|
|
||||||
|
|
||||||
this.playableMimeTypes = []
|
|
||||||
|
|
||||||
this.initialize()
|
|
||||||
}
|
|
||||||
|
|
||||||
initialize() {
|
|
||||||
if (document.getElementById('video-player')) {
|
|
||||||
document.getElementById('video-player').remove()
|
|
||||||
}
|
|
||||||
var videoEl = document.createElement('video')
|
|
||||||
videoEl.id = 'video-player'
|
|
||||||
// videoEl.style.display = 'none'
|
|
||||||
videoEl.className = 'absolute bg-black z-50'
|
|
||||||
videoEl.style.height = '216px'
|
|
||||||
videoEl.style.width = '384px'
|
|
||||||
videoEl.style.bottom = '80px'
|
|
||||||
videoEl.style.left = '16px'
|
|
||||||
document.body.appendChild(videoEl)
|
|
||||||
this.player = videoEl
|
|
||||||
|
|
||||||
this.player.addEventListener('play', this.evtPlay.bind(this))
|
|
||||||
this.player.addEventListener('pause', this.evtPause.bind(this))
|
|
||||||
this.player.addEventListener('progress', this.evtProgress.bind(this))
|
|
||||||
this.player.addEventListener('ended', this.evtEnded.bind(this))
|
|
||||||
this.player.addEventListener('error', this.evtError.bind(this))
|
|
||||||
this.player.addEventListener('loadedmetadata', this.evtLoadedMetadata.bind(this))
|
|
||||||
this.player.addEventListener('timeupdate', this.evtTimeupdate.bind(this))
|
|
||||||
|
|
||||||
var mimeTypes = ['video/mp4']
|
|
||||||
var mimeTypeCanPlayMap = {}
|
|
||||||
mimeTypes.forEach((mt) => {
|
|
||||||
var canPlay = this.player.canPlayType(mt)
|
|
||||||
mimeTypeCanPlayMap[mt] = canPlay
|
|
||||||
if (canPlay) this.playableMimeTypes.push(mt)
|
|
||||||
})
|
|
||||||
console.log(`[LocalVideoPlayer] Supported mime types`, mimeTypeCanPlayMap, this.playableMimeTypes)
|
|
||||||
}
|
|
||||||
|
|
||||||
evtPlay() {
|
|
||||||
this.emit('stateChange', 'PLAYING')
|
|
||||||
}
|
|
||||||
evtPause() {
|
|
||||||
this.emit('stateChange', 'PAUSED')
|
|
||||||
}
|
|
||||||
evtProgress() {
|
|
||||||
var lastBufferTime = this.getLastBufferedTime()
|
|
||||||
this.emit('buffertimeUpdate', lastBufferTime)
|
|
||||||
}
|
|
||||||
evtEnded() {
|
|
||||||
console.log(`[LocalVideoPlayer] Ended`)
|
|
||||||
this.emit('finished')
|
|
||||||
}
|
|
||||||
evtError(error) {
|
|
||||||
console.error('Player error', error)
|
|
||||||
this.emit('error', error)
|
|
||||||
}
|
|
||||||
evtLoadedMetadata(data) {
|
|
||||||
if (!this.isHlsTranscode) {
|
|
||||||
this.player.currentTime = this.startTime
|
|
||||||
}
|
|
||||||
|
|
||||||
this.emit('stateChange', 'LOADED')
|
|
||||||
if (this.playWhenReady) {
|
|
||||||
this.playWhenReady = false
|
|
||||||
this.play()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
evtTimeupdate() {
|
|
||||||
if (this.player.paused) {
|
|
||||||
this.emit('timeupdate', this.getCurrentTime())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
destroy() {
|
|
||||||
this.destroyHlsInstance()
|
|
||||||
if (this.player) {
|
|
||||||
this.player.remove()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
set(libraryItem, videoTrack, isHlsTranscode, startTime, playWhenReady = false) {
|
|
||||||
this.libraryItem = libraryItem
|
|
||||||
this.videoTrack = videoTrack
|
|
||||||
this.isHlsTranscode = isHlsTranscode
|
|
||||||
this.playWhenReady = playWhenReady
|
|
||||||
this.startTime = startTime
|
|
||||||
|
|
||||||
if (this.hlsInstance) {
|
|
||||||
this.destroyHlsInstance()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isHlsTranscode) {
|
|
||||||
this.setHlsStream()
|
|
||||||
} else {
|
|
||||||
this.setDirectPlay()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setHlsStream() {
|
|
||||||
// iOS does not support Media Elements but allows for HLS in the native video player
|
|
||||||
if (!Hls.isSupported()) {
|
|
||||||
console.warn('HLS is not supported - fallback to using video element')
|
|
||||||
this.usingNativeplayer = true
|
|
||||||
this.player.src = this.videoTrack.relativeContentUrl
|
|
||||||
this.player.currentTime = this.startTime
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var hlsOptions = {
|
|
||||||
startPosition: this.startTime || -1
|
|
||||||
// No longer needed because token is put in a query string
|
|
||||||
// xhrSetup: (xhr) => {
|
|
||||||
// xhr.setRequestHeader('Authorization', `Bearer ${this.token}`)
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
this.hlsInstance = new Hls(hlsOptions)
|
|
||||||
|
|
||||||
this.hlsInstance.attachMedia(this.player)
|
|
||||||
this.hlsInstance.on(Hls.Events.MEDIA_ATTACHED, () => {
|
|
||||||
this.hlsInstance.loadSource(this.videoTrack.relativeContentUrl)
|
|
||||||
|
|
||||||
this.hlsInstance.on(Hls.Events.MANIFEST_PARSED, () => {
|
|
||||||
console.log('[HLS] Manifest Parsed')
|
|
||||||
})
|
|
||||||
|
|
||||||
this.hlsInstance.on(Hls.Events.ERROR, (e, data) => {
|
|
||||||
console.error('[HLS] Error', data.type, data.details, data)
|
|
||||||
if (data.details === Hls.ErrorDetails.BUFFER_STALLED_ERROR) {
|
|
||||||
console.error('[HLS] BUFFER STALLED ERROR')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
this.hlsInstance.on(Hls.Events.DESTROYING, () => {
|
|
||||||
console.log('[HLS] Destroying HLS Instance')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
setDirectPlay() {
|
|
||||||
this.player.src = this.videoTrack.relativeContentUrl
|
|
||||||
console.log(`[LocalVideoPlayer] Loading track src ${this.videoTrack.relativeContentUrl}`)
|
|
||||||
this.player.load()
|
|
||||||
}
|
|
||||||
|
|
||||||
destroyHlsInstance() {
|
|
||||||
if (!this.hlsInstance) return
|
|
||||||
if (this.hlsInstance.destroy) {
|
|
||||||
var temp = this.hlsInstance
|
|
||||||
temp.destroy()
|
|
||||||
}
|
|
||||||
this.hlsInstance = null
|
|
||||||
}
|
|
||||||
|
|
||||||
async resetStream(startTime) {
|
|
||||||
this.destroyHlsInstance()
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 1000))
|
|
||||||
this.set(this.libraryItem, this.videoTrack, this.isHlsTranscode, startTime, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
playPause() {
|
|
||||||
if (!this.player) return
|
|
||||||
if (this.player.paused) this.play()
|
|
||||||
else this.pause()
|
|
||||||
}
|
|
||||||
|
|
||||||
play() {
|
|
||||||
if (this.player) this.player.play()
|
|
||||||
}
|
|
||||||
|
|
||||||
pause() {
|
|
||||||
if (this.player) this.player.pause()
|
|
||||||
}
|
|
||||||
|
|
||||||
getCurrentTime() {
|
|
||||||
return this.player ? this.player.currentTime : 0
|
|
||||||
}
|
|
||||||
|
|
||||||
getDuration() {
|
|
||||||
return this.videoTrack.duration
|
|
||||||
}
|
|
||||||
|
|
||||||
setPlaybackRate(playbackRate) {
|
|
||||||
if (!this.player) return
|
|
||||||
this.defaultPlaybackRate = playbackRate
|
|
||||||
this.player.playbackRate = playbackRate
|
|
||||||
}
|
|
||||||
|
|
||||||
seek(time) {
|
|
||||||
if (!this.player) return
|
|
||||||
this.player.currentTime = Math.max(0, time)
|
|
||||||
}
|
|
||||||
|
|
||||||
setVolume(volume) {
|
|
||||||
if (!this.player) return
|
|
||||||
this.player.volume = volume
|
|
||||||
}
|
|
||||||
|
|
||||||
// Utils
|
|
||||||
isValidDuration(duration) {
|
|
||||||
if (duration && !isNaN(duration) && duration !== Number.POSITIVE_INFINITY && duration !== Number.NEGATIVE_INFINITY) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
getBufferedRanges() {
|
|
||||||
if (!this.player) return []
|
|
||||||
const ranges = []
|
|
||||||
const seekable = this.player.buffered || []
|
|
||||||
|
|
||||||
let offset = 0
|
|
||||||
|
|
||||||
for (let i = 0, length = seekable.length; i < length; i++) {
|
|
||||||
let start = seekable.start(i)
|
|
||||||
let end = seekable.end(i)
|
|
||||||
if (!this.isValidDuration(start)) {
|
|
||||||
start = 0
|
|
||||||
}
|
|
||||||
if (!this.isValidDuration(end)) {
|
|
||||||
end = 0
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
ranges.push({
|
|
||||||
start: start + offset,
|
|
||||||
end: end + offset
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return ranges
|
|
||||||
}
|
|
||||||
|
|
||||||
getLastBufferedTime() {
|
|
||||||
var bufferedRanges = this.getBufferedRanges()
|
|
||||||
if (!bufferedRanges.length) return 0
|
|
||||||
|
|
||||||
var buff = bufferedRanges.find((buff) => buff.start < this.player.currentTime && buff.end > this.player.currentTime)
|
|
||||||
if (buff) return buff.end
|
|
||||||
|
|
||||||
var last = bufferedRanges[bufferedRanges.length - 1]
|
|
||||||
return last.end
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
import LocalAudioPlayer from './LocalAudioPlayer'
|
import LocalAudioPlayer from './LocalAudioPlayer'
|
||||||
import LocalVideoPlayer from './LocalVideoPlayer'
|
|
||||||
import CastPlayer from './CastPlayer'
|
import CastPlayer from './CastPlayer'
|
||||||
import AudioTrack from './AudioTrack'
|
import AudioTrack from './AudioTrack'
|
||||||
import VideoTrack from './VideoTrack'
|
|
||||||
|
|
||||||
export default class PlayerHandler {
|
export default class PlayerHandler {
|
||||||
constructor(ctx) {
|
constructor(ctx) {
|
||||||
@@ -16,8 +14,6 @@ export default class PlayerHandler {
|
|||||||
this.player = null
|
this.player = null
|
||||||
this.playerState = 'IDLE'
|
this.playerState = 'IDLE'
|
||||||
this.isHlsTranscode = false
|
this.isHlsTranscode = false
|
||||||
this.isVideo = false
|
|
||||||
this.isMusic = false
|
|
||||||
this.currentSessionId = null
|
this.currentSessionId = null
|
||||||
this.startTimeOverride = undefined // Used for starting playback at a specific time (i.e. clicking bookmark from library item page)
|
this.startTimeOverride = undefined // Used for starting playback at a specific time (i.e. clicking bookmark from library item page)
|
||||||
this.startTime = 0
|
this.startTime = 0
|
||||||
@@ -65,12 +61,10 @@ export default class PlayerHandler {
|
|||||||
|
|
||||||
load(libraryItem, episodeId, playWhenReady, playbackRate, startTimeOverride = undefined) {
|
load(libraryItem, episodeId, playWhenReady, playbackRate, startTimeOverride = undefined) {
|
||||||
this.libraryItem = libraryItem
|
this.libraryItem = libraryItem
|
||||||
this.isVideo = libraryItem.mediaType === 'video'
|
|
||||||
this.isMusic = libraryItem.mediaType === 'music'
|
|
||||||
|
|
||||||
this.episodeId = episodeId
|
this.episodeId = episodeId
|
||||||
this.playWhenReady = playWhenReady
|
this.playWhenReady = playWhenReady
|
||||||
this.initialPlaybackRate = this.isMusic ? 1 : playbackRate
|
this.initialPlaybackRate = playbackRate
|
||||||
|
|
||||||
this.startTimeOverride = startTimeOverride == null || isNaN(startTimeOverride) ? undefined : Number(startTimeOverride)
|
this.startTimeOverride = startTimeOverride == null || isNaN(startTimeOverride) ? undefined : Number(startTimeOverride)
|
||||||
|
|
||||||
@@ -97,7 +91,7 @@ export default class PlayerHandler {
|
|||||||
this.playWhenReady = playWhenReady
|
this.playWhenReady = playWhenReady
|
||||||
this.prepare()
|
this.prepare()
|
||||||
}
|
}
|
||||||
} else if (!this.isCasting && !(this.player instanceof LocalAudioPlayer) && !(this.player instanceof LocalVideoPlayer)) {
|
} else if (!this.isCasting && !(this.player instanceof LocalAudioPlayer)) {
|
||||||
console.log('[PlayerHandler] Switching to local player')
|
console.log('[PlayerHandler] Switching to local player')
|
||||||
|
|
||||||
this.stopPlayInterval()
|
this.stopPlayInterval()
|
||||||
@@ -107,11 +101,7 @@ export default class PlayerHandler {
|
|||||||
this.player.destroy()
|
this.player.destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.isVideo) {
|
this.player = new LocalAudioPlayer(this.ctx)
|
||||||
this.player = new LocalVideoPlayer(this.ctx)
|
|
||||||
} else {
|
|
||||||
this.player = new LocalAudioPlayer(this.ctx)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setPlayerListeners()
|
this.setPlayerListeners()
|
||||||
|
|
||||||
@@ -203,7 +193,7 @@ export default class PlayerHandler {
|
|||||||
supportedMimeTypes: this.player.playableMimeTypes,
|
supportedMimeTypes: this.player.playableMimeTypes,
|
||||||
mediaPlayer: this.isCasting ? 'chromecast' : 'html5',
|
mediaPlayer: this.isCasting ? 'chromecast' : 'html5',
|
||||||
forceTranscode,
|
forceTranscode,
|
||||||
forceDirectPlay: this.isCasting || this.isVideo // TODO: add transcode support for chromecast
|
forceDirectPlay: this.isCasting // TODO: add transcode support for chromecast
|
||||||
}
|
}
|
||||||
|
|
||||||
const path = this.episodeId ? `/api/items/${this.libraryItem.id}/play/${this.episodeId}` : `/api/items/${this.libraryItem.id}/play`
|
const path = this.episodeId ? `/api/items/${this.libraryItem.id}/play/${this.episodeId}` : `/api/items/${this.libraryItem.id}/play`
|
||||||
@@ -218,7 +208,6 @@ export default class PlayerHandler {
|
|||||||
if (!this.player) this.switchPlayer() // Must set player first for open sessions
|
if (!this.player) this.switchPlayer() // Must set player first for open sessions
|
||||||
|
|
||||||
this.libraryItem = session.libraryItem
|
this.libraryItem = session.libraryItem
|
||||||
this.isVideo = session.libraryItem.mediaType === 'video'
|
|
||||||
this.playWhenReady = false
|
this.playWhenReady = false
|
||||||
this.initialPlaybackRate = playbackRate
|
this.initialPlaybackRate = playbackRate
|
||||||
this.startTimeOverride = undefined
|
this.startTimeOverride = undefined
|
||||||
@@ -237,28 +226,16 @@ export default class PlayerHandler {
|
|||||||
|
|
||||||
console.log('[PlayerHandler] Preparing Session', session)
|
console.log('[PlayerHandler] Preparing Session', session)
|
||||||
|
|
||||||
if (session.videoTrack) {
|
var audioTracks = session.audioTracks.map((at) => new AudioTrack(at, this.userToken))
|
||||||
var videoTrack = new VideoTrack(session.videoTrack, this.userToken)
|
|
||||||
|
|
||||||
this.ctx.playerLoading = true
|
this.ctx.playerLoading = true
|
||||||
this.isHlsTranscode = true
|
this.isHlsTranscode = true
|
||||||
if (session.playMethod === this.ctx.$constants.PlayMethod.DIRECTPLAY) {
|
if (session.playMethod === this.ctx.$constants.PlayMethod.DIRECTPLAY) {
|
||||||
this.isHlsTranscode = false
|
this.isHlsTranscode = false
|
||||||
}
|
|
||||||
|
|
||||||
this.player.set(this.libraryItem, videoTrack, this.isHlsTranscode, this.startTime, this.playWhenReady)
|
|
||||||
} else {
|
|
||||||
var audioTracks = session.audioTracks.map((at) => new AudioTrack(at, this.userToken))
|
|
||||||
|
|
||||||
this.ctx.playerLoading = true
|
|
||||||
this.isHlsTranscode = true
|
|
||||||
if (session.playMethod === this.ctx.$constants.PlayMethod.DIRECTPLAY) {
|
|
||||||
this.isHlsTranscode = false
|
|
||||||
}
|
|
||||||
|
|
||||||
this.player.set(this.libraryItem, audioTracks, this.isHlsTranscode, this.startTime, this.playWhenReady)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.player.set(this.libraryItem, audioTracks, this.isHlsTranscode, this.startTime, this.playWhenReady)
|
||||||
|
|
||||||
// browser media session api
|
// browser media session api
|
||||||
this.ctx.setMediaSession()
|
this.ctx.setMediaSession()
|
||||||
}
|
}
|
||||||
@@ -333,8 +310,6 @@ export default class PlayerHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sendProgressSync(currentTime) {
|
sendProgressSync(currentTime) {
|
||||||
if (this.isMusic) return
|
|
||||||
|
|
||||||
const diffSinceLastSync = Math.abs(this.lastSyncTime - currentTime)
|
const diffSinceLastSync = Math.abs(this.lastSyncTime - currentTime)
|
||||||
if (diffSinceLastSync < 1) return
|
if (diffSinceLastSync < 1) return
|
||||||
|
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
export default class VideoTrack {
|
|
||||||
constructor(track, userToken) {
|
|
||||||
this.index = track.index || 0
|
|
||||||
this.startOffset = track.startOffset || 0 // Total time of all previous tracks
|
|
||||||
this.duration = track.duration || 0
|
|
||||||
this.title = track.title || ''
|
|
||||||
this.contentUrl = track.contentUrl || null
|
|
||||||
this.mimeType = track.mimeType
|
|
||||||
this.metadata = track.metadata || {}
|
|
||||||
|
|
||||||
this.userToken = userToken
|
|
||||||
}
|
|
||||||
|
|
||||||
get fullContentUrl() {
|
|
||||||
if (!this.contentUrl || this.contentUrl.startsWith('http')) return this.contentUrl
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'development') {
|
|
||||||
return `${process.env.serverUrl}${this.contentUrl}?token=${this.userToken}`
|
|
||||||
}
|
|
||||||
return `${window.location.origin}${this.contentUrl}?token=${this.userToken}`
|
|
||||||
}
|
|
||||||
|
|
||||||
get relativeContentUrl() {
|
|
||||||
if (!this.contentUrl || this.contentUrl.startsWith('http')) return this.contentUrl
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'development') {
|
|
||||||
return `${process.env.serverUrl}${this.contentUrl}?token=${this.userToken}`
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.contentUrl + `?token=${this.userToken}`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -89,10 +89,10 @@ Vue.prototype.$strings = { ...enUsStrings }
|
|||||||
* Get string and substitute
|
* Get string and substitute
|
||||||
*
|
*
|
||||||
* @param {string} key
|
* @param {string} key
|
||||||
* @param {string[]} subs
|
* @param {string[]} [subs=[]]
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
Vue.prototype.$getString = (key, subs) => {
|
Vue.prototype.$getString = (key, subs = []) => {
|
||||||
if (!Vue.prototype.$strings[key]) return ''
|
if (!Vue.prototype.$strings[key]) return ''
|
||||||
if (subs?.length && Array.isArray(subs)) {
|
if (subs?.length && Array.isArray(subs)) {
|
||||||
return supplant(Vue.prototype.$strings[key], subs)
|
return supplant(Vue.prototype.$strings[key], subs)
|
||||||
|
|||||||
@@ -11,14 +11,17 @@ Vue.prototype.$bytesPretty = (bytes, decimals = 2) => {
|
|||||||
if (isNaN(bytes) || bytes == 0) {
|
if (isNaN(bytes) || bytes == 0) {
|
||||||
return '0 Bytes'
|
return '0 Bytes'
|
||||||
}
|
}
|
||||||
const k = 1024
|
const k = 1000
|
||||||
const dm = decimals < 0 ? 0 : decimals
|
const dm = decimals < 0 ? 0 : decimals
|
||||||
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
|
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
|
||||||
const i = Math.floor(Math.log(bytes) / Math.log(k))
|
const i = Math.floor(Math.log(bytes) / Math.log(k))
|
||||||
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
|
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
Vue.prototype.$elapsedPretty = (seconds, useFullNames = false) => {
|
Vue.prototype.$elapsedPretty = (seconds, useFullNames = false, useMilliseconds = false) => {
|
||||||
|
if (useMilliseconds && seconds > 0 && seconds < 1) {
|
||||||
|
return `${Math.floor(seconds * 1000)} ms`
|
||||||
|
}
|
||||||
if (seconds < 60) {
|
if (seconds < 60) {
|
||||||
return `${Math.floor(seconds)} sec${useFullNames ? 'onds' : ''}`
|
return `${Math.floor(seconds)} sec${useFullNames ? 'onds' : ''}`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -711,10 +711,8 @@
|
|||||||
"PlaceholderNewPlaylist": "Ново име на плейлиста",
|
"PlaceholderNewPlaylist": "Ново име на плейлиста",
|
||||||
"PlaceholderSearch": "Търсене...",
|
"PlaceholderSearch": "Търсене...",
|
||||||
"PlaceholderSearchEpisode": "Търсене на Епизоди...",
|
"PlaceholderSearchEpisode": "Търсене на Епизоди...",
|
||||||
"ToastAccountUpdateFailed": "Неуспешно обновяване на акаунта",
|
|
||||||
"ToastAccountUpdateSuccess": "Успешно обновяване на акаунта",
|
"ToastAccountUpdateSuccess": "Успешно обновяване на акаунта",
|
||||||
"ToastAuthorImageRemoveSuccess": "Авторската снимка е премахната",
|
"ToastAuthorImageRemoveSuccess": "Авторската снимка е премахната",
|
||||||
"ToastAuthorUpdateFailed": "Неуспешно обновяване на автора",
|
|
||||||
"ToastAuthorUpdateMerged": "Обновяване на автора сливано",
|
"ToastAuthorUpdateMerged": "Обновяване на автора сливано",
|
||||||
"ToastAuthorUpdateSuccess": "Автора обновен",
|
"ToastAuthorUpdateSuccess": "Автора обновен",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Автор обновен (не е намерена снимка)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Автор обновен (не е намерена снимка)",
|
||||||
@@ -728,17 +726,13 @@
|
|||||||
"ToastBookmarkCreateFailed": "Неуспешно създаване на отметка",
|
"ToastBookmarkCreateFailed": "Неуспешно създаване на отметка",
|
||||||
"ToastBookmarkCreateSuccess": "Отметката е създадена",
|
"ToastBookmarkCreateSuccess": "Отметката е създадена",
|
||||||
"ToastBookmarkRemoveSuccess": "Отметката е премахната",
|
"ToastBookmarkRemoveSuccess": "Отметката е премахната",
|
||||||
"ToastBookmarkUpdateFailed": "Неуспешно обновяване на отметка",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Отметката е обновена",
|
"ToastBookmarkUpdateSuccess": "Отметката е обновена",
|
||||||
"ToastChaptersHaveErrors": "Главите имат грешки",
|
"ToastChaptersHaveErrors": "Главите имат грешки",
|
||||||
"ToastChaptersMustHaveTitles": "Главите трябва да имат заглавия",
|
"ToastChaptersMustHaveTitles": "Главите трябва да имат заглавия",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Елемент(и) премахнати от колекция",
|
"ToastCollectionItemsRemoveSuccess": "Елемент(и) премахнати от колекция",
|
||||||
"ToastCollectionRemoveSuccess": "Колекцията е премахната",
|
"ToastCollectionRemoveSuccess": "Колекцията е премахната",
|
||||||
"ToastCollectionUpdateFailed": "Неуспешно обновяване на колекция",
|
|
||||||
"ToastCollectionUpdateSuccess": "Колекцията е обновена",
|
"ToastCollectionUpdateSuccess": "Колекцията е обновена",
|
||||||
"ToastItemCoverUpdateFailed": "Неуспешно обновяване на корица на елемент",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Корицата на елемента е обновена",
|
"ToastItemCoverUpdateSuccess": "Корицата на елемента е обновена",
|
||||||
"ToastItemDetailsUpdateFailed": "Неуспешно обновяване на детайли на елемент",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Детайлите на елемента са обновени",
|
"ToastItemDetailsUpdateSuccess": "Детайлите на елемента са обновени",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Неуспешно маркиране като завършено",
|
"ToastItemMarkedAsFinishedFailed": "Неуспешно маркиране като завършено",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Елементът е маркиран като завършен",
|
"ToastItemMarkedAsFinishedSuccess": "Елементът е маркиран като завършен",
|
||||||
@@ -750,12 +744,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Библиотеката е изтрита",
|
"ToastLibraryDeleteSuccess": "Библиотеката е изтрита",
|
||||||
"ToastLibraryScanFailedToStart": "Неуспешно стартиране на сканиране",
|
"ToastLibraryScanFailedToStart": "Неуспешно стартиране на сканиране",
|
||||||
"ToastLibraryScanStarted": "Сканирането на библиотеката е стартирано",
|
"ToastLibraryScanStarted": "Сканирането на библиотеката е стартирано",
|
||||||
"ToastLibraryUpdateFailed": "Неуспешно обновяване на библиотека",
|
|
||||||
"ToastLibraryUpdateSuccess": "Библиотеката \"{0}\" е обновена",
|
"ToastLibraryUpdateSuccess": "Библиотеката \"{0}\" е обновена",
|
||||||
"ToastPlaylistCreateFailed": "Неуспешно създаване на плейлист",
|
"ToastPlaylistCreateFailed": "Неуспешно създаване на плейлист",
|
||||||
"ToastPlaylistCreateSuccess": "Плейлистът е създаден",
|
"ToastPlaylistCreateSuccess": "Плейлистът е създаден",
|
||||||
"ToastPlaylistRemoveSuccess": "Плейлистът е премахнат",
|
"ToastPlaylistRemoveSuccess": "Плейлистът е премахнат",
|
||||||
"ToastPlaylistUpdateFailed": "Неуспешно обновяване на плейлист",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Плейлистът е обновен",
|
"ToastPlaylistUpdateSuccess": "Плейлистът е обновен",
|
||||||
"ToastPodcastCreateFailed": "Неуспешно създаване на подкаст",
|
"ToastPodcastCreateFailed": "Неуспешно създаване на подкаст",
|
||||||
"ToastPodcastCreateSuccess": "Подкастът е създаден",
|
"ToastPodcastCreateSuccess": "Подкастът е създаден",
|
||||||
|
|||||||
+204
-20
@@ -8,7 +8,7 @@
|
|||||||
"ButtonAddYourFirstLibrary": "আপনার প্রথম লাইব্রেরি যোগ করুন",
|
"ButtonAddYourFirstLibrary": "আপনার প্রথম লাইব্রেরি যোগ করুন",
|
||||||
"ButtonApply": "প্রয়োগ করুন",
|
"ButtonApply": "প্রয়োগ করুন",
|
||||||
"ButtonApplyChapters": "অধ্যায় প্রয়োগ করুন",
|
"ButtonApplyChapters": "অধ্যায় প্রয়োগ করুন",
|
||||||
"ButtonAuthors": "লেখক",
|
"ButtonAuthors": "লেখকগণ",
|
||||||
"ButtonBack": "পেছনে যান",
|
"ButtonBack": "পেছনে যান",
|
||||||
"ButtonBrowseForFolder": "ফোল্ডারের জন্য ব্রাউজ করুন",
|
"ButtonBrowseForFolder": "ফোল্ডারের জন্য ব্রাউজ করুন",
|
||||||
"ButtonCancel": "বাতিল করুন",
|
"ButtonCancel": "বাতিল করুন",
|
||||||
@@ -56,6 +56,7 @@
|
|||||||
"ButtonOpenManager": "ম্যানেজার খুলুন",
|
"ButtonOpenManager": "ম্যানেজার খুলুন",
|
||||||
"ButtonPause": "বিরতি",
|
"ButtonPause": "বিরতি",
|
||||||
"ButtonPlay": "বাজান",
|
"ButtonPlay": "বাজান",
|
||||||
|
"ButtonPlayAll": "সব চালান",
|
||||||
"ButtonPlaying": "বাজছে",
|
"ButtonPlaying": "বাজছে",
|
||||||
"ButtonPlaylists": "প্লেলিস্ট",
|
"ButtonPlaylists": "প্লেলিস্ট",
|
||||||
"ButtonPrevious": "পূর্ববর্তী",
|
"ButtonPrevious": "পূর্ববর্তী",
|
||||||
@@ -98,6 +99,7 @@
|
|||||||
"ButtonStats": "পরিসংখ্যান",
|
"ButtonStats": "পরিসংখ্যান",
|
||||||
"ButtonSubmit": "জমা দিন",
|
"ButtonSubmit": "জমা দিন",
|
||||||
"ButtonTest": "পরীক্ষা",
|
"ButtonTest": "পরীক্ষা",
|
||||||
|
"ButtonUnlinkOpenId": "ওপেন আইডি লিঙ্কমুক্ত করুন",
|
||||||
"ButtonUpload": "আপলোড",
|
"ButtonUpload": "আপলোড",
|
||||||
"ButtonUploadBackup": "আপলোড ব্যাকআপ",
|
"ButtonUploadBackup": "আপলোড ব্যাকআপ",
|
||||||
"ButtonUploadCover": "কভার আপলোড করুন",
|
"ButtonUploadCover": "কভার আপলোড করুন",
|
||||||
@@ -238,7 +240,7 @@
|
|||||||
"LabelBackupLocation": "ব্যাকআপ অবস্থান",
|
"LabelBackupLocation": "ব্যাকআপ অবস্থান",
|
||||||
"LabelBackupsEnableAutomaticBackups": "স্বয়ংক্রিয় ব্যাকআপ সক্ষম করুন",
|
"LabelBackupsEnableAutomaticBackups": "স্বয়ংক্রিয় ব্যাকআপ সক্ষম করুন",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "ব্যাকআপগুলি /মেটাডাটা/ব্যাকআপে সংরক্ষিত",
|
"LabelBackupsEnableAutomaticBackupsHelp": "ব্যাকআপগুলি /মেটাডাটা/ব্যাকআপে সংরক্ষিত",
|
||||||
"LabelBackupsMaxBackupSize": "সর্বোচ্চ ব্যাকআপ আকার (GB-তে)",
|
"LabelBackupsMaxBackupSize": "সর্বোচ্চ ব্যাকআপ আকার (GB-তে) (অসীমের জন্য 0)",
|
||||||
"LabelBackupsMaxBackupSizeHelp": "ভুল কনফিগারেশনের বিরুদ্ধে সুরক্ষা হিসেবে ব্যাকআপগুলি ব্যর্থ হবে যদি তারা কনফিগার করা আকার অতিক্রম করে।",
|
"LabelBackupsMaxBackupSizeHelp": "ভুল কনফিগারেশনের বিরুদ্ধে সুরক্ষা হিসেবে ব্যাকআপগুলি ব্যর্থ হবে যদি তারা কনফিগার করা আকার অতিক্রম করে।",
|
||||||
"LabelBackupsNumberToKeep": "ব্যাকআপের সংখ্যা রাখুন",
|
"LabelBackupsNumberToKeep": "ব্যাকআপের সংখ্যা রাখুন",
|
||||||
"LabelBackupsNumberToKeepHelp": "এক সময়ে শুধুমাত্র ১ টি ব্যাকআপ সরানো হবে তাই যদি আপনার কাছে ইতিমধ্যে এর চেয়ে বেশি ব্যাকআপ থাকে তাহলে আপনাকে ম্যানুয়ালি সেগুলি সরিয়ে ফেলতে হবে।",
|
"LabelBackupsNumberToKeepHelp": "এক সময়ে শুধুমাত্র ১ টি ব্যাকআপ সরানো হবে তাই যদি আপনার কাছে ইতিমধ্যে এর চেয়ে বেশি ব্যাকআপ থাকে তাহলে আপনাকে ম্যানুয়ালি সেগুলি সরিয়ে ফেলতে হবে।",
|
||||||
@@ -295,7 +297,7 @@
|
|||||||
"LabelEmail": "ইমেইল",
|
"LabelEmail": "ইমেইল",
|
||||||
"LabelEmailSettingsFromAddress": "ঠিকানা থেকে",
|
"LabelEmailSettingsFromAddress": "ঠিকানা থেকে",
|
||||||
"LabelEmailSettingsRejectUnauthorized": "অননুমোদিত সার্টিফিকেট প্রত্যাখ্যান করুন",
|
"LabelEmailSettingsRejectUnauthorized": "অননুমোদিত সার্টিফিকেট প্রত্যাখ্যান করুন",
|
||||||
"LabelEmailSettingsRejectUnauthorizedHelp": "Disabling SSL certificate validation may expose your connection to security risks, such as man-in-the-middle attacks. Only disable this option if you understand the implications and trust the mail server you are connecting to।",
|
"LabelEmailSettingsRejectUnauthorizedHelp": "SSL প্রমাণপত্রের বৈধতা নিষ্ক্রিয় করা আপনার সংযোগকে নিরাপত্তা ঝুঁকিতে ফেলতে পারে, যেমন ম্যান-ইন-দ্য-মিডল আক্রমণ। শুধুমাত্র এই বিকল্পটি নিষ্ক্রিয় করুন যদি আপনি এর প্রভাবগুলি বুঝতে পারেন এবং আপনি যে মেইল সার্ভারের সাথে সংযোগ করছেন তাকে বিশ্বাস করেন।",
|
||||||
"LabelEmailSettingsSecure": "নিরাপদ",
|
"LabelEmailSettingsSecure": "নিরাপদ",
|
||||||
"LabelEmailSettingsSecureHelp": "যদি সত্য হয় সার্ভারের সাথে সংযোগ করার সময় সংযোগটি TLS ব্যবহার করবে। মিথ্যা হলে TLS ব্যবহার করা হবে যদি সার্ভার STARTTLS এক্সটেনশন সমর্থন করে। বেশিরভাগ ক্ষেত্রে এই মানটিকে সত্য হিসাবে সেট করুন যদি আপনি পোর্ট 465-এর সাথে সংযোগ করছেন। পোর্ট 587 বা পোর্টের জন্য 25 এটি মিথ্যা রাখুন। (nodemailer.com/smtp/#authentication থেকে)",
|
"LabelEmailSettingsSecureHelp": "যদি সত্য হয় সার্ভারের সাথে সংযোগ করার সময় সংযোগটি TLS ব্যবহার করবে। মিথ্যা হলে TLS ব্যবহার করা হবে যদি সার্ভার STARTTLS এক্সটেনশন সমর্থন করে। বেশিরভাগ ক্ষেত্রে এই মানটিকে সত্য হিসাবে সেট করুন যদি আপনি পোর্ট 465-এর সাথে সংযোগ করছেন। পোর্ট 587 বা পোর্টের জন্য 25 এটি মিথ্যা রাখুন। (nodemailer.com/smtp/#authentication থেকে)",
|
||||||
"LabelEmailSettingsTestAddress": "পরীক্ষার ঠিকানা",
|
"LabelEmailSettingsTestAddress": "পরীক্ষার ঠিকানা",
|
||||||
@@ -309,12 +311,18 @@
|
|||||||
"LabelEpisodes": "পর্বগুলো",
|
"LabelEpisodes": "পর্বগুলো",
|
||||||
"LabelExample": "উদাহরণ",
|
"LabelExample": "উদাহরণ",
|
||||||
"LabelExpandSeries": "সিরিজ প্রসারিত করুন",
|
"LabelExpandSeries": "সিরিজ প্রসারিত করুন",
|
||||||
|
"LabelExpandSubSeries": "সাব সিরিজ প্রসারিত করুন",
|
||||||
"LabelExplicit": "বিশদ",
|
"LabelExplicit": "বিশদ",
|
||||||
|
"LabelExplicitChecked": "সুস্পষ্ট (পরীক্ষিত)",
|
||||||
|
"LabelExplicitUnchecked": "অস্পষ্ট (অপরিক্ষীত)",
|
||||||
|
"LabelExportOPML": "OPML এক্সপোর্ট করুন",
|
||||||
"LabelFeedURL": "ফিড ইউআরএল",
|
"LabelFeedURL": "ফিড ইউআরএল",
|
||||||
"LabelFetchingMetadata": "মেটাডেটা আনা হচ্ছে",
|
"LabelFetchingMetadata": "মেটাডেটা আনা হচ্ছে",
|
||||||
"LabelFile": "ফাইল",
|
"LabelFile": "ফাইল",
|
||||||
"LabelFileBirthtime": "ফাইল জন্মের সময়",
|
"LabelFileBirthtime": "ফাইল জন্মের সময়",
|
||||||
|
"LabelFileBornDate": "জন্ম {0}",
|
||||||
"LabelFileModified": "ফাইল পরিবর্তিত",
|
"LabelFileModified": "ফাইল পরিবর্তিত",
|
||||||
|
"LabelFileModifiedDate": "পরিবর্তিত {0}",
|
||||||
"LabelFilename": "ফাইলের নাম",
|
"LabelFilename": "ফাইলের নাম",
|
||||||
"LabelFilterByUser": "ব্যবহারকারী দ্বারা ফিল্টারকৃত",
|
"LabelFilterByUser": "ব্যবহারকারী দ্বারা ফিল্টারকৃত",
|
||||||
"LabelFindEpisodes": "পর্বগুলো খুঁজুন",
|
"LabelFindEpisodes": "পর্বগুলো খুঁজুন",
|
||||||
@@ -322,7 +330,8 @@
|
|||||||
"LabelFolder": "ফোল্ডার",
|
"LabelFolder": "ফোল্ডার",
|
||||||
"LabelFolders": "ফোল্ডারগুলো",
|
"LabelFolders": "ফোল্ডারগুলো",
|
||||||
"LabelFontBold": "বোল্ড",
|
"LabelFontBold": "বোল্ড",
|
||||||
"LabelFontFamily": "ফন্ট পরিবার",
|
"LabelFontBoldness": "হরফ বোল্ডনেস",
|
||||||
|
"LabelFontFamily": "হরফ পরিবার",
|
||||||
"LabelFontItalic": "ইটালিক",
|
"LabelFontItalic": "ইটালিক",
|
||||||
"LabelFontScale": "ফন্ট স্কেল",
|
"LabelFontScale": "ফন্ট স্কেল",
|
||||||
"LabelFontStrikethrough": "অবচ্ছেদন রেখা",
|
"LabelFontStrikethrough": "অবচ্ছেদন রেখা",
|
||||||
@@ -332,9 +341,11 @@
|
|||||||
"LabelHardDeleteFile": "জোরপূর্বক ফাইল মুছে ফেলুন",
|
"LabelHardDeleteFile": "জোরপূর্বক ফাইল মুছে ফেলুন",
|
||||||
"LabelHasEbook": "ই-বই আছে",
|
"LabelHasEbook": "ই-বই আছে",
|
||||||
"LabelHasSupplementaryEbook": "পরিপূরক ই-বই আছে",
|
"LabelHasSupplementaryEbook": "পরিপূরক ই-বই আছে",
|
||||||
|
"LabelHideSubtitles": "সাবটাইটেল লুকান",
|
||||||
"LabelHighestPriority": "সর্বোচ্চ অগ্রাধিকার",
|
"LabelHighestPriority": "সর্বোচ্চ অগ্রাধিকার",
|
||||||
"LabelHost": "নিমন্ত্রণকর্তা",
|
"LabelHost": "নিমন্ত্রণকর্তা",
|
||||||
"LabelHour": "ঘন্টা",
|
"LabelHour": "ঘন্টা",
|
||||||
|
"LabelHours": "ঘন্টা",
|
||||||
"LabelIcon": "আইকন",
|
"LabelIcon": "আইকন",
|
||||||
"LabelImageURLFromTheWeb": "ওয়েব থেকে ছবির ইউআরএল",
|
"LabelImageURLFromTheWeb": "ওয়েব থেকে ছবির ইউআরএল",
|
||||||
"LabelInProgress": "প্রগতিতে আছে",
|
"LabelInProgress": "প্রগতিতে আছে",
|
||||||
@@ -351,8 +362,11 @@
|
|||||||
"LabelIntervalEveryHour": "প্রতি ঘন্টা",
|
"LabelIntervalEveryHour": "প্রতি ঘন্টা",
|
||||||
"LabelInvert": "উল্টানো",
|
"LabelInvert": "উল্টানো",
|
||||||
"LabelItem": "আইটেম",
|
"LabelItem": "আইটেম",
|
||||||
|
"LabelJumpBackwardAmount": "পিছন দিকে ঝাঁপের পরিমাণ",
|
||||||
|
"LabelJumpForwardAmount": "সামনের দিকে ঝাঁপের পরিমাণ",
|
||||||
"LabelLanguage": "ভাষা",
|
"LabelLanguage": "ভাষা",
|
||||||
"LabelLanguageDefaultServer": "সার্ভারের ডিফল্ট ভাষা",
|
"LabelLanguageDefaultServer": "সার্ভারের ডিফল্ট ভাষা",
|
||||||
|
"LabelLanguages": "ভাষাসমূহ",
|
||||||
"LabelLastBookAdded": "শেষ বই যোগ করা হয়েছে",
|
"LabelLastBookAdded": "শেষ বই যোগ করা হয়েছে",
|
||||||
"LabelLastBookUpdated": "শেষ বই আপডেট করা হয়েছে",
|
"LabelLastBookUpdated": "শেষ বই আপডেট করা হয়েছে",
|
||||||
"LabelLastSeen": "শেষ দেখা",
|
"LabelLastSeen": "শেষ দেখা",
|
||||||
@@ -364,6 +378,7 @@
|
|||||||
"LabelLess": "কম",
|
"LabelLess": "কম",
|
||||||
"LabelLibrariesAccessibleToUser": "ব্যবহারকারীর কাছে অ্যাক্সেসযোগ্য লাইব্রেরি",
|
"LabelLibrariesAccessibleToUser": "ব্যবহারকারীর কাছে অ্যাক্সেসযোগ্য লাইব্রেরি",
|
||||||
"LabelLibrary": "লাইব্রেরি",
|
"LabelLibrary": "লাইব্রেরি",
|
||||||
|
"LabelLibraryFilterSublistEmpty": "না {0}",
|
||||||
"LabelLibraryItem": "লাইব্রেরি আইটেম",
|
"LabelLibraryItem": "লাইব্রেরি আইটেম",
|
||||||
"LabelLibraryName": "লাইব্রেরির নাম",
|
"LabelLibraryName": "লাইব্রেরির নাম",
|
||||||
"LabelLimit": "সীমা",
|
"LabelLimit": "সীমা",
|
||||||
@@ -383,6 +398,7 @@
|
|||||||
"LabelMetadataOrderOfPrecedenceDescription": "উচ্চ অগ্রাধিকারের মেটাডেটার উৎসগুলো নিম্ন অগ্রাধিকারের মেটাডেটা উৎসগুলোকে ওভাররাইড করবে",
|
"LabelMetadataOrderOfPrecedenceDescription": "উচ্চ অগ্রাধিকারের মেটাডেটার উৎসগুলো নিম্ন অগ্রাধিকারের মেটাডেটা উৎসগুলোকে ওভাররাইড করবে",
|
||||||
"LabelMetadataProvider": "মেটাডেটা প্রদানকারী",
|
"LabelMetadataProvider": "মেটাডেটা প্রদানকারী",
|
||||||
"LabelMinute": "মিনিট",
|
"LabelMinute": "মিনিট",
|
||||||
|
"LabelMinutes": "মিনিটস",
|
||||||
"LabelMissing": "নিখোঁজ",
|
"LabelMissing": "নিখোঁজ",
|
||||||
"LabelMissingEbook": "কোনও ই-বই নেই",
|
"LabelMissingEbook": "কোনও ই-বই নেই",
|
||||||
"LabelMissingSupplementaryEbook": "কোনও সম্পূরক ই-বই নেই",
|
"LabelMissingSupplementaryEbook": "কোনও সম্পূরক ই-বই নেই",
|
||||||
@@ -399,6 +415,7 @@
|
|||||||
"LabelNewestEpisodes": "নতুনতম পর্ব",
|
"LabelNewestEpisodes": "নতুনতম পর্ব",
|
||||||
"LabelNextBackupDate": "পরবর্তী ব্যাকআপ তারিখ",
|
"LabelNextBackupDate": "পরবর্তী ব্যাকআপ তারিখ",
|
||||||
"LabelNextScheduledRun": "পরবর্তী নির্ধারিত দৌড়",
|
"LabelNextScheduledRun": "পরবর্তী নির্ধারিত দৌড়",
|
||||||
|
"LabelNoCustomMetadataProviders": "কোনো কাস্টম মেটাডেটা প্রদানকারী নেই",
|
||||||
"LabelNoEpisodesSelected": "কোন পর্ব নির্বাচন করা হয়নি",
|
"LabelNoEpisodesSelected": "কোন পর্ব নির্বাচন করা হয়নি",
|
||||||
"LabelNotFinished": "সমাপ্ত হয়নি",
|
"LabelNotFinished": "সমাপ্ত হয়নি",
|
||||||
"LabelNotStarted": "শুরু হয়নি",
|
"LabelNotStarted": "শুরু হয়নি",
|
||||||
@@ -421,6 +438,7 @@
|
|||||||
"LabelOverwrite": "পুনঃলিখিত",
|
"LabelOverwrite": "পুনঃলিখিত",
|
||||||
"LabelPassword": "পাসওয়ার্ড",
|
"LabelPassword": "পাসওয়ার্ড",
|
||||||
"LabelPath": "পথ",
|
"LabelPath": "পথ",
|
||||||
|
"LabelPermanent": "স্থায়ী",
|
||||||
"LabelPermissionsAccessAllLibraries": "সমস্ত লাইব্রেরি অ্যাক্সেস করতে পারবে",
|
"LabelPermissionsAccessAllLibraries": "সমস্ত লাইব্রেরি অ্যাক্সেস করতে পারবে",
|
||||||
"LabelPermissionsAccessAllTags": "সমস্ত ট্যাগ অ্যাক্সেস করতে পারবে",
|
"LabelPermissionsAccessAllTags": "সমস্ত ট্যাগ অ্যাক্সেস করতে পারবে",
|
||||||
"LabelPermissionsAccessExplicitContent": "স্পষ্ট বিষয়বস্তু অ্যাক্সেস করতে পারে",
|
"LabelPermissionsAccessExplicitContent": "স্পষ্ট বিষয়বস্তু অ্যাক্সেস করতে পারে",
|
||||||
@@ -431,6 +449,7 @@
|
|||||||
"LabelPersonalYearReview": "আপনার বছরের পর্যালোচনা ({0})",
|
"LabelPersonalYearReview": "আপনার বছরের পর্যালোচনা ({0})",
|
||||||
"LabelPhotoPathURL": "ছবি পথ/ইউআরএল",
|
"LabelPhotoPathURL": "ছবি পথ/ইউআরএল",
|
||||||
"LabelPlayMethod": "প্লে পদ্ধতি",
|
"LabelPlayMethod": "প্লে পদ্ধতি",
|
||||||
|
"LabelPlayerChapterNumberMarker": "{1} এর মধ্যে {0}",
|
||||||
"LabelPlaylists": "প্লেলিস্ট",
|
"LabelPlaylists": "প্লেলিস্ট",
|
||||||
"LabelPodcast": "পডকাস্ট",
|
"LabelPodcast": "পডকাস্ট",
|
||||||
"LabelPodcastSearchRegion": "পডকাস্ট অনুসন্ধান অঞ্চল",
|
"LabelPodcastSearchRegion": "পডকাস্ট অনুসন্ধান অঞ্চল",
|
||||||
@@ -442,15 +461,20 @@
|
|||||||
"LabelPrimaryEbook": "প্রাথমিক ই-বই",
|
"LabelPrimaryEbook": "প্রাথমিক ই-বই",
|
||||||
"LabelProgress": "প্রগতি",
|
"LabelProgress": "প্রগতি",
|
||||||
"LabelProvider": "প্রদানকারী",
|
"LabelProvider": "প্রদানকারী",
|
||||||
|
"LabelProviderAuthorizationValue": "অনুমোদন শিরোনামের মান",
|
||||||
"LabelPubDate": "প্রকাশের তারিখ",
|
"LabelPubDate": "প্রকাশের তারিখ",
|
||||||
"LabelPublishYear": "প্রকাশের বছর",
|
"LabelPublishYear": "প্রকাশের বছর",
|
||||||
|
"LabelPublishedDate": "প্রকাশিত {0}",
|
||||||
"LabelPublisher": "প্রকাশক",
|
"LabelPublisher": "প্রকাশক",
|
||||||
|
"LabelPublishers": "প্রকাশকরা",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "কাস্টম মালিকের ইমেইল",
|
"LabelRSSFeedCustomOwnerEmail": "কাস্টম মালিকের ইমেইল",
|
||||||
"LabelRSSFeedCustomOwnerName": "কাস্টম মালিকের নাম",
|
"LabelRSSFeedCustomOwnerName": "কাস্টম মালিকের নাম",
|
||||||
"LabelRSSFeedOpen": "আরএসএস ফিড খুলুন",
|
"LabelRSSFeedOpen": "আরএসএস ফিড খুলুন",
|
||||||
"LabelRSSFeedPreventIndexing": "সূচীকরণ প্রতিরোধ করুন",
|
"LabelRSSFeedPreventIndexing": "সূচীকরণ প্রতিরোধ করুন",
|
||||||
"LabelRSSFeedSlug": "আরএসএস ফিড স্লাগ",
|
"LabelRSSFeedSlug": "আরএসএস ফিড স্লাগ",
|
||||||
"LabelRSSFeedURL": "আরএসএস ফিড ইউআরএল",
|
"LabelRSSFeedURL": "আরএসএস ফিড ইউআরএল",
|
||||||
|
"LabelRandomly": "এলোমেলোভাবে",
|
||||||
|
"LabelReAddSeriesToContinueListening": "শোনা চালিয়ে যেতে সিরিজ পুনরায় যোগ করুন",
|
||||||
"LabelRead": "পড়ুন",
|
"LabelRead": "পড়ুন",
|
||||||
"LabelReadAgain": "আবার পড়ুন",
|
"LabelReadAgain": "আবার পড়ুন",
|
||||||
"LabelReadEbookWithoutProgress": "প্রগতি না রেখে ই-বই পড়ুন",
|
"LabelReadEbookWithoutProgress": "প্রগতি না রেখে ই-বই পড়ুন",
|
||||||
@@ -466,6 +490,7 @@
|
|||||||
"LabelSearchTitle": "অনুসন্ধান শিরোনাম",
|
"LabelSearchTitle": "অনুসন্ধান শিরোনাম",
|
||||||
"LabelSearchTitleOrASIN": "অনুসন্ধান শিরোনাম বা ASIN",
|
"LabelSearchTitleOrASIN": "অনুসন্ধান শিরোনাম বা ASIN",
|
||||||
"LabelSeason": "সেশন",
|
"LabelSeason": "সেশন",
|
||||||
|
"LabelSelectAll": "সব নির্বাচন করুন",
|
||||||
"LabelSelectAllEpisodes": "সমস্ত পর্ব নির্বাচন করুন",
|
"LabelSelectAllEpisodes": "সমস্ত পর্ব নির্বাচন করুন",
|
||||||
"LabelSelectEpisodesShowing": "দেখানো {0}টি পর্ব নির্বাচন করুন",
|
"LabelSelectEpisodesShowing": "দেখানো {0}টি পর্ব নির্বাচন করুন",
|
||||||
"LabelSelectUsers": "ব্যবহারকারী নির্বাচন করুন",
|
"LabelSelectUsers": "ব্যবহারকারী নির্বাচন করুন",
|
||||||
@@ -488,7 +513,8 @@
|
|||||||
"LabelSettingsEnableWatcher": "প্রহরী সক্ষম করুন",
|
"LabelSettingsEnableWatcher": "প্রহরী সক্ষম করুন",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "লাইব্রেরির জন্য ফোল্ডার প্রহরী সক্ষম করুন",
|
"LabelSettingsEnableWatcherForLibrary": "লাইব্রেরির জন্য ফোল্ডার প্রহরী সক্ষম করুন",
|
||||||
"LabelSettingsEnableWatcherHelp": "ফাইলের পরিবর্তন শনাক্ত হলে আইটেমগুলির স্বয়ংক্রিয় যোগ/আপডেট সক্ষম করবে। *সার্ভার পুনরায় চালু করতে হবে",
|
"LabelSettingsEnableWatcherHelp": "ফাইলের পরিবর্তন শনাক্ত হলে আইটেমগুলির স্বয়ংক্রিয় যোগ/আপডেট সক্ষম করবে। *সার্ভার পুনরায় চালু করতে হবে",
|
||||||
"LabelSettingsEpubsAllowScriptedContentHelp": "Allow epub files to execute scripts. It is recommended to keep this setting disabled unless you trust the source of the epub files।",
|
"LabelSettingsEpubsAllowScriptedContent": "ইপাবে স্ক্রিপ্ট করা বিষয়বস্তুর অনুমতি দিন",
|
||||||
|
"LabelSettingsEpubsAllowScriptedContentHelp": "ইপাব ফাইলগুলিকে স্ক্রিপ্ট চালানোর অনুমতি দিন। আপনি ইপাব ফাইলগুলির উৎসকে বিশ্বাস না করলে এই সেটিংটি নিষ্ক্রিয় রাখার সুপারিশ করা হলো।",
|
||||||
"LabelSettingsExperimentalFeatures": "পরীক্ষামূলক বৈশিষ্ট্য",
|
"LabelSettingsExperimentalFeatures": "পরীক্ষামূলক বৈশিষ্ট্য",
|
||||||
"LabelSettingsExperimentalFeaturesHelp": "ফিচারের বৈশিষ্ট্য যা আপনার প্রতিক্রিয়া ব্যবহার করতে পারে এবং পরীক্ষায় সহায়তা করতে পারে। গিটহাব আলোচনা খুলতে ক্লিক করুন।",
|
"LabelSettingsExperimentalFeaturesHelp": "ফিচারের বৈশিষ্ট্য যা আপনার প্রতিক্রিয়া ব্যবহার করতে পারে এবং পরীক্ষায় সহায়তা করতে পারে। গিটহাব আলোচনা খুলতে ক্লিক করুন।",
|
||||||
"LabelSettingsFindCovers": "কভার খুঁজুন",
|
"LabelSettingsFindCovers": "কভার খুঁজুন",
|
||||||
@@ -498,7 +524,7 @@
|
|||||||
"LabelSettingsHomePageBookshelfView": "নীড় পেজে বুকশেলফ ভিউ ব্যবহার করুন",
|
"LabelSettingsHomePageBookshelfView": "নীড় পেজে বুকশেলফ ভিউ ব্যবহার করুন",
|
||||||
"LabelSettingsLibraryBookshelfView": "লাইব্রেরি বুকশেলফ ভিউ ব্যবহার করুন",
|
"LabelSettingsLibraryBookshelfView": "লাইব্রেরি বুকশেলফ ভিউ ব্যবহার করুন",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "কন্টিনিউ সিরিজে আগের বইগুলো এড়িয়ে যান",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "কন্টিনিউ সিরিজে আগের বইগুলো এড়িয়ে যান",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "কন্টিনিউ সিরিজের হোম পেজ শেল্ফ প্রথম বইটি দেখায় যেটি সিরিজে শুরু হয়নি যেটিতে অন্তত একটি বই শেষ হয়েছে এবং কোনো বই চলছে না। এই সেটিংটি সক্ষম করা হলে তা শুরু না হওয়া প্রথম বইটির পরিবর্তে সবচেয়ে দূরের সম্পূর্ণ বই থেকে সিরিজ চালিয়ে যাবে।",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "কন্টিনিউ সিরিজের নীড় পেজ শেল্ফ দেখায় যে সিরিজে শুরু হয়নি এমন প্রথম বই যার অন্তত একটি বই শেষ হয়েছে এবং কোনো বই চলছে না। এই সেটিংটি সক্ষম করলে শুরু না হওয়া প্রথম বইটির পরিবর্তে সবচেয়ে দূরের সম্পূর্ণ বই থেকে সিরিজ চলতে থাকবে।",
|
||||||
"LabelSettingsParseSubtitles": "সাবটাইটেল পার্স করুন",
|
"LabelSettingsParseSubtitles": "সাবটাইটেল পার্স করুন",
|
||||||
"LabelSettingsParseSubtitlesHelp": "অডিওবুক ফোল্ডারের নাম থেকে সাবটাইটেল বের করুন৷<br>সাবটাইটেল অবশ্যই \" - \"<br>অর্থাৎ \"বুকের শিরোনাম - এখানে একটি সাবটাইটেল\" এর সাবটাইটেল আছে \"এখানে একটি সাবটাইটেল\"",
|
"LabelSettingsParseSubtitlesHelp": "অডিওবুক ফোল্ডারের নাম থেকে সাবটাইটেল বের করুন৷<br>সাবটাইটেল অবশ্যই \" - \"<br>অর্থাৎ \"বুকের শিরোনাম - এখানে একটি সাবটাইটেল\" এর সাবটাইটেল আছে \"এখানে একটি সাবটাইটেল\"",
|
||||||
"LabelSettingsPreferMatchedMetadata": "মিলিত মেটাডেটা পছন্দ করুন",
|
"LabelSettingsPreferMatchedMetadata": "মিলিত মেটাডেটা পছন্দ করুন",
|
||||||
@@ -514,7 +540,12 @@
|
|||||||
"LabelSettingsStoreMetadataWithItem": "আইটেমের সাথে মেটাডেটা সংরক্ষণ করুন",
|
"LabelSettingsStoreMetadataWithItem": "আইটেমের সাথে মেটাডেটা সংরক্ষণ করুন",
|
||||||
"LabelSettingsStoreMetadataWithItemHelp": "ডিফল্টরূপে মেটাডেটা ফাইলগুলি /মেটাডাটা/আইটেমগুলি -এ সংরক্ষণ করা হয়, এই সেটিংটি সক্ষম করলে মেটাডেটা ফাইলগুলি আপনার লাইব্রেরি আইটেম ফোল্ডারে সংরক্ষণ করা হবে",
|
"LabelSettingsStoreMetadataWithItemHelp": "ডিফল্টরূপে মেটাডেটা ফাইলগুলি /মেটাডাটা/আইটেমগুলি -এ সংরক্ষণ করা হয়, এই সেটিংটি সক্ষম করলে মেটাডেটা ফাইলগুলি আপনার লাইব্রেরি আইটেম ফোল্ডারে সংরক্ষণ করা হবে",
|
||||||
"LabelSettingsTimeFormat": "সময় বিন্যাস",
|
"LabelSettingsTimeFormat": "সময় বিন্যাস",
|
||||||
|
"LabelShare": "শেয়ার করুন",
|
||||||
|
"LabelShareOpen": "শেয়ার খোলা",
|
||||||
|
"LabelShareURL": "শেয়ার ইউআরএল",
|
||||||
"LabelShowAll": "সব দেখান",
|
"LabelShowAll": "সব দেখান",
|
||||||
|
"LabelShowSeconds": "সেকেন্ড দেখান",
|
||||||
|
"LabelShowSubtitles": "সহ-শিরোনাম দেখান",
|
||||||
"LabelSize": "আকার",
|
"LabelSize": "আকার",
|
||||||
"LabelSleepTimer": "স্লিপ টাইমার",
|
"LabelSleepTimer": "স্লিপ টাইমার",
|
||||||
"LabelSlug": "স্লাগ",
|
"LabelSlug": "স্লাগ",
|
||||||
@@ -552,6 +583,10 @@
|
|||||||
"LabelThemeDark": "অন্ধকার",
|
"LabelThemeDark": "অন্ধকার",
|
||||||
"LabelThemeLight": "আলো",
|
"LabelThemeLight": "আলো",
|
||||||
"LabelTimeBase": "সময় বেস",
|
"LabelTimeBase": "সময় বেস",
|
||||||
|
"LabelTimeDurationXHours": "{0} ঘণ্টা",
|
||||||
|
"LabelTimeDurationXMinutes": "{0} মিনিট",
|
||||||
|
"LabelTimeDurationXSeconds": "{0} সেকেন্ড",
|
||||||
|
"LabelTimeInMinutes": "মিনিটে সময়",
|
||||||
"LabelTimeListened": "সময় শোনা হয়েছে",
|
"LabelTimeListened": "সময় শোনা হয়েছে",
|
||||||
"LabelTimeListenedToday": "আজ শোনার সময়",
|
"LabelTimeListenedToday": "আজ শোনার সময়",
|
||||||
"LabelTimeRemaining": "{0}টি অবশিষ্ট",
|
"LabelTimeRemaining": "{0}টি অবশিষ্ট",
|
||||||
@@ -575,6 +610,7 @@
|
|||||||
"LabelUnabridged": "অসংলগ্ন",
|
"LabelUnabridged": "অসংলগ্ন",
|
||||||
"LabelUndo": "পূর্বাবস্থা",
|
"LabelUndo": "পূর্বাবস্থা",
|
||||||
"LabelUnknown": "অজানা",
|
"LabelUnknown": "অজানা",
|
||||||
|
"LabelUnknownPublishDate": "প্রকাশের তারিখ অজানা",
|
||||||
"LabelUpdateCover": "কভার আপডেট করুন",
|
"LabelUpdateCover": "কভার আপডেট করুন",
|
||||||
"LabelUpdateCoverHelp": "একটি মিল থাকা অবস্থায় নির্বাচিত বইগুলির বিদ্যমান কভারগুলি ওভাররাইট করার অনুমতি দিন",
|
"LabelUpdateCoverHelp": "একটি মিল থাকা অবস্থায় নির্বাচিত বইগুলির বিদ্যমান কভারগুলি ওভাররাইট করার অনুমতি দিন",
|
||||||
"LabelUpdateDetails": "বিশদ আপডেট করুন",
|
"LabelUpdateDetails": "বিশদ আপডেট করুন",
|
||||||
@@ -591,9 +627,12 @@
|
|||||||
"LabelVersion": "সংস্করণ",
|
"LabelVersion": "সংস্করণ",
|
||||||
"LabelViewBookmarks": "বুকমার্ক দেখুন",
|
"LabelViewBookmarks": "বুকমার্ক দেখুন",
|
||||||
"LabelViewChapters": "অধ্যায় দেখুন",
|
"LabelViewChapters": "অধ্যায় দেখুন",
|
||||||
|
"LabelViewPlayerSettings": "প্লেয়ার সেটিংস দেখুন",
|
||||||
"LabelViewQueue": "প্লেয়ার সারি দেখুন",
|
"LabelViewQueue": "প্লেয়ার সারি দেখুন",
|
||||||
"LabelVolume": "ভলিউম",
|
"LabelVolume": "ভলিউম",
|
||||||
"LabelWeekdaysToRun": "চলতে হবে সপ্তাহের দিন",
|
"LabelWeekdaysToRun": "চলতে হবে সপ্তাহের দিন",
|
||||||
|
"LabelXBooks": "{0}টি বই",
|
||||||
|
"LabelXItems": "{0}টি আইটেম",
|
||||||
"LabelYearReviewHide": "পর্যালোচনার বছর লুকান",
|
"LabelYearReviewHide": "পর্যালোচনার বছর লুকান",
|
||||||
"LabelYearReviewShow": "পর্যালোচনার বছর দেখুন",
|
"LabelYearReviewShow": "পর্যালোচনার বছর দেখুন",
|
||||||
"LabelYourAudiobookDuration": "আপনার অডিওবুকের সময়কাল",
|
"LabelYourAudiobookDuration": "আপনার অডিওবুকের সময়কাল",
|
||||||
@@ -601,12 +640,16 @@
|
|||||||
"LabelYourPlaylists": "আপনার প্লেলিস্ট",
|
"LabelYourPlaylists": "আপনার প্লেলিস্ট",
|
||||||
"LabelYourProgress": "আপনার অগ্রগতি",
|
"LabelYourProgress": "আপনার অগ্রগতি",
|
||||||
"MessageAddToPlayerQueue": "প্লেয়ার সারিতে যোগ করুন",
|
"MessageAddToPlayerQueue": "প্লেয়ার সারিতে যোগ করুন",
|
||||||
"MessageAppriseDescription": "এই বৈশিষ্ট্যটি ব্যবহার করার জন্য আপনাকে <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">এর একটি উদাহরণ থাকতে হবে </a> চলমান বা একটি এপিআই যা সেই একই অনুরোধগুলি পরিচালনা করবে৷ <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> চালানোর একটি উদাহরণ বা একটি এপিআই পরিচালনা করতে হবে যে একই অনুরোধ পরিচালনা করবে। <br />অ্যাপ্রাইজ এপিআই ইউআরএলটি বিজ্ঞপ্তি পাঠানোর জন্য সম্পূর্ণ ইউআরএল পথ হওয়া উচিত, যেমন, যদি আপনার API ইনস্ট্যান্স <code>http://192.168.1.1:8337</code> এ পরিবেশিত হয় তাহলে আপনি <code> রাখবেন >http://192.168.1.1:8337/notify</code>।",
|
||||||
"MessageBackupsDescription": "ব্যাকআপের মধ্যে রয়েছে ব্যবহারকারী, ব্যবহারকারীর অগ্রগতি, লাইব্রেরি আইটেমের বিবরণ, সার্ভার সেটিংস এবং <code>/metadata/items</code> & <code>/metadata/authors</code>-এ সংরক্ষিত ছবি। ব্যাকআপগুলি <strong> আপনার লাইব্রেরি ফোল্ডারে সঞ্চিত কোনো ফাইল >অন্তর্ভুক্ত করবেন না</strong>।",
|
"MessageBackupsDescription": "ব্যাকআপের মধ্যে রয়েছে ব্যবহারকারী, ব্যবহারকারীর অগ্রগতি, লাইব্রেরি আইটেমের বিবরণ, সার্ভার সেটিংস এবং <code>/metadata/items</code> & <code>/metadata/authors</code>-এ সংরক্ষিত ছবি। ব্যাকআপগুলি <strong> আপনার লাইব্রেরি ফোল্ডারে সঞ্চিত কোনো ফাইল >অন্তর্ভুক্ত করবেন না</strong>।",
|
||||||
|
"MessageBackupsLocationEditNote": "দ্রষ্টব্য: ব্যাকআপ অবস্থান আপডেট করলে বিদ্যমান ব্যাকআপগুলি সরানো বা সংশোধন করা হবে না",
|
||||||
|
"MessageBackupsLocationNoEditNote": "দ্রষ্টব্য: ব্যাকআপ অবস্থান একটি পরিবেশ পরিবর্তনশীল মাধ্যমে স্থির করা হয়েছে এবং এখানে পরিবর্তন করা যাবে না।",
|
||||||
|
"MessageBackupsLocationPathEmpty": "ব্যাকআপ অবস্থানের পথ খালি থাকতে পারবে না",
|
||||||
"MessageBatchQuickMatchDescription": "কুইক ম্যাচ নির্বাচিত আইটেমগুলির জন্য অনুপস্থিত কভার এবং মেটাডেটা যোগ করার চেষ্টা করবে। বিদ্যমান কভার এবং/অথবা মেটাডেটা ওভাররাইট করার জন্য দ্রুত ম্যাচকে অনুমতি দিতে নীচের বিকল্পগুলি সক্ষম করুন।",
|
"MessageBatchQuickMatchDescription": "কুইক ম্যাচ নির্বাচিত আইটেমগুলির জন্য অনুপস্থিত কভার এবং মেটাডেটা যোগ করার চেষ্টা করবে। বিদ্যমান কভার এবং/অথবা মেটাডেটা ওভাররাইট করার জন্য দ্রুত ম্যাচকে অনুমতি দিতে নীচের বিকল্পগুলি সক্ষম করুন।",
|
||||||
"MessageBookshelfNoCollections": "আপনি এখনও কোনো সংগ্রহ করেননি",
|
"MessageBookshelfNoCollections": "আপনি এখনও কোনো সংগ্রহ করেননি",
|
||||||
"MessageBookshelfNoRSSFeeds": "কোনও RSS ফিড খোলা নেই",
|
"MessageBookshelfNoRSSFeeds": "কোনও RSS ফিড খোলা নেই",
|
||||||
"MessageBookshelfNoResultsForFilter": "ফিল্টার \"{0}: {1}\" এর জন্য কোন ফলাফল নেই",
|
"MessageBookshelfNoResultsForFilter": "ফিল্টার \"{0}: {1}\" এর জন্য কোন ফলাফল নেই",
|
||||||
|
"MessageBookshelfNoResultsForQuery": "প্রশ্নের জন্য কোন ফলাফল নেই",
|
||||||
"MessageBookshelfNoSeries": "আপনার কোনো সিরিজ নেই",
|
"MessageBookshelfNoSeries": "আপনার কোনো সিরিজ নেই",
|
||||||
"MessageChapterEndIsAfter": "অধ্যায়ের সমাপ্তি আপনার অডিওবুকের শেষে",
|
"MessageChapterEndIsAfter": "অধ্যায়ের সমাপ্তি আপনার অডিওবুকের শেষে",
|
||||||
"MessageChapterErrorFirstNotZero": "প্রথম অধ্যায় 0 এ শুরু হতে হবে",
|
"MessageChapterErrorFirstNotZero": "প্রথম অধ্যায় 0 এ শুরু হতে হবে",
|
||||||
@@ -616,16 +659,24 @@
|
|||||||
"MessageCheckingCron": "ক্রন পরীক্ষা করা হচ্ছে...",
|
"MessageCheckingCron": "ক্রন পরীক্ষা করা হচ্ছে...",
|
||||||
"MessageConfirmCloseFeed": "আপনি কি নিশ্চিত যে আপনি এই ফিডটি বন্ধ করতে চান?",
|
"MessageConfirmCloseFeed": "আপনি কি নিশ্চিত যে আপনি এই ফিডটি বন্ধ করতে চান?",
|
||||||
"MessageConfirmDeleteBackup": "আপনি কি নিশ্চিত যে আপনি {0} এর ব্যাকআপ মুছে ফেলতে চান?",
|
"MessageConfirmDeleteBackup": "আপনি কি নিশ্চিত যে আপনি {0} এর ব্যাকআপ মুছে ফেলতে চান?",
|
||||||
|
"MessageConfirmDeleteDevice": "আপনি কি নিশ্চিতভাবে ই-রিডার ডিভাইস \"{0}\" মুছতে চান?",
|
||||||
"MessageConfirmDeleteFile": "এটি আপনার ফাইল সিস্টেম থেকে ফাইলটি মুছে দেবে। আপনি কি নিশ্চিত?",
|
"MessageConfirmDeleteFile": "এটি আপনার ফাইল সিস্টেম থেকে ফাইলটি মুছে দেবে। আপনি কি নিশ্চিত?",
|
||||||
"MessageConfirmDeleteLibrary": "আপনি কি নিশ্চিত যে আপনি স্থায়ীভাবে লাইব্রেরি \"{0}\" মুছে ফেলতে চান?",
|
"MessageConfirmDeleteLibrary": "আপনি কি নিশ্চিত যে আপনি স্থায়ীভাবে লাইব্রেরি \"{0}\" মুছে ফেলতে চান?",
|
||||||
"MessageConfirmDeleteLibraryItem": "এটি ডাটাবেস এবং আপনার ফাইল সিস্টেম থেকে লাইব্রেরি আইটেমটি মুছে ফেলবে। আপনি কি নিশ্চিত?",
|
"MessageConfirmDeleteLibraryItem": "এটি ডাটাবেস এবং আপনার ফাইল সিস্টেম থেকে লাইব্রেরি আইটেমটি মুছে ফেলবে। আপনি কি নিশ্চিত?",
|
||||||
"MessageConfirmDeleteLibraryItems": "এটি ডাটাবেস এবং আপনার ফাইল সিস্টেম থেকে {0}টি লাইব্রেরি আইটেম মুছে ফেলবে। আপনি কি নিশ্চিত?",
|
"MessageConfirmDeleteLibraryItems": "এটি ডাটাবেস এবং আপনার ফাইল সিস্টেম থেকে {0}টি লাইব্রেরি আইটেম মুছে ফেলবে। আপনি কি নিশ্চিত?",
|
||||||
|
"MessageConfirmDeleteMetadataProvider": "আপনি কি নিশ্চিতভাবে কাস্টম মেটাডেটা প্রদানকারী \"{0}\" মুছতে চান?",
|
||||||
|
"MessageConfirmDeleteNotification": "আপনি কি নিশ্চিতভাবে এই বিজ্ঞপ্তিটি মুছতে চান?",
|
||||||
"MessageConfirmDeleteSession": "আপনি কি নিশ্চিত আপনি এই অধিবেশন মুছে দিতে চান?",
|
"MessageConfirmDeleteSession": "আপনি কি নিশ্চিত আপনি এই অধিবেশন মুছে দিতে চান?",
|
||||||
"MessageConfirmForceReScan": "আপনি কি নিশ্চিত যে আপনি জোর করে পুনরায় স্ক্যান করতে চান?",
|
"MessageConfirmForceReScan": "আপনি কি নিশ্চিত যে আপনি জোর করে পুনরায় স্ক্যান করতে চান?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "আপনি কি নিশ্চিত যে আপনি সমস্ত পর্ব সমাপ্ত হিসাবে চিহ্নিত করতে চান?",
|
"MessageConfirmMarkAllEpisodesFinished": "আপনি কি নিশ্চিত যে আপনি সমস্ত পর্ব সমাপ্ত হিসাবে চিহ্নিত করতে চান?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "আপনি কি নিশ্চিত যে আপনি সমস্ত পর্বকে শেষ হয়নি বলে চিহ্নিত করতে চান?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "আপনি কি নিশ্চিত যে আপনি সমস্ত পর্বকে শেষ হয়নি বলে চিহ্নিত করতে চান?",
|
||||||
|
"MessageConfirmMarkItemFinished": "আপনি কি \"{0}\" কে সমাপ্ত হিসাবে চিহ্নিত করার বিষয়ে নিশ্চিত?",
|
||||||
|
"MessageConfirmMarkItemNotFinished": "আপনি কি \"{0}\" শেষ হয়নি বলে চিহ্নিত করার বিষয়ে নিশ্চিত?",
|
||||||
"MessageConfirmMarkSeriesFinished": "আপনি কি নিশ্চিত যে আপনি এই সিরিজের সমস্ত বইকে সমাপ্ত হিসাবে চিহ্নিত করতে চান?",
|
"MessageConfirmMarkSeriesFinished": "আপনি কি নিশ্চিত যে আপনি এই সিরিজের সমস্ত বইকে সমাপ্ত হিসাবে চিহ্নিত করতে চান?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "আপনি কি নিশ্চিত যে আপনি এই সিরিজের সমস্ত বইকে শেষ হয়নি বলে চিহ্নিত করতে চান?",
|
"MessageConfirmMarkSeriesNotFinished": "আপনি কি নিশ্চিত যে আপনি এই সিরিজের সমস্ত বইকে শেষ হয়নি বলে চিহ্নিত করতে চান?",
|
||||||
|
"MessageConfirmNotificationTestTrigger": "পরীক্ষার তথ্য দিয়ে এই বিজ্ঞপ্তিটি ট্রিগার করবেন?",
|
||||||
|
"MessageConfirmPurgeCache": "ক্যাশে পরিষ্কারক <code>/metadata/cache</code>-এ সম্পূর্ণ ডিরেক্টরি মুছে ফেলবে। <br /><br />আপনি কি নিশ্চিত আপনি ক্যাশে ডিরেক্টরি সরাতে চান?",
|
||||||
|
"MessageConfirmPurgeItemsCache": "আইটেম ক্যাশে পরিষ্কারক <code>/metadata/cache/items</code>-এ সম্পূর্ণ ডিরেক্টরি মুছে ফেলবে।<br />আপনি কি নিশ্চিত?",
|
||||||
"MessageConfirmQuickEmbed": "সতর্কতা! দ্রুত এম্বেড আপনার অডিও ফাইলের ব্যাকআপ করবে না। নিশ্চিত করুন যে আপনার অডিও ফাইলগুলির একটি ব্যাকআপ আছে। <br><br>আপনি কি চালিয়ে যেতে চান?",
|
"MessageConfirmQuickEmbed": "সতর্কতা! দ্রুত এম্বেড আপনার অডিও ফাইলের ব্যাকআপ করবে না। নিশ্চিত করুন যে আপনার অডিও ফাইলগুলির একটি ব্যাকআপ আছে। <br><br>আপনি কি চালিয়ে যেতে চান?",
|
||||||
"MessageConfirmReScanLibraryItems": "আপনি কি নিশ্চিত যে আপনি {0}টি আইটেম পুনরায় স্ক্যান করতে চান?",
|
"MessageConfirmReScanLibraryItems": "আপনি কি নিশ্চিত যে আপনি {0}টি আইটেম পুনরায় স্ক্যান করতে চান?",
|
||||||
"MessageConfirmRemoveAllChapters": "আপনি কি নিশ্চিত যে আপনি সমস্ত অধ্যায় সরাতে চান?",
|
"MessageConfirmRemoveAllChapters": "আপনি কি নিশ্চিত যে আপনি সমস্ত অধ্যায় সরাতে চান?",
|
||||||
@@ -642,14 +693,17 @@
|
|||||||
"MessageConfirmRenameTag": "আপনি কি সব আইটেমের জন্য \"{0}\" ট্যাগের নাম পরিবর্তন করে \"{1}\" করার বিষয়ে নিশ্চিত?",
|
"MessageConfirmRenameTag": "আপনি কি সব আইটেমের জন্য \"{0}\" ট্যাগের নাম পরিবর্তন করে \"{1}\" করার বিষয়ে নিশ্চিত?",
|
||||||
"MessageConfirmRenameTagMergeNote": "দ্রষ্টব্য: এই ট্যাগটি আগে থেকেই বিদ্যমান তাই সেগুলিকে একত্র করা হবে।",
|
"MessageConfirmRenameTagMergeNote": "দ্রষ্টব্য: এই ট্যাগটি আগে থেকেই বিদ্যমান তাই সেগুলিকে একত্র করা হবে।",
|
||||||
"MessageConfirmRenameTagWarning": "সতর্কতা! একটি ভিন্ন কেসিং সহ একটি অনুরূপ ট্যাগ ইতিমধ্যেই বিদ্যমান \"{0}\"।",
|
"MessageConfirmRenameTagWarning": "সতর্কতা! একটি ভিন্ন কেসিং সহ একটি অনুরূপ ট্যাগ ইতিমধ্যেই বিদ্যমান \"{0}\"।",
|
||||||
|
"MessageConfirmResetProgress": "আপনি কি আপনার অগ্রগতি রিসেট করার বিষয়ে নিশ্চিত?",
|
||||||
"MessageConfirmSendEbookToDevice": "আপনি কি নিশ্চিত যে আপনি \"{2}\" ডিভাইসে {0} ইবুক \"{1}\" পাঠাতে চান?",
|
"MessageConfirmSendEbookToDevice": "আপনি কি নিশ্চিত যে আপনি \"{2}\" ডিভাইসে {0} ইবুক \"{1}\" পাঠাতে চান?",
|
||||||
|
"MessageConfirmUnlinkOpenId": "আপনি কি এই ব্যবহারকারীকে ওপেনআইডি থেকে লিঙ্কমুক্ত করার বিষয়ে নিশ্চিত?",
|
||||||
"MessageDownloadingEpisode": "ডাউনলোডিং পর্ব",
|
"MessageDownloadingEpisode": "ডাউনলোডিং পর্ব",
|
||||||
"MessageDragFilesIntoTrackOrder": "সঠিক ট্র্যাক অর্ডারে ফাইল টেনে আনুন",
|
"MessageDragFilesIntoTrackOrder": "সঠিক ট্র্যাক অর্ডারে ফাইল টেনে আনুন",
|
||||||
|
"MessageEmbedFailed": "এম্বেড ব্যর্থ হয়েছে!",
|
||||||
"MessageEmbedFinished": "এম্বেড করা শেষ!",
|
"MessageEmbedFinished": "এম্বেড করা শেষ!",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} পর্ব(গুলি) ডাউনলোডের জন্য সারিবদ্ধ",
|
"MessageEpisodesQueuedForDownload": "{0} পর্ব(গুলি) ডাউনলোডের জন্য সারিবদ্ধ",
|
||||||
"MessageEreaderDevices": "To ensure delivery of ebooks, you may need to add the above email address as a valid sender for each device listed below।",
|
"MessageEreaderDevices": "ই-বুক সরবরাহ নিশ্চিত করতে, আপনাকে নীচে তালিকাভুক্ত প্রতিটি ডিভাইসের জন্য একটি বৈধ প্রেরক হিসাবে উপরের ইমেল ঠিকানাটি যুক্ত করতে হতে পারে।",
|
||||||
"MessageFeedURLWillBe": "ফিড URL হবে {0}",
|
"MessageFeedURLWillBe": "ফিড URL হবে {0}",
|
||||||
"MessageFetching": "আনয় হচ্ছে...",
|
"MessageFetching": "আনয় হচ্ছে.।",
|
||||||
"MessageForceReScanDescription": "সকল ফাইল আবার নতুন স্ক্যানের মত স্ক্যান করবে। অডিও ফাইল ID3 ট্যাগ, OPF ফাইল, এবং টেক্সট ফাইলগুলি নতুন হিসাবে স্ক্যান করা হবে।",
|
"MessageForceReScanDescription": "সকল ফাইল আবার নতুন স্ক্যানের মত স্ক্যান করবে। অডিও ফাইল ID3 ট্যাগ, OPF ফাইল, এবং টেক্সট ফাইলগুলি নতুন হিসাবে স্ক্যান করা হবে।",
|
||||||
"MessageImportantNotice": "গুরুত্বপূর্ণ বিজ্ঞপ্তি!",
|
"MessageImportantNotice": "গুরুত্বপূর্ণ বিজ্ঞপ্তি!",
|
||||||
"MessageInsertChapterBelow": "নীচে অধ্যায় ঢোকান",
|
"MessageInsertChapterBelow": "নীচে অধ্যায় ঢোকান",
|
||||||
@@ -657,9 +711,9 @@
|
|||||||
"MessageItemsUpdated": "{0}টি আইটেম আপডেট করা হয়েছে",
|
"MessageItemsUpdated": "{0}টি আইটেম আপডেট করা হয়েছে",
|
||||||
"MessageJoinUsOn": "আমাদের সাথে যোগ দিন",
|
"MessageJoinUsOn": "আমাদের সাথে যোগ দিন",
|
||||||
"MessageListeningSessionsInTheLastYear": "গত বছরে {0}টি শোনার সেশন",
|
"MessageListeningSessionsInTheLastYear": "গত বছরে {0}টি শোনার সেশন",
|
||||||
"MessageLoading": "লোড হচ্ছে...",
|
"MessageLoading": "লোড হচ্ছে.।",
|
||||||
"MessageLoadingFolders": "ফোল্ডার লোড হচ্ছে...",
|
"MessageLoadingFolders": "ফোল্ডার লোড হচ্ছে...",
|
||||||
"MessageLogsDescription": "Logs are stored in <code>/metadata/logs</code> as JSON files. Crash logs are stored in <code>/metadata/logs/crash_logs.txt</code>।",
|
"MessageLogsDescription": "লগগুলি JSON ফাইল হিসাবে <code>/metadata/logs</code>-এ সংরক্ষণ করা হয়। ক্র্যাশ লগগুলি <code>/metadata/logs/crash_logs.txt</code>-এ সংরক্ষণ করা হয়।",
|
||||||
"MessageM4BFailed": "M4B ব্যর্থ!",
|
"MessageM4BFailed": "M4B ব্যর্থ!",
|
||||||
"MessageM4BFinished": "M4B সমাপ্ত!",
|
"MessageM4BFinished": "M4B সমাপ্ত!",
|
||||||
"MessageMapChapterTitles": "টাইমস্ট্যাম্প সামঞ্জস্য না করে আপনার বিদ্যমান অডিওবুক অধ্যায়গুলিতে অধ্যায়ের শিরোনাম ম্যাপ করুন",
|
"MessageMapChapterTitles": "টাইমস্ট্যাম্প সামঞ্জস্য না করে আপনার বিদ্যমান অডিওবুক অধ্যায়গুলিতে অধ্যায়ের শিরোনাম ম্যাপ করুন",
|
||||||
@@ -676,6 +730,7 @@
|
|||||||
"MessageNoCollections": "কোন সংগ্রহ নেই",
|
"MessageNoCollections": "কোন সংগ্রহ নেই",
|
||||||
"MessageNoCoversFound": "কোন কভার পাওয়া যায়নি",
|
"MessageNoCoversFound": "কোন কভার পাওয়া যায়নি",
|
||||||
"MessageNoDescription": "কোন বর্ণনা নেই",
|
"MessageNoDescription": "কোন বর্ণনা নেই",
|
||||||
|
"MessageNoDevices": "কোনো ডিভাইস নেই",
|
||||||
"MessageNoDownloadsInProgress": "বর্তমানে কোনো ডাউনলোড চলছে না",
|
"MessageNoDownloadsInProgress": "বর্তমানে কোনো ডাউনলোড চলছে না",
|
||||||
"MessageNoDownloadsQueued": "কোনও ডাউনলোড সারি নেই",
|
"MessageNoDownloadsQueued": "কোনও ডাউনলোড সারি নেই",
|
||||||
"MessageNoEpisodeMatchesFound": "কোন পর্বের মিল পাওয়া যায়নি",
|
"MessageNoEpisodeMatchesFound": "কোন পর্বের মিল পাওয়া যায়নি",
|
||||||
@@ -698,10 +753,12 @@
|
|||||||
"MessageNoUpdatesWereNecessary": "কোন আপডেটের প্রয়োজন ছিল না",
|
"MessageNoUpdatesWereNecessary": "কোন আপডেটের প্রয়োজন ছিল না",
|
||||||
"MessageNoUserPlaylists": "আপনার কোনো প্লেলিস্ট নেই",
|
"MessageNoUserPlaylists": "আপনার কোনো প্লেলিস্ট নেই",
|
||||||
"MessageNotYetImplemented": "এখনও বাস্তবায়িত হয়নি",
|
"MessageNotYetImplemented": "এখনও বাস্তবায়িত হয়নি",
|
||||||
|
"MessageOpmlPreviewNote": "দ্রষ্টব্য: এটি পার্স করা OPML ফাইলের একটি পূর্বরূপ। প্রকৃত পডকাস্ট শিরোনাম RSS ফিড থেকে নেওয়া হবে।",
|
||||||
"MessageOr": "বা",
|
"MessageOr": "বা",
|
||||||
"MessagePauseChapter": "পজ অধ্যায় প্লেব্যাক",
|
"MessagePauseChapter": "পজ অধ্যায় প্লেব্যাক",
|
||||||
"MessagePlayChapter": "অধ্যায়ের শুরুতে শুনুন",
|
"MessagePlayChapter": "অধ্যায়ের শুরুতে শুনুন",
|
||||||
"MessagePlaylistCreateFromCollection": "সংগ্রহ থেকে প্লেলিস্ট তৈরি করুন",
|
"MessagePlaylistCreateFromCollection": "সংগ্রহ থেকে প্লেলিস্ট তৈরি করুন",
|
||||||
|
"MessagePleaseWait": "অনুগ্রহ করে অপেক্ষা করুন..।",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "পডকাস্টের সাথে মিলের জন্য ব্যবহার করার জন্য কোন RSS ফিড ইউআরএল নেই",
|
"MessagePodcastHasNoRSSFeedForMatching": "পডকাস্টের সাথে মিলের জন্য ব্যবহার করার জন্য কোন RSS ফিড ইউআরএল নেই",
|
||||||
"MessageQuickMatchDescription": "খালি আইটেমের বিশদ বিবরণ এবং '{0}' থেকে প্রথম ম্যাচের ফলাফলের সাথে কভার করুন। সার্ভার সেটিং সক্ষম না থাকলে বিশদ ওভাররাইট করে না।",
|
"MessageQuickMatchDescription": "খালি আইটেমের বিশদ বিবরণ এবং '{0}' থেকে প্রথম ম্যাচের ফলাফলের সাথে কভার করুন। সার্ভার সেটিং সক্ষম না থাকলে বিশদ ওভাররাইট করে না।",
|
||||||
"MessageRemoveChapter": "অধ্যায় সরান",
|
"MessageRemoveChapter": "অধ্যায় সরান",
|
||||||
@@ -716,7 +773,42 @@
|
|||||||
"MessageSelected": "{0}টি নির্বাচিত",
|
"MessageSelected": "{0}টি নির্বাচিত",
|
||||||
"MessageServerCouldNotBeReached": "সার্ভারে পৌঁছানো যায়নি",
|
"MessageServerCouldNotBeReached": "সার্ভারে পৌঁছানো যায়নি",
|
||||||
"MessageSetChaptersFromTracksDescription": "প্রতিটি অডিও ফাইলকে অধ্যায় হিসেবে ব্যবহার করে অধ্যায় সেট করুন এবং অডিও ফাইলের নাম হিসেবে অধ্যায়ের শিরোনাম করুন",
|
"MessageSetChaptersFromTracksDescription": "প্রতিটি অডিও ফাইলকে অধ্যায় হিসেবে ব্যবহার করে অধ্যায় সেট করুন এবং অডিও ফাইলের নাম হিসেবে অধ্যায়ের শিরোনাম করুন",
|
||||||
|
"MessageShareExpirationWillBe": "মেয়াদ শেষ হবে <strong>{0}</strong>",
|
||||||
|
"MessageShareExpiresIn": "মেয়াদ শেষ হবে {0}",
|
||||||
|
"MessageShareURLWillBe": "শেয়ার করা ইউআরএল হবে <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "\"{0}\" এর জন্য {1} এ প্লেব্যাক শুরু করবেন?",
|
"MessageStartPlaybackAtTime": "\"{0}\" এর জন্য {1} এ প্লেব্যাক শুরু করবেন?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "অডিও ফাইল \"{0}\" লেখার যোগ্য নয়",
|
||||||
|
"MessageTaskCanceledByUser": "ব্যবহারকারী দ্বারা টাস্ক বাতিল করা হয়েছে",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "\"{0}\" পর্ব ডাউনলোড করা হচ্ছে",
|
||||||
|
"MessageTaskEmbeddingMetadata": "মেটাডেটা এম্বেড করা হচ্ছে",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "অডিওবুক \"{0}\" এ মেটাডেটা এম্বেড করা হচ্ছে",
|
||||||
|
"MessageTaskEncodingM4b": "এনকোডিং M4B",
|
||||||
|
"MessageTaskEncodingM4bDescription": "একটি একক m4b ফাইলে অডিওবুক \"{0}\" এনকোড করা হচ্ছে",
|
||||||
|
"MessageTaskFailed": "ব্যর্থ হয়েছে",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "অডিও ফাইল \"{0}\" ব্যাকআপ করতে ব্যর্থ হয়েছে",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "ক্যাশে ডিরেক্টরি তৈরি করতে ব্যর্থ হয়েছে",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "\"{0}\" ফাইলে মেটাডেটা এম্বেড করতে ব্যর্থ হয়েছে",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "অডিও ফাইল মার্জ করতে ব্যর্থ হয়েছে",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "m4b ফাইল সরাতে ব্যর্থ হয়েছে",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "মেটাডেটা ফাইল লিখতে ব্যর্থ হয়েছে",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "লাইব্রেরি \"{0}\"-এ বই মিলানো হচ্ছে",
|
||||||
|
"MessageTaskNoFilesToScan": "স্ক্যান করার জন্য কোন ফাইল নেই",
|
||||||
|
"MessageTaskOpmlImport": "OPML আমদানি",
|
||||||
|
"MessageTaskOpmlImportDescription": "{0} RSS ফিড থেকে পডকাস্ট তৈরি করা হচ্ছে",
|
||||||
|
"MessageTaskOpmlImportFeed": "OPML ফিড আমদানি",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "RSS ফিড \"{0}\" আমদানি করা হচ্ছে",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "পডকাস্ট ফিড পেতে ব্যর্থ হয়েছে",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "পডকাস্ট তৈরি করা হচ্ছে \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastExists": "পডকাস্ট আগে থেকেই পাথে বিদ্যমান",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "পডকাস্ট তৈরি করতে ব্যর্থ",
|
||||||
|
"MessageTaskOpmlImportFinished": "{0}টি পডকাস্ট যোগ করা হয়েছে",
|
||||||
|
"MessageTaskScanItemsAdded": "{0}টি করা হয়েছে",
|
||||||
|
"MessageTaskScanItemsMissing": "{0}টি অনুপস্থিত",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} টি আপডেট করা হয়েছে",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "কোন পরিবর্তন প্রয়োজন নেই",
|
||||||
|
"MessageTaskScanningFileChanges": "\"{0}\" এ ফাইলের পরিবর্তন স্ক্যান করা হচ্ছে",
|
||||||
|
"MessageTaskScanningLibrary": "\"{0}\" লাইব্রেরি স্ক্যান করা হচ্ছে",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "টার্গেট ডিরেক্টরি লেখার যোগ্য নয়",
|
||||||
"MessageThinking": "চিন্তা করছি...",
|
"MessageThinking": "চিন্তা করছি...",
|
||||||
"MessageUploaderItemFailed": "আপলোড করতে ব্যর্থ",
|
"MessageUploaderItemFailed": "আপলোড করতে ব্যর্থ",
|
||||||
"MessageUploaderItemSuccess": "সফলভাবে আপলোড হয়েছে!",
|
"MessageUploaderItemSuccess": "সফলভাবে আপলোড হয়েছে!",
|
||||||
@@ -739,69 +831,161 @@
|
|||||||
"PlaceholderNewPlaylist": "নতুন প্লেলিস্টের নাম",
|
"PlaceholderNewPlaylist": "নতুন প্লেলিস্টের নাম",
|
||||||
"PlaceholderSearch": "অনুসন্ধান..",
|
"PlaceholderSearch": "অনুসন্ধান..",
|
||||||
"PlaceholderSearchEpisode": "অনুসন্ধান পর্ব..",
|
"PlaceholderSearchEpisode": "অনুসন্ধান পর্ব..",
|
||||||
"ToastAccountUpdateFailed": "অ্যাকাউন্ট আপডেট করতে ব্যর্থ",
|
"StatsAuthorsAdded": "লেখক যোগ করা হয়েছে",
|
||||||
|
"StatsBooksAdded": "বই যোগ করা হয়েছে",
|
||||||
|
"StatsBooksAdditional": "কিছু সংযোজনের মধ্যে রয়েছে…",
|
||||||
|
"StatsBooksFinished": "বই সমাপ্ত",
|
||||||
|
"StatsBooksFinishedThisYear": "এ বছর শেষ হওয়া কিছু বই …",
|
||||||
|
"StatsBooksListenedTo": "বই শোনা হয়েছে",
|
||||||
|
"StatsCollectionGrewTo": "আপনার বইয়ের সংগ্রহ বেড়েছে…",
|
||||||
|
"StatsSessions": "অধিবেশনসমূহ",
|
||||||
|
"StatsSpentListening": "শুনে কাটিয়েছেন",
|
||||||
|
"StatsTopAuthor": "শীর্ষস্থানীয় লেখক",
|
||||||
|
"StatsTopAuthors": "শীর্ষস্থানীয় লেখকগণ",
|
||||||
|
"StatsTopGenre": "শীর্ষ ঘরানা",
|
||||||
|
"StatsTopGenres": "শীর্ষ ঘরানাগুলো",
|
||||||
|
"StatsTopMonth": "সেরা মাস",
|
||||||
|
"StatsTopNarrator": "শীর্ষ কথক",
|
||||||
|
"StatsTopNarrators": "শীর্ষ কথকগণ",
|
||||||
|
"StatsTotalDuration": "মোট সময়কাল…",
|
||||||
|
"StatsYearInReview": "বাৎসরিক পর্যালোচনা",
|
||||||
"ToastAccountUpdateSuccess": "অ্যাকাউন্ট আপডেট করা হয়েছে",
|
"ToastAccountUpdateSuccess": "অ্যাকাউন্ট আপডেট করা হয়েছে",
|
||||||
|
"ToastAppriseUrlRequired": "একটি Apprise ইউআরএল লিখতে হবে",
|
||||||
"ToastAuthorImageRemoveSuccess": "লেখকের ছবি সরানো হয়েছে",
|
"ToastAuthorImageRemoveSuccess": "লেখকের ছবি সরানো হয়েছে",
|
||||||
"ToastAuthorUpdateFailed": "লেখক আপডেট করতে ব্যর্থ",
|
"ToastAuthorNotFound": "লেখক \"{0}\" খুঁজে পাওয়া যায়নি",
|
||||||
|
"ToastAuthorRemoveSuccess": "লেখক সরানো হয়েছে",
|
||||||
|
"ToastAuthorSearchNotFound": "লেখক পাওয়া যায়নি",
|
||||||
"ToastAuthorUpdateMerged": "লেখক একত্রিত হয়েছে",
|
"ToastAuthorUpdateMerged": "লেখক একত্রিত হয়েছে",
|
||||||
"ToastAuthorUpdateSuccess": "লেখক আপডেট করেছেন",
|
"ToastAuthorUpdateSuccess": "লেখক আপডেট করেছেন",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "লেখক আপডেট করেছেন (কোন ছবি পাওয়া যায়নি)",
|
"ToastAuthorUpdateSuccessNoImageFound": "লেখক আপডেট করেছেন (কোন ছবি পাওয়া যায়নি)",
|
||||||
|
"ToastBackupAppliedSuccess": "ব্যাকআপ প্রয়োগ করা হয়েছে",
|
||||||
"ToastBackupCreateFailed": "ব্যাকআপ তৈরি করতে ব্যর্থ",
|
"ToastBackupCreateFailed": "ব্যাকআপ তৈরি করতে ব্যর্থ",
|
||||||
"ToastBackupCreateSuccess": "ব্যাকআপ তৈরি করা হয়েছে",
|
"ToastBackupCreateSuccess": "ব্যাকআপ তৈরি করা হয়েছে",
|
||||||
"ToastBackupDeleteFailed": "ব্যাকআপ মুছে ফেলতে ব্যর্থ",
|
"ToastBackupDeleteFailed": "ব্যাকআপ মুছে ফেলতে ব্যর্থ",
|
||||||
"ToastBackupDeleteSuccess": "ব্যাকআপ মুছে ফেলা হয়েছে",
|
"ToastBackupDeleteSuccess": "ব্যাকআপ মুছে ফেলা হয়েছে",
|
||||||
|
"ToastBackupInvalidMaxKeep": "রাখার জন্য অকার্যকর ব্যাকআপের সংখ্যা",
|
||||||
|
"ToastBackupInvalidMaxSize": "অকার্যকর সর্বোচ্চ ব্যাকআপ আকার",
|
||||||
"ToastBackupRestoreFailed": "ব্যাকআপ পুনরুদ্ধার করতে ব্যর্থ",
|
"ToastBackupRestoreFailed": "ব্যাকআপ পুনরুদ্ধার করতে ব্যর্থ",
|
||||||
"ToastBackupUploadFailed": "ব্যাকআপ আপলোড করতে ব্যর্থ",
|
"ToastBackupUploadFailed": "ব্যাকআপ আপলোড করতে ব্যর্থ",
|
||||||
"ToastBackupUploadSuccess": "ব্যাকআপ আপলোড হয়েছে",
|
"ToastBackupUploadSuccess": "ব্যাকআপ আপলোড হয়েছে",
|
||||||
|
"ToastBatchDeleteFailed": "ব্যাচ মুছে ফেলতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastBatchDeleteSuccess": "ব্যাচ মুছে ফেলা সফল হয়েছে",
|
||||||
"ToastBatchUpdateFailed": "ব্যাচ আপডেট ব্যর্থ হয়েছে",
|
"ToastBatchUpdateFailed": "ব্যাচ আপডেট ব্যর্থ হয়েছে",
|
||||||
"ToastBatchUpdateSuccess": "ব্যাচ আপডেট সাফল্য",
|
"ToastBatchUpdateSuccess": "ব্যাচ আপডেট সাফল্য",
|
||||||
"ToastBookmarkCreateFailed": "বুকমার্ক তৈরি করতে ব্যর্থ",
|
"ToastBookmarkCreateFailed": "বুকমার্ক তৈরি করতে ব্যর্থ",
|
||||||
"ToastBookmarkCreateSuccess": "বুকমার্ক যোগ করা হয়েছে",
|
"ToastBookmarkCreateSuccess": "বুকমার্ক যোগ করা হয়েছে",
|
||||||
"ToastBookmarkRemoveSuccess": "বুকমার্ক সরানো হয়েছে",
|
"ToastBookmarkRemoveSuccess": "বুকমার্ক সরানো হয়েছে",
|
||||||
"ToastBookmarkUpdateFailed": "বুকমার্ক আপডেট করতে ব্যর্থ",
|
|
||||||
"ToastBookmarkUpdateSuccess": "বুকমার্ক আপডেট করা হয়েছে",
|
"ToastBookmarkUpdateSuccess": "বুকমার্ক আপডেট করা হয়েছে",
|
||||||
|
"ToastCachePurgeFailed": "ক্যাশে পরিষ্কার করতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastCachePurgeSuccess": "ক্যাশে সফলভাবে পরিষ্কার করা হয়েছে",
|
||||||
"ToastChaptersHaveErrors": "অধ্যায়ে ত্রুটি আছে",
|
"ToastChaptersHaveErrors": "অধ্যায়ে ত্রুটি আছে",
|
||||||
"ToastChaptersMustHaveTitles": "অধ্যায়ের শিরোনাম থাকতে হবে",
|
"ToastChaptersMustHaveTitles": "অধ্যায়ের শিরোনাম থাকতে হবে",
|
||||||
|
"ToastChaptersRemoved": "অধ্যায়গুলো মুছে ফেলা হয়েছে",
|
||||||
|
"ToastCollectionItemsAddFailed": "আইটেম(গুলি) সংগ্রহে যোগ করা ব্যর্থ হয়েছে",
|
||||||
|
"ToastCollectionItemsAddSuccess": "আইটেম(গুলি) সংগ্রহে যোগ করা সফল হয়েছে",
|
||||||
"ToastCollectionItemsRemoveSuccess": "আইটেম(গুলি) সংগ্রহ থেকে সরানো হয়েছে",
|
"ToastCollectionItemsRemoveSuccess": "আইটেম(গুলি) সংগ্রহ থেকে সরানো হয়েছে",
|
||||||
"ToastCollectionRemoveSuccess": "সংগ্রহ সরানো হয়েছে",
|
"ToastCollectionRemoveSuccess": "সংগ্রহ সরানো হয়েছে",
|
||||||
"ToastCollectionUpdateFailed": "সংগ্রহ আপডেট করতে ব্যর্থ",
|
|
||||||
"ToastCollectionUpdateSuccess": "সংগ্রহ আপডেট করা হয়েছে",
|
"ToastCollectionUpdateSuccess": "সংগ্রহ আপডেট করা হয়েছে",
|
||||||
"ToastItemCoverUpdateFailed": "আইটেম কভার আপডেট করতে ব্যর্থ হয়েছে",
|
"ToastCoverUpdateFailed": "কভার আপডেট ব্যর্থ হয়েছে",
|
||||||
|
"ToastDeleteFileFailed": "ফাইল মুছে ফেলতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastDeleteFileSuccess": "ফাইল মুছে ফেলা হয়েছে",
|
||||||
|
"ToastDeviceAddFailed": "ডিভাইস যোগ করতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastDeviceNameAlreadyExists": "এই নামের ইরিডার ডিভাইস ইতিমধ্যেই বিদ্যমান",
|
||||||
|
"ToastDeviceTestEmailFailed": "পরীক্ষামূলক ইমেল পাঠাতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastDeviceTestEmailSuccess": "পরীক্ষামূলক ইমেল পাঠানো হয়েছে",
|
||||||
|
"ToastEmailSettingsUpdateSuccess": "ইমেল সেটিংস আপডেট করা হয়েছে",
|
||||||
|
"ToastEncodeCancelFailed": "এনকোড বাতিল করতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastEncodeCancelSucces": "এনকোড বাতিল করা হয়েছে",
|
||||||
|
"ToastEpisodeDownloadQueueClearFailed": "সারি সাফ করতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastEpisodeDownloadQueueClearSuccess": "পর্ব ডাউনলোড সারি পরিষ্কার করা হয়েছে",
|
||||||
|
"ToastErrorCannotShare": "এই ডিভাইসে স্থানীয়ভাবে শেয়ার করা যাবে না",
|
||||||
|
"ToastFailedToLoadData": "ডেটা লোড করা যায়নি",
|
||||||
|
"ToastFailedToShare": "শেয়ার করতে ব্যর্থ",
|
||||||
|
"ToastInvalidImageUrl": "অকার্যকর ছবির ইউআরএল",
|
||||||
|
"ToastInvalidUrl": "অকার্যকর ইউআরএল",
|
||||||
"ToastItemCoverUpdateSuccess": "আইটেম কভার আপডেট করা হয়েছে",
|
"ToastItemCoverUpdateSuccess": "আইটেম কভার আপডেট করা হয়েছে",
|
||||||
"ToastItemDetailsUpdateFailed": "আইটেমের বিবরণ আপডেট করতে ব্যর্থ",
|
"ToastItemDeletedFailed": "আইটেম মুছে ফেলতে ব্যর্থ",
|
||||||
|
"ToastItemDeletedSuccess": "মুছে ফেলা আইটেম",
|
||||||
"ToastItemDetailsUpdateSuccess": "আইটেমের বিবরণ আপডেট করা হয়েছে",
|
"ToastItemDetailsUpdateSuccess": "আইটেমের বিবরণ আপডেট করা হয়েছে",
|
||||||
"ToastItemMarkedAsFinishedFailed": "সমাপ্ত হিসাবে চিহ্নিত করতে ব্যর্থ",
|
"ToastItemMarkedAsFinishedFailed": "সমাপ্ত হিসাবে চিহ্নিত করতে ব্যর্থ",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "আইটেম সমাপ্ত হিসাবে চিহ্নিত",
|
"ToastItemMarkedAsFinishedSuccess": "আইটেম সমাপ্ত হিসাবে চিহ্নিত",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "সমাপ্ত হয়নি হিসাবে চিহ্নিত করতে ব্যর্থ",
|
"ToastItemMarkedAsNotFinishedFailed": "সমাপ্ত হয়নি হিসাবে চিহ্নিত করতে ব্যর্থ",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "আইটেম সমাপ্ত হয়নি বলে চিহ্নিত",
|
"ToastItemMarkedAsNotFinishedSuccess": "আইটেম সমাপ্ত হয়নি বলে চিহ্নিত",
|
||||||
|
"ToastItemUpdateSuccess": "আইটেম আপডেট করা হয়েছে",
|
||||||
"ToastLibraryCreateFailed": "লাইব্রেরি তৈরি করতে ব্যর্থ",
|
"ToastLibraryCreateFailed": "লাইব্রেরি তৈরি করতে ব্যর্থ",
|
||||||
"ToastLibraryCreateSuccess": "লাইব্রেরি \"{0}\" তৈরি করা হয়েছে",
|
"ToastLibraryCreateSuccess": "লাইব্রেরি \"{0}\" তৈরি করা হয়েছে",
|
||||||
"ToastLibraryDeleteFailed": "লাইব্রেরি মুছে ফেলতে ব্যর্থ",
|
"ToastLibraryDeleteFailed": "লাইব্রেরি মুছে ফেলতে ব্যর্থ",
|
||||||
"ToastLibraryDeleteSuccess": "লাইব্রেরি মুছে ফেলা হয়েছে",
|
"ToastLibraryDeleteSuccess": "লাইব্রেরি মুছে ফেলা হয়েছে",
|
||||||
"ToastLibraryScanFailedToStart": "স্ক্যান শুরু করতে ব্যর্থ",
|
"ToastLibraryScanFailedToStart": "স্ক্যান শুরু করতে ব্যর্থ",
|
||||||
"ToastLibraryScanStarted": "লাইব্রেরি স্ক্যান শুরু হয়েছে",
|
"ToastLibraryScanStarted": "লাইব্রেরি স্ক্যান শুরু হয়েছে",
|
||||||
"ToastLibraryUpdateFailed": "লাইব্রেরি আপডেট করতে ব্যর্থ",
|
|
||||||
"ToastLibraryUpdateSuccess": "লাইব্রেরি \"{0}\" আপডেট করা হয়েছে",
|
"ToastLibraryUpdateSuccess": "লাইব্রেরি \"{0}\" আপডেট করা হয়েছে",
|
||||||
|
"ToastNameEmailRequired": "নাম এবং ইমেইল আবশ্যক",
|
||||||
|
"ToastNameRequired": "নাম আবশ্যক",
|
||||||
|
"ToastNewUserCreatedFailed": "অ্যাকাউন্ট তৈরি করতে ব্যর্থ: \"{0}\"",
|
||||||
|
"ToastNewUserCreatedSuccess": "নতুন একাউন্ট তৈরি হয়েছে",
|
||||||
|
"ToastNewUserLibraryError": "অন্তত একটি লাইব্রেরি নির্বাচন করতে হবে",
|
||||||
|
"ToastNewUserPasswordError": "অন্তত একটি পাসওয়ার্ড থাকতে হবে, শুধুমাত্র রুট ব্যবহারকারীর একটি খালি পাসওয়ার্ড থাকতে পারে",
|
||||||
|
"ToastNewUserTagError": "অন্তত একটি ট্যাগ নির্বাচন করতে হবে",
|
||||||
|
"ToastNewUserUsernameError": "একটি ব্যবহারকারীর নাম লিখুন",
|
||||||
|
"ToastNoUpdatesNecessary": "কোন আপডেটের প্রয়োজন নেই",
|
||||||
|
"ToastNotificationCreateFailed": "বিজ্ঞপ্তি তৈরি করতে ব্যর্থ",
|
||||||
|
"ToastNotificationDeleteFailed": "বিজ্ঞপ্তি মুছে ফেলতে ব্যর্থ",
|
||||||
|
"ToastNotificationFailedMaximum": "সর্বাধিক ব্যর্থ প্রচেষ্টা >= 0 হতে হবে",
|
||||||
|
"ToastNotificationQueueMaximum": "সর্বাধিক বিজ্ঞপ্তি সারি >= 0 হতে হবে",
|
||||||
|
"ToastNotificationSettingsUpdateSuccess": "বিজ্ঞপ্তি সেটিংস আপডেট করা হয়েছে",
|
||||||
|
"ToastNotificationTestTriggerFailed": "পরীক্ষামূলক বিজ্ঞপ্তি ট্রিগার করতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastNotificationTestTriggerSuccess": "পরীক্ষামুলক বিজ্ঞপ্তি ট্রিগার হয়েছে",
|
||||||
|
"ToastNotificationUpdateSuccess": "বিজ্ঞপ্তি আপডেট হয়েছে",
|
||||||
"ToastPlaylistCreateFailed": "প্লেলিস্ট তৈরি করতে ব্যর্থ",
|
"ToastPlaylistCreateFailed": "প্লেলিস্ট তৈরি করতে ব্যর্থ",
|
||||||
"ToastPlaylistCreateSuccess": "প্লেলিস্ট তৈরি করা হয়েছে",
|
"ToastPlaylistCreateSuccess": "প্লেলিস্ট তৈরি করা হয়েছে",
|
||||||
"ToastPlaylistRemoveSuccess": "প্লেলিস্ট সরানো হয়েছে",
|
"ToastPlaylistRemoveSuccess": "প্লেলিস্ট সরানো হয়েছে",
|
||||||
"ToastPlaylistUpdateFailed": "প্লেলিস্ট আপডেট করতে ব্যর্থ",
|
|
||||||
"ToastPlaylistUpdateSuccess": "প্লেলিস্ট আপডেট করা হয়েছে",
|
"ToastPlaylistUpdateSuccess": "প্লেলিস্ট আপডেট করা হয়েছে",
|
||||||
"ToastPodcastCreateFailed": "পডকাস্ট তৈরি করতে ব্যর্থ",
|
"ToastPodcastCreateFailed": "পডকাস্ট তৈরি করতে ব্যর্থ",
|
||||||
"ToastPodcastCreateSuccess": "পডকাস্ট সফলভাবে তৈরি করা হয়েছে",
|
"ToastPodcastCreateSuccess": "পডকাস্ট সফলভাবে তৈরি করা হয়েছে",
|
||||||
|
"ToastPodcastGetFeedFailed": "পডকাস্ট ফিড পেতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastPodcastNoEpisodesInFeed": "আরএসএস ফিডে কোনো পর্ব পাওয়া যায়নি",
|
||||||
|
"ToastPodcastNoRssFeed": "পডকাস্টের কোন আরএসএস ফিড নেই",
|
||||||
|
"ToastProviderCreatedFailed": "প্রদানকারী যোগ করতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastProviderCreatedSuccess": "নতুন প্রদানকারী যোগ করা হয়েছে",
|
||||||
|
"ToastProviderNameAndUrlRequired": "নাম এবং ইউআরএল আবশ্যক",
|
||||||
|
"ToastProviderRemoveSuccess": "প্রদানকারী সরানো হয়েছে",
|
||||||
"ToastRSSFeedCloseFailed": "RSS ফিড বন্ধ করতে ব্যর্থ",
|
"ToastRSSFeedCloseFailed": "RSS ফিড বন্ধ করতে ব্যর্থ",
|
||||||
"ToastRSSFeedCloseSuccess": "RSS ফিড বন্ধ",
|
"ToastRSSFeedCloseSuccess": "RSS ফিড বন্ধ",
|
||||||
|
"ToastRemoveFailed": "মুছে ফেলতে ব্যর্থ হয়েছে",
|
||||||
"ToastRemoveItemFromCollectionFailed": "সংগ্রহ থেকে আইটেম সরাতে ব্যর্থ",
|
"ToastRemoveItemFromCollectionFailed": "সংগ্রহ থেকে আইটেম সরাতে ব্যর্থ",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "সংগ্রহ থেকে আইটেম সরানো হয়েছে",
|
"ToastRemoveItemFromCollectionSuccess": "সংগ্রহ থেকে আইটেম সরানো হয়েছে",
|
||||||
|
"ToastRemoveItemsWithIssuesFailed": "সমস্যাযুক্ত লাইব্রেরি আইটেমগুলি সরাতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastRemoveItemsWithIssuesSuccess": "সমস্যাযুক্ত লাইব্রেরি আইটেম সরানো হয়েছে",
|
||||||
|
"ToastRenameFailed": "পুনঃনামকরণ ব্যর্থ হয়েছে",
|
||||||
|
"ToastRescanFailed": "{0} এর জন্য পুনরায় স্ক্যান করা ব্যর্থ হয়েছে",
|
||||||
|
"ToastRescanRemoved": "পুনরায় স্ক্যান সম্পূর্ণ,আইটেম সরানো হয়েছে",
|
||||||
|
"ToastRescanUpToDate": "পুনরায় স্ক্যান সম্পূর্ণ, আইটেম সাম্প্রতিক ছিল",
|
||||||
|
"ToastRescanUpdated": "পুনরায় স্ক্যান সম্পূর্ণ, আইটেম আপডেট করা হয়েছে",
|
||||||
|
"ToastScanFailed": "লাইব্রেরি আইটেম স্ক্যান করতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastSelectAtLeastOneUser": "অন্তত একজন ব্যবহারকারী নির্বাচন করুন",
|
||||||
"ToastSendEbookToDeviceFailed": "ডিভাইসে ইবুক পাঠাতে ব্যর্থ",
|
"ToastSendEbookToDeviceFailed": "ডিভাইসে ইবুক পাঠাতে ব্যর্থ",
|
||||||
"ToastSendEbookToDeviceSuccess": "ইবুক \"{0}\" ডিভাইসে পাঠানো হয়েছে",
|
"ToastSendEbookToDeviceSuccess": "ইবুক \"{0}\" ডিভাইসে পাঠানো হয়েছে",
|
||||||
"ToastSeriesUpdateFailed": "সিরিজ আপডেট ব্যর্থ হয়েছে",
|
"ToastSeriesUpdateFailed": "সিরিজ আপডেট ব্যর্থ হয়েছে",
|
||||||
"ToastSeriesUpdateSuccess": "সিরিজ আপডেট সাফল্য",
|
"ToastSeriesUpdateSuccess": "সিরিজ আপডেট সাফল্য",
|
||||||
|
"ToastServerSettingsUpdateSuccess": "সার্ভার সেটিংস আপডেট করা হয়েছে",
|
||||||
|
"ToastSessionCloseFailed": "অধিবেশন বন্ধ করতে ব্যর্থ হয়েছে",
|
||||||
"ToastSessionDeleteFailed": "সেশন মুছে ফেলতে ব্যর্থ",
|
"ToastSessionDeleteFailed": "সেশন মুছে ফেলতে ব্যর্থ",
|
||||||
"ToastSessionDeleteSuccess": "সেশন মুছে ফেলা হয়েছে",
|
"ToastSessionDeleteSuccess": "সেশন মুছে ফেলা হয়েছে",
|
||||||
|
"ToastSlugMustChange": "স্লাগে অবৈধ অক্ষর রয়েছে",
|
||||||
|
"ToastSlugRequired": "স্লাগ আবশ্যক",
|
||||||
"ToastSocketConnected": "সকেট সংযুক্ত",
|
"ToastSocketConnected": "সকেট সংযুক্ত",
|
||||||
"ToastSocketDisconnected": "সকেট সংযোগ বিচ্ছিন্ন",
|
"ToastSocketDisconnected": "সকেট সংযোগ বিচ্ছিন্ন",
|
||||||
"ToastSocketFailedToConnect": "সকেট সংযোগ করতে ব্যর্থ হয়েছে",
|
"ToastSocketFailedToConnect": "সকেট সংযোগ করতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastSortingPrefixesEmptyError": "কমপক্ষে ১ টি সাজানোর উপসর্গ থাকতে হবে",
|
||||||
|
"ToastSortingPrefixesUpdateSuccess": "বাছাই করা উপসর্গ আপডেট করা হয়েছে ({0}টি আইটেম)",
|
||||||
|
"ToastTitleRequired": "শিরোনাম আবশ্যক",
|
||||||
|
"ToastUnknownError": "অজানা ত্রুটি",
|
||||||
|
"ToastUnlinkOpenIdFailed": "OpenID থেকে ব্যবহারকারীকে আনলিঙ্ক করতে ব্যর্থ হয়েছে",
|
||||||
|
"ToastUnlinkOpenIdSuccess": "OpenID থেকে ব্যবহারকারীকে লিঙ্কমুক্ত করা হয়েছে",
|
||||||
"ToastUserDeleteFailed": "ব্যবহারকারী মুছতে ব্যর্থ",
|
"ToastUserDeleteFailed": "ব্যবহারকারী মুছতে ব্যর্থ",
|
||||||
"ToastUserDeleteSuccess": "ব্যবহারকারী মুছে ফেলা হয়েছে"
|
"ToastUserDeleteSuccess": "ব্যবহারকারী মুছে ফেলা হয়েছে",
|
||||||
|
"ToastUserPasswordChangeSuccess": "পাসওয়ার্ড সফলভাবে পরিবর্তন করা হয়েছে",
|
||||||
|
"ToastUserPasswordMismatch": "পাসওয়ার্ড মিলছে না",
|
||||||
|
"ToastUserPasswordMustChange": "নতুন পাসওয়ার্ড পুরানো পাসওয়ার্ডের সাথে মিলতে পারবে না",
|
||||||
|
"ToastUserRootRequireName": "একটি রুট ব্যবহারকারীর নাম লিখতে হবে"
|
||||||
}
|
}
|
||||||
|
|||||||
+102
-16
@@ -28,6 +28,7 @@
|
|||||||
"ButtonEdit": "Upravit",
|
"ButtonEdit": "Upravit",
|
||||||
"ButtonEditChapters": "Upravit kapitoly",
|
"ButtonEditChapters": "Upravit kapitoly",
|
||||||
"ButtonEditPodcast": "Upravit podcast",
|
"ButtonEditPodcast": "Upravit podcast",
|
||||||
|
"ButtonEnable": "Povolit",
|
||||||
"ButtonForceReScan": "Vynutit opětovné prohledání",
|
"ButtonForceReScan": "Vynutit opětovné prohledání",
|
||||||
"ButtonFullPath": "Úplná cesta",
|
"ButtonFullPath": "Úplná cesta",
|
||||||
"ButtonHide": "Skrýt",
|
"ButtonHide": "Skrýt",
|
||||||
@@ -44,10 +45,15 @@
|
|||||||
"ButtonMatchAllAuthors": "Spárovat všechny autory",
|
"ButtonMatchAllAuthors": "Spárovat všechny autory",
|
||||||
"ButtonMatchBooks": "Spárovat Knihy",
|
"ButtonMatchBooks": "Spárovat Knihy",
|
||||||
"ButtonNevermind": "Nevadí",
|
"ButtonNevermind": "Nevadí",
|
||||||
|
"ButtonNext": "Další",
|
||||||
"ButtonNextChapter": "Další Kapitola",
|
"ButtonNextChapter": "Další Kapitola",
|
||||||
|
"ButtonNextItemInQueue": "Žádná další položka ve frontě",
|
||||||
|
"ButtonOk": "Ok",
|
||||||
"ButtonOpenFeed": "Otevřít kanál",
|
"ButtonOpenFeed": "Otevřít kanál",
|
||||||
"ButtonOpenManager": "Otevřít správce",
|
"ButtonOpenManager": "Otevřít správce",
|
||||||
|
"ButtonPause": "Pozastavit",
|
||||||
"ButtonPlay": "Přehrát",
|
"ButtonPlay": "Přehrát",
|
||||||
|
"ButtonPlayAll": "Přehrát vše",
|
||||||
"ButtonPlaying": "Hraje",
|
"ButtonPlaying": "Hraje",
|
||||||
"ButtonPlaylists": "Seznamy skladeb",
|
"ButtonPlaylists": "Seznamy skladeb",
|
||||||
"ButtonPrevious": "Předchozí",
|
"ButtonPrevious": "Předchozí",
|
||||||
@@ -88,6 +94,8 @@
|
|||||||
"ButtonStartMetadataEmbed": "Spustit vkládání metadat",
|
"ButtonStartMetadataEmbed": "Spustit vkládání metadat",
|
||||||
"ButtonStats": "Statistiky",
|
"ButtonStats": "Statistiky",
|
||||||
"ButtonSubmit": "Odeslat",
|
"ButtonSubmit": "Odeslat",
|
||||||
|
"ButtonTest": "Test",
|
||||||
|
"ButtonUnlinkOpenId": "Odpojit OpenID",
|
||||||
"ButtonUpload": "Nahrát",
|
"ButtonUpload": "Nahrát",
|
||||||
"ButtonUploadBackup": "Nahrát zálohu",
|
"ButtonUploadBackup": "Nahrát zálohu",
|
||||||
"ButtonUploadCover": "Nahrát obálku",
|
"ButtonUploadCover": "Nahrát obálku",
|
||||||
@@ -100,10 +108,12 @@
|
|||||||
"ErrorUploadFetchMetadataNoResults": "Nepodařilo se načíst metadata - zkuste aktualizovat název a/nebo autora",
|
"ErrorUploadFetchMetadataNoResults": "Nepodařilo se načíst metadata - zkuste aktualizovat název a/nebo autora",
|
||||||
"ErrorUploadLacksTitle": "Musí mít titul",
|
"ErrorUploadLacksTitle": "Musí mít titul",
|
||||||
"HeaderAccount": "Účet",
|
"HeaderAccount": "Účet",
|
||||||
|
"HeaderAddCustomMetadataProvider": "Přidat vlastního poskytovatele metadat",
|
||||||
"HeaderAdvanced": "Pokročilé",
|
"HeaderAdvanced": "Pokročilé",
|
||||||
"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",
|
||||||
|
"HeaderAuthentication": "Autentizace",
|
||||||
"HeaderBackups": "Zálohy",
|
"HeaderBackups": "Zálohy",
|
||||||
"HeaderChangePassword": "Změnit heslo",
|
"HeaderChangePassword": "Změnit heslo",
|
||||||
"HeaderChapters": "Kapitoly",
|
"HeaderChapters": "Kapitoly",
|
||||||
@@ -144,10 +154,13 @@
|
|||||||
"HeaderMetadataToEmbed": "Metadata k vložení",
|
"HeaderMetadataToEmbed": "Metadata k vložení",
|
||||||
"HeaderNewAccount": "Nový účet",
|
"HeaderNewAccount": "Nový účet",
|
||||||
"HeaderNewLibrary": "Nová knihovna",
|
"HeaderNewLibrary": "Nová knihovna",
|
||||||
|
"HeaderNotificationCreate": "Vytvořit notifikaci",
|
||||||
|
"HeaderNotificationUpdate": "Aktualizovat notifikaci",
|
||||||
"HeaderNotifications": "Oznámení",
|
"HeaderNotifications": "Oznámení",
|
||||||
"HeaderOpenIDConnectAuthentication": "Ověřování pomocí OpenID Connect",
|
"HeaderOpenIDConnectAuthentication": "Ověřování pomocí OpenID Connect",
|
||||||
"HeaderOpenRSSFeed": "Otevřít RSS kanál",
|
"HeaderOpenRSSFeed": "Otevřít RSS kanál",
|
||||||
"HeaderOtherFiles": "Ostatní soubory",
|
"HeaderOtherFiles": "Ostatní soubory",
|
||||||
|
"HeaderPasswordAuthentication": "Autentizace heslem",
|
||||||
"HeaderPermissions": "Oprávnění",
|
"HeaderPermissions": "Oprávnění",
|
||||||
"HeaderPlayerQueue": "Fronta přehrávače",
|
"HeaderPlayerQueue": "Fronta přehrávače",
|
||||||
"HeaderPlayerSettings": "Nastavení přehrávače",
|
"HeaderPlayerSettings": "Nastavení přehrávače",
|
||||||
@@ -200,6 +213,7 @@
|
|||||||
"LabelAddToPlaylist": "Přidat do seznamu přehrávání",
|
"LabelAddToPlaylist": "Přidat do seznamu přehrávání",
|
||||||
"LabelAddToPlaylistBatch": "Přidat {0} položky do seznamu přehrávání",
|
"LabelAddToPlaylistBatch": "Přidat {0} položky do seznamu přehrávání",
|
||||||
"LabelAddedAt": "Přidáno v",
|
"LabelAddedAt": "Přidáno v",
|
||||||
|
"LabelAddedDate": "Přidáno {0}",
|
||||||
"LabelAdminUsersOnly": "Pouze administrátoři",
|
"LabelAdminUsersOnly": "Pouze administrátoři",
|
||||||
"LabelAll": "Vše",
|
"LabelAll": "Vše",
|
||||||
"LabelAllUsers": "Všichni uživatelé",
|
"LabelAllUsers": "Všichni uživatelé",
|
||||||
@@ -229,6 +243,7 @@
|
|||||||
"LabelBitrate": "Datový tok",
|
"LabelBitrate": "Datový tok",
|
||||||
"LabelBooks": "Knihy",
|
"LabelBooks": "Knihy",
|
||||||
"LabelButtonText": "Text tlačítka",
|
"LabelButtonText": "Text tlačítka",
|
||||||
|
"LabelByAuthor": "od {0}",
|
||||||
"LabelChangePassword": "Změnit heslo",
|
"LabelChangePassword": "Změnit heslo",
|
||||||
"LabelChannels": "Kanály",
|
"LabelChannels": "Kanály",
|
||||||
"LabelChapterTitle": "Název kapitoly",
|
"LabelChapterTitle": "Název kapitoly",
|
||||||
@@ -238,6 +253,7 @@
|
|||||||
"LabelClosePlayer": "Zavřít přehrávač",
|
"LabelClosePlayer": "Zavřít přehrávač",
|
||||||
"LabelCodec": "Kodek",
|
"LabelCodec": "Kodek",
|
||||||
"LabelCollapseSeries": "Sbalit sérii",
|
"LabelCollapseSeries": "Sbalit sérii",
|
||||||
|
"LabelCollapseSubSeries": "Sbalit podsérie",
|
||||||
"LabelCollection": "Kolekce",
|
"LabelCollection": "Kolekce",
|
||||||
"LabelCollections": "Kolekce",
|
"LabelCollections": "Kolekce",
|
||||||
"LabelComplete": "Dokončeno",
|
"LabelComplete": "Dokončeno",
|
||||||
@@ -288,16 +304,21 @@
|
|||||||
"LabelEpisode": "Epizoda",
|
"LabelEpisode": "Epizoda",
|
||||||
"LabelEpisodeTitle": "Název epizody",
|
"LabelEpisodeTitle": "Název epizody",
|
||||||
"LabelEpisodeType": "Typ epizody",
|
"LabelEpisodeType": "Typ epizody",
|
||||||
|
"LabelEpisodes": "Epizody",
|
||||||
"LabelExample": "Příklad",
|
"LabelExample": "Příklad",
|
||||||
"LabelExpandSeries": "Rozbalit série",
|
"LabelExpandSeries": "Rozbalit série",
|
||||||
|
"LabelExpandSubSeries": "Rozbalit podsérie",
|
||||||
"LabelExplicit": "Explicitní",
|
"LabelExplicit": "Explicitní",
|
||||||
"LabelExplicitChecked": "Explicitní (zaškrtnuto)",
|
"LabelExplicitChecked": "Explicitní (zaškrtnuto)",
|
||||||
"LabelExplicitUnchecked": "Není explicitní (nezaškrtnuto)",
|
"LabelExplicitUnchecked": "Není explicitní (nezaškrtnuto)",
|
||||||
|
"LabelExportOPML": "Export OPML",
|
||||||
"LabelFeedURL": "URL zdroje",
|
"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",
|
||||||
|
"LabelFileBornDate": "Vytvořeno {0}",
|
||||||
"LabelFileModified": "Soubor změněn",
|
"LabelFileModified": "Soubor změněn",
|
||||||
|
"LabelFileModifiedDate": "Změněno {0}",
|
||||||
"LabelFilename": "Název souboru",
|
"LabelFilename": "Název souboru",
|
||||||
"LabelFilterByUser": "Filtrovat podle uživatele",
|
"LabelFilterByUser": "Filtrovat podle uživatele",
|
||||||
"LabelFindEpisodes": "Najít epizody",
|
"LabelFindEpisodes": "Najít epizody",
|
||||||
@@ -307,6 +328,7 @@
|
|||||||
"LabelFontBold": "Tučně",
|
"LabelFontBold": "Tučně",
|
||||||
"LabelFontBoldness": "Výraznost písma",
|
"LabelFontBoldness": "Výraznost písma",
|
||||||
"LabelFontFamily": "Rodina písem",
|
"LabelFontFamily": "Rodina písem",
|
||||||
|
"LabelFontItalic": "Kurzíva",
|
||||||
"LabelFontScale": "Měřítko písma",
|
"LabelFontScale": "Měřítko písma",
|
||||||
"LabelFontStrikethrough": "Přeškrtnutí",
|
"LabelFontStrikethrough": "Přeškrtnutí",
|
||||||
"LabelFormat": "Formát",
|
"LabelFormat": "Formát",
|
||||||
@@ -325,6 +347,7 @@
|
|||||||
"LabelInProgress": "Probíhá",
|
"LabelInProgress": "Probíhá",
|
||||||
"LabelIncludeInTracklist": "Zahrnout do seznamu stop",
|
"LabelIncludeInTracklist": "Zahrnout do seznamu stop",
|
||||||
"LabelIncomplete": "Neúplné",
|
"LabelIncomplete": "Neúplné",
|
||||||
|
"LabelInterval": "Interval",
|
||||||
"LabelIntervalCustomDailyWeekly": "Vlastní denně/týdně",
|
"LabelIntervalCustomDailyWeekly": "Vlastní denně/týdně",
|
||||||
"LabelIntervalEvery12Hours": "Každých 12 hodin",
|
"LabelIntervalEvery12Hours": "Každých 12 hodin",
|
||||||
"LabelIntervalEvery15Minutes": "Každých 15 minut",
|
"LabelIntervalEvery15Minutes": "Každých 15 minut",
|
||||||
@@ -421,17 +444,22 @@
|
|||||||
"LabelPersonalYearReview": "Váš přehled roku ({0})",
|
"LabelPersonalYearReview": "Váš přehled roku ({0})",
|
||||||
"LabelPhotoPathURL": "Cesta k fotografii/URL",
|
"LabelPhotoPathURL": "Cesta k fotografii/URL",
|
||||||
"LabelPlayMethod": "Metoda přehrávání",
|
"LabelPlayMethod": "Metoda přehrávání",
|
||||||
|
"LabelPlayerChapterNumberMarker": "{0} z {1}",
|
||||||
"LabelPlaylists": "Seznamy skladeb",
|
"LabelPlaylists": "Seznamy skladeb",
|
||||||
|
"LabelPodcast": "Podcast",
|
||||||
"LabelPodcastSearchRegion": "Oblast vyhledávání podcastu",
|
"LabelPodcastSearchRegion": "Oblast vyhledávání podcastu",
|
||||||
"LabelPodcastType": "Typ podcastu",
|
"LabelPodcastType": "Typ podcastu",
|
||||||
"LabelPodcasts": "Podcasty",
|
"LabelPodcasts": "Podcasty",
|
||||||
|
"LabelPort": "Port",
|
||||||
"LabelPrefixesToIgnore": "Předpony, které se mají ignorovat (nerozlišují se malá a velká písmena)",
|
"LabelPrefixesToIgnore": "Předpony, které se mají ignorovat (nerozlišují se malá a velká písmena)",
|
||||||
"LabelPreventIndexing": "Zabránit indexování vašeho kanálu v adresářích podcastů iTunes a Google",
|
"LabelPreventIndexing": "Zabránit indexování vašeho kanálu v adresářích podcastů iTunes a Google",
|
||||||
"LabelPrimaryEbook": "Hlavní e-kniha",
|
"LabelPrimaryEbook": "Hlavní e-kniha",
|
||||||
"LabelProgress": "Průběh",
|
"LabelProgress": "Průběh",
|
||||||
"LabelProvider": "Poskytovatel",
|
"LabelProvider": "Poskytovatel",
|
||||||
|
"LabelProviderAuthorizationValue": "Hodnota autorizačního headeru",
|
||||||
"LabelPubDate": "Datum vydání",
|
"LabelPubDate": "Datum vydání",
|
||||||
"LabelPublishYear": "Rok vydání",
|
"LabelPublishYear": "Rok vydání",
|
||||||
|
"LabelPublishedDate": "Vydáno {0}",
|
||||||
"LabelPublisher": "Vydavatel",
|
"LabelPublisher": "Vydavatel",
|
||||||
"LabelPublishers": "Vydavatelé",
|
"LabelPublishers": "Vydavatelé",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Vlastní e-mail vlastníka",
|
"LabelRSSFeedCustomOwnerEmail": "Vlastní e-mail vlastníka",
|
||||||
@@ -441,6 +469,7 @@
|
|||||||
"LabelRSSFeedSlug": "RSS kanál Slug",
|
"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",
|
||||||
"LabelRead": "Číst",
|
"LabelRead": "Číst",
|
||||||
"LabelReadAgain": "Číst znovu",
|
"LabelReadAgain": "Číst znovu",
|
||||||
"LabelReadEbookWithoutProgress": "Číst e-knihu bez zachování průběhu",
|
"LabelReadEbookWithoutProgress": "Číst e-knihu bez zachování průběhu",
|
||||||
@@ -448,6 +477,7 @@
|
|||||||
"LabelRecentlyAdded": "Nedávno přidané",
|
"LabelRecentlyAdded": "Nedávno přidané",
|
||||||
"LabelRecommended": "Doporučeno",
|
"LabelRecommended": "Doporučeno",
|
||||||
"LabelRedo": "Přepracovat",
|
"LabelRedo": "Přepracovat",
|
||||||
|
"LabelRegion": "Region",
|
||||||
"LabelReleaseDate": "Datum vydání",
|
"LabelReleaseDate": "Datum vydání",
|
||||||
"LabelRemoveCover": "Odstranit obálku",
|
"LabelRemoveCover": "Odstranit obálku",
|
||||||
"LabelRowsPerPage": "Řádky na stránku",
|
"LabelRowsPerPage": "Řádky na stránku",
|
||||||
@@ -539,6 +569,7 @@
|
|||||||
"LabelTagsNotAccessibleToUser": "Značky nepřístupné uživateli",
|
"LabelTagsNotAccessibleToUser": "Značky nepřístupné uživateli",
|
||||||
"LabelTasks": "Spuštěné Úlohy",
|
"LabelTasks": "Spuštěné Úlohy",
|
||||||
"LabelTextEditorBulletedList": "Seznam s odrážkami",
|
"LabelTextEditorBulletedList": "Seznam s odrážkami",
|
||||||
|
"LabelTextEditorLink": "Odkaz",
|
||||||
"LabelTextEditorNumberedList": "Seznam s čísly",
|
"LabelTextEditorNumberedList": "Seznam s čísly",
|
||||||
"LabelTextEditorUnlink": "Zrušit odkaz",
|
"LabelTextEditorUnlink": "Zrušit odkaz",
|
||||||
"LabelTheme": "Téma",
|
"LabelTheme": "Téma",
|
||||||
@@ -572,6 +603,7 @@
|
|||||||
"LabelUnabridged": "Nezkráceno",
|
"LabelUnabridged": "Nezkráceno",
|
||||||
"LabelUndo": "Zpět",
|
"LabelUndo": "Zpět",
|
||||||
"LabelUnknown": "Neznámý",
|
"LabelUnknown": "Neznámý",
|
||||||
|
"LabelUnknownPublishDate": "Neznámé datum vydání",
|
||||||
"LabelUpdateCover": "Aktualizovat obálku",
|
"LabelUpdateCover": "Aktualizovat obálku",
|
||||||
"LabelUpdateCoverHelp": "Povolit přepsání existujících obálek pro vybrané knihy, pokud je nalezena shoda",
|
"LabelUpdateCoverHelp": "Povolit přepsání existujících obálek pro vybrané knihy, pokud je nalezena shoda",
|
||||||
"LabelUpdateDetails": "Aktualizovat podrobnosti",
|
"LabelUpdateDetails": "Aktualizovat podrobnosti",
|
||||||
@@ -620,14 +652,19 @@
|
|||||||
"MessageCheckingCron": "Kontrola cronu...",
|
"MessageCheckingCron": "Kontrola cronu...",
|
||||||
"MessageConfirmCloseFeed": "Opravdu chcete zavřít tento kanál?",
|
"MessageConfirmCloseFeed": "Opravdu chcete zavřít tento kanál?",
|
||||||
"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}\"?",
|
||||||
"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?",
|
||||||
"MessageConfirmDeleteLibrary": "Opravdu chcete trvale smazat knihovnu \"{0}\"?",
|
"MessageConfirmDeleteLibrary": "Opravdu chcete trvale smazat knihovnu \"{0}\"?",
|
||||||
"MessageConfirmDeleteLibraryItem": "Tento krok odstraní položku knihovny z databáze a vašeho souborového systému. Jste si jisti?",
|
"MessageConfirmDeleteLibraryItem": "Tento krok odstraní položku knihovny z databáze a vašeho souborového systému. Jste si jisti?",
|
||||||
"MessageConfirmDeleteLibraryItems": "Tímto smažete {0} položkek knihovny z databáze a vašeho souborového systému. Jsi si jisti?",
|
"MessageConfirmDeleteLibraryItems": "Tímto smažete {0} položkek knihovny z databáze a vašeho souborového systému. Jsi si jisti?",
|
||||||
|
"MessageConfirmDeleteMetadataProvider": "Opravdu chcete vymazat vlastního poskytovatele metadat \"{0}\"?",
|
||||||
|
"MessageConfirmDeleteNotification": "Opravdu chcete vymazat tuto notifikaci?",
|
||||||
"MessageConfirmDeleteSession": "Opravdu chcete smazat tuto relaci?",
|
"MessageConfirmDeleteSession": "Opravdu chcete smazat tuto relaci?",
|
||||||
"MessageConfirmForceReScan": "Opravdu chcete vynutit opětovné prohledání?",
|
"MessageConfirmForceReScan": "Opravdu chcete vynutit opětovné prohledání?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Opravdu chcete označit všechny epizody jako dokončené?",
|
"MessageConfirmMarkAllEpisodesFinished": "Opravdu chcete označit všechny epizody jako dokončené?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "Opravdu chcete označit všechny epizody jako nedokončené?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "Opravdu chcete označit všechny epizody jako nedokončené?",
|
||||||
|
"MessageConfirmMarkItemFinished": "Opravdu chcete označit \"{0}\" jako dokončené?",
|
||||||
|
"MessageConfirmMarkItemNotFinished": "Opravdu chcete označit \"{0}\" jako nedokončené?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Opravdu chcete označit všechny knihy z této série jako dokončené?",
|
"MessageConfirmMarkSeriesFinished": "Opravdu chcete označit všechny knihy z této série jako dokončené?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Opravdu chcete označit všechny knihy z této série jako nedokončené?",
|
"MessageConfirmMarkSeriesNotFinished": "Opravdu chcete označit všechny knihy z této série jako nedokončené?",
|
||||||
"MessageConfirmPurgeCache": "Vyčistit mezipaměť odstraní celý adresář na adrese <code>/metadata/cache</code>. <br /><br />Určitě chcete odstranit adresář mezipaměti?",
|
"MessageConfirmPurgeCache": "Vyčistit mezipaměť odstraní celý adresář na adrese <code>/metadata/cache</code>. <br /><br />Určitě chcete odstranit adresář mezipaměti?",
|
||||||
@@ -648,7 +685,9 @@
|
|||||||
"MessageConfirmRenameTag": "Opravdu chcete přejmenovat tag \"{0}\" na \"{1}\" pro všechny položky?",
|
"MessageConfirmRenameTag": "Opravdu chcete přejmenovat tag \"{0}\" na \"{1}\" pro všechny položky?",
|
||||||
"MessageConfirmRenameTagMergeNote": "Poznámka: Tato značka již existuje, takže budou sloučeny.",
|
"MessageConfirmRenameTagMergeNote": "Poznámka: Tato značka již existuje, takže budou sloučeny.",
|
||||||
"MessageConfirmRenameTagWarning": "Varování! Podobná značka s jinými velkými a malými písmeny již existuje \"{0}\".",
|
"MessageConfirmRenameTagWarning": "Varování! Podobná značka s jinými velkými a malými písmeny již existuje \"{0}\".",
|
||||||
|
"MessageConfirmResetProgress": "Opravdu chcete zahodit svůj pokrok?",
|
||||||
"MessageConfirmSendEbookToDevice": "Opravdu chcete odeslat e-knihu {0} {1}\" do zařízení \"{2}\"?",
|
"MessageConfirmSendEbookToDevice": "Opravdu chcete odeslat e-knihu {0} {1}\" do zařízení \"{2}\"?",
|
||||||
|
"MessageConfirmUnlinkOpenId": "Opravdu chcete odpojit tohoto uživatele z OpenID?",
|
||||||
"MessageDownloadingEpisode": "Stahuji epizodu",
|
"MessageDownloadingEpisode": "Stahuji epizodu",
|
||||||
"MessageDragFilesIntoTrackOrder": "Přetáhněte soubory do správného pořadí stop",
|
"MessageDragFilesIntoTrackOrder": "Přetáhněte soubory do správného pořadí stop",
|
||||||
"MessageEmbedFailed": "Vložení selhalo!",
|
"MessageEmbedFailed": "Vložení selhalo!",
|
||||||
@@ -656,7 +695,7 @@
|
|||||||
"MessageEpisodesQueuedForDownload": "{0} Epizody zařazené do fronty ke stažení",
|
"MessageEpisodesQueuedForDownload": "{0} Epizody zařazené do fronty ke stažení",
|
||||||
"MessageEreaderDevices": "Aby bylo zajištěno doručení elektronických knih, může být nutné přidat výše uvedenou e-mailovou adresu jako platného odesílatele pro každé zařízení uvedené níže.",
|
"MessageEreaderDevices": "Aby bylo zajištěno doručení elektronických knih, může být nutné přidat výše uvedenou e-mailovou adresu jako platného odesílatele pro každé zařízení uvedené níže.",
|
||||||
"MessageFeedURLWillBe": "URL zdroje bude {0}",
|
"MessageFeedURLWillBe": "URL zdroje bude {0}",
|
||||||
"MessageFetching": "Stahování...",
|
"MessageFetching": "Načítání...",
|
||||||
"MessageForceReScanDescription": "znovu prohledá všechny soubory jako při novém skenování. ID3 tagy zvukových souborů OPF soubory a textové soubory budou skenovány jako nové.",
|
"MessageForceReScanDescription": "znovu prohledá všechny soubory jako při novém skenování. ID3 tagy zvukových souborů OPF soubory a textové soubory budou skenovány jako nové.",
|
||||||
"MessageImportantNotice": "Důležité upozornění!",
|
"MessageImportantNotice": "Důležité upozornění!",
|
||||||
"MessageInsertChapterBelow": "Vložit kapitolu níže",
|
"MessageInsertChapterBelow": "Vložit kapitolu níže",
|
||||||
@@ -683,6 +722,7 @@
|
|||||||
"MessageNoCollections": "Žádné kolekce",
|
"MessageNoCollections": "Žádné kolekce",
|
||||||
"MessageNoCoversFound": "Nebyly nalezeny žádné obálky",
|
"MessageNoCoversFound": "Nebyly nalezeny žádné obálky",
|
||||||
"MessageNoDescription": "Bez popisu",
|
"MessageNoDescription": "Bez popisu",
|
||||||
|
"MessageNoDevices": "Žádná zařízení",
|
||||||
"MessageNoDownloadsInProgress": "Momentálně neprobíhá žádné stahování",
|
"MessageNoDownloadsInProgress": "Momentálně neprobíhá žádné stahování",
|
||||||
"MessageNoDownloadsQueued": "Žádné stahování ve frontě",
|
"MessageNoDownloadsQueued": "Žádné stahování ve frontě",
|
||||||
"MessageNoEpisodeMatchesFound": "Nebyly nalezeny žádné odpovídající epizody",
|
"MessageNoEpisodeMatchesFound": "Nebyly nalezeny žádné odpovídající epizody",
|
||||||
@@ -710,6 +750,7 @@
|
|||||||
"MessagePauseChapter": "Pozastavit přehrávání kapitoly",
|
"MessagePauseChapter": "Pozastavit přehrávání kapitoly",
|
||||||
"MessagePlayChapter": "Poslechnout si začátek kapitoly",
|
"MessagePlayChapter": "Poslechnout si začátek kapitoly",
|
||||||
"MessagePlaylistCreateFromCollection": "Vytvořit seznam skladeb z kolekce",
|
"MessagePlaylistCreateFromCollection": "Vytvořit seznam skladeb z kolekce",
|
||||||
|
"MessagePleaseWait": "Čekejte prosím...",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "Podcast nemá žádnou adresu URL kanálu RSS, kterou by mohl použít pro porovnávání",
|
"MessagePodcastHasNoRSSFeedForMatching": "Podcast nemá žádnou adresu URL kanálu RSS, kterou by mohl použít pro porovnávání",
|
||||||
"MessageQuickMatchDescription": "Vyplňte prázdné detaily položky a obálku prvním výsledkem shody z '{0}'. Nepřepisuje podrobnosti, pokud není povoleno nastavení serveru \"Preferovat párování metadata\".",
|
"MessageQuickMatchDescription": "Vyplňte prázdné detaily položky a obálku prvním výsledkem shody z '{0}'. Nepřepisuje podrobnosti, pokud není povoleno nastavení serveru \"Preferovat párování metadata\".",
|
||||||
"MessageRemoveChapter": "Odstranit kapitolu",
|
"MessageRemoveChapter": "Odstranit kapitolu",
|
||||||
@@ -728,17 +769,46 @@
|
|||||||
"MessageShareExpiresIn": "Expiruje za {0}",
|
"MessageShareExpiresIn": "Expiruje za {0}",
|
||||||
"MessageShareURLWillBe": "Sdílené URL bude <strong>{0}</strong>",
|
"MessageShareURLWillBe": "Sdílené URL bude <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "Spustit přehrávání pro \"{0}\" v {1}?",
|
"MessageStartPlaybackAtTime": "Spustit přehrávání pro \"{0}\" v {1}?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "Nelze zapisovat do audio souboru \"{0}\"",
|
||||||
|
"MessageTaskCanceledByUser": "Task zrušen uživatelem",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "Stahování epizody \"{0}\"",
|
||||||
|
"MessageTaskEmbeddingMetadata": "Vkládání metadat",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "Vkládání metadat do audioknihy \"{0}\"",
|
||||||
|
"MessageTaskEncodingM4b": "Kódování M4B",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Kódování audioknihy \"{0}\" do jednoho m4b souboru",
|
||||||
|
"MessageTaskFailed": "Selhalo",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "Zálohování audio souboru \"{0}\" se selhalo",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Vytvoření cache adresáře selhalo",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "Vkládání metadat do souboru \"{0}\" selhalo",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "Spojení audio souborů selhalo",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "Přesunutí m4b souboru selhalo",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "Zápis souboru metadat selhal",
|
||||||
|
"MessageTaskNoFilesToScan": "Žádné soubory ke skenování",
|
||||||
|
"MessageTaskOpmlImport": "Import OPML",
|
||||||
|
"MessageTaskOpmlImportDescription": "Vytváření podcastů z {0} RSS feedů",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "Importování RSS feedu \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "Vytváření podcastu \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastExists": "Podcast se stejnou cestou již existuje",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "Vytváření podcastu selhalo",
|
||||||
|
"MessageTaskOpmlImportFinished": "Přidáno {0} podcastů",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} přidáno",
|
||||||
|
"MessageTaskScanItemsMissing": "{0} chybí",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} aktualizováno",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "Žádné změny nejsou nutné",
|
||||||
|
"MessageTaskScanningFileChanges": "Skenování změn souborů v \"{0}\"",
|
||||||
|
"MessageTaskScanningLibrary": "Skenování \"{0}\" knihovny",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "Do cílové složky nelze zapisovat",
|
||||||
"MessageThinking": "Přemýšlení...",
|
"MessageThinking": "Přemýšlení...",
|
||||||
"MessageUploaderItemFailed": "Nahrávání se nezdařilo",
|
"MessageUploaderItemFailed": "Nahrávání selhalo",
|
||||||
"MessageUploaderItemSuccess": "Nahráno bylo úspěšně!",
|
"MessageUploaderItemSuccess": "Úspěšně nahráno!",
|
||||||
"MessageUploading": "Odesílám...",
|
"MessageUploading": "Nahrávám...",
|
||||||
"MessageValidCronExpression": "Platný výraz cronu",
|
"MessageValidCronExpression": "Platný výraz cronu",
|
||||||
"MessageWatcherIsDisabledGlobally": "Hlídač je globálně zakázán v nastavení serveru",
|
"MessageWatcherIsDisabledGlobally": "Hlídač je globálně zakázán v nastavení serveru",
|
||||||
"MessageXLibraryIsEmpty": "{0} knihovna je prázdná!",
|
"MessageXLibraryIsEmpty": "{0} knihovna je prázdná!",
|
||||||
"MessageYourAudiobookDurationIsLonger": "Doba trvání audioknihy je delší než nalezená délka",
|
"MessageYourAudiobookDurationIsLonger": "Délka audioknihy je delší, než byla nalezena",
|
||||||
"MessageYourAudiobookDurationIsShorter": "Délka audioknihy je kratší, než byla nalezena",
|
"MessageYourAudiobookDurationIsShorter": "Délka audioknihy je kratší, než byla nalezena",
|
||||||
"NoteChangeRootPassword": "Uživatel root je jediný uživatel, který může mít prázdné heslo",
|
"NoteChangeRootPassword": "Uživatel root je jediný uživatel, který může mít prázdné heslo",
|
||||||
"NoteChapterEditorTimes": "Poznámka: Čas začátku první kapitoly musí zůstat v 0:00 a čas začátku poslední kapitoly nesmí překročit tuto dobu trvání audioknihy.",
|
"NoteChapterEditorTimes": "Poznámka: Čas začátku první kapitoly musí zůstat na 0:00 a čas začátku poslední kapitoly nesmí překročit dobu trvání audioknihy.",
|
||||||
"NoteFolderPicker": "Poznámka: složky, které jsou již namapovány, nebudou zobrazeny",
|
"NoteFolderPicker": "Poznámka: složky, které jsou již namapovány, nebudou zobrazeny",
|
||||||
"NoteRSSFeedPodcastAppsHttps": "Upozornění: Většina aplikací pro podcasty bude vyžadovat, aby adresa URL kanálu RSS používala protokol HTTPS",
|
"NoteRSSFeedPodcastAppsHttps": "Upozornění: Většina aplikací pro podcasty bude vyžadovat, aby adresa URL kanálu RSS používala protokol HTTPS",
|
||||||
"NoteRSSFeedPodcastAppsPubDate": "Upozornění: 1 nebo více epizod nemá datum vydání. Některé podcastové aplikace to vyžadují.",
|
"NoteRSSFeedPodcastAppsPubDate": "Upozornění: 1 nebo více epizod nemá datum vydání. Některé podcastové aplikace to vyžadují.",
|
||||||
@@ -752,8 +822,10 @@
|
|||||||
"PlaceholderSearchEpisode": "Hledat epizodu..",
|
"PlaceholderSearchEpisode": "Hledat epizodu..",
|
||||||
"StatsAuthorsAdded": "autoři přidáni",
|
"StatsAuthorsAdded": "autoři přidáni",
|
||||||
"StatsBooksAdded": "knihy přidány",
|
"StatsBooksAdded": "knihy přidány",
|
||||||
|
"StatsBooksAdditional": "Některé další zahrnují…",
|
||||||
"StatsBooksFinished": "dokončené knihy",
|
"StatsBooksFinished": "dokončené knihy",
|
||||||
"StatsBooksFinishedThisYear": "Některé knihy dokončené tento rok…",
|
"StatsBooksFinishedThisYear": "Některé knihy dokončené tento rok…",
|
||||||
|
"StatsCollectionGrewTo": "Vaše kolekce knih se rozrostla na…",
|
||||||
"StatsSessions": "sezení",
|
"StatsSessions": "sezení",
|
||||||
"StatsSpentListening": "stráveno posloucháním",
|
"StatsSpentListening": "stráveno posloucháním",
|
||||||
"StatsTopAuthor": "TOP AUTOR",
|
"StatsTopAuthor": "TOP AUTOR",
|
||||||
@@ -763,59 +835,75 @@
|
|||||||
"StatsTopMonth": "TOP MĚSÍC",
|
"StatsTopMonth": "TOP MĚSÍC",
|
||||||
"StatsTotalDuration": "S celkovou dobou…",
|
"StatsTotalDuration": "S celkovou dobou…",
|
||||||
"StatsYearInReview": "ROK V PŘEHLEDU",
|
"StatsYearInReview": "ROK V PŘEHLEDU",
|
||||||
"ToastAccountUpdateFailed": "Aktualizace účtu se nezdařila",
|
|
||||||
"ToastAccountUpdateSuccess": "Účet aktualizován",
|
"ToastAccountUpdateSuccess": "Účet aktualizován",
|
||||||
|
"ToastAppriseUrlRequired": "Je nutné zadat Apprise URL",
|
||||||
"ToastAuthorImageRemoveSuccess": "Obrázek autora odstraněn",
|
"ToastAuthorImageRemoveSuccess": "Obrázek autora odstraněn",
|
||||||
"ToastAuthorUpdateFailed": "Aktualizace autora se nezdařila",
|
"ToastAuthorNotFound": "Author \"{0}\" nenalezen",
|
||||||
|
"ToastAuthorRemoveSuccess": "Autor odstraněn",
|
||||||
|
"ToastAuthorSearchNotFound": "Autor nenalezen",
|
||||||
"ToastAuthorUpdateMerged": "Autor sloučen",
|
"ToastAuthorUpdateMerged": "Autor sloučen",
|
||||||
"ToastAuthorUpdateSuccess": "Autor aktualizován",
|
"ToastAuthorUpdateSuccess": "Autor aktualizován",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autor aktualizován (nebyl nalezen žádný obrázek)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autor aktualizován (nebyl nalezen žádný obrázek)",
|
||||||
|
"ToastBackupAppliedSuccess": "Záloha obnovena",
|
||||||
"ToastBackupCreateFailed": "Vytvoření zálohy se nezdařilo",
|
"ToastBackupCreateFailed": "Vytvoření zálohy se nezdařilo",
|
||||||
"ToastBackupCreateSuccess": "Záloha vytvořena",
|
"ToastBackupCreateSuccess": "Záloha vytvořena",
|
||||||
"ToastBackupDeleteFailed": "Nepodařilo se smazat zálohu",
|
"ToastBackupDeleteFailed": "Nepodařilo se smazat zálohu",
|
||||||
"ToastBackupDeleteSuccess": "Záloha smazána",
|
"ToastBackupDeleteSuccess": "Záloha smazána",
|
||||||
|
"ToastBackupInvalidMaxKeep": "Neplatný počet záloh k zachování",
|
||||||
|
"ToastBackupInvalidMaxSize": "Neplatná maximální velikost zálohy",
|
||||||
"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",
|
||||||
|
"ToastBatchDeleteFailed": "Hromadné smazání selhalo",
|
||||||
|
"ToastBatchDeleteSuccess": "Hromadné smazání proběhlo úspěšně",
|
||||||
"ToastBatchUpdateFailed": "Dávková aktualizace se nezdařila",
|
"ToastBatchUpdateFailed": "Dávková aktualizace se nezdařila",
|
||||||
"ToastBatchUpdateSuccess": "Dávková aktualizace proběhla úspěšně",
|
"ToastBatchUpdateSuccess": "Dávková aktualizace proběhla úspěšně",
|
||||||
"ToastBookmarkCreateFailed": "Vytvoření záložky se nezdařilo",
|
"ToastBookmarkCreateFailed": "Vytvoření záložky se nezdařilo",
|
||||||
"ToastBookmarkCreateSuccess": "Přidána záložka",
|
"ToastBookmarkCreateSuccess": "Přidána záložka",
|
||||||
"ToastBookmarkRemoveSuccess": "Záložka odstraněna",
|
"ToastBookmarkRemoveSuccess": "Záložka odstraněna",
|
||||||
"ToastBookmarkUpdateFailed": "Aktualizace záložky se nezdařila",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Záložka aktualizována",
|
"ToastBookmarkUpdateSuccess": "Záložka aktualizována",
|
||||||
"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",
|
||||||
"ToastChaptersMustHaveTitles": "Kapitoly musí mít názvy",
|
"ToastChaptersMustHaveTitles": "Kapitoly musí mít názvy",
|
||||||
|
"ToastChaptersRemoved": "Kapitoly odstraněny",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Položky odstraněny z kolekce",
|
"ToastCollectionItemsRemoveSuccess": "Položky odstraněny z kolekce",
|
||||||
"ToastCollectionRemoveSuccess": "Kolekce odstraněna",
|
"ToastCollectionRemoveSuccess": "Kolekce odstraněna",
|
||||||
"ToastCollectionUpdateFailed": "Aktualizace kolekce se nezdařila",
|
|
||||||
"ToastCollectionUpdateSuccess": "Kolekce aktualizována",
|
"ToastCollectionUpdateSuccess": "Kolekce aktualizována",
|
||||||
|
"ToastCoverUpdateFailed": "Aktualizace obálky selhala",
|
||||||
"ToastDeleteFileFailed": "Nepodařilo se smazat soubor",
|
"ToastDeleteFileFailed": "Nepodařilo se smazat soubor",
|
||||||
"ToastDeleteFileSuccess": "Soubor smazán",
|
"ToastDeleteFileSuccess": "Soubor smazán",
|
||||||
|
"ToastDeviceAddFailed": "Přidání zařízení selhalo",
|
||||||
|
"ToastDeviceNameAlreadyExists": "Zařízení se stejným jménem již existuje",
|
||||||
|
"ToastDeviceTestEmailFailed": "Odeslání testovacího emailu selhalo",
|
||||||
|
"ToastDeviceTestEmailSuccess": "Testovací email byl odeslán",
|
||||||
|
"ToastEmailSettingsUpdateSuccess": "Nastavení emailu aktualizována",
|
||||||
|
"ToastEpisodeDownloadQueueClearFailed": "Vyčištění fronty selhalo",
|
||||||
"ToastErrorCannotShare": "Na tomto zařízení nelze nativně sdílet",
|
"ToastErrorCannotShare": "Na tomto zařízení nelze nativně sdílet",
|
||||||
"ToastFailedToLoadData": "Nepodařilo se načíst data",
|
"ToastFailedToLoadData": "Nepodařilo se načíst data",
|
||||||
"ToastItemCoverUpdateFailed": "Aktualizace obálky se nezdařila",
|
"ToastFailedToShare": "Sdílení selhalo",
|
||||||
|
"ToastFailedToUpdate": "Aktualizace selhala",
|
||||||
|
"ToastInvalidImageUrl": "Neplatná URL obrázku",
|
||||||
|
"ToastInvalidUrl": "Neplatná URL",
|
||||||
"ToastItemCoverUpdateSuccess": "Obálka předmětu byl aktualizována",
|
"ToastItemCoverUpdateSuccess": "Obálka předmětu byl aktualizována",
|
||||||
"ToastItemDetailsUpdateFailed": "Nepodařilo se aktualizovat podrobnosti o položce",
|
"ToastItemDeletedFailed": "Smazání položky selhalo",
|
||||||
|
"ToastItemDeletedSuccess": "Položka smazána",
|
||||||
"ToastItemDetailsUpdateSuccess": "Podrobnosti o položce byly aktualizovány",
|
"ToastItemDetailsUpdateSuccess": "Podrobnosti o položce byly aktualizovány",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Nepodařilo se označit jako dokončené",
|
"ToastItemMarkedAsFinishedFailed": "Nepodařilo se označit jako dokončené",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Položka označena jako dokončená",
|
"ToastItemMarkedAsFinishedSuccess": "Položka označena jako dokončená",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Nepodařilo se označit jako nedokončené",
|
"ToastItemMarkedAsNotFinishedFailed": "Nepodařilo se označit jako nedokončené",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Položka označena jako nedokončená",
|
"ToastItemMarkedAsNotFinishedSuccess": "Položka označena jako nedokončená",
|
||||||
|
"ToastItemUpdateSuccess": "Položka aktualizována",
|
||||||
"ToastLibraryCreateFailed": "Vytvoření knihovny se nezdařilo",
|
"ToastLibraryCreateFailed": "Vytvoření knihovny se nezdařilo",
|
||||||
"ToastLibraryCreateSuccess": "Knihovna \"{0}\" vytvořena",
|
"ToastLibraryCreateSuccess": "Knihovna \"{0}\" vytvořena",
|
||||||
"ToastLibraryDeleteFailed": "Nepodařilo se smazat knihovnu",
|
"ToastLibraryDeleteFailed": "Nepodařilo se smazat knihovnu",
|
||||||
"ToastLibraryDeleteSuccess": "Knihovna smazána",
|
"ToastLibraryDeleteSuccess": "Knihovna smazána",
|
||||||
"ToastLibraryScanFailedToStart": "Nepodařilo se spustit kontrolu",
|
"ToastLibraryScanFailedToStart": "Nepodařilo se spustit kontrolu",
|
||||||
"ToastLibraryScanStarted": "Kontrola knihovny spuštěna",
|
"ToastLibraryScanStarted": "Kontrola knihovny spuštěna",
|
||||||
"ToastLibraryUpdateFailed": "Aktualizace knihovny se nezdařila",
|
|
||||||
"ToastLibraryUpdateSuccess": "Knihovna \"{0}\" aktualizována",
|
"ToastLibraryUpdateSuccess": "Knihovna \"{0}\" aktualizována",
|
||||||
"ToastPlaylistCreateFailed": "Vytvoření seznamu přehrávání se nezdařilo",
|
"ToastPlaylistCreateFailed": "Vytvoření seznamu přehrávání se nezdařilo",
|
||||||
"ToastPlaylistCreateSuccess": "Seznam přehrávání vytvořen",
|
"ToastPlaylistCreateSuccess": "Seznam přehrávání vytvořen",
|
||||||
"ToastPlaylistRemoveSuccess": "Seznam přehrávání odstraněn",
|
"ToastPlaylistRemoveSuccess": "Seznam přehrávání odstraněn",
|
||||||
"ToastPlaylistUpdateFailed": "Aktualizace seznamu přehrávání se nezdařila",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Seznam přehrávání aktualizován",
|
"ToastPlaylistUpdateSuccess": "Seznam přehrávání aktualizován",
|
||||||
"ToastPodcastCreateFailed": "Vytvoření podcastu se nezdařilo",
|
"ToastPodcastCreateFailed": "Vytvoření podcastu se nezdařilo",
|
||||||
"ToastPodcastCreateSuccess": "Podcast byl úspěšně vytvořen",
|
"ToastPodcastCreateSuccess": "Podcast byl úspěšně vytvořen",
|
||||||
@@ -827,7 +915,6 @@
|
|||||||
"ToastSendEbookToDeviceSuccess": "E-kniha odeslána do zařízení \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "E-kniha odeslána do zařízení \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "Aktualizace série se nezdařila",
|
"ToastSeriesUpdateFailed": "Aktualizace série se nezdařila",
|
||||||
"ToastSeriesUpdateSuccess": "Aktualizace série byla úspěšná",
|
"ToastSeriesUpdateSuccess": "Aktualizace série byla úspěšná",
|
||||||
"ToastServerSettingsUpdateFailed": "Nepodařilo se aktualizovat nastavení serveru",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Nastavení serveru aktualizováno",
|
"ToastServerSettingsUpdateSuccess": "Nastavení serveru aktualizováno",
|
||||||
"ToastSessionDeleteFailed": "Nepodařilo se smazat relaci",
|
"ToastSessionDeleteFailed": "Nepodařilo se smazat relaci",
|
||||||
"ToastSessionDeleteSuccess": "Relace smazána",
|
"ToastSessionDeleteSuccess": "Relace smazána",
|
||||||
@@ -835,7 +922,6 @@
|
|||||||
"ToastSocketDisconnected": "Socket odpojen",
|
"ToastSocketDisconnected": "Socket odpojen",
|
||||||
"ToastSocketFailedToConnect": "Socket se nepodařilo připojit",
|
"ToastSocketFailedToConnect": "Socket se nepodařilo připojit",
|
||||||
"ToastSortingPrefixesEmptyError": "Musí mít alespoň 1 třídicí předponu",
|
"ToastSortingPrefixesEmptyError": "Musí mít alespoň 1 třídicí předponu",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Nepodařilo se aktualizovat třídicí předpony",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Aktualizovány předpony třídění ({0} položek)",
|
"ToastSortingPrefixesUpdateSuccess": "Aktualizovány předpony třídění ({0} položek)",
|
||||||
"ToastUserDeleteFailed": "Nepodařilo se smazat uživatele",
|
"ToastUserDeleteFailed": "Nepodařilo se smazat uživatele",
|
||||||
"ToastUserDeleteSuccess": "Uživatel smazán"
|
"ToastUserDeleteSuccess": "Uživatel smazán"
|
||||||
|
|||||||
+20
-15
@@ -1,7 +1,10 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Tilføj",
|
"ButtonAdd": "Tilføj",
|
||||||
"ButtonAddChapters": "Tilføj kapitler",
|
"ButtonAddChapters": "Tilføj kapitler",
|
||||||
|
"ButtonAddDevice": "Tilføj enhed",
|
||||||
|
"ButtonAddLibrary": "Tilføj Bibliotek",
|
||||||
"ButtonAddPodcasts": "Tilføj podcasts",
|
"ButtonAddPodcasts": "Tilføj podcasts",
|
||||||
|
"ButtonAddUser": "Tilføj bruger",
|
||||||
"ButtonAddYourFirstLibrary": "Tilføj din første bibliotek",
|
"ButtonAddYourFirstLibrary": "Tilføj din første bibliotek",
|
||||||
"ButtonApply": "Anvend",
|
"ButtonApply": "Anvend",
|
||||||
"ButtonApplyChapters": "Anvend kapitler",
|
"ButtonApplyChapters": "Anvend kapitler",
|
||||||
@@ -25,6 +28,7 @@
|
|||||||
"ButtonEdit": "Rediger",
|
"ButtonEdit": "Rediger",
|
||||||
"ButtonEditChapters": "Rediger kapitler",
|
"ButtonEditChapters": "Rediger kapitler",
|
||||||
"ButtonEditPodcast": "Rediger podcast",
|
"ButtonEditPodcast": "Rediger podcast",
|
||||||
|
"ButtonEnable": "Aktiver",
|
||||||
"ButtonForceReScan": "Tvungen genindlæsning",
|
"ButtonForceReScan": "Tvungen genindlæsning",
|
||||||
"ButtonFullPath": "Fuld sti",
|
"ButtonFullPath": "Fuld sti",
|
||||||
"ButtonHide": "Skjul",
|
"ButtonHide": "Skjul",
|
||||||
@@ -42,6 +46,7 @@
|
|||||||
"ButtonOk": "OK",
|
"ButtonOk": "OK",
|
||||||
"ButtonOpenFeed": "Åbn feed",
|
"ButtonOpenFeed": "Åbn feed",
|
||||||
"ButtonOpenManager": "Åbn manager",
|
"ButtonOpenManager": "Åbn manager",
|
||||||
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Afspil",
|
"ButtonPlay": "Afspil",
|
||||||
"ButtonPlaying": "Afspiller",
|
"ButtonPlaying": "Afspiller",
|
||||||
"ButtonPlaylists": "Afspilningslister",
|
"ButtonPlaylists": "Afspilningslister",
|
||||||
@@ -66,7 +71,7 @@
|
|||||||
"ButtonScanLibrary": "Scan Bibliotek",
|
"ButtonScanLibrary": "Scan Bibliotek",
|
||||||
"ButtonSearch": "Søg",
|
"ButtonSearch": "Søg",
|
||||||
"ButtonSelectFolderPath": "Vælg Mappen Sti",
|
"ButtonSelectFolderPath": "Vælg Mappen Sti",
|
||||||
"ButtonSeries": "Serie",
|
"ButtonSeries": "Serier",
|
||||||
"ButtonSetChaptersFromTracks": "Sæt kapitler fra spor",
|
"ButtonSetChaptersFromTracks": "Sæt kapitler fra spor",
|
||||||
"ButtonShiftTimes": "Skift Tider",
|
"ButtonShiftTimes": "Skift Tider",
|
||||||
"ButtonShow": "Vis",
|
"ButtonShow": "Vis",
|
||||||
@@ -188,14 +193,14 @@
|
|||||||
"LabelChapters": "Kapitler",
|
"LabelChapters": "Kapitler",
|
||||||
"LabelChaptersFound": "fundne kapitler",
|
"LabelChaptersFound": "fundne kapitler",
|
||||||
"LabelClosePlayer": "Luk afspiller",
|
"LabelClosePlayer": "Luk afspiller",
|
||||||
"LabelCollapseSeries": "Fold Serie Sammen",
|
"LabelCollapseSeries": "Fold Serier Sammen",
|
||||||
"LabelCollection": "Samling",
|
"LabelCollection": "Samling",
|
||||||
"LabelCollections": "Samlinger",
|
"LabelCollections": "Samlinger",
|
||||||
"LabelComplete": "Fuldfør",
|
"LabelComplete": "Fuldfør",
|
||||||
"LabelConfirmPassword": "Bekræft Adgangskode",
|
"LabelConfirmPassword": "Bekræft Adgangskode",
|
||||||
"LabelContinueListening": "Fortsæt Lytning",
|
"LabelContinueListening": "Fortsæt med at lytte",
|
||||||
"LabelContinueReading": "Fortsæt Læsning",
|
"LabelContinueReading": "Fortsæt med at læse",
|
||||||
"LabelContinueSeries": "Fortsæt Serie",
|
"LabelContinueSeries": "Fortsæt Serien",
|
||||||
"LabelCover": "Omslag",
|
"LabelCover": "Omslag",
|
||||||
"LabelCoverImageURL": "Omslagsbillede URL",
|
"LabelCoverImageURL": "Omslagsbillede URL",
|
||||||
"LabelCreatedAt": "Oprettet Kl.",
|
"LabelCreatedAt": "Oprettet Kl.",
|
||||||
@@ -212,6 +217,7 @@
|
|||||||
"LabelDiscFromFilename": "Disk fra Filnavn",
|
"LabelDiscFromFilename": "Disk fra Filnavn",
|
||||||
"LabelDiscFromMetadata": "Disk fra Metadata",
|
"LabelDiscFromMetadata": "Disk fra Metadata",
|
||||||
"LabelDiscover": "Opdag",
|
"LabelDiscover": "Opdag",
|
||||||
|
"LabelDownload": "Download",
|
||||||
"LabelDownloadNEpisodes": "Download {0} episoder",
|
"LabelDownloadNEpisodes": "Download {0} episoder",
|
||||||
"LabelDuration": "Varighed",
|
"LabelDuration": "Varighed",
|
||||||
"LabelDurationFound": "Fundet varighed:",
|
"LabelDurationFound": "Fundet varighed:",
|
||||||
@@ -225,12 +231,15 @@
|
|||||||
"LabelEmbeddedCover": "Indlejret Omslag",
|
"LabelEmbeddedCover": "Indlejret Omslag",
|
||||||
"LabelEnable": "Aktivér",
|
"LabelEnable": "Aktivér",
|
||||||
"LabelEnd": "Slut",
|
"LabelEnd": "Slut",
|
||||||
|
"LabelEndOfChapter": "Slutningen af kapitel",
|
||||||
|
"LabelEpisode": "Episode",
|
||||||
"LabelEpisodeTitle": "Episodetitel",
|
"LabelEpisodeTitle": "Episodetitel",
|
||||||
"LabelEpisodeType": "Episodetype",
|
"LabelEpisodeType": "Episodetype",
|
||||||
"LabelExample": "Eksempel",
|
"LabelExample": "Eksempel",
|
||||||
"LabelExplicit": "Eksplisit",
|
"LabelExplicit": "Eksplisit",
|
||||||
|
"LabelFeedURL": "Feed URL",
|
||||||
"LabelFile": "Fil",
|
"LabelFile": "Fil",
|
||||||
"LabelFileBirthtime": "Fødselstidspunkt for fil",
|
"LabelFileBirthtime": "Oprettelsestidspunkt for fil",
|
||||||
"LabelFileModified": "Fil ændret",
|
"LabelFileModified": "Fil ændret",
|
||||||
"LabelFilename": "Filnavn",
|
"LabelFilename": "Filnavn",
|
||||||
"LabelFilterByUser": "Filtrér efter bruger",
|
"LabelFilterByUser": "Filtrér efter bruger",
|
||||||
@@ -238,8 +247,10 @@
|
|||||||
"LabelFinished": "Færdig",
|
"LabelFinished": "Færdig",
|
||||||
"LabelFolder": "Mappe",
|
"LabelFolder": "Mappe",
|
||||||
"LabelFolders": "Mapper",
|
"LabelFolders": "Mapper",
|
||||||
|
"LabelFontBoldness": "Skrift tykkelse",
|
||||||
"LabelFontFamily": "Fontfamilie",
|
"LabelFontFamily": "Fontfamilie",
|
||||||
"LabelFontScale": "Skriftstørrelse",
|
"LabelFontScale": "Skriftstørrelse",
|
||||||
|
"LabelGenre": "Genre",
|
||||||
"LabelGenres": "Genrer",
|
"LabelGenres": "Genrer",
|
||||||
"LabelHardDeleteFile": "Permanent slet fil",
|
"LabelHardDeleteFile": "Permanent slet fil",
|
||||||
"LabelHasEbook": "Har e-bog",
|
"LabelHasEbook": "Har e-bog",
|
||||||
@@ -267,6 +278,7 @@
|
|||||||
"LabelLastSeen": "Sidst set",
|
"LabelLastSeen": "Sidst set",
|
||||||
"LabelLastTime": "Sidste gang",
|
"LabelLastTime": "Sidste gang",
|
||||||
"LabelLastUpdate": "Seneste opdatering",
|
"LabelLastUpdate": "Seneste opdatering",
|
||||||
|
"LabelLayout": "Layout",
|
||||||
"LabelLayoutSinglePage": "Enkeltside",
|
"LabelLayoutSinglePage": "Enkeltside",
|
||||||
"LabelLayoutSplitPage": "Opdelt side",
|
"LabelLayoutSplitPage": "Opdelt side",
|
||||||
"LabelLess": "Mindre",
|
"LabelLess": "Mindre",
|
||||||
@@ -344,10 +356,11 @@
|
|||||||
"LabelRSSFeedPreventIndexing": "Forhindrer indeksering",
|
"LabelRSSFeedPreventIndexing": "Forhindrer indeksering",
|
||||||
"LabelRSSFeedSlug": "RSS-feed-slug",
|
"LabelRSSFeedSlug": "RSS-feed-slug",
|
||||||
"LabelRSSFeedURL": "RSS-feed-URL",
|
"LabelRSSFeedURL": "RSS-feed-URL",
|
||||||
|
"LabelRandomly": "Tilfældigt",
|
||||||
"LabelRead": "Læst",
|
"LabelRead": "Læst",
|
||||||
"LabelReadAgain": "Læs igen",
|
"LabelReadAgain": "Læs igen",
|
||||||
"LabelReadEbookWithoutProgress": "Læs e-bog uden at følge fremskridt",
|
"LabelReadEbookWithoutProgress": "Læs e-bog uden at følge fremskridt",
|
||||||
"LabelRecentSeries": "Seneste serie",
|
"LabelRecentSeries": "Seneste serier",
|
||||||
"LabelRecentlyAdded": "Senest tilføjet",
|
"LabelRecentlyAdded": "Senest tilføjet",
|
||||||
"LabelRecommended": "Anbefalet",
|
"LabelRecommended": "Anbefalet",
|
||||||
"LabelReleaseDate": "Udgivelsesdato",
|
"LabelReleaseDate": "Udgivelsesdato",
|
||||||
@@ -604,10 +617,8 @@
|
|||||||
"PlaceholderNewPlaylist": "Nyt afspilningslistnavn",
|
"PlaceholderNewPlaylist": "Nyt afspilningslistnavn",
|
||||||
"PlaceholderSearch": "Søg..",
|
"PlaceholderSearch": "Søg..",
|
||||||
"PlaceholderSearchEpisode": "Søg efter episode..",
|
"PlaceholderSearchEpisode": "Søg efter episode..",
|
||||||
"ToastAccountUpdateFailed": "Mislykkedes opdatering af konto",
|
|
||||||
"ToastAccountUpdateSuccess": "Konto opdateret",
|
"ToastAccountUpdateSuccess": "Konto opdateret",
|
||||||
"ToastAuthorImageRemoveSuccess": "Forfatterbillede fjernet",
|
"ToastAuthorImageRemoveSuccess": "Forfatterbillede fjernet",
|
||||||
"ToastAuthorUpdateFailed": "Mislykkedes opdatering af forfatter",
|
|
||||||
"ToastAuthorUpdateMerged": "Forfatter fusioneret",
|
"ToastAuthorUpdateMerged": "Forfatter fusioneret",
|
||||||
"ToastAuthorUpdateSuccess": "Forfatter opdateret",
|
"ToastAuthorUpdateSuccess": "Forfatter opdateret",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Forfatter opdateret (ingen billede fundet)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Forfatter opdateret (ingen billede fundet)",
|
||||||
@@ -623,17 +634,13 @@
|
|||||||
"ToastBookmarkCreateFailed": "Mislykkedes oprettelse af bogmærke",
|
"ToastBookmarkCreateFailed": "Mislykkedes oprettelse af bogmærke",
|
||||||
"ToastBookmarkCreateSuccess": "Bogmærke tilføjet",
|
"ToastBookmarkCreateSuccess": "Bogmærke tilføjet",
|
||||||
"ToastBookmarkRemoveSuccess": "Bogmærke fjernet",
|
"ToastBookmarkRemoveSuccess": "Bogmærke fjernet",
|
||||||
"ToastBookmarkUpdateFailed": "Mislykkedes opdatering af bogmærke",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Bogmærke opdateret",
|
"ToastBookmarkUpdateSuccess": "Bogmærke opdateret",
|
||||||
"ToastChaptersHaveErrors": "Kapitler har fejl",
|
"ToastChaptersHaveErrors": "Kapitler har fejl",
|
||||||
"ToastChaptersMustHaveTitles": "Kapitler skal have titler",
|
"ToastChaptersMustHaveTitles": "Kapitler skal have titler",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Element(er) fjernet fra samlingen",
|
"ToastCollectionItemsRemoveSuccess": "Element(er) fjernet fra samlingen",
|
||||||
"ToastCollectionRemoveSuccess": "Samling fjernet",
|
"ToastCollectionRemoveSuccess": "Samling fjernet",
|
||||||
"ToastCollectionUpdateFailed": "Mislykkedes opdatering af samling",
|
|
||||||
"ToastCollectionUpdateSuccess": "Samling opdateret",
|
"ToastCollectionUpdateSuccess": "Samling opdateret",
|
||||||
"ToastItemCoverUpdateFailed": "Mislykkedes opdatering af varens omslag",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Varens omslag opdateret",
|
"ToastItemCoverUpdateSuccess": "Varens omslag opdateret",
|
||||||
"ToastItemDetailsUpdateFailed": "Mislykkedes opdatering af varedetaljer",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Varedetaljer opdateret",
|
"ToastItemDetailsUpdateSuccess": "Varedetaljer opdateret",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Mislykkedes markering som afsluttet",
|
"ToastItemMarkedAsFinishedFailed": "Mislykkedes markering som afsluttet",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Vare markeret som afsluttet",
|
"ToastItemMarkedAsFinishedSuccess": "Vare markeret som afsluttet",
|
||||||
@@ -645,12 +652,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Bibliotek slettet",
|
"ToastLibraryDeleteSuccess": "Bibliotek slettet",
|
||||||
"ToastLibraryScanFailedToStart": "Mislykkedes start af skanning",
|
"ToastLibraryScanFailedToStart": "Mislykkedes start af skanning",
|
||||||
"ToastLibraryScanStarted": "Biblioteksskanning startet",
|
"ToastLibraryScanStarted": "Biblioteksskanning startet",
|
||||||
"ToastLibraryUpdateFailed": "Mislykkedes opdatering af bibliotek",
|
|
||||||
"ToastLibraryUpdateSuccess": "Bibliotek \"{0}\" opdateret",
|
"ToastLibraryUpdateSuccess": "Bibliotek \"{0}\" opdateret",
|
||||||
"ToastPlaylistCreateFailed": "Mislykkedes oprettelse af afspilningsliste",
|
"ToastPlaylistCreateFailed": "Mislykkedes oprettelse af afspilningsliste",
|
||||||
"ToastPlaylistCreateSuccess": "Afspilningsliste oprettet",
|
"ToastPlaylistCreateSuccess": "Afspilningsliste oprettet",
|
||||||
"ToastPlaylistRemoveSuccess": "Afspilningsliste fjernet",
|
"ToastPlaylistRemoveSuccess": "Afspilningsliste fjernet",
|
||||||
"ToastPlaylistUpdateFailed": "Mislykkedes opdatering af afspilningsliste",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Afspilningsliste opdateret",
|
"ToastPlaylistUpdateSuccess": "Afspilningsliste opdateret",
|
||||||
"ToastPodcastCreateFailed": "Mislykkedes oprettelse af podcast",
|
"ToastPodcastCreateFailed": "Mislykkedes oprettelse af podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast oprettet med succes",
|
"ToastPodcastCreateSuccess": "Podcast oprettet med succes",
|
||||||
|
|||||||
+67
-58
@@ -19,7 +19,7 @@
|
|||||||
"ButtonChooseFiles": "Wähle eine Datei",
|
"ButtonChooseFiles": "Wähle eine Datei",
|
||||||
"ButtonClearFilter": "Filter löschen",
|
"ButtonClearFilter": "Filter löschen",
|
||||||
"ButtonCloseFeed": "Feed schließen",
|
"ButtonCloseFeed": "Feed schließen",
|
||||||
"ButtonCloseSession": "Offene Session schließen",
|
"ButtonCloseSession": "Offene Sitzung schließen",
|
||||||
"ButtonCollections": "Sammlungen",
|
"ButtonCollections": "Sammlungen",
|
||||||
"ButtonConfigureScanner": "Scannereinstellungen",
|
"ButtonConfigureScanner": "Scannereinstellungen",
|
||||||
"ButtonCreate": "Erstellen",
|
"ButtonCreate": "Erstellen",
|
||||||
@@ -51,11 +51,12 @@
|
|||||||
"ButtonNext": "Vor",
|
"ButtonNext": "Vor",
|
||||||
"ButtonNextChapter": "Nächstes Kapitel",
|
"ButtonNextChapter": "Nächstes Kapitel",
|
||||||
"ButtonNextItemInQueue": "Das nächste Element in der Warteschlange",
|
"ButtonNextItemInQueue": "Das nächste Element in der Warteschlange",
|
||||||
"ButtonOk": "Ok",
|
"ButtonOk": "OK",
|
||||||
"ButtonOpenFeed": "Feed öffnen",
|
"ButtonOpenFeed": "Feed öffnen",
|
||||||
"ButtonOpenManager": "Manager öffnen",
|
"ButtonOpenManager": "Manager öffnen",
|
||||||
"ButtonPause": "Pausieren",
|
"ButtonPause": "Pausieren",
|
||||||
"ButtonPlay": "Abspielen",
|
"ButtonPlay": "Abspielen",
|
||||||
|
"ButtonPlayAll": "Alles abspielen",
|
||||||
"ButtonPlaying": "Spielt",
|
"ButtonPlaying": "Spielt",
|
||||||
"ButtonPlaylists": "Wiedergabelisten",
|
"ButtonPlaylists": "Wiedergabelisten",
|
||||||
"ButtonPrevious": "Zurück",
|
"ButtonPrevious": "Zurück",
|
||||||
@@ -98,6 +99,7 @@
|
|||||||
"ButtonStats": "Statistiken",
|
"ButtonStats": "Statistiken",
|
||||||
"ButtonSubmit": "Ok",
|
"ButtonSubmit": "Ok",
|
||||||
"ButtonTest": "Test",
|
"ButtonTest": "Test",
|
||||||
|
"ButtonUnlinkOpenId": "OpenID trennen",
|
||||||
"ButtonUpload": "Hochladen",
|
"ButtonUpload": "Hochladen",
|
||||||
"ButtonUploadBackup": "Sicherung hochladen",
|
"ButtonUploadBackup": "Sicherung hochladen",
|
||||||
"ButtonUploadCover": "Titelbild hochladen",
|
"ButtonUploadCover": "Titelbild hochladen",
|
||||||
@@ -114,7 +116,7 @@
|
|||||||
"HeaderAdvanced": "Erweitert",
|
"HeaderAdvanced": "Erweitert",
|
||||||
"HeaderAppriseNotificationSettings": "Apprise Benachrichtigungseinstellungen",
|
"HeaderAppriseNotificationSettings": "Apprise Benachrichtigungseinstellungen",
|
||||||
"HeaderAudioTracks": "Audiodateien",
|
"HeaderAudioTracks": "Audiodateien",
|
||||||
"HeaderAudiobookTools": "Hörbuch-Dateiverwaltungstools",
|
"HeaderAudiobookTools": "Hörbuch-Dateiverwaltungswerkzeuge",
|
||||||
"HeaderAuthentication": "Authentifizierung",
|
"HeaderAuthentication": "Authentifizierung",
|
||||||
"HeaderBackups": "Sicherungen",
|
"HeaderBackups": "Sicherungen",
|
||||||
"HeaderChangePassword": "Passwort ändern",
|
"HeaderChangePassword": "Passwort ändern",
|
||||||
@@ -124,13 +126,13 @@
|
|||||||
"HeaderCollectionItems": "Sammlungseinträge",
|
"HeaderCollectionItems": "Sammlungseinträge",
|
||||||
"HeaderCover": "Titelbild",
|
"HeaderCover": "Titelbild",
|
||||||
"HeaderCurrentDownloads": "Aktuelle Downloads",
|
"HeaderCurrentDownloads": "Aktuelle Downloads",
|
||||||
"HeaderCustomMessageOnLogin": "Benutzerdefinierte Nachricht für den Login",
|
"HeaderCustomMessageOnLogin": "Benutzerdefinierte Nachricht für die Anmeldung",
|
||||||
"HeaderCustomMetadataProviders": "Benutzerdefinierte Metadata Anbieter",
|
"HeaderCustomMetadataProviders": "Benutzerdefinierte Metadatenanbieter",
|
||||||
"HeaderDetails": "Details",
|
"HeaderDetails": "Details",
|
||||||
"HeaderDownloadQueue": "Download Warteschlange",
|
"HeaderDownloadQueue": "Download Warteschlange",
|
||||||
"HeaderEbookFiles": "E-Buch-Dateien",
|
"HeaderEbookFiles": "E-Buch-Dateien",
|
||||||
"HeaderEmail": "Email",
|
"HeaderEmail": "E-Mail",
|
||||||
"HeaderEmailSettings": "Email Einstellungen",
|
"HeaderEmailSettings": "E-Mail-Einstellungen",
|
||||||
"HeaderEpisodes": "Episoden",
|
"HeaderEpisodes": "Episoden",
|
||||||
"HeaderEreaderDevices": "E-Reader Geräte",
|
"HeaderEreaderDevices": "E-Reader Geräte",
|
||||||
"HeaderEreaderSettings": "Einstellungen zum Lesen",
|
"HeaderEreaderSettings": "Einstellungen zum Lesen",
|
||||||
@@ -157,12 +159,12 @@
|
|||||||
"HeaderNewAccount": "Neues Konto",
|
"HeaderNewAccount": "Neues Konto",
|
||||||
"HeaderNewLibrary": "Neue Bibliothek",
|
"HeaderNewLibrary": "Neue Bibliothek",
|
||||||
"HeaderNotificationCreate": "Benachrichtigung erstellen",
|
"HeaderNotificationCreate": "Benachrichtigung erstellen",
|
||||||
"HeaderNotificationUpdate": "Benachrichtigung updaten",
|
"HeaderNotificationUpdate": "Benachrichtigung bearbeiten",
|
||||||
"HeaderNotifications": "Benachrichtigungen",
|
"HeaderNotifications": "Benachrichtigungen",
|
||||||
"HeaderOpenIDConnectAuthentication": "OpenID Connect Authentifizierung",
|
"HeaderOpenIDConnectAuthentication": "OpenID Connect Authentifizierung",
|
||||||
"HeaderOpenRSSFeed": "RSS-Feed öffnen",
|
"HeaderOpenRSSFeed": "RSS-Feed öffnen",
|
||||||
"HeaderOtherFiles": "Sonstige Dateien",
|
"HeaderOtherFiles": "Sonstige Dateien",
|
||||||
"HeaderPasswordAuthentication": "Passwort Authentifizierung",
|
"HeaderPasswordAuthentication": "Passwortauthentifizierung",
|
||||||
"HeaderPermissions": "Berechtigungen",
|
"HeaderPermissions": "Berechtigungen",
|
||||||
"HeaderPlayerQueue": "Player Warteschlange",
|
"HeaderPlayerQueue": "Player Warteschlange",
|
||||||
"HeaderPlayerSettings": "Player Einstellungen",
|
"HeaderPlayerSettings": "Player Einstellungen",
|
||||||
@@ -244,7 +246,7 @@
|
|||||||
"LabelBackupsNumberToKeepHelp": "Es wird immer nur 1 Sicherung auf einmal entfernt. Wenn du bereits mehrere Sicherungen als die definierte max. Anzahl hast, solltest du diese manuell entfernen.",
|
"LabelBackupsNumberToKeepHelp": "Es wird immer nur 1 Sicherung auf einmal entfernt. Wenn du bereits mehrere Sicherungen als die definierte max. Anzahl hast, solltest du diese manuell entfernen.",
|
||||||
"LabelBitrate": "Bitrate",
|
"LabelBitrate": "Bitrate",
|
||||||
"LabelBooks": "Bücher",
|
"LabelBooks": "Bücher",
|
||||||
"LabelButtonText": "Button Text",
|
"LabelButtonText": "Knopftext",
|
||||||
"LabelByAuthor": "von {0}",
|
"LabelByAuthor": "von {0}",
|
||||||
"LabelChangePassword": "Passwort ändern",
|
"LabelChangePassword": "Passwort ändern",
|
||||||
"LabelChannels": "Kanäle",
|
"LabelChannels": "Kanäle",
|
||||||
@@ -292,13 +294,13 @@
|
|||||||
"LabelEbook": "E-Buch",
|
"LabelEbook": "E-Buch",
|
||||||
"LabelEbooks": "E-Bücher",
|
"LabelEbooks": "E-Bücher",
|
||||||
"LabelEdit": "Bearbeiten",
|
"LabelEdit": "Bearbeiten",
|
||||||
"LabelEmail": "Email",
|
"LabelEmail": "E-Mail",
|
||||||
"LabelEmailSettingsFromAddress": "Von Adresse",
|
"LabelEmailSettingsFromAddress": "Sender",
|
||||||
"LabelEmailSettingsRejectUnauthorized": "Nicht autorisierte Zertifikate ablehnen",
|
"LabelEmailSettingsRejectUnauthorized": "Nicht autorisierte Zertifikate ablehnen",
|
||||||
"LabelEmailSettingsRejectUnauthorizedHelp": "Durch das Deaktivieren der SSL-Zertifikatsüberprüfung kann deine Verbindung Sicherheitsrisiken wie Man-in-the-Middle-Angriffen ausgesetzt sein. Deaktiviere diese Option nur, wenn due die Auswirkungen verstehst und dem Mailserver vertraust, mit dem eine Verbindung hergestellt wird.",
|
"LabelEmailSettingsRejectUnauthorizedHelp": "Durch das Deaktivieren der SSL-Zertifikatsüberprüfung kann deine Verbindung Sicherheitsrisiken wie Man-in-the-Middle-Angriffen ausgesetzt sein. Deaktiviere diese Option nur, wenn due die Auswirkungen verstehst und dem E-Mail-Server vertraust, mit dem eine Verbindung hergestellt wird.",
|
||||||
"LabelEmailSettingsSecure": "Sicher",
|
"LabelEmailSettingsSecure": "Sicher",
|
||||||
"LabelEmailSettingsSecureHelp": "Wenn \"an\", verwendet die Verbindung TLS, wenn du eine Verbindung zum Server herstellst. Bei \"aus\" wird TLS verwendet, wenn der Server die STARTTLS-Erweiterung unterstützt. In den meisten Fällen solltest du diesen Wert auf \"an\" schalten, wenn du eine Verbindung zu Port 465 herstellst. Für Port 587 oder 25 behalte den Wert \"aus\" bei. (von nodemailer.com/smtp/#authentication)",
|
"LabelEmailSettingsSecureHelp": "Wenn an, verwendet die Verbindung TLS, wenn du eine Verbindung zum Server herstellst. Bei „aus“ wird TLS verwendet, wenn der Server die STARTTLS-Erweiterung unterstützt. In den meisten Fällen solltest du diesen Wert auf „an“ schalten, wenn du eine Verbindung zu Port 465 herstellst. Für Port 587 oder 25 behalte den Wert „aus“ bei. (von nodemailer.com/smtp/#authentication)",
|
||||||
"LabelEmailSettingsTestAddress": "Test Adresse",
|
"LabelEmailSettingsTestAddress": "Test-Adresse",
|
||||||
"LabelEmbeddedCover": "Eingebettetes Cover",
|
"LabelEmbeddedCover": "Eingebettetes Cover",
|
||||||
"LabelEnable": "Aktivieren",
|
"LabelEnable": "Aktivieren",
|
||||||
"LabelEnd": "Ende",
|
"LabelEnd": "Ende",
|
||||||
@@ -314,7 +316,7 @@
|
|||||||
"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",
|
||||||
"LabelFeedURL": "Feed URL",
|
"LabelFeedURL": "Feed-URL",
|
||||||
"LabelFetchingMetadata": "Abholen der Metadaten",
|
"LabelFetchingMetadata": "Abholen der Metadaten",
|
||||||
"LabelFile": "Datei",
|
"LabelFile": "Datei",
|
||||||
"LabelFileBirthtime": "Datei erstellt",
|
"LabelFileBirthtime": "Datei erstellt",
|
||||||
@@ -337,11 +339,11 @@
|
|||||||
"LabelGenre": "Kategorie",
|
"LabelGenre": "Kategorie",
|
||||||
"LabelGenres": "Kategorien",
|
"LabelGenres": "Kategorien",
|
||||||
"LabelHardDeleteFile": "Datei dauerhaft löschen",
|
"LabelHardDeleteFile": "Datei dauerhaft löschen",
|
||||||
"LabelHasEbook": "E-Book verfügbar",
|
"LabelHasEbook": "E-Buch verfügbar",
|
||||||
"LabelHasSupplementaryEbook": "Ergänzendes E-Book verfügbar",
|
"LabelHasSupplementaryEbook": "Ergänzendes E-Buch verfügbar",
|
||||||
"LabelHideSubtitles": "Untertitel ausblenden",
|
"LabelHideSubtitles": "Untertitel ausblenden",
|
||||||
"LabelHighestPriority": "Höchste Priorität",
|
"LabelHighestPriority": "Höchste Priorität",
|
||||||
"LabelHost": "Host",
|
"LabelHost": "Anbieter",
|
||||||
"LabelHour": "Stunde",
|
"LabelHour": "Stunde",
|
||||||
"LabelHours": "Stunden",
|
"LabelHours": "Stunden",
|
||||||
"LabelIcon": "Symbol",
|
"LabelIcon": "Symbol",
|
||||||
@@ -370,13 +372,13 @@
|
|||||||
"LabelLastSeen": "Zuletzt gesehen",
|
"LabelLastSeen": "Zuletzt gesehen",
|
||||||
"LabelLastTime": "Letztes Mal",
|
"LabelLastTime": "Letztes Mal",
|
||||||
"LabelLastUpdate": "Letzte Aktualisierung",
|
"LabelLastUpdate": "Letzte Aktualisierung",
|
||||||
"LabelLayout": "Layout",
|
"LabelLayout": "Ansicht",
|
||||||
"LabelLayoutSinglePage": "Eine Seite",
|
"LabelLayoutSinglePage": "Eine Seite",
|
||||||
"LabelLayoutSplitPage": "Geteilte Seite",
|
"LabelLayoutSplitPage": "Geteilte Seite",
|
||||||
"LabelLess": "Weniger",
|
"LabelLess": "Weniger",
|
||||||
"LabelLibrariesAccessibleToUser": "Für Benutzer zugängliche Bibliotheken",
|
"LabelLibrariesAccessibleToUser": "Für Benutzer zugängliche Bibliotheken",
|
||||||
"LabelLibrary": "Bibliothek",
|
"LabelLibrary": "Bibliothek",
|
||||||
"LabelLibraryFilterSublistEmpty": "Nr. {0}",
|
"LabelLibraryFilterSublistEmpty": "Keine {0}",
|
||||||
"LabelLibraryItem": "Bibliothekseintrag",
|
"LabelLibraryItem": "Bibliothekseintrag",
|
||||||
"LabelLibraryName": "Bibliotheksname",
|
"LabelLibraryName": "Bibliotheksname",
|
||||||
"LabelLimit": "Begrenzung",
|
"LabelLimit": "Begrenzung",
|
||||||
@@ -398,10 +400,10 @@
|
|||||||
"LabelMinute": "Minute",
|
"LabelMinute": "Minute",
|
||||||
"LabelMinutes": "Minuten",
|
"LabelMinutes": "Minuten",
|
||||||
"LabelMissing": "Fehlend",
|
"LabelMissing": "Fehlend",
|
||||||
"LabelMissingEbook": "E-Book fehlt",
|
"LabelMissingEbook": "E-Buch fehlt",
|
||||||
"LabelMissingSupplementaryEbook": "Ergänzendes E-Book fehlt",
|
"LabelMissingSupplementaryEbook": "Ergänzendes E-Buch fehlt",
|
||||||
"LabelMobileRedirectURIs": "Erlaubte Weiterleitungs-URIs für die mobile App",
|
"LabelMobileRedirectURIs": "Erlaubte Weiterleitungs-URIs für die mobile App",
|
||||||
"LabelMobileRedirectURIsDescription": "Dies ist eine Whitelist gültiger Umleitungs-URIs für mobile Apps. Der Standardwert ist <code>audiobookshelf://oauth</code>, den du entfernen oder durch zusätzliche URIs für die Integration von Drittanbieter-Apps ergänzen kannst. Die Verwendung eines Sternchens (<code>*</code>) als alleiniger Eintrag erlaubt jede URI.",
|
"LabelMobileRedirectURIsDescription": "Dies ist eine weiße Liste gültiger Umleitungs-URIs für mobile Apps. Der Standardwert ist <code>audiobookshelf://oauth</code>, den du entfernen oder durch zusätzliche URIs für die Integration von Drittanbieter-Apps ergänzen kannst. Die Verwendung eines Sternchens (<code>*</code>) als alleiniger Eintrag erlaubt jede URI.",
|
||||||
"LabelMore": "Mehr",
|
"LabelMore": "Mehr",
|
||||||
"LabelMoreInfo": "Mehr Infos",
|
"LabelMoreInfo": "Mehr Infos",
|
||||||
"LabelName": "Name",
|
"LabelName": "Name",
|
||||||
@@ -418,7 +420,7 @@
|
|||||||
"LabelNotFinished": "Nicht beendet",
|
"LabelNotFinished": "Nicht beendet",
|
||||||
"LabelNotStarted": "Nicht begonnen",
|
"LabelNotStarted": "Nicht begonnen",
|
||||||
"LabelNotes": "Notizen",
|
"LabelNotes": "Notizen",
|
||||||
"LabelNotificationAppriseURL": "Apprise URL(s)",
|
"LabelNotificationAppriseURL": "Apprise-URL(s)",
|
||||||
"LabelNotificationAvailableVariables": "Verfügbare Variablen",
|
"LabelNotificationAvailableVariables": "Verfügbare Variablen",
|
||||||
"LabelNotificationBodyTemplate": "Textvorlage",
|
"LabelNotificationBodyTemplate": "Textvorlage",
|
||||||
"LabelNotificationEvent": "Benachrichtigungs Event",
|
"LabelNotificationEvent": "Benachrichtigungs Event",
|
||||||
@@ -456,7 +458,7 @@
|
|||||||
"LabelPort": "Port",
|
"LabelPort": "Port",
|
||||||
"LabelPrefixesToIgnore": "Zu ignorierende(s) Vorwort(e) (Groß- und Kleinschreibung wird nicht berücksichtigt)",
|
"LabelPrefixesToIgnore": "Zu ignorierende(s) Vorwort(e) (Groß- und Kleinschreibung wird nicht berücksichtigt)",
|
||||||
"LabelPreventIndexing": "Verhindere, dass dein Feed von iTunes- und Google-Podcast-Verzeichnissen indiziert wird",
|
"LabelPreventIndexing": "Verhindere, dass dein Feed von iTunes- und Google-Podcast-Verzeichnissen indiziert wird",
|
||||||
"LabelPrimaryEbook": "Primäres E-Book",
|
"LabelPrimaryEbook": "Primäres E-Buch",
|
||||||
"LabelProgress": "Fortschritt",
|
"LabelProgress": "Fortschritt",
|
||||||
"LabelProvider": "Anbieter",
|
"LabelProvider": "Anbieter",
|
||||||
"LabelProviderAuthorizationValue": "Autorisierungsheader-Wert",
|
"LabelProviderAuthorizationValue": "Autorisierungsheader-Wert",
|
||||||
@@ -467,15 +469,15 @@
|
|||||||
"LabelPublishers": "Herausgeber",
|
"LabelPublishers": "Herausgeber",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Benutzerdefinierte Eigentümer-E-Mail",
|
"LabelRSSFeedCustomOwnerEmail": "Benutzerdefinierte Eigentümer-E-Mail",
|
||||||
"LabelRSSFeedCustomOwnerName": "Benutzerdefinierter Name des Eigentümers",
|
"LabelRSSFeedCustomOwnerName": "Benutzerdefinierter Name des Eigentümers",
|
||||||
"LabelRSSFeedOpen": "RSS Feed Offen",
|
"LabelRSSFeedOpen": "RSS Feed offen",
|
||||||
"LabelRSSFeedPreventIndexing": "Indizierung verhindern",
|
"LabelRSSFeedPreventIndexing": "Indizierung verhindern",
|
||||||
"LabelRSSFeedSlug": "RSS-Feed-Schlagwort",
|
"LabelRSSFeedSlug": "RSS-Feed-Schlagwort",
|
||||||
"LabelRSSFeedURL": "RSS Feed URL",
|
"LabelRSSFeedURL": "RSS-Feed-URL",
|
||||||
"LabelRandomly": "Zufällig",
|
"LabelRandomly": "Zufällig",
|
||||||
"LabelReAddSeriesToContinueListening": "Serien erneut zur Fortsetzungsliste hinzufügen",
|
"LabelReAddSeriesToContinueListening": "Serien erneut zur Fortsetzungsliste hinzufügen",
|
||||||
"LabelRead": "Lesen",
|
"LabelRead": "Lesen",
|
||||||
"LabelReadAgain": "Noch einmal Lesen",
|
"LabelReadAgain": "Noch einmal Lesen",
|
||||||
"LabelReadEbookWithoutProgress": "E-Book lesen und Fortschritt verwerfen",
|
"LabelReadEbookWithoutProgress": "E-Buch lesen und Fortschritt verwerfen",
|
||||||
"LabelRecentSeries": "Aktuelle Serien",
|
"LabelRecentSeries": "Aktuelle Serien",
|
||||||
"LabelRecentlyAdded": "Kürzlich hinzugefügt",
|
"LabelRecentlyAdded": "Kürzlich hinzugefügt",
|
||||||
"LabelRecommended": "Empfohlen",
|
"LabelRecommended": "Empfohlen",
|
||||||
@@ -492,7 +494,7 @@
|
|||||||
"LabelSelectAllEpisodes": "Alle Episoden auswählen",
|
"LabelSelectAllEpisodes": "Alle Episoden auswählen",
|
||||||
"LabelSelectEpisodesShowing": "{0} ausgewählte Episoden werden angezeigt",
|
"LabelSelectEpisodesShowing": "{0} ausgewählte Episoden werden angezeigt",
|
||||||
"LabelSelectUsers": "Benutzer auswählen",
|
"LabelSelectUsers": "Benutzer auswählen",
|
||||||
"LabelSendEbookToDevice": "E-Book senden an...",
|
"LabelSendEbookToDevice": "E-Buch senden an …",
|
||||||
"LabelSequence": "Reihenfolge",
|
"LabelSequence": "Reihenfolge",
|
||||||
"LabelSeries": "Serien",
|
"LabelSeries": "Serien",
|
||||||
"LabelSeriesName": "Serienname",
|
"LabelSeriesName": "Serienname",
|
||||||
@@ -501,7 +503,7 @@
|
|||||||
"LabelSetEbookAsPrimary": "Als Hauptbuch setzen",
|
"LabelSetEbookAsPrimary": "Als Hauptbuch setzen",
|
||||||
"LabelSetEbookAsSupplementary": "Als Ergänzung setzen",
|
"LabelSetEbookAsSupplementary": "Als Ergänzung setzen",
|
||||||
"LabelSettingsAudiobooksOnly": "Nur Hörbücher",
|
"LabelSettingsAudiobooksOnly": "Nur Hörbücher",
|
||||||
"LabelSettingsAudiobooksOnlyHelp": "Wenn du diese Einstellung aktivierst, werden E-Book-Dateien ignoriert, es sei denn, sie befinden sich in einem Hörbuchordner. In diesem Fall werden sie als zusätzliche E-Books festgelegt",
|
"LabelSettingsAudiobooksOnlyHelp": "Wenn du diese Einstellung aktivierst, werden E-Buch-Dateien ignoriert, es sei denn, sie befinden sich in einem Hörbuchordner. In diesem Fall werden sie als zusätzliche E-Bücher festgelegt",
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeumorphes Design mit Holzeinlegeböden",
|
"LabelSettingsBookshelfViewHelp": "Skeumorphes Design mit Holzeinlegeböden",
|
||||||
"LabelSettingsChromecastSupport": "Chromecastunterstützung",
|
"LabelSettingsChromecastSupport": "Chromecastunterstützung",
|
||||||
"LabelSettingsDateFormat": "Datumsformat",
|
"LabelSettingsDateFormat": "Datumsformat",
|
||||||
@@ -565,7 +567,7 @@
|
|||||||
"LabelStatsMinutesListening": "Gehörte Minuten",
|
"LabelStatsMinutesListening": "Gehörte Minuten",
|
||||||
"LabelStatsOverallDays": "Gesamte Tage",
|
"LabelStatsOverallDays": "Gesamte Tage",
|
||||||
"LabelStatsOverallHours": "Gesamte Stunden",
|
"LabelStatsOverallHours": "Gesamte Stunden",
|
||||||
"LabelStatsWeekListening": "Gehörte Wochen",
|
"LabelStatsWeekListening": "Wochenhördauer",
|
||||||
"LabelSubtitle": "Untertitel",
|
"LabelSubtitle": "Untertitel",
|
||||||
"LabelSupportedFileTypes": "Unterstützte Dateitypen",
|
"LabelSupportedFileTypes": "Unterstützte Dateitypen",
|
||||||
"LabelTag": "Schlagwort",
|
"LabelTag": "Schlagwort",
|
||||||
@@ -594,7 +596,7 @@
|
|||||||
"LabelToolsEmbedMetadataDescription": "Bettet die Metadaten einschließlich des Titelbildes und der Kapitel in die Audiodatein ein.",
|
"LabelToolsEmbedMetadataDescription": "Bettet die Metadaten einschließlich des Titelbildes und der Kapitel in die Audiodatein ein.",
|
||||||
"LabelToolsMakeM4b": "M4B-Datei erstellen",
|
"LabelToolsMakeM4b": "M4B-Datei erstellen",
|
||||||
"LabelToolsMakeM4bDescription": "Erstellt eine M4B-Datei (Endung \".m4b\") welche mehrere mp3-Dateien in einer einzigen Datei inkl. derer Metadaten (Beschreibung, Titelbild, Kapitel, ...) zusammenfasst. M4B-Datei können darüber hinaus Lesezeichen speichern und mit einem Abspielschutz (Passwort) versehen werden.",
|
"LabelToolsMakeM4bDescription": "Erstellt eine M4B-Datei (Endung \".m4b\") welche mehrere mp3-Dateien in einer einzigen Datei inkl. derer Metadaten (Beschreibung, Titelbild, Kapitel, ...) zusammenfasst. M4B-Datei können darüber hinaus Lesezeichen speichern und mit einem Abspielschutz (Passwort) versehen werden.",
|
||||||
"LabelToolsSplitM4b": "M4B in MP3's aufteilen",
|
"LabelToolsSplitM4b": "M4B in MP3s aufteilen",
|
||||||
"LabelToolsSplitM4bDescription": "Erstellt aus einer mit Metadaten und nach Kapiteln aufgeteilten M4B-Datei seperate MP3's mit eingebetteten Metadaten, Coverbild und Kapiteln.",
|
"LabelToolsSplitM4bDescription": "Erstellt aus einer mit Metadaten und nach Kapiteln aufgeteilten M4B-Datei seperate MP3's mit eingebetteten Metadaten, Coverbild und Kapiteln.",
|
||||||
"LabelTotalDuration": "Gesamtdauer",
|
"LabelTotalDuration": "Gesamtdauer",
|
||||||
"LabelTotalTimeListened": "Gehörte Gesamtzeit",
|
"LabelTotalTimeListened": "Gehörte Gesamtzeit",
|
||||||
@@ -657,7 +659,7 @@
|
|||||||
"MessageCheckingCron": "Überprüfe Cron...",
|
"MessageCheckingCron": "Überprüfe Cron...",
|
||||||
"MessageConfirmCloseFeed": "Feed wird geschlossen! Bist du dir sicher?",
|
"MessageConfirmCloseFeed": "Feed wird geschlossen! Bist du dir sicher?",
|
||||||
"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 E-Reader-Gerä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?",
|
||||||
"MessageConfirmDeleteLibrary": "Bibliothek \"{0}\" wird dauerhaft gelöscht! Bist du dir sicher?",
|
"MessageConfirmDeleteLibrary": "Bibliothek \"{0}\" wird dauerhaft gelöscht! Bist du dir sicher?",
|
||||||
"MessageConfirmDeleteLibraryItem": "Bibliothekselement wird aus der Datenbank + Festplatte gelöscht? Bist du dir sicher?",
|
"MessageConfirmDeleteLibraryItem": "Bibliothekselement wird aus der Datenbank + Festplatte gelöscht? Bist du dir sicher?",
|
||||||
@@ -692,14 +694,14 @@
|
|||||||
"MessageConfirmRenameTagMergeNote": "Hinweis: Tag existiert bereits -> Tags werden zusammengelegt.",
|
"MessageConfirmRenameTagMergeNote": "Hinweis: Tag existiert bereits -> Tags werden zusammengelegt.",
|
||||||
"MessageConfirmRenameTagWarning": "Warnung! Ein ähnlicher Tag mit einem anderen Wortlaut existiert bereits: \"{0}\".",
|
"MessageConfirmRenameTagWarning": "Warnung! Ein ähnlicher Tag mit einem anderen Wortlaut existiert bereits: \"{0}\".",
|
||||||
"MessageConfirmResetProgress": "Möchtest du Ihren Fortschritt wirklich zurücksetzen?",
|
"MessageConfirmResetProgress": "Möchtest du Ihren Fortschritt wirklich zurücksetzen?",
|
||||||
"MessageConfirmSendEbookToDevice": "{0} E-Book \"{1}\" wird auf das Gerät \"{2}\" gesendet! Bist du dir sicher?",
|
"MessageConfirmSendEbookToDevice": "{0} E-Buch „{1}“ wird auf das Gerät „{2}“ gesendet! Bist du dir sicher?",
|
||||||
"MessageConfirmUnlinkOpenId": "Möchtest du die Verknüpfung dieses Benutzers mit OpenID wirklich löschen?",
|
"MessageConfirmUnlinkOpenId": "Möchtest du die Verknüpfung dieses Benutzers mit OpenID wirklich löschen?",
|
||||||
"MessageDownloadingEpisode": "Episode wird heruntergeladen",
|
"MessageDownloadingEpisode": "Episode wird heruntergeladen",
|
||||||
"MessageDragFilesIntoTrackOrder": "Verschiebe die Dateien in die richtige Reihenfolge",
|
"MessageDragFilesIntoTrackOrder": "Verschiebe die Dateien in die richtige Reihenfolge",
|
||||||
"MessageEmbedFailed": "Einbetten fehlgeschlagen!",
|
"MessageEmbedFailed": "Einbetten fehlgeschlagen!",
|
||||||
"MessageEmbedFinished": "Einbettung abgeschlossen!",
|
"MessageEmbedFinished": "Einbettung abgeschlossen!",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} Episode(n) in der Warteschlange zum Herunterladen",
|
"MessageEpisodesQueuedForDownload": "{0} Episode(n) in der Warteschlange zum Herunterladen",
|
||||||
"MessageEreaderDevices": "Um die Zustellung von E-Books sicherzustellen, musst du eventuell die oben genannte E-Mail-Adresse als gültigen Absender für jedes unten aufgeführte Gerät hinzufügen.",
|
"MessageEreaderDevices": "Um die Zustellung von E-Büchern sicherzustellen, musst du eventuell die oben genannte E-Mail-Adresse als gültigen Absender für jedes unten aufgeführte Gerät hinzufügen.",
|
||||||
"MessageFeedURLWillBe": "Feed-URL wird {0} sein",
|
"MessageFeedURLWillBe": "Feed-URL wird {0} sein",
|
||||||
"MessageFetching": "Wird abgerufen …",
|
"MessageFetching": "Wird abgerufen …",
|
||||||
"MessageForceReScanDescription": "Durchsucht alle Dateien erneut, wie bei einem frischen Scan. ID3-Tags von Audiodateien, OPF-Dateien und Textdateien werden neu durchsucht.",
|
"MessageForceReScanDescription": "Durchsucht alle Dateien erneut, wie bei einem frischen Scan. ID3-Tags von Audiodateien, OPF-Dateien und Textdateien werden neu durchsucht.",
|
||||||
@@ -775,6 +777,31 @@
|
|||||||
"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.",
|
||||||
"MessageStartPlaybackAtTime": "Start der Wiedergabe für \"{0}\" bei {1}?",
|
"MessageStartPlaybackAtTime": "Start der Wiedergabe für \"{0}\" bei {1}?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "Die Audiodatei \"{0}\" ist schreibgeschützt",
|
||||||
|
"MessageTaskCanceledByUser": "Aufgabe vom Benutzer abgebrochen",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "Folge \"{0}\" wird heruntergeladen",
|
||||||
|
"MessageTaskEmbeddingMetadata": "Metadaten werden eingebettet",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "Metadaten werden in Hörbuch \"{0}\" eingebettet",
|
||||||
|
"MessageTaskEncodingM4b": "M4B wird encodiert",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Hörbuch \"{0}\" wird in eine einzelne m4b Datei encodiert",
|
||||||
|
"MessageTaskFailed": "Fehlgeschlagen",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "Sicherung der Audiodatei \"{0}\" fehlgeschlagen",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Fehler beim erstellen des Cache-Verzeichnisses",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "Einbetten der Metadaten in die Datei \"{0}\" fehlgeschlagen",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "Fehler beim zusammenführen der Audiodateien",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "Fehler beim verschieben der m4b Datei",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "Fehler beim schreiben der Metadaten-Datei",
|
||||||
|
"MessageTaskNoFilesToScan": "Keine Dateien zum scannen",
|
||||||
|
"MessageTaskOpmlImportDescription": "Podcasts von {0} RSS-Feeds werden ersrtellt",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "RSS-Feed \"{0}\" wird importiert",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "Podcast Feed konnte nicht geladen werden",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "Podcast \"{0}\" wird erstellt",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "Erstellen des Podcasts fehlgeschlagen",
|
||||||
|
"MessageTaskOpmlImportFinished": "{0} Podcasts hinzugefügt",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} hinzugefügt",
|
||||||
|
"MessageTaskScanItemsMissing": "{0} fehlend",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} aktualisiert",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "Keine Änderungen nötig",
|
||||||
"MessageThinking": "Nachdenken...",
|
"MessageThinking": "Nachdenken...",
|
||||||
"MessageUploaderItemFailed": "Hochladen fehlgeschlagen",
|
"MessageUploaderItemFailed": "Hochladen fehlgeschlagen",
|
||||||
"MessageUploaderItemSuccess": "Erfolgreich hochgeladen!",
|
"MessageUploaderItemSuccess": "Erfolgreich hochgeladen!",
|
||||||
@@ -815,14 +842,12 @@
|
|||||||
"StatsTopNarrators": "TOP SPRECHER",
|
"StatsTopNarrators": "TOP SPRECHER",
|
||||||
"StatsTotalDuration": "Mit einer totalen Dauer von…",
|
"StatsTotalDuration": "Mit einer totalen Dauer von…",
|
||||||
"StatsYearInReview": "DAS JAHR IM RÜCKBLICK",
|
"StatsYearInReview": "DAS JAHR IM RÜCKBLICK",
|
||||||
"ToastAccountUpdateFailed": "Aktualisierung des Kontos fehlgeschlagen",
|
|
||||||
"ToastAccountUpdateSuccess": "Konto aktualisiert",
|
"ToastAccountUpdateSuccess": "Konto aktualisiert",
|
||||||
"ToastAppriseUrlRequired": "Eine Apprise-URL ist notwendig",
|
"ToastAppriseUrlRequired": "Eine Apprise-URL ist notwendig",
|
||||||
"ToastAuthorImageRemoveSuccess": "Autorenbild entfernt",
|
"ToastAuthorImageRemoveSuccess": "Autorenbild entfernt",
|
||||||
"ToastAuthorNotFound": "Autor \"{0}\" nicht gefunden",
|
"ToastAuthorNotFound": "Autor \"{0}\" nicht gefunden",
|
||||||
"ToastAuthorRemoveSuccess": "Autor entfernt",
|
"ToastAuthorRemoveSuccess": "Autor entfernt",
|
||||||
"ToastAuthorSearchNotFound": "Autor nicht gefunden",
|
"ToastAuthorSearchNotFound": "Autor nicht gefunden",
|
||||||
"ToastAuthorUpdateFailed": "Aktualisierung des Autors fehlgeschlagen",
|
|
||||||
"ToastAuthorUpdateMerged": "Autor zusammengeführt",
|
"ToastAuthorUpdateMerged": "Autor zusammengeführt",
|
||||||
"ToastAuthorUpdateSuccess": "Autor aktualisiert",
|
"ToastAuthorUpdateSuccess": "Autor aktualisiert",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autor aktualisiert (kein Bild gefunden)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autor aktualisiert (kein Bild gefunden)",
|
||||||
@@ -833,7 +858,6 @@
|
|||||||
"ToastBackupDeleteSuccess": "Sicherung gelöscht",
|
"ToastBackupDeleteSuccess": "Sicherung gelöscht",
|
||||||
"ToastBackupInvalidMaxKeep": "Ungültige Anzahl aufzubewahrender Backups",
|
"ToastBackupInvalidMaxKeep": "Ungültige Anzahl aufzubewahrender Backups",
|
||||||
"ToastBackupInvalidMaxSize": "Ungültige maximale Backupgröße",
|
"ToastBackupInvalidMaxSize": "Ungültige maximale Backupgröße",
|
||||||
"ToastBackupPathUpdateFailed": "Der Backuppfad konnte nicht aktualisiert werden",
|
|
||||||
"ToastBackupRestoreFailed": "Sicherung konnte nicht wiederhergestellt werden",
|
"ToastBackupRestoreFailed": "Sicherung konnte nicht wiederhergestellt werden",
|
||||||
"ToastBackupUploadFailed": "Sicherung konnte nicht hochgeladen werden",
|
"ToastBackupUploadFailed": "Sicherung konnte nicht hochgeladen werden",
|
||||||
"ToastBackupUploadSuccess": "Sicherung hochgeladen",
|
"ToastBackupUploadSuccess": "Sicherung hochgeladen",
|
||||||
@@ -844,7 +868,6 @@
|
|||||||
"ToastBookmarkCreateFailed": "Lesezeichen konnte nicht erstellt werden",
|
"ToastBookmarkCreateFailed": "Lesezeichen konnte nicht erstellt werden",
|
||||||
"ToastBookmarkCreateSuccess": "Lesezeichen hinzugefügt",
|
"ToastBookmarkCreateSuccess": "Lesezeichen hinzugefügt",
|
||||||
"ToastBookmarkRemoveSuccess": "Lesezeichen entfernt",
|
"ToastBookmarkRemoveSuccess": "Lesezeichen entfernt",
|
||||||
"ToastBookmarkUpdateFailed": "Lesezeichenaktualisierung fehlgeschlagen",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Lesezeichen aktualisiert",
|
"ToastBookmarkUpdateSuccess": "Lesezeichen aktualisiert",
|
||||||
"ToastCachePurgeFailed": "Cache leeren fehlgeschlagen",
|
"ToastCachePurgeFailed": "Cache leeren fehlgeschlagen",
|
||||||
"ToastCachePurgeSuccess": "Cache geleert",
|
"ToastCachePurgeSuccess": "Cache geleert",
|
||||||
@@ -855,7 +878,6 @@
|
|||||||
"ToastCollectionItemsAddSuccess": "Element(e) erfolgreich zur Sammlung hinzugefügt",
|
"ToastCollectionItemsAddSuccess": "Element(e) erfolgreich zur Sammlung hinzugefügt",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Medien aus der Sammlung entfernt",
|
"ToastCollectionItemsRemoveSuccess": "Medien aus der Sammlung entfernt",
|
||||||
"ToastCollectionRemoveSuccess": "Sammlung entfernt",
|
"ToastCollectionRemoveSuccess": "Sammlung entfernt",
|
||||||
"ToastCollectionUpdateFailed": "Sammlung konnte nicht aktualisiert werden",
|
|
||||||
"ToastCollectionUpdateSuccess": "Sammlung aktualisiert",
|
"ToastCollectionUpdateSuccess": "Sammlung aktualisiert",
|
||||||
"ToastCoverUpdateFailed": "Cover-Update fehlgeschlagen",
|
"ToastCoverUpdateFailed": "Cover-Update fehlgeschlagen",
|
||||||
"ToastDeleteFileFailed": "Die Datei konnte nicht gelöscht werden",
|
"ToastDeleteFileFailed": "Die Datei konnte nicht gelöscht werden",
|
||||||
@@ -863,9 +885,7 @@
|
|||||||
"ToastDeviceAddFailed": "Gerät konnte nicht hinzugefügt werden",
|
"ToastDeviceAddFailed": "Gerät konnte nicht hinzugefügt werden",
|
||||||
"ToastDeviceNameAlreadyExists": "E-Reader-Gerät mit diesem Namen existiert bereits",
|
"ToastDeviceNameAlreadyExists": "E-Reader-Gerät mit diesem Namen existiert bereits",
|
||||||
"ToastDeviceTestEmailFailed": "Senden der Test-E-Mail fehlgeschlagen",
|
"ToastDeviceTestEmailFailed": "Senden der Test-E-Mail fehlgeschlagen",
|
||||||
"ToastDeviceTestEmailSuccess": "Test-E-Mail versand",
|
"ToastDeviceTestEmailSuccess": "Test-E-Mail gesendet",
|
||||||
"ToastDeviceUpdateFailed": "Das Gerät konnte nicht aktualisiert werden",
|
|
||||||
"ToastEmailSettingsUpdateFailed": "E-Mail-Einstellungen konnten nicht aktualisiert werden",
|
|
||||||
"ToastEmailSettingsUpdateSuccess": "E-Mail-Einstellungen aktualisiert",
|
"ToastEmailSettingsUpdateSuccess": "E-Mail-Einstellungen aktualisiert",
|
||||||
"ToastEncodeCancelFailed": "Das Encoding konnte nicht abgebrochen werden",
|
"ToastEncodeCancelFailed": "Das Encoding konnte nicht abgebrochen werden",
|
||||||
"ToastEncodeCancelSucces": "Encoding abgebrochen",
|
"ToastEncodeCancelSucces": "Encoding abgebrochen",
|
||||||
@@ -874,21 +894,16 @@
|
|||||||
"ToastErrorCannotShare": "Das kann nicht nativ auf diesem Gerät freigegeben werden",
|
"ToastErrorCannotShare": "Das kann nicht nativ auf diesem Gerät freigegeben werden",
|
||||||
"ToastFailedToLoadData": "Daten laden fehlgeschlagen",
|
"ToastFailedToLoadData": "Daten laden fehlgeschlagen",
|
||||||
"ToastFailedToShare": "Fehler beim Teilen",
|
"ToastFailedToShare": "Fehler beim Teilen",
|
||||||
"ToastFailedToUpdateAccount": "Fehler beim ändern des Accounts",
|
|
||||||
"ToastFailedToUpdateUser": "Fehler beim ändern des Benutzers",
|
|
||||||
"ToastInvalidImageUrl": "Ungültiger Bild URL",
|
"ToastInvalidImageUrl": "Ungültiger Bild URL",
|
||||||
"ToastInvalidUrl": "Ungültiger URL",
|
"ToastInvalidUrl": "Ungültiger URL",
|
||||||
"ToastItemCoverUpdateFailed": "Fehler bei der Aktualisierung des Titelbildes",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Titelbild aktualisiert",
|
"ToastItemCoverUpdateSuccess": "Titelbild aktualisiert",
|
||||||
"ToastItemDeletedFailed": "Fehler beim löschen des Artikels",
|
"ToastItemDeletedFailed": "Fehler beim löschen des Artikels",
|
||||||
"ToastItemDeletedSuccess": "Artikel gelöscht",
|
"ToastItemDeletedSuccess": "Artikel gelöscht",
|
||||||
"ToastItemDetailsUpdateFailed": "Fehler bei der Aktualisierung der Artikeldetails",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Artikeldetails aktualisiert",
|
"ToastItemDetailsUpdateSuccess": "Artikeldetails aktualisiert",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Fehler bei der Markierung des Artikels als \"Beendet\"",
|
"ToastItemMarkedAsFinishedFailed": "Fehler bei der Markierung des Artikels als \"Beendet\"",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Artikel als \"Beendet\" markiert",
|
"ToastItemMarkedAsFinishedSuccess": "Artikel als \"Beendet\" markiert",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Fehler bei der Markierung des Artikels als \"Nicht Beendet\"",
|
"ToastItemMarkedAsNotFinishedFailed": "Fehler bei der Markierung des Artikels als \"Nicht Beendet\"",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Artikel als \"Nicht Beendet\" markiert",
|
"ToastItemMarkedAsNotFinishedSuccess": "Artikel als \"Nicht Beendet\" markiert",
|
||||||
"ToastItemUpdateFailed": "Fehler beim ändern des Artikels",
|
|
||||||
"ToastItemUpdateSuccess": "Artikel wurde verändert",
|
"ToastItemUpdateSuccess": "Artikel wurde verändert",
|
||||||
"ToastLibraryCreateFailed": "Bibliothek konnte nicht erstellt werden",
|
"ToastLibraryCreateFailed": "Bibliothek konnte nicht erstellt werden",
|
||||||
"ToastLibraryCreateSuccess": "Bibliothek \"{0}\" erstellt",
|
"ToastLibraryCreateSuccess": "Bibliothek \"{0}\" erstellt",
|
||||||
@@ -896,9 +911,8 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Bibliothek gelöscht",
|
"ToastLibraryDeleteSuccess": "Bibliothek gelöscht",
|
||||||
"ToastLibraryScanFailedToStart": "Scan konnte nicht gestartet werden",
|
"ToastLibraryScanFailedToStart": "Scan konnte nicht gestartet werden",
|
||||||
"ToastLibraryScanStarted": "Bibliotheksscan gestartet",
|
"ToastLibraryScanStarted": "Bibliotheksscan gestartet",
|
||||||
"ToastLibraryUpdateFailed": "Aktualisierung der Bibliothek fehlgeschlagen",
|
|
||||||
"ToastLibraryUpdateSuccess": "Bibliothek \"{0}\" aktualisiert",
|
"ToastLibraryUpdateSuccess": "Bibliothek \"{0}\" aktualisiert",
|
||||||
"ToastNameEmailRequired": "Name und Email sind erforderlich",
|
"ToastNameEmailRequired": "Name und E-Mail sind erforderlich",
|
||||||
"ToastNameRequired": "Name ist erforderlich",
|
"ToastNameRequired": "Name ist erforderlich",
|
||||||
"ToastNewUserCreatedFailed": "Fehler beim erstellen des Accounts: \"{ 0}\"",
|
"ToastNewUserCreatedFailed": "Fehler beim erstellen des Accounts: \"{ 0}\"",
|
||||||
"ToastNewUserCreatedSuccess": "Neuer Account erstellt",
|
"ToastNewUserCreatedSuccess": "Neuer Account erstellt",
|
||||||
@@ -911,16 +925,13 @@
|
|||||||
"ToastNotificationDeleteFailed": "Fehler beim löschen der Benachrichtigung",
|
"ToastNotificationDeleteFailed": "Fehler beim löschen der Benachrichtigung",
|
||||||
"ToastNotificationFailedMaximum": "Maximale Fehlversuche muss >= 0 sein",
|
"ToastNotificationFailedMaximum": "Maximale Fehlversuche muss >= 0 sein",
|
||||||
"ToastNotificationQueueMaximum": "Maximale Benachrichtigungswarteschlange muss >= 0 sein",
|
"ToastNotificationQueueMaximum": "Maximale Benachrichtigungswarteschlange muss >= 0 sein",
|
||||||
"ToastNotificationSettingsUpdateFailed": "Fehler beim ändern der Benachrichtigungseinstellungen",
|
|
||||||
"ToastNotificationSettingsUpdateSuccess": "Benachrichtigungseinstellungen geändert",
|
"ToastNotificationSettingsUpdateSuccess": "Benachrichtigungseinstellungen geändert",
|
||||||
"ToastNotificationTestTriggerFailed": "Fehler beim Auslösen der Testbenachrichtigung",
|
"ToastNotificationTestTriggerFailed": "Fehler beim Auslösen der Testbenachrichtigung",
|
||||||
"ToastNotificationTestTriggerSuccess": "Testbenachrichtigung ausgelöst",
|
"ToastNotificationTestTriggerSuccess": "Testbenachrichtigung ausgelöst",
|
||||||
"ToastNotificationUpdateFailed": "Fehler bein ändern der Benachrichtigung",
|
|
||||||
"ToastNotificationUpdateSuccess": "Benachrichtigung geändert",
|
"ToastNotificationUpdateSuccess": "Benachrichtigung geändert",
|
||||||
"ToastPlaylistCreateFailed": "Erstellen der Wiedergabeliste fehlgeschlagen",
|
"ToastPlaylistCreateFailed": "Erstellen der Wiedergabeliste fehlgeschlagen",
|
||||||
"ToastPlaylistCreateSuccess": "Wiedergabeliste erstellt",
|
"ToastPlaylistCreateSuccess": "Wiedergabeliste erstellt",
|
||||||
"ToastPlaylistRemoveSuccess": "Wiedergabeliste gelöscht",
|
"ToastPlaylistRemoveSuccess": "Wiedergabeliste gelöscht",
|
||||||
"ToastPlaylistUpdateFailed": "Aktualisieren der Wiedergabeliste fehlgeschlagen",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Wiedergabeliste aktualisiert",
|
"ToastPlaylistUpdateSuccess": "Wiedergabeliste aktualisiert",
|
||||||
"ToastPodcastCreateFailed": "Podcast konnte nicht erstellt werden",
|
"ToastPodcastCreateFailed": "Podcast konnte nicht erstellt werden",
|
||||||
"ToastPodcastCreateSuccess": "Podcast erstellt",
|
"ToastPodcastCreateSuccess": "Podcast erstellt",
|
||||||
@@ -945,11 +956,10 @@
|
|||||||
"ToastRescanUpdated": "Erneut scannen erledigt, Artikel wurde verändert",
|
"ToastRescanUpdated": "Erneut scannen erledigt, Artikel wurde verändert",
|
||||||
"ToastScanFailed": "Fehler beim scannen des Artikels der Bibliothek",
|
"ToastScanFailed": "Fehler beim scannen des Artikels der Bibliothek",
|
||||||
"ToastSelectAtLeastOneUser": "Wähle mindestens einen Benutzer aus",
|
"ToastSelectAtLeastOneUser": "Wähle mindestens einen Benutzer aus",
|
||||||
"ToastSendEbookToDeviceFailed": "E-Book konnte nicht auf Gerät übertragen werden",
|
"ToastSendEbookToDeviceFailed": "E-Buch konnte nicht auf Gerät übertragen werden",
|
||||||
"ToastSendEbookToDeviceSuccess": "E-Book an Gerät \"{0}\" gesendet",
|
"ToastSendEbookToDeviceSuccess": "E-Buch an Gerät „{0}“ gesendet",
|
||||||
"ToastSeriesUpdateFailed": "Aktualisierung der Serien fehlgeschlagen",
|
"ToastSeriesUpdateFailed": "Aktualisierung der Serien fehlgeschlagen",
|
||||||
"ToastSeriesUpdateSuccess": "Serien aktualisiert",
|
"ToastSeriesUpdateSuccess": "Serien aktualisiert",
|
||||||
"ToastServerSettingsUpdateFailed": "Die Server-Einstellungen wurden nicht gespeichert",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Die Server-Einstellungen wurden geupdated",
|
"ToastServerSettingsUpdateSuccess": "Die Server-Einstellungen wurden geupdated",
|
||||||
"ToastSessionCloseFailed": "Fehler beim schließen der Sitzung",
|
"ToastSessionCloseFailed": "Fehler beim schließen der Sitzung",
|
||||||
"ToastSessionDeleteFailed": "Sitzung konnte nicht gelöscht werden",
|
"ToastSessionDeleteFailed": "Sitzung konnte nicht gelöscht werden",
|
||||||
@@ -960,7 +970,6 @@
|
|||||||
"ToastSocketDisconnected": "Verbindung zum WebSocket verloren",
|
"ToastSocketDisconnected": "Verbindung zum WebSocket verloren",
|
||||||
"ToastSocketFailedToConnect": "Verbindung zum WebSocket fehlgeschlagen",
|
"ToastSocketFailedToConnect": "Verbindung zum WebSocket fehlgeschlagen",
|
||||||
"ToastSortingPrefixesEmptyError": "Es muss mindestens ein Sortier-Prefix vorhanden sein",
|
"ToastSortingPrefixesEmptyError": "Es muss mindestens ein Sortier-Prefix vorhanden sein",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Update der Sortier-Prefixe ist fehlgeschlagen",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Die Sortier-Prefixe wirden geupdated ({0} Einträge)",
|
"ToastSortingPrefixesUpdateSuccess": "Die Sortier-Prefixe wirden geupdated ({0} Einträge)",
|
||||||
"ToastTitleRequired": "Titel erforderlich",
|
"ToastTitleRequired": "Titel erforderlich",
|
||||||
"ToastUnknownError": "Unbekannter Fehler",
|
"ToastUnknownError": "Unbekannter Fehler",
|
||||||
|
|||||||
+34
-18
@@ -56,6 +56,7 @@
|
|||||||
"ButtonOpenManager": "Open Manager",
|
"ButtonOpenManager": "Open Manager",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Play",
|
"ButtonPlay": "Play",
|
||||||
|
"ButtonPlayAll": "Play All",
|
||||||
"ButtonPlaying": "Playing",
|
"ButtonPlaying": "Playing",
|
||||||
"ButtonPlaylists": "Playlists",
|
"ButtonPlaylists": "Playlists",
|
||||||
"ButtonPrevious": "Previous",
|
"ButtonPrevious": "Previous",
|
||||||
@@ -776,6 +777,38 @@
|
|||||||
"MessageShareExpiresIn": "Expires in {0}",
|
"MessageShareExpiresIn": "Expires in {0}",
|
||||||
"MessageShareURLWillBe": "Share URL will be <strong>{0}</strong>",
|
"MessageShareURLWillBe": "Share URL will be <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "Start playback for \"{0}\" at {1}?",
|
"MessageStartPlaybackAtTime": "Start playback for \"{0}\" at {1}?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "Audio file \"{0}\" is not writable",
|
||||||
|
"MessageTaskCanceledByUser": "Task canceled by user",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "Downloading episode \"{0}\"",
|
||||||
|
"MessageTaskEmbeddingMetadata": "Embedding metadata",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "Embedding metadata in audiobook \"{0}\"",
|
||||||
|
"MessageTaskEncodingM4b": "Encoding M4B",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Encoding audiobook \"{0}\" into a single m4b file",
|
||||||
|
"MessageTaskFailed": "Failed",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "Failed to backup audio file \"{0}\"",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Failed to create cache directory",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "Failed to embed metadata in file \"{0}\"",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "Failed to merge audio files",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "Failed to move m4b file",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "Failed to write metadata file",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "Matching books in library \"{0}\"",
|
||||||
|
"MessageTaskNoFilesToScan": "No files to scan",
|
||||||
|
"MessageTaskOpmlImport": "OPML import",
|
||||||
|
"MessageTaskOpmlImportDescription": "Creating podcasts from {0} RSS feeds",
|
||||||
|
"MessageTaskOpmlImportFeed": "OPML import feed",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "Importing RSS feed \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "Failed to get podcast feed",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "Creating podcast \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastExists": "Podcast already exists at path",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "Failed to create podcast",
|
||||||
|
"MessageTaskOpmlImportFinished": "Added {0} podcasts",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} added",
|
||||||
|
"MessageTaskScanItemsMissing": "{0} missing",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} updated",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "No changes needed",
|
||||||
|
"MessageTaskScanningFileChanges": "Scanning file changes in \"{0}\"",
|
||||||
|
"MessageTaskScanningLibrary": "Scanning \"{0}\" library",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "Target directory is not writable",
|
||||||
"MessageThinking": "Thinking...",
|
"MessageThinking": "Thinking...",
|
||||||
"MessageUploaderItemFailed": "Failed to upload",
|
"MessageUploaderItemFailed": "Failed to upload",
|
||||||
"MessageUploaderItemSuccess": "Successfully Uploaded!",
|
"MessageUploaderItemSuccess": "Successfully Uploaded!",
|
||||||
@@ -816,14 +849,12 @@
|
|||||||
"StatsTopNarrators": "TOP NARRATORS",
|
"StatsTopNarrators": "TOP NARRATORS",
|
||||||
"StatsTotalDuration": "With a total duration of…",
|
"StatsTotalDuration": "With a total duration of…",
|
||||||
"StatsYearInReview": "YEAR IN REVIEW",
|
"StatsYearInReview": "YEAR IN REVIEW",
|
||||||
"ToastAccountUpdateFailed": "Failed to update account",
|
|
||||||
"ToastAccountUpdateSuccess": "Account updated",
|
"ToastAccountUpdateSuccess": "Account updated",
|
||||||
"ToastAppriseUrlRequired": "Must enter an Apprise URL",
|
"ToastAppriseUrlRequired": "Must enter an Apprise URL",
|
||||||
"ToastAuthorImageRemoveSuccess": "Author image removed",
|
"ToastAuthorImageRemoveSuccess": "Author image removed",
|
||||||
"ToastAuthorNotFound": "Author \"{0}\" not found",
|
"ToastAuthorNotFound": "Author \"{0}\" not found",
|
||||||
"ToastAuthorRemoveSuccess": "Author removed",
|
"ToastAuthorRemoveSuccess": "Author removed",
|
||||||
"ToastAuthorSearchNotFound": "Author not found",
|
"ToastAuthorSearchNotFound": "Author not found",
|
||||||
"ToastAuthorUpdateFailed": "Failed to update author",
|
|
||||||
"ToastAuthorUpdateMerged": "Author merged",
|
"ToastAuthorUpdateMerged": "Author merged",
|
||||||
"ToastAuthorUpdateSuccess": "Author updated",
|
"ToastAuthorUpdateSuccess": "Author updated",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Author updated (no image found)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Author updated (no image found)",
|
||||||
@@ -834,7 +865,6 @@
|
|||||||
"ToastBackupDeleteSuccess": "Backup deleted",
|
"ToastBackupDeleteSuccess": "Backup deleted",
|
||||||
"ToastBackupInvalidMaxKeep": "Invalid number of backups to keep",
|
"ToastBackupInvalidMaxKeep": "Invalid number of backups to keep",
|
||||||
"ToastBackupInvalidMaxSize": "Invalid maximum backup size",
|
"ToastBackupInvalidMaxSize": "Invalid maximum backup size",
|
||||||
"ToastBackupPathUpdateFailed": "Failed to update backup path",
|
|
||||||
"ToastBackupRestoreFailed": "Failed to restore backup",
|
"ToastBackupRestoreFailed": "Failed to restore backup",
|
||||||
"ToastBackupUploadFailed": "Failed to upload backup",
|
"ToastBackupUploadFailed": "Failed to upload backup",
|
||||||
"ToastBackupUploadSuccess": "Backup uploaded",
|
"ToastBackupUploadSuccess": "Backup uploaded",
|
||||||
@@ -845,7 +875,6 @@
|
|||||||
"ToastBookmarkCreateFailed": "Failed to create bookmark",
|
"ToastBookmarkCreateFailed": "Failed to create bookmark",
|
||||||
"ToastBookmarkCreateSuccess": "Bookmark added",
|
"ToastBookmarkCreateSuccess": "Bookmark added",
|
||||||
"ToastBookmarkRemoveSuccess": "Bookmark removed",
|
"ToastBookmarkRemoveSuccess": "Bookmark removed",
|
||||||
"ToastBookmarkUpdateFailed": "Failed to update bookmark",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Bookmark updated",
|
"ToastBookmarkUpdateSuccess": "Bookmark updated",
|
||||||
"ToastCachePurgeFailed": "Failed to purge cache",
|
"ToastCachePurgeFailed": "Failed to purge cache",
|
||||||
"ToastCachePurgeSuccess": "Cache purged successfully",
|
"ToastCachePurgeSuccess": "Cache purged successfully",
|
||||||
@@ -856,7 +885,6 @@
|
|||||||
"ToastCollectionItemsAddSuccess": "Item(s) added to collection success",
|
"ToastCollectionItemsAddSuccess": "Item(s) added to collection success",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Item(s) removed from collection",
|
"ToastCollectionItemsRemoveSuccess": "Item(s) removed from collection",
|
||||||
"ToastCollectionRemoveSuccess": "Collection removed",
|
"ToastCollectionRemoveSuccess": "Collection removed",
|
||||||
"ToastCollectionUpdateFailed": "Failed to update collection",
|
|
||||||
"ToastCollectionUpdateSuccess": "Collection updated",
|
"ToastCollectionUpdateSuccess": "Collection updated",
|
||||||
"ToastCoverUpdateFailed": "Cover update failed",
|
"ToastCoverUpdateFailed": "Cover update failed",
|
||||||
"ToastDeleteFileFailed": "Failed to delete file",
|
"ToastDeleteFileFailed": "Failed to delete file",
|
||||||
@@ -865,8 +893,6 @@
|
|||||||
"ToastDeviceNameAlreadyExists": "Ereader device with that name already exists",
|
"ToastDeviceNameAlreadyExists": "Ereader device with that name already exists",
|
||||||
"ToastDeviceTestEmailFailed": "Failed to send test email",
|
"ToastDeviceTestEmailFailed": "Failed to send test email",
|
||||||
"ToastDeviceTestEmailSuccess": "Test email sent",
|
"ToastDeviceTestEmailSuccess": "Test email sent",
|
||||||
"ToastDeviceUpdateFailed": "Failed to update device",
|
|
||||||
"ToastEmailSettingsUpdateFailed": "Failed to update email settings",
|
|
||||||
"ToastEmailSettingsUpdateSuccess": "Email settings updated",
|
"ToastEmailSettingsUpdateSuccess": "Email settings updated",
|
||||||
"ToastEncodeCancelFailed": "Failed to cancel encode",
|
"ToastEncodeCancelFailed": "Failed to cancel encode",
|
||||||
"ToastEncodeCancelSucces": "Encode canceled",
|
"ToastEncodeCancelSucces": "Encode canceled",
|
||||||
@@ -875,21 +901,17 @@
|
|||||||
"ToastErrorCannotShare": "Cannot share natively on this device",
|
"ToastErrorCannotShare": "Cannot share natively on this device",
|
||||||
"ToastFailedToLoadData": "Failed to load data",
|
"ToastFailedToLoadData": "Failed to load data",
|
||||||
"ToastFailedToShare": "Failed to share",
|
"ToastFailedToShare": "Failed to share",
|
||||||
"ToastFailedToUpdateAccount": "Failed to update account",
|
"ToastFailedToUpdate": "Failed to update",
|
||||||
"ToastFailedToUpdateUser": "Failed to update user",
|
|
||||||
"ToastInvalidImageUrl": "Invalid image URL",
|
"ToastInvalidImageUrl": "Invalid image URL",
|
||||||
"ToastInvalidUrl": "Invalid URL",
|
"ToastInvalidUrl": "Invalid URL",
|
||||||
"ToastItemCoverUpdateFailed": "Failed to update item cover",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Item cover updated",
|
"ToastItemCoverUpdateSuccess": "Item cover updated",
|
||||||
"ToastItemDeletedFailed": "Failed to delete item",
|
"ToastItemDeletedFailed": "Failed to delete item",
|
||||||
"ToastItemDeletedSuccess": "Deleted item",
|
"ToastItemDeletedSuccess": "Deleted item",
|
||||||
"ToastItemDetailsUpdateFailed": "Failed to update item details",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Item details updated",
|
"ToastItemDetailsUpdateSuccess": "Item details updated",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Failed to mark as Finished",
|
"ToastItemMarkedAsFinishedFailed": "Failed to mark as Finished",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Item marked as Finished",
|
"ToastItemMarkedAsFinishedSuccess": "Item marked as Finished",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Failed to mark as Not Finished",
|
"ToastItemMarkedAsNotFinishedFailed": "Failed to mark as Not Finished",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Item marked as Not Finished",
|
"ToastItemMarkedAsNotFinishedSuccess": "Item marked as Not Finished",
|
||||||
"ToastItemUpdateFailed": "Failed to update item",
|
|
||||||
"ToastItemUpdateSuccess": "Item updated",
|
"ToastItemUpdateSuccess": "Item updated",
|
||||||
"ToastLibraryCreateFailed": "Failed to create library",
|
"ToastLibraryCreateFailed": "Failed to create library",
|
||||||
"ToastLibraryCreateSuccess": "Library \"{0}\" created",
|
"ToastLibraryCreateSuccess": "Library \"{0}\" created",
|
||||||
@@ -897,7 +919,6 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Library deleted",
|
"ToastLibraryDeleteSuccess": "Library deleted",
|
||||||
"ToastLibraryScanFailedToStart": "Failed to start scan",
|
"ToastLibraryScanFailedToStart": "Failed to start scan",
|
||||||
"ToastLibraryScanStarted": "Library scan started",
|
"ToastLibraryScanStarted": "Library scan started",
|
||||||
"ToastLibraryUpdateFailed": "Failed to update library",
|
|
||||||
"ToastLibraryUpdateSuccess": "Library \"{0}\" updated",
|
"ToastLibraryUpdateSuccess": "Library \"{0}\" updated",
|
||||||
"ToastNameEmailRequired": "Name and email are required",
|
"ToastNameEmailRequired": "Name and email are required",
|
||||||
"ToastNameRequired": "Name is required",
|
"ToastNameRequired": "Name is required",
|
||||||
@@ -912,16 +933,13 @@
|
|||||||
"ToastNotificationDeleteFailed": "Failed to delete notification",
|
"ToastNotificationDeleteFailed": "Failed to delete notification",
|
||||||
"ToastNotificationFailedMaximum": "Max failed attempts must be >= 0",
|
"ToastNotificationFailedMaximum": "Max failed attempts must be >= 0",
|
||||||
"ToastNotificationQueueMaximum": "Max notification queue must be >= 0",
|
"ToastNotificationQueueMaximum": "Max notification queue must be >= 0",
|
||||||
"ToastNotificationSettingsUpdateFailed": "Failed to update notification settings",
|
|
||||||
"ToastNotificationSettingsUpdateSuccess": "Notification settings updated",
|
"ToastNotificationSettingsUpdateSuccess": "Notification settings updated",
|
||||||
"ToastNotificationTestTriggerFailed": "Failed to trigger test notification",
|
"ToastNotificationTestTriggerFailed": "Failed to trigger test notification",
|
||||||
"ToastNotificationTestTriggerSuccess": "Triggered test notification",
|
"ToastNotificationTestTriggerSuccess": "Triggered test notification",
|
||||||
"ToastNotificationUpdateFailed": "Failed to update notification",
|
|
||||||
"ToastNotificationUpdateSuccess": "Notification updated",
|
"ToastNotificationUpdateSuccess": "Notification updated",
|
||||||
"ToastPlaylistCreateFailed": "Failed to create playlist",
|
"ToastPlaylistCreateFailed": "Failed to create playlist",
|
||||||
"ToastPlaylistCreateSuccess": "Playlist created",
|
"ToastPlaylistCreateSuccess": "Playlist created",
|
||||||
"ToastPlaylistRemoveSuccess": "Playlist removed",
|
"ToastPlaylistRemoveSuccess": "Playlist removed",
|
||||||
"ToastPlaylistUpdateFailed": "Failed to update playlist",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Playlist updated",
|
"ToastPlaylistUpdateSuccess": "Playlist updated",
|
||||||
"ToastPodcastCreateFailed": "Failed to create podcast",
|
"ToastPodcastCreateFailed": "Failed to create podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast created successfully",
|
"ToastPodcastCreateSuccess": "Podcast created successfully",
|
||||||
@@ -950,7 +968,6 @@
|
|||||||
"ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "Series update failed",
|
"ToastSeriesUpdateFailed": "Series update failed",
|
||||||
"ToastSeriesUpdateSuccess": "Series update success",
|
"ToastSeriesUpdateSuccess": "Series update success",
|
||||||
"ToastServerSettingsUpdateFailed": "Failed to update server settings",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Server settings updated",
|
"ToastServerSettingsUpdateSuccess": "Server settings updated",
|
||||||
"ToastSessionCloseFailed": "Failed to close session",
|
"ToastSessionCloseFailed": "Failed to close session",
|
||||||
"ToastSessionDeleteFailed": "Failed to delete session",
|
"ToastSessionDeleteFailed": "Failed to delete session",
|
||||||
@@ -961,7 +978,6 @@
|
|||||||
"ToastSocketDisconnected": "Socket disconnected",
|
"ToastSocketDisconnected": "Socket disconnected",
|
||||||
"ToastSocketFailedToConnect": "Socket failed to connect",
|
"ToastSocketFailedToConnect": "Socket failed to connect",
|
||||||
"ToastSortingPrefixesEmptyError": "Must have at least 1 sorting prefix",
|
"ToastSortingPrefixesEmptyError": "Must have at least 1 sorting prefix",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Failed to update sorting prefixes",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Sorting prefixes updated ({0} items)",
|
"ToastSortingPrefixesUpdateSuccess": "Sorting prefixes updated ({0} items)",
|
||||||
"ToastTitleRequired": "Title is required",
|
"ToastTitleRequired": "Title is required",
|
||||||
"ToastUnknownError": "Unknown error",
|
"ToastUnknownError": "Unknown error",
|
||||||
|
|||||||
+37
-18
@@ -30,6 +30,7 @@
|
|||||||
"ButtonEditChapters": "Editar Capítulo",
|
"ButtonEditChapters": "Editar Capítulo",
|
||||||
"ButtonEditPodcast": "Editar Podcast",
|
"ButtonEditPodcast": "Editar Podcast",
|
||||||
"ButtonEnable": "Permitir",
|
"ButtonEnable": "Permitir",
|
||||||
|
"ButtonFireAndFail": "Ejecutado y fallido",
|
||||||
"ButtonFireOnTest": "Activar evento de prueba",
|
"ButtonFireOnTest": "Activar evento de prueba",
|
||||||
"ButtonForceReScan": "Forzar Re-Escaneo",
|
"ButtonForceReScan": "Forzar Re-Escaneo",
|
||||||
"ButtonFullPath": "Ruta de Acceso Completa",
|
"ButtonFullPath": "Ruta de Acceso Completa",
|
||||||
@@ -55,6 +56,7 @@
|
|||||||
"ButtonOpenManager": "Abrir Editor",
|
"ButtonOpenManager": "Abrir Editor",
|
||||||
"ButtonPause": "Pausar",
|
"ButtonPause": "Pausar",
|
||||||
"ButtonPlay": "Reproducir",
|
"ButtonPlay": "Reproducir",
|
||||||
|
"ButtonPlayAll": "Reproducir todo",
|
||||||
"ButtonPlaying": "Reproduciendo",
|
"ButtonPlaying": "Reproduciendo",
|
||||||
"ButtonPlaylists": "Listas de reproducción",
|
"ButtonPlaylists": "Listas de reproducción",
|
||||||
"ButtonPrevious": "Anterior",
|
"ButtonPrevious": "Anterior",
|
||||||
@@ -97,6 +99,7 @@
|
|||||||
"ButtonStats": "Estadísticas",
|
"ButtonStats": "Estadísticas",
|
||||||
"ButtonSubmit": "Enviar",
|
"ButtonSubmit": "Enviar",
|
||||||
"ButtonTest": "Prueba",
|
"ButtonTest": "Prueba",
|
||||||
|
"ButtonUnlinkOpenId": "Desvincular OpenID",
|
||||||
"ButtonUpload": "Subir",
|
"ButtonUpload": "Subir",
|
||||||
"ButtonUploadBackup": "Subir Respaldo",
|
"ButtonUploadBackup": "Subir Respaldo",
|
||||||
"ButtonUploadCover": "Subir Portada",
|
"ButtonUploadCover": "Subir Portada",
|
||||||
@@ -458,6 +461,7 @@
|
|||||||
"LabelPrimaryEbook": "Ebook principal",
|
"LabelPrimaryEbook": "Ebook principal",
|
||||||
"LabelProgress": "Progreso",
|
"LabelProgress": "Progreso",
|
||||||
"LabelProvider": "Proveedor",
|
"LabelProvider": "Proveedor",
|
||||||
|
"LabelProviderAuthorizationValue": "Valor del encabezado de autorización",
|
||||||
"LabelPubDate": "Fecha de publicación",
|
"LabelPubDate": "Fecha de publicación",
|
||||||
"LabelPublishYear": "Año de publicación",
|
"LabelPublishYear": "Año de publicación",
|
||||||
"LabelPublishedDate": "Publicado {0}",
|
"LabelPublishedDate": "Publicado {0}",
|
||||||
@@ -773,6 +777,38 @@
|
|||||||
"MessageShareExpiresIn": "Caduduca en {0}",
|
"MessageShareExpiresIn": "Caduduca en {0}",
|
||||||
"MessageShareURLWillBe": "La URL para compartir será <strong> {0} </strong>",
|
"MessageShareURLWillBe": "La URL para compartir será <strong> {0} </strong>",
|
||||||
"MessageStartPlaybackAtTime": "Iniciar reproducción para \"{0}\" en {1}?",
|
"MessageStartPlaybackAtTime": "Iniciar reproducción para \"{0}\" en {1}?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "El archivo de audio \"{0}\" no se puede grabar",
|
||||||
|
"MessageTaskCanceledByUser": "Tarea cancelada por el usuario",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "Descargando el episodio \"{0}\"",
|
||||||
|
"MessageTaskEmbeddingMetadata": "Inserción de metadatos",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "Inserción de metadatos en el audiolibro \"{0}\"",
|
||||||
|
"MessageTaskEncodingM4b": "Codificación M4B",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Codificación del audiolibro \"{0}\" en un único archivo m4b",
|
||||||
|
"MessageTaskFailed": "Fallida",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "Error en la copia de seguridad del archivo de audio \"{0}\"",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Error al crear el directorio de la caché",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "Error al incrustar metadatos en el archivo \"{0}\"",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "Error al fusionar archivos de audio",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "Error al mover el archivo m4b",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "Error al escribir el archivo de metadatos",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "Libros coincidentes en la biblioteca \"{0}\"",
|
||||||
|
"MessageTaskNoFilesToScan": "Sin archivos para escanear",
|
||||||
|
"MessageTaskOpmlImport": "Importar OPML",
|
||||||
|
"MessageTaskOpmlImportDescription": "Creando podcasts a partir de {0} fuentes RSS",
|
||||||
|
"MessageTaskOpmlImportFeed": "Feed de importación OPML",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "Importando el feed RSS \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "No se puede obtener el podcast",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "Creando podcast \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastExists": "Podcast ya existe en la ruta",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "Error al crear podcast",
|
||||||
|
"MessageTaskOpmlImportFinished": "Añadido {0} podcasts",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} añadido",
|
||||||
|
"MessageTaskScanItemsMissing": "Falta {0}",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} actualizado",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "No se necesitan cambios",
|
||||||
|
"MessageTaskScanningFileChanges": "Escaneando cambios en el archivo en \"{0}\"",
|
||||||
|
"MessageTaskScanningLibrary": "Escaneando la biblioteca \"{0}\"",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "El directorio de destino no se puede escribir",
|
||||||
"MessageThinking": "Pensando...",
|
"MessageThinking": "Pensando...",
|
||||||
"MessageUploaderItemFailed": "Error al Subir",
|
"MessageUploaderItemFailed": "Error al Subir",
|
||||||
"MessageUploaderItemSuccess": "¡Éxito al Subir!",
|
"MessageUploaderItemSuccess": "¡Éxito al Subir!",
|
||||||
@@ -813,14 +849,12 @@
|
|||||||
"StatsTopNarrators": "NARRADORES DESTACADOS",
|
"StatsTopNarrators": "NARRADORES DESTACADOS",
|
||||||
"StatsTotalDuration": "Con una duración total de…",
|
"StatsTotalDuration": "Con una duración total de…",
|
||||||
"StatsYearInReview": "RESEÑA DEL AÑO",
|
"StatsYearInReview": "RESEÑA DEL AÑO",
|
||||||
"ToastAccountUpdateFailed": "Error al actualizar cuenta",
|
|
||||||
"ToastAccountUpdateSuccess": "Cuenta actualizada",
|
"ToastAccountUpdateSuccess": "Cuenta actualizada",
|
||||||
"ToastAppriseUrlRequired": "Debes ingresar una URL de Apprise",
|
"ToastAppriseUrlRequired": "Debes ingresar una URL de Apprise",
|
||||||
"ToastAuthorImageRemoveSuccess": "Se eliminó la imagen del autor",
|
"ToastAuthorImageRemoveSuccess": "Se eliminó la imagen del autor",
|
||||||
"ToastAuthorNotFound": "No se encontró el autor \"{0}\"",
|
"ToastAuthorNotFound": "No se encontró el autor \"{0}\"",
|
||||||
"ToastAuthorRemoveSuccess": "Autor eliminado",
|
"ToastAuthorRemoveSuccess": "Autor eliminado",
|
||||||
"ToastAuthorSearchNotFound": "No se encontró al autor",
|
"ToastAuthorSearchNotFound": "No se encontró al autor",
|
||||||
"ToastAuthorUpdateFailed": "Error al actualizar el autor",
|
|
||||||
"ToastAuthorUpdateMerged": "Autor combinado",
|
"ToastAuthorUpdateMerged": "Autor combinado",
|
||||||
"ToastAuthorUpdateSuccess": "Autor actualizado",
|
"ToastAuthorUpdateSuccess": "Autor actualizado",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autor actualizado (Imagen no encontrada)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autor actualizado (Imagen no encontrada)",
|
||||||
@@ -831,7 +865,6 @@
|
|||||||
"ToastBackupDeleteSuccess": "Respaldo eliminado",
|
"ToastBackupDeleteSuccess": "Respaldo eliminado",
|
||||||
"ToastBackupInvalidMaxKeep": "Número no válido de copias de seguridad a conservar",
|
"ToastBackupInvalidMaxKeep": "Número no válido de copias de seguridad a conservar",
|
||||||
"ToastBackupInvalidMaxSize": "Tamaño máximo de copia de seguridad no válido",
|
"ToastBackupInvalidMaxSize": "Tamaño máximo de copia de seguridad no válido",
|
||||||
"ToastBackupPathUpdateFailed": "Error al actualizar la ruta de la copia de seguridad",
|
|
||||||
"ToastBackupRestoreFailed": "Error al restaurar el respaldo",
|
"ToastBackupRestoreFailed": "Error al restaurar el respaldo",
|
||||||
"ToastBackupUploadFailed": "Error al subir el respaldo",
|
"ToastBackupUploadFailed": "Error al subir el respaldo",
|
||||||
"ToastBackupUploadSuccess": "Respaldo cargado",
|
"ToastBackupUploadSuccess": "Respaldo cargado",
|
||||||
@@ -842,7 +875,6 @@
|
|||||||
"ToastBookmarkCreateFailed": "Error al crear marcador",
|
"ToastBookmarkCreateFailed": "Error al crear marcador",
|
||||||
"ToastBookmarkCreateSuccess": "Marcador Agregado",
|
"ToastBookmarkCreateSuccess": "Marcador Agregado",
|
||||||
"ToastBookmarkRemoveSuccess": "Marcador eliminado",
|
"ToastBookmarkRemoveSuccess": "Marcador eliminado",
|
||||||
"ToastBookmarkUpdateFailed": "Error al actualizar el marcador",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Marcador actualizado",
|
"ToastBookmarkUpdateSuccess": "Marcador actualizado",
|
||||||
"ToastCachePurgeFailed": "Error al purgar el caché",
|
"ToastCachePurgeFailed": "Error al purgar el caché",
|
||||||
"ToastCachePurgeSuccess": "Caché purgado de manera exitosa",
|
"ToastCachePurgeSuccess": "Caché purgado de manera exitosa",
|
||||||
@@ -853,7 +885,6 @@
|
|||||||
"ToastCollectionItemsAddSuccess": "Artículo(s) añadido(s) a la colección correctamente",
|
"ToastCollectionItemsAddSuccess": "Artículo(s) añadido(s) a la colección correctamente",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Elementos(s) removidos de la colección",
|
"ToastCollectionItemsRemoveSuccess": "Elementos(s) removidos de la colección",
|
||||||
"ToastCollectionRemoveSuccess": "Colección removida",
|
"ToastCollectionRemoveSuccess": "Colección removida",
|
||||||
"ToastCollectionUpdateFailed": "Error al actualizar la colección",
|
|
||||||
"ToastCollectionUpdateSuccess": "Colección actualizada",
|
"ToastCollectionUpdateSuccess": "Colección actualizada",
|
||||||
"ToastCoverUpdateFailed": "Error al actualizar la cubierta",
|
"ToastCoverUpdateFailed": "Error al actualizar la cubierta",
|
||||||
"ToastDeleteFileFailed": "Error el eliminar archivo",
|
"ToastDeleteFileFailed": "Error el eliminar archivo",
|
||||||
@@ -862,8 +893,6 @@
|
|||||||
"ToastDeviceNameAlreadyExists": "Un libro electrónico ya existe con ese nombre",
|
"ToastDeviceNameAlreadyExists": "Un libro electrónico ya existe con ese nombre",
|
||||||
"ToastDeviceTestEmailFailed": "Error al enviar correo de prueba",
|
"ToastDeviceTestEmailFailed": "Error al enviar correo de prueba",
|
||||||
"ToastDeviceTestEmailSuccess": "Correo electrónico de prueba enviado",
|
"ToastDeviceTestEmailSuccess": "Correo electrónico de prueba enviado",
|
||||||
"ToastDeviceUpdateFailed": "Error al actualizar el dispositivo",
|
|
||||||
"ToastEmailSettingsUpdateFailed": "Error al actualizar la configuración del correo electrónico",
|
|
||||||
"ToastEmailSettingsUpdateSuccess": "Configuración del correo electrónico actualizada",
|
"ToastEmailSettingsUpdateSuccess": "Configuración del correo electrónico actualizada",
|
||||||
"ToastEncodeCancelFailed": "No se pudo cancelar la codificación",
|
"ToastEncodeCancelFailed": "No se pudo cancelar la codificación",
|
||||||
"ToastEncodeCancelSucces": "Codificación cancelada",
|
"ToastEncodeCancelSucces": "Codificación cancelada",
|
||||||
@@ -872,21 +901,17 @@
|
|||||||
"ToastErrorCannotShare": "No se puede compartir de forma nativa en este dispositivo",
|
"ToastErrorCannotShare": "No se puede compartir de forma nativa en este dispositivo",
|
||||||
"ToastFailedToLoadData": "Error al cargar data",
|
"ToastFailedToLoadData": "Error al cargar data",
|
||||||
"ToastFailedToShare": "Error al compartir",
|
"ToastFailedToShare": "Error al compartir",
|
||||||
"ToastFailedToUpdateAccount": "Error al actualizar la cuenta",
|
"ToastFailedToUpdate": "Error al actualizar",
|
||||||
"ToastFailedToUpdateUser": "Error al actualizar el usuario",
|
|
||||||
"ToastInvalidImageUrl": "URL de la imagen no válida",
|
"ToastInvalidImageUrl": "URL de la imagen no válida",
|
||||||
"ToastInvalidUrl": "URL no válida",
|
"ToastInvalidUrl": "URL no válida",
|
||||||
"ToastItemCoverUpdateFailed": "Error al actualizar la portada del elemento",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Portada del elemento actualizada",
|
"ToastItemCoverUpdateSuccess": "Portada del elemento actualizada",
|
||||||
"ToastItemDeletedFailed": "Error al eliminar el elemento",
|
"ToastItemDeletedFailed": "Error al eliminar el elemento",
|
||||||
"ToastItemDeletedSuccess": "Elemento borrado",
|
"ToastItemDeletedSuccess": "Elemento borrado",
|
||||||
"ToastItemDetailsUpdateFailed": "Error al actualizar los detalles del elemento",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Detalles del Elemento Actualizados",
|
"ToastItemDetailsUpdateSuccess": "Detalles del Elemento Actualizados",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Error al marcar como terminado",
|
"ToastItemMarkedAsFinishedFailed": "Error al marcar como terminado",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Elemento marcado como terminado",
|
"ToastItemMarkedAsFinishedSuccess": "Elemento marcado como terminado",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "No se ha podido marcar como no finalizado",
|
"ToastItemMarkedAsNotFinishedFailed": "No se ha podido marcar como no finalizado",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Elemento marcado como No Terminado",
|
"ToastItemMarkedAsNotFinishedSuccess": "Elemento marcado como No Terminado",
|
||||||
"ToastItemUpdateFailed": "Error al actualizar el elemento",
|
|
||||||
"ToastItemUpdateSuccess": "Elemento actualizado",
|
"ToastItemUpdateSuccess": "Elemento actualizado",
|
||||||
"ToastLibraryCreateFailed": "Error al crear biblioteca",
|
"ToastLibraryCreateFailed": "Error al crear biblioteca",
|
||||||
"ToastLibraryCreateSuccess": "Biblioteca \"{0}\" creada",
|
"ToastLibraryCreateSuccess": "Biblioteca \"{0}\" creada",
|
||||||
@@ -894,7 +919,6 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Biblioteca eliminada",
|
"ToastLibraryDeleteSuccess": "Biblioteca eliminada",
|
||||||
"ToastLibraryScanFailedToStart": "Error al iniciar el escaneo",
|
"ToastLibraryScanFailedToStart": "Error al iniciar el escaneo",
|
||||||
"ToastLibraryScanStarted": "Se inició el escaneo de la biblioteca",
|
"ToastLibraryScanStarted": "Se inició el escaneo de la biblioteca",
|
||||||
"ToastLibraryUpdateFailed": "Error al actualizar la biblioteca",
|
|
||||||
"ToastLibraryUpdateSuccess": "Biblioteca \"{0}\" actualizada",
|
"ToastLibraryUpdateSuccess": "Biblioteca \"{0}\" actualizada",
|
||||||
"ToastNameEmailRequired": "Nombre y correo electrónico obligatorios",
|
"ToastNameEmailRequired": "Nombre y correo electrónico obligatorios",
|
||||||
"ToastNameRequired": "Nombre obligatorio",
|
"ToastNameRequired": "Nombre obligatorio",
|
||||||
@@ -909,16 +933,13 @@
|
|||||||
"ToastNotificationDeleteFailed": "Error al borrar la notificación",
|
"ToastNotificationDeleteFailed": "Error al borrar la notificación",
|
||||||
"ToastNotificationFailedMaximum": "El número máximo de intentos fallidos debe ser ≥ 0",
|
"ToastNotificationFailedMaximum": "El número máximo de intentos fallidos debe ser ≥ 0",
|
||||||
"ToastNotificationQueueMaximum": "La cola de notificación máxima debe ser ≥ 0",
|
"ToastNotificationQueueMaximum": "La cola de notificación máxima debe ser ≥ 0",
|
||||||
"ToastNotificationSettingsUpdateFailed": "Error al actualizar los ajustes de la notificación",
|
|
||||||
"ToastNotificationSettingsUpdateSuccess": "Ajustes de la notificación actualizados",
|
"ToastNotificationSettingsUpdateSuccess": "Ajustes de la notificación actualizados",
|
||||||
"ToastNotificationTestTriggerFailed": "No se ha podido activar la notificación de prueba",
|
"ToastNotificationTestTriggerFailed": "No se ha podido activar la notificación de prueba",
|
||||||
"ToastNotificationTestTriggerSuccess": "Notificación de prueba activada",
|
"ToastNotificationTestTriggerSuccess": "Notificación de prueba activada",
|
||||||
"ToastNotificationUpdateFailed": "No se ha podido actualizar la notificación",
|
|
||||||
"ToastNotificationUpdateSuccess": "Notificación actualizada",
|
"ToastNotificationUpdateSuccess": "Notificación actualizada",
|
||||||
"ToastPlaylistCreateFailed": "Error al crear la lista de reproducción",
|
"ToastPlaylistCreateFailed": "Error al crear la lista de reproducción",
|
||||||
"ToastPlaylistCreateSuccess": "Lista de reproducción creada",
|
"ToastPlaylistCreateSuccess": "Lista de reproducción creada",
|
||||||
"ToastPlaylistRemoveSuccess": "Lista de reproducción eliminada",
|
"ToastPlaylistRemoveSuccess": "Lista de reproducción eliminada",
|
||||||
"ToastPlaylistUpdateFailed": "Error al actualizar la lista de reproducción",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Lista de reproducción actualizada",
|
"ToastPlaylistUpdateSuccess": "Lista de reproducción actualizada",
|
||||||
"ToastPodcastCreateFailed": "Error al crear podcast",
|
"ToastPodcastCreateFailed": "Error al crear podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast creado",
|
"ToastPodcastCreateSuccess": "Podcast creado",
|
||||||
@@ -947,7 +968,6 @@
|
|||||||
"ToastSendEbookToDeviceSuccess": "Ebook enviado al dispositivo \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "Ebook enviado al dispositivo \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "Error al actualizar la serie",
|
"ToastSeriesUpdateFailed": "Error al actualizar la serie",
|
||||||
"ToastSeriesUpdateSuccess": "Serie actualizada",
|
"ToastSeriesUpdateSuccess": "Serie actualizada",
|
||||||
"ToastServerSettingsUpdateFailed": "Error al actualizar configuración del servidor",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Configuración del servidor actualizada",
|
"ToastServerSettingsUpdateSuccess": "Configuración del servidor actualizada",
|
||||||
"ToastSessionCloseFailed": "Error al cerrar la sesión",
|
"ToastSessionCloseFailed": "Error al cerrar la sesión",
|
||||||
"ToastSessionDeleteFailed": "Error al eliminar sesión",
|
"ToastSessionDeleteFailed": "Error al eliminar sesión",
|
||||||
@@ -958,7 +978,6 @@
|
|||||||
"ToastSocketDisconnected": "Socket desconectado",
|
"ToastSocketDisconnected": "Socket desconectado",
|
||||||
"ToastSocketFailedToConnect": "Error al conectar al Socket",
|
"ToastSocketFailedToConnect": "Error al conectar al Socket",
|
||||||
"ToastSortingPrefixesEmptyError": "Debe tener por lo menos 1 prefijo para ordenar",
|
"ToastSortingPrefixesEmptyError": "Debe tener por lo menos 1 prefijo para ordenar",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Error al actualizar los prefijos de ordenar",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Prefijos de ordenar actualizaron ({0} items)",
|
"ToastSortingPrefixesUpdateSuccess": "Prefijos de ordenar actualizaron ({0} items)",
|
||||||
"ToastTitleRequired": "Título obligatorio",
|
"ToastTitleRequired": "Título obligatorio",
|
||||||
"ToastUnknownError": "Error desconocido",
|
"ToastUnknownError": "Error desconocido",
|
||||||
|
|||||||
+13
-10
@@ -9,6 +9,7 @@
|
|||||||
"ButtonApply": "Rakenda",
|
"ButtonApply": "Rakenda",
|
||||||
"ButtonApplyChapters": "Rakenda peatükid",
|
"ButtonApplyChapters": "Rakenda peatükid",
|
||||||
"ButtonAuthors": "Autorid",
|
"ButtonAuthors": "Autorid",
|
||||||
|
"ButtonBack": "Tagasi",
|
||||||
"ButtonBrowseForFolder": "Sirvi kausta",
|
"ButtonBrowseForFolder": "Sirvi kausta",
|
||||||
"ButtonCancel": "Tühista",
|
"ButtonCancel": "Tühista",
|
||||||
"ButtonCancelEncode": "Tühista kodeerimine",
|
"ButtonCancelEncode": "Tühista kodeerimine",
|
||||||
@@ -18,6 +19,7 @@
|
|||||||
"ButtonChooseFiles": "Vali failid",
|
"ButtonChooseFiles": "Vali failid",
|
||||||
"ButtonClearFilter": "Tühista filter",
|
"ButtonClearFilter": "Tühista filter",
|
||||||
"ButtonCloseFeed": "Sulge voog",
|
"ButtonCloseFeed": "Sulge voog",
|
||||||
|
"ButtonCloseSession": "Sulge avatud sessioon",
|
||||||
"ButtonCollections": "Kogud",
|
"ButtonCollections": "Kogud",
|
||||||
"ButtonConfigureScanner": "Konfigureeri skanner",
|
"ButtonConfigureScanner": "Konfigureeri skanner",
|
||||||
"ButtonCreate": "Loo",
|
"ButtonCreate": "Loo",
|
||||||
@@ -27,6 +29,7 @@
|
|||||||
"ButtonEdit": "Muuda",
|
"ButtonEdit": "Muuda",
|
||||||
"ButtonEditChapters": "Muuda peatükke",
|
"ButtonEditChapters": "Muuda peatükke",
|
||||||
"ButtonEditPodcast": "Muuda podcasti",
|
"ButtonEditPodcast": "Muuda podcasti",
|
||||||
|
"ButtonEnable": "Aktiveeri",
|
||||||
"ButtonForceReScan": "Sunnitud uuestiskaneerimine",
|
"ButtonForceReScan": "Sunnitud uuestiskaneerimine",
|
||||||
"ButtonFullPath": "Täielik asukoht",
|
"ButtonFullPath": "Täielik asukoht",
|
||||||
"ButtonHide": "Peida",
|
"ButtonHide": "Peida",
|
||||||
@@ -43,13 +46,18 @@
|
|||||||
"ButtonMatchAllAuthors": "Sobita kõik autorid",
|
"ButtonMatchAllAuthors": "Sobita kõik autorid",
|
||||||
"ButtonMatchBooks": "Sobita raamatud",
|
"ButtonMatchBooks": "Sobita raamatud",
|
||||||
"ButtonNevermind": "Pole tähtis",
|
"ButtonNevermind": "Pole tähtis",
|
||||||
|
"ButtonNext": "Järgmine",
|
||||||
"ButtonNextChapter": "Järgmine peatükk",
|
"ButtonNextChapter": "Järgmine peatükk",
|
||||||
|
"ButtonNextItemInQueue": "Järgmine kirje järjekorras",
|
||||||
|
"ButtonOk": "Ok",
|
||||||
"ButtonOpenFeed": "Ava voog",
|
"ButtonOpenFeed": "Ava voog",
|
||||||
"ButtonOpenManager": "Ava haldur",
|
"ButtonOpenManager": "Ava haldur",
|
||||||
"ButtonPause": "Peata",
|
"ButtonPause": "Peata",
|
||||||
"ButtonPlay": "Mängi",
|
"ButtonPlay": "Mängi",
|
||||||
|
"ButtonPlayAll": "Mängi kõik",
|
||||||
"ButtonPlaying": "Mängib",
|
"ButtonPlaying": "Mängib",
|
||||||
"ButtonPlaylists": "Esitusloendid",
|
"ButtonPlaylists": "Esitusloendid",
|
||||||
|
"ButtonPrevious": "Eelmine",
|
||||||
"ButtonPreviousChapter": "Eelmine peatükk",
|
"ButtonPreviousChapter": "Eelmine peatükk",
|
||||||
"ButtonPurgeAllCache": "Tühjenda kogu vahemälu",
|
"ButtonPurgeAllCache": "Tühjenda kogu vahemälu",
|
||||||
"ButtonPurgeItemsCache": "Tühjenda esemete vahemälu",
|
"ButtonPurgeItemsCache": "Tühjenda esemete vahemälu",
|
||||||
@@ -58,6 +66,9 @@
|
|||||||
"ButtonQuickMatch": "Kiire sobitamine",
|
"ButtonQuickMatch": "Kiire sobitamine",
|
||||||
"ButtonReScan": "Uuestiskaneeri",
|
"ButtonReScan": "Uuestiskaneeri",
|
||||||
"ButtonRead": "Loe",
|
"ButtonRead": "Loe",
|
||||||
|
"ButtonReadLess": "Loe vähem",
|
||||||
|
"ButtonReadMore": "Loe rohkem",
|
||||||
|
"ButtonRefresh": "Värskenda",
|
||||||
"ButtonRemove": "Eemalda",
|
"ButtonRemove": "Eemalda",
|
||||||
"ButtonRemoveAll": "Eemalda kõik",
|
"ButtonRemoveAll": "Eemalda kõik",
|
||||||
"ButtonRemoveAllLibraryItems": "Eemalda kõik raamatukogu esemed",
|
"ButtonRemoveAllLibraryItems": "Eemalda kõik raamatukogu esemed",
|
||||||
@@ -211,7 +222,7 @@
|
|||||||
"LabelBackupLocation": "Varukoopia asukoht",
|
"LabelBackupLocation": "Varukoopia asukoht",
|
||||||
"LabelBackupsEnableAutomaticBackups": "Luba automaatsed varukoopiad",
|
"LabelBackupsEnableAutomaticBackups": "Luba automaatsed varukoopiad",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "Varukoopiad salvestatakse /metadata/backups kausta",
|
"LabelBackupsEnableAutomaticBackupsHelp": "Varukoopiad salvestatakse /metadata/backups kausta",
|
||||||
"LabelBackupsMaxBackupSize": "Maksimaalne varukoopia suurus (GB-des)",
|
"LabelBackupsMaxBackupSize": "Maksimaalne varukoopia suurus (GB-des) (0 lõpmatu suuruse jaoks)",
|
||||||
"LabelBackupsMaxBackupSizeHelp": "Kaitsena valesti seadistamise vastu ebaõnnestuvad varukoopiad, kui need ületavad seadistatud suuruse.",
|
"LabelBackupsMaxBackupSizeHelp": "Kaitsena valesti seadistamise vastu ebaõnnestuvad varukoopiad, kui need ületavad seadistatud suuruse.",
|
||||||
"LabelBackupsNumberToKeep": "Varukoopiate arv, mida hoida",
|
"LabelBackupsNumberToKeep": "Varukoopiate arv, mida hoida",
|
||||||
"LabelBackupsNumberToKeepHelp": "Ühel ajal eemaldatakse ainult 1 varukoopia, seega kui teil on juba rohkem varukoopiaid kui siin määratud, peaksite need käsitsi eemaldama.",
|
"LabelBackupsNumberToKeepHelp": "Ühel ajal eemaldatakse ainult 1 varukoopia, seega kui teil on juba rohkem varukoopiaid kui siin määratud, peaksite need käsitsi eemaldama.",
|
||||||
@@ -449,7 +460,7 @@
|
|||||||
"LabelSettingsHomePageBookshelfView": "Avaleht kasutage raamatukoguvaadet",
|
"LabelSettingsHomePageBookshelfView": "Avaleht kasutage raamatukoguvaadet",
|
||||||
"LabelSettingsLibraryBookshelfView": "Raamatukogu kasutamiseks kasutage raamatukoguvaadet",
|
"LabelSettingsLibraryBookshelfView": "Raamatukogu kasutamiseks kasutage raamatukoguvaadet",
|
||||||
"LabelSettingsParseSubtitles": "Lugege subtiitreid",
|
"LabelSettingsParseSubtitles": "Lugege subtiitreid",
|
||||||
"LabelSettingsParseSubtitlesHelp": "Eraldage subtiitrid heliraamatu kaustade nimedest.<br>Subtiitrid peavad olema eraldatud \" - \".<br>Näiteks: \"Raamatu pealkiri - Siin on alapealkiri\" alapealkiri on \"Siin on alapealkiri\"",
|
"LabelSettingsParseSubtitlesHelp": "Eraldage subtiitrid heliraamatu kaustade nimedest.<br>Subtiitrid peavad olema eraldatud kasutades \" - \".<br>Näiteks: \"Raamatu pealkiri - Siin on alapealkiri\" alapealkiri on \"Siin on alapealkiri\"",
|
||||||
"LabelSettingsPreferMatchedMetadata": "Eelista sobitatud metaandmeid",
|
"LabelSettingsPreferMatchedMetadata": "Eelista sobitatud metaandmeid",
|
||||||
"LabelSettingsPreferMatchedMetadataHelp": "Sobitatud andmed kirjutavad Kiir Sobitamise kasutamisel üle üksikasjad.",
|
"LabelSettingsPreferMatchedMetadataHelp": "Sobitatud andmed kirjutavad Kiir Sobitamise kasutamisel üle üksikasjad.",
|
||||||
"LabelSettingsSkipMatchingBooksWithASIN": "Jätke ASIN-iga sobituvad raamatud vahele",
|
"LabelSettingsSkipMatchingBooksWithASIN": "Jätke ASIN-iga sobituvad raamatud vahele",
|
||||||
@@ -682,10 +693,8 @@
|
|||||||
"PlaceholderNewPlaylist": "Uue esitusloendi nimi",
|
"PlaceholderNewPlaylist": "Uue esitusloendi nimi",
|
||||||
"PlaceholderSearch": "Otsi...",
|
"PlaceholderSearch": "Otsi...",
|
||||||
"PlaceholderSearchEpisode": "Otsi episoodi...",
|
"PlaceholderSearchEpisode": "Otsi episoodi...",
|
||||||
"ToastAccountUpdateFailed": "Konto värskendamine ebaõnnestus",
|
|
||||||
"ToastAccountUpdateSuccess": "Konto on värskendatud",
|
"ToastAccountUpdateSuccess": "Konto on värskendatud",
|
||||||
"ToastAuthorImageRemoveSuccess": "Autori pilt on eemaldatud",
|
"ToastAuthorImageRemoveSuccess": "Autori pilt on eemaldatud",
|
||||||
"ToastAuthorUpdateFailed": "Autori värskendamine ebaõnnestus",
|
|
||||||
"ToastAuthorUpdateMerged": "Autor liidetud",
|
"ToastAuthorUpdateMerged": "Autor liidetud",
|
||||||
"ToastAuthorUpdateSuccess": "Autor värskendatud",
|
"ToastAuthorUpdateSuccess": "Autor värskendatud",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autor värskendatud (pilti ei leitud)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autor värskendatud (pilti ei leitud)",
|
||||||
@@ -701,17 +710,13 @@
|
|||||||
"ToastBookmarkCreateFailed": "Järjehoidja loomine ebaõnnestus",
|
"ToastBookmarkCreateFailed": "Järjehoidja loomine ebaõnnestus",
|
||||||
"ToastBookmarkCreateSuccess": "Järjehoidja lisatud",
|
"ToastBookmarkCreateSuccess": "Järjehoidja lisatud",
|
||||||
"ToastBookmarkRemoveSuccess": "Järjehoidja eemaldatud",
|
"ToastBookmarkRemoveSuccess": "Järjehoidja eemaldatud",
|
||||||
"ToastBookmarkUpdateFailed": "Järjehoidja värskendamine ebaõnnestus",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Järjehoidja värskendatud",
|
"ToastBookmarkUpdateSuccess": "Järjehoidja värskendatud",
|
||||||
"ToastChaptersHaveErrors": "Peatükkidel on vigu",
|
"ToastChaptersHaveErrors": "Peatükkidel on vigu",
|
||||||
"ToastChaptersMustHaveTitles": "Peatükkidel peab olema pealkiri",
|
"ToastChaptersMustHaveTitles": "Peatükkidel peab olema pealkiri",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Üksus(ed) eemaldatud kogumist",
|
"ToastCollectionItemsRemoveSuccess": "Üksus(ed) eemaldatud kogumist",
|
||||||
"ToastCollectionRemoveSuccess": "Kogum eemaldatud",
|
"ToastCollectionRemoveSuccess": "Kogum eemaldatud",
|
||||||
"ToastCollectionUpdateFailed": "Kogumi värskendamine ebaõnnestus",
|
|
||||||
"ToastCollectionUpdateSuccess": "Kogum värskendatud",
|
"ToastCollectionUpdateSuccess": "Kogum värskendatud",
|
||||||
"ToastItemCoverUpdateFailed": "Üksuse kaane värskendamine ebaõnnestus",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Üksuse kaas värskendatud",
|
"ToastItemCoverUpdateSuccess": "Üksuse kaas värskendatud",
|
||||||
"ToastItemDetailsUpdateFailed": "Üksuse üksikasjade värskendamine ebaõnnestus",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Üksuse üksikasjad värskendatud",
|
"ToastItemDetailsUpdateSuccess": "Üksuse üksikasjad värskendatud",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Märgistamine kui lõpetatud ebaõnnestus",
|
"ToastItemMarkedAsFinishedFailed": "Märgistamine kui lõpetatud ebaõnnestus",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Üksus märgitud kui lõpetatud",
|
"ToastItemMarkedAsFinishedSuccess": "Üksus märgitud kui lõpetatud",
|
||||||
@@ -723,12 +728,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Raamatukogu kustutatud",
|
"ToastLibraryDeleteSuccess": "Raamatukogu kustutatud",
|
||||||
"ToastLibraryScanFailedToStart": "Skanneerimine ei käivitunud",
|
"ToastLibraryScanFailedToStart": "Skanneerimine ei käivitunud",
|
||||||
"ToastLibraryScanStarted": "Raamatukogu skaneerimine alustatud",
|
"ToastLibraryScanStarted": "Raamatukogu skaneerimine alustatud",
|
||||||
"ToastLibraryUpdateFailed": "Raamatukogu värskendamine ebaõnnestus",
|
|
||||||
"ToastLibraryUpdateSuccess": "Raamatukogu \"{0}\" värskendatud",
|
"ToastLibraryUpdateSuccess": "Raamatukogu \"{0}\" värskendatud",
|
||||||
"ToastPlaylistCreateFailed": "Esitusloendi loomine ebaõnnestus",
|
"ToastPlaylistCreateFailed": "Esitusloendi loomine ebaõnnestus",
|
||||||
"ToastPlaylistCreateSuccess": "Esitusloend loodud",
|
"ToastPlaylistCreateSuccess": "Esitusloend loodud",
|
||||||
"ToastPlaylistRemoveSuccess": "Esitusloend eemaldatud",
|
"ToastPlaylistRemoveSuccess": "Esitusloend eemaldatud",
|
||||||
"ToastPlaylistUpdateFailed": "Esitusloendi värskendamine ebaõnnestus",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Esitusloend värskendatud",
|
"ToastPlaylistUpdateSuccess": "Esitusloend värskendatud",
|
||||||
"ToastPodcastCreateFailed": "Podcasti loomine ebaõnnestus",
|
"ToastPodcastCreateFailed": "Podcasti loomine ebaõnnestus",
|
||||||
"ToastPodcastCreateSuccess": "Podcast loodud edukalt",
|
"ToastPodcastCreateSuccess": "Podcast loodud edukalt",
|
||||||
|
|||||||
+166
-2
@@ -19,6 +19,7 @@
|
|||||||
"ButtonChooseFiles": "Valitse tiedostot",
|
"ButtonChooseFiles": "Valitse tiedostot",
|
||||||
"ButtonClearFilter": "Poista suodatus",
|
"ButtonClearFilter": "Poista suodatus",
|
||||||
"ButtonCloseFeed": "Sulje syöte",
|
"ButtonCloseFeed": "Sulje syöte",
|
||||||
|
"ButtonCloseSession": "Sulje Avoin Sessio",
|
||||||
"ButtonCollections": "Kokoelmat",
|
"ButtonCollections": "Kokoelmat",
|
||||||
"ButtonConfigureScanner": "Skannerin asetukset",
|
"ButtonConfigureScanner": "Skannerin asetukset",
|
||||||
"ButtonCreate": "Luo",
|
"ButtonCreate": "Luo",
|
||||||
@@ -28,6 +29,9 @@
|
|||||||
"ButtonEdit": "Muokkaa",
|
"ButtonEdit": "Muokkaa",
|
||||||
"ButtonEditChapters": "Muokkaa lukuja",
|
"ButtonEditChapters": "Muokkaa lukuja",
|
||||||
"ButtonEditPodcast": "Muokkaa podcastia",
|
"ButtonEditPodcast": "Muokkaa podcastia",
|
||||||
|
"ButtonEnable": "Aktivoi",
|
||||||
|
"ButtonFireAndFail": "Laukaise ja epäonnistu",
|
||||||
|
"ButtonFireOnTest": "Laukaise onTest tapahtuma",
|
||||||
"ButtonForceReScan": "Pakota uudelleenskannaus",
|
"ButtonForceReScan": "Pakota uudelleenskannaus",
|
||||||
"ButtonFullPath": "Koko polku",
|
"ButtonFullPath": "Koko polku",
|
||||||
"ButtonHide": "Piilota",
|
"ButtonHide": "Piilota",
|
||||||
@@ -46,10 +50,13 @@
|
|||||||
"ButtonNevermind": "Ei sittenkään",
|
"ButtonNevermind": "Ei sittenkään",
|
||||||
"ButtonNext": "Seuraava",
|
"ButtonNext": "Seuraava",
|
||||||
"ButtonNextChapter": "Seuraava luku",
|
"ButtonNextChapter": "Seuraava luku",
|
||||||
|
"ButtonNextItemInQueue": "Seuraava jonossa",
|
||||||
|
"ButtonOk": "Ok",
|
||||||
"ButtonOpenFeed": "Avaa syöte",
|
"ButtonOpenFeed": "Avaa syöte",
|
||||||
"ButtonOpenManager": "Avaa hallinta",
|
"ButtonOpenManager": "Avaa hallinta",
|
||||||
"ButtonPause": "Pysäytä",
|
"ButtonPause": "Pysäytä",
|
||||||
"ButtonPlay": "Toista",
|
"ButtonPlay": "Toista",
|
||||||
|
"ButtonPlayAll": "Toista kaikki",
|
||||||
"ButtonPlaying": "Toistetaan",
|
"ButtonPlaying": "Toistetaan",
|
||||||
"ButtonPlaylists": "Soittolistat",
|
"ButtonPlaylists": "Soittolistat",
|
||||||
"ButtonPrevious": "Edellinen",
|
"ButtonPrevious": "Edellinen",
|
||||||
@@ -90,6 +97,7 @@
|
|||||||
"ButtonStats": "Tilastot",
|
"ButtonStats": "Tilastot",
|
||||||
"ButtonSubmit": "Lähetä",
|
"ButtonSubmit": "Lähetä",
|
||||||
"ButtonTest": "Testi",
|
"ButtonTest": "Testi",
|
||||||
|
"ButtonUnlinkOpenId": "Poista OpenID linkitys",
|
||||||
"ButtonUpload": "Lähetä palvelimelle",
|
"ButtonUpload": "Lähetä palvelimelle",
|
||||||
"ButtonUploadBackup": "Lähetä varmuuskopio",
|
"ButtonUploadBackup": "Lähetä varmuuskopio",
|
||||||
"ButtonUploadCover": "Lähetä kansikuva",
|
"ButtonUploadCover": "Lähetä kansikuva",
|
||||||
@@ -102,6 +110,7 @@
|
|||||||
"ErrorUploadFetchMetadataNoResults": "Metadatan haku epäonnistui, yritä päivittää Teoksen nimi ja/tai Tekijä",
|
"ErrorUploadFetchMetadataNoResults": "Metadatan haku epäonnistui, yritä päivittää Teoksen nimi ja/tai Tekijä",
|
||||||
"ErrorUploadLacksTitle": "Pitää sisältää Nimi",
|
"ErrorUploadLacksTitle": "Pitää sisältää Nimi",
|
||||||
"HeaderAccount": "Tili",
|
"HeaderAccount": "Tili",
|
||||||
|
"HeaderAddCustomMetadataProvider": "Lisää mukautettu metadata tarjoaja",
|
||||||
"HeaderAdvanced": "Edistynyt",
|
"HeaderAdvanced": "Edistynyt",
|
||||||
"HeaderAppriseNotificationSettings": "Apprise-ilmoitusasetukset",
|
"HeaderAppriseNotificationSettings": "Apprise-ilmoitusasetukset",
|
||||||
"HeaderAudioTracks": "Ääniraidat",
|
"HeaderAudioTracks": "Ääniraidat",
|
||||||
@@ -126,38 +135,60 @@
|
|||||||
"HeaderEreaderDevices": "E-lukijalaitteet",
|
"HeaderEreaderDevices": "E-lukijalaitteet",
|
||||||
"HeaderEreaderSettings": "E-lukijan asetukset",
|
"HeaderEreaderSettings": "E-lukijan asetukset",
|
||||||
"HeaderFiles": "Tiedostot",
|
"HeaderFiles": "Tiedostot",
|
||||||
|
"HeaderFindChapters": "Etsi kappaleet",
|
||||||
"HeaderIgnoredFiles": "Ohitetut tiedostot",
|
"HeaderIgnoredFiles": "Ohitetut tiedostot",
|
||||||
|
"HeaderLastListeningSession": "Edellinen kuuntelukerta",
|
||||||
"HeaderLatestEpisodes": "Viimeisimmät jaksot",
|
"HeaderLatestEpisodes": "Viimeisimmät jaksot",
|
||||||
"HeaderLibraries": "Kirjastot",
|
"HeaderLibraries": "Kirjastot",
|
||||||
"HeaderLibraryFiles": "Kirjaston tiedostot",
|
"HeaderLibraryFiles": "Kirjaston tiedostot",
|
||||||
"HeaderLibraryStats": "Kirjaston tilastot",
|
"HeaderLibraryStats": "Kirjaston tilastot",
|
||||||
|
"HeaderListeningSessions": "Kuuntelukerrat",
|
||||||
"HeaderListeningStats": "Kuuntelutilastot",
|
"HeaderListeningStats": "Kuuntelutilastot",
|
||||||
|
"HeaderLogin": "Kirjaudu",
|
||||||
"HeaderLogs": "Lokit",
|
"HeaderLogs": "Lokit",
|
||||||
|
"HeaderManageGenres": "Hallitse lajityyppejä",
|
||||||
|
"HeaderManageTags": "Hallitse tageja",
|
||||||
|
"HeaderMetadataToEmbed": "Sisällytettävä metadata",
|
||||||
"HeaderNewAccount": "Uusi tili",
|
"HeaderNewAccount": "Uusi tili",
|
||||||
"HeaderNewLibrary": "Uusi kirjasto",
|
"HeaderNewLibrary": "Uusi kirjasto",
|
||||||
|
"HeaderNotificationCreate": "Luo ilmoitus",
|
||||||
|
"HeaderNotificationUpdate": "Päivitä ilmoitus",
|
||||||
"HeaderNotifications": "Ilmoitukset",
|
"HeaderNotifications": "Ilmoitukset",
|
||||||
"HeaderOpenRSSFeed": "Avaa RSS-syöte",
|
"HeaderOpenRSSFeed": "Avaa RSS-syöte",
|
||||||
"HeaderOtherFiles": "Muut tiedostot",
|
"HeaderOtherFiles": "Muut tiedostot",
|
||||||
"HeaderPermissions": "Käyttöoikeudet",
|
"HeaderPermissions": "Käyttöoikeudet",
|
||||||
|
"HeaderPlayerQueue": "Soittimen jono",
|
||||||
|
"HeaderPlayerSettings": "Soittimen asetukset",
|
||||||
"HeaderPlaylist": "Soittolista",
|
"HeaderPlaylist": "Soittolista",
|
||||||
"HeaderPlaylistItems": "Soittolistan kohteet",
|
"HeaderPlaylistItems": "Soittolistan kohteet",
|
||||||
|
"HeaderPodcastsToAdd": "Lisättävät podcastit",
|
||||||
|
"HeaderPreviewCover": "Esikatsele kansikuvaa",
|
||||||
"HeaderRSSFeedGeneral": "RSS yksityiskohdat",
|
"HeaderRSSFeedGeneral": "RSS yksityiskohdat",
|
||||||
"HeaderRSSFeedIsOpen": "RSS syöte on avoinna",
|
"HeaderRSSFeedIsOpen": "RSS syöte on avoinna",
|
||||||
|
"HeaderRSSFeeds": "RSS syötteet",
|
||||||
"HeaderRemoveEpisode": "Poista jakso",
|
"HeaderRemoveEpisode": "Poista jakso",
|
||||||
"HeaderRemoveEpisodes": "Poista {0} jaksoa",
|
"HeaderRemoveEpisodes": "Poista {0} jaksoa",
|
||||||
"HeaderSchedule": "Ajoita",
|
"HeaderSchedule": "Ajoita",
|
||||||
"HeaderScheduleLibraryScans": "Ajoita automaattiset kirjastoskannaukset",
|
"HeaderScheduleLibraryScans": "Ajoita automaattiset kirjastoskannaukset",
|
||||||
|
"HeaderSession": "Istunto",
|
||||||
"HeaderSetBackupSchedule": "Aseta varmuuskopiointiaikataulu",
|
"HeaderSetBackupSchedule": "Aseta varmuuskopiointiaikataulu",
|
||||||
"HeaderSettings": "Asetukset",
|
"HeaderSettings": "Asetukset",
|
||||||
"HeaderSettingsExperimental": "Kokeelliset ominaisuudet",
|
"HeaderSettingsExperimental": "Kokeelliset ominaisuudet",
|
||||||
|
"HeaderSettingsGeneral": "Yleiset",
|
||||||
"HeaderSleepTimer": "Uniajastin",
|
"HeaderSleepTimer": "Uniajastin",
|
||||||
"HeaderStatsMinutesListeningChart": "Kuunteluminuutit (viim. 7 pv)",
|
"HeaderStatsMinutesListeningChart": "Kuunteluminuutit (viim. 7 pv)",
|
||||||
"HeaderStatsRecentSessions": "Viimeaikaiset istunnot",
|
"HeaderStatsRecentSessions": "Viimeaikaiset istunnot",
|
||||||
|
"HeaderStatsTop5Genres": "Top 5 lajityypit",
|
||||||
"HeaderTableOfContents": "Sisällysluettelo",
|
"HeaderTableOfContents": "Sisällysluettelo",
|
||||||
"HeaderTools": "Työkalut",
|
"HeaderTools": "Työkalut",
|
||||||
|
"HeaderUpdateAccount": "Päivitä tili",
|
||||||
|
"HeaderUpdateAuthor": "Päivitä kirjailija",
|
||||||
|
"HeaderUpdateLibrary": "Päivitä kirjasto",
|
||||||
"HeaderUsers": "Käyttäjät",
|
"HeaderUsers": "Käyttäjät",
|
||||||
"HeaderYourStats": "Tilastosi",
|
"HeaderYourStats": "Tilastosi",
|
||||||
|
"LabelAbridged": "Lyhennetty",
|
||||||
"LabelAccountType": "Tilin tyyppi",
|
"LabelAccountType": "Tilin tyyppi",
|
||||||
|
"LabelAccountTypeAdmin": "Järjestelmänvalvoja",
|
||||||
"LabelAccountTypeGuest": "Vieras",
|
"LabelAccountTypeGuest": "Vieras",
|
||||||
"LabelAccountTypeUser": "Käyttäjä",
|
"LabelAccountTypeUser": "Käyttäjä",
|
||||||
"LabelActivity": "Toiminta",
|
"LabelActivity": "Toiminta",
|
||||||
@@ -166,22 +197,29 @@
|
|||||||
"LabelAddToPlaylist": "Lisää soittolistaan",
|
"LabelAddToPlaylist": "Lisää soittolistaan",
|
||||||
"LabelAddToPlaylistBatch": "Lisää {0} kohdetta soittolistaan",
|
"LabelAddToPlaylistBatch": "Lisää {0} kohdetta soittolistaan",
|
||||||
"LabelAddedAt": "Lisätty listalle",
|
"LabelAddedAt": "Lisätty listalle",
|
||||||
|
"LabelAddedDate": "Lisätty {0}",
|
||||||
|
"LabelAdminUsersOnly": "Vain järjestelmänvalvojat",
|
||||||
"LabelAll": "Kaikki",
|
"LabelAll": "Kaikki",
|
||||||
"LabelAllUsers": "Kaikki käyttäjät",
|
"LabelAllUsers": "Kaikki käyttäjät",
|
||||||
"LabelAllUsersExcludingGuests": "Kaikki käyttäjät vieraita lukuun ottamatta",
|
"LabelAllUsersExcludingGuests": "Kaikki käyttäjät vieraita lukuun ottamatta",
|
||||||
"LabelAllUsersIncludingGuests": "Kaikki käyttäjät mukaan lukien vieraat",
|
"LabelAllUsersIncludingGuests": "Kaikki käyttäjät mukaan lukien vieraat",
|
||||||
|
"LabelAlreadyInYourLibrary": "Jo kirjastossasi",
|
||||||
"LabelAuthor": "Tekijä",
|
"LabelAuthor": "Tekijä",
|
||||||
"LabelAuthorFirstLast": "Tekijä (Etunimi Sukunimi)",
|
"LabelAuthorFirstLast": "Tekijä (Etunimi Sukunimi)",
|
||||||
"LabelAuthorLastFirst": "Tekijä (Sukunimi, Etunimi)",
|
"LabelAuthorLastFirst": "Tekijä (Sukunimi, Etunimi)",
|
||||||
"LabelAuthors": "Tekijät",
|
"LabelAuthors": "Tekijät",
|
||||||
"LabelAutoDownloadEpisodes": "Lataa jaksot automaattisesti",
|
"LabelAutoDownloadEpisodes": "Lataa jaksot automaattisesti",
|
||||||
|
"LabelBackToUser": "Takaisin käyttäjään",
|
||||||
|
"LabelBackupLocation": "Varmuuskopiointipaikka",
|
||||||
"LabelBackupsEnableAutomaticBackups": "Ota automaattinen varmuuskopiointi käyttöön",
|
"LabelBackupsEnableAutomaticBackups": "Ota automaattinen varmuuskopiointi käyttöön",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "Varmuuskopiot tallennettu kansioon /metadata/backups",
|
"LabelBackupsEnableAutomaticBackupsHelp": "Varmuuskopiot tallennettu kansioon /metadata/backups",
|
||||||
"LabelBackupsMaxBackupSize": "Varmuuskopion enimmäiskoko (Gt) (0 rajaton)",
|
"LabelBackupsMaxBackupSize": "Varmuuskopion enimmäiskoko (Gt) (0 rajaton)",
|
||||||
"LabelBackupsNumberToKeep": "Säilytettävien varmuuskopioiden määrä",
|
"LabelBackupsNumberToKeep": "Säilytettävien varmuuskopioiden määrä",
|
||||||
|
"LabelBitrate": "Bittinopeus",
|
||||||
"LabelBooks": "Kirjat",
|
"LabelBooks": "Kirjat",
|
||||||
"LabelButtonText": "Painikkeen teksti",
|
"LabelButtonText": "Painikkeen teksti",
|
||||||
"LabelChangePassword": "Vaihda salasana",
|
"LabelChangePassword": "Vaihda salasana",
|
||||||
|
"LabelChannels": "Kanavat",
|
||||||
"LabelChapters": "Luvut",
|
"LabelChapters": "Luvut",
|
||||||
"LabelClickForMoreInfo": "Napsauta saadaksesi lisätietoja",
|
"LabelClickForMoreInfo": "Napsauta saadaksesi lisätietoja",
|
||||||
"LabelClosePlayer": "Sulje soitin",
|
"LabelClosePlayer": "Sulje soitin",
|
||||||
@@ -196,79 +234,205 @@
|
|||||||
"LabelContinueSeries": "Jatka sarjoja",
|
"LabelContinueSeries": "Jatka sarjoja",
|
||||||
"LabelCover": "Kansikuva",
|
"LabelCover": "Kansikuva",
|
||||||
"LabelCoverImageURL": "Kansikuvan URL-osoite",
|
"LabelCoverImageURL": "Kansikuvan URL-osoite",
|
||||||
|
"LabelCreatedAt": "Luotu",
|
||||||
"LabelCurrent": "Nykyinen",
|
"LabelCurrent": "Nykyinen",
|
||||||
|
"LabelDays": "Päivää",
|
||||||
"LabelDescription": "Kuvaus",
|
"LabelDescription": "Kuvaus",
|
||||||
"LabelDevice": "Laite",
|
"LabelDevice": "Laite",
|
||||||
"LabelDeviceInfo": "Laitteen tiedot",
|
"LabelDeviceInfo": "Laitteen tiedot",
|
||||||
|
"LabelDiscover": "Löydä",
|
||||||
"LabelDownload": "Lataa",
|
"LabelDownload": "Lataa",
|
||||||
"LabelDownloadNEpisodes": "Lataa {0} jaksoa",
|
"LabelDownloadNEpisodes": "Lataa {0} jaksoa",
|
||||||
"LabelDuration": "Kesto",
|
"LabelDuration": "Kesto",
|
||||||
|
"LabelDurationComparisonLonger": "({0} pidempi)",
|
||||||
|
"LabelDurationComparisonShorter": "({0} lyhyempi)",
|
||||||
"LabelEbook": "E-kirja",
|
"LabelEbook": "E-kirja",
|
||||||
"LabelEbooks": "E-kirjat",
|
"LabelEbooks": "E-kirjat",
|
||||||
"LabelEdit": "Muokkaa",
|
"LabelEdit": "Muokkaa",
|
||||||
"LabelEmail": "Sähköposti",
|
"LabelEmail": "Sähköposti",
|
||||||
|
"LabelEmailSettingsTestAddress": "Testiosoite",
|
||||||
|
"LabelEmbeddedCover": "Upotettu kansikuva",
|
||||||
"LabelEnable": "Ota käyttöön",
|
"LabelEnable": "Ota käyttöön",
|
||||||
|
"LabelEnd": "Loppu",
|
||||||
"LabelEndOfChapter": "Luvun loppu",
|
"LabelEndOfChapter": "Luvun loppu",
|
||||||
"LabelEpisode": "Jakso",
|
"LabelEpisode": "Jakso",
|
||||||
|
"LabelEpisodes": "Jaksot",
|
||||||
|
"LabelExample": "Esimerkki",
|
||||||
|
"LabelFeedURL": "Syötteen URL",
|
||||||
"LabelFile": "Tiedosto",
|
"LabelFile": "Tiedosto",
|
||||||
"LabelFileBirthtime": "Tiedoston syntymäaika",
|
"LabelFileBirthtime": "Tiedoston syntymäaika",
|
||||||
|
"LabelFileBornDate": "Syntynyt {0}",
|
||||||
"LabelFileModified": "Muutettu tiedosto",
|
"LabelFileModified": "Muutettu tiedosto",
|
||||||
|
"LabelFileModifiedDate": "Muokattu {0}",
|
||||||
"LabelFilename": "Tiedostonimi",
|
"LabelFilename": "Tiedostonimi",
|
||||||
|
"LabelFindEpisodes": "Etsi jaksoja",
|
||||||
|
"LabelFinished": "Valmis",
|
||||||
"LabelFolder": "Kansio",
|
"LabelFolder": "Kansio",
|
||||||
|
"LabelFolders": "Kansiot",
|
||||||
|
"LabelGenre": "Lajityyppi",
|
||||||
|
"LabelGenres": "Lajityypit",
|
||||||
|
"LabelHost": "Isäntä",
|
||||||
|
"LabelHours": "Tunnit",
|
||||||
"LabelInProgress": "Kesken",
|
"LabelInProgress": "Kesken",
|
||||||
"LabelIncomplete": "Keskeneräinen",
|
"LabelIncomplete": "Keskeneräinen",
|
||||||
|
"LabelIntervalEvery12Hours": "12 tunnin välein",
|
||||||
|
"LabelIntervalEvery15Minutes": "15 minuutin välein",
|
||||||
|
"LabelIntervalEvery2Hours": "2 tunnin välein",
|
||||||
|
"LabelIntervalEvery30Minutes": "30 minuutin välein",
|
||||||
|
"LabelIntervalEvery6Hours": "6 tunnin välein",
|
||||||
|
"LabelIntervalEveryDay": "Joka päivä",
|
||||||
|
"LabelIntervalEveryHour": "Joka tunti",
|
||||||
|
"LabelItem": "Kohde",
|
||||||
"LabelLanguage": "Kieli",
|
"LabelLanguage": "Kieli",
|
||||||
|
"LabelLanguageDefaultServer": "Palvelimen oletuskieli",
|
||||||
|
"LabelLanguages": "Kielet",
|
||||||
|
"LabelLastBookAdded": "Viimeisin lisätty kirja",
|
||||||
|
"LabelLibrary": "Kirjasto",
|
||||||
|
"LabelLineSpacing": "Riviväli",
|
||||||
"LabelListenAgain": "Kuuntele uudelleen",
|
"LabelListenAgain": "Kuuntele uudelleen",
|
||||||
"LabelMediaType": "Mediatyyppi",
|
"LabelMediaType": "Mediatyyppi",
|
||||||
|
"LabelMinute": "Minuutti",
|
||||||
|
"LabelMinutes": "Minuutit",
|
||||||
"LabelMore": "Lisää",
|
"LabelMore": "Lisää",
|
||||||
"LabelMoreInfo": "Lisätietoja",
|
"LabelMoreInfo": "Lisätietoja",
|
||||||
"LabelName": "Nimi",
|
"LabelName": "Nimi",
|
||||||
"LabelNarrator": "Lukija",
|
"LabelNarrator": "Lukija",
|
||||||
"LabelNarrators": "Lukijat",
|
"LabelNarrators": "Lukijat",
|
||||||
|
"LabelNew": "Uusi",
|
||||||
|
"LabelNewPassword": "Uusi salasana",
|
||||||
"LabelNewestAuthors": "Uusimmat kirjailijat",
|
"LabelNewestAuthors": "Uusimmat kirjailijat",
|
||||||
"LabelNewestEpisodes": "Uusimmat jaksot",
|
"LabelNewestEpisodes": "Uusimmat jaksot",
|
||||||
|
"LabelNotStarted": "Ei aloitettu",
|
||||||
"LabelPassword": "Salasana",
|
"LabelPassword": "Salasana",
|
||||||
"LabelPath": "Polku",
|
"LabelPath": "Polku",
|
||||||
|
"LabelPermanent": "Pysyvä",
|
||||||
|
"LabelPermissionsAccessAllLibraries": "Käyttöoikeudet kaikkiin kirjastoihin",
|
||||||
|
"LabelPermissionsDelete": "Voi poistaa",
|
||||||
|
"LabelPermissionsDownload": "Voi ladata",
|
||||||
|
"LabelPermissionsUpdate": "Voi päivittää",
|
||||||
|
"LabelPermissionsUpload": "Voi lähettää",
|
||||||
|
"LabelPlaylists": "Soittolistat",
|
||||||
|
"LabelPodcast": "Podcast",
|
||||||
"LabelPodcasts": "Podcastit",
|
"LabelPodcasts": "Podcastit",
|
||||||
|
"LabelPort": "Portti",
|
||||||
"LabelPublishYear": "Julkaisuvuosi",
|
"LabelPublishYear": "Julkaisuvuosi",
|
||||||
|
"LabelPublisher": "Julkaisija",
|
||||||
|
"LabelPublishers": "Julkaisijat",
|
||||||
"LabelRSSFeedPreventIndexing": "Estä indeksointi",
|
"LabelRSSFeedPreventIndexing": "Estä indeksointi",
|
||||||
|
"LabelRandomly": "Satunnaisesti",
|
||||||
"LabelRead": "Lue",
|
"LabelRead": "Lue",
|
||||||
"LabelReadAgain": "Lue uudelleen",
|
"LabelReadAgain": "Lue uudelleen",
|
||||||
"LabelRecentSeries": "Viimeisimmät sarjat",
|
"LabelRecentSeries": "Viimeisimmät sarjat",
|
||||||
"LabelRecentlyAdded": "Viimeeksi lisätyt",
|
"LabelRecentlyAdded": "Viimeeksi lisätyt",
|
||||||
|
"LabelRecommended": "Suositeltu",
|
||||||
|
"LabelRegion": "Alue",
|
||||||
|
"LabelRemoveCover": "Poista kansikuva",
|
||||||
"LabelSeason": "Kausi",
|
"LabelSeason": "Kausi",
|
||||||
|
"LabelSelectAll": "Valitse kaikki",
|
||||||
|
"LabelSelectUsers": "Valitse käyttäjät",
|
||||||
|
"LabelSeries": "Sarja",
|
||||||
|
"LabelSeriesName": "Sarjan nimi",
|
||||||
"LabelSetEbookAsPrimary": "Aseta ensisijaiseksi",
|
"LabelSetEbookAsPrimary": "Aseta ensisijaiseksi",
|
||||||
"LabelSetEbookAsSupplementary": "Aseta täydentäväksi",
|
"LabelSetEbookAsSupplementary": "Aseta täydentäväksi",
|
||||||
|
"LabelSettingsAudiobooksOnly": "Vain äänikirjat",
|
||||||
|
"LabelSettingsChromecastSupport": "Chromecast-tuki",
|
||||||
|
"LabelSettingsExperimentalFeatures": "Kokeelliset ominaisuudet",
|
||||||
|
"LabelSettingsFindCovers": "Etsi kansikuvia",
|
||||||
|
"LabelShare": "Jaa",
|
||||||
"LabelShowAll": "Näytä kaikki",
|
"LabelShowAll": "Näytä kaikki",
|
||||||
|
"LabelShowSeconds": "Näytä sekunnit",
|
||||||
"LabelSize": "Koko",
|
"LabelSize": "Koko",
|
||||||
"LabelSleepTimer": "Uniajastin",
|
"LabelSleepTimer": "Uniajastin",
|
||||||
|
"LabelStart": "Aloita",
|
||||||
|
"LabelStartTime": "Aloitusaika",
|
||||||
|
"LabelStatsAudioTracks": "Ääniraidat",
|
||||||
|
"LabelStatsBestDay": "Paras päivä",
|
||||||
"LabelStatsDailyAverage": "Päivittäinen keskiarvo",
|
"LabelStatsDailyAverage": "Päivittäinen keskiarvo",
|
||||||
|
"LabelStatsDays": "Päivää",
|
||||||
|
"LabelStatsDaysListened": "Päivää kuunneltu",
|
||||||
|
"LabelStatsHours": "Tunnit",
|
||||||
"LabelStatsInARow": "peräjälkeen",
|
"LabelStatsInARow": "peräjälkeen",
|
||||||
"LabelStatsMinutes": "minuuttia",
|
"LabelStatsMinutes": "minuuttia",
|
||||||
|
"LabelStatsMinutesListening": "Minuuttia kuunneltu",
|
||||||
|
"LabelStatsWeekListening": "Viikon aikana kuunneltu",
|
||||||
|
"LabelTag": "Tägi",
|
||||||
|
"LabelTags": "Tägit",
|
||||||
"LabelTheme": "Teema",
|
"LabelTheme": "Teema",
|
||||||
"LabelThemeDark": "Tumma",
|
"LabelThemeDark": "Tumma",
|
||||||
"LabelThemeLight": "Kirkas",
|
"LabelThemeLight": "Kirkas",
|
||||||
"LabelTimeRemaining": "{0} jäljellä",
|
"LabelTimeRemaining": "{0} jäljellä",
|
||||||
|
"LabelTitle": "Nimi",
|
||||||
|
"LabelTotalDuration": "Kokonaiskesto",
|
||||||
|
"LabelTracks": "Raidat",
|
||||||
"LabelType": "Tyyppi",
|
"LabelType": "Tyyppi",
|
||||||
|
"LabelUnknown": "Tuntematon",
|
||||||
|
"LabelUpdateCover": "Päivitä kansikuva",
|
||||||
"LabelUser": "Käyttäjä",
|
"LabelUser": "Käyttäjä",
|
||||||
"LabelUsername": "Käyttäjätunnus",
|
"LabelUsername": "Käyttäjätunnus",
|
||||||
|
"LabelValue": "Arvo",
|
||||||
|
"LabelVersion": "Versio",
|
||||||
"LabelYourBookmarks": "Kirjanmerkkisi",
|
"LabelYourBookmarks": "Kirjanmerkkisi",
|
||||||
"LabelYourProgress": "Edistymisesi",
|
"LabelYourProgress": "Edistymisesi",
|
||||||
"MessageDownloadingEpisode": "Ladataan jaksoa",
|
"MessageDownloadingEpisode": "Ladataan jaksoa",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} jaksoa on latausjonossa",
|
"MessageEpisodesQueuedForDownload": "{0} jaksoa on latausjonossa",
|
||||||
|
"MessageFeedURLWillBe": "Syötteen URL tulee olemaan {0}",
|
||||||
"MessageFetching": "Haetaan...",
|
"MessageFetching": "Haetaan...",
|
||||||
"MessageLoading": "Ladataan...",
|
"MessageLoading": "Ladataan...",
|
||||||
"MessageMarkAsFinished": "Merkitse valmiiksi",
|
"MessageMarkAsFinished": "Merkitse valmiiksi",
|
||||||
"MessageNoBookmarks": "Ei kirjanmerkkejä",
|
"MessageNoBookmarks": "Ei kirjanmerkkejä",
|
||||||
|
"MessageNoChapters": "Ei kappaleita",
|
||||||
|
"MessageNoCoversFound": "Kansikuvia ei löydetty",
|
||||||
|
"MessageNoGenres": "Ei lajityyppejä",
|
||||||
"MessageNoItems": "Ei kohteita",
|
"MessageNoItems": "Ei kohteita",
|
||||||
"MessageNoItemsFound": "Kohteita ei löytynyt",
|
"MessageNoItemsFound": "Kohteita ei löytynyt",
|
||||||
|
"MessageNoListeningSessions": "Ei kuunteluistuntoja",
|
||||||
"MessageNoPodcastsFound": "Podcasteja ei löytynyt",
|
"MessageNoPodcastsFound": "Podcasteja ei löytynyt",
|
||||||
|
"MessageNoUpdatesWereNecessary": "Päivityksiä ei tarvittu",
|
||||||
"MessageNoUserPlaylists": "Sinulla ei ole soittolistoja",
|
"MessageNoUserPlaylists": "Sinulla ei ole soittolistoja",
|
||||||
|
"MessageOr": "tai",
|
||||||
"MessageReportBugsAndContribute": "Ilmoita virheistä, toivo ominaisuuksia ja osallistu",
|
"MessageReportBugsAndContribute": "Ilmoita virheistä, toivo ominaisuuksia ja osallistu",
|
||||||
|
"MessageTaskFailed": "Epäonnistunut",
|
||||||
|
"StatsSessions": "istunnot",
|
||||||
|
"ToastAccountUpdateSuccess": "Tili päivitetty",
|
||||||
"ToastBookmarkCreateFailed": "Kirjanmerkin luominen epäonnistui",
|
"ToastBookmarkCreateFailed": "Kirjanmerkin luominen epäonnistui",
|
||||||
"ToastBookmarkUpdateFailed": "Kirjanmerkin päivittäminen epäonnistui",
|
"ToastCoverUpdateFailed": "Kansikuvan päivitys epäonnistui",
|
||||||
|
"ToastItemCoverUpdateSuccess": "Kohteen kansikuva päivitetty",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Valmiiksi merkitseminen epäonnistui",
|
"ToastItemMarkedAsFinishedFailed": "Valmiiksi merkitseminen epäonnistui",
|
||||||
|
"ToastItemMarkedAsNotFinishedFailed": "Valmiiksi merkitsemisen poisto epäonnistui",
|
||||||
|
"ToastItemUpdateSuccess": "Kohde päivitetty",
|
||||||
|
"ToastLibraryCreateFailed": "Kirjaston luominen epäonnistui",
|
||||||
|
"ToastLibraryCreateSuccess": "Kirjasto \"{0}\" luotu",
|
||||||
|
"ToastLibraryDeleteFailed": "Kirjaston poistaminen epäonnistui",
|
||||||
|
"ToastLibraryDeleteSuccess": "Kirjasto poistettu",
|
||||||
|
"ToastLibraryUpdateSuccess": "Kirjasto \"{0}\" päivitetty",
|
||||||
|
"ToastNewUserCreatedFailed": "Tilin \"{0}\" luominen epäonnistui",
|
||||||
|
"ToastNewUserCreatedSuccess": "Uusi tili luotu",
|
||||||
"ToastPlaylistCreateFailed": "Soittolistan luominen epäonnistui",
|
"ToastPlaylistCreateFailed": "Soittolistan luominen epäonnistui",
|
||||||
|
"ToastPlaylistCreateSuccess": "Soittolista luotu",
|
||||||
|
"ToastPlaylistRemoveSuccess": "Soittolista poistettu",
|
||||||
|
"ToastPlaylistUpdateSuccess": "Soittolista päivitetty",
|
||||||
"ToastPodcastCreateFailed": "Podcastin luominen epäonnistui",
|
"ToastPodcastCreateFailed": "Podcastin luominen epäonnistui",
|
||||||
"ToastPodcastCreateSuccess": "Podcastin luominen onnistui"
|
"ToastPodcastCreateSuccess": "Podcastin luominen onnistui",
|
||||||
|
"ToastRSSFeedCloseFailed": "RSS syötteen sulkeminen epäonnistui",
|
||||||
|
"ToastRSSFeedCloseSuccess": "RSS syöte suljettu",
|
||||||
|
"ToastRemoveFailed": "Poistaminen epäonnistui",
|
||||||
|
"ToastRemoveItemFromCollectionFailed": "Kohteen poistaminen kokoelmasta epäonnistui",
|
||||||
|
"ToastRemoveItemFromCollectionSuccess": "Kohde poistettu kokoelmasta",
|
||||||
|
"ToastRenameFailed": "Uudelleennimeäminen epäonnistui",
|
||||||
|
"ToastSelectAtLeastOneUser": "Valitse ainakin yksi käyttäjä",
|
||||||
|
"ToastServerSettingsUpdateSuccess": "Palvelimen asetukset päivitetty",
|
||||||
|
"ToastSessionCloseFailed": "Istunnon sulkeminen epäonnistui",
|
||||||
|
"ToastSessionDeleteFailed": "Istunnon poistaminen epäonnistui",
|
||||||
|
"ToastSessionDeleteSuccess": "Istunto poistettu",
|
||||||
|
"ToastSocketConnected": "Yhteys saatu",
|
||||||
|
"ToastSocketDisconnected": "Yhteys katkaistu",
|
||||||
|
"ToastSocketFailedToConnect": "Yhteyden muodostus epäonnistui",
|
||||||
|
"ToastTitleRequired": "Otsikko on pakollinen",
|
||||||
|
"ToastUnknownError": "Tuntematon virhe",
|
||||||
|
"ToastUserDeleteFailed": "Käyttäjän poisto epäonnistui",
|
||||||
|
"ToastUserDeleteSuccess": "Käyttäjä poistettu",
|
||||||
|
"ToastUserPasswordChangeSuccess": "Salasana vaihdettu onnistuneesti",
|
||||||
|
"ToastUserPasswordMismatch": "Salasanat eivät täsmää",
|
||||||
|
"ToastUserPasswordMustChange": "Uusi salasana ei voi olla sama kuin vanha salasana",
|
||||||
|
"ToastUserRootRequireName": "Pääkäyttäjän nimi on pakollinen"
|
||||||
}
|
}
|
||||||
|
|||||||
+75
-59
@@ -9,7 +9,7 @@
|
|||||||
"ButtonApply": "Appliquer",
|
"ButtonApply": "Appliquer",
|
||||||
"ButtonApplyChapters": "Appliquer aux chapitres",
|
"ButtonApplyChapters": "Appliquer aux chapitres",
|
||||||
"ButtonAuthors": "Auteurs",
|
"ButtonAuthors": "Auteurs",
|
||||||
"ButtonBack": "Reculer",
|
"ButtonBack": "Retour",
|
||||||
"ButtonBrowseForFolder": "Naviguer vers le répertoire",
|
"ButtonBrowseForFolder": "Naviguer vers le répertoire",
|
||||||
"ButtonCancel": "Annuler",
|
"ButtonCancel": "Annuler",
|
||||||
"ButtonCancelEncode": "Annuler l’encodage",
|
"ButtonCancelEncode": "Annuler l’encodage",
|
||||||
@@ -51,11 +51,12 @@
|
|||||||
"ButtonNext": "Suivant",
|
"ButtonNext": "Suivant",
|
||||||
"ButtonNextChapter": "Chapitre suivant",
|
"ButtonNextChapter": "Chapitre suivant",
|
||||||
"ButtonNextItemInQueue": "Élément suivant dans la file d’attente",
|
"ButtonNextItemInQueue": "Élément suivant dans la file d’attente",
|
||||||
"ButtonOk": "Ok",
|
"ButtonOk": "D’accord",
|
||||||
"ButtonOpenFeed": "Ouvrir le flux",
|
"ButtonOpenFeed": "Ouvrir le flux",
|
||||||
"ButtonOpenManager": "Ouvrir le gestionnaire",
|
"ButtonOpenManager": "Ouvrir le gestionnaire",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Lire",
|
"ButtonPlay": "Lire",
|
||||||
|
"ButtonPlayAll": "Lire tout",
|
||||||
"ButtonPlaying": "En lecture",
|
"ButtonPlaying": "En lecture",
|
||||||
"ButtonPlaylists": "Listes de lecture",
|
"ButtonPlaylists": "Listes de lecture",
|
||||||
"ButtonPrevious": "Précédent",
|
"ButtonPrevious": "Précédent",
|
||||||
@@ -98,6 +99,7 @@
|
|||||||
"ButtonStats": "Statistiques",
|
"ButtonStats": "Statistiques",
|
||||||
"ButtonSubmit": "Soumettre",
|
"ButtonSubmit": "Soumettre",
|
||||||
"ButtonTest": "Test",
|
"ButtonTest": "Test",
|
||||||
|
"ButtonUnlinkOpenId": "Dissocier OpenID",
|
||||||
"ButtonUpload": "Téléverser",
|
"ButtonUpload": "Téléverser",
|
||||||
"ButtonUploadBackup": "Téléverser une sauvegarde",
|
"ButtonUploadBackup": "Téléverser une sauvegarde",
|
||||||
"ButtonUploadCover": "Téléverser une couverture",
|
"ButtonUploadCover": "Téléverser une couverture",
|
||||||
@@ -211,11 +213,11 @@
|
|||||||
"LabelAccountTypeUser": "Utilisateur",
|
"LabelAccountTypeUser": "Utilisateur",
|
||||||
"LabelActivity": "Activité",
|
"LabelActivity": "Activité",
|
||||||
"LabelAddToCollection": "Ajouter à la collection",
|
"LabelAddToCollection": "Ajouter à la collection",
|
||||||
"LabelAddToCollectionBatch": "Ajout de {0} livres à la lollection",
|
"LabelAddToCollectionBatch": "Ajout de {0} livres à la collection",
|
||||||
"LabelAddToPlaylist": "Ajouter à la liste de lecture",
|
"LabelAddToPlaylist": "Ajouter à la liste de lecture",
|
||||||
"LabelAddToPlaylistBatch": "{0} éléments ajoutés à la liste de lecture",
|
"LabelAddToPlaylistBatch": "{0} éléments ajoutés à la liste de lecture",
|
||||||
"LabelAddedAt": "Date d’ajout",
|
"LabelAddedAt": "Date d’ajout",
|
||||||
"LabelAddedDate": "{0} ajoutés",
|
"LabelAddedDate": "Ajouté le {0}",
|
||||||
"LabelAdminUsersOnly": "Administrateurs uniquement",
|
"LabelAdminUsersOnly": "Administrateurs uniquement",
|
||||||
"LabelAll": "Tout",
|
"LabelAll": "Tout",
|
||||||
"LabelAllUsers": "Tous les utilisateurs",
|
"LabelAllUsers": "Tous les utilisateurs",
|
||||||
@@ -242,7 +244,7 @@
|
|||||||
"LabelBackupsMaxBackupSizeHelp": "Afin de prévenir les mauvaises configuration, la sauvegarde échouera si elle excède la taille limite.",
|
"LabelBackupsMaxBackupSizeHelp": "Afin de prévenir les mauvaises configuration, la sauvegarde échouera si elle excède la taille limite.",
|
||||||
"LabelBackupsNumberToKeep": "Nombre de sauvegardes à conserver",
|
"LabelBackupsNumberToKeep": "Nombre de sauvegardes à conserver",
|
||||||
"LabelBackupsNumberToKeepHelp": "Seule une sauvegarde sera supprimée à la fois. Si vous avez déjà plus de sauvegardes à effacer, vous devez les supprimer manuellement.",
|
"LabelBackupsNumberToKeepHelp": "Seule une sauvegarde sera supprimée à la fois. Si vous avez déjà plus de sauvegardes à effacer, vous devez les supprimer manuellement.",
|
||||||
"LabelBitrate": "Bitrate",
|
"LabelBitrate": "Débit binaire",
|
||||||
"LabelBooks": "Livres",
|
"LabelBooks": "Livres",
|
||||||
"LabelButtonText": "Texte du bouton",
|
"LabelButtonText": "Texte du bouton",
|
||||||
"LabelByAuthor": "par {0}",
|
"LabelByAuthor": "par {0}",
|
||||||
@@ -318,7 +320,7 @@
|
|||||||
"LabelFetchingMetadata": "Récupération des métadonnées",
|
"LabelFetchingMetadata": "Récupération des métadonnées",
|
||||||
"LabelFile": "Fichier",
|
"LabelFile": "Fichier",
|
||||||
"LabelFileBirthtime": "Création du fichier",
|
"LabelFileBirthtime": "Création du fichier",
|
||||||
"LabelFileBornDate": "Créé {0}",
|
"LabelFileBornDate": "Créé le {0}",
|
||||||
"LabelFileModified": "Modification du fichier",
|
"LabelFileModified": "Modification du fichier",
|
||||||
"LabelFileModifiedDate": "Modifié le {0}",
|
"LabelFileModifiedDate": "Modifié le {0}",
|
||||||
"LabelFilename": "Nom de fichier",
|
"LabelFilename": "Nom de fichier",
|
||||||
@@ -462,7 +464,7 @@
|
|||||||
"LabelProviderAuthorizationValue": "Valeur de l’en-tête d’autorisation",
|
"LabelProviderAuthorizationValue": "Valeur de l’en-tête d’autorisation",
|
||||||
"LabelPubDate": "Date de publication",
|
"LabelPubDate": "Date de publication",
|
||||||
"LabelPublishYear": "Année de publication",
|
"LabelPublishYear": "Année de publication",
|
||||||
"LabelPublishedDate": "{0} publiés",
|
"LabelPublishedDate": "Publié en {0}",
|
||||||
"LabelPublisher": "Éditeur",
|
"LabelPublisher": "Éditeur",
|
||||||
"LabelPublishers": "Éditeurs",
|
"LabelPublishers": "Éditeurs",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Courriel personnalisée du propriétaire",
|
"LabelRSSFeedCustomOwnerEmail": "Courriel personnalisée du propriétaire",
|
||||||
@@ -490,7 +492,7 @@
|
|||||||
"LabelSeason": "Saison",
|
"LabelSeason": "Saison",
|
||||||
"LabelSelectAll": "Tout sélectionner",
|
"LabelSelectAll": "Tout sélectionner",
|
||||||
"LabelSelectAllEpisodes": "Sélectionner tous les épisodes",
|
"LabelSelectAllEpisodes": "Sélectionner tous les épisodes",
|
||||||
"LabelSelectEpisodesShowing": "Sélectionner {0} episode(s) en cours",
|
"LabelSelectEpisodesShowing": "Sélectionner {0} épisode(s) en cours",
|
||||||
"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",
|
||||||
@@ -655,45 +657,45 @@
|
|||||||
"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",
|
||||||
"MessageCheckingCron": "Vérification du cron…",
|
"MessageCheckingCron": "Vérification du cron…",
|
||||||
"MessageConfirmCloseFeed": "Êtes-vous sûr de vouloir fermer ce flux ?",
|
"MessageConfirmCloseFeed": "Êtes-vous sûr·e de vouloir fermer ce flux ?",
|
||||||
"MessageConfirmDeleteBackup": "Êtes-vous sûr 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 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 ?",
|
||||||
"MessageConfirmDeleteLibrary": "Êtes-vous sûr de vouloir supprimer définitivement la bibliothèque « {0} » ?",
|
"MessageConfirmDeleteLibrary": "Êtes-vous sûr·e de vouloir supprimer définitivement la bibliothèque « {0} » ?",
|
||||||
"MessageConfirmDeleteLibraryItem": "Cette opération supprimera l’élément de la base de données et de votre système de fichiers. Êtes-vous sûr ?",
|
"MessageConfirmDeleteLibraryItem": "Cette opération supprimera l’élément de la base de données et de votre système de fichiers. Êtes-vous sûr ?",
|
||||||
"MessageConfirmDeleteLibraryItems": "Cette opération supprimera {0} éléments de la base de données et de votre système de fichiers. Êtes-vous sûr ?",
|
"MessageConfirmDeleteLibraryItems": "Cette opération supprimera {0} éléments de la base de données et de votre système de fichiers. Êtes-vous sûr ?",
|
||||||
"MessageConfirmDeleteMetadataProvider": "Êtes-vous sûr de vouloir supprimer le fournisseur de métadonnées personnalisées « {0} » ?",
|
"MessageConfirmDeleteMetadataProvider": "Êtes-vous sûr·e de vouloir supprimer le fournisseur de métadonnées personnalisées « {0} » ?",
|
||||||
"MessageConfirmDeleteNotification": "Êtes-vous sûr de vouloir supprimer cette notification ?",
|
"MessageConfirmDeleteNotification": "Êtes-vous sûr·e de vouloir supprimer cette notification ?",
|
||||||
"MessageConfirmDeleteSession": "Êtes-vous sûr de vouloir supprimer cette session ?",
|
"MessageConfirmDeleteSession": "Êtes-vous sûr·e de vouloir supprimer cette session ?",
|
||||||
"MessageConfirmForceReScan": "Êtes-vous sûr de vouloir lancer une analyse forcée ?",
|
"MessageConfirmForceReScan": "Êtes-vous sûr·e de vouloir lancer une analyse forcée ?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Êtes-vous sûr de marquer tous les épisodes comme terminés ?",
|
"MessageConfirmMarkAllEpisodesFinished": "Êtes-vous sûr·e de marquer tous les épisodes comme terminés ?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "Êtes-vous sûr de vouloir marquer tous les épisodes comme non terminés ?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "Êtes-vous sûr·e de vouloir marquer tous les épisodes comme non terminés ?",
|
||||||
"MessageConfirmMarkItemFinished": "Êtes-vous sûr de vouloir marquer \"{0}\" comme terminé ?",
|
"MessageConfirmMarkItemFinished": "Êtes-vous sûr·e de vouloir marquer {0} comme terminé ?",
|
||||||
"MessageConfirmMarkItemNotFinished": "Êtes-vous sûr de vouloir marquer \"{0}\" comme non terminé ?",
|
"MessageConfirmMarkItemNotFinished": "Êtes-vous sûr·e de vouloir marquer {0} comme non terminé ?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Êtes-vous sûr de vouloir marquer tous les livres de cette série comme terminées ?",
|
"MessageConfirmMarkSeriesFinished": "Êtes-vous sûr·e de vouloir marquer tous les livres de cette série comme terminées ?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Êtes-vous sûr de vouloir marquer tous les livres de cette série comme non terminés ?",
|
"MessageConfirmMarkSeriesNotFinished": "Êtes-vous sûr·e de vouloir marquer tous les livres de cette série comme non terminés ?",
|
||||||
"MessageConfirmNotificationTestTrigger": "Déclencher cette notification avec des données de test ?",
|
"MessageConfirmNotificationTestTrigger": "Déclencher cette notification avec des données de test ?",
|
||||||
"MessageConfirmPurgeCache": "La purge du cache supprimera l’intégralité du répertoire à <code>/metadata/cache</code>.<br /><br />Êtes-vous sûr de vouloir supprimer le répertoire de cache ?",
|
"MessageConfirmPurgeCache": "La purge du cache supprimera l’intégralité du répertoire à <code>/metadata/cache</code>.<br /><br />Êtes-vous sûr·e de vouloir supprimer le répertoire de cache ?",
|
||||||
"MessageConfirmPurgeItemsCache": "Purger le cache des éléments supprimera l'ensemble du répertoire <code>/metadata/cache/items</code>.<br />Êtes-vous sûr ?",
|
"MessageConfirmPurgeItemsCache": "Purger le cache des éléments supprimera l'ensemble du répertoire <code>/metadata/cache/items</code>.<br />Êtes-vous sûr ?",
|
||||||
"MessageConfirmQuickEmbed": "Attention ! L'intégration rapide ne permet pas de sauvegarder vos fichiers audio. Assurez-vous d’avoir effectuer une sauvegarde de vos fichiers audio.<br><br>Souhaitez-vous continuer ?",
|
"MessageConfirmQuickEmbed": "Attention ! L'intégration rapide ne permet pas de sauvegarder vos fichiers audio. Assurez-vous d’avoir effectuer une sauvegarde de vos fichiers audio.<br><br>Souhaitez-vous continuer ?",
|
||||||
"MessageConfirmReScanLibraryItems": "Êtes-vous sûr de vouloir re-analyser {0} éléments ?",
|
"MessageConfirmReScanLibraryItems": "Êtes-vous sûr·e de vouloir réanalyser {0} éléments ?",
|
||||||
"MessageConfirmRemoveAllChapters": "Êtes-vous sûr de vouloir supprimer tous les chapitres ?",
|
"MessageConfirmRemoveAllChapters": "Êtes-vous sûr·e de vouloir supprimer tous les chapitres ?",
|
||||||
"MessageConfirmRemoveAuthor": "Êtes-vous sûr de vouloir supprimer l’auteur « {0} » ?",
|
"MessageConfirmRemoveAuthor": "Êtes-vous sûr·e de vouloir supprimer l’auteur « {0} » ?",
|
||||||
"MessageConfirmRemoveCollection": "Êtes-vous sûr de vouloir supprimer la collection « {0} » ?",
|
"MessageConfirmRemoveCollection": "Êtes-vous sûr·e de vouloir supprimer la collection « {0} » ?",
|
||||||
"MessageConfirmRemoveEpisode": "Êtes-vous sûr de vouloir supprimer l’épisode « {0} » ?",
|
"MessageConfirmRemoveEpisode": "Êtes-vous sûr·e de vouloir supprimer l’épisode « {0} » ?",
|
||||||
"MessageConfirmRemoveEpisodes": "Êtes-vous sûr de vouloir supprimer {0} épisodes ?",
|
"MessageConfirmRemoveEpisodes": "Êtes-vous sûr·e de vouloir supprimer {0} épisodes ?",
|
||||||
"MessageConfirmRemoveListeningSessions": "Êtes-vous sûr de vouloir supprimer {0} sessions d’écoute ?",
|
"MessageConfirmRemoveListeningSessions": "Êtes-vous sûr·e de vouloir supprimer {0} sessions d’écoute ?",
|
||||||
"MessageConfirmRemoveNarrator": "Êtes-vous sûr de vouloir supprimer le narrateur « {0} » ?",
|
"MessageConfirmRemoveNarrator": "Êtes-vous sûr·e de vouloir supprimer le narrateur « {0} » ?",
|
||||||
"MessageConfirmRemovePlaylist": "Êtes-vous sûr de vouloir supprimer la liste de lecture « {0} » ?",
|
"MessageConfirmRemovePlaylist": "Êtes-vous sûr·e de vouloir supprimer la liste de lecture « {0} » ?",
|
||||||
"MessageConfirmRenameGenre": "Êtes-vous sûr de vouloir renommer le genre « {0} » en « {1} » pour tous les éléments ?",
|
"MessageConfirmRenameGenre": "Êtes-vous sûr·e de vouloir renommer le genre « {0} » en « {1} » pour tous les éléments ?",
|
||||||
"MessageConfirmRenameGenreMergeNote": "Information : ce genre existe déjà et sera fusionné.",
|
"MessageConfirmRenameGenreMergeNote": "Information : ce genre existe déjà et sera fusionné.",
|
||||||
"MessageConfirmRenameGenreWarning": "Attention ! Un genre similaire avec une casse différente existe déjà « {0} ».",
|
"MessageConfirmRenameGenreWarning": "Attention ! Un genre similaire avec une casse différente existe déjà « {0} ».",
|
||||||
"MessageConfirmRenameTag": "Êtes-vous sûr de vouloir renommer l’étiquette « {0} » en « {1} » pour tous les éléments ?",
|
"MessageConfirmRenameTag": "Êtes-vous sûr·e de vouloir renommer l’étiquette « {0} » en « {1} » pour tous les éléments ?",
|
||||||
"MessageConfirmRenameTagMergeNote": "Information : Cette étiquette existe déjà et sera fusionnée.",
|
"MessageConfirmRenameTagMergeNote": "Information : Cette étiquette existe déjà et sera fusionnée.",
|
||||||
"MessageConfirmRenameTagWarning": "Attention ! Une étiquette similaire avec une casse différente existe déjà « {0} ».",
|
"MessageConfirmRenameTagWarning": "Attention ! Une étiquette similaire avec une casse différente existe déjà « {0} ».",
|
||||||
"MessageConfirmResetProgress": "Êtes-vous sûr de vouloir réinitialiser votre progression ?",
|
"MessageConfirmResetProgress": "Êtes-vous sûr·e de vouloir réinitialiser votre progression ?",
|
||||||
"MessageConfirmSendEbookToDevice": "Êtes-vous sûr de vouloir envoyer {0} livre numérique « {1} » à l'appareil « {2} » ?",
|
"MessageConfirmSendEbookToDevice": "Êtes-vous sûr·e de vouloir envoyer {0} livre numérique « {1} » à l'appareil « {2} » ?",
|
||||||
"MessageConfirmUnlinkOpenId": "Êtes-vous sûr de vouloir dissocier cet utilisateur d’OpenID ?",
|
"MessageConfirmUnlinkOpenId": "Êtes-vous sûr·e de vouloir dissocier cet utilisateur d’OpenID ?",
|
||||||
"MessageDownloadingEpisode": "Téléchargement de l’épisode",
|
"MessageDownloadingEpisode": "Téléchargement de l’épisode",
|
||||||
"MessageDragFilesIntoTrackOrder": "Faites glisser les fichiers dans l’ordre correct des pistes",
|
"MessageDragFilesIntoTrackOrder": "Faites glisser les fichiers dans l’ordre correct des pistes",
|
||||||
"MessageEmbedFailed": "Échec de l’intégration !",
|
"MessageEmbedFailed": "Échec de l’intégration !",
|
||||||
@@ -762,10 +764,10 @@
|
|||||||
"MessageRemoveChapter": "Supprimer le chapitre",
|
"MessageRemoveChapter": "Supprimer le chapitre",
|
||||||
"MessageRemoveEpisodes": "Suppression de {0} épisode(s)",
|
"MessageRemoveEpisodes": "Suppression de {0} épisode(s)",
|
||||||
"MessageRemoveFromPlayerQueue": "Supprimer de la liste d’écoute",
|
"MessageRemoveFromPlayerQueue": "Supprimer de la liste d’écoute",
|
||||||
"MessageRemoveUserWarning": "Êtes-vous sûr de vouloir supprimer définitivement l’utilisateur « {0} » ?",
|
"MessageRemoveUserWarning": "Êtes-vous sûr·e de vouloir supprimer définitivement l’utilisateur « {0} » ?",
|
||||||
"MessageReportBugsAndContribute": "Signalez des anomalies, demandez des fonctionnalités et contribuez sur",
|
"MessageReportBugsAndContribute": "Signalez des anomalies, demandez des fonctionnalités et contribuez sur",
|
||||||
"MessageResetChaptersConfirm": "Êtes-vous sûr de vouloir réinitialiser les chapitres et annuler les changements effectués ?",
|
"MessageResetChaptersConfirm": "Êtes-vous sûr·e de vouloir réinitialiser les chapitres et annuler les changements effectués ?",
|
||||||
"MessageRestoreBackupConfirm": "Êtes-vous sûr de vouloir restaurer la sauvegarde créée le",
|
"MessageRestoreBackupConfirm": "Êtes-vous sûr·e de vouloir restaurer la sauvegarde créée le",
|
||||||
"MessageRestoreBackupWarning": "Restaurer la sauvegarde écrasera la base de donnée située dans le dossier /config ainsi que les images sur /metadata/items et /metadata/authors.<br><br>Les sauvegardes ne touchent pas aux fichiers de la bibliothèque. Si vous avez activé le paramètre pour sauvegarder les métadonnées et les images de couverture dans le même dossier que les fichiers, ceux-ci ne ni sauvegardés, ni écrasés lors de la restauration.<br><br>Tous les clients utilisant votre serveur seront automatiquement mis à jour.",
|
"MessageRestoreBackupWarning": "Restaurer la sauvegarde écrasera la base de donnée située dans le dossier /config ainsi que les images sur /metadata/items et /metadata/authors.<br><br>Les sauvegardes ne touchent pas aux fichiers de la bibliothèque. Si vous avez activé le paramètre pour sauvegarder les métadonnées et les images de couverture dans le même dossier que les fichiers, ceux-ci ne ni sauvegardés, ni écrasés lors de la restauration.<br><br>Tous les clients utilisant votre serveur seront automatiquement mis à jour.",
|
||||||
"MessageSearchResultsFor": "Résultats de recherche pour",
|
"MessageSearchResultsFor": "Résultats de recherche pour",
|
||||||
"MessageSelected": "{0} sélectionnés",
|
"MessageSelected": "{0} sélectionnés",
|
||||||
@@ -775,6 +777,38 @@
|
|||||||
"MessageShareExpiresIn": "Expire dans {0}",
|
"MessageShareExpiresIn": "Expire dans {0}",
|
||||||
"MessageShareURLWillBe": "L’adresse de partage sera <strong>{0}</strong>",
|
"MessageShareURLWillBe": "L’adresse de partage sera <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "Démarrer la lecture pour « {0} » à {1} ?",
|
"MessageStartPlaybackAtTime": "Démarrer la lecture pour « {0} » à {1} ?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "Le fichier audio « {0} » n’est pas accessible en écriture",
|
||||||
|
"MessageTaskCanceledByUser": "Tâche annulée par l’utilisateur",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "Téléchargement de l'épisode « {0} »",
|
||||||
|
"MessageTaskEmbeddingMetadata": "Intégration de métadonnées",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "Intégration de métadonnées dans le livre audio « {0} »",
|
||||||
|
"MessageTaskEncodingM4b": "Encodage M4B",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Encodage du livre audio « {0} » dans un seul fichier M4B",
|
||||||
|
"MessageTaskFailed": "Échec",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "Échec de la sauvegarde du fichier audio « {0} »",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Échec de la création du répertoire de cache",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "Échec de l'intégration des métadonnées dans le fichier « {0} »",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "Échec de la fusion des fichiers audio",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "Échec du déplacement du fichier M4B",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "Échec de l’écriture du fichier de métadonnées",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "Livres correspondants dans la bibliothèque « {0} »",
|
||||||
|
"MessageTaskNoFilesToScan": "Aucun fichier à analyser",
|
||||||
|
"MessageTaskOpmlImport": "Importation OPML",
|
||||||
|
"MessageTaskOpmlImportDescription": "Création de podcasts à partir de {0} flux RSS",
|
||||||
|
"MessageTaskOpmlImportFeed": "Flux d’importation OPML",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "Importation du flux RSS « {0} »",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "Échec de l’obtention du flux de podcast",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "Création du podcast « {0} »",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastExists": "Le podcast existe déjà à cet emplacement",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "Échec de la création du podcast",
|
||||||
|
"MessageTaskOpmlImportFinished": "Ajout de {0} podcasts",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} ajouté",
|
||||||
|
"MessageTaskScanItemsMissing": "{0} manquant",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} mis à jour",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "Aucun changement nécessaire",
|
||||||
|
"MessageTaskScanningFileChanges": "Analyse des modifications du fichier dans « {0} »",
|
||||||
|
"MessageTaskScanningLibrary": "Analyse de la bibliothèque « {0} »",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "Le répertoire cible n’est pas accessible en écriture",
|
||||||
"MessageThinking": "Je cherche…",
|
"MessageThinking": "Je cherche…",
|
||||||
"MessageUploaderItemFailed": "Échec du téléversement",
|
"MessageUploaderItemFailed": "Échec du téléversement",
|
||||||
"MessageUploaderItemSuccess": "Téléversement effectué !",
|
"MessageUploaderItemSuccess": "Téléversement effectué !",
|
||||||
@@ -815,14 +849,12 @@
|
|||||||
"StatsTopNarrators": "TOP NARRATEURS",
|
"StatsTopNarrators": "TOP NARRATEURS",
|
||||||
"StatsTotalDuration": "Pour une durée totale de…",
|
"StatsTotalDuration": "Pour une durée totale de…",
|
||||||
"StatsYearInReview": "BILAN DE L’ANNÉE",
|
"StatsYearInReview": "BILAN DE L’ANNÉE",
|
||||||
"ToastAccountUpdateFailed": "Échec de la mise à jour du compte",
|
|
||||||
"ToastAccountUpdateSuccess": "Compte mis à jour",
|
"ToastAccountUpdateSuccess": "Compte mis à jour",
|
||||||
"ToastAppriseUrlRequired": "Vous devez entrer une URL Apprise",
|
"ToastAppriseUrlRequired": "Vous devez entrer une URL Apprise",
|
||||||
"ToastAuthorImageRemoveSuccess": "Image de l’auteur supprimée",
|
"ToastAuthorImageRemoveSuccess": "Image de l’auteur supprimée",
|
||||||
"ToastAuthorNotFound": "Auteur \"{0}\" non trouvé",
|
"ToastAuthorNotFound": "Auteur \"{0}\" non trouvé",
|
||||||
"ToastAuthorRemoveSuccess": "Auteur supprimé",
|
"ToastAuthorRemoveSuccess": "Auteur supprimé",
|
||||||
"ToastAuthorSearchNotFound": "Auteur non trouvé",
|
"ToastAuthorSearchNotFound": "Auteur non trouvé",
|
||||||
"ToastAuthorUpdateFailed": "Échec de la mise à jour de l’auteur",
|
|
||||||
"ToastAuthorUpdateMerged": "Auteur fusionné",
|
"ToastAuthorUpdateMerged": "Auteur fusionné",
|
||||||
"ToastAuthorUpdateSuccess": "Auteur mis à jour",
|
"ToastAuthorUpdateSuccess": "Auteur mis à jour",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Auteur mis à jour (aucune image trouvée)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Auteur mis à jour (aucune image trouvée)",
|
||||||
@@ -833,7 +865,6 @@
|
|||||||
"ToastBackupDeleteSuccess": "Sauvegarde supprimée",
|
"ToastBackupDeleteSuccess": "Sauvegarde supprimée",
|
||||||
"ToastBackupInvalidMaxKeep": "Nombre de sauvegardes à conserver invalide",
|
"ToastBackupInvalidMaxKeep": "Nombre de sauvegardes à conserver invalide",
|
||||||
"ToastBackupInvalidMaxSize": "Taille maximale de sauvegarde invalide",
|
"ToastBackupInvalidMaxSize": "Taille maximale de sauvegarde invalide",
|
||||||
"ToastBackupPathUpdateFailed": "Échec de la mise à jour du chemin de sauvegarde",
|
|
||||||
"ToastBackupRestoreFailed": "Échec de la restauration de sauvegarde",
|
"ToastBackupRestoreFailed": "Échec de la restauration de sauvegarde",
|
||||||
"ToastBackupUploadFailed": "Échec du téléversement de sauvegarde",
|
"ToastBackupUploadFailed": "Échec du téléversement de sauvegarde",
|
||||||
"ToastBackupUploadSuccess": "Sauvegarde téléversée",
|
"ToastBackupUploadSuccess": "Sauvegarde téléversée",
|
||||||
@@ -844,7 +875,6 @@
|
|||||||
"ToastBookmarkCreateFailed": "Échec de la création de signet",
|
"ToastBookmarkCreateFailed": "Échec de la création de signet",
|
||||||
"ToastBookmarkCreateSuccess": "Signet ajouté",
|
"ToastBookmarkCreateSuccess": "Signet ajouté",
|
||||||
"ToastBookmarkRemoveSuccess": "Signet supprimé",
|
"ToastBookmarkRemoveSuccess": "Signet supprimé",
|
||||||
"ToastBookmarkUpdateFailed": "Échec de la mise à jour de signet",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Signet mis à jour",
|
"ToastBookmarkUpdateSuccess": "Signet mis à jour",
|
||||||
"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",
|
||||||
@@ -855,7 +885,6 @@
|
|||||||
"ToastCollectionItemsAddSuccess": "Ajout de(s) élément(s) à la collection réussi",
|
"ToastCollectionItemsAddSuccess": "Ajout de(s) élément(s) à la collection réussi",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Élément(s) supprimé(s) de la collection",
|
"ToastCollectionItemsRemoveSuccess": "Élément(s) supprimé(s) de la collection",
|
||||||
"ToastCollectionRemoveSuccess": "Collection supprimée",
|
"ToastCollectionRemoveSuccess": "Collection supprimée",
|
||||||
"ToastCollectionUpdateFailed": "Échec de la mise à jour de la collection",
|
|
||||||
"ToastCollectionUpdateSuccess": "Collection mise à jour",
|
"ToastCollectionUpdateSuccess": "Collection mise à jour",
|
||||||
"ToastCoverUpdateFailed": "Échec de la mise à jour de la couverture",
|
"ToastCoverUpdateFailed": "Échec de la mise à jour de la couverture",
|
||||||
"ToastDeleteFileFailed": "Échec de la suppression du fichier",
|
"ToastDeleteFileFailed": "Échec de la suppression du fichier",
|
||||||
@@ -864,8 +893,6 @@
|
|||||||
"ToastDeviceNameAlreadyExists": "Un appareil de lecture avec ce nom existe déjà",
|
"ToastDeviceNameAlreadyExists": "Un appareil de lecture avec ce nom existe déjà",
|
||||||
"ToastDeviceTestEmailFailed": "Échec de l’envoi du courriel de test",
|
"ToastDeviceTestEmailFailed": "Échec de l’envoi du courriel de test",
|
||||||
"ToastDeviceTestEmailSuccess": "Courriel de test envoyé",
|
"ToastDeviceTestEmailSuccess": "Courriel de test envoyé",
|
||||||
"ToastDeviceUpdateFailed": "Échec de la mise à jour",
|
|
||||||
"ToastEmailSettingsUpdateFailed": "Échec de la mise à jour des paramètres de messagerie",
|
|
||||||
"ToastEmailSettingsUpdateSuccess": "Paramètres de messagerie mis à jour",
|
"ToastEmailSettingsUpdateSuccess": "Paramètres de messagerie mis à jour",
|
||||||
"ToastEncodeCancelFailed": "Échec de l’annulation de l’encodage",
|
"ToastEncodeCancelFailed": "Échec de l’annulation de l’encodage",
|
||||||
"ToastEncodeCancelSucces": "Encodage annulé",
|
"ToastEncodeCancelSucces": "Encodage annulé",
|
||||||
@@ -874,21 +901,16 @@
|
|||||||
"ToastErrorCannotShare": "Impossible de partager nativement sur cet appareil",
|
"ToastErrorCannotShare": "Impossible de partager nativement sur cet appareil",
|
||||||
"ToastFailedToLoadData": "Échec du chargement des données",
|
"ToastFailedToLoadData": "Échec du chargement des données",
|
||||||
"ToastFailedToShare": "Échec du partage",
|
"ToastFailedToShare": "Échec du partage",
|
||||||
"ToastFailedToUpdateAccount": "Échec de la mise à jour du compte",
|
|
||||||
"ToastFailedToUpdateUser": "La mise a jour de l'utilisateur à échouée",
|
|
||||||
"ToastInvalidImageUrl": "URL de l'image invalide",
|
"ToastInvalidImageUrl": "URL de l'image invalide",
|
||||||
"ToastInvalidUrl": "URL invalide",
|
"ToastInvalidUrl": "URL invalide",
|
||||||
"ToastItemCoverUpdateFailed": "Échec de la mise à jour de la couverture de l’élément",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Couverture mise à jour",
|
"ToastItemCoverUpdateSuccess": "Couverture mise à jour",
|
||||||
"ToastItemDeletedFailed": "La suppression de l'élément à échouée",
|
"ToastItemDeletedFailed": "La suppression de l'élément à échouée",
|
||||||
"ToastItemDeletedSuccess": "Élément supprimé",
|
"ToastItemDeletedSuccess": "Élément supprimé",
|
||||||
"ToastItemDetailsUpdateFailed": "Échec de la mise à jour des détails de l’élément",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Détails de l’élément mis à jour",
|
"ToastItemDetailsUpdateSuccess": "Détails de l’élément mis à jour",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Échec de l’annotation terminée",
|
"ToastItemMarkedAsFinishedFailed": "Échec de l’annotation terminée",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Article marqué comme terminé",
|
"ToastItemMarkedAsFinishedSuccess": "Article marqué comme terminé",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Échec de l’annotation non-terminée",
|
"ToastItemMarkedAsNotFinishedFailed": "Échec de l’annotation non-terminée",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Article marqué comme non-terminé",
|
"ToastItemMarkedAsNotFinishedSuccess": "Article marqué comme non-terminé",
|
||||||
"ToastItemUpdateFailed": "La mise a jour de l’élément à échoué",
|
|
||||||
"ToastItemUpdateSuccess": "Élément mis a jour",
|
"ToastItemUpdateSuccess": "Élément mis a jour",
|
||||||
"ToastLibraryCreateFailed": "Échec de la création de bibliothèque",
|
"ToastLibraryCreateFailed": "Échec de la création de bibliothèque",
|
||||||
"ToastLibraryCreateSuccess": "Bibliothèque « {0} » créée",
|
"ToastLibraryCreateSuccess": "Bibliothèque « {0} » créée",
|
||||||
@@ -896,7 +918,6 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Bibliothèque supprimée",
|
"ToastLibraryDeleteSuccess": "Bibliothèque supprimée",
|
||||||
"ToastLibraryScanFailedToStart": "Échec du démarrage de l’analyse",
|
"ToastLibraryScanFailedToStart": "Échec du démarrage de l’analyse",
|
||||||
"ToastLibraryScanStarted": "Analyse de la bibliothèque démarrée",
|
"ToastLibraryScanStarted": "Analyse de la bibliothèque démarrée",
|
||||||
"ToastLibraryUpdateFailed": "Échec de la mise à jour de la bibliothèque",
|
|
||||||
"ToastLibraryUpdateSuccess": "Bibliothèque « {0} » mise à jour",
|
"ToastLibraryUpdateSuccess": "Bibliothèque « {0} » mise à jour",
|
||||||
"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",
|
||||||
@@ -904,23 +925,20 @@
|
|||||||
"ToastNewUserCreatedSuccess": "Nouveau compte créé",
|
"ToastNewUserCreatedSuccess": "Nouveau compte créé",
|
||||||
"ToastNewUserLibraryError": "Au moins une bibliothèque est requise",
|
"ToastNewUserLibraryError": "Au moins une bibliothèque est requise",
|
||||||
"ToastNewUserPasswordError": "Un mot de passe est requis, seul l’utilisateur root peut avoir un mot de passe vide",
|
"ToastNewUserPasswordError": "Un mot de passe est requis, seul l’utilisateur root peut avoir un mot de passe vide",
|
||||||
"ToastNewUserTagError": "Au moins un tag est requis",
|
"ToastNewUserTagError": "Au moins une étiquette est requise",
|
||||||
"ToastNewUserUsernameError": "Entrez un nom d’utilisateur",
|
"ToastNewUserUsernameError": "Entrez un nom d’utilisateur",
|
||||||
"ToastNoUpdatesNecessary": "Aucune mise à jour nécessaire",
|
"ToastNoUpdatesNecessary": "Aucune mise à jour nécessaire",
|
||||||
"ToastNotificationCreateFailed": "La création de la notification à échouée",
|
"ToastNotificationCreateFailed": "La création de la notification à échouée",
|
||||||
"ToastNotificationDeleteFailed": "La suppression de la notification à échouée",
|
"ToastNotificationDeleteFailed": "La suppression de la notification à échouée",
|
||||||
"ToastNotificationFailedMaximum": "Le nombre maximum de tentatives échouées doit être >= 0",
|
"ToastNotificationFailedMaximum": "Le nombre maximum de tentatives échouées doit être >= 0",
|
||||||
"ToastNotificationQueueMaximum": "Le nombre de notification maximum doit être >= 0",
|
"ToastNotificationQueueMaximum": "Le nombre de notification maximum doit être >= 0",
|
||||||
"ToastNotificationSettingsUpdateFailed": "La mise a jour des paramètres de notification a échouée",
|
|
||||||
"ToastNotificationSettingsUpdateSuccess": "Paramètres de notification mis à jour",
|
"ToastNotificationSettingsUpdateSuccess": "Paramètres de notification mis à jour",
|
||||||
"ToastNotificationTestTriggerFailed": "L'envoi de la notification de test à échoué",
|
"ToastNotificationTestTriggerFailed": "L'envoi de la notification de test à échoué",
|
||||||
"ToastNotificationTestTriggerSuccess": "Notification de test déclenchée",
|
"ToastNotificationTestTriggerSuccess": "Notification de test déclenchée",
|
||||||
"ToastNotificationUpdateFailed": "Échec de la mise à jour de la notification",
|
|
||||||
"ToastNotificationUpdateSuccess": "Notification mise à jour",
|
"ToastNotificationUpdateSuccess": "Notification mise à jour",
|
||||||
"ToastPlaylistCreateFailed": "Échec de la création de la liste de lecture",
|
"ToastPlaylistCreateFailed": "Échec de la création de la liste de lecture",
|
||||||
"ToastPlaylistCreateSuccess": "Liste de lecture créée",
|
"ToastPlaylistCreateSuccess": "Liste de lecture créée",
|
||||||
"ToastPlaylistRemoveSuccess": "Liste de lecture supprimée",
|
"ToastPlaylistRemoveSuccess": "Liste de lecture supprimée",
|
||||||
"ToastPlaylistUpdateFailed": "Échec de la mise à jour de la liste de lecture",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Liste de lecture mise à jour",
|
"ToastPlaylistUpdateSuccess": "Liste de lecture mise à jour",
|
||||||
"ToastPodcastCreateFailed": "Échec de la création du podcast",
|
"ToastPodcastCreateFailed": "Échec de la création du podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast créé avec succès",
|
"ToastPodcastCreateSuccess": "Podcast créé avec succès",
|
||||||
@@ -949,7 +967,6 @@
|
|||||||
"ToastSendEbookToDeviceSuccess": "Livre numérique envoyé à l’appareil : {0}",
|
"ToastSendEbookToDeviceSuccess": "Livre numérique envoyé à l’appareil : {0}",
|
||||||
"ToastSeriesUpdateFailed": "Échec de la mise à jour de la série",
|
"ToastSeriesUpdateFailed": "Échec de la mise à jour de la série",
|
||||||
"ToastSeriesUpdateSuccess": "Mise à jour de la série réussie",
|
"ToastSeriesUpdateSuccess": "Mise à jour de la série réussie",
|
||||||
"ToastServerSettingsUpdateFailed": "Échec de la mise à jour des paramètres du serveur",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Mise à jour des paramètres du serveur",
|
"ToastServerSettingsUpdateSuccess": "Mise à jour des paramètres du serveur",
|
||||||
"ToastSessionCloseFailed": "Échec de la fermeture de la session",
|
"ToastSessionCloseFailed": "Échec de la fermeture de la session",
|
||||||
"ToastSessionDeleteFailed": "Échec de la suppression de session",
|
"ToastSessionDeleteFailed": "Échec de la suppression de session",
|
||||||
@@ -960,7 +977,6 @@
|
|||||||
"ToastSocketDisconnected": "WebSocket déconnecté",
|
"ToastSocketDisconnected": "WebSocket déconnecté",
|
||||||
"ToastSocketFailedToConnect": "Échec de la connexion WebSocket",
|
"ToastSocketFailedToConnect": "Échec de la connexion WebSocket",
|
||||||
"ToastSortingPrefixesEmptyError": "Doit avoir au moins 1 préfixe de tri",
|
"ToastSortingPrefixesEmptyError": "Doit avoir au moins 1 préfixe de tri",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Échec de la mise à jour des préfixes de tri",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Mise à jour des préfixes de tri ({0} élément)",
|
"ToastSortingPrefixesUpdateSuccess": "Mise à jour des préfixes de tri ({0} élément)",
|
||||||
"ToastTitleRequired": "Le titre est requis",
|
"ToastTitleRequired": "Le titre est requis",
|
||||||
"ToastUnknownError": "Erreur inconnue",
|
"ToastUnknownError": "Erreur inconnue",
|
||||||
|
|||||||
@@ -701,10 +701,8 @@
|
|||||||
"PlaceholderNewPlaylist": "שם רשימת השמעה חדשה",
|
"PlaceholderNewPlaylist": "שם רשימת השמעה חדשה",
|
||||||
"PlaceholderSearch": "חיפוש..",
|
"PlaceholderSearch": "חיפוש..",
|
||||||
"PlaceholderSearchEpisode": "חיפוש פרק..",
|
"PlaceholderSearchEpisode": "חיפוש פרק..",
|
||||||
"ToastAccountUpdateFailed": "עדכון חשבון נכשל",
|
|
||||||
"ToastAccountUpdateSuccess": "חשבון עודכן בהצלחה",
|
"ToastAccountUpdateSuccess": "חשבון עודכן בהצלחה",
|
||||||
"ToastAuthorImageRemoveSuccess": "תמונת המחבר הוסרה בהצלחה",
|
"ToastAuthorImageRemoveSuccess": "תמונת המחבר הוסרה בהצלחה",
|
||||||
"ToastAuthorUpdateFailed": "עדכון המחבר נכשל",
|
|
||||||
"ToastAuthorUpdateMerged": "המחבר מוזג",
|
"ToastAuthorUpdateMerged": "המחבר מוזג",
|
||||||
"ToastAuthorUpdateSuccess": "המחבר עודכן בהצלחה",
|
"ToastAuthorUpdateSuccess": "המחבר עודכן בהצלחה",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "המחבר עודכן (תמונה לא נמצאה)",
|
"ToastAuthorUpdateSuccessNoImageFound": "המחבר עודכן (תמונה לא נמצאה)",
|
||||||
@@ -720,17 +718,13 @@
|
|||||||
"ToastBookmarkCreateFailed": "יצירת סימניה נכשלה",
|
"ToastBookmarkCreateFailed": "יצירת סימניה נכשלה",
|
||||||
"ToastBookmarkCreateSuccess": "הסימניה נוספה בהצלחה",
|
"ToastBookmarkCreateSuccess": "הסימניה נוספה בהצלחה",
|
||||||
"ToastBookmarkRemoveSuccess": "הסימניה הוסרה בהצלחה",
|
"ToastBookmarkRemoveSuccess": "הסימניה הוסרה בהצלחה",
|
||||||
"ToastBookmarkUpdateFailed": "עדכון הסימניה נכשל",
|
|
||||||
"ToastBookmarkUpdateSuccess": "הסימניה עודכנה בהצלחה",
|
"ToastBookmarkUpdateSuccess": "הסימניה עודכנה בהצלחה",
|
||||||
"ToastChaptersHaveErrors": "פרקים מכילים שגיאות",
|
"ToastChaptersHaveErrors": "פרקים מכילים שגיאות",
|
||||||
"ToastChaptersMustHaveTitles": "פרקים חייבים לכלול כותרות",
|
"ToastChaptersMustHaveTitles": "פרקים חייבים לכלול כותרות",
|
||||||
"ToastCollectionItemsRemoveSuccess": "הפריט(ים) הוסרו מהאוסף בהצלחה",
|
"ToastCollectionItemsRemoveSuccess": "הפריט(ים) הוסרו מהאוסף בהצלחה",
|
||||||
"ToastCollectionRemoveSuccess": "האוסף הוסר בהצלחה",
|
"ToastCollectionRemoveSuccess": "האוסף הוסר בהצלחה",
|
||||||
"ToastCollectionUpdateFailed": "עדכון האוסף נכשל",
|
|
||||||
"ToastCollectionUpdateSuccess": "האוסף עודכן בהצלחה",
|
"ToastCollectionUpdateSuccess": "האוסף עודכן בהצלחה",
|
||||||
"ToastItemCoverUpdateFailed": "עדכון כריכת הפריט נכשל",
|
|
||||||
"ToastItemCoverUpdateSuccess": "כריכת הפריט עודכנה בהצלחה",
|
"ToastItemCoverUpdateSuccess": "כריכת הפריט עודכנה בהצלחה",
|
||||||
"ToastItemDetailsUpdateFailed": "עדכון פרטי הפריט נכשל",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "פרטי הפריט עודכנו בהצלחה",
|
"ToastItemDetailsUpdateSuccess": "פרטי הפריט עודכנו בהצלחה",
|
||||||
"ToastItemMarkedAsFinishedFailed": "סימון כפריט כהושלם נכשל",
|
"ToastItemMarkedAsFinishedFailed": "סימון כפריט כהושלם נכשל",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "הפריט סומן כהושלם בהצלחה",
|
"ToastItemMarkedAsFinishedSuccess": "הפריט סומן כהושלם בהצלחה",
|
||||||
@@ -742,12 +736,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "הספרייה נמחקה בהצלחה",
|
"ToastLibraryDeleteSuccess": "הספרייה נמחקה בהצלחה",
|
||||||
"ToastLibraryScanFailedToStart": "הפעלת הסריקה נכשלה",
|
"ToastLibraryScanFailedToStart": "הפעלת הסריקה נכשלה",
|
||||||
"ToastLibraryScanStarted": "הסריקה של הספרייה החלה",
|
"ToastLibraryScanStarted": "הסריקה של הספרייה החלה",
|
||||||
"ToastLibraryUpdateFailed": "עדכון הספרייה נכשל",
|
|
||||||
"ToastLibraryUpdateSuccess": "הספרייה \"{0}\" עודכנה בהצלחה",
|
"ToastLibraryUpdateSuccess": "הספרייה \"{0}\" עודכנה בהצלחה",
|
||||||
"ToastPlaylistCreateFailed": "יצירת רשימת השמעה נכשלה",
|
"ToastPlaylistCreateFailed": "יצירת רשימת השמעה נכשלה",
|
||||||
"ToastPlaylistCreateSuccess": "רשימת השמעה נוצרה בהצלחה",
|
"ToastPlaylistCreateSuccess": "רשימת השמעה נוצרה בהצלחה",
|
||||||
"ToastPlaylistRemoveSuccess": "רשימת השמעה הוסרה בהצלחה",
|
"ToastPlaylistRemoveSuccess": "רשימת השמעה הוסרה בהצלחה",
|
||||||
"ToastPlaylistUpdateFailed": "עדכון רשימת השמעה נכשל",
|
|
||||||
"ToastPlaylistUpdateSuccess": "רשימת השמעה עודכנה בהצלחה",
|
"ToastPlaylistUpdateSuccess": "רשימת השמעה עודכנה בהצלחה",
|
||||||
"ToastPodcastCreateFailed": "יצירת הפודקאסט נכשלה",
|
"ToastPodcastCreateFailed": "יצירת הפודקאסט נכשלה",
|
||||||
"ToastPodcastCreateSuccess": "הפודקאסט נוצר בהצלחה",
|
"ToastPodcastCreateSuccess": "הפודקאסט נוצר בהצלחה",
|
||||||
@@ -759,7 +751,6 @@
|
|||||||
"ToastSendEbookToDeviceSuccess": "הספר נשלח אל המכשיר \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "הספר נשלח אל המכשיר \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "עדכון הסדרה נכשל",
|
"ToastSeriesUpdateFailed": "עדכון הסדרה נכשל",
|
||||||
"ToastSeriesUpdateSuccess": "הסדרה עודכנה בהצלחה",
|
"ToastSeriesUpdateSuccess": "הסדרה עודכנה בהצלחה",
|
||||||
"ToastServerSettingsUpdateFailed": "כשל בעדכון הגדרות שרת",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "הגדרות שרת עודכנו בהצלחה",
|
"ToastServerSettingsUpdateSuccess": "הגדרות שרת עודכנו בהצלחה",
|
||||||
"ToastSessionDeleteFailed": "מחיקת הפעולה נכשלה",
|
"ToastSessionDeleteFailed": "מחיקת הפעולה נכשלה",
|
||||||
"ToastSessionDeleteSuccess": "הפעולה נמחקה בהצלחה",
|
"ToastSessionDeleteSuccess": "הפעולה נמחקה בהצלחה",
|
||||||
|
|||||||
+43
-26
@@ -56,6 +56,7 @@
|
|||||||
"ButtonOpenManager": "Otvori Upravitelja",
|
"ButtonOpenManager": "Otvori Upravitelja",
|
||||||
"ButtonPause": "Pauziraj",
|
"ButtonPause": "Pauziraj",
|
||||||
"ButtonPlay": "Reproduciraj",
|
"ButtonPlay": "Reproduciraj",
|
||||||
|
"ButtonPlayAll": "Reproduciraj sve",
|
||||||
"ButtonPlaying": "Izvodi se",
|
"ButtonPlaying": "Izvodi se",
|
||||||
"ButtonPlaylists": "Popisi za izvođenje",
|
"ButtonPlaylists": "Popisi za izvođenje",
|
||||||
"ButtonPrevious": "Prethodno",
|
"ButtonPrevious": "Prethodno",
|
||||||
@@ -96,8 +97,9 @@
|
|||||||
"ButtonStartM4BEncode": "Pokreni M4B kodiranje",
|
"ButtonStartM4BEncode": "Pokreni M4B kodiranje",
|
||||||
"ButtonStartMetadataEmbed": "Pokreni ugradnju meta-podataka",
|
"ButtonStartMetadataEmbed": "Pokreni ugradnju meta-podataka",
|
||||||
"ButtonStats": "Statistika",
|
"ButtonStats": "Statistika",
|
||||||
"ButtonSubmit": "Podnesi",
|
"ButtonSubmit": "Pošalji",
|
||||||
"ButtonTest": "Test",
|
"ButtonTest": "Test",
|
||||||
|
"ButtonUnlinkOpenId": "Prekini vezu s OpenID-jem",
|
||||||
"ButtonUpload": "Učitaj",
|
"ButtonUpload": "Učitaj",
|
||||||
"ButtonUploadBackup": "Učitaj sigurnosnu kopiju",
|
"ButtonUploadBackup": "Učitaj sigurnosnu kopiju",
|
||||||
"ButtonUploadCover": "Učitaj naslovnicu",
|
"ButtonUploadCover": "Učitaj naslovnicu",
|
||||||
@@ -246,7 +248,7 @@
|
|||||||
"LabelBooks": "knjiga/e",
|
"LabelBooks": "knjiga/e",
|
||||||
"LabelButtonText": "Tekst gumba",
|
"LabelButtonText": "Tekst gumba",
|
||||||
"LabelByAuthor": "po {0}",
|
"LabelByAuthor": "po {0}",
|
||||||
"LabelChangePassword": "Promijeni lozinku",
|
"LabelChangePassword": "Promijeni zaporku",
|
||||||
"LabelChannels": "Kanali",
|
"LabelChannels": "Kanali",
|
||||||
"LabelChapterTitle": "Naslov poglavlja",
|
"LabelChapterTitle": "Naslov poglavlja",
|
||||||
"LabelChapters": "Poglavlja",
|
"LabelChapters": "Poglavlja",
|
||||||
@@ -259,13 +261,13 @@
|
|||||||
"LabelCollection": "Zbirka",
|
"LabelCollection": "Zbirka",
|
||||||
"LabelCollections": "Zbirka/i",
|
"LabelCollections": "Zbirka/i",
|
||||||
"LabelComplete": "Dovršeno",
|
"LabelComplete": "Dovršeno",
|
||||||
"LabelConfirmPassword": "Potvrdi lozinku",
|
"LabelConfirmPassword": "Potvrda zaporke",
|
||||||
"LabelContinueListening": "Nastavi slušati",
|
"LabelContinueListening": "Nastavi slušati",
|
||||||
"LabelContinueReading": "Nastavi čitati",
|
"LabelContinueReading": "Nastavi čitati",
|
||||||
"LabelContinueSeries": "Nastavi serijal",
|
"LabelContinueSeries": "Nastavi serijal",
|
||||||
"LabelCover": "Naslovnica",
|
"LabelCover": "Naslovnica",
|
||||||
"LabelCoverImageURL": "URL naslovnice",
|
"LabelCoverImageURL": "URL naslovnice",
|
||||||
"LabelCreatedAt": "Stvoreno",
|
"LabelCreatedAt": "Izrađen",
|
||||||
"LabelCronExpression": "Cron izraz",
|
"LabelCronExpression": "Cron izraz",
|
||||||
"LabelCurrent": "Trenutan",
|
"LabelCurrent": "Trenutan",
|
||||||
"LabelCurrently": "Trenutno:",
|
"LabelCurrently": "Trenutno:",
|
||||||
@@ -367,7 +369,7 @@
|
|||||||
"LabelLanguages": "Jezici",
|
"LabelLanguages": "Jezici",
|
||||||
"LabelLastBookAdded": "Zadnja dodana knjiga",
|
"LabelLastBookAdded": "Zadnja dodana knjiga",
|
||||||
"LabelLastBookUpdated": "Zadnja ažurirana knjiga",
|
"LabelLastBookUpdated": "Zadnja ažurirana knjiga",
|
||||||
"LabelLastSeen": "Zadnje pogledano",
|
"LabelLastSeen": "Zadnji puta viđen",
|
||||||
"LabelLastTime": "Zadnji puta",
|
"LabelLastTime": "Zadnji puta",
|
||||||
"LabelLastUpdate": "Zadnje ažuriranje",
|
"LabelLastUpdate": "Zadnje ažuriranje",
|
||||||
"LabelLayout": "Prikaz",
|
"LabelLayout": "Prikaz",
|
||||||
@@ -408,9 +410,9 @@
|
|||||||
"LabelNarrator": "Pripovjedač",
|
"LabelNarrator": "Pripovjedač",
|
||||||
"LabelNarrators": "Pripovjedači",
|
"LabelNarrators": "Pripovjedači",
|
||||||
"LabelNew": "Novo",
|
"LabelNew": "Novo",
|
||||||
"LabelNewPassword": "Nova lozinka",
|
"LabelNewPassword": "Nova zaporka",
|
||||||
"LabelNewestAuthors": "Najnoviji autori",
|
"LabelNewestAuthors": "Najnoviji autori",
|
||||||
"LabelNewestEpisodes": "Najnoviji nastavci",
|
"LabelNewestEpisodes": "Najnovije epizode",
|
||||||
"LabelNextBackupDate": "Sljedeće izrada sigurnosne kopije",
|
"LabelNextBackupDate": "Sljedeće izrada sigurnosne kopije",
|
||||||
"LabelNextScheduledRun": "Sljedeće zakazano izvođenje",
|
"LabelNextScheduledRun": "Sljedeće zakazano izvođenje",
|
||||||
"LabelNoCustomMetadataProviders": "Nema prilagođenih pružatelja meta-podataka",
|
"LabelNoCustomMetadataProviders": "Nema prilagođenih pružatelja meta-podataka",
|
||||||
@@ -653,7 +655,7 @@
|
|||||||
"MessageChapterErrorFirstNotZero": "Prvo poglavlje mora započeti u 0",
|
"MessageChapterErrorFirstNotZero": "Prvo poglavlje mora započeti u 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Netočno vrijeme početka, mora biti manje od trajanja zvučne knjige",
|
"MessageChapterErrorStartGteDuration": "Netočno vrijeme početka, mora biti manje od trajanja zvučne knjige",
|
||||||
"MessageChapterErrorStartLtPrev": "Netočno vrijeme početka, mora biti veće ili jednako vremenu početka prethodnog poglavlja",
|
"MessageChapterErrorStartLtPrev": "Netočno vrijeme početka, mora biti veće ili jednako vremenu početka prethodnog poglavlja",
|
||||||
"MessageChapterStartIsAfter": "Početak poglavlja je nakon kraja zvučne knjige.",
|
"MessageChapterStartIsAfter": "Početak poglavlja je nakon kraja zvučne knjige",
|
||||||
"MessageCheckingCron": "Provjeravam cron...",
|
"MessageCheckingCron": "Provjeravam cron...",
|
||||||
"MessageConfirmCloseFeed": "Sigurno želite zatvoriti ovaj izvor?",
|
"MessageConfirmCloseFeed": "Sigurno želite zatvoriti ovaj izvor?",
|
||||||
"MessageConfirmDeleteBackup": "Jeste li sigurni da želite obrisati backup za {0}?",
|
"MessageConfirmDeleteBackup": "Jeste li sigurni da želite obrisati backup za {0}?",
|
||||||
@@ -775,6 +777,38 @@
|
|||||||
"MessageShareExpiresIn": "Istječe za {0}",
|
"MessageShareExpiresIn": "Istječe za {0}",
|
||||||
"MessageShareURLWillBe": "URL za dijeljenje bit će <strong>{0}</strong>",
|
"MessageShareURLWillBe": "URL za dijeljenje bit će <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "Pokreni reprodukciju za \"{0}\" na {1}?",
|
"MessageStartPlaybackAtTime": "Pokreni reprodukciju za \"{0}\" na {1}?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "U zvučnu datoteku \"{0}\" nije moguće pisati",
|
||||||
|
"MessageTaskCanceledByUser": "Korisnik je otkazao izvršavanje zadatka",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "Preuzimanje nastavka \"{0}\"",
|
||||||
|
"MessageTaskEmbeddingMetadata": "Ugrađivanje meta-podataka",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "Ugrađivanje meta-podataka u zvučnu knjigu \"{0}\"",
|
||||||
|
"MessageTaskEncodingM4b": "Kodiranje M4B datoteke",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Kodiranje zvučne knjige \"{0}\" u jedinstvenu m4b datoteku",
|
||||||
|
"MessageTaskFailed": "Nije uspjelo",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "Izrada sigurnosne kopije zvučne datoteke \"{0}\" nije uspjela",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Izrada mape predmemorije nije uspjela",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "Ugradnja meta-podataka u datoteku \"{0}\" nije uspjela",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "Spajanje zvučnih datoteka nije uspjelo",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "Premještanje m4b datoteke nije uspjelo",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "Pisanje datoteke s meta-podatcima nije uspjelo",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "Prepoznavanje knjiga u knjižnici \"{0}\"",
|
||||||
|
"MessageTaskNoFilesToScan": "Nema datoteka za skeniranje",
|
||||||
|
"MessageTaskOpmlImport": "Uvoz OPML-a",
|
||||||
|
"MessageTaskOpmlImportDescription": "Stvaram podcaste od {0} RSS izvora",
|
||||||
|
"MessageTaskOpmlImportFeed": "Uvoz OPML izvora",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "Uvoz RSS izvora \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "Izvor podcasta nije dohvaćen",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "Stvaranje podcasta \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastExists": "Podcast već postoji u putanji",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "Stvaranje podcasta nije uspjelo",
|
||||||
|
"MessageTaskOpmlImportFinished": "Dodano {0} podcasta",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} dodan(o)",
|
||||||
|
"MessageTaskScanItemsMissing": "{0} nedostaje",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} ažurirano",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "Nisu potrebne izmjene",
|
||||||
|
"MessageTaskScanningFileChanges": "Skeniranje izmijenjenih datoteka u \"{0}\"",
|
||||||
|
"MessageTaskScanningLibrary": "Skeniranje knjižnice \"{0}\"",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "U odredišnu mapu nije moguće pisati",
|
||||||
"MessageThinking": "Razmišljam...",
|
"MessageThinking": "Razmišljam...",
|
||||||
"MessageUploaderItemFailed": "Učitavanje nije uspjelo",
|
"MessageUploaderItemFailed": "Učitavanje nije uspjelo",
|
||||||
"MessageUploaderItemSuccess": "Uspješno učitano!",
|
"MessageUploaderItemSuccess": "Uspješno učitano!",
|
||||||
@@ -815,14 +849,12 @@
|
|||||||
"StatsTopNarrators": "NAJPOPULARNIJI PRIPOVJEDAČI",
|
"StatsTopNarrators": "NAJPOPULARNIJI PRIPOVJEDAČI",
|
||||||
"StatsTotalDuration": "S ukupnim trajanjem od…",
|
"StatsTotalDuration": "S ukupnim trajanjem od…",
|
||||||
"StatsYearInReview": "PREGLED GODINE",
|
"StatsYearInReview": "PREGLED GODINE",
|
||||||
"ToastAccountUpdateFailed": "Ažuriranje računa nije uspjelo",
|
|
||||||
"ToastAccountUpdateSuccess": "Račun ažuriran",
|
"ToastAccountUpdateSuccess": "Račun ažuriran",
|
||||||
"ToastAppriseUrlRequired": "Obavezno upisati Apprise URL",
|
"ToastAppriseUrlRequired": "Obavezno upisati Apprise URL",
|
||||||
"ToastAuthorImageRemoveSuccess": "Slika autora uklonjena",
|
"ToastAuthorImageRemoveSuccess": "Slika autora uklonjena",
|
||||||
"ToastAuthorNotFound": "Autor \"{0}\" nije pronađen",
|
"ToastAuthorNotFound": "Autor \"{0}\" nije pronađen",
|
||||||
"ToastAuthorRemoveSuccess": "Autor uklonjen",
|
"ToastAuthorRemoveSuccess": "Autor uklonjen",
|
||||||
"ToastAuthorSearchNotFound": "Autor nije pronađen",
|
"ToastAuthorSearchNotFound": "Autor nije pronađen",
|
||||||
"ToastAuthorUpdateFailed": "Ažuriranje autora nije uspjelo",
|
|
||||||
"ToastAuthorUpdateMerged": "Autor pripojen",
|
"ToastAuthorUpdateMerged": "Autor pripojen",
|
||||||
"ToastAuthorUpdateSuccess": "Autor ažuriran",
|
"ToastAuthorUpdateSuccess": "Autor ažuriran",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autor ažuriran (slika nije pronađena)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autor ažuriran (slika nije pronađena)",
|
||||||
@@ -833,7 +865,6 @@
|
|||||||
"ToastBackupDeleteSuccess": "Sigurnosna kopija izbrisana",
|
"ToastBackupDeleteSuccess": "Sigurnosna kopija izbrisana",
|
||||||
"ToastBackupInvalidMaxKeep": "Neispravan broj sigurnosnih kopija za čuvanje",
|
"ToastBackupInvalidMaxKeep": "Neispravan broj sigurnosnih kopija za čuvanje",
|
||||||
"ToastBackupInvalidMaxSize": "Neispravna najveća veličina sigurnosne kopije",
|
"ToastBackupInvalidMaxSize": "Neispravna najveća veličina sigurnosne kopije",
|
||||||
"ToastBackupPathUpdateFailed": "Ažuriranje putanje za sigurnosne kopije nije uspjelo",
|
|
||||||
"ToastBackupRestoreFailed": "Vraćanje sigurnosne kopije nije uspjelo",
|
"ToastBackupRestoreFailed": "Vraćanje sigurnosne kopije nije uspjelo",
|
||||||
"ToastBackupUploadFailed": "Učitavanje sigurnosne kopije nije uspjelo",
|
"ToastBackupUploadFailed": "Učitavanje sigurnosne kopije nije uspjelo",
|
||||||
"ToastBackupUploadSuccess": "Sigurnosna kopija učitana",
|
"ToastBackupUploadSuccess": "Sigurnosna kopija učitana",
|
||||||
@@ -844,7 +875,6 @@
|
|||||||
"ToastBookmarkCreateFailed": "Izrada knjižne oznake nije uspjela",
|
"ToastBookmarkCreateFailed": "Izrada knjižne oznake nije uspjela",
|
||||||
"ToastBookmarkCreateSuccess": "Knjižna oznaka dodana",
|
"ToastBookmarkCreateSuccess": "Knjižna oznaka dodana",
|
||||||
"ToastBookmarkRemoveSuccess": "Knjižna oznaka uklonjena",
|
"ToastBookmarkRemoveSuccess": "Knjižna oznaka uklonjena",
|
||||||
"ToastBookmarkUpdateFailed": "Ažuriranje knjižne oznake nije uspjelo",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Knjižna oznaka ažurirana",
|
"ToastBookmarkUpdateSuccess": "Knjižna oznaka ažurirana",
|
||||||
"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",
|
||||||
@@ -855,7 +885,6 @@
|
|||||||
"ToastCollectionItemsAddSuccess": "Uspješno dodavanje stavki u zbirku",
|
"ToastCollectionItemsAddSuccess": "Uspješno dodavanje stavki u zbirku",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Stavke izbrisane iz zbirke",
|
"ToastCollectionItemsRemoveSuccess": "Stavke izbrisane iz zbirke",
|
||||||
"ToastCollectionRemoveSuccess": "Zbirka izbrisana",
|
"ToastCollectionRemoveSuccess": "Zbirka izbrisana",
|
||||||
"ToastCollectionUpdateFailed": "Ažuriranje zbirke nije uspjelo",
|
|
||||||
"ToastCollectionUpdateSuccess": "Zbirka ažurirana",
|
"ToastCollectionUpdateSuccess": "Zbirka ažurirana",
|
||||||
"ToastCoverUpdateFailed": "Ažuriranje naslovnice nije uspjelo",
|
"ToastCoverUpdateFailed": "Ažuriranje naslovnice nije uspjelo",
|
||||||
"ToastDeleteFileFailed": "Brisanje datoteke nije uspjelo",
|
"ToastDeleteFileFailed": "Brisanje datoteke nije uspjelo",
|
||||||
@@ -864,8 +893,6 @@
|
|||||||
"ToastDeviceNameAlreadyExists": "E-čitač s tim nazivom već postoji",
|
"ToastDeviceNameAlreadyExists": "E-čitač s tim nazivom već postoji",
|
||||||
"ToastDeviceTestEmailFailed": "Slanje probne poruke e-pošte nije uspjelo",
|
"ToastDeviceTestEmailFailed": "Slanje probne poruke e-pošte nije uspjelo",
|
||||||
"ToastDeviceTestEmailSuccess": "Probna poruka e-pošte poslana",
|
"ToastDeviceTestEmailSuccess": "Probna poruka e-pošte poslana",
|
||||||
"ToastDeviceUpdateFailed": "Ažuriranje uređaja nije uspjelo",
|
|
||||||
"ToastEmailSettingsUpdateFailed": "Ažuriranje postavki e-pošte nije uspjelo",
|
|
||||||
"ToastEmailSettingsUpdateSuccess": "Postavke e-pošte ažurirane",
|
"ToastEmailSettingsUpdateSuccess": "Postavke e-pošte ažurirane",
|
||||||
"ToastEncodeCancelFailed": "Kodiranje nije uspješno otkazano",
|
"ToastEncodeCancelFailed": "Kodiranje nije uspješno otkazano",
|
||||||
"ToastEncodeCancelSucces": "Kodiranje otkazano",
|
"ToastEncodeCancelSucces": "Kodiranje otkazano",
|
||||||
@@ -874,21 +901,17 @@
|
|||||||
"ToastErrorCannotShare": "Dijeljenje na ovaj uređaj nije moguće",
|
"ToastErrorCannotShare": "Dijeljenje na ovaj uređaj nije moguće",
|
||||||
"ToastFailedToLoadData": "Učitavanje podataka nije uspjelo",
|
"ToastFailedToLoadData": "Učitavanje podataka nije uspjelo",
|
||||||
"ToastFailedToShare": "Dijeljenje nije uspjelo",
|
"ToastFailedToShare": "Dijeljenje nije uspjelo",
|
||||||
"ToastFailedToUpdateAccount": "Ažuriranje računa nije uspjelo",
|
"ToastFailedToUpdate": "Ažuriranje nije uspjelo",
|
||||||
"ToastFailedToUpdateUser": "Ažuriranje korisnika nije uspjelo",
|
|
||||||
"ToastInvalidImageUrl": "Neispravan URL slike",
|
"ToastInvalidImageUrl": "Neispravan URL slike",
|
||||||
"ToastInvalidUrl": "Neispravan URL",
|
"ToastInvalidUrl": "Neispravan URL",
|
||||||
"ToastItemCoverUpdateFailed": "Ažuriranje naslovnice stavke nije uspjelo",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Naslovnica stavke ažurirana",
|
"ToastItemCoverUpdateSuccess": "Naslovnica stavke ažurirana",
|
||||||
"ToastItemDeletedFailed": "Brisanje stavke nije uspjelo",
|
"ToastItemDeletedFailed": "Brisanje stavke nije uspjelo",
|
||||||
"ToastItemDeletedSuccess": "Stavka je izbrisana",
|
"ToastItemDeletedSuccess": "Stavka je izbrisana",
|
||||||
"ToastItemDetailsUpdateFailed": "Ažuriranje podataka stavke nije uspjelo",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Pojedinosti stavke su ažurirane",
|
"ToastItemDetailsUpdateSuccess": "Pojedinosti stavke su ažurirane",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Označavanje kao Dovršeno nije uspjelo",
|
"ToastItemMarkedAsFinishedFailed": "Označavanje kao Dovršeno nije uspjelo",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Stavka označena kao dovršena",
|
"ToastItemMarkedAsFinishedSuccess": "Stavka označena kao dovršena",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Označavanje kao Nije dovršeno nije uspjelo",
|
"ToastItemMarkedAsNotFinishedFailed": "Označavanje kao Nije dovršeno nije uspjelo",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Stavka označena kao nedovršena",
|
"ToastItemMarkedAsNotFinishedSuccess": "Stavka označena kao nedovršena",
|
||||||
"ToastItemUpdateFailed": "Ažuriranje stavke nije uspjelo",
|
|
||||||
"ToastItemUpdateSuccess": "Stavka ažurirana",
|
"ToastItemUpdateSuccess": "Stavka ažurirana",
|
||||||
"ToastLibraryCreateFailed": "Stvaranje knjižnice nije uspjelo",
|
"ToastLibraryCreateFailed": "Stvaranje knjižnice nije uspjelo",
|
||||||
"ToastLibraryCreateSuccess": "Knjižnica \"{0}\" stvorena",
|
"ToastLibraryCreateSuccess": "Knjižnica \"{0}\" stvorena",
|
||||||
@@ -896,7 +919,6 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Knjižnica izbrisana",
|
"ToastLibraryDeleteSuccess": "Knjižnica izbrisana",
|
||||||
"ToastLibraryScanFailedToStart": "Skeniranje nije uspjelo",
|
"ToastLibraryScanFailedToStart": "Skeniranje nije uspjelo",
|
||||||
"ToastLibraryScanStarted": "Skeniranje knjižnice započelo",
|
"ToastLibraryScanStarted": "Skeniranje knjižnice započelo",
|
||||||
"ToastLibraryUpdateFailed": "Ažuriranje knjižnice nije uspjelo",
|
|
||||||
"ToastLibraryUpdateSuccess": "Knjižnica \"{0}\" ažurirana",
|
"ToastLibraryUpdateSuccess": "Knjižnica \"{0}\" ažurirana",
|
||||||
"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",
|
||||||
@@ -911,16 +933,13 @@
|
|||||||
"ToastNotificationDeleteFailed": "Brisanje obavijesti nije uspjelo",
|
"ToastNotificationDeleteFailed": "Brisanje obavijesti nije uspjelo",
|
||||||
"ToastNotificationFailedMaximum": "Najveći broj neuspješnih pokušaja mora biti >= 0",
|
"ToastNotificationFailedMaximum": "Najveći broj neuspješnih pokušaja mora biti >= 0",
|
||||||
"ToastNotificationQueueMaximum": "Najveći broj obavijesti u redu mora biti >= 0",
|
"ToastNotificationQueueMaximum": "Najveći broj obavijesti u redu mora biti >= 0",
|
||||||
"ToastNotificationSettingsUpdateFailed": "Ažuriranje postavki obavijesti nije uspjelo",
|
|
||||||
"ToastNotificationSettingsUpdateSuccess": "Postavke obavijesti ažurirane",
|
"ToastNotificationSettingsUpdateSuccess": "Postavke obavijesti ažurirane",
|
||||||
"ToastNotificationTestTriggerFailed": "Okidanje probne obavijesti nije uspjelo",
|
"ToastNotificationTestTriggerFailed": "Okidanje probne obavijesti nije uspjelo",
|
||||||
"ToastNotificationTestTriggerSuccess": "Okinuta je probna obavijest",
|
"ToastNotificationTestTriggerSuccess": "Okinuta je probna obavijest",
|
||||||
"ToastNotificationUpdateFailed": "Ažuriranje obavijesti nije uspjelo",
|
|
||||||
"ToastNotificationUpdateSuccess": "Obavijest ažurirana",
|
"ToastNotificationUpdateSuccess": "Obavijest ažurirana",
|
||||||
"ToastPlaylistCreateFailed": "Popis za izvođenje nije izrađen",
|
"ToastPlaylistCreateFailed": "Popis za izvođenje nije izrađen",
|
||||||
"ToastPlaylistCreateSuccess": "Popis za izvođenje izrađen",
|
"ToastPlaylistCreateSuccess": "Popis za izvođenje izrađen",
|
||||||
"ToastPlaylistRemoveSuccess": "Popis za izvođenje uklonjen",
|
"ToastPlaylistRemoveSuccess": "Popis za izvođenje uklonjen",
|
||||||
"ToastPlaylistUpdateFailed": "Ažuriranje popisa za izvođenje nije uspjelo",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Popis za izvođenje ažuriran",
|
"ToastPlaylistUpdateSuccess": "Popis za izvođenje ažuriran",
|
||||||
"ToastPodcastCreateFailed": "Podcast nije izrađen",
|
"ToastPodcastCreateFailed": "Podcast nije izrađen",
|
||||||
"ToastPodcastCreateSuccess": "Podcast uspješno izrađen",
|
"ToastPodcastCreateSuccess": "Podcast uspješno izrađen",
|
||||||
@@ -949,7 +968,6 @@
|
|||||||
"ToastSendEbookToDeviceSuccess": "E-knjiga poslana uređaju \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "E-knjiga poslana uređaju \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "Ažuriranje serijala nije uspjelo",
|
"ToastSeriesUpdateFailed": "Ažuriranje serijala nije uspjelo",
|
||||||
"ToastSeriesUpdateSuccess": "Serijal uspješno ažuriran",
|
"ToastSeriesUpdateSuccess": "Serijal uspješno ažuriran",
|
||||||
"ToastServerSettingsUpdateFailed": "Ažuriranje postavki poslužitelja nije uspjelo",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Postavke poslužitelja ažurirane",
|
"ToastServerSettingsUpdateSuccess": "Postavke poslužitelja ažurirane",
|
||||||
"ToastSessionCloseFailed": "Zatvaranje sesije nije uspjelo",
|
"ToastSessionCloseFailed": "Zatvaranje sesije nije uspjelo",
|
||||||
"ToastSessionDeleteFailed": "Neuspješno brisanje serije",
|
"ToastSessionDeleteFailed": "Neuspješno brisanje serije",
|
||||||
@@ -960,7 +978,6 @@
|
|||||||
"ToastSocketDisconnected": "Veza sa socketom je prekinuta",
|
"ToastSocketDisconnected": "Veza sa socketom je prekinuta",
|
||||||
"ToastSocketFailedToConnect": "Priključivanje na socket nije uspjelo",
|
"ToastSocketFailedToConnect": "Priključivanje na socket nije uspjelo",
|
||||||
"ToastSortingPrefixesEmptyError": "Mora imati najmanje jedan prefiks za sortiranje",
|
"ToastSortingPrefixesEmptyError": "Mora imati najmanje jedan prefiks za sortiranje",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Ažuriranje prefiksa za sortiranje nije uspjelo",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Prefiksi za sortiranje ažurirani ({0} stavki)",
|
"ToastSortingPrefixesUpdateSuccess": "Prefiksi za sortiranje ažurirani ({0} stavki)",
|
||||||
"ToastTitleRequired": "Naslov je obavezan",
|
"ToastTitleRequired": "Naslov je obavezan",
|
||||||
"ToastUnknownError": "Nepoznata pogreška",
|
"ToastUnknownError": "Nepoznata pogreška",
|
||||||
|
|||||||
+84
-22
@@ -9,6 +9,7 @@
|
|||||||
"ButtonApply": "Alkalmaz",
|
"ButtonApply": "Alkalmaz",
|
||||||
"ButtonApplyChapters": "Fejezetek alkalmazása",
|
"ButtonApplyChapters": "Fejezetek alkalmazása",
|
||||||
"ButtonAuthors": "Szerzők",
|
"ButtonAuthors": "Szerzők",
|
||||||
|
"ButtonBack": "Vissza",
|
||||||
"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",
|
||||||
@@ -18,7 +19,8 @@
|
|||||||
"ButtonChooseFiles": "Fájlok kiválasztása",
|
"ButtonChooseFiles": "Fájlok kiválasztása",
|
||||||
"ButtonClearFilter": "Szűrő törlése",
|
"ButtonClearFilter": "Szűrő törlése",
|
||||||
"ButtonCloseFeed": "Hírcsatorna bezárása",
|
"ButtonCloseFeed": "Hírcsatorna bezárása",
|
||||||
"ButtonCollections": "Gyűjtemény",
|
"ButtonCloseSession": "Nyitott munkamenet bezárása",
|
||||||
|
"ButtonCollections": "Gyűjtemények",
|
||||||
"ButtonConfigureScanner": "Szkenner konfigurálása",
|
"ButtonConfigureScanner": "Szkenner konfigurálása",
|
||||||
"ButtonCreate": "Létrehozás",
|
"ButtonCreate": "Létrehozás",
|
||||||
"ButtonCreateBackup": "Biztonsági másolat készítése",
|
"ButtonCreateBackup": "Biztonsági másolat készítése",
|
||||||
@@ -27,6 +29,9 @@
|
|||||||
"ButtonEdit": "Szerkesztés",
|
"ButtonEdit": "Szerkesztés",
|
||||||
"ButtonEditChapters": "Fejezetek szerkesztése",
|
"ButtonEditChapters": "Fejezetek szerkesztése",
|
||||||
"ButtonEditPodcast": "Podcast szerkesztése",
|
"ButtonEditPodcast": "Podcast szerkesztése",
|
||||||
|
"ButtonEnable": "Engedélyezés",
|
||||||
|
"ButtonFireAndFail": "Küldés és összeomlás",
|
||||||
|
"ButtonFireOnTest": "onTest esemény küldése",
|
||||||
"ButtonForceReScan": "Újraszkennelés kényszerítése",
|
"ButtonForceReScan": "Újraszkennelés kényszerítése",
|
||||||
"ButtonFullPath": "Teljes útvonal",
|
"ButtonFullPath": "Teljes útvonal",
|
||||||
"ButtonHide": "Elrejtés",
|
"ButtonHide": "Elrejtés",
|
||||||
@@ -43,22 +48,31 @@
|
|||||||
"ButtonMatchAllAuthors": "Minden szerző egyeztetése",
|
"ButtonMatchAllAuthors": "Minden szerző egyeztetése",
|
||||||
"ButtonMatchBooks": "Könyvek egyeztetése",
|
"ButtonMatchBooks": "Könyvek egyeztetése",
|
||||||
"ButtonNevermind": "Mindegy",
|
"ButtonNevermind": "Mindegy",
|
||||||
|
"ButtonNext": "Következő",
|
||||||
"ButtonNextChapter": "Következő fejezet",
|
"ButtonNextChapter": "Következő fejezet",
|
||||||
|
"ButtonNextItemInQueue": "Következő elem a sorban",
|
||||||
"ButtonOk": "Oké",
|
"ButtonOk": "Oké",
|
||||||
"ButtonOpenFeed": "Hírcsatorna megnyitása",
|
"ButtonOpenFeed": "Hírcsatorna megnyitása",
|
||||||
"ButtonOpenManager": "Kezelő megnyitása",
|
"ButtonOpenManager": "Kezelő megnyitása",
|
||||||
"ButtonPause": "Szünet",
|
"ButtonPause": "Szünet",
|
||||||
"ButtonPlay": "Lejátszás",
|
"ButtonPlay": "Lejátszás",
|
||||||
|
"ButtonPlayAll": "Összes lejátszása",
|
||||||
"ButtonPlaying": "Lejátszás folyamatban",
|
"ButtonPlaying": "Lejátszás folyamatban",
|
||||||
"ButtonPlaylists": "Lejátszási listák",
|
"ButtonPlaylists": "Lejátszási listák",
|
||||||
|
"ButtonPrevious": "Előző",
|
||||||
"ButtonPreviousChapter": "Előző fejezet",
|
"ButtonPreviousChapter": "Előző fejezet",
|
||||||
|
"ButtonProbeAudioFile": "Hangfájl vizsgálata",
|
||||||
"ButtonPurgeAllCache": "Összes gyorsítótár törlése",
|
"ButtonPurgeAllCache": "Összes gyorsítótár törlése",
|
||||||
"ButtonPurgeItemsCache": "Elemek gyorsítótárának törlése",
|
"ButtonPurgeItemsCache": "Elemek gyorsítótárának törlése",
|
||||||
"ButtonQueueAddItem": "Hozzáadás a sorhoz",
|
"ButtonQueueAddItem": "Hozzáadás a sorhoz",
|
||||||
"ButtonQueueRemoveItem": "Eltávolítás a sorból",
|
"ButtonQueueRemoveItem": "Eltávolítás a sorból",
|
||||||
|
"ButtonQuickEmbedMetadata": "Metaadat gyors beágyazása",
|
||||||
"ButtonQuickMatch": "Gyors egyeztetés",
|
"ButtonQuickMatch": "Gyors egyeztetés",
|
||||||
"ButtonReScan": "Újraszkennelés",
|
"ButtonReScan": "Újraszkennelés",
|
||||||
"ButtonRead": "Olvasás",
|
"ButtonRead": "Olvasás",
|
||||||
|
"ButtonReadLess": "Kevesebb mutatása",
|
||||||
|
"ButtonReadMore": "Mutass többet",
|
||||||
|
"ButtonRefresh": "Frissítés",
|
||||||
"ButtonRemove": "Eltávolítás",
|
"ButtonRemove": "Eltávolítás",
|
||||||
"ButtonRemoveAll": "Összes eltávolítása",
|
"ButtonRemoveAll": "Összes eltávolítása",
|
||||||
"ButtonRemoveAllLibraryItems": "Összes könyvtárelem eltávolítása",
|
"ButtonRemoveAllLibraryItems": "Összes könyvtárelem eltávolítása",
|
||||||
@@ -77,12 +91,15 @@
|
|||||||
"ButtonSelectFolderPath": "Mappa útvonalának kiválasztása",
|
"ButtonSelectFolderPath": "Mappa útvonalának kiválasztása",
|
||||||
"ButtonSeries": "Sorozatok",
|
"ButtonSeries": "Sorozatok",
|
||||||
"ButtonSetChaptersFromTracks": "Fejezetek beállítása sávokból",
|
"ButtonSetChaptersFromTracks": "Fejezetek beállítása sávokból",
|
||||||
|
"ButtonShare": "Megosztás",
|
||||||
"ButtonShiftTimes": "Idők eltolása",
|
"ButtonShiftTimes": "Idők eltolása",
|
||||||
"ButtonShow": "Megjelenítés",
|
"ButtonShow": "Megjelenítés",
|
||||||
"ButtonStartM4BEncode": "M4B kódolás indítása",
|
"ButtonStartM4BEncode": "M4B kódolás indítása",
|
||||||
"ButtonStartMetadataEmbed": "Metaadatok beágyazásának indítása",
|
"ButtonStartMetadataEmbed": "Metaadatok beágyazásának indítása",
|
||||||
|
"ButtonStats": "Statisztikák",
|
||||||
"ButtonSubmit": "Beküldés",
|
"ButtonSubmit": "Beküldés",
|
||||||
"ButtonTest": "Teszt",
|
"ButtonTest": "Teszt",
|
||||||
|
"ButtonUnlinkOpenId": "OpenID szétkapcsolása",
|
||||||
"ButtonUpload": "Feltöltés",
|
"ButtonUpload": "Feltöltés",
|
||||||
"ButtonUploadBackup": "Biztonsági másolat feltöltése",
|
"ButtonUploadBackup": "Biztonsági másolat feltöltése",
|
||||||
"ButtonUploadCover": "Borító feltöltése",
|
"ButtonUploadCover": "Borító feltöltése",
|
||||||
@@ -95,6 +112,7 @@
|
|||||||
"ErrorUploadFetchMetadataNoResults": "Nem sikerült a metaadatok lekérése - próbálja meg frissíteni a címet és/vagy a szerzőt",
|
"ErrorUploadFetchMetadataNoResults": "Nem sikerült a metaadatok lekérése - próbálja meg frissíteni a címet és/vagy a szerzőt",
|
||||||
"ErrorUploadLacksTitle": "Cím szükséges",
|
"ErrorUploadLacksTitle": "Cím szükséges",
|
||||||
"HeaderAccount": "Fiók",
|
"HeaderAccount": "Fiók",
|
||||||
|
"HeaderAddCustomMetadataProvider": "Egyedi metaadat szolgáltató hozzáadása",
|
||||||
"HeaderAdvanced": "Haladó",
|
"HeaderAdvanced": "Haladó",
|
||||||
"HeaderAppriseNotificationSettings": "Apprise értesítési beállítások",
|
"HeaderAppriseNotificationSettings": "Apprise értesítési beállítások",
|
||||||
"HeaderAudioTracks": "Audiósávok",
|
"HeaderAudioTracks": "Audiósávok",
|
||||||
@@ -108,6 +126,7 @@
|
|||||||
"HeaderCollectionItems": "Gyűjtemény elemek",
|
"HeaderCollectionItems": "Gyűjtemény elemek",
|
||||||
"HeaderCover": "Borító",
|
"HeaderCover": "Borító",
|
||||||
"HeaderCurrentDownloads": "Jelenlegi letöltések",
|
"HeaderCurrentDownloads": "Jelenlegi letöltések",
|
||||||
|
"HeaderCustomMessageOnLogin": "Egyedi üzenet bejelentkezéskor",
|
||||||
"HeaderCustomMetadataProviders": "Egyéni metaadat-szolgáltatók",
|
"HeaderCustomMetadataProviders": "Egyéni metaadat-szolgáltatók",
|
||||||
"HeaderDetails": "Részletek",
|
"HeaderDetails": "Részletek",
|
||||||
"HeaderDownloadQueue": "Letöltési sor",
|
"HeaderDownloadQueue": "Letöltési sor",
|
||||||
@@ -139,6 +158,8 @@
|
|||||||
"HeaderMetadataToEmbed": "Beágyazandó metaadatok",
|
"HeaderMetadataToEmbed": "Beágyazandó metaadatok",
|
||||||
"HeaderNewAccount": "Új fiók",
|
"HeaderNewAccount": "Új fiók",
|
||||||
"HeaderNewLibrary": "Új könyvtár",
|
"HeaderNewLibrary": "Új könyvtár",
|
||||||
|
"HeaderNotificationCreate": "Értesítés készítése",
|
||||||
|
"HeaderNotificationUpdate": "Értesítés frissítése",
|
||||||
"HeaderNotifications": "Értesítések",
|
"HeaderNotifications": "Értesítések",
|
||||||
"HeaderOpenIDConnectAuthentication": "OpenID Connect hitelesítés",
|
"HeaderOpenIDConnectAuthentication": "OpenID Connect hitelesítés",
|
||||||
"HeaderOpenRSSFeed": "RSS hírcsatorna megnyitása",
|
"HeaderOpenRSSFeed": "RSS hírcsatorna megnyitása",
|
||||||
@@ -146,12 +167,13 @@
|
|||||||
"HeaderPasswordAuthentication": "Jelszó hitelesítés",
|
"HeaderPasswordAuthentication": "Jelszó hitelesítés",
|
||||||
"HeaderPermissions": "Engedélyek",
|
"HeaderPermissions": "Engedélyek",
|
||||||
"HeaderPlayerQueue": "Lejátszó sor",
|
"HeaderPlayerQueue": "Lejátszó sor",
|
||||||
|
"HeaderPlayerSettings": "Lejátszó beállításai",
|
||||||
"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",
|
||||||
"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",
|
"HeaderRSSFeedIsOpen": "RSS hírcsatorna nyitva van",
|
||||||
"HeaderRSSFeeds": "RSS hírcsatornák",
|
"HeaderRSSFeeds": "RSS hírcsatornák",
|
||||||
"HeaderRemoveEpisode": "Epizód eltávolítása",
|
"HeaderRemoveEpisode": "Epizód eltávolítása",
|
||||||
"HeaderRemoveEpisodes": "{0} epizód eltávolítása",
|
"HeaderRemoveEpisodes": "{0} epizód eltávolítása",
|
||||||
@@ -168,7 +190,7 @@
|
|||||||
"HeaderSleepTimer": "Alvásidőzítő",
|
"HeaderSleepTimer": "Alvásidőzítő",
|
||||||
"HeaderStatsLargestItems": "Legnagyobb elemek",
|
"HeaderStatsLargestItems": "Legnagyobb elemek",
|
||||||
"HeaderStatsLongestItems": "Leghosszabb elemek (órákban)",
|
"HeaderStatsLongestItems": "Leghosszabb elemek (órákban)",
|
||||||
"HeaderStatsMinutesListeningChart": "Hallgatási percek (az utolsó 7 napban)",
|
"HeaderStatsMinutesListeningChart": "Hallgatási grafikon percekben (az elmúlt 7 napból)",
|
||||||
"HeaderStatsRecentSessions": "Legutóbbi munkamenetek",
|
"HeaderStatsRecentSessions": "Legutóbbi munkamenetek",
|
||||||
"HeaderStatsTop10Authors": "Top 10 szerzők",
|
"HeaderStatsTop10Authors": "Top 10 szerzők",
|
||||||
"HeaderStatsTop5Genres": "Top 5 műfajok",
|
"HeaderStatsTop5Genres": "Top 5 műfajok",
|
||||||
@@ -179,9 +201,14 @@
|
|||||||
"HeaderUpdateDetails": "Részletek frissítése",
|
"HeaderUpdateDetails": "Részletek frissítése",
|
||||||
"HeaderUpdateLibrary": "Könyvtár frissítése",
|
"HeaderUpdateLibrary": "Könyvtár frissítése",
|
||||||
"HeaderUsers": "Felhasználók",
|
"HeaderUsers": "Felhasználók",
|
||||||
|
"HeaderYearReview": "{0} év áttekintése",
|
||||||
"HeaderYourStats": "Saját statisztikák",
|
"HeaderYourStats": "Saját statisztikák",
|
||||||
"LabelAbridged": "Tömörített",
|
"LabelAbridged": "Tömörített",
|
||||||
|
"LabelAbridgedChecked": "Rövidített (ellenőrizve)",
|
||||||
|
"LabelAbridgedUnchecked": "Teljes (nem ellenőrzött)",
|
||||||
|
"LabelAccessibleBy": "Hozzáférhető",
|
||||||
"LabelAccountType": "Fióktípus",
|
"LabelAccountType": "Fióktípus",
|
||||||
|
"LabelAccountTypeAdmin": "Adminisztrátor",
|
||||||
"LabelAccountTypeGuest": "Vendég",
|
"LabelAccountTypeGuest": "Vendég",
|
||||||
"LabelAccountTypeUser": "Felhasználó",
|
"LabelAccountTypeUser": "Felhasználó",
|
||||||
"LabelActivity": "Tevékenység",
|
"LabelActivity": "Tevékenység",
|
||||||
@@ -190,8 +217,9 @@
|
|||||||
"LabelAddToPlaylist": "Hozzáadás a lejátszási listához",
|
"LabelAddToPlaylist": "Hozzáadás a lejátszási listához",
|
||||||
"LabelAddToPlaylistBatch": "{0} elem hozzáadása a lejátszási listához",
|
"LabelAddToPlaylistBatch": "{0} elem hozzáadása a lejátszási listához",
|
||||||
"LabelAddedAt": "Hozzáadás ideje",
|
"LabelAddedAt": "Hozzáadás ideje",
|
||||||
|
"LabelAddedDate": "{0} Hozzáadva",
|
||||||
"LabelAdminUsersOnly": "Csak admin felhasználók",
|
"LabelAdminUsersOnly": "Csak admin felhasználók",
|
||||||
"LabelAll": "Minden",
|
"LabelAll": "Összes",
|
||||||
"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",
|
||||||
@@ -212,13 +240,14 @@
|
|||||||
"LabelBackupLocation": "Biztonsági másolat helye",
|
"LabelBackupLocation": "Biztonsági másolat helye",
|
||||||
"LabelBackupsEnableAutomaticBackups": "Automatikus biztonsági másolatok engedélyezése",
|
"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)",
|
"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.",
|
||||||
"LabelBackupsNumberToKeep": "Megtartandó biztonsági másolatok száma",
|
"LabelBackupsNumberToKeep": "Megtartandó biztonsági másolatok száma",
|
||||||
"LabelBackupsNumberToKeepHelp": "Egyszerre csak 1 biztonsági másolat kerül eltávolításra, tehát ha már több biztonsági másolat van, mint ez a szám, akkor manuálisan kell eltávolítani őket.",
|
"LabelBackupsNumberToKeepHelp": "Egyszerre csak 1 biztonsági másolat kerül eltávolításra, tehát ha már több biztonsági másolat van, mint ez a szám, akkor manuálisan kell eltávolítani őket.",
|
||||||
"LabelBitrate": "Bitráta",
|
"LabelBitrate": "Bitráta",
|
||||||
"LabelBooks": "Könyvek",
|
"LabelBooks": "Könyvek",
|
||||||
"LabelButtonText": "Gomb szövege",
|
"LabelButtonText": "Gomb szövege",
|
||||||
|
"LabelByAuthor": "{} által",
|
||||||
"LabelChangePassword": "Jelszó megváltoztatása",
|
"LabelChangePassword": "Jelszó megváltoztatása",
|
||||||
"LabelChannels": "Csatornák",
|
"LabelChannels": "Csatornák",
|
||||||
"LabelChapterTitle": "Fejezet címe",
|
"LabelChapterTitle": "Fejezet címe",
|
||||||
@@ -228,9 +257,10 @@
|
|||||||
"LabelClosePlayer": "Lejátszó bezárása",
|
"LabelClosePlayer": "Lejátszó bezárása",
|
||||||
"LabelCodec": "Kodek",
|
"LabelCodec": "Kodek",
|
||||||
"LabelCollapseSeries": "Sorozat összecsukása",
|
"LabelCollapseSeries": "Sorozat összecsukása",
|
||||||
|
"LabelCollapseSubSeries": "Alszéria összecsukása",
|
||||||
"LabelCollection": "Gyűjtemény",
|
"LabelCollection": "Gyűjtemény",
|
||||||
"LabelCollections": "Gyűjtemények",
|
"LabelCollections": "Gyűjtemények",
|
||||||
"LabelComplete": "Teljes",
|
"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",
|
||||||
"LabelContinueReading": "Olvasás folytatása",
|
"LabelContinueReading": "Olvasás folytatása",
|
||||||
@@ -243,6 +273,7 @@
|
|||||||
"LabelCurrently": "Jelenleg:",
|
"LabelCurrently": "Jelenleg:",
|
||||||
"LabelCustomCronExpression": "Egyéni Cron kifejezés:",
|
"LabelCustomCronExpression": "Egyéni Cron kifejezés:",
|
||||||
"LabelDatetime": "Dátumidő",
|
"LabelDatetime": "Dátumidő",
|
||||||
|
"LabelDays": "Napok",
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Törlés a fájlrendszerről (ne jelölje be, ha csak az adatbázisból szeretné eltávolítani)",
|
"LabelDeleteFromFileSystemCheckbox": "Törlés a fájlrendszerről (ne jelölje be, ha csak az adatbázisból szeretné eltávolítani)",
|
||||||
"LabelDescription": "Leírás",
|
"LabelDescription": "Leírás",
|
||||||
"LabelDeselectAll": "Minden kijelölés megszüntetése",
|
"LabelDeselectAll": "Minden kijelölés megszüntetése",
|
||||||
@@ -256,27 +287,42 @@
|
|||||||
"LabelDownload": "Letöltés",
|
"LabelDownload": "Letöltés",
|
||||||
"LabelDownloadNEpisodes": "{0} epizód letöltése",
|
"LabelDownloadNEpisodes": "{0} epizód letöltése",
|
||||||
"LabelDuration": "Időtartam",
|
"LabelDuration": "Időtartam",
|
||||||
|
"LabelDurationComparisonExactMatch": "(pontos egyezés)",
|
||||||
|
"LabelDurationComparisonLonger": "({0}-val hosszabb)",
|
||||||
|
"LabelDurationComparisonShorter": "({0}-val rövidebb)",
|
||||||
"LabelDurationFound": "Megtalált időtartam:",
|
"LabelDurationFound": "Megtalált időtartam:",
|
||||||
"LabelEbook": "E-könyv",
|
"LabelEbook": "E-könyv",
|
||||||
"LabelEbooks": "E-könyvek",
|
"LabelEbooks": "E-könyvek",
|
||||||
"LabelEdit": "Szerkesztés",
|
"LabelEdit": "Szerkesztés",
|
||||||
"LabelEmail": "E-mail",
|
"LabelEmail": "E-mail",
|
||||||
"LabelEmailSettingsFromAddress": "Feladó címe",
|
"LabelEmailSettingsFromAddress": "Feladó címe",
|
||||||
|
"LabelEmailSettingsRejectUnauthorized": "Nem hitelesített tanúsítványok elutasítása",
|
||||||
|
"LabelEmailSettingsRejectUnauthorizedHelp": "Az SSL tanúsítványok érvényesítésének letiltása biztonsági kockázatoknak, például man-in-the-middle támadásoknak teheti ki a kapcsolatot. Csak akkor tiltsd le ezt az opciót, ha tisztában vagy a következményekkel, és megbízol az e-mail szerverben, amelyhez csatlakozol.",
|
||||||
"LabelEmailSettingsSecure": "Biztonságos",
|
"LabelEmailSettingsSecure": "Biztonságos",
|
||||||
"LabelEmailSettingsSecureHelp": "Ha igaz, a kapcsolat TLS-t használ a szerverhez való csatlakozáskor. Ha hamis, akkor TLS-t használ, ha a szerver támogatja a STARTTLS kiterjesztést. A legtöbb esetben állítsa ezt az értéket igazra, ha a 465-ös portra csatlakozik. A 587-es vagy 25-ös port esetében tartsa hamis értéken. (a nodemailer.com/smtp/#authentication oldalról)",
|
"LabelEmailSettingsSecureHelp": "Ha igaz, a kapcsolat TLS-t használ a szerverhez való csatlakozáskor. Ha hamis, akkor TLS-t használ, ha a szerver támogatja a STARTTLS kiterjesztést. A legtöbb esetben állítsa ezt az értéket igazra, ha a 465-ös portra csatlakozik. A 587-es vagy 25-ös port esetében tartsa hamis értéken. (a nodemailer.com/smtp/#authentication oldalról)",
|
||||||
"LabelEmailSettingsTestAddress": "Teszt cím",
|
"LabelEmailSettingsTestAddress": "Teszt cím",
|
||||||
"LabelEmbeddedCover": "Beágyazott borító",
|
"LabelEmbeddedCover": "Beágyazott borító",
|
||||||
"LabelEnable": "Engedélyezés",
|
"LabelEnable": "Engedélyezés",
|
||||||
"LabelEnd": "Vége",
|
"LabelEnd": "Vége",
|
||||||
|
"LabelEndOfChapter": "Fejezet vége",
|
||||||
"LabelEpisode": "Epizód",
|
"LabelEpisode": "Epizód",
|
||||||
"LabelEpisodeTitle": "Epizód címe",
|
"LabelEpisodeTitle": "Epizód címe",
|
||||||
"LabelEpisodeType": "Epizód típusa",
|
"LabelEpisodeType": "Epizód típusa",
|
||||||
|
"LabelEpisodes": "Epizódok",
|
||||||
"LabelExample": "Példa",
|
"LabelExample": "Példa",
|
||||||
|
"LabelExpandSeries": "Sorozat kinyitása",
|
||||||
|
"LabelExpandSubSeries": "Alsorozat kinyitása",
|
||||||
|
"LabelExplicit": "Explicit",
|
||||||
|
"LabelExplicitChecked": "Explicit (ellenőrizve)",
|
||||||
|
"LabelExplicitUnchecked": "Nem explicit (nem ellenőrzött)",
|
||||||
|
"LabelExportOPML": "OPML exportálása",
|
||||||
"LabelFeedURL": "Hírcsatorna URL",
|
"LabelFeedURL": "Hírcsatorna URL",
|
||||||
"LabelFetchingMetadata": "Metaadatok lekérése",
|
"LabelFetchingMetadata": "Metaadatok lekérése",
|
||||||
"LabelFile": "Fájl",
|
"LabelFile": "Fájl",
|
||||||
"LabelFileBirthtime": "Fájl létrehozásának ideje",
|
"LabelFileBirthtime": "Fájl létrehozásának ideje",
|
||||||
|
"LabelFileBornDate": "Született {0}",
|
||||||
"LabelFileModified": "Fájl módosításának ideje",
|
"LabelFileModified": "Fájl módosításának ideje",
|
||||||
|
"LabelFileModifiedDate": "Módosítva {0}",
|
||||||
"LabelFilename": "Fájlnév",
|
"LabelFilename": "Fájlnév",
|
||||||
"LabelFilterByUser": "Szűrés felhasználó szerint",
|
"LabelFilterByUser": "Szűrés felhasználó szerint",
|
||||||
"LabelFindEpisodes": "Epizódok keresése",
|
"LabelFindEpisodes": "Epizódok keresése",
|
||||||
@@ -284,6 +330,7 @@
|
|||||||
"LabelFolder": "Mappa",
|
"LabelFolder": "Mappa",
|
||||||
"LabelFolders": "Mappák",
|
"LabelFolders": "Mappák",
|
||||||
"LabelFontBold": "Félkövér",
|
"LabelFontBold": "Félkövér",
|
||||||
|
"LabelFontBoldness": "Betű vastagság",
|
||||||
"LabelFontFamily": "Betűtípus család",
|
"LabelFontFamily": "Betűtípus család",
|
||||||
"LabelFontItalic": "Dőlt",
|
"LabelFontItalic": "Dőlt",
|
||||||
"LabelFontScale": "Betűméret skála",
|
"LabelFontScale": "Betűméret skála",
|
||||||
@@ -294,9 +341,11 @@
|
|||||||
"LabelHardDeleteFile": "Fájl végleges törlése",
|
"LabelHardDeleteFile": "Fájl végleges törlése",
|
||||||
"LabelHasEbook": "Van e-könyve",
|
"LabelHasEbook": "Van e-könyve",
|
||||||
"LabelHasSupplementaryEbook": "Van kiegészítő e-könyve",
|
"LabelHasSupplementaryEbook": "Van kiegészítő e-könyve",
|
||||||
|
"LabelHideSubtitles": "Alcím elrejtése",
|
||||||
"LabelHighestPriority": "Legmagasabb prioritás",
|
"LabelHighestPriority": "Legmagasabb prioritás",
|
||||||
"LabelHost": "Hoszt",
|
"LabelHost": "Házigazda",
|
||||||
"LabelHour": "Óra",
|
"LabelHour": "Óra",
|
||||||
|
"LabelHours": "Órák",
|
||||||
"LabelIcon": "Ikon",
|
"LabelIcon": "Ikon",
|
||||||
"LabelImageURLFromTheWeb": "Kép URL a weben",
|
"LabelImageURLFromTheWeb": "Kép URL a weben",
|
||||||
"LabelInProgress": "Folyamatban",
|
"LabelInProgress": "Folyamatban",
|
||||||
@@ -313,8 +362,11 @@
|
|||||||
"LabelIntervalEveryHour": "Minden órában",
|
"LabelIntervalEveryHour": "Minden órában",
|
||||||
"LabelInvert": "Megfordítás",
|
"LabelInvert": "Megfordítás",
|
||||||
"LabelItem": "Elem",
|
"LabelItem": "Elem",
|
||||||
|
"LabelJumpBackwardAmount": "Visszafelé ugrás mennyisége",
|
||||||
|
"LabelJumpForwardAmount": "Előre ugrás mennyisége",
|
||||||
"LabelLanguage": "Nyelv",
|
"LabelLanguage": "Nyelv",
|
||||||
"LabelLanguageDefaultServer": "Szerver alapértelmezett nyelve",
|
"LabelLanguageDefaultServer": "Szerver alapértelmezett nyelve",
|
||||||
|
"LabelLanguages": "Nyelvek",
|
||||||
"LabelLastBookAdded": "Utolsó hozzáadott könyv",
|
"LabelLastBookAdded": "Utolsó hozzáadott könyv",
|
||||||
"LabelLastBookUpdated": "Utolsó frissített könyv",
|
"LabelLastBookUpdated": "Utolsó frissített könyv",
|
||||||
"LabelLastSeen": "Utolsó látogatás",
|
"LabelLastSeen": "Utolsó látogatás",
|
||||||
@@ -326,11 +378,13 @@
|
|||||||
"LabelLess": "Kevesebb",
|
"LabelLess": "Kevesebb",
|
||||||
"LabelLibrariesAccessibleToUser": "A felhasználó számára elérhető könyvtárak",
|
"LabelLibrariesAccessibleToUser": "A felhasználó számára elérhető könyvtárak",
|
||||||
"LabelLibrary": "Könyvtár",
|
"LabelLibrary": "Könyvtár",
|
||||||
|
"LabelLibraryFilterSublistEmpty": "Nem {0}",
|
||||||
"LabelLibraryItem": "Könyvtári elem",
|
"LabelLibraryItem": "Könyvtári elem",
|
||||||
"LabelLibraryName": "Könyvtár neve",
|
"LabelLibraryName": "Könyvtár neve",
|
||||||
"LabelLimit": "Korlát",
|
"LabelLimit": "Korlát",
|
||||||
"LabelLineSpacing": "Sorköz",
|
"LabelLineSpacing": "Sorköz",
|
||||||
"LabelListenAgain": "Újrahallgatás",
|
"LabelListenAgain": "Újrahallgatás",
|
||||||
|
"LabelLogLevelDebug": "Hibakeresés",
|
||||||
"LabelLogLevelInfo": "Információ",
|
"LabelLogLevelInfo": "Információ",
|
||||||
"LabelLogLevelWarn": "Figyelmeztetés",
|
"LabelLogLevelWarn": "Figyelmeztetés",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Új epizódok keresése ezen a dátum után",
|
"LabelLookForNewEpisodesAfterDate": "Új epizódok keresése ezen a dátum után",
|
||||||
@@ -344,7 +398,10 @@
|
|||||||
"LabelMetadataOrderOfPrecedenceDescription": "A magasabb prioritású metaadat-források felülírják az alacsonyabb prioritásúakat",
|
"LabelMetadataOrderOfPrecedenceDescription": "A magasabb prioritású metaadat-források felülírják az alacsonyabb prioritásúakat",
|
||||||
"LabelMetadataProvider": "Metaadat-szolgáltató",
|
"LabelMetadataProvider": "Metaadat-szolgáltató",
|
||||||
"LabelMinute": "Perc",
|
"LabelMinute": "Perc",
|
||||||
|
"LabelMinutes": "Percek",
|
||||||
"LabelMissing": "Hiányzó",
|
"LabelMissing": "Hiányzó",
|
||||||
|
"LabelMissingEbook": "Nincs e-könyve",
|
||||||
|
"LabelMissingSupplementaryEbook": "Nincs kiegészítő e-könyve",
|
||||||
"LabelMobileRedirectURIs": "Engedélyezett mobil átirányítási URI-k",
|
"LabelMobileRedirectURIs": "Engedélyezett mobil átirányítási URI-k",
|
||||||
"LabelMobileRedirectURIsDescription": "Ez egy fehérlista az érvényes mobilalkalmazás-átirányítási URI-k számára. Az alapértelmezett <code>audiobookshelf://oauth</code>, amely eltávolítható vagy kiegészíthető további URI-kkal harmadik féltől származó alkalmazásintegráció érdekében. Ha az egyetlen bejegyzés egy csillag (<code>*</code>), akkor bármely URI engedélyezett.",
|
"LabelMobileRedirectURIsDescription": "Ez egy fehérlista az érvényes mobilalkalmazás-átirányítási URI-k számára. Az alapértelmezett <code>audiobookshelf://oauth</code>, amely eltávolítható vagy kiegészíthető további URI-kkal harmadik féltől származó alkalmazásintegráció érdekében. Ha az egyetlen bejegyzés egy csillag (<code>*</code>), akkor bármely URI engedélyezett.",
|
||||||
"LabelMore": "Több",
|
"LabelMore": "Több",
|
||||||
@@ -358,6 +415,7 @@
|
|||||||
"LabelNewestEpisodes": "Legújabb epizódok",
|
"LabelNewestEpisodes": "Legújabb epizódok",
|
||||||
"LabelNextBackupDate": "Következő biztonsági másolat dátuma",
|
"LabelNextBackupDate": "Következő biztonsági másolat dátuma",
|
||||||
"LabelNextScheduledRun": "Következő ütemezett futtatás",
|
"LabelNextScheduledRun": "Következő ütemezett futtatás",
|
||||||
|
"LabelNoCustomMetadataProviders": "Nincsenek egyedi metaadat szolgáltatók",
|
||||||
"LabelNoEpisodesSelected": "Nincsenek kiválasztott epizódok",
|
"LabelNoEpisodesSelected": "Nincsenek kiválasztott epizódok",
|
||||||
"LabelNotFinished": "Nem befejezett",
|
"LabelNotFinished": "Nem befejezett",
|
||||||
"LabelNotStarted": "Nem indult el",
|
"LabelNotStarted": "Nem indult el",
|
||||||
@@ -373,10 +431,14 @@
|
|||||||
"LabelNotificationsMaxQueueSizeHelp": "Az események korlátozva vannak, hogy másodpercenként 1-szer történjenek. Ha a sor maximális méretű, akkor az események figyelmen kívül lesznek hagyva. Ez megakadályozza az értesítések spamelését.",
|
"LabelNotificationsMaxQueueSizeHelp": "Az események korlátozva vannak, hogy másodpercenként 1-szer történjenek. Ha a sor maximális méretű, akkor az események figyelmen kívül lesznek hagyva. Ez megakadályozza az értesítések spamelését.",
|
||||||
"LabelNumberOfBooks": "Könyvek száma",
|
"LabelNumberOfBooks": "Könyvek száma",
|
||||||
"LabelNumberOfEpisodes": "Epizódok száma",
|
"LabelNumberOfEpisodes": "Epizódok száma",
|
||||||
|
"LabelOpenIDAdvancedPermsClaimDescription": "Az OpenID-igény neve, amely a felhasználói műveletekre vonatkozó haladó jogosultságokat tartalmazza az alkalmazáson belül, és amely a nem adminisztrátori szerepkörökre vonatkozik (<b>ha konfigurálva van</b>). Ha az igény hiányzik a válaszból, az ABS-hez való hozzáférés megtagadásra kerül. Ha egyetlen opció hiányzik, azt <code>false</code>-ként fogja kezelni. Győződj meg arról, hogy az identitásszolgáltató igénye megfelel a várt struktúrának:",
|
||||||
|
"LabelOpenIDClaims": "Hagyd üresen a következő opciókat, hogy letiltsd a haladó csoport- és jogosultság-hozzárendelést, ekkor automatikusan a ‘Felhasználó’ csoport kerül hozzárendelésre.",
|
||||||
|
"LabelOpenIDGroupClaimDescription": "Az OpenID-igény neve, amely a felhasználó csoportjainak listáját tartalmazza. Általában groups néven hivatkoznak rá. Ha konfigurálva van, az alkalmazás automatikusan hozzárendeli a szerepköröket a felhasználó csoporttagságai alapján, feltéve, hogy ezek a csoportok az igényben kis- és nagybetűkre érzéketlenül ‘admin’, ‘user’ vagy ‘guest’ néven szerepelnek. Az igénynek egy listát kell tartalmaznia, és ha egy felhasználó több csoport tagja, az alkalmazás a legmagasabb szintű hozzáféréssel rendelkező szerepkört rendeli hozzá. Ha egyetlen csoport sem felel meg, a hozzáférés megtagadásra kerül.",
|
||||||
"LabelOpenRSSFeed": "RSS hírcsatorna megnyitása",
|
"LabelOpenRSSFeed": "RSS hírcsatorna megnyitása",
|
||||||
"LabelOverwrite": "Felülírás",
|
"LabelOverwrite": "Felülírás",
|
||||||
"LabelPassword": "Jelszó",
|
"LabelPassword": "Jelszó",
|
||||||
"LabelPath": "Útvonal",
|
"LabelPath": "Útvonal",
|
||||||
|
"LabelPermanent": "Végleges",
|
||||||
"LabelPermissionsAccessAllLibraries": "Hozzáférhet az összes könyvtárhoz",
|
"LabelPermissionsAccessAllLibraries": "Hozzáférhet az összes könyvtárhoz",
|
||||||
"LabelPermissionsAccessAllTags": "Hozzáférhet az összes címkéhez",
|
"LabelPermissionsAccessAllTags": "Hozzáférhet az összes címkéhez",
|
||||||
"LabelPermissionsAccessExplicitContent": "Hozzáférhet explicit tartalomhoz",
|
"LabelPermissionsAccessExplicitContent": "Hozzáférhet explicit tartalomhoz",
|
||||||
@@ -384,26 +446,34 @@
|
|||||||
"LabelPermissionsDownload": "Letölthet",
|
"LabelPermissionsDownload": "Letölthet",
|
||||||
"LabelPermissionsUpdate": "Frissíthet",
|
"LabelPermissionsUpdate": "Frissíthet",
|
||||||
"LabelPermissionsUpload": "Feltölthet",
|
"LabelPermissionsUpload": "Feltölthet",
|
||||||
|
"LabelPersonalYearReview": "Az éved áttekintése ({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",
|
||||||
|
"LabelPlayerChapterNumberMarker": "{0} a {1} -ből",
|
||||||
"LabelPlaylists": "Lejátszási listák",
|
"LabelPlaylists": "Lejátszási listák",
|
||||||
|
"LabelPodcast": "Podcast",
|
||||||
"LabelPodcastSearchRegion": "Podcast keresési régió",
|
"LabelPodcastSearchRegion": "Podcast keresési régió",
|
||||||
"LabelPodcastType": "Podcast típus",
|
"LabelPodcastType": "Podcast típus",
|
||||||
"LabelPodcasts": "Podcastok",
|
"LabelPodcasts": "Podcastok",
|
||||||
|
"LabelPort": "Port",
|
||||||
"LabelPrefixesToIgnore": "Figyelmen kívül hagyandó előtagok (nem érzékeny a kis- és nagybetűkre)",
|
"LabelPrefixesToIgnore": "Figyelmen kívül hagyandó előtagok (nem érzékeny a kis- és nagybetűkre)",
|
||||||
"LabelPreventIndexing": "A hírcsatorna indexelésének megakadályozása az iTunes és a Google podcast könyvtáraiban",
|
"LabelPreventIndexing": "Megakadályozza a hírcsatornájának indexelését az iTunes és a Google podcast könyvtárakban",
|
||||||
"LabelPrimaryEbook": "Elsődleges e-könyv",
|
"LabelPrimaryEbook": "Elsődleges e-könyv",
|
||||||
"LabelProgress": "Haladás",
|
"LabelProgress": "Haladás",
|
||||||
"LabelProvider": "Szolgáltató",
|
"LabelProvider": "Szolgáltató",
|
||||||
|
"LabelProviderAuthorizationValue": "Authorization fejléc értéke",
|
||||||
"LabelPubDate": "Kiadás dátuma",
|
"LabelPubDate": "Kiadás dátuma",
|
||||||
"LabelPublishYear": "Kiadás éve",
|
"LabelPublishYear": "Kiadás éve",
|
||||||
|
"LabelPublishedDate": "Kiadva {0}",
|
||||||
"LabelPublisher": "Kiadó",
|
"LabelPublisher": "Kiadó",
|
||||||
|
"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",
|
||||||
|
"LabelRandomly": "Véletlenszerűen",
|
||||||
"LabelRead": "Olvasás",
|
"LabelRead": "Olvasás",
|
||||||
"LabelReadAgain": "Újraolvasás",
|
"LabelReadAgain": "Újraolvasás",
|
||||||
"LabelReadEbookWithoutProgress": "E-könyv olvasása haladás nélkül",
|
"LabelReadEbookWithoutProgress": "E-könyv olvasása haladás nélkül",
|
||||||
@@ -592,9 +662,9 @@
|
|||||||
"MessageDownloadingEpisode": "Epizód letöltése",
|
"MessageDownloadingEpisode": "Epizód letöltése",
|
||||||
"MessageDragFilesIntoTrackOrder": "Húzza a fájlokat a helyes sávrendbe",
|
"MessageDragFilesIntoTrackOrder": "Húzza a fájlokat a helyes sávrendbe",
|
||||||
"MessageEmbedFinished": "Beágyazás befejeződött!",
|
"MessageEmbedFinished": "Beágyazás befejeződött!",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} Epizód letöltésre várakozik",
|
"MessageEpisodesQueuedForDownload": "{0} epizód letöltésre vár",
|
||||||
"MessageFeedURLWillBe": "A hírcsatorna URL-je {0} lesz",
|
"MessageFeedURLWillBe": "A hírcsatorna URL-je {0} lesz",
|
||||||
"MessageFetching": "Lekérés...",
|
"MessageFetching": "Lekérdezés...",
|
||||||
"MessageForceReScanDescription": "minden fájlt újra szkennel, mint egy friss szkennelés. Az audiofájlok ID3 címkéi, OPF fájlok és szövegfájlok újként lesznek szkennelve.",
|
"MessageForceReScanDescription": "minden fájlt újra szkennel, mint egy friss szkennelés. Az audiofájlok ID3 címkéi, OPF fájlok és szövegfájlok újként lesznek szkennelve.",
|
||||||
"MessageImportantNotice": "Fontos közlemény!",
|
"MessageImportantNotice": "Fontos közlemény!",
|
||||||
"MessageInsertChapterBelow": "Fejezet beszúrása alulra",
|
"MessageInsertChapterBelow": "Fejezet beszúrása alulra",
|
||||||
@@ -628,7 +698,7 @@
|
|||||||
"MessageNoGenres": "Nincsenek műfajok",
|
"MessageNoGenres": "Nincsenek műfajok",
|
||||||
"MessageNoIssues": "Nincsenek problémák",
|
"MessageNoIssues": "Nincsenek problémák",
|
||||||
"MessageNoItems": "Nincsenek elemek",
|
"MessageNoItems": "Nincsenek elemek",
|
||||||
"MessageNoItemsFound": "Nem találhatóak elemek",
|
"MessageNoItemsFound": "Nincs találat",
|
||||||
"MessageNoListeningSessions": "Nincsenek hallgatási munkamenetek",
|
"MessageNoListeningSessions": "Nincsenek hallgatási munkamenetek",
|
||||||
"MessageNoLogs": "Nincsenek naplók",
|
"MessageNoLogs": "Nincsenek naplók",
|
||||||
"MessageNoMediaProgress": "Nincs előrehaladás a médialejátszásban",
|
"MessageNoMediaProgress": "Nincs előrehaladás a médialejátszásban",
|
||||||
@@ -683,10 +753,8 @@
|
|||||||
"PlaceholderNewPlaylist": "Új lejátszási lista neve",
|
"PlaceholderNewPlaylist": "Új lejátszási lista neve",
|
||||||
"PlaceholderSearch": "Keresés..",
|
"PlaceholderSearch": "Keresés..",
|
||||||
"PlaceholderSearchEpisode": "Epizód keresése..",
|
"PlaceholderSearchEpisode": "Epizód keresése..",
|
||||||
"ToastAccountUpdateFailed": "A fiók frissítése sikertelen",
|
|
||||||
"ToastAccountUpdateSuccess": "Fiók frissítve",
|
"ToastAccountUpdateSuccess": "Fiók frissítve",
|
||||||
"ToastAuthorImageRemoveSuccess": "Szerző képe eltávolítva",
|
"ToastAuthorImageRemoveSuccess": "Szerző képe eltávolítva",
|
||||||
"ToastAuthorUpdateFailed": "A szerző frissítése sikertelen",
|
|
||||||
"ToastAuthorUpdateMerged": "Szerző összevonva",
|
"ToastAuthorUpdateMerged": "Szerző összevonva",
|
||||||
"ToastAuthorUpdateSuccess": "Szerző frissítve",
|
"ToastAuthorUpdateSuccess": "Szerző frissítve",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Szerző frissítve (nem található kép)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Szerző frissítve (nem található kép)",
|
||||||
@@ -702,21 +770,17 @@
|
|||||||
"ToastBookmarkCreateFailed": "Könyvjelző létrehozása sikertelen",
|
"ToastBookmarkCreateFailed": "Könyvjelző létrehozása sikertelen",
|
||||||
"ToastBookmarkCreateSuccess": "Könyvjelző hozzáadva",
|
"ToastBookmarkCreateSuccess": "Könyvjelző hozzáadva",
|
||||||
"ToastBookmarkRemoveSuccess": "Könyvjelző eltávolítva",
|
"ToastBookmarkRemoveSuccess": "Könyvjelző eltávolítva",
|
||||||
"ToastBookmarkUpdateFailed": "Könyvjelző frissítése sikertelen",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Könyvjelző frissítve",
|
"ToastBookmarkUpdateSuccess": "Könyvjelző frissítve",
|
||||||
"ToastChaptersHaveErrors": "A fejezetek hibákat tartalmaznak",
|
"ToastChaptersHaveErrors": "A fejezetek hibákat tartalmaznak",
|
||||||
"ToastChaptersMustHaveTitles": "A fejezeteknek címekkel kell rendelkezniük",
|
"ToastChaptersMustHaveTitles": "A fejezeteknek címekkel kell rendelkezniük",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Elem(ek) eltávolítva a gyűjteményből",
|
"ToastCollectionItemsRemoveSuccess": "Elem(ek) eltávolítva a gyűjteményből",
|
||||||
"ToastCollectionRemoveSuccess": "Gyűjtemény eltávolítva",
|
"ToastCollectionRemoveSuccess": "Gyűjtemény eltávolítva",
|
||||||
"ToastCollectionUpdateFailed": "Gyűjtemény frissítése sikertelen",
|
|
||||||
"ToastCollectionUpdateSuccess": "Gyűjtemény frissítve",
|
"ToastCollectionUpdateSuccess": "Gyűjtemény frissítve",
|
||||||
"ToastItemCoverUpdateFailed": "Elem borítójának frissítése sikertelen",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Elem borítója frissítve",
|
"ToastItemCoverUpdateSuccess": "Elem borítója frissítve",
|
||||||
"ToastItemDetailsUpdateFailed": "Elem részleteinek frissítése sikertelen",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Elem részletei frissítve",
|
"ToastItemDetailsUpdateSuccess": "Elem részletei frissítve",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Megjelölés Befejezettként sikertelen",
|
"ToastItemMarkedAsFinishedFailed": "Megjelölés Befejezettként sikertelen",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Elem megjelölve Befejezettként",
|
"ToastItemMarkedAsFinishedSuccess": "Elem megjelölve Befejezettként",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Nem sikerült Nem Befejezettként megjelölni az elemet",
|
"ToastItemMarkedAsNotFinishedFailed": "Az elem befejezetlennek jelölése sikertelen",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Elem megjelölve Nem Befejezettként",
|
"ToastItemMarkedAsNotFinishedSuccess": "Elem megjelölve Nem Befejezettként",
|
||||||
"ToastLibraryCreateFailed": "Könyvtár létrehozása sikertelen",
|
"ToastLibraryCreateFailed": "Könyvtár létrehozása sikertelen",
|
||||||
"ToastLibraryCreateSuccess": "\"{0}\" könyvtár létrehozva",
|
"ToastLibraryCreateSuccess": "\"{0}\" könyvtár létrehozva",
|
||||||
@@ -724,16 +788,14 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Könyvtár törölve",
|
"ToastLibraryDeleteSuccess": "Könyvtár törölve",
|
||||||
"ToastLibraryScanFailedToStart": "A beolvasás elindítása sikertelen",
|
"ToastLibraryScanFailedToStart": "A beolvasás elindítása sikertelen",
|
||||||
"ToastLibraryScanStarted": "Könyvtár beolvasása elindítva",
|
"ToastLibraryScanStarted": "Könyvtár beolvasása elindítva",
|
||||||
"ToastLibraryUpdateFailed": "Könyvtár frissítése sikertelen",
|
|
||||||
"ToastLibraryUpdateSuccess": "\"{0}\" könyvtár frissítve",
|
"ToastLibraryUpdateSuccess": "\"{0}\" könyvtár 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",
|
||||||
"ToastPlaylistRemoveSuccess": "Lejátszási lista eltávolítva",
|
"ToastPlaylistRemoveSuccess": "Lejátszási lista eltávolítva",
|
||||||
"ToastPlaylistUpdateFailed": "Lejátszási lista frissítése sikertelen",
|
|
||||||
"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": "Podcast sikeresen létrehozva",
|
"ToastPodcastCreateSuccess": "A podcast sikeresen létrehozva",
|
||||||
"ToastRSSFeedCloseFailed": "RSS feed bezárása sikertelen",
|
"ToastRSSFeedCloseFailed": "Az RSS hírcsatorna bezárása sikertelen",
|
||||||
"ToastRSSFeedCloseSuccess": "RSS feed bezárva",
|
"ToastRSSFeedCloseSuccess": "RSS feed bezárva",
|
||||||
"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",
|
||||||
|
|||||||
+190
-55
@@ -19,6 +19,7 @@
|
|||||||
"ButtonChooseFiles": "Seleziona i File",
|
"ButtonChooseFiles": "Seleziona i File",
|
||||||
"ButtonClearFilter": "Elimina filtri",
|
"ButtonClearFilter": "Elimina filtri",
|
||||||
"ButtonCloseFeed": "Chiudi flusso",
|
"ButtonCloseFeed": "Chiudi flusso",
|
||||||
|
"ButtonCloseSession": "Chiudi la sessione aperta",
|
||||||
"ButtonCollections": "Raccolte",
|
"ButtonCollections": "Raccolte",
|
||||||
"ButtonConfigureScanner": "Configura Scanner",
|
"ButtonConfigureScanner": "Configura Scanner",
|
||||||
"ButtonCreate": "Crea",
|
"ButtonCreate": "Crea",
|
||||||
@@ -28,6 +29,9 @@
|
|||||||
"ButtonEdit": "Modifica",
|
"ButtonEdit": "Modifica",
|
||||||
"ButtonEditChapters": "Modifica Capitoli",
|
"ButtonEditChapters": "Modifica Capitoli",
|
||||||
"ButtonEditPodcast": "Modifica Podcast",
|
"ButtonEditPodcast": "Modifica Podcast",
|
||||||
|
"ButtonEnable": "Abilita",
|
||||||
|
"ButtonFireAndFail": "Fire and Fail",
|
||||||
|
"ButtonFireOnTest": "Fire onTest event",
|
||||||
"ButtonForceReScan": "Forza Re-Scan",
|
"ButtonForceReScan": "Forza Re-Scan",
|
||||||
"ButtonFullPath": "Percorso Completo",
|
"ButtonFullPath": "Percorso Completo",
|
||||||
"ButtonHide": "Nascondi",
|
"ButtonHide": "Nascondi",
|
||||||
@@ -46,14 +50,18 @@
|
|||||||
"ButtonNevermind": "Ingora",
|
"ButtonNevermind": "Ingora",
|
||||||
"ButtonNext": "Prossimo",
|
"ButtonNext": "Prossimo",
|
||||||
"ButtonNextChapter": "Prossimo Capitolo",
|
"ButtonNextChapter": "Prossimo Capitolo",
|
||||||
|
"ButtonNextItemInQueue": "Elemento successivo in coda",
|
||||||
|
"ButtonOk": "D’accordo",
|
||||||
"ButtonOpenFeed": "Apri il flusso",
|
"ButtonOpenFeed": "Apri il flusso",
|
||||||
"ButtonOpenManager": "Apri Manager",
|
"ButtonOpenManager": "Apri Manager",
|
||||||
"ButtonPause": "Pausa",
|
"ButtonPause": "Pausa",
|
||||||
"ButtonPlay": "Riproduci",
|
"ButtonPlay": "Riproduci",
|
||||||
|
"ButtonPlayAll": "Riproduci tutto",
|
||||||
"ButtonPlaying": "In riproduzione",
|
"ButtonPlaying": "In riproduzione",
|
||||||
"ButtonPlaylists": "Playlist",
|
"ButtonPlaylists": "Playlist",
|
||||||
"ButtonPrevious": "Precendente",
|
"ButtonPrevious": "Precendente",
|
||||||
"ButtonPreviousChapter": "Capitolo Precendente",
|
"ButtonPreviousChapter": "Capitolo Precendente",
|
||||||
|
"ButtonProbeAudioFile": "Analizza il file audio",
|
||||||
"ButtonPurgeAllCache": "Elimina tutta la Cache",
|
"ButtonPurgeAllCache": "Elimina tutta la Cache",
|
||||||
"ButtonPurgeItemsCache": "Elimina la Cache selezionata",
|
"ButtonPurgeItemsCache": "Elimina la Cache selezionata",
|
||||||
"ButtonQueueAddItem": "Aggiungi alla Coda",
|
"ButtonQueueAddItem": "Aggiungi alla Coda",
|
||||||
@@ -71,6 +79,7 @@
|
|||||||
"ButtonRemoveFromContinueListening": "Rimuovi per proseguire l'ascolto",
|
"ButtonRemoveFromContinueListening": "Rimuovi per proseguire l'ascolto",
|
||||||
"ButtonRemoveFromContinueReading": "Rimuovi per proseguire la lettura",
|
"ButtonRemoveFromContinueReading": "Rimuovi per proseguire la lettura",
|
||||||
"ButtonRemoveSeriesFromContinueSeries": "Rimuovi la Serie per Continuarla",
|
"ButtonRemoveSeriesFromContinueSeries": "Rimuovi la Serie per Continuarla",
|
||||||
|
"ButtonReset": "Ripristina",
|
||||||
"ButtonResetToDefault": "Ripristino di default",
|
"ButtonResetToDefault": "Ripristino di default",
|
||||||
"ButtonRestore": "Ripristina",
|
"ButtonRestore": "Ripristina",
|
||||||
"ButtonSave": "Salva",
|
"ButtonSave": "Salva",
|
||||||
@@ -85,42 +94,49 @@
|
|||||||
"ButtonShare": "Condividi",
|
"ButtonShare": "Condividi",
|
||||||
"ButtonShiftTimes": "Ricerca veloce",
|
"ButtonShiftTimes": "Ricerca veloce",
|
||||||
"ButtonShow": "Mostra",
|
"ButtonShow": "Mostra",
|
||||||
"ButtonStartM4BEncode": "Inizia L'Encode del M4B",
|
"ButtonStartM4BEncode": "Inizia la codifica del M4B",
|
||||||
"ButtonStartMetadataEmbed": "Inizia Incorporo Metadata",
|
"ButtonStartMetadataEmbed": "Inizia i metadati incorporati",
|
||||||
"ButtonStats": "Statistische",
|
"ButtonStats": "Statistische",
|
||||||
"ButtonSubmit": "Invia",
|
"ButtonSubmit": "Invia",
|
||||||
|
"ButtonTest": "Test",
|
||||||
|
"ButtonUnlinkOpenId": "Disattiva OpenID",
|
||||||
"ButtonUpload": "Carica",
|
"ButtonUpload": "Carica",
|
||||||
"ButtonUploadBackup": "Carica Backup",
|
"ButtonUploadBackup": "Carica il backup",
|
||||||
"ButtonUploadCover": "Carica Cover",
|
"ButtonUploadCover": "Carica una copertina",
|
||||||
"ButtonUploadOPMLFile": "Carica File OPML",
|
"ButtonUploadOPMLFile": "Carica file OPML",
|
||||||
"ButtonUserDelete": "Cancella Utente {0}",
|
"ButtonUserDelete": "Elimina l'utente {0}",
|
||||||
"ButtonUserEdit": "Modifica Utente {0}",
|
"ButtonUserEdit": "Modifica l'utente {0}",
|
||||||
"ButtonViewAll": "Mostra Tutto",
|
"ButtonViewAll": "Mostra tutto",
|
||||||
"ButtonYes": "Sì",
|
"ButtonYes": "Sì",
|
||||||
"ErrorUploadFetchMetadataAPI": "Errore Recupero metadati",
|
"ErrorUploadFetchMetadataAPI": "Errore durante il recupero metadati",
|
||||||
"ErrorUploadFetchMetadataNoResults": "Impossibile recuperare i metadati: prova a modificate il titolo e/o l'autore",
|
"ErrorUploadFetchMetadataNoResults": "Impossibile recuperare i metadati: prova a modificate il titolo e/o l'autore",
|
||||||
"ErrorUploadLacksTitle": "Deve avere un titolo",
|
"ErrorUploadLacksTitle": "Deve avere un titolo",
|
||||||
|
"HeaderAccount": "Account",
|
||||||
|
"HeaderAddCustomMetadataProvider": "Aggiungi fornitori di metadati personalizzati",
|
||||||
"HeaderAdvanced": "Avanzate",
|
"HeaderAdvanced": "Avanzate",
|
||||||
"HeaderAppriseNotificationSettings": "Apprendi le impostazioni di Notifica",
|
"HeaderAppriseNotificationSettings": "Apprendi le impostazioni di Notifica",
|
||||||
"HeaderAudioTracks": "Tracce audio",
|
"HeaderAudioTracks": "Tracce audio",
|
||||||
"HeaderAudiobookTools": "Utilità Audiobook File Management",
|
"HeaderAudiobookTools": "Strumenti di gestione file audiolibri",
|
||||||
"HeaderAuthentication": "Authenticazione",
|
"HeaderAuthentication": "Authenticazione",
|
||||||
"HeaderBackups": "Backup",
|
"HeaderBackups": "Backup",
|
||||||
"HeaderChangePassword": "Cambia Password",
|
"HeaderChangePassword": "Cambia la password",
|
||||||
"HeaderChapters": "Capitoli",
|
"HeaderChapters": "Capitoli",
|
||||||
"HeaderChooseAFolder": "Seleziona la cartella",
|
"HeaderChooseAFolder": "Seleziona la cartella",
|
||||||
"HeaderCollection": "Raccolta",
|
"HeaderCollection": "Raccolta",
|
||||||
"HeaderCollectionItems": "Elementi della raccolta",
|
"HeaderCollectionItems": "Elementi della raccolta",
|
||||||
"HeaderCurrentDownloads": "Download Correnti",
|
"HeaderCover": "Copertina",
|
||||||
|
"HeaderCurrentDownloads": "Scaricamenti correnti",
|
||||||
"HeaderCustomMessageOnLogin": "Messaggio personalizzato all'accesso",
|
"HeaderCustomMessageOnLogin": "Messaggio personalizzato all'accesso",
|
||||||
"HeaderCustomMetadataProviders": "Metadata Providers Personalizzato",
|
"HeaderCustomMetadataProviders": "Metadata Providers Personalizzato",
|
||||||
"HeaderDetails": "Dettagli",
|
"HeaderDetails": "Dettagli",
|
||||||
"HeaderDownloadQueue": "Download coda",
|
"HeaderDownloadQueue": "Download coda",
|
||||||
"HeaderEbookFiles": "File dei libri",
|
"HeaderEbookFiles": "File dei libri",
|
||||||
"HeaderEmailSettings": "Impostazioni Email",
|
"HeaderEmail": "E-mail",
|
||||||
|
"HeaderEmailSettings": "Impostazioni e-mail",
|
||||||
"HeaderEpisodes": "Episodi",
|
"HeaderEpisodes": "Episodi",
|
||||||
"HeaderEreaderDevices": "Dispositivo Ereader",
|
"HeaderEreaderDevices": "Dispositivo Ereader",
|
||||||
"HeaderEreaderSettings": "Impostazioni lettore",
|
"HeaderEreaderSettings": "Impostazioni lettore",
|
||||||
|
"HeaderFiles": "File",
|
||||||
"HeaderFindChapters": "Trova Capitoli",
|
"HeaderFindChapters": "Trova Capitoli",
|
||||||
"HeaderIgnoredFiles": "File Ignorati",
|
"HeaderIgnoredFiles": "File Ignorati",
|
||||||
"HeaderItemFiles": "Files",
|
"HeaderItemFiles": "Files",
|
||||||
@@ -132,6 +148,8 @@
|
|||||||
"HeaderLibraryStats": "Statistiche Libreria",
|
"HeaderLibraryStats": "Statistiche Libreria",
|
||||||
"HeaderListeningSessions": "Sessioni di Ascolto",
|
"HeaderListeningSessions": "Sessioni di Ascolto",
|
||||||
"HeaderListeningStats": "Statistiche di Ascolto",
|
"HeaderListeningStats": "Statistiche di Ascolto",
|
||||||
|
"HeaderLogin": "Accesso",
|
||||||
|
"HeaderLogs": "Registri",
|
||||||
"HeaderManageGenres": "Gestisci Generi",
|
"HeaderManageGenres": "Gestisci Generi",
|
||||||
"HeaderManageTags": "Gestisci Tags",
|
"HeaderManageTags": "Gestisci Tags",
|
||||||
"HeaderMapDetails": "Mappa Dettagli",
|
"HeaderMapDetails": "Mappa Dettagli",
|
||||||
@@ -140,17 +158,23 @@
|
|||||||
"HeaderMetadataToEmbed": "Metadata da incorporare",
|
"HeaderMetadataToEmbed": "Metadata da incorporare",
|
||||||
"HeaderNewAccount": "Nuovo Account",
|
"HeaderNewAccount": "Nuovo Account",
|
||||||
"HeaderNewLibrary": "Nuova Libreria",
|
"HeaderNewLibrary": "Nuova Libreria",
|
||||||
|
"HeaderNotificationCreate": "Crea una notifica",
|
||||||
|
"HeaderNotificationUpdate": "Aggiornamento della notifica",
|
||||||
"HeaderNotifications": "Notifiche",
|
"HeaderNotifications": "Notifiche",
|
||||||
"HeaderOpenIDConnectAuthentication": "Autenticazione OpenID Connect",
|
"HeaderOpenIDConnectAuthentication": "Autenticazione OpenID Connect",
|
||||||
"HeaderOpenRSSFeed": "Apri il flusso RSS",
|
"HeaderOpenRSSFeed": "Apri il flusso RSS",
|
||||||
"HeaderOtherFiles": "Altri File",
|
"HeaderOtherFiles": "Altri File",
|
||||||
|
"HeaderPasswordAuthentication": "Autenticazione della password",
|
||||||
"HeaderPermissions": "Permessi",
|
"HeaderPermissions": "Permessi",
|
||||||
"HeaderPlayerQueue": "Coda Riproduzione",
|
"HeaderPlayerQueue": "Coda Riproduzione",
|
||||||
"HeaderPlayerSettings": "Impostazioni Player",
|
"HeaderPlayerSettings": "Impostazioni Player",
|
||||||
|
"HeaderPlaylist": "Playlist",
|
||||||
"HeaderPlaylistItems": "Elementi della playlist",
|
"HeaderPlaylistItems": "Elementi della playlist",
|
||||||
"HeaderPodcastsToAdd": "Podcasts da Aggiungere",
|
"HeaderPodcastsToAdd": "Podcasts da Aggiungere",
|
||||||
"HeaderPreviewCover": "Anteprima Cover",
|
"HeaderPreviewCover": "Anteprima Cover",
|
||||||
|
"HeaderRSSFeedGeneral": "Dettagli RSS",
|
||||||
"HeaderRSSFeedIsOpen": "RSS Feed è aperto",
|
"HeaderRSSFeedIsOpen": "RSS Feed è aperto",
|
||||||
|
"HeaderRSSFeeds": "Flussi RSS",
|
||||||
"HeaderRemoveEpisode": "Rimuovi Episodi",
|
"HeaderRemoveEpisode": "Rimuovi Episodi",
|
||||||
"HeaderRemoveEpisodes": "Rimuovi {0} Episodi",
|
"HeaderRemoveEpisodes": "Rimuovi {0} Episodi",
|
||||||
"HeaderSavedMediaProgress": "Progressi salvati",
|
"HeaderSavedMediaProgress": "Progressi salvati",
|
||||||
@@ -159,10 +183,12 @@
|
|||||||
"HeaderSession": "Sessione",
|
"HeaderSession": "Sessione",
|
||||||
"HeaderSetBackupSchedule": "Imposta programmazione Backup",
|
"HeaderSetBackupSchedule": "Imposta programmazione Backup",
|
||||||
"HeaderSettings": "Impostazioni",
|
"HeaderSettings": "Impostazioni",
|
||||||
|
"HeaderSettingsDisplay": "Visualizzazione",
|
||||||
"HeaderSettingsExperimental": "Opzioni Sperimentali",
|
"HeaderSettingsExperimental": "Opzioni Sperimentali",
|
||||||
"HeaderSettingsGeneral": "Generale",
|
"HeaderSettingsGeneral": "Generale",
|
||||||
|
"HeaderSettingsScanner": "Scanner",
|
||||||
"HeaderSleepTimer": "Sveglia",
|
"HeaderSleepTimer": "Sveglia",
|
||||||
"HeaderStatsLargestItems": "Oggetti Grandi",
|
"HeaderStatsLargestItems": "File pesanti",
|
||||||
"HeaderStatsLongestItems": "libri più lunghi (ore)",
|
"HeaderStatsLongestItems": "libri più lunghi (ore)",
|
||||||
"HeaderStatsMinutesListeningChart": "Minuti ascoltati (Ultimi 7 Giorni)",
|
"HeaderStatsMinutesListeningChart": "Minuti ascoltati (Ultimi 7 Giorni)",
|
||||||
"HeaderStatsRecentSessions": "Sessioni Recenti",
|
"HeaderStatsRecentSessions": "Sessioni Recenti",
|
||||||
@@ -182,6 +208,7 @@
|
|||||||
"LabelAbridgedUnchecked": "Integrale (non selezionato)",
|
"LabelAbridgedUnchecked": "Integrale (non selezionato)",
|
||||||
"LabelAccessibleBy": "Accessibile da",
|
"LabelAccessibleBy": "Accessibile da",
|
||||||
"LabelAccountType": "Tipo di Account",
|
"LabelAccountType": "Tipo di Account",
|
||||||
|
"LabelAccountTypeAdmin": "Amministratore",
|
||||||
"LabelAccountTypeGuest": "Ospite",
|
"LabelAccountTypeGuest": "Ospite",
|
||||||
"LabelAccountTypeUser": "Utente",
|
"LabelAccountTypeUser": "Utente",
|
||||||
"LabelActivity": "Attività",
|
"LabelActivity": "Attività",
|
||||||
@@ -190,6 +217,7 @@
|
|||||||
"LabelAddToPlaylist": "Aggiungi alla playlist",
|
"LabelAddToPlaylist": "Aggiungi alla playlist",
|
||||||
"LabelAddToPlaylistBatch": "Aggiungi {0} file alla Playlist",
|
"LabelAddToPlaylistBatch": "Aggiungi {0} file alla Playlist",
|
||||||
"LabelAddedAt": "Aggiunto il",
|
"LabelAddedAt": "Aggiunto il",
|
||||||
|
"LabelAddedDate": "{0} aggiunti",
|
||||||
"LabelAdminUsersOnly": "Solo utenti Amministratori",
|
"LabelAdminUsersOnly": "Solo utenti Amministratori",
|
||||||
"LabelAll": "Tutti",
|
"LabelAll": "Tutti",
|
||||||
"LabelAllUsers": "Tutti gli Utenti",
|
"LabelAllUsers": "Tutti gli Utenti",
|
||||||
@@ -216,8 +244,10 @@
|
|||||||
"LabelBackupsMaxBackupSizeHelp": "Come protezione contro gli errori di config, i backup falliranno se superano la dimensione configurata.",
|
"LabelBackupsMaxBackupSizeHelp": "Come protezione contro gli errori di config, i backup falliranno se superano la dimensione configurata.",
|
||||||
"LabelBackupsNumberToKeep": "Numero di backup da mantenere",
|
"LabelBackupsNumberToKeep": "Numero di backup da mantenere",
|
||||||
"LabelBackupsNumberToKeepHelp": "Verrà rimosso solo 1 backup alla volta, quindi se hai più backup, dovrai rimuoverli manualmente.",
|
"LabelBackupsNumberToKeepHelp": "Verrà rimosso solo 1 backup alla volta, quindi se hai più backup, dovrai rimuoverli manualmente.",
|
||||||
|
"LabelBitrate": "Velocità di trasmissione",
|
||||||
"LabelBooks": "Libri",
|
"LabelBooks": "Libri",
|
||||||
"LabelButtonText": "Buttone Testo",
|
"LabelButtonText": "Buttone Testo",
|
||||||
|
"LabelByAuthor": "da {0}",
|
||||||
"LabelChangePassword": "Cambia Password",
|
"LabelChangePassword": "Cambia Password",
|
||||||
"LabelChannels": "Canali",
|
"LabelChannels": "Canali",
|
||||||
"LabelChapterTitle": "Titoli dei Capitoli",
|
"LabelChapterTitle": "Titoli dei Capitoli",
|
||||||
@@ -225,7 +255,9 @@
|
|||||||
"LabelChaptersFound": "Capitoli Trovati",
|
"LabelChaptersFound": "Capitoli Trovati",
|
||||||
"LabelClickForMoreInfo": "Click per altre Info",
|
"LabelClickForMoreInfo": "Click per altre Info",
|
||||||
"LabelClosePlayer": "Chiudi player",
|
"LabelClosePlayer": "Chiudi player",
|
||||||
|
"LabelCodec": "Codec",
|
||||||
"LabelCollapseSeries": "Comprimi Serie",
|
"LabelCollapseSeries": "Comprimi Serie",
|
||||||
|
"LabelCollapseSubSeries": "Comprimi subserie",
|
||||||
"LabelCollection": "Raccolta",
|
"LabelCollection": "Raccolta",
|
||||||
"LabelCollections": "Raccolte",
|
"LabelCollections": "Raccolte",
|
||||||
"LabelComplete": "Completo",
|
"LabelComplete": "Completo",
|
||||||
@@ -233,6 +265,7 @@
|
|||||||
"LabelContinueListening": "Continua ad Ascoltare",
|
"LabelContinueListening": "Continua ad Ascoltare",
|
||||||
"LabelContinueReading": "Continua la Lettura",
|
"LabelContinueReading": "Continua la Lettura",
|
||||||
"LabelContinueSeries": "Continua serie",
|
"LabelContinueSeries": "Continua serie",
|
||||||
|
"LabelCover": "Copertina",
|
||||||
"LabelCoverImageURL": "Indirizzo della cover URL",
|
"LabelCoverImageURL": "Indirizzo della cover URL",
|
||||||
"LabelCreatedAt": "Creato A",
|
"LabelCreatedAt": "Creato A",
|
||||||
"LabelCronExpression": "Espressione Cron",
|
"LabelCronExpression": "Espressione Cron",
|
||||||
@@ -261,12 +294,13 @@
|
|||||||
"LabelEbook": "Libro digitale",
|
"LabelEbook": "Libro digitale",
|
||||||
"LabelEbooks": "Libri digitali",
|
"LabelEbooks": "Libri digitali",
|
||||||
"LabelEdit": "Modifica",
|
"LabelEdit": "Modifica",
|
||||||
|
"LabelEmail": "E-mail",
|
||||||
"LabelEmailSettingsFromAddress": "Da Indirizzo",
|
"LabelEmailSettingsFromAddress": "Da Indirizzo",
|
||||||
"LabelEmailSettingsRejectUnauthorized": "Rifiuta i certificati non autorizzati",
|
"LabelEmailSettingsRejectUnauthorized": "Rifiuta i certificati non autorizzati",
|
||||||
"LabelEmailSettingsRejectUnauthorizedHelp": "La disattivazione della convalida del certificato SSL può esporre la tua connessione a rischi per la sicurezza, come attacchi man-in-the-middle. Disattiva questa opzione solo se ne comprendi le implicazioni e ti fidi del server di posta a cui ti stai connettendo.",
|
"LabelEmailSettingsRejectUnauthorizedHelp": "La disattivazione della convalida del certificato SSL può esporre la tua connessione a rischi per la sicurezza, come attacchi man-in-the-middle. Disattiva questa opzione solo se ne comprendi le implicazioni e ti fidi del server di posta a cui ti stai connettendo.",
|
||||||
"LabelEmailSettingsSecure": "Sicuro",
|
"LabelEmailSettingsSecure": "SSL",
|
||||||
"LabelEmailSettingsSecureHelp": "Se vero, la connessione utilizzerà TLS durante la connessione al server. Se false, viene utilizzato TLS se il server supporta l'estensione STARTTLS. Nella maggior parte dei casi impostare questo valore su true se ci si connette alla porta 465. Per la porta 587 o 25 mantenerlo false. (da nodemailer.com/smtp/#authentication)",
|
"LabelEmailSettingsSecureHelp": "Se vero, la connessione utilizzerà TLS durante la connessione al server. Se false, viene utilizzato TLS se il server supporta l'estensione STARTTLS. Nella maggior parte dei casi impostare questo valore su true se ci si connette alla porta 465. Per la porta 587 o 25 mantenerlo false. (da nodemailer.com/smtp/#authentication)",
|
||||||
"LabelEmailSettingsTestAddress": "Test Indirizzo",
|
"LabelEmailSettingsTestAddress": "Indirizzo di test",
|
||||||
"LabelEmbeddedCover": "Cover Integrata",
|
"LabelEmbeddedCover": "Cover Integrata",
|
||||||
"LabelEnable": "Abilita",
|
"LabelEnable": "Abilita",
|
||||||
"LabelEnd": "Fine",
|
"LabelEnd": "Fine",
|
||||||
@@ -274,16 +308,21 @@
|
|||||||
"LabelEpisode": "Episodio",
|
"LabelEpisode": "Episodio",
|
||||||
"LabelEpisodeTitle": "Titolo Episodio",
|
"LabelEpisodeTitle": "Titolo Episodio",
|
||||||
"LabelEpisodeType": "Tipo Episodio",
|
"LabelEpisodeType": "Tipo Episodio",
|
||||||
|
"LabelEpisodes": "Episodi",
|
||||||
"LabelExample": "Esempio",
|
"LabelExample": "Esempio",
|
||||||
"LabelExpandSeries": "Espandi Serie",
|
"LabelExpandSeries": "Espandi Serie",
|
||||||
|
"LabelExpandSubSeries": "Espandi Sub Serie",
|
||||||
"LabelExplicit": "Esplicito",
|
"LabelExplicit": "Esplicito",
|
||||||
"LabelExplicitChecked": "Esplicito (selezionato)",
|
"LabelExplicitChecked": "Esplicito (selezionato)",
|
||||||
"LabelExplicitUnchecked": "Non Esplicito (selezionato)",
|
"LabelExplicitUnchecked": "Non Esplicito (selezionato)",
|
||||||
"LabelExportOPML": "Esposta OPML",
|
"LabelExportOPML": "Esposta OPML",
|
||||||
"LabelFeedURL": "URL del flusso",
|
"LabelFeedURL": "URL del flusso",
|
||||||
"LabelFetchingMetadata": "Recupero dei metadati",
|
"LabelFetchingMetadata": "Recupero dei metadati",
|
||||||
|
"LabelFile": "File",
|
||||||
"LabelFileBirthtime": "Data di creazione",
|
"LabelFileBirthtime": "Data di creazione",
|
||||||
|
"LabelFileBornDate": "Creato {0}",
|
||||||
"LabelFileModified": "Ultima modifica",
|
"LabelFileModified": "Ultima modifica",
|
||||||
|
"LabelFileModifiedDate": "Modificato {0}",
|
||||||
"LabelFilename": "Nome del file",
|
"LabelFilename": "Nome del file",
|
||||||
"LabelFilterByUser": "Filtro per Utente",
|
"LabelFilterByUser": "Filtro per Utente",
|
||||||
"LabelFindEpisodes": "Trova Episodi",
|
"LabelFindEpisodes": "Trova Episodi",
|
||||||
@@ -292,6 +331,8 @@
|
|||||||
"LabelFolders": "Cartelle",
|
"LabelFolders": "Cartelle",
|
||||||
"LabelFontBold": "Grassetto",
|
"LabelFontBold": "Grassetto",
|
||||||
"LabelFontBoldness": "Grassetto",
|
"LabelFontBoldness": "Grassetto",
|
||||||
|
"LabelFontFamily": "Famiglia di caratteri",
|
||||||
|
"LabelFontItalic": "Corsivo",
|
||||||
"LabelFontScale": "Dimensione font",
|
"LabelFontScale": "Dimensione font",
|
||||||
"LabelFontStrikethrough": "Barrato",
|
"LabelFontStrikethrough": "Barrato",
|
||||||
"LabelFormat": "Formato",
|
"LabelFormat": "Formato",
|
||||||
@@ -302,6 +343,7 @@
|
|||||||
"LabelHasSupplementaryEbook": "Ha un libro supplementale",
|
"LabelHasSupplementaryEbook": "Ha un libro supplementale",
|
||||||
"LabelHideSubtitles": "Nascondi Sottotitoli",
|
"LabelHideSubtitles": "Nascondi Sottotitoli",
|
||||||
"LabelHighestPriority": "Priorità Massima",
|
"LabelHighestPriority": "Priorità Massima",
|
||||||
|
"LabelHost": "Host",
|
||||||
"LabelHour": "Ora",
|
"LabelHour": "Ora",
|
||||||
"LabelHours": "Ore",
|
"LabelHours": "Ore",
|
||||||
"LabelIcon": "Icona",
|
"LabelIcon": "Icona",
|
||||||
@@ -332,27 +374,34 @@
|
|||||||
"LabelLastUpdate": "Ultimo Aggiornamento",
|
"LabelLastUpdate": "Ultimo Aggiornamento",
|
||||||
"LabelLayout": "Disposizione",
|
"LabelLayout": "Disposizione",
|
||||||
"LabelLayoutSinglePage": "Pagina singola",
|
"LabelLayoutSinglePage": "Pagina singola",
|
||||||
"LabelLayoutSplitPage": "Dividi Pagina",
|
"LabelLayoutSplitPage": "Pagina divisa",
|
||||||
"LabelLess": "Poco",
|
"LabelLess": "Meno",
|
||||||
"LabelLibrariesAccessibleToUser": "Librerie Accessibili agli Utenti",
|
"LabelLibrariesAccessibleToUser": "Biblioteche accessibili all'utente",
|
||||||
"LabelLibrary": "Libreria",
|
"LabelLibrary": "Biblioteca",
|
||||||
"LabelLibraryItem": "Elementi della Library",
|
"LabelLibraryFilterSublistEmpty": "Nessuno {0}",
|
||||||
"LabelLibraryName": "Nome Libreria",
|
"LabelLibraryItem": "Elementi della biblioteca",
|
||||||
|
"LabelLibraryName": "Nome della biblioteca",
|
||||||
"LabelLimit": "Limiti",
|
"LabelLimit": "Limiti",
|
||||||
"LabelLineSpacing": "Interlinea",
|
"LabelLineSpacing": "Interlinea",
|
||||||
"LabelListenAgain": "Ascolta ancora",
|
"LabelListenAgain": "Ascolta ancora",
|
||||||
|
"LabelLogLevelDebug": "Debug",
|
||||||
|
"LabelLogLevelInfo": "Info",
|
||||||
"LabelLogLevelWarn": "Allarme",
|
"LabelLogLevelWarn": "Allarme",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Cerca nuovi episodi dopo questa data",
|
"LabelLookForNewEpisodesAfterDate": "Cerca nuovi episodi dopo questa data",
|
||||||
"LabelLowestPriority": "Priorità Minima",
|
"LabelLowestPriority": "Priorità Minima",
|
||||||
"LabelMatchExistingUsersBy": "Abbina gli utenti esistenti per",
|
"LabelMatchExistingUsersBy": "Abbina gli utenti esistenti per",
|
||||||
"LabelMatchExistingUsersByDescription": "Utilizzato per connettere gli utenti esistenti. Una volta connessi, gli utenti verranno abbinati a un ID univoco dal tuo provider SSO",
|
"LabelMatchExistingUsersByDescription": "Utilizzato per connettere gli utenti esistenti. Una volta connessi, gli utenti verranno abbinati a un ID univoco dal tuo provider SSO",
|
||||||
|
"LabelMediaPlayer": "Media Player",
|
||||||
"LabelMediaType": "Tipo Media",
|
"LabelMediaType": "Tipo Media",
|
||||||
|
"LabelMetaTag": "Meta Tag",
|
||||||
|
"LabelMetaTags": "Meta Tags",
|
||||||
"LabelMetadataOrderOfPrecedenceDescription": "Le origini di metadati con priorità più alta sovrascriveranno le origini di metadati con priorità inferiore",
|
"LabelMetadataOrderOfPrecedenceDescription": "Le origini di metadati con priorità più alta sovrascriveranno le origini di metadati con priorità inferiore",
|
||||||
|
"LabelMetadataProvider": "Metadata Provider",
|
||||||
"LabelMinute": "Minuto",
|
"LabelMinute": "Minuto",
|
||||||
"LabelMinutes": "Minuti",
|
"LabelMinutes": "Minuti",
|
||||||
"LabelMissing": "Altro",
|
"LabelMissing": "Altro",
|
||||||
"LabelMissingEbook": "Non ha ebook",
|
"LabelMissingEbook": "Non ha libri digitali",
|
||||||
"LabelMissingSupplementaryEbook": "Non ha ebook supplementare",
|
"LabelMissingSupplementaryEbook": "Non ha un libro digitale supplementare",
|
||||||
"LabelMobileRedirectURIs": "URI di reindirizzamento mobile consentiti",
|
"LabelMobileRedirectURIs": "URI di reindirizzamento mobile consentiti",
|
||||||
"LabelMobileRedirectURIsDescription": "Questa è una lista bianca di URI di reindirizzamento validi per le app mobili. Quello predefinito è <code>audiobookshelf://oauth</code>, che puoi rimuovere o integrare con URI aggiuntivi per l'integrazione di app di terze parti. Utilizzando un asterisco (<code>*</code>) poiché l'unica voce consente qualsiasi URI.",
|
"LabelMobileRedirectURIsDescription": "Questa è una lista bianca di URI di reindirizzamento validi per le app mobili. Quello predefinito è <code>audiobookshelf://oauth</code>, che puoi rimuovere o integrare con URI aggiuntivi per l'integrazione di app di terze parti. Utilizzando un asterisco (<code>*</code>) poiché l'unica voce consente qualsiasi URI.",
|
||||||
"LabelMore": "Molto",
|
"LabelMore": "Molto",
|
||||||
@@ -387,6 +436,7 @@
|
|||||||
"LabelOpenIDGroupClaimDescription": "Nome dell'attestazione OpenID che contiene un elenco dei gruppi dell'utente. Comunemente indicato come <code>gruppo</code>. <b>se configurato</b>, l'applicazione assegnerà automaticamente i ruoli in base alle appartenenze ai gruppi dell'utente, a condizione che tali gruppi siano denominati \"admin\", \"utente\" o \"ospite\" senza distinzione tra maiuscole e minuscole nell'attestazione. L'attestazione deve contenere un elenco e, se un utente appartiene a più gruppi, l'applicazione assegnerà il ruolo corrispondente al livello di accesso più alto. Se nessun gruppo corrisponde, l'accesso verrà negato.",
|
"LabelOpenIDGroupClaimDescription": "Nome dell'attestazione OpenID che contiene un elenco dei gruppi dell'utente. Comunemente indicato come <code>gruppo</code>. <b>se configurato</b>, l'applicazione assegnerà automaticamente i ruoli in base alle appartenenze ai gruppi dell'utente, a condizione che tali gruppi siano denominati \"admin\", \"utente\" o \"ospite\" senza distinzione tra maiuscole e minuscole nell'attestazione. L'attestazione deve contenere un elenco e, se un utente appartiene a più gruppi, l'applicazione assegnerà il ruolo corrispondente al livello di accesso più alto. Se nessun gruppo corrisponde, l'accesso verrà negato.",
|
||||||
"LabelOpenRSSFeed": "Apri RSS Feed",
|
"LabelOpenRSSFeed": "Apri RSS Feed",
|
||||||
"LabelOverwrite": "Sovrascrivi",
|
"LabelOverwrite": "Sovrascrivi",
|
||||||
|
"LabelPassword": "Password",
|
||||||
"LabelPath": "Percorso",
|
"LabelPath": "Percorso",
|
||||||
"LabelPermanent": "Permanente",
|
"LabelPermanent": "Permanente",
|
||||||
"LabelPermissionsAccessAllLibraries": "Può accedere a tutte le librerie",
|
"LabelPermissionsAccessAllLibraries": "Può accedere a tutte le librerie",
|
||||||
@@ -399,26 +449,35 @@
|
|||||||
"LabelPersonalYearReview": "Il tuo anno in rassegna ({0})",
|
"LabelPersonalYearReview": "Il tuo anno in rassegna ({0})",
|
||||||
"LabelPhotoPathURL": "foto Path/URL",
|
"LabelPhotoPathURL": "foto Path/URL",
|
||||||
"LabelPlayMethod": "Metodo di riproduzione",
|
"LabelPlayMethod": "Metodo di riproduzione",
|
||||||
|
"LabelPlayerChapterNumberMarker": "{0} di {1}",
|
||||||
|
"LabelPlaylists": "Playlist",
|
||||||
|
"LabelPodcast": "Podcast",
|
||||||
"LabelPodcastSearchRegion": "Area di ricerca podcast",
|
"LabelPodcastSearchRegion": "Area di ricerca podcast",
|
||||||
"LabelPodcastType": "Tipo di Podcast",
|
"LabelPodcastType": "Tipo di Podcast",
|
||||||
|
"LabelPodcasts": "Podcast",
|
||||||
|
"LabelPort": "Porta",
|
||||||
"LabelPrefixesToIgnore": "Suffissi da ignorare (specificando maiuscole e minuscole)",
|
"LabelPrefixesToIgnore": "Suffissi da ignorare (specificando maiuscole e minuscole)",
|
||||||
"LabelPreventIndexing": "Impedisci che il tuo feed venga indicizzato da iTunes e dalle directory dei podcast di Google",
|
"LabelPreventIndexing": "Impedisci che il tuo feed venga indicizzato da iTunes e dalle directory dei podcast di Google",
|
||||||
"LabelPrimaryEbook": "Libri Principlae",
|
"LabelPrimaryEbook": "Libro principale",
|
||||||
"LabelProgress": "Cominciati",
|
"LabelProgress": "Cominciati",
|
||||||
|
"LabelProvider": "Fornitore",
|
||||||
|
"LabelProviderAuthorizationValue": "Authorization Header Value",
|
||||||
"LabelPubDate": "Data di pubblicazione",
|
"LabelPubDate": "Data di pubblicazione",
|
||||||
"LabelPublishYear": "Anno di pubblicazione",
|
"LabelPublishYear": "Anno di pubblicazione",
|
||||||
|
"LabelPublishedDate": "{0} pubblicati",
|
||||||
"LabelPublisher": "Editore",
|
"LabelPublisher": "Editore",
|
||||||
"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": "RSS Feed 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",
|
||||||
"LabelRandomly": "Casualmente",
|
"LabelRandomly": "Casualmente",
|
||||||
"LabelReAddSeriesToContinueListening": "Aggiungi di nuovo la serie per continuare ad ascoltare",
|
"LabelReAddSeriesToContinueListening": "Aggiungi di nuovo la serie per continuare ad ascoltare",
|
||||||
"LabelRead": "Leggi",
|
"LabelRead": "Leggi",
|
||||||
"LabelReadAgain": "Leggi ancora",
|
"LabelReadAgain": "Leggi ancora",
|
||||||
"LabelReadEbookWithoutProgress": "Leggi l'ebook senza mantenere i progressi",
|
"LabelReadEbookWithoutProgress": "Leggi il libro senza mantenere i progressi",
|
||||||
"LabelRecentSeries": "Serie recenti",
|
"LabelRecentSeries": "Serie recenti",
|
||||||
"LabelRecentlyAdded": "Aggiunti recentemente",
|
"LabelRecentlyAdded": "Aggiunti recentemente",
|
||||||
"LabelRecommended": "Raccomandati",
|
"LabelRecommended": "Raccomandati",
|
||||||
@@ -435,7 +494,7 @@
|
|||||||
"LabelSelectAllEpisodes": "Seleziona tutti gli Episodi",
|
"LabelSelectAllEpisodes": "Seleziona tutti gli Episodi",
|
||||||
"LabelSelectEpisodesShowing": "Selezionati {0} episodi da visualizzare",
|
"LabelSelectEpisodesShowing": "Selezionati {0} episodi da visualizzare",
|
||||||
"LabelSelectUsers": "Selezione Utenti",
|
"LabelSelectUsers": "Selezione Utenti",
|
||||||
"LabelSendEbookToDevice": "Invia ebook a...",
|
"LabelSendEbookToDevice": "Invia il libro a...",
|
||||||
"LabelSequence": "Sequenza",
|
"LabelSequence": "Sequenza",
|
||||||
"LabelSeries": "Serie",
|
"LabelSeries": "Serie",
|
||||||
"LabelSeriesName": "Nome Serie",
|
"LabelSeriesName": "Nome Serie",
|
||||||
@@ -444,7 +503,7 @@
|
|||||||
"LabelSetEbookAsPrimary": "Imposta come primario",
|
"LabelSetEbookAsPrimary": "Imposta come primario",
|
||||||
"LabelSetEbookAsSupplementary": "Imposta come suplementare",
|
"LabelSetEbookAsSupplementary": "Imposta come suplementare",
|
||||||
"LabelSettingsAudiobooksOnly": "Solo Audiolibri",
|
"LabelSettingsAudiobooksOnly": "Solo Audiolibri",
|
||||||
"LabelSettingsAudiobooksOnlyHelp": "L'abilitazione di questa impostazione ignorerà i file di ebook a meno che non si trovino all'interno di una cartella di audiolibri, nel qual caso verranno impostati come ebook supplementari",
|
"LabelSettingsAudiobooksOnlyHelp": "L'abilitazione di questa impostazione ignorerà i file di libro digitale a meno che non si trovino all'interno di una cartella di audiolibri, nel qual caso verranno impostati come libri digitali supplementari",
|
||||||
"LabelSettingsBookshelfViewHelp": "Design con scaffali in legno",
|
"LabelSettingsBookshelfViewHelp": "Design con scaffali in legno",
|
||||||
"LabelSettingsChromecastSupport": "Supporto a Chromecast",
|
"LabelSettingsChromecastSupport": "Supporto a Chromecast",
|
||||||
"LabelSettingsDateFormat": "Formato Data",
|
"LabelSettingsDateFormat": "Formato Data",
|
||||||
@@ -517,6 +576,7 @@
|
|||||||
"LabelTagsNotAccessibleToUser": "Tags non accessibile agli Utenti",
|
"LabelTagsNotAccessibleToUser": "Tags non accessibile agli Utenti",
|
||||||
"LabelTasks": "Processi in esecuzione",
|
"LabelTasks": "Processi in esecuzione",
|
||||||
"LabelTextEditorBulletedList": "Elenco puntato",
|
"LabelTextEditorBulletedList": "Elenco puntato",
|
||||||
|
"LabelTextEditorLink": "Collegamento",
|
||||||
"LabelTextEditorNumberedList": "Elenco Numerato",
|
"LabelTextEditorNumberedList": "Elenco Numerato",
|
||||||
"LabelTextEditorUnlink": "Scollega",
|
"LabelTextEditorUnlink": "Scollega",
|
||||||
"LabelTheme": "Tema",
|
"LabelTheme": "Tema",
|
||||||
@@ -536,7 +596,7 @@
|
|||||||
"LabelToolsEmbedMetadataDescription": "Incorpora i metadati nei file audio, inclusi l'immagine di copertina e i capitoli.",
|
"LabelToolsEmbedMetadataDescription": "Incorpora i metadati nei file audio, inclusi l'immagine di copertina e i capitoli.",
|
||||||
"LabelToolsMakeM4b": "Crea un file M4B",
|
"LabelToolsMakeM4b": "Crea un file M4B",
|
||||||
"LabelToolsMakeM4bDescription": "Genera un file audiolibro M4B con metadati incorporati, immagine di copertina e capitoli.",
|
"LabelToolsMakeM4bDescription": "Genera un file audiolibro M4B con metadati incorporati, immagine di copertina e capitoli.",
|
||||||
"LabelToolsSplitM4b": "Converti M4B in MP3's",
|
"LabelToolsSplitM4b": "Converti M4B in MP3",
|
||||||
"LabelToolsSplitM4bDescription": "Crea MP3 da un M4B diviso per capitoli con metadati incorporati, immagine di copertina e capitoli.",
|
"LabelToolsSplitM4bDescription": "Crea MP3 da un M4B diviso per capitoli con metadati incorporati, immagine di copertina e capitoli.",
|
||||||
"LabelTotalDuration": "Durata Totale",
|
"LabelTotalDuration": "Durata Totale",
|
||||||
"LabelTotalTimeListened": "Tempo totale di Ascolto",
|
"LabelTotalTimeListened": "Tempo totale di Ascolto",
|
||||||
@@ -550,6 +610,7 @@
|
|||||||
"LabelUnabridged": "Integrale",
|
"LabelUnabridged": "Integrale",
|
||||||
"LabelUndo": "Annulla",
|
"LabelUndo": "Annulla",
|
||||||
"LabelUnknown": "Sconosciuto",
|
"LabelUnknown": "Sconosciuto",
|
||||||
|
"LabelUnknownPublishDate": "Data di pubblicazione sconosciuta",
|
||||||
"LabelUpdateCover": "Aggiornamento Cover",
|
"LabelUpdateCover": "Aggiornamento Cover",
|
||||||
"LabelUpdateCoverHelp": "Consenti la sovrascrittura delle copertine esistenti per i libri selezionati quando viene trovata una corrispondenza",
|
"LabelUpdateCoverHelp": "Consenti la sovrascrittura delle copertine esistenti per i libri selezionati quando viene trovata una corrispondenza",
|
||||||
"LabelUpdateDetails": "Dettagli Aggiornamento",
|
"LabelUpdateDetails": "Dettagli Aggiornamento",
|
||||||
@@ -568,6 +629,7 @@
|
|||||||
"LabelViewChapters": "Visualizza i Capitoli",
|
"LabelViewChapters": "Visualizza i Capitoli",
|
||||||
"LabelViewPlayerSettings": "Mostra Impostazioni player",
|
"LabelViewPlayerSettings": "Mostra Impostazioni player",
|
||||||
"LabelViewQueue": "Visualizza coda",
|
"LabelViewQueue": "Visualizza coda",
|
||||||
|
"LabelVolume": "Volume",
|
||||||
"LabelWeekdaysToRun": "Giorni feriali da eseguire",
|
"LabelWeekdaysToRun": "Giorni feriali da eseguire",
|
||||||
"LabelXBooks": "{0} libri",
|
"LabelXBooks": "{0} libri",
|
||||||
"LabelXItems": "{0} oggetti",
|
"LabelXItems": "{0} oggetti",
|
||||||
@@ -597,16 +659,22 @@
|
|||||||
"MessageCheckingCron": "Controllo cron...",
|
"MessageCheckingCron": "Controllo cron...",
|
||||||
"MessageConfirmCloseFeed": "Sei sicuro di voler chiudere questo feed?",
|
"MessageConfirmCloseFeed": "Sei sicuro di voler chiudere questo feed?",
|
||||||
"MessageConfirmDeleteBackup": "Sei sicuro di voler eliminare il backup {0}?",
|
"MessageConfirmDeleteBackup": "Sei sicuro di voler eliminare il backup {0}?",
|
||||||
|
"MessageConfirmDeleteDevice": "Sei sicuro/sicura di voler eliminare il lettore di libri {0}?",
|
||||||
"MessageConfirmDeleteFile": "Questo eliminerà il file dal tuo file system. Sei sicuro?",
|
"MessageConfirmDeleteFile": "Questo eliminerà il file dal tuo file system. Sei sicuro?",
|
||||||
"MessageConfirmDeleteLibrary": "Sei sicuro di voler eliminare definitivamente la libreria \"{0}\"?",
|
"MessageConfirmDeleteLibrary": "Sei sicuro di voler eliminare definitivamente la libreria \"{0}\"?",
|
||||||
"MessageConfirmDeleteLibraryItem": "l'elemento della libreria dal database e dal file system. Sei sicuro?",
|
"MessageConfirmDeleteLibraryItem": "l'elemento della libreria dal database e dal file system. Sei sicuro?",
|
||||||
"MessageConfirmDeleteLibraryItems": "Ciò eliminerà {0} elementi della libreria dal database e dal file system. Sei sicuro?",
|
"MessageConfirmDeleteLibraryItems": "Ciò eliminerà {0} elementi della libreria dal database e dal file system. Sei sicuro?",
|
||||||
|
"MessageConfirmDeleteMetadataProvider": "Sei sicuro/sicura di voler eliminare il fornitore di metadati personalizzato {0}?",
|
||||||
|
"MessageConfirmDeleteNotification": "Sei sicuro/sicura di voler eliminare questa notifica?",
|
||||||
"MessageConfirmDeleteSession": "Sei sicuro di voler eliminare questa sessione?",
|
"MessageConfirmDeleteSession": "Sei sicuro di voler eliminare questa sessione?",
|
||||||
"MessageConfirmForceReScan": "Sei sicuro di voler forzare una nuova scansione?",
|
"MessageConfirmForceReScan": "Sei sicuro di voler forzare una nuova scansione?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Sei sicuro di voler contrassegnare tutti gli episodi come finiti?",
|
"MessageConfirmMarkAllEpisodesFinished": "Sei sicuro di voler contrassegnare tutti gli episodi come finiti?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "Sei sicuro di voler contrassegnare tutti gli episodi come non completati?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "Sei sicuro di voler contrassegnare tutti gli episodi come non completati?",
|
||||||
|
"MessageConfirmMarkItemFinished": "Sei sicuro/sicura di voler segnare {0} come finito?",
|
||||||
|
"MessageConfirmMarkItemNotFinished": "Vuoi davvero segnare \"{0}\" come non finito?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Sei sicuro di voler contrassegnare tutti i libri di questa serie come completati?",
|
"MessageConfirmMarkSeriesFinished": "Sei sicuro di voler contrassegnare tutti i libri di questa serie come completati?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Sei sicuro di voler contrassegnare tutti i libri di questa serie come non completati?",
|
"MessageConfirmMarkSeriesNotFinished": "Sei sicuro di voler contrassegnare tutti i libri di questa serie come non completati?",
|
||||||
|
"MessageConfirmNotificationTestTrigger": "Attivare questa notifica con dati di prova?",
|
||||||
"MessageConfirmPurgeCache": "L'eliminazione della cache eliminerà l'intera directory dei <code>/metadata/cache</code>. <br /><br />Sei sicuro di voler rimuovere la directory della cache?",
|
"MessageConfirmPurgeCache": "L'eliminazione della cache eliminerà l'intera directory dei <code>/metadata/cache</code>. <br /><br />Sei sicuro di voler rimuovere la directory della cache?",
|
||||||
"MessageConfirmPurgeItemsCache": "L'eliminazione della cache degli elementi eliminerà l'intera directory <code>/metadata/cache/oggetti</code>.<br />Sei sicuro?",
|
"MessageConfirmPurgeItemsCache": "L'eliminazione della cache degli elementi eliminerà l'intera directory <code>/metadata/cache/oggetti</code>.<br />Sei sicuro?",
|
||||||
"MessageConfirmQuickEmbed": "Attenzione! L'incorporamento rapido non eseguirà il backup dei file audio. Assicurati di avere un backup dei tuoi file audio. <br><br>Vuoi Continuare?",
|
"MessageConfirmQuickEmbed": "Attenzione! L'incorporamento rapido non eseguirà il backup dei file audio. Assicurati di avere un backup dei tuoi file audio. <br><br>Vuoi Continuare?",
|
||||||
@@ -622,16 +690,18 @@
|
|||||||
"MessageConfirmRenameGenre": "Sei sicuro di voler rinominare il genere \"{0}\" in \"{1}\" per tutti gli oggetti?",
|
"MessageConfirmRenameGenre": "Sei sicuro di voler rinominare il genere \"{0}\" in \"{1}\" per tutti gli oggetti?",
|
||||||
"MessageConfirmRenameGenreMergeNote": "Note: Questo genere esiste già quindi verra unito.",
|
"MessageConfirmRenameGenreMergeNote": "Note: Questo genere esiste già quindi verra unito.",
|
||||||
"MessageConfirmRenameGenreWarning": "Avvertimento! Esiste già un genere simile con un nome simile \"{0}\".",
|
"MessageConfirmRenameGenreWarning": "Avvertimento! Esiste già un genere simile con un nome simile \"{0}\".",
|
||||||
"MessageConfirmRenameTag": "Sei sicuro di voler rinominare il tag \"{0}\" in \"{1}\" per tutti gli oggetti?",
|
"MessageConfirmRenameTag": "Sei sicuro/sicura di voler rinominare l'etichetta \"{0}\" in \"{1}\" per tutti gli oggetti?",
|
||||||
"MessageConfirmRenameTagMergeNote": "Nota: Questo tag esiste già e verrà unito nel vecchio.",
|
"MessageConfirmRenameTagMergeNote": "Nota: Questa etichetta esiste già e verrà unito nella vecchia.",
|
||||||
"MessageConfirmRenameTagWarning": "Avvertimento! Esiste già un tag simile con un nome simile \"{0}\".",
|
"MessageConfirmRenameTagWarning": "Avvertimento! Esiste già un tag simile con un nome simile \"{0}\".",
|
||||||
"MessageConfirmSendEbookToDevice": "Sei sicuro di voler inviare {0} ebook \"{1}\" al Device \"{2}\"?",
|
"MessageConfirmResetProgress": "Vuoi davvero azzerare i tuoi progressi?",
|
||||||
|
"MessageConfirmSendEbookToDevice": "Sei sicuro/sicura di voler inviare {0} libro «{1}» al dispositivo «{2}»?",
|
||||||
|
"MessageConfirmUnlinkOpenId": "Vuoi davvero scollegare questo utente da OpenID?",
|
||||||
"MessageDownloadingEpisode": "Scaricamento dell’episodio in corso",
|
"MessageDownloadingEpisode": "Scaricamento dell’episodio in corso",
|
||||||
"MessageDragFilesIntoTrackOrder": "Trascina i file nell'ordine di traccia corretto",
|
"MessageDragFilesIntoTrackOrder": "Trascina i file nell'ordine di traccia corretto",
|
||||||
"MessageEmbedFailed": "Incorporamento non riuscito!",
|
"MessageEmbedFailed": "Incorporamento non riuscito!",
|
||||||
"MessageEmbedFinished": "Incorporamento finito!",
|
"MessageEmbedFinished": "Incorporamento finito!",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} episodio(i) in coda per lo scaricamento",
|
"MessageEpisodesQueuedForDownload": "{0} episodio(i) in coda per lo scaricamento",
|
||||||
"MessageEreaderDevices": "Per garantire la consegna degli ebook, potrebbe essere necessario aggiungere l'indirizzo e-mail sopra indicato come mittente valido per ciascun dispositivo elencato di seguito.",
|
"MessageEreaderDevices": "Per garantire la consegna dei libri digitali, potrebbe essere necessario aggiungere l'indirizzo e-mail sopra indicato come mittente valido per ciascun dispositivo elencato di seguito.",
|
||||||
"MessageFeedURLWillBe": "l’URL del flusso sarà {0}",
|
"MessageFeedURLWillBe": "l’URL del flusso sarà {0}",
|
||||||
"MessageFetching": "Recupero info…",
|
"MessageFetching": "Recupero info…",
|
||||||
"MessageForceReScanDescription": "eseguirà nuovamente la scansione di tutti i file come una nuova scansione. I tag ID3 dei file audio, i file OPF e i file di testo verranno scansionati come nuovi.",
|
"MessageForceReScanDescription": "eseguirà nuovamente la scansione di tutti i file come una nuova scansione. I tag ID3 dei file audio, i file OPF e i file di testo verranno scansionati come nuovi.",
|
||||||
@@ -660,6 +730,7 @@
|
|||||||
"MessageNoCollections": "Nessuna Raccolta",
|
"MessageNoCollections": "Nessuna Raccolta",
|
||||||
"MessageNoCoversFound": "Nessuna Cover Trovata",
|
"MessageNoCoversFound": "Nessuna Cover Trovata",
|
||||||
"MessageNoDescription": "Nessuna descrizione",
|
"MessageNoDescription": "Nessuna descrizione",
|
||||||
|
"MessageNoDevices": "nessun dispositivo",
|
||||||
"MessageNoDownloadsInProgress": "Nessun download attualmente in corso",
|
"MessageNoDownloadsInProgress": "Nessun download attualmente in corso",
|
||||||
"MessageNoDownloadsQueued": "Nessuna coda di download",
|
"MessageNoDownloadsQueued": "Nessuna coda di download",
|
||||||
"MessageNoEpisodeMatchesFound": "Nessun episodio corrispondente trovato",
|
"MessageNoEpisodeMatchesFound": "Nessun episodio corrispondente trovato",
|
||||||
@@ -687,6 +758,7 @@
|
|||||||
"MessagePauseChapter": "Metti in Pausa Capitolo",
|
"MessagePauseChapter": "Metti in Pausa Capitolo",
|
||||||
"MessagePlayChapter": "Ascolta dall'inizio del capitolo",
|
"MessagePlayChapter": "Ascolta dall'inizio del capitolo",
|
||||||
"MessagePlaylistCreateFromCollection": "Crea playlist da una Raccolta",
|
"MessagePlaylistCreateFromCollection": "Crea playlist da una Raccolta",
|
||||||
|
"MessagePleaseWait": "Attendi...",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "Podcast non ha l'URL del feed RSS da utilizzare per il match",
|
"MessagePodcastHasNoRSSFeedForMatching": "Podcast non ha l'URL del feed RSS da utilizzare per il match",
|
||||||
"MessageQuickMatchDescription": "Compila i dettagli dell'articolo vuoto e copri con il risultato della prima corrispondenza di '{0}'. Non sovrascrive i dettagli a meno che non sia abilitata l'impostazione del server \"Preferisci metadati corrispondenti\".",
|
"MessageQuickMatchDescription": "Compila i dettagli dell'articolo vuoto e copri con il risultato della prima corrispondenza di '{0}'. Non sovrascrive i dettagli a meno che non sia abilitata l'impostazione del server \"Preferisci metadati corrispondenti\".",
|
||||||
"MessageRemoveChapter": "Rimuovi Capitolo",
|
"MessageRemoveChapter": "Rimuovi Capitolo",
|
||||||
@@ -732,93 +804,156 @@
|
|||||||
"StatsBooksAdditional": "Alcune aggiunte includono…",
|
"StatsBooksAdditional": "Alcune aggiunte includono…",
|
||||||
"StatsBooksFinished": "Libri Finiti",
|
"StatsBooksFinished": "Libri Finiti",
|
||||||
"StatsBooksFinishedThisYear": "Alcuni libri terminati quest'anno…",
|
"StatsBooksFinishedThisYear": "Alcuni libri terminati quest'anno…",
|
||||||
"StatsBooksListenedTo": "libri ascoltati",
|
"StatsBooksListenedTo": "Libri ascoltati",
|
||||||
"StatsCollectionGrewTo": "La tua collezione di libri è cresciuta fino a…",
|
"StatsCollectionGrewTo": "La tua collezione è aumentata di…",
|
||||||
"StatsSessions": "sessioni",
|
"StatsSessions": "Sessioni",
|
||||||
"StatsSpentListening": "trascorso ad ascoltare",
|
"StatsSpentListening": "Tempo di Ascolto",
|
||||||
"StatsTopAuthor": "MIGLIOR AUTORE",
|
"StatsTopAuthor": "MIGLIOR AUTORE",
|
||||||
"StatsTopAuthors": "MIGLIORI AUTORI",
|
"StatsTopAuthors": "AUTORI MIGLIORI",
|
||||||
"StatsTopGenre": "MIGLIOR GENERE",
|
"StatsTopGenre": "MIGLIOR GENERE",
|
||||||
"StatsTopGenres": "MIGLIORI GENERI",
|
"StatsTopGenres": "GENERI MIGLIORI",
|
||||||
"StatsTopMonth": "MIGLIOR MESE",
|
"StatsTopMonth": "MIGLIOR MESE",
|
||||||
"StatsTopNarrator": "MIGLIOR NARRATORE",
|
"StatsTopNarrator": "MIGLIOR NARRATORE",
|
||||||
"StatsTopNarrators": "MIGLIORI NARRATORI",
|
"StatsTopNarrators": "NARRATORI MIGLIORI",
|
||||||
"StatsTotalDuration": "Con una durata totale di…",
|
"StatsTotalDuration": "Per una durata totale di…",
|
||||||
"StatsYearInReview": "ANNO IN RASSEGNA",
|
"StatsYearInReview": "ANNO IN RASSEGNA",
|
||||||
"ToastAccountUpdateFailed": "Aggiornamento Account Fallito",
|
|
||||||
"ToastAccountUpdateSuccess": "Account Aggiornato",
|
"ToastAccountUpdateSuccess": "Account Aggiornato",
|
||||||
|
"ToastAppriseUrlRequired": "È necessario immettere un indirizzo Apprise",
|
||||||
"ToastAuthorImageRemoveSuccess": "Immagine Autore Rimossa",
|
"ToastAuthorImageRemoveSuccess": "Immagine Autore Rimossa",
|
||||||
"ToastAuthorUpdateFailed": "Aggiornamento Autore Fallito",
|
"ToastAuthorNotFound": "Autore\"{0}\" non trovato",
|
||||||
|
"ToastAuthorRemoveSuccess": "Autore rimosso",
|
||||||
|
"ToastAuthorSearchNotFound": "Autore non trovato",
|
||||||
"ToastAuthorUpdateMerged": "Autore unito",
|
"ToastAuthorUpdateMerged": "Autore unito",
|
||||||
"ToastAuthorUpdateSuccess": "Autore aggiornato",
|
"ToastAuthorUpdateSuccess": "Autore aggiornato",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autore aggiornato (nessuna immagine trovata)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autore aggiornato (nessuna immagine trovata)",
|
||||||
|
"ToastBackupAppliedSuccess": "Backup applicato",
|
||||||
"ToastBackupCreateFailed": "creazione backup fallita",
|
"ToastBackupCreateFailed": "creazione backup fallita",
|
||||||
"ToastBackupCreateSuccess": "Backup creato",
|
"ToastBackupCreateSuccess": "Backup creato",
|
||||||
"ToastBackupDeleteFailed": "Eliminazione backup fallita",
|
"ToastBackupDeleteFailed": "Eliminazione backup fallita",
|
||||||
"ToastBackupDeleteSuccess": "backup Eliminato",
|
"ToastBackupDeleteSuccess": "backup Eliminato",
|
||||||
|
"ToastBackupInvalidMaxKeep": "Numero non valido di backup da conservare",
|
||||||
|
"ToastBackupInvalidMaxSize": "Dimensione massima del backup non valida",
|
||||||
"ToastBackupRestoreFailed": "Ripristino fallito",
|
"ToastBackupRestoreFailed": "Ripristino fallito",
|
||||||
"ToastBackupUploadFailed": "Caricamento backup fallito",
|
"ToastBackupUploadFailed": "Caricamento backup fallito",
|
||||||
"ToastBackupUploadSuccess": "Backup caricato",
|
"ToastBackupUploadSuccess": "Backup caricato",
|
||||||
|
"ToastBatchDeleteFailed": "Eliminazione batch non riuscita",
|
||||||
|
"ToastBatchDeleteSuccess": "Eliminazione batch riuscita",
|
||||||
"ToastBatchUpdateFailed": "Batch di aggiornamento fallito",
|
"ToastBatchUpdateFailed": "Batch di aggiornamento fallito",
|
||||||
"ToastBatchUpdateSuccess": "Batch di aggiornamento finito",
|
"ToastBatchUpdateSuccess": "Batch di aggiornamento finito",
|
||||||
"ToastBookmarkCreateFailed": "Creazione segnalibro fallita",
|
"ToastBookmarkCreateFailed": "Creazione segnalibro fallita",
|
||||||
"ToastBookmarkCreateSuccess": "Segnalibro creato",
|
"ToastBookmarkCreateSuccess": "Segnalibro creato",
|
||||||
"ToastBookmarkRemoveSuccess": "Segnalibro Rimosso",
|
"ToastBookmarkRemoveSuccess": "Segnalibro Rimosso",
|
||||||
"ToastBookmarkUpdateFailed": "Aggiornamento segnalibro fallito",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Segnalibro aggiornato",
|
"ToastBookmarkUpdateSuccess": "Segnalibro aggiornato",
|
||||||
"ToastCachePurgeFailed": "Impossibile eliminare la cache",
|
"ToastCachePurgeFailed": "Impossibile eliminare la cache",
|
||||||
"ToastCachePurgeSuccess": "Cache eliminata correttamente",
|
"ToastCachePurgeSuccess": "Cache eliminata correttamente",
|
||||||
"ToastChaptersHaveErrors": "I capitoli contengono errori",
|
"ToastChaptersHaveErrors": "I capitoli contengono errori",
|
||||||
"ToastChaptersMustHaveTitles": "I capitoli devono avere titoli",
|
"ToastChaptersMustHaveTitles": "I capitoli devono avere titoli",
|
||||||
|
"ToastChaptersRemoved": "Capitoli rimossi",
|
||||||
|
"ToastCollectionItemsAddFailed": "l'aggiunta dell'elemento(i) alla raccolta non è riuscito",
|
||||||
|
"ToastCollectionItemsAddSuccess": "L'aggiunta dell'elemento(i) alla raccolta è riuscito",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Oggetto(i) rimossi dalla Raccolta",
|
"ToastCollectionItemsRemoveSuccess": "Oggetto(i) rimossi dalla Raccolta",
|
||||||
"ToastCollectionRemoveSuccess": "Collezione rimossa",
|
"ToastCollectionRemoveSuccess": "Collezione rimossa",
|
||||||
"ToastCollectionUpdateFailed": "Errore aggiornamento Raccolta",
|
|
||||||
"ToastCollectionUpdateSuccess": "Raccolta aggiornata",
|
"ToastCollectionUpdateSuccess": "Raccolta aggiornata",
|
||||||
|
"ToastCoverUpdateFailed": "Aggiornamento cover fallito",
|
||||||
"ToastDeleteFileFailed": "Impossibile eliminare il file",
|
"ToastDeleteFileFailed": "Impossibile eliminare il file",
|
||||||
"ToastDeleteFileSuccess": "File eliminato",
|
"ToastDeleteFileSuccess": "File eliminato",
|
||||||
|
"ToastDeviceAddFailed": "Aggiunta dispositivo fallita",
|
||||||
|
"ToastDeviceNameAlreadyExists": "Esiste già un dispositivo e-reader con quel nome",
|
||||||
|
"ToastDeviceTestEmailFailed": "Impossibile inviare l'e-mail di prova",
|
||||||
|
"ToastDeviceTestEmailSuccess": "Test invio mail completato",
|
||||||
|
"ToastEmailSettingsUpdateSuccess": "Impostazioni e-mail aggiornate",
|
||||||
|
"ToastEncodeCancelFailed": "Impossibile annullare la codifica",
|
||||||
|
"ToastEncodeCancelSucces": "Codifica annullata",
|
||||||
|
"ToastEpisodeDownloadQueueClearFailed": "Impossibile cancellare la coda",
|
||||||
|
"ToastEpisodeDownloadQueueClearSuccess": "Coda di download degli episodi cancellata",
|
||||||
"ToastErrorCannotShare": "Impossibile condividere in modo nativo su questo dispositivo",
|
"ToastErrorCannotShare": "Impossibile condividere in modo nativo su questo dispositivo",
|
||||||
"ToastFailedToLoadData": "Impossibile caricare i dati",
|
"ToastFailedToLoadData": "Impossibile caricare i dati",
|
||||||
"ToastItemCoverUpdateFailed": "Errore Aggiornamento cover",
|
"ToastFailedToShare": "Impossibile condividere",
|
||||||
|
"ToastInvalidImageUrl": "URL dell'immagine non valido",
|
||||||
|
"ToastInvalidUrl": "URL non valido",
|
||||||
"ToastItemCoverUpdateSuccess": "Cover aggiornata",
|
"ToastItemCoverUpdateSuccess": "Cover aggiornata",
|
||||||
"ToastItemDetailsUpdateFailed": "Errore Aggiornamento dettagli file",
|
"ToastItemDeletedFailed": "Impossibile eliminare l'elemento",
|
||||||
|
"ToastItemDeletedSuccess": "Elemento eliminato",
|
||||||
"ToastItemDetailsUpdateSuccess": "Dettagli file Aggiornata",
|
"ToastItemDetailsUpdateSuccess": "Dettagli file Aggiornata",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Errore nel segnare il file come finito",
|
"ToastItemMarkedAsFinishedFailed": "Errore nel segnare il file come finito",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "File segnato come finito",
|
"ToastItemMarkedAsFinishedSuccess": "File segnato come finito",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Errore nel segnare il file come non completo",
|
"ToastItemMarkedAsNotFinishedFailed": "Errore nel segnare il file come non completo",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "File segnato come non completo",
|
"ToastItemMarkedAsNotFinishedSuccess": "File segnato come non completo",
|
||||||
|
"ToastItemUpdateSuccess": "Articolo aggiornato",
|
||||||
"ToastLibraryCreateFailed": "Errore creazione libreria",
|
"ToastLibraryCreateFailed": "Errore creazione libreria",
|
||||||
"ToastLibraryCreateSuccess": "Libreria \"{0}\" creata",
|
"ToastLibraryCreateSuccess": "Libreria \"{0}\" creata",
|
||||||
"ToastLibraryDeleteFailed": "Errore cancellazione libreria",
|
"ToastLibraryDeleteFailed": "Errore cancellazione libreria",
|
||||||
"ToastLibraryDeleteSuccess": "Libreria Cancellata",
|
"ToastLibraryDeleteSuccess": "Libreria Cancellata",
|
||||||
"ToastLibraryScanFailedToStart": "Errore inizio scansione",
|
"ToastLibraryScanFailedToStart": "Errore inizio scansione",
|
||||||
"ToastLibraryScanStarted": "Scansione Libreria iniziata",
|
"ToastLibraryScanStarted": "Scansione Libreria iniziata",
|
||||||
"ToastLibraryUpdateFailed": "Errore Aggiornamento libreria",
|
|
||||||
"ToastLibraryUpdateSuccess": "Libreria \"{0}\" aggiornata",
|
"ToastLibraryUpdateSuccess": "Libreria \"{0}\" aggiornata",
|
||||||
|
"ToastNameEmailRequired": "Nome ed email sono obbligatori",
|
||||||
|
"ToastNameRequired": "Il nome è obbligatorio",
|
||||||
|
"ToastNewUserCreatedFailed": "Impossibile creare l'account: \"{0}\"",
|
||||||
|
"ToastNewUserCreatedSuccess": "Nuovo account creato",
|
||||||
|
"ToastNewUserLibraryError": "È necessario selezionare almeno una libreria",
|
||||||
|
"ToastNewUserPasswordError": "Deve avere una password, solo l'utente root può avere una password vuota",
|
||||||
|
"ToastNewUserTagError": "Devi selezionare almeno un tag",
|
||||||
|
"ToastNewUserUsernameError": "Inserisci un nome utente",
|
||||||
|
"ToastNoUpdatesNecessary": "Nessun aggiornamento necessario",
|
||||||
|
"ToastNotificationCreateFailed": "Impossibile creare la notifica",
|
||||||
|
"ToastNotificationDeleteFailed": "Impossibile eliminare la notifica",
|
||||||
|
"ToastNotificationFailedMaximum": "Il numero massimo di tentativi falliti deve essere >= 0",
|
||||||
|
"ToastNotificationQueueMaximum": "La coda di notifica massima deve essere >= 0",
|
||||||
|
"ToastNotificationSettingsUpdateSuccess": "Impostazioni di notifica aggiornate",
|
||||||
|
"ToastNotificationTestTriggerFailed": "Impossibile attivare la notifica del test",
|
||||||
|
"ToastNotificationTestTriggerSuccess": "Notifica di test attivata",
|
||||||
|
"ToastNotificationUpdateSuccess": "Notifica aggiornata",
|
||||||
"ToastPlaylistCreateFailed": "Errore creazione playlist",
|
"ToastPlaylistCreateFailed": "Errore creazione playlist",
|
||||||
"ToastPlaylistCreateSuccess": "Playlist creata",
|
"ToastPlaylistCreateSuccess": "Playlist creata",
|
||||||
"ToastPlaylistRemoveSuccess": "Playlist rimossa",
|
"ToastPlaylistRemoveSuccess": "Playlist rimossa",
|
||||||
"ToastPlaylistUpdateFailed": "Aggiornamento Playlist Fallita",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Playlist Aggiornata",
|
"ToastPlaylistUpdateSuccess": "Playlist Aggiornata",
|
||||||
"ToastPodcastCreateFailed": "Errore creazione podcast",
|
"ToastPodcastCreateFailed": "Errore creazione podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast creato correttamente",
|
"ToastPodcastCreateSuccess": "Podcast creato correttamente",
|
||||||
|
"ToastPodcastGetFeedFailed": "Impossibile ottenere il feed del podcast",
|
||||||
|
"ToastPodcastNoEpisodesInFeed": "Nessun episodio trovato nel feed RSS",
|
||||||
|
"ToastPodcastNoRssFeed": "Il podcast non ha un feed RSS",
|
||||||
|
"ToastProviderCreatedFailed": "Impossibile aggiungere il provider",
|
||||||
|
"ToastProviderCreatedSuccess": "Aggiunto nuovo provider",
|
||||||
|
"ToastProviderNameAndUrlRequired": "Nome e URL richiesti",
|
||||||
|
"ToastProviderRemoveSuccess": "Provider rimosso",
|
||||||
"ToastRSSFeedCloseFailed": "Errore chiusura flusso RSS",
|
"ToastRSSFeedCloseFailed": "Errore chiusura flusso RSS",
|
||||||
"ToastRSSFeedCloseSuccess": "Flusso RSS chiuso",
|
"ToastRSSFeedCloseSuccess": "Flusso RSS chiuso",
|
||||||
|
"ToastRemoveFailed": "Impossibile rimuovere",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Errore rimozione file dalla Raccolta",
|
"ToastRemoveItemFromCollectionFailed": "Errore rimozione file dalla Raccolta",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "Oggetto rimosso dalla Raccolta",
|
"ToastRemoveItemFromCollectionSuccess": "Oggetto rimosso dalla Raccolta",
|
||||||
"ToastSendEbookToDeviceFailed": "Impossibile inviare l'ebook al dispositivo",
|
"ToastRemoveItemsWithIssuesFailed": "Impossibile rimuovere gli elementi della libreria con problemi",
|
||||||
"ToastSendEbookToDeviceSuccess": "Ebook inviato al dispositivo \"{0}\"",
|
"ToastRemoveItemsWithIssuesSuccess": "Rimossi gli elementi della libreria con problemi",
|
||||||
|
"ToastRenameFailed": "Impossibile rinominare",
|
||||||
|
"ToastRescanFailed": "Nuova scansione non riuscita per {0}",
|
||||||
|
"ToastRescanRemoved": "L'articolo completo di Re-Scan è stato rimosso",
|
||||||
|
"ToastRescanUpToDate": "La nuova scansione dell'articolo completo è stata aggiornata",
|
||||||
|
"ToastRescanUpdated": "L'articolo completo di Re-Scan è stato aggiornato",
|
||||||
|
"ToastScanFailed": "Impossibile eseguire la scansione dell'elemento della libreria",
|
||||||
|
"ToastSelectAtLeastOneUser": "Seleziona almeno un utente",
|
||||||
|
"ToastSendEbookToDeviceFailed": "Impossibile inviare il libro al dispositivo",
|
||||||
|
"ToastSendEbookToDeviceSuccess": "Libro inviato al dispositivo «{0}»",
|
||||||
"ToastSeriesUpdateFailed": "Aggiornamento Serie Fallito",
|
"ToastSeriesUpdateFailed": "Aggiornamento Serie Fallito",
|
||||||
"ToastSeriesUpdateSuccess": "Serie Aggiornate",
|
"ToastSeriesUpdateSuccess": "Serie Aggiornate",
|
||||||
"ToastServerSettingsUpdateFailed": "Impossibile aggiornare le impostazioni del server",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Impostazioni del server aggiornate",
|
"ToastServerSettingsUpdateSuccess": "Impostazioni del server aggiornate",
|
||||||
|
"ToastSessionCloseFailed": "Disconnessione Fallita",
|
||||||
"ToastSessionDeleteFailed": "Errore eliminazione sessione",
|
"ToastSessionDeleteFailed": "Errore eliminazione sessione",
|
||||||
"ToastSessionDeleteSuccess": "Sessione cancellata",
|
"ToastSessionDeleteSuccess": "Sessione cancellata",
|
||||||
|
"ToastSlugMustChange": "Lo slug contiene caratteri non validi",
|
||||||
|
"ToastSlugRequired": "È richiesto lo slug",
|
||||||
"ToastSocketConnected": "Socket connesso",
|
"ToastSocketConnected": "Socket connesso",
|
||||||
"ToastSocketDisconnected": "Socket disconnesso",
|
"ToastSocketDisconnected": "Socket disconnesso",
|
||||||
"ToastSocketFailedToConnect": "Socket non riesce a connettersi",
|
"ToastSocketFailedToConnect": "Socket non riesce a connettersi",
|
||||||
"ToastSortingPrefixesEmptyError": "Deve avere almeno 1 prefisso di ordinamento",
|
"ToastSortingPrefixesEmptyError": "Deve avere almeno 1 prefisso di ordinamento",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Impossibile aggiornare i prefissi di ordinamento",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Prefissi di ordinamento aggiornati ({0} items)",
|
"ToastSortingPrefixesUpdateSuccess": "Prefissi di ordinamento aggiornati ({0} items)",
|
||||||
|
"ToastTitleRequired": "Il titolo è obbligatorio",
|
||||||
|
"ToastUnknownError": "Errore sconosciuto",
|
||||||
|
"ToastUnlinkOpenIdFailed": "Impossibile scollegare l'utente da OpenID",
|
||||||
|
"ToastUnlinkOpenIdSuccess": "Utente scollegato da OpenID",
|
||||||
"ToastUserDeleteFailed": "Errore eliminazione utente",
|
"ToastUserDeleteFailed": "Errore eliminazione utente",
|
||||||
"ToastUserDeleteSuccess": "Utente eliminato"
|
"ToastUserDeleteSuccess": "Utente eliminato",
|
||||||
|
"ToastUserPasswordChangeSuccess": "Password modificata con successo",
|
||||||
|
"ToastUserPasswordMismatch": "Le password non corrispondono",
|
||||||
|
"ToastUserPasswordMustChange": "La nuova password non può corrispondere alla vecchia password",
|
||||||
|
"ToastUserRootRequireName": "È necessario immettere un nome utente root"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -622,10 +622,8 @@
|
|||||||
"PlaceholderNewPlaylist": "Naujas grojaraščio pavadinimas",
|
"PlaceholderNewPlaylist": "Naujas grojaraščio pavadinimas",
|
||||||
"PlaceholderSearch": "Ieškoti..",
|
"PlaceholderSearch": "Ieškoti..",
|
||||||
"PlaceholderSearchEpisode": "Ieškoti epizodo..",
|
"PlaceholderSearchEpisode": "Ieškoti epizodo..",
|
||||||
"ToastAccountUpdateFailed": "Paskyros atnaujinimas nepavyko",
|
|
||||||
"ToastAccountUpdateSuccess": "Paskyra atnaujinta",
|
"ToastAccountUpdateSuccess": "Paskyra atnaujinta",
|
||||||
"ToastAuthorImageRemoveSuccess": "Autoriaus paveiksliukas pašalintas",
|
"ToastAuthorImageRemoveSuccess": "Autoriaus paveiksliukas pašalintas",
|
||||||
"ToastAuthorUpdateFailed": "Nepavyko atnaujinti autoriaus",
|
|
||||||
"ToastAuthorUpdateMerged": "Autorius sujungtas",
|
"ToastAuthorUpdateMerged": "Autorius sujungtas",
|
||||||
"ToastAuthorUpdateSuccess": "Autorius atnaujintas",
|
"ToastAuthorUpdateSuccess": "Autorius atnaujintas",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autorius atnaujintas (paveiksliukas nerastas)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autorius atnaujintas (paveiksliukas nerastas)",
|
||||||
@@ -641,17 +639,13 @@
|
|||||||
"ToastBookmarkCreateFailed": "Žymos sukurti nepavyko",
|
"ToastBookmarkCreateFailed": "Žymos sukurti nepavyko",
|
||||||
"ToastBookmarkCreateSuccess": "Žyma pridėta",
|
"ToastBookmarkCreateSuccess": "Žyma pridėta",
|
||||||
"ToastBookmarkRemoveSuccess": "Žyma pašalinta",
|
"ToastBookmarkRemoveSuccess": "Žyma pašalinta",
|
||||||
"ToastBookmarkUpdateFailed": "Žymos atnaujinti nepavyko",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Žyma atnaujinta",
|
"ToastBookmarkUpdateSuccess": "Žyma atnaujinta",
|
||||||
"ToastChaptersHaveErrors": "Skyriai turi klaidų",
|
"ToastChaptersHaveErrors": "Skyriai turi klaidų",
|
||||||
"ToastChaptersMustHaveTitles": "Skyriai turi turėti pavadinimus",
|
"ToastChaptersMustHaveTitles": "Skyriai turi turėti pavadinimus",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Elementai pašalinti iš kolekcijos",
|
"ToastCollectionItemsRemoveSuccess": "Elementai pašalinti iš kolekcijos",
|
||||||
"ToastCollectionRemoveSuccess": "Kolekcija pašalinta",
|
"ToastCollectionRemoveSuccess": "Kolekcija pašalinta",
|
||||||
"ToastCollectionUpdateFailed": "Kolekcijos atnaujinti nepavyko",
|
|
||||||
"ToastCollectionUpdateSuccess": "Kolekcija atnaujinta",
|
"ToastCollectionUpdateSuccess": "Kolekcija atnaujinta",
|
||||||
"ToastItemCoverUpdateFailed": "Elemento viršelio atnaujinti nepavyko",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Elemento viršelis atnaujintas",
|
"ToastItemCoverUpdateSuccess": "Elemento viršelis atnaujintas",
|
||||||
"ToastItemDetailsUpdateFailed": "Elemento detalių atnaujinti nepavyko",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Elemento detalės atnaujintos",
|
"ToastItemDetailsUpdateSuccess": "Elemento detalės atnaujintos",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Pažymėti kaip Baigta nepavyko",
|
"ToastItemMarkedAsFinishedFailed": "Pažymėti kaip Baigta nepavyko",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Elementas pažymėtas kaip Baigta",
|
"ToastItemMarkedAsFinishedSuccess": "Elementas pažymėtas kaip Baigta",
|
||||||
@@ -663,12 +657,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Biblioteka ištrinta",
|
"ToastLibraryDeleteSuccess": "Biblioteka ištrinta",
|
||||||
"ToastLibraryScanFailedToStart": "Nepavyko pradėti bibliotekos skenavimo",
|
"ToastLibraryScanFailedToStart": "Nepavyko pradėti bibliotekos skenavimo",
|
||||||
"ToastLibraryScanStarted": "Bibliotekos skenavimas pradėtas",
|
"ToastLibraryScanStarted": "Bibliotekos skenavimas pradėtas",
|
||||||
"ToastLibraryUpdateFailed": "Bibliotekos atnaujinti nepavyko",
|
|
||||||
"ToastLibraryUpdateSuccess": "Biblioteka \"{0}\" atnaujinta",
|
"ToastLibraryUpdateSuccess": "Biblioteka \"{0}\" atnaujinta",
|
||||||
"ToastPlaylistCreateFailed": "Grojaraščio sukurti nepavyko",
|
"ToastPlaylistCreateFailed": "Grojaraščio sukurti nepavyko",
|
||||||
"ToastPlaylistCreateSuccess": "Grojaraštis sukurtas",
|
"ToastPlaylistCreateSuccess": "Grojaraštis sukurtas",
|
||||||
"ToastPlaylistRemoveSuccess": "Grojaraštis pašalintas",
|
"ToastPlaylistRemoveSuccess": "Grojaraštis pašalintas",
|
||||||
"ToastPlaylistUpdateFailed": "Grojaraščio atnaujinti nepavyko",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Grojaraštis atnaujintas",
|
"ToastPlaylistUpdateSuccess": "Grojaraštis atnaujintas",
|
||||||
"ToastPodcastCreateFailed": "Tinklalaidės sukurti nepavyko",
|
"ToastPodcastCreateFailed": "Tinklalaidės sukurti nepavyko",
|
||||||
"ToastPodcastCreateSuccess": "Tinklalaidė sėkmingai sukurta",
|
"ToastPodcastCreateSuccess": "Tinklalaidė sėkmingai sukurta",
|
||||||
|
|||||||
@@ -614,10 +614,8 @@
|
|||||||
"PlaceholderNewPlaylist": "Nieuwe naam afspeellijst",
|
"PlaceholderNewPlaylist": "Nieuwe naam afspeellijst",
|
||||||
"PlaceholderSearch": "Zoeken..",
|
"PlaceholderSearch": "Zoeken..",
|
||||||
"PlaceholderSearchEpisode": "Aflevering zoeken..",
|
"PlaceholderSearchEpisode": "Aflevering zoeken..",
|
||||||
"ToastAccountUpdateFailed": "Bijwerken account mislukt",
|
|
||||||
"ToastAccountUpdateSuccess": "Account bijgewerkt",
|
"ToastAccountUpdateSuccess": "Account bijgewerkt",
|
||||||
"ToastAuthorImageRemoveSuccess": "Afbeelding auteur verwijderd",
|
"ToastAuthorImageRemoveSuccess": "Afbeelding auteur verwijderd",
|
||||||
"ToastAuthorUpdateFailed": "Bijwerken auteur mislukt",
|
|
||||||
"ToastAuthorUpdateMerged": "Auteur samengevoegd",
|
"ToastAuthorUpdateMerged": "Auteur samengevoegd",
|
||||||
"ToastAuthorUpdateSuccess": "Auteur bijgewerkt",
|
"ToastAuthorUpdateSuccess": "Auteur bijgewerkt",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Auteur bijgewerkt (geen afbeelding gevonden)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Auteur bijgewerkt (geen afbeelding gevonden)",
|
||||||
@@ -633,17 +631,13 @@
|
|||||||
"ToastBookmarkCreateFailed": "Aanmaken boekwijzer mislukt",
|
"ToastBookmarkCreateFailed": "Aanmaken boekwijzer mislukt",
|
||||||
"ToastBookmarkCreateSuccess": "boekwijzer toegevoegd",
|
"ToastBookmarkCreateSuccess": "boekwijzer toegevoegd",
|
||||||
"ToastBookmarkRemoveSuccess": "Boekwijzer verwijderd",
|
"ToastBookmarkRemoveSuccess": "Boekwijzer verwijderd",
|
||||||
"ToastBookmarkUpdateFailed": "Bijwerken boekwijzer mislukt",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Boekwijzer bijgewerkt",
|
"ToastBookmarkUpdateSuccess": "Boekwijzer bijgewerkt",
|
||||||
"ToastChaptersHaveErrors": "Hoofdstukken bevatten fouten",
|
"ToastChaptersHaveErrors": "Hoofdstukken bevatten fouten",
|
||||||
"ToastChaptersMustHaveTitles": "Hoofdstukken moeten titels hebben",
|
"ToastChaptersMustHaveTitles": "Hoofdstukken moeten titels hebben",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Onderdeel (of onderdelen) verwijderd uit collectie",
|
"ToastCollectionItemsRemoveSuccess": "Onderdeel (of onderdelen) verwijderd uit collectie",
|
||||||
"ToastCollectionRemoveSuccess": "Collectie verwijderd",
|
"ToastCollectionRemoveSuccess": "Collectie verwijderd",
|
||||||
"ToastCollectionUpdateFailed": "Bijwerken collectie mislukt",
|
|
||||||
"ToastCollectionUpdateSuccess": "Collectie bijgewerkt",
|
"ToastCollectionUpdateSuccess": "Collectie bijgewerkt",
|
||||||
"ToastItemCoverUpdateFailed": "Bijwerken cover onderdeel mislukt",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Cover onderdeel bijgewerkt",
|
"ToastItemCoverUpdateSuccess": "Cover onderdeel bijgewerkt",
|
||||||
"ToastItemDetailsUpdateFailed": "Bijwerken details onderdeel mislukt",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Details onderdeel bijgewerkt",
|
"ToastItemDetailsUpdateSuccess": "Details onderdeel bijgewerkt",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Markeren als Voltooid mislukt",
|
"ToastItemMarkedAsFinishedFailed": "Markeren als Voltooid mislukt",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Onderdeel gemarkeerd als Voltooid",
|
"ToastItemMarkedAsFinishedSuccess": "Onderdeel gemarkeerd als Voltooid",
|
||||||
@@ -655,12 +649,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Bibliotheek verwijderd",
|
"ToastLibraryDeleteSuccess": "Bibliotheek verwijderd",
|
||||||
"ToastLibraryScanFailedToStart": "Starten scan mislukt",
|
"ToastLibraryScanFailedToStart": "Starten scan mislukt",
|
||||||
"ToastLibraryScanStarted": "Scannen bibliotheek gestart",
|
"ToastLibraryScanStarted": "Scannen bibliotheek gestart",
|
||||||
"ToastLibraryUpdateFailed": "Bijwerken bibliotheek mislukt",
|
|
||||||
"ToastLibraryUpdateSuccess": "Bibliotheek \"{0}\" bijgewerkt",
|
"ToastLibraryUpdateSuccess": "Bibliotheek \"{0}\" bijgewerkt",
|
||||||
"ToastPlaylistCreateFailed": "Aanmaken afspeellijst mislukt",
|
"ToastPlaylistCreateFailed": "Aanmaken afspeellijst mislukt",
|
||||||
"ToastPlaylistCreateSuccess": "Afspeellijst aangemaakt",
|
"ToastPlaylistCreateSuccess": "Afspeellijst aangemaakt",
|
||||||
"ToastPlaylistRemoveSuccess": "Afspeellijst verwijderd",
|
"ToastPlaylistRemoveSuccess": "Afspeellijst verwijderd",
|
||||||
"ToastPlaylistUpdateFailed": "Afspeellijst bijwerken mislukt",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Afspeellijst bijgewerkt",
|
"ToastPlaylistUpdateSuccess": "Afspeellijst bijgewerkt",
|
||||||
"ToastPodcastCreateFailed": "Podcast aanmaken mislukt",
|
"ToastPodcastCreateFailed": "Podcast aanmaken mislukt",
|
||||||
"ToastPodcastCreateSuccess": "Podcast aangemaakt",
|
"ToastPodcastCreateSuccess": "Podcast aangemaakt",
|
||||||
|
|||||||
@@ -641,10 +641,8 @@
|
|||||||
"PlaceholderNewPlaylist": "Ny spillelistenavn",
|
"PlaceholderNewPlaylist": "Ny spillelistenavn",
|
||||||
"PlaceholderSearch": "Søk..",
|
"PlaceholderSearch": "Søk..",
|
||||||
"PlaceholderSearchEpisode": "Søk episode..",
|
"PlaceholderSearchEpisode": "Søk episode..",
|
||||||
"ToastAccountUpdateFailed": "Mislykkes å oppdatere konto",
|
|
||||||
"ToastAccountUpdateSuccess": "Konto oppdatert",
|
"ToastAccountUpdateSuccess": "Konto oppdatert",
|
||||||
"ToastAuthorImageRemoveSuccess": "Forfatter bilde fjernet",
|
"ToastAuthorImageRemoveSuccess": "Forfatter bilde fjernet",
|
||||||
"ToastAuthorUpdateFailed": "Mislykkes å oppdatere forfatter",
|
|
||||||
"ToastAuthorUpdateMerged": "Forfatter slått sammen",
|
"ToastAuthorUpdateMerged": "Forfatter slått sammen",
|
||||||
"ToastAuthorUpdateSuccess": "Forfatter oppdatert",
|
"ToastAuthorUpdateSuccess": "Forfatter oppdatert",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Forfatter oppdater (ingen bilde funnet)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Forfatter oppdater (ingen bilde funnet)",
|
||||||
@@ -660,17 +658,13 @@
|
|||||||
"ToastBookmarkCreateFailed": "Misslykkes å opprette bokmerke",
|
"ToastBookmarkCreateFailed": "Misslykkes å opprette bokmerke",
|
||||||
"ToastBookmarkCreateSuccess": "Bokmerke lagt til",
|
"ToastBookmarkCreateSuccess": "Bokmerke lagt til",
|
||||||
"ToastBookmarkRemoveSuccess": "Bokmerke fjernet",
|
"ToastBookmarkRemoveSuccess": "Bokmerke fjernet",
|
||||||
"ToastBookmarkUpdateFailed": "Misslykkes å oppdatere bokmerke",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Bokmerke oppdatert",
|
"ToastBookmarkUpdateSuccess": "Bokmerke oppdatert",
|
||||||
"ToastChaptersHaveErrors": "Kapittel har feil",
|
"ToastChaptersHaveErrors": "Kapittel har feil",
|
||||||
"ToastChaptersMustHaveTitles": "Kapittel må ha titler",
|
"ToastChaptersMustHaveTitles": "Kapittel må ha titler",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Gjenstand(er) fjernet fra samling",
|
"ToastCollectionItemsRemoveSuccess": "Gjenstand(er) fjernet fra samling",
|
||||||
"ToastCollectionRemoveSuccess": "Samling fjernet",
|
"ToastCollectionRemoveSuccess": "Samling fjernet",
|
||||||
"ToastCollectionUpdateFailed": "Misslykkes å oppdatere samling",
|
|
||||||
"ToastCollectionUpdateSuccess": "samlingupdated",
|
"ToastCollectionUpdateSuccess": "samlingupdated",
|
||||||
"ToastItemCoverUpdateFailed": "Misslykkes å oppdatere omslag",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Omslag oppdatert",
|
"ToastItemCoverUpdateSuccess": "Omslag oppdatert",
|
||||||
"ToastItemDetailsUpdateFailed": "Misslykkes å oppdatere detaljer",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Detaljer oppdatert",
|
"ToastItemDetailsUpdateSuccess": "Detaljer oppdatert",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Misslykkes å markere som Fullført",
|
"ToastItemMarkedAsFinishedFailed": "Misslykkes å markere som Fullført",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Gjenstand marker som Fullført",
|
"ToastItemMarkedAsFinishedSuccess": "Gjenstand marker som Fullført",
|
||||||
@@ -682,12 +676,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Bibliotek slettet",
|
"ToastLibraryDeleteSuccess": "Bibliotek slettet",
|
||||||
"ToastLibraryScanFailedToStart": "Misslykkes å starte skann",
|
"ToastLibraryScanFailedToStart": "Misslykkes å starte skann",
|
||||||
"ToastLibraryScanStarted": "Bibliotek skann startet",
|
"ToastLibraryScanStarted": "Bibliotek skann startet",
|
||||||
"ToastLibraryUpdateFailed": "Misslykkes å oppdatere bibiliotek",
|
|
||||||
"ToastLibraryUpdateSuccess": "Bibliotek \"{0}\" oppdatert",
|
"ToastLibraryUpdateSuccess": "Bibliotek \"{0}\" oppdatert",
|
||||||
"ToastPlaylistCreateFailed": "Misslykkes å opprette spilleliste",
|
"ToastPlaylistCreateFailed": "Misslykkes å opprette spilleliste",
|
||||||
"ToastPlaylistCreateSuccess": "Spilleliste opprettet",
|
"ToastPlaylistCreateSuccess": "Spilleliste opprettet",
|
||||||
"ToastPlaylistRemoveSuccess": "Spilleliste fjernet",
|
"ToastPlaylistRemoveSuccess": "Spilleliste fjernet",
|
||||||
"ToastPlaylistUpdateFailed": "Misslykkes å oppdatere spilleliste",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Spilleliste oppdatert",
|
"ToastPlaylistUpdateSuccess": "Spilleliste oppdatert",
|
||||||
"ToastPodcastCreateFailed": "Misslykkes å opprette podcast",
|
"ToastPodcastCreateFailed": "Misslykkes å opprette podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast opprettet",
|
"ToastPodcastCreateSuccess": "Podcast opprettet",
|
||||||
|
|||||||
@@ -54,10 +54,12 @@
|
|||||||
"ButtonOpenManager": "Otwórz menadżera",
|
"ButtonOpenManager": "Otwórz menadżera",
|
||||||
"ButtonPause": "Wstrzymaj",
|
"ButtonPause": "Wstrzymaj",
|
||||||
"ButtonPlay": "Odtwarzaj",
|
"ButtonPlay": "Odtwarzaj",
|
||||||
|
"ButtonPlayAll": "Odtwórz wszystko",
|
||||||
"ButtonPlaying": "Odtwarzane",
|
"ButtonPlaying": "Odtwarzane",
|
||||||
"ButtonPlaylists": "Listy odtwarzania",
|
"ButtonPlaylists": "Listy odtwarzania",
|
||||||
"ButtonPrevious": "Poprzedni",
|
"ButtonPrevious": "Poprzedni",
|
||||||
"ButtonPreviousChapter": "Poprzedni rozdział",
|
"ButtonPreviousChapter": "Poprzedni rozdział",
|
||||||
|
"ButtonProbeAudioFile": "Próbka audio",
|
||||||
"ButtonPurgeAllCache": "Wyczyść dane tymczasowe",
|
"ButtonPurgeAllCache": "Wyczyść dane tymczasowe",
|
||||||
"ButtonPurgeItemsCache": "Wyczyść dane tymczasowe pozycji",
|
"ButtonPurgeItemsCache": "Wyczyść dane tymczasowe pozycji",
|
||||||
"ButtonQueueAddItem": "Dodaj do kolejki",
|
"ButtonQueueAddItem": "Dodaj do kolejki",
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
"ButtonStats": "Statystyki",
|
"ButtonStats": "Statystyki",
|
||||||
"ButtonSubmit": "Zaloguj",
|
"ButtonSubmit": "Zaloguj",
|
||||||
"ButtonTest": "Test",
|
"ButtonTest": "Test",
|
||||||
|
"ButtonUnlinkOpenId": "Odłącz OpenID",
|
||||||
"ButtonUpload": "Wgraj",
|
"ButtonUpload": "Wgraj",
|
||||||
"ButtonUploadBackup": "Wgraj kopię zapasową",
|
"ButtonUploadBackup": "Wgraj kopię zapasową",
|
||||||
"ButtonUploadCover": "Wgraj okładkę",
|
"ButtonUploadCover": "Wgraj okładkę",
|
||||||
@@ -355,7 +358,8 @@
|
|||||||
"LabelIntervalEveryHour": "Każdej godziny",
|
"LabelIntervalEveryHour": "Każdej godziny",
|
||||||
"LabelInvert": "Inversja",
|
"LabelInvert": "Inversja",
|
||||||
"LabelItem": "Pozycja",
|
"LabelItem": "Pozycja",
|
||||||
"LabelJumpBackwardAmount": "Rozmiar skoku do przodu",
|
"LabelJumpBackwardAmount": "Przeskocz do tyłu o:",
|
||||||
|
"LabelJumpForwardAmount": "Przeskocz do przodu o:",
|
||||||
"LabelLanguage": "Język",
|
"LabelLanguage": "Język",
|
||||||
"LabelLanguageDefaultServer": "Domyślny język serwera",
|
"LabelLanguageDefaultServer": "Domyślny język serwera",
|
||||||
"LabelLanguages": "Języki",
|
"LabelLanguages": "Języki",
|
||||||
@@ -738,10 +742,8 @@
|
|||||||
"StatsTopNarrator": "TOPOWY NARRATOR",
|
"StatsTopNarrator": "TOPOWY NARRATOR",
|
||||||
"StatsTopNarrators": "TOPOWI NARRATORZY",
|
"StatsTopNarrators": "TOPOWI NARRATORZY",
|
||||||
"StatsYearInReview": "PRZEGLĄD ROKU",
|
"StatsYearInReview": "PRZEGLĄD ROKU",
|
||||||
"ToastAccountUpdateFailed": "Nie udało się zaktualizować konta",
|
|
||||||
"ToastAccountUpdateSuccess": "Zaktualizowano konto",
|
"ToastAccountUpdateSuccess": "Zaktualizowano konto",
|
||||||
"ToastAuthorImageRemoveSuccess": "Zdjęcie autora usunięte",
|
"ToastAuthorImageRemoveSuccess": "Zdjęcie autora usunięte",
|
||||||
"ToastAuthorUpdateFailed": "nie udało się zaktualizować autora",
|
|
||||||
"ToastAuthorUpdateMerged": "Autor scalony",
|
"ToastAuthorUpdateMerged": "Autor scalony",
|
||||||
"ToastAuthorUpdateSuccess": "Autor zaktualizowany",
|
"ToastAuthorUpdateSuccess": "Autor zaktualizowany",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autor zaktualizowany (nie znaleziono obrazu)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autor zaktualizowany (nie znaleziono obrazu)",
|
||||||
@@ -757,15 +759,11 @@
|
|||||||
"ToastBookmarkCreateFailed": "Nie udało się utworzyć zakładki",
|
"ToastBookmarkCreateFailed": "Nie udało się utworzyć zakładki",
|
||||||
"ToastBookmarkCreateSuccess": "Dodano zakładkę",
|
"ToastBookmarkCreateSuccess": "Dodano zakładkę",
|
||||||
"ToastBookmarkRemoveSuccess": "Zakładka została usunięta",
|
"ToastBookmarkRemoveSuccess": "Zakładka została usunięta",
|
||||||
"ToastBookmarkUpdateFailed": "Nie udało się zaktualizować zakładki",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Zaktualizowano zakładkę",
|
"ToastBookmarkUpdateSuccess": "Zaktualizowano zakładkę",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Przedmiot(y) zostały usunięte z kolekcji",
|
"ToastCollectionItemsRemoveSuccess": "Przedmiot(y) zostały usunięte z kolekcji",
|
||||||
"ToastCollectionRemoveSuccess": "Kolekcja usunięta",
|
"ToastCollectionRemoveSuccess": "Kolekcja usunięta",
|
||||||
"ToastCollectionUpdateFailed": "Nie udało się zaktualizować kolekcji",
|
|
||||||
"ToastCollectionUpdateSuccess": "Zaktualizowano kolekcję",
|
"ToastCollectionUpdateSuccess": "Zaktualizowano kolekcję",
|
||||||
"ToastItemCoverUpdateFailed": "Nie udało się zaktualizować okładki",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Zaktualizowano okładkę",
|
"ToastItemCoverUpdateSuccess": "Zaktualizowano okładkę",
|
||||||
"ToastItemDetailsUpdateFailed": "Nie udało się zaktualizować szczegółów",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Zaktualizowano szczegóły",
|
"ToastItemDetailsUpdateSuccess": "Zaktualizowano szczegóły",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Nie udało się oznaczyć jako ukończone",
|
"ToastItemMarkedAsFinishedFailed": "Nie udało się oznaczyć jako ukończone",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Pozycja oznaczona jako ukończona",
|
"ToastItemMarkedAsFinishedSuccess": "Pozycja oznaczona jako ukończona",
|
||||||
@@ -777,12 +775,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Biblioteka usunięta",
|
"ToastLibraryDeleteSuccess": "Biblioteka usunięta",
|
||||||
"ToastLibraryScanFailedToStart": "Nie udało się rozpocząć skanowania",
|
"ToastLibraryScanFailedToStart": "Nie udało się rozpocząć skanowania",
|
||||||
"ToastLibraryScanStarted": "Rozpoczęto skanowanie biblioteki",
|
"ToastLibraryScanStarted": "Rozpoczęto skanowanie biblioteki",
|
||||||
"ToastLibraryUpdateFailed": "Nie udało się zaktualizować biblioteki",
|
|
||||||
"ToastLibraryUpdateSuccess": "Zaktualizowano \"{0}\" pozycji",
|
"ToastLibraryUpdateSuccess": "Zaktualizowano \"{0}\" pozycji",
|
||||||
"ToastPlaylistCreateFailed": "Nie udało się utworzyć playlisty",
|
"ToastPlaylistCreateFailed": "Nie udało się utworzyć playlisty",
|
||||||
"ToastPlaylistCreateSuccess": "Playlista utworzona",
|
"ToastPlaylistCreateSuccess": "Playlista utworzona",
|
||||||
"ToastPlaylistRemoveSuccess": "Playlista usunięta",
|
"ToastPlaylistRemoveSuccess": "Playlista usunięta",
|
||||||
"ToastPlaylistUpdateFailed": "Nie udało się zaktualizować playlisty",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Playlista zaktualizowana",
|
"ToastPlaylistUpdateSuccess": "Playlista zaktualizowana",
|
||||||
"ToastPodcastCreateFailed": "Nie udało się utworzyć podcastu",
|
"ToastPodcastCreateFailed": "Nie udało się utworzyć podcastu",
|
||||||
"ToastPodcastCreateSuccess": "Podcast został pomyślnie utworzony",
|
"ToastPodcastCreateSuccess": "Podcast został pomyślnie utworzony",
|
||||||
|
|||||||
@@ -710,10 +710,8 @@
|
|||||||
"PlaceholderNewPlaylist": "Novo nome da lista de reprodução",
|
"PlaceholderNewPlaylist": "Novo nome da lista de reprodução",
|
||||||
"PlaceholderSearch": "Buscar..",
|
"PlaceholderSearch": "Buscar..",
|
||||||
"PlaceholderSearchEpisode": "Buscar Episódio..",
|
"PlaceholderSearchEpisode": "Buscar Episódio..",
|
||||||
"ToastAccountUpdateFailed": "Falha ao atualizar a conta",
|
|
||||||
"ToastAccountUpdateSuccess": "Conta atualizada",
|
"ToastAccountUpdateSuccess": "Conta atualizada",
|
||||||
"ToastAuthorImageRemoveSuccess": "Imagem do autor removida",
|
"ToastAuthorImageRemoveSuccess": "Imagem do autor removida",
|
||||||
"ToastAuthorUpdateFailed": "Falha ao atualizar o autor",
|
|
||||||
"ToastAuthorUpdateMerged": "Autor combinado",
|
"ToastAuthorUpdateMerged": "Autor combinado",
|
||||||
"ToastAuthorUpdateSuccess": "Autor atualizado",
|
"ToastAuthorUpdateSuccess": "Autor atualizado",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autor atualizado (nenhuma imagem encontrada)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autor atualizado (nenhuma imagem encontrada)",
|
||||||
@@ -729,7 +727,6 @@
|
|||||||
"ToastBookmarkCreateFailed": "Falha ao criar marcador",
|
"ToastBookmarkCreateFailed": "Falha ao criar marcador",
|
||||||
"ToastBookmarkCreateSuccess": "Marcador adicionado",
|
"ToastBookmarkCreateSuccess": "Marcador adicionado",
|
||||||
"ToastBookmarkRemoveSuccess": "Marcador removido",
|
"ToastBookmarkRemoveSuccess": "Marcador removido",
|
||||||
"ToastBookmarkUpdateFailed": "Falha ao atualizar o marcador",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Marcador atualizado",
|
"ToastBookmarkUpdateSuccess": "Marcador atualizado",
|
||||||
"ToastCachePurgeFailed": "Falha ao apagar o cache",
|
"ToastCachePurgeFailed": "Falha ao apagar o cache",
|
||||||
"ToastCachePurgeSuccess": "Cache apagado com sucesso",
|
"ToastCachePurgeSuccess": "Cache apagado com sucesso",
|
||||||
@@ -737,14 +734,11 @@
|
|||||||
"ToastChaptersMustHaveTitles": "Capítulos precisam ter títulos",
|
"ToastChaptersMustHaveTitles": "Capítulos precisam ter títulos",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Item(ns) removidos da coleção",
|
"ToastCollectionItemsRemoveSuccess": "Item(ns) removidos da coleção",
|
||||||
"ToastCollectionRemoveSuccess": "Coleção removida",
|
"ToastCollectionRemoveSuccess": "Coleção removida",
|
||||||
"ToastCollectionUpdateFailed": "Falha ao atualizar coleção",
|
|
||||||
"ToastCollectionUpdateSuccess": "Coleção atualizada",
|
"ToastCollectionUpdateSuccess": "Coleção atualizada",
|
||||||
"ToastDeleteFileFailed": "Falha ao apagar arquivo",
|
"ToastDeleteFileFailed": "Falha ao apagar arquivo",
|
||||||
"ToastDeleteFileSuccess": "Arquivo apagado",
|
"ToastDeleteFileSuccess": "Arquivo apagado",
|
||||||
"ToastFailedToLoadData": "Falha ao carregar dados",
|
"ToastFailedToLoadData": "Falha ao carregar dados",
|
||||||
"ToastItemCoverUpdateFailed": "Falha ao atualizar capa do item",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Capa do item atualizada",
|
"ToastItemCoverUpdateSuccess": "Capa do item atualizada",
|
||||||
"ToastItemDetailsUpdateFailed": "Falha ao atualizar detalhes do item",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Detalhes do item atualizados",
|
"ToastItemDetailsUpdateSuccess": "Detalhes do item atualizados",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Falha ao marcar como Concluído",
|
"ToastItemMarkedAsFinishedFailed": "Falha ao marcar como Concluído",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Item marcado como Concluído",
|
"ToastItemMarkedAsFinishedSuccess": "Item marcado como Concluído",
|
||||||
@@ -756,12 +750,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Biblioteca apagada",
|
"ToastLibraryDeleteSuccess": "Biblioteca apagada",
|
||||||
"ToastLibraryScanFailedToStart": "Falha ao iniciar verificação",
|
"ToastLibraryScanFailedToStart": "Falha ao iniciar verificação",
|
||||||
"ToastLibraryScanStarted": "Verificação da biblioteca iniciada",
|
"ToastLibraryScanStarted": "Verificação da biblioteca iniciada",
|
||||||
"ToastLibraryUpdateFailed": "Falha ao atualizar a biblioteca",
|
|
||||||
"ToastLibraryUpdateSuccess": "Biblioteca \"{0}\" atualizada",
|
"ToastLibraryUpdateSuccess": "Biblioteca \"{0}\" atualizada",
|
||||||
"ToastPlaylistCreateFailed": "Falha ao criar lista de reprodução",
|
"ToastPlaylistCreateFailed": "Falha ao criar lista de reprodução",
|
||||||
"ToastPlaylistCreateSuccess": "Lista de reprodução criada",
|
"ToastPlaylistCreateSuccess": "Lista de reprodução criada",
|
||||||
"ToastPlaylistRemoveSuccess": "Lista de reprodução removida",
|
"ToastPlaylistRemoveSuccess": "Lista de reprodução removida",
|
||||||
"ToastPlaylistUpdateFailed": "Falha ao atualizar lista de reprodução",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Lista de reprodução atualizada",
|
"ToastPlaylistUpdateSuccess": "Lista de reprodução atualizada",
|
||||||
"ToastPodcastCreateFailed": "Falha ao criar podcast",
|
"ToastPodcastCreateFailed": "Falha ao criar podcast",
|
||||||
"ToastPodcastCreateSuccess": "Podcast criado",
|
"ToastPodcastCreateSuccess": "Podcast criado",
|
||||||
@@ -773,7 +765,6 @@
|
|||||||
"ToastSendEbookToDeviceSuccess": "Ebook enviado para o dispositivo \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "Ebook enviado para o dispositivo \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "Falha ao atualizar série",
|
"ToastSeriesUpdateFailed": "Falha ao atualizar série",
|
||||||
"ToastSeriesUpdateSuccess": "Série atualizada",
|
"ToastSeriesUpdateSuccess": "Série atualizada",
|
||||||
"ToastServerSettingsUpdateFailed": "Falha ao atualizar configurações do servidor",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Configurações do servidor atualizadas",
|
"ToastServerSettingsUpdateSuccess": "Configurações do servidor atualizadas",
|
||||||
"ToastSessionDeleteFailed": "Falha ao apagar sessão",
|
"ToastSessionDeleteFailed": "Falha ao apagar sessão",
|
||||||
"ToastSessionDeleteSuccess": "Sessão apagada",
|
"ToastSessionDeleteSuccess": "Sessão apagada",
|
||||||
@@ -781,7 +772,6 @@
|
|||||||
"ToastSocketDisconnected": "Socket desconectado",
|
"ToastSocketDisconnected": "Socket desconectado",
|
||||||
"ToastSocketFailedToConnect": "Falha na conexão do socket",
|
"ToastSocketFailedToConnect": "Falha na conexão do socket",
|
||||||
"ToastSortingPrefixesEmptyError": "É preciso ter pelo menos um prefixo de ordenação",
|
"ToastSortingPrefixesEmptyError": "É preciso ter pelo menos um prefixo de ordenação",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Falha ao atualizar prefixos de ordenação",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Prefixos de ordenação atualizados ({0} item(ns))",
|
"ToastSortingPrefixesUpdateSuccess": "Prefixos de ordenação atualizados ({0} item(ns))",
|
||||||
"ToastUserDeleteFailed": "Falha ao apagar usuário",
|
"ToastUserDeleteFailed": "Falha ao apagar usuário",
|
||||||
"ToastUserDeleteSuccess": "Usuário apagado"
|
"ToastUserDeleteSuccess": "Usuário apagado"
|
||||||
|
|||||||
+2
-18
@@ -56,6 +56,7 @@
|
|||||||
"ButtonOpenManager": "Открыть менеджер",
|
"ButtonOpenManager": "Открыть менеджер",
|
||||||
"ButtonPause": "Пауза",
|
"ButtonPause": "Пауза",
|
||||||
"ButtonPlay": "Слушать",
|
"ButtonPlay": "Слушать",
|
||||||
|
"ButtonPlayAll": "Играть все",
|
||||||
"ButtonPlaying": "Проигрывается",
|
"ButtonPlaying": "Проигрывается",
|
||||||
"ButtonPlaylists": "Плейлисты",
|
"ButtonPlaylists": "Плейлисты",
|
||||||
"ButtonPrevious": "Предыдущий",
|
"ButtonPrevious": "Предыдущий",
|
||||||
@@ -98,6 +99,7 @@
|
|||||||
"ButtonStats": "Статистика",
|
"ButtonStats": "Статистика",
|
||||||
"ButtonSubmit": "Применить",
|
"ButtonSubmit": "Применить",
|
||||||
"ButtonTest": "Тест",
|
"ButtonTest": "Тест",
|
||||||
|
"ButtonUnlinkOpenId": "Отключить OpenID",
|
||||||
"ButtonUpload": "Загрузить",
|
"ButtonUpload": "Загрузить",
|
||||||
"ButtonUploadBackup": "Загрузить бэкап",
|
"ButtonUploadBackup": "Загрузить бэкап",
|
||||||
"ButtonUploadCover": "Загрузить обложку",
|
"ButtonUploadCover": "Загрузить обложку",
|
||||||
@@ -815,14 +817,12 @@
|
|||||||
"StatsTopNarrators": "ТОП ЧТЕЦЫ",
|
"StatsTopNarrators": "ТОП ЧТЕЦЫ",
|
||||||
"StatsTotalDuration": "С общей продолжительностью…",
|
"StatsTotalDuration": "С общей продолжительностью…",
|
||||||
"StatsYearInReview": "ИТОГИ ГОДА",
|
"StatsYearInReview": "ИТОГИ ГОДА",
|
||||||
"ToastAccountUpdateFailed": "Не удалось обновить учетную запись",
|
|
||||||
"ToastAccountUpdateSuccess": "Учетная запись обновлена",
|
"ToastAccountUpdateSuccess": "Учетная запись обновлена",
|
||||||
"ToastAppriseUrlRequired": "Необходимо ввести URL-адрес Apprise",
|
"ToastAppriseUrlRequired": "Необходимо ввести URL-адрес Apprise",
|
||||||
"ToastAuthorImageRemoveSuccess": "Изображение автора удалено",
|
"ToastAuthorImageRemoveSuccess": "Изображение автора удалено",
|
||||||
"ToastAuthorNotFound": "Автор \"{0}\" не найден",
|
"ToastAuthorNotFound": "Автор \"{0}\" не найден",
|
||||||
"ToastAuthorRemoveSuccess": "Автор удален",
|
"ToastAuthorRemoveSuccess": "Автор удален",
|
||||||
"ToastAuthorSearchNotFound": "Автор не найден",
|
"ToastAuthorSearchNotFound": "Автор не найден",
|
||||||
"ToastAuthorUpdateFailed": "Не удалось обновить автора",
|
|
||||||
"ToastAuthorUpdateMerged": "Автор объединен",
|
"ToastAuthorUpdateMerged": "Автор объединен",
|
||||||
"ToastAuthorUpdateSuccess": "Автор обновлен",
|
"ToastAuthorUpdateSuccess": "Автор обновлен",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Автор обновлен (изображение не найдено)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Автор обновлен (изображение не найдено)",
|
||||||
@@ -833,7 +833,6 @@
|
|||||||
"ToastBackupDeleteSuccess": "Бэкап удален",
|
"ToastBackupDeleteSuccess": "Бэкап удален",
|
||||||
"ToastBackupInvalidMaxKeep": "Недопустимое количество резервных копий для хранения",
|
"ToastBackupInvalidMaxKeep": "Недопустимое количество резервных копий для хранения",
|
||||||
"ToastBackupInvalidMaxSize": "Недопустимый максимальный размер резервной копии",
|
"ToastBackupInvalidMaxSize": "Недопустимый максимальный размер резервной копии",
|
||||||
"ToastBackupPathUpdateFailed": "Не удалось обновить путь к резервному копированию",
|
|
||||||
"ToastBackupRestoreFailed": "Не удалось восстановить из бэкапа",
|
"ToastBackupRestoreFailed": "Не удалось восстановить из бэкапа",
|
||||||
"ToastBackupUploadFailed": "Не удалось загрузить бэкап",
|
"ToastBackupUploadFailed": "Не удалось загрузить бэкап",
|
||||||
"ToastBackupUploadSuccess": "Бэкап загружен",
|
"ToastBackupUploadSuccess": "Бэкап загружен",
|
||||||
@@ -844,7 +843,6 @@
|
|||||||
"ToastBookmarkCreateFailed": "Не удалось создать закладку",
|
"ToastBookmarkCreateFailed": "Не удалось создать закладку",
|
||||||
"ToastBookmarkCreateSuccess": "Добавлена закладка",
|
"ToastBookmarkCreateSuccess": "Добавлена закладка",
|
||||||
"ToastBookmarkRemoveSuccess": "Закладка удалена",
|
"ToastBookmarkRemoveSuccess": "Закладка удалена",
|
||||||
"ToastBookmarkUpdateFailed": "Не удалось обновить закладку",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Закладка обновлена",
|
"ToastBookmarkUpdateSuccess": "Закладка обновлена",
|
||||||
"ToastCachePurgeFailed": "Не удалось очистить кэш",
|
"ToastCachePurgeFailed": "Не удалось очистить кэш",
|
||||||
"ToastCachePurgeSuccess": "Кэш успешно очищен",
|
"ToastCachePurgeSuccess": "Кэш успешно очищен",
|
||||||
@@ -855,7 +853,6 @@
|
|||||||
"ToastCollectionItemsAddSuccess": "Элемент(ы) добавлены в коллекцию",
|
"ToastCollectionItemsAddSuccess": "Элемент(ы) добавлены в коллекцию",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Элемент(ы), удалены из коллекции",
|
"ToastCollectionItemsRemoveSuccess": "Элемент(ы), удалены из коллекции",
|
||||||
"ToastCollectionRemoveSuccess": "Коллекция удалена",
|
"ToastCollectionRemoveSuccess": "Коллекция удалена",
|
||||||
"ToastCollectionUpdateFailed": "Не удалось обновить коллекцию",
|
|
||||||
"ToastCollectionUpdateSuccess": "Коллекция обновлена",
|
"ToastCollectionUpdateSuccess": "Коллекция обновлена",
|
||||||
"ToastCoverUpdateFailed": "Не удалось обновить обложку",
|
"ToastCoverUpdateFailed": "Не удалось обновить обложку",
|
||||||
"ToastDeleteFileFailed": "Не удалось удалить файл",
|
"ToastDeleteFileFailed": "Не удалось удалить файл",
|
||||||
@@ -864,8 +861,6 @@
|
|||||||
"ToastDeviceNameAlreadyExists": "Устройство для чтения электронных книг с таким именем уже существует",
|
"ToastDeviceNameAlreadyExists": "Устройство для чтения электронных книг с таким именем уже существует",
|
||||||
"ToastDeviceTestEmailFailed": "Не удалось отправить тестовое электронное письмо",
|
"ToastDeviceTestEmailFailed": "Не удалось отправить тестовое электронное письмо",
|
||||||
"ToastDeviceTestEmailSuccess": "Тестовое письмо отправлено",
|
"ToastDeviceTestEmailSuccess": "Тестовое письмо отправлено",
|
||||||
"ToastDeviceUpdateFailed": "Не удалось обновить устройство",
|
|
||||||
"ToastEmailSettingsUpdateFailed": "Не удалось обновить настройки электронной почты",
|
|
||||||
"ToastEmailSettingsUpdateSuccess": "Обновлены настройки электронной почты",
|
"ToastEmailSettingsUpdateSuccess": "Обновлены настройки электронной почты",
|
||||||
"ToastEncodeCancelFailed": "Не удалось отменить кодирование",
|
"ToastEncodeCancelFailed": "Не удалось отменить кодирование",
|
||||||
"ToastEncodeCancelSucces": "Кодирование отменено",
|
"ToastEncodeCancelSucces": "Кодирование отменено",
|
||||||
@@ -874,21 +869,16 @@
|
|||||||
"ToastErrorCannotShare": "Невозможно предоставить общий доступ на этом устройстве",
|
"ToastErrorCannotShare": "Невозможно предоставить общий доступ на этом устройстве",
|
||||||
"ToastFailedToLoadData": "Не удалось загрузить данные",
|
"ToastFailedToLoadData": "Не удалось загрузить данные",
|
||||||
"ToastFailedToShare": "Не удалось поделиться",
|
"ToastFailedToShare": "Не удалось поделиться",
|
||||||
"ToastFailedToUpdateAccount": "Не удалось обновить учетную запись",
|
|
||||||
"ToastFailedToUpdateUser": "Не удалось обновить пользователя",
|
|
||||||
"ToastInvalidImageUrl": "Неверный URL изображения",
|
"ToastInvalidImageUrl": "Неверный URL изображения",
|
||||||
"ToastInvalidUrl": "Неверный URL",
|
"ToastInvalidUrl": "Неверный URL",
|
||||||
"ToastItemCoverUpdateFailed": "Не удалось обновить обложку элемента",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Обложка элемента обновлена",
|
"ToastItemCoverUpdateSuccess": "Обложка элемента обновлена",
|
||||||
"ToastItemDeletedFailed": "Не удалось удалить элемент",
|
"ToastItemDeletedFailed": "Не удалось удалить элемент",
|
||||||
"ToastItemDeletedSuccess": "Удаленный элемент",
|
"ToastItemDeletedSuccess": "Удаленный элемент",
|
||||||
"ToastItemDetailsUpdateFailed": "Не удалось обновить сведения об элементе",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Обновлены сведения об элементе",
|
"ToastItemDetailsUpdateSuccess": "Обновлены сведения об элементе",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Не удалось пометить как Завершенный",
|
"ToastItemMarkedAsFinishedFailed": "Не удалось пометить как Завершенный",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Элемент помечен как Завершенный",
|
"ToastItemMarkedAsFinishedSuccess": "Элемент помечен как Завершенный",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Не удалось пометить как Незавершенный",
|
"ToastItemMarkedAsNotFinishedFailed": "Не удалось пометить как Незавершенный",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Элемент помечен как Незавершенный",
|
"ToastItemMarkedAsNotFinishedSuccess": "Элемент помечен как Незавершенный",
|
||||||
"ToastItemUpdateFailed": "Не удалось обновить элемент",
|
|
||||||
"ToastItemUpdateSuccess": "Элемент обновлен",
|
"ToastItemUpdateSuccess": "Элемент обновлен",
|
||||||
"ToastLibraryCreateFailed": "Не удалось создать библиотеку",
|
"ToastLibraryCreateFailed": "Не удалось создать библиотеку",
|
||||||
"ToastLibraryCreateSuccess": "Библиотека \"{0}\" создана",
|
"ToastLibraryCreateSuccess": "Библиотека \"{0}\" создана",
|
||||||
@@ -896,7 +886,6 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Библиотека удалена",
|
"ToastLibraryDeleteSuccess": "Библиотека удалена",
|
||||||
"ToastLibraryScanFailedToStart": "Не удалось запустить сканирование",
|
"ToastLibraryScanFailedToStart": "Не удалось запустить сканирование",
|
||||||
"ToastLibraryScanStarted": "Запущено сканирование библиотеки",
|
"ToastLibraryScanStarted": "Запущено сканирование библиотеки",
|
||||||
"ToastLibraryUpdateFailed": "Не удалось обновить библиотеку",
|
|
||||||
"ToastLibraryUpdateSuccess": "Библиотека \"{0}\" обновлена",
|
"ToastLibraryUpdateSuccess": "Библиотека \"{0}\" обновлена",
|
||||||
"ToastNameEmailRequired": "Имя и адрес электронной почты обязательны",
|
"ToastNameEmailRequired": "Имя и адрес электронной почты обязательны",
|
||||||
"ToastNameRequired": "Имя обязательно для заполнения",
|
"ToastNameRequired": "Имя обязательно для заполнения",
|
||||||
@@ -911,16 +900,13 @@
|
|||||||
"ToastNotificationDeleteFailed": "Не удалось удалить уведомление",
|
"ToastNotificationDeleteFailed": "Не удалось удалить уведомление",
|
||||||
"ToastNotificationFailedMaximum": "Максимальное количество неудачных попыток должно быть >= 0",
|
"ToastNotificationFailedMaximum": "Максимальное количество неудачных попыток должно быть >= 0",
|
||||||
"ToastNotificationQueueMaximum": "Максимальная очередь уведомлений должна быть >= 0",
|
"ToastNotificationQueueMaximum": "Максимальная очередь уведомлений должна быть >= 0",
|
||||||
"ToastNotificationSettingsUpdateFailed": "Не удалось обновить настройки уведомлений",
|
|
||||||
"ToastNotificationSettingsUpdateSuccess": "Обновлены настройки уведомлений",
|
"ToastNotificationSettingsUpdateSuccess": "Обновлены настройки уведомлений",
|
||||||
"ToastNotificationTestTriggerFailed": "Не удалось активировать тестовое уведомление",
|
"ToastNotificationTestTriggerFailed": "Не удалось активировать тестовое уведомление",
|
||||||
"ToastNotificationTestTriggerSuccess": "Сработавшее уведомление о тестировании",
|
"ToastNotificationTestTriggerSuccess": "Сработавшее уведомление о тестировании",
|
||||||
"ToastNotificationUpdateFailed": "Не удалось обновить уведомление",
|
|
||||||
"ToastNotificationUpdateSuccess": "Уведомление обновлено",
|
"ToastNotificationUpdateSuccess": "Уведомление обновлено",
|
||||||
"ToastPlaylistCreateFailed": "Не удалось создать плейлист",
|
"ToastPlaylistCreateFailed": "Не удалось создать плейлист",
|
||||||
"ToastPlaylistCreateSuccess": "Плейлист создан",
|
"ToastPlaylistCreateSuccess": "Плейлист создан",
|
||||||
"ToastPlaylistRemoveSuccess": "Плейлист удален",
|
"ToastPlaylistRemoveSuccess": "Плейлист удален",
|
||||||
"ToastPlaylistUpdateFailed": "Не удалось обновить плейлист",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Плейлист обновлен",
|
"ToastPlaylistUpdateSuccess": "Плейлист обновлен",
|
||||||
"ToastPodcastCreateFailed": "Не удалось создать подкаст",
|
"ToastPodcastCreateFailed": "Не удалось создать подкаст",
|
||||||
"ToastPodcastCreateSuccess": "Подкаст успешно создан",
|
"ToastPodcastCreateSuccess": "Подкаст успешно создан",
|
||||||
@@ -949,7 +935,6 @@
|
|||||||
"ToastSendEbookToDeviceSuccess": "E-книга отправлена на устройство \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "E-книга отправлена на устройство \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "Не удалось обновить серию",
|
"ToastSeriesUpdateFailed": "Не удалось обновить серию",
|
||||||
"ToastSeriesUpdateSuccess": "Успешное обновление серии",
|
"ToastSeriesUpdateSuccess": "Успешное обновление серии",
|
||||||
"ToastServerSettingsUpdateFailed": "Не удалось обновить настройки сервера",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Обновлены настройки сервера",
|
"ToastServerSettingsUpdateSuccess": "Обновлены настройки сервера",
|
||||||
"ToastSessionCloseFailed": "Не удалось закрыть сеанс",
|
"ToastSessionCloseFailed": "Не удалось закрыть сеанс",
|
||||||
"ToastSessionDeleteFailed": "Не удалось удалить сеанс",
|
"ToastSessionDeleteFailed": "Не удалось удалить сеанс",
|
||||||
@@ -960,7 +945,6 @@
|
|||||||
"ToastSocketDisconnected": "Сокет отключен",
|
"ToastSocketDisconnected": "Сокет отключен",
|
||||||
"ToastSocketFailedToConnect": "Не удалось подключить сокет",
|
"ToastSocketFailedToConnect": "Не удалось подключить сокет",
|
||||||
"ToastSortingPrefixesEmptyError": "Должен быть хотя бы 1 префикс сортировки",
|
"ToastSortingPrefixesEmptyError": "Должен быть хотя бы 1 префикс сортировки",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Не удалось обновить префиксы сортировки",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Обновлены префиксы сортировки ({0} элементов)",
|
"ToastSortingPrefixesUpdateSuccess": "Обновлены префиксы сортировки ({0} элементов)",
|
||||||
"ToastTitleRequired": "Название обязательно",
|
"ToastTitleRequired": "Название обязательно",
|
||||||
"ToastUnknownError": "Неизвестная ошибка",
|
"ToastUnknownError": "Неизвестная ошибка",
|
||||||
|
|||||||
+41
-24
@@ -56,6 +56,7 @@
|
|||||||
"ButtonOpenManager": "Odpri upravljanje",
|
"ButtonOpenManager": "Odpri upravljanje",
|
||||||
"ButtonPause": "Premor",
|
"ButtonPause": "Premor",
|
||||||
"ButtonPlay": "Predvajaj",
|
"ButtonPlay": "Predvajaj",
|
||||||
|
"ButtonPlayAll": "Predvajaj vse",
|
||||||
"ButtonPlaying": "Predvajam",
|
"ButtonPlaying": "Predvajam",
|
||||||
"ButtonPlaylists": "Seznami predvajanj",
|
"ButtonPlaylists": "Seznami predvajanj",
|
||||||
"ButtonPrevious": "Prejšnje",
|
"ButtonPrevious": "Prejšnje",
|
||||||
@@ -96,8 +97,9 @@
|
|||||||
"ButtonStartM4BEncode": "Zaženi M4B prekodiranje",
|
"ButtonStartM4BEncode": "Zaženi M4B prekodiranje",
|
||||||
"ButtonStartMetadataEmbed": "Začni vdelavo metapodatkov",
|
"ButtonStartMetadataEmbed": "Začni vdelavo metapodatkov",
|
||||||
"ButtonStats": "Statistika",
|
"ButtonStats": "Statistika",
|
||||||
"ButtonSubmit": "Posreduj",
|
"ButtonSubmit": "Potrdi",
|
||||||
"ButtonTest": "Test",
|
"ButtonTest": "Test",
|
||||||
|
"ButtonUnlinkOpenId": "Prekini povezavo OpenID",
|
||||||
"ButtonUpload": "Naloži",
|
"ButtonUpload": "Naloži",
|
||||||
"ButtonUploadBackup": "Naloži varnostno kopijo",
|
"ButtonUploadBackup": "Naloži varnostno kopijo",
|
||||||
"ButtonUploadCover": "Naloži naslovnico",
|
"ButtonUploadCover": "Naloži naslovnico",
|
||||||
@@ -289,8 +291,8 @@
|
|||||||
"LabelDurationComparisonLonger": "({0} dlje)",
|
"LabelDurationComparisonLonger": "({0} dlje)",
|
||||||
"LabelDurationComparisonShorter": "({0} krajše)",
|
"LabelDurationComparisonShorter": "({0} krajše)",
|
||||||
"LabelDurationFound": "Najdeno trajanje:",
|
"LabelDurationFound": "Najdeno trajanje:",
|
||||||
"LabelEbook": "Eknjiga",
|
"LabelEbook": "E-knjiga",
|
||||||
"LabelEbooks": "Eknjige",
|
"LabelEbooks": "E-knjige",
|
||||||
"LabelEdit": "Uredi",
|
"LabelEdit": "Uredi",
|
||||||
"LabelEmail": "E-pošta",
|
"LabelEmail": "E-pošta",
|
||||||
"LabelEmailSettingsFromAddress": "Iz naslova",
|
"LabelEmailSettingsFromAddress": "Iz naslova",
|
||||||
@@ -337,8 +339,8 @@
|
|||||||
"LabelGenre": "Žanr",
|
"LabelGenre": "Žanr",
|
||||||
"LabelGenres": "Žanri",
|
"LabelGenres": "Žanri",
|
||||||
"LabelHardDeleteFile": "Trdo brisanje datoteke",
|
"LabelHardDeleteFile": "Trdo brisanje datoteke",
|
||||||
"LabelHasEbook": "Ima eknjigo",
|
"LabelHasEbook": "Ima e-knjigo",
|
||||||
"LabelHasSupplementaryEbook": "Ima dodatno eknjigo",
|
"LabelHasSupplementaryEbook": "Ima dodatno e-knjigo",
|
||||||
"LabelHideSubtitles": "Skrij podnapise",
|
"LabelHideSubtitles": "Skrij podnapise",
|
||||||
"LabelHighestPriority": "Najvišja prioriteta",
|
"LabelHighestPriority": "Najvišja prioriteta",
|
||||||
"LabelHost": "Gostitelj",
|
"LabelHost": "Gostitelj",
|
||||||
@@ -456,7 +458,7 @@
|
|||||||
"LabelPort": "Vrata",
|
"LabelPort": "Vrata",
|
||||||
"LabelPrefixesToIgnore": "Predpone, ki jih je treba prezreti (neobčutljivo na velike in male črke)",
|
"LabelPrefixesToIgnore": "Predpone, ki jih je treba prezreti (neobčutljivo na velike in male črke)",
|
||||||
"LabelPreventIndexing": "Preprečite, da bi vaš vir indeksirali imeniki podcastov iTunes in Google",
|
"LabelPreventIndexing": "Preprečite, da bi vaš vir indeksirali imeniki podcastov iTunes in Google",
|
||||||
"LabelPrimaryEbook": "Primarna eknjiga",
|
"LabelPrimaryEbook": "Primarna e-knjiga",
|
||||||
"LabelProgress": "Napredek",
|
"LabelProgress": "Napredek",
|
||||||
"LabelProvider": "Ponudnik",
|
"LabelProvider": "Ponudnik",
|
||||||
"LabelProviderAuthorizationValue": "Vrednost glave avtorizacije",
|
"LabelProviderAuthorizationValue": "Vrednost glave avtorizacije",
|
||||||
@@ -775,6 +777,38 @@
|
|||||||
"MessageShareExpiresIn": "Poteče čez {0}",
|
"MessageShareExpiresIn": "Poteče čez {0}",
|
||||||
"MessageShareURLWillBe": "URL za skupno rabo bo <strong>{0}</strong>",
|
"MessageShareURLWillBe": "URL za skupno rabo bo <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "Začni predvajanje za \"{0}\" ob {1}?",
|
"MessageStartPlaybackAtTime": "Začni predvajanje za \"{0}\" ob {1}?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "Zvočna datoteka \"{0}\" ni zapisljiva",
|
||||||
|
"MessageTaskCanceledByUser": "Nalogo je preklical uporabnik",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "Prenašanje epizode \"{0}\"",
|
||||||
|
"MessageTaskEmbeddingMetadata": "Vdelujem metapodatke",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "Vdelujem metapodatke v zvočno knjigo \"{0}\"",
|
||||||
|
"MessageTaskEncodingM4b": "Enkodiranje M4B",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Enkodiranje zvočne knjige \"{0}\" v samo eno datoteko m4b",
|
||||||
|
"MessageTaskFailed": "Neuspešno",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "Varnostno kopiranje zvočne datoteke \"{0}\" ni uspelo",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Imenika predpomnilnika ni bilo mogoče ustvariti",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "Metapodatkov ni bilo mogoče vdelati v datoteko \"{0}\"",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "Zvočnih datotek ni bilo mogoče združiti",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "Datoteke m4b ni bilo mogoče premakniti",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "Metapodatke ni bilo mogoče zapisati v datoteke",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "Ujemam knjige v knjižnici \"{0}\"",
|
||||||
|
"MessageTaskNoFilesToScan": "Ni datotek za pregledovanje",
|
||||||
|
"MessageTaskOpmlImport": "Uvoz OPML",
|
||||||
|
"MessageTaskOpmlImportDescription": "Ustvarjanje podcastov iz {0} virov RSS",
|
||||||
|
"MessageTaskOpmlImportFeed": "Vir za uvoz OPML",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "Uvažanje vira RSS \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "Vira podcasta ni bilo mogoče pridobiti",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "Ustvarjanje podcasta \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastExists": "Podcast že obstaja na tej poti",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "Podcasta ni bilo mogoče ustvariti",
|
||||||
|
"MessageTaskOpmlImportFinished": "Dodanih {0} podcastov",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} dodano",
|
||||||
|
"MessageTaskScanItemsMissing": "{0} manjka",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} posodobljeno",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "Spremembe niso potrebne",
|
||||||
|
"MessageTaskScanningFileChanges": "Pregledovanje sprememb v datoteki \"{0}\"",
|
||||||
|
"MessageTaskScanningLibrary": "Pregled knjižnice \"{0}\"",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "Ciljni imenik ni zapisljiv",
|
||||||
"MessageThinking": "Razmišljam...",
|
"MessageThinking": "Razmišljam...",
|
||||||
"MessageUploaderItemFailed": "Nalaganje ni uspelo",
|
"MessageUploaderItemFailed": "Nalaganje ni uspelo",
|
||||||
"MessageUploaderItemSuccess": "Uspešno naloženo!",
|
"MessageUploaderItemSuccess": "Uspešno naloženo!",
|
||||||
@@ -815,14 +849,12 @@
|
|||||||
"StatsTopNarrators": "TOP BRALCI",
|
"StatsTopNarrators": "TOP BRALCI",
|
||||||
"StatsTotalDuration": "S skupnim trajanjem…",
|
"StatsTotalDuration": "S skupnim trajanjem…",
|
||||||
"StatsYearInReview": "PREGLED LETA",
|
"StatsYearInReview": "PREGLED LETA",
|
||||||
"ToastAccountUpdateFailed": "Računa ni bilo mogoče posodobiti",
|
|
||||||
"ToastAccountUpdateSuccess": "Račun posodobljen",
|
"ToastAccountUpdateSuccess": "Račun posodobljen",
|
||||||
"ToastAppriseUrlRequired": "Vnesti morate Apprise URL",
|
"ToastAppriseUrlRequired": "Vnesti morate Apprise URL",
|
||||||
"ToastAuthorImageRemoveSuccess": "Slika avtorja je odstranjena",
|
"ToastAuthorImageRemoveSuccess": "Slika avtorja je odstranjena",
|
||||||
"ToastAuthorNotFound": "Avtor \"{0}\" ni bil najden",
|
"ToastAuthorNotFound": "Avtor \"{0}\" ni bil najden",
|
||||||
"ToastAuthorRemoveSuccess": "Avtor odstranjen",
|
"ToastAuthorRemoveSuccess": "Avtor odstranjen",
|
||||||
"ToastAuthorSearchNotFound": "Ne najdem avtorja",
|
"ToastAuthorSearchNotFound": "Ne najdem avtorja",
|
||||||
"ToastAuthorUpdateFailed": "Avtorja ni bilo mogoče posodobiti",
|
|
||||||
"ToastAuthorUpdateMerged": "Avtor združen",
|
"ToastAuthorUpdateMerged": "Avtor združen",
|
||||||
"ToastAuthorUpdateSuccess": "Avtor posodobljen",
|
"ToastAuthorUpdateSuccess": "Avtor posodobljen",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Avtor posodobljen (ne najdem slike)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Avtor posodobljen (ne najdem slike)",
|
||||||
@@ -833,7 +865,6 @@
|
|||||||
"ToastBackupDeleteSuccess": "Varnostna kopija izbrisana",
|
"ToastBackupDeleteSuccess": "Varnostna kopija izbrisana",
|
||||||
"ToastBackupInvalidMaxKeep": "Neveljavno število varnostnih kopij za ohranjanje",
|
"ToastBackupInvalidMaxKeep": "Neveljavno število varnostnih kopij za ohranjanje",
|
||||||
"ToastBackupInvalidMaxSize": "Neveljavna največja velikost varnostne kopije",
|
"ToastBackupInvalidMaxSize": "Neveljavna največja velikost varnostne kopije",
|
||||||
"ToastBackupPathUpdateFailed": "Posodobitev poti varnostnih kopij ni uspela",
|
|
||||||
"ToastBackupRestoreFailed": "Varnostne kopije ni bilo mogoče obnoviti",
|
"ToastBackupRestoreFailed": "Varnostne kopije ni bilo mogoče obnoviti",
|
||||||
"ToastBackupUploadFailed": "Nalaganje varnostne kopije ni uspelo",
|
"ToastBackupUploadFailed": "Nalaganje varnostne kopije ni uspelo",
|
||||||
"ToastBackupUploadSuccess": "Varnostna kopija je naložena",
|
"ToastBackupUploadSuccess": "Varnostna kopija je naložena",
|
||||||
@@ -844,7 +875,6 @@
|
|||||||
"ToastBookmarkCreateFailed": "Zaznamka ni bilo mogoče ustvariti",
|
"ToastBookmarkCreateFailed": "Zaznamka ni bilo mogoče ustvariti",
|
||||||
"ToastBookmarkCreateSuccess": "Zaznamek dodan",
|
"ToastBookmarkCreateSuccess": "Zaznamek dodan",
|
||||||
"ToastBookmarkRemoveSuccess": "Zaznamek odstranjen",
|
"ToastBookmarkRemoveSuccess": "Zaznamek odstranjen",
|
||||||
"ToastBookmarkUpdateFailed": "Zaznamka ni bilo mogoče posodobiti",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Zaznamek posodobljen",
|
"ToastBookmarkUpdateSuccess": "Zaznamek posodobljen",
|
||||||
"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",
|
||||||
@@ -855,7 +885,6 @@
|
|||||||
"ToastCollectionItemsAddSuccess": "Dodajanje elementov v zbirko je bilo uspešno",
|
"ToastCollectionItemsAddSuccess": "Dodajanje elementov v zbirko je bilo uspešno",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Elementi so bili odstranjeni iz zbirke",
|
"ToastCollectionItemsRemoveSuccess": "Elementi so bili odstranjeni iz zbirke",
|
||||||
"ToastCollectionRemoveSuccess": "Zbirka je bila odstranjena",
|
"ToastCollectionRemoveSuccess": "Zbirka je bila odstranjena",
|
||||||
"ToastCollectionUpdateFailed": "Zbirke ni bilo mogoče posodobiti",
|
|
||||||
"ToastCollectionUpdateSuccess": "Zbirka je bila posodobljena",
|
"ToastCollectionUpdateSuccess": "Zbirka je bila posodobljena",
|
||||||
"ToastCoverUpdateFailed": "Posodobitev naslovnice ni uspela",
|
"ToastCoverUpdateFailed": "Posodobitev naslovnice ni uspela",
|
||||||
"ToastDeleteFileFailed": "Brisanje datoteke ni uspelo",
|
"ToastDeleteFileFailed": "Brisanje datoteke ni uspelo",
|
||||||
@@ -864,8 +893,6 @@
|
|||||||
"ToastDeviceNameAlreadyExists": "Elektronska naprava s tem imenom že obstaja",
|
"ToastDeviceNameAlreadyExists": "Elektronska naprava s tem imenom že obstaja",
|
||||||
"ToastDeviceTestEmailFailed": "Pošiljanje testnega e-poštnega sporočila ni uspelo",
|
"ToastDeviceTestEmailFailed": "Pošiljanje testnega e-poštnega sporočila ni uspelo",
|
||||||
"ToastDeviceTestEmailSuccess": "Testno e-poštno sporočilo je poslano",
|
"ToastDeviceTestEmailSuccess": "Testno e-poštno sporočilo je poslano",
|
||||||
"ToastDeviceUpdateFailed": "Naprave ni bilo mogoče posodobiti",
|
|
||||||
"ToastEmailSettingsUpdateFailed": "E-poštnih nastavitev ni bilo mogoče posodobiti",
|
|
||||||
"ToastEmailSettingsUpdateSuccess": "E-poštne nastavitve so bile posodobljene",
|
"ToastEmailSettingsUpdateSuccess": "E-poštne nastavitve so bile posodobljene",
|
||||||
"ToastEncodeCancelFailed": "Napaka pri preklicu prekodiranja",
|
"ToastEncodeCancelFailed": "Napaka pri preklicu prekodiranja",
|
||||||
"ToastEncodeCancelSucces": "Prekodiranje prekinjeno",
|
"ToastEncodeCancelSucces": "Prekodiranje prekinjeno",
|
||||||
@@ -874,21 +901,17 @@
|
|||||||
"ToastErrorCannotShare": "V tej napravi ni mogoče dati v skupno rabo",
|
"ToastErrorCannotShare": "V tej napravi ni mogoče dati v skupno rabo",
|
||||||
"ToastFailedToLoadData": "Podatkov ni bilo mogoče naložiti",
|
"ToastFailedToLoadData": "Podatkov ni bilo mogoče naložiti",
|
||||||
"ToastFailedToShare": "Skupna raba ni uspela",
|
"ToastFailedToShare": "Skupna raba ni uspela",
|
||||||
"ToastFailedToUpdateAccount": "Računa ni bilo mogoče posodobiti",
|
"ToastFailedToUpdate": "Napaka pri posodobitvi",
|
||||||
"ToastFailedToUpdateUser": "Uporabnika ni bilo mogoče posodobiti",
|
|
||||||
"ToastInvalidImageUrl": "Neveljaven URL slike",
|
"ToastInvalidImageUrl": "Neveljaven URL slike",
|
||||||
"ToastInvalidUrl": "Neveljaven URL",
|
"ToastInvalidUrl": "Neveljaven URL",
|
||||||
"ToastItemCoverUpdateFailed": "Naslovnice elementa ni bilo mogoče posodobiti",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Naslovnica elementa je bila posodobljena",
|
"ToastItemCoverUpdateSuccess": "Naslovnica elementa je bila posodobljena",
|
||||||
"ToastItemDeletedFailed": "Elementa ni bilo mogoče izbrisati",
|
"ToastItemDeletedFailed": "Elementa ni bilo mogoče izbrisati",
|
||||||
"ToastItemDeletedSuccess": "Element je bil izbrisan",
|
"ToastItemDeletedSuccess": "Element je bil izbrisan",
|
||||||
"ToastItemDetailsUpdateFailed": "Posodobitev podrobnosti elementa ni uspela",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Podrobnosti elementa so bile posodobjene",
|
"ToastItemDetailsUpdateSuccess": "Podrobnosti elementa so bile posodobjene",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Označevanje kot dokončano ni uspelo",
|
"ToastItemMarkedAsFinishedFailed": "Označevanje kot dokončano ni uspelo",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Element je označen kot dokončan",
|
"ToastItemMarkedAsFinishedSuccess": "Element je označen kot dokončan",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Ni bilo mogoče označiti kot nedokončano",
|
"ToastItemMarkedAsNotFinishedFailed": "Ni bilo mogoče označiti kot nedokončano",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Element označen kot nedokončan",
|
"ToastItemMarkedAsNotFinishedSuccess": "Element označen kot nedokončan",
|
||||||
"ToastItemUpdateFailed": "Elementa ni bilo mogoče posodobiti",
|
|
||||||
"ToastItemUpdateSuccess": "Element je bil posodobljen",
|
"ToastItemUpdateSuccess": "Element je bil posodobljen",
|
||||||
"ToastLibraryCreateFailed": "Knjižnice ni bilo mogoče ustvariti",
|
"ToastLibraryCreateFailed": "Knjižnice ni bilo mogoče ustvariti",
|
||||||
"ToastLibraryCreateSuccess": "Knjižnica \"{0}\" je bila ustvarjena",
|
"ToastLibraryCreateSuccess": "Knjižnica \"{0}\" je bila ustvarjena",
|
||||||
@@ -896,7 +919,6 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Knjižnica je bila izbrisana",
|
"ToastLibraryDeleteSuccess": "Knjižnica je bila izbrisana",
|
||||||
"ToastLibraryScanFailedToStart": "Pregleda ni bilo mogoče začeti",
|
"ToastLibraryScanFailedToStart": "Pregleda ni bilo mogoče začeti",
|
||||||
"ToastLibraryScanStarted": "Pregled knjižnice se je začel",
|
"ToastLibraryScanStarted": "Pregled knjižnice se je začel",
|
||||||
"ToastLibraryUpdateFailed": "Knjižnice ni bilo mogoče posodobiti",
|
|
||||||
"ToastLibraryUpdateSuccess": "Knjižnica \"{0}\" je bila posodobljena",
|
"ToastLibraryUpdateSuccess": "Knjižnica \"{0}\" je bila posodobljena",
|
||||||
"ToastNameEmailRequired": "Ime in e-pošta sta obvezna",
|
"ToastNameEmailRequired": "Ime in e-pošta sta obvezna",
|
||||||
"ToastNameRequired": "Ime je obvezno",
|
"ToastNameRequired": "Ime je obvezno",
|
||||||
@@ -911,16 +933,13 @@
|
|||||||
"ToastNotificationDeleteFailed": "Brisanje obvestila ni uspelo",
|
"ToastNotificationDeleteFailed": "Brisanje obvestila ni uspelo",
|
||||||
"ToastNotificationFailedMaximum": "Največje število neuspelih poskusov mora biti >= 0",
|
"ToastNotificationFailedMaximum": "Največje število neuspelih poskusov mora biti >= 0",
|
||||||
"ToastNotificationQueueMaximum": "Največja čakalna vrsta obvestil mora biti >= 0",
|
"ToastNotificationQueueMaximum": "Največja čakalna vrsta obvestil mora biti >= 0",
|
||||||
"ToastNotificationSettingsUpdateFailed": "Nastavitev obvestil ni bilo mogoče posodobiti",
|
|
||||||
"ToastNotificationSettingsUpdateSuccess": "Nastavitve obvestil so bile posodobljene",
|
"ToastNotificationSettingsUpdateSuccess": "Nastavitve obvestil so bile posodobljene",
|
||||||
"ToastNotificationTestTriggerFailed": "Sprožitev testnega obvestila ni uspela",
|
"ToastNotificationTestTriggerFailed": "Sprožitev testnega obvestila ni uspela",
|
||||||
"ToastNotificationTestTriggerSuccess": "Sproženo testno obvestilo",
|
"ToastNotificationTestTriggerSuccess": "Sproženo testno obvestilo",
|
||||||
"ToastNotificationUpdateFailed": "Obvestila ni bilo mogoče posodobiti",
|
|
||||||
"ToastNotificationUpdateSuccess": "Obvestilo posodobljeno",
|
"ToastNotificationUpdateSuccess": "Obvestilo posodobljeno",
|
||||||
"ToastPlaylistCreateFailed": "Seznama predvajanja ni bilo mogoče ustvariti",
|
"ToastPlaylistCreateFailed": "Seznama predvajanja ni bilo mogoče ustvariti",
|
||||||
"ToastPlaylistCreateSuccess": "Seznam predvajanja je bil ustvarjen",
|
"ToastPlaylistCreateSuccess": "Seznam predvajanja je bil ustvarjen",
|
||||||
"ToastPlaylistRemoveSuccess": "Seznam predvajanja odstranjen",
|
"ToastPlaylistRemoveSuccess": "Seznam predvajanja odstranjen",
|
||||||
"ToastPlaylistUpdateFailed": "Seznama predvajanja ni bilo mogoče posodobiti",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Seznam predvajanja je bil posodobljen",
|
"ToastPlaylistUpdateSuccess": "Seznam predvajanja je bil posodobljen",
|
||||||
"ToastPodcastCreateFailed": "Podcasta ni bilo mogoče ustvariti",
|
"ToastPodcastCreateFailed": "Podcasta ni bilo mogoče ustvariti",
|
||||||
"ToastPodcastCreateSuccess": "Podcast je bil uspešno ustvarjen",
|
"ToastPodcastCreateSuccess": "Podcast je bil uspešno ustvarjen",
|
||||||
@@ -949,7 +968,6 @@
|
|||||||
"ToastSendEbookToDeviceSuccess": "E-knjiga je bila poslana v napravo \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "E-knjiga je bila poslana v napravo \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "Posodobitev serije ni uspela",
|
"ToastSeriesUpdateFailed": "Posodobitev serije ni uspela",
|
||||||
"ToastSeriesUpdateSuccess": "Uspešna posodobitev serije",
|
"ToastSeriesUpdateSuccess": "Uspešna posodobitev serije",
|
||||||
"ToastServerSettingsUpdateFailed": "Nastavitev strežnika ni bilo mogoče posodobiti",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Nastavitve strežnika so bile posodobljene",
|
"ToastServerSettingsUpdateSuccess": "Nastavitve strežnika so bile posodobljene",
|
||||||
"ToastSessionCloseFailed": "Seje ni bilo mogoče zapreti",
|
"ToastSessionCloseFailed": "Seje ni bilo mogoče zapreti",
|
||||||
"ToastSessionDeleteFailed": "Brisanje seje ni uspelo",
|
"ToastSessionDeleteFailed": "Brisanje seje ni uspelo",
|
||||||
@@ -960,7 +978,6 @@
|
|||||||
"ToastSocketDisconnected": "Omrežna povezava je odklopljena",
|
"ToastSocketDisconnected": "Omrežna povezava je odklopljena",
|
||||||
"ToastSocketFailedToConnect": "Omrežna povezava ni uspela vzpostaviti priklopa",
|
"ToastSocketFailedToConnect": "Omrežna povezava ni uspela vzpostaviti priklopa",
|
||||||
"ToastSortingPrefixesEmptyError": "Imeti mora vsaj 1 predpono za razvrščanje",
|
"ToastSortingPrefixesEmptyError": "Imeti mora vsaj 1 predpono za razvrščanje",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Posodobitev predpon za razvrščanje ni uspela",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Predpone za razvrščanje so bile posodobljene ({0} elementov)",
|
"ToastSortingPrefixesUpdateSuccess": "Predpone za razvrščanje so bile posodobljene ({0} elementov)",
|
||||||
"ToastTitleRequired": "Naslov je obvezen",
|
"ToastTitleRequired": "Naslov je obvezen",
|
||||||
"ToastUnknownError": "Neznana napaka",
|
"ToastUnknownError": "Neznana napaka",
|
||||||
|
|||||||
+10
-10
@@ -45,6 +45,7 @@
|
|||||||
"ButtonOk": "Okej",
|
"ButtonOk": "Okej",
|
||||||
"ButtonOpenFeed": "Öppna flöde",
|
"ButtonOpenFeed": "Öppna flöde",
|
||||||
"ButtonOpenManager": "Öppna Manager",
|
"ButtonOpenManager": "Öppna Manager",
|
||||||
|
"ButtonPause": "Pausa",
|
||||||
"ButtonPlay": "Spela",
|
"ButtonPlay": "Spela",
|
||||||
"ButtonPlaying": "Spelar",
|
"ButtonPlaying": "Spelar",
|
||||||
"ButtonPlaylists": "Spellistor",
|
"ButtonPlaylists": "Spellistor",
|
||||||
@@ -263,8 +264,10 @@
|
|||||||
"LabelFinished": "Avslutad",
|
"LabelFinished": "Avslutad",
|
||||||
"LabelFolder": "Mapp",
|
"LabelFolder": "Mapp",
|
||||||
"LabelFolders": "Mappar",
|
"LabelFolders": "Mappar",
|
||||||
|
"LabelFontBoldness": "Fetstil",
|
||||||
"LabelFontFamily": "Teckensnittsfamilj",
|
"LabelFontFamily": "Teckensnittsfamilj",
|
||||||
"LabelFontScale": "Teckensnittsskala",
|
"LabelFontScale": "Teckensnittsskala",
|
||||||
|
"LabelGenre": "Genre",
|
||||||
"LabelGenres": "Genrer",
|
"LabelGenres": "Genrer",
|
||||||
"LabelHardDeleteFile": "Hård radering av fil",
|
"LabelHardDeleteFile": "Hård radering av fil",
|
||||||
"LabelHasEbook": "Har E-bok",
|
"LabelHasEbook": "Har E-bok",
|
||||||
@@ -294,6 +297,7 @@
|
|||||||
"LabelLastSeen": "Senast sedd",
|
"LabelLastSeen": "Senast sedd",
|
||||||
"LabelLastTime": "Senaste gången",
|
"LabelLastTime": "Senaste gången",
|
||||||
"LabelLastUpdate": "Senaste uppdatering",
|
"LabelLastUpdate": "Senaste uppdatering",
|
||||||
|
"LabelLayout": "Layout",
|
||||||
"LabelLayoutSinglePage": "En sida",
|
"LabelLayoutSinglePage": "En sida",
|
||||||
"LabelLayoutSplitPage": "Dela sida",
|
"LabelLayoutSplitPage": "Dela sida",
|
||||||
"LabelLess": "Mindre",
|
"LabelLess": "Mindre",
|
||||||
@@ -322,8 +326,8 @@
|
|||||||
"LabelNarrators": "Berättare",
|
"LabelNarrators": "Berättare",
|
||||||
"LabelNew": "Ny",
|
"LabelNew": "Ny",
|
||||||
"LabelNewPassword": "Nytt lösenord",
|
"LabelNewPassword": "Nytt lösenord",
|
||||||
"LabelNewestAuthors": "Nyaste författare",
|
"LabelNewestAuthors": "Senast tillagda författare",
|
||||||
"LabelNewestEpisodes": "Nyaste avsnitt",
|
"LabelNewestEpisodes": "Senast tillagda avsnitt",
|
||||||
"LabelNextBackupDate": "Nästa säkerhetskopia datum",
|
"LabelNextBackupDate": "Nästa säkerhetskopia datum",
|
||||||
"LabelNextScheduledRun": "Nästa schemalagda körning",
|
"LabelNextScheduledRun": "Nästa schemalagda körning",
|
||||||
"LabelNoEpisodesSelected": "Inga avsnitt valda",
|
"LabelNoEpisodesSelected": "Inga avsnitt valda",
|
||||||
@@ -355,8 +359,10 @@
|
|||||||
"LabelPhotoPathURL": "Bildsökväg/URL",
|
"LabelPhotoPathURL": "Bildsökväg/URL",
|
||||||
"LabelPlayMethod": "Spelläge",
|
"LabelPlayMethod": "Spelläge",
|
||||||
"LabelPlaylists": "Spellistor",
|
"LabelPlaylists": "Spellistor",
|
||||||
|
"LabelPodcast": "Podcast",
|
||||||
"LabelPodcastSearchRegion": "Podcast-sökområde",
|
"LabelPodcastSearchRegion": "Podcast-sökområde",
|
||||||
"LabelPodcastType": "Podcasttyp",
|
"LabelPodcastType": "Podcasttyp",
|
||||||
|
"LabelPodcasts": "Podcasts",
|
||||||
"LabelPrefixesToIgnore": "Prefix att ignorera (skiftlägesokänsligt)",
|
"LabelPrefixesToIgnore": "Prefix att ignorera (skiftlägesokänsligt)",
|
||||||
"LabelPreventIndexing": "Förhindra att ditt flöde indexeras av iTunes och Google-podcastsökmotorer",
|
"LabelPreventIndexing": "Förhindra att ditt flöde indexeras av iTunes och Google-podcastsökmotorer",
|
||||||
"LabelPrimaryEbook": "Primär e-bok",
|
"LabelPrimaryEbook": "Primär e-bok",
|
||||||
@@ -371,6 +377,7 @@
|
|||||||
"LabelRSSFeedPreventIndexing": "Förhindra indexering",
|
"LabelRSSFeedPreventIndexing": "Förhindra indexering",
|
||||||
"LabelRSSFeedSlug": "RSS-flödesslag",
|
"LabelRSSFeedSlug": "RSS-flödesslag",
|
||||||
"LabelRSSFeedURL": "RSS-flöde URL",
|
"LabelRSSFeedURL": "RSS-flöde URL",
|
||||||
|
"LabelRandomly": "Slumpartat",
|
||||||
"LabelRead": "Läst",
|
"LabelRead": "Läst",
|
||||||
"LabelReadAgain": "Läs igen",
|
"LabelReadAgain": "Läs igen",
|
||||||
"LabelReadEbookWithoutProgress": "Läs e-bok utan att behålla framsteg",
|
"LabelReadEbookWithoutProgress": "Läs e-bok utan att behålla framsteg",
|
||||||
@@ -430,6 +437,7 @@
|
|||||||
"LabelShowAll": "Visa alla",
|
"LabelShowAll": "Visa alla",
|
||||||
"LabelSize": "Storlek",
|
"LabelSize": "Storlek",
|
||||||
"LabelSleepTimer": "Sleeptimer",
|
"LabelSleepTimer": "Sleeptimer",
|
||||||
|
"LabelStart": "Starta",
|
||||||
"LabelStartTime": "Starttid",
|
"LabelStartTime": "Starttid",
|
||||||
"LabelStarted": "Startad",
|
"LabelStarted": "Startad",
|
||||||
"LabelStartedAt": "Startad vid",
|
"LabelStartedAt": "Startad vid",
|
||||||
@@ -637,10 +645,8 @@
|
|||||||
"PlaceholderNewPlaylist": "Nytt spellistanamn",
|
"PlaceholderNewPlaylist": "Nytt spellistanamn",
|
||||||
"PlaceholderSearch": "Sök...",
|
"PlaceholderSearch": "Sök...",
|
||||||
"PlaceholderSearchEpisode": "Sök avsnitt...",
|
"PlaceholderSearchEpisode": "Sök avsnitt...",
|
||||||
"ToastAccountUpdateFailed": "Det gick inte att uppdatera kontot",
|
|
||||||
"ToastAccountUpdateSuccess": "Kontot uppdaterat",
|
"ToastAccountUpdateSuccess": "Kontot uppdaterat",
|
||||||
"ToastAuthorImageRemoveSuccess": "Författarens bild borttagen",
|
"ToastAuthorImageRemoveSuccess": "Författarens bild borttagen",
|
||||||
"ToastAuthorUpdateFailed": "Det gick inte att uppdatera författaren",
|
|
||||||
"ToastAuthorUpdateMerged": "Författaren sammanslagen",
|
"ToastAuthorUpdateMerged": "Författaren sammanslagen",
|
||||||
"ToastAuthorUpdateSuccess": "Författaren uppdaterad",
|
"ToastAuthorUpdateSuccess": "Författaren uppdaterad",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Författaren uppdaterad (ingen bild hittad)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Författaren uppdaterad (ingen bild hittad)",
|
||||||
@@ -656,17 +662,13 @@
|
|||||||
"ToastBookmarkCreateFailed": "Det gick inte att skapa bokmärket",
|
"ToastBookmarkCreateFailed": "Det gick inte att skapa bokmärket",
|
||||||
"ToastBookmarkCreateSuccess": "Bokmärket tillagt",
|
"ToastBookmarkCreateSuccess": "Bokmärket tillagt",
|
||||||
"ToastBookmarkRemoveSuccess": "Bokmärket borttaget",
|
"ToastBookmarkRemoveSuccess": "Bokmärket borttaget",
|
||||||
"ToastBookmarkUpdateFailed": "Det gick inte att uppdatera bokmärket",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Bokmärket uppdaterat",
|
"ToastBookmarkUpdateSuccess": "Bokmärket uppdaterat",
|
||||||
"ToastChaptersHaveErrors": "Kapitlen har fel",
|
"ToastChaptersHaveErrors": "Kapitlen har fel",
|
||||||
"ToastChaptersMustHaveTitles": "Kapitel måste ha titlar",
|
"ToastChaptersMustHaveTitles": "Kapitel måste ha titlar",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Objekt borttagna från samlingen",
|
"ToastCollectionItemsRemoveSuccess": "Objekt borttagna från samlingen",
|
||||||
"ToastCollectionRemoveSuccess": "Samlingen borttagen",
|
"ToastCollectionRemoveSuccess": "Samlingen borttagen",
|
||||||
"ToastCollectionUpdateFailed": "Det gick inte att uppdatera samlingen",
|
|
||||||
"ToastCollectionUpdateSuccess": "Samlingen uppdaterad",
|
"ToastCollectionUpdateSuccess": "Samlingen uppdaterad",
|
||||||
"ToastItemCoverUpdateFailed": "Det gick inte att uppdatera objektets omslag",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Objektets omslag uppdaterat",
|
"ToastItemCoverUpdateSuccess": "Objektets omslag uppdaterat",
|
||||||
"ToastItemDetailsUpdateFailed": "Det gick inte att uppdatera objektdetaljerna",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Objektdetaljer uppdaterade",
|
"ToastItemDetailsUpdateSuccess": "Objektdetaljer uppdaterade",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Misslyckades med att markera som färdig",
|
"ToastItemMarkedAsFinishedFailed": "Misslyckades med att markera som färdig",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Objekt markerat som färdig",
|
"ToastItemMarkedAsFinishedSuccess": "Objekt markerat som färdig",
|
||||||
@@ -678,12 +680,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Biblioteket borttaget",
|
"ToastLibraryDeleteSuccess": "Biblioteket borttaget",
|
||||||
"ToastLibraryScanFailedToStart": "Misslyckades med att starta skanningen",
|
"ToastLibraryScanFailedToStart": "Misslyckades med att starta skanningen",
|
||||||
"ToastLibraryScanStarted": "Skanning av biblioteket påbörjad",
|
"ToastLibraryScanStarted": "Skanning av biblioteket påbörjad",
|
||||||
"ToastLibraryUpdateFailed": "Det gick inte att uppdatera biblioteket",
|
|
||||||
"ToastLibraryUpdateSuccess": "Biblioteket \"{0}\" uppdaterat",
|
"ToastLibraryUpdateSuccess": "Biblioteket \"{0}\" uppdaterat",
|
||||||
"ToastPlaylistCreateFailed": "Det gick inte att skapa spellistan",
|
"ToastPlaylistCreateFailed": "Det gick inte att skapa spellistan",
|
||||||
"ToastPlaylistCreateSuccess": "Spellistan skapad",
|
"ToastPlaylistCreateSuccess": "Spellistan skapad",
|
||||||
"ToastPlaylistRemoveSuccess": "Spellistan borttagen",
|
"ToastPlaylistRemoveSuccess": "Spellistan borttagen",
|
||||||
"ToastPlaylistUpdateFailed": "Det gick inte att uppdatera spellistan",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Spellistan uppdaterad",
|
"ToastPlaylistUpdateSuccess": "Spellistan uppdaterad",
|
||||||
"ToastPodcastCreateFailed": "Misslyckades med att skapa podcasten",
|
"ToastPodcastCreateFailed": "Misslyckades med att skapa podcasten",
|
||||||
"ToastPodcastCreateSuccess": "Podcasten skapad framgångsrikt",
|
"ToastPodcastCreateSuccess": "Podcasten skapad framgångsrikt",
|
||||||
|
|||||||
@@ -785,10 +785,8 @@
|
|||||||
"StatsTopNarrators": "УЛЮБЛЕНІ ЧИТЦІ",
|
"StatsTopNarrators": "УЛЮБЛЕНІ ЧИТЦІ",
|
||||||
"StatsTotalDuration": "Загальною довжиною…",
|
"StatsTotalDuration": "Загальною довжиною…",
|
||||||
"StatsYearInReview": "ОГЛЯД РОКУ",
|
"StatsYearInReview": "ОГЛЯД РОКУ",
|
||||||
"ToastAccountUpdateFailed": "Не вдалося оновити профіль",
|
|
||||||
"ToastAccountUpdateSuccess": "Профіль оновлено",
|
"ToastAccountUpdateSuccess": "Профіль оновлено",
|
||||||
"ToastAuthorImageRemoveSuccess": "Фото автора видалено",
|
"ToastAuthorImageRemoveSuccess": "Фото автора видалено",
|
||||||
"ToastAuthorUpdateFailed": "Не вдалося оновити автора",
|
|
||||||
"ToastAuthorUpdateMerged": "Автора об'єднано",
|
"ToastAuthorUpdateMerged": "Автора об'єднано",
|
||||||
"ToastAuthorUpdateSuccess": "Автора оновлено",
|
"ToastAuthorUpdateSuccess": "Автора оновлено",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Автора оновлено (фото не знайдено)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Автора оновлено (фото не знайдено)",
|
||||||
@@ -804,7 +802,6 @@
|
|||||||
"ToastBookmarkCreateFailed": "Не вдалося створити закладку",
|
"ToastBookmarkCreateFailed": "Не вдалося створити закладку",
|
||||||
"ToastBookmarkCreateSuccess": "Закладку додано",
|
"ToastBookmarkCreateSuccess": "Закладку додано",
|
||||||
"ToastBookmarkRemoveSuccess": "Закладку видалено",
|
"ToastBookmarkRemoveSuccess": "Закладку видалено",
|
||||||
"ToastBookmarkUpdateFailed": "Не вдалося оновити закладку",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Закладку оновлено",
|
"ToastBookmarkUpdateSuccess": "Закладку оновлено",
|
||||||
"ToastCachePurgeFailed": "Не вдалося очистити кеш",
|
"ToastCachePurgeFailed": "Не вдалося очистити кеш",
|
||||||
"ToastCachePurgeSuccess": "Кеш очищено",
|
"ToastCachePurgeSuccess": "Кеш очищено",
|
||||||
@@ -812,15 +809,12 @@
|
|||||||
"ToastChaptersMustHaveTitles": "Глави повинні мати назви",
|
"ToastChaptersMustHaveTitles": "Глави повинні мати назви",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Елемент(и) видалено з добірки",
|
"ToastCollectionItemsRemoveSuccess": "Елемент(и) видалено з добірки",
|
||||||
"ToastCollectionRemoveSuccess": "Добірку видалено",
|
"ToastCollectionRemoveSuccess": "Добірку видалено",
|
||||||
"ToastCollectionUpdateFailed": "Не вдалося оновити добірку",
|
|
||||||
"ToastCollectionUpdateSuccess": "Добірку оновлено",
|
"ToastCollectionUpdateSuccess": "Добірку оновлено",
|
||||||
"ToastDeleteFileFailed": "Не вдалося видалити файл",
|
"ToastDeleteFileFailed": "Не вдалося видалити файл",
|
||||||
"ToastDeleteFileSuccess": "Файл видалено",
|
"ToastDeleteFileSuccess": "Файл видалено",
|
||||||
"ToastErrorCannotShare": "Не можна типово поширити на цей пристрій",
|
"ToastErrorCannotShare": "Не можна типово поширити на цей пристрій",
|
||||||
"ToastFailedToLoadData": "Не вдалося завантажити дані",
|
"ToastFailedToLoadData": "Не вдалося завантажити дані",
|
||||||
"ToastItemCoverUpdateFailed": "Не вдалося оновити обкладинку",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Обкладинку елемента оновлено",
|
"ToastItemCoverUpdateSuccess": "Обкладинку елемента оновлено",
|
||||||
"ToastItemDetailsUpdateFailed": "Не вдалося оновити подробиці елемента",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Подробиці про елемент оновлено",
|
"ToastItemDetailsUpdateSuccess": "Подробиці про елемент оновлено",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Не вдалося позначити як завершене",
|
"ToastItemMarkedAsFinishedFailed": "Не вдалося позначити як завершене",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Елемент позначено як завершений",
|
"ToastItemMarkedAsFinishedSuccess": "Елемент позначено як завершений",
|
||||||
@@ -832,12 +826,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Бібліотеку видалено",
|
"ToastLibraryDeleteSuccess": "Бібліотеку видалено",
|
||||||
"ToastLibraryScanFailedToStart": "Не вдалося розпочати сканування",
|
"ToastLibraryScanFailedToStart": "Не вдалося розпочати сканування",
|
||||||
"ToastLibraryScanStarted": "Почалося сканування бібліотеки",
|
"ToastLibraryScanStarted": "Почалося сканування бібліотеки",
|
||||||
"ToastLibraryUpdateFailed": "Не вдалося оновити бібліотеку",
|
|
||||||
"ToastLibraryUpdateSuccess": "Бібліотеку \"{0}\" оновлено",
|
"ToastLibraryUpdateSuccess": "Бібліотеку \"{0}\" оновлено",
|
||||||
"ToastPlaylistCreateFailed": "Не вдалося створити список",
|
"ToastPlaylistCreateFailed": "Не вдалося створити список",
|
||||||
"ToastPlaylistCreateSuccess": "Список відтворення створено",
|
"ToastPlaylistCreateSuccess": "Список відтворення створено",
|
||||||
"ToastPlaylistRemoveSuccess": "Список відтворення видалено",
|
"ToastPlaylistRemoveSuccess": "Список відтворення видалено",
|
||||||
"ToastPlaylistUpdateFailed": "Не вдалося оновити список",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Список відтворення оновлено",
|
"ToastPlaylistUpdateSuccess": "Список відтворення оновлено",
|
||||||
"ToastPodcastCreateFailed": "Не вдалося створити подкаст",
|
"ToastPodcastCreateFailed": "Не вдалося створити подкаст",
|
||||||
"ToastPodcastCreateSuccess": "Подкаст успішно створено",
|
"ToastPodcastCreateSuccess": "Подкаст успішно створено",
|
||||||
@@ -849,7 +841,6 @@
|
|||||||
"ToastSendEbookToDeviceSuccess": "Електронну книгу надіслано на пристрій \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "Електронну книгу надіслано на пристрій \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "Не вдалося оновити серію",
|
"ToastSeriesUpdateFailed": "Не вдалося оновити серію",
|
||||||
"ToastSeriesUpdateSuccess": "Серію успішно оновлено",
|
"ToastSeriesUpdateSuccess": "Серію успішно оновлено",
|
||||||
"ToastServerSettingsUpdateFailed": "Не вдалося оновити налаштування сервера",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "Налаштування сервера оновлено",
|
"ToastServerSettingsUpdateSuccess": "Налаштування сервера оновлено",
|
||||||
"ToastSessionDeleteFailed": "Не вдалося видалити сесію",
|
"ToastSessionDeleteFailed": "Не вдалося видалити сесію",
|
||||||
"ToastSessionDeleteSuccess": "Сесію видалено",
|
"ToastSessionDeleteSuccess": "Сесію видалено",
|
||||||
@@ -857,7 +848,6 @@
|
|||||||
"ToastSocketDisconnected": "Сокет від'єднано",
|
"ToastSocketDisconnected": "Сокет від'єднано",
|
||||||
"ToastSocketFailedToConnect": "Не вдалося під'єднатися до сокета",
|
"ToastSocketFailedToConnect": "Не вдалося під'єднатися до сокета",
|
||||||
"ToastSortingPrefixesEmptyError": "Мусить мати хоча б 1 префікс сортування",
|
"ToastSortingPrefixesEmptyError": "Мусить мати хоча б 1 префікс сортування",
|
||||||
"ToastSortingPrefixesUpdateFailed": "Не вдалося оновити префікси сортування",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Префікси сортування оновлено ({0})",
|
"ToastSortingPrefixesUpdateSuccess": "Префікси сортування оновлено ({0})",
|
||||||
"ToastUserDeleteFailed": "Не вдалося видалити користувача",
|
"ToastUserDeleteFailed": "Не вдалося видалити користувача",
|
||||||
"ToastUserDeleteSuccess": "Користувача видалено"
|
"ToastUserDeleteSuccess": "Користувача видалено"
|
||||||
|
|||||||
@@ -663,10 +663,8 @@
|
|||||||
"PlaceholderNewPlaylist": "Tên danh sách phát mới",
|
"PlaceholderNewPlaylist": "Tên danh sách phát mới",
|
||||||
"PlaceholderSearch": "Tìm kiếm..",
|
"PlaceholderSearch": "Tìm kiếm..",
|
||||||
"PlaceholderSearchEpisode": "Tìm kiếm tập..",
|
"PlaceholderSearchEpisode": "Tìm kiếm tập..",
|
||||||
"ToastAccountUpdateFailed": "Cập nhật tài khoản thất bại",
|
|
||||||
"ToastAccountUpdateSuccess": "Tài khoản đã được cập nhật",
|
"ToastAccountUpdateSuccess": "Tài khoản đã được cập nhật",
|
||||||
"ToastAuthorImageRemoveSuccess": "Ảnh tác giả đã được xóa",
|
"ToastAuthorImageRemoveSuccess": "Ảnh tác giả đã được xóa",
|
||||||
"ToastAuthorUpdateFailed": "Cập nhật tác giả thất bại",
|
|
||||||
"ToastAuthorUpdateMerged": "Tác giả đã được hợp nhất",
|
"ToastAuthorUpdateMerged": "Tác giả đã được hợp nhất",
|
||||||
"ToastAuthorUpdateSuccess": "Cập nhật tác giả thành công",
|
"ToastAuthorUpdateSuccess": "Cập nhật tác giả thành công",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Cập nhật tác giả thành công (không tìm thấy ảnh)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Cập nhật tác giả thành công (không tìm thấy ảnh)",
|
||||||
@@ -682,17 +680,13 @@
|
|||||||
"ToastBookmarkCreateFailed": "Tạo đánh dấu thất bại",
|
"ToastBookmarkCreateFailed": "Tạo đánh dấu thất bại",
|
||||||
"ToastBookmarkCreateSuccess": "Đã thêm đánh dấu",
|
"ToastBookmarkCreateSuccess": "Đã thêm đánh dấu",
|
||||||
"ToastBookmarkRemoveSuccess": "Đánh dấu đã được xóa",
|
"ToastBookmarkRemoveSuccess": "Đánh dấu đã được xóa",
|
||||||
"ToastBookmarkUpdateFailed": "Cập nhật đánh dấu thất bại",
|
|
||||||
"ToastBookmarkUpdateSuccess": "Đánh dấu đã được cập nhật",
|
"ToastBookmarkUpdateSuccess": "Đánh dấu đã được cập nhật",
|
||||||
"ToastChaptersHaveErrors": "Các chương có lỗi",
|
"ToastChaptersHaveErrors": "Các chương có lỗi",
|
||||||
"ToastChaptersMustHaveTitles": "Các chương phải có tiêu đề",
|
"ToastChaptersMustHaveTitles": "Các chương phải có tiêu đề",
|
||||||
"ToastCollectionItemsRemoveSuccess": "Mục đã được xóa khỏi bộ sưu tập",
|
"ToastCollectionItemsRemoveSuccess": "Mục đã được xóa khỏi bộ sưu tập",
|
||||||
"ToastCollectionRemoveSuccess": "Bộ sưu tập đã được xóa",
|
"ToastCollectionRemoveSuccess": "Bộ sưu tập đã được xóa",
|
||||||
"ToastCollectionUpdateFailed": "Cập nhật bộ sưu tập thất bại",
|
|
||||||
"ToastCollectionUpdateSuccess": "Bộ sưu tập đã được cập nhật",
|
"ToastCollectionUpdateSuccess": "Bộ sưu tập đã được cập nhật",
|
||||||
"ToastItemCoverUpdateFailed": "Cập nhật ảnh bìa mục thất bại",
|
|
||||||
"ToastItemCoverUpdateSuccess": "Ảnh bìa mục đã được cập nhật",
|
"ToastItemCoverUpdateSuccess": "Ảnh bìa mục đã được cập nhật",
|
||||||
"ToastItemDetailsUpdateFailed": "Cập nhật chi tiết mục thất bại",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "Chi tiết mục đã được cập nhật",
|
"ToastItemDetailsUpdateSuccess": "Chi tiết mục đã được cập nhật",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Đánh dấu mục là Hoàn thành thất bại",
|
"ToastItemMarkedAsFinishedFailed": "Đánh dấu mục là Hoàn thành thất bại",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Mục đã được đánh dấu là Hoàn thành",
|
"ToastItemMarkedAsFinishedSuccess": "Mục đã được đánh dấu là Hoàn thành",
|
||||||
@@ -704,12 +698,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "Thư viện đã được xóa",
|
"ToastLibraryDeleteSuccess": "Thư viện đã được xóa",
|
||||||
"ToastLibraryScanFailedToStart": "Không thể bắt đầu quét thư viện",
|
"ToastLibraryScanFailedToStart": "Không thể bắt đầu quét thư viện",
|
||||||
"ToastLibraryScanStarted": "Quét thư viện đã được bắt đầu",
|
"ToastLibraryScanStarted": "Quét thư viện đã được bắt đầu",
|
||||||
"ToastLibraryUpdateFailed": "Cập nhật thư viện thất bại",
|
|
||||||
"ToastLibraryUpdateSuccess": "Thư viện \"{0}\" đã được cập nhật",
|
"ToastLibraryUpdateSuccess": "Thư viện \"{0}\" đã được cập nhật",
|
||||||
"ToastPlaylistCreateFailed": "Tạo danh sách phát thất bại",
|
"ToastPlaylistCreateFailed": "Tạo danh sách phát thất bại",
|
||||||
"ToastPlaylistCreateSuccess": "Danh sách phát đã được tạo",
|
"ToastPlaylistCreateSuccess": "Danh sách phát đã được tạo",
|
||||||
"ToastPlaylistRemoveSuccess": "Danh sách phát đã được xóa",
|
"ToastPlaylistRemoveSuccess": "Danh sách phát đã được xóa",
|
||||||
"ToastPlaylistUpdateFailed": "Cập nhật danh sách phát thất bại",
|
|
||||||
"ToastPlaylistUpdateSuccess": "Danh sách phát đã được cập nhật",
|
"ToastPlaylistUpdateSuccess": "Danh sách phát đã được cập nhật",
|
||||||
"ToastPodcastCreateFailed": "Tạo podcast thất bại",
|
"ToastPodcastCreateFailed": "Tạo podcast thất bại",
|
||||||
"ToastPodcastCreateSuccess": "Podcast đã được tạo thành công",
|
"ToastPodcastCreateSuccess": "Podcast đã được tạo thành công",
|
||||||
|
|||||||
+150
-20
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "增加",
|
"ButtonAdd": "添加",
|
||||||
"ButtonAddChapters": "添加章节",
|
"ButtonAddChapters": "添加章节",
|
||||||
"ButtonAddDevice": "添加设备",
|
"ButtonAddDevice": "添加设备",
|
||||||
"ButtonAddLibrary": "添加库",
|
"ButtonAddLibrary": "添加库",
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
"ButtonChooseFiles": "选择文件",
|
"ButtonChooseFiles": "选择文件",
|
||||||
"ButtonClearFilter": "清除过滤器",
|
"ButtonClearFilter": "清除过滤器",
|
||||||
"ButtonCloseFeed": "关闭源",
|
"ButtonCloseFeed": "关闭源",
|
||||||
|
"ButtonCloseSession": "关闭开放会话",
|
||||||
"ButtonCollections": "收藏",
|
"ButtonCollections": "收藏",
|
||||||
"ButtonConfigureScanner": "配置扫描",
|
"ButtonConfigureScanner": "配置扫描",
|
||||||
"ButtonCreate": "创建",
|
"ButtonCreate": "创建",
|
||||||
@@ -28,6 +29,9 @@
|
|||||||
"ButtonEdit": "编辑",
|
"ButtonEdit": "编辑",
|
||||||
"ButtonEditChapters": "编辑章节",
|
"ButtonEditChapters": "编辑章节",
|
||||||
"ButtonEditPodcast": "编辑播客",
|
"ButtonEditPodcast": "编辑播客",
|
||||||
|
"ButtonEnable": "启用",
|
||||||
|
"ButtonFireAndFail": "故障和失败",
|
||||||
|
"ButtonFireOnTest": "测试事件触发",
|
||||||
"ButtonForceReScan": "强制重新扫描",
|
"ButtonForceReScan": "强制重新扫描",
|
||||||
"ButtonFullPath": "完整路径",
|
"ButtonFullPath": "完整路径",
|
||||||
"ButtonHide": "隐藏",
|
"ButtonHide": "隐藏",
|
||||||
@@ -43,18 +47,21 @@
|
|||||||
"ButtonMapChapterTitles": "章节标题结构",
|
"ButtonMapChapterTitles": "章节标题结构",
|
||||||
"ButtonMatchAllAuthors": "匹配所有作者",
|
"ButtonMatchAllAuthors": "匹配所有作者",
|
||||||
"ButtonMatchBooks": "匹配图书",
|
"ButtonMatchBooks": "匹配图书",
|
||||||
"ButtonNevermind": "没有关系",
|
"ButtonNevermind": "取消",
|
||||||
"ButtonNext": "下一个",
|
"ButtonNext": "下一个",
|
||||||
"ButtonNextChapter": "下一章节",
|
"ButtonNextChapter": "下一章节",
|
||||||
|
"ButtonNextItemInQueue": "队列中的下一个项目",
|
||||||
"ButtonOk": "确定",
|
"ButtonOk": "确定",
|
||||||
"ButtonOpenFeed": "打开源",
|
"ButtonOpenFeed": "打开源",
|
||||||
"ButtonOpenManager": "打开管理器",
|
"ButtonOpenManager": "打开管理器",
|
||||||
"ButtonPause": "暂停",
|
"ButtonPause": "暂停",
|
||||||
"ButtonPlay": "播放",
|
"ButtonPlay": "播放",
|
||||||
|
"ButtonPlayAll": "播放",
|
||||||
"ButtonPlaying": "正在播放",
|
"ButtonPlaying": "正在播放",
|
||||||
"ButtonPlaylists": "播放列表",
|
"ButtonPlaylists": "播放列表",
|
||||||
"ButtonPrevious": "上一个",
|
"ButtonPrevious": "上一个",
|
||||||
"ButtonPreviousChapter": "上一章节",
|
"ButtonPreviousChapter": "上一章节",
|
||||||
|
"ButtonProbeAudioFile": "探测音频文件",
|
||||||
"ButtonPurgeAllCache": "清理所有缓存",
|
"ButtonPurgeAllCache": "清理所有缓存",
|
||||||
"ButtonPurgeItemsCache": "清理项目缓存",
|
"ButtonPurgeItemsCache": "清理项目缓存",
|
||||||
"ButtonQueueAddItem": "添加到队列",
|
"ButtonQueueAddItem": "添加到队列",
|
||||||
@@ -92,6 +99,7 @@
|
|||||||
"ButtonStats": "统计数据",
|
"ButtonStats": "统计数据",
|
||||||
"ButtonSubmit": "提交",
|
"ButtonSubmit": "提交",
|
||||||
"ButtonTest": "测试",
|
"ButtonTest": "测试",
|
||||||
|
"ButtonUnlinkOpenId": "取消 OpenID 链接",
|
||||||
"ButtonUpload": "上传",
|
"ButtonUpload": "上传",
|
||||||
"ButtonUploadBackup": "上传备份",
|
"ButtonUploadBackup": "上传备份",
|
||||||
"ButtonUploadCover": "上传封面",
|
"ButtonUploadCover": "上传封面",
|
||||||
@@ -104,6 +112,7 @@
|
|||||||
"ErrorUploadFetchMetadataNoResults": "无法获取元数据 - 尝试更新标题和/或作者",
|
"ErrorUploadFetchMetadataNoResults": "无法获取元数据 - 尝试更新标题和/或作者",
|
||||||
"ErrorUploadLacksTitle": "必须有标题",
|
"ErrorUploadLacksTitle": "必须有标题",
|
||||||
"HeaderAccount": "帐户",
|
"HeaderAccount": "帐户",
|
||||||
|
"HeaderAddCustomMetadataProvider": "添加自定义元数据提供商",
|
||||||
"HeaderAdvanced": "高级",
|
"HeaderAdvanced": "高级",
|
||||||
"HeaderAppriseNotificationSettings": "测试通知设置",
|
"HeaderAppriseNotificationSettings": "测试通知设置",
|
||||||
"HeaderAudioTracks": "音轨",
|
"HeaderAudioTracks": "音轨",
|
||||||
@@ -118,7 +127,7 @@
|
|||||||
"HeaderCover": "封面",
|
"HeaderCover": "封面",
|
||||||
"HeaderCurrentDownloads": "当前下载",
|
"HeaderCurrentDownloads": "当前下载",
|
||||||
"HeaderCustomMessageOnLogin": "登录时的自定义消息",
|
"HeaderCustomMessageOnLogin": "登录时的自定义消息",
|
||||||
"HeaderCustomMetadataProviders": "自定义元数据提供者",
|
"HeaderCustomMetadataProviders": "自定义元数据提供商",
|
||||||
"HeaderDetails": "详情",
|
"HeaderDetails": "详情",
|
||||||
"HeaderDownloadQueue": "下载队列",
|
"HeaderDownloadQueue": "下载队列",
|
||||||
"HeaderEbookFiles": "电子书文件",
|
"HeaderEbookFiles": "电子书文件",
|
||||||
@@ -126,7 +135,7 @@
|
|||||||
"HeaderEmailSettings": "邮箱设置",
|
"HeaderEmailSettings": "邮箱设置",
|
||||||
"HeaderEpisodes": "剧集",
|
"HeaderEpisodes": "剧集",
|
||||||
"HeaderEreaderDevices": "Ereader 设备",
|
"HeaderEreaderDevices": "Ereader 设备",
|
||||||
"HeaderEreaderSettings": "Ereader 设置",
|
"HeaderEreaderSettings": "电子阅读器设置",
|
||||||
"HeaderFiles": "文件",
|
"HeaderFiles": "文件",
|
||||||
"HeaderFindChapters": "查找章节",
|
"HeaderFindChapters": "查找章节",
|
||||||
"HeaderIgnoredFiles": "忽略的文件",
|
"HeaderIgnoredFiles": "忽略的文件",
|
||||||
@@ -149,6 +158,8 @@
|
|||||||
"HeaderMetadataToEmbed": "嵌入元数据",
|
"HeaderMetadataToEmbed": "嵌入元数据",
|
||||||
"HeaderNewAccount": "新建帐户",
|
"HeaderNewAccount": "新建帐户",
|
||||||
"HeaderNewLibrary": "新建媒体库",
|
"HeaderNewLibrary": "新建媒体库",
|
||||||
|
"HeaderNotificationCreate": "创建通知",
|
||||||
|
"HeaderNotificationUpdate": "更新通知",
|
||||||
"HeaderNotifications": "通知",
|
"HeaderNotifications": "通知",
|
||||||
"HeaderOpenIDConnectAuthentication": "OpenID 连接身份验证",
|
"HeaderOpenIDConnectAuthentication": "OpenID 连接身份验证",
|
||||||
"HeaderOpenRSSFeed": "打开 RSS 源",
|
"HeaderOpenRSSFeed": "打开 RSS 源",
|
||||||
@@ -206,6 +217,7 @@
|
|||||||
"LabelAddToPlaylist": "添加到播放列表",
|
"LabelAddToPlaylist": "添加到播放列表",
|
||||||
"LabelAddToPlaylistBatch": "添加 {0} 个项目到播放列表",
|
"LabelAddToPlaylistBatch": "添加 {0} 个项目到播放列表",
|
||||||
"LabelAddedAt": "添加于",
|
"LabelAddedAt": "添加于",
|
||||||
|
"LabelAddedDate": "添加 {0}",
|
||||||
"LabelAdminUsersOnly": "仅限管理员用户",
|
"LabelAdminUsersOnly": "仅限管理员用户",
|
||||||
"LabelAll": "全部",
|
"LabelAll": "全部",
|
||||||
"LabelAllUsers": "所有用户",
|
"LabelAllUsers": "所有用户",
|
||||||
@@ -235,6 +247,7 @@
|
|||||||
"LabelBitrate": "比特率",
|
"LabelBitrate": "比特率",
|
||||||
"LabelBooks": "图书",
|
"LabelBooks": "图书",
|
||||||
"LabelButtonText": "按钮文本",
|
"LabelButtonText": "按钮文本",
|
||||||
|
"LabelByAuthor": "由 {0}",
|
||||||
"LabelChangePassword": "修改密码",
|
"LabelChangePassword": "修改密码",
|
||||||
"LabelChannels": "声道",
|
"LabelChannels": "声道",
|
||||||
"LabelChapterTitle": "章节标题",
|
"LabelChapterTitle": "章节标题",
|
||||||
@@ -244,6 +257,7 @@
|
|||||||
"LabelClosePlayer": "关闭播放器",
|
"LabelClosePlayer": "关闭播放器",
|
||||||
"LabelCodec": "编解码",
|
"LabelCodec": "编解码",
|
||||||
"LabelCollapseSeries": "折叠系列",
|
"LabelCollapseSeries": "折叠系列",
|
||||||
|
"LabelCollapseSubSeries": "折叠子系列",
|
||||||
"LabelCollection": "收藏",
|
"LabelCollection": "收藏",
|
||||||
"LabelCollections": "收藏",
|
"LabelCollections": "收藏",
|
||||||
"LabelComplete": "已完成",
|
"LabelComplete": "已完成",
|
||||||
@@ -294,8 +308,10 @@
|
|||||||
"LabelEpisode": "剧集",
|
"LabelEpisode": "剧集",
|
||||||
"LabelEpisodeTitle": "剧集标题",
|
"LabelEpisodeTitle": "剧集标题",
|
||||||
"LabelEpisodeType": "剧集类型",
|
"LabelEpisodeType": "剧集类型",
|
||||||
|
"LabelEpisodes": "剧集",
|
||||||
"LabelExample": "示例",
|
"LabelExample": "示例",
|
||||||
"LabelExpandSeries": "展开系列",
|
"LabelExpandSeries": "展开系列",
|
||||||
|
"LabelExpandSubSeries": "展开子系列",
|
||||||
"LabelExplicit": "信息准确",
|
"LabelExplicit": "信息准确",
|
||||||
"LabelExplicitChecked": "明确(已选中)",
|
"LabelExplicitChecked": "明确(已选中)",
|
||||||
"LabelExplicitUnchecked": "不明确 (未选中)",
|
"LabelExplicitUnchecked": "不明确 (未选中)",
|
||||||
@@ -304,7 +320,9 @@
|
|||||||
"LabelFetchingMetadata": "正在获取元数据",
|
"LabelFetchingMetadata": "正在获取元数据",
|
||||||
"LabelFile": "文件",
|
"LabelFile": "文件",
|
||||||
"LabelFileBirthtime": "文件创建时间",
|
"LabelFileBirthtime": "文件创建时间",
|
||||||
|
"LabelFileBornDate": "生于 {0}",
|
||||||
"LabelFileModified": "文件修改时间",
|
"LabelFileModified": "文件修改时间",
|
||||||
|
"LabelFileModifiedDate": "已修改 {0}",
|
||||||
"LabelFilename": "文件名",
|
"LabelFilename": "文件名",
|
||||||
"LabelFilterByUser": "按用户筛选",
|
"LabelFilterByUser": "按用户筛选",
|
||||||
"LabelFindEpisodes": "查找剧集",
|
"LabelFindEpisodes": "查找剧集",
|
||||||
@@ -360,6 +378,7 @@
|
|||||||
"LabelLess": "较少",
|
"LabelLess": "较少",
|
||||||
"LabelLibrariesAccessibleToUser": "用户可访问的媒体库",
|
"LabelLibrariesAccessibleToUser": "用户可访问的媒体库",
|
||||||
"LabelLibrary": "媒体库",
|
"LabelLibrary": "媒体库",
|
||||||
|
"LabelLibraryFilterSublistEmpty": "没有 {0}",
|
||||||
"LabelLibraryItem": "媒体库项目",
|
"LabelLibraryItem": "媒体库项目",
|
||||||
"LabelLibraryName": "媒体库名称",
|
"LabelLibraryName": "媒体库名称",
|
||||||
"LabelLimit": "限制",
|
"LabelLimit": "限制",
|
||||||
@@ -371,13 +390,13 @@
|
|||||||
"LabelLookForNewEpisodesAfterDate": "在此日期后查找新剧集",
|
"LabelLookForNewEpisodesAfterDate": "在此日期后查找新剧集",
|
||||||
"LabelLowestPriority": "最低优先级",
|
"LabelLowestPriority": "最低优先级",
|
||||||
"LabelMatchExistingUsersBy": "匹配现有用户",
|
"LabelMatchExistingUsersBy": "匹配现有用户",
|
||||||
"LabelMatchExistingUsersByDescription": "用于连接现有用户. 连接后, 用户将通过SSO提供商提供的唯一 id 进行匹配",
|
"LabelMatchExistingUsersByDescription": "用于连接现有用户. 连接后, 用户将通过 SSO 提供商提供的唯一 id 进行匹配",
|
||||||
"LabelMediaPlayer": "媒体播放器",
|
"LabelMediaPlayer": "媒体播放器",
|
||||||
"LabelMediaType": "媒体类型",
|
"LabelMediaType": "媒体类型",
|
||||||
"LabelMetaTag": "元数据标签",
|
"LabelMetaTag": "元数据标签",
|
||||||
"LabelMetaTags": "元标签",
|
"LabelMetaTags": "元标签",
|
||||||
"LabelMetadataOrderOfPrecedenceDescription": "较高优先级的元数据源将覆盖较低优先级的元数据源",
|
"LabelMetadataOrderOfPrecedenceDescription": "较高优先级的元数据源将覆盖较低优先级的元数据源",
|
||||||
"LabelMetadataProvider": "元数据提供者",
|
"LabelMetadataProvider": "元数据提供商",
|
||||||
"LabelMinute": "分钟",
|
"LabelMinute": "分钟",
|
||||||
"LabelMinutes": "分钟",
|
"LabelMinutes": "分钟",
|
||||||
"LabelMissing": "丢失",
|
"LabelMissing": "丢失",
|
||||||
@@ -396,7 +415,7 @@
|
|||||||
"LabelNewestEpisodes": "最新剧集",
|
"LabelNewestEpisodes": "最新剧集",
|
||||||
"LabelNextBackupDate": "下次备份日期",
|
"LabelNextBackupDate": "下次备份日期",
|
||||||
"LabelNextScheduledRun": "下次任务运行",
|
"LabelNextScheduledRun": "下次任务运行",
|
||||||
"LabelNoCustomMetadataProviders": "没有自定义元数据提供程序",
|
"LabelNoCustomMetadataProviders": "没有自定义元数据提供商",
|
||||||
"LabelNoEpisodesSelected": "未选择任何剧集",
|
"LabelNoEpisodesSelected": "未选择任何剧集",
|
||||||
"LabelNotFinished": "未听完",
|
"LabelNotFinished": "未听完",
|
||||||
"LabelNotStarted": "未开始",
|
"LabelNotStarted": "未开始",
|
||||||
@@ -412,7 +431,7 @@
|
|||||||
"LabelNotificationsMaxQueueSizeHelp": "通知事件被限制为每秒触发 1 个. 如果队列处于最大大小, 则将忽略事件. 这可以防止通知垃圾邮件.",
|
"LabelNotificationsMaxQueueSizeHelp": "通知事件被限制为每秒触发 1 个. 如果队列处于最大大小, 则将忽略事件. 这可以防止通知垃圾邮件.",
|
||||||
"LabelNumberOfBooks": "图书数量",
|
"LabelNumberOfBooks": "图书数量",
|
||||||
"LabelNumberOfEpisodes": "# 集",
|
"LabelNumberOfEpisodes": "# 集",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "OpenID 声明的名称, 该声明包含应用程序内用户操作的高级权限, 该权限将应用于非管理员角色(<b>如果已配置</b>). 如果响应中缺少声明, 获取 ABS 的权限将被拒绝. 如果缺少单个选项, 它将被视为 <code>禁用</code>. 确保身份提供者的声明与预期结构匹配:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "OpenID 声明的名称, 该声明包含应用程序内用户操作的高级权限, 该权限将应用于非管理员角色(<b>如果已配置</b>). 如果响应中缺少声明, 获取 ABS 的权限将被拒绝. 如果缺少单个选项, 它将被视为 <code>禁用</code>. 确保身份提供商的声明与预期结构匹配:",
|
||||||
"LabelOpenIDClaims": "将以下选项留空以禁用高级组和权限分配, 然后自动分配 'User' 组.",
|
"LabelOpenIDClaims": "将以下选项留空以禁用高级组和权限分配, 然后自动分配 'User' 组.",
|
||||||
"LabelOpenIDGroupClaimDescription": "OpenID 声明的名称, 该声明包含用户组的列表. 通常称为<code>组</code><b>如果已配置</b>, 应用程序将根据用户的组成员身份自动分配角色, 前提是这些组在声明中以不区分大小写的方式命名为 'Admin', 'User' 或 'Guest'. 声明应包含一个列表, 如果用户属于多个组, 则应用程序将分配与最高访问级别相对应的角色. 如果没有组匹配, 访问将被拒绝.",
|
"LabelOpenIDGroupClaimDescription": "OpenID 声明的名称, 该声明包含用户组的列表. 通常称为<code>组</code><b>如果已配置</b>, 应用程序将根据用户的组成员身份自动分配角色, 前提是这些组在声明中以不区分大小写的方式命名为 'Admin', 'User' 或 'Guest'. 声明应包含一个列表, 如果用户属于多个组, 则应用程序将分配与最高访问级别相对应的角色. 如果没有组匹配, 访问将被拒绝.",
|
||||||
"LabelOpenRSSFeed": "打开 RSS 源",
|
"LabelOpenRSSFeed": "打开 RSS 源",
|
||||||
@@ -430,6 +449,7 @@
|
|||||||
"LabelPersonalYearReview": "你的年度回顾 ({0})",
|
"LabelPersonalYearReview": "你的年度回顾 ({0})",
|
||||||
"LabelPhotoPathURL": "图片路径或 URL",
|
"LabelPhotoPathURL": "图片路径或 URL",
|
||||||
"LabelPlayMethod": "播放方法",
|
"LabelPlayMethod": "播放方法",
|
||||||
|
"LabelPlayerChapterNumberMarker": "{0} 于 {1}",
|
||||||
"LabelPlaylists": "播放列表",
|
"LabelPlaylists": "播放列表",
|
||||||
"LabelPodcast": "播客",
|
"LabelPodcast": "播客",
|
||||||
"LabelPodcastSearchRegion": "播客搜索地区",
|
"LabelPodcastSearchRegion": "播客搜索地区",
|
||||||
@@ -440,9 +460,11 @@
|
|||||||
"LabelPreventIndexing": "防止 iTunes 和 Google 播客目录对你的源进行索引",
|
"LabelPreventIndexing": "防止 iTunes 和 Google 播客目录对你的源进行索引",
|
||||||
"LabelPrimaryEbook": "主电子书",
|
"LabelPrimaryEbook": "主电子书",
|
||||||
"LabelProgress": "进度",
|
"LabelProgress": "进度",
|
||||||
"LabelProvider": "供应商",
|
"LabelProvider": "提供商",
|
||||||
|
"LabelProviderAuthorizationValue": "授权标头值",
|
||||||
"LabelPubDate": "出版日期",
|
"LabelPubDate": "出版日期",
|
||||||
"LabelPublishYear": "发布年份",
|
"LabelPublishYear": "发布年份",
|
||||||
|
"LabelPublishedDate": "已发布 {0}",
|
||||||
"LabelPublisher": "出版商",
|
"LabelPublisher": "出版商",
|
||||||
"LabelPublishers": "出版商",
|
"LabelPublishers": "出版商",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "自定义所有者电子邮件",
|
"LabelRSSFeedCustomOwnerEmail": "自定义所有者电子邮件",
|
||||||
@@ -526,6 +548,7 @@
|
|||||||
"LabelShowSubtitles": "显示标题",
|
"LabelShowSubtitles": "显示标题",
|
||||||
"LabelSize": "文件大小",
|
"LabelSize": "文件大小",
|
||||||
"LabelSleepTimer": "睡眠定时",
|
"LabelSleepTimer": "睡眠定时",
|
||||||
|
"LabelSlug": "Slug",
|
||||||
"LabelStart": "开始",
|
"LabelStart": "开始",
|
||||||
"LabelStartTime": "开始时间",
|
"LabelStartTime": "开始时间",
|
||||||
"LabelStarted": "开始于",
|
"LabelStarted": "开始于",
|
||||||
@@ -587,6 +610,7 @@
|
|||||||
"LabelUnabridged": "未删节",
|
"LabelUnabridged": "未删节",
|
||||||
"LabelUndo": "撤消",
|
"LabelUndo": "撤消",
|
||||||
"LabelUnknown": "未知",
|
"LabelUnknown": "未知",
|
||||||
|
"LabelUnknownPublishDate": "未知发布日期",
|
||||||
"LabelUpdateCover": "更新封面",
|
"LabelUpdateCover": "更新封面",
|
||||||
"LabelUpdateCoverHelp": "找到匹配项时允许覆盖所选书籍存在的封面",
|
"LabelUpdateCoverHelp": "找到匹配项时允许覆盖所选书籍存在的封面",
|
||||||
"LabelUpdateDetails": "更新详细信息",
|
"LabelUpdateDetails": "更新详细信息",
|
||||||
@@ -635,16 +659,22 @@
|
|||||||
"MessageCheckingCron": "检查计划任务...",
|
"MessageCheckingCron": "检查计划任务...",
|
||||||
"MessageConfirmCloseFeed": "你确定要关闭此订阅源吗?",
|
"MessageConfirmCloseFeed": "你确定要关闭此订阅源吗?",
|
||||||
"MessageConfirmDeleteBackup": "你确定要删除备份 {0}?",
|
"MessageConfirmDeleteBackup": "你确定要删除备份 {0}?",
|
||||||
|
"MessageConfirmDeleteDevice": "您确定要删除电子阅读器设备 \"{0}\" 吗?",
|
||||||
"MessageConfirmDeleteFile": "这将从文件系统中删除该文件. 你确定吗?",
|
"MessageConfirmDeleteFile": "这将从文件系统中删除该文件. 你确定吗?",
|
||||||
"MessageConfirmDeleteLibrary": "你确定要永久删除媒体库 \"{0}\"?",
|
"MessageConfirmDeleteLibrary": "你确定要永久删除媒体库 \"{0}\"?",
|
||||||
"MessageConfirmDeleteLibraryItem": "这将从数据库和文件系统中删除库项目. 你确定吗?",
|
"MessageConfirmDeleteLibraryItem": "这将从数据库和文件系统中删除库项目. 你确定吗?",
|
||||||
"MessageConfirmDeleteLibraryItems": "这将从数据库和文件系统中删除 {0} 个库项目. 你确定吗?",
|
"MessageConfirmDeleteLibraryItems": "这将从数据库和文件系统中删除 {0} 个库项目. 你确定吗?",
|
||||||
|
"MessageConfirmDeleteMetadataProvider": "是否确实要删除自定义元数据提供商 \"{0}\" ?",
|
||||||
|
"MessageConfirmDeleteNotification": "您确定要删除此通知吗?",
|
||||||
"MessageConfirmDeleteSession": "你确定要删除此会话吗?",
|
"MessageConfirmDeleteSession": "你确定要删除此会话吗?",
|
||||||
"MessageConfirmForceReScan": "你确定要强制重新扫描吗?",
|
"MessageConfirmForceReScan": "你确定要强制重新扫描吗?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "你确定要将所有剧集都标记为已完成吗?",
|
"MessageConfirmMarkAllEpisodesFinished": "你确定要将所有剧集都标记为已完成吗?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "你确定要将所有剧集都标记为未完成吗?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "你确定要将所有剧集都标记为未完成吗?",
|
||||||
|
"MessageConfirmMarkItemFinished": "您确定要将 \"{0}\" 标记为已完成吗?",
|
||||||
|
"MessageConfirmMarkItemNotFinished": "您确定要将 \"{0}\" 标记为未完成吗?",
|
||||||
"MessageConfirmMarkSeriesFinished": "你确定要将此系列中的所有书籍都标记为已听完吗?",
|
"MessageConfirmMarkSeriesFinished": "你确定要将此系列中的所有书籍都标记为已听完吗?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "你确定要将此系列中的所有书籍都标记为未听完吗?",
|
"MessageConfirmMarkSeriesNotFinished": "你确定要将此系列中的所有书籍都标记为未听完吗?",
|
||||||
|
"MessageConfirmNotificationTestTrigger": "使用测试数据触发此通知吗?",
|
||||||
"MessageConfirmPurgeCache": "清除缓存将删除 <code>/metadata/cache</code> 整个目录. <br /><br />你确定要删除缓存目录吗?",
|
"MessageConfirmPurgeCache": "清除缓存将删除 <code>/metadata/cache</code> 整个目录. <br /><br />你确定要删除缓存目录吗?",
|
||||||
"MessageConfirmPurgeItemsCache": "清除项目缓存将删除 <code>/metadata/cache/items</code> 整个目录.<br />你确定吗?",
|
"MessageConfirmPurgeItemsCache": "清除项目缓存将删除 <code>/metadata/cache/items</code> 整个目录.<br />你确定吗?",
|
||||||
"MessageConfirmQuickEmbed": "警告! 快速嵌入不会备份你的音频文件. 确保你有音频文件的备份. <br><br>你是否想继续吗?",
|
"MessageConfirmQuickEmbed": "警告! 快速嵌入不会备份你的音频文件. 确保你有音频文件的备份. <br><br>你是否想继续吗?",
|
||||||
@@ -663,7 +693,9 @@
|
|||||||
"MessageConfirmRenameTag": "你确定要将所有项目标签 \"{0}\" 重命名到 \"{1}\"?",
|
"MessageConfirmRenameTag": "你确定要将所有项目标签 \"{0}\" 重命名到 \"{1}\"?",
|
||||||
"MessageConfirmRenameTagMergeNote": "注意: 该标签已经存在, 因此它们将被合并.",
|
"MessageConfirmRenameTagMergeNote": "注意: 该标签已经存在, 因此它们将被合并.",
|
||||||
"MessageConfirmRenameTagWarning": "警告! 已经存在有大小写不同的类似标签 \"{0}\".",
|
"MessageConfirmRenameTagWarning": "警告! 已经存在有大小写不同的类似标签 \"{0}\".",
|
||||||
|
"MessageConfirmResetProgress": "你确定要重置进度吗?",
|
||||||
"MessageConfirmSendEbookToDevice": "你确定要发送 {0} 电子书 \"{1}\" 到设备 \"{2}\"?",
|
"MessageConfirmSendEbookToDevice": "你确定要发送 {0} 电子书 \"{1}\" 到设备 \"{2}\"?",
|
||||||
|
"MessageConfirmUnlinkOpenId": "您确定要取消该用户与 OpenID 的链接吗?",
|
||||||
"MessageDownloadingEpisode": "正在下载剧集",
|
"MessageDownloadingEpisode": "正在下载剧集",
|
||||||
"MessageDragFilesIntoTrackOrder": "将文件拖动到正确的音轨顺序",
|
"MessageDragFilesIntoTrackOrder": "将文件拖动到正确的音轨顺序",
|
||||||
"MessageEmbedFailed": "嵌入失败!",
|
"MessageEmbedFailed": "嵌入失败!",
|
||||||
@@ -698,6 +730,7 @@
|
|||||||
"MessageNoCollections": "没有收藏",
|
"MessageNoCollections": "没有收藏",
|
||||||
"MessageNoCoversFound": "没有找到封面",
|
"MessageNoCoversFound": "没有找到封面",
|
||||||
"MessageNoDescription": "没有描述",
|
"MessageNoDescription": "没有描述",
|
||||||
|
"MessageNoDevices": "没有设备",
|
||||||
"MessageNoDownloadsInProgress": "当前没有正在进行的下载",
|
"MessageNoDownloadsInProgress": "当前没有正在进行的下载",
|
||||||
"MessageNoDownloadsQueued": "下载队列无任务",
|
"MessageNoDownloadsQueued": "下载队列无任务",
|
||||||
"MessageNoEpisodeMatchesFound": "没有找到任何剧集匹配项",
|
"MessageNoEpisodeMatchesFound": "没有找到任何剧集匹配项",
|
||||||
@@ -725,6 +758,7 @@
|
|||||||
"MessagePauseChapter": "暂停章节播放",
|
"MessagePauseChapter": "暂停章节播放",
|
||||||
"MessagePlayChapter": "开始章节播放",
|
"MessagePlayChapter": "开始章节播放",
|
||||||
"MessagePlaylistCreateFromCollection": "从收藏中创建播放列表",
|
"MessagePlaylistCreateFromCollection": "从收藏中创建播放列表",
|
||||||
|
"MessagePleaseWait": "请稍等...",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "播客没有可用于匹配 RSS 源的 url",
|
"MessagePodcastHasNoRSSFeedForMatching": "播客没有可用于匹配 RSS 源的 url",
|
||||||
"MessageQuickMatchDescription": "使用来自 '{0}' 的第一个匹配结果填充空白详细信息和封面. 除非启用 '首选匹配元数据' 服务器设置, 否则不会覆盖详细信息.",
|
"MessageQuickMatchDescription": "使用来自 '{0}' 的第一个匹配结果填充空白详细信息和封面. 除非启用 '首选匹配元数据' 服务器设置, 否则不会覆盖详细信息.",
|
||||||
"MessageRemoveChapter": "移除章节",
|
"MessageRemoveChapter": "移除章节",
|
||||||
@@ -743,6 +777,38 @@
|
|||||||
"MessageShareExpiresIn": "到期时间 {0}",
|
"MessageShareExpiresIn": "到期时间 {0}",
|
||||||
"MessageShareURLWillBe": "分享网址是 <strong>{0}</strong>",
|
"MessageShareURLWillBe": "分享网址是 <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "开始播放 \"{0}\" 在 {1}?",
|
"MessageStartPlaybackAtTime": "开始播放 \"{0}\" 在 {1}?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "音频文件 \"{0}\" 不可写",
|
||||||
|
"MessageTaskCanceledByUser": "任务已被用户取消",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "正在下载剧集 \"{0}\"",
|
||||||
|
"MessageTaskEmbeddingMetadata": "嵌入元数据",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "在有声读物 \"{0}\" 中嵌入元数据",
|
||||||
|
"MessageTaskEncodingM4b": "编码 M4B",
|
||||||
|
"MessageTaskEncodingM4bDescription": "将有声读物 \"{0}\" 编码为单个 m4b 文件",
|
||||||
|
"MessageTaskFailed": "失败",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "无法备份音频文件 \"{0}\"",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "无法创建缓存目录",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "无法将元数据嵌入文件 \"{0}\"",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "无法合并音频文件",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "无法移动 m4b 文件",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "无法写入元数据文件",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "在库中匹配图书 \"{0}\"",
|
||||||
|
"MessageTaskNoFilesToScan": "没有要扫描的文件",
|
||||||
|
"MessageTaskOpmlImport": "OPML 导入",
|
||||||
|
"MessageTaskOpmlImportDescription": "通过 {0} RSS 源创建播客",
|
||||||
|
"MessageTaskOpmlImportFeed": "OPML 导入源",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "正在导入 RSS 源 \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "无法获取播客信息",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "正在创建播客 \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastExists": "播客已存在于路径中",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "无法创建播客",
|
||||||
|
"MessageTaskOpmlImportFinished": "已添加 {0} 播客",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} 已添加",
|
||||||
|
"MessageTaskScanItemsMissing": "{0} 已缺失",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} 已更新",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "无需改变",
|
||||||
|
"MessageTaskScanningFileChanges": "正在扫描文件更改 \"{0}\"",
|
||||||
|
"MessageTaskScanningLibrary": "扫描 \"{0}\" 库",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "目标目录不可写",
|
||||||
"MessageThinking": "正在查找...",
|
"MessageThinking": "正在查找...",
|
||||||
"MessageUploaderItemFailed": "上传失败",
|
"MessageUploaderItemFailed": "上传失败",
|
||||||
"MessageUploaderItemSuccess": "上传成功!",
|
"MessageUploaderItemSuccess": "上传成功!",
|
||||||
@@ -783,80 +849,144 @@
|
|||||||
"StatsTopNarrators": "最佳叙述者",
|
"StatsTopNarrators": "最佳叙述者",
|
||||||
"StatsTotalDuration": "总时长为…",
|
"StatsTotalDuration": "总时长为…",
|
||||||
"StatsYearInReview": "年度回顾",
|
"StatsYearInReview": "年度回顾",
|
||||||
"ToastAccountUpdateFailed": "账户更新失败",
|
|
||||||
"ToastAccountUpdateSuccess": "帐户已更新",
|
"ToastAccountUpdateSuccess": "帐户已更新",
|
||||||
|
"ToastAppriseUrlRequired": "必须输入 Apprise URL",
|
||||||
"ToastAuthorImageRemoveSuccess": "作者图像已删除",
|
"ToastAuthorImageRemoveSuccess": "作者图像已删除",
|
||||||
"ToastAuthorUpdateFailed": "作者更新失败",
|
"ToastAuthorNotFound": "未找到作者 \"{0}\"",
|
||||||
|
"ToastAuthorRemoveSuccess": "作者已删除",
|
||||||
|
"ToastAuthorSearchNotFound": "未找到作者",
|
||||||
"ToastAuthorUpdateMerged": "作者已合并",
|
"ToastAuthorUpdateMerged": "作者已合并",
|
||||||
"ToastAuthorUpdateSuccess": "作者已更新",
|
"ToastAuthorUpdateSuccess": "作者已更新",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "作者已更新 (未找到图像)",
|
"ToastAuthorUpdateSuccessNoImageFound": "作者已更新 (未找到图像)",
|
||||||
|
"ToastBackupAppliedSuccess": "已应用备份",
|
||||||
"ToastBackupCreateFailed": "备份创建失败",
|
"ToastBackupCreateFailed": "备份创建失败",
|
||||||
"ToastBackupCreateSuccess": "备份已创建",
|
"ToastBackupCreateSuccess": "备份已创建",
|
||||||
"ToastBackupDeleteFailed": "备份删除失败",
|
"ToastBackupDeleteFailed": "备份删除失败",
|
||||||
"ToastBackupDeleteSuccess": "备份已删除",
|
"ToastBackupDeleteSuccess": "备份已删除",
|
||||||
|
"ToastBackupInvalidMaxKeep": "要保留的备份数无效",
|
||||||
|
"ToastBackupInvalidMaxSize": "最大备份大小无效",
|
||||||
"ToastBackupRestoreFailed": "备份还原失败",
|
"ToastBackupRestoreFailed": "备份还原失败",
|
||||||
"ToastBackupUploadFailed": "上传备份失败",
|
"ToastBackupUploadFailed": "上传备份失败",
|
||||||
"ToastBackupUploadSuccess": "备份已上传",
|
"ToastBackupUploadSuccess": "备份已上传",
|
||||||
|
"ToastBatchDeleteFailed": "批量删除失败",
|
||||||
|
"ToastBatchDeleteSuccess": "批量删除成功",
|
||||||
"ToastBatchUpdateFailed": "批量更新失败",
|
"ToastBatchUpdateFailed": "批量更新失败",
|
||||||
"ToastBatchUpdateSuccess": "批量更新成功",
|
"ToastBatchUpdateSuccess": "批量更新成功",
|
||||||
"ToastBookmarkCreateFailed": "创建书签失败",
|
"ToastBookmarkCreateFailed": "创建书签失败",
|
||||||
"ToastBookmarkCreateSuccess": "书签已添加",
|
"ToastBookmarkCreateSuccess": "书签已添加",
|
||||||
"ToastBookmarkRemoveSuccess": "书签已删除",
|
"ToastBookmarkRemoveSuccess": "书签已删除",
|
||||||
"ToastBookmarkUpdateFailed": "书签更新失败",
|
|
||||||
"ToastBookmarkUpdateSuccess": "书签已更新",
|
"ToastBookmarkUpdateSuccess": "书签已更新",
|
||||||
"ToastCachePurgeFailed": "清除缓存失败",
|
"ToastCachePurgeFailed": "清除缓存失败",
|
||||||
"ToastCachePurgeSuccess": "缓存清除成功",
|
"ToastCachePurgeSuccess": "缓存清除成功",
|
||||||
"ToastChaptersHaveErrors": "章节有错误",
|
"ToastChaptersHaveErrors": "章节有错误",
|
||||||
"ToastChaptersMustHaveTitles": "章节必须有标题",
|
"ToastChaptersMustHaveTitles": "章节必须有标题",
|
||||||
|
"ToastChaptersRemoved": "已删除章节",
|
||||||
|
"ToastCollectionItemsAddFailed": "项目添加到收藏夹失败",
|
||||||
|
"ToastCollectionItemsAddSuccess": "项目添加到收藏夹成功",
|
||||||
"ToastCollectionItemsRemoveSuccess": "项目从收藏夹移除",
|
"ToastCollectionItemsRemoveSuccess": "项目从收藏夹移除",
|
||||||
"ToastCollectionRemoveSuccess": "收藏夹已删除",
|
"ToastCollectionRemoveSuccess": "收藏夹已删除",
|
||||||
"ToastCollectionUpdateFailed": "更新收藏夹失败",
|
|
||||||
"ToastCollectionUpdateSuccess": "收藏夹已更新",
|
"ToastCollectionUpdateSuccess": "收藏夹已更新",
|
||||||
|
"ToastCoverUpdateFailed": "封面更新失败",
|
||||||
"ToastDeleteFileFailed": "删除文件失败",
|
"ToastDeleteFileFailed": "删除文件失败",
|
||||||
"ToastDeleteFileSuccess": "文件已删除",
|
"ToastDeleteFileSuccess": "文件已删除",
|
||||||
|
"ToastDeviceAddFailed": "添加设备失败",
|
||||||
|
"ToastDeviceNameAlreadyExists": "同名的电子阅读器设备已存在",
|
||||||
|
"ToastDeviceTestEmailFailed": "无法发送测试电子邮件",
|
||||||
|
"ToastDeviceTestEmailSuccess": "测试邮件已发送",
|
||||||
|
"ToastEmailSettingsUpdateSuccess": "电子邮件设置已更新",
|
||||||
|
"ToastEncodeCancelFailed": "取消编码失败",
|
||||||
|
"ToastEncodeCancelSucces": "编码已取消",
|
||||||
|
"ToastEpisodeDownloadQueueClearFailed": "无法清除队列",
|
||||||
|
"ToastEpisodeDownloadQueueClearSuccess": "剧集下载队列已清空",
|
||||||
"ToastErrorCannotShare": "无法在此设备上本地共享",
|
"ToastErrorCannotShare": "无法在此设备上本地共享",
|
||||||
"ToastFailedToLoadData": "加载数据失败",
|
"ToastFailedToLoadData": "加载数据失败",
|
||||||
"ToastItemCoverUpdateFailed": "更新项目封面失败",
|
"ToastFailedToShare": "分享失败",
|
||||||
|
"ToastFailedToUpdate": "更新失败",
|
||||||
|
"ToastInvalidImageUrl": "图片网址无效",
|
||||||
|
"ToastInvalidUrl": "网址无效",
|
||||||
"ToastItemCoverUpdateSuccess": "项目封面已更新",
|
"ToastItemCoverUpdateSuccess": "项目封面已更新",
|
||||||
"ToastItemDetailsUpdateFailed": "更新项目详细信息失败",
|
"ToastItemDeletedFailed": "删除项目失败",
|
||||||
|
"ToastItemDeletedSuccess": "已删除项目",
|
||||||
"ToastItemDetailsUpdateSuccess": "项目详细信息已更新",
|
"ToastItemDetailsUpdateSuccess": "项目详细信息已更新",
|
||||||
"ToastItemMarkedAsFinishedFailed": "无法标记为已听完",
|
"ToastItemMarkedAsFinishedFailed": "无法标记为已听完",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "标记为已听完的项目",
|
"ToastItemMarkedAsFinishedSuccess": "标记为已听完的项目",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "无法标记为未听完",
|
"ToastItemMarkedAsNotFinishedFailed": "无法标记为未听完",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "标记为未听完的项目",
|
"ToastItemMarkedAsNotFinishedSuccess": "标记为未听完的项目",
|
||||||
|
"ToastItemUpdateSuccess": "项目已更新",
|
||||||
"ToastLibraryCreateFailed": "创建媒体库失败",
|
"ToastLibraryCreateFailed": "创建媒体库失败",
|
||||||
"ToastLibraryCreateSuccess": "媒体库 \"{0}\" 创建成功",
|
"ToastLibraryCreateSuccess": "媒体库 \"{0}\" 创建成功",
|
||||||
"ToastLibraryDeleteFailed": "删除媒体库失败",
|
"ToastLibraryDeleteFailed": "删除媒体库失败",
|
||||||
"ToastLibraryDeleteSuccess": "媒体库已删除",
|
"ToastLibraryDeleteSuccess": "媒体库已删除",
|
||||||
"ToastLibraryScanFailedToStart": "无法启动扫描",
|
"ToastLibraryScanFailedToStart": "无法启动扫描",
|
||||||
"ToastLibraryScanStarted": "媒体库扫描已启动",
|
"ToastLibraryScanStarted": "媒体库扫描已启动",
|
||||||
"ToastLibraryUpdateFailed": "更新图书库失败",
|
|
||||||
"ToastLibraryUpdateSuccess": "媒体库 \"{0}\" 已更新",
|
"ToastLibraryUpdateSuccess": "媒体库 \"{0}\" 已更新",
|
||||||
|
"ToastNameEmailRequired": "姓名和电子邮件为必填项",
|
||||||
|
"ToastNameRequired": "姓名为必填项",
|
||||||
|
"ToastNewUserCreatedFailed": "无法创建帐户: \"{0}\"",
|
||||||
|
"ToastNewUserCreatedSuccess": "已创建新帐户",
|
||||||
|
"ToastNewUserLibraryError": "必须至少选择一个图书馆",
|
||||||
|
"ToastNewUserPasswordError": "必须有密码, 只有root用户可以有空密码",
|
||||||
|
"ToastNewUserTagError": "必须至少选择一个标签",
|
||||||
|
"ToastNewUserUsernameError": "输入用户名",
|
||||||
|
"ToastNoUpdatesNecessary": "无需更新",
|
||||||
|
"ToastNotificationCreateFailed": "无法创建通知",
|
||||||
|
"ToastNotificationDeleteFailed": "删除通知失败",
|
||||||
|
"ToastNotificationFailedMaximum": "最大失败尝试次数必须 >= 0",
|
||||||
|
"ToastNotificationQueueMaximum": "最大通知队列必须 >= 0",
|
||||||
|
"ToastNotificationSettingsUpdateSuccess": "通知设置已更新",
|
||||||
|
"ToastNotificationTestTriggerFailed": "无法触发测试通知",
|
||||||
|
"ToastNotificationTestTriggerSuccess": "触发测试通知",
|
||||||
|
"ToastNotificationUpdateSuccess": "通知已更新",
|
||||||
"ToastPlaylistCreateFailed": "创建播放列表失败",
|
"ToastPlaylistCreateFailed": "创建播放列表失败",
|
||||||
"ToastPlaylistCreateSuccess": "已成功创建播放列表",
|
"ToastPlaylistCreateSuccess": "已成功创建播放列表",
|
||||||
"ToastPlaylistRemoveSuccess": "播放列表已删除",
|
"ToastPlaylistRemoveSuccess": "播放列表已删除",
|
||||||
"ToastPlaylistUpdateFailed": "更新播放列表失败",
|
|
||||||
"ToastPlaylistUpdateSuccess": "播放列表已更新",
|
"ToastPlaylistUpdateSuccess": "播放列表已更新",
|
||||||
"ToastPodcastCreateFailed": "创建播客失败",
|
"ToastPodcastCreateFailed": "创建播客失败",
|
||||||
"ToastPodcastCreateSuccess": "已成功创建播客",
|
"ToastPodcastCreateSuccess": "已成功创建播客",
|
||||||
|
"ToastPodcastGetFeedFailed": "无法获取播客信息",
|
||||||
|
"ToastPodcastNoEpisodesInFeed": "RSS 订阅中未找到任何剧集",
|
||||||
|
"ToastPodcastNoRssFeed": "播客没有 RSS 源",
|
||||||
|
"ToastProviderCreatedFailed": "无法添加提供商",
|
||||||
|
"ToastProviderCreatedSuccess": "已添加新提供商",
|
||||||
|
"ToastProviderNameAndUrlRequired": "名称和网址必需填写",
|
||||||
|
"ToastProviderRemoveSuccess": "提供商已移除",
|
||||||
"ToastRSSFeedCloseFailed": "关闭 RSS 源失败",
|
"ToastRSSFeedCloseFailed": "关闭 RSS 源失败",
|
||||||
"ToastRSSFeedCloseSuccess": "RSS 源已关闭",
|
"ToastRSSFeedCloseSuccess": "RSS 源已关闭",
|
||||||
|
"ToastRemoveFailed": "删除失败",
|
||||||
"ToastRemoveItemFromCollectionFailed": "从收藏中删除项目失败",
|
"ToastRemoveItemFromCollectionFailed": "从收藏中删除项目失败",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "项目已从收藏中删除",
|
"ToastRemoveItemFromCollectionSuccess": "项目已从收藏中删除",
|
||||||
|
"ToastRemoveItemsWithIssuesFailed": "无法删除有问题的库项目",
|
||||||
|
"ToastRemoveItemsWithIssuesSuccess": "已删除有问题的库项目",
|
||||||
|
"ToastRenameFailed": "重命名失败",
|
||||||
|
"ToastRescanFailed": "{0} 重新扫描失败",
|
||||||
|
"ToastRescanRemoved": "重新扫描完成项目已删除",
|
||||||
|
"ToastRescanUpToDate": "重新扫描完成项目已更新",
|
||||||
|
"ToastRescanUpdated": "重新扫描完成项目已更新",
|
||||||
|
"ToastScanFailed": "扫描库项目失败",
|
||||||
|
"ToastSelectAtLeastOneUser": "至少选择一位用户",
|
||||||
"ToastSendEbookToDeviceFailed": "发送电子书到设备失败",
|
"ToastSendEbookToDeviceFailed": "发送电子书到设备失败",
|
||||||
"ToastSendEbookToDeviceSuccess": "电子书已经发送到设备 \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "电子书已经发送到设备 \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "更新系列失败",
|
"ToastSeriesUpdateFailed": "更新系列失败",
|
||||||
"ToastSeriesUpdateSuccess": "系列已更新",
|
"ToastSeriesUpdateSuccess": "系列已更新",
|
||||||
"ToastServerSettingsUpdateFailed": "无法更新服务器设置",
|
|
||||||
"ToastServerSettingsUpdateSuccess": "服务器设置已更新",
|
"ToastServerSettingsUpdateSuccess": "服务器设置已更新",
|
||||||
|
"ToastSessionCloseFailed": "关闭会话失败",
|
||||||
"ToastSessionDeleteFailed": "删除会话失败",
|
"ToastSessionDeleteFailed": "删除会话失败",
|
||||||
"ToastSessionDeleteSuccess": "会话已删除",
|
"ToastSessionDeleteSuccess": "会话已删除",
|
||||||
|
"ToastSlugMustChange": "Slug 包含无效字符",
|
||||||
|
"ToastSlugRequired": "Slug 是必填项",
|
||||||
"ToastSocketConnected": "网络已连接",
|
"ToastSocketConnected": "网络已连接",
|
||||||
"ToastSocketDisconnected": "网络已断开",
|
"ToastSocketDisconnected": "网络已断开",
|
||||||
"ToastSocketFailedToConnect": "网络连接失败",
|
"ToastSocketFailedToConnect": "网络连接失败",
|
||||||
"ToastSortingPrefixesEmptyError": "必须至少有 1 个排序前缀",
|
"ToastSortingPrefixesEmptyError": "必须至少有 1 个排序前缀",
|
||||||
"ToastSortingPrefixesUpdateFailed": "无法更新排序前缀",
|
|
||||||
"ToastSortingPrefixesUpdateSuccess": "排序前缀已更新 ({0} 项)",
|
"ToastSortingPrefixesUpdateSuccess": "排序前缀已更新 ({0} 项)",
|
||||||
|
"ToastTitleRequired": "标题为必填项",
|
||||||
|
"ToastUnknownError": "未知错误",
|
||||||
|
"ToastUnlinkOpenIdFailed": "无法取消用户与 OpenID 的关联",
|
||||||
|
"ToastUnlinkOpenIdSuccess": "用户已取消与 OpenID 的关联",
|
||||||
"ToastUserDeleteFailed": "删除用户失败",
|
"ToastUserDeleteFailed": "删除用户失败",
|
||||||
"ToastUserDeleteSuccess": "用户已删除"
|
"ToastUserDeleteSuccess": "用户已删除",
|
||||||
|
"ToastUserPasswordChangeSuccess": "密码修改成功",
|
||||||
|
"ToastUserPasswordMismatch": "密码不匹配",
|
||||||
|
"ToastUserPasswordMustChange": "新密码不能与旧密码相同",
|
||||||
|
"ToastUserRootRequireName": "必须输入 root 用户名"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
"ButtonApply": "應用",
|
"ButtonApply": "應用",
|
||||||
"ButtonApplyChapters": "應用到章節",
|
"ButtonApplyChapters": "應用到章節",
|
||||||
"ButtonAuthors": "作者",
|
"ButtonAuthors": "作者",
|
||||||
|
"ButtonBack": "返回",
|
||||||
"ButtonBrowseForFolder": "瀏覽資料夾",
|
"ButtonBrowseForFolder": "瀏覽資料夾",
|
||||||
"ButtonCancel": "取消",
|
"ButtonCancel": "取消",
|
||||||
"ButtonCancelEncode": "取消編碼",
|
"ButtonCancelEncode": "取消編碼",
|
||||||
@@ -18,6 +19,7 @@
|
|||||||
"ButtonChooseFiles": "選擇檔案",
|
"ButtonChooseFiles": "選擇檔案",
|
||||||
"ButtonClearFilter": "清除過濾器",
|
"ButtonClearFilter": "清除過濾器",
|
||||||
"ButtonCloseFeed": "關閉源",
|
"ButtonCloseFeed": "關閉源",
|
||||||
|
"ButtonCloseSession": "關閉開放會話",
|
||||||
"ButtonCollections": "收藏",
|
"ButtonCollections": "收藏",
|
||||||
"ButtonConfigureScanner": "配置掃描",
|
"ButtonConfigureScanner": "配置掃描",
|
||||||
"ButtonCreate": "創建",
|
"ButtonCreate": "創建",
|
||||||
@@ -27,6 +29,7 @@
|
|||||||
"ButtonEdit": "編輯",
|
"ButtonEdit": "編輯",
|
||||||
"ButtonEditChapters": "編輯章節",
|
"ButtonEditChapters": "編輯章節",
|
||||||
"ButtonEditPodcast": "編輯播客",
|
"ButtonEditPodcast": "編輯播客",
|
||||||
|
"ButtonEnable": "啟用",
|
||||||
"ButtonForceReScan": "強制重新掃描",
|
"ButtonForceReScan": "強制重新掃描",
|
||||||
"ButtonFullPath": "完整路徑",
|
"ButtonFullPath": "完整路徑",
|
||||||
"ButtonHide": "隱藏",
|
"ButtonHide": "隱藏",
|
||||||
@@ -688,10 +691,8 @@
|
|||||||
"PlaceholderNewPlaylist": "輸入播放列表名稱",
|
"PlaceholderNewPlaylist": "輸入播放列表名稱",
|
||||||
"PlaceholderSearch": "查找..",
|
"PlaceholderSearch": "查找..",
|
||||||
"PlaceholderSearchEpisode": "搜尋劇集..",
|
"PlaceholderSearchEpisode": "搜尋劇集..",
|
||||||
"ToastAccountUpdateFailed": "帳號更新失敗",
|
|
||||||
"ToastAccountUpdateSuccess": "帳號已更新",
|
"ToastAccountUpdateSuccess": "帳號已更新",
|
||||||
"ToastAuthorImageRemoveSuccess": "作者圖像已刪除",
|
"ToastAuthorImageRemoveSuccess": "作者圖像已刪除",
|
||||||
"ToastAuthorUpdateFailed": "作者更新失敗",
|
|
||||||
"ToastAuthorUpdateMerged": "作者已合併",
|
"ToastAuthorUpdateMerged": "作者已合併",
|
||||||
"ToastAuthorUpdateSuccess": "作者已更新",
|
"ToastAuthorUpdateSuccess": "作者已更新",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "作者已更新 (未找到圖像)",
|
"ToastAuthorUpdateSuccessNoImageFound": "作者已更新 (未找到圖像)",
|
||||||
@@ -707,17 +708,13 @@
|
|||||||
"ToastBookmarkCreateFailed": "創建書籤失敗",
|
"ToastBookmarkCreateFailed": "創建書籤失敗",
|
||||||
"ToastBookmarkCreateSuccess": "書籤已新增",
|
"ToastBookmarkCreateSuccess": "書籤已新增",
|
||||||
"ToastBookmarkRemoveSuccess": "書籤已刪除",
|
"ToastBookmarkRemoveSuccess": "書籤已刪除",
|
||||||
"ToastBookmarkUpdateFailed": "書籤更新失敗",
|
|
||||||
"ToastBookmarkUpdateSuccess": "書籤已更新",
|
"ToastBookmarkUpdateSuccess": "書籤已更新",
|
||||||
"ToastChaptersHaveErrors": "章節有錯誤",
|
"ToastChaptersHaveErrors": "章節有錯誤",
|
||||||
"ToastChaptersMustHaveTitles": "章節必須有標題",
|
"ToastChaptersMustHaveTitles": "章節必須有標題",
|
||||||
"ToastCollectionItemsRemoveSuccess": "項目從收藏夾移除",
|
"ToastCollectionItemsRemoveSuccess": "項目從收藏夾移除",
|
||||||
"ToastCollectionRemoveSuccess": "收藏夾已刪除",
|
"ToastCollectionRemoveSuccess": "收藏夾已刪除",
|
||||||
"ToastCollectionUpdateFailed": "更新收藏夾失敗",
|
|
||||||
"ToastCollectionUpdateSuccess": "收藏夾已更新",
|
"ToastCollectionUpdateSuccess": "收藏夾已更新",
|
||||||
"ToastItemCoverUpdateFailed": "更新項目封面失敗",
|
|
||||||
"ToastItemCoverUpdateSuccess": "項目封面已更新",
|
"ToastItemCoverUpdateSuccess": "項目封面已更新",
|
||||||
"ToastItemDetailsUpdateFailed": "更新項目詳細信息失敗",
|
|
||||||
"ToastItemDetailsUpdateSuccess": "項目詳細信息已更新",
|
"ToastItemDetailsUpdateSuccess": "項目詳細信息已更新",
|
||||||
"ToastItemMarkedAsFinishedFailed": "標記為聽完失敗",
|
"ToastItemMarkedAsFinishedFailed": "標記為聽完失敗",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "標記為聽完的項目",
|
"ToastItemMarkedAsFinishedSuccess": "標記為聽完的項目",
|
||||||
@@ -729,12 +726,10 @@
|
|||||||
"ToastLibraryDeleteSuccess": "媒體庫已刪除",
|
"ToastLibraryDeleteSuccess": "媒體庫已刪除",
|
||||||
"ToastLibraryScanFailedToStart": "無法啟動掃描",
|
"ToastLibraryScanFailedToStart": "無法啟動掃描",
|
||||||
"ToastLibraryScanStarted": "媒體庫掃描已啟動",
|
"ToastLibraryScanStarted": "媒體庫掃描已啟動",
|
||||||
"ToastLibraryUpdateFailed": "更新圖書庫失敗",
|
|
||||||
"ToastLibraryUpdateSuccess": "媒體庫 \"{0}\" 已更新",
|
"ToastLibraryUpdateSuccess": "媒體庫 \"{0}\" 已更新",
|
||||||
"ToastPlaylistCreateFailed": "創建播放列表失敗",
|
"ToastPlaylistCreateFailed": "創建播放列表失敗",
|
||||||
"ToastPlaylistCreateSuccess": "已成功創建播放列表",
|
"ToastPlaylistCreateSuccess": "已成功創建播放列表",
|
||||||
"ToastPlaylistRemoveSuccess": "播放列表已刪除",
|
"ToastPlaylistRemoveSuccess": "播放列表已刪除",
|
||||||
"ToastPlaylistUpdateFailed": "更新播放列表失敗",
|
|
||||||
"ToastPlaylistUpdateSuccess": "播放列表已更新",
|
"ToastPlaylistUpdateSuccess": "播放列表已更新",
|
||||||
"ToastPodcastCreateFailed": "創建播客失敗",
|
"ToastPodcastCreateFailed": "創建播客失敗",
|
||||||
"ToastPodcastCreateSuccess": "已成功創建播客",
|
"ToastPodcastCreateSuccess": "已成功創建播客",
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ if (isDev) {
|
|||||||
if (devEnv.MetadataPath) process.env.METADATA_PATH = devEnv.MetadataPath
|
if (devEnv.MetadataPath) process.env.METADATA_PATH = devEnv.MetadataPath
|
||||||
if (devEnv.FFmpegPath) process.env.FFMPEG_PATH = devEnv.FFmpegPath
|
if (devEnv.FFmpegPath) process.env.FFMPEG_PATH = devEnv.FFmpegPath
|
||||||
if (devEnv.FFProbePath) process.env.FFPROBE_PATH = devEnv.FFProbePath
|
if (devEnv.FFProbePath) process.env.FFPROBE_PATH = devEnv.FFProbePath
|
||||||
|
if (devEnv.NunicodePath) process.env.NUSQLITE3_PATH = devEnv.NunicodePath
|
||||||
if (devEnv.SkipBinariesCheck) process.env.SKIP_BINARIES_CHECK = '1'
|
if (devEnv.SkipBinariesCheck) process.env.SKIP_BINARIES_CHECK = '1'
|
||||||
if (devEnv.BackupPath) process.env.BACKUP_PATH = devEnv.BackupPath
|
if (devEnv.BackupPath) process.env.BACKUP_PATH = devEnv.BackupPath
|
||||||
process.env.SOURCE = 'local'
|
process.env.SOURCE = 'local'
|
||||||
|
|||||||
Generated
+53
-161
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.13.3",
|
"version": "2.14.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.13.3",
|
"version": "2.14.0",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.27.2",
|
"axios": "^0.27.2",
|
||||||
@@ -16,11 +16,13 @@
|
|||||||
"graceful-fs": "^4.2.10",
|
"graceful-fs": "^4.2.10",
|
||||||
"htmlparser2": "^8.0.1",
|
"htmlparser2": "^8.0.1",
|
||||||
"lru-cache": "^10.0.3",
|
"lru-cache": "^10.0.3",
|
||||||
|
"node-unrar-js": "^2.0.2",
|
||||||
"nodemailer": "^6.9.13",
|
"nodemailer": "^6.9.13",
|
||||||
"openid-client": "^5.6.1",
|
"openid-client": "^5.6.1",
|
||||||
"p-throttle": "^4.1.1",
|
"p-throttle": "^4.1.1",
|
||||||
"passport": "^0.6.0",
|
"passport": "^0.6.0",
|
||||||
"passport-jwt": "^4.0.1",
|
"passport-jwt": "^4.0.1",
|
||||||
|
"semver": "^7.6.3",
|
||||||
"sequelize": "^6.35.2",
|
"sequelize": "^6.35.2",
|
||||||
"socket.io": "^4.5.4",
|
"socket.io": "^4.5.4",
|
||||||
"sqlite3": "^5.1.6",
|
"sqlite3": "^5.1.6",
|
||||||
@@ -173,6 +175,15 @@
|
|||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/@babel/core/node_modules/semver": {
|
||||||
|
"version": "6.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||||
|
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@babel/generator": {
|
"node_modules/@babel/generator": {
|
||||||
"version": "7.23.3",
|
"version": "7.23.3",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz",
|
||||||
@@ -213,6 +224,15 @@
|
|||||||
"yallist": "^3.0.2"
|
"yallist": "^3.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
|
||||||
|
"version": "6.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||||
|
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
|
"node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
|
||||||
"version": "3.1.1",
|
"version": "3.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
||||||
@@ -586,17 +606,6 @@
|
|||||||
"node-pre-gyp": "bin/node-pre-gyp"
|
"node-pre-gyp": "bin/node-pre-gyp"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@mapbox/node-pre-gyp/node_modules/nopt": {
|
"node_modules/@mapbox/node-pre-gyp/node_modules/nopt": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
|
||||||
@@ -611,20 +620,6 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mapbox/node-pre-gyp/node_modules/semver": {
|
|
||||||
"version": "7.5.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
|
|
||||||
"integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"lru-cache": "^6.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@npmcli/fs": {
|
"node_modules/@npmcli/fs": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
|
||||||
@@ -635,33 +630,6 @@
|
|||||||
"semver": "^7.3.5"
|
"semver": "^7.3.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@npmcli/fs/node_modules/lru-cache": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@npmcli/fs/node_modules/semver": {
|
|
||||||
"version": "7.5.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
|
|
||||||
"integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"lru-cache": "^6.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@npmcli/move-file": {
|
"node_modules/@npmcli/move-file": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
|
||||||
@@ -2576,6 +2544,15 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/istanbul-lib-instrument/node_modules/semver": {
|
||||||
|
"version": "6.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||||
|
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/istanbul-lib-processinfo": {
|
"node_modules/istanbul-lib-processinfo": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz",
|
||||||
@@ -2628,18 +2605,6 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/istanbul-lib-report/node_modules/lru-cache": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/istanbul-lib-report/node_modules/make-dir": {
|
"node_modules/istanbul-lib-report/node_modules/make-dir": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
|
||||||
@@ -2655,21 +2620,6 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/istanbul-lib-report/node_modules/semver": {
|
|
||||||
"version": "7.5.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
|
|
||||||
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"lru-cache": "^6.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/istanbul-lib-report/node_modules/supports-color": {
|
"node_modules/istanbul-lib-report/node_modules/supports-color": {
|
||||||
"version": "7.2.0",
|
"version": "7.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
@@ -2804,36 +2754,11 @@
|
|||||||
"npm": ">=6"
|
"npm": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/jsonwebtoken/node_modules/lru-cache": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/jsonwebtoken/node_modules/ms": {
|
"node_modules/jsonwebtoken/node_modules/ms": {
|
||||||
"version": "2.1.3",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
},
|
},
|
||||||
"node_modules/jsonwebtoken/node_modules/semver": {
|
|
||||||
"version": "7.5.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
|
|
||||||
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
|
|
||||||
"dependencies": {
|
|
||||||
"lru-cache": "^6.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/just-extend": {
|
"node_modules/just-extend": {
|
||||||
"version": "4.2.1",
|
"version": "4.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
|
||||||
@@ -2970,6 +2895,14 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/make-dir/node_modules/semver": {
|
||||||
|
"version": "6.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||||
|
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/make-fetch-happen": {
|
"node_modules/make-fetch-happen": {
|
||||||
"version": "9.1.0",
|
"version": "9.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
|
||||||
@@ -3585,18 +3518,6 @@
|
|||||||
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-gyp/node_modules/lru-cache": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/node-gyp/node_modules/nopt": {
|
"node_modules/node-gyp/node_modules/nopt": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
|
||||||
@@ -3627,21 +3548,6 @@
|
|||||||
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-gyp/node_modules/semver": {
|
|
||||||
"version": "7.5.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
|
|
||||||
"integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"lru-cache": "^6.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/node-preload": {
|
"node_modules/node-preload": {
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
|
||||||
@@ -3660,6 +3566,14 @@
|
|||||||
"integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
|
"integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/node-unrar-js": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-unrar-js/-/node-unrar-js-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-hLNmoJzqaKJnod8yiTVGe9hnlNRHotUi0CreSv/8HtfRi/3JnRC8DvsmKfeGGguRjTEulhZK6zXX5PXoVuDZ2w==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/nodemailer": {
|
"node_modules/nodemailer": {
|
||||||
"version": "6.9.13",
|
"version": "6.9.13",
|
||||||
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.13.tgz",
|
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.13.tgz",
|
||||||
@@ -4336,11 +4250,14 @@
|
|||||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||||
},
|
},
|
||||||
"node_modules/semver": {
|
"node_modules/semver": {
|
||||||
"version": "6.3.1",
|
"version": "7.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/send": {
|
"node_modules/send": {
|
||||||
@@ -4456,36 +4373,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/sequelize/node_modules/lru-cache": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/sequelize/node_modules/ms": {
|
"node_modules/sequelize/node_modules/ms": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
},
|
},
|
||||||
"node_modules/sequelize/node_modules/semver": {
|
|
||||||
"version": "7.5.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
|
|
||||||
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
|
|
||||||
"dependencies": {
|
|
||||||
"lru-cache": "^6.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/serialize-javascript": {
|
"node_modules/serialize-javascript": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
|
||||||
|
|||||||
+5
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.13.3",
|
"version": "2.14.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",
|
||||||
@@ -22,7 +22,8 @@
|
|||||||
"pkg": {
|
"pkg": {
|
||||||
"assets": [
|
"assets": [
|
||||||
"client/dist/**/*",
|
"client/dist/**/*",
|
||||||
"node_modules/sqlite3/lib/binding/**/*.node"
|
"node_modules/sqlite3/lib/binding/**/*.node",
|
||||||
|
"server/migrations/*.js"
|
||||||
],
|
],
|
||||||
"scripts": [
|
"scripts": [
|
||||||
"prod.js",
|
"prod.js",
|
||||||
@@ -42,11 +43,13 @@
|
|||||||
"graceful-fs": "^4.2.10",
|
"graceful-fs": "^4.2.10",
|
||||||
"htmlparser2": "^8.0.1",
|
"htmlparser2": "^8.0.1",
|
||||||
"lru-cache": "^10.0.3",
|
"lru-cache": "^10.0.3",
|
||||||
|
"node-unrar-js": "^2.0.2",
|
||||||
"nodemailer": "^6.9.13",
|
"nodemailer": "^6.9.13",
|
||||||
"openid-client": "^5.6.1",
|
"openid-client": "^5.6.1",
|
||||||
"p-throttle": "^4.1.1",
|
"p-throttle": "^4.1.1",
|
||||||
"passport": "^0.6.0",
|
"passport": "^0.6.0",
|
||||||
"passport-jwt": "^4.0.1",
|
"passport-jwt": "^4.0.1",
|
||||||
|
"semver": "^7.6.3",
|
||||||
"sequelize": "^6.35.2",
|
"sequelize": "^6.35.2",
|
||||||
"socket.io": "^4.5.4",
|
"socket.io": "^4.5.4",
|
||||||
"sqlite3": "^5.1.6",
|
"sqlite3": "^5.1.6",
|
||||||
|
|||||||
+86
-59
@@ -8,6 +8,8 @@ const Logger = require('./Logger')
|
|||||||
const dbMigration = require('./utils/migrations/dbMigration')
|
const dbMigration = require('./utils/migrations/dbMigration')
|
||||||
const Auth = require('./Auth')
|
const Auth = require('./Auth')
|
||||||
|
|
||||||
|
const MigrationManager = require('./managers/MigrationManager')
|
||||||
|
|
||||||
class Database {
|
class Database {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.sequelize = null
|
this.sequelize = null
|
||||||
@@ -26,6 +28,9 @@ class Database {
|
|||||||
this.notificationSettings = null
|
this.notificationSettings = null
|
||||||
/** @type {import('./objects/settings/EmailSettings')} */
|
/** @type {import('./objects/settings/EmailSettings')} */
|
||||||
this.emailSettings = null
|
this.emailSettings = null
|
||||||
|
|
||||||
|
this.supportsUnaccent = false
|
||||||
|
this.supportsUnicodeFoldings = false
|
||||||
}
|
}
|
||||||
|
|
||||||
get models() {
|
get models() {
|
||||||
@@ -142,6 +147,11 @@ class Database {
|
|||||||
return this.models.mediaItemShare
|
return this.models.mediaItemShare
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @type {typeof import('./models/Device')} */
|
||||||
|
get deviceModel() {
|
||||||
|
return this.models.device
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if db file exists
|
* Check if db file exists
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
@@ -168,6 +178,15 @@ class Database {
|
|||||||
throw new Error('Database connection failed')
|
throw new Error('Database connection failed')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const migrationManager = new MigrationManager(this.sequelize, this.isNew, global.ConfigPath)
|
||||||
|
await migrationManager.init(packageJson.version)
|
||||||
|
await migrationManager.runMigrations()
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`[Database] Failed to run migrations`, error)
|
||||||
|
throw new Error('Database migration failed')
|
||||||
|
}
|
||||||
|
|
||||||
await this.buildModels(force)
|
await this.buildModels(force)
|
||||||
Logger.info(`[Database] Db initialized with models:`, Object.keys(this.sequelize.models).join(', '))
|
Logger.info(`[Database] Db initialized with models:`, Object.keys(this.sequelize.models).join(', '))
|
||||||
|
|
||||||
@@ -207,6 +226,12 @@ class Database {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
await this.sequelize.authenticate()
|
await this.sequelize.authenticate()
|
||||||
|
if (process.env.NUSQLITE3_PATH) {
|
||||||
|
await this.loadExtension(process.env.NUSQLITE3_PATH)
|
||||||
|
Logger.info(`[Database] Db supports unaccent and unicode foldings`)
|
||||||
|
this.supportsUnaccent = true
|
||||||
|
this.supportsUnicodeFoldings = true
|
||||||
|
}
|
||||||
Logger.info(`[Database] Db connection was successful`)
|
Logger.info(`[Database] Db connection was successful`)
|
||||||
return true
|
return true
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -216,10 +241,9 @@ class Database {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Temporarily disabled
|
* @param {string} extension paths to extension binary
|
||||||
* @param {string[]} extensions paths to extension binaries
|
|
||||||
*/
|
*/
|
||||||
async loadExtensions(extensions) {
|
async loadExtension(extension) {
|
||||||
// This is a hack to get the db connection for loading extensions.
|
// This is a hack to get the db connection for loading extensions.
|
||||||
// The proper way would be to use the 'afterConnect' hook, but that hook is never called for sqlite due to a bug in sequelize.
|
// The proper way would be to use the 'afterConnect' hook, but that hook is never called for sqlite due to a bug in sequelize.
|
||||||
// See https://github.com/sequelize/sequelize/issues/12487
|
// See https://github.com/sequelize/sequelize/issues/12487
|
||||||
@@ -227,20 +251,18 @@ class Database {
|
|||||||
const db = await this.sequelize.dialect.connectionManager.getConnection()
|
const db = await this.sequelize.dialect.connectionManager.getConnection()
|
||||||
if (typeof db?.loadExtension !== 'function') throw new Error('Failed to get db connection for loading extensions')
|
if (typeof db?.loadExtension !== 'function') throw new Error('Failed to get db connection for loading extensions')
|
||||||
|
|
||||||
for (const ext of extensions) {
|
Logger.info(`[Database] Loading extension ${extension}`)
|
||||||
Logger.info(`[Database] Loading extension ${ext}`)
|
await new Promise((resolve, reject) => {
|
||||||
await new Promise((resolve, reject) => {
|
db.loadExtension(extension, (err) => {
|
||||||
db.loadExtension(ext, (err) => {
|
if (err) {
|
||||||
if (err) {
|
Logger.error(`[Database] Failed to load extension ${extension}`, err)
|
||||||
Logger.error(`[Database] Failed to load extension ${ext}`, err)
|
reject(err)
|
||||||
reject(err)
|
return
|
||||||
return
|
}
|
||||||
}
|
Logger.info(`[Database] Successfully loaded extension ${extension}`)
|
||||||
Logger.info(`[Database] Successfully loaded extension ${ext}`)
|
resolve()
|
||||||
resolve()
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -478,21 +500,6 @@ class Database {
|
|||||||
return this.models.playbackSession.removeById(sessionId)
|
return this.models.playbackSession.removeById(sessionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
getDeviceByDeviceId(deviceId) {
|
|
||||||
if (!this.sequelize) return false
|
|
||||||
return this.models.device.getOldDeviceByDeviceId(deviceId)
|
|
||||||
}
|
|
||||||
|
|
||||||
updateDevice(oldDevice) {
|
|
||||||
if (!this.sequelize) return false
|
|
||||||
return this.models.device.updateFromOld(oldDevice)
|
|
||||||
}
|
|
||||||
|
|
||||||
createDevice(oldDevice) {
|
|
||||||
if (!this.sequelize) return false
|
|
||||||
return this.models.device.createFromOld(oldDevice)
|
|
||||||
}
|
|
||||||
|
|
||||||
replaceTagInFilterData(oldTag, newTag) {
|
replaceTagInFilterData(oldTag, newTag) {
|
||||||
for (const libraryId in this.libraryFilterData) {
|
for (const libraryId in this.libraryFilterData) {
|
||||||
const indexOf = this.libraryFilterData[libraryId].tags.findIndex((n) => n === oldTag)
|
const indexOf = this.libraryFilterData[libraryId].tags.findIndex((n) => n === oldTag)
|
||||||
@@ -744,37 +751,57 @@ class Database {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
async createTextSearchQuery(query) {
|
||||||
* TODO: Temporarily unused
|
const textQuery = new this.TextSearchQuery(this.sequelize, this.supportsUnaccent, query)
|
||||||
* @param {string} value
|
await textQuery.init()
|
||||||
* @returns {string}
|
return textQuery
|
||||||
*/
|
|
||||||
normalize(value) {
|
|
||||||
return `lower(unaccent(${value}))`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
TextSearchQuery = class {
|
||||||
* TODO: Temporarily unused
|
constructor(sequelize, supportsUnaccent, query) {
|
||||||
* @param {string} query
|
this.sequelize = sequelize
|
||||||
* @returns {Promise<string>}
|
this.supportsUnaccent = supportsUnaccent
|
||||||
*/
|
this.query = query
|
||||||
async getNormalizedQuery(query) {
|
this.hasAccents = false
|
||||||
const escapedQuery = this.sequelize.escape(query)
|
}
|
||||||
const normalizedQuery = this.normalize(escapedQuery)
|
|
||||||
const normalizedQueryResult = await this.sequelize.query(`SELECT ${normalizedQuery} as normalized_query`)
|
|
||||||
return normalizedQueryResult[0][0].normalized_query
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Returns a normalized (accents-removed) expression for the specified value.
|
||||||
* @param {string} column
|
*
|
||||||
* @param {string} normalizedQuery
|
* @param {string} value
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
matchExpression(column, normalizedQuery) {
|
normalize(value) {
|
||||||
const normalizedPattern = this.sequelize.escape(`%${normalizedQuery}%`)
|
return `unaccent(${value})`
|
||||||
const normalizedColumn = column
|
}
|
||||||
return `${normalizedColumn} LIKE ${normalizedPattern}`
|
|
||||||
|
/**
|
||||||
|
* Initialize the text query.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
async init() {
|
||||||
|
if (!this.supportsUnaccent) return
|
||||||
|
const escapedQuery = this.sequelize.escape(this.query)
|
||||||
|
const normalizedQueryExpression = this.normalize(escapedQuery)
|
||||||
|
const normalizedQueryResult = await this.sequelize.query(`SELECT ${normalizedQueryExpression} as normalized_query`)
|
||||||
|
const normalizedQuery = normalizedQueryResult[0][0].normalized_query
|
||||||
|
this.hasAccents = escapedQuery !== this.sequelize.escape(normalizedQuery)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get match expression for the specified column.
|
||||||
|
* If the query contains accents, match against the column as-is (case-insensitive exact match).
|
||||||
|
* otherwise match against a normalized column (case-insensitive match with accents removed).
|
||||||
|
*
|
||||||
|
* @param {string} column
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
matchExpression(column) {
|
||||||
|
const pattern = this.sequelize.escape(`%${this.query}%`)
|
||||||
|
if (!this.supportsUnaccent) return `${column} LIKE ${pattern}`
|
||||||
|
const normalizedColumn = this.hasAccents ? column : this.normalize(column)
|
||||||
|
return `${normalizedColumn} LIKE ${pattern}`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+33
-30
@@ -1,5 +1,6 @@
|
|||||||
const date = require('./libs/dateAndTime')
|
const date = require('./libs/dateAndTime')
|
||||||
const { LogLevel } = require('./utils/constants')
|
const { LogLevel } = require('./utils/constants')
|
||||||
|
const util = require('util')
|
||||||
|
|
||||||
class Logger {
|
class Logger {
|
||||||
constructor() {
|
constructor() {
|
||||||
@@ -69,27 +70,29 @@ class Logger {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {number} level
|
* @param {number} level
|
||||||
|
* @param {string} levelName
|
||||||
* @param {string[]} args
|
* @param {string[]} args
|
||||||
* @param {string} src
|
* @param {string} src
|
||||||
*/
|
*/
|
||||||
async handleLog(level, args, src) {
|
async #logToFileAndListeners(level, levelName, args, src) {
|
||||||
|
const expandedArgs = args.map((arg) => (typeof arg !== 'string' ? util.inspect(arg) : arg))
|
||||||
const logObj = {
|
const logObj = {
|
||||||
timestamp: this.timestamp,
|
timestamp: this.timestamp,
|
||||||
source: src,
|
source: src,
|
||||||
message: args.join(' '),
|
message: expandedArgs.join(' '),
|
||||||
levelName: this.getLogLevelString(level),
|
levelName,
|
||||||
level
|
level
|
||||||
}
|
}
|
||||||
|
|
||||||
// Emit log to sockets that are listening to log events
|
// Emit log to sockets that are listening to log events
|
||||||
this.socketListeners.forEach((socketListener) => {
|
this.socketListeners.forEach((socketListener) => {
|
||||||
if (socketListener.level <= level) {
|
if (level >= LogLevel.FATAL || level >= socketListener.level) {
|
||||||
socketListener.socket.emit('log', logObj)
|
socketListener.socket.emit('log', logObj)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Save log to file
|
// Save log to file
|
||||||
if (level >= this.logLevel) {
|
if (level >= LogLevel.FATAL || level >= this.logLevel) {
|
||||||
await this.logManager?.logToFile(logObj)
|
await this.logManager?.logToFile(logObj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -99,50 +102,50 @@ class Logger {
|
|||||||
this.debug(`Set Log Level to ${this.levelString}`)
|
this.debug(`Set Log Level to ${this.levelString}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ConsoleMethods = {
|
||||||
|
TRACE: 'trace',
|
||||||
|
DEBUG: 'debug',
|
||||||
|
INFO: 'info',
|
||||||
|
WARN: 'warn',
|
||||||
|
ERROR: 'error',
|
||||||
|
FATAL: 'error',
|
||||||
|
NOTE: 'log'
|
||||||
|
}
|
||||||
|
|
||||||
|
#log(levelName, source, ...args) {
|
||||||
|
const level = LogLevel[levelName]
|
||||||
|
if (level < LogLevel.FATAL && level < this.logLevel) return
|
||||||
|
const consoleMethod = Logger.ConsoleMethods[levelName]
|
||||||
|
console[consoleMethod](`[${this.timestamp}] ${levelName}:`, ...args)
|
||||||
|
this.#logToFileAndListeners(level, levelName, args, source)
|
||||||
|
}
|
||||||
|
|
||||||
trace(...args) {
|
trace(...args) {
|
||||||
if (this.logLevel > LogLevel.TRACE) return
|
this.#log('TRACE', this.source, ...args)
|
||||||
console.trace(`[${this.timestamp}] TRACE:`, ...args)
|
|
||||||
this.handleLog(LogLevel.TRACE, args, this.source)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
debug(...args) {
|
debug(...args) {
|
||||||
if (this.logLevel > LogLevel.DEBUG) return
|
this.#log('DEBUG', this.source, ...args)
|
||||||
console.debug(`[${this.timestamp}] DEBUG:`, ...args, `(${this.source})`)
|
|
||||||
this.handleLog(LogLevel.DEBUG, args, this.source)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
info(...args) {
|
info(...args) {
|
||||||
if (this.logLevel > LogLevel.INFO) return
|
this.#log('INFO', this.source, ...args)
|
||||||
console.info(`[${this.timestamp}] INFO:`, ...args)
|
|
||||||
this.handleLog(LogLevel.INFO, args, this.source)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
warn(...args) {
|
warn(...args) {
|
||||||
if (this.logLevel > LogLevel.WARN) return
|
this.#log('WARN', this.source, ...args)
|
||||||
console.warn(`[${this.timestamp}] WARN:`, ...args, `(${this.source})`)
|
|
||||||
this.handleLog(LogLevel.WARN, args, this.source)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
error(...args) {
|
error(...args) {
|
||||||
if (this.logLevel > LogLevel.ERROR) return
|
this.#log('ERROR', this.source, ...args)
|
||||||
console.error(`[${this.timestamp}] ERROR:`, ...args, `(${this.source})`)
|
|
||||||
this.handleLog(LogLevel.ERROR, args, this.source)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Fatal errors are ones that exit the process
|
|
||||||
* Fatal logs are saved to crash_logs.txt
|
|
||||||
*
|
|
||||||
* @param {...any} args
|
|
||||||
*/
|
|
||||||
fatal(...args) {
|
fatal(...args) {
|
||||||
console.error(`[${this.timestamp}] FATAL:`, ...args, `(${this.source})`)
|
this.#log('FATAL', this.source, ...args)
|
||||||
return this.handleLog(LogLevel.FATAL, args, this.source)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
note(...args) {
|
note(...args) {
|
||||||
console.log(`[${this.timestamp}] NOTE:`, ...args)
|
this.#log('NOTE', this.source, ...args)
|
||||||
this.handleLog(LogLevel.NOTE, args, this.source)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
module.exports = new Logger()
|
module.exports = new Logger()
|
||||||
|
|||||||
+3
-5
@@ -23,7 +23,6 @@ const HlsRouter = require('./routers/HlsRouter')
|
|||||||
const PublicRouter = require('./routers/PublicRouter')
|
const PublicRouter = require('./routers/PublicRouter')
|
||||||
|
|
||||||
const LogManager = require('./managers/LogManager')
|
const LogManager = require('./managers/LogManager')
|
||||||
const NotificationManager = require('./managers/NotificationManager')
|
|
||||||
const EmailManager = require('./managers/EmailManager')
|
const EmailManager = require('./managers/EmailManager')
|
||||||
const AbMergeManager = require('./managers/AbMergeManager')
|
const AbMergeManager = require('./managers/AbMergeManager')
|
||||||
const CacheManager = require('./managers/CacheManager')
|
const CacheManager = require('./managers/CacheManager')
|
||||||
@@ -67,12 +66,11 @@ class Server {
|
|||||||
this.auth = new Auth()
|
this.auth = new Auth()
|
||||||
|
|
||||||
// Managers
|
// Managers
|
||||||
this.notificationManager = new NotificationManager()
|
|
||||||
this.emailManager = new EmailManager()
|
this.emailManager = new EmailManager()
|
||||||
this.backupManager = new BackupManager(this.notificationManager)
|
this.backupManager = new BackupManager()
|
||||||
this.abMergeManager = new AbMergeManager()
|
this.abMergeManager = new AbMergeManager()
|
||||||
this.playbackSessionManager = new PlaybackSessionManager()
|
this.playbackSessionManager = new PlaybackSessionManager()
|
||||||
this.podcastManager = new PodcastManager(this.watcher, this.notificationManager)
|
this.podcastManager = new PodcastManager(this.watcher)
|
||||||
this.audioMetadataManager = new AudioMetadataMangaer()
|
this.audioMetadataManager = new AudioMetadataMangaer()
|
||||||
this.rssFeedManager = new RssFeedManager()
|
this.rssFeedManager = new RssFeedManager()
|
||||||
this.cronManager = new CronManager(this.podcastManager, this.playbackSessionManager)
|
this.cronManager = new CronManager(this.podcastManager, this.playbackSessionManager)
|
||||||
@@ -182,7 +180,7 @@ class Server {
|
|||||||
* @see https://nodejs.org/api/process.html#event-unhandledrejection
|
* @see https://nodejs.org/api/process.html#event-unhandledrejection
|
||||||
*/
|
*/
|
||||||
process.on('unhandledRejection', async (reason, promise) => {
|
process.on('unhandledRejection', async (reason, promise) => {
|
||||||
await Logger.fatal(`[Server] Unhandled rejection: ${reason}, promise:`, util.format('%O', promise))
|
await Logger.fatal('[Server] Unhandled rejection:', reason, '\npromise:', util.format('%O', promise))
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-2
@@ -301,7 +301,12 @@ class FolderWatcher extends EventEmitter {
|
|||||||
libraryId,
|
libraryId,
|
||||||
libraryName: libwatcher.name
|
libraryName: libwatcher.name
|
||||||
}
|
}
|
||||||
this.pendingTask = TaskManager.createAndAddTask('watcher-scan', `Scanning file changes in "${libwatcher.name}"`, null, true, taskData)
|
const taskTitleString = {
|
||||||
|
text: `Scanning file changes in "${libwatcher.name}"`,
|
||||||
|
key: 'MessageTaskScanningFileChanges',
|
||||||
|
subs: [libwatcher.name]
|
||||||
|
}
|
||||||
|
this.pendingTask = TaskManager.createAndAddTask('watcher-scan', taskTitleString, null, true, taskData)
|
||||||
}
|
}
|
||||||
this.pendingFileUpdates.push({
|
this.pendingFileUpdates.push({
|
||||||
path,
|
path,
|
||||||
@@ -330,7 +335,11 @@ class FolderWatcher extends EventEmitter {
|
|||||||
if (this.pendingFileUpdates.length) {
|
if (this.pendingFileUpdates.length) {
|
||||||
LibraryScanner.scanFilesChanged(this.pendingFileUpdates, this.pendingTask)
|
LibraryScanner.scanFilesChanged(this.pendingFileUpdates, this.pendingTask)
|
||||||
} else {
|
} else {
|
||||||
this.pendingTask.setFinished('Scan abandoned. No files to scan.')
|
const taskFinishedString = {
|
||||||
|
text: 'No files to scan',
|
||||||
|
key: 'MessageTaskNoFilesToScan'
|
||||||
|
}
|
||||||
|
this.pendingTask.setFinished(taskFinishedString)
|
||||||
TaskManager.taskFinished(this.pendingTask)
|
TaskManager.taskFinished(this.pendingTask)
|
||||||
}
|
}
|
||||||
this.pendingTask = null
|
this.pendingTask = null
|
||||||
|
|||||||
@@ -503,6 +503,14 @@ class LibraryController {
|
|||||||
collapseseries: req.query.collapseseries === '1',
|
collapseseries: req.query.collapseseries === '1',
|
||||||
include: include.join(',')
|
include: include.join(',')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Number.isInteger(payload.limit) || payload.limit < 0) {
|
||||||
|
return res.status(400).send('Invalid request. Limit must be a positive integer')
|
||||||
|
}
|
||||||
|
if (!Number.isInteger(payload.page) || payload.page < 0) {
|
||||||
|
return res.status(400).send('Invalid request. Page must be a positive integer')
|
||||||
|
}
|
||||||
|
|
||||||
payload.offset = payload.page * payload.limit
|
payload.offset = payload.page * payload.limit
|
||||||
|
|
||||||
// TODO: Temporary way of handling collapse sub-series. Either remove feature or handle through sql queries
|
// TODO: Temporary way of handling collapse sub-series. Either remove feature or handle through sql queries
|
||||||
|
|||||||
@@ -384,7 +384,7 @@ class LibraryItemController {
|
|||||||
* @param {Response} res
|
* @param {Response} res
|
||||||
*/
|
*/
|
||||||
startPlaybackSession(req, res) {
|
startPlaybackSession(req, res) {
|
||||||
if (!req.libraryItem.media.numTracks && req.libraryItem.mediaType !== 'video') {
|
if (!req.libraryItem.media.numTracks) {
|
||||||
Logger.error(`[LibraryItemController] startPlaybackSession cannot playback ${req.libraryItem.id}`)
|
Logger.error(`[LibraryItemController] startPlaybackSession cannot playback ${req.libraryItem.id}`)
|
||||||
return res.sendStatus(404)
|
return res.sendStatus(404)
|
||||||
}
|
}
|
||||||
@@ -480,7 +480,7 @@ class LibraryItemController {
|
|||||||
const libraryId = itemsToDelete[0].libraryId
|
const libraryId = itemsToDelete[0].libraryId
|
||||||
for (const libraryItem of itemsToDelete) {
|
for (const libraryItem of itemsToDelete) {
|
||||||
const libraryItemPath = libraryItem.path
|
const libraryItemPath = libraryItem.path
|
||||||
Logger.info(`[LibraryItemController] Deleting Library Item "${libraryItem.media.metadata.title}"`)
|
Logger.info(`[LibraryItemController] (${hardDelete ? 'Hard' : 'Soft'}) deleting Library Item "${libraryItem.media.metadata.title}" with id "${libraryItem.id}"`)
|
||||||
const mediaItemIds = libraryItem.mediaType === 'podcast' ? libraryItem.media.episodes.map((ep) => ep.id) : [libraryItem.media.id]
|
const mediaItemIds = libraryItem.mediaType === 'podcast' ? libraryItem.media.episodes.map((ep) => ep.id) : [libraryItem.media.id]
|
||||||
await this.handleDeleteLibraryItem(libraryItem.mediaType, libraryItem.id, mediaItemIds)
|
await this.handleDeleteLibraryItem(libraryItem.mediaType, libraryItem.id, mediaItemIds)
|
||||||
if (hardDelete) {
|
if (hardDelete) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
const { Request, Response, NextFunction } = require('express')
|
const { Request, Response, NextFunction } = require('express')
|
||||||
const Database = require('../Database')
|
const Database = require('../Database')
|
||||||
const { version } = require('../../package.json')
|
const { version } = require('../../package.json')
|
||||||
|
const NotificationManager = require('../managers/NotificationManager')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef RequestUserObject
|
* @typedef RequestUserObject
|
||||||
@@ -23,7 +24,7 @@ class NotificationController {
|
|||||||
*/
|
*/
|
||||||
get(req, res) {
|
get(req, res) {
|
||||||
res.json({
|
res.json({
|
||||||
data: this.notificationManager.getData(),
|
data: NotificationManager.getData(),
|
||||||
settings: Database.notificationSettings
|
settings: Database.notificationSettings
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -52,7 +53,7 @@ class NotificationController {
|
|||||||
* @param {Response} res
|
* @param {Response} res
|
||||||
*/
|
*/
|
||||||
getData(req, res) {
|
getData(req, res) {
|
||||||
res.json(this.notificationManager.getData())
|
res.json(NotificationManager.getData())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -64,7 +65,7 @@ class NotificationController {
|
|||||||
* @param {Response} res
|
* @param {Response} res
|
||||||
*/
|
*/
|
||||||
async fireTestEvent(req, res) {
|
async fireTestEvent(req, res) {
|
||||||
await this.notificationManager.triggerNotification('onTest', { version: `v${version}` }, req.query.fail === '1')
|
await NotificationManager.triggerNotification('onTest', { version: `v${version}` }, req.query.fail === '1')
|
||||||
res.sendStatus(200)
|
res.sendStatus(200)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,7 +122,7 @@ class NotificationController {
|
|||||||
async sendNotificationTest(req, res) {
|
async sendNotificationTest(req, res) {
|
||||||
if (!Database.notificationSettings.isUseable) return res.status(400).send('Apprise is not configured')
|
if (!Database.notificationSettings.isUseable) return res.status(400).send('Apprise is not configured')
|
||||||
|
|
||||||
const success = await this.notificationManager.sendTestNotification(req.notification)
|
const success = await NotificationManager.sendTestNotification(req.notification)
|
||||||
if (success) res.sendStatus(200)
|
if (success) res.sendStatus(200)
|
||||||
else res.sendStatus(500)
|
else res.sendStatus(500)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ const Logger = require('../Logger')
|
|||||||
const BookFinder = require('../finders/BookFinder')
|
const BookFinder = require('../finders/BookFinder')
|
||||||
const PodcastFinder = require('../finders/PodcastFinder')
|
const PodcastFinder = require('../finders/PodcastFinder')
|
||||||
const AuthorFinder = require('../finders/AuthorFinder')
|
const AuthorFinder = require('../finders/AuthorFinder')
|
||||||
const MusicFinder = require('../finders/MusicFinder')
|
|
||||||
const Database = require('../Database')
|
const Database = require('../Database')
|
||||||
const { isValidASIN } = require('../utils')
|
const { isValidASIN } = require('../utils')
|
||||||
|
|
||||||
|
|||||||
@@ -202,10 +202,14 @@ class BookFinder {
|
|||||||
* @returns {Promise<Object[]>}
|
* @returns {Promise<Object[]>}
|
||||||
*/
|
*/
|
||||||
async getCustomProviderResults(title, author, isbn, providerSlug) {
|
async getCustomProviderResults(title, author, isbn, providerSlug) {
|
||||||
const books = await this.customProviderAdapter.search(title, author, isbn, providerSlug, 'book', this.#providerResponseTimeout)
|
try {
|
||||||
if (this.verbose) Logger.debug(`Custom provider '${providerSlug}' Search Results: ${books.length || 0}`)
|
const books = await this.customProviderAdapter.search(title, author, isbn, providerSlug, 'book', this.#providerResponseTimeout)
|
||||||
|
if (this.verbose) Logger.debug(`Custom provider '${providerSlug}' Search Results: ${books.length || 0}`)
|
||||||
return books
|
return books
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`Error searching Custom provider '${providerSlug}':`, error)
|
||||||
|
return []
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static TitleCandidates = class {
|
static TitleCandidates = class {
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
const MusicBrainz = require('../providers/MusicBrainz')
|
|
||||||
|
|
||||||
class MusicFinder {
|
|
||||||
constructor() {
|
|
||||||
this.musicBrainz = new MusicBrainz()
|
|
||||||
}
|
|
||||||
|
|
||||||
searchTrack(options) {
|
|
||||||
return this.musicBrainz.searchTrack(options)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
module.exports = new MusicFinder()
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014-2017 Sequelize contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
'use strict'
|
||||||
|
var __createBinding =
|
||||||
|
(this && this.__createBinding) ||
|
||||||
|
(Object.create
|
||||||
|
? function (o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k)
|
||||||
|
if (!desc || ('get' in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return m[k]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc)
|
||||||
|
}
|
||||||
|
: function (o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k
|
||||||
|
o[k2] = m[k]
|
||||||
|
})
|
||||||
|
var __exportStar =
|
||||||
|
(this && this.__exportStar) ||
|
||||||
|
function (m, exports) {
|
||||||
|
for (var p in m) if (p !== 'default' && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p)
|
||||||
|
}
|
||||||
|
Object.defineProperty(exports, '__esModule', { value: true })
|
||||||
|
__exportStar(require('./umzug'), exports)
|
||||||
|
__exportStar(require('./storage'), exports)
|
||||||
|
__exportStar(require('./types'), exports)
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.verifyUmzugStorage = exports.isUmzugStorage = void 0;
|
||||||
|
function isUmzugStorage(arg) {
|
||||||
|
return (arg &&
|
||||||
|
typeof arg.logMigration === 'function' &&
|
||||||
|
typeof arg.unlogMigration === 'function' &&
|
||||||
|
typeof arg.executed === 'function');
|
||||||
|
}
|
||||||
|
exports.isUmzugStorage = isUmzugStorage;
|
||||||
|
const verifyUmzugStorage = (arg) => {
|
||||||
|
if (!isUmzugStorage(arg)) {
|
||||||
|
throw new Error(`Invalid umzug storage`);
|
||||||
|
}
|
||||||
|
return arg;
|
||||||
|
};
|
||||||
|
exports.verifyUmzugStorage = verifyUmzugStorage;
|
||||||
|
//# sourceMappingURL=contract.js.map
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
||||||
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
// codegen:start {preset: barrel}
|
||||||
|
__exportStar(require("./contract"), exports);
|
||||||
|
__exportStar(require("./json"), exports);
|
||||||
|
__exportStar(require("./memory"), exports);
|
||||||
|
__exportStar(require("./mongodb"), exports);
|
||||||
|
__exportStar(require("./sequelize"), exports);
|
||||||
|
// codegen:end
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.JSONStorage = void 0;
|
||||||
|
const fs_1 = require("fs");
|
||||||
|
const path = __importStar(require("path"));
|
||||||
|
const filesystem = {
|
||||||
|
/** reads a file as a string or returns null if file doesn't exist */
|
||||||
|
async readAsync(filepath) {
|
||||||
|
return fs_1.promises.readFile(filepath).then(c => c.toString(), () => null);
|
||||||
|
},
|
||||||
|
/** writes a string as file contents, creating its parent directory if necessary */
|
||||||
|
async writeAsync(filepath, content) {
|
||||||
|
await fs_1.promises.mkdir(path.dirname(filepath), { recursive: true });
|
||||||
|
await fs_1.promises.writeFile(filepath, content);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
class JSONStorage {
|
||||||
|
constructor(options) {
|
||||||
|
var _a;
|
||||||
|
this.path = (_a = options === null || options === void 0 ? void 0 : options.path) !== null && _a !== void 0 ? _a : path.join(process.cwd(), 'umzug.json');
|
||||||
|
}
|
||||||
|
async logMigration({ name: migrationName }) {
|
||||||
|
const loggedMigrations = await this.executed();
|
||||||
|
loggedMigrations.push(migrationName);
|
||||||
|
await filesystem.writeAsync(this.path, JSON.stringify(loggedMigrations, null, 2));
|
||||||
|
}
|
||||||
|
async unlogMigration({ name: migrationName }) {
|
||||||
|
const loggedMigrations = await this.executed();
|
||||||
|
const updatedMigrations = loggedMigrations.filter(name => name !== migrationName);
|
||||||
|
await filesystem.writeAsync(this.path, JSON.stringify(updatedMigrations, null, 2));
|
||||||
|
}
|
||||||
|
async executed() {
|
||||||
|
const content = await filesystem.readAsync(this.path);
|
||||||
|
return content ? JSON.parse(content) : [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.JSONStorage = JSONStorage;
|
||||||
|
//# sourceMappingURL=json.js.map
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.memoryStorage = void 0;
|
||||||
|
const memoryStorage = () => {
|
||||||
|
let executed = [];
|
||||||
|
return {
|
||||||
|
async logMigration({ name }) {
|
||||||
|
executed.push(name);
|
||||||
|
},
|
||||||
|
async unlogMigration({ name }) {
|
||||||
|
executed = executed.filter(n => n !== name);
|
||||||
|
},
|
||||||
|
executed: async () => [...executed],
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.memoryStorage = memoryStorage;
|
||||||
|
//# sourceMappingURL=memory.js.map
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.MongoDBStorage = void 0;
|
||||||
|
function isMongoDBCollectionOptions(arg) {
|
||||||
|
return Boolean(arg.collection);
|
||||||
|
}
|
||||||
|
class MongoDBStorage {
|
||||||
|
constructor(options) {
|
||||||
|
var _a, _b;
|
||||||
|
if (!options || (!options.collection && !options.connection)) {
|
||||||
|
throw new Error('MongoDB Connection or Collection required');
|
||||||
|
}
|
||||||
|
this.collection = isMongoDBCollectionOptions(options)
|
||||||
|
? options.collection
|
||||||
|
: options.connection.collection((_a = options.collectionName) !== null && _a !== void 0 ? _a : 'migrations');
|
||||||
|
this.connection = options.connection; // TODO remove this
|
||||||
|
this.collectionName = (_b = options.collectionName) !== null && _b !== void 0 ? _b : 'migrations'; // TODO remove this
|
||||||
|
}
|
||||||
|
async logMigration({ name: migrationName }) {
|
||||||
|
await this.collection.insertOne({ migrationName });
|
||||||
|
}
|
||||||
|
async unlogMigration({ name: migrationName }) {
|
||||||
|
await this.collection.deleteOne({ migrationName });
|
||||||
|
}
|
||||||
|
async executed() {
|
||||||
|
const records = await this.collection.find({}).sort({ migrationName: 1 }).toArray();
|
||||||
|
return records.map(r => r.migrationName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.MongoDBStorage = MongoDBStorage;
|
||||||
|
//# sourceMappingURL=mongodb.js.map
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.SequelizeStorage = void 0;
|
||||||
|
const DIALECTS_WITH_CHARSET_AND_COLLATE = new Set(['mysql', 'mariadb']);
|
||||||
|
class SequelizeStorage {
|
||||||
|
/**
|
||||||
|
Constructs Sequelize based storage. Migrations will be stored in a SequelizeMeta table using the given instance of Sequelize.
|
||||||
|
|
||||||
|
If a model is given, it will be used directly as the model for the SequelizeMeta table. Otherwise, it will be created automatically according to the given options.
|
||||||
|
|
||||||
|
If the table does not exist it will be created automatically upon the logging of the first migration.
|
||||||
|
*/
|
||||||
|
constructor(options) {
|
||||||
|
var _a, _b, _c, _d, _e, _f;
|
||||||
|
if (!options || (!options.model && !options.sequelize)) {
|
||||||
|
throw new Error('One of "sequelize" or "model" storage option is required');
|
||||||
|
}
|
||||||
|
this.sequelize = (_a = options.sequelize) !== null && _a !== void 0 ? _a : options.model.sequelize;
|
||||||
|
this.columnType = (_b = options.columnType) !== null && _b !== void 0 ? _b : this.sequelize.constructor.DataTypes.STRING;
|
||||||
|
this.columnName = (_c = options.columnName) !== null && _c !== void 0 ? _c : 'name';
|
||||||
|
this.timestamps = (_d = options.timestamps) !== null && _d !== void 0 ? _d : false;
|
||||||
|
this.modelName = (_e = options.modelName) !== null && _e !== void 0 ? _e : 'SequelizeMeta';
|
||||||
|
this.tableName = options.tableName;
|
||||||
|
this.schema = options.schema;
|
||||||
|
this.model = (_f = options.model) !== null && _f !== void 0 ? _f : this.getModel();
|
||||||
|
}
|
||||||
|
getModel() {
|
||||||
|
var _a;
|
||||||
|
if (this.sequelize.isDefined(this.modelName)) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||||
|
return this.sequelize.model(this.modelName);
|
||||||
|
}
|
||||||
|
const dialectName = (_a = this.sequelize.dialect) === null || _a === void 0 ? void 0 : _a.name;
|
||||||
|
const hasCharsetAndCollate = dialectName && DIALECTS_WITH_CHARSET_AND_COLLATE.has(dialectName);
|
||||||
|
return this.sequelize.define(this.modelName, {
|
||||||
|
[this.columnName]: {
|
||||||
|
type: this.columnType,
|
||||||
|
allowNull: false,
|
||||||
|
unique: true,
|
||||||
|
primaryKey: true,
|
||||||
|
autoIncrement: false,
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
tableName: this.tableName,
|
||||||
|
schema: this.schema,
|
||||||
|
timestamps: this.timestamps,
|
||||||
|
charset: hasCharsetAndCollate ? 'utf8' : undefined,
|
||||||
|
collate: hasCharsetAndCollate ? 'utf8_unicode_ci' : undefined,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async syncModel() {
|
||||||
|
await this.model.sync();
|
||||||
|
}
|
||||||
|
async logMigration({ name: migrationName }) {
|
||||||
|
await this.syncModel();
|
||||||
|
await this.model.create({
|
||||||
|
[this.columnName]: migrationName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async unlogMigration({ name: migrationName }) {
|
||||||
|
await this.syncModel();
|
||||||
|
await this.model.destroy({
|
||||||
|
where: {
|
||||||
|
[this.columnName]: migrationName,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async executed() {
|
||||||
|
await this.syncModel();
|
||||||
|
const migrations = await this.model.findAll({ order: [[this.columnName, 'ASC']] });
|
||||||
|
return migrations.map(migration => {
|
||||||
|
const name = migration[this.columnName];
|
||||||
|
if (typeof name !== 'string') {
|
||||||
|
throw new TypeError(`Unexpected migration name type: expected string, got ${typeof name}`);
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// TODO remove this
|
||||||
|
_model() {
|
||||||
|
return this.model;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.SequelizeStorage = SequelizeStorage;
|
||||||
|
//# sourceMappingURL=sequelize.js.map
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
'use strict'
|
||||||
|
/* eslint-disable unicorn/template-indent */
|
||||||
|
// templates for migration file creation
|
||||||
|
Object.defineProperty(exports, '__esModule', { value: true })
|
||||||
|
exports.sqlDown = exports.sqlUp = exports.mjs = exports.ts = exports.js = void 0
|
||||||
|
exports.js = `
|
||||||
|
/** @type {import('umzug').MigrationFn<any>} */
|
||||||
|
exports.up = async params => {};
|
||||||
|
|
||||||
|
/** @type {import('umzug').MigrationFn<any>} */
|
||||||
|
exports.down = async params => {};
|
||||||
|
`.trimStart()
|
||||||
|
exports.ts = `
|
||||||
|
import type { MigrationFn } from 'umzug';
|
||||||
|
|
||||||
|
export const up: MigrationFn = async params => {};
|
||||||
|
export const down: MigrationFn = async params => {};
|
||||||
|
`.trimStart()
|
||||||
|
exports.mjs = `
|
||||||
|
/** @type {import('umzug').MigrationFn<any>} */
|
||||||
|
export const up = async params => {};
|
||||||
|
|
||||||
|
/** @type {import('umzug').MigrationFn<any>} */
|
||||||
|
export const down = async params => {};
|
||||||
|
`.trimStart()
|
||||||
|
exports.sqlUp = `
|
||||||
|
-- up migration
|
||||||
|
`.trimStart()
|
||||||
|
exports.sqlDown = `
|
||||||
|
-- down migration
|
||||||
|
`.trimStart()
|
||||||
|
//# sourceMappingURL=templates.js.map
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
'use strict'
|
||||||
|
Object.defineProperty(exports, '__esModule', { value: true })
|
||||||
|
exports.RerunBehavior = void 0
|
||||||
|
exports.RerunBehavior = {
|
||||||
|
/** Hard error if an up migration that has already been run, or a down migration that hasn't, is encountered */
|
||||||
|
THROW: 'THROW',
|
||||||
|
/** Silently skip up migrations that have already been run, or down migrations that haven't */
|
||||||
|
SKIP: 'SKIP',
|
||||||
|
/** Re-run up migrations that have already been run, or down migrations that haven't */
|
||||||
|
ALLOW: 'ALLOW'
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=types.js.map
|
||||||
@@ -0,0 +1,386 @@
|
|||||||
|
'use strict'
|
||||||
|
var __createBinding =
|
||||||
|
(this && this.__createBinding) ||
|
||||||
|
(Object.create
|
||||||
|
? function (o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k)
|
||||||
|
if (!desc || ('get' in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return m[k]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc)
|
||||||
|
}
|
||||||
|
: function (o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k
|
||||||
|
o[k2] = m[k]
|
||||||
|
})
|
||||||
|
var __setModuleDefault =
|
||||||
|
(this && this.__setModuleDefault) ||
|
||||||
|
(Object.create
|
||||||
|
? function (o, v) {
|
||||||
|
Object.defineProperty(o, 'default', { enumerable: true, value: v })
|
||||||
|
}
|
||||||
|
: function (o, v) {
|
||||||
|
o['default'] = v
|
||||||
|
})
|
||||||
|
var __importStar =
|
||||||
|
(this && this.__importStar) ||
|
||||||
|
function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod
|
||||||
|
var result = {}
|
||||||
|
if (mod != null) for (var k in mod) if (k !== 'default' && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k)
|
||||||
|
__setModuleDefault(result, mod)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
var __importDefault =
|
||||||
|
(this && this.__importDefault) ||
|
||||||
|
function (mod) {
|
||||||
|
return mod && mod.__esModule ? mod : { default: mod }
|
||||||
|
}
|
||||||
|
var _a
|
||||||
|
Object.defineProperty(exports, '__esModule', { value: true })
|
||||||
|
exports.Umzug = exports.MigrationError = void 0
|
||||||
|
const fs = __importStar(require('fs'))
|
||||||
|
const path = __importStar(require('path'))
|
||||||
|
const storage_1 = require('./storage')
|
||||||
|
const templates = __importStar(require('./templates'))
|
||||||
|
const types_1 = require('./types')
|
||||||
|
class MigrationError extends Error {
|
||||||
|
// TODO [>=4.0.0] Take a `{ cause: ... }` options bag like the default `Error`, it looks like this because of verror backwards-compatibility.
|
||||||
|
constructor(migration, original) {
|
||||||
|
super(`Migration ${migration.name} (${migration.direction}) failed: ${MigrationError.errorString(original)}`, {
|
||||||
|
cause: original
|
||||||
|
})
|
||||||
|
this.name = 'MigrationError'
|
||||||
|
this.migration = migration
|
||||||
|
}
|
||||||
|
// TODO [>=4.0.0] Remove this backwards-compatibility alias
|
||||||
|
get info() {
|
||||||
|
return this.migration
|
||||||
|
}
|
||||||
|
static errorString(cause) {
|
||||||
|
return cause instanceof Error ? `Original error: ${cause.message}` : `Non-error value thrown. See info for full props: ${cause}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.MigrationError = MigrationError
|
||||||
|
class Umzug {
|
||||||
|
/** creates a new Umzug instance */
|
||||||
|
constructor(options) {
|
||||||
|
var _b
|
||||||
|
this.options = options
|
||||||
|
this.storage = (0, storage_1.verifyUmzugStorage)((_b = options.storage) !== null && _b !== void 0 ? _b : new storage_1.JSONStorage())
|
||||||
|
this.migrations = this.getMigrationsResolver(this.options.migrations)
|
||||||
|
}
|
||||||
|
logging(message) {
|
||||||
|
var _b
|
||||||
|
;(_b = this.options.logger) === null || _b === void 0 ? void 0 : _b.info(message)
|
||||||
|
}
|
||||||
|
/** Get the list of migrations which have already been applied */
|
||||||
|
async executed() {
|
||||||
|
return this.runCommand('executed', async ({ context }) => {
|
||||||
|
const list = await this._executed(context)
|
||||||
|
// We do the following to not expose the `up` and `down` functions to the user
|
||||||
|
return list.map((m) => ({ name: m.name, path: m.path }))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/** Get the list of migrations which have already been applied */
|
||||||
|
async _executed(context) {
|
||||||
|
const [migrations, executedNames] = await Promise.all([this.migrations(context), this.storage.executed({ context })])
|
||||||
|
const executedSet = new Set(executedNames)
|
||||||
|
return migrations.filter((m) => executedSet.has(m.name))
|
||||||
|
}
|
||||||
|
/** Get the list of migrations which are yet to be applied */
|
||||||
|
async pending() {
|
||||||
|
return this.runCommand('pending', async ({ context }) => {
|
||||||
|
const list = await this._pending(context)
|
||||||
|
// We do the following to not expose the `up` and `down` functions to the user
|
||||||
|
return list.map((m) => ({ name: m.name, path: m.path }))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
async _pending(context) {
|
||||||
|
const [migrations, executedNames] = await Promise.all([this.migrations(context), this.storage.executed({ context })])
|
||||||
|
const executedSet = new Set(executedNames)
|
||||||
|
return migrations.filter((m) => !executedSet.has(m.name))
|
||||||
|
}
|
||||||
|
async runCommand(command, cb) {
|
||||||
|
const context = await this.getContext()
|
||||||
|
return await cb({ context })
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Apply migrations. By default, runs all pending migrations.
|
||||||
|
* @see MigrateUpOptions for other use cases using `to`, `migrations` and `rerun`.
|
||||||
|
*/
|
||||||
|
async up(options = {}) {
|
||||||
|
const eligibleMigrations = async (context) => {
|
||||||
|
var _b
|
||||||
|
if (options.migrations && options.rerun === types_1.RerunBehavior.ALLOW) {
|
||||||
|
// Allow rerun means the specified migrations should be run even if they've run before - so get all migrations, not just pending
|
||||||
|
const list = await this.migrations(context)
|
||||||
|
return this.findMigrations(list, options.migrations)
|
||||||
|
}
|
||||||
|
if (options.migrations && options.rerun === types_1.RerunBehavior.SKIP) {
|
||||||
|
const executedNames = new Set((await this._executed(context)).map((m) => m.name))
|
||||||
|
const filteredMigrations = options.migrations.filter((m) => !executedNames.has(m))
|
||||||
|
return this.findMigrations(await this.migrations(context), filteredMigrations)
|
||||||
|
}
|
||||||
|
if (options.migrations) {
|
||||||
|
return this.findMigrations(await this._pending(context), options.migrations)
|
||||||
|
}
|
||||||
|
const allPending = await this._pending(context)
|
||||||
|
let sliceIndex = (_b = options.step) !== null && _b !== void 0 ? _b : allPending.length
|
||||||
|
if (options.to) {
|
||||||
|
sliceIndex = this.findNameIndex(allPending, options.to) + 1
|
||||||
|
}
|
||||||
|
return allPending.slice(0, sliceIndex)
|
||||||
|
}
|
||||||
|
return this.runCommand('up', async ({ context }) => {
|
||||||
|
const toBeApplied = await eligibleMigrations(context)
|
||||||
|
for (const m of toBeApplied) {
|
||||||
|
const start = Date.now()
|
||||||
|
const params = { name: m.name, path: m.path, context }
|
||||||
|
this.logging({ event: 'migrating', name: m.name })
|
||||||
|
try {
|
||||||
|
await m.up(params)
|
||||||
|
} catch (e) {
|
||||||
|
throw new MigrationError({ direction: 'up', ...params }, e)
|
||||||
|
}
|
||||||
|
await this.storage.logMigration(params)
|
||||||
|
const duration = (Date.now() - start) / 1000
|
||||||
|
this.logging({ event: 'migrated', name: m.name, durationSeconds: duration })
|
||||||
|
}
|
||||||
|
return toBeApplied.map((m) => ({ name: m.name, path: m.path }))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Revert migrations. By default, the last executed migration is reverted.
|
||||||
|
* @see MigrateDownOptions for other use cases using `to`, `migrations` and `rerun`.
|
||||||
|
*/
|
||||||
|
async down(options = {}) {
|
||||||
|
const eligibleMigrations = async (context) => {
|
||||||
|
var _b
|
||||||
|
if (options.migrations && options.rerun === types_1.RerunBehavior.ALLOW) {
|
||||||
|
const list = await this.migrations(context)
|
||||||
|
return this.findMigrations(list, options.migrations)
|
||||||
|
}
|
||||||
|
if (options.migrations && options.rerun === types_1.RerunBehavior.SKIP) {
|
||||||
|
const pendingNames = new Set((await this._pending(context)).map((m) => m.name))
|
||||||
|
const filteredMigrations = options.migrations.filter((m) => !pendingNames.has(m))
|
||||||
|
return this.findMigrations(await this.migrations(context), filteredMigrations)
|
||||||
|
}
|
||||||
|
if (options.migrations) {
|
||||||
|
return this.findMigrations(await this._executed(context), options.migrations)
|
||||||
|
}
|
||||||
|
const executedReversed = (await this._executed(context)).slice().reverse()
|
||||||
|
let sliceIndex = (_b = options.step) !== null && _b !== void 0 ? _b : 1
|
||||||
|
if (options.to === 0 || options.migrations) {
|
||||||
|
sliceIndex = executedReversed.length
|
||||||
|
} else if (options.to) {
|
||||||
|
sliceIndex = this.findNameIndex(executedReversed, options.to) + 1
|
||||||
|
}
|
||||||
|
return executedReversed.slice(0, sliceIndex)
|
||||||
|
}
|
||||||
|
return this.runCommand('down', async ({ context }) => {
|
||||||
|
var _b
|
||||||
|
const toBeReverted = await eligibleMigrations(context)
|
||||||
|
for (const m of toBeReverted) {
|
||||||
|
const start = Date.now()
|
||||||
|
const params = { name: m.name, path: m.path, context }
|
||||||
|
this.logging({ event: 'reverting', name: m.name })
|
||||||
|
try {
|
||||||
|
await ((_b = m.down) === null || _b === void 0 ? void 0 : _b.call(m, params))
|
||||||
|
} catch (e) {
|
||||||
|
throw new MigrationError({ direction: 'down', ...params }, e)
|
||||||
|
}
|
||||||
|
await this.storage.unlogMigration(params)
|
||||||
|
const duration = Number.parseFloat(((Date.now() - start) / 1000).toFixed(3))
|
||||||
|
this.logging({ event: 'reverted', name: m.name, durationSeconds: duration })
|
||||||
|
}
|
||||||
|
return toBeReverted.map((m) => ({ name: m.name, path: m.path }))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
async create(options) {
|
||||||
|
await this.runCommand('create', async ({ context }) => {
|
||||||
|
var _b, _c, _d, _e
|
||||||
|
const isoDate = new Date().toISOString()
|
||||||
|
const prefixes = {
|
||||||
|
TIMESTAMP: isoDate.replace(/\.\d{3}Z$/, '').replace(/\W/g, '.'),
|
||||||
|
DATE: isoDate.split('T')[0].replace(/\W/g, '.'),
|
||||||
|
NONE: ''
|
||||||
|
}
|
||||||
|
const prefixType = (_b = options.prefix) !== null && _b !== void 0 ? _b : 'TIMESTAMP'
|
||||||
|
const fileBasename = [prefixes[prefixType], options.name].filter(Boolean).join('.')
|
||||||
|
const allowedExtensions = options.allowExtension ? [options.allowExtension] : ['.js', '.cjs', '.mjs', '.ts', '.cts', '.mts', '.sql']
|
||||||
|
const existing = await this.migrations(context)
|
||||||
|
const last = existing.slice(-1)[0]
|
||||||
|
const folder = options.folder || ((_c = this.options.create) === null || _c === void 0 ? void 0 : _c.folder) || ((last === null || last === void 0 ? void 0 : last.path) && path.dirname(last.path))
|
||||||
|
if (!folder) {
|
||||||
|
throw new Error(`Couldn't infer a directory to generate migration file in. Pass folder explicitly`)
|
||||||
|
}
|
||||||
|
const filepath = path.join(folder, fileBasename)
|
||||||
|
if (!options.allowConfusingOrdering) {
|
||||||
|
const confusinglyOrdered = existing.find((e) => e.path && e.path >= filepath)
|
||||||
|
if (confusinglyOrdered) {
|
||||||
|
throw new Error(`Can't create ${fileBasename}, since it's unclear if it should run before or after existing migration ${confusinglyOrdered.name}. Use allowConfusingOrdering to bypass this error.`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const template =
|
||||||
|
typeof options.content === 'string'
|
||||||
|
? async () => [[filepath, options.content]]
|
||||||
|
: // eslint-disable-next-line @typescript-eslint/unbound-method
|
||||||
|
(_e = (_d = this.options.create) === null || _d === void 0 ? void 0 : _d.template) !== null && _e !== void 0
|
||||||
|
? _e
|
||||||
|
: Umzug.defaultCreationTemplate
|
||||||
|
const toWrite = await template(filepath)
|
||||||
|
if (toWrite.length === 0) {
|
||||||
|
toWrite.push([filepath, ''])
|
||||||
|
}
|
||||||
|
toWrite.forEach((pair) => {
|
||||||
|
if (!Array.isArray(pair) || pair.length !== 2) {
|
||||||
|
throw new Error(`Expected [filepath, content] pair. Check that the file template function returns an array of pairs.`)
|
||||||
|
}
|
||||||
|
const ext = path.extname(pair[0])
|
||||||
|
if (!allowedExtensions.includes(ext)) {
|
||||||
|
const allowStr = allowedExtensions.join(', ')
|
||||||
|
const message = `Extension ${ext} not allowed. Allowed extensions are ${allowStr}. See help for allowExtension to avoid this error.`
|
||||||
|
throw new Error(message)
|
||||||
|
}
|
||||||
|
fs.mkdirSync(path.dirname(pair[0]), { recursive: true })
|
||||||
|
fs.writeFileSync(pair[0], pair[1])
|
||||||
|
this.logging({ event: 'created', path: pair[0] })
|
||||||
|
})
|
||||||
|
if (!options.skipVerify) {
|
||||||
|
const [firstFilePath] = toWrite[0]
|
||||||
|
const pending = await this._pending(context)
|
||||||
|
if (!pending.some((p) => p.path && path.resolve(p.path) === path.resolve(firstFilePath))) {
|
||||||
|
const paths = pending.map((p) => p.path).join(', ')
|
||||||
|
throw new Error(`Expected ${firstFilePath} to be a pending migration but it wasn't! Pending migration paths: ${paths}. You should investigate this. Use skipVerify to bypass this error.`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
static defaultCreationTemplate(filepath) {
|
||||||
|
const ext = path.extname(filepath)
|
||||||
|
if ((ext === '.js' && typeof require.main === 'object') || ext === '.cjs') {
|
||||||
|
return [[filepath, templates.js]]
|
||||||
|
}
|
||||||
|
if (ext === '.ts' || ext === '.mts' || ext === '.cts') {
|
||||||
|
return [[filepath, templates.ts]]
|
||||||
|
}
|
||||||
|
if ((ext === '.js' && require.main === undefined) || ext === '.mjs') {
|
||||||
|
return [[filepath, templates.mjs]]
|
||||||
|
}
|
||||||
|
if (ext === '.sql') {
|
||||||
|
const downFilepath = path.join(path.dirname(filepath), 'down', path.basename(filepath))
|
||||||
|
return [
|
||||||
|
[filepath, templates.sqlUp],
|
||||||
|
[downFilepath, templates.sqlDown]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
findNameIndex(migrations, name) {
|
||||||
|
const index = migrations.findIndex((m) => m.name === name)
|
||||||
|
if (index === -1) {
|
||||||
|
throw new Error(`Couldn't find migration to apply with name ${JSON.stringify(name)}`)
|
||||||
|
}
|
||||||
|
return index
|
||||||
|
}
|
||||||
|
findMigrations(migrations, names) {
|
||||||
|
const map = new Map(migrations.map((m) => [m.name, m]))
|
||||||
|
return names.map((name) => {
|
||||||
|
const migration = map.get(name)
|
||||||
|
if (!migration) {
|
||||||
|
throw new Error(`Couldn't find migration to apply with name ${JSON.stringify(name)}`)
|
||||||
|
}
|
||||||
|
return migration
|
||||||
|
})
|
||||||
|
}
|
||||||
|
async getContext() {
|
||||||
|
const { context = {} } = this.options
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||||
|
return typeof context === 'function' ? context() : context
|
||||||
|
}
|
||||||
|
/** helper for parsing input migrations into a callback returning a list of ready-to-run migrations */
|
||||||
|
getMigrationsResolver(inputMigrations) {
|
||||||
|
var _b
|
||||||
|
if (Array.isArray(inputMigrations)) {
|
||||||
|
return async () => inputMigrations
|
||||||
|
}
|
||||||
|
if (typeof inputMigrations === 'function') {
|
||||||
|
// Lazy migrations definition, recurse.
|
||||||
|
return async (ctx) => {
|
||||||
|
const resolved = await inputMigrations(ctx)
|
||||||
|
return this.getMigrationsResolver(resolved)(ctx)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const paths = inputMigrations.files
|
||||||
|
const resolver = (_b = inputMigrations.resolve) !== null && _b !== void 0 ? _b : Umzug.defaultResolver
|
||||||
|
return async (context) => {
|
||||||
|
paths.sort()
|
||||||
|
return paths.map((unresolvedPath) => {
|
||||||
|
const filepath = path.resolve(unresolvedPath)
|
||||||
|
const name = path.basename(filepath)
|
||||||
|
return {
|
||||||
|
path: filepath,
|
||||||
|
...resolver({ name, path: filepath, context })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.Umzug = Umzug
|
||||||
|
_a = Umzug
|
||||||
|
Umzug.defaultResolver = ({ name, path: filepath }) => {
|
||||||
|
if (!filepath) {
|
||||||
|
throw new Error(`Can't use default resolver for non-filesystem migrations`)
|
||||||
|
}
|
||||||
|
const ext = path.extname(filepath)
|
||||||
|
const languageSpecificHelp = {
|
||||||
|
'.ts': "TypeScript files can be required by adding `ts-node` as a dependency and calling `require('ts-node/register')` at the program entrypoint before running migrations.",
|
||||||
|
'.sql': 'Try writing a resolver which reads file content and executes it as a sql query.'
|
||||||
|
}
|
||||||
|
languageSpecificHelp['.cts'] = languageSpecificHelp['.ts']
|
||||||
|
languageSpecificHelp['.mts'] = languageSpecificHelp['.ts']
|
||||||
|
let loadModule
|
||||||
|
const jsExt = ext.replace(/\.([cm]?)ts$/, '.$1js')
|
||||||
|
const getModule = async () => {
|
||||||
|
try {
|
||||||
|
return await loadModule()
|
||||||
|
} catch (e) {
|
||||||
|
if ((e instanceof SyntaxError || e instanceof MissingResolverError) && ext in languageSpecificHelp) {
|
||||||
|
e.message += '\n\n' + languageSpecificHelp[ext]
|
||||||
|
}
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((jsExt === '.js' && typeof require.main === 'object') || jsExt === '.cjs') {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||||
|
loadModule = async () => require(filepath)
|
||||||
|
} else if (jsExt === '.js' || jsExt === '.mjs') {
|
||||||
|
loadModule = async () => import(filepath)
|
||||||
|
} else {
|
||||||
|
loadModule = async () => {
|
||||||
|
throw new MissingResolverError(filepath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
name,
|
||||||
|
path: filepath,
|
||||||
|
up: async ({ context }) => (await getModule()).up({ path: filepath, name, context }),
|
||||||
|
down: async ({ context }) => {
|
||||||
|
var _b, _c
|
||||||
|
return (_c = (_b = await getModule()).down) === null || _c === void 0 ? void 0 : _c.call(_b, { path: filepath, name, context })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class MissingResolverError extends Error {
|
||||||
|
constructor(filepath) {
|
||||||
|
super(`No resolver specified for file ${filepath}. See docs for guidance on how to write a custom resolver.`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=umzug.js.map
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user