mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-06-04 01:40:40 +02:00
Compare commits
120 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a7469851d | |||
| 1d57daa9f9 | |||
| caf2b664f1 | |||
| b3b2bd7772 | |||
| 95864705dc | |||
| 0fbba3efbd | |||
| 575927c101 | |||
| 45aaaf9f0b | |||
| 51704f41aa | |||
| e701a0a32e | |||
| fbe186a925 | |||
| 6ed2b575b0 | |||
| 558173e086 | |||
| 23067e1818 | |||
| 9b4732c207 | |||
| e096da1b4d | |||
| a4d0f95ecc | |||
| 922a5039ce | |||
| f258782e2e | |||
| 1ea1e60d4b | |||
| 7c4bcfb4f9 | |||
| 3eefe937d9 | |||
| d4ba8b9d9f | |||
| c735fea8ba | |||
| 9e3010681e | |||
| c6f724edff | |||
| 358c3a15b5 | |||
| 32819860aa | |||
| 7dff571fd5 | |||
| 36dd96fd87 | |||
| e6244b8676 | |||
| 9b561e4367 | |||
| d25b46e9fa | |||
| 7a89836c3e | |||
| a9dd67cf75 | |||
| 6f2384e4f2 | |||
| 254558f7a6 | |||
| a4a7cddcff | |||
| fc116ce1ed | |||
| f77dd6b1ad | |||
| 647a722b06 | |||
| 6ec33f4bfa | |||
| bb0cc1bb6f | |||
| abb5bd3a2d | |||
| 79acc41d16 | |||
| 9fbf57bbef | |||
| 598a93d224 | |||
| 286185329d | |||
| c3c846f82d | |||
| 66b90e0841 | |||
| 9b21812feb | |||
| e9d8b62858 | |||
| 6d5aeaa42f | |||
| 3fd9721da6 | |||
| 63b2c6a3ea | |||
| 1506589ec8 | |||
| 035590236b | |||
| eea446e217 | |||
| 63dc819728 | |||
| ff537de132 | |||
| 56550157d1 | |||
| 28681d3783 | |||
| 24ce4a208d | |||
| b816c0e7c4 | |||
| a8b92819d1 | |||
| 54a4b09592 | |||
| f13283b950 | |||
| 78994b3589 | |||
| 6745efc4d6 | |||
| bdd8e5bb58 | |||
| 6c540ad789 | |||
| 64992b3308 | |||
| ea9552e9a9 | |||
| 60add37ba0 | |||
| 6182764340 | |||
| d8de61437c | |||
| ca5c8a4d41 | |||
| 152683ff9c | |||
| 0ac92b6dc1 | |||
| 831f9ab9e7 | |||
| 3a33553aec | |||
| 94df14f0cb | |||
| 1d1bdb2f00 | |||
| 3aa6b358b3 | |||
| 6052bb9fda | |||
| 76b270ddf6 | |||
| 318e57170d | |||
| 5294335bca | |||
| 68af5933e5 | |||
| bc2d7ff14d | |||
| 7d278ebc56 | |||
| 47247323cf | |||
| 77ad9c8a16 | |||
| 58ca26436d | |||
| 4a3254d338 | |||
| ebaae98a12 | |||
| 4701b3ed0c | |||
| 4843be89e7 | |||
| 9a2fb49950 | |||
| ecbcc8470b | |||
| d55faabb6d | |||
| 222ce6ca00 | |||
| be5dc6d2ec | |||
| 804b446dae | |||
| 5897aee3b7 | |||
| 1e5e507eb0 | |||
| 760af51c5d | |||
| 24705ca06a | |||
| 56cba44154 | |||
| 9360165f6b | |||
| adef6ede12 | |||
| b8afcd1664 | |||
| d8da793bca | |||
| 1856d68299 | |||
| 89247f1786 | |||
| 5995c52ab7 | |||
| 07264544ef | |||
| 9668b49df9 | |||
| 18dfbdd983 | |||
| 4d2241769e |
@@ -0,0 +1,42 @@
|
|||||||
|
name: Close Issues not using a template
|
||||||
|
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
close_issue:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check issue headings
|
||||||
|
uses: actions/github-script@v6
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const issueBody = context.payload.issue.body || "";
|
||||||
|
|
||||||
|
// Match Markdown headings (e.g., # Heading, ## Heading)
|
||||||
|
const headingRegex = /^(#{1,6})\s.+/gm;
|
||||||
|
const headings = [...issueBody.matchAll(headingRegex)];
|
||||||
|
|
||||||
|
if (headings.length < 3) {
|
||||||
|
// Post a comment
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.payload.issue.number,
|
||||||
|
body: "Thank you for opening an issue! To help us review your request efficiently, please use one of the provided issue templates. If you're seeking information or have a general question, consider opening a Discussion or joining the conversation on our Discord. Thanks!"
|
||||||
|
});
|
||||||
|
|
||||||
|
// Close the issue
|
||||||
|
await github.rest.issues.update({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.payload.issue.number,
|
||||||
|
state: "closed"
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
@import './absicons.css';
|
@import './absicons.css';
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--bookshelf-texture-img: url(/textures/wood_default.jpg);
|
--bookshelf-texture-img: url(~static/textures/wood_default.jpg);
|
||||||
--bookshelf-divider-bg: linear-gradient(180deg, rgba(149, 119, 90, 1) 0%, rgba(103, 70, 37, 1) 17%, rgba(103, 70, 37, 1) 88%, rgba(71, 48, 25, 1) 100%);
|
--bookshelf-divider-bg: linear-gradient(180deg, rgba(149, 119, 90, 1) 0%, rgba(103, 70, 37, 1) 17%, rgba(103, 70, 37, 1) 88%, rgba(71, 48, 25, 1) 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,11 +92,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Firefox */
|
/* Firefox */
|
||||||
input[type=number] {
|
input[type='number'] {
|
||||||
-moz-appearance: textfield;
|
-moz-appearance: textfield;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.tracksTable {
|
.tracksTable {
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -177,6 +176,10 @@ input[type=number] {
|
|||||||
box-shadow: 4px 1px 8px #11111166, -4px 1px 8px #11111166, 1px -4px 8px #11111166;
|
box-shadow: 4px 1px 8px #11111166, -4px 1px 8px #11111166, 1px -4px 8px #11111166;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.box-shadow-progressbar {
|
||||||
|
box-shadow: 0px -1px 4px rgb(62, 50, 2, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
.shadow-height {
|
.shadow-height {
|
||||||
height: calc(100% - 4px);
|
height: calc(100% - 4px);
|
||||||
}
|
}
|
||||||
@@ -204,7 +207,6 @@ Bookshelf Label
|
|||||||
color: #fce3a6;
|
color: #fce3a6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.cover-bg {
|
.cover-bg {
|
||||||
width: calc(100% + 40px);
|
width: calc(100% + 40px);
|
||||||
height: calc(100% + 40px);
|
height: calc(100% + 40px);
|
||||||
@@ -247,4 +249,4 @@ Bookshelf Label
|
|||||||
|
|
||||||
.abs-btn:disabled::before {
|
.abs-btn:disabled::before {
|
||||||
background-color: rgba(0, 0, 0, 0.2);
|
background-color: rgba(0, 0, 0, 0.2);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,4 +52,17 @@
|
|||||||
text-indent: 0px !important;
|
text-indent: 0px !important;
|
||||||
text-align: start !important;
|
text-align: start !important;
|
||||||
text-align-last: start !important;
|
text-align-last: start !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.default-style.less-spacing p {
|
||||||
|
margin-block-start: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.default-style.less-spacing ul {
|
||||||
|
margin-block-start: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.default-style.less-spacing ol {
|
||||||
|
margin-block-start: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -446,7 +446,7 @@ trix-editor .attachment__metadata .attachment__size {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.trix-content {
|
.trix-content {
|
||||||
line-height: 1.5;
|
line-height: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
.trix-content * {
|
.trix-content * {
|
||||||
@@ -455,6 +455,13 @@ trix-editor .attachment__metadata .attachment__size {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.trix-content p {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.trix-content h1 {
|
.trix-content h1 {
|
||||||
font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
@@ -560,4 +567,4 @@ trix-editor .attachment__metadata .attachment__size {
|
|||||||
.trix-content .attachment-gallery.attachment-gallery--4 .attachment {
|
.trix-content .attachment-gallery.attachment-gallery--4 .attachment {
|
||||||
flex-basis: 50%;
|
flex-basis: 50%;
|
||||||
max-width: 50%;
|
max-width: 50%;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -394,7 +394,8 @@ export default {
|
|||||||
{
|
{
|
||||||
src: this.$store.getters['globals/getLibraryItemCoverSrc'](this.streamLibraryItem, '/Logo.png', true)
|
src: this.$store.getters['globals/getLibraryItemCoverSrc'](this.streamLibraryItem, '/Logo.png', true)
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
chapterInfo
|
||||||
})
|
})
|
||||||
console.log('Set media session metadata', navigator.mediaSession.metadata)
|
console.log('Set media session metadata', navigator.mediaSession.metadata)
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full max-h-12 overflow-hidden">
|
<div class="w-full max-h-12 overflow-hidden">
|
||||||
<p class="text-gray-500 text-xs">{{ book.description }}</p>
|
<p class="text-gray-500 text-xs">{{ book.descriptionPlain }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="px-4 flex-grow">
|
<div v-else class="px-4 flex-grow">
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- No progress shown for podcasts (unless showing podcast episode) -->
|
<!-- No progress shown for podcasts (unless showing podcast episode) -->
|
||||||
<div cy-id="progressBar" v-if="!isPodcast || episodeProgress" class="absolute bottom-0 left-0 h-1e shadow-sm max-w-full z-10 rounded-b" :class="itemIsFinished ? 'bg-success' : 'bg-yellow-400'" :style="{ width: coverWidth * userProgressPercent + 'px' }"></div>
|
<div cy-id="progressBar" v-if="!isPodcast || episodeProgress" class="absolute bottom-0 left-0 h-1e max-w-full z-20 rounded-b box-shadow-progressbar" :class="itemIsFinished ? 'bg-success' : 'bg-yellow-400'" :style="{ width: coverWidth * userProgressPercent + 'px' }"></div>
|
||||||
|
|
||||||
<!-- Overlay is not shown if collapsing series in library -->
|
<!-- Overlay is not shown if collapsing series in library -->
|
||||||
<div cy-id="overlay" v-show="!booksInSeries && libraryItem && (isHovering || isSelectionMode || isMoreMenuOpen) && !processing" class="w-full h-full absolute top-0 left-0 z-10 bg-black rounded md:block" :class="overlayWrapperClasslist">
|
<div cy-id="overlay" v-show="!booksInSeries && libraryItem && (isHovering || isSelectionMode || isMoreMenuOpen) && !processing" class="w-full h-full absolute top-0 left-0 z-10 bg-black rounded md:block" :class="overlayWrapperClasslist">
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<p :style="{ fontSize: 0.8 + 'em' }" role="status" :aria-label="$strings.LabelNumberOfBooks">{{ books.length }}</p>
|
<p :style="{ fontSize: 0.8 + 'em' }" role="status" :aria-label="$strings.LabelNumberOfBooks">{{ books.length }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div cy-id="seriesProgressBar" v-if="seriesPercentInProgress > 0" class="absolute bottom-0 left-0 h-1e shadow-sm max-w-full z-10 rounded-b w-full" :class="isSeriesFinished ? 'bg-success' : 'bg-yellow-400'" :style="{ width: seriesPercentInProgress * 100 + '%' }" />
|
<div cy-id="seriesProgressBar" v-if="seriesPercentInProgress > 0" class="absolute bottom-0 left-0 h-1e shadow-sm max-w-full z-10 rounded-b w-full box-shadow-progressbar" :class="isSeriesFinished ? 'bg-success' : 'bg-yellow-400'" :style="{ width: seriesPercentInProgress * 100 + '%' }" />
|
||||||
|
|
||||||
<div cy-id="hoveringDisplayTitle" v-if="hasValidCovers" aria-hidden="true" class="bg-black bg-opacity-60 absolute top-0 left-0 w-full h-full flex items-center justify-center text-center transition-opacity" :class="isHovering ? '' : 'opacity-0'" :style="{ padding: '1em' }">
|
<div cy-id="hoveringDisplayTitle" v-if="hasValidCovers" aria-hidden="true" class="bg-black bg-opacity-60 absolute top-0 left-0 w-full h-full flex items-center justify-center text-center transition-opacity" :class="isHovering ? '' : 'opacity-0'" :style="{ padding: '1em' }">
|
||||||
<p :style="{ fontSize: 1.2 + 'em' }">{{ displayTitle }}</p>
|
<p :style="{ fontSize: 1.2 + 'em' }">{{ displayTitle }}</p>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<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="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">{{ playbackRateDisplay }}<span class="text-base">x</span></span>
|
||||||
</div>
|
</div>
|
||||||
<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 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' }">
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
<div class="w-full py-1 px-1">
|
<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">{{ playbackRateDisplay }}<span class="text-2xl">x</span></p>
|
||||||
<ui-icon-btn :disabled="!canIncrement" icon="add" @click="increment" />
|
<ui-icon-btn :disabled="!canIncrement" icon="add" @click="increment" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -33,6 +33,10 @@ export default {
|
|||||||
value: {
|
value: {
|
||||||
type: [String, Number],
|
type: [String, Number],
|
||||||
default: 1
|
default: 1
|
||||||
|
},
|
||||||
|
playbackRateIncrementDecrement: {
|
||||||
|
type: Number,
|
||||||
|
default: 0.1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -58,10 +62,17 @@ export default {
|
|||||||
return [0.5, 1, 1.2, 1.5, 2]
|
return [0.5, 1, 1.2, 1.5, 2]
|
||||||
},
|
},
|
||||||
canIncrement() {
|
canIncrement() {
|
||||||
return this.playbackRate + 0.1 <= this.MAX_SPEED
|
return this.playbackRate + this.playbackRateIncrementDecrement <= this.MAX_SPEED
|
||||||
},
|
},
|
||||||
canDecrement() {
|
canDecrement() {
|
||||||
return this.playbackRate - 0.1 >= this.MIN_SPEED
|
return this.playbackRate - this.playbackRateIncrementDecrement >= this.MIN_SPEED
|
||||||
|
},
|
||||||
|
playbackRateDisplay() {
|
||||||
|
if (this.playbackRateIncrementDecrement == 0.05) return this.playbackRate.toFixed(2)
|
||||||
|
// For 0.1 increment: Only show 2 decimal places if the playback rate is 2 decimals
|
||||||
|
const numDecimals = String(this.playbackRate).split('.')[1]?.length || 0
|
||||||
|
if (numDecimals <= 1) return this.playbackRate.toFixed(1)
|
||||||
|
return this.playbackRate.toFixed(2)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -73,14 +84,14 @@ export default {
|
|||||||
this.$nextTick(() => this.setShowMenu(false))
|
this.$nextTick(() => this.setShowMenu(false))
|
||||||
},
|
},
|
||||||
increment() {
|
increment() {
|
||||||
if (this.playbackRate + 0.1 > this.MAX_SPEED) return
|
if (this.playbackRate + this.playbackRateIncrementDecrement > this.MAX_SPEED) return
|
||||||
var newPlaybackRate = this.playbackRate + 0.1
|
var newPlaybackRate = this.playbackRate + this.playbackRateIncrementDecrement
|
||||||
this.playbackRate = Number(newPlaybackRate.toFixed(1))
|
this.playbackRate = Number(newPlaybackRate.toFixed(2))
|
||||||
},
|
},
|
||||||
decrement() {
|
decrement() {
|
||||||
if (this.playbackRate - 0.1 < this.MIN_SPEED) return
|
if (this.playbackRate - this.playbackRateIncrementDecrement < this.MIN_SPEED) return
|
||||||
var newPlaybackRate = this.playbackRate - 0.1
|
var newPlaybackRate = this.playbackRate - this.playbackRateIncrementDecrement
|
||||||
this.playbackRate = Number(newPlaybackRate.toFixed(1))
|
this.playbackRate = Number(newPlaybackRate.toFixed(2))
|
||||||
},
|
},
|
||||||
updateMenuPositions() {
|
updateMenuPositions() {
|
||||||
if (!this.$refs.wrapper) return
|
if (!this.$refs.wrapper) return
|
||||||
|
|||||||
@@ -90,8 +90,8 @@
|
|||||||
<div class="relative">
|
<div class="relative">
|
||||||
<ui-textarea-with-label :value="prettyFfprobeData" readonly :rows="30" class="text-xs" />
|
<ui-textarea-with-label :value="prettyFfprobeData" readonly :rows="30" class="text-xs" />
|
||||||
|
|
||||||
<button class="absolute top-4 right-4" :class="copiedToClipboard ? 'text-success' : 'text-white/50 hover:text-white/80'" @click.stop="copyFfprobeData">
|
<button class="absolute top-4 right-4" :class="hasCopied ? 'text-success' : 'text-gray-400 hover:text-white'" @click.stop="copyToClipboard">
|
||||||
<span class="material-symbols">{{ copiedToClipboard ? 'check' : 'content_copy' }}</span>
|
<span class="material-symbols">{{ hasCopied ? 'done' : 'content_copy' }}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -113,14 +113,13 @@ export default {
|
|||||||
return {
|
return {
|
||||||
probingFile: false,
|
probingFile: false,
|
||||||
ffprobeData: null,
|
ffprobeData: null,
|
||||||
copiedToClipboard: false
|
hasCopied: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
show(newVal) {
|
show(newVal) {
|
||||||
if (newVal) {
|
if (newVal) {
|
||||||
this.ffprobeData = null
|
this.ffprobeData = null
|
||||||
this.copiedToClipboard = false
|
|
||||||
this.probingFile = false
|
this.probingFile = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,8 +164,13 @@ export default {
|
|||||||
this.probingFile = false
|
this.probingFile = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
async copyFfprobeData() {
|
copyToClipboard() {
|
||||||
this.copiedToClipboard = await this.$copyToClipboard(this.prettyFfprobeData)
|
clearTimeout(this.hasCopied)
|
||||||
|
this.$copyToClipboard(this.prettyFfprobeData).then((success) => {
|
||||||
|
this.hasCopied = setTimeout(() => {
|
||||||
|
this.hasCopied = null
|
||||||
|
}, 2000)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {}
|
mounted() {}
|
||||||
|
|||||||
@@ -11,9 +11,12 @@
|
|||||||
<div class="flex items-center mb-4">
|
<div class="flex items-center mb-4">
|
||||||
<ui-select-input v-model="jumpForwardAmount" :label="$strings.LabelJumpForwardAmount" menuMaxHeight="250px" :items="jumpValues" @input="setJumpForwardAmount" />
|
<ui-select-input v-model="jumpForwardAmount" :label="$strings.LabelJumpForwardAmount" menuMaxHeight="250px" :items="jumpValues" @input="setJumpForwardAmount" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center mb-4">
|
||||||
<ui-select-input v-model="jumpBackwardAmount" :label="$strings.LabelJumpBackwardAmount" menuMaxHeight="250px" :items="jumpValues" @input="setJumpBackwardAmount" />
|
<ui-select-input v-model="jumpBackwardAmount" :label="$strings.LabelJumpBackwardAmount" menuMaxHeight="250px" :items="jumpValues" @input="setJumpBackwardAmount" />
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex items-center mb-4">
|
||||||
|
<ui-select-input v-model="playbackRateIncrementDecrement" :label="$strings.LabelPlaybackRateIncrementDecrement" menuMaxHeight="250px" :items="playbackRateIncrementDecrementValues" @input="setPlaybackRateIncrementDecrementAmount" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</modals-modal>
|
</modals-modal>
|
||||||
</template>
|
</template>
|
||||||
@@ -35,7 +38,9 @@ export default {
|
|||||||
{ text: this.$getString('LabelTimeDurationXMinutes', ['5']), value: 300 }
|
{ text: this.$getString('LabelTimeDurationXMinutes', ['5']), value: 300 }
|
||||||
],
|
],
|
||||||
jumpForwardAmount: 10,
|
jumpForwardAmount: 10,
|
||||||
jumpBackwardAmount: 10
|
jumpBackwardAmount: 10,
|
||||||
|
playbackRateIncrementDecrementValues: [0.1, 0.05],
|
||||||
|
playbackRateIncrementDecrement: 0.1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -60,10 +65,15 @@ export default {
|
|||||||
this.jumpBackwardAmount = val
|
this.jumpBackwardAmount = val
|
||||||
this.$store.dispatch('user/updateUserSettings', { jumpBackwardAmount: val })
|
this.$store.dispatch('user/updateUserSettings', { jumpBackwardAmount: val })
|
||||||
},
|
},
|
||||||
|
setPlaybackRateIncrementDecrementAmount(val) {
|
||||||
|
this.playbackRateIncrementDecrement = val
|
||||||
|
this.$store.dispatch('user/updateUserSettings', { playbackRateIncrementDecrement: val })
|
||||||
|
},
|
||||||
settingsUpdated() {
|
settingsUpdated() {
|
||||||
this.useChapterTrack = this.$store.getters['user/getUserSetting']('useChapterTrack')
|
this.useChapterTrack = this.$store.getters['user/getUserSetting']('useChapterTrack')
|
||||||
this.jumpForwardAmount = this.$store.getters['user/getUserSetting']('jumpForwardAmount')
|
this.jumpForwardAmount = this.$store.getters['user/getUserSetting']('jumpForwardAmount')
|
||||||
this.jumpBackwardAmount = this.$store.getters['user/getUserSetting']('jumpBackwardAmount')
|
this.jumpBackwardAmount = this.$store.getters['user/getUserSetting']('jumpBackwardAmount')
|
||||||
|
this.playbackRateIncrementDecrement = this.$store.getters['user/getUserSetting']('playbackRateIncrementDecrement')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<template v-if="currentShare">
|
<template v-if="currentShare">
|
||||||
<div class="w-full py-2">
|
<div class="w-full py-2">
|
||||||
<label class="px-1 text-sm font-semibold block">{{ $strings.LabelShareURL }}</label>
|
<label class="px-1 text-sm font-semibold block">{{ $strings.LabelShareURL }}</label>
|
||||||
<ui-text-input v-model="currentShareUrl" show-copy readonly class="text-base h-10" />
|
<ui-text-input v-model="currentShareUrl" show-copy readonly />
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full py-2 px-1">
|
<div class="w-full py-2 px-1">
|
||||||
<p v-if="currentShare.isDownloadable" class="text-sm mb-2">{{ $strings.LabelDownloadable }}</p>
|
<p v-if="currentShare.isDownloadable" class="text-sm mb-2">{{ $strings.LabelDownloadable }}</p>
|
||||||
|
|||||||
@@ -94,9 +94,9 @@
|
|||||||
<div v-if="selectedMatchOrig.description" class="flex items-center py-2">
|
<div v-if="selectedMatchOrig.description" class="flex items-center py-2">
|
||||||
<ui-checkbox v-model="selectedMatchUsage.description" checkbox-bg="bg" @input="checkboxToggled" />
|
<ui-checkbox v-model="selectedMatchUsage.description" checkbox-bg="bg" @input="checkboxToggled" />
|
||||||
<div class="flex-grow ml-4">
|
<div class="flex-grow ml-4">
|
||||||
<ui-textarea-with-label v-model="selectedMatch.description" :rows="3" :disabled="!selectedMatchUsage.description" :label="$strings.LabelDescription" />
|
<ui-rich-text-editor v-model="selectedMatch.description" :disabled="!selectedMatchUsage.description" :label="$strings.LabelDescription" />
|
||||||
<p v-if="mediaMetadata.description" class="text-xs ml-1 text-white text-opacity-60">
|
<p v-if="mediaMetadata.description" class="text-xs ml-1 text-white text-opacity-60">
|
||||||
{{ $strings.LabelCurrently }} <a title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('description', mediaMetadata.description)">{{ mediaMetadata.description.substr(0, 100) + (mediaMetadata.description.length > 100 ? '...' : '') }}</a>
|
{{ $strings.LabelCurrently }} <a title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('description', mediaMetadata.description)">{{ mediaMetadata.descriptionPlain.substr(0, 100) + (mediaMetadata.descriptionPlain.length > 100 ? '...' : '') }}</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p dir="auto" class="text-lg font-semibold mb-6">{{ title }}</p>
|
<p dir="auto" class="text-lg font-semibold mb-6">{{ title }}</p>
|
||||||
<div v-if="description" dir="auto" class="default-style" v-html="description" />
|
<div v-if="description" dir="auto" class="default-style less-spacing" v-html="description" />
|
||||||
<p v-else class="mb-2">{{ $strings.MessageNoDescription }}</p>
|
<p v-else class="mb-2">{{ $strings.MessageNoDescription }}</p>
|
||||||
|
|
||||||
<div class="w-full h-px bg-white/5 my-4" />
|
<div class="w-full h-px bg-white/5 my-4" />
|
||||||
|
|||||||
@@ -10,9 +10,7 @@
|
|||||||
<p class="text-lg font-semibold mb-4">{{ $strings.HeaderRSSFeedIsOpen }}</p>
|
<p class="text-lg font-semibold mb-4">{{ $strings.HeaderRSSFeedIsOpen }}</p>
|
||||||
|
|
||||||
<div class="w-full relative">
|
<div class="w-full relative">
|
||||||
<ui-text-input :value="feedUrl" readonly />
|
<ui-text-input :value="feedUrl" readonly show-copy />
|
||||||
|
|
||||||
<span class="material-symbols absolute right-2 bottom-2 p-0.5 text-base transition-transform duration-100 text-gray-300 hover:text-white transform hover:scale-125 cursor-pointer" @click="copyToClipboard(feedUrl)">content_copy</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="currentFeed.meta" class="mt-5">
|
<div v-if="currentFeed.meta" class="mt-5">
|
||||||
@@ -160,9 +158,6 @@ export default {
|
|||||||
this.processing = false
|
this.processing = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
copyToClipboard(str) {
|
|
||||||
this.$copyToClipboard(str, this)
|
|
||||||
},
|
|
||||||
closeFeed() {
|
closeFeed() {
|
||||||
this.processing = true
|
this.processing = true
|
||||||
this.$axios
|
this.$axios
|
||||||
|
|||||||
@@ -5,8 +5,7 @@
|
|||||||
<p class="text-lg font-semibold mb-4">{{ $strings.HeaderRSSFeedGeneral }}</p>
|
<p class="text-lg font-semibold mb-4">{{ $strings.HeaderRSSFeedGeneral }}</p>
|
||||||
|
|
||||||
<div class="w-full relative">
|
<div class="w-full relative">
|
||||||
<ui-text-input :value="feedUrl" readonly />
|
<ui-text-input :value="feedUrl" readonly show-copy />
|
||||||
<span class="material-symbols absolute right-2 bottom-2 p-0.5 text-base transition-transform duration-100 text-gray-300 hover:text-white transform hover:scale-125 cursor-pointer" @click="copyToClipboard(feedUrl)">content_copy</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="feed.meta" class="mt-5">
|
<div v-if="feed.meta" class="mt-5">
|
||||||
@@ -74,13 +73,7 @@ export default {
|
|||||||
feedUrl() {
|
feedUrl() {
|
||||||
return this.feed ? `${window.origin}${this.$config.routerBasePath}${this.feed.feedUrl}` : ''
|
return this.feed ? `${window.origin}${this.$config.routerBasePath}${this.feed.feedUrl}` : ''
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
methods: {
|
|
||||||
copyToClipboard(str) {
|
|
||||||
this.$copyToClipboard(str, this)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<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">
|
||||||
<controls-playback-speed-control v-model="playbackRate" @input="setPlaybackRate" @change="playbackRateChanged" class="mx-2 block" />
|
<controls-playback-speed-control v-model="playbackRate" @input="setPlaybackRate" @change="playbackRateChanged" :playbackRateIncrementDecrement="playbackRateIncrementDecrement" class="mx-2 block" />
|
||||||
|
|
||||||
<ui-tooltip direction="bottom" :text="$strings.LabelVolume">
|
<ui-tooltip direction="bottom" :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" />
|
||||||
@@ -180,6 +180,9 @@ export default {
|
|||||||
useChapterTrack() {
|
useChapterTrack() {
|
||||||
const _useChapterTrack = this.$store.getters['user/getUserSetting']('useChapterTrack') || false
|
const _useChapterTrack = this.$store.getters['user/getUserSetting']('useChapterTrack') || false
|
||||||
return this.chapters.length ? _useChapterTrack : false
|
return this.chapters.length ? _useChapterTrack : false
|
||||||
|
},
|
||||||
|
playbackRateIncrementDecrement() {
|
||||||
|
return this.$store.getters['user/getUserSetting']('playbackRateIncrementDecrement')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -223,12 +226,12 @@ export default {
|
|||||||
},
|
},
|
||||||
increasePlaybackRate() {
|
increasePlaybackRate() {
|
||||||
if (this.playbackRate >= 10) return
|
if (this.playbackRate >= 10) return
|
||||||
this.playbackRate = Number((this.playbackRate + 0.1).toFixed(1))
|
this.playbackRate = Number((this.playbackRate + this.playbackRateIncrementDecrement || 0.1).toFixed(2))
|
||||||
this.setPlaybackRate(this.playbackRate)
|
this.setPlaybackRate(this.playbackRate)
|
||||||
},
|
},
|
||||||
decreasePlaybackRate() {
|
decreasePlaybackRate() {
|
||||||
if (this.playbackRate <= 0.5) return
|
if (this.playbackRate <= 0.5) return
|
||||||
this.playbackRate = Number((this.playbackRate - 0.1).toFixed(1))
|
this.playbackRate = Number((this.playbackRate - this.playbackRateIncrementDecrement || 0.1).toFixed(2))
|
||||||
this.setPlaybackRate(this.playbackRate)
|
this.setPlaybackRate(this.playbackRate)
|
||||||
},
|
},
|
||||||
playbackRateChanged(playbackRate) {
|
playbackRateChanged(playbackRate) {
|
||||||
|
|||||||
@@ -97,9 +97,9 @@ export default {
|
|||||||
},
|
},
|
||||||
ebookUrl() {
|
ebookUrl() {
|
||||||
if (this.fileId) {
|
if (this.fileId) {
|
||||||
return `/api/items/${this.libraryItemId}/ebook/${this.fileId}`
|
return `${this.$config.routerBasePath}/api/items/${this.libraryItemId}/ebook/${this.fileId}`
|
||||||
}
|
}
|
||||||
return `/api/items/${this.libraryItemId}/ebook`
|
return `${this.$config.routerBasePath}/api/items/${this.libraryItemId}/ebook`
|
||||||
},
|
},
|
||||||
themeRules() {
|
themeRules() {
|
||||||
const isDark = this.ereaderSettings.theme === 'dark'
|
const isDark = this.ereaderSettings.theme === 'dark'
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-style">
|
<div class="default-style">
|
||||||
<p v-if="label" class="px-1 text-sm font-semibold" :class="{ 'text-gray-400': disabled }">
|
<p v-if="label" class="px-1 text-sm font-semibold" :class="{ 'text-gray-400': disabled }" style="margin-top: 0; margin-bottom: 0.125em">
|
||||||
{{ label }}
|
{{ label }}
|
||||||
</p>
|
</p>
|
||||||
<ui-vue-trix v-model="content" :config="config" :disabled-editor="disabled" @trix-file-accept="trixFileAccept" />
|
<ui-vue-trix ref="input" v-model="content" :disabled-editor="disabled" @trix-file-accept="trixFileAccept" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -12,7 +12,10 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
value: String,
|
value: String,
|
||||||
label: String,
|
label: String,
|
||||||
disabled: Boolean
|
disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {}
|
return {}
|
||||||
@@ -25,49 +28,19 @@ export default {
|
|||||||
set(val) {
|
set(val) {
|
||||||
this.$emit('input', val)
|
this.$emit('input', val)
|
||||||
}
|
}
|
||||||
},
|
|
||||||
config() {
|
|
||||||
return {
|
|
||||||
toolbar: {
|
|
||||||
getDefaultHTML: () => `<div class="trix-button-row">
|
|
||||||
<span class="trix-button-group trix-button-group--text-tools" data-trix-button-group="text-tools">
|
|
||||||
<button type="button" class="trix-button trix-button--icon trix-button--icon-bold" data-trix-attribute="bold" data-trix-key="b" title="${this.$strings.LabelFontBold}" tabindex="-1">${this.$strings.LabelFontBold}</button>
|
|
||||||
<button type="button" class="trix-button trix-button--icon trix-button--icon-italic" data-trix-attribute="italic" data-trix-key="i" title="${this.$strings.LabelFontItalic}" tabindex="-1">${this.$strings.LabelFontItalic}</button>
|
|
||||||
<button type="button" class="trix-button trix-button--icon trix-button--icon-strike" data-trix-attribute="strike" title="${this.$strings.LabelFontStrikethrough}" tabindex="-1">${this.$strings.LabelFontStrikethrough}</button>
|
|
||||||
<button type="button" class="trix-button trix-button--icon trix-button--icon-link" data-trix-attribute="href" data-trix-action="link" data-trix-key="k" title="${this.$strings.LabelTextEditorLink}" tabindex="-1">${this.$strings.LabelTextEditorLink}</button>
|
|
||||||
</span>
|
|
||||||
<span class="trix-button-group trix-button-group--block-tools" data-trix-button-group="block-tools">
|
|
||||||
<button type="button" class="trix-button trix-button--icon trix-button--icon-bullet-list" data-trix-attribute="bullet" title="${this.$strings.LabelTextEditorBulletedList}" tabindex="-1">${this.$strings.LabelTextEditorBulletedList}</button>
|
|
||||||
<button type="button" class="trix-button trix-button--icon trix-button--icon-number-list" data-trix-attribute="number" title="${this.$strings.LabelTextEditorNumberedList}" tabindex="-1">${this.$strings.LabelTextEditorNumberedList}</button>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<span class="trix-button-group-spacer"></span>
|
|
||||||
<span class="trix-button-group trix-button-group--history-tools" data-trix-button-group="history-tools">
|
|
||||||
<button type="button" class="trix-button trix-button--icon trix-button--icon-undo" data-trix-action="undo" data-trix-key="z" title="${this.$strings.LabelUndo}" tabindex="-1">${this.$strings.LabelUndo}</button>
|
|
||||||
<button type="button" class="trix-button trix-button--icon trix-button--icon-redo" data-trix-action="redo" data-trix-key="shift+z" title="${this.$strings.LabelRedo}" tabindex="-1">${this.$strings.LabelRedo}</button>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="trix-dialogs" data-trix-dialogs>
|
|
||||||
<div class="trix-dialog trix-dialog--link" data-trix-dialog="href" data-trix-dialog-attribute="href">
|
|
||||||
<div class="trix-dialog__link-fields">
|
|
||||||
<input type="url" name="href" class="trix-input trix-input--dialog" placeholder="" aria-label="URL" required data-trix-input>
|
|
||||||
<div class="trix-button-group">
|
|
||||||
<input type="button" class="trix-button trix-button--dialog" value="${this.$strings.LabelTextEditorLink}" data-trix-method="setAttribute">
|
|
||||||
<input type="button" class="trix-button trix-button--dialog" value="${this.$strings.LabelTextEditorUnlink}" data-trix-method="removeAttribute">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
trixFileAccept(e) {
|
trixFileAccept(e) {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
},
|
||||||
|
blur() {
|
||||||
|
if (this.$refs.input && this.$refs.input.blur) {
|
||||||
|
this.$refs.input.blur()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {},
|
mounted() {},
|
||||||
beforeDestroy() {}
|
beforeDestroy() {}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
<div v-if="type === 'password' && isHovering" class="absolute top-0 right-0 h-full px-4 flex items-center justify-center">
|
<div v-if="type === 'password' && isHovering" class="absolute top-0 right-0 h-full px-4 flex items-center justify-center">
|
||||||
<span class="material-symbols text-gray-400 cursor-pointer text-lg" @click.stop.prevent="showPassword = !showPassword">{{ !showPassword ? 'visibility' : 'visibility_off' }}</span>
|
<span class="material-symbols text-gray-400 cursor-pointer text-lg" @click.stop.prevent="showPassword = !showPassword">{{ !showPassword ? 'visibility' : 'visibility_off' }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="showCopy" class="absolute top-0 right-0 h-full px-4 flex items-center justify-center">
|
<div v-else-if="showCopy" class="absolute top-0 right-0 h-full px-2 flex items-center justify-center">
|
||||||
<span class="material-symbols text-gray-400 cursor-pointer text-lg" @click.stop.prevent="copyToClipboard">{{ !hasCopied ? 'content_copy' : 'done' }}</span>
|
<span class="material-symbols cursor-pointer text-lg" :class="hasCopied ? 'text-success' : 'text-gray-400 hover:text-white'" @click.stop.prevent="copyToClipboard">{{ !hasCopied ? 'content_copy' : 'done' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -47,7 +47,7 @@ export default {
|
|||||||
showPassword: false,
|
showPassword: false,
|
||||||
isHovering: false,
|
isHovering: false,
|
||||||
isFocused: false,
|
isFocused: false,
|
||||||
hasCopied: false,
|
hasCopied: null,
|
||||||
isInvalidDate: false
|
isInvalidDate: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -62,7 +62,12 @@ export default {
|
|||||||
},
|
},
|
||||||
classList() {
|
classList() {
|
||||||
var _list = []
|
var _list = []
|
||||||
_list.push(`px-${this.paddingX}`)
|
if (this.showCopy) {
|
||||||
|
_list.push('pl-3', 'pr-8')
|
||||||
|
} else {
|
||||||
|
_list.push(`px-${this.paddingX}`)
|
||||||
|
}
|
||||||
|
|
||||||
_list.push(`py-${this.paddingY}`)
|
_list.push(`py-${this.paddingY}`)
|
||||||
if (this.noSpinner) _list.push('no-spinner')
|
if (this.noSpinner) _list.push('no-spinner')
|
||||||
if (this.textCenter) _list.push('text-center')
|
if (this.textCenter) _list.push('text-center')
|
||||||
@@ -80,11 +85,10 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
copyToClipboard() {
|
copyToClipboard() {
|
||||||
if (this.hasCopied) return
|
clearTimeout(this.hasCopied)
|
||||||
this.$copyToClipboard(this.inputValue).then((success) => {
|
this.$copyToClipboard(this.inputValue).then((success) => {
|
||||||
this.hasCopied = success
|
this.hasCopied = setTimeout(() => {
|
||||||
setTimeout(() => {
|
this.hasCopied = null
|
||||||
this.hasCopied = false
|
|
||||||
}, 2000)
|
}, 2000)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<em v-if="note" class="font-normal text-xs pl-2">{{ note }}</em>
|
<em v-if="note" class="font-normal text-xs pl-2">{{ note }}</em>
|
||||||
</label>
|
</label>
|
||||||
</slot>
|
</slot>
|
||||||
<ui-text-input :placeholder="placeholder || label" :inputId="identifier" ref="input" v-model="inputValue" :disabled="disabled" :readonly="readonly" :type="type" class="w-full" :class="inputClass" @blur="inputBlurred" />
|
<ui-text-input :placeholder="placeholder || label" :inputId="identifier" ref="input" v-model="inputValue" :disabled="disabled" :readonly="readonly" :type="type" :show-copy="showCopy" class="w-full" :class="inputClass" @blur="inputBlurred" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -23,7 +23,8 @@ export default {
|
|||||||
},
|
},
|
||||||
readonly: Boolean,
|
readonly: Boolean,
|
||||||
disabled: Boolean,
|
disabled: Boolean,
|
||||||
inputClass: String
|
inputClass: String,
|
||||||
|
showCopy: Boolean
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {}
|
return {}
|
||||||
|
|||||||
@@ -1,6 +1,37 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<trix-editor :contenteditable="!disabledEditor" :class="['trix-content']" ref="trix" :input="computedId" :placeholder="placeholder" @trix-change="handleContentChange" @trix-initialize="handleInitialize" @trix-focus="processTrixFocus" @trix-blur="processTrixBlur" />
|
<trix-toolbar :id="toolbarId">
|
||||||
|
<div v-show="!disabledEditor" class="trix-button-row">
|
||||||
|
<span class="trix-button-group trix-button-group--text-tools" data-trix-button-group="text-tools">
|
||||||
|
<button type="button" class="trix-button trix-button--icon trix-button--icon-bold" data-trix-attribute="bold" data-trix-key="b" :title="$strings.LabelFontBold" tabindex="-1">{{ $strings.LabelFontBold }}</button>
|
||||||
|
<button type="button" class="trix-button trix-button--icon trix-button--icon-italic" data-trix-attribute="italic" data-trix-key="i" :title="$strings.LabelFontItalic" tabindex="-1">{{ $strings.LabelFontItalic }}</button>
|
||||||
|
<button type="button" class="trix-button trix-button--icon trix-button--icon-strike" data-trix-attribute="strike" :title="$strings.LabelFontStrikethrough" tabindex="-1">{{ $strings.LabelFontStrikethrough }}</button>
|
||||||
|
<button type="button" class="trix-button trix-button--icon trix-button--icon-link" data-trix-attribute="href" data-trix-action="link" data-trix-key="k" :title="$strings.LabelTextEditorLink" tabindex="-1">{{ $strings.LabelTextEditorLink }}</button>
|
||||||
|
</span>
|
||||||
|
<span class="trix-button-group trix-button-group--block-tools" data-trix-button-group="block-tools">
|
||||||
|
<button type="button" class="trix-button trix-button--icon trix-button--icon-bullet-list" data-trix-attribute="bullet" :title="$strings.LabelTextEditorBulletedList" tabindex="-1">{{ $strings.LabelTextEditorBulletedList }}</button>
|
||||||
|
<button type="button" class="trix-button trix-button--icon trix-button--icon-number-list" data-trix-attribute="number" :title="$strings.LabelTextEditorNumberedList" tabindex="-1">{{ $strings.LabelTextEditorNumberedList }}</button>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span class="trix-button-group-spacer"></span>
|
||||||
|
<span class="trix-button-group trix-button-group--history-tools" data-trix-button-group="history-tools">
|
||||||
|
<button type="button" class="trix-button trix-button--icon trix-button--icon-undo" data-trix-action="undo" data-trix-key="z" :title="$strings.LabelUndo" tabindex="-1">{{ $strings.LabelUndo }}</button>
|
||||||
|
<button type="button" class="trix-button trix-button--icon trix-button--icon-redo" data-trix-action="redo" data-trix-key="shift+z" :title="$strings.LabelRedo" tabindex="-1">{{ $strings.LabelRedo }}</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="trix-dialogs" data-trix-dialogs>
|
||||||
|
<div class="trix-dialog trix-dialog--link" data-trix-dialog="href" data-trix-dialog-attribute="href">
|
||||||
|
<div class="trix-dialog__link-fields">
|
||||||
|
<input type="url" name="href" class="trix-input trix-input--dialog" placeholder="" aria-label="URL" required data-trix-input />
|
||||||
|
<div class="trix-button-group">
|
||||||
|
<input type="button" class="trix-button trix-button--dialog" :value="$strings.LabelTextEditorLink" data-trix-method="setAttribute" />
|
||||||
|
<input type="button" class="trix-button trix-button--dialog" :value="$strings.LabelTextEditorUnlink" data-trix-method="removeAttribute" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</trix-toolbar>
|
||||||
|
<trix-editor :toolbar="toolbarId" :contenteditable="!disabledEditor" :class="['trix-content']" ref="trix" :input="computedId" :placeholder="placeholder" @trix-change="handleContentChange" @trix-initialize="handleInitialize" @trix-focus="processTrixFocus" @trix-blur="processTrixBlur" />
|
||||||
<input type="hidden" :name="inputName" :id="computedId" :value="editorContent" />
|
<input type="hidden" :name="inputName" :id="computedId" :value="editorContent" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -14,6 +45,30 @@
|
|||||||
import Trix from 'trix'
|
import Trix from 'trix'
|
||||||
import '@/assets/trix.css'
|
import '@/assets/trix.css'
|
||||||
|
|
||||||
|
function enableBreakParagraphOnReturn() {
|
||||||
|
// Trix works with divs by default, we want paragraphs instead
|
||||||
|
Trix.config.blockAttributes.default.tagName = 'p'
|
||||||
|
// Enable break paragraph on Enter (Shift + Enter will still create a line break)
|
||||||
|
Trix.config.blockAttributes.default.breakOnReturn = true
|
||||||
|
|
||||||
|
// Hack to fix buggy paragraph breaks
|
||||||
|
// Copied from https://github.com/basecamp/trix/issues/680#issuecomment-735742942
|
||||||
|
Trix.Block.prototype.breaksOnReturn = function () {
|
||||||
|
const attr = this.getLastAttribute()
|
||||||
|
const config = Trix.getBlockConfig(attr ? attr : 'default')
|
||||||
|
return config ? config.breakOnReturn : false
|
||||||
|
}
|
||||||
|
Trix.LineBreakInsertion.prototype.shouldInsertBlockBreak = function () {
|
||||||
|
if (this.block.hasAttributes() && this.block.isListItem() && !this.block.isEmpty()) {
|
||||||
|
return this.startLocation.offset > 0
|
||||||
|
} else {
|
||||||
|
return !this.shouldBreakFormattedBlock() ? this.breaksOnReturn : false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enableBreakParagraphOnReturn()
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'vue-trix',
|
name: 'vue-trix',
|
||||||
model: {
|
model: {
|
||||||
@@ -134,6 +189,9 @@ export default {
|
|||||||
* Compute a random id of hidden input
|
* Compute a random id of hidden input
|
||||||
* when it haven't been specified.
|
* when it haven't been specified.
|
||||||
*/
|
*/
|
||||||
|
toolbarId() {
|
||||||
|
return `trix-toolbar-${this.generateId}`
|
||||||
|
},
|
||||||
generateId() {
|
generateId() {
|
||||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
||||||
var r = (Math.random() * 16) | 0
|
var r = (Math.random() * 16) | 0
|
||||||
@@ -223,13 +281,17 @@ export default {
|
|||||||
decorateDisabledEditor(editorState) {
|
decorateDisabledEditor(editorState) {
|
||||||
/** Disable toolbar and editor by pointer events styling */
|
/** Disable toolbar and editor by pointer events styling */
|
||||||
if (editorState) {
|
if (editorState) {
|
||||||
this.$refs.trix.toolbarElement.style['pointer-events'] = 'none'
|
this.$refs.trix.disabled = true
|
||||||
this.$refs.trix.contentEditable = false
|
this.$refs.trix.contentEditable = false
|
||||||
this.$refs.trix.style['background'] = '#e9ecef'
|
this.$refs.trix.style['pointer-events'] = 'none'
|
||||||
|
this.$refs.trix.style['background-color'] = '#444'
|
||||||
|
this.$refs.trix.style['color'] = '#bbb'
|
||||||
} else {
|
} else {
|
||||||
this.$refs.trix.toolbarElement.style['pointer-events'] = 'unset'
|
this.$refs.trix.disabled = false
|
||||||
|
this.$refs.trix.contentEditable = true
|
||||||
this.$refs.trix.style['pointer-events'] = 'unset'
|
this.$refs.trix.style['pointer-events'] = 'unset'
|
||||||
this.$refs.trix.style['background'] = 'transparent'
|
this.$refs.trix.style['background-color'] = ''
|
||||||
|
this.$refs.trix.style['color'] = ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
overrideConfig(config) {
|
overrideConfig(config) {
|
||||||
@@ -250,32 +312,15 @@ export default {
|
|||||||
}
|
}
|
||||||
return target
|
return target
|
||||||
},
|
},
|
||||||
enableBreakParagraphOnReturn() {
|
blur() {
|
||||||
// Trix works with divs by default, we want paragraphs instead
|
if (this.$refs.trix && this.$refs.trix.blur) {
|
||||||
Trix.config.blockAttributes.default.tagName = 'p'
|
this.$refs.trix.blur()
|
||||||
// Enable break paragraph on Enter (Shift + Enter will still create a line break)
|
|
||||||
Trix.config.blockAttributes.default.breakOnReturn = true
|
|
||||||
|
|
||||||
// Hack to fix buggy paragraph breaks
|
|
||||||
// Copied from https://github.com/basecamp/trix/issues/680#issuecomment-735742942
|
|
||||||
Trix.Block.prototype.breaksOnReturn = function () {
|
|
||||||
const attr = this.getLastAttribute()
|
|
||||||
const config = Trix.getBlockConfig(attr ? attr : 'default')
|
|
||||||
return config ? config.breakOnReturn : false
|
|
||||||
}
|
|
||||||
Trix.LineBreakInsertion.prototype.shouldInsertBlockBreak = function () {
|
|
||||||
if (this.block.hasAttributes() && this.block.isListItem() && !this.block.isEmpty()) {
|
|
||||||
return this.startLocation.offset > 0
|
|
||||||
} else {
|
|
||||||
return !this.shouldBreakFormattedBlock() ? this.breaksOnReturn : false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
/** Override editor configuration */
|
/** Override editor configuration */
|
||||||
this.overrideConfig(this.config)
|
this.overrideConfig(this.config)
|
||||||
this.enableBreakParagraphOnReturn()
|
|
||||||
/** Check if editor read-only mode is required */
|
/** Check if editor read-only mode is required */
|
||||||
this.decorateDisabledEditor(this.disabledEditor)
|
this.decorateDisabledEditor(this.disabledEditor)
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
@@ -305,4 +350,12 @@ export default {
|
|||||||
.trix_container .trix-content {
|
.trix_container .trix-content {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
}
|
}
|
||||||
|
trix-editor {
|
||||||
|
max-height: calc(4 * 1lh);
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
trix-editor * {
|
||||||
|
pointer-events: inherit;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ui-textarea-with-label ref="descriptionInput" v-model="details.description" :rows="3" :label="$strings.LabelDescription" class="mt-2" @input="handleInputChange" />
|
<ui-rich-text-editor ref="descriptionInput" v-model="details.description" :label="$strings.LabelDescription" class="mt-2" @input="handleInputChange" />
|
||||||
|
|
||||||
<div class="flex flex-wrap mt-2 -mx-1">
|
<div class="flex flex-wrap mt-2 -mx-1">
|
||||||
<div class="w-full md:w-1/2 px-1">
|
<div class="w-full md:w-1/2 px-1">
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const pkg = require('./package.json')
|
const pkg = require('./package.json')
|
||||||
|
|
||||||
const routerBasePath = process.env.ROUTER_BASE_PATH || ''
|
const routerBasePath = process.env.ROUTER_BASE_PATH || '/audiobookshelf'
|
||||||
const serverHostUrl = process.env.NODE_ENV === 'production' ? '' : 'http://localhost:3333'
|
const serverHostUrl = process.env.NODE_ENV === 'production' ? '' : 'http://localhost:3333'
|
||||||
const serverPaths = ['api/', 'public/', 'hls/', 'auth/', 'feed/', 'status', 'login', 'logout', 'init']
|
const serverPaths = ['api/', 'public/', 'hls/', 'auth/', 'feed/', 'status', 'login', 'logout', 'init']
|
||||||
const proxy = Object.fromEntries(serverPaths.map((path) => [`${routerBasePath}/${path}`, { target: process.env.NODE_ENV !== 'production' ? serverHostUrl : '/' }]))
|
const proxy = Object.fromEntries(serverPaths.map((path) => [`${routerBasePath}/${path}`, { target: process.env.NODE_ENV !== 'production' ? serverHostUrl : '/' }]))
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "audiobookshelf-client",
|
"name": "audiobookshelf-client",
|
||||||
"version": "2.17.7",
|
"version": "2.18.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "audiobookshelf-client",
|
"name": "audiobookshelf-client",
|
||||||
"version": "2.17.7",
|
"version": "2.18.1",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxtjs/axios": "^5.13.6",
|
"@nuxtjs/axios": "^5.13.6",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "audiobookshelf-client",
|
"name": "audiobookshelf-client",
|
||||||
"version": "2.17.7",
|
"version": "2.18.1",
|
||||||
"buildNumber": 1,
|
"buildNumber": 1,
|
||||||
"description": "Self-hosted audiobook and podcast client",
|
"description": "Self-hosted audiobook and podcast client",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
|||||||
@@ -86,7 +86,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="w-full flex items-center justify-end p-4">
|
<div class="w-full flex items-center p-4 space-x-2">
|
||||||
|
<ui-btn small @click.stop="resetMapDetails">{{ $strings.ButtonReset }}</ui-btn>
|
||||||
|
<ui-tooltip direction="bottom" :text="$strings.MessageBatchEditPopulateMapDetailsAllHelp">
|
||||||
|
<ui-btn small :disabled="!hasSelectedBatchUsage" @click.stop="populateFromExisting()">{{ $strings.ButtonBatchEditPopulateFromExisting }}</ui-btn>
|
||||||
|
</ui-tooltip>
|
||||||
|
<div class="flex-grow" />
|
||||||
<ui-btn color="success" :disabled="!hasSelectedBatchUsage" :padding-x="8" small class="text-base" :loading="isProcessing" @click="mapBatchDetails">{{ $strings.ButtonApply }}</ui-btn>
|
<ui-btn color="success" :disabled="!hasSelectedBatchUsage" :padding-x="8" small class="text-base" :loading="isProcessing" @click="mapBatchDetails">{{ $strings.ButtonApply }}</ui-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -97,6 +102,11 @@
|
|||||||
<div class="flex justify-center flex-wrap">
|
<div class="flex justify-center flex-wrap">
|
||||||
<template v-for="libraryItem in libraryItemCopies">
|
<template v-for="libraryItem in libraryItemCopies">
|
||||||
<div :key="libraryItem.id" class="w-full max-w-3xl border border-black-300 p-6 -ml-px -mt-px">
|
<div :key="libraryItem.id" class="w-full max-w-3xl border border-black-300 p-6 -ml-px -mt-px">
|
||||||
|
<div class="flex items-center justify-end">
|
||||||
|
<ui-tooltip direction="bottom" :text="$strings.MessageBatchEditPopulateMapDetailsItemHelp">
|
||||||
|
<ui-btn small :disabled="!hasSelectedBatchUsage" @click="populateFromExisting(libraryItem.id)">{{ $strings.ButtonBatchEditPopulateMapDetails }}</ui-btn>
|
||||||
|
</ui-tooltip>
|
||||||
|
</div>
|
||||||
<widgets-book-details-edit v-if="libraryItem.mediaType === 'book'" :ref="`itemForm-${libraryItem.id}`" :library-item="libraryItem" @change="handleItemChange" />
|
<widgets-book-details-edit v-if="libraryItem.mediaType === 'book'" :ref="`itemForm-${libraryItem.id}`" :library-item="libraryItem" @change="handleItemChange" />
|
||||||
<widgets-podcast-details-edit v-else :ref="`itemForm-${libraryItem.id}`" :library-item="libraryItem" @change="handleItemChange" />
|
<widgets-podcast-details-edit v-else :ref="`itemForm-${libraryItem.id}`" :library-item="libraryItem" @change="handleItemChange" />
|
||||||
</div>
|
</div>
|
||||||
@@ -228,6 +238,88 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
resetMapDetails() {
|
||||||
|
this.blurBatchForm()
|
||||||
|
this.batchDetails = {
|
||||||
|
subtitle: null,
|
||||||
|
authors: null,
|
||||||
|
publishedYear: null,
|
||||||
|
series: [],
|
||||||
|
genres: [],
|
||||||
|
tags: [],
|
||||||
|
narrators: [],
|
||||||
|
publisher: null,
|
||||||
|
language: null,
|
||||||
|
explicit: false,
|
||||||
|
abridged: false
|
||||||
|
}
|
||||||
|
this.selectedBatchUsage = {
|
||||||
|
subtitle: false,
|
||||||
|
authors: false,
|
||||||
|
publishedYear: false,
|
||||||
|
series: false,
|
||||||
|
genres: false,
|
||||||
|
tags: false,
|
||||||
|
narrators: false,
|
||||||
|
publisher: false,
|
||||||
|
language: false,
|
||||||
|
explicit: false,
|
||||||
|
abridged: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
populateFromExisting(libraryItemId) {
|
||||||
|
this.blurBatchForm()
|
||||||
|
|
||||||
|
let libraryItemsToMap = this.libraryItemCopies
|
||||||
|
if (libraryItemId) {
|
||||||
|
libraryItemsToMap = this.libraryItemCopies.filter((li) => li.id === libraryItemId)
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key in this.selectedBatchUsage) {
|
||||||
|
if (!this.selectedBatchUsage[key]) continue
|
||||||
|
if (this.isMapAppend && !this.appendableKeys.includes(key)) continue
|
||||||
|
|
||||||
|
let existingValues = undefined
|
||||||
|
libraryItemsToMap.forEach((li) => {
|
||||||
|
if (key === 'tags') {
|
||||||
|
if (!existingValues) existingValues = []
|
||||||
|
li.media.tags.forEach((tag) => {
|
||||||
|
if (!existingValues.includes(tag)) {
|
||||||
|
existingValues.push(tag)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else if (key === 'authors') {
|
||||||
|
if (!existingValues) existingValues = []
|
||||||
|
li.media.metadata[key].forEach((entity) => {
|
||||||
|
if (!existingValues.some((au) => au.id === entity.id)) {
|
||||||
|
existingValues.push({
|
||||||
|
id: entity.id,
|
||||||
|
name: entity.name
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else if (key === 'series') {
|
||||||
|
if (!existingValues) existingValues = []
|
||||||
|
li.media.metadata[key].forEach((entity) => {
|
||||||
|
if (!existingValues.includes(entity.name)) {
|
||||||
|
existingValues.push(entity.name)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else if (key === 'genres' || key === 'narrators') {
|
||||||
|
if (!existingValues) existingValues = []
|
||||||
|
li.media.metadata[key].forEach((item) => {
|
||||||
|
if (!existingValues.includes(item)) {
|
||||||
|
existingValues.push(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else if (existingValues === undefined) {
|
||||||
|
existingValues = li.media.metadata[key]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
this.batchDetails[key] = existingValues
|
||||||
|
}
|
||||||
|
},
|
||||||
handleItemChange(itemChange) {
|
handleItemChange(itemChange) {
|
||||||
if (!itemChange.hasChanges) {
|
if (!itemChange.hasChanges) {
|
||||||
this.itemsWithChanges = this.itemsWithChanges.filter((id) => id !== itemChange.libraryItemId)
|
this.itemsWithChanges = this.itemsWithChanges.filter((id) => id !== itemChange.libraryItemId)
|
||||||
|
|||||||
@@ -14,11 +14,7 @@
|
|||||||
<h1 class="text-xl pl-2">{{ username }}</h1>
|
<h1 class="text-xl pl-2">{{ username }}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="userToken" class="flex text-xs mt-4">
|
<div v-if="userToken" class="flex text-xs mt-4">
|
||||||
<ui-text-input-with-label :label="$strings.LabelApiToken" :value="userToken" readonly />
|
<ui-text-input-with-label :label="$strings.LabelApiToken" :value="userToken" readonly show-copy />
|
||||||
|
|
||||||
<div class="px-1 mt-8 cursor-pointer" @click="copyToClipboard(userToken)">
|
|
||||||
<span class="material-symbols pl-2 text-base">content_copy</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full h-px bg-white bg-opacity-10 my-2" />
|
<div class="w-full h-px bg-white bg-opacity-10 my-2" />
|
||||||
<div class="py-2">
|
<div class="py-2">
|
||||||
@@ -140,9 +136,6 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
copyToClipboard(str) {
|
|
||||||
this.$copyToClipboard(str, this)
|
|
||||||
},
|
|
||||||
async init() {
|
async init() {
|
||||||
this.listeningSessions = await this.$axios
|
this.listeningSessions = await this.$axios
|
||||||
.$get(`/api/users/${this.user.id}/listening-sessions?page=0&itemsPerPage=10`)
|
.$get(`/api/users/${this.user.id}/listening-sessions?page=0&itemsPerPage=10`)
|
||||||
|
|||||||
@@ -123,7 +123,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="my-4 w-full">
|
<div class="my-4 w-full">
|
||||||
<p ref="description" id="item-description" dir="auto" class="text-base text-gray-100 whitespace-pre-line mb-1" :class="{ 'show-full': showFullDescription }">{{ description }}</p>
|
<div ref="description" id="item-description" dir="auto" class="default-style less-spacing text-base text-gray-100 whitespace-pre-line mb-1" :class="{ 'show-full': showFullDescription }" v-html="description" />
|
||||||
|
|
||||||
<button v-if="isDescriptionClamped" class="py-0.5 flex items-center text-slate-300 hover:text-white" @click="showFullDescription = !showFullDescription">{{ showFullDescription ? $strings.ButtonReadLess : $strings.ButtonReadMore }} <span class="material-symbols text-xl pl-1" v-html="showFullDescription ? 'expand_less' : ''" /></button>
|
<button v-if="isDescriptionClamped" class="py-0.5 flex items-center text-slate-300 hover:text-white" @click="showFullDescription = !showFullDescription">{{ showFullDescription ? $strings.ButtonReadLess : $strings.ButtonReadMore }} <span class="material-symbols text-xl pl-1" v-html="showFullDescription ? 'expand_less' : ''" /></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -804,8 +805,7 @@ export default {
|
|||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
-webkit-line-clamp: 4;
|
-webkit-line-clamp: 4;
|
||||||
max-height: 6.25rem;
|
max-height: calc(6 * 1lh);
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
}
|
||||||
#item-description.show-full {
|
#item-description.show-full {
|
||||||
-webkit-line-clamp: unset;
|
-webkit-line-clamp: unset;
|
||||||
|
|||||||
@@ -128,12 +128,11 @@ Vue.prototype.$sanitizeSlug = (str) => {
|
|||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
Vue.prototype.$copyToClipboard = (str, ctx) => {
|
Vue.prototype.$copyToClipboard = (str) => {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
if (navigator.clipboard) {
|
if (navigator.clipboard) {
|
||||||
navigator.clipboard.writeText(str).then(
|
navigator.clipboard.writeText(str).then(
|
||||||
() => {
|
() => {
|
||||||
if (ctx) ctx.$toast.success('Copied to clipboard')
|
|
||||||
resolve(true)
|
resolve(true)
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
@@ -152,7 +151,6 @@ Vue.prototype.$copyToClipboard = (str, ctx) => {
|
|||||||
document.execCommand('copy')
|
document.execCommand('copy')
|
||||||
document.body.removeChild(el)
|
document.body.removeChild(el)
|
||||||
|
|
||||||
if (ctx) ctx.$toast.success('Copied to clipboard')
|
|
||||||
resolve(true)
|
resolve(true)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const state = () => ({
|
|||||||
orderDesc: false,
|
orderDesc: false,
|
||||||
filterBy: 'all',
|
filterBy: 'all',
|
||||||
playbackRate: 1,
|
playbackRate: 1,
|
||||||
|
playbackRateIncrementDecrement: 0.1,
|
||||||
bookshelfCoverSize: 120,
|
bookshelfCoverSize: 120,
|
||||||
collapseSeries: false,
|
collapseSeries: false,
|
||||||
collapseBookSeries: false,
|
collapseBookSeries: false,
|
||||||
|
|||||||
+78
-6
@@ -300,6 +300,7 @@
|
|||||||
"LabelDiscover": "Objevit",
|
"LabelDiscover": "Objevit",
|
||||||
"LabelDownload": "Stáhnout",
|
"LabelDownload": "Stáhnout",
|
||||||
"LabelDownloadNEpisodes": "Stáhnout {0} epizody",
|
"LabelDownloadNEpisodes": "Stáhnout {0} epizody",
|
||||||
|
"LabelDownloadable": "Ke stažení",
|
||||||
"LabelDuration": "Délka trvání",
|
"LabelDuration": "Délka trvání",
|
||||||
"LabelDurationComparisonExactMatch": "(přesná shoda)",
|
"LabelDurationComparisonExactMatch": "(přesná shoda)",
|
||||||
"LabelDurationComparisonLonger": "({0} delší)",
|
"LabelDurationComparisonLonger": "({0} delší)",
|
||||||
@@ -588,6 +589,7 @@
|
|||||||
"LabelSettingsStoreMetadataWithItemHelp": "Ve výchozím nastavení jsou soubory metadat uloženy v adresáři /metadata/items, povolením tohoto nastavení budou soubory metadat uloženy ve složkách položek knihovny",
|
"LabelSettingsStoreMetadataWithItemHelp": "Ve výchozím nastavení jsou soubory metadat uloženy v adresáři /metadata/items, povolením tohoto nastavení budou soubory metadat uloženy ve složkách položek knihovny",
|
||||||
"LabelSettingsTimeFormat": "Formát času",
|
"LabelSettingsTimeFormat": "Formát času",
|
||||||
"LabelShare": "Sdílet",
|
"LabelShare": "Sdílet",
|
||||||
|
"LabelShareDownloadableHelp": "Umožňuje uživatelům s odkazem na sdílení stáhnout soubor zip.",
|
||||||
"LabelShareOpen": "Otevřít sdílení",
|
"LabelShareOpen": "Otevřít sdílení",
|
||||||
"LabelShareURL": "Sdílet URL",
|
"LabelShareURL": "Sdílet URL",
|
||||||
"LabelShowAll": "Zobrazit vše",
|
"LabelShowAll": "Zobrazit vše",
|
||||||
@@ -822,6 +824,7 @@
|
|||||||
"MessagePlaylistCreateFromCollection": "Vytvořit seznam skladeb z kolekce",
|
"MessagePlaylistCreateFromCollection": "Vytvořit seznam skladeb z kolekce",
|
||||||
"MessagePleaseWait": "Čekejte prosím...",
|
"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í",
|
||||||
|
"MessagePodcastSearchField": "Zadejte hledaný pojem pro RSS feed URL",
|
||||||
"MessageQuickEmbedInProgress": "Probíhá rychlé vkládání",
|
"MessageQuickEmbedInProgress": "Probíhá rychlé vkládání",
|
||||||
"MessageQuickEmbedQueue": "Zařazeno do fronty pro rychlé vložení ({0} ve frontě)",
|
"MessageQuickEmbedQueue": "Zařazeno do fronty pro rychlé vložení ({0} ve frontě)",
|
||||||
"MessageQuickMatchAllEpisodes": "Rychlá shoda všech epizod",
|
"MessageQuickMatchAllEpisodes": "Rychlá shoda všech epizod",
|
||||||
@@ -834,6 +837,7 @@
|
|||||||
"MessageResetChaptersConfirm": "Opravdu chcete resetovat kapitoly a vrátit zpět provedené změny?",
|
"MessageResetChaptersConfirm": "Opravdu chcete resetovat kapitoly a vrátit zpět provedené změny?",
|
||||||
"MessageRestoreBackupConfirm": "Opravdu chcete obnovit zálohu vytvořenou dne",
|
"MessageRestoreBackupConfirm": "Opravdu chcete obnovit zálohu vytvořenou dne",
|
||||||
"MessageRestoreBackupWarning": "Obnovení zálohy přepíše celou databázi umístěnou v /config a obálku obrázků v /metadata/items & /metadata/authors.<br /><br />Backups nezmění žádné soubory ve složkách knihovny. Pokud jste povolili nastavení serveru pro ukládání obrázků obalu a metadat do složek knihovny, nebudou zálohovány ani přepsány.<br /><br />Všichni klienti používající váš server budou automaticky obnoveni.",
|
"MessageRestoreBackupWarning": "Obnovení zálohy přepíše celou databázi umístěnou v /config a obálku obrázků v /metadata/items & /metadata/authors.<br /><br />Backups nezmění žádné soubory ve složkách knihovny. Pokud jste povolili nastavení serveru pro ukládání obrázků obalu a metadat do složek knihovny, nebudou zálohovány ani přepsány.<br /><br />Všichni klienti používající váš server budou automaticky obnoveni.",
|
||||||
|
"MessageScheduleLibraryScanNote": "Většině uživatelů se doporučuje ponechat tuto funkci vypnutou a ponechat zapnuté nastavení sledování složek. Sledování složek automaticky zjistí změny ve složkách vaší knihovny. Sledování složek nefunguje pro každý souborový systém (jako je NFS), takže místo toho lze použít plánované skenování knihoven.",
|
||||||
"MessageSearchResultsFor": "Výsledky hledání pro",
|
"MessageSearchResultsFor": "Výsledky hledání pro",
|
||||||
"MessageSelected": "{0} vybráno",
|
"MessageSelected": "{0} vybráno",
|
||||||
"MessageServerCouldNotBeReached": "Server je nedostupný",
|
"MessageServerCouldNotBeReached": "Server je nedostupný",
|
||||||
@@ -843,7 +847,7 @@
|
|||||||
"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}\"",
|
"MessageTaskAudioFileNotWritable": "Nelze zapisovat do audio souboru \"{0}\"",
|
||||||
"MessageTaskCanceledByUser": "Task zrušen uživatelem",
|
"MessageTaskCanceledByUser": "Příkaz zrušen uživatelem",
|
||||||
"MessageTaskDownloadingEpisodeDescription": "Stahování epizody \"{0}\"",
|
"MessageTaskDownloadingEpisodeDescription": "Stahování epizody \"{0}\"",
|
||||||
"MessageTaskEmbeddingMetadata": "Vkládání metadat",
|
"MessageTaskEmbeddingMetadata": "Vkládání metadat",
|
||||||
"MessageTaskEmbeddingMetadataDescription": "Vkládání metadat do audioknihy \"{0}\"",
|
"MessageTaskEmbeddingMetadataDescription": "Vkládání metadat do audioknihy \"{0}\"",
|
||||||
@@ -857,7 +861,7 @@
|
|||||||
"MessageTaskFailedToMoveM4bFile": "Přesunutí m4b souboru selhalo",
|
"MessageTaskFailedToMoveM4bFile": "Přesunutí m4b souboru selhalo",
|
||||||
"MessageTaskFailedToWriteMetadataFile": "Zápis souboru metadat selhal",
|
"MessageTaskFailedToWriteMetadataFile": "Zápis souboru metadat selhal",
|
||||||
"MessageTaskMatchingBooksInLibrary": "Párování knih v knihovně „{0}“",
|
"MessageTaskMatchingBooksInLibrary": "Párování knih v knihovně „{0}“",
|
||||||
"MessageTaskNoFilesToScan": "Žádné soubory ke skenování",
|
"MessageTaskNoFilesToScan": "Žádné soubory k prohledání",
|
||||||
"MessageTaskOpmlImport": "Import OPML",
|
"MessageTaskOpmlImport": "Import OPML",
|
||||||
"MessageTaskOpmlImportDescription": "Vytváření podcastů z {0} RSS feedů",
|
"MessageTaskOpmlImportDescription": "Vytváření podcastů z {0} RSS feedů",
|
||||||
"MessageTaskOpmlImportFeed": "Importní zdroj OPML",
|
"MessageTaskOpmlImportFeed": "Importní zdroj OPML",
|
||||||
@@ -869,6 +873,7 @@
|
|||||||
"MessageTaskOpmlImportFinished": "Přidáno {0} podcastů",
|
"MessageTaskOpmlImportFinished": "Přidáno {0} podcastů",
|
||||||
"MessageTaskOpmlParseFailed": "Selhalo parsování OPML souboru",
|
"MessageTaskOpmlParseFailed": "Selhalo parsování OPML souboru",
|
||||||
"MessageTaskOpmlParseFastFail": "Neplatný OPML soubor <opml> tag nenalezen NEBO <outline> tag nenalezen",
|
"MessageTaskOpmlParseFastFail": "Neplatný OPML soubor <opml> tag nenalezen NEBO <outline> tag nenalezen",
|
||||||
|
"MessageTaskOpmlParseNoneFound": "Feed nebyl nalezen v OPML souboru",
|
||||||
"MessageTaskScanItemsAdded": "{0} přidáno",
|
"MessageTaskScanItemsAdded": "{0} přidáno",
|
||||||
"MessageTaskScanItemsMissing": "{0} chybí",
|
"MessageTaskScanItemsMissing": "{0} chybí",
|
||||||
"MessageTaskScanItemsUpdated": "{0} aktualizováno",
|
"MessageTaskScanItemsUpdated": "{0} aktualizováno",
|
||||||
@@ -876,7 +881,7 @@
|
|||||||
"MessageTaskScanningFileChanges": "Skenování změn souborů v \"{0}\"",
|
"MessageTaskScanningFileChanges": "Skenování změn souborů v \"{0}\"",
|
||||||
"MessageTaskScanningLibrary": "Skenování \"{0}\" knihovny",
|
"MessageTaskScanningLibrary": "Skenování \"{0}\" knihovny",
|
||||||
"MessageTaskTargetDirectoryNotWritable": "Do cílové složky nelze zapisovat",
|
"MessageTaskTargetDirectoryNotWritable": "Do cílové složky nelze zapisovat",
|
||||||
"MessageThinking": "Přemýšlení...",
|
"MessageThinking": "Přemýšlím...",
|
||||||
"MessageUploaderItemFailed": "Nahrávání selhalo",
|
"MessageUploaderItemFailed": "Nahrávání selhalo",
|
||||||
"MessageUploaderItemSuccess": "Úspěšně nahráno!",
|
"MessageUploaderItemSuccess": "Úspěšně nahráno!",
|
||||||
"MessageUploading": "Nahrávám...",
|
"MessageUploading": "Nahrávám...",
|
||||||
@@ -892,7 +897,7 @@
|
|||||||
"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í.",
|
||||||
"NoteUploaderFoldersWithMediaFiles": "Se složkami s multimediálními soubory bude zacházeno jako se samostatnými položkami knihovny.",
|
"NoteUploaderFoldersWithMediaFiles": "Se složkami s multimediálními soubory bude zacházeno jako se samostatnými položkami knihovny.",
|
||||||
"NoteUploaderOnlyAudioFiles": "Pokud nahráváte pouze zvukové soubory, bude s každým zvukovým souborem zacházeno jako se samostatnou audioknihou.",
|
"NoteUploaderOnlyAudioFiles": "Pokud nahráváte pouze zvukové soubory, bude s každým zvukovým souborem zacházeno jako se samostatnou audioknihou.",
|
||||||
"NoteUploaderUnsupportedFiles": "Nepodporované soubory jsou ignorovány. Při výběru nebo přetažení složky jsou ostatní soubory, které nejsou ve složce položek, ignorovány.",
|
"NoteUploaderUnsupportedFiles": "Nepodporované soubory jsou ignorovány. Při výběru nebo přetažení složky jsou ostatní soubory, které nejsou ve složce, ignorovány.",
|
||||||
"NotificationOnBackupCompletedDescription": "Spuštěno po dokončení zálohování",
|
"NotificationOnBackupCompletedDescription": "Spuštěno po dokončení zálohování",
|
||||||
"NotificationOnBackupFailedDescription": "Spuštěno pokud zálohování selže",
|
"NotificationOnBackupFailedDescription": "Spuštěno pokud zálohování selže",
|
||||||
"NotificationOnEpisodeDownloadedDescription": "Spuštěno při automatickém stažení epizody podcastu",
|
"NotificationOnEpisodeDownloadedDescription": "Spuštěno při automatickém stažení epizody podcastu",
|
||||||
@@ -909,7 +914,7 @@
|
|||||||
"StatsBooksFinishedThisYear": "Některé knihy dokončené tento rok…",
|
"StatsBooksFinishedThisYear": "Některé knihy dokončené tento rok…",
|
||||||
"StatsBooksListenedTo": "knih poslechnuto",
|
"StatsBooksListenedTo": "knih poslechnuto",
|
||||||
"StatsCollectionGrewTo": "Vaše kolekce knih se rozrostla na…",
|
"StatsCollectionGrewTo": "Vaše kolekce knih se rozrostla na…",
|
||||||
"StatsSessions": "sezení",
|
"StatsSessions": "sezóna",
|
||||||
"StatsSpentListening": "stráveno posloucháním",
|
"StatsSpentListening": "stráveno posloucháním",
|
||||||
"StatsTopAuthor": "TOP AUTOR",
|
"StatsTopAuthor": "TOP AUTOR",
|
||||||
"StatsTopAuthors": "TOP AUTOŘI",
|
"StatsTopAuthors": "TOP AUTOŘI",
|
||||||
@@ -942,6 +947,8 @@
|
|||||||
"ToastBackupUploadSuccess": "Záloha nahrána",
|
"ToastBackupUploadSuccess": "Záloha nahrána",
|
||||||
"ToastBatchDeleteFailed": "Hromadné smazání selhalo",
|
"ToastBatchDeleteFailed": "Hromadné smazání selhalo",
|
||||||
"ToastBatchDeleteSuccess": "Hromadné smazání proběhlo úspěšně",
|
"ToastBatchDeleteSuccess": "Hromadné smazání proběhlo úspěšně",
|
||||||
|
"ToastBatchQuickMatchFailed": "Rychlá schoda dávky se nezdařila!",
|
||||||
|
"ToastBatchQuickMatchStarted": "Začala rychlá shoda {0} knih!",
|
||||||
"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",
|
||||||
@@ -952,9 +959,12 @@
|
|||||||
"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",
|
"ToastChaptersRemoved": "Kapitoly odstraněny",
|
||||||
|
"ToastChaptersUpdated": "Kapitola aktualizována",
|
||||||
|
"ToastCollectionItemsAddFailed": "Přidávání položek do kolekce selhalo",
|
||||||
"ToastCollectionRemoveSuccess": "Kolekce odstraněna",
|
"ToastCollectionRemoveSuccess": "Kolekce odstraněna",
|
||||||
"ToastCollectionUpdateSuccess": "Kolekce aktualizována",
|
"ToastCollectionUpdateSuccess": "Kolekce aktualizována",
|
||||||
"ToastCoverUpdateFailed": "Aktualizace obálky selhala",
|
"ToastCoverUpdateFailed": "Aktualizace obálky selhala",
|
||||||
|
"ToastDateTimeInvalidOrIncomplete": "Datum a čas jsou chybné nebo nekompletní",
|
||||||
"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",
|
"ToastDeviceAddFailed": "Přidání zařízení selhalo",
|
||||||
@@ -962,12 +972,18 @@
|
|||||||
"ToastDeviceTestEmailFailed": "Odeslání testovacího emailu selhalo",
|
"ToastDeviceTestEmailFailed": "Odeslání testovacího emailu selhalo",
|
||||||
"ToastDeviceTestEmailSuccess": "Testovací email byl odeslán",
|
"ToastDeviceTestEmailSuccess": "Testovací email byl odeslán",
|
||||||
"ToastEmailSettingsUpdateSuccess": "Nastavení emailu aktualizována",
|
"ToastEmailSettingsUpdateSuccess": "Nastavení emailu aktualizována",
|
||||||
|
"ToastEncodeCancelFailed": "Chyba zrušení kódování",
|
||||||
|
"ToastEncodeCancelSucces": "Kódování zrušeno",
|
||||||
"ToastEpisodeDownloadQueueClearFailed": "Vyčištění fronty selhalo",
|
"ToastEpisodeDownloadQueueClearFailed": "Vyčištění fronty selhalo",
|
||||||
|
"ToastEpisodeDownloadQueueClearSuccess": "Fronta stahování epizod je prázdná",
|
||||||
|
"ToastEpisodeUpdateSuccess": "{0} epizod aktualizováno",
|
||||||
"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",
|
||||||
|
"ToastFailedToMatch": "Nepodařilo se spárovat",
|
||||||
"ToastFailedToShare": "Sdílení selhalo",
|
"ToastFailedToShare": "Sdílení selhalo",
|
||||||
"ToastFailedToUpdate": "Aktualizace selhala",
|
"ToastFailedToUpdate": "Aktualizace selhala",
|
||||||
"ToastInvalidImageUrl": "Neplatná URL obrázku",
|
"ToastInvalidImageUrl": "Neplatná URL obrázku",
|
||||||
|
"ToastInvalidMaxEpisodesToDownload": "Neplatný maximální počet epizod ke stažení",
|
||||||
"ToastInvalidUrl": "Neplatná URL",
|
"ToastInvalidUrl": "Neplatná URL",
|
||||||
"ToastItemCoverUpdateSuccess": "Obálka předmětu byl aktualizována",
|
"ToastItemCoverUpdateSuccess": "Obálka předmětu byl aktualizována",
|
||||||
"ToastItemDeletedFailed": "Smazání položky selhalo",
|
"ToastItemDeletedFailed": "Smazání položky selhalo",
|
||||||
@@ -985,28 +1001,84 @@
|
|||||||
"ToastLibraryScanFailedToStart": "Nepodařilo se spustit kontrolu",
|
"ToastLibraryScanFailedToStart": "Nepodařilo se spustit kontrolu",
|
||||||
"ToastLibraryScanStarted": "Kontrola knihovny spuštěna",
|
"ToastLibraryScanStarted": "Kontrola knihovny spuštěna",
|
||||||
"ToastLibraryUpdateSuccess": "Knihovna \"{0}\" aktualizována",
|
"ToastLibraryUpdateSuccess": "Knihovna \"{0}\" aktualizována",
|
||||||
|
"ToastMatchAllAuthorsFailed": "Nepodařilo se přiřadit všechny autory",
|
||||||
|
"ToastMetadataFilesRemovedError": "Při odstraňování souborů metadat.{0} došlo k chybě",
|
||||||
|
"ToastMetadataFilesRemovedNoneFound": "Žádná metadata.{0} nebyla nalezena v knihovně",
|
||||||
|
"ToastMetadataFilesRemovedNoneRemoved": "Žádná metadata.{0} počet odstraněných souborů",
|
||||||
|
"ToastMetadataFilesRemovedSuccess": "{0} metadata.{1} soubor odstraněn",
|
||||||
|
"ToastMustHaveAtLeastOnePath": "Musí mít minimálně jednu cestu",
|
||||||
|
"ToastNameEmailRequired": "Jméno a email jsou vyžadovány",
|
||||||
|
"ToastNameRequired": "Jméno je vyžadováno",
|
||||||
|
"ToastNewEpisodesFound": "{0} nových epizod bylo nalezeno",
|
||||||
|
"ToastNewUserCreatedFailed": "Chyba při vytváření účtu: \"{0}\"",
|
||||||
|
"ToastNewUserCreatedSuccess": "Vytvořen nový účet",
|
||||||
|
"ToastNewUserLibraryError": "Musíte vybrat alespoň jednu knihovnu",
|
||||||
|
"ToastNewUserPasswordError": "Musí mít heslo, pouze uživatel root může mít prázdné heslo",
|
||||||
|
"ToastNewUserTagError": "Musíte vybrat alespoň jeden tag",
|
||||||
|
"ToastNewUserUsernameError": "Zadej uživatelské jméno",
|
||||||
|
"ToastNoNewEpisodesFound": "Nebyla nalezena žádná nová epizoda",
|
||||||
|
"ToastNoRSSFeed": "Podcast nemá RSS Feed",
|
||||||
|
"ToastNoUpdatesNecessary": "Nejsou potřeba žádné aktualizace",
|
||||||
|
"ToastNotificationCreateFailed": "Chyba při vytváření upozornění",
|
||||||
|
"ToastNotificationDeleteFailed": "Chyba při odstranění upozornění",
|
||||||
|
"ToastNotificationFailedMaximum": "Maximální počet chybných pokusů >= 0",
|
||||||
|
"ToastNotificationQueueMaximum": "Maximální počet upozornění ve frontě musí být >= 0",
|
||||||
|
"ToastNotificationSettingsUpdateSuccess": "Nastavení upozornění aktualizováno",
|
||||||
|
"ToastNotificationTestTriggerFailed": "Chyba při spuštění testovacího upozornění",
|
||||||
|
"ToastNotificationTestTriggerSuccess": "Spuštěno testovací upozornění",
|
||||||
|
"ToastNotificationUpdateSuccess": "Upozornění aktualizováno",
|
||||||
"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",
|
||||||
"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",
|
||||||
|
"ToastPodcastGetFeedFailed": "Chyba při získání podcastového feedu",
|
||||||
|
"ToastPodcastNoEpisodesInFeed": "Žádné epizody nenalezeny v RSS feedu",
|
||||||
|
"ToastPodcastNoRssFeed": "Podcast nemá RSS feed",
|
||||||
|
"ToastProgressIsNotBeingSynced": "Progres není synchronizován, restartujte přehrávání",
|
||||||
|
"ToastProviderCreatedFailed": "Chyba při zadání poskytovatele",
|
||||||
|
"ToastProviderCreatedSuccess": "Nový poskytovatel přidán",
|
||||||
|
"ToastProviderNameAndUrlRequired": "Jméno a Url jsou vyžadovány",
|
||||||
|
"ToastProviderRemoveSuccess": "Poskytovatel odstraněn",
|
||||||
"ToastRSSFeedCloseFailed": "Nepodařilo se zavřít RSS kanál",
|
"ToastRSSFeedCloseFailed": "Nepodařilo se zavřít RSS kanál",
|
||||||
"ToastRSSFeedCloseSuccess": "RSS kanál uzavřen",
|
"ToastRSSFeedCloseSuccess": "RSS kanál uzavřen",
|
||||||
|
"ToastRemoveFailed": "Chyba při odstranění",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Nepodařilo se odebrat položku z kolekce",
|
"ToastRemoveItemFromCollectionFailed": "Nepodařilo se odebrat položku z kolekce",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "Položka odstraněna z kolekce",
|
"ToastRemoveItemFromCollectionSuccess": "Položka odstraněna z kolekce",
|
||||||
|
"ToastRemoveItemsWithIssuesFailed": "Chyba při odstranění položek v knihovně s chybami",
|
||||||
|
"ToastRemoveItemsWithIssuesSuccess": "Odstraněny položky knihovny s chybami",
|
||||||
|
"ToastRenameFailed": "Chyba při přejmenování",
|
||||||
|
"ToastRescanFailed": "Znovu prohledání selhalo z důvodu {0}",
|
||||||
|
"ToastRescanRemoved": "Znova skenování komplení - položka byla odsraněna",
|
||||||
|
"ToastRescanUpToDate": "Znovu prohledání kompletní - položka aktualizována",
|
||||||
|
"ToastRescanUpdated": "Znovu skenování komplení - položka byla aktualizována",
|
||||||
|
"ToastScanFailed": "Prohledání položek knihovny selhalo",
|
||||||
|
"ToastSelectAtLeastOneUser": "Vyberte alespoň jednoho uživatele",
|
||||||
"ToastSendEbookToDeviceFailed": "Odeslání e-knihy do zařízení se nezdařilo",
|
"ToastSendEbookToDeviceFailed": "Odeslání e-knihy do zařízení se nezdařilo",
|
||||||
"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á",
|
||||||
"ToastServerSettingsUpdateSuccess": "Nastavení serveru aktualizováno",
|
"ToastServerSettingsUpdateSuccess": "Nastavení serveru aktualizováno",
|
||||||
|
"ToastSessionCloseFailed": "Chyba při ukončení",
|
||||||
"ToastSessionDeleteFailed": "Nepodařilo se smazat relaci",
|
"ToastSessionDeleteFailed": "Nepodařilo se smazat relaci",
|
||||||
"ToastSessionDeleteSuccess": "Relace smazána",
|
"ToastSessionDeleteSuccess": "Relace smazána",
|
||||||
|
"ToastSleepTimerDone": "Uspání knížky ... zZzzZz",
|
||||||
|
"ToastSlugMustChange": "Slug (URL) obsahuje chybné znaky",
|
||||||
|
"ToastSlugRequired": "Slug (URL) je vyžadována",
|
||||||
"ToastSocketConnected": "Socket připojen",
|
"ToastSocketConnected": "Socket připojen",
|
||||||
"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",
|
||||||
"ToastSortingPrefixesUpdateSuccess": "Aktualizovány předpony třídění ({0} položek)",
|
"ToastSortingPrefixesUpdateSuccess": "Aktualizovány předpony třídění ({0} položek)",
|
||||||
|
"ToastTitleRequired": "Titul je vyžadován",
|
||||||
|
"ToastUnknownError": "Neznámý error",
|
||||||
|
"ToastUnlinkOpenIdFailed": "Chyba při odpárování uživatele z OpenID",
|
||||||
|
"ToastUnlinkOpenIdSuccess": "Uživatel odpárován z uživatele z OpenID",
|
||||||
"ToastUserDeleteFailed": "Nepodařilo se smazat uživatele",
|
"ToastUserDeleteFailed": "Nepodařilo se smazat uživatele",
|
||||||
"ToastUserDeleteSuccess": "Uživatel smazán"
|
"ToastUserDeleteSuccess": "Uživatel smazán",
|
||||||
|
"ToastUserPasswordChangeSuccess": "Heslo bylo změněno úspěšně",
|
||||||
|
"ToastUserPasswordMismatch": "Hesla se neschodují",
|
||||||
|
"ToastUserPasswordMustChange": "Nové heslo se musí lišit od předchozího",
|
||||||
|
"ToastUserRootRequireName": "Musíte zadat uživatelské jméno root"
|
||||||
}
|
}
|
||||||
|
|||||||
+414
-7
@@ -37,6 +37,8 @@
|
|||||||
"ButtonHide": "Skjul",
|
"ButtonHide": "Skjul",
|
||||||
"ButtonHome": "Hjem",
|
"ButtonHome": "Hjem",
|
||||||
"ButtonIssues": "Problemer",
|
"ButtonIssues": "Problemer",
|
||||||
|
"ButtonJumpBackward": "Hop Tilbage",
|
||||||
|
"ButtonJumpForward": "Hop Fremad",
|
||||||
"ButtonLatest": "Seneste",
|
"ButtonLatest": "Seneste",
|
||||||
"ButtonLibrary": "Bibliotek",
|
"ButtonLibrary": "Bibliotek",
|
||||||
"ButtonLogout": "Log ud",
|
"ButtonLogout": "Log ud",
|
||||||
@@ -46,20 +48,32 @@
|
|||||||
"ButtonMatchAllAuthors": "Match alle forfattere",
|
"ButtonMatchAllAuthors": "Match alle forfattere",
|
||||||
"ButtonMatchBooks": "Match bøger",
|
"ButtonMatchBooks": "Match bøger",
|
||||||
"ButtonNevermind": "Glem det",
|
"ButtonNevermind": "Glem det",
|
||||||
"ButtonOk": "OK",
|
"ButtonNext": "Næste",
|
||||||
|
"ButtonNextChapter": "Næste Kapitel",
|
||||||
|
"ButtonNextItemInQueue": "Næste Element i Køen",
|
||||||
|
"ButtonOk": "Ok",
|
||||||
"ButtonOpenFeed": "Åbn feed",
|
"ButtonOpenFeed": "Åbn feed",
|
||||||
"ButtonOpenManager": "Åbn manager",
|
"ButtonOpenManager": "Åbn manager",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Afspil",
|
"ButtonPlay": "Afspil",
|
||||||
|
"ButtonPlayAll": "Afspil Alle",
|
||||||
"ButtonPlaying": "Afspiller",
|
"ButtonPlaying": "Afspiller",
|
||||||
"ButtonPlaylists": "Afspilningslister",
|
"ButtonPlaylists": "Afspilningslister",
|
||||||
|
"ButtonPrevious": "Sidste",
|
||||||
|
"ButtonPreviousChapter": "Sidste Kapitel",
|
||||||
|
"ButtonProbeAudioFile": "Undersøg Lydfil",
|
||||||
"ButtonPurgeAllCache": "Ryd al cache",
|
"ButtonPurgeAllCache": "Ryd al cache",
|
||||||
"ButtonPurgeItemsCache": "Ryd elementcache",
|
"ButtonPurgeItemsCache": "Ryd elementcache",
|
||||||
"ButtonQueueAddItem": "Tilføj til kø",
|
"ButtonQueueAddItem": "Tilføj til kø",
|
||||||
"ButtonQueueRemoveItem": "Fjern fra kø",
|
"ButtonQueueRemoveItem": "Fjern fra kø",
|
||||||
|
"ButtonQuickEmbed": "Hurtig Indlejring",
|
||||||
|
"ButtonQuickEmbedMetadata": "Hurtig Indlejring af Metadata",
|
||||||
"ButtonQuickMatch": "Hurtig Match",
|
"ButtonQuickMatch": "Hurtig Match",
|
||||||
"ButtonReScan": "Gen-scan",
|
"ButtonReScan": "Gen-scan",
|
||||||
"ButtonRead": "Læs",
|
"ButtonRead": "Læs",
|
||||||
|
"ButtonReadLess": "Se mindre",
|
||||||
|
"ButtonReadMore": "Se mere",
|
||||||
|
"ButtonRefresh": "Genindlæs",
|
||||||
"ButtonRemove": "Fjern",
|
"ButtonRemove": "Fjern",
|
||||||
"ButtonRemoveAll": "Fjern Alle",
|
"ButtonRemoveAll": "Fjern Alle",
|
||||||
"ButtonRemoveAllLibraryItems": "Fjern Alle Bibliotekselementer",
|
"ButtonRemoveAllLibraryItems": "Fjern Alle Bibliotekselementer",
|
||||||
@@ -67,31 +81,46 @@
|
|||||||
"ButtonRemoveFromContinueReading": "Fjern fra Fortsæt Læsning",
|
"ButtonRemoveFromContinueReading": "Fjern fra Fortsæt Læsning",
|
||||||
"ButtonRemoveSeriesFromContinueSeries": "Fjern Serie fra Fortsæt Serie",
|
"ButtonRemoveSeriesFromContinueSeries": "Fjern Serie fra Fortsæt Serie",
|
||||||
"ButtonReset": "Nulstil",
|
"ButtonReset": "Nulstil",
|
||||||
|
"ButtonResetToDefault": "Nulstil til standard",
|
||||||
"ButtonRestore": "Gendan",
|
"ButtonRestore": "Gendan",
|
||||||
"ButtonSave": "Gem",
|
"ButtonSave": "Gem",
|
||||||
"ButtonSaveAndClose": "Gem & Luk",
|
"ButtonSaveAndClose": "Gem & Luk",
|
||||||
"ButtonSaveTracklist": "Gem Sporliste",
|
"ButtonSaveTracklist": "Gem Sporliste",
|
||||||
|
"ButtonScan": "Scan",
|
||||||
"ButtonScanLibrary": "Scan Bibliotek",
|
"ButtonScanLibrary": "Scan Bibliotek",
|
||||||
|
"ButtonScrollLeft": "Rul til Venstre",
|
||||||
|
"ButtonScrollRight": "Rul til Højre",
|
||||||
"ButtonSearch": "Søg",
|
"ButtonSearch": "Søg",
|
||||||
"ButtonSelectFolderPath": "Vælg Mappen Sti",
|
"ButtonSelectFolderPath": "Vælg Mappen Sti",
|
||||||
"ButtonSeries": "Serier",
|
"ButtonSeries": "Serier",
|
||||||
"ButtonSetChaptersFromTracks": "Sæt kapitler fra spor",
|
"ButtonSetChaptersFromTracks": "Sæt kapitler fra spor",
|
||||||
|
"ButtonShare": "Del",
|
||||||
"ButtonShiftTimes": "Skift Tider",
|
"ButtonShiftTimes": "Skift Tider",
|
||||||
"ButtonShow": "Vis",
|
"ButtonShow": "Vis",
|
||||||
"ButtonStartM4BEncode": "Start M4B Kode",
|
"ButtonStartM4BEncode": "Start M4B Kode",
|
||||||
"ButtonStartMetadataEmbed": "Start Metadata Indlejring",
|
"ButtonStartMetadataEmbed": "Start Metadata Indlejring",
|
||||||
|
"ButtonStats": "Statistik",
|
||||||
"ButtonSubmit": "Send",
|
"ButtonSubmit": "Send",
|
||||||
|
"ButtonTest": "Test",
|
||||||
|
"ButtonUnlinkOpenId": "Afkobl OpenID",
|
||||||
|
"ButtonUpload": "Upload",
|
||||||
|
"ButtonUploadBackup": "Upload Backup",
|
||||||
"ButtonUploadCover": "Upload Omslag",
|
"ButtonUploadCover": "Upload Omslag",
|
||||||
"ButtonUploadOPMLFile": "Upload OPML Fil",
|
"ButtonUploadOPMLFile": "Upload OPML Fil",
|
||||||
"ButtonUserDelete": "Slet bruger {0}",
|
"ButtonUserDelete": "Slet bruger {0}",
|
||||||
"ButtonUserEdit": "Rediger bruger {0}",
|
"ButtonUserEdit": "Rediger bruger {0}",
|
||||||
"ButtonViewAll": "Vis Alle",
|
"ButtonViewAll": "Vis Alle",
|
||||||
"ButtonYes": "Ja",
|
"ButtonYes": "Ja",
|
||||||
|
"ErrorUploadFetchMetadataAPI": "Fejl henter metadata",
|
||||||
|
"ErrorUploadFetchMetadataNoResults": "Kunne ikke hente metadata - prøv at uploade title og/eller forfatter",
|
||||||
|
"ErrorUploadLacksTitle": "Skal have en title",
|
||||||
"HeaderAccount": "Konto",
|
"HeaderAccount": "Konto",
|
||||||
|
"HeaderAddCustomMetadataProvider": "Tilføj Brugerdefineret Metadataudbyder",
|
||||||
"HeaderAdvanced": "Avanceret",
|
"HeaderAdvanced": "Avanceret",
|
||||||
"HeaderAppriseNotificationSettings": "Apprise Notifikationsindstillinger",
|
"HeaderAppriseNotificationSettings": "Apprise Notifikationsindstillinger",
|
||||||
"HeaderAudioTracks": "Lydspor",
|
"HeaderAudioTracks": "Lydspor",
|
||||||
"HeaderAudiobookTools": "Audiobog Filhåndteringsværktøjer",
|
"HeaderAudiobookTools": "Audiobog Filhåndteringsværktøjer",
|
||||||
|
"HeaderAuthentication": "Autentificering",
|
||||||
"HeaderBackups": "Sikkerhedskopier",
|
"HeaderBackups": "Sikkerhedskopier",
|
||||||
"HeaderChangePassword": "Skift Adgangskode",
|
"HeaderChangePassword": "Skift Adgangskode",
|
||||||
"HeaderChapters": "Kapitler",
|
"HeaderChapters": "Kapitler",
|
||||||
@@ -100,9 +129,12 @@
|
|||||||
"HeaderCollectionItems": "Samlingselementer",
|
"HeaderCollectionItems": "Samlingselementer",
|
||||||
"HeaderCover": "Omslag",
|
"HeaderCover": "Omslag",
|
||||||
"HeaderCurrentDownloads": "Nuværende Downloads",
|
"HeaderCurrentDownloads": "Nuværende Downloads",
|
||||||
|
"HeaderCustomMessageOnLogin": "Brugerdefineret Besked ved Login",
|
||||||
|
"HeaderCustomMetadataProviders": "Brugerdefineret Metadataudbyder",
|
||||||
"HeaderDetails": "Detaljer",
|
"HeaderDetails": "Detaljer",
|
||||||
"HeaderDownloadQueue": "Download Kø",
|
"HeaderDownloadQueue": "Download Kø",
|
||||||
"HeaderEbookFiles": "E-bogsfiler",
|
"HeaderEbookFiles": "E-bogsfiler",
|
||||||
|
"HeaderEmail": "Email",
|
||||||
"HeaderEmailSettings": "Email Indstillinger",
|
"HeaderEmailSettings": "Email Indstillinger",
|
||||||
"HeaderEpisodes": "Episoder",
|
"HeaderEpisodes": "Episoder",
|
||||||
"HeaderEreaderDevices": "E-læser Enheder",
|
"HeaderEreaderDevices": "E-læser Enheder",
|
||||||
@@ -120,33 +152,47 @@
|
|||||||
"HeaderListeningSessions": "Lyttesessioner",
|
"HeaderListeningSessions": "Lyttesessioner",
|
||||||
"HeaderListeningStats": "Lyttestatistik",
|
"HeaderListeningStats": "Lyttestatistik",
|
||||||
"HeaderLogin": "Log ind",
|
"HeaderLogin": "Log ind",
|
||||||
|
"HeaderLogs": "Logs",
|
||||||
"HeaderManageGenres": "Administrer Genrer",
|
"HeaderManageGenres": "Administrer Genrer",
|
||||||
"HeaderManageTags": "Administrer Tags",
|
"HeaderManageTags": "Administrer Tags",
|
||||||
"HeaderMapDetails": "Kort Detaljer",
|
"HeaderMapDetails": "Kort Detaljer",
|
||||||
|
"HeaderMatch": "Match",
|
||||||
|
"HeaderMetadataOrderOfPrecedence": "Metadata-prioritet",
|
||||||
"HeaderMetadataToEmbed": "Metadata til indlejring",
|
"HeaderMetadataToEmbed": "Metadata til indlejring",
|
||||||
"HeaderNewAccount": "Ny Konto",
|
"HeaderNewAccount": "Ny Konto",
|
||||||
"HeaderNewLibrary": "Nyt Bibliotek",
|
"HeaderNewLibrary": "Nyt Bibliotek",
|
||||||
|
"HeaderNotificationCreate": "Opret Notifikation",
|
||||||
|
"HeaderNotificationUpdate": "Updater Notifikation",
|
||||||
"HeaderNotifications": "Meddelelser",
|
"HeaderNotifications": "Meddelelser",
|
||||||
|
"HeaderOpenIDConnectAuthentication": "OpenID Connect-autentificering",
|
||||||
|
"HeaderOpenListeningSessions": "Åbne lyttesessioner",
|
||||||
"HeaderOpenRSSFeed": "Åbn RSS Feed",
|
"HeaderOpenRSSFeed": "Åbn RSS Feed",
|
||||||
"HeaderOtherFiles": "Andre Filer",
|
"HeaderOtherFiles": "Andre Filer",
|
||||||
|
"HeaderPasswordAuthentication": "Adgangskodeautentificering",
|
||||||
"HeaderPermissions": "Tilladelser",
|
"HeaderPermissions": "Tilladelser",
|
||||||
"HeaderPlayerQueue": "Afspilningskø",
|
"HeaderPlayerQueue": "Afspilningskø",
|
||||||
|
"HeaderPlayerSettings": "Afspiller Indstillinger",
|
||||||
"HeaderPlaylist": "Afspilningsliste",
|
"HeaderPlaylist": "Afspilningsliste",
|
||||||
"HeaderPlaylistItems": "Afspilningsliste Elementer",
|
"HeaderPlaylistItems": "Afspilningsliste Elementer",
|
||||||
"HeaderPodcastsToAdd": "Podcasts til Tilføjelse",
|
"HeaderPodcastsToAdd": "Podcasts til Tilføjelse",
|
||||||
"HeaderPreviewCover": "Forhåndsvis Omslag",
|
"HeaderPreviewCover": "Forhåndsvis Omslag",
|
||||||
"HeaderRSSFeedGeneral": "RSS Detaljer",
|
"HeaderRSSFeedGeneral": "RSS Detaljer",
|
||||||
"HeaderRSSFeedIsOpen": "RSS Feed er Åben",
|
"HeaderRSSFeedIsOpen": "RSS Feed er Åben",
|
||||||
|
"HeaderRSSFeeds": "RSS-Feeds",
|
||||||
"HeaderRemoveEpisode": "Fjern Episode",
|
"HeaderRemoveEpisode": "Fjern Episode",
|
||||||
"HeaderRemoveEpisodes": "Fjern {0} Episoder",
|
"HeaderRemoveEpisodes": "Fjern {0} Episoder",
|
||||||
"HeaderSavedMediaProgress": "Gemt Medieforløb",
|
"HeaderSavedMediaProgress": "Gemt Medieforløb",
|
||||||
"HeaderSchedule": "Planlæg",
|
"HeaderSchedule": "Planlæg",
|
||||||
|
"HeaderScheduleEpisodeDownloads": "Planlæg Automatisk Episode-Download",
|
||||||
"HeaderScheduleLibraryScans": "Planlæg Automatiske Biblioteksscanninger",
|
"HeaderScheduleLibraryScans": "Planlæg Automatiske Biblioteksscanninger",
|
||||||
|
"HeaderSession": "Session",
|
||||||
"HeaderSetBackupSchedule": "Indstil Sikkerhedskopieringsplan",
|
"HeaderSetBackupSchedule": "Indstil Sikkerhedskopieringsplan",
|
||||||
"HeaderSettings": "Indstillinger",
|
"HeaderSettings": "Indstillinger",
|
||||||
"HeaderSettingsDisplay": "Skærm",
|
"HeaderSettingsDisplay": "Skærm",
|
||||||
"HeaderSettingsExperimental": "Eksperimentelle Funktioner",
|
"HeaderSettingsExperimental": "Eksperimentelle Funktioner",
|
||||||
"HeaderSettingsGeneral": "Generelt",
|
"HeaderSettingsGeneral": "Generelt",
|
||||||
|
"HeaderSettingsScanner": "Scanner",
|
||||||
|
"HeaderSettingsWebClient": "Webklient",
|
||||||
"HeaderSleepTimer": "Søvntimer",
|
"HeaderSleepTimer": "Søvntimer",
|
||||||
"HeaderStatsLargestItems": "Største Elementer",
|
"HeaderStatsLargestItems": "Største Elementer",
|
||||||
"HeaderStatsLongestItems": "Længste Elementer (timer)",
|
"HeaderStatsLongestItems": "Længste Elementer (timer)",
|
||||||
@@ -161,7 +207,12 @@
|
|||||||
"HeaderUpdateDetails": "Opdater Detaljer",
|
"HeaderUpdateDetails": "Opdater Detaljer",
|
||||||
"HeaderUpdateLibrary": "Opdater Bibliotek",
|
"HeaderUpdateLibrary": "Opdater Bibliotek",
|
||||||
"HeaderUsers": "Brugere",
|
"HeaderUsers": "Brugere",
|
||||||
|
"HeaderYearReview": "Gennemgang af År {0}",
|
||||||
"HeaderYourStats": "Dine Statistikker",
|
"HeaderYourStats": "Dine Statistikker",
|
||||||
|
"LabelAbridged": "Forkortet",
|
||||||
|
"LabelAbridgedChecked": "Forkortet (kontrolleret)",
|
||||||
|
"LabelAbridgedUnchecked": "Uforkortet (ikke kontrolleret)",
|
||||||
|
"LabelAccessibleBy": "Tilgængelig af",
|
||||||
"LabelAccountType": "Kontotype",
|
"LabelAccountType": "Kontotype",
|
||||||
"LabelAccountTypeAdmin": "Administrator",
|
"LabelAccountTypeAdmin": "Administrator",
|
||||||
"LabelAccountTypeGuest": "Gæst",
|
"LabelAccountTypeGuest": "Gæst",
|
||||||
@@ -171,32 +222,56 @@
|
|||||||
"LabelAddToCollectionBatch": "Tilføj {0} Bøger til Samling",
|
"LabelAddToCollectionBatch": "Tilføj {0} Bøger til Samling",
|
||||||
"LabelAddToPlaylist": "Tilføj til Afspilningsliste",
|
"LabelAddToPlaylist": "Tilføj til Afspilningsliste",
|
||||||
"LabelAddToPlaylistBatch": "Tilføj {0} Elementer til Afspilningsliste",
|
"LabelAddToPlaylistBatch": "Tilføj {0} Elementer til Afspilningsliste",
|
||||||
"LabelAddedAt": "Tilføjet Kl.",
|
"LabelAddedAt": "Tilføjet",
|
||||||
|
"LabelAddedDate": "Tilføjet {0}",
|
||||||
|
"LabelAdminUsersOnly": "Kun Administratorbrugere",
|
||||||
"LabelAll": "Alle",
|
"LabelAll": "Alle",
|
||||||
"LabelAllUsers": "Alle Brugere",
|
"LabelAllUsers": "Alle Brugere",
|
||||||
|
"LabelAllUsersExcludingGuests": "Alle bruger eksklusiv gæster",
|
||||||
|
"LabelAllUsersIncludingGuests": "Alle bruger inklusiv gæster",
|
||||||
"LabelAlreadyInYourLibrary": "Allerede i dit bibliotek",
|
"LabelAlreadyInYourLibrary": "Allerede i dit bibliotek",
|
||||||
|
"LabelApiToken": "API Token",
|
||||||
"LabelAppend": "Tilføj",
|
"LabelAppend": "Tilføj",
|
||||||
|
"LabelAudioBitrate": "Lydbitrate (f.eks. 128k)",
|
||||||
|
"LabelAudioChannels": "Lydkanaler (1 eller 2)",
|
||||||
|
"LabelAudioCodec": "Lydkodek",
|
||||||
"LabelAuthor": "Forfatter",
|
"LabelAuthor": "Forfatter",
|
||||||
"LabelAuthorFirstLast": "Forfatter (Fornavn Efternavn)",
|
"LabelAuthorFirstLast": "Forfatter (Fornavn Efternavn)",
|
||||||
"LabelAuthorLastFirst": "Forfatter (Efternavn, Fornavn)",
|
"LabelAuthorLastFirst": "Forfatter (Efternavn, Fornavn)",
|
||||||
"LabelAuthors": "Forfattere",
|
"LabelAuthors": "Forfattere",
|
||||||
"LabelAutoDownloadEpisodes": "Auto Download Episoder",
|
"LabelAutoDownloadEpisodes": "Auto Download Episoder",
|
||||||
|
"LabelAutoFetchMetadata": "Automatisk Hent Metadata",
|
||||||
|
"LabelAutoFetchMetadataHelp": "Henter metadata for titler, forfatter og serier for at strømligne uploading. Ekstra metadata har måske brug for at blive matchet efter upload.",
|
||||||
|
"LabelAutoLaunch": "Åben Automatisk",
|
||||||
|
"LabelAutoLaunchDescription": "Viderestil automatisk til login-udbyderen ved navigation til login-siden (manuel overstyring via <code>/login?autoLaunch=0</code>)",
|
||||||
|
"LabelAutoRegister": "Registrer Automatisk",
|
||||||
|
"LabelAutoRegisterDescription": "Automatisk oprettelse af nye brugere efter login",
|
||||||
"LabelBackToUser": "Tilbage til Bruger",
|
"LabelBackToUser": "Tilbage til Bruger",
|
||||||
|
"LabelBackupAudioFiles": "Sikkerhedskopier lydfiler",
|
||||||
"LabelBackupLocation": "Backup Placering",
|
"LabelBackupLocation": "Backup Placering",
|
||||||
"LabelBackupsEnableAutomaticBackups": "Aktivér automatisk sikkerhedskopiering",
|
"LabelBackupsEnableAutomaticBackups": "Aktivér automatisk sikkerhedskopiering",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "Sikkerhedskopier gemt i /metadata/backups",
|
"LabelBackupsEnableAutomaticBackupsHelp": "Sikkerhedskopier gemt i /metadata/backups",
|
||||||
"LabelBackupsMaxBackupSize": "Maksimal sikkerhedskopistørrelse (i GB)",
|
"LabelBackupsMaxBackupSize": "Maksimal sikkerhedskopistørrelse (i GB) (0 for ubegrænset)",
|
||||||
"LabelBackupsMaxBackupSizeHelp": "Som en beskyttelse mod fejlkonfiguration fejler sikkerhedskopier, hvis de overstiger den konfigurerede størrelse.",
|
"LabelBackupsMaxBackupSizeHelp": "Som en beskyttelse mod fejlkonfiguration fejler sikkerhedskopier, hvis de overstiger den konfigurerede størrelse.",
|
||||||
"LabelBackupsNumberToKeep": "Antal sikkerhedskopier at beholde",
|
"LabelBackupsNumberToKeep": "Antal sikkerhedskopier at beholde",
|
||||||
"LabelBackupsNumberToKeepHelp": "Kun 1 sikkerhedskopi fjernes ad gangen, så hvis du allerede har flere sikkerhedskopier end dette, skal du fjerne dem manuelt.",
|
"LabelBackupsNumberToKeepHelp": "Kun 1 sikkerhedskopi fjernes ad gangen, så hvis du allerede har flere sikkerhedskopier end dette, skal du fjerne dem manuelt.",
|
||||||
|
"LabelBitrate": "Bitrate",
|
||||||
|
"LabelBonus": "Bonus",
|
||||||
"LabelBooks": "Bøger",
|
"LabelBooks": "Bøger",
|
||||||
|
"LabelButtonText": "Knap tekst",
|
||||||
|
"LabelByAuthor": "af {0}",
|
||||||
"LabelChangePassword": "Ændre Adgangskode",
|
"LabelChangePassword": "Ændre Adgangskode",
|
||||||
"LabelChannels": "Kanaler",
|
"LabelChannels": "Kanaler",
|
||||||
|
"LabelChapterCount": "{0} Kapitler",
|
||||||
"LabelChapterTitle": "Kapitel Titel",
|
"LabelChapterTitle": "Kapitel Titel",
|
||||||
"LabelChapters": "Kapitler",
|
"LabelChapters": "Kapitler",
|
||||||
"LabelChaptersFound": "fundne kapitler",
|
"LabelChaptersFound": "fundne kapitler",
|
||||||
|
"LabelClickForMoreInfo": "Klik for mere info",
|
||||||
|
"LabelClickToUseCurrentValue": "Klik for at bruge nuværende værdi",
|
||||||
"LabelClosePlayer": "Luk afspiller",
|
"LabelClosePlayer": "Luk afspiller",
|
||||||
|
"LabelCodec": "Kodeks",
|
||||||
"LabelCollapseSeries": "Fold Serier Sammen",
|
"LabelCollapseSeries": "Fold Serier Sammen",
|
||||||
|
"LabelCollapseSubSeries": "Fold underserie sammen",
|
||||||
"LabelCollection": "Samling",
|
"LabelCollection": "Samling",
|
||||||
"LabelCollections": "Samlinger",
|
"LabelCollections": "Samlinger",
|
||||||
"LabelComplete": "Fuldfør",
|
"LabelComplete": "Fuldfør",
|
||||||
@@ -212,58 +287,100 @@
|
|||||||
"LabelCurrently": "Aktuelt:",
|
"LabelCurrently": "Aktuelt:",
|
||||||
"LabelCustomCronExpression": "Brugerdefineret Cron Udtryk:",
|
"LabelCustomCronExpression": "Brugerdefineret Cron Udtryk:",
|
||||||
"LabelDatetime": "Dato og Tid",
|
"LabelDatetime": "Dato og Tid",
|
||||||
|
"LabelDays": "Dage",
|
||||||
|
"LabelDeleteFromFileSystemCheckbox": "Slet fra filsystem (afmarker kun for at fjerne fra databasen)",
|
||||||
"LabelDescription": "Beskrivelse",
|
"LabelDescription": "Beskrivelse",
|
||||||
"LabelDeselectAll": "Fravælg Alle",
|
"LabelDeselectAll": "Fravælg Alle",
|
||||||
"LabelDevice": "Enheds",
|
"LabelDevice": "Enheds",
|
||||||
"LabelDeviceInfo": "Enhedsinformation",
|
"LabelDeviceInfo": "Enhedsinformation",
|
||||||
|
"LabelDeviceIsAvailableTo": "Enhed er tilgængelig for...",
|
||||||
"LabelDirectory": "Mappe",
|
"LabelDirectory": "Mappe",
|
||||||
"LabelDiscFromFilename": "Disk fra Filnavn",
|
"LabelDiscFromFilename": "Disk fra Filnavn",
|
||||||
"LabelDiscFromMetadata": "Disk fra Metadata",
|
"LabelDiscFromMetadata": "Disk fra Metadata",
|
||||||
"LabelDiscover": "Opdag",
|
"LabelDiscover": "Opdag",
|
||||||
"LabelDownload": "Download",
|
"LabelDownload": "Download",
|
||||||
"LabelDownloadNEpisodes": "Download {0} episoder",
|
"LabelDownloadNEpisodes": "Download {0} episoder",
|
||||||
|
"LabelDownloadable": "Downloadbar",
|
||||||
"LabelDuration": "Varighed",
|
"LabelDuration": "Varighed",
|
||||||
|
"LabelDurationComparisonExactMatch": "(præcis match)",
|
||||||
|
"LabelDurationComparisonLonger": "({0} længere)",
|
||||||
|
"LabelDurationComparisonShorter": "({0} kortere)",
|
||||||
"LabelDurationFound": "Fundet varighed:",
|
"LabelDurationFound": "Fundet varighed:",
|
||||||
"LabelEbook": "E-bog",
|
"LabelEbook": "E-bog",
|
||||||
"LabelEbooks": "E-bøger",
|
"LabelEbooks": "E-bøger",
|
||||||
"LabelEdit": "Rediger",
|
"LabelEdit": "Rediger",
|
||||||
|
"LabelEmail": "E-mail",
|
||||||
"LabelEmailSettingsFromAddress": "Fra Adresse",
|
"LabelEmailSettingsFromAddress": "Fra Adresse",
|
||||||
|
"LabelEmailSettingsRejectUnauthorized": "Afvis uautoriserede certifikater",
|
||||||
|
"LabelEmailSettingsRejectUnauthorizedHelp": "Deaktivering af SSL certifikat validering kan udsætte din forbindelse for sikkerhedsrisici, eksempelvis man-in-the-middle angreb. Deaktiver kun denne indstilling hvis du forstår de potentielle implikationer og stoler på den mailserver du forbinder til.",
|
||||||
"LabelEmailSettingsSecure": "Sikker",
|
"LabelEmailSettingsSecure": "Sikker",
|
||||||
"LabelEmailSettingsSecureHelp": "Hvis sandt, vil forbindelsen bruge TLS ved tilslutning til serveren. Hvis falsk, bruges TLS, hvis serveren understøtter STARTTLS-udvidelsen. I de fleste tilfælde skal denne værdi sættes til sandt, hvis du tilslutter til port 465. Til port 587 eller 25 skal du holde det falsk. (fra nodemailer.com/smtp/#authentication)",
|
"LabelEmailSettingsSecureHelp": "Hvis sandt, vil forbindelsen bruge TLS ved tilslutning til serveren. Hvis falsk, bruges TLS, hvis serveren understøtter STARTTLS-udvidelsen. I de fleste tilfælde skal denne værdi sættes til sandt, hvis du tilslutter til port 465. Til port 587 eller 25 skal du holde det falsk. (fra nodemailer.com/smtp/#authentication)",
|
||||||
"LabelEmailSettingsTestAddress": "Test Adresse",
|
"LabelEmailSettingsTestAddress": "Test Adresse",
|
||||||
"LabelEmbeddedCover": "Indlejret Omslag",
|
"LabelEmbeddedCover": "Indlejret Omslag",
|
||||||
"LabelEnable": "Aktivér",
|
"LabelEnable": "Aktivér",
|
||||||
|
"LabelEncodingBackupLocation": "En sikkerhedskopi af dine originale lydfiler vil blive gemt under:",
|
||||||
|
"LabelEncodingChaptersNotEmbedded": "Kapitler er ikke indlejret i multi spors lydbøger.",
|
||||||
|
"LabelEncodingClearItemCache": "Sørg for periodisk at rense indholdscachen.",
|
||||||
|
"LabelEncodingFinishedM4B": "Færdiggjort M4B som vil blive placeret i din lydbogsmappe ved:",
|
||||||
|
"LabelEncodingInfoEmbedded": "Metadata vil blive indlejret i lydfiler i lydbogsmappen.",
|
||||||
|
"LabelEncodingStartedNavigation": "Når opgaven er startet kan du navigere væk fra denne side.",
|
||||||
|
"LabelEncodingTimeWarning": "Indkodning kan tage op til 30 minutter.",
|
||||||
|
"LabelEncodingWarningAdvancedSettings": "Advarsel: Opdater ikke disse indstillinger med mindre du kender til ffmpeg indkodningsindstillinger.",
|
||||||
|
"LabelEncodingWatcherDisabled": "Hvis du har watcheren deaktiveret skal du gen-scanne denne lydbog bagefter.",
|
||||||
"LabelEnd": "Slut",
|
"LabelEnd": "Slut",
|
||||||
"LabelEndOfChapter": "Slutningen af kapitel",
|
"LabelEndOfChapter": "Slutningen af kapitel",
|
||||||
"LabelEpisode": "Episode",
|
"LabelEpisode": "Afsnit",
|
||||||
|
"LabelEpisodeNotLinkedToRssFeed": "Afsnit er ikke koblet til RSS feed",
|
||||||
|
"LabelEpisodeNumber": "Afsnit #{0}",
|
||||||
"LabelEpisodeTitle": "Episodetitel",
|
"LabelEpisodeTitle": "Episodetitel",
|
||||||
"LabelEpisodeType": "Episodetype",
|
"LabelEpisodeType": "Episodetype",
|
||||||
|
"LabelEpisodeUrlFromRssFeed": "Afsnit URL fra RSS feed",
|
||||||
|
"LabelEpisodes": "Afsnit",
|
||||||
|
"LabelEpisodic": "Afsnit",
|
||||||
"LabelExample": "Eksempel",
|
"LabelExample": "Eksempel",
|
||||||
|
"LabelExpandSeries": "Udfold serie",
|
||||||
|
"LabelExpandSubSeries": "Udfold underserie",
|
||||||
"LabelExplicit": "Eksplisit",
|
"LabelExplicit": "Eksplisit",
|
||||||
|
"LabelExplicitChecked": "Eksplicit (markeret)",
|
||||||
|
"LabelExplicitUnchecked": "Ikke eksplicit (ikke markeret)",
|
||||||
|
"LabelExportOPML": "Eksport OPML",
|
||||||
"LabelFeedURL": "Feed URL",
|
"LabelFeedURL": "Feed URL",
|
||||||
|
"LabelFetchingMetadata": "Henter metadata",
|
||||||
"LabelFile": "Fil",
|
"LabelFile": "Fil",
|
||||||
"LabelFileBirthtime": "Oprettelsestidspunkt for fil",
|
"LabelFileBirthtime": "Oprettelsestidspunkt for fil",
|
||||||
|
"LabelFileBornDate": "Født {0}",
|
||||||
"LabelFileModified": "Fil ændret",
|
"LabelFileModified": "Fil ændret",
|
||||||
|
"LabelFileModifiedDate": "Opdateret {0}",
|
||||||
"LabelFilename": "Filnavn",
|
"LabelFilename": "Filnavn",
|
||||||
"LabelFilterByUser": "Filtrér efter bruger",
|
"LabelFilterByUser": "Filtrér efter bruger",
|
||||||
"LabelFindEpisodes": "Find episoder",
|
"LabelFindEpisodes": "Find episoder",
|
||||||
"LabelFinished": "Færdig",
|
"LabelFinished": "Færdig",
|
||||||
"LabelFolder": "Mappe",
|
"LabelFolder": "Mappe",
|
||||||
"LabelFolders": "Mapper",
|
"LabelFolders": "Mapper",
|
||||||
|
"LabelFontBold": "Fed",
|
||||||
"LabelFontBoldness": "Skrift tykkelse",
|
"LabelFontBoldness": "Skrift tykkelse",
|
||||||
"LabelFontFamily": "Fontfamilie",
|
"LabelFontFamily": "Fontfamilie",
|
||||||
|
"LabelFontItalic": "Kursiv",
|
||||||
"LabelFontScale": "Skriftstørrelse",
|
"LabelFontScale": "Skriftstørrelse",
|
||||||
|
"LabelFontStrikethrough": "Gennemstreget",
|
||||||
|
"LabelFormat": "Format",
|
||||||
|
"LabelFull": "Fuld",
|
||||||
"LabelGenre": "Genre",
|
"LabelGenre": "Genre",
|
||||||
"LabelGenres": "Genrer",
|
"LabelGenres": "Genrer",
|
||||||
"LabelHardDeleteFile": "Permanent slet fil",
|
"LabelHardDeleteFile": "Permanent slet fil",
|
||||||
"LabelHasEbook": "Har e-bog",
|
"LabelHasEbook": "Har e-bog",
|
||||||
"LabelHasSupplementaryEbook": "Har supplerende e-bog",
|
"LabelHasSupplementaryEbook": "Har supplerende e-bog",
|
||||||
|
"LabelHideSubtitles": "Skjul undertitler",
|
||||||
|
"LabelHighestPriority": "Højeste prioritet",
|
||||||
"LabelHost": "Vært",
|
"LabelHost": "Vært",
|
||||||
"LabelHour": "Time",
|
"LabelHour": "Time",
|
||||||
|
"LabelHours": "Timer",
|
||||||
"LabelIcon": "Ikon",
|
"LabelIcon": "Ikon",
|
||||||
|
"LabelImageURLFromTheWeb": "Billede URL fra nettet",
|
||||||
"LabelInProgress": "I gang",
|
"LabelInProgress": "I gang",
|
||||||
"LabelIncludeInTracklist": "Inkluder i afspilningsliste",
|
"LabelIncludeInTracklist": "Inkluder i afspilningsliste",
|
||||||
"LabelIncomplete": "Ufuldstændig",
|
"LabelIncomplete": "Ufuldstændig",
|
||||||
|
"LabelInterval": "Interval",
|
||||||
"LabelIntervalCustomDailyWeekly": "Tilpasset dagligt/ugentligt",
|
"LabelIntervalCustomDailyWeekly": "Tilpasset dagligt/ugentligt",
|
||||||
"LabelIntervalEvery12Hours": "Hver 12. time",
|
"LabelIntervalEvery12Hours": "Hver 12. time",
|
||||||
"LabelIntervalEvery15Minutes": "Hver 15. minut",
|
"LabelIntervalEvery15Minutes": "Hver 15. minut",
|
||||||
@@ -274,8 +391,11 @@
|
|||||||
"LabelIntervalEveryHour": "Hver time",
|
"LabelIntervalEveryHour": "Hver time",
|
||||||
"LabelInvert": "Inverter",
|
"LabelInvert": "Inverter",
|
||||||
"LabelItem": "Element",
|
"LabelItem": "Element",
|
||||||
|
"LabelJumpBackwardAmount": "Spring bagud mængde",
|
||||||
|
"LabelJumpForwardAmount": "Spring fremad mængde",
|
||||||
"LabelLanguage": "Sprog",
|
"LabelLanguage": "Sprog",
|
||||||
"LabelLanguageDefaultServer": "Standard server sprog",
|
"LabelLanguageDefaultServer": "Standard server sprog",
|
||||||
|
"LabelLanguages": "Sprog",
|
||||||
"LabelLastBookAdded": "Senest tilføjede bog",
|
"LabelLastBookAdded": "Senest tilføjede bog",
|
||||||
"LabelLastBookUpdated": "Senest opdaterede bog",
|
"LabelLastBookUpdated": "Senest opdaterede bog",
|
||||||
"LabelLastSeen": "Sidst set",
|
"LabelLastSeen": "Sidst set",
|
||||||
@@ -287,6 +407,7 @@
|
|||||||
"LabelLess": "Mindre",
|
"LabelLess": "Mindre",
|
||||||
"LabelLibrariesAccessibleToUser": "Biblioteker tilgængelige for bruger",
|
"LabelLibrariesAccessibleToUser": "Biblioteker tilgængelige for bruger",
|
||||||
"LabelLibrary": "Bibliotek",
|
"LabelLibrary": "Bibliotek",
|
||||||
|
"LabelLibraryFilterSublistEmpty": "Nej {0}",
|
||||||
"LabelLibraryItem": "Bibliotekselement",
|
"LabelLibraryItem": "Bibliotekselement",
|
||||||
"LabelLibraryName": "Biblioteksnavn",
|
"LabelLibraryName": "Biblioteksnavn",
|
||||||
"LabelLimit": "Grænse",
|
"LabelLimit": "Grænse",
|
||||||
@@ -296,13 +417,26 @@
|
|||||||
"LabelLogLevelInfo": "Information",
|
"LabelLogLevelInfo": "Information",
|
||||||
"LabelLogLevelWarn": "Advarsel",
|
"LabelLogLevelWarn": "Advarsel",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Søg efter nye episoder efter denne dato",
|
"LabelLookForNewEpisodesAfterDate": "Søg efter nye episoder efter denne dato",
|
||||||
|
"LabelLowestPriority": "Laveste prioritet",
|
||||||
|
"LabelMatchExistingUsersBy": "Match eksisterende brugere ved",
|
||||||
|
"LabelMatchExistingUsersByDescription": "Anvendt for at forbinde brugere. Når forbundet, brugere vil blive matchet ved unikt id fra din SSO udbyder",
|
||||||
|
"LabelMaxEpisodesToDownload": "Max # afsnit for at downloade. Anvend 0 for ubegrænset.",
|
||||||
|
"LabelMaxEpisodesToDownloadPerCheck": "Max # afsnit til at downloade per check",
|
||||||
|
"LabelMaxEpisodesToKeep": "Max # afsnit at beholde",
|
||||||
|
"LabelMaxEpisodesToKeepHelp": "Værdi af 0 sætter intet maks begrænsning. After et nyt afsnit er automatisk downloaded vil det ældste afsnit blive slettet hvis du har mere end X afsnit. Dette vil kun slette 1 afsnit for hvert nye download.",
|
||||||
"LabelMediaPlayer": "Medieafspiller",
|
"LabelMediaPlayer": "Medieafspiller",
|
||||||
"LabelMediaType": "Medietype",
|
"LabelMediaType": "Medietype",
|
||||||
"LabelMetaTag": "Meta-tag",
|
"LabelMetaTag": "Meta-tag",
|
||||||
"LabelMetaTags": "Meta-tags",
|
"LabelMetaTags": "Meta-tags",
|
||||||
|
"LabelMetadataOrderOfPrecedenceDescription": "Højeste prioritet metadata kilder vil overskrive de lavest prioriterede metadata kilder",
|
||||||
"LabelMetadataProvider": "Metadataudbyder",
|
"LabelMetadataProvider": "Metadataudbyder",
|
||||||
"LabelMinute": "Minut",
|
"LabelMinute": "Minut",
|
||||||
|
"LabelMinutes": "Minutter",
|
||||||
"LabelMissing": "Mangler",
|
"LabelMissing": "Mangler",
|
||||||
|
"LabelMissingEbook": "Har ingen ebog",
|
||||||
|
"LabelMissingSupplementaryEbook": "Har ingen tillægsbog",
|
||||||
|
"LabelMobileRedirectURIs": "Godkendte mobil redirect URI'er",
|
||||||
|
"LabelMobileRedirectURIsDescription": "Dete vil whiteliste en gyldig omdirigerings URL for mobile apps. Den standarde er <code>audiobookshelf://oauth</code> som du kan fjerne eller supplere med flere URI'er for tredjeparts app integration. Anvend en stjerne (<code>*</code>) som den eneste indstilling for at tilade en hvilkensomhelst URI.",
|
||||||
"LabelMore": "Mere",
|
"LabelMore": "Mere",
|
||||||
"LabelMoreInfo": "Mere info",
|
"LabelMoreInfo": "Mere info",
|
||||||
"LabelName": "Navn",
|
"LabelName": "Navn",
|
||||||
@@ -314,6 +448,7 @@
|
|||||||
"LabelNewestEpisodes": "Nyeste episoder",
|
"LabelNewestEpisodes": "Nyeste episoder",
|
||||||
"LabelNextBackupDate": "Næste sikkerhedskopi dato",
|
"LabelNextBackupDate": "Næste sikkerhedskopi dato",
|
||||||
"LabelNextScheduledRun": "Næste planlagte kørsel",
|
"LabelNextScheduledRun": "Næste planlagte kørsel",
|
||||||
|
"LabelNoCustomMetadataProviders": "Ingen brugerdefinerede metadata udbydere",
|
||||||
"LabelNoEpisodesSelected": "Ingen episoder valgt",
|
"LabelNoEpisodesSelected": "Ingen episoder valgt",
|
||||||
"LabelNotFinished": "Ikke færdig",
|
"LabelNotFinished": "Ikke færdig",
|
||||||
"LabelNotStarted": "Ikke påbegyndt",
|
"LabelNotStarted": "Ikke påbegyndt",
|
||||||
@@ -328,31 +463,47 @@
|
|||||||
"LabelNotificationsMaxQueueSize": "Maksimal køstørrelse for meddelelseshændelser",
|
"LabelNotificationsMaxQueueSize": "Maksimal køstørrelse for meddelelseshændelser",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Hændelser begrænses til at udløse en gang pr. sekund. Hændelser ignoreres, hvis køen er fyldt. Dette forhindrer meddelelsesspam.",
|
"LabelNotificationsMaxQueueSizeHelp": "Hændelser begrænses til at udløse en gang pr. sekund. Hændelser ignoreres, hvis køen er fyldt. Dette forhindrer meddelelsesspam.",
|
||||||
"LabelNumberOfBooks": "Antal bøger",
|
"LabelNumberOfBooks": "Antal bøger",
|
||||||
"LabelNumberOfEpisodes": "Antal episoder",
|
"LabelNumberOfEpisodes": "# afsnit",
|
||||||
|
"LabelOpenIDAdvancedPermsClaimDescription": "Navnet af OpenID claimet som indeholder avancerede brugerhandlinger inden i applikationen som vil gælde for ikke administrative roller (<b>hvis konfigureret</b>). Hvis et claim mangler fra svaret vil adgang til ABS blive nægtet. Hvis en enkelt indstilling/option mangler, vil det bliver behandlet som <code>false</code>. Sørg for at identity provider's claim matcher den forventede struktur:",
|
||||||
|
"LabelOpenIDClaims": "Efterlad de følgende indstillinger tomme for at deaktivere avancerede grupper og adgangsstyring for automatisk at tilføje dem til 'User' gruppen.",
|
||||||
|
"LabelOpenIDGroupClaimDescription": "Navnet af det OpenID claim som skal indeholde brugerens grupper. Mest kendt som <code>groups</code>. <b>hvis konfigureret</b>, vil applikationen automatiske tildele roller baseret p[ brugerens gruppemedlemsskaber, givet disse grupper er navngivet (uden forbehold for store og små bogstaver) 'admin', 'user' eller 'guest' i claimet. Claimet burde indeholde en liste (og hvis brugeren tilhøre flere grupper) som applikationen vil tildele roller med højeste adgangsnvieau. Hvis ingen grupper matcher vil adgang blive nægtet.",
|
||||||
"LabelOpenRSSFeed": "Åbn RSS-feed",
|
"LabelOpenRSSFeed": "Åbn RSS-feed",
|
||||||
"LabelOverwrite": "Overskriv",
|
"LabelOverwrite": "Overskriv",
|
||||||
|
"LabelPaginationPageXOfY": "Side {0} af {1}",
|
||||||
"LabelPassword": "Kodeord",
|
"LabelPassword": "Kodeord",
|
||||||
"LabelPath": "Sti",
|
"LabelPath": "Sti",
|
||||||
|
"LabelPermanent": "Permanent",
|
||||||
"LabelPermissionsAccessAllLibraries": "Kan få adgang til alle biblioteker",
|
"LabelPermissionsAccessAllLibraries": "Kan få adgang til alle biblioteker",
|
||||||
"LabelPermissionsAccessAllTags": "Kan få adgang til alle tags",
|
"LabelPermissionsAccessAllTags": "Kan få adgang til alle tags",
|
||||||
"LabelPermissionsAccessExplicitContent": "Kan få adgang til eksplicit indhold",
|
"LabelPermissionsAccessExplicitContent": "Kan få adgang til eksplicit indhold",
|
||||||
|
"LabelPermissionsCreateEreader": "Kan oprette elæser",
|
||||||
"LabelPermissionsDelete": "Kan slette",
|
"LabelPermissionsDelete": "Kan slette",
|
||||||
"LabelPermissionsDownload": "Kan downloade",
|
"LabelPermissionsDownload": "Kan downloade",
|
||||||
"LabelPermissionsUpdate": "Kan opdatere",
|
"LabelPermissionsUpdate": "Kan opdatere",
|
||||||
"LabelPermissionsUpload": "Kan uploade",
|
"LabelPermissionsUpload": "Kan uploade",
|
||||||
|
"LabelPersonalYearReview": "Dit år i review ({0})",
|
||||||
"LabelPhotoPathURL": "Foto sti/URL",
|
"LabelPhotoPathURL": "Foto sti/URL",
|
||||||
"LabelPlayMethod": "Afspilningsmetode",
|
"LabelPlayMethod": "Afspilningsmetode",
|
||||||
|
"LabelPlayerChapterNumberMarker": "{0} af {1}",
|
||||||
"LabelPlaylists": "Afspilningslister",
|
"LabelPlaylists": "Afspilningslister",
|
||||||
|
"LabelPodcast": "Podcast",
|
||||||
"LabelPodcastSearchRegion": "Podcast søgeområde",
|
"LabelPodcastSearchRegion": "Podcast søgeområde",
|
||||||
"LabelPodcastType": "Podcast type",
|
"LabelPodcastType": "Podcast type",
|
||||||
|
"LabelPodcasts": "Podcast",
|
||||||
|
"LabelPort": "Port",
|
||||||
"LabelPrefixesToIgnore": "Præfikser der skal ignoreres (skal ikke skelne mellem store og små bogstaver)",
|
"LabelPrefixesToIgnore": "Præfikser der skal ignoreres (skal ikke skelne mellem store og små bogstaver)",
|
||||||
"LabelPreventIndexing": "Forhindrer, at dit feed bliver indekseret af iTunes og Google podcastkataloger",
|
"LabelPreventIndexing": "Forhindrer, at dit feed bliver indekseret af iTunes og Google podcastkataloger",
|
||||||
"LabelPrimaryEbook": "Primær e-bog",
|
"LabelPrimaryEbook": "Primær e-bog",
|
||||||
"LabelProgress": "Fremskridt",
|
"LabelProgress": "Fremskridt",
|
||||||
"LabelProvider": "Udbyder",
|
"LabelProvider": "Udbyder",
|
||||||
|
"LabelProviderAuthorizationValue": "Authorization Header værdi",
|
||||||
"LabelPubDate": "Udgivelsesdato",
|
"LabelPubDate": "Udgivelsesdato",
|
||||||
"LabelPublishYear": "Udgivelsesår",
|
"LabelPublishYear": "Udgivelsesår",
|
||||||
|
"LabelPublishedDate": "Publiceret {0}",
|
||||||
|
"LabelPublishedDecade": "Publiceret årti",
|
||||||
|
"LabelPublishedDecades": "Publiceret årtier",
|
||||||
"LabelPublisher": "Forlag",
|
"LabelPublisher": "Forlag",
|
||||||
|
"LabelPublishers": "Forlag",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Brugerdefineret ejerens e-mail",
|
"LabelRSSFeedCustomOwnerEmail": "Brugerdefineret ejerens e-mail",
|
||||||
"LabelRSSFeedCustomOwnerName": "Brugerdefineret ejerens navn",
|
"LabelRSSFeedCustomOwnerName": "Brugerdefineret ejerens navn",
|
||||||
"LabelRSSFeedOpen": "Åben RSS-feed",
|
"LabelRSSFeedOpen": "Åben RSS-feed",
|
||||||
@@ -360,27 +511,42 @@
|
|||||||
"LabelRSSFeedSlug": "RSS-feed-slug",
|
"LabelRSSFeedSlug": "RSS-feed-slug",
|
||||||
"LabelRSSFeedURL": "RSS-feed-URL",
|
"LabelRSSFeedURL": "RSS-feed-URL",
|
||||||
"LabelRandomly": "Tilfældigt",
|
"LabelRandomly": "Tilfældigt",
|
||||||
|
"LabelReAddSeriesToContinueListening": "Gentilføj serier til Fortsæt Lytning",
|
||||||
"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 serier",
|
"LabelRecentSeries": "Seneste serier",
|
||||||
"LabelRecentlyAdded": "Senest tilføjet",
|
"LabelRecentlyAdded": "Senest tilføjet",
|
||||||
"LabelRecommended": "Anbefalet",
|
"LabelRecommended": "Anbefalet",
|
||||||
|
"LabelRedo": "Gøre igen",
|
||||||
|
"LabelRegion": "Region",
|
||||||
"LabelReleaseDate": "Udgivelsesdato",
|
"LabelReleaseDate": "Udgivelsesdato",
|
||||||
|
"LabelRemoveAllMetadataAbs": "Fjern alle metadata.abs filer",
|
||||||
|
"LabelRemoveAllMetadataJson": "Fjern alle metadata.json filer",
|
||||||
"LabelRemoveCover": "Fjern omslag",
|
"LabelRemoveCover": "Fjern omslag",
|
||||||
|
"LabelRemoveMetadataFile": "Fjern alle metadata filer i biblioteksmapper",
|
||||||
|
"LabelRemoveMetadataFileHelp": "Fjern alle metadata.json og metadata.abs filer i dine {0} mapper.",
|
||||||
|
"LabelRowsPerPage": "Rækker per side",
|
||||||
"LabelSearchTerm": "Søgeterm",
|
"LabelSearchTerm": "Søgeterm",
|
||||||
"LabelSearchTitle": "Søg efter titel",
|
"LabelSearchTitle": "Søg efter titel",
|
||||||
"LabelSearchTitleOrASIN": "Søg efter titel eller ASIN",
|
"LabelSearchTitleOrASIN": "Søg efter titel eller ASIN",
|
||||||
"LabelSeason": "Sæson",
|
"LabelSeason": "Sæson",
|
||||||
|
"LabelSeasonNumber": "Sæson {0}",
|
||||||
|
"LabelSelectAll": "Vælg alle",
|
||||||
"LabelSelectAllEpisodes": "Vælg alle episoder",
|
"LabelSelectAllEpisodes": "Vælg alle episoder",
|
||||||
"LabelSelectEpisodesShowing": "Vælg {0} episoder vist",
|
"LabelSelectEpisodesShowing": "Vælg {0} episoder vist",
|
||||||
|
"LabelSelectUsers": "Valgte brugere",
|
||||||
"LabelSendEbookToDevice": "Send e-bog til...",
|
"LabelSendEbookToDevice": "Send e-bog til...",
|
||||||
"LabelSequence": "Sekvens",
|
"LabelSequence": "Sekvens",
|
||||||
|
"LabelSerial": "Seriel",
|
||||||
"LabelSeries": "Serie",
|
"LabelSeries": "Serie",
|
||||||
"LabelSeriesName": "Serienavn",
|
"LabelSeriesName": "Serienavn",
|
||||||
"LabelSeriesProgress": "Seriefremskridt",
|
"LabelSeriesProgress": "Seriefremskridt",
|
||||||
|
"LabelServerLogLevel": "Server log niveau",
|
||||||
|
"LabelServerYearReview": "Server år i review ({0})",
|
||||||
"LabelSetEbookAsPrimary": "Indstil som primær",
|
"LabelSetEbookAsPrimary": "Indstil som primær",
|
||||||
"LabelSetEbookAsSupplementary": "Indstil som supplerende",
|
"LabelSetEbookAsSupplementary": "Indstil som supplerende",
|
||||||
|
"LabelSettingsAllowIframe": "Tillad embedding i en iframe",
|
||||||
"LabelSettingsAudiobooksOnly": "Kun lydbøger",
|
"LabelSettingsAudiobooksOnly": "Kun lydbøger",
|
||||||
"LabelSettingsAudiobooksOnlyHelp": "Aktivering af denne indstilling vil ignorere e-bogsfiler, medmindre de er inde i en lydbogmappe, hvor de vil blive indstillet som supplerende e-bøger",
|
"LabelSettingsAudiobooksOnlyHelp": "Aktivering af denne indstilling vil ignorere e-bogsfiler, medmindre de er inde i en lydbogmappe, hvor de vil blive indstillet som supplerende e-bøger",
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeumorfisk design med træhylder",
|
"LabelSettingsBookshelfViewHelp": "Skeumorfisk design med træhylder",
|
||||||
@@ -392,6 +558,8 @@
|
|||||||
"LabelSettingsEnableWatcher": "Aktiver overvågning",
|
"LabelSettingsEnableWatcher": "Aktiver overvågning",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Aktiver mappeovervågning for bibliotek",
|
"LabelSettingsEnableWatcherForLibrary": "Aktiver mappeovervågning for bibliotek",
|
||||||
"LabelSettingsEnableWatcherHelp": "Aktiverer automatisk tilføjelse/opdatering af elementer, når filændringer registreres. *Kræver servergenstart",
|
"LabelSettingsEnableWatcherHelp": "Aktiverer automatisk tilføjelse/opdatering af elementer, når filændringer registreres. *Kræver servergenstart",
|
||||||
|
"LabelSettingsEpubsAllowScriptedContent": "Tillad scriptet indhold i epub",
|
||||||
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Tillad epub filer at køre scripts. Det anbefales at holde denne indstilling deaktiveret med mindre du stoler på kilderne af epub filerne.",
|
||||||
"LabelSettingsExperimentalFeatures": "Eksperimentelle funktioner",
|
"LabelSettingsExperimentalFeatures": "Eksperimentelle funktioner",
|
||||||
"LabelSettingsExperimentalFeaturesHelp": "Funktioner under udvikling, der kunne bruge din feedback og hjælp til test. Klik for at åbne Github-diskussionen.",
|
"LabelSettingsExperimentalFeaturesHelp": "Funktioner under udvikling, der kunne bruge din feedback og hjælp til test. Klik for at åbne Github-diskussionen.",
|
||||||
"LabelSettingsFindCovers": "Find omslag",
|
"LabelSettingsFindCovers": "Find omslag",
|
||||||
@@ -400,6 +568,11 @@
|
|||||||
"LabelSettingsHideSingleBookSeriesHelp": "Serier med en enkelt bog vil blive skjult fra serie-siden og hjemmesidehylder.",
|
"LabelSettingsHideSingleBookSeriesHelp": "Serier med en enkelt bog vil blive skjult fra serie-siden og hjemmesidehylder.",
|
||||||
"LabelSettingsHomePageBookshelfView": "Brug bogreolvisning på startside",
|
"LabelSettingsHomePageBookshelfView": "Brug bogreolvisning på startside",
|
||||||
"LabelSettingsLibraryBookshelfView": "Brug bogreolvisning i biblioteket",
|
"LabelSettingsLibraryBookshelfView": "Brug bogreolvisning i biblioteket",
|
||||||
|
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "Procent gennemført er større end",
|
||||||
|
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Tid tilbage er mindre end (sekunder)",
|
||||||
|
"LabelSettingsLibraryMarkAsFinishedWhen": "Marker medie indhold som færdigt når",
|
||||||
|
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Spring til tidligere bøger i Fortsæt serie",
|
||||||
|
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Fortsæt Serien siden hylde viser de første bøger som ikke er startet i serier med mindst en bog som ikke er startet og ingen bøger i gang. Aktivering af denne indstilling vil fortsætte serien fra den sidst gennemførte bog modsat den først ikke startede bog.",
|
||||||
"LabelSettingsParseSubtitles": "Fortolk undertekster",
|
"LabelSettingsParseSubtitles": "Fortolk undertekster",
|
||||||
"LabelSettingsParseSubtitlesHelp": "Udtræk undertekster fra lydbogsmappenavne.<br>Undertitler skal adskilles af \" - \"<br>f.eks. \"Bogtitel - En undertitel her\" har undertitlen \"En undertitel her\"",
|
"LabelSettingsParseSubtitlesHelp": "Udtræk undertekster fra lydbogsmappenavne.<br>Undertitler skal adskilles af \" - \"<br>f.eks. \"Bogtitel - En undertitel her\" har undertitlen \"En undertitel her\"",
|
||||||
"LabelSettingsPreferMatchedMetadata": "Foretræk matchede metadata",
|
"LabelSettingsPreferMatchedMetadata": "Foretræk matchede metadata",
|
||||||
@@ -415,9 +588,19 @@
|
|||||||
"LabelSettingsStoreMetadataWithItem": "Gem metadata med element",
|
"LabelSettingsStoreMetadataWithItem": "Gem metadata med element",
|
||||||
"LabelSettingsStoreMetadataWithItemHelp": "Som standard gemmes metadatafiler i /metadata/items, aktivering af denne indstilling vil gemme metadatafiler i dine bibliotekselementmapper",
|
"LabelSettingsStoreMetadataWithItemHelp": "Som standard gemmes metadatafiler i /metadata/items, aktivering af denne indstilling vil gemme metadatafiler i dine bibliotekselementmapper",
|
||||||
"LabelSettingsTimeFormat": "Tidsformat",
|
"LabelSettingsTimeFormat": "Tidsformat",
|
||||||
|
"LabelShare": "Del",
|
||||||
|
"LabelShareDownloadableHelp": "Tillad brugere at dele link til at downloade en zip fil af dette biblioteksindhold.",
|
||||||
|
"LabelShareOpen": "Del åben",
|
||||||
|
"LabelShareURL": "Del URL",
|
||||||
"LabelShowAll": "Vis alle",
|
"LabelShowAll": "Vis alle",
|
||||||
|
"LabelShowSeconds": "Vis sekunder",
|
||||||
|
"LabelShowSubtitles": "Vis undertitler",
|
||||||
"LabelSize": "Størrelse",
|
"LabelSize": "Størrelse",
|
||||||
"LabelSleepTimer": "Søvntimer",
|
"LabelSleepTimer": "Søvntimer",
|
||||||
|
"LabelSlug": "Snegl",
|
||||||
|
"LabelSortAscending": "Stigende",
|
||||||
|
"LabelSortDescending": "Faldende",
|
||||||
|
"LabelStart": "Start",
|
||||||
"LabelStartTime": "Starttid",
|
"LabelStartTime": "Starttid",
|
||||||
"LabelStarted": "Startet",
|
"LabelStarted": "Startet",
|
||||||
"LabelStartedAt": "Startet klokken",
|
"LabelStartedAt": "Startet klokken",
|
||||||
@@ -443,10 +626,19 @@
|
|||||||
"LabelTagsAccessibleToUser": "Mærker tilgængelige for bruger",
|
"LabelTagsAccessibleToUser": "Mærker tilgængelige for bruger",
|
||||||
"LabelTagsNotAccessibleToUser": "Mærker ikke tilgængelige for bruger",
|
"LabelTagsNotAccessibleToUser": "Mærker ikke tilgængelige for bruger",
|
||||||
"LabelTasks": "Kører opgaver",
|
"LabelTasks": "Kører opgaver",
|
||||||
|
"LabelTextEditorBulletedList": "Punktopstilling",
|
||||||
|
"LabelTextEditorLink": "Link",
|
||||||
|
"LabelTextEditorNumberedList": "Nummeropstilling",
|
||||||
|
"LabelTextEditorUnlink": "Aflink",
|
||||||
"LabelTheme": "Tema",
|
"LabelTheme": "Tema",
|
||||||
"LabelThemeDark": "Mørk",
|
"LabelThemeDark": "Mørk",
|
||||||
"LabelThemeLight": "Lys",
|
"LabelThemeLight": "Lys",
|
||||||
"LabelTimeBase": "Tidsbase",
|
"LabelTimeBase": "Tidsbase",
|
||||||
|
"LabelTimeDurationXHours": "{0} timer",
|
||||||
|
"LabelTimeDurationXMinutes": "{0} minutter",
|
||||||
|
"LabelTimeDurationXSeconds": "{0} sekunder",
|
||||||
|
"LabelTimeInMinutes": "Tid i minutter",
|
||||||
|
"LabelTimeLeft": "{0} tilbage",
|
||||||
"LabelTimeListened": "Tid hørt",
|
"LabelTimeListened": "Tid hørt",
|
||||||
"LabelTimeListenedToday": "Tid hørt i dag",
|
"LabelTimeListenedToday": "Tid hørt i dag",
|
||||||
"LabelTimeRemaining": "{0} tilbage",
|
"LabelTimeRemaining": "{0} tilbage",
|
||||||
@@ -454,6 +646,7 @@
|
|||||||
"LabelTitle": "Titel",
|
"LabelTitle": "Titel",
|
||||||
"LabelToolsEmbedMetadata": "Indlejre metadata",
|
"LabelToolsEmbedMetadata": "Indlejre metadata",
|
||||||
"LabelToolsEmbedMetadataDescription": "Indlejr metadata i lydfiler, inklusive omslag og kapitler.",
|
"LabelToolsEmbedMetadataDescription": "Indlejr metadata i lydfiler, inklusive omslag og kapitler.",
|
||||||
|
"LabelToolsM4bEncoder": "M4B indkoder",
|
||||||
"LabelToolsMakeM4b": "Lav M4B lydbogsfil",
|
"LabelToolsMakeM4b": "Lav M4B lydbogsfil",
|
||||||
"LabelToolsMakeM4bDescription": "Generer en .M4B lydbogsfil med indlejret metadata, omslag og kapitler.",
|
"LabelToolsMakeM4bDescription": "Generer en .M4B lydbogsfil med indlejret metadata, omslag og kapitler.",
|
||||||
"LabelToolsSplitM4b": "Opdel M4B til MP3'er",
|
"LabelToolsSplitM4b": "Opdel M4B til MP3'er",
|
||||||
@@ -466,25 +659,41 @@
|
|||||||
"LabelTracksMultiTrack": "Flerspors",
|
"LabelTracksMultiTrack": "Flerspors",
|
||||||
"LabelTracksNone": "Ingen spor",
|
"LabelTracksNone": "Ingen spor",
|
||||||
"LabelTracksSingleTrack": "Enkeltspors",
|
"LabelTracksSingleTrack": "Enkeltspors",
|
||||||
|
"LabelTrailer": "Trailer",
|
||||||
|
"LabelType": "Type",
|
||||||
"LabelUnabridged": "Uforkortet",
|
"LabelUnabridged": "Uforkortet",
|
||||||
|
"LabelUndo": "Undo",
|
||||||
"LabelUnknown": "Ukendt",
|
"LabelUnknown": "Ukendt",
|
||||||
|
"LabelUnknownPublishDate": "Ukendt publiceringsdato",
|
||||||
"LabelUpdateCover": "Opdater omslag",
|
"LabelUpdateCover": "Opdater omslag",
|
||||||
"LabelUpdateCoverHelp": "Tillad overskrivning af eksisterende omslag for de valgte bøger, når der findes en match",
|
"LabelUpdateCoverHelp": "Tillad overskrivning af eksisterende omslag for de valgte bøger, når der findes en match",
|
||||||
"LabelUpdateDetails": "Opdater detaljer",
|
"LabelUpdateDetails": "Opdater detaljer",
|
||||||
"LabelUpdateDetailsHelp": "Tillad overskrivning af eksisterende detaljer for de valgte bøger, når der findes en match",
|
"LabelUpdateDetailsHelp": "Tillad overskrivning af eksisterende detaljer for de valgte bøger, når der findes en match",
|
||||||
"LabelUpdatedAt": "Opdateret ved",
|
"LabelUpdatedAt": "Opdateret ved",
|
||||||
"LabelUploaderDragAndDrop": "Træk og slip filer eller mapper",
|
"LabelUploaderDragAndDrop": "Træk og slip filer eller mapper",
|
||||||
|
"LabelUploaderDragAndDropFilesOnly": "Træk og slip filer",
|
||||||
"LabelUploaderDropFiles": "Smid filer",
|
"LabelUploaderDropFiles": "Smid filer",
|
||||||
|
"LabelUploaderItemFetchMetadataHelp": "Automatisk hent titel, forfatter og serie",
|
||||||
|
"LabelUseAdvancedOptions": "Anvend avancerede indstillinger",
|
||||||
"LabelUseChapterTrack": "Brug kapitel-spor",
|
"LabelUseChapterTrack": "Brug kapitel-spor",
|
||||||
"LabelUseFullTrack": "Brug fuldt spor",
|
"LabelUseFullTrack": "Brug fuldt spor",
|
||||||
|
"LabelUseZeroForUnlimited": "Anvend 0 for ubegrænset",
|
||||||
"LabelUser": "Bruger",
|
"LabelUser": "Bruger",
|
||||||
"LabelUsername": "Brugernavn",
|
"LabelUsername": "Brugernavn",
|
||||||
"LabelValue": "Værdi",
|
"LabelValue": "Værdi",
|
||||||
|
"LabelVersion": "Version",
|
||||||
"LabelViewBookmarks": "Se bogmærker",
|
"LabelViewBookmarks": "Se bogmærker",
|
||||||
"LabelViewChapters": "Se kapitler",
|
"LabelViewChapters": "Se kapitler",
|
||||||
|
"LabelViewPlayerSettings": "Vis afspiller indstillinger",
|
||||||
"LabelViewQueue": "Se afspilningskø",
|
"LabelViewQueue": "Se afspilningskø",
|
||||||
"LabelVolume": "Volumen",
|
"LabelVolume": "Volumen",
|
||||||
|
"LabelWebRedirectURLsDescription": "Godkend disse URL'er i din OAuth udgiver for at tillade omdirigering tilbage til hjemmesiden efter login:",
|
||||||
|
"LabelWebRedirectURLsSubfolder": "Undermapper for omdirigerings URL'er",
|
||||||
"LabelWeekdaysToRun": "Ugedage til kørsel",
|
"LabelWeekdaysToRun": "Ugedage til kørsel",
|
||||||
|
"LabelXBooks": "{0} bøger",
|
||||||
|
"LabelXItems": "{0} genstande",
|
||||||
|
"LabelYearReviewHide": "Skjul år i review",
|
||||||
|
"LabelYearReviewShow": "Vis år i review",
|
||||||
"LabelYourAudiobookDuration": "Din lydbogsvarighed",
|
"LabelYourAudiobookDuration": "Din lydbogsvarighed",
|
||||||
"LabelYourBookmarks": "Dine bogmærker",
|
"LabelYourBookmarks": "Dine bogmærker",
|
||||||
"LabelYourPlaylists": "Dine spillelister",
|
"LabelYourPlaylists": "Dine spillelister",
|
||||||
@@ -492,10 +701,14 @@
|
|||||||
"MessageAddToPlayerQueue": "Tilføj til afspilningskø",
|
"MessageAddToPlayerQueue": "Tilføj til afspilningskø",
|
||||||
"MessageAppriseDescription": "For at bruge denne funktion skal du have en instans af <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kørende eller en API, der håndterer de samme anmodninger. <br /> Apprise API-webadressen skal være den fulde URL-sti for at sende underretningen, f.eks. hvis din API-instans er tilgængelig på <code>http://192.168.1.1:8337</code>, så skal du bruge <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "For at bruge denne funktion skal du have en instans af <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kørende eller en API, der håndterer de samme anmodninger. <br /> Apprise API-webadressen skal være den fulde URL-sti for at sende underretningen, f.eks. hvis din API-instans er tilgængelig på <code>http://192.168.1.1:8337</code>, så skal du bruge <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageBackupsDescription": "Backups inkluderer brugere, brugerfremskridt, biblioteksvareoplysninger, serverindstillinger og billeder gemt i <code>/metadata/items</code> og <code>/metadata/authors</code>. Backups inkluderer <strong>ikke</strong> nogen filer gemt i dine biblioteksmapper.",
|
"MessageBackupsDescription": "Backups inkluderer brugere, brugerfremskridt, biblioteksvareoplysninger, serverindstillinger og billeder gemt i <code>/metadata/items</code> og <code>/metadata/authors</code>. Backups inkluderer <strong>ikke</strong> nogen filer gemt i dine biblioteksmapper.",
|
||||||
|
"MessageBackupsLocationEditNote": "Note: Opdatering af backup sti vil ikke fjerne eller modificere eksisterende backups",
|
||||||
|
"MessageBackupsLocationNoEditNote": "Note: Backup sti er sat igennem miljøvariabel og kan ikke ændres her.",
|
||||||
|
"MessageBackupsLocationPathEmpty": "Backup sti kan ikke være tom",
|
||||||
"MessageBatchQuickMatchDescription": "Quick Match vil forsøge at tilføje manglende omslag og metadata til de valgte elementer. Aktivér indstillingerne nedenfor for at tillade Quick Match at overskrive eksisterende omslag og/eller metadata.",
|
"MessageBatchQuickMatchDescription": "Quick Match vil forsøge at tilføje manglende omslag og metadata til de valgte elementer. Aktivér indstillingerne nedenfor for at tillade Quick Match at overskrive eksisterende omslag og/eller metadata.",
|
||||||
"MessageBookshelfNoCollections": "Du har ikke oprettet nogen samlinger endnu",
|
"MessageBookshelfNoCollections": "Du har ikke oprettet nogen samlinger endnu",
|
||||||
"MessageBookshelfNoRSSFeeds": "Ingen RSS-feeds er åbne",
|
"MessageBookshelfNoRSSFeeds": "Ingen RSS-feeds er åbne",
|
||||||
"MessageBookshelfNoResultsForFilter": "Ingen resultater for filter \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Ingen resultater for filter \"{0}: {1}\"",
|
||||||
|
"MessageBookshelfNoResultsForQuery": "Intet resultat for query",
|
||||||
"MessageBookshelfNoSeries": "Du har ingen serier",
|
"MessageBookshelfNoSeries": "Du har ingen serier",
|
||||||
"MessageChapterEndIsAfter": "Kapitelslutningen er efter slutningen af din lydbog",
|
"MessageChapterEndIsAfter": "Kapitelslutningen er efter slutningen af din lydbog",
|
||||||
"MessageChapterErrorFirstNotZero": "Første kapitel skal starte ved 0",
|
"MessageChapterErrorFirstNotZero": "Første kapitel skal starte ved 0",
|
||||||
@@ -505,19 +718,35 @@
|
|||||||
"MessageCheckingCron": "Tjekker cron...",
|
"MessageCheckingCron": "Tjekker cron...",
|
||||||
"MessageConfirmCloseFeed": "Er du sikker på, at du vil lukke dette feed?",
|
"MessageConfirmCloseFeed": "Er du sikker på, at du vil lukke dette feed?",
|
||||||
"MessageConfirmDeleteBackup": "Er du sikker på, at du vil slette backup for {0}?",
|
"MessageConfirmDeleteBackup": "Er du sikker på, at du vil slette backup for {0}?",
|
||||||
|
"MessageConfirmDeleteDevice": "Er du sikker på at du vil fjerne elæser enhed \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Dette vil slette filen fra dit filsystem. Er du sikker?",
|
"MessageConfirmDeleteFile": "Dette vil slette filen fra dit filsystem. Er du sikker?",
|
||||||
"MessageConfirmDeleteLibrary": "Er du sikker på, at du vil slette biblioteket permanent \"{0}\"?",
|
"MessageConfirmDeleteLibrary": "Er du sikker på, at du vil slette biblioteket permanent \"{0}\"?",
|
||||||
|
"MessageConfirmDeleteLibraryItem": "Dette vil slette biblioteksgenstanden fra databasen og dit filsystem. Er du sikker?",
|
||||||
|
"MessageConfirmDeleteLibraryItems": "Dette vil slette {0} biblioteksgenstande fra din database og filsystem. Er du sikker?",
|
||||||
|
"MessageConfirmDeleteMetadataProvider": "Er du sikker på at du vil fjerne brugerdefineret metadata udgiver \"{0}\"?",
|
||||||
|
"MessageConfirmDeleteNotification": "Er du sikker på at du vil fjerne denne notifikation?",
|
||||||
"MessageConfirmDeleteSession": "Er du sikker på, at du vil slette denne session?",
|
"MessageConfirmDeleteSession": "Er du sikker på, at du vil slette denne session?",
|
||||||
|
"MessageConfirmEmbedMetadataInAudioFiles": "Er du sikker på at du vil indlejre metadata i {0} lydbogsfiler?",
|
||||||
"MessageConfirmForceReScan": "Er du sikker på, at du vil tvinge en genindlæsning?",
|
"MessageConfirmForceReScan": "Er du sikker på, at du vil tvinge en genindlæsning?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Er du sikker på, at du vil markere alle episoder som afsluttet?",
|
"MessageConfirmMarkAllEpisodesFinished": "Er du sikker på, at du vil markere alle episoder som afsluttet?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "Er du sikker på, at du vil markere alle episoder som ikke afsluttet?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "Er du sikker på, at du vil markere alle episoder som ikke afsluttet?",
|
||||||
|
"MessageConfirmMarkItemFinished": "Er du sikker på at du vil markere \"{0}\" som færdig?",
|
||||||
|
"MessageConfirmMarkItemNotFinished": "Er du sikker på at du vil markere \"{0}\" som ikke færdige?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Er du sikker på, at du vil markere alle bøger i denne serie som afsluttet?",
|
"MessageConfirmMarkSeriesFinished": "Er du sikker på, at du vil markere alle bøger i denne serie som afsluttet?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Er du sikker på, at du vil markere alle bøger i denne serie som ikke afsluttet?",
|
"MessageConfirmMarkSeriesNotFinished": "Er du sikker på, at du vil markere alle bøger i denne serie som ikke afsluttet?",
|
||||||
|
"MessageConfirmNotificationTestTrigger": "Trigger denne notifikation med testdata?",
|
||||||
|
"MessageConfirmPurgeCache": "Rensning af cache vil slette hele mappen ved <code>/metadata/cache</code>.<br /><br />Er dy sikker på at du vil fjerne cache mappen?",
|
||||||
|
"MessageConfirmPurgeItemsCache": "Rensning af cache vil slette hele mappen ved <code>/metadata/cache/items</code>.<br />Er du sikker?",
|
||||||
|
"MessageConfirmQuickEmbed": "Advarsel! Hurtigindlejring vil ikke backe dine lydfiler op. S'rg for at du har en backup af dine lydfiler. <br /><br />Vil du fortsætte?",
|
||||||
|
"MessageConfirmQuickMatchEpisodes": "Hurtig match af afsnit vil overskrive detaljer givet et match kan findes. Kun ikke-matchede vil blive opdateret. Er du sikker?",
|
||||||
|
"MessageConfirmReScanLibraryItems": "Er du sikker på at du vil genscanne {0} genstande?",
|
||||||
"MessageConfirmRemoveAllChapters": "Er du sikker på, at du vil fjerne alle kapitler?",
|
"MessageConfirmRemoveAllChapters": "Er du sikker på, at du vil fjerne alle kapitler?",
|
||||||
"MessageConfirmRemoveAuthor": "Er du sikker på, at du vil fjerne forfatteren \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Er du sikker på, at du vil fjerne forfatteren \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Er du sikker på, at du vil fjerne samlingen \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Er du sikker på, at du vil fjerne samlingen \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Er du sikker på, at du vil fjerne episoden \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Er du sikker på, at du vil fjerne episoden \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisodes": "Er du sikker på, at du vil fjerne {0} episoder?",
|
"MessageConfirmRemoveEpisodes": "Er du sikker på, at du vil fjerne {0} episoder?",
|
||||||
|
"MessageConfirmRemoveListeningSessions": "Er du sikker på at du vil fjerne {0} lytte sessioner?",
|
||||||
|
"MessageConfirmRemoveMetadataFiles": "Er du sikker på at du vil fjerne alle metadata.{0} filer i dine biblioteksfoldere?",
|
||||||
"MessageConfirmRemoveNarrator": "Er du sikker på, at du vil fjerne fortælleren \"{0}\"?",
|
"MessageConfirmRemoveNarrator": "Er du sikker på, at du vil fjerne fortælleren \"{0}\"?",
|
||||||
"MessageConfirmRemovePlaylist": "Er du sikker på, at du vil fjerne din spilleliste \"{0}\"?",
|
"MessageConfirmRemovePlaylist": "Er du sikker på, at du vil fjerne din spilleliste \"{0}\"?",
|
||||||
"MessageConfirmRenameGenre": "Er du sikker på, at du vil omdøbe genre \"{0}\" til \"{1}\" for alle elementer?",
|
"MessageConfirmRenameGenre": "Er du sikker på, at du vil omdøbe genre \"{0}\" til \"{1}\" for alle elementer?",
|
||||||
@@ -526,11 +755,17 @@
|
|||||||
"MessageConfirmRenameTag": "Er du sikker på, at du vil omdøbe tag \"{0}\" til \"{1}\" for alle elementer?",
|
"MessageConfirmRenameTag": "Er du sikker på, at du vil omdøbe tag \"{0}\" til \"{1}\" for alle elementer?",
|
||||||
"MessageConfirmRenameTagMergeNote": "Bemærk: Dette tag findes allerede, så de vil blive fusioneret.",
|
"MessageConfirmRenameTagMergeNote": "Bemærk: Dette tag findes allerede, så de vil blive fusioneret.",
|
||||||
"MessageConfirmRenameTagWarning": "Advarsel! Et lignende tag med en anden skrivemåde eksisterer allerede \"{0}\".",
|
"MessageConfirmRenameTagWarning": "Advarsel! Et lignende tag med en anden skrivemåde eksisterer allerede \"{0}\".",
|
||||||
|
"MessageConfirmResetProgress": "Er du sikker på at du vil nulstille dit fremskridt?",
|
||||||
"MessageConfirmSendEbookToDevice": "Er du sikker på, at du vil sende {0} e-bog \"{1}\" til enhed \"{2}\"?",
|
"MessageConfirmSendEbookToDevice": "Er du sikker på, at du vil sende {0} e-bog \"{1}\" til enhed \"{2}\"?",
|
||||||
|
"MessageConfirmUnlinkOpenId": "Er du sikker på at du vil fjerne linket mellem denne bruger og OpenID?",
|
||||||
|
"MessageDaysListenedInTheLastYear": "{0} dage lyttet i løbet af det sidste år",
|
||||||
"MessageDownloadingEpisode": "Downloader episode",
|
"MessageDownloadingEpisode": "Downloader episode",
|
||||||
"MessageDragFilesIntoTrackOrder": "Træk filer ind i korrekt spororden",
|
"MessageDragFilesIntoTrackOrder": "Træk filer ind i korrekt spororden",
|
||||||
|
"MessageEmbedFailed": "Indlejring fejlede!",
|
||||||
"MessageEmbedFinished": "Indlejring færdig!",
|
"MessageEmbedFinished": "Indlejring færdig!",
|
||||||
|
"MessageEmbedQueue": "Sat i kø for metadata indlejring ({0} i kø)",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} episoder er sat i kø til download",
|
"MessageEpisodesQueuedForDownload": "{0} episoder er sat i kø til download",
|
||||||
|
"MessageEreaderDevices": "For at sikre levering af ebøger, skal du eventuelt tilføje mailadressen som en gyldig afsender for hver enhed angivet forneden.",
|
||||||
"MessageFeedURLWillBe": "Feed-URL vil være {0}",
|
"MessageFeedURLWillBe": "Feed-URL vil være {0}",
|
||||||
"MessageFetching": "Henter...",
|
"MessageFetching": "Henter...",
|
||||||
"MessageForceReScanDescription": "vil scanne alle filer igen som en frisk scanning. Lydfilens ID3-tags, OPF-filer og tekstfiler scannes som nye.",
|
"MessageForceReScanDescription": "vil scanne alle filer igen som en frisk scanning. Lydfilens ID3-tags, OPF-filer og tekstfiler scannes som nye.",
|
||||||
@@ -541,6 +776,7 @@
|
|||||||
"MessageJoinUsOn": "Deltag i os på",
|
"MessageJoinUsOn": "Deltag i os på",
|
||||||
"MessageLoading": "Indlæser...",
|
"MessageLoading": "Indlæser...",
|
||||||
"MessageLoadingFolders": "Indlæser mapper...",
|
"MessageLoadingFolders": "Indlæser mapper...",
|
||||||
|
"MessageLogsDescription": "Logfiler er gemt i <code>/metadata/logs</code> som JSON filer. Crash log er gemt i <code>/metadata/logs/crash_logs.txt</code>.",
|
||||||
"MessageM4BFailed": "M4B mislykkedes!",
|
"MessageM4BFailed": "M4B mislykkedes!",
|
||||||
"MessageM4BFinished": "M4B afsluttet!",
|
"MessageM4BFinished": "M4B afsluttet!",
|
||||||
"MessageMapChapterTitles": "Tilknyt kapiteloverskrifter til dine eksisterende lydbogskapitler uden at justere tidsstempler",
|
"MessageMapChapterTitles": "Tilknyt kapiteloverskrifter til dine eksisterende lydbogskapitler uden at justere tidsstempler",
|
||||||
@@ -557,6 +793,7 @@
|
|||||||
"MessageNoCollections": "Ingen samlinger",
|
"MessageNoCollections": "Ingen samlinger",
|
||||||
"MessageNoCoversFound": "Ingen omslag fundet",
|
"MessageNoCoversFound": "Ingen omslag fundet",
|
||||||
"MessageNoDescription": "Ingen beskrivelse",
|
"MessageNoDescription": "Ingen beskrivelse",
|
||||||
|
"MessageNoDevices": "Ingen enheder",
|
||||||
"MessageNoDownloadsInProgress": "Ingen downloads i gang lige nu",
|
"MessageNoDownloadsInProgress": "Ingen downloads i gang lige nu",
|
||||||
"MessageNoDownloadsQueued": "Ingen downloads i kø",
|
"MessageNoDownloadsQueued": "Ingen downloads i kø",
|
||||||
"MessageNoEpisodeMatchesFound": "Ingen episode-matcher fundet",
|
"MessageNoEpisodeMatchesFound": "Ingen episode-matcher fundet",
|
||||||
@@ -570,6 +807,7 @@
|
|||||||
"MessageNoLogs": "Ingen logfiler",
|
"MessageNoLogs": "Ingen logfiler",
|
||||||
"MessageNoMediaProgress": "Ingen medieforløb",
|
"MessageNoMediaProgress": "Ingen medieforløb",
|
||||||
"MessageNoNotifications": "Ingen meddelelser",
|
"MessageNoNotifications": "Ingen meddelelser",
|
||||||
|
"MessageNoPodcastFeed": "Invalid podcast: Intet feed",
|
||||||
"MessageNoPodcastsFound": "Ingen podcasts fundet",
|
"MessageNoPodcastsFound": "Ingen podcasts fundet",
|
||||||
"MessageNoResults": "Ingen resultater",
|
"MessageNoResults": "Ingen resultater",
|
||||||
"MessageNoSearchResultsFor": "Ingen søgeresultater for \"{0}\"",
|
"MessageNoSearchResultsFor": "Ingen søgeresultater for \"{0}\"",
|
||||||
@@ -579,11 +817,17 @@
|
|||||||
"MessageNoUpdatesWereNecessary": "Ingen opdateringer var nødvendige",
|
"MessageNoUpdatesWereNecessary": "Ingen opdateringer var nødvendige",
|
||||||
"MessageNoUserPlaylists": "Du har ingen afspilningslister",
|
"MessageNoUserPlaylists": "Du har ingen afspilningslister",
|
||||||
"MessageNotYetImplemented": "Endnu ikke implementeret",
|
"MessageNotYetImplemented": "Endnu ikke implementeret",
|
||||||
|
"MessageOpmlPreviewNote": "Note: Dette er en forhåndsvisning af den indlæste OPML fil. Podcast titel vil blive taget fra RSS feedet.",
|
||||||
"MessageOr": "eller",
|
"MessageOr": "eller",
|
||||||
"MessagePauseChapter": "Pause kapitelafspilning",
|
"MessagePauseChapter": "Pause kapitelafspilning",
|
||||||
"MessagePlayChapter": "Lyt til begyndelsen af kapitlet",
|
"MessagePlayChapter": "Lyt til begyndelsen af kapitlet",
|
||||||
"MessagePlaylistCreateFromCollection": "Opret afspilningsliste fra samling",
|
"MessagePlaylistCreateFromCollection": "Opret afspilningsliste fra samling",
|
||||||
|
"MessagePleaseWait": "Vent venligst...",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "Podcast har ingen RSS-feed-URL at bruge til matchning",
|
"MessagePodcastHasNoRSSFeedForMatching": "Podcast har ingen RSS-feed-URL at bruge til matchning",
|
||||||
|
"MessagePodcastSearchField": "Indtast søgeterm eller RSS URL",
|
||||||
|
"MessageQuickEmbedInProgress": "Hurtig indlejring igang",
|
||||||
|
"MessageQuickEmbedQueue": "I kø for hurtigindlejring ({0} i kø)",
|
||||||
|
"MessageQuickMatchAllEpisodes": "Hurtig match alle afsnit",
|
||||||
"MessageQuickMatchDescription": "Udfyld tomme elementoplysninger og omslag med første matchresultat fra '{0}'. Overskriver ikke oplysninger, medmindre serverindstillingen 'Foretræk matchet metadata' er aktiveret.",
|
"MessageQuickMatchDescription": "Udfyld tomme elementoplysninger og omslag med første matchresultat fra '{0}'. Overskriver ikke oplysninger, medmindre serverindstillingen 'Foretræk matchet metadata' er aktiveret.",
|
||||||
"MessageRemoveChapter": "Fjern kapitel",
|
"MessageRemoveChapter": "Fjern kapitel",
|
||||||
"MessageRemoveEpisodes": "Fjern {0} episode(r)",
|
"MessageRemoveEpisodes": "Fjern {0} episode(r)",
|
||||||
@@ -593,10 +837,50 @@
|
|||||||
"MessageResetChaptersConfirm": "Er du sikker på, at du vil nulstille kapitler og annullere ændringerne, du har foretaget?",
|
"MessageResetChaptersConfirm": "Er du sikker på, at du vil nulstille kapitler og annullere ændringerne, du har foretaget?",
|
||||||
"MessageRestoreBackupConfirm": "Er du sikker på, at du vil gendanne sikkerhedskopien oprettet den",
|
"MessageRestoreBackupConfirm": "Er du sikker på, at du vil gendanne sikkerhedskopien oprettet den",
|
||||||
"MessageRestoreBackupWarning": "Gendannelse af en sikkerhedskopi vil overskrive hele databasen, som er placeret på /config, og omslagsbilleder i /metadata/items & /metadata/authors.<br /><br />Sikkerhedskopier ændrer ikke nogen filer i dine biblioteksmapper. Hvis du har aktiveret serverindstillinger for at gemme omslagskunst og metadata i dine biblioteksmapper, sikkerhedskopieres eller overskrives disse ikke.<br /><br />Alle klienter, der bruger din server, opdateres automatisk.",
|
"MessageRestoreBackupWarning": "Gendannelse af en sikkerhedskopi vil overskrive hele databasen, som er placeret på /config, og omslagsbilleder i /metadata/items & /metadata/authors.<br /><br />Sikkerhedskopier ændrer ikke nogen filer i dine biblioteksmapper. Hvis du har aktiveret serverindstillinger for at gemme omslagskunst og metadata i dine biblioteksmapper, sikkerhedskopieres eller overskrives disse ikke.<br /><br />Alle klienter, der bruger din server, opdateres automatisk.",
|
||||||
|
"MessageScheduleLibraryScanNote": "For de fleste brugere, er det anbefalet at efterlade denne funktion deaktiveret for at holde mappe lurer indstilling aktiveret. Mappe lureren vil automatisk opdage ændringer i biblioteksmapper. Mappe lureren virker ikke for alle filsystemer (så som NFS) så schedulerede biblioteksscans vil blive anvendt.",
|
||||||
"MessageSearchResultsFor": "Søgeresultater for",
|
"MessageSearchResultsFor": "Søgeresultater for",
|
||||||
|
"MessageSelected": "{0} valgt",
|
||||||
"MessageServerCouldNotBeReached": "Serveren kunne ikke nås",
|
"MessageServerCouldNotBeReached": "Serveren kunne ikke nås",
|
||||||
"MessageSetChaptersFromTracksDescription": "Indstil kapitler ved at bruge hver lydfil som et kapitel og kapiteloverskrift som lydfilnavn",
|
"MessageSetChaptersFromTracksDescription": "Indstil kapitler ved at bruge hver lydfil som et kapitel og kapiteloverskrift som lydfilnavn",
|
||||||
|
"MessageShareExpirationWillBe": "Udløb vil være <strong>{0}</strong>",
|
||||||
|
"MessageShareExpiresIn": "Udløber om {0}",
|
||||||
|
"MessageShareURLWillBe": "Del URL vil være <strong>{0}</strong>",
|
||||||
"MessageStartPlaybackAtTime": "Start afspilning for \"{0}\" kl. {1}?",
|
"MessageStartPlaybackAtTime": "Start afspilning for \"{0}\" kl. {1}?",
|
||||||
|
"MessageTaskAudioFileNotWritable": "Lydbogsfil \"{0}\" er ikke skrivebar",
|
||||||
|
"MessageTaskCanceledByUser": "Opgave annulleret af bruger",
|
||||||
|
"MessageTaskDownloadingEpisodeDescription": "Download afsnit \"{0}\"",
|
||||||
|
"MessageTaskEmbeddingMetadata": "Indlejring af metadata",
|
||||||
|
"MessageTaskEmbeddingMetadataDescription": "Indlejring af metadata i lydbog \"{0}\"",
|
||||||
|
"MessageTaskEncodingM4b": "Indkodning M4B",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Indkodning lydog \"{0}\" ind i en enkelt M4B fil",
|
||||||
|
"MessageTaskFailed": "Fejlet",
|
||||||
|
"MessageTaskFailedToBackupAudioFile": "Fejlede backup af lydbogsfil \"{0}\"",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Fejlede at oprette cache mappe",
|
||||||
|
"MessageTaskFailedToEmbedMetadataInFile": "Fejlede at indkode metadata i fil \"{0}\"",
|
||||||
|
"MessageTaskFailedToMergeAudioFiles": "Fejlede at sammenflette lydbogsfiler",
|
||||||
|
"MessageTaskFailedToMoveM4bFile": "Fejlede i at flytte M4B fil",
|
||||||
|
"MessageTaskFailedToWriteMetadataFile": "Fejlede i at skrive metadata fil",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "Matchede bøger i bibliotek \"{0}\"",
|
||||||
|
"MessageTaskNoFilesToScan": "Ingen filer at scanne",
|
||||||
|
"MessageTaskOpmlImport": "OPML import",
|
||||||
|
"MessageTaskOpmlImportDescription": "Oprettelse af podcasts fra {0} RSS feeds",
|
||||||
|
"MessageTaskOpmlImportFeed": "OPML importering fejlede",
|
||||||
|
"MessageTaskOpmlImportFeedDescription": "Importering af RSS feed \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedFailed": "Fejlede at hente podcast feed",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastDescription": "Opretter podcast \"{0}\"",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastExists": "Podcast ligger allerede på filsti",
|
||||||
|
"MessageTaskOpmlImportFeedPodcastFailed": "Fejlede i at oprette podcast",
|
||||||
|
"MessageTaskOpmlImportFinished": "Tilføjede {0} podcasts",
|
||||||
|
"MessageTaskOpmlParseFailed": "Fejlede i at læse OPML fil",
|
||||||
|
"MessageTaskOpmlParseFastFail": "Forkert OPML <opml> tag ikke fundet ELLER et <outline> tag var ikke fundet",
|
||||||
|
"MessageTaskOpmlParseNoneFound": "Ingen feeds fundet i OPML fil",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} tilføjet",
|
||||||
|
"MessageTaskScanItemsMissing": "{0} mangler",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} opdateret",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "Ingen ændringer nødvendigt",
|
||||||
|
"MessageTaskScanningFileChanges": "Scanner filændringer i \"{0}\"",
|
||||||
|
"MessageTaskScanningLibrary": "Scanning af \"{0}\" bibliotek",
|
||||||
|
"MessageTaskTargetDirectoryNotWritable": "Mål sti er ikke skrivebar",
|
||||||
"MessageThinking": "Tænker...",
|
"MessageThinking": "Tænker...",
|
||||||
"MessageUploaderItemFailed": "Fejl ved upload",
|
"MessageUploaderItemFailed": "Fejl ved upload",
|
||||||
"MessageUploaderItemSuccess": "Uploadet med succes!",
|
"MessageUploaderItemSuccess": "Uploadet med succes!",
|
||||||
@@ -614,38 +898,102 @@
|
|||||||
"NoteUploaderFoldersWithMediaFiles": "Mapper med mediefiler håndteres som separate bibliotekselementer.",
|
"NoteUploaderFoldersWithMediaFiles": "Mapper med mediefiler håndteres som separate bibliotekselementer.",
|
||||||
"NoteUploaderOnlyAudioFiles": "Hvis du kun uploader lydfiler, håndteres hver lydfil som en separat lydbog.",
|
"NoteUploaderOnlyAudioFiles": "Hvis du kun uploader lydfiler, håndteres hver lydfil som en separat lydbog.",
|
||||||
"NoteUploaderUnsupportedFiles": "Ikke-understøttede filer ignoreres. Når du vælger eller slipper en mappe, ignoreres andre filer, der ikke er i en emnemappe.",
|
"NoteUploaderUnsupportedFiles": "Ikke-understøttede filer ignoreres. Når du vælger eller slipper en mappe, ignoreres andre filer, der ikke er i en emnemappe.",
|
||||||
|
"NotificationOnBackupCompletedDescription": "Udløst når backup er færdig",
|
||||||
|
"NotificationOnBackupFailedDescription": "Udløst når backup fejler",
|
||||||
|
"NotificationOnEpisodeDownloadedDescription": "Udløst når et podcast afsnit er automatisk downloadet",
|
||||||
|
"NotificationOnTestDescription": "Event for test af notifikationssystemet",
|
||||||
"PlaceholderNewCollection": "Nyt samlingnavn",
|
"PlaceholderNewCollection": "Nyt samlingnavn",
|
||||||
"PlaceholderNewFolderPath": "Ny mappes sti",
|
"PlaceholderNewFolderPath": "Ny mappes sti",
|
||||||
"PlaceholderNewPlaylist": "Nyt afspilningslistnavn",
|
"PlaceholderNewPlaylist": "Nyt afspilningslistnavn",
|
||||||
"PlaceholderSearch": "Søg..",
|
"PlaceholderSearch": "Søg..",
|
||||||
"PlaceholderSearchEpisode": "Søg efter episode..",
|
"PlaceholderSearchEpisode": "Søg efter episode..",
|
||||||
|
"StatsAuthorsAdded": "forfattere tilføjet",
|
||||||
|
"StatsBooksAdded": "bøger tilføjet",
|
||||||
|
"StatsBooksAdditional": "Nogle tilføjelser inkludere…",
|
||||||
|
"StatsBooksFinished": "bøger færdige",
|
||||||
|
"StatsBooksFinishedThisYear": "Nogle bøger færdiggjort i år.…",
|
||||||
|
"StatsBooksListenedTo": "bøger lyttet til",
|
||||||
|
"StatsCollectionGrewTo": "Din bog kollektion voksede til…",
|
||||||
|
"StatsSessions": "sessioner",
|
||||||
|
"StatsSpentListening": "brugt at lytte",
|
||||||
|
"StatsTopAuthor": "TOP FORFATTER",
|
||||||
|
"StatsTopAuthors": "TOP FORFATTERE",
|
||||||
|
"StatsTopGenre": "TOP GENRE",
|
||||||
|
"StatsTopGenres": "TOP GENRER",
|
||||||
|
"StatsTopMonth": "TOP MÅNED",
|
||||||
|
"StatsTopNarrator": "TOP OPLÆSER",
|
||||||
|
"StatsTopNarrators": "TOP OPLÆSERE",
|
||||||
|
"StatsTotalDuration": "Med den totale varighed af…",
|
||||||
|
"StatsYearInReview": "ÅR I REVIEW",
|
||||||
"ToastAccountUpdateSuccess": "Konto opdateret",
|
"ToastAccountUpdateSuccess": "Konto opdateret",
|
||||||
|
"ToastAppriseUrlRequired": "Skal indtaste en Apprise URL",
|
||||||
|
"ToastAsinRequired": "ASIN er påkrævet",
|
||||||
"ToastAuthorImageRemoveSuccess": "Forfatterbillede fjernet",
|
"ToastAuthorImageRemoveSuccess": "Forfatterbillede fjernet",
|
||||||
|
"ToastAuthorNotFound": "Forfatter \"{0}\" ikke fundet",
|
||||||
|
"ToastAuthorRemoveSuccess": "Forfatter fjernet",
|
||||||
|
"ToastAuthorSearchNotFound": "Forfatter ikke fundet",
|
||||||
"ToastAuthorUpdateMerged": "Forfatter fusioneret",
|
"ToastAuthorUpdateMerged": "Forfatter fusioneret",
|
||||||
"ToastAuthorUpdateSuccess": "Forfatter opdateret",
|
"ToastAuthorUpdateSuccess": "Forfatter opdateret",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Forfatter opdateret (ingen billede fundet)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Forfatter opdateret (ingen billede fundet)",
|
||||||
|
"ToastBackupAppliedSuccess": "Backup indlæst",
|
||||||
"ToastBackupCreateFailed": "Mislykkedes oprettelse af sikkerhedskopi",
|
"ToastBackupCreateFailed": "Mislykkedes oprettelse af sikkerhedskopi",
|
||||||
"ToastBackupCreateSuccess": "Sikkerhedskopi oprettet",
|
"ToastBackupCreateSuccess": "Sikkerhedskopi oprettet",
|
||||||
"ToastBackupDeleteFailed": "Mislykkedes sletning af sikkerhedskopi",
|
"ToastBackupDeleteFailed": "Mislykkedes sletning af sikkerhedskopi",
|
||||||
"ToastBackupDeleteSuccess": "Sikkerhedskopi slettet",
|
"ToastBackupDeleteSuccess": "Sikkerhedskopi slettet",
|
||||||
|
"ToastBackupInvalidMaxKeep": "Forkert antal backups at beholde",
|
||||||
|
"ToastBackupInvalidMaxSize": "Forkert maks backup størrelse",
|
||||||
"ToastBackupRestoreFailed": "Mislykkedes gendannelse af sikkerhedskopi",
|
"ToastBackupRestoreFailed": "Mislykkedes gendannelse af sikkerhedskopi",
|
||||||
"ToastBackupUploadFailed": "Mislykkedes upload af sikkerhedskopi",
|
"ToastBackupUploadFailed": "Mislykkedes upload af sikkerhedskopi",
|
||||||
"ToastBackupUploadSuccess": "Sikkerhedskopi uploadet",
|
"ToastBackupUploadSuccess": "Sikkerhedskopi uploadet",
|
||||||
|
"ToastBatchDeleteFailed": "Batch slet fejlede",
|
||||||
|
"ToastBatchDeleteSuccess": "Batch slet succes",
|
||||||
|
"ToastBatchQuickMatchFailed": "Batch Hurtig Match fejlede!",
|
||||||
|
"ToastBatchQuickMatchStarted": "Batch Hurtig Match af {0} bøger startet!",
|
||||||
"ToastBatchUpdateFailed": "Mislykkedes batchopdatering",
|
"ToastBatchUpdateFailed": "Mislykkedes batchopdatering",
|
||||||
"ToastBatchUpdateSuccess": "Batchopdatering lykkedes",
|
"ToastBatchUpdateSuccess": "Batchopdatering lykkedes",
|
||||||
"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",
|
||||||
|
"ToastCachePurgeFailed": "Fejlede at opryde cache",
|
||||||
|
"ToastCachePurgeSuccess": "Cache ryddet op i succesfuldt",
|
||||||
"ToastChaptersHaveErrors": "Kapitler har fejl",
|
"ToastChaptersHaveErrors": "Kapitler har fejl",
|
||||||
"ToastChaptersMustHaveTitles": "Kapitler skal have titler",
|
"ToastChaptersMustHaveTitles": "Kapitler skal have titler",
|
||||||
|
"ToastChaptersRemoved": "Kapitler fjernet",
|
||||||
|
"ToastChaptersUpdated": "Kapitler opdateret",
|
||||||
|
"ToastCollectionItemsAddFailed": "Genstand(e) tilføjet til kollektion fejlet",
|
||||||
"ToastCollectionRemoveSuccess": "Samling fjernet",
|
"ToastCollectionRemoveSuccess": "Samling fjernet",
|
||||||
"ToastCollectionUpdateSuccess": "Samling opdateret",
|
"ToastCollectionUpdateSuccess": "Samling opdateret",
|
||||||
|
"ToastCoverUpdateFailed": "Cover opdatering fejlede",
|
||||||
|
"ToastDateTimeInvalidOrIncomplete": "Dato og tid er forkert eller ufærdig",
|
||||||
|
"ToastDeleteFileFailed": "Slet fil fejlede",
|
||||||
|
"ToastDeleteFileSuccess": "Fil slettet",
|
||||||
|
"ToastDeviceAddFailed": "Fejlede at tilføje enhed",
|
||||||
|
"ToastDeviceNameAlreadyExists": "Elæser enhed med det navn eksistere allerede",
|
||||||
|
"ToastDeviceTestEmailFailed": "Fejlede at sende test mail",
|
||||||
|
"ToastDeviceTestEmailSuccess": "Test mail sendt",
|
||||||
|
"ToastEmailSettingsUpdateSuccess": "Mail indstillinger opdateret",
|
||||||
|
"ToastEncodeCancelFailed": "Fejlede at afbryde indkodning",
|
||||||
|
"ToastEncodeCancelSucces": "Indkodning afbrudt",
|
||||||
|
"ToastEpisodeDownloadQueueClearFailed": "Fejlede at rydde op i kø",
|
||||||
|
"ToastEpisodeDownloadQueueClearSuccess": "Afsnit download kø renset",
|
||||||
|
"ToastEpisodeUpdateSuccess": "{0} afsnit opdateret",
|
||||||
|
"ToastErrorCannotShare": "Kan ikke dele på denne enhed",
|
||||||
|
"ToastFailedToLoadData": "Fejlede at indlæse data",
|
||||||
|
"ToastFailedToMatch": "Fejlet match",
|
||||||
|
"ToastFailedToShare": "Fejlet deling",
|
||||||
|
"ToastFailedToUpdate": "Fejlet opdatering",
|
||||||
|
"ToastInvalidImageUrl": "Forkert billede URL",
|
||||||
|
"ToastInvalidMaxEpisodesToDownload": "Forkert maks afsnit at hente",
|
||||||
|
"ToastInvalidUrl": "Forkert URL",
|
||||||
"ToastItemCoverUpdateSuccess": "Varens omslag opdateret",
|
"ToastItemCoverUpdateSuccess": "Varens omslag opdateret",
|
||||||
|
"ToastItemDeletedFailed": "Fejlede at slette genstand",
|
||||||
|
"ToastItemDeletedSuccess": "Genstand slettet",
|
||||||
"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",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Mislykkedes markering som ikke afsluttet",
|
"ToastItemMarkedAsNotFinishedFailed": "Mislykkedes markering som ikke afsluttet",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Vare markeret som ikke afsluttet",
|
"ToastItemMarkedAsNotFinishedSuccess": "Vare markeret som ikke afsluttet",
|
||||||
|
"ToastItemUpdateSuccess": "Genstand opdateret",
|
||||||
"ToastLibraryCreateFailed": "Mislykkedes oprettelse af bibliotek",
|
"ToastLibraryCreateFailed": "Mislykkedes oprettelse af bibliotek",
|
||||||
"ToastLibraryCreateSuccess": "Bibliotek \"{0}\" oprettet",
|
"ToastLibraryCreateSuccess": "Bibliotek \"{0}\" oprettet",
|
||||||
"ToastLibraryDeleteFailed": "Mislykkedes sletning af bibliotek",
|
"ToastLibraryDeleteFailed": "Mislykkedes sletning af bibliotek",
|
||||||
@@ -653,25 +1001,84 @@
|
|||||||
"ToastLibraryScanFailedToStart": "Mislykkedes start af skanning",
|
"ToastLibraryScanFailedToStart": "Mislykkedes start af skanning",
|
||||||
"ToastLibraryScanStarted": "Biblioteksskanning startet",
|
"ToastLibraryScanStarted": "Biblioteksskanning startet",
|
||||||
"ToastLibraryUpdateSuccess": "Bibliotek \"{0}\" opdateret",
|
"ToastLibraryUpdateSuccess": "Bibliotek \"{0}\" opdateret",
|
||||||
|
"ToastMatchAllAuthorsFailed": "Fejlede at matche alle forfattere",
|
||||||
|
"ToastMetadataFilesRemovedError": "Fejlet at fjerne metadata.{0} filer",
|
||||||
|
"ToastMetadataFilesRemovedNoneFound": "Ingen metadata.{0} filer fundet i bibliotek",
|
||||||
|
"ToastMetadataFilesRemovedNoneRemoved": "Ingen metadata.{0} filer slettet",
|
||||||
|
"ToastMetadataFilesRemovedSuccess": "{0} metadata.{1} filer slettet",
|
||||||
|
"ToastMustHaveAtLeastOnePath": "Skal have mindst en sti",
|
||||||
|
"ToastNameEmailRequired": "Navn og email påkrævet",
|
||||||
|
"ToastNameRequired": "Navn påkrævet",
|
||||||
|
"ToastNewEpisodesFound": "{0} nye afsnit fundet",
|
||||||
|
"ToastNewUserCreatedFailed": "Fejlede at oprette konto: \"{0}\"",
|
||||||
|
"ToastNewUserCreatedSuccess": "Ny konto oprettet",
|
||||||
|
"ToastNewUserLibraryError": "Skal vælge mindst et bibliotek",
|
||||||
|
"ToastNewUserPasswordError": "Skal have et password, kun root brugeren kan have et tomt password",
|
||||||
|
"ToastNewUserTagError": "Skal vælge mindst et tag",
|
||||||
|
"ToastNewUserUsernameError": "Angiv brugernavn",
|
||||||
|
"ToastNoNewEpisodesFound": "Ingen nye afsnit fundet",
|
||||||
|
"ToastNoRSSFeed": "Podcast har ingen RSS feed",
|
||||||
|
"ToastNoUpdatesNecessary": "Ingen opdateringer nødvendige",
|
||||||
|
"ToastNotificationCreateFailed": "Fejlede at oprette notifikation",
|
||||||
|
"ToastNotificationDeleteFailed": "Fejlede at slette notifikation",
|
||||||
|
"ToastNotificationFailedMaximum": "Maks forsøg skal være >= 0",
|
||||||
|
"ToastNotificationQueueMaximum": "Maks notifikationskø skal være >= 0",
|
||||||
|
"ToastNotificationSettingsUpdateSuccess": "Notifikationsindstillinger opdateret",
|
||||||
|
"ToastNotificationTestTriggerFailed": "Fejlede at oprette en test notifikation",
|
||||||
|
"ToastNotificationTestTriggerSuccess": "Test notifikation oprettet",
|
||||||
|
"ToastNotificationUpdateSuccess": "Notifikation opdateret",
|
||||||
"ToastPlaylistCreateFailed": "Mislykkedes oprettelse af afspilningsliste",
|
"ToastPlaylistCreateFailed": "Mislykkedes oprettelse af afspilningsliste",
|
||||||
"ToastPlaylistCreateSuccess": "Afspilningsliste oprettet",
|
"ToastPlaylistCreateSuccess": "Afspilningsliste oprettet",
|
||||||
"ToastPlaylistRemoveSuccess": "Afspilningsliste fjernet",
|
"ToastPlaylistRemoveSuccess": "Afspilningsliste fjernet",
|
||||||
"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",
|
||||||
|
"ToastPodcastGetFeedFailed": "Fejlede at hente podcast feed",
|
||||||
|
"ToastPodcastNoEpisodesInFeed": "Ingen nye afsnit fundet i RSS feed",
|
||||||
|
"ToastPodcastNoRssFeed": "Podcast har ingen RSS feed",
|
||||||
|
"ToastProgressIsNotBeingSynced": "Fremskridt ikke synkroniseret, genstart afspilning",
|
||||||
|
"ToastProviderCreatedFailed": "Fejlede at tilføje udbyder",
|
||||||
|
"ToastProviderCreatedSuccess": "Ny udbyder tilføjet",
|
||||||
|
"ToastProviderNameAndUrlRequired": "Navn og URL påkrævet",
|
||||||
|
"ToastProviderRemoveSuccess": "Udbyder fjernet",
|
||||||
"ToastRSSFeedCloseFailed": "Mislykkedes lukning af RSS-feed",
|
"ToastRSSFeedCloseFailed": "Mislykkedes lukning af RSS-feed",
|
||||||
"ToastRSSFeedCloseSuccess": "RSS-feed lukket",
|
"ToastRSSFeedCloseSuccess": "RSS-feed lukket",
|
||||||
|
"ToastRemoveFailed": "Fejlede at slette",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Mislykkedes fjernelse af element fra samling",
|
"ToastRemoveItemFromCollectionFailed": "Mislykkedes fjernelse af element fra samling",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "Element fjernet fra samling",
|
"ToastRemoveItemFromCollectionSuccess": "Element fjernet fra samling",
|
||||||
|
"ToastRemoveItemsWithIssuesFailed": "Fejlede at slette genstande med fejl",
|
||||||
|
"ToastRemoveItemsWithIssuesSuccess": "Slettede genstande med fejl",
|
||||||
|
"ToastRenameFailed": "Fejlede at omdøbe",
|
||||||
|
"ToastRescanFailed": "Genscan fejlede for {0}",
|
||||||
|
"ToastRescanRemoved": "Genscan gennemført, genstand blev fjernet",
|
||||||
|
"ToastRescanUpToDate": "Genscan gennemført, genstand var opdateret",
|
||||||
|
"ToastRescanUpdated": "Genscan gennemført, genstand blev opdateret",
|
||||||
|
"ToastScanFailed": "Fejlede at scanne biblioteksgenstand",
|
||||||
|
"ToastSelectAtLeastOneUser": "Vælg mindst en bruger",
|
||||||
"ToastSendEbookToDeviceFailed": "Mislykkedes afsendelse af e-bog til enhed",
|
"ToastSendEbookToDeviceFailed": "Mislykkedes afsendelse af e-bog til enhed",
|
||||||
"ToastSendEbookToDeviceSuccess": "E-bog afsendt til enhed \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "E-bog afsendt til enhed \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "Mislykkedes opdatering af serie",
|
"ToastSeriesUpdateFailed": "Mislykkedes opdatering af serie",
|
||||||
"ToastSeriesUpdateSuccess": "Serieopdatering lykkedes",
|
"ToastSeriesUpdateSuccess": "Serieopdatering lykkedes",
|
||||||
|
"ToastServerSettingsUpdateSuccess": "Server indstillinger opdateret",
|
||||||
|
"ToastSessionCloseFailed": "Luk session fejlede",
|
||||||
"ToastSessionDeleteFailed": "Mislykkedes sletning af session",
|
"ToastSessionDeleteFailed": "Mislykkedes sletning af session",
|
||||||
"ToastSessionDeleteSuccess": "Session slettet",
|
"ToastSessionDeleteSuccess": "Session slettet",
|
||||||
|
"ToastSleepTimerDone": "Sleep timer færdig... zZzzZz",
|
||||||
|
"ToastSlugMustChange": "Snegl indeholder ugyldige karakterer",
|
||||||
|
"ToastSlugRequired": "Snegl påkrævet",
|
||||||
"ToastSocketConnected": "Socket forbundet",
|
"ToastSocketConnected": "Socket forbundet",
|
||||||
"ToastSocketDisconnected": "Socket afbrudt",
|
"ToastSocketDisconnected": "Socket afbrudt",
|
||||||
"ToastSocketFailedToConnect": "Socket kunne ikke oprettes",
|
"ToastSocketFailedToConnect": "Socket kunne ikke oprettes",
|
||||||
|
"ToastSortingPrefixesEmptyError": "Skal indeholde mindst 1 sorteringspræfiks",
|
||||||
|
"ToastSortingPrefixesUpdateSuccess": "Sortering af præfiks opdateret ({0} genstande)",
|
||||||
|
"ToastTitleRequired": "Titel påkrævet",
|
||||||
|
"ToastUnknownError": "Ukendt fejl",
|
||||||
|
"ToastUnlinkOpenIdFailed": "Fejlede i af afkoble bruger fra OpenID",
|
||||||
|
"ToastUnlinkOpenIdSuccess": "Bruger afkoblet fra OpenID",
|
||||||
"ToastUserDeleteFailed": "Mislykkedes sletning af bruger",
|
"ToastUserDeleteFailed": "Mislykkedes sletning af bruger",
|
||||||
"ToastUserDeleteSuccess": "Bruger slettet"
|
"ToastUserDeleteSuccess": "Bruger slettet",
|
||||||
|
"ToastUserPasswordChangeSuccess": "Password ændret",
|
||||||
|
"ToastUserPasswordMismatch": "Passwords passer ikke sammen",
|
||||||
|
"ToastUserPasswordMustChange": "Nyt password må ikke være det gamle",
|
||||||
|
"ToastUserRootRequireName": "Skal indholde et root brugernavn"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
"ButtonNext": "Vor",
|
"ButtonNext": "Vor",
|
||||||
"ButtonNextChapter": "Nächstes Kapitel",
|
"ButtonNextChapter": "Nächstes Kapitel",
|
||||||
"ButtonNextItemInQueue": "Das nächste Element in der Warteschlange",
|
"ButtonNextItemInQueue": "Das nächste Element in der Warteschlange",
|
||||||
"ButtonOk": "OK",
|
"ButtonOk": "Einverstanden",
|
||||||
"ButtonOpenFeed": "Feed öffnen",
|
"ButtonOpenFeed": "Feed öffnen",
|
||||||
"ButtonOpenManager": "Manager öffnen",
|
"ButtonOpenManager": "Manager öffnen",
|
||||||
"ButtonPause": "Pausieren",
|
"ButtonPause": "Pausieren",
|
||||||
@@ -837,6 +837,7 @@
|
|||||||
"MessageResetChaptersConfirm": "Kapitel und vorgenommenen Änderungen werden zurückgesetzt und rückgängig gemacht! Bist du dir sicher?",
|
"MessageResetChaptersConfirm": "Kapitel und vorgenommenen Änderungen werden zurückgesetzt und rückgängig gemacht! Bist du dir sicher?",
|
||||||
"MessageRestoreBackupConfirm": "Bist du dir sicher, dass du die Sicherung wiederherstellen willst, welche am",
|
"MessageRestoreBackupConfirm": "Bist du dir sicher, dass du die Sicherung wiederherstellen willst, welche am",
|
||||||
"MessageRestoreBackupWarning": "Bei der Wiederherstellung einer Sicherung wird die gesamte Datenbank unter /config und die Titelbilder in /metadata/items und /metadata/authors überschrieben.<br /><br />Bei der Sicherung werden keine Dateien in deinen Bibliotheksordnern verändert. Wenn du die Servereinstellungen aktiviert hast, um Cover und Metadaten in deinen Bibliotheksordnern zu speichern, werden diese nicht gesichert oder überschrieben.<br /><br />Alle Clients, die Ihren Server nutzen, werden automatisch aktualisiert.",
|
"MessageRestoreBackupWarning": "Bei der Wiederherstellung einer Sicherung wird die gesamte Datenbank unter /config und die Titelbilder in /metadata/items und /metadata/authors überschrieben.<br /><br />Bei der Sicherung werden keine Dateien in deinen Bibliotheksordnern verändert. Wenn du die Servereinstellungen aktiviert hast, um Cover und Metadaten in deinen Bibliotheksordnern zu speichern, werden diese nicht gesichert oder überschrieben.<br /><br />Alle Clients, die Ihren Server nutzen, werden automatisch aktualisiert.",
|
||||||
|
"MessageScheduleLibraryScanNote": "Für die meisten Nutzer wird empfohlen, diese Funktion deaktiviert zu lassen und stattdessen die Ordnerüberwachung aktiviert zu lassen. Die Ordnerüberwachung erkennt automatisch Änderungen in deinen Bibliotheksordnern. Da die Ordnerüberwachung jedoch nicht mit jedem Dateisystem (z.B. NFS) funktioniert, können alternativ hier geplante Bibliotheks-Scans aktiviert werden.",
|
||||||
"MessageSearchResultsFor": "Suchergebnisse für",
|
"MessageSearchResultsFor": "Suchergebnisse für",
|
||||||
"MessageSelected": "{0} ausgewählt",
|
"MessageSelected": "{0} ausgewählt",
|
||||||
"MessageServerCouldNotBeReached": "Server kann nicht erreicht werden",
|
"MessageServerCouldNotBeReached": "Server kann nicht erreicht werden",
|
||||||
@@ -912,7 +913,7 @@
|
|||||||
"StatsBooksFinished": "Beendete Bücher",
|
"StatsBooksFinished": "Beendete Bücher",
|
||||||
"StatsBooksFinishedThisYear": "Einige Bücher, die dieses Jahr beendet wurden…",
|
"StatsBooksFinishedThisYear": "Einige Bücher, die dieses Jahr beendet wurden…",
|
||||||
"StatsBooksListenedTo": "gehörte Bücher",
|
"StatsBooksListenedTo": "gehörte Bücher",
|
||||||
"StatsCollectionGrewTo": "Deine Bückersammlung ist gewachsen auf…",
|
"StatsCollectionGrewTo": "Deine Büchersammlung ist gewachsen auf…",
|
||||||
"StatsSessions": "Sitzungen",
|
"StatsSessions": "Sitzungen",
|
||||||
"StatsSpentListening": "zugehört",
|
"StatsSpentListening": "zugehört",
|
||||||
"StatsTopAuthor": "TOP AUTOR",
|
"StatsTopAuthor": "TOP AUTOR",
|
||||||
@@ -963,7 +964,7 @@
|
|||||||
"ToastCollectionRemoveSuccess": "Sammlung entfernt",
|
"ToastCollectionRemoveSuccess": "Sammlung entfernt",
|
||||||
"ToastCollectionUpdateSuccess": "Sammlung aktualisiert",
|
"ToastCollectionUpdateSuccess": "Sammlung aktualisiert",
|
||||||
"ToastCoverUpdateFailed": "Cover-Update fehlgeschlagen",
|
"ToastCoverUpdateFailed": "Cover-Update fehlgeschlagen",
|
||||||
"ToastDateTimeInvalidOrIncomplete": "Datum und Zeit ist ungültig oder unvollständig",
|
"ToastDateTimeInvalidOrIncomplete": "Datum und Zeit sind ungültig oder unvollständig",
|
||||||
"ToastDeleteFileFailed": "Die Datei konnte nicht gelöscht werden",
|
"ToastDeleteFileFailed": "Die Datei konnte nicht gelöscht werden",
|
||||||
"ToastDeleteFileSuccess": "Datei gelöscht",
|
"ToastDeleteFileSuccess": "Datei gelöscht",
|
||||||
"ToastDeviceAddFailed": "Gerät konnte nicht hinzugefügt werden",
|
"ToastDeviceAddFailed": "Gerät konnte nicht hinzugefügt werden",
|
||||||
@@ -1016,6 +1017,7 @@
|
|||||||
"ToastNewUserTagError": "Mindestens ein Tag muss ausgewählt sein",
|
"ToastNewUserTagError": "Mindestens ein Tag muss ausgewählt sein",
|
||||||
"ToastNewUserUsernameError": "Nutzername eingeben",
|
"ToastNewUserUsernameError": "Nutzername eingeben",
|
||||||
"ToastNoNewEpisodesFound": "Keine neuen Episoden gefunden",
|
"ToastNoNewEpisodesFound": "Keine neuen Episoden gefunden",
|
||||||
|
"ToastNoRSSFeed": "Podcast hat keinen RSS-Feed",
|
||||||
"ToastNoUpdatesNecessary": "Keine Änderungen nötig",
|
"ToastNoUpdatesNecessary": "Keine Änderungen nötig",
|
||||||
"ToastNotificationCreateFailed": "Fehler beim erstellen der Benachrichtig",
|
"ToastNotificationCreateFailed": "Fehler beim erstellen der Benachrichtig",
|
||||||
"ToastNotificationDeleteFailed": "Fehler beim löschen der Benachrichtigung",
|
"ToastNotificationDeleteFailed": "Fehler beim löschen der Benachrichtigung",
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
"ButtonApplyChapters": "Apply Chapters",
|
"ButtonApplyChapters": "Apply Chapters",
|
||||||
"ButtonAuthors": "Authors",
|
"ButtonAuthors": "Authors",
|
||||||
"ButtonBack": "Back",
|
"ButtonBack": "Back",
|
||||||
|
"ButtonBatchEditPopulateFromExisting": "Populate from existing",
|
||||||
|
"ButtonBatchEditPopulateMapDetails": "Populate map details",
|
||||||
"ButtonBrowseForFolder": "Browse for Folder",
|
"ButtonBrowseForFolder": "Browse for Folder",
|
||||||
"ButtonCancel": "Cancel",
|
"ButtonCancel": "Cancel",
|
||||||
"ButtonCancelEncode": "Cancel Encode",
|
"ButtonCancelEncode": "Cancel Encode",
|
||||||
@@ -484,6 +486,7 @@
|
|||||||
"LabelPersonalYearReview": "Your Year in Review ({0})",
|
"LabelPersonalYearReview": "Your Year in Review ({0})",
|
||||||
"LabelPhotoPathURL": "Photo Path/URL",
|
"LabelPhotoPathURL": "Photo Path/URL",
|
||||||
"LabelPlayMethod": "Play Method",
|
"LabelPlayMethod": "Play Method",
|
||||||
|
"LabelPlaybackRateIncrementDecrement": "Playback Rate Increment/Decrement Amount",
|
||||||
"LabelPlayerChapterNumberMarker": "{0} of {1}",
|
"LabelPlayerChapterNumberMarker": "{0} of {1}",
|
||||||
"LabelPlaylists": "Playlists",
|
"LabelPlaylists": "Playlists",
|
||||||
"LabelPodcast": "Podcast",
|
"LabelPodcast": "Podcast",
|
||||||
@@ -704,6 +707,8 @@
|
|||||||
"MessageBackupsLocationEditNote": "Note: Updating the backup location will not move or modify existing backups",
|
"MessageBackupsLocationEditNote": "Note: Updating the backup location will not move or modify existing backups",
|
||||||
"MessageBackupsLocationNoEditNote": "Note: The backup location is set through an environment variable and cannot be changed here.",
|
"MessageBackupsLocationNoEditNote": "Note: The backup location is set through an environment variable and cannot be changed here.",
|
||||||
"MessageBackupsLocationPathEmpty": "Backup location path cannot be empty",
|
"MessageBackupsLocationPathEmpty": "Backup location path cannot be empty",
|
||||||
|
"MessageBatchEditPopulateMapDetailsAllHelp": "Populate enabled fields with data from all items. Fields with multiple values will be merged",
|
||||||
|
"MessageBatchEditPopulateMapDetailsItemHelp": "Populate enabled map details fields with data from this item",
|
||||||
"MessageBatchQuickMatchDescription": "Quick Match will attempt to add missing covers and metadata for the selected items. Enable the options below to allow Quick Match to overwrite existing covers and/or metadata.",
|
"MessageBatchQuickMatchDescription": "Quick Match will attempt to add missing covers and metadata for the selected items. Enable the options below to allow Quick Match to overwrite existing covers and/or metadata.",
|
||||||
"MessageBookshelfNoCollections": "You haven't made any collections yet",
|
"MessageBookshelfNoCollections": "You haven't made any collections yet",
|
||||||
"MessageBookshelfNoRSSFeeds": "No RSS feeds are open",
|
"MessageBookshelfNoRSSFeeds": "No RSS feeds are open",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ButtonAdd": "Agregaro",
|
"ButtonAdd": "Agregar",
|
||||||
"ButtonAddChapters": "Agregar",
|
"ButtonAddChapters": "Agregar",
|
||||||
"ButtonAddDevice": "Agregar Dispositivo",
|
"ButtonAddDevice": "Agregar Dispositivo",
|
||||||
"ButtonAddLibrary": "Crear Biblioteca",
|
"ButtonAddLibrary": "Crear Biblioteca",
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
"ButtonNext": "Siguiente",
|
"ButtonNext": "Siguiente",
|
||||||
"ButtonNextChapter": "Siguiente Capítulo",
|
"ButtonNextChapter": "Siguiente Capítulo",
|
||||||
"ButtonNextItemInQueue": "El siguiente elemento en cola",
|
"ButtonNextItemInQueue": "El siguiente elemento en cola",
|
||||||
"ButtonOk": "De acuerdo",
|
"ButtonOk": "Bueno",
|
||||||
"ButtonOpenFeed": "Abrir fuente",
|
"ButtonOpenFeed": "Abrir fuente",
|
||||||
"ButtonOpenManager": "Abrir Editor",
|
"ButtonOpenManager": "Abrir Editor",
|
||||||
"ButtonPause": "Pausar",
|
"ButtonPause": "Pausar",
|
||||||
@@ -837,6 +837,7 @@
|
|||||||
"MessageResetChaptersConfirm": "¿Está seguro de que desea deshacer los cambios y revertir los capítulos a su estado original?",
|
"MessageResetChaptersConfirm": "¿Está seguro de que desea deshacer los cambios y revertir los capítulos a su estado original?",
|
||||||
"MessageRestoreBackupConfirm": "¿Está seguro de que desea para restaurar del respaldo creado en",
|
"MessageRestoreBackupConfirm": "¿Está seguro de que desea para restaurar del respaldo creado en",
|
||||||
"MessageRestoreBackupWarning": "Restaurar sobrescribirá toda la base de datos localizada en /config y las imágenes de portadas en /metadata/items y /metadata/authors.<br /><br />El respaldo no modifica ningún archivo en las carpetas de su biblioteca. Si ha habilitado la opción del servidor para almacenar portadas y metadata en las carpetas de su biblioteca, esos archivos no se respaldan o sobrescriben.<br /><br />Todos los clientes que usen su servidor se actualizarán automáticamente.",
|
"MessageRestoreBackupWarning": "Restaurar sobrescribirá toda la base de datos localizada en /config y las imágenes de portadas en /metadata/items y /metadata/authors.<br /><br />El respaldo no modifica ningún archivo en las carpetas de su biblioteca. Si ha habilitado la opción del servidor para almacenar portadas y metadata en las carpetas de su biblioteca, esos archivos no se respaldan o sobrescriben.<br /><br />Todos los clientes que usen su servidor se actualizarán automáticamente.",
|
||||||
|
"MessageScheduleLibraryScanNote": "Para la mayoría de los usuarios, se recomienda dejar esta función desactivada y mantener activada la configuración del observador de carpetas. El observador de carpetas detectará automáticamente los cambios en las carpetas de la biblioteca. El observador de carpetas no funciona para todos los sistemas de archivos (como NFS), por lo que se pueden utilizar exploraciones programadas de la biblioteca en su lugar.",
|
||||||
"MessageSearchResultsFor": "Resultados de la búsqueda de",
|
"MessageSearchResultsFor": "Resultados de la búsqueda de",
|
||||||
"MessageSelected": "{0} seleccionado(s)",
|
"MessageSelected": "{0} seleccionado(s)",
|
||||||
"MessageServerCouldNotBeReached": "No se pudo establecer la conexión con el servidor",
|
"MessageServerCouldNotBeReached": "No se pudo establecer la conexión con el servidor",
|
||||||
@@ -963,6 +964,7 @@
|
|||||||
"ToastCollectionRemoveSuccess": "Colección removida",
|
"ToastCollectionRemoveSuccess": "Colección removida",
|
||||||
"ToastCollectionUpdateSuccess": "Colección actualizada",
|
"ToastCollectionUpdateSuccess": "Colección actualizada",
|
||||||
"ToastCoverUpdateFailed": "Error al actualizar la cubierta",
|
"ToastCoverUpdateFailed": "Error al actualizar la cubierta",
|
||||||
|
"ToastDateTimeInvalidOrIncomplete": "Fecha y hora inválidas o incompletas",
|
||||||
"ToastDeleteFileFailed": "Error el eliminar archivo",
|
"ToastDeleteFileFailed": "Error el eliminar archivo",
|
||||||
"ToastDeleteFileSuccess": "Archivo eliminado",
|
"ToastDeleteFileSuccess": "Archivo eliminado",
|
||||||
"ToastDeviceAddFailed": "Error al añadir dispositivo",
|
"ToastDeviceAddFailed": "Error al añadir dispositivo",
|
||||||
@@ -1015,6 +1017,7 @@
|
|||||||
"ToastNewUserTagError": "Debes seleccionar al menos una etiqueta",
|
"ToastNewUserTagError": "Debes seleccionar al menos una etiqueta",
|
||||||
"ToastNewUserUsernameError": "Introduce un nombre de usuario",
|
"ToastNewUserUsernameError": "Introduce un nombre de usuario",
|
||||||
"ToastNoNewEpisodesFound": "No se encontraron nuevos episodios",
|
"ToastNoNewEpisodesFound": "No se encontraron nuevos episodios",
|
||||||
|
"ToastNoRSSFeed": "El Podcast no tiene una fuente RSS",
|
||||||
"ToastNoUpdatesNecessary": "No es necesario actualizar",
|
"ToastNoUpdatesNecessary": "No es necesario actualizar",
|
||||||
"ToastNotificationCreateFailed": "Error al crear notificación",
|
"ToastNotificationCreateFailed": "Error al crear notificación",
|
||||||
"ToastNotificationDeleteFailed": "Error al borrar la notificación",
|
"ToastNotificationDeleteFailed": "Error al borrar la notificación",
|
||||||
|
|||||||
+90
-4
@@ -66,11 +66,12 @@
|
|||||||
"ButtonQueueAddItem": "Lisää jonoon",
|
"ButtonQueueAddItem": "Lisää jonoon",
|
||||||
"ButtonQueueRemoveItem": "Poista jonosta",
|
"ButtonQueueRemoveItem": "Poista jonosta",
|
||||||
"ButtonQuickEmbed": "Pikaupota",
|
"ButtonQuickEmbed": "Pikaupota",
|
||||||
|
"ButtonQuickEmbedMetadata": "Upota kuvailutiedot nopeasti",
|
||||||
"ButtonQuickMatch": "Pikatäsmää",
|
"ButtonQuickMatch": "Pikatäsmää",
|
||||||
"ButtonReScan": "Uudelleenskannaa",
|
"ButtonReScan": "Uudelleenskannaa",
|
||||||
"ButtonRead": "Lue",
|
"ButtonRead": "Lue",
|
||||||
"ButtonReadLess": "Näytä vähemmän",
|
"ButtonReadLess": "Lue vähemmän",
|
||||||
"ButtonReadMore": "Näytä enemmän",
|
"ButtonReadMore": "Lue enemmän",
|
||||||
"ButtonRefresh": "Päivitä",
|
"ButtonRefresh": "Päivitä",
|
||||||
"ButtonRemove": "Poista",
|
"ButtonRemove": "Poista",
|
||||||
"ButtonRemoveAll": "Poista kaikki",
|
"ButtonRemoveAll": "Poista kaikki",
|
||||||
@@ -184,10 +185,12 @@
|
|||||||
"HeaderSettingsGeneral": "Yleiset",
|
"HeaderSettingsGeneral": "Yleiset",
|
||||||
"HeaderSettingsScanner": "Skannaaja",
|
"HeaderSettingsScanner": "Skannaaja",
|
||||||
"HeaderSleepTimer": "Uniajastin",
|
"HeaderSleepTimer": "Uniajastin",
|
||||||
|
"HeaderStatsLargestItems": "Suurimmat kohteet",
|
||||||
|
"HeaderStatsLongestItems": "Pisimmät kohteet (h)",
|
||||||
"HeaderStatsMinutesListeningChart": "Kuunteluminuutit (viim. 7 pv)",
|
"HeaderStatsMinutesListeningChart": "Kuunteluminuutit (viim. 7 pv)",
|
||||||
"HeaderStatsRecentSessions": "Viimeaikaiset istunnot",
|
"HeaderStatsRecentSessions": "Viimeaikaiset istunnot",
|
||||||
"HeaderStatsTop10Authors": "Top 10 kirjailijat",
|
"HeaderStatsTop10Authors": "Suosituimmat 10 kirjailijaa",
|
||||||
"HeaderStatsTop5Genres": "Top 5 lajityypit",
|
"HeaderStatsTop5Genres": "Suosituimmat 5 lajityyppiä",
|
||||||
"HeaderTableOfContents": "Sisällysluettelo",
|
"HeaderTableOfContents": "Sisällysluettelo",
|
||||||
"HeaderTools": "Työkalut",
|
"HeaderTools": "Työkalut",
|
||||||
"HeaderUpdateAccount": "Päivitä tili",
|
"HeaderUpdateAccount": "Päivitä tili",
|
||||||
@@ -198,6 +201,8 @@
|
|||||||
"HeaderYearReview": "Vuosi {0} tarkasteltuna",
|
"HeaderYearReview": "Vuosi {0} tarkasteltuna",
|
||||||
"HeaderYourStats": "Tilastosi",
|
"HeaderYourStats": "Tilastosi",
|
||||||
"LabelAbridged": "Lyhennetty",
|
"LabelAbridged": "Lyhennetty",
|
||||||
|
"LabelAbridgedChecked": "Lyhennetty (tarkistettu)",
|
||||||
|
"LabelAbridgedUnchecked": "Lyhentämätön (tarkistamaton)",
|
||||||
"LabelAccountType": "Tilin tyyppi",
|
"LabelAccountType": "Tilin tyyppi",
|
||||||
"LabelAccountTypeAdmin": "Järjestelmänvalvoja",
|
"LabelAccountTypeAdmin": "Järjestelmänvalvoja",
|
||||||
"LabelAccountTypeGuest": "Vieras",
|
"LabelAccountTypeGuest": "Vieras",
|
||||||
@@ -215,6 +220,7 @@
|
|||||||
"LabelAllUsersExcludingGuests": "Kaikki käyttäjät vieraita lukuun ottamatta",
|
"LabelAllUsersExcludingGuests": "Kaikki käyttäjät vieraita lukuun ottamatta",
|
||||||
"LabelAllUsersIncludingGuests": "Kaikki käyttäjät mukaan lukien vieraat",
|
"LabelAllUsersIncludingGuests": "Kaikki käyttäjät mukaan lukien vieraat",
|
||||||
"LabelAlreadyInYourLibrary": "Jo kirjastossasi",
|
"LabelAlreadyInYourLibrary": "Jo kirjastossasi",
|
||||||
|
"LabelApiToken": "Sovellusliittymätunnus",
|
||||||
"LabelAudioBitrate": "Äänen bittinopeus (esim. 128k)",
|
"LabelAudioBitrate": "Äänen bittinopeus (esim. 128k)",
|
||||||
"LabelAudioChannels": "Äänikanavat (1 tai 2)",
|
"LabelAudioChannels": "Äänikanavat (1 tai 2)",
|
||||||
"LabelAudioCodec": "Äänikoodekki",
|
"LabelAudioCodec": "Äänikoodekki",
|
||||||
@@ -224,19 +230,30 @@
|
|||||||
"LabelAuthors": "Tekijät",
|
"LabelAuthors": "Tekijät",
|
||||||
"LabelAutoDownloadEpisodes": "Lataa jaksot automaattisesti",
|
"LabelAutoDownloadEpisodes": "Lataa jaksot automaattisesti",
|
||||||
"LabelAutoFetchMetadata": "Etsi metadata automaattisesti",
|
"LabelAutoFetchMetadata": "Etsi metadata automaattisesti",
|
||||||
|
"LabelAutoLaunch": "Automaattinen käynnistys",
|
||||||
|
"LabelAutoRegister": "Automaattinen rekisteröinti",
|
||||||
|
"LabelAutoRegisterDescription": "Luo automaattisesti uusia käyttäjiä kirjautumisen jälkeen",
|
||||||
"LabelBackToUser": "Takaisin käyttäjään",
|
"LabelBackToUser": "Takaisin käyttäjään",
|
||||||
|
"LabelBackupAudioFiles": "Varmuuskopioi äänitiedostot",
|
||||||
"LabelBackupLocation": "Varmuuskopiointipaikka",
|
"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)",
|
||||||
|
"LabelBackupsMaxBackupSizeHelp": "Virheellisten asetusten estämiseksi varmuuskopiot epäonnistuvat, jos ne ovat asetettua kokoa suurempia.",
|
||||||
"LabelBackupsNumberToKeep": "Säilytettävien varmuuskopioiden määrä",
|
"LabelBackupsNumberToKeep": "Säilytettävien varmuuskopioiden määrä",
|
||||||
|
"LabelBackupsNumberToKeepHelp": "Varmuuskopiot poistetaan yksi kerrallaan, joten jos niitä on enemmän kuin yksi, ne on poistettava manuaalisesti.",
|
||||||
"LabelBitrate": "Bittinopeus",
|
"LabelBitrate": "Bittinopeus",
|
||||||
|
"LabelBonus": "Bonus",
|
||||||
"LabelBooks": "Kirjat",
|
"LabelBooks": "Kirjat",
|
||||||
"LabelButtonText": "Painikkeen teksti",
|
"LabelButtonText": "Painikkeen teksti",
|
||||||
"LabelChangePassword": "Vaihda salasana",
|
"LabelChangePassword": "Vaihda salasana",
|
||||||
"LabelChannels": "Kanavat",
|
"LabelChannels": "Kanavat",
|
||||||
|
"LabelChapterCount": "{0} lukua",
|
||||||
|
"LabelChapterTitle": "Luvun nimi",
|
||||||
"LabelChapters": "Luvut",
|
"LabelChapters": "Luvut",
|
||||||
|
"LabelChaptersFound": "lukua löydetty",
|
||||||
"LabelClickForMoreInfo": "Napsauta saadaksesi lisätietoja",
|
"LabelClickForMoreInfo": "Napsauta saadaksesi lisätietoja",
|
||||||
|
"LabelClickToUseCurrentValue": "Käytä nykyistä arvoa napsauttamalla",
|
||||||
"LabelClosePlayer": "Sulje soitin",
|
"LabelClosePlayer": "Sulje soitin",
|
||||||
"LabelCodec": "Koodekki",
|
"LabelCodec": "Koodekki",
|
||||||
"LabelCollapseSeries": "Pienennä sarja",
|
"LabelCollapseSeries": "Pienennä sarja",
|
||||||
@@ -251,7 +268,9 @@
|
|||||||
"LabelCoverImageURL": "Kansikuvan URL-osoite",
|
"LabelCoverImageURL": "Kansikuvan URL-osoite",
|
||||||
"LabelCreatedAt": "Luotu",
|
"LabelCreatedAt": "Luotu",
|
||||||
"LabelCurrent": "Nykyinen",
|
"LabelCurrent": "Nykyinen",
|
||||||
|
"LabelCurrently": "Nyt:",
|
||||||
"LabelDays": "Päivää",
|
"LabelDays": "Päivää",
|
||||||
|
"LabelDeleteFromFileSystemCheckbox": "Poista tiedostojärjestelmästä (poista merkintä, jos haluat poistaa vain tietokannasta)",
|
||||||
"LabelDescription": "Kuvaus",
|
"LabelDescription": "Kuvaus",
|
||||||
"LabelDeselectAll": "Poista valinta kaikista",
|
"LabelDeselectAll": "Poista valinta kaikista",
|
||||||
"LabelDevice": "Laite",
|
"LabelDevice": "Laite",
|
||||||
@@ -263,6 +282,7 @@
|
|||||||
"LabelDownloadNEpisodes": "Lataa {0} jaksoa",
|
"LabelDownloadNEpisodes": "Lataa {0} jaksoa",
|
||||||
"LabelDownloadable": "Ladattavissa",
|
"LabelDownloadable": "Ladattavissa",
|
||||||
"LabelDuration": "Kesto",
|
"LabelDuration": "Kesto",
|
||||||
|
"LabelDurationComparisonExactMatch": "(tarkka vastaavuus)",
|
||||||
"LabelDurationComparisonLonger": "({0} pidempi)",
|
"LabelDurationComparisonLonger": "({0} pidempi)",
|
||||||
"LabelDurationComparisonShorter": "({0} lyhyempi)",
|
"LabelDurationComparisonShorter": "({0} lyhyempi)",
|
||||||
"LabelDurationFound": "Kesto löydetty:",
|
"LabelDurationFound": "Kesto löydetty:",
|
||||||
@@ -271,12 +291,15 @@
|
|||||||
"LabelEdit": "Muokkaa",
|
"LabelEdit": "Muokkaa",
|
||||||
"LabelEmail": "Sähköposti",
|
"LabelEmail": "Sähköposti",
|
||||||
"LabelEmailSettingsFromAddress": "Osoitteesta",
|
"LabelEmailSettingsFromAddress": "Osoitteesta",
|
||||||
|
"LabelEmailSettingsRejectUnauthorized": "Hylkää luvattomat sertifikaatit",
|
||||||
"LabelEmailSettingsRejectUnauthorizedHelp": "SSL-sertifikaatin varmentamisen käytöstä poistaminen saattaa vaarantaa yhteytesti turvallisuusriskeihin, kuten man-in-the-middle hyökkäyksiin. Poista käytöstä vain jos ymmärrät vaaran ja luotat yhdistämääsi sähköpostipalvelimeen.",
|
"LabelEmailSettingsRejectUnauthorizedHelp": "SSL-sertifikaatin varmentamisen käytöstä poistaminen saattaa vaarantaa yhteytesti turvallisuusriskeihin, kuten man-in-the-middle hyökkäyksiin. Poista käytöstä vain jos ymmärrät vaaran ja luotat yhdistämääsi sähköpostipalvelimeen.",
|
||||||
"LabelEmailSettingsSecure": "Turvallinen",
|
"LabelEmailSettingsSecure": "Turvallinen",
|
||||||
"LabelEmailSettingsTestAddress": "Testiosoite",
|
"LabelEmailSettingsTestAddress": "Testiosoite",
|
||||||
"LabelEmbeddedCover": "Upotettu kansikuva",
|
"LabelEmbeddedCover": "Upotettu kansikuva",
|
||||||
"LabelEnable": "Ota käyttöön",
|
"LabelEnable": "Ota käyttöön",
|
||||||
"LabelEncodingBackupLocation": "Alkuperäisistä audiotiedostoistasi tallennetaan varmuuskopio osoitteessa:",
|
"LabelEncodingBackupLocation": "Alkuperäisistä audiotiedostoistasi tallennetaan varmuuskopio osoitteessa:",
|
||||||
|
"LabelEncodingChaptersNotEmbedded": "Lukuja ei upoteta moniraitaisiin äänikirjoihin.",
|
||||||
|
"LabelEncodingInfoEmbedded": "Kuvailutiedot upotetaan äänikirjakansion ääniraitoihin.",
|
||||||
"LabelEncodingStartedNavigation": "Voit poistua sivulta kun tehtävä on aloitettu.",
|
"LabelEncodingStartedNavigation": "Voit poistua sivulta kun tehtävä on aloitettu.",
|
||||||
"LabelEncodingTimeWarning": "Koodaus saattaa kestää 30 minuuttiin asti.",
|
"LabelEncodingTimeWarning": "Koodaus saattaa kestää 30 minuuttiin asti.",
|
||||||
"LabelEncodingWarningAdvancedSettings": "Varoitus: Älä päivitä näitä asetuksia ellet ymmärrä ffmpeg-koodausasetuksia.",
|
"LabelEncodingWarningAdvancedSettings": "Varoitus: Älä päivitä näitä asetuksia ellet ymmärrä ffmpeg-koodausasetuksia.",
|
||||||
@@ -290,23 +313,40 @@
|
|||||||
"LabelEpisodeUrlFromRssFeed": "Jakson URL RSS-syötteestä",
|
"LabelEpisodeUrlFromRssFeed": "Jakson URL RSS-syötteestä",
|
||||||
"LabelEpisodes": "Jaksot",
|
"LabelEpisodes": "Jaksot",
|
||||||
"LabelExample": "Esimerkki",
|
"LabelExample": "Esimerkki",
|
||||||
|
"LabelExpandSeries": "Laajenna sarja",
|
||||||
|
"LabelExpandSubSeries": "Laajenna alisarja",
|
||||||
|
"LabelExportOPML": "Vie OPML",
|
||||||
"LabelFeedURL": "Syötteen URL",
|
"LabelFeedURL": "Syötteen URL",
|
||||||
|
"LabelFetchingMetadata": "Noudetaan kuvailutietoja",
|
||||||
"LabelFile": "Tiedosto",
|
"LabelFile": "Tiedosto",
|
||||||
"LabelFileBirthtime": "Tiedoston syntymäaika",
|
"LabelFileBirthtime": "Tiedoston syntymäaika",
|
||||||
"LabelFileBornDate": "Syntynyt {0}",
|
"LabelFileBornDate": "Syntynyt {0}",
|
||||||
"LabelFileModified": "Muutettu tiedosto",
|
"LabelFileModified": "Muutettu tiedosto",
|
||||||
"LabelFileModifiedDate": "Muokattu {0}",
|
"LabelFileModifiedDate": "Muokattu {0}",
|
||||||
"LabelFilename": "Tiedostonimi",
|
"LabelFilename": "Tiedostonimi",
|
||||||
|
"LabelFilterByUser": "Suodata käyttäjien perusteella",
|
||||||
"LabelFindEpisodes": "Etsi jaksoja",
|
"LabelFindEpisodes": "Etsi jaksoja",
|
||||||
"LabelFinished": "Valmis",
|
"LabelFinished": "Valmis",
|
||||||
"LabelFolder": "Kansio",
|
"LabelFolder": "Kansio",
|
||||||
"LabelFolders": "Kansiot",
|
"LabelFolders": "Kansiot",
|
||||||
|
"LabelFontBold": "Lihavoitu",
|
||||||
|
"LabelFontBoldness": "Kirjasintyyppien lihavointi",
|
||||||
|
"LabelFontFamily": "Kirjasinperhe",
|
||||||
|
"LabelFontItalic": "Kursiivi",
|
||||||
|
"LabelFontScale": "Kirjasintyyppien skaalautuminen",
|
||||||
|
"LabelFontStrikethrough": "Yliviivattu",
|
||||||
|
"LabelFull": "Täynnä",
|
||||||
"LabelGenre": "Lajityyppi",
|
"LabelGenre": "Lajityyppi",
|
||||||
"LabelGenres": "Lajityypit",
|
"LabelGenres": "Lajityypit",
|
||||||
|
"LabelHighestPriority": "Tärkein",
|
||||||
"LabelHost": "Isäntä",
|
"LabelHost": "Isäntä",
|
||||||
"LabelHours": "Tunnit",
|
"LabelHours": "Tunnit",
|
||||||
|
"LabelIcon": "Kuvake",
|
||||||
|
"LabelImageURLFromTheWeb": "Kuvan verkko-osoite",
|
||||||
"LabelInProgress": "Kesken",
|
"LabelInProgress": "Kesken",
|
||||||
"LabelIncomplete": "Keskeneräinen",
|
"LabelIncomplete": "Keskeneräinen",
|
||||||
|
"LabelInterval": "Väli",
|
||||||
|
"LabelIntervalCustomDailyWeekly": "Mukautettu päivittäinen/viikoittainen",
|
||||||
"LabelIntervalEvery12Hours": "12 tunnin välein",
|
"LabelIntervalEvery12Hours": "12 tunnin välein",
|
||||||
"LabelIntervalEvery15Minutes": "15 minuutin välein",
|
"LabelIntervalEvery15Minutes": "15 minuutin välein",
|
||||||
"LabelIntervalEvery2Hours": "2 tunnin välein",
|
"LabelIntervalEvery2Hours": "2 tunnin välein",
|
||||||
@@ -320,18 +360,34 @@
|
|||||||
"LabelLanguages": "Kielet",
|
"LabelLanguages": "Kielet",
|
||||||
"LabelLastBookAdded": "Viimeisin lisätty kirja",
|
"LabelLastBookAdded": "Viimeisin lisätty kirja",
|
||||||
"LabelLastBookUpdated": "Viimeisin päivitetty kirja",
|
"LabelLastBookUpdated": "Viimeisin päivitetty kirja",
|
||||||
|
"LabelLastSeen": "Nähty viimeksi",
|
||||||
"LabelLastUpdate": "Viimeisin päivitys",
|
"LabelLastUpdate": "Viimeisin päivitys",
|
||||||
|
"LabelLayout": "Asettelu",
|
||||||
|
"LabelLayoutSinglePage": "Yksi sivu",
|
||||||
|
"LabelLayoutSplitPage": "Jaa sivu osiin",
|
||||||
|
"LabelLess": "Vähemmän",
|
||||||
"LabelLibrariesAccessibleToUser": "Käyttäjälle saatavilla olevat kirjastot",
|
"LabelLibrariesAccessibleToUser": "Käyttäjälle saatavilla olevat kirjastot",
|
||||||
"LabelLibrary": "Kirjasto",
|
"LabelLibrary": "Kirjasto",
|
||||||
"LabelLibraryName": "Kirjaston nimi",
|
"LabelLibraryName": "Kirjaston nimi",
|
||||||
|
"LabelLimit": "Raja",
|
||||||
"LabelLineSpacing": "Riviväli",
|
"LabelLineSpacing": "Riviväli",
|
||||||
"LabelListenAgain": "Kuuntele uudelleen",
|
"LabelListenAgain": "Kuuntele uudelleen",
|
||||||
|
"LabelLogLevelInfo": "Tiedot",
|
||||||
|
"LabelLogLevelWarn": "Varoita",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Etsi uusia jaksoja tämän päivämäärän jälkeen",
|
"LabelLookForNewEpisodesAfterDate": "Etsi uusia jaksoja tämän päivämäärän jälkeen",
|
||||||
|
"LabelLowestPriority": "Vähiten tärkeä",
|
||||||
"LabelMaxEpisodesToDownload": "Jaksojen maksimilatausmäärä. 0 poistaa rajoituksen.",
|
"LabelMaxEpisodesToDownload": "Jaksojen maksimilatausmäärä. 0 poistaa rajoituksen.",
|
||||||
|
"LabelMaxEpisodesToKeep": "Säilytettävien jaksojen enimmäismäärä",
|
||||||
|
"LabelMaxEpisodesToKeepHelp": "Jos arvona on 0, enimmäisrajaa ei ole. Kun uusi jakso ladataan automaattisesti, vanhin jakso poistetaan, jos jaksoja on yli X. Tämä poistaa vain yhden jakson uutta latauskertaa kohden.",
|
||||||
"LabelMediaPlayer": "Mediasoitin",
|
"LabelMediaPlayer": "Mediasoitin",
|
||||||
"LabelMediaType": "Mediatyyppi",
|
"LabelMediaType": "Mediatyyppi",
|
||||||
|
"LabelMetaTag": "Metatunniste",
|
||||||
|
"LabelMetaTags": "Metatunnisteet",
|
||||||
|
"LabelMetadataOrderOfPrecedenceDescription": "Tärkeämmät kuvailutietojen lähteet ohittavat vähemmän tärkeät lähteet",
|
||||||
|
"LabelMetadataProvider": "Kuvailutietojen toimittaja",
|
||||||
"LabelMinute": "Minuutti",
|
"LabelMinute": "Minuutti",
|
||||||
"LabelMinutes": "Minuutit",
|
"LabelMinutes": "Minuutit",
|
||||||
|
"LabelMissing": "Puuttuu",
|
||||||
"LabelMissingEbook": "Ei e-kirjaa",
|
"LabelMissingEbook": "Ei e-kirjaa",
|
||||||
"LabelMore": "Lisää",
|
"LabelMore": "Lisää",
|
||||||
"LabelMoreInfo": "Lisätietoja",
|
"LabelMoreInfo": "Lisätietoja",
|
||||||
@@ -343,31 +399,61 @@
|
|||||||
"LabelNewestAuthors": "Uusimmat kirjailijat",
|
"LabelNewestAuthors": "Uusimmat kirjailijat",
|
||||||
"LabelNewestEpisodes": "Uusimmat jaksot",
|
"LabelNewestEpisodes": "Uusimmat jaksot",
|
||||||
"LabelNextBackupDate": "Seuraava varmuuskopiointipäivämäärä",
|
"LabelNextBackupDate": "Seuraava varmuuskopiointipäivämäärä",
|
||||||
|
"LabelNextScheduledRun": "Seuraava ajastettu suorittaminen",
|
||||||
|
"LabelNoCustomMetadataProviders": "Ei mukautettuja kuvailutietojen toimittajia",
|
||||||
|
"LabelNoEpisodesSelected": "Jaksoja ei ole valittu",
|
||||||
|
"LabelNotFinished": "Ei valmis",
|
||||||
"LabelNotStarted": "Ei aloitettu",
|
"LabelNotStarted": "Ei aloitettu",
|
||||||
|
"LabelNotes": "Muistiinpanoja",
|
||||||
|
"LabelNotificationAvailableVariables": "Käytettävissä olevat muuttujat",
|
||||||
|
"LabelNotificationEvent": "Ilmoitustapahtuma",
|
||||||
|
"LabelNotificationsMaxFailedAttempts": "Epäonnistuneiden yritysten enimmäismäärä",
|
||||||
|
"LabelNotificationsMaxFailedAttemptsHelp": "Ilmoitukset poistetaan käytöstä, jos niiden lähettäminen epäonnistuu näin monta kertaa",
|
||||||
|
"LabelNotificationsMaxQueueSize": "Ilmoitustapahtumajonon enimmäispituus",
|
||||||
|
"LabelNumberOfBooks": "Kirjojen määrä",
|
||||||
|
"LabelNumberOfEpisodes": "Jaksojen määrä",
|
||||||
|
"LabelOverwrite": "Korvaa",
|
||||||
|
"LabelPaginationPageXOfY": "Sivu {0}/{1}",
|
||||||
"LabelPassword": "Salasana",
|
"LabelPassword": "Salasana",
|
||||||
"LabelPath": "Polku",
|
"LabelPath": "Polku",
|
||||||
"LabelPermanent": "Pysyvä",
|
"LabelPermanent": "Pysyvä",
|
||||||
"LabelPermissionsAccessAllLibraries": "Käyttöoikeudet kaikkiin kirjastoihin",
|
"LabelPermissionsAccessAllLibraries": "Käyttöoikeudet kaikkiin kirjastoihin",
|
||||||
|
"LabelPermissionsAccessAllTags": "Saa käyttää kaikkia tunnisteita",
|
||||||
|
"LabelPermissionsAccessExplicitContent": "Saa käyttää aikuisille tarkoitettua sisältöä",
|
||||||
"LabelPermissionsDelete": "Voi poistaa",
|
"LabelPermissionsDelete": "Voi poistaa",
|
||||||
"LabelPermissionsDownload": "Voi ladata",
|
"LabelPermissionsDownload": "Voi ladata",
|
||||||
"LabelPermissionsUpdate": "Voi päivittää",
|
"LabelPermissionsUpdate": "Voi päivittää",
|
||||||
"LabelPermissionsUpload": "Voi lähettää",
|
"LabelPermissionsUpload": "Voi lähettää",
|
||||||
|
"LabelPlayMethod": "Toistotapa",
|
||||||
|
"LabelPlayerChapterNumberMarker": "{0}/{1}",
|
||||||
"LabelPlaylists": "Soittolistat",
|
"LabelPlaylists": "Soittolistat",
|
||||||
"LabelPodcast": "Podcast",
|
"LabelPodcast": "Podcast",
|
||||||
|
"LabelPodcastSearchRegion": "Podcastien hakualue",
|
||||||
|
"LabelPodcastType": "Podcastien tyyppi",
|
||||||
"LabelPodcasts": "Podcastit",
|
"LabelPodcasts": "Podcastit",
|
||||||
"LabelPort": "Portti",
|
"LabelPort": "Portti",
|
||||||
|
"LabelPrimaryEbook": "Ensisijainen e-kirja",
|
||||||
|
"LabelProgress": "Edistyminen",
|
||||||
|
"LabelProvider": "Toimittaja",
|
||||||
|
"LabelPubDate": "Julkaisupäivä",
|
||||||
"LabelPublishYear": "Julkaisuvuosi",
|
"LabelPublishYear": "Julkaisuvuosi",
|
||||||
|
"LabelPublishedDate": "Julkaistu {0}",
|
||||||
"LabelPublisher": "Julkaisija",
|
"LabelPublisher": "Julkaisija",
|
||||||
"LabelPublishers": "Julkaisijat",
|
"LabelPublishers": "Julkaisijat",
|
||||||
"LabelRSSFeedPreventIndexing": "Estä indeksointi",
|
"LabelRSSFeedPreventIndexing": "Estä indeksointi",
|
||||||
"LabelRandomly": "Satunnaisesti",
|
"LabelRandomly": "Satunnaisesti",
|
||||||
"LabelRead": "Lue",
|
"LabelRead": "Lue",
|
||||||
"LabelReadAgain": "Lue uudelleen",
|
"LabelReadAgain": "Lue uudelleen",
|
||||||
|
"LabelReadEbookWithoutProgress": "Lue e-kirja tallentamatta edistymistietoja",
|
||||||
"LabelRecentSeries": "Viimeisimmät sarjat",
|
"LabelRecentSeries": "Viimeisimmät sarjat",
|
||||||
"LabelRecentlyAdded": "Viimeeksi lisätyt",
|
"LabelRecentlyAdded": "Viimeeksi lisätyt",
|
||||||
"LabelRecommended": "Suositeltu",
|
"LabelRecommended": "Suositeltu",
|
||||||
|
"LabelRedo": "Tee uudelleen",
|
||||||
"LabelRegion": "Alue",
|
"LabelRegion": "Alue",
|
||||||
|
"LabelReleaseDate": "Julkaisupäivä",
|
||||||
"LabelRemoveCover": "Poista kansikuva",
|
"LabelRemoveCover": "Poista kansikuva",
|
||||||
|
"LabelRowsPerPage": "Rivejä sivulla",
|
||||||
|
"LabelSearchTerm": "Hakusana",
|
||||||
"LabelSeason": "Kausi",
|
"LabelSeason": "Kausi",
|
||||||
"LabelSelectAll": "Valitse kaikki",
|
"LabelSelectAll": "Valitse kaikki",
|
||||||
"LabelSelectUsers": "Valitse käyttäjät",
|
"LabelSelectUsers": "Valitse käyttäjät",
|
||||||
|
|||||||
+14
-2
@@ -51,7 +51,7 @@
|
|||||||
"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": "D’accord",
|
"ButtonOk": "D'accord",
|
||||||
"ButtonOpenFeed": "Ouvrir le flux",
|
"ButtonOpenFeed": "Ouvrir le flux",
|
||||||
"ButtonOpenManager": "Ouvrir le gestionnaire",
|
"ButtonOpenManager": "Ouvrir le gestionnaire",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
@@ -88,6 +88,8 @@
|
|||||||
"ButtonSaveTracklist": "Sauvegarder la liste de lecture",
|
"ButtonSaveTracklist": "Sauvegarder la liste de lecture",
|
||||||
"ButtonScan": "Analyser",
|
"ButtonScan": "Analyser",
|
||||||
"ButtonScanLibrary": "Analyser la bibliothèque",
|
"ButtonScanLibrary": "Analyser la bibliothèque",
|
||||||
|
"ButtonScrollLeft": "Défiler vers la gauche",
|
||||||
|
"ButtonScrollRight": "Défiler vers la droite",
|
||||||
"ButtonSearch": "Chercher",
|
"ButtonSearch": "Chercher",
|
||||||
"ButtonSelectFolderPath": "Sélectionner le chemin du dossier",
|
"ButtonSelectFolderPath": "Sélectionner le chemin du dossier",
|
||||||
"ButtonSeries": "Séries",
|
"ButtonSeries": "Séries",
|
||||||
@@ -190,6 +192,7 @@
|
|||||||
"HeaderSettingsExperimental": "Fonctionnalités expérimentales",
|
"HeaderSettingsExperimental": "Fonctionnalités expérimentales",
|
||||||
"HeaderSettingsGeneral": "Général",
|
"HeaderSettingsGeneral": "Général",
|
||||||
"HeaderSettingsScanner": "Analyseur",
|
"HeaderSettingsScanner": "Analyseur",
|
||||||
|
"HeaderSettingsWebClient": "Client Web",
|
||||||
"HeaderSleepTimer": "Minuterie",
|
"HeaderSleepTimer": "Minuterie",
|
||||||
"HeaderStatsLargestItems": "Éléments les plus grands",
|
"HeaderStatsLargestItems": "Éléments les plus grands",
|
||||||
"HeaderStatsLongestItems": "Éléments les plus long (hrs)",
|
"HeaderStatsLongestItems": "Éléments les plus long (hrs)",
|
||||||
@@ -297,6 +300,7 @@
|
|||||||
"LabelDiscover": "Découvrir",
|
"LabelDiscover": "Découvrir",
|
||||||
"LabelDownload": "Téléchargement",
|
"LabelDownload": "Téléchargement",
|
||||||
"LabelDownloadNEpisodes": "Télécharger {0} épisode(s)",
|
"LabelDownloadNEpisodes": "Télécharger {0} épisode(s)",
|
||||||
|
"LabelDownloadable": "Téléchargeable",
|
||||||
"LabelDuration": "Durée",
|
"LabelDuration": "Durée",
|
||||||
"LabelDurationComparisonExactMatch": "(correspondance exacte)",
|
"LabelDurationComparisonExactMatch": "(correspondance exacte)",
|
||||||
"LabelDurationComparisonLonger": "({0} plus long)",
|
"LabelDurationComparisonLonger": "({0} plus long)",
|
||||||
@@ -459,7 +463,7 @@
|
|||||||
"LabelNotificationsMaxQueueSize": "Nombres de notifications maximum à mettre en attente",
|
"LabelNotificationsMaxQueueSize": "Nombres de notifications maximum à mettre en attente",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "La limite de notification est de un évènement par seconde. Les notifications seront ignorées si la file d’attente est à son maximum. Cela empêche un flot trop important.",
|
"LabelNotificationsMaxQueueSizeHelp": "La limite de notification est de un évènement par seconde. Les notifications seront ignorées si la file d’attente est à son maximum. Cela empêche un flot trop important.",
|
||||||
"LabelNumberOfBooks": "Nombre de livres",
|
"LabelNumberOfBooks": "Nombre de livres",
|
||||||
"LabelNumberOfEpisodes": "Nombre d’épisodes",
|
"LabelNumberOfEpisodes": "Nombre d'épisodes",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Nom de la demande OpenID qui contient des autorisations avancées pour les actions de l’utilisateur dans l’application, qui s’appliqueront à des rôles autres que celui d’administrateur (<b>s’il est configuré</b>). Si la demande est absente de la réponse, l’accès à ABS sera refusé. Si une seule option est manquante, elle sera considérée comme <code>false</code>. Assurez-vous que la demande du fournisseur d’identité correspond à la structure attendue :",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Nom de la demande OpenID qui contient des autorisations avancées pour les actions de l’utilisateur dans l’application, qui s’appliqueront à des rôles autres que celui d’administrateur (<b>s’il est configuré</b>). Si la demande est absente de la réponse, l’accès à ABS sera refusé. Si une seule option est manquante, elle sera considérée comme <code>false</code>. Assurez-vous que la demande du fournisseur d’identité correspond à la structure attendue :",
|
||||||
"LabelOpenIDClaims": "Laissez les options suivantes vides pour désactiver l’attribution avancée de groupes et d’autorisations, en attribuant alors automatiquement le groupe « Utilisateur ».",
|
"LabelOpenIDClaims": "Laissez les options suivantes vides pour désactiver l’attribution avancée de groupes et d’autorisations, en attribuant alors automatiquement le groupe « Utilisateur ».",
|
||||||
"LabelOpenIDGroupClaimDescription": "Nom de la demande OpenID qui contient une liste des groupes de l’utilisateur. Communément appelé <code>groups</code>. <b>Si elle est configurée</b>, l’application attribuera automatiquement des rôles en fonction de l’appartenance de l’utilisateur à un groupe, à condition que ces groupes soient nommés -sensible à la casse- tel que « admin », « user » ou « guest » dans la demande. Elle doit contenir une liste, et si un utilisateur appartient à plusieurs groupes, l’application attribuera le rôle correspondant au niveau d’accès le plus élevé. Si aucun groupe ne correspond, l’accès sera refusé.",
|
"LabelOpenIDGroupClaimDescription": "Nom de la demande OpenID qui contient une liste des groupes de l’utilisateur. Communément appelé <code>groups</code>. <b>Si elle est configurée</b>, l’application attribuera automatiquement des rôles en fonction de l’appartenance de l’utilisateur à un groupe, à condition que ces groupes soient nommés -sensible à la casse- tel que « admin », « user » ou « guest » dans la demande. Elle doit contenir une liste, et si un utilisateur appartient à plusieurs groupes, l’application attribuera le rôle correspondant au niveau d’accès le plus élevé. Si aucun groupe ne correspond, l’accès sera refusé.",
|
||||||
@@ -542,6 +546,7 @@
|
|||||||
"LabelServerYearReview": "Bilan de l’année du serveur ({0})",
|
"LabelServerYearReview": "Bilan de l’année du serveur ({0})",
|
||||||
"LabelSetEbookAsPrimary": "Définir comme principale",
|
"LabelSetEbookAsPrimary": "Définir comme principale",
|
||||||
"LabelSetEbookAsSupplementary": "Définir comme supplémentaire",
|
"LabelSetEbookAsSupplementary": "Définir comme supplémentaire",
|
||||||
|
"LabelSettingsAllowIframe": "Autoriser l’intégration dans une iframe",
|
||||||
"LabelSettingsAudiobooksOnly": "Livres audios seulement",
|
"LabelSettingsAudiobooksOnly": "Livres audios seulement",
|
||||||
"LabelSettingsAudiobooksOnlyHelp": "L’activation de ce paramètre ignorera les fichiers de type « livre numériques », sauf s’ils se trouvent dans un dossier spécifique , auquel cas ils seront définis comme des livres numériques supplémentaires",
|
"LabelSettingsAudiobooksOnlyHelp": "L’activation de ce paramètre ignorera les fichiers de type « livre numériques », sauf s’ils se trouvent dans un dossier spécifique , auquel cas ils seront définis comme des livres numériques supplémentaires",
|
||||||
"LabelSettingsBookshelfViewHelp": "Interface skeumorphique avec étagères en bois",
|
"LabelSettingsBookshelfViewHelp": "Interface skeumorphique avec étagères en bois",
|
||||||
@@ -584,6 +589,7 @@
|
|||||||
"LabelSettingsStoreMetadataWithItemHelp": "Par défaut, les fichiers de métadonnées sont stockés dans /metadata/items. En activant ce paramètre, les fichiers de métadonnées seront stockés dans les dossiers des éléments de votre bibliothèque",
|
"LabelSettingsStoreMetadataWithItemHelp": "Par défaut, les fichiers de métadonnées sont stockés dans /metadata/items. En activant ce paramètre, les fichiers de métadonnées seront stockés dans les dossiers des éléments de votre bibliothèque",
|
||||||
"LabelSettingsTimeFormat": "Format d’heure",
|
"LabelSettingsTimeFormat": "Format d’heure",
|
||||||
"LabelShare": "Partager",
|
"LabelShare": "Partager",
|
||||||
|
"LabelShareDownloadableHelp": "Permet aux utilisateurs de télécharger un fichier ZIP de l'élément de la bibliothèque.",
|
||||||
"LabelShareOpen": "Ouvrir le partage",
|
"LabelShareOpen": "Ouvrir le partage",
|
||||||
"LabelShareURL": "Partager l’URL",
|
"LabelShareURL": "Partager l’URL",
|
||||||
"LabelShowAll": "Tout afficher",
|
"LabelShowAll": "Tout afficher",
|
||||||
@@ -681,6 +687,8 @@
|
|||||||
"LabelViewPlayerSettings": "Afficher les paramètres du lecteur",
|
"LabelViewPlayerSettings": "Afficher les paramètres du lecteur",
|
||||||
"LabelViewQueue": "Afficher la liste de lecture",
|
"LabelViewQueue": "Afficher la liste de lecture",
|
||||||
"LabelVolume": "Volume",
|
"LabelVolume": "Volume",
|
||||||
|
"LabelWebRedirectURLsDescription": "Autoriser ces URL dans votre fournisseur OAuth pour permettre la redirection vers l'application web après la connexion :",
|
||||||
|
"LabelWebRedirectURLsSubfolder": "Sous-dossier pour les URL de redirection",
|
||||||
"LabelWeekdaysToRun": "Jours de la semaine à exécuter",
|
"LabelWeekdaysToRun": "Jours de la semaine à exécuter",
|
||||||
"LabelXBooks": "{0} livres",
|
"LabelXBooks": "{0} livres",
|
||||||
"LabelXItems": "{0} éléments",
|
"LabelXItems": "{0} éléments",
|
||||||
@@ -750,6 +758,7 @@
|
|||||||
"MessageConfirmResetProgress": "Êtes-vous sûr·e de vouloir réinitialiser votre progression ?",
|
"MessageConfirmResetProgress": "Êtes-vous sûr·e de vouloir réinitialiser votre progression ?",
|
||||||
"MessageConfirmSendEbookToDevice": "Êtes-vous sûr·e 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·e de vouloir dissocier cet utilisateur d’OpenID ?",
|
"MessageConfirmUnlinkOpenId": "Êtes-vous sûr·e de vouloir dissocier cet utilisateur d’OpenID ?",
|
||||||
|
"MessageDaysListenedInTheLastYear": "{0} jours écoutés l'an dernier",
|
||||||
"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 !",
|
||||||
@@ -828,6 +837,7 @@
|
|||||||
"MessageResetChaptersConfirm": "Êtes-vous sûr·e de vouloir réinitialiser les chapitres et annuler les changements effectués ?",
|
"MessageResetChaptersConfirm": "Êtes-vous sûr·e de vouloir réinitialiser les chapitres et annuler les changements effectués ?",
|
||||||
"MessageRestoreBackupConfirm": "Êtes-vous sûr·e de vouloir restaurer la sauvegarde créée le",
|
"MessageRestoreBackupConfirm": "Êtes-vous sûr·e de vouloir restaurer la sauvegarde créée le",
|
||||||
"MessageRestoreBackupWarning": "Restaurer la sauvegarde écrasera la base de donnée située dans le dossier /config ainsi que les images sur /metadata/items et /metadata/authors.<br><br>Les sauvegardes ne touchent pas aux fichiers de la bibliothèque. Si vous avez activé le paramètre pour sauvegarder les métadonnées et les images de couverture dans le même dossier que les fichiers, ceux-ci ne ni sauvegardés, ni écrasés lors de la restauration.<br><br>Tous les clients utilisant votre serveur seront automatiquement mis à jour.",
|
"MessageRestoreBackupWarning": "Restaurer la sauvegarde écrasera la base de donnée située dans le dossier /config ainsi que les images sur /metadata/items et /metadata/authors.<br><br>Les sauvegardes ne touchent pas aux fichiers de la bibliothèque. Si vous avez activé le paramètre pour sauvegarder les métadonnées et les images de couverture dans le même dossier que les fichiers, ceux-ci ne ni sauvegardés, ni écrasés lors de la restauration.<br><br>Tous les clients utilisant votre serveur seront automatiquement mis à jour.",
|
||||||
|
"MessageScheduleLibraryScanNote": "Pour la plupart des utilisateurs, il est recommandé de laisser cette fonctionnalité désactivée et de maintenir le réglage du moniteur de dossier activé. Le moniteur de dossier détectera automatiquement les changements dans vos dossiers de bibliothèque. Le moniteur de dossier ne fonctionne pas pour chaque système de fichiers (comme NFS) afin que les scans de bibliothèques programmés puissent être utilisés à la place.",
|
||||||
"MessageSearchResultsFor": "Résultats de recherche pour",
|
"MessageSearchResultsFor": "Résultats de recherche pour",
|
||||||
"MessageSelected": "{0} sélectionnés",
|
"MessageSelected": "{0} sélectionnés",
|
||||||
"MessageServerCouldNotBeReached": "Serveur inaccessible",
|
"MessageServerCouldNotBeReached": "Serveur inaccessible",
|
||||||
@@ -954,6 +964,7 @@
|
|||||||
"ToastCollectionRemoveSuccess": "Collection supprimée",
|
"ToastCollectionRemoveSuccess": "Collection supprimée",
|
||||||
"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",
|
||||||
|
"ToastDateTimeInvalidOrIncomplete": "La date et l'heure sont invalides ou incomplètes",
|
||||||
"ToastDeleteFileFailed": "Échec de la suppression du fichier",
|
"ToastDeleteFileFailed": "Échec de la suppression du fichier",
|
||||||
"ToastDeleteFileSuccess": "Fichier supprimé",
|
"ToastDeleteFileSuccess": "Fichier supprimé",
|
||||||
"ToastDeviceAddFailed": "Échec de l’ajout de l’appareil",
|
"ToastDeviceAddFailed": "Échec de l’ajout de l’appareil",
|
||||||
@@ -1006,6 +1017,7 @@
|
|||||||
"ToastNewUserTagError": "Au moins une étiquette est requise",
|
"ToastNewUserTagError": "Au moins une étiquette est requise",
|
||||||
"ToastNewUserUsernameError": "Entrez un nom d’utilisateur",
|
"ToastNewUserUsernameError": "Entrez un nom d’utilisateur",
|
||||||
"ToastNoNewEpisodesFound": "Aucun nouvel épisode trouvé",
|
"ToastNoNewEpisodesFound": "Aucun nouvel épisode trouvé",
|
||||||
|
"ToastNoRSSFeed": "Le podcast n'a pas de flux RSS",
|
||||||
"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",
|
||||||
|
|||||||
+18
-15
@@ -51,7 +51,7 @@
|
|||||||
"ButtonNext": "Sljedeće",
|
"ButtonNext": "Sljedeće",
|
||||||
"ButtonNextChapter": "Sljedeće poglavlje",
|
"ButtonNextChapter": "Sljedeće poglavlje",
|
||||||
"ButtonNextItemInQueue": "Sljedeća stavka u redu",
|
"ButtonNextItemInQueue": "Sljedeća stavka u redu",
|
||||||
"ButtonOk": "OK",
|
"ButtonOk": "U redu",
|
||||||
"ButtonOpenFeed": "Otvori izvor",
|
"ButtonOpenFeed": "Otvori izvor",
|
||||||
"ButtonOpenManager": "Otvori Upravitelja",
|
"ButtonOpenManager": "Otvori Upravitelja",
|
||||||
"ButtonPause": "Pauziraj",
|
"ButtonPause": "Pauziraj",
|
||||||
@@ -367,7 +367,7 @@
|
|||||||
"LabelFull": "Cijeli",
|
"LabelFull": "Cijeli",
|
||||||
"LabelGenre": "Žanr",
|
"LabelGenre": "Žanr",
|
||||||
"LabelGenres": "Žanrovi",
|
"LabelGenres": "Žanrovi",
|
||||||
"LabelHardDeleteFile": "Obriši datoteku zauvijek",
|
"LabelHardDeleteFile": "Izbriši datoteku zauvijek",
|
||||||
"LabelHasEbook": "Ima e-knjigu",
|
"LabelHasEbook": "Ima e-knjigu",
|
||||||
"LabelHasSupplementaryEbook": "Ima dopunsku e-knjigu",
|
"LabelHasSupplementaryEbook": "Ima dopunsku e-knjigu",
|
||||||
"LabelHideSubtitles": "Skrij podnaslove",
|
"LabelHideSubtitles": "Skrij podnaslove",
|
||||||
@@ -717,15 +717,15 @@
|
|||||||
"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": "Sigurno želite izbrisati sigurnosnu kopiju za {0}?",
|
||||||
"MessageConfirmDeleteDevice": "Sigurno želite izbrisati e-čitač \"{0}\"?",
|
"MessageConfirmDeleteDevice": "Sigurno želite izbrisati e-čitač \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Ovo će izbrisati datoteke s datotečnog sustava. Jeste li sigurni?",
|
"MessageConfirmDeleteFile": "Ovo će izbrisati datoteke s datotečnog sustava. Jeste li sigurni?",
|
||||||
"MessageConfirmDeleteLibrary": "Sigurno želite trajno obrisati knjižnicu \"{0}\"?",
|
"MessageConfirmDeleteLibrary": "Sigurno želite trajno izbrisati knjižnicu \"{0}\"?",
|
||||||
"MessageConfirmDeleteLibraryItem": "Ovo će izbrisati knjižničku stavku iz datoteke i vašeg datotečnog sustava. Jeste li sigurni?",
|
"MessageConfirmDeleteLibraryItem": "Ovo će izbrisati knjižničku stavku iz datoteke i vašeg datotečnog sustava. Jeste li sigurni?",
|
||||||
"MessageConfirmDeleteLibraryItems": "Ovo će izbrisati {0} knjižničkih stavki iz baze podataka i datotečnog sustava. Jeste li sigurni?",
|
"MessageConfirmDeleteLibraryItems": "Ovo će izbrisati {0} knjižničkih stavki iz baze podataka i datotečnog sustava. Jeste li sigurni?",
|
||||||
"MessageConfirmDeleteMetadataProvider": "Sigurno želite izbrisati prilagođenog pružatelja meta-podataka \"{0}\"?",
|
"MessageConfirmDeleteMetadataProvider": "Sigurno želite izbrisati prilagođenog pružatelja meta-podataka \"{0}\"?",
|
||||||
"MessageConfirmDeleteNotification": "Sigurno želite izbrisati ovu obavijest?",
|
"MessageConfirmDeleteNotification": "Sigurno želite izbrisati ovu obavijest?",
|
||||||
"MessageConfirmDeleteSession": "Sigurno želite obrisati ovu sesiju?",
|
"MessageConfirmDeleteSession": "Sigurno želite izbrisati ovu sesiju?",
|
||||||
"MessageConfirmEmbedMetadataInAudioFiles": "Sigurno želite ugraditi meta-podatke u {0} zvučnih datoteka?",
|
"MessageConfirmEmbedMetadataInAudioFiles": "Sigurno želite ugraditi meta-podatke u {0} zvučnih datoteka?",
|
||||||
"MessageConfirmForceReScan": "Sigurno želite ponovno pokrenuti skeniranje?",
|
"MessageConfirmForceReScan": "Sigurno želite ponovno pokrenuti skeniranje?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Sigurno želite označiti sve nastavke dovršenima?",
|
"MessageConfirmMarkAllEpisodesFinished": "Sigurno želite označiti sve nastavke dovršenima?",
|
||||||
@@ -756,7 +756,7 @@
|
|||||||
"MessageConfirmRenameTagMergeNote": "Napomena: Ova oznaka već postoji, stoga će biti pripojena.",
|
"MessageConfirmRenameTagMergeNote": "Napomena: Ova oznaka već postoji, stoga će biti pripojena.",
|
||||||
"MessageConfirmRenameTagWarning": "Pažnja! Slična oznaka s drugačijim velikim i malim slovima već postoji \"{0}\".",
|
"MessageConfirmRenameTagWarning": "Pažnja! Slična oznaka s drugačijim velikim i malim slovima već postoji \"{0}\".",
|
||||||
"MessageConfirmResetProgress": "Sigurno želite resetirati napredak?",
|
"MessageConfirmResetProgress": "Sigurno želite resetirati napredak?",
|
||||||
"MessageConfirmSendEbookToDevice": "Sigurno želite poslati {0} e-knjiga/u \"{1}\" na uređaj \"{2}\"?",
|
"MessageConfirmSendEbookToDevice": "Sigurno želite poslati {0} e-knjigu \"{1}\" na uređaj \"{2}\"?",
|
||||||
"MessageConfirmUnlinkOpenId": "Sigurno želite odspojiti ovog korisnika s OpenID-ja?",
|
"MessageConfirmUnlinkOpenId": "Sigurno želite odspojiti ovog korisnika s OpenID-ja?",
|
||||||
"MessageDaysListenedInTheLastYear": "{0} dana slušanja u posljednjih godinu dana",
|
"MessageDaysListenedInTheLastYear": "{0} dana slušanja u posljednjih godinu dana",
|
||||||
"MessageDownloadingEpisode": "Preuzimam nastavak",
|
"MessageDownloadingEpisode": "Preuzimam nastavak",
|
||||||
@@ -832,11 +832,12 @@
|
|||||||
"MessageRemoveChapter": "Ukloni poglavlje",
|
"MessageRemoveChapter": "Ukloni poglavlje",
|
||||||
"MessageRemoveEpisodes": "Ukloni {0} nastavaka",
|
"MessageRemoveEpisodes": "Ukloni {0} nastavaka",
|
||||||
"MessageRemoveFromPlayerQueue": "Ukloni iz redoslijeda izvođenja",
|
"MessageRemoveFromPlayerQueue": "Ukloni iz redoslijeda izvođenja",
|
||||||
"MessageRemoveUserWarning": "Sigurno želite trajno obrisati korisnika \"{0}\"?",
|
"MessageRemoveUserWarning": "Sigurno želite trajno izbrisati korisnika \"{0}\"?",
|
||||||
"MessageReportBugsAndContribute": "Prijavite pogreške, zatražite funkcionalnosti i doprinesite na",
|
"MessageReportBugsAndContribute": "Prijavite pogreške, zatražite funkcionalnosti i doprinesite na",
|
||||||
"MessageResetChaptersConfirm": "Sigurno želite vratiti poglavlja na prethodno stanje i poništiti učinjene promjene?",
|
"MessageResetChaptersConfirm": "Sigurno želite vratiti poglavlja na prethodno stanje i poništiti učinjene promjene?",
|
||||||
"MessageRestoreBackupConfirm": "Sigurno želite vratiti sigurnosnu kopiju izrađenu",
|
"MessageRestoreBackupConfirm": "Sigurno želite vratiti sigurnosnu kopiju izrađenu",
|
||||||
"MessageRestoreBackupWarning": "Vraćanjem sigurnosne kopije prepisat ćete cijelu bazu podataka koja se nalazi u /config i slike naslovnice u /metadata/items i /metadata/authors.<br /><br />Sigurnosne kopije ne mijenjaju datoteke koje se nalaze u mapama vaših knjižnica. Ako ste u postavkama poslužitelja uključili mogućnost spremanja naslovnica i meta-podataka u mape knjižnice, te se datoteke neće niti sigurnosno pohraniti niti prepisati. <br /><br />Svi klijenti koji se spajaju na vaš poslužitelj automatski će se osvježiti.",
|
"MessageRestoreBackupWarning": "Vraćanjem sigurnosne kopije prepisat ćete cijelu bazu podataka koja se nalazi u /config i slike naslovnice u /metadata/items i /metadata/authors.<br /><br />Sigurnosne kopije ne mijenjaju datoteke koje se nalaze u mapama vaših knjižnica. Ako ste u postavkama poslužitelja uključili mogućnost spremanja naslovnica i meta-podataka u mape knjižnice, te se datoteke neće niti sigurnosno pohraniti niti prepisati. <br /><br />Svi klijenti koji se spajaju na vaš poslužitelj automatski će se osvježiti.",
|
||||||
|
"MessageScheduleLibraryScanNote": "Za većinu korisnika se preporučuje ostaviti ovu funkciju deaktiviranom i ostaviti postavku promatrača mape aktiviranom. Promatrač mapa će automatski otkriti promjene u mapama vaše knjižnice. Promatrač mapa ne radi na svakom datotečnom sustavu (kao što je NFS) pa se umjesto njega mogu koristiti planirana pretraživanja knjižnice.",
|
||||||
"MessageSearchResultsFor": "Rezultati pretrage za",
|
"MessageSearchResultsFor": "Rezultati pretrage za",
|
||||||
"MessageSelected": "{0} odabrano",
|
"MessageSelected": "{0} odabrano",
|
||||||
"MessageServerCouldNotBeReached": "Nije moguće pristupiti poslužitelju",
|
"MessageServerCouldNotBeReached": "Nije moguće pristupiti poslužitelju",
|
||||||
@@ -912,7 +913,7 @@
|
|||||||
"StatsBooksFinished": "knjiga dovršeno",
|
"StatsBooksFinished": "knjiga dovršeno",
|
||||||
"StatsBooksFinishedThisYear": "Neke knjige dovršene ove godine…",
|
"StatsBooksFinishedThisYear": "Neke knjige dovršene ove godine…",
|
||||||
"StatsBooksListenedTo": "knjiga slušano",
|
"StatsBooksListenedTo": "knjiga slušano",
|
||||||
"StatsCollectionGrewTo": "Vaša zbirka knjiga narasla je na…",
|
"StatsCollectionGrewTo": "Vaša je zbirka knjiga narasla na…",
|
||||||
"StatsSessions": "sesija",
|
"StatsSessions": "sesija",
|
||||||
"StatsSpentListening": "provedeno u slušanju",
|
"StatsSpentListening": "provedeno u slušanju",
|
||||||
"StatsTopAuthor": "NAJPOPULARNIJI AUTOR",
|
"StatsTopAuthor": "NAJPOPULARNIJI AUTOR",
|
||||||
@@ -935,7 +936,7 @@
|
|||||||
"ToastAuthorUpdateSuccess": "Autor ažuriran",
|
"ToastAuthorUpdateSuccess": "Autor ažuriran",
|
||||||
"ToastAuthorUpdateSuccessNoImageFound": "Autor ažuriran (slika nije pronađena)",
|
"ToastAuthorUpdateSuccessNoImageFound": "Autor ažuriran (slika nije pronađena)",
|
||||||
"ToastBackupAppliedSuccess": "Sigurnosna kopija vraćena",
|
"ToastBackupAppliedSuccess": "Sigurnosna kopija vraćena",
|
||||||
"ToastBackupCreateFailed": "Neuspješno kreiranje backupa",
|
"ToastBackupCreateFailed": "Izrada sigurnosne kopije nije uspjela",
|
||||||
"ToastBackupCreateSuccess": "Izrađena sigurnosna kopija",
|
"ToastBackupCreateSuccess": "Izrađena sigurnosna kopija",
|
||||||
"ToastBackupDeleteFailed": "Brisanje sigurnosne kopije nije uspjelo",
|
"ToastBackupDeleteFailed": "Brisanje sigurnosne kopije nije uspjelo",
|
||||||
"ToastBackupDeleteSuccess": "Sigurnosna kopija izbrisana",
|
"ToastBackupDeleteSuccess": "Sigurnosna kopija izbrisana",
|
||||||
@@ -945,7 +946,7 @@
|
|||||||
"ToastBackupUploadFailed": "Učitavanje sigurnosne kopije nije uspjelo",
|
"ToastBackupUploadFailed": "Učitavanje sigurnosne kopije nije uspjelo",
|
||||||
"ToastBackupUploadSuccess": "Sigurnosna kopija učitana",
|
"ToastBackupUploadSuccess": "Sigurnosna kopija učitana",
|
||||||
"ToastBatchDeleteFailed": "Grupno brisanje nije uspjelo",
|
"ToastBatchDeleteFailed": "Grupno brisanje nije uspjelo",
|
||||||
"ToastBatchDeleteSuccess": "Grupno brisanje je uspješno dovršeno",
|
"ToastBatchDeleteSuccess": "Grupno brisanje je uspjelo",
|
||||||
"ToastBatchQuickMatchFailed": "Grupno brzo prepoznavanje nije uspjelo!",
|
"ToastBatchQuickMatchFailed": "Grupno brzo prepoznavanje nije uspjelo!",
|
||||||
"ToastBatchQuickMatchStarted": "Započelo je brzo prepoznavanje {0} knjiga!",
|
"ToastBatchQuickMatchStarted": "Započelo je brzo prepoznavanje {0} knjiga!",
|
||||||
"ToastBatchUpdateFailed": "Skupno ažuriranje nije uspjelo",
|
"ToastBatchUpdateFailed": "Skupno ažuriranje nije uspjelo",
|
||||||
@@ -963,6 +964,7 @@
|
|||||||
"ToastCollectionRemoveSuccess": "Zbirka izbrisana",
|
"ToastCollectionRemoveSuccess": "Zbirka izbrisana",
|
||||||
"ToastCollectionUpdateSuccess": "Zbirka ažurirana",
|
"ToastCollectionUpdateSuccess": "Zbirka ažurirana",
|
||||||
"ToastCoverUpdateFailed": "Ažuriranje naslovnice nije uspjelo",
|
"ToastCoverUpdateFailed": "Ažuriranje naslovnice nije uspjelo",
|
||||||
|
"ToastDateTimeInvalidOrIncomplete": "Datum i vrijeme su neispravni ili nepotpuni",
|
||||||
"ToastDeleteFileFailed": "Brisanje datoteke nije uspjelo",
|
"ToastDeleteFileFailed": "Brisanje datoteke nije uspjelo",
|
||||||
"ToastDeleteFileSuccess": "Datoteka izbrisana",
|
"ToastDeleteFileSuccess": "Datoteka izbrisana",
|
||||||
"ToastDeviceAddFailed": "Dodavanje uređaja nije uspjelo",
|
"ToastDeviceAddFailed": "Dodavanje uređaja nije uspjelo",
|
||||||
@@ -1015,6 +1017,7 @@
|
|||||||
"ToastNewUserTagError": "Potrebno je odabrati najmanje jednu oznaku",
|
"ToastNewUserTagError": "Potrebno je odabrati najmanje jednu oznaku",
|
||||||
"ToastNewUserUsernameError": "Upišite korisničko ime",
|
"ToastNewUserUsernameError": "Upišite korisničko ime",
|
||||||
"ToastNoNewEpisodesFound": "Nisu pronađeni novi nastavci",
|
"ToastNoNewEpisodesFound": "Nisu pronađeni novi nastavci",
|
||||||
|
"ToastNoRSSFeed": "Podcast nema RSS izvor",
|
||||||
"ToastNoUpdatesNecessary": "Ažuriranja nisu potrebna",
|
"ToastNoUpdatesNecessary": "Ažuriranja nisu potrebna",
|
||||||
"ToastNotificationCreateFailed": "Stvaranje obavijesti nije uspjelo",
|
"ToastNotificationCreateFailed": "Stvaranje obavijesti nije uspjelo",
|
||||||
"ToastNotificationDeleteFailed": "Brisanje obavijesti nije uspjelo",
|
"ToastNotificationDeleteFailed": "Brisanje obavijesti nije uspjelo",
|
||||||
@@ -1041,7 +1044,7 @@
|
|||||||
"ToastRSSFeedCloseFailed": "RSS izvor nije uspješno zatvoren",
|
"ToastRSSFeedCloseFailed": "RSS izvor nije uspješno zatvoren",
|
||||||
"ToastRSSFeedCloseSuccess": "RSS izvor zatvoren",
|
"ToastRSSFeedCloseSuccess": "RSS izvor zatvoren",
|
||||||
"ToastRemoveFailed": "Uklanjanje nije uspjelo",
|
"ToastRemoveFailed": "Uklanjanje nije uspjelo",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Neuspješno uklanjanje stavke iz zbirke",
|
"ToastRemoveItemFromCollectionFailed": "Uklanjanje stavke iz zbirke nije uspjelo",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "Stavka uklonjena iz zbirke",
|
"ToastRemoveItemFromCollectionSuccess": "Stavka uklonjena iz zbirke",
|
||||||
"ToastRemoveItemsWithIssuesFailed": "Uklanjanje knjižničkih stavki s problemima nije uspjelo",
|
"ToastRemoveItemsWithIssuesFailed": "Uklanjanje knjižničkih stavki s problemima nije uspjelo",
|
||||||
"ToastRemoveItemsWithIssuesSuccess": "Uspješno uklonjene knjižničke stavke s problemima",
|
"ToastRemoveItemsWithIssuesSuccess": "Uspješno uklonjene knjižničke stavke s problemima",
|
||||||
@@ -1058,8 +1061,8 @@
|
|||||||
"ToastSeriesUpdateSuccess": "Serijal uspješno ažuriran",
|
"ToastSeriesUpdateSuccess": "Serijal uspješno ažuriran",
|
||||||
"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": "Brisanje sesije nije uspjelo",
|
||||||
"ToastSessionDeleteSuccess": "Sesija obrisana",
|
"ToastSessionDeleteSuccess": "Sesija izbrisana",
|
||||||
"ToastSleepTimerDone": "Timer za spavanje istječe... zZzzZz",
|
"ToastSleepTimerDone": "Timer za spavanje istječe... zZzzZz",
|
||||||
"ToastSlugMustChange": "Slug sadrži nedozvoljene znakove",
|
"ToastSlugMustChange": "Slug sadrži nedozvoljene znakove",
|
||||||
"ToastSlugRequired": "Slug je obavezan",
|
"ToastSlugRequired": "Slug je obavezan",
|
||||||
@@ -1072,8 +1075,8 @@
|
|||||||
"ToastUnknownError": "Nepoznata pogreška",
|
"ToastUnknownError": "Nepoznata pogreška",
|
||||||
"ToastUnlinkOpenIdFailed": "Uklanjanje OpenID veze korisnika nije uspjelo",
|
"ToastUnlinkOpenIdFailed": "Uklanjanje OpenID veze korisnika nije uspjelo",
|
||||||
"ToastUnlinkOpenIdSuccess": "Korisnik odspojen od OpenID-ja",
|
"ToastUnlinkOpenIdSuccess": "Korisnik odspojen od OpenID-ja",
|
||||||
"ToastUserDeleteFailed": "Neuspješno brisanje korisnika",
|
"ToastUserDeleteFailed": "Brisanje korisnika nije uspjelo",
|
||||||
"ToastUserDeleteSuccess": "Korisnik obrisan",
|
"ToastUserDeleteSuccess": "Korisnik izbrisan",
|
||||||
"ToastUserPasswordChangeSuccess": "Zaporka je uspješno promijenjena",
|
"ToastUserPasswordChangeSuccess": "Zaporka je uspješno promijenjena",
|
||||||
"ToastUserPasswordMismatch": "Zaporke se ne podudaraju",
|
"ToastUserPasswordMismatch": "Zaporke se ne podudaraju",
|
||||||
"ToastUserPasswordMustChange": "Nova zaporka ne smije biti jednaka staroj",
|
"ToastUserPasswordMustChange": "Nova zaporka ne smije biti jednaka staroj",
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
"ButtonNext": "Következő",
|
"ButtonNext": "Következő",
|
||||||
"ButtonNextChapter": "Következő fejezet",
|
"ButtonNextChapter": "Következő fejezet",
|
||||||
"ButtonNextItemInQueue": "Következő elem a sorban",
|
"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",
|
||||||
@@ -837,6 +837,7 @@
|
|||||||
"MessageResetChaptersConfirm": "Biztosan alaphelyzetbe szeretné állítani a fejezeteket és visszavonni a módosításokat?",
|
"MessageResetChaptersConfirm": "Biztosan alaphelyzetbe szeretné állítani a fejezeteket és visszavonni a módosításokat?",
|
||||||
"MessageRestoreBackupConfirm": "Biztosan vissza szeretné állítani a biztonsági másolatot, amely ekkor készült:",
|
"MessageRestoreBackupConfirm": "Biztosan vissza szeretné állítani a biztonsági másolatot, amely ekkor készült:",
|
||||||
"MessageRestoreBackupWarning": "A biztonsági mentés visszaállítása felülírja az egész adatbázist, amely a /config mappában található, valamint a borítóképeket a /metadata/items és /metadata/authors mappákban.<br /><br />A biztonsági mentések nem módosítják a könyvtár mappáiban található fájlokat. Ha engedélyezte a szerverbeállításokat a borítóképek és a metaadatok könyvtármappákban való tárolására, akkor ezek nem kerülnek biztonsági mentésre vagy felülírásra.<br /><br />A szerver használó összes kliens automatikusan frissül.",
|
"MessageRestoreBackupWarning": "A biztonsági mentés visszaállítása felülírja az egész adatbázist, amely a /config mappában található, valamint a borítóképeket a /metadata/items és /metadata/authors mappákban.<br /><br />A biztonsági mentések nem módosítják a könyvtár mappáiban található fájlokat. Ha engedélyezte a szerverbeállításokat a borítóképek és a metaadatok könyvtármappákban való tárolására, akkor ezek nem kerülnek biztonsági mentésre vagy felülírásra.<br /><br />A szerver használó összes kliens automatikusan frissül.",
|
||||||
|
"MessageScheduleLibraryScanNote": "A legtöbb felhasználó számára ajánlott ezt a funkciót kikapcsolva hagyni, és engedélyezni a mappafigyelő beállítást. A mappafigyelő automatikusan észleli a könyvtári mappák változásait. A mappafigyelő nem működik minden fájlrendszernél (mint például az NFS), ezért helyette ütemezett könyvtárellenőrzéseket lehet használni.",
|
||||||
"MessageSearchResultsFor": "Keresési eredmények",
|
"MessageSearchResultsFor": "Keresési eredmények",
|
||||||
"MessageSelected": "{0} kiválasztva",
|
"MessageSelected": "{0} kiválasztva",
|
||||||
"MessageServerCouldNotBeReached": "A szervert nem lehet elérni",
|
"MessageServerCouldNotBeReached": "A szervert nem lehet elérni",
|
||||||
@@ -958,6 +959,7 @@
|
|||||||
"ToastCollectionRemoveSuccess": "Gyűjtemény eltávolítva",
|
"ToastCollectionRemoveSuccess": "Gyűjtemény eltávolítva",
|
||||||
"ToastCollectionUpdateSuccess": "Gyűjtemény frissítve",
|
"ToastCollectionUpdateSuccess": "Gyűjtemény frissítve",
|
||||||
"ToastCoverUpdateFailed": "A borító frissítése nem sikerült",
|
"ToastCoverUpdateFailed": "A borító frissítése nem sikerült",
|
||||||
|
"ToastDateTimeInvalidOrIncomplete": "A dátum és az időpont érvénytelen vagy hiányos",
|
||||||
"ToastDeleteFileFailed": "Nem sikerült törölni a fájlt",
|
"ToastDeleteFileFailed": "Nem sikerült törölni a fájlt",
|
||||||
"ToastDeleteFileSuccess": "Fájl törölve",
|
"ToastDeleteFileSuccess": "Fájl törölve",
|
||||||
"ToastDeviceAddFailed": "Nem sikerült eszközt hozzáadni",
|
"ToastDeviceAddFailed": "Nem sikerült eszközt hozzáadni",
|
||||||
@@ -1008,6 +1010,7 @@
|
|||||||
"ToastNewUserTagError": "Legalább egy címkét ki kell választania",
|
"ToastNewUserTagError": "Legalább egy címkét ki kell választania",
|
||||||
"ToastNewUserUsernameError": "Adjon meg egy felhasználónevet",
|
"ToastNewUserUsernameError": "Adjon meg egy felhasználónevet",
|
||||||
"ToastNoNewEpisodesFound": "Nincs új epizód",
|
"ToastNoNewEpisodesFound": "Nincs új epizód",
|
||||||
|
"ToastNoRSSFeed": "A podcastnak nincs RSS hírcsatornája",
|
||||||
"ToastNoUpdatesNecessary": "Nincs szükség frissítésre",
|
"ToastNoUpdatesNecessary": "Nincs szükség frissítésre",
|
||||||
"ToastNotificationCreateFailed": "Értesítés létrehozása sikertelen",
|
"ToastNotificationCreateFailed": "Értesítés létrehozása sikertelen",
|
||||||
"ToastNotificationDeleteFailed": "Értesítés törlése sikertelen",
|
"ToastNotificationDeleteFailed": "Értesítés törlése sikertelen",
|
||||||
|
|||||||
+12
-11
@@ -51,7 +51,7 @@
|
|||||||
"ButtonNext": "Prossimo",
|
"ButtonNext": "Prossimo",
|
||||||
"ButtonNextChapter": "Prossimo Capitolo",
|
"ButtonNextChapter": "Prossimo Capitolo",
|
||||||
"ButtonNextItemInQueue": "Elemento successivo in coda",
|
"ButtonNextItemInQueue": "Elemento successivo in coda",
|
||||||
"ButtonOk": "D’accordo",
|
"ButtonOk": "D'accordo",
|
||||||
"ButtonOpenFeed": "Apri il flusso",
|
"ButtonOpenFeed": "Apri il flusso",
|
||||||
"ButtonOpenManager": "Apri Manager",
|
"ButtonOpenManager": "Apri Manager",
|
||||||
"ButtonPause": "Pausa",
|
"ButtonPause": "Pausa",
|
||||||
@@ -289,32 +289,33 @@
|
|||||||
"LabelDescription": "Descrizione",
|
"LabelDescription": "Descrizione",
|
||||||
"LabelDeselectAll": "Deseleziona Tutto",
|
"LabelDeselectAll": "Deseleziona Tutto",
|
||||||
"LabelDevice": "Dispositivo",
|
"LabelDevice": "Dispositivo",
|
||||||
"LabelDeviceInfo": "Info Dispositivo",
|
"LabelDeviceInfo": "Info dispositivo",
|
||||||
"LabelDeviceIsAvailableTo": "Il dispositivo e disponibile su...",
|
"LabelDeviceIsAvailableTo": "Il dispositivo e disponibile su…",
|
||||||
"LabelDirectory": "Elenco",
|
"LabelDirectory": "Elenco",
|
||||||
"LabelDiscFromFilename": "Disco dal nome file",
|
"LabelDiscFromFilename": "Disco dal nome file",
|
||||||
"LabelDiscFromMetadata": "Disco dal Metadata",
|
"LabelDiscFromMetadata": "Disco dai metadati",
|
||||||
"LabelDiscover": "Scopri",
|
"LabelDiscover": "Scopri",
|
||||||
"LabelDownload": "Scarica",
|
"LabelDownload": "Scarica",
|
||||||
"LabelDownloadNEpisodes": "Download {0} episodi",
|
"LabelDownloadNEpisodes": "Scarica {0} episodi",
|
||||||
|
"LabelDownloadable": "Scaricabile",
|
||||||
"LabelDuration": "Durata",
|
"LabelDuration": "Durata",
|
||||||
"LabelDurationComparisonExactMatch": "(corrispondenza esatta)",
|
"LabelDurationComparisonExactMatch": "(corrispondenza esatta)",
|
||||||
"LabelDurationComparisonLonger": "({0} lungo)",
|
"LabelDurationComparisonLonger": "({0} lungo)",
|
||||||
"LabelDurationComparisonShorter": "({0} corto)",
|
"LabelDurationComparisonShorter": "({0} corto)",
|
||||||
"LabelDurationFound": "Durata Trovata:",
|
"LabelDurationFound": "Durata trovata:",
|
||||||
"LabelEbook": "Libro digitale",
|
"LabelEbook": "Libro digitale",
|
||||||
"LabelEbooks": "Libri digitali",
|
"LabelEbooks": "Libri digitali",
|
||||||
"LabelEdit": "Modifica",
|
"LabelEdit": "Modifica",
|
||||||
"LabelEmail": "E-mail",
|
"LabelEmail": "E-mail",
|
||||||
"LabelEmailSettingsFromAddress": "Da Indirizzo",
|
"LabelEmailSettingsFromAddress": "Indirizzo del mittente",
|
||||||
"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": "SSL",
|
"LabelEmailSettingsSecure": "Sicuro",
|
||||||
"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": "Indirizzo di test",
|
"LabelEmailSettingsTestAddress": "Indirizzo di test",
|
||||||
"LabelEmbeddedCover": "Cover Integrata",
|
"LabelEmbeddedCover": "Copertina integrata",
|
||||||
"LabelEnable": "Abilita",
|
"LabelEnable": "Abilita",
|
||||||
"LabelEncodingBackupLocation": "il backup dei file audio verrà archiviato in:",
|
"LabelEncodingBackupLocation": "Un backup dei file audio verrà archiviato in:",
|
||||||
"LabelEncodingChaptersNotEmbedded": "Negli audiolibri multitraccia i capitoli non sono incorporati.",
|
"LabelEncodingChaptersNotEmbedded": "Negli audiolibri multitraccia i capitoli non sono incorporati.",
|
||||||
"LabelEncodingClearItemCache": "Assicurati di svuotare periodicamente la cache degli oggetti.",
|
"LabelEncodingClearItemCache": "Assicurati di svuotare periodicamente la cache degli oggetti.",
|
||||||
"LabelEncodingFinishedM4B": "L'M4B completato verrà inserito nella cartella:",
|
"LabelEncodingFinishedM4B": "L'M4B completato verrà inserito nella cartella:",
|
||||||
@@ -459,7 +460,7 @@
|
|||||||
"LabelNotificationsMaxQueueSize": "Coda Massima di notifiche eventi",
|
"LabelNotificationsMaxQueueSize": "Coda Massima di notifiche eventi",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Le notifiche sono limitate per 1 al secondo, per evitare lo spamming le notifiche verrano ignorare se superano la coda.",
|
"LabelNotificationsMaxQueueSizeHelp": "Le notifiche sono limitate per 1 al secondo, per evitare lo spamming le notifiche verrano ignorare se superano la coda.",
|
||||||
"LabelNumberOfBooks": "Numero di libri",
|
"LabelNumberOfBooks": "Numero di libri",
|
||||||
"LabelNumberOfEpisodes": "# degli episodi",
|
"LabelNumberOfEpisodes": "Numero di episodi",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Nome dell'attestazione OpenID che contiene autorizzazioni avanzate per le azioni dell'utente all'interno dell'applicazione che verranno applicate ai ruoli non amministratori (<b>se configurato</b>). Se il reclamo manca nella risposta, l'accesso ad ABS verrà negato. Se manca una singola opzione, verrà trattata come<code>falsa</code>. Assicurati che l'attestazione del provider di identità corrisponda alla struttura prevista:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Nome dell'attestazione OpenID che contiene autorizzazioni avanzate per le azioni dell'utente all'interno dell'applicazione che verranno applicate ai ruoli non amministratori (<b>se configurato</b>). Se il reclamo manca nella risposta, l'accesso ad ABS verrà negato. Se manca una singola opzione, verrà trattata come<code>falsa</code>. Assicurati che l'attestazione del provider di identità corrisponda alla struttura prevista:",
|
||||||
"LabelOpenIDClaims": "Lasciare vuote le seguenti opzioni per disabilitare l'assegnazione avanzata di gruppi e autorizzazioni, assegnando quindi automaticamente il gruppo \"Utente\".",
|
"LabelOpenIDClaims": "Lasciare vuote le seguenti opzioni per disabilitare l'assegnazione avanzata di gruppi e autorizzazioni, assegnando quindi automaticamente il gruppo \"Utente\".",
|
||||||
"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.",
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
+20
-1
@@ -88,6 +88,8 @@
|
|||||||
"ButtonSaveTracklist": "Afspeellijst opslaan",
|
"ButtonSaveTracklist": "Afspeellijst opslaan",
|
||||||
"ButtonScan": "Scannen",
|
"ButtonScan": "Scannen",
|
||||||
"ButtonScanLibrary": "Scan bibliotheek",
|
"ButtonScanLibrary": "Scan bibliotheek",
|
||||||
|
"ButtonScrollLeft": "Scroll Links",
|
||||||
|
"ButtonScrollRight": "Scroll Rechts",
|
||||||
"ButtonSearch": "Zoeken",
|
"ButtonSearch": "Zoeken",
|
||||||
"ButtonSelectFolderPath": "Maplocatie selecteren",
|
"ButtonSelectFolderPath": "Maplocatie selecteren",
|
||||||
"ButtonSeries": "Series",
|
"ButtonSeries": "Series",
|
||||||
@@ -153,7 +155,7 @@
|
|||||||
"HeaderLogs": "Logboek",
|
"HeaderLogs": "Logboek",
|
||||||
"HeaderManageGenres": "Genres beheren",
|
"HeaderManageGenres": "Genres beheren",
|
||||||
"HeaderManageTags": "Tags beheren",
|
"HeaderManageTags": "Tags beheren",
|
||||||
"HeaderMapDetails": "Map details",
|
"HeaderMapDetails": "Details map",
|
||||||
"HeaderMatch": "Vergelijken",
|
"HeaderMatch": "Vergelijken",
|
||||||
"HeaderMetadataOrderOfPrecedence": "Metadata volgorde",
|
"HeaderMetadataOrderOfPrecedence": "Metadata volgorde",
|
||||||
"HeaderMetadataToEmbed": "In te sluiten metadata",
|
"HeaderMetadataToEmbed": "In te sluiten metadata",
|
||||||
@@ -190,6 +192,7 @@
|
|||||||
"HeaderSettingsExperimental": "Experimentele functies",
|
"HeaderSettingsExperimental": "Experimentele functies",
|
||||||
"HeaderSettingsGeneral": "Algemeen",
|
"HeaderSettingsGeneral": "Algemeen",
|
||||||
"HeaderSettingsScanner": "Scanner",
|
"HeaderSettingsScanner": "Scanner",
|
||||||
|
"HeaderSettingsWebClient": "Web Client",
|
||||||
"HeaderSleepTimer": "Slaaptimer",
|
"HeaderSleepTimer": "Slaaptimer",
|
||||||
"HeaderStatsLargestItems": "Grootste items",
|
"HeaderStatsLargestItems": "Grootste items",
|
||||||
"HeaderStatsLongestItems": "Langste items (uren)",
|
"HeaderStatsLongestItems": "Langste items (uren)",
|
||||||
@@ -297,6 +300,7 @@
|
|||||||
"LabelDiscover": "Ontdekken",
|
"LabelDiscover": "Ontdekken",
|
||||||
"LabelDownload": "Download",
|
"LabelDownload": "Download",
|
||||||
"LabelDownloadNEpisodes": "Download {0} afleveringen",
|
"LabelDownloadNEpisodes": "Download {0} afleveringen",
|
||||||
|
"LabelDownloadable": "Downloadbaar",
|
||||||
"LabelDuration": "Duur",
|
"LabelDuration": "Duur",
|
||||||
"LabelDurationComparisonExactMatch": "(exacte overeenkomst)",
|
"LabelDurationComparisonExactMatch": "(exacte overeenkomst)",
|
||||||
"LabelDurationComparisonLonger": "({0} langer)",
|
"LabelDurationComparisonLonger": "({0} langer)",
|
||||||
@@ -472,6 +476,7 @@
|
|||||||
"LabelPermissionsAccessAllLibraries": "Heeft toegang tot all bibliotheken",
|
"LabelPermissionsAccessAllLibraries": "Heeft toegang tot all bibliotheken",
|
||||||
"LabelPermissionsAccessAllTags": "Heeft toegang tot alle tags",
|
"LabelPermissionsAccessAllTags": "Heeft toegang tot alle tags",
|
||||||
"LabelPermissionsAccessExplicitContent": "Heeft toegang tot expliciete inhoud",
|
"LabelPermissionsAccessExplicitContent": "Heeft toegang tot expliciete inhoud",
|
||||||
|
"LabelPermissionsCreateEreader": "Kan Ereader Aanmaken",
|
||||||
"LabelPermissionsDelete": "Kan verwijderen",
|
"LabelPermissionsDelete": "Kan verwijderen",
|
||||||
"LabelPermissionsDownload": "Kan downloaden",
|
"LabelPermissionsDownload": "Kan downloaden",
|
||||||
"LabelPermissionsUpdate": "Kan bijwerken",
|
"LabelPermissionsUpdate": "Kan bijwerken",
|
||||||
@@ -541,6 +546,7 @@
|
|||||||
"LabelServerYearReview": "Server Jaar in Review ({0})",
|
"LabelServerYearReview": "Server Jaar in Review ({0})",
|
||||||
"LabelSetEbookAsPrimary": "Stel in als primair",
|
"LabelSetEbookAsPrimary": "Stel in als primair",
|
||||||
"LabelSetEbookAsSupplementary": "Stel in als supplementair",
|
"LabelSetEbookAsSupplementary": "Stel in als supplementair",
|
||||||
|
"LabelSettingsAllowIframe": "Insluiten in iframe toestaan",
|
||||||
"LabelSettingsAudiobooksOnly": "Alleen audiobooks",
|
"LabelSettingsAudiobooksOnly": "Alleen audiobooks",
|
||||||
"LabelSettingsAudiobooksOnlyHelp": "Deze instelling inschakelen zorgt ervoor dat ebook-bestanden genegeerd worden tenzij ze in een audiobook-map staan, in welk geval ze worden ingesteld als supplementaire ebooks",
|
"LabelSettingsAudiobooksOnlyHelp": "Deze instelling inschakelen zorgt ervoor dat ebook-bestanden genegeerd worden tenzij ze in een audiobook-map staan, in welk geval ze worden ingesteld als supplementaire ebooks",
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeumorphisch design met houten planken",
|
"LabelSettingsBookshelfViewHelp": "Skeumorphisch design met houten planken",
|
||||||
@@ -562,6 +568,9 @@
|
|||||||
"LabelSettingsHideSingleBookSeriesHelp": "Series die slechts een enkel boek bevatten worden verborgen op de seriespagina en de homepagina-planken.",
|
"LabelSettingsHideSingleBookSeriesHelp": "Series die slechts een enkel boek bevatten worden verborgen op de seriespagina en de homepagina-planken.",
|
||||||
"LabelSettingsHomePageBookshelfView": "Boekenplank-view voor homepagina",
|
"LabelSettingsHomePageBookshelfView": "Boekenplank-view voor homepagina",
|
||||||
"LabelSettingsLibraryBookshelfView": "Boekenplank-view voor bibliotheek",
|
"LabelSettingsLibraryBookshelfView": "Boekenplank-view voor bibliotheek",
|
||||||
|
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "Voltooid percentage is groter dan",
|
||||||
|
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Resterende tijd is kleiner dan (seconden)",
|
||||||
|
"LabelSettingsLibraryMarkAsFinishedWhen": "Markeer media item wanneer voltooid",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Sla eedere boeken in Serie Verderzetten over",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Sla eedere boeken in Serie Verderzetten over",
|
||||||
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "De Continue Series home page shelf toont het eerste boek dat nog niet is begonnen in series waarvan er minstens één is voltooid en er geen boeken in uitvoering zijn. Als u deze instelling inschakelt, wordt de serie voortgezet vanaf het boek dat het verst is voltooid in plaats van het eerste boek dat nog niet is begonnen.",
|
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "De Continue Series home page shelf toont het eerste boek dat nog niet is begonnen in series waarvan er minstens één is voltooid en er geen boeken in uitvoering zijn. Als u deze instelling inschakelt, wordt de serie voortgezet vanaf het boek dat het verst is voltooid in plaats van het eerste boek dat nog niet is begonnen.",
|
||||||
"LabelSettingsParseSubtitles": "Parseer subtitel",
|
"LabelSettingsParseSubtitles": "Parseer subtitel",
|
||||||
@@ -580,6 +589,7 @@
|
|||||||
"LabelSettingsStoreMetadataWithItemHelp": "Standaard worden metadata-bestanden bewaard in /metadata/items, door deze instelling in te schakelen zullen metadata bestanden in de map van je bibliotheekonderdeel bewaard worden",
|
"LabelSettingsStoreMetadataWithItemHelp": "Standaard worden metadata-bestanden bewaard in /metadata/items, door deze instelling in te schakelen zullen metadata bestanden in de map van je bibliotheekonderdeel bewaard worden",
|
||||||
"LabelSettingsTimeFormat": "Tijdformat",
|
"LabelSettingsTimeFormat": "Tijdformat",
|
||||||
"LabelShare": "Delen",
|
"LabelShare": "Delen",
|
||||||
|
"LabelShareDownloadableHelp": "Gebruikers toestaan met share link om zip bestand te downloaden van het bibliotheek item.",
|
||||||
"LabelShareOpen": "Delen Open",
|
"LabelShareOpen": "Delen Open",
|
||||||
"LabelShareURL": "URL Delen",
|
"LabelShareURL": "URL Delen",
|
||||||
"LabelShowAll": "Toon alle",
|
"LabelShowAll": "Toon alle",
|
||||||
@@ -588,6 +598,8 @@
|
|||||||
"LabelSize": "Grootte",
|
"LabelSize": "Grootte",
|
||||||
"LabelSleepTimer": "Slaaptimer",
|
"LabelSleepTimer": "Slaaptimer",
|
||||||
"LabelSlug": "Slak",
|
"LabelSlug": "Slak",
|
||||||
|
"LabelSortAscending": "Oplopend",
|
||||||
|
"LabelSortDescending": "Aflopend",
|
||||||
"LabelStart": "Start",
|
"LabelStart": "Start",
|
||||||
"LabelStartTime": "Starttijd",
|
"LabelStartTime": "Starttijd",
|
||||||
"LabelStarted": "Gestart",
|
"LabelStarted": "Gestart",
|
||||||
@@ -659,6 +671,7 @@
|
|||||||
"LabelUpdateDetailsHelp": "Sta overschrijven van bestaande details toe voor de geselecteerde boeken wanneer een match is gevonden",
|
"LabelUpdateDetailsHelp": "Sta overschrijven van bestaande details toe voor de geselecteerde boeken wanneer een match is gevonden",
|
||||||
"LabelUpdatedAt": "Bijgewerkt op",
|
"LabelUpdatedAt": "Bijgewerkt op",
|
||||||
"LabelUploaderDragAndDrop": "Slepen & neerzeten van bestanden of mappen",
|
"LabelUploaderDragAndDrop": "Slepen & neerzeten van bestanden of mappen",
|
||||||
|
"LabelUploaderDragAndDropFilesOnly": "Drag & drop bestanden",
|
||||||
"LabelUploaderDropFiles": "Bestanden neerzetten",
|
"LabelUploaderDropFiles": "Bestanden neerzetten",
|
||||||
"LabelUploaderItemFetchMetadataHelp": "Automatisch titel, auteur en serie ophalen",
|
"LabelUploaderItemFetchMetadataHelp": "Automatisch titel, auteur en serie ophalen",
|
||||||
"LabelUseAdvancedOptions": "Gebruik Geavanceerde Instellingen",
|
"LabelUseAdvancedOptions": "Gebruik Geavanceerde Instellingen",
|
||||||
@@ -674,6 +687,8 @@
|
|||||||
"LabelViewPlayerSettings": "Laat spelerinstellingen zien",
|
"LabelViewPlayerSettings": "Laat spelerinstellingen zien",
|
||||||
"LabelViewQueue": "Bekijk afspeelwachtrij",
|
"LabelViewQueue": "Bekijk afspeelwachtrij",
|
||||||
"LabelVolume": "Volume",
|
"LabelVolume": "Volume",
|
||||||
|
"LabelWebRedirectURLsDescription": "Autoriseer deze URL's in uw OAuth-provider om na het inloggen omleiding terug naar de web-app toe te staan:",
|
||||||
|
"LabelWebRedirectURLsSubfolder": "Subfolder voor Redirect URLs",
|
||||||
"LabelWeekdaysToRun": "Weekdagen om te draaien",
|
"LabelWeekdaysToRun": "Weekdagen om te draaien",
|
||||||
"LabelXBooks": "{0} boeken",
|
"LabelXBooks": "{0} boeken",
|
||||||
"LabelXItems": "{0} items",
|
"LabelXItems": "{0} items",
|
||||||
@@ -743,6 +758,7 @@
|
|||||||
"MessageConfirmResetProgress": "Bet u zeker dat u uw voortgang wil resetten?",
|
"MessageConfirmResetProgress": "Bet u zeker dat u uw voortgang wil resetten?",
|
||||||
"MessageConfirmSendEbookToDevice": "Weet je zeker dat je {0} ebook \"{1}\" naar apparaat \"{2}\" wil sturen?",
|
"MessageConfirmSendEbookToDevice": "Weet je zeker dat je {0} ebook \"{1}\" naar apparaat \"{2}\" wil sturen?",
|
||||||
"MessageConfirmUnlinkOpenId": "Bent u zeker dat u deze gebruiker wil ontkoppelen van OpenID?",
|
"MessageConfirmUnlinkOpenId": "Bent u zeker dat u deze gebruiker wil ontkoppelen van OpenID?",
|
||||||
|
"MessageDaysListenedInTheLastYear": "{0} dagen geluisterd in het voorbije jaar",
|
||||||
"MessageDownloadingEpisode": "Aflevering aan het dowloaden",
|
"MessageDownloadingEpisode": "Aflevering aan het dowloaden",
|
||||||
"MessageDragFilesIntoTrackOrder": "Sleep bestanden in de juiste trackvolgorde",
|
"MessageDragFilesIntoTrackOrder": "Sleep bestanden in de juiste trackvolgorde",
|
||||||
"MessageEmbedFailed": "Insluiten Mislukt!",
|
"MessageEmbedFailed": "Insluiten Mislukt!",
|
||||||
@@ -821,6 +837,7 @@
|
|||||||
"MessageResetChaptersConfirm": "Weet je zeker dat je de hoofdstukken wil resetten en de wijzigingen die je gemaakt hebt ongedaan wil maken?",
|
"MessageResetChaptersConfirm": "Weet je zeker dat je de hoofdstukken wil resetten en de wijzigingen die je gemaakt hebt ongedaan wil maken?",
|
||||||
"MessageRestoreBackupConfirm": "Weet je zeker dat je wil herstellen met behulp van de back-up gemaakt op",
|
"MessageRestoreBackupConfirm": "Weet je zeker dat je wil herstellen met behulp van de back-up gemaakt op",
|
||||||
"MessageRestoreBackupWarning": "Herstellen met een back-up zal de volledige database in /config en de covers in /metadata/items & /metadata/authors overschrijven.<br /><br />Back-ups wijzigen geen bestanden in je bibliotheekmappen. Als je de serverinstelling gebruikt om covers en metadata in je bibliotheekmappen te bewaren dan worden deze niet geback-upt of overschreven.<br /><br />Alle clients die van je server gebruik maken zullen automatisch worden ververst.",
|
"MessageRestoreBackupWarning": "Herstellen met een back-up zal de volledige database in /config en de covers in /metadata/items & /metadata/authors overschrijven.<br /><br />Back-ups wijzigen geen bestanden in je bibliotheekmappen. Als je de serverinstelling gebruikt om covers en metadata in je bibliotheekmappen te bewaren dan worden deze niet geback-upt of overschreven.<br /><br />Alle clients die van je server gebruik maken zullen automatisch worden ververst.",
|
||||||
|
"MessageScheduleLibraryScanNote": "Voor de meeste gebruikers is het raadzaam om deze functie uitgeschakeld te laten en de folder watcher-instelling ingeschakeld te houden. De folder watcher detecteert automatisch wijzigingen in uw bibliotheekmappen. De folder watcher werkt niet voor elk bestandssysteem (zoals NFS), dus geplande bibliotheekscans kunnen in plaats daarvan worden gebruikt.",
|
||||||
"MessageSearchResultsFor": "Zoekresultaten voor",
|
"MessageSearchResultsFor": "Zoekresultaten voor",
|
||||||
"MessageSelected": "{0} geselecteerd",
|
"MessageSelected": "{0} geselecteerd",
|
||||||
"MessageServerCouldNotBeReached": "Server niet bereikbaar",
|
"MessageServerCouldNotBeReached": "Server niet bereikbaar",
|
||||||
@@ -947,6 +964,7 @@
|
|||||||
"ToastCollectionRemoveSuccess": "Collectie verwijderd",
|
"ToastCollectionRemoveSuccess": "Collectie verwijderd",
|
||||||
"ToastCollectionUpdateSuccess": "Collectie bijgewerkt",
|
"ToastCollectionUpdateSuccess": "Collectie bijgewerkt",
|
||||||
"ToastCoverUpdateFailed": "Cover update mislukt",
|
"ToastCoverUpdateFailed": "Cover update mislukt",
|
||||||
|
"ToastDateTimeInvalidOrIncomplete": "Datum en tijd ongeldig of onvolledig",
|
||||||
"ToastDeleteFileFailed": "Bestand verwijderen mislukt",
|
"ToastDeleteFileFailed": "Bestand verwijderen mislukt",
|
||||||
"ToastDeleteFileSuccess": "Bestand verwijderd",
|
"ToastDeleteFileSuccess": "Bestand verwijderd",
|
||||||
"ToastDeviceAddFailed": "Apparaat toevoegen mislukt",
|
"ToastDeviceAddFailed": "Apparaat toevoegen mislukt",
|
||||||
@@ -999,6 +1017,7 @@
|
|||||||
"ToastNewUserTagError": "Moet ten minste een tag selecteren",
|
"ToastNewUserTagError": "Moet ten minste een tag selecteren",
|
||||||
"ToastNewUserUsernameError": "Voer een gebruikersnaam in",
|
"ToastNewUserUsernameError": "Voer een gebruikersnaam in",
|
||||||
"ToastNoNewEpisodesFound": "Geen nieuwe afleveringen gevonden",
|
"ToastNoNewEpisodesFound": "Geen nieuwe afleveringen gevonden",
|
||||||
|
"ToastNoRSSFeed": "Podcast heeft geen RSS Feed",
|
||||||
"ToastNoUpdatesNecessary": "Geen updates nodig",
|
"ToastNoUpdatesNecessary": "Geen updates nodig",
|
||||||
"ToastNotificationCreateFailed": "Nieuwe melding aanmaken mislukt",
|
"ToastNotificationCreateFailed": "Nieuwe melding aanmaken mislukt",
|
||||||
"ToastNotificationDeleteFailed": "Melding verwijderen mislukt",
|
"ToastNotificationDeleteFailed": "Melding verwijderen mislukt",
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
"ButtonNext": "Следующий",
|
"ButtonNext": "Следующий",
|
||||||
"ButtonNextChapter": "Следующая глава",
|
"ButtonNextChapter": "Следующая глава",
|
||||||
"ButtonNextItemInQueue": "Следующий элемент в очереди",
|
"ButtonNextItemInQueue": "Следующий элемент в очереди",
|
||||||
"ButtonOk": "Ok",
|
"ButtonOk": "Ок",
|
||||||
"ButtonOpenFeed": "Открыть канал",
|
"ButtonOpenFeed": "Открыть канал",
|
||||||
"ButtonOpenManager": "Открыть менеджер",
|
"ButtonOpenManager": "Открыть менеджер",
|
||||||
"ButtonPause": "Пауза",
|
"ButtonPause": "Пауза",
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
"ButtonApplyChapters": "Uveljavi poglavja",
|
"ButtonApplyChapters": "Uveljavi poglavja",
|
||||||
"ButtonAuthors": "Avtorji",
|
"ButtonAuthors": "Avtorji",
|
||||||
"ButtonBack": "Nazaj",
|
"ButtonBack": "Nazaj",
|
||||||
|
"ButtonBatchEditPopulateFromExisting": "Napolni iz obstoječega",
|
||||||
|
"ButtonBatchEditPopulateMapDetails": "Izpolnite podrobnosti zemljevida",
|
||||||
"ButtonBrowseForFolder": "Prebrskaj pot do mape",
|
"ButtonBrowseForFolder": "Prebrskaj pot do mape",
|
||||||
"ButtonCancel": "Prekliči",
|
"ButtonCancel": "Prekliči",
|
||||||
"ButtonCancelEncode": "Prekliči prekodiranje",
|
"ButtonCancelEncode": "Prekliči prekodiranje",
|
||||||
@@ -463,7 +465,7 @@
|
|||||||
"LabelNotificationsMaxQueueSize": "Največja velikost čakalne vrste za dogodke obvestil",
|
"LabelNotificationsMaxQueueSize": "Največja velikost čakalne vrste za dogodke obvestil",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Dogodki so omejeni na sprožitev 1 na sekundo. Dogodki bodo prezrti, če je čakalna vrsta najvišja. To preprečuje neželeno pošiljanje obvestil.",
|
"LabelNotificationsMaxQueueSizeHelp": "Dogodki so omejeni na sprožitev 1 na sekundo. Dogodki bodo prezrti, če je čakalna vrsta najvišja. To preprečuje neželeno pošiljanje obvestil.",
|
||||||
"LabelNumberOfBooks": "Število knjig",
|
"LabelNumberOfBooks": "Število knjig",
|
||||||
"LabelNumberOfEpisodes": "število epizod",
|
"LabelNumberOfEpisodes": "# epizod",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Ime zahtevka OpenID, ki vsebuje napredna dovoljenja za uporabniška dejanja v aplikaciji, ki bodo veljala za neskrbniške vloge (<b>če je konfigurirano</b>). Če trditev manjka v odgovoru, bo dostop do ABS zavrnjen. Če ena možnost manjka, bo obravnavana kot <code>false</code>. Zagotovite, da se zahtevek ponudnika identitete ujema s pričakovano strukturo:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Ime zahtevka OpenID, ki vsebuje napredna dovoljenja za uporabniška dejanja v aplikaciji, ki bodo veljala za neskrbniške vloge (<b>če je konfigurirano</b>). Če trditev manjka v odgovoru, bo dostop do ABS zavrnjen. Če ena možnost manjka, bo obravnavana kot <code>false</code>. Zagotovite, da se zahtevek ponudnika identitete ujema s pričakovano strukturo:",
|
||||||
"LabelOpenIDClaims": "Pustite naslednje možnosti prazne, da onemogočite napredno dodeljevanje skupin in dovoljenj, nato pa samodejno dodelite skupino 'Uporabnik'.",
|
"LabelOpenIDClaims": "Pustite naslednje možnosti prazne, da onemogočite napredno dodeljevanje skupin in dovoljenj, nato pa samodejno dodelite skupino 'Uporabnik'.",
|
||||||
"LabelOpenIDGroupClaimDescription": "Ime zahtevka OpenID, ki vsebuje seznam uporabnikovih skupin. Običajno imenovane <code>skupine</code>. <b>Če je konfigurirana</b>, bo aplikacija samodejno dodelila vloge na podlagi članstva v skupini uporabnika, pod pogojem, da so te skupine v zahtevku poimenovane 'admin', 'user' ali 'guest' brez razlikovanja med velikimi in malimi črkami. Zahtevek mora vsebovati seznam in če uporabnik pripada več skupinam, mu aplikacija dodeli vlogo, ki ustreza najvišjemu nivoju dostopa. Če se nobena skupina ne ujema, bo dostop zavrnjen.",
|
"LabelOpenIDGroupClaimDescription": "Ime zahtevka OpenID, ki vsebuje seznam uporabnikovih skupin. Običajno imenovane <code>skupine</code>. <b>Če je konfigurirana</b>, bo aplikacija samodejno dodelila vloge na podlagi članstva v skupini uporabnika, pod pogojem, da so te skupine v zahtevku poimenovane 'admin', 'user' ali 'guest' brez razlikovanja med velikimi in malimi črkami. Zahtevek mora vsebovati seznam in če uporabnik pripada več skupinam, mu aplikacija dodeli vlogo, ki ustreza najvišjemu nivoju dostopa. Če se nobena skupina ne ujema, bo dostop zavrnjen.",
|
||||||
@@ -704,6 +706,8 @@
|
|||||||
"MessageBackupsLocationEditNote": "Opomba: Posodabljanje lokacije varnostne kopije ne bo premaknilo ali spremenilo obstoječih varnostnih kopij",
|
"MessageBackupsLocationEditNote": "Opomba: Posodabljanje lokacije varnostne kopije ne bo premaknilo ali spremenilo obstoječih varnostnih kopij",
|
||||||
"MessageBackupsLocationNoEditNote": "Opomba: Lokacija varnostne kopije je nastavljena s spremenljivko okolja in je tu ni mogoče spremeniti.",
|
"MessageBackupsLocationNoEditNote": "Opomba: Lokacija varnostne kopije je nastavljena s spremenljivko okolja in je tu ni mogoče spremeniti.",
|
||||||
"MessageBackupsLocationPathEmpty": "Pot do lokacije varnostne kopije ne sme biti prazna",
|
"MessageBackupsLocationPathEmpty": "Pot do lokacije varnostne kopije ne sme biti prazna",
|
||||||
|
"MessageBatchEditPopulateMapDetailsAllHelp": "Napolni omogočena polja s podatki iz vseh elementov. Polja z več vrednostmi bodo združena",
|
||||||
|
"MessageBatchEditPopulateMapDetailsItemHelp": "Napolni omogočena polja s podrobnostmi zemljevida s podatki iz tega elementa",
|
||||||
"MessageBatchQuickMatchDescription": "Hitro ujemanje bo poskušal dodati manjkajoče naslovnice in metapodatke za izbrane elemente. Omogočite spodnje možnosti, da omogočite hitremu ujemanju, da prepiše obstoječe naslovnice in/ali metapodatke.",
|
"MessageBatchQuickMatchDescription": "Hitro ujemanje bo poskušal dodati manjkajoče naslovnice in metapodatke za izbrane elemente. Omogočite spodnje možnosti, da omogočite hitremu ujemanju, da prepiše obstoječe naslovnice in/ali metapodatke.",
|
||||||
"MessageBookshelfNoCollections": "Ustvaril nisi še nobene zbirke",
|
"MessageBookshelfNoCollections": "Ustvaril nisi še nobene zbirke",
|
||||||
"MessageBookshelfNoRSSFeeds": "Noben vir RSS ni odprt",
|
"MessageBookshelfNoRSSFeeds": "Noben vir RSS ni odprt",
|
||||||
@@ -1017,6 +1021,7 @@
|
|||||||
"ToastNewUserTagError": "Izbrati morate vsaj eno oznako",
|
"ToastNewUserTagError": "Izbrati morate vsaj eno oznako",
|
||||||
"ToastNewUserUsernameError": "Vnesite uporabniško ime",
|
"ToastNewUserUsernameError": "Vnesite uporabniško ime",
|
||||||
"ToastNoNewEpisodesFound": "Ni novih epizod",
|
"ToastNoNewEpisodesFound": "Ni novih epizod",
|
||||||
|
"ToastNoRSSFeed": "Podcast nima RSS vira",
|
||||||
"ToastNoUpdatesNecessary": "Posodobitve niso potrebne",
|
"ToastNoUpdatesNecessary": "Posodobitve niso potrebne",
|
||||||
"ToastNotificationCreateFailed": "Obvestila ni bilo mogoče ustvariti",
|
"ToastNotificationCreateFailed": "Obvestila ni bilo mogoče ustvariti",
|
||||||
"ToastNotificationDeleteFailed": "Brisanje obvestila ni uspelo",
|
"ToastNotificationDeleteFailed": "Brisanje obvestila ni uspelo",
|
||||||
|
|||||||
+355
-187
@@ -12,7 +12,7 @@
|
|||||||
"ButtonBack": "Tillbaka",
|
"ButtonBack": "Tillbaka",
|
||||||
"ButtonBrowseForFolder": "Bläddra efter mapp",
|
"ButtonBrowseForFolder": "Bläddra efter mapp",
|
||||||
"ButtonCancel": "Avbryt",
|
"ButtonCancel": "Avbryt",
|
||||||
"ButtonCancelEncode": "Avbryt kodning",
|
"ButtonCancelEncode": "Avbryt omkodning",
|
||||||
"ButtonChangeRootPassword": "Ändra lösenordet för root",
|
"ButtonChangeRootPassword": "Ändra lösenordet för root",
|
||||||
"ButtonCheckAndDownloadNewEpisodes": "Kontrollera och ladda ner nya avsnitt",
|
"ButtonCheckAndDownloadNewEpisodes": "Kontrollera och ladda ner nya avsnitt",
|
||||||
"ButtonChooseAFolder": "Välj en mapp",
|
"ButtonChooseAFolder": "Välj en mapp",
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
"ButtonNext": "Nästa",
|
"ButtonNext": "Nästa",
|
||||||
"ButtonNextChapter": "Nästa kapitel",
|
"ButtonNextChapter": "Nästa kapitel",
|
||||||
"ButtonNextItemInQueue": "Nästa objekt i Kö",
|
"ButtonNextItemInQueue": "Nästa objekt i Kö",
|
||||||
"ButtonOk": "Ok",
|
"ButtonOk": "OK",
|
||||||
"ButtonOpenFeed": "Öppna flöde",
|
"ButtonOpenFeed": "Öppna flöde",
|
||||||
"ButtonOpenManager": "Öppna Manager",
|
"ButtonOpenManager": "Öppna Manager",
|
||||||
"ButtonPause": "Pausa",
|
"ButtonPause": "Pausa",
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
"ButtonPreviousChapter": "Föregående kapitel",
|
"ButtonPreviousChapter": "Föregående kapitel",
|
||||||
"ButtonProbeAudioFile": "Analysera ljudfil",
|
"ButtonProbeAudioFile": "Analysera ljudfil",
|
||||||
"ButtonPurgeAllCache": "Rensa all cache",
|
"ButtonPurgeAllCache": "Rensa all cache",
|
||||||
"ButtonPurgeItemsCache": "Rensa föremåls-cache",
|
"ButtonPurgeItemsCache": "Rensa cache för föremål",
|
||||||
"ButtonQueueAddItem": "Lägg till i kön",
|
"ButtonQueueAddItem": "Lägg till i kön",
|
||||||
"ButtonQueueRemoveItem": "Ta bort från kön",
|
"ButtonQueueRemoveItem": "Ta bort från kön",
|
||||||
"ButtonQuickMatch": "Snabb matchning",
|
"ButtonQuickMatch": "Snabb matchning",
|
||||||
@@ -72,11 +72,11 @@
|
|||||||
"ButtonRefresh": "Uppdatera",
|
"ButtonRefresh": "Uppdatera",
|
||||||
"ButtonRemove": "Ta bort",
|
"ButtonRemove": "Ta bort",
|
||||||
"ButtonRemoveAll": "Ta bort alla",
|
"ButtonRemoveAll": "Ta bort alla",
|
||||||
"ButtonRemoveAllLibraryItems": "Ta bort alla biblioteksobjekt",
|
"ButtonRemoveAllLibraryItems": "Ta bort alla objekt i biblioteket",
|
||||||
"ButtonRemoveFromContinueListening": "Ta bort från Fortsätt lyssna",
|
"ButtonRemoveFromContinueListening": "Radera från 'Fortsätt läsa/lyssna'",
|
||||||
"ButtonRemoveFromContinueReading": "Ta bort från Fortsätt läsa",
|
"ButtonRemoveFromContinueReading": "Ta bort från Fortsätt läsa",
|
||||||
"ButtonRemoveSeriesFromContinueSeries": "Ta bort serie från Fortsätt serie",
|
"ButtonRemoveSeriesFromContinueSeries": "Radera från 'Fortsätt med serien'",
|
||||||
"ButtonReset": "Återställ",
|
"ButtonReset": "Tillbaka",
|
||||||
"ButtonResetToDefault": "Återställ till standard",
|
"ButtonResetToDefault": "Återställ till standard",
|
||||||
"ButtonRestore": "Återställ",
|
"ButtonRestore": "Återställ",
|
||||||
"ButtonSave": "Spara",
|
"ButtonSave": "Spara",
|
||||||
@@ -88,53 +88,60 @@
|
|||||||
"ButtonSelectFolderPath": "Välj mappens sökväg",
|
"ButtonSelectFolderPath": "Välj mappens sökväg",
|
||||||
"ButtonSeries": "Serier",
|
"ButtonSeries": "Serier",
|
||||||
"ButtonSetChaptersFromTracks": "Ställ in kapitel från spår",
|
"ButtonSetChaptersFromTracks": "Ställ in kapitel från spår",
|
||||||
|
"ButtonShare": "Dela",
|
||||||
"ButtonShiftTimes": "Förskjut tider",
|
"ButtonShiftTimes": "Förskjut tider",
|
||||||
"ButtonShow": "Visa",
|
"ButtonShow": "Visa",
|
||||||
"ButtonStartM4BEncode": "Starta M4B-kodning",
|
"ButtonStartM4BEncode": "Starta M4B-omkodning",
|
||||||
"ButtonStartMetadataEmbed": "Starta inbäddning av metadata",
|
"ButtonStartMetadataEmbed": "Starta inbäddning av metadata",
|
||||||
"ButtonStats": "Statistik",
|
"ButtonStats": "Statistik",
|
||||||
"ButtonSubmit": "Skicka",
|
"ButtonSubmit": "Spara",
|
||||||
"ButtonTest": "Testa",
|
"ButtonTest": "Testa",
|
||||||
"ButtonUpload": "Ladda upp",
|
"ButtonUpload": "Ladda upp",
|
||||||
"ButtonUploadBackup": "Ladda upp säkerhetskopia",
|
"ButtonUploadBackup": "Ladda upp säkerhetskopia",
|
||||||
"ButtonUploadCover": "Ladda upp omslag",
|
"ButtonUploadCover": "Ladda upp bokomslag",
|
||||||
"ButtonUploadOPMLFile": "Ladda upp OPML-fil",
|
"ButtonUploadOPMLFile": "Ladda upp OPML-fil",
|
||||||
"ButtonUserDelete": "Radera användare {0}",
|
"ButtonUserDelete": "Radera användare {0}",
|
||||||
"ButtonUserEdit": "Redigera användare {0}",
|
"ButtonUserEdit": "Redigera användare {0}",
|
||||||
"ButtonViewAll": "Visa alla",
|
"ButtonViewAll": "Visa alla",
|
||||||
"ButtonYes": "Ja",
|
"ButtonYes": "Ja",
|
||||||
|
"ErrorUploadFetchMetadataAPI": "Fel vid hämtning av metadata",
|
||||||
|
"ErrorUploadFetchMetadataNoResults": "Metadata kunde inte hämtas - försök att ändra titel och/eller författare",
|
||||||
|
"ErrorUploadLacksTitle": "En titel måste anges",
|
||||||
"HeaderAccount": "Konto",
|
"HeaderAccount": "Konto",
|
||||||
|
"HeaderAddCustomMetadataProvider": "Addera egen källa för metadata",
|
||||||
"HeaderAdvanced": "Avancerad",
|
"HeaderAdvanced": "Avancerad",
|
||||||
"HeaderAppriseNotificationSettings": "Apprise Meddelandeinställningar",
|
"HeaderAppriseNotificationSettings": "Apprise Meddelandeinställningar",
|
||||||
"HeaderAudioTracks": "Ljudspår",
|
"HeaderAudioTracks": "Ljudspår",
|
||||||
"HeaderAudiobookTools": "Ljudbokshantering",
|
"HeaderAudiobookTools": "Hantering av ljudboksfil",
|
||||||
|
"HeaderAuthentication": "Autentisering",
|
||||||
"HeaderBackups": "Säkerhetskopior",
|
"HeaderBackups": "Säkerhetskopior",
|
||||||
"HeaderChangePassword": "Ändra lösenord",
|
"HeaderChangePassword": "Ändra lösenord",
|
||||||
"HeaderChapters": "Kapitel",
|
"HeaderChapters": "Kapitel",
|
||||||
"HeaderChooseAFolder": "Välj en mapp",
|
"HeaderChooseAFolder": "Välj en mapp",
|
||||||
"HeaderCollection": "Samling",
|
"HeaderCollection": "Samling",
|
||||||
"HeaderCollectionItems": "Samlingselement",
|
"HeaderCollectionItems": "Böcker i samlingen",
|
||||||
"HeaderCover": "Omslag",
|
"HeaderCover": "Bokomslag",
|
||||||
"HeaderCurrentDownloads": "Aktuella nedladdningar",
|
"HeaderCurrentDownloads": "Aktuella nedladdningar",
|
||||||
|
"HeaderCustomMetadataProviders": "Egen källa för metadata",
|
||||||
"HeaderDetails": "Detaljer",
|
"HeaderDetails": "Detaljer",
|
||||||
"HeaderDownloadQueue": "Nedladdningskö",
|
"HeaderDownloadQueue": "Nedladdningskö",
|
||||||
"HeaderEbookFiles": "E-boksfiler",
|
"HeaderEbookFiles": "E-boksfiler",
|
||||||
"HeaderEmail": "E-post",
|
"HeaderEmail": "E-postadress",
|
||||||
"HeaderEmailSettings": "E-postinställningar",
|
"HeaderEmailSettings": "Inställningar för e-post",
|
||||||
"HeaderEpisodes": "Avsnitt",
|
"HeaderEpisodes": "Avsnitt",
|
||||||
"HeaderEreaderDevices": "E-boksläsarenheter",
|
"HeaderEreaderDevices": "Enheter för att läsa e-böcker",
|
||||||
"HeaderEreaderSettings": "E-boksinställningar",
|
"HeaderEreaderSettings": "E-boksinställningar",
|
||||||
"HeaderFiles": "Filer",
|
"HeaderFiles": "Filer",
|
||||||
"HeaderFindChapters": "Hitta kapitel",
|
"HeaderFindChapters": "Hitta kapitel",
|
||||||
"HeaderIgnoredFiles": "Ignorerade filer",
|
"HeaderIgnoredFiles": "Ignorerade filer",
|
||||||
"HeaderItemFiles": "Föremålsfiler",
|
"HeaderItemFiles": "Föremålsfiler",
|
||||||
"HeaderItemMetadataUtils": "Metadataverktyg för föremål",
|
"HeaderItemMetadataUtils": "Metadataverktyg för föremål",
|
||||||
"HeaderLastListeningSession": "Senaste lyssningssession",
|
"HeaderLastListeningSession": "Senaste lyssningstillfället",
|
||||||
"HeaderLatestEpisodes": "Senaste avsnitt",
|
"HeaderLatestEpisodes": "Senaste avsnitten",
|
||||||
"HeaderLibraries": "Bibliotek",
|
"HeaderLibraries": "Bibliotek",
|
||||||
"HeaderLibraryFiles": "Biblioteksfiler",
|
"HeaderLibraryFiles": "Filer i biblioteket",
|
||||||
"HeaderLibraryStats": "Biblioteksstatistik",
|
"HeaderLibraryStats": "Biblioteksstatistik",
|
||||||
"HeaderListeningSessions": "Lyssningssessioner",
|
"HeaderListeningSessions": "Lyssningstillfällen",
|
||||||
"HeaderListeningStats": "Lyssningsstatistik",
|
"HeaderListeningStats": "Lyssningsstatistik",
|
||||||
"HeaderLogin": "Logga in",
|
"HeaderLogin": "Logga in",
|
||||||
"HeaderLogs": "Loggar",
|
"HeaderLogs": "Loggar",
|
||||||
@@ -142,27 +149,31 @@
|
|||||||
"HeaderManageTags": "Hantera taggar",
|
"HeaderManageTags": "Hantera taggar",
|
||||||
"HeaderMapDetails": "Karta detaljer",
|
"HeaderMapDetails": "Karta detaljer",
|
||||||
"HeaderMatch": "Matcha",
|
"HeaderMatch": "Matcha",
|
||||||
"HeaderMetadataOrderOfPrecedence": "Metadataordning av företräde",
|
"HeaderMetadataOrderOfPrecedence": "Prioriteringsordning vid inläsning av metadata",
|
||||||
"HeaderMetadataToEmbed": "Metadata att bädda in",
|
"HeaderMetadataToEmbed": "Metadata som kommer att adderas",
|
||||||
"HeaderNewAccount": "Nytt konto",
|
"HeaderNewAccount": "Nytt konto",
|
||||||
"HeaderNewLibrary": "Nytt bibliotek",
|
"HeaderNewLibrary": "Nytt bibliotek",
|
||||||
"HeaderNotifications": "Meddelanden",
|
"HeaderNotifications": "Meddelanden",
|
||||||
"HeaderOpenRSSFeed": "Öppna RSS-flöde",
|
"HeaderOpenRSSFeed": "Öppna RSS-flöde",
|
||||||
"HeaderOtherFiles": "Andra filer",
|
"HeaderOtherFiles": "Andra filer",
|
||||||
|
"HeaderPasswordAuthentication": "Lösenordsautentisering",
|
||||||
"HeaderPermissions": "Behörigheter",
|
"HeaderPermissions": "Behörigheter",
|
||||||
"HeaderPlayerQueue": "Spelarkö",
|
"HeaderPlayerQueue": "Spellista",
|
||||||
|
"HeaderPlayerSettings": "Inställningar för uppspelning",
|
||||||
"HeaderPlaylist": "Spellista",
|
"HeaderPlaylist": "Spellista",
|
||||||
"HeaderPlaylistItems": "Spellistobjekt",
|
"HeaderPlaylistItems": "Böcker i spellistan",
|
||||||
"HeaderPodcastsToAdd": "Podcaster att lägga till",
|
"HeaderPodcastsToAdd": "Podcaster att lägga till",
|
||||||
"HeaderPreviewCover": "Förhandsgranska omslag",
|
"HeaderPreviewCover": "Förhandsgranska bokomslag",
|
||||||
"HeaderRSSFeedGeneral": "RSS-information",
|
"HeaderRSSFeedGeneral": "RSS-information",
|
||||||
"HeaderRSSFeedIsOpen": "RSS-flödet är öppet",
|
"HeaderRSSFeedIsOpen": "RSS-flödet är öppet",
|
||||||
"HeaderRSSFeeds": "RSS-flöden",
|
"HeaderRSSFeeds": "RSS-flöden",
|
||||||
"HeaderRemoveEpisode": "Ta bort avsnitt",
|
"HeaderRemoveEpisode": "Ta bort avsnitt",
|
||||||
"HeaderRemoveEpisodes": "Ta bort {0} avsnitt",
|
"HeaderRemoveEpisodes": "Ta bort {0} avsnitt",
|
||||||
"HeaderSavedMediaProgress": "Sparad medieförlopp",
|
"HeaderSavedMediaProgress": "Sparad historik",
|
||||||
"HeaderSchedule": "Schema",
|
"HeaderSchedule": "Schema",
|
||||||
"HeaderScheduleLibraryScans": "Schemalagda biblioteksskanningar",
|
"HeaderScheduleEpisodeDownloads": "Schemalägg automatiska avsnittsnedladdningar",
|
||||||
|
"HeaderScheduleLibraryScans": "Schema för skanning av biblioteket",
|
||||||
|
"HeaderSession": "Tillfälle",
|
||||||
"HeaderSetBackupSchedule": "Ange schemaläggning för säkerhetskopia",
|
"HeaderSetBackupSchedule": "Ange schemaläggning för säkerhetskopia",
|
||||||
"HeaderSettings": "Inställningar",
|
"HeaderSettings": "Inställningar",
|
||||||
"HeaderSettingsDisplay": "Visning",
|
"HeaderSettingsDisplay": "Visning",
|
||||||
@@ -170,83 +181,96 @@
|
|||||||
"HeaderSettingsGeneral": "Allmänt",
|
"HeaderSettingsGeneral": "Allmänt",
|
||||||
"HeaderSettingsScanner": "Skanner",
|
"HeaderSettingsScanner": "Skanner",
|
||||||
"HeaderSettingsWebClient": "Webklient",
|
"HeaderSettingsWebClient": "Webklient",
|
||||||
"HeaderSleepTimer": "Sovtidtagare",
|
"HeaderSleepTimer": "Timer för att sova",
|
||||||
"HeaderStatsLargestItems": "Största objekt",
|
"HeaderStatsLargestItems": "Största objekten",
|
||||||
"HeaderStatsLongestItems": "Längsta objekt (tim)",
|
"HeaderStatsLongestItems": "Längsta objekten (timmar)",
|
||||||
"HeaderStatsMinutesListeningChart": "Minuters lyssning (senaste 7 dagar)",
|
"HeaderStatsMinutesListeningChart": "Minuters lyssning (senaste 7 dagarna)",
|
||||||
"HeaderStatsRecentSessions": "Senaste sessioner",
|
"HeaderStatsRecentSessions": "Senaste tillfällena",
|
||||||
"HeaderStatsTop10Authors": "10 populäraste författarna",
|
"HeaderStatsTop10Authors": "10 populäraste författarna",
|
||||||
"HeaderStatsTop5Genres": "5 populäraste kategorierna",
|
"HeaderStatsTop5Genres": "5 populäraste kategorierna",
|
||||||
"HeaderTableOfContents": "Innehållsförteckning",
|
"HeaderTableOfContents": "Innehållsförteckning",
|
||||||
"HeaderTools": "Verktyg",
|
"HeaderTools": "Verktyg",
|
||||||
"HeaderUpdateAccount": "Uppdatera konto",
|
"HeaderUpdateAccount": "Uppdatera konto",
|
||||||
"HeaderUpdateAuthor": "Uppdatera författare",
|
"HeaderUpdateAuthor": "Uppdatera författare",
|
||||||
"HeaderUpdateDetails": "Uppdatera detaljer",
|
"HeaderUpdateDetails": "Uppdatera detaljer om boken",
|
||||||
"HeaderUpdateLibrary": "Uppdatera bibliotek",
|
"HeaderUpdateLibrary": "Uppdatera bibliotek",
|
||||||
"HeaderUsers": "Användare",
|
"HeaderUsers": "Användare",
|
||||||
"HeaderYearReview": "Sammanställning för {0}",
|
"HeaderYearReview": "Sammanställning av {0}",
|
||||||
"HeaderYourStats": "Din statistik",
|
"HeaderYourStats": "Din statistik",
|
||||||
"LabelAbridged": "Förkortad",
|
"LabelAbridged": "Förkortad",
|
||||||
|
"LabelAccessibleBy": "Tillgänglig för",
|
||||||
"LabelAccountType": "Kontotyp",
|
"LabelAccountType": "Kontotyp",
|
||||||
|
"LabelAccountTypeAdmin": "Administratör",
|
||||||
"LabelAccountTypeGuest": "Gäst",
|
"LabelAccountTypeGuest": "Gäst",
|
||||||
"LabelAccountTypeUser": "Användare",
|
"LabelAccountTypeUser": "Användare",
|
||||||
"LabelActivity": "Aktivitet",
|
"LabelActivity": "Aktivitet",
|
||||||
"LabelAddToCollection": "Lägg till i Samling",
|
"LabelAddToCollection": "Lägg till i en samling",
|
||||||
"LabelAddToCollectionBatch": "Lägg till {0} böcker i Samlingen",
|
"LabelAddToCollectionBatch": "Lägg till {0} böcker i en Samling",
|
||||||
"LabelAddToPlaylist": "Lägg till i Spellista",
|
"LabelAddToPlaylist": "Lägg till i en spellista",
|
||||||
"LabelAddToPlaylistBatch": "Lägg till {0} objekt i Spellistan",
|
"LabelAddToPlaylistBatch": "Lägg till {0} objekt i Spellistan",
|
||||||
"LabelAddedAt": "Tillagd vid",
|
"LabelAddedAt": "Datum adderad",
|
||||||
|
"LabelAddedDate": "Adderad {0}",
|
||||||
"LabelAdminUsersOnly": "Endast administratörer",
|
"LabelAdminUsersOnly": "Endast administratörer",
|
||||||
"LabelAll": "Alla",
|
"LabelAll": "Alla",
|
||||||
"LabelAllUsers": "Alla användare",
|
"LabelAllUsers": "Alla användare",
|
||||||
"LabelAllUsersExcludingGuests": "Alla användare utom gäster",
|
"LabelAllUsersExcludingGuests": "Alla användare utom gäster",
|
||||||
"LabelAllUsersIncludingGuests": "Alla användare inklusive gäster",
|
"LabelAllUsersIncludingGuests": "Alla användare inklusive gäster",
|
||||||
"LabelAlreadyInYourLibrary": "Redan i din samling",
|
"LabelAlreadyInYourLibrary": "Redan i din samling",
|
||||||
|
"LabelApiToken": "API-token",
|
||||||
"LabelAppend": "Lägg till",
|
"LabelAppend": "Lägg till",
|
||||||
|
"LabelAudioBitrate": "Bitrate för ljud (t.ex. 128k)",
|
||||||
|
"LabelAudioChannels": "Ljudkanaler (1 eller 2)",
|
||||||
|
"LabelAudioCodec": "Codec för ljud",
|
||||||
"LabelAuthor": "Författare",
|
"LabelAuthor": "Författare",
|
||||||
"LabelAuthorFirstLast": "Författare (Förnamn Efternamn)",
|
"LabelAuthorFirstLast": "Författare (För-, Efternamn)",
|
||||||
"LabelAuthorLastFirst": "Författare (Efternamn, Förnamn)",
|
"LabelAuthorLastFirst": "Författare (Efter-, Förnamn)",
|
||||||
"LabelAuthors": "Författare",
|
"LabelAuthors": "Författare",
|
||||||
"LabelAutoDownloadEpisodes": "Automatisk nedladdning av avsnitt",
|
"LabelAutoDownloadEpisodes": "Automatisk nedladdning av avsnitt",
|
||||||
"LabelAutoFetchMetadata": "Automatisk nedladdning av metadata",
|
"LabelAutoFetchMetadata": "Automatisk nedladdning av metadata",
|
||||||
"LabelAutoFetchMetadataHelp": "Hämtar metadata för titel, författare och serier. Kompletterande metadata får adderas efter uppladdningen.",
|
"LabelAutoFetchMetadataHelp": "Hämtar metadata för titel, författare och serier. Kompletterande metadata kan manuellt adderas efter uppladdningen.",
|
||||||
|
"LabelAutoRegisterDescription": "Skapa automatiskt nya användare efter inloggning",
|
||||||
"LabelBackToUser": "Tillbaka till användaren",
|
"LabelBackToUser": "Tillbaka till användaren",
|
||||||
|
"LabelBackupAudioFiles": "Säkerhetskopiera ljudfiler",
|
||||||
"LabelBackupLocation": "Plats för säkerhetskopia",
|
"LabelBackupLocation": "Plats för säkerhetskopia",
|
||||||
"LabelBackupsEnableAutomaticBackups": "Aktivera automatiska säkerhetskopior",
|
"LabelBackupsEnableAutomaticBackups": "Aktivera automatisk säkerhetskopiering",
|
||||||
"LabelBackupsEnableAutomaticBackupsHelp": "Säkerhetskopior sparas i \"/metadata/backups\"",
|
"LabelBackupsEnableAutomaticBackupsHelp": "Säkerhetskopior sparas i \"/metadata/backups\"",
|
||||||
"LabelBackupsMaxBackupSize": "Maximal storlek på säkerhetskopia (i GB) (0 = obegränsad)",
|
"LabelBackupsMaxBackupSize": "Maximal storlek på säkerhetskopia (i GB) (0 = obegränsad)",
|
||||||
"LabelBackupsMaxBackupSizeHelp": "Som ett skydd mot felkonfiguration kommer säkerhetskopior att misslyckas om de överskrider den konfigurerade storleken.",
|
"LabelBackupsMaxBackupSizeHelp": "Som ett skydd mot en felaktig konfiguration kommer säkerhetskopior inte att genomföras om de överskrider den konfigurerade storleken.",
|
||||||
"LabelBackupsNumberToKeep": "Antal säkerhetskopior att behålla",
|
"LabelBackupsNumberToKeep": "Antal säkerhetskopior att behålla",
|
||||||
"LabelBackupsNumberToKeepHelp": "Endast en säkerhetskopia tas bort åt gången, så om du redan har fler säkerhetskopior än detta bör du ta bort dem manuellt.",
|
"LabelBackupsNumberToKeepHelp": "Endast en gammal säkerhetskopia tas bort åt gången, så om du redan har fler säkerhetskopior än det angivna beloppet bör du ta bort dem manuellt.",
|
||||||
"LabelBitrate": "Bitfrekvens",
|
"LabelBitrate": "Bitfrekvens",
|
||||||
|
"LabelBonus": "Bonus",
|
||||||
"LabelBooks": "Böcker",
|
"LabelBooks": "Böcker",
|
||||||
"LabelButtonText": "Knapptext",
|
"LabelButtonText": "Knapptext",
|
||||||
"LabelByAuthor": "av {0}",
|
"LabelByAuthor": "av {0}",
|
||||||
"LabelChangePassword": "Ändra lösenord",
|
"LabelChangePassword": "Ändra lösenord",
|
||||||
"LabelChannels": "Kanaler",
|
"LabelChannels": "Kanaler",
|
||||||
"LabelChapterCount": "{0} kapitel",
|
"LabelChapterCount": "{0} kapitel",
|
||||||
"LabelChapterTitle": "Kapitelrubrik",
|
"LabelChapterTitle": "Titel på kapitel",
|
||||||
"LabelChapters": "Kapitel",
|
"LabelChapters": "Kapitel",
|
||||||
"LabelChaptersFound": "hittade kapitel",
|
"LabelChaptersFound": "hittade kapitel",
|
||||||
"LabelClickForMoreInfo": "Klicka för mer information",
|
"LabelClickForMoreInfo": "Klicka för mer information",
|
||||||
|
"LabelClickToUseCurrentValue": "Klicka för att använda aktuellt värde",
|
||||||
"LabelClosePlayer": "Stäng spelaren",
|
"LabelClosePlayer": "Stäng spelaren",
|
||||||
"LabelCollapseSeries": "Fäll ihop serie",
|
"LabelCodec": "Codec",
|
||||||
|
"LabelCollapseSeries": "Komprimera serier",
|
||||||
"LabelCollection": "Samling",
|
"LabelCollection": "Samling",
|
||||||
"LabelCollections": "Samlingar",
|
"LabelCollections": "Samlingar",
|
||||||
"LabelComplete": "Komplett",
|
"LabelComplete": "Komplett",
|
||||||
"LabelConfirmPassword": "Bekräfta lösenord",
|
"LabelConfirmPassword": "Bekräfta lösenord",
|
||||||
"LabelContinueListening": "Fortsätt Lyssna",
|
"LabelContinueListening": "Fortsätt att lyssna",
|
||||||
"LabelContinueReading": "Fortsätt Läsa",
|
"LabelContinueReading": "Fortsätt att läsa",
|
||||||
"LabelContinueSeries": "Fortsätt Serie",
|
"LabelContinueSeries": "Fortsätt med serien",
|
||||||
"LabelCover": "Omslag",
|
"LabelCover": "Bokomslag",
|
||||||
"LabelCoverImageURL": "URL till omslagsbild",
|
"LabelCoverImageURL": "URL till omslagsbild",
|
||||||
"LabelCreatedAt": "Skapad vid",
|
"LabelCreatedAt": "Skapad",
|
||||||
"LabelCronExpression": "Cron-uttryck",
|
"LabelCronExpression": "Schemaläggning med hjälp av Cron (Cron Expression)",
|
||||||
"LabelCurrent": "Nuvarande",
|
"LabelCurrent": "Nuvarande",
|
||||||
"LabelCurrently": "För närvarande:",
|
"LabelCurrently": "För närvarande:",
|
||||||
"LabelCustomCronExpression": "Anpassat Cron-uttryck:",
|
"LabelCustomCronExpression": "Anpassat Cron-uttryck:",
|
||||||
"LabelDatetime": "Datum och tid",
|
"LabelDatetime": "Datum och klockslag",
|
||||||
"LabelDeleteFromFileSystemCheckbox": "Ta bort från filsystem (avmarkera för att endast ta bort från databasen)",
|
"LabelDays": "Dagar",
|
||||||
|
"LabelDeleteFromFileSystemCheckbox": "Ta även bort från filsystem (avmarkera = raderar endast från databasen)",
|
||||||
"LabelDescription": "Beskrivning",
|
"LabelDescription": "Beskrivning",
|
||||||
"LabelDeselectAll": "Avmarkera alla",
|
"LabelDeselectAll": "Avmarkera alla",
|
||||||
"LabelDevice": "Enhet",
|
"LabelDevice": "Enhet",
|
||||||
@@ -255,106 +279,136 @@
|
|||||||
"LabelDirectory": "Katalog",
|
"LabelDirectory": "Katalog",
|
||||||
"LabelDiscFromFilename": "Skiva från filnamn",
|
"LabelDiscFromFilename": "Skiva från filnamn",
|
||||||
"LabelDiscFromMetadata": "Skiva från metadata",
|
"LabelDiscFromMetadata": "Skiva från metadata",
|
||||||
"LabelDiscover": "Upptäck",
|
"LabelDiscover": "Några förslag",
|
||||||
"LabelDownload": "Ladda ner",
|
"LabelDownload": "Ladda ner",
|
||||||
"LabelDownloadNEpisodes": "Ladda ner {0} avsnitt",
|
"LabelDownloadNEpisodes": "Ladda ner {0} avsnitt",
|
||||||
|
"LabelDownloadable": "Nedladdningsbar",
|
||||||
"LabelDuration": "Varaktighet",
|
"LabelDuration": "Varaktighet",
|
||||||
|
"LabelDurationComparisonExactMatch": "(exakt matchning)",
|
||||||
"LabelDurationFound": "Varaktighet hittad:",
|
"LabelDurationFound": "Varaktighet hittad:",
|
||||||
"LabelEbook": "E-bok",
|
"LabelEbook": "E-bok",
|
||||||
"LabelEbooks": "Eböcker",
|
"LabelEbooks": "E-böcker",
|
||||||
"LabelEdit": "Redigera",
|
"LabelEdit": "Redigera",
|
||||||
"LabelEmail": "E-post",
|
"LabelEmail": "E-postadress",
|
||||||
"LabelEmailSettingsFromAddress": "Från adress",
|
"LabelEmailSettingsFromAddress": "Från e-postadress",
|
||||||
|
"LabelEmailSettingsRejectUnauthorized": "Avvisa icke-autentiserade certifikat",
|
||||||
|
"LabelEmailSettingsRejectUnauthorizedHelp": "Inaktivering av SSL-certifikatsvalidering kan exponera din anslutning för säkerhetsrisker, såsom man-in-the-middle-attacker. Inaktivera bara denna inställning om du förstår implikationerna och litar på den epostserver du ansluter till.",
|
||||||
"LabelEmailSettingsSecure": "Säker",
|
"LabelEmailSettingsSecure": "Säker",
|
||||||
"LabelEmailSettingsSecureHelp": "Om sant kommer anslutningen att använda TLS vid anslutning till servern. Om falskt används TLS om servern stöder STARTTLS-tillägget. I de flesta fall, om du ansluter till port 465, bör du ställa in detta värde till sant. För port 587 eller 25, låt det vara falskt. (från nodemailer.com/smtp/#authentication)",
|
"LabelEmailSettingsSecureHelp": "Om sant kommer anslutningen att använda TLS vid anslutning till servern. Om falskt används TLS om servern stöder STARTTLS-tillägget. I de flesta fall, om du ansluter till port 465, bör du ställa in detta värde till sant. För port 587 eller 25, låt det vara falskt. (från nodemailer.com/smtp/#authentication)",
|
||||||
"LabelEmailSettingsTestAddress": "Testadress",
|
"LabelEmailSettingsTestAddress": "E-postadress för test",
|
||||||
"LabelEmbeddedCover": "Inbäddat omslag",
|
"LabelEmbeddedCover": "Inbäddat bokomslag",
|
||||||
"LabelEnable": "Aktivera",
|
"LabelEnable": "Aktivera",
|
||||||
|
"LabelEncodingBackupLocation": "En säkerhetskopia av dina orginalljudfiler kommer att placeras i katalogen:",
|
||||||
|
"LabelEncodingClearItemCache": "Kom ihåg att regelbundet radera cachen för föremål. Du hittar funktionen längst ner på sidan 'Inställningar'.",
|
||||||
|
"LabelEncodingFinishedM4B": "Den färdiga M4B-filen kommer att placeras i katalogen:",
|
||||||
|
"LabelEncodingInfoEmbedded": "Metadata kommer att adderas i ljudfilerna i mappen med ljudboken.",
|
||||||
|
"LabelEncodingStartedNavigation": "När du startad omkodningen kan du lämna denna sida. Omkodningen fortsätter i bakgrunden.",
|
||||||
|
"LabelEncodingTimeWarning": "Avkodningen kan ta upp till 30 minuter eller ännu längre för riktigt stora filer.",
|
||||||
|
"LabelEncodingWarningAdvancedSettings": "VARNING: Ändra inte inställningarna om du inte är bekant med inställningarna för omkodning med 'ffmpeg'.",
|
||||||
|
"LabelEncodingWatcherDisabled": "Om funktionen 'Watcher' är avstängd behöver du göra en ny skanning av ljudboken efteråt.",
|
||||||
"LabelEnd": "Slut",
|
"LabelEnd": "Slut",
|
||||||
"LabelEndOfChapter": "Slut av kapitel",
|
"LabelEndOfChapter": "Slut av kapitel",
|
||||||
"LabelEpisode": "Avsnitt",
|
"LabelEpisode": "Avsnitt",
|
||||||
"LabelEpisodeTitle": "Avsnittsrubrik",
|
"LabelEpisodeTitle": "Avsnittsrubrik",
|
||||||
"LabelEpisodeType": "Avsnittstyp",
|
"LabelEpisodeType": "Avsnittstyp",
|
||||||
"LabelExample": "Exempel",
|
"LabelExample": "Exempel",
|
||||||
|
"LabelExpandSeries": "Expandera serier",
|
||||||
"LabelFeedURL": "Flödes-URL",
|
"LabelFeedURL": "Flödes-URL",
|
||||||
|
"LabelFetchingMetadata": "Hämtar metadata",
|
||||||
"LabelFile": "Fil",
|
"LabelFile": "Fil",
|
||||||
"LabelFileBirthtime": "Födelse-tidpunkt för fil",
|
"LabelFileBirthtime": "Tidpunkt, filen skapades",
|
||||||
"LabelFileModified": "Fil ändrad",
|
"LabelFileModified": "Tidpunkt, filen ändrades",
|
||||||
|
"LabelFileModifiedDate": "Ändrad {0}",
|
||||||
"LabelFilename": "Filnamn",
|
"LabelFilename": "Filnamn",
|
||||||
"LabelFilterByUser": "Filtrera efter användare",
|
"LabelFilterByUser": "Välj användare",
|
||||||
"LabelFindEpisodes": "Hitta avsnitt",
|
"LabelFindEpisodes": "Hitta avsnitt",
|
||||||
"LabelFinished": "Avslutad",
|
"LabelFinished": "Avslutad",
|
||||||
"LabelFolder": "Mapp",
|
"LabelFolder": "Mapp",
|
||||||
"LabelFolders": "Mappar",
|
"LabelFolders": "Mappar",
|
||||||
|
"LabelFontBold": "Fetstil",
|
||||||
"LabelFontBoldness": "Fetstil",
|
"LabelFontBoldness": "Fetstil",
|
||||||
"LabelFontFamily": "Teckensnittsfamilj",
|
"LabelFontFamily": "Typsnittsfamilj",
|
||||||
"LabelFontScale": "Teckensnittsskala",
|
"LabelFontItalic": "Kursiverad",
|
||||||
|
"LabelFontScale": "Skala på typsnitt",
|
||||||
|
"LabelFontStrikethrough": "Genomstruken",
|
||||||
"LabelGenre": "Kategori",
|
"LabelGenre": "Kategori",
|
||||||
"LabelGenres": "Kategorier",
|
"LabelGenres": "Kategorier",
|
||||||
"LabelHardDeleteFile": "Hård radering av fil",
|
"LabelHardDeleteFile": "Hård radering av fil",
|
||||||
"LabelHasEbook": "Har E-bok",
|
"LabelHasEbook": "Har e-bok",
|
||||||
"LabelHasSupplementaryEbook": "Har komplimenterande E-bok",
|
"LabelHasSupplementaryEbook": "Har kompletterande e-bok",
|
||||||
|
"LabelHideSubtitles": "Dölj underrubriker",
|
||||||
|
"LabelHighestPriority": "Högst prioritet",
|
||||||
"LabelHost": "Värd",
|
"LabelHost": "Värd",
|
||||||
"LabelHour": "Timme",
|
"LabelHour": "Timme",
|
||||||
|
"LabelHours": "Timmar",
|
||||||
"LabelIcon": "Ikon",
|
"LabelIcon": "Ikon",
|
||||||
"LabelImageURLFromTheWeb": "Bild-URL från webben",
|
"LabelImageURLFromTheWeb": "Skriv URL-adressen till bilden på webben",
|
||||||
"LabelInProgress": "Pågående",
|
"LabelInProgress": "Pågående",
|
||||||
"LabelIncludeInTracklist": "Inkludera i spårlista",
|
"LabelIncludeInTracklist": "Inkludera i spårlista",
|
||||||
"LabelIncomplete": "Ofullständig",
|
"LabelIncomplete": "Ofullständig",
|
||||||
"LabelInterval": "Intervall",
|
"LabelInterval": "Intervall",
|
||||||
"LabelIntervalCustomDailyWeekly": "Anpassat dagligt/veckovis",
|
"LabelIntervalCustomDailyWeekly": "Anpassad daglig/veckovis",
|
||||||
"LabelIntervalEvery12Hours": "Var 12:e timme",
|
"LabelIntervalEvery12Hours": "Var 12:e timme",
|
||||||
"LabelIntervalEvery15Minutes": "Var 15:e minut",
|
"LabelIntervalEvery15Minutes": "Var 15:e minut",
|
||||||
"LabelIntervalEvery2Hours": "Var 2:e timme",
|
"LabelIntervalEvery2Hours": "Varannan timme",
|
||||||
"LabelIntervalEvery30Minutes": "Var 30:e minut",
|
"LabelIntervalEvery30Minutes": "Var 30:e minut",
|
||||||
"LabelIntervalEvery6Hours": "Var 6:e timme",
|
"LabelIntervalEvery6Hours": "Var 6:e timme",
|
||||||
"LabelIntervalEveryDay": "Varje dag",
|
"LabelIntervalEveryDay": "Varje dag",
|
||||||
"LabelIntervalEveryHour": "Varje timme",
|
"LabelIntervalEveryHour": "Varje timme",
|
||||||
"LabelInvert": "Invertera",
|
"LabelInvert": "Invertera",
|
||||||
"LabelItem": "Objekt",
|
"LabelItem": "Objekt",
|
||||||
|
"LabelJumpBackwardAmount": "Inställning för \"hopp bakåt\"",
|
||||||
|
"LabelJumpForwardAmount": "Inställning för \"hopp framåt\"",
|
||||||
"LabelLanguage": "Språk",
|
"LabelLanguage": "Språk",
|
||||||
"LabelLanguageDefaultServer": "Standardspråk för server",
|
"LabelLanguageDefaultServer": "Standardspråk för server",
|
||||||
"LabelLastBookAdded": "Senaste bok tillagd",
|
"LabelLanguages": "Språk",
|
||||||
"LabelLastBookUpdated": "Senaste bok uppdaterad",
|
"LabelLastBookAdded": "Bok senast tillagd",
|
||||||
"LabelLastSeen": "Senast sedd",
|
"LabelLastBookUpdated": "Bok senast uppdaterad",
|
||||||
"LabelLastTime": "Senaste gången",
|
"LabelLastSeen": "Senast inloggad",
|
||||||
"LabelLastUpdate": "Senaste uppdatering",
|
"LabelLastTime": "Senaste tillfället",
|
||||||
|
"LabelLastUpdate": "Senast uppdaterad",
|
||||||
"LabelLayout": "Layout",
|
"LabelLayout": "Layout",
|
||||||
"LabelLayoutSinglePage": "En sida",
|
"LabelLayoutSinglePage": "En sida",
|
||||||
"LabelLayoutSplitPage": "Dela sida",
|
"LabelLayoutSplitPage": "Uppslag",
|
||||||
"LabelLess": "Mindre",
|
"LabelLess": "Mindre",
|
||||||
"LabelLibrariesAccessibleToUser": "Åtkomliga bibliotek för användare",
|
"LabelLibrariesAccessibleToUser": "Bibliotek användaren har tillgång till",
|
||||||
"LabelLibrary": "Bibliotek",
|
"LabelLibrary": "Bibliotek",
|
||||||
"LabelLibraryItem": "Biblioteksobjekt",
|
"LabelLibraryItem": "Objekt",
|
||||||
"LabelLibraryName": "Biblioteksnamn",
|
"LabelLibraryName": "Biblioteksnamn",
|
||||||
"LabelLimit": "Begränsning",
|
"LabelLimit": "Begränsning",
|
||||||
"LabelLineSpacing": "Radavstånd",
|
"LabelLineSpacing": "Radavstånd",
|
||||||
"LabelListenAgain": "Lyssna igen",
|
"LabelListenAgain": "Läs/Lyssna igen",
|
||||||
"LabelLogLevelDebug": "Felsökningsnivå: Felsökning",
|
"LabelLogLevelDebug": "Felsökning",
|
||||||
"LabelLogLevelInfo": "Felsökningsnivå: Information",
|
"LabelLogLevelInfo": "Information",
|
||||||
"LabelLogLevelWarn": "Felsökningsnivå: Varning",
|
"LabelLogLevelWarn": "Varningar",
|
||||||
"LabelLookForNewEpisodesAfterDate": "Sök efter nya avsnitt efter detta datum",
|
"LabelLookForNewEpisodesAfterDate": "Sök efter nya avsnitt efter detta datum",
|
||||||
|
"LabelLowestPriority": "Lägst prioritet",
|
||||||
"LabelMediaPlayer": "Mediaspelare",
|
"LabelMediaPlayer": "Mediaspelare",
|
||||||
"LabelMediaType": "Mediatyp",
|
"LabelMediaType": "Mediatyp",
|
||||||
"LabelMetaTag": "Metamärke",
|
"LabelMetaTag": "Metadata",
|
||||||
"LabelMetaTags": "Metamärken",
|
"LabelMetaTags": "Metadata",
|
||||||
|
"LabelMetadataOrderOfPrecedenceDescription": "Källor för metadata med högre prioritet har företräde före källor med lägre prioritet",
|
||||||
"LabelMetadataProvider": "Källa för metadata",
|
"LabelMetadataProvider": "Källa för metadata",
|
||||||
"LabelMinute": "Minut",
|
"LabelMinute": "Minut",
|
||||||
"LabelMissing": "Saknad",
|
"LabelMinutes": "Minuter",
|
||||||
|
"LabelMissing": "Saknar",
|
||||||
|
"LabelMissingEbook": "Saknar e-bok",
|
||||||
|
"LabelMissingSupplementaryEbook": "Saknar kompletterande e-bok",
|
||||||
"LabelMore": "Mer",
|
"LabelMore": "Mer",
|
||||||
"LabelMoreInfo": "Mer information",
|
"LabelMoreInfo": "Mer information",
|
||||||
"LabelName": "Namn",
|
"LabelName": "Namn",
|
||||||
"LabelNarrator": "Uppläsare",
|
"LabelNarrator": "Uppläsare",
|
||||||
"LabelNarrators": "Uppläsare",
|
"LabelNarrators": "Uppläsare",
|
||||||
"LabelNew": "Ny",
|
"LabelNew": "Nytt",
|
||||||
"LabelNewPassword": "Nytt lösenord",
|
"LabelNewPassword": "Nytt lösenord",
|
||||||
"LabelNewestAuthors": "Senast tillagda författare",
|
"LabelNewestAuthors": "Senaste författarna",
|
||||||
"LabelNewestEpisodes": "Senast tillagda avsnitt",
|
"LabelNewestEpisodes": "Senast tillagda avsnitt",
|
||||||
"LabelNextBackupDate": "Nästa datum för säkerhetskopia",
|
"LabelNextBackupDate": "Nästa datum för säkerhetskopiering",
|
||||||
"LabelNextScheduledRun": "Nästa schemalagda körning",
|
"LabelNextScheduledRun": "Nästa schemalagda körning",
|
||||||
|
"LabelNoCustomMetadataProviders": "Ingen egen källa för metadata",
|
||||||
"LabelNoEpisodesSelected": "Inga avsnitt valda",
|
"LabelNoEpisodesSelected": "Inga avsnitt valda",
|
||||||
"LabelNotFinished": "Ej avslutad",
|
"LabelNotFinished": "Ej avslutad",
|
||||||
"LabelNotStarted": "Inte påbörjad",
|
"LabelNotStarted": "Ej påbörjad",
|
||||||
"LabelNotes": "Anteckningar",
|
"LabelNotes": "Anteckningar",
|
||||||
"LabelNotificationAppriseURL": "Apprise URL(er)",
|
"LabelNotificationAppriseURL": "Apprise URL(er)",
|
||||||
"LabelNotificationAvailableVariables": "Tillgängliga variabler",
|
"LabelNotificationAvailableVariables": "Tillgängliga variabler",
|
||||||
@@ -369,22 +423,27 @@
|
|||||||
"LabelNumberOfEpisodes": "Antal avsnitt",
|
"LabelNumberOfEpisodes": "Antal avsnitt",
|
||||||
"LabelOpenRSSFeed": "Öppna RSS-flöde",
|
"LabelOpenRSSFeed": "Öppna RSS-flöde",
|
||||||
"LabelOverwrite": "Skriv över",
|
"LabelOverwrite": "Skriv över",
|
||||||
|
"LabelPaginationPageXOfY": "Sida {0} av {1}",
|
||||||
"LabelPassword": "Lösenord",
|
"LabelPassword": "Lösenord",
|
||||||
"LabelPath": "Sökväg",
|
"LabelPath": "Sökväg",
|
||||||
"LabelPermissionsAccessAllLibraries": "Kan komma åt alla bibliotek",
|
"LabelPermissionsAccessAllLibraries": "Kan komma åt alla bibliotek",
|
||||||
"LabelPermissionsAccessAllTags": "Kan komma åt alla taggar",
|
"LabelPermissionsAccessAllTags": "Kan komma åt alla taggar",
|
||||||
"LabelPermissionsAccessExplicitContent": "Kan komma åt explicit innehåll",
|
"LabelPermissionsAccessExplicitContent": "Kan komma åt explicit innehåll",
|
||||||
|
"LabelPermissionsCreateEreader": "Kan addera e-läsarenhet",
|
||||||
"LabelPermissionsDelete": "Kan radera",
|
"LabelPermissionsDelete": "Kan radera",
|
||||||
"LabelPermissionsDownload": "Kan ladda ner",
|
"LabelPermissionsDownload": "Kan ladda ner",
|
||||||
"LabelPermissionsUpdate": "Kan uppdatera",
|
"LabelPermissionsUpdate": "Kan uppdatera",
|
||||||
"LabelPermissionsUpload": "Kan ladda upp",
|
"LabelPermissionsUpload": "Kan ladda upp",
|
||||||
|
"LabelPersonalYearReview": "En sammanställning av ditt år, sidan {0}",
|
||||||
"LabelPhotoPathURL": "Bildsökväg/URL",
|
"LabelPhotoPathURL": "Bildsökväg/URL",
|
||||||
"LabelPlayMethod": "Spelläge",
|
"LabelPlayMethod": "Spelläge",
|
||||||
|
"LabelPlayerChapterNumberMarker": "{0} av {1}",
|
||||||
"LabelPlaylists": "Spellistor",
|
"LabelPlaylists": "Spellistor",
|
||||||
"LabelPodcast": "Podcast",
|
"LabelPodcast": "Podcast",
|
||||||
"LabelPodcastSearchRegion": "Podcast-sökområde",
|
"LabelPodcastSearchRegion": "Podcast-sökområde",
|
||||||
"LabelPodcastType": "Podcasttyp",
|
"LabelPodcastType": "Podcasttyp",
|
||||||
"LabelPodcasts": "Podcasts",
|
"LabelPodcasts": "Podcasts",
|
||||||
|
"LabelPort": "Port",
|
||||||
"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",
|
||||||
@@ -392,6 +451,7 @@
|
|||||||
"LabelProvider": "Källa",
|
"LabelProvider": "Källa",
|
||||||
"LabelPubDate": "Publiceringsdatum",
|
"LabelPubDate": "Publiceringsdatum",
|
||||||
"LabelPublishYear": "Publiceringsår",
|
"LabelPublishYear": "Publiceringsår",
|
||||||
|
"LabelPublishedDecade": "Årtionde för publicering",
|
||||||
"LabelPublisher": "Utgivare",
|
"LabelPublisher": "Utgivare",
|
||||||
"LabelRSSFeedCustomOwnerEmail": "Anpassad ägarens e-post",
|
"LabelRSSFeedCustomOwnerEmail": "Anpassad ägarens e-post",
|
||||||
"LabelRSSFeedCustomOwnerName": "Anpassat ägarnamn",
|
"LabelRSSFeedCustomOwnerName": "Anpassat ägarnamn",
|
||||||
@@ -403,15 +463,22 @@
|
|||||||
"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",
|
||||||
"LabelRecentSeries": "Senaste serier",
|
"LabelRecentSeries": "Nyaste serierna",
|
||||||
"LabelRecentlyAdded": "Nyligen tillagd",
|
"LabelRecentlyAdded": "Nyligen tillagda",
|
||||||
"LabelRecommended": "Rekommenderad",
|
"LabelRecommended": "Rekommenderad",
|
||||||
|
"LabelRegion": "Region",
|
||||||
"LabelReleaseDate": "Utgivningsdatum",
|
"LabelReleaseDate": "Utgivningsdatum",
|
||||||
"LabelRemoveCover": "Ta bort omslag",
|
"LabelRemoveAllMetadataAbs": "Radera alla 'metadata.abs' filer",
|
||||||
"LabelSearchTerm": "Sökterm",
|
"LabelRemoveAllMetadataJson": "Radera alla 'metadata.json' filer",
|
||||||
"LabelSearchTitle": "Sök titel",
|
"LabelRemoveCover": "Ta bort bokomslag",
|
||||||
|
"LabelRemoveMetadataFile": "Radera metadata-filer i alla mappar i biblioteket",
|
||||||
|
"LabelRemoveMetadataFileHelp": "Radera alla 'metadata.json' och 'metadata.abs' filer i dina {0} mappar.",
|
||||||
|
"LabelRowsPerPage": "Antal rader per sida",
|
||||||
|
"LabelSearchTerm": "Sökbegrepp",
|
||||||
|
"LabelSearchTitle": "Titel",
|
||||||
"LabelSearchTitleOrASIN": "Sök titel eller ASIN-kod",
|
"LabelSearchTitleOrASIN": "Sök titel eller ASIN-kod",
|
||||||
"LabelSeason": "Säsong",
|
"LabelSeason": "Säsong",
|
||||||
|
"LabelSelectAll": "Välj alla",
|
||||||
"LabelSelectAllEpisodes": "Välj alla avsnitt",
|
"LabelSelectAllEpisodes": "Välj alla avsnitt",
|
||||||
"LabelSelectEpisodesShowing": "Välj {0} avsnitt som visas",
|
"LabelSelectEpisodesShowing": "Välj {0} avsnitt som visas",
|
||||||
"LabelSelectUsers": "Välj användare",
|
"LabelSelectUsers": "Välj användare",
|
||||||
@@ -419,62 +486,77 @@
|
|||||||
"LabelSequence": "Sekvens",
|
"LabelSequence": "Sekvens",
|
||||||
"LabelSeries": "Serier",
|
"LabelSeries": "Serier",
|
||||||
"LabelSeriesName": "Serienamn",
|
"LabelSeriesName": "Serienamn",
|
||||||
"LabelSeriesProgress": "Serieframsteg",
|
"LabelSeriesProgress": "Status för serier",
|
||||||
"LabelSetEbookAsPrimary": "Ange som primär",
|
"LabelServerLogLevel": "Nivå på loggning",
|
||||||
|
"LabelServerYearReview": "En sammanställning av ditt bibliotek, sidan {0}",
|
||||||
|
"LabelSetEbookAsPrimary": "Ange som primär fil",
|
||||||
"LabelSetEbookAsSupplementary": "Ange som kompletterande",
|
"LabelSetEbookAsSupplementary": "Ange som kompletterande",
|
||||||
|
"LabelSettingsAllowIframe": "Tillåt att Audiobookshelf får visas i en iframe",
|
||||||
"LabelSettingsAudiobooksOnly": "Endast ljudböcker",
|
"LabelSettingsAudiobooksOnly": "Endast ljudböcker",
|
||||||
"LabelSettingsAudiobooksOnlyHelp": "Aktivera detta alternativ kommer att ignorera e-boksfiler om de inte finns inom en ljudboksmapp, i vilket fall de kommer att anges som kompletterande e-böcker",
|
"LabelSettingsAudiobooksOnlyHelp": "När detta alternativ aktiveras kommer filer med e-böcker<br>att ignoreras om de inte lagras i en mapp med en ljudbok.<br>I det fallet kommer de att anges som en kompletterande e-bok",
|
||||||
"LabelSettingsBookshelfViewHelp": "Skeumorfisk design med trähyllor",
|
"LabelSettingsBookshelfViewHelp": "Bakgrund med ett utseende liknande en bokhylla i trä",
|
||||||
"LabelSettingsChromecastSupport": "Stöd för Chromecast",
|
"LabelSettingsChromecastSupport": "Stöd för Chromecast",
|
||||||
"LabelSettingsDateFormat": "Datumformat",
|
"LabelSettingsDateFormat": "Datumformat",
|
||||||
"LabelSettingsDisableWatcher": "Inaktivera Watcher",
|
"LabelSettingsDisableWatcher": "Inaktivera Watcher",
|
||||||
"LabelSettingsDisableWatcherForLibrary": "Inaktivera mappbevakning för bibliotek",
|
"LabelSettingsDisableWatcherForLibrary": "Inaktivera bevakning med Watcher för biblioteket",
|
||||||
"LabelSettingsDisableWatcherHelp": "Inaktiverar automatiskt lägga till/uppdatera objekt när filändringar upptäcks. *Kräver omstart av servern",
|
"LabelSettingsDisableWatcherHelp": "Inaktiverar automatik att addera/uppdatera objekt<br>när ändringar av filer genomförs.<br>OBS: Kräver en omstart av servern",
|
||||||
"LabelSettingsEnableWatcher": "Aktivera Watcher",
|
"LabelSettingsEnableWatcher": "Aktivera Watcher",
|
||||||
"LabelSettingsEnableWatcherForLibrary": "Aktivera mappbevakning för bibliotek",
|
"LabelSettingsEnableWatcherForLibrary": "Aktivera bevakning med Watcher för biblioteket",
|
||||||
"LabelSettingsEnableWatcherHelp": "Aktiverar automatiskt lägga till/uppdatera objekt när filändringar upptäcks. *Kräver omstart av servern",
|
"LabelSettingsEnableWatcherHelp": "Aktiverar automatik att addera/uppdatera objekt<br>när ändringar av filer genomförs.<br>OBS: Kräver en omstart av servern",
|
||||||
|
"LabelSettingsEpubsAllowScriptedContent": "Tillåt e-böcker i epubs-format som innehåller script",
|
||||||
|
"LabelSettingsEpubsAllowScriptedContentHelp": "Tillåt att epub-filer får använda script.<br>Det rekommenderas att denna inställning är<br>avstängd när du inte litar på källan för epub-filerna.",
|
||||||
"LabelSettingsExperimentalFeatures": "Experimentella funktioner",
|
"LabelSettingsExperimentalFeatures": "Experimentella funktioner",
|
||||||
"LabelSettingsExperimentalFeaturesHelp": "Funktioner under utveckling som behöver din feedback och hjälp med testning. Klicka för att öppna diskussionen på GitHub.",
|
"LabelSettingsExperimentalFeaturesHelp": "Funktioner under utveckling som behöver din feedback och hjälp med testning. Klicka för att öppna diskussionen på GitHub.",
|
||||||
"LabelSettingsFindCovers": "Hitta omslag",
|
"LabelSettingsFindCovers": "Hitta ett bokomslag",
|
||||||
"LabelSettingsFindCoversHelp": "Om din ljudbok inte har ett inbäddat omslag eller en omslagsbild i mappen kommer skannern att försöka hitta ett omslag.<br>Observera: Detta kommer att förlänga skannningstiden",
|
"LabelSettingsFindCoversHelp": "Om din bok inte har ett bokomslag inbäddat i filen eller en fil med bokomslaget i mappen kommer skannern att försöka hitta ett omslag. OBS: Detta kommer att förlänga inläsningstiden",
|
||||||
"LabelSettingsHideSingleBookSeries": "Dölj serier med en bok",
|
"LabelSettingsHideSingleBookSeries": "Dölj serier som endast innehåller en bok",
|
||||||
"LabelSettingsHideSingleBookSeriesHelp": "Serier som har en enda bok kommer att döljas från seriesidan och hyllsidan på startsidan.",
|
"LabelSettingsHideSingleBookSeriesHelp": "Serier som endast har en bok kommer att<br>döljas från sidan 'Serier' och hyllorna på startsidan.",
|
||||||
"LabelSettingsHomePageBookshelfView": "Startsida använd bokhyllvy",
|
"LabelSettingsHomePageBookshelfView": "Använd vy liknande en bokhylla på startsidan",
|
||||||
"LabelSettingsLibraryBookshelfView": "Bibliotek använd bokhyllvy",
|
"LabelSettingsLibraryBookshelfView": "Använd vy liknande en bokhylla i biblioteket",
|
||||||
"LabelSettingsParseSubtitles": "Analysera undertexter",
|
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "Procent genomfört är större än",
|
||||||
"LabelSettingsParseSubtitlesHelp": "Extrahera undertitlar från namnet på mappar för ljudböcker.<br>Undertiteln måste vara åtskilda med ett bindestreck \" - \".<br>Mappen \"Boktitel - En undertitel här\" har undertiteln \"En undertitel här\"",
|
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Återstående tid är mindre än (sekunder)",
|
||||||
"LabelSettingsPreferMatchedMetadata": "Föredra matchad metadata",
|
"LabelSettingsLibraryMarkAsFinishedWhen": "Markera objekt som avslutade när",
|
||||||
|
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Hoppa över tidigare böcker i en serie",
|
||||||
|
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Sektionen 'Fortsätt med serien' på startsidan visar \"nästa bok\" i serien,<br>där åtminstone en bok avslutats, och ingen bok i serien har påbörjats.<br>Om detta alternativ aktiveras kommer efterföljande bok till den<br>avslutade att föreslås - istället för den första ej avslutade boken i serien.",
|
||||||
|
"LabelSettingsParseSubtitles": "Hämta undertitel från bokens mapp",
|
||||||
|
"LabelSettingsParseSubtitlesHelp": "Hämtar undertiteln från namnet på mappen där boken lagras.<br>Undertiteln måste vara åtskilda med ett bindestreck ' - '.<br>En mapp med namnet 'Boktitel - Bokens undertitel'<br> får undertiteln \"Bokens undertitel\"",
|
||||||
|
"LabelSettingsPreferMatchedMetadata": "Prioritera matchad metadata",
|
||||||
"LabelSettingsPreferMatchedMetadataHelp": "Matchad data kommer att åsidosätta objektdetaljer vid snabbmatchning. Som standard kommer snabbmatchning endast att fylla i saknade detaljer.",
|
"LabelSettingsPreferMatchedMetadataHelp": "Matchad data kommer att åsidosätta objektdetaljer vid snabbmatchning. Som standard kommer snabbmatchning endast att fylla i saknade detaljer.",
|
||||||
"LabelSettingsSkipMatchingBooksWithASIN": "Hoppa över matchande böcker med ASIN-kod",
|
"LabelSettingsSkipMatchingBooksWithASIN": "Hoppa över matchande böcker som har en ASIN-kod",
|
||||||
"LabelSettingsSkipMatchingBooksWithISBN": "Hoppa över matchande böcker med ISBN",
|
"LabelSettingsSkipMatchingBooksWithISBN": "Hoppa över matchande böcker som har en ISBN-kod",
|
||||||
"LabelSettingsSortingIgnorePrefixes": "Ignorera prefix vid sortering",
|
"LabelSettingsSortingIgnorePrefixes": "Ignorera prefix vid sortering",
|
||||||
"LabelSettingsSortingIgnorePrefixesHelp": "För prefix som t.ex. \"the\" kommer boktiteln \"The Book Title\" att sorteras som \"Book Title, The\"",
|
"LabelSettingsSortingIgnorePrefixesHelp": "För prefix som t.ex. \"the\" kommer boktiteln \"The Book Title\" att sorteras som \"Book Title, The\"",
|
||||||
"LabelSettingsSquareBookCovers": "Använd fyrkantiga bokomslag",
|
"LabelSettingsSquareBookCovers": "Använd kvadratiska bokomslag",
|
||||||
"LabelSettingsSquareBookCoversHelp": "Föredrar att använda fyrkantiga omslag över standard 1.6:1 bokomslag",
|
"LabelSettingsSquareBookCoversHelp": "Föredrar att använda kvadratiska bokomslag<br>före standardformatet 1.6:1",
|
||||||
"LabelSettingsStoreCoversWithItem": "Lagra omslag med objekt",
|
"LabelSettingsStoreCoversWithItem": "Lagra bokomslag med objektet",
|
||||||
"LabelSettingsStoreCoversWithItemHelp": "Som standard lagras bokomslag i mappen /metadata/items. Genom att aktivera detta alternativ kommer omslagen att lagra i din biblioteksmapp. Endast en fil med namnet \"cover\" kommer att behållas",
|
"LabelSettingsStoreCoversWithItemHelp": "Som standard lagras bokomslag i mappen '/metadata/items'.<br>Genom att aktivera detta alternativ kommer<br>omslagen att lagra i din biblioteksmapp.<br>Endast en fil med namnet 'cover' kommer att behållas",
|
||||||
"LabelSettingsStoreMetadataWithItem": "Lagra metadata med objekt",
|
"LabelSettingsStoreMetadataWithItem": "Lagra metadata med objektet",
|
||||||
"LabelSettingsStoreMetadataWithItemHelp": "Som standard lagras metadatafiler i mappen /metadata/items. Genom att aktivera detta alternativ kommer metadatafilerna att lagras i dina biblioteksmappar",
|
"LabelSettingsStoreMetadataWithItemHelp": "Som standard lagras metadatafiler i mappen '/metadata/items'. Genom att aktivera detta alternativ kommer metadatafilerna att lagra i din biblioteksmapp",
|
||||||
"LabelSettingsTimeFormat": "Tidsformat",
|
"LabelSettingsTimeFormat": "Tidsformat",
|
||||||
|
"LabelShare": "Dela",
|
||||||
"LabelShowAll": "Visa alla",
|
"LabelShowAll": "Visa alla",
|
||||||
|
"LabelShowSeconds": "Visa sekunder",
|
||||||
|
"LabelShowSubtitles": "Visa underrubriker",
|
||||||
"LabelSize": "Storlek",
|
"LabelSize": "Storlek",
|
||||||
"LabelSleepTimer": "Sleeptimer",
|
"LabelSleepTimer": "Sovtimer",
|
||||||
"LabelStart": "Starta",
|
"LabelSortAscending": "Stigande",
|
||||||
|
"LabelSortDescending": "Fallande",
|
||||||
|
"LabelStart": "Start",
|
||||||
"LabelStartTime": "Starttid",
|
"LabelStartTime": "Starttid",
|
||||||
"LabelStarted": "Startad",
|
"LabelStarted": "Startad",
|
||||||
"LabelStartedAt": "Startad vid",
|
"LabelStartedAt": "Startades",
|
||||||
"LabelStatsAudioTracks": "Ljudspår",
|
"LabelStatsAudioTracks": "Ljudspår",
|
||||||
"LabelStatsAuthors": "Författare",
|
"LabelStatsAuthors": "Författare",
|
||||||
"LabelStatsBestDay": "Bästa dag",
|
"LabelStatsBestDay": "Bästa dag",
|
||||||
"LabelStatsDailyAverage": "Dagligt genomsnitt",
|
"LabelStatsDailyAverage": "Dagligt genomsnitt",
|
||||||
"LabelStatsDays": "Dagar",
|
"LabelStatsDays": "Dagar",
|
||||||
"LabelStatsDaysListened": "Dagar lyssnade",
|
"LabelStatsDaysListened": "dagars lyssnande",
|
||||||
"LabelStatsHours": "Timmar",
|
"LabelStatsHours": "Timmar",
|
||||||
"LabelStatsInARow": "i rad",
|
"LabelStatsInARow": "i rad",
|
||||||
"LabelStatsItemsFinished": "Objekt avslutade",
|
"LabelStatsItemsFinished": "böcker avslutade",
|
||||||
"LabelStatsItemsInLibrary": "Objekt i biblioteket",
|
"LabelStatsItemsInLibrary": "Objekt i biblioteket",
|
||||||
"LabelStatsMinutes": "minuter",
|
"LabelStatsMinutes": "minuter",
|
||||||
"LabelStatsMinutesListening": "Minuter av lyssnande",
|
"LabelStatsMinutesListening": "minuters lyssnande",
|
||||||
"LabelStatsOverallDays": "Totalt antal dagar",
|
"LabelStatsOverallDays": "Totalt antal dagar",
|
||||||
"LabelStatsOverallHours": "Totalt antal timmar",
|
"LabelStatsOverallHours": "Totalt antal timmar",
|
||||||
"LabelStatsWeekListening": "Veckans lyssnande",
|
"LabelStatsWeekListening": "Veckans lyssnande",
|
||||||
@@ -482,10 +564,12 @@
|
|||||||
"LabelSupportedFileTypes": "Filtyper som accepteras",
|
"LabelSupportedFileTypes": "Filtyper som accepteras",
|
||||||
"LabelTag": "Tagg",
|
"LabelTag": "Tagg",
|
||||||
"LabelTags": "Taggar",
|
"LabelTags": "Taggar",
|
||||||
"LabelTagsAccessibleToUser": "Taggar tillgängliga för användaren",
|
"LabelTagsAccessibleToUser": "Taggar användaren har tillgång till",
|
||||||
"LabelTagsNotAccessibleToUser": "Taggar inte tillgängliga för användaren",
|
"LabelTagsNotAccessibleToUser": "Taggar inte tillgängliga för användaren",
|
||||||
"LabelTasks": "Körande uppgifter",
|
"LabelTasks": "Pågående aktivitet",
|
||||||
"LabelTheme": "Tema",
|
"LabelTextEditorBulletedList": "Punktlista",
|
||||||
|
"LabelTextEditorNumberedList": "Numrerad lista",
|
||||||
|
"LabelTheme": "Utseende",
|
||||||
"LabelThemeDark": "Mörkt",
|
"LabelThemeDark": "Mörkt",
|
||||||
"LabelThemeLight": "Ljust",
|
"LabelThemeLight": "Ljust",
|
||||||
"LabelTimeBase": "Tidsbas",
|
"LabelTimeBase": "Tidsbas",
|
||||||
@@ -499,10 +583,10 @@
|
|||||||
"LabelTimeRemaining": "{0} återstår",
|
"LabelTimeRemaining": "{0} återstår",
|
||||||
"LabelTimeToShift": "Tid att skifta i sekunder",
|
"LabelTimeToShift": "Tid att skifta i sekunder",
|
||||||
"LabelTitle": "Titel",
|
"LabelTitle": "Titel",
|
||||||
"LabelToolsEmbedMetadata": "Bädda in metadata",
|
"LabelToolsEmbedMetadata": "Infoga metadata",
|
||||||
"LabelToolsEmbedMetadataDescription": "Bädda in metadata i ljudfiler, inklusive omslagsbild och kapitel.",
|
"LabelToolsEmbedMetadataDescription": "Bädda in metadata i ljudfiler, inklusive omslagsbild och kapitel.",
|
||||||
"LabelToolsMakeM4b": "Skapa M4B ljudbok",
|
"LabelToolsMakeM4b": "Skapa ljudboksfil i M4B-format",
|
||||||
"LabelToolsMakeM4bDescription": "Skapa en .M4B ljudboksfil med inbäddad metadata, omslagsbild och kapitel.",
|
"LabelToolsMakeM4bDescription": "Skapa en ljudboksfil i M4B-format med inbäddad metadata, omslagsbild och kapitel.",
|
||||||
"LabelToolsSplitM4b": "Dela upp M4B-fil i MP3-filer",
|
"LabelToolsSplitM4b": "Dela upp M4B-fil i MP3-filer",
|
||||||
"LabelToolsSplitM4bDescription": "Skapa MP3-filer från en M4B-fil uppdelad i kapitel med inbäddad metadata, omslagsbild och kapitel.",
|
"LabelToolsSplitM4bDescription": "Skapa MP3-filer från en M4B-fil uppdelad i kapitel med inbäddad metadata, omslagsbild och kapitel.",
|
||||||
"LabelTotalDuration": "Total varaktighet",
|
"LabelTotalDuration": "Total varaktighet",
|
||||||
@@ -516,104 +600,129 @@
|
|||||||
"LabelTrailer": "Trailer",
|
"LabelTrailer": "Trailer",
|
||||||
"LabelType": "Typ",
|
"LabelType": "Typ",
|
||||||
"LabelUnabridged": "Oavkortad",
|
"LabelUnabridged": "Oavkortad",
|
||||||
|
"LabelUndo": "Ångra",
|
||||||
"LabelUnknown": "Okänd",
|
"LabelUnknown": "Okänd",
|
||||||
"LabelUpdateCover": "Uppdatera omslag",
|
"LabelUnknownPublishDate": "Okänt publiceringsdatum",
|
||||||
"LabelUpdateCoverHelp": "Tillåt överskrivning av befintliga omslag för de valda böckerna när en matchning hittas",
|
"LabelUpdateCover": "Uppdatera bokomslag",
|
||||||
|
"LabelUpdateCoverHelp": "Tillåt att befintliga bokomslag för de valda böckerna ersätts när en matchning hittas",
|
||||||
"LabelUpdateDetails": "Uppdatera detaljer",
|
"LabelUpdateDetails": "Uppdatera detaljer",
|
||||||
"LabelUpdateDetailsHelp": "Tillåt överskrivning av befintliga detaljer för de valda böckerna när en matchning hittas",
|
"LabelUpdateDetailsHelp": "Tillåt att befintliga detaljer för de valda böckerna ersätts när en matchning hittas",
|
||||||
"LabelUpdatedAt": "Uppdaterad vid",
|
"LabelUpdatedAt": "Uppdaterades",
|
||||||
"LabelUploaderDragAndDrop": "Dra och släpp filer eller mappar",
|
"LabelUploaderDragAndDrop": "Dra och släpp filer eller mappar",
|
||||||
|
"LabelUploaderDragAndDropFilesOnly": "Dra & släpp filer",
|
||||||
"LabelUploaderDropFiles": "Släpp filer",
|
"LabelUploaderDropFiles": "Släpp filer",
|
||||||
"LabelUploaderItemFetchMetadataHelp": "Hämtar automatiskt titel, författare och serier.",
|
"LabelUploaderItemFetchMetadataHelp": "Hämtar automatiskt titel, författare och serier",
|
||||||
|
"LabelUseAdvancedOptions": "Använd avancerade inställningar",
|
||||||
"LabelUseChapterTrack": "Använd kapitelspår",
|
"LabelUseChapterTrack": "Använd kapitelspår",
|
||||||
"LabelUseFullTrack": "Använd hela spåret",
|
"LabelUseFullTrack": "Använd hela spåret",
|
||||||
|
"LabelUseZeroForUnlimited": "0 = Obegränsad",
|
||||||
"LabelUser": "Användare",
|
"LabelUser": "Användare",
|
||||||
"LabelUsername": "Användarnamn",
|
"LabelUsername": "Användarnamn",
|
||||||
"LabelValue": "Värde",
|
"LabelValue": "Värde",
|
||||||
"LabelVersion": "Version",
|
"LabelVersion": "Version",
|
||||||
"LabelViewBookmarks": "Visa bokmärken",
|
"LabelViewBookmarks": "Bokmärken",
|
||||||
"LabelViewChapters": "Visa kapitel",
|
"LabelViewChapters": "Visa kapitel",
|
||||||
|
"LabelViewPlayerSettings": "Visa inställningar för uppspelning",
|
||||||
"LabelViewQueue": "Visa spellista",
|
"LabelViewQueue": "Visa spellista",
|
||||||
"LabelVolume": "Volym",
|
"LabelVolume": "Volym",
|
||||||
"LabelWeekdaysToRun": "Vardagar att köra",
|
"LabelWeekdaysToRun": "Veckodagar att köra skanning",
|
||||||
"LabelYearReviewHide": "Dölj sammanställning för året",
|
"LabelXBooks": "{0} böcker",
|
||||||
"LabelYearReviewShow": "Visa sammanställning för året",
|
"LabelXItems": "{0} objekt",
|
||||||
|
"LabelYearReviewHide": "Dölj årets sammanställning",
|
||||||
|
"LabelYearReviewShow": "Visa årets sammanställning",
|
||||||
"LabelYourAudiobookDuration": "Din ljudboks varaktighet",
|
"LabelYourAudiobookDuration": "Din ljudboks varaktighet",
|
||||||
"LabelYourBookmarks": "Dina bokmärken",
|
"LabelYourBookmarks": "Dina bokmärken",
|
||||||
"LabelYourPlaylists": "Dina spellistor",
|
"LabelYourPlaylists": "Dina spellistor",
|
||||||
"LabelYourProgress": "Din framsteg",
|
"LabelYourProgress": "Framsteg",
|
||||||
"MessageAddToPlayerQueue": "Lägg till i spellistan",
|
"MessageAddToPlayerQueue": "Lägg till i spellistan",
|
||||||
"MessageAppriseDescription": "För att använda den här funktionen behöver du ha en instans av <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> igång eller en API som hanterar dessa begäranden. <br />Apprise API-urlen bör vara hela URL-sökvägen för att skicka meddelandet, t.ex., om din API-instans är tillgänglig på <code>http://192.168.1.1:8337</code>, bör du ange <code>http://192.168.1.1:8337/notify</code>.",
|
"MessageAppriseDescription": "För att använda den här funktionen behöver du ha en instans av <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> igång eller en API som hanterar dessa begäranden. <br />Apprise API-urlen bör vara hela URL-sökvägen för att skicka meddelandet, t.ex., om din API-instans är tillgänglig på <code>http://192.168.1.1:8337</code>, bör du ange <code>http://192.168.1.1:8337/notify</code>.",
|
||||||
"MessageBackupsDescription": "Säkerhetskopieringar inkluderar användare, användares framsteg, biblioteksföremål, serverinställningar och bilder lagrade i <code>/metadata/items</code> & <code>/metadata/authors</code>. Säkerhetskopieringar inkluderar <strong>inte</strong> några filer lagrade i dina biblioteksmappar.",
|
"MessageBackupsDescription": "Säkerhetskopior inkluderar användare, användarnas framsteg, biblioteksobjekt, serverinställningar<br>och bilder lagrade i <code>/metadata/items</code> & <code>/metadata/authors</code>.<br>De inkluderar <strong>INTE</strong> några filer lagrade i dina biblioteksmappar.",
|
||||||
|
"MessageBackupsLocationEditNote": "OBS: När du ändrar plats för säkerhetskopiorna så flyttas INTE gamla säkerhetskopior dit",
|
||||||
|
"MessageBackupsLocationNoEditNote": "OBS: Platsen där säkerhetskopiorna lagras bestäms av en central inställning och kan inte ändras här.",
|
||||||
|
"MessageBackupsLocationPathEmpty": "Uppgiften om platsen för lagring av säkerhetskopior kan inte lämnas tom",
|
||||||
"MessageBatchQuickMatchDescription": "Quick Match kommer försöka lägga till saknade omslag och metadata för de valda föremålen. Aktivera alternativen nedan för att tillåta Quick Match att överskriva befintliga omslag och/eller metadata.",
|
"MessageBatchQuickMatchDescription": "Quick Match kommer försöka lägga till saknade omslag och metadata för de valda föremålen. Aktivera alternativen nedan för att tillåta Quick Match att överskriva befintliga omslag och/eller metadata.",
|
||||||
"MessageBookshelfNoCollections": "Du har ännu inte skapat några samlingar",
|
"MessageBookshelfNoCollections": "Du har ännu inte skapat några samlingar",
|
||||||
"MessageBookshelfNoRSSFeeds": "Inga RSS-flöden är öppna",
|
"MessageBookshelfNoRSSFeeds": "Inga RSS-flöden är öppna",
|
||||||
"MessageBookshelfNoResultsForFilter": "Inga resultat för filter \"{0}: {1}\"",
|
"MessageBookshelfNoResultsForFilter": "Inga resultat för filter \"{0}: {1}\"",
|
||||||
|
"MessageBookshelfNoResultsForQuery": "Sökningen gav inget resultat",
|
||||||
"MessageBookshelfNoSeries": "Du har inga serier",
|
"MessageBookshelfNoSeries": "Du har inga serier",
|
||||||
"MessageChapterEndIsAfter": "Kapitelns slut är efter din ljudboks slut",
|
"MessageChapterEndIsAfter": "Kapitelns slut är efter din ljudboks slut",
|
||||||
"MessageChapterErrorFirstNotZero": "Första kapitlet måste börja vid 0",
|
"MessageChapterErrorFirstNotZero": "Första kapitlet måste börja vid 0",
|
||||||
"MessageChapterErrorStartGteDuration": "Ogiltig starttid måste vara mindre än ljudbokens varaktighet",
|
"MessageChapterErrorStartGteDuration": "Ogiltig starttid, måste vara mindre än ljudbokens varaktighet",
|
||||||
"MessageChapterErrorStartLtPrev": "Ogiltig starttid måste vara större än eller lika med tidigare kapitels starttid",
|
"MessageChapterErrorStartLtPrev": "Ogiltig starttid, måste vara större än eller lika med föregående kapitlets starttid",
|
||||||
"MessageChapterStartIsAfter": "Kapitlets start är efter din ljudboks slut",
|
"MessageChapterStartIsAfter": "Kapitlets start är efter din ljudboks slut",
|
||||||
"MessageCheckingCron": "Kontrollerar cron...",
|
"MessageCheckingCron": "Kontrollerar cron...",
|
||||||
"MessageConfirmCloseFeed": "Är du säker på att du vill stänga detta flöde?",
|
"MessageConfirmCloseFeed": "Är du säker på att du vill stänga detta flöde?",
|
||||||
"MessageConfirmDeleteBackup": "Är du säker på att du vill radera säkerhetskopian för {0}?",
|
"MessageConfirmDeleteBackup": "Är du säker på att du vill radera säkerhetskopian för {0}?",
|
||||||
|
"MessageConfirmDeleteDevice": "Är du säkert på att du vill radera enheten för e-böcker \"{0}\"?",
|
||||||
"MessageConfirmDeleteFile": "Detta kommer att radera filen från ditt filsystem. Är du säker?",
|
"MessageConfirmDeleteFile": "Detta kommer att radera filen från ditt filsystem. Är du säker?",
|
||||||
"MessageConfirmDeleteLibrary": "Är du säker på att du vill radera biblioteket \"{0}\"?",
|
"MessageConfirmDeleteLibrary": "Är du säker på att du vill radera biblioteket '{0}'?",
|
||||||
"MessageConfirmDeleteLibraryItem": "Detta kommer att radera biblioteksföremålet från databasen och ditt filsystem. Är du säker?",
|
"MessageConfirmDeleteLibraryItem": "Detta kommer att radera objektet från databasen och ditt filsystem. Är du säker?",
|
||||||
"MessageConfirmDeleteLibraryItems": "Detta kommer att radera {0} biblioteksföremål från databasen och ditt filsystem. Är du säker?",
|
"MessageConfirmDeleteLibraryItems": "Detta kommer att radera {0} biblioteksobjekt från databasen och ditt filsystem. Är du säker?",
|
||||||
"MessageConfirmDeleteSession": "Är du säker på att du vill radera denna session?",
|
"MessageConfirmDeleteMetadataProvider": "Är du säker på att du vill radera din egen källa för metadata \"{0}\"?",
|
||||||
|
"MessageConfirmDeleteSession": "Är du säker på att du vill radera detta lyssningstillfälle?",
|
||||||
"MessageConfirmForceReScan": "Är du säker på att du vill tvinga omgenomsökning?",
|
"MessageConfirmForceReScan": "Är du säker på att du vill tvinga omgenomsökning?",
|
||||||
"MessageConfirmMarkAllEpisodesFinished": "Är du säker på att du vill markera alla avsnitt som avslutade?",
|
"MessageConfirmMarkAllEpisodesFinished": "Är du säker på att du vill markera alla avsnitt som avslutade?",
|
||||||
"MessageConfirmMarkAllEpisodesNotFinished": "Är du säker på att du vill markera alla avsnitt som inte avslutade?",
|
"MessageConfirmMarkAllEpisodesNotFinished": "Är du säker på att du vill markera alla avsnitt som ej avslutade?",
|
||||||
|
"MessageConfirmMarkItemFinished": "Är du säker på att du vill markera \"{0}\" som avslutad?",
|
||||||
|
"MessageConfirmMarkItemNotFinished": "Är du säker på att du vill markera \"{0}\" som ej avslutad?",
|
||||||
"MessageConfirmMarkSeriesFinished": "Är du säker på att du vill markera alla böcker i denna serie som avslutade?",
|
"MessageConfirmMarkSeriesFinished": "Är du säker på att du vill markera alla böcker i denna serie som avslutade?",
|
||||||
"MessageConfirmMarkSeriesNotFinished": "Är du säker på att du vill markera alla böcker i denna serie som ej avslutade?",
|
"MessageConfirmMarkSeriesNotFinished": "Är du säker på att du vill markera alla böcker i denna serie som ej avslutade?",
|
||||||
|
"MessageConfirmPurgeCache": "När du rensar cashen kommer katalogen <code>/metadata/cache</code> att raderas. <br /><br />Är du säker på att du vill radera katalogen?",
|
||||||
|
"MessageConfirmPurgeItemsCache": "När du rensar cashen för föremål kommer katalogen <code>/metadata/cache/items</code> att raderas. <br /><br />Är du säker på att du vill radera katalogen?",
|
||||||
"MessageConfirmQuickEmbed": "VARNING! Quick embed kommer inte att säkerhetskopiera dina ljudfiler. Se till att du har en säkerhetskopia av dina ljudfiler. <br><br>Vill du fortsätta?",
|
"MessageConfirmQuickEmbed": "VARNING! Quick embed kommer inte att säkerhetskopiera dina ljudfiler. Se till att du har en säkerhetskopia av dina ljudfiler. <br><br>Vill du fortsätta?",
|
||||||
"MessageConfirmReScanLibraryItems": "Är du säker på att du vill göra omgenomsökning för {0} objekt?",
|
"MessageConfirmReScanLibraryItems": "Är du säker på att du vill göra en ny genomsökning för {0} objekt?",
|
||||||
"MessageConfirmRemoveAllChapters": "Är du säker på att du vill ta bort alla kapitel?",
|
"MessageConfirmRemoveAllChapters": "Är du säker på att du vill ta bort alla kapitel?",
|
||||||
"MessageConfirmRemoveAuthor": "Är du säker på att du vill ta bort författaren \"{0}\"?",
|
"MessageConfirmRemoveAuthor": "Är du säker på att du vill ta bort författaren \"{0}\"?",
|
||||||
"MessageConfirmRemoveCollection": "Är du säker på att du vill ta bort samlingen \"{0}\"?",
|
"MessageConfirmRemoveCollection": "Är du säker på att du vill ta bort samlingen \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisode": "Är du säker på att du vill ta bort avsnittet \"{0}\"?",
|
"MessageConfirmRemoveEpisode": "Är du säker på att du vill ta bort avsnittet \"{0}\"?",
|
||||||
"MessageConfirmRemoveEpisodes": "Är du säker på att du vill ta bort {0} avsnitt?",
|
"MessageConfirmRemoveEpisodes": "Är du säker på att du vill ta bort {0} avsnitt?",
|
||||||
|
"MessageConfirmRemoveListeningSessions": "Är du säker på att du vill radera {0} lyssningstillfällen?",
|
||||||
|
"MessageConfirmRemoveMetadataFiles": "Är du säker på att du vill radera 'metadata.{0}' filerna i alla mappar i ditt bibliotek?",
|
||||||
"MessageConfirmRemoveNarrator": "Är du säker på att du vill ta bort uppläsaren \"{0}\"?",
|
"MessageConfirmRemoveNarrator": "Är du säker på att du vill ta bort uppläsaren \"{0}\"?",
|
||||||
"MessageConfirmRemovePlaylist": "Är du säker på att du vill ta bort din spellista \"{0}\"?",
|
"MessageConfirmRemovePlaylist": "Är du säker på att du vill ta bort din spellista \"{0}\"?",
|
||||||
"MessageConfirmRenameGenre": "Är du säker på att du vill byta namn på kategori \"{0}\" till \"{1}\" för alla objekt?",
|
"MessageConfirmRenameGenre": "Är du säker på att du vill byta namn på kategorin \"{0}\" till \"{1}\" för alla objekt?",
|
||||||
"MessageConfirmRenameGenreMergeNote": "OBS: Den här kategorin finns redan, så de kommer att slås samman.",
|
"MessageConfirmRenameGenreMergeNote": "OBS: Den här kategorin finns redan, så de kommer att slås samman.",
|
||||||
"MessageConfirmRenameGenreWarning": "Varning! En liknande kategori med annat skrivsätt finns redan \"{0}\".",
|
"MessageConfirmRenameGenreWarning": "Varning! En liknande kategori med annat skrivsätt finns redan \"{0}\".",
|
||||||
"MessageConfirmRenameTag": "Är du säker på att du vill byta namn på taggen \"{0}\" till \"{1}\" för alla objekt?",
|
"MessageConfirmRenameTag": "Är du säker på att du vill byta namn på taggen \"{0}\" till \"{1}\" för alla objekt?",
|
||||||
"MessageConfirmRenameTagMergeNote": "OBS: Den här taggen finns redan, så de kommer att slås samman.",
|
"MessageConfirmRenameTagMergeNote": "OBS: Den här taggen finns redan, så de kommer att slås samman.",
|
||||||
"MessageConfirmRenameTagWarning": "VARNING! En liknande tagg med annat skrivsätt finns redan \"{0}\".",
|
"MessageConfirmRenameTagWarning": "VARNING! En liknande tagg med annat skrivsätt finns redan \"{0}\".",
|
||||||
|
"MessageConfirmResetProgress": "Är du säker på att du vill nollställa ditt framsteg?",
|
||||||
"MessageConfirmSendEbookToDevice": "Är du säker på att du vill skicka {0} e-bok \"{1}\" till enheten \"{2}\"?",
|
"MessageConfirmSendEbookToDevice": "Är du säker på att du vill skicka {0} e-bok \"{1}\" till enheten \"{2}\"?",
|
||||||
|
"MessageDaysListenedInTheLastYear": "{0} dagars lyssnande det senaste året",
|
||||||
"MessageDownloadingEpisode": "Laddar ner avsnitt",
|
"MessageDownloadingEpisode": "Laddar ner avsnitt",
|
||||||
"MessageDragFilesIntoTrackOrder": "Dra filer till rätt spårordning",
|
"MessageDragFilesIntoTrackOrder": "Dra filer till rätt spårordning",
|
||||||
"MessageEmbedFinished": "Inbäddning klar!",
|
"MessageEmbedFinished": "Inbäddning genomförd!",
|
||||||
"MessageEpisodesQueuedForDownload": "{0} avsnitt i kö för nedladdning",
|
"MessageEpisodesQueuedForDownload": "{0} avsnitt i kö för nedladdning",
|
||||||
|
"MessageEreaderDevices": "För att säkerställa överföring av e-böcker kan du bli tvungen<br>att addera ovanstående e-postadress som godkänd<br>avsändare för varje enhet angiven nedan.",
|
||||||
"MessageFeedURLWillBe": "Flödes-URL kommer att vara {0}",
|
"MessageFeedURLWillBe": "Flödes-URL kommer att vara {0}",
|
||||||
"MessageFetching": "Hämtar...",
|
"MessageFetching": "Hämtar...",
|
||||||
"MessageForceReScanDescription": "kommer att göra en omgångssökning av alla filer som en färsk sökning. ID3-taggar för ljudfiler, OPF-filer och textfiler kommer att sökas som nya.",
|
"MessageForceReScanDescription": "kommer att göra en omgångssökning av alla filer som en färsk sökning. ID3-taggar för ljudfiler, OPF-filer och textfiler kommer att sökas som nya.",
|
||||||
"MessageImportantNotice": "Viktig meddelande!",
|
"MessageImportantNotice": "Viktig meddelande!",
|
||||||
"MessageInsertChapterBelow": "Infoga kapitel nedanför",
|
"MessageInsertChapterBelow": "Infoga kapitel nedanför",
|
||||||
"MessageItemsSelected": "{0} Objekt markerade",
|
"MessageItemsSelected": "{0} objekt markerade",
|
||||||
"MessageItemsUpdated": "{0} Objekt uppdaterade",
|
"MessageItemsUpdated": "{0} Objekt uppdaterade",
|
||||||
"MessageJoinUsOn": "Anslut dig till oss på",
|
"MessageJoinUsOn": "Anslut dig till oss på",
|
||||||
"MessageLoading": "Laddar...",
|
"MessageLoading": "Laddar...",
|
||||||
"MessageLoadingFolders": "Laddar mappar...",
|
"MessageLoadingFolders": "Laddar mappar...",
|
||||||
|
"MessageLogsDescription": "Filer med loggar sparas i mappen <code>/metadata/logs</code> som JSON-filer.<br>Filer med information om krascher sparas i <code>/metadata/logs/crash_logs.txt</code>.",
|
||||||
"MessageM4BFailed": "M4B misslyckades!",
|
"MessageM4BFailed": "M4B misslyckades!",
|
||||||
"MessageM4BFinished": "M4B klar!",
|
"MessageM4BFinished": "M4B klar!",
|
||||||
"MessageMapChapterTitles": "Kartlägg kapitelrubriker till dina befintliga ljudbokskapitel utan att justera tidstämplar",
|
"MessageMapChapterTitles": "Kartlägg kapitelrubriker till dina befintliga ljudbokskapitel utan att justera tidstämplar",
|
||||||
"MessageMarkAllEpisodesFinished": "Markera alla avsnitt som avslutade",
|
"MessageMarkAllEpisodesFinished": "Markera alla avsnitt som avslutade",
|
||||||
"MessageMarkAllEpisodesNotFinished": "Markera alla avsnitt som inte avslutade",
|
"MessageMarkAllEpisodesNotFinished": "Markera alla avsnitt som ej avslutade",
|
||||||
"MessageMarkAsFinished": "Markera som avslutad",
|
"MessageMarkAsFinished": "Markera som avslutad",
|
||||||
"MessageMarkAsNotFinished": "Markera som inte avslutad",
|
"MessageMarkAsNotFinished": "Markera som ej avslutad",
|
||||||
"MessageMatchBooksDescription": "kommer att försöka matcha böcker i biblioteket med en bok från den valda källan och fylla i uppgifter som saknas och bokomslag. Inga befintliga uppgifter kommer att ersättas.",
|
"MessageMatchBooksDescription": "kommer att försöka matcha böcker i biblioteket med en bok från<br>den valda källan och fylla i uppgifter som saknas och bokomslag.<br>Inga befintliga uppgifter kommer att ersättas.",
|
||||||
"MessageNoAudioTracks": "Inga ljudspår",
|
"MessageNoAudioTracks": "Inga ljudspår har hittats",
|
||||||
"MessageNoAuthors": "Inga författare",
|
"MessageNoAuthors": "Inga författare",
|
||||||
"MessageNoBackups": "Inga säkerhetskopior",
|
"MessageNoBackups": "Inga säkerhetskopior",
|
||||||
"MessageNoBookmarks": "Inga bokmärken",
|
"MessageNoBookmarks": "Inga bokmärken",
|
||||||
"MessageNoChapters": "Inga kapitel",
|
"MessageNoChapters": "Inga kapitel",
|
||||||
"MessageNoCollections": "Inga samlingar",
|
"MessageNoCollections": "Inga samlingar",
|
||||||
"MessageNoCoversFound": "Inga omslag hittade",
|
"MessageNoCoversFound": "Inga bokomslag hittades",
|
||||||
"MessageNoDescription": "Ingen beskrivning",
|
"MessageNoDescription": "Ingen beskrivning",
|
||||||
|
"MessageNoDevices": "Inga enheter angivna",
|
||||||
"MessageNoDownloadsInProgress": "Inga nedladdningar pågår för närvarande",
|
"MessageNoDownloadsInProgress": "Inga nedladdningar pågår för närvarande",
|
||||||
"MessageNoDownloadsQueued": "Inga nedladdningar i kö",
|
"MessageNoDownloadsQueued": "Inga nedladdningar i kö",
|
||||||
"MessageNoEpisodeMatchesFound": "Inga matchande avsnitt hittades",
|
"MessageNoEpisodeMatchesFound": "Inga matchande avsnitt hittades",
|
||||||
@@ -623,7 +732,7 @@
|
|||||||
"MessageNoIssues": "Inga problem",
|
"MessageNoIssues": "Inga problem",
|
||||||
"MessageNoItems": "Inga objekt",
|
"MessageNoItems": "Inga objekt",
|
||||||
"MessageNoItemsFound": "Inga objekt hittades",
|
"MessageNoItemsFound": "Inga objekt hittades",
|
||||||
"MessageNoListeningSessions": "Inga lyssningssessioner",
|
"MessageNoListeningSessions": "Inga lyssningstillfällen",
|
||||||
"MessageNoLogs": "Inga loggar",
|
"MessageNoLogs": "Inga loggar",
|
||||||
"MessageNoMediaProgress": "Ingen medieförlopp",
|
"MessageNoMediaProgress": "Ingen medieförlopp",
|
||||||
"MessageNoNotifications": "Inga aviseringar",
|
"MessageNoNotifications": "Inga aviseringar",
|
||||||
@@ -640,31 +749,42 @@
|
|||||||
"MessagePauseChapter": "Pausa kapiteluppspelning",
|
"MessagePauseChapter": "Pausa kapiteluppspelning",
|
||||||
"MessagePlayChapter": "Lyssna på kapitlets början",
|
"MessagePlayChapter": "Lyssna på kapitlets början",
|
||||||
"MessagePlaylistCreateFromCollection": "Skapa spellista från samling",
|
"MessagePlaylistCreateFromCollection": "Skapa spellista från samling",
|
||||||
|
"MessagePleaseWait": "Vänta ett ögonblick...",
|
||||||
"MessagePodcastHasNoRSSFeedForMatching": "Podcasten har ingen RSS-flödes-URL att använda för matchning",
|
"MessagePodcastHasNoRSSFeedForMatching": "Podcasten har ingen RSS-flödes-URL att använda för matchning",
|
||||||
"MessageQuickMatchDescription": "Fyll tomma objektdetaljer och omslag med första matchningsresultat från '{0}'. Överskriver inte detaljer om inte serverinställningen 'Föredra matchad metadata' är aktiverad.",
|
"MessageQuickMatchDescription": "Adderar uppgifter som saknas samt en omslagsbild från<br>första träffen i resultatet vid sökningen från '{0}'.<br>Skriver inte över befintliga uppgifter om inte<br>inställningen 'Prioritera matchad metadata' är aktiverad.",
|
||||||
"MessageRemoveChapter": "Ta bort kapitel",
|
"MessageRemoveChapter": "Ta bort kapitel",
|
||||||
"MessageRemoveEpisodes": "Ta bort {0} avsnitt",
|
"MessageRemoveEpisodes": "Ta bort {0} avsnitt",
|
||||||
"MessageRemoveFromPlayerQueue": "Ta bort från spellistan",
|
"MessageRemoveFromPlayerQueue": "Ta bort från spellistan",
|
||||||
"MessageRemoveUserWarning": "Är du säker på att du vill radera användaren \"{0}\" permanent?",
|
"MessageRemoveUserWarning": "Är du säker på att du vill radera användaren \"{0}\"?",
|
||||||
"MessageReportBugsAndContribute": "Rapportera buggar, begär funktioner och bidra på",
|
"MessageReportBugsAndContribute": "Rapportera buggar, begär funktioner och bidra på",
|
||||||
"MessageResetChaptersConfirm": "Är du säker på att du vill återställa kapitel och ångra ändringarna du gjort?",
|
"MessageResetChaptersConfirm": "Är du säker på att du vill återställa alla kapitel och ångra de ändringarna du gjort?",
|
||||||
"MessageRestoreBackupConfirm": "Är du säker på att du vill återställa säkerhetskopian som skapades den",
|
"MessageRestoreBackupConfirm": "Är du säker på att du vill läsa in säkerhetskopian som skapades den",
|
||||||
"MessageRestoreBackupWarning": "Att återställa en säkerhetskopia kommer att skriva över hela databasen som finns i /config och omslagsbilder i /metadata/items & /metadata/authors.<br /><br />Säkerhetskopior ändrar inte några filer i dina biblioteksmappar. Om du har aktiverat serverinställningar för att lagra omslagskonst och metadata i dina biblioteksmappar säkerhetskopieras eller skrivs de inte över.<br /><br />Alla klienter som använder din server kommer att uppdateras automatiskt.",
|
"MessageRestoreBackupWarning": "Att återställa en säkerhetskopia kommer att skriva över hela databasen som finns i /config och omslagsbilder i /metadata/items & /metadata/authors.<br /><br />Säkerhetskopior ändrar inte några filer i dina biblioteksmappar. Om du har aktiverat serverinställningar för att lagra omslagskonst och metadata i dina biblioteksmappar säkerhetskopieras eller skrivs de inte över.<br /><br />Alla klienter som använder din server kommer att uppdateras automatiskt.",
|
||||||
"MessageSearchResultsFor": "Sökresultat för",
|
"MessageSearchResultsFor": "Sökresultat för",
|
||||||
|
"MessageSelected": "{0} valda",
|
||||||
"MessageServerCouldNotBeReached": "Servern kunde inte nås",
|
"MessageServerCouldNotBeReached": "Servern kunde inte nås",
|
||||||
"MessageSetChaptersFromTracksDescription": "Ställ in kapitel med varje ljudfil som ett kapitel och kapitelrubrik som ljudfilens namn",
|
"MessageSetChaptersFromTracksDescription": "Ställ in kapitel med varje ljudfil som ett kapitel och kapitelrubrik som ljudfilens namn",
|
||||||
"MessageStartPlaybackAtTime": "Starta uppspelning för \"{0}\" kl. {1}?",
|
"MessageStartPlaybackAtTime": "Starta uppspelning av \"{0}\" vid tidpunkt {1}?",
|
||||||
|
"MessageTaskCanceledByUser": "Uppgiften avslutades av användaren",
|
||||||
|
"MessageTaskEncodingM4bDescription": "Omkodning av ljudbok \"{0}\" till en M4B-fil",
|
||||||
|
"MessageTaskFailed": "Misslyckades",
|
||||||
|
"MessageTaskFailedToCreateCacheDirectory": "Misslyckades med att skapa bibliotek för cachen",
|
||||||
|
"MessageTaskMatchingBooksInLibrary": "Matchar böcker i biblioteket \"{0}\"",
|
||||||
|
"MessageTaskScanItemsAdded": "{0} adderades",
|
||||||
|
"MessageTaskScanItemsUpdated": "{0} uppdaterades",
|
||||||
|
"MessageTaskScanNoChangesNeeded": "Inget adderades eller uppdaterades",
|
||||||
|
"MessageTaskScanningLibrary": "Biblioteket \"{0}\" har skannats",
|
||||||
"MessageThinking": "Tänker...",
|
"MessageThinking": "Tänker...",
|
||||||
"MessageUploaderItemFailed": "Misslyckades med att ladda upp",
|
"MessageUploaderItemFailed": "Misslyckades med att ladda upp",
|
||||||
"MessageUploaderItemSuccess": "Uppladdning lyckades!",
|
"MessageUploaderItemSuccess": "Uppladdning lyckades!",
|
||||||
"MessageUploading": "Laddar upp...",
|
"MessageUploading": "Laddar upp...",
|
||||||
"MessageValidCronExpression": "Giltigt cron-uttryck",
|
"MessageValidCronExpression": "Giltigt cron-uttryck",
|
||||||
"MessageWatcherIsDisabledGlobally": "Vakten är inaktiverad globalt i serverinställningarna",
|
"MessageWatcherIsDisabledGlobally": "Watcher är inaktiverad centralt under rubriken 'Inställningar'",
|
||||||
"MessageXLibraryIsEmpty": "{0} biblioteket är tomt!",
|
"MessageXLibraryIsEmpty": "Biblioteket {0} är tomt!",
|
||||||
"MessageYourAudiobookDurationIsLonger": "Varaktigheten på din ljudbok är längre än den hittade varaktigheten",
|
"MessageYourAudiobookDurationIsLonger": "Varaktigheten på din ljudbok är längre än den hittade varaktigheten",
|
||||||
"MessageYourAudiobookDurationIsShorter": "Varaktigheten på din ljudbok är kortare än den hittade varaktigheten",
|
"MessageYourAudiobookDurationIsShorter": "Varaktigheten på din ljudbok är kortare än den hittade varaktigheten",
|
||||||
"NoteChangeRootPassword": "Rotanvändaren är den enda användaren som kan ha ett tomt lösenord",
|
"NoteChangeRootPassword": "Rotanvändaren är den enda användaren som kan ha ett tomt lösenord",
|
||||||
"NoteChapterEditorTimes": "Obs: Starttiden för första kapitlet måste förbli 0:00 och starttiden för det sista kapitlet får inte överstiga ljudbokens varaktighet.",
|
"NoteChapterEditorTimes": "OBS: Starttiden för första kapitlet måste vara 0:00 och starttiden för det sista kapitlet får inte överstiga ljudbokens totala varaktighet.",
|
||||||
"NoteFolderPicker": "Obs: Mappar som redan är kartlagda kommer inte att visas",
|
"NoteFolderPicker": "Obs: Mappar som redan är kartlagda kommer inte att visas",
|
||||||
"NoteRSSFeedPodcastAppsHttps": "Varning: De flesta podcastappar kräver att RSS-flödets URL används med HTTPS",
|
"NoteRSSFeedPodcastAppsHttps": "Varning: De flesta podcastappar kräver att RSS-flödets URL används med HTTPS",
|
||||||
"NoteRSSFeedPodcastAppsPubDate": "Varning: 1 eller flera av dina avsnitt har inte ett publiceringsdatum. Vissa podcastappar kräver detta.",
|
"NoteRSSFeedPodcastAppsPubDate": "Varning: 1 eller flera av dina avsnitt har inte ett publiceringsdatum. Vissa podcastappar kräver detta.",
|
||||||
@@ -672,19 +792,29 @@
|
|||||||
"NoteUploaderOnlyAudioFiles": "Om du bara laddar upp ljudfiler kommer varje ljudfil att hanteras som en separat ljudbok.",
|
"NoteUploaderOnlyAudioFiles": "Om du bara laddar upp ljudfiler kommer varje ljudfil att hanteras som en separat ljudbok.",
|
||||||
"NoteUploaderUnsupportedFiles": "Oaccepterade filer ignoreras. När du väljer eller släpper en mapp ignoreras andra filer som inte finns i ett objektmapp.",
|
"NoteUploaderUnsupportedFiles": "Oaccepterade filer ignoreras. När du väljer eller släpper en mapp ignoreras andra filer som inte finns i ett objektmapp.",
|
||||||
"PlaceholderNewCollection": "Nytt samlingsnamn",
|
"PlaceholderNewCollection": "Nytt samlingsnamn",
|
||||||
"PlaceholderNewFolderPath": "Nytt mappväg",
|
"PlaceholderNewFolderPath": "Nytt sökväg till mappen",
|
||||||
"PlaceholderNewPlaylist": "Nytt spellistanamn",
|
"PlaceholderNewPlaylist": "Nytt namn på spellistan",
|
||||||
"PlaceholderSearch": "Sök...",
|
"PlaceholderSearch": "Sök...",
|
||||||
"PlaceholderSearchEpisode": "Sök avsnitt...",
|
"PlaceholderSearchEpisode": "Sök avsnitt...",
|
||||||
"StatsTopAuthor": "POPULÄRAST FÖRFATTAREN",
|
"StatsAuthorsAdded": "författare har adderats",
|
||||||
"StatsTopAuthors": "POPULÄRASTE FÖRFATTARNA",
|
"StatsBooksAdded": "böcker har adderats",
|
||||||
"StatsTopGenre": "Populäraste kategorin",
|
"StatsBooksAdditional": "Några exempel på det som adderats…",
|
||||||
|
"StatsBooksFinished": "avslutade böcker",
|
||||||
|
"StatsBooksFinishedThisYear": "Några böcker som avslutats under året…",
|
||||||
|
"StatsBooksListenedTo": "böcker, lyssnat på",
|
||||||
|
"StatsCollectionGrewTo": "Ditt biblioteks storlek ökade till…",
|
||||||
|
"StatsSessions": "lyssningstillfällen",
|
||||||
|
"StatsSpentListening": "tid, som lyssnats",
|
||||||
|
"StatsTopAuthor": "Populäraste författare",
|
||||||
|
"StatsTopAuthors": "Populäraste författarna",
|
||||||
|
"StatsTopGenre": "Populäraste kategori",
|
||||||
"StatsTopGenres": "Populäraste kategorierna",
|
"StatsTopGenres": "Populäraste kategorierna",
|
||||||
"StatsTopMonth": "Bästa månaden",
|
"StatsTopMonth": "Bästa månad",
|
||||||
"StatsTopNarrator": "Populärast uppläsarna",
|
"StatsTopNarrator": "Populäraste uppläsare",
|
||||||
"StatsTopNarrators": "Populäraste uppläsaren",
|
"StatsTopNarrators": "Populäraste uppläsarna",
|
||||||
"StatsYearInReview": "SAMMANSTÄLLNING AV ÅRET",
|
"StatsTotalDuration": "Med en total varaktighet av…",
|
||||||
"ToastAccountUpdateSuccess": "Kontot uppdaterat",
|
"StatsYearInReview": "- SAMMANSTÄLLNING AV ÅRET",
|
||||||
|
"ToastAccountUpdateSuccess": "Kontot har uppdaterats",
|
||||||
"ToastAsinRequired": "En ASIN-kod krävs",
|
"ToastAsinRequired": "En ASIN-kod krävs",
|
||||||
"ToastAuthorImageRemoveSuccess": "Författarens bild borttagen",
|
"ToastAuthorImageRemoveSuccess": "Författarens bild borttagen",
|
||||||
"ToastAuthorNotFound": "Författaren \"{0}\" kunde inte identifieras",
|
"ToastAuthorNotFound": "Författaren \"{0}\" kunde inte identifieras",
|
||||||
@@ -707,42 +837,80 @@
|
|||||||
"ToastBookmarkCreateFailed": "Det gick inte att skapa bokmärket",
|
"ToastBookmarkCreateFailed": "Det gick inte att skapa bokmärket",
|
||||||
"ToastBookmarkCreateSuccess": "Bokmärket har adderats",
|
"ToastBookmarkCreateSuccess": "Bokmärket har adderats",
|
||||||
"ToastBookmarkRemoveSuccess": "Bokmärket har raderats",
|
"ToastBookmarkRemoveSuccess": "Bokmärket har raderats",
|
||||||
|
"ToastCachePurgeFailed": "Misslyckades med att rensa cachen",
|
||||||
|
"ToastCachePurgeSuccess": "Rensning av cachen har genomförts",
|
||||||
"ToastChaptersHaveErrors": "Kapitlen har fel",
|
"ToastChaptersHaveErrors": "Kapitlen har fel",
|
||||||
"ToastChaptersMustHaveTitles": "Kapitel måste ha titlar",
|
"ToastChaptersMustHaveTitles": "Kapitel måste ha titlar",
|
||||||
|
"ToastCollectionItemsAddFailed": "Misslyckades med att addera böcker till samlingen",
|
||||||
"ToastCollectionRemoveSuccess": "Samlingen har raderats",
|
"ToastCollectionRemoveSuccess": "Samlingen har raderats",
|
||||||
"ToastCollectionUpdateSuccess": "Samlingen har uppdaterats",
|
"ToastCollectionUpdateSuccess": "Samlingen har uppdaterats",
|
||||||
"ToastItemCoverUpdateSuccess": "Objektets omslag uppdaterat",
|
"ToastCoverUpdateFailed": "Uppdatering av bokomslag misslyckades",
|
||||||
"ToastItemDetailsUpdateSuccess": "Objektdetaljer uppdaterade",
|
"ToastDateTimeInvalidOrIncomplete": "Datum och klockslag är felaktigt eller ej komplett",
|
||||||
"ToastItemMarkedAsFinishedFailed": "Misslyckades med att markera som färdig",
|
"ToastDeleteFileFailed": "Misslyckades att radera filen",
|
||||||
"ToastItemMarkedAsFinishedSuccess": "Objekt markerat som färdig",
|
"ToastDeleteFileSuccess": "Filen har raderats",
|
||||||
"ToastItemMarkedAsNotFinishedFailed": "Misslyckades med att markera som ej färdig",
|
"ToastDeviceTestEmailFailed": "Misslyckades med att skicka ett testmail",
|
||||||
"ToastItemMarkedAsNotFinishedSuccess": "Objekt markerat som ej färdig",
|
"ToastDeviceTestEmailSuccess": "Ett testmail har skickats",
|
||||||
|
"ToastEmailSettingsUpdateSuccess": "Inställningarna av e-post har uppdaterats",
|
||||||
|
"ToastFailedToLoadData": "Misslyckades med att ladda data",
|
||||||
|
"ToastInvalidImageUrl": "Felaktig URL-adress till omslagsbilden",
|
||||||
|
"ToastInvalidMaxEpisodesToDownload": "Ogiltigt maximalt antal avsnitt att ladda ner",
|
||||||
|
"ToastInvalidUrl": "Felaktig URL-adress",
|
||||||
|
"ToastItemCoverUpdateSuccess": "Objektets bokomslag har uppdaterats",
|
||||||
|
"ToastItemDeletedFailed": "Misslyckades med att radera objektet",
|
||||||
|
"ToastItemDeletedSuccess": "Objektet har raderats",
|
||||||
|
"ToastItemDetailsUpdateSuccess": "Detaljerna om boken har uppdaterats",
|
||||||
|
"ToastItemMarkedAsFinishedFailed": "Misslyckades med att markera den som avslutad",
|
||||||
|
"ToastItemMarkedAsFinishedSuccess": "Den har markerat som avslutad",
|
||||||
|
"ToastItemMarkedAsNotFinishedFailed": "Misslyckades med att markera den som ej avslutad",
|
||||||
|
"ToastItemMarkedAsNotFinishedSuccess": "Den har markerats som ej avslutad",
|
||||||
"ToastLibraryCreateFailed": "Det gick inte att skapa biblioteket",
|
"ToastLibraryCreateFailed": "Det gick inte att skapa biblioteket",
|
||||||
"ToastLibraryCreateSuccess": "Biblioteket \"{0}\" skapat",
|
"ToastLibraryCreateSuccess": "Biblioteket \"{0}\" har skapats",
|
||||||
"ToastLibraryDeleteFailed": "Det gick inte att ta bort biblioteket",
|
"ToastLibraryDeleteFailed": "Det gick inte att ta bort biblioteket",
|
||||||
"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",
|
||||||
"ToastLibraryUpdateSuccess": "Biblioteket \"{0}\" uppdaterat",
|
"ToastLibraryUpdateSuccess": "Biblioteket \"{0}\" har uppdaterats",
|
||||||
|
"ToastMetadataFilesRemovedError": "Misslyckades med att radera 'metadata.{0}' filerna",
|
||||||
|
"ToastMetadataFilesRemovedNoneFound": "Inga 'metadata.{0}' filer hittades i biblioteket",
|
||||||
|
"ToastMetadataFilesRemovedNoneRemoved": "Inga 'metadata.{0}' filer raderades",
|
||||||
|
"ToastMetadataFilesRemovedSuccess": "{0} 'metadata.{1}' raderades",
|
||||||
|
"ToastNameEmailRequired": "Ett namn och en e-postadress måste anges",
|
||||||
|
"ToastNameRequired": "Ett namn måste anges",
|
||||||
|
"ToastNewUserCreatedFailed": "Misslyckades med att skapa kontot \"{0}\"",
|
||||||
|
"ToastNewUserCreatedSuccess": "Ett nytt konto har skapats",
|
||||||
|
"ToastNoUpdatesNecessary": "Inga uppdateringar var nödvändiga",
|
||||||
"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 har tagits bort",
|
||||||
"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",
|
||||||
|
"ToastProviderCreatedFailed": "Misslyckades med att addera en källa",
|
||||||
|
"ToastProviderCreatedSuccess": "En ny källa har adderats",
|
||||||
|
"ToastProviderRemoveSuccess": "Källan har tagits bort",
|
||||||
"ToastRSSFeedCloseFailed": "Misslyckades med att stänga RSS-flödet",
|
"ToastRSSFeedCloseFailed": "Misslyckades med att stänga RSS-flödet",
|
||||||
"ToastRSSFeedCloseSuccess": "RSS-flödet stängt",
|
"ToastRSSFeedCloseSuccess": "RSS-flödet stängt",
|
||||||
"ToastRemoveItemFromCollectionFailed": "Misslyckades med att ta bort objektet från samlingen",
|
"ToastRemoveItemFromCollectionFailed": "Misslyckades med att ta bort objektet från samlingen",
|
||||||
"ToastRemoveItemFromCollectionSuccess": "Objektet borttaget från samlingen",
|
"ToastRemoveItemFromCollectionSuccess": "Objektet borttaget från samlingen",
|
||||||
|
"ToastSelectAtLeastOneUser": "Åtminstone en användare måste väljas",
|
||||||
"ToastSendEbookToDeviceFailed": "Misslyckades med att skicka e-boken till enheten",
|
"ToastSendEbookToDeviceFailed": "Misslyckades med att skicka e-boken till enheten",
|
||||||
"ToastSendEbookToDeviceSuccess": "E-boken skickad till enheten \"{0}\"",
|
"ToastSendEbookToDeviceSuccess": "E-boken skickad till enheten \"{0}\"",
|
||||||
"ToastSeriesUpdateFailed": "Uppdateringen av serier misslyckades",
|
"ToastSeriesUpdateFailed": "Uppdateringen av serier misslyckades",
|
||||||
"ToastSeriesUpdateSuccess": "Uppdateringen av serierna lyckades",
|
"ToastSeriesUpdateSuccess": "Uppdateringen av serierna lyckades",
|
||||||
|
"ToastServerSettingsUpdateSuccess": "Inställningarna för servern har uppdaterats",
|
||||||
"ToastSessionDeleteFailed": "Misslyckades med att ta bort sessionen",
|
"ToastSessionDeleteFailed": "Misslyckades med att ta bort sessionen",
|
||||||
"ToastSessionDeleteSuccess": "Sessionen borttagen",
|
"ToastSessionDeleteSuccess": "Sessionen borttagen",
|
||||||
|
"ToastSleepTimerDone": "Timer har stängt av lyssning. Sov gott... zZzzZz",
|
||||||
"ToastSocketConnected": "Socket ansluten",
|
"ToastSocketConnected": "Socket ansluten",
|
||||||
"ToastSocketDisconnected": "Socket frånkopplad",
|
"ToastSocketDisconnected": "Socket frånkopplad",
|
||||||
"ToastSocketFailedToConnect": "Socket misslyckades med att ansluta",
|
"ToastSocketFailedToConnect": "Socket misslyckades med att ansluta",
|
||||||
|
"ToastSortingPrefixesEmptyError": "Åtminstone ett sorteringsbegrepp måste anges",
|
||||||
|
"ToastSortingPrefixesUpdateSuccess": "{0} begrepp för sortering har uppdateras",
|
||||||
|
"ToastTitleRequired": "En titel måste anges",
|
||||||
|
"ToastUnknownError": "Ett okänt fel inträffade",
|
||||||
"ToastUserDeleteFailed": "Misslyckades med att ta bort användaren",
|
"ToastUserDeleteFailed": "Misslyckades med att ta bort användaren",
|
||||||
"ToastUserDeleteSuccess": "Användaren borttagen"
|
"ToastUserDeleteSuccess": "Användaren borttagen",
|
||||||
|
"ToastUserPasswordChangeSuccess": "Lösenordet har ändrats",
|
||||||
|
"ToastUserPasswordMismatch": "Lösenorden är inte identiska",
|
||||||
|
"ToastUserPasswordMustChange": "Det nya lösenordet kan inte vara samma som det gamla"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
"ButtonApplyChapters": "Зберегти глави",
|
"ButtonApplyChapters": "Зберегти глави",
|
||||||
"ButtonAuthors": "Автори",
|
"ButtonAuthors": "Автори",
|
||||||
"ButtonBack": "Назад",
|
"ButtonBack": "Назад",
|
||||||
|
"ButtonBatchEditPopulateFromExisting": "Заповнити з наявних",
|
||||||
|
"ButtonBatchEditPopulateMapDetails": "Заповнити деталі карти",
|
||||||
"ButtonBrowseForFolder": "Огляд тек",
|
"ButtonBrowseForFolder": "Огляд тек",
|
||||||
"ButtonCancel": "Скасувати",
|
"ButtonCancel": "Скасувати",
|
||||||
"ButtonCancelEncode": "Скасувати кодування",
|
"ButtonCancelEncode": "Скасувати кодування",
|
||||||
@@ -51,7 +53,7 @@
|
|||||||
"ButtonNext": "Наступний",
|
"ButtonNext": "Наступний",
|
||||||
"ButtonNextChapter": "Наступна глава",
|
"ButtonNextChapter": "Наступна глава",
|
||||||
"ButtonNextItemInQueue": "Наступний елемент у черзі",
|
"ButtonNextItemInQueue": "Наступний елемент у черзі",
|
||||||
"ButtonOk": "Гаразд",
|
"ButtonOk": "Добре",
|
||||||
"ButtonOpenFeed": "Відкрити стрічку",
|
"ButtonOpenFeed": "Відкрити стрічку",
|
||||||
"ButtonOpenManager": "Відкрити менеджер",
|
"ButtonOpenManager": "Відкрити менеджер",
|
||||||
"ButtonPause": "Пауза",
|
"ButtonPause": "Пауза",
|
||||||
@@ -463,7 +465,7 @@
|
|||||||
"LabelNotificationsMaxQueueSize": "Ліміт розміру черги сповіщень",
|
"LabelNotificationsMaxQueueSize": "Ліміт розміру черги сповіщень",
|
||||||
"LabelNotificationsMaxQueueSizeHelp": "Події обмежені до 1 на секунду. Події буде проігноровано, якщо ліміт черги досягнуто. Це запобігає спаму сповіщеннями.",
|
"LabelNotificationsMaxQueueSizeHelp": "Події обмежені до 1 на секунду. Події буде проігноровано, якщо ліміт черги досягнуто. Це запобігає спаму сповіщеннями.",
|
||||||
"LabelNumberOfBooks": "Кількість книг",
|
"LabelNumberOfBooks": "Кількість книг",
|
||||||
"LabelNumberOfEpisodes": "Кількість епізодів",
|
"LabelNumberOfEpisodes": "Кількість серій",
|
||||||
"LabelOpenIDAdvancedPermsClaimDescription": "Назва OpenID claim, що містить розширені дозволи на дії користувачів у додатку, які будуть застосовуватися до ролей, що не є адміністраторами (<b>якщо налаштовано</b>). Якщо у відповіді нема claim, у доступі до Audiobookshelf буде відмовлено. Якщо відсутня хоча б одна опція, відповідь буде вважатися <code>хибною</code>. Переконайтеся, що запит постачальника ідентифікаційних даних відповідає очікуваній структурі:",
|
"LabelOpenIDAdvancedPermsClaimDescription": "Назва OpenID claim, що містить розширені дозволи на дії користувачів у додатку, які будуть застосовуватися до ролей, що не є адміністраторами (<b>якщо налаштовано</b>). Якщо у відповіді нема claim, у доступі до Audiobookshelf буде відмовлено. Якщо відсутня хоча б одна опція, відповідь буде вважатися <code>хибною</code>. Переконайтеся, що запит постачальника ідентифікаційних даних відповідає очікуваній структурі:",
|
||||||
"LabelOpenIDClaims": "Не змінюйте наступні параметри, аби вимкнути розширене призначення груп і дозволів, автоматично призначаючи групу 'Користувач'.",
|
"LabelOpenIDClaims": "Не змінюйте наступні параметри, аби вимкнути розширене призначення груп і дозволів, автоматично призначаючи групу 'Користувач'.",
|
||||||
"LabelOpenIDGroupClaimDescription": "Ім'я OpenID claim, що містить список груп користувачів. Зазвичай їх називають <code>групами</code>. <b>Якщо налаштовано</b>, застосунок автоматично призначатиме ролі на основі членства користувача в групах, за умови, що ці групи названі в claim'і без урахування реєстру 'admin', 'user' або 'guest'. Claim мусить містити список, і якщо користувач належить до кількох груп, програма призначить йому роль, що відповідає найвищому рівню доступу. Якщо жодна група не збігається, у доступі буде відмовлено.",
|
"LabelOpenIDGroupClaimDescription": "Ім'я OpenID claim, що містить список груп користувачів. Зазвичай їх називають <code>групами</code>. <b>Якщо налаштовано</b>, застосунок автоматично призначатиме ролі на основі членства користувача в групах, за умови, що ці групи названі в claim'і без урахування реєстру 'admin', 'user' або 'guest'. Claim мусить містити список, і якщо користувач належить до кількох груп, програма призначить йому роль, що відповідає найвищому рівню доступу. Якщо жодна група не збігається, у доступі буде відмовлено.",
|
||||||
@@ -704,6 +706,8 @@
|
|||||||
"MessageBackupsLocationEditNote": "Примітка: оновлення розташування резервної копії не переносить та не змінює існуючих копій",
|
"MessageBackupsLocationEditNote": "Примітка: оновлення розташування резервної копії не переносить та не змінює існуючих копій",
|
||||||
"MessageBackupsLocationNoEditNote": "Примітка: розташування резервної копії встановлюється за допомогою змінної середовища та не може бути змінене тут.",
|
"MessageBackupsLocationNoEditNote": "Примітка: розташування резервної копії встановлюється за допомогою змінної середовища та не може бути змінене тут.",
|
||||||
"MessageBackupsLocationPathEmpty": "Шлях розташування резервної копії не може бути порожнім",
|
"MessageBackupsLocationPathEmpty": "Шлях розташування резервної копії не може бути порожнім",
|
||||||
|
"MessageBatchEditPopulateMapDetailsAllHelp": "Заповнити увімкнені поля даними з усіх елементів. Поля з кількома значеннями буде об’єднано",
|
||||||
|
"MessageBatchEditPopulateMapDetailsItemHelp": "Заповніть увімкнені поля деталей карти даними з цього елемента",
|
||||||
"MessageBatchQuickMatchDescription": "Швидкий пошук спробує знайти відсутні обкладинки та метадані обраних елементів. Увімкніть налаштування нижче, аби дозволити заміну наявних обкладинок та/або метаданих під час швидкого пошуку.",
|
"MessageBatchQuickMatchDescription": "Швидкий пошук спробує знайти відсутні обкладинки та метадані обраних елементів. Увімкніть налаштування нижче, аби дозволити заміну наявних обкладинок та/або метаданих під час швидкого пошуку.",
|
||||||
"MessageBookshelfNoCollections": "Ви не створили жодної добірки",
|
"MessageBookshelfNoCollections": "Ви не створили жодної добірки",
|
||||||
"MessageBookshelfNoRSSFeeds": "Немає відкритих RSS-каналів",
|
"MessageBookshelfNoRSSFeeds": "Немає відкритих RSS-каналів",
|
||||||
|
|||||||
@@ -196,7 +196,7 @@
|
|||||||
"HeaderSleepTimer": "睡眠计时",
|
"HeaderSleepTimer": "睡眠计时",
|
||||||
"HeaderStatsLargestItems": "最大的项目",
|
"HeaderStatsLargestItems": "最大的项目",
|
||||||
"HeaderStatsLongestItems": "项目时长(小时)",
|
"HeaderStatsLongestItems": "项目时长(小时)",
|
||||||
"HeaderStatsMinutesListeningChart": "收听分钟数(最近7天)",
|
"HeaderStatsMinutesListeningChart": "收听分钟数 (最近7天)",
|
||||||
"HeaderStatsRecentSessions": "历史会话",
|
"HeaderStatsRecentSessions": "历史会话",
|
||||||
"HeaderStatsTop10Authors": "前 10 位作者",
|
"HeaderStatsTop10Authors": "前 10 位作者",
|
||||||
"HeaderStatsTop5Genres": "前 5 种流派",
|
"HeaderStatsTop5Genres": "前 5 种流派",
|
||||||
@@ -300,6 +300,7 @@
|
|||||||
"LabelDiscover": "发现",
|
"LabelDiscover": "发现",
|
||||||
"LabelDownload": "下载",
|
"LabelDownload": "下载",
|
||||||
"LabelDownloadNEpisodes": "下载 {0} 集",
|
"LabelDownloadNEpisodes": "下载 {0} 集",
|
||||||
|
"LabelDownloadable": "可下载",
|
||||||
"LabelDuration": "持续时间",
|
"LabelDuration": "持续时间",
|
||||||
"LabelDurationComparisonExactMatch": "(完全匹配)",
|
"LabelDurationComparisonExactMatch": "(完全匹配)",
|
||||||
"LabelDurationComparisonLonger": "({0} 更长)",
|
"LabelDurationComparisonLonger": "({0} 更长)",
|
||||||
@@ -462,7 +463,7 @@
|
|||||||
"LabelNotificationsMaxQueueSize": "通知事件的最大队列大小",
|
"LabelNotificationsMaxQueueSize": "通知事件的最大队列大小",
|
||||||
"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'. 声明应包含一个列表, 如果用户属于多个组, 则应用程序将分配与最高访问级别相对应的角色. 如果没有组匹配, 访问将被拒绝.",
|
||||||
@@ -588,6 +589,7 @@
|
|||||||
"LabelSettingsStoreMetadataWithItemHelp": "默认情况下元数据文件存储在/metadata/items文件夹中, 启用此设置将存储元数据在你媒体项目文件夹中",
|
"LabelSettingsStoreMetadataWithItemHelp": "默认情况下元数据文件存储在/metadata/items文件夹中, 启用此设置将存储元数据在你媒体项目文件夹中",
|
||||||
"LabelSettingsTimeFormat": "时间格式",
|
"LabelSettingsTimeFormat": "时间格式",
|
||||||
"LabelShare": "分享",
|
"LabelShare": "分享",
|
||||||
|
"LabelShareDownloadableHelp": "允许用户通过共享链接的下载库项目为 zip 文件.",
|
||||||
"LabelShareOpen": "打开分享",
|
"LabelShareOpen": "打开分享",
|
||||||
"LabelShareURL": "分享 URL",
|
"LabelShareURL": "分享 URL",
|
||||||
"LabelShowAll": "全部显示",
|
"LabelShowAll": "全部显示",
|
||||||
@@ -756,6 +758,7 @@
|
|||||||
"MessageConfirmResetProgress": "你确定要重置进度吗?",
|
"MessageConfirmResetProgress": "你确定要重置进度吗?",
|
||||||
"MessageConfirmSendEbookToDevice": "你确定要发送 {0} 电子书 \"{1}\" 到设备 \"{2}\"?",
|
"MessageConfirmSendEbookToDevice": "你确定要发送 {0} 电子书 \"{1}\" 到设备 \"{2}\"?",
|
||||||
"MessageConfirmUnlinkOpenId": "你确定要取消该用户与 OpenID 的链接吗?",
|
"MessageConfirmUnlinkOpenId": "你确定要取消该用户与 OpenID 的链接吗?",
|
||||||
|
"MessageDaysListenedInTheLastYear": "去年收听了 {0} 天",
|
||||||
"MessageDownloadingEpisode": "正在下载剧集",
|
"MessageDownloadingEpisode": "正在下载剧集",
|
||||||
"MessageDragFilesIntoTrackOrder": "将文件拖动到正确的音轨顺序",
|
"MessageDragFilesIntoTrackOrder": "将文件拖动到正确的音轨顺序",
|
||||||
"MessageEmbedFailed": "嵌入失败!",
|
"MessageEmbedFailed": "嵌入失败!",
|
||||||
@@ -834,6 +837,7 @@
|
|||||||
"MessageResetChaptersConfirm": "你确定要重置章节并撤消你所做的更改吗?",
|
"MessageResetChaptersConfirm": "你确定要重置章节并撤消你所做的更改吗?",
|
||||||
"MessageRestoreBackupConfirm": "你确定要恢复创建的这个备份",
|
"MessageRestoreBackupConfirm": "你确定要恢复创建的这个备份",
|
||||||
"MessageRestoreBackupWarning": "恢复备份将覆盖位于 /config 的整个数据库并覆盖 /metadata/items & /metadata/authors 中的图像.<br /><br />备份不会修改媒体库文件夹中的任何文件. 如果你已启用服务器设置将封面和元数据存储在库文件夹中,则不会备份或覆盖这些内容.<br /><br />将自动刷新使用服务器的所有客户端.",
|
"MessageRestoreBackupWarning": "恢复备份将覆盖位于 /config 的整个数据库并覆盖 /metadata/items & /metadata/authors 中的图像.<br /><br />备份不会修改媒体库文件夹中的任何文件. 如果你已启用服务器设置将封面和元数据存储在库文件夹中,则不会备份或覆盖这些内容.<br /><br />将自动刷新使用服务器的所有客户端.",
|
||||||
|
"MessageScheduleLibraryScanNote": "对于大多数用户, 建议禁用此功能并保持文件夹监视程序设置启用. 文件夹监视程序将自动检测库文件夹中的更改. 文件夹监视程序不适用于每个文件系统 (如 NFS), 因此可以使用计划库扫描.",
|
||||||
"MessageSearchResultsFor": "搜索结果",
|
"MessageSearchResultsFor": "搜索结果",
|
||||||
"MessageSelected": "{0} 已选择",
|
"MessageSelected": "{0} 已选择",
|
||||||
"MessageServerCouldNotBeReached": "无法访问服务器",
|
"MessageServerCouldNotBeReached": "无法访问服务器",
|
||||||
@@ -960,6 +964,7 @@
|
|||||||
"ToastCollectionRemoveSuccess": "收藏夹已删除",
|
"ToastCollectionRemoveSuccess": "收藏夹已删除",
|
||||||
"ToastCollectionUpdateSuccess": "收藏夹已更新",
|
"ToastCollectionUpdateSuccess": "收藏夹已更新",
|
||||||
"ToastCoverUpdateFailed": "封面更新失败",
|
"ToastCoverUpdateFailed": "封面更新失败",
|
||||||
|
"ToastDateTimeInvalidOrIncomplete": "日期和时间无效或不完整",
|
||||||
"ToastDeleteFileFailed": "删除文件失败",
|
"ToastDeleteFileFailed": "删除文件失败",
|
||||||
"ToastDeleteFileSuccess": "文件已删除",
|
"ToastDeleteFileSuccess": "文件已删除",
|
||||||
"ToastDeviceAddFailed": "添加设备失败",
|
"ToastDeviceAddFailed": "添加设备失败",
|
||||||
@@ -1012,6 +1017,7 @@
|
|||||||
"ToastNewUserTagError": "必须至少选择一个标签",
|
"ToastNewUserTagError": "必须至少选择一个标签",
|
||||||
"ToastNewUserUsernameError": "输入用户名",
|
"ToastNewUserUsernameError": "输入用户名",
|
||||||
"ToastNoNewEpisodesFound": "没有找到新剧集",
|
"ToastNoNewEpisodesFound": "没有找到新剧集",
|
||||||
|
"ToastNoRSSFeed": "播客没有 RSS 订阅",
|
||||||
"ToastNoUpdatesNecessary": "无需更新",
|
"ToastNoUpdatesNecessary": "无需更新",
|
||||||
"ToastNotificationCreateFailed": "无法创建通知",
|
"ToastNotificationCreateFailed": "无法创建通知",
|
||||||
"ToastNotificationDeleteFailed": "删除通知失败",
|
"ToastNotificationDeleteFailed": "删除通知失败",
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ const CONFIG_PATH = inputConfig || process.env.CONFIG_PATH || Path.resolve('conf
|
|||||||
const METADATA_PATH = inputMetadata || process.env.METADATA_PATH || Path.resolve('metadata')
|
const METADATA_PATH = inputMetadata || process.env.METADATA_PATH || Path.resolve('metadata')
|
||||||
const SOURCE = options.source || process.env.SOURCE || 'debian'
|
const SOURCE = options.source || process.env.SOURCE || 'debian'
|
||||||
|
|
||||||
const ROUTER_BASE_PATH = process.env.ROUTER_BASE_PATH || ''
|
const ROUTER_BASE_PATH = process.env.ROUTER_BASE_PATH || '/audiobookshelf'
|
||||||
|
|
||||||
console.log(`Running in ${process.env.NODE_ENV} mode.`)
|
console.log(`Running in ${process.env.NODE_ENV} mode.`)
|
||||||
console.log(`Options: CONFIG_PATH=${CONFIG_PATH}, METADATA_PATH=${METADATA_PATH}, PORT=${PORT}, HOST=${HOST}, SOURCE=${SOURCE}, ROUTER_BASE_PATH=${ROUTER_BASE_PATH}`)
|
console.log(`Options: CONFIG_PATH=${CONFIG_PATH}, METADATA_PATH=${METADATA_PATH}, PORT=${PORT}, HOST=${HOST}, SOURCE=${SOURCE}, ROUTER_BASE_PATH=${ROUTER_BASE_PATH}`)
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.17.7",
|
"version": "2.18.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.17.7",
|
"version": "2.18.1",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.27.2",
|
"axios": "^0.27.2",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "audiobookshelf",
|
"name": "audiobookshelf",
|
||||||
"version": "2.17.7",
|
"version": "2.18.1",
|
||||||
"buildNumber": 1,
|
"buildNumber": 1,
|
||||||
"description": "Self-hosted audiobook and podcast server",
|
"description": "Self-hosted audiobook and podcast server",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ const CONFIG_PATH = inputConfig || process.env.CONFIG_PATH || Path.resolve('conf
|
|||||||
const METADATA_PATH = inputMetadata || process.env.METADATA_PATH || Path.resolve('metadata')
|
const METADATA_PATH = inputMetadata || process.env.METADATA_PATH || Path.resolve('metadata')
|
||||||
const SOURCE = options.source || process.env.SOURCE || 'debian'
|
const SOURCE = options.source || process.env.SOURCE || 'debian'
|
||||||
|
|
||||||
const ROUTER_BASE_PATH = process.env.ROUTER_BASE_PATH || ''
|
const ROUTER_BASE_PATH = process.env.ROUTER_BASE_PATH || '/audiobookshelf'
|
||||||
|
|
||||||
console.log(process.env.NODE_ENV, 'Config', CONFIG_PATH, METADATA_PATH)
|
console.log(process.env.NODE_ENV, 'Config', CONFIG_PATH, METADATA_PATH)
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ Check out the web client demo: https://audiobooks.dev/ (thanks for hosting [@Vit
|
|||||||
|
|
||||||
Username/password: `demo`/`demo` (user account)
|
Username/password: `demo`/`demo` (user account)
|
||||||
|
|
||||||
|
|
||||||
### Android App (beta)
|
### Android App (beta)
|
||||||
|
|
||||||
Try it out on the [Google Play Store](https://play.google.com/store/apps/details?id=com.audiobookshelf.app)
|
Try it out on the [Google Play Store](https://play.google.com/store/apps/details?id=com.audiobookshelf.app)
|
||||||
@@ -86,7 +85,7 @@ See [install docs](https://www.audiobookshelf.org/docs)
|
|||||||
|
|
||||||
#### Important! Audiobookshelf requires a websocket connection.
|
#### Important! Audiobookshelf requires a websocket connection.
|
||||||
|
|
||||||
#### Note: Subfolder paths (e.g. /audiobooks) are not supported yet. See [issue](https://github.com/advplyr/audiobookshelf/issues/385)
|
#### Note: Using a subfolder is supported with no additional changes but the path must be `/audiobookshelf` (this is not changeable). See [discussion](https://github.com/advplyr/audiobookshelf/discussions/3535)
|
||||||
|
|
||||||
### NGINX Proxy Manager
|
### NGINX Proxy Manager
|
||||||
|
|
||||||
@@ -165,6 +164,16 @@ For this to work you must enable at least the following mods using `a2enmod`:
|
|||||||
</IfModule>
|
</IfModule>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If using Apache >= 2.4.47 you can use the following, without having to use any of the `RewriteEngine`, `RewriteCond`, or `RewriteRule` directives. For example:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<Location /audiobookshelf>
|
||||||
|
ProxyPreserveHost on
|
||||||
|
ProxyPass http://localhost:<audiobookshelf_port>/audiobookshelf upgrade=websocket
|
||||||
|
ProxyPassReverse http://localhost:<audiobookshelf_port>/audiobookshelf
|
||||||
|
</Location>
|
||||||
|
```
|
||||||
|
|
||||||
Some SSL certificates like those signed by Let's Encrypt require ACME validation. To allow Let's Encrypt to write and confirm the ACME challenge, edit your VirtualHost definition to prevent proxying traffic that queries `/.well-known` and instead serve that directly:
|
Some SSL certificates like those signed by Let's Encrypt require ACME validation. To allow Let's Encrypt to write and confirm the ACME challenge, edit your VirtualHost definition to prevent proxying traffic that queries `/.well-known` and instead serve that directly:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -226,6 +226,28 @@ class Database {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
await this.sequelize.authenticate()
|
await this.sequelize.authenticate()
|
||||||
|
|
||||||
|
// Set SQLite pragmas from environment variables
|
||||||
|
const allowedPragmas = [
|
||||||
|
{ name: 'mmap_size', env: 'SQLITE_MMAP_SIZE' },
|
||||||
|
{ name: 'cache_size', env: 'SQLITE_CACHE_SIZE' },
|
||||||
|
{ name: 'temp_store', env: 'SQLITE_TEMP_STORE' }
|
||||||
|
]
|
||||||
|
|
||||||
|
for (const pragma of allowedPragmas) {
|
||||||
|
const value = process.env[pragma.env]
|
||||||
|
if (value !== undefined) {
|
||||||
|
try {
|
||||||
|
Logger.info(`[Database] Running "PRAGMA ${pragma.name} = ${value}"`)
|
||||||
|
await this.sequelize.query(`PRAGMA ${pragma.name} = ${value}`)
|
||||||
|
const [result] = await this.sequelize.query(`PRAGMA ${pragma.name}`)
|
||||||
|
Logger.debug(`[Database] "PRAGMA ${pragma.name}" query result:`, result)
|
||||||
|
} catch (error) {
|
||||||
|
Logger.error(`[Database] Failed to set SQLite pragma ${pragma.name}`, error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (process.env.NUSQLITE3_PATH) {
|
if (process.env.NUSQLITE3_PATH) {
|
||||||
await this.loadExtension(process.env.NUSQLITE3_PATH)
|
await this.loadExtension(process.env.NUSQLITE3_PATH)
|
||||||
Logger.info(`[Database] Db supports unaccent and unicode foldings`)
|
Logger.info(`[Database] Db supports unaccent and unicode foldings`)
|
||||||
@@ -678,6 +700,7 @@ class Database {
|
|||||||
await libraryItem.destroy()
|
await libraryItem.destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove invalid PlaylistMediaItem records
|
||||||
const playlistMediaItemsWithNoMediaItem = await this.playlistMediaItemModel.findAll({
|
const playlistMediaItemsWithNoMediaItem = await this.playlistMediaItemModel.findAll({
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
@@ -699,6 +722,19 @@ class Database {
|
|||||||
await playlistMediaItem.destroy()
|
await playlistMediaItem.destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove invalid CollectionBook records
|
||||||
|
const collectionBooksWithNoBook = await this.collectionBookModel.findAll({
|
||||||
|
include: {
|
||||||
|
model: this.bookModel,
|
||||||
|
required: false
|
||||||
|
},
|
||||||
|
where: { '$book.id$': null }
|
||||||
|
})
|
||||||
|
for (const collectionBook of collectionBooksWithNoBook) {
|
||||||
|
Logger.warn(`Found collectionBook with no book - removing it`)
|
||||||
|
await collectionBook.destroy()
|
||||||
|
}
|
||||||
|
|
||||||
// Remove empty series
|
// Remove empty series
|
||||||
const emptySeries = await this.seriesModel.findAll({
|
const emptySeries = await this.seriesModel.findAll({
|
||||||
include: {
|
include: {
|
||||||
|
|||||||
@@ -100,6 +100,15 @@ class LibraryController {
|
|||||||
return res.status(400).send(`Invalid request. Settings "${key}" must be a string`)
|
return res.status(400).send(`Invalid request. Settings "${key}" must be a string`)
|
||||||
}
|
}
|
||||||
newLibraryPayload.settings[key] = req.body.settings[key]
|
newLibraryPayload.settings[key] = req.body.settings[key]
|
||||||
|
} else if (key === 'markAsFinishedPercentComplete' || key === 'markAsFinishedTimeRemaining') {
|
||||||
|
if (req.body.settings[key] !== null && isNaN(req.body.settings[key])) {
|
||||||
|
return res.status(400).send(`Invalid request. Setting "${key}" must be a number`)
|
||||||
|
} else if (key === 'markAsFinishedPercentComplete' && req.body.settings[key] !== null && (Number(req.body.settings[key]) < 0 || Number(req.body.settings[key]) > 100)) {
|
||||||
|
return res.status(400).send(`Invalid request. Setting "${key}" must be between 0 and 100`)
|
||||||
|
} else if (key === 'markAsFinishedTimeRemaining' && req.body.settings[key] !== null && Number(req.body.settings[key]) < 0) {
|
||||||
|
return res.status(400).send(`Invalid request. Setting "${key}" must be greater than or equal to 0`)
|
||||||
|
}
|
||||||
|
newLibraryPayload.settings[key] = req.body.settings[key] === null ? null : Number(req.body.settings[key])
|
||||||
} else {
|
} else {
|
||||||
if (typeof req.body.settings[key] !== typeof newLibraryPayload.settings[key]) {
|
if (typeof req.body.settings[key] !== typeof newLibraryPayload.settings[key]) {
|
||||||
return res.status(400).send(`Invalid request. Setting "${key}" must be of type ${typeof newLibraryPayload.settings[key]}`)
|
return res.status(400).send(`Invalid request. Setting "${key}" must be of type ${typeof newLibraryPayload.settings[key]}`)
|
||||||
@@ -325,7 +334,7 @@ class LibraryController {
|
|||||||
}
|
}
|
||||||
if (req.body.settings[key] !== updatedSettings[key]) {
|
if (req.body.settings[key] !== updatedSettings[key]) {
|
||||||
hasUpdates = true
|
hasUpdates = true
|
||||||
updatedSettings[key] = Number(req.body.settings[key])
|
updatedSettings[key] = req.body.settings[key] === null ? null : Number(req.body.settings[key])
|
||||||
Logger.debug(`[LibraryController] Library "${req.library.name}" updating setting "${key}" to "${updatedSettings[key]}"`)
|
Logger.debug(`[LibraryController] Library "${req.library.name}" updating setting "${key}" to "${updatedSettings[key]}"`)
|
||||||
}
|
}
|
||||||
} else if (key === 'markAsFinishedTimeRemaining') {
|
} else if (key === 'markAsFinishedTimeRemaining') {
|
||||||
@@ -338,7 +347,7 @@ class LibraryController {
|
|||||||
}
|
}
|
||||||
if (req.body.settings[key] !== updatedSettings[key]) {
|
if (req.body.settings[key] !== updatedSettings[key]) {
|
||||||
hasUpdates = true
|
hasUpdates = true
|
||||||
updatedSettings[key] = Number(req.body.settings[key])
|
updatedSettings[key] = req.body.settings[key] === null ? null : Number(req.body.settings[key])
|
||||||
Logger.debug(`[LibraryController] Library "${req.library.name}" updating setting "${key}" to "${updatedSettings[key]}"`)
|
Logger.debug(`[LibraryController] Library "${req.library.name}" updating setting "${key}" to "${updatedSettings[key]}"`)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ const AudiobookCovers = require('../providers/AudiobookCovers')
|
|||||||
const CustomProviderAdapter = require('../providers/CustomProviderAdapter')
|
const CustomProviderAdapter = require('../providers/CustomProviderAdapter')
|
||||||
const Logger = require('../Logger')
|
const Logger = require('../Logger')
|
||||||
const { levenshteinDistance, escapeRegExp } = require('../utils/index')
|
const { levenshteinDistance, escapeRegExp } = require('../utils/index')
|
||||||
|
const htmlSanitizer = require('../utils/htmlSanitizer')
|
||||||
|
|
||||||
class BookFinder {
|
class BookFinder {
|
||||||
#providerResponseTimeout = 30000
|
#providerResponseTimeout = 30000
|
||||||
@@ -463,6 +464,12 @@ class BookFinder {
|
|||||||
} else {
|
} else {
|
||||||
books = await this.getGoogleBooksResults(title, author)
|
books = await this.getGoogleBooksResults(title, author)
|
||||||
}
|
}
|
||||||
|
books.forEach((book) => {
|
||||||
|
if (book.description) {
|
||||||
|
book.description = htmlSanitizer.sanitize(book.description)
|
||||||
|
book.descriptionPlain = htmlSanitizer.stripAllTags(book.description)
|
||||||
|
}
|
||||||
|
})
|
||||||
return books
|
return books
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,12 +7,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const htmlparser = require('htmlparser2');
|
const htmlparser = require('htmlparser2');
|
||||||
// const escapeStringRegexp = require('escape-string-regexp');
|
|
||||||
// const { isPlainObject } = require('is-plain-object');
|
|
||||||
// const deepmerge = require('deepmerge');
|
|
||||||
// const parseSrcset = require('parse-srcset');
|
|
||||||
// const { parse: postcssParse } = require('postcss');
|
|
||||||
// Tags that can conceivably represent stand-alone media.
|
|
||||||
|
|
||||||
// ABS UPDATE: Packages not necessary
|
// ABS UPDATE: Packages not necessary
|
||||||
// SOURCE: https://github.com/sindresorhus/escape-string-regexp/blob/main/index.js
|
// SOURCE: https://github.com/sindresorhus/escape-string-regexp/blob/main/index.js
|
||||||
@@ -76,17 +70,6 @@ function has(obj, key) {
|
|||||||
return ({}).hasOwnProperty.call(obj, key);
|
return ({}).hasOwnProperty.call(obj, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns those elements of `a` for which `cb(a)` returns truthy
|
|
||||||
function filter(a, cb) {
|
|
||||||
const n = [];
|
|
||||||
each(a, function (v) {
|
|
||||||
if (cb(v)) {
|
|
||||||
n.push(v);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isEmptyObject(obj) {
|
function isEmptyObject(obj) {
|
||||||
for (const key in obj) {
|
for (const key in obj) {
|
||||||
if (has(obj, key)) {
|
if (has(obj, key)) {
|
||||||
@@ -96,21 +79,6 @@ function isEmptyObject(obj) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function stringifySrcset(parsedSrcset) {
|
|
||||||
return parsedSrcset.map(function (part) {
|
|
||||||
if (!part.url) {
|
|
||||||
throw new Error('URL missing');
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
part.url +
|
|
||||||
(part.w ? ` ${part.w}w` : '') +
|
|
||||||
(part.h ? ` ${part.h}h` : '') +
|
|
||||||
(part.d ? ` ${part.d}x` : '')
|
|
||||||
);
|
|
||||||
}).join(', ');
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = sanitizeHtml;
|
module.exports = sanitizeHtml;
|
||||||
|
|
||||||
// A valid attribute name.
|
// A valid attribute name.
|
||||||
@@ -714,86 +682,6 @@ function sanitizeHtml(html, options, _recursing) {
|
|||||||
return !options.allowedSchemes || options.allowedSchemes.indexOf(scheme) === -1;
|
return !options.allowedSchemes || options.allowedSchemes.indexOf(scheme) === -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Filters user input css properties by allowlisted regex attributes.
|
|
||||||
* Modifies the abstractSyntaxTree object.
|
|
||||||
*
|
|
||||||
* @param {object} abstractSyntaxTree - Object representation of CSS attributes.
|
|
||||||
* @property {array[Declaration]} abstractSyntaxTree.nodes[0] - Each object cointains prop and value key, i.e { prop: 'color', value: 'red' }.
|
|
||||||
* @param {object} allowedStyles - Keys are properties (i.e color), value is list of permitted regex rules (i.e /green/i).
|
|
||||||
* @return {object} - The modified tree.
|
|
||||||
*/
|
|
||||||
// function filterCss(abstractSyntaxTree, allowedStyles) {
|
|
||||||
// if (!allowedStyles) {
|
|
||||||
// return abstractSyntaxTree;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const astRules = abstractSyntaxTree.nodes[0];
|
|
||||||
// let selectedRule;
|
|
||||||
|
|
||||||
// // Merge global and tag-specific styles into new AST.
|
|
||||||
// if (allowedStyles[astRules.selector] && allowedStyles['*']) {
|
|
||||||
// selectedRule = deepmerge(
|
|
||||||
// allowedStyles[astRules.selector],
|
|
||||||
// allowedStyles['*']
|
|
||||||
// );
|
|
||||||
// } else {
|
|
||||||
// selectedRule = allowedStyles[astRules.selector] || allowedStyles['*'];
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (selectedRule) {
|
|
||||||
// abstractSyntaxTree.nodes[0].nodes = astRules.nodes.reduce(filterDeclarations(selectedRule), []);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return abstractSyntaxTree;
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the style attributes from an AbstractSyntaxTree and formats those
|
|
||||||
* values in the inline style attribute format.
|
|
||||||
*
|
|
||||||
* @param {AbstractSyntaxTree} filteredAST
|
|
||||||
* @return {string} - Example: "color:yellow;text-align:center !important;font-family:helvetica;"
|
|
||||||
*/
|
|
||||||
function stringifyStyleAttributes(filteredAST) {
|
|
||||||
return filteredAST.nodes[0].nodes
|
|
||||||
.reduce(function (extractedAttributes, attrObject) {
|
|
||||||
extractedAttributes.push(
|
|
||||||
`${attrObject.prop}:${attrObject.value}${attrObject.important ? ' !important' : ''}`
|
|
||||||
);
|
|
||||||
return extractedAttributes;
|
|
||||||
}, [])
|
|
||||||
.join(';');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filters the existing attributes for the given property. Discards any attributes
|
|
||||||
* which don't match the allowlist.
|
|
||||||
*
|
|
||||||
* @param {object} selectedRule - Example: { color: red, font-family: helvetica }
|
|
||||||
* @param {array} allowedDeclarationsList - List of declarations which pass the allowlist.
|
|
||||||
* @param {object} attributeObject - Object representing the current css property.
|
|
||||||
* @property {string} attributeObject.type - Typically 'declaration'.
|
|
||||||
* @property {string} attributeObject.prop - The CSS property, i.e 'color'.
|
|
||||||
* @property {string} attributeObject.value - The corresponding value to the css property, i.e 'red'.
|
|
||||||
* @return {function} - When used in Array.reduce, will return an array of Declaration objects
|
|
||||||
*/
|
|
||||||
function filterDeclarations(selectedRule) {
|
|
||||||
return function (allowedDeclarationsList, attributeObject) {
|
|
||||||
// If this property is allowlisted...
|
|
||||||
if (has(selectedRule, attributeObject.prop)) {
|
|
||||||
const matchesRegex = selectedRule[attributeObject.prop].some(function (regularExpression) {
|
|
||||||
return regularExpression.test(attributeObject.value);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (matchesRegex) {
|
|
||||||
allowedDeclarationsList.push(attributeObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return allowedDeclarationsList;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function filterClasses(classes, allowed, allowedGlobs) {
|
function filterClasses(classes, allowed, allowedGlobs) {
|
||||||
if (!allowed) {
|
if (!allowed) {
|
||||||
// The class attribute is allowed without filtering on this tag
|
// The class attribute is allowed without filtering on this tag
|
||||||
|
|||||||
@@ -42,8 +42,7 @@ class ApiCacheManager {
|
|||||||
Logger.debug(`[ApiCacheManager] Skipping cache for random sort`)
|
Logger.debug(`[ApiCacheManager] Skipping cache for random sort`)
|
||||||
return next()
|
return next()
|
||||||
}
|
}
|
||||||
// Force URL to be lower case for matching against routes
|
|
||||||
req.url = req.url.toLowerCase()
|
|
||||||
const key = { user: req.user.username, url: req.url }
|
const key = { user: req.user.username, url: req.url }
|
||||||
const stringifiedKey = JSON.stringify(key)
|
const stringifiedKey = JSON.stringify(key)
|
||||||
Logger.debug(`[ApiCacheManager] count: ${this.cache.size} size: ${this.cache.calculatedSize}`)
|
Logger.debug(`[ApiCacheManager] count: ${this.cache.size} size: ${this.cache.calculatedSize}`)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ const { DataTypes, Model } = require('sequelize')
|
|||||||
const Logger = require('../Logger')
|
const Logger = require('../Logger')
|
||||||
const { getTitlePrefixAtEnd, getTitleIgnorePrefix } = require('../utils')
|
const { getTitlePrefixAtEnd, getTitleIgnorePrefix } = require('../utils')
|
||||||
const parseNameString = require('../utils/parsers/parseNameString')
|
const parseNameString = require('../utils/parsers/parseNameString')
|
||||||
|
const htmlSanitizer = require('../utils/htmlSanitizer')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef EBookFileObject
|
* @typedef EBookFileObject
|
||||||
@@ -579,6 +580,7 @@ class Book extends Model {
|
|||||||
oldMetadataJSON.authorNameLF = this.authorNameLF
|
oldMetadataJSON.authorNameLF = this.authorNameLF
|
||||||
oldMetadataJSON.narratorName = (this.narrators || []).join(', ')
|
oldMetadataJSON.narratorName = (this.narrators || []).join(', ')
|
||||||
oldMetadataJSON.seriesName = this.seriesName
|
oldMetadataJSON.seriesName = this.seriesName
|
||||||
|
oldMetadataJSON.descriptionPlain = this.description ? htmlSanitizer.stripAllTags(this.description) : null
|
||||||
return oldMetadataJSON
|
return oldMetadataJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+37
-21
@@ -561,7 +561,42 @@ class Feed extends Model {
|
|||||||
* @param {string} hostPrefix
|
* @param {string} hostPrefix
|
||||||
*/
|
*/
|
||||||
buildXml(hostPrefix) {
|
buildXml(hostPrefix) {
|
||||||
const blockTags = [{ 'itunes:block': 'yes' }, { 'googleplay:block': 'yes' }]
|
const customElements = [
|
||||||
|
{ language: this.language || 'en' },
|
||||||
|
{ author: this.author || 'advplyr' },
|
||||||
|
{ 'itunes:author': this.author || 'advplyr' },
|
||||||
|
{ 'itunes:type': this.podcastType || 'serial' },
|
||||||
|
{
|
||||||
|
'itunes:image': {
|
||||||
|
_attr: {
|
||||||
|
href: `${hostPrefix}${this.imageURL}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ 'itunes:explicit': !!this.explicit }
|
||||||
|
]
|
||||||
|
|
||||||
|
if (this.description) {
|
||||||
|
customElements.push({ 'itunes:summary': { _cdata: this.description } })
|
||||||
|
}
|
||||||
|
|
||||||
|
const itunesOwnersData = []
|
||||||
|
if (this.ownerName || this.author) {
|
||||||
|
itunesOwnersData.push({ 'itunes:name': this.ownerName || this.author })
|
||||||
|
}
|
||||||
|
if (this.ownerEmail) {
|
||||||
|
itunesOwnersData.push({ 'itunes:email': this.ownerEmail })
|
||||||
|
}
|
||||||
|
if (itunesOwnersData.length) {
|
||||||
|
customElements.push({
|
||||||
|
'itunes:owner': itunesOwnersData
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.preventIndexing) {
|
||||||
|
customElements.push({ 'itunes:block': 'yes' }, { 'googleplay:block': 'yes' })
|
||||||
|
}
|
||||||
|
|
||||||
const rssData = {
|
const rssData = {
|
||||||
title: this.title,
|
title: this.title,
|
||||||
description: this.description || '',
|
description: this.description || '',
|
||||||
@@ -571,29 +606,10 @@ class Feed extends Model {
|
|||||||
image_url: `${hostPrefix}${this.imageURL}`,
|
image_url: `${hostPrefix}${this.imageURL}`,
|
||||||
custom_namespaces: {
|
custom_namespaces: {
|
||||||
itunes: 'http://www.itunes.com/dtds/podcast-1.0.dtd',
|
itunes: 'http://www.itunes.com/dtds/podcast-1.0.dtd',
|
||||||
psc: 'http://podlove.org/simple-chapters',
|
|
||||||
podcast: 'https://podcastindex.org/namespace/1.0',
|
podcast: 'https://podcastindex.org/namespace/1.0',
|
||||||
googleplay: 'http://www.google.com/schemas/play-podcasts/1.0'
|
googleplay: 'http://www.google.com/schemas/play-podcasts/1.0'
|
||||||
},
|
},
|
||||||
custom_elements: [
|
custom_elements: customElements
|
||||||
{ language: this.language || 'en' },
|
|
||||||
{ author: this.author || 'advplyr' },
|
|
||||||
{ 'itunes:author': this.author || 'advplyr' },
|
|
||||||
{ 'itunes:summary': this.description || '' },
|
|
||||||
{ 'itunes:type': this.podcastType },
|
|
||||||
{
|
|
||||||
'itunes:image': {
|
|
||||||
_attr: {
|
|
||||||
href: `${hostPrefix}${this.imageURL}`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'itunes:owner': [{ 'itunes:name': this.ownerName || this.author || '' }, { 'itunes:email': this.ownerEmail || '' }]
|
|
||||||
},
|
|
||||||
{ 'itunes:explicit': !!this.explicit },
|
|
||||||
...(this.preventIndexing ? blockTags : [])
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const rssfeed = new RSS(rssData)
|
const rssfeed = new RSS(rssData)
|
||||||
|
|||||||
@@ -135,12 +135,14 @@ class FeedEpisode extends Model {
|
|||||||
* @param {string} slug
|
* @param {string} slug
|
||||||
* @param {import('./Book').AudioFileObject} audioTrack
|
* @param {import('./Book').AudioFileObject} audioTrack
|
||||||
* @param {boolean} useChapterTitles
|
* @param {boolean} useChapterTitles
|
||||||
|
* @param {number} offsetIndex
|
||||||
* @param {string} [existingEpisodeId]
|
* @param {string} [existingEpisodeId]
|
||||||
*/
|
*/
|
||||||
static getFeedEpisodeObjFromAudiobookTrack(book, pubDateStart, feed, slug, audioTrack, useChapterTitles, existingEpisodeId = null) {
|
static getFeedEpisodeObjFromAudiobookTrack(book, pubDateStart, feed, slug, audioTrack, useChapterTitles, offsetIndex, existingEpisodeId = null) {
|
||||||
// Example: <pubDate>Fri, 04 Feb 2015 00:00:00 GMT</pubDate>
|
// Example: <pubDate>Fri, 04 Feb 2015 00:00:00 GMT</pubDate>
|
||||||
let timeOffset = isNaN(audioTrack.index) ? 0 : Number(audioTrack.index) * 1000 // Offset pubdate to ensure correct order
|
// Offset pubdate in 1 minute intervals to ensure correct order
|
||||||
let episodeId = existingEpisodeId || uuidv4()
|
const timeOffset = offsetIndex * 60000
|
||||||
|
const episodeId = existingEpisodeId || uuidv4()
|
||||||
|
|
||||||
// e.g. Track 1 will have a pub date before Track 2
|
// e.g. Track 1 will have a pub date before Track 2
|
||||||
const audiobookPubDate = date.format(new Date(pubDateStart.valueOf() + timeOffset), 'ddd, DD MMM YYYY HH:mm:ss [GMT]')
|
const audiobookPubDate = date.format(new Date(pubDateStart.valueOf() + timeOffset), 'ddd, DD MMM YYYY HH:mm:ss [GMT]')
|
||||||
@@ -190,14 +192,15 @@ class FeedEpisode extends Model {
|
|||||||
|
|
||||||
const feedEpisodeObjs = []
|
const feedEpisodeObjs = []
|
||||||
let numExisting = 0
|
let numExisting = 0
|
||||||
for (const track of trackList) {
|
for (let i = 0; i < trackList.length; i++) {
|
||||||
|
const track = trackList[i]
|
||||||
// Check for existing episode by filepath
|
// Check for existing episode by filepath
|
||||||
const existingEpisode = feed.feedEpisodes?.find((episode) => {
|
const existingEpisode = feed.feedEpisodes?.find((episode) => {
|
||||||
return episode.filePath === track.metadata.path
|
return episode.filePath === track.metadata.path
|
||||||
})
|
})
|
||||||
numExisting = existingEpisode ? numExisting + 1 : numExisting
|
numExisting = existingEpisode ? numExisting + 1 : numExisting
|
||||||
|
|
||||||
feedEpisodeObjs.push(this.getFeedEpisodeObjFromAudiobookTrack(libraryItemExpanded.media, libraryItemExpanded.createdAt, feed, slug, track, useChapterTitles, existingEpisode?.id))
|
feedEpisodeObjs.push(this.getFeedEpisodeObjFromAudiobookTrack(libraryItemExpanded.media, libraryItemExpanded.createdAt, feed, slug, track, useChapterTitles, i, existingEpisode?.id))
|
||||||
}
|
}
|
||||||
Logger.info(`[FeedEpisode] Upserting ${feedEpisodeObjs.length} episodes for feed ${feed.id} (${numExisting} existing)`)
|
Logger.info(`[FeedEpisode] Upserting ${feedEpisodeObjs.length} episodes for feed ${feed.id} (${numExisting} existing)`)
|
||||||
return this.bulkCreate(feedEpisodeObjs, { transaction, updateOnDuplicate: ['title', 'author', 'description', 'siteURL', 'enclosureURL', 'enclosureType', 'enclosureSize', 'pubDate', 'season', 'episode', 'episodeType', 'duration', 'filePath', 'explicit'] })
|
return this.bulkCreate(feedEpisodeObjs, { transaction, updateOnDuplicate: ['title', 'author', 'description', 'siteURL', 'enclosureURL', 'enclosureType', 'enclosureSize', 'pubDate', 'season', 'episode', 'episodeType', 'duration', 'filePath', 'explicit'] })
|
||||||
@@ -218,8 +221,9 @@ class FeedEpisode extends Model {
|
|||||||
|
|
||||||
const feedEpisodeObjs = []
|
const feedEpisodeObjs = []
|
||||||
let numExisting = 0
|
let numExisting = 0
|
||||||
|
let offsetIndex = 0
|
||||||
for (const book of books) {
|
for (const book of books) {
|
||||||
const trackList = book.libraryItem.getTrackList()
|
const trackList = book.getTracklist(book.libraryItem.id)
|
||||||
const useChapterTitles = this.checkUseChapterTitlesForEpisodes(trackList, book)
|
const useChapterTitles = this.checkUseChapterTitlesForEpisodes(trackList, book)
|
||||||
for (const track of trackList) {
|
for (const track of trackList) {
|
||||||
// Check for existing episode by filepath
|
// Check for existing episode by filepath
|
||||||
@@ -228,7 +232,7 @@ class FeedEpisode extends Model {
|
|||||||
})
|
})
|
||||||
numExisting = existingEpisode ? numExisting + 1 : numExisting
|
numExisting = existingEpisode ? numExisting + 1 : numExisting
|
||||||
|
|
||||||
feedEpisodeObjs.push(this.getFeedEpisodeObjFromAudiobookTrack(book, earliestLibraryItemCreatedAt, feed, slug, track, useChapterTitles, existingEpisode?.id))
|
feedEpisodeObjs.push(this.getFeedEpisodeObjFromAudiobookTrack(book, earliestLibraryItemCreatedAt, feed, slug, track, useChapterTitles, offsetIndex++, existingEpisode?.id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Logger.info(`[FeedEpisode] Upserting ${feedEpisodeObjs.length} episodes for feed ${feed.id} (${numExisting} existing)`)
|
Logger.info(`[FeedEpisode] Upserting ${feedEpisodeObjs.length} episodes for feed ${feed.id} (${numExisting} existing)`)
|
||||||
@@ -304,6 +308,23 @@ class FeedEpisode extends Model {
|
|||||||
* @param {string} hostPrefix
|
* @param {string} hostPrefix
|
||||||
*/
|
*/
|
||||||
getRSSData(hostPrefix) {
|
getRSSData(hostPrefix) {
|
||||||
|
const customElements = [
|
||||||
|
{ 'itunes:author': this.author || null },
|
||||||
|
{ 'itunes:duration': Math.round(Number(this.duration)) },
|
||||||
|
{
|
||||||
|
'itunes:explicit': !!this.explicit
|
||||||
|
},
|
||||||
|
{ 'itunes:episodeType': this.episodeType || null },
|
||||||
|
{ 'itunes:season': this.season || null },
|
||||||
|
{ 'itunes:episode': this.episode || null }
|
||||||
|
].filter((element) => {
|
||||||
|
// Remove empty custom elements
|
||||||
|
return Object.values(element)[0] !== null
|
||||||
|
})
|
||||||
|
if (this.description) {
|
||||||
|
customElements.push({ 'itunes:summary': { _cdata: this.description } })
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title: this.title,
|
title: this.title,
|
||||||
description: this.description || '',
|
description: this.description || '',
|
||||||
@@ -316,17 +337,7 @@ class FeedEpisode extends Model {
|
|||||||
type: this.enclosureType,
|
type: this.enclosureType,
|
||||||
size: this.enclosureSize
|
size: this.enclosureSize
|
||||||
},
|
},
|
||||||
custom_elements: [
|
custom_elements: customElements
|
||||||
{ 'itunes:author': this.author },
|
|
||||||
{ 'itunes:duration': secondsToTimestamp(this.duration) },
|
|
||||||
{ 'itunes:summary': this.description || '' },
|
|
||||||
{
|
|
||||||
'itunes:explicit': !!this.explicit
|
|
||||||
},
|
|
||||||
{ 'itunes:episodeType': this.episodeType },
|
|
||||||
{ 'itunes:season': this.season },
|
|
||||||
{ 'itunes:episode': this.episode }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ class LibraryItem extends Model {
|
|||||||
{
|
{
|
||||||
model: this.sequelize.models.series,
|
model: this.sequelize.models.series,
|
||||||
through: {
|
through: {
|
||||||
attributes: ['sequence']
|
attributes: ['id', 'sequence']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ class PodcastEpisodeDownload {
|
|||||||
return this.rssPodcastEpisode.title
|
return this.rssPodcastEpisode.title
|
||||||
}
|
}
|
||||||
get targetFilename() {
|
get targetFilename() {
|
||||||
const appendage = this.appendRandomId ? ` (${uuidv4()})` : ''
|
const appendage = this.appendRandomId ? ` (${this.id})` : ''
|
||||||
const filename = `${this.rssPodcastEpisode.title}${appendage}.${this.fileExtension}`
|
const filename = `${this.rssPodcastEpisode.title}${appendage}.${this.fileExtension}`
|
||||||
return sanitizeFilename(filename)
|
return sanitizeFilename(filename)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
const axios = require('axios').default
|
const axios = require('axios').default
|
||||||
const htmlSanitizer = require('../utils/htmlSanitizer')
|
|
||||||
const Logger = require('../Logger')
|
const Logger = require('../Logger')
|
||||||
const { isValidASIN } = require('../utils/index')
|
const { isValidASIN } = require('../utils/index')
|
||||||
|
|
||||||
@@ -68,7 +67,7 @@ class Audible {
|
|||||||
narrator: narrators ? narrators.map(({ name }) => name).join(', ') : null,
|
narrator: narrators ? narrators.map(({ name }) => name).join(', ') : null,
|
||||||
publisher: publisherName,
|
publisher: publisherName,
|
||||||
publishedYear: releaseDate ? releaseDate.split('-')[0] : null,
|
publishedYear: releaseDate ? releaseDate.split('-')[0] : null,
|
||||||
description: summary ? htmlSanitizer.stripAllTags(summary) : null,
|
description: summary || null,
|
||||||
cover: image,
|
cover: image,
|
||||||
asin,
|
asin,
|
||||||
genres: genresFiltered.length ? genresFiltered : null,
|
genres: genresFiltered.length ? genresFiltered : null,
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
const axios = require('axios').default
|
const axios = require('axios').default
|
||||||
const Database = require('../Database')
|
const Database = require('../Database')
|
||||||
const Logger = require('../Logger')
|
const Logger = require('../Logger')
|
||||||
|
const htmlSanitizer = require('../utils/htmlSanitizer')
|
||||||
|
|
||||||
class CustomProviderAdapter {
|
class CustomProviderAdapter {
|
||||||
#responseTimeout = 30000
|
#responseTimeout = 30000
|
||||||
@@ -74,7 +75,7 @@ class CustomProviderAdapter {
|
|||||||
narrator,
|
narrator,
|
||||||
publisher,
|
publisher,
|
||||||
publishedYear,
|
publishedYear,
|
||||||
description,
|
description: htmlSanitizer.sanitize(description),
|
||||||
cover,
|
cover,
|
||||||
isbn,
|
isbn,
|
||||||
asin,
|
asin,
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ class iTunes {
|
|||||||
artistId: data.artistId,
|
artistId: data.artistId,
|
||||||
title: data.collectionName,
|
title: data.collectionName,
|
||||||
author,
|
author,
|
||||||
description: htmlSanitizer.stripAllTags(data.description || ''),
|
description: data.description || null,
|
||||||
publishedYear: data.releaseDate ? data.releaseDate.split('-')[0] : null,
|
publishedYear: data.releaseDate ? data.releaseDate.split('-')[0] : null,
|
||||||
genres: data.primaryGenreName ? [data.primaryGenreName] : null,
|
genres: data.primaryGenreName ? [data.primaryGenreName] : null,
|
||||||
cover: this.getCoverArtwork(data)
|
cover: this.getCoverArtwork(data)
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ class ApiRouter {
|
|||||||
//
|
//
|
||||||
// Library Routes
|
// Library Routes
|
||||||
//
|
//
|
||||||
this.router.get(/^\/libraries/i, this.apiCacheManager.middleware)
|
this.router.get(/^\/libraries/, this.apiCacheManager.middleware)
|
||||||
this.router.post('/libraries', LibraryController.create.bind(this))
|
this.router.post('/libraries', LibraryController.create.bind(this))
|
||||||
this.router.get('/libraries', LibraryController.findAll.bind(this))
|
this.router.get('/libraries', LibraryController.findAll.bind(this))
|
||||||
this.router.get('/libraries/:id', LibraryController.middleware.bind(this), LibraryController.findOne.bind(this))
|
this.router.get('/libraries/:id', LibraryController.middleware.bind(this), LibraryController.findOne.bind(this))
|
||||||
|
|||||||
@@ -1,11 +1,19 @@
|
|||||||
const sanitizeHtml = require('../libs/sanitizeHtml')
|
const sanitizeHtml = require('../libs/sanitizeHtml')
|
||||||
const { entities } = require("./htmlEntities");
|
const { entities } = require('./htmlEntities')
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {string} html
|
||||||
|
* @returns {string}
|
||||||
|
* @throws {Error} if input is not a string
|
||||||
|
*/
|
||||||
function sanitize(html) {
|
function sanitize(html) {
|
||||||
|
if (typeof html !== 'string') {
|
||||||
|
throw new Error('sanitizeHtml: input must be a string')
|
||||||
|
}
|
||||||
|
|
||||||
const sanitizerOptions = {
|
const sanitizerOptions = {
|
||||||
allowedTags: [
|
allowedTags: ['p', 'ol', 'ul', 'li', 'a', 'strong', 'em', 'del', 'br', 'b', 'i'],
|
||||||
'p', 'ol', 'ul', 'li', 'a', 'strong', 'em', 'del', 'br'
|
|
||||||
],
|
|
||||||
disallowedTagsMode: 'discard',
|
disallowedTagsMode: 'discard',
|
||||||
allowedAttributes: {
|
allowedAttributes: {
|
||||||
a: ['href', 'name', 'target']
|
a: ['href', 'name', 'target']
|
||||||
@@ -34,6 +42,6 @@ function decodeHTMLEntities(strToDecode) {
|
|||||||
if (entity in entities) {
|
if (entity in entities) {
|
||||||
return entities[entity]
|
return entities[entity]
|
||||||
}
|
}
|
||||||
return entity;
|
return entity
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ function secondsToTimestamp(seconds, includeMs = false, alwaysIncludeHours = fal
|
|||||||
var ms = _seconds - Math.floor(seconds)
|
var ms = _seconds - Math.floor(seconds)
|
||||||
_seconds = Math.floor(_seconds)
|
_seconds = Math.floor(_seconds)
|
||||||
|
|
||||||
var msString = '.' + (includeMs ? ms.toFixed(3) : '0.0').split('.')[1]
|
const msString = includeMs ? '.' + ms.toFixed(3).split('.')[1] : ''
|
||||||
if (alwaysIncludeHours) {
|
if (alwaysIncludeHours) {
|
||||||
return `${_hours.toString().padStart(2, '0')}:${_minutes.toString().padStart(2, '0')}:${_seconds.toString().padStart(2, '0')}${msString}`
|
return `${_hours.toString().padStart(2, '0')}:${_minutes.toString().padStart(2, '0')}:${_seconds.toString().padStart(2, '0')}${msString}`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,9 @@ async function extractCoverImage(epubPath, epubImageFilepath, outputCoverPath) {
|
|||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
|
|
||||||
await zip.close()
|
await zip.close().catch((error) => {
|
||||||
|
Logger.error(`[parseEpubMetadata] Failed to close zip`, error)
|
||||||
|
})
|
||||||
|
|
||||||
return success
|
return success
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -141,15 +141,19 @@ function extractPodcastMetadata(channel) {
|
|||||||
|
|
||||||
function extractEpisodeData(item) {
|
function extractEpisodeData(item) {
|
||||||
// Episode must have url
|
// Episode must have url
|
||||||
if (!item.enclosure?.[0]?.['$']?.url) {
|
let enclosure
|
||||||
|
|
||||||
|
if (item.enclosure?.[0]?.['$']?.url) {
|
||||||
|
enclosure = item.enclosure[0]['$']
|
||||||
|
} else if(item['media:content']?.find(c => c?.['$']?.url && (c?.['$']?.type ?? "").startsWith("audio"))) {
|
||||||
|
enclosure = item['media:content'].find(c => (c['$']?.type ?? "").startsWith("audio"))['$']
|
||||||
|
} else {
|
||||||
Logger.error(`[podcastUtils] Invalid podcast episode data`)
|
Logger.error(`[podcastUtils] Invalid podcast episode data`)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
const episode = {
|
const episode = {
|
||||||
enclosure: {
|
enclosure: enclosure,
|
||||||
...item.enclosure[0]['$']
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
episode.enclosure.url = episode.enclosure.url.trim()
|
episode.enclosure.url = episode.enclosure.url.trim()
|
||||||
|
|||||||
Reference in New Issue
Block a user