mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2026-07-26 14:38:39 +02:00
Compare commits
32
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
75627ea40f | ||
|
|
0fa04d7d9a | ||
|
|
1e76ebe075 | ||
|
|
965da2fee3 | ||
|
|
b03f59ace3 | ||
|
|
79c7244b24 | ||
|
|
0843be3f4e | ||
|
|
6911f368e5 | ||
|
|
42167ea738 | ||
|
|
1c57d3506a | ||
|
|
8adc6fae4c | ||
|
|
e9746577ba | ||
|
|
9f68730622 | ||
|
|
f019b67b0c | ||
|
|
0f650c0572 | ||
|
|
dfc77ea0d0 | ||
|
|
67f514524f | ||
|
|
d97c6a0872 | ||
|
|
e7ad62760f | ||
|
|
fd34ea8124 | ||
|
|
5db94bf5b8 | ||
|
|
796d6d79d4 | ||
|
|
03aafafe1c | ||
|
|
3f303abc19 | ||
|
|
85d6958025 | ||
|
|
669bd7827b | ||
|
|
2b48f0c6a9 | ||
|
|
2c44d38906 | ||
|
|
750726ff6a | ||
|
|
dafab492fe | ||
|
|
6419c8dc3a | ||
|
|
3bb5ce5924 |
@@ -24,7 +24,7 @@ jobs:
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
java-version: 21
|
||||
|
||||
- name: install dependencies
|
||||
run: npm ci
|
||||
|
||||
@@ -36,8 +36,8 @@ android {
|
||||
applicationId "com.audiobookshelf.app"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 110
|
||||
versionName "0.9.79-beta"
|
||||
versionCode 112
|
||||
versionName "0.9.81-beta"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
manifestPlaceholders = [
|
||||
"appAuthRedirectScheme": "com.audiobookshelf.app"
|
||||
|
||||
@@ -135,6 +135,7 @@ data class DeviceSettings(
|
||||
var sleepTimerLength: Long, // Time in milliseconds
|
||||
var disableSleepTimerFadeOut: Boolean,
|
||||
var disableSleepTimerResetFeedback: Boolean,
|
||||
var enableSleepTimerAlmostDoneChime: Boolean,
|
||||
var languageCode: String,
|
||||
var downloadUsingCellular: DownloadUsingCellularSetting,
|
||||
var streamingUsingCellular: StreamingUsingCellularSetting,
|
||||
@@ -163,6 +164,7 @@ data class DeviceSettings(
|
||||
autoSleepTimerAutoRewindTime = 300000L, // 5 minutes
|
||||
disableSleepTimerFadeOut = false,
|
||||
disableSleepTimerResetFeedback = false,
|
||||
enableSleepTimerAlmostDoneChime = false,
|
||||
languageCode = "en-us",
|
||||
downloadUsingCellular = DownloadUsingCellularSetting.ALWAYS,
|
||||
streamingUsingCellular = StreamingUsingCellularSetting.ALWAYS,
|
||||
@@ -188,9 +190,9 @@ data class DeviceSettings(
|
||||
|
||||
@JsonIgnore
|
||||
fun getShakeThresholdGravity() : Float { // Used in ShakeDetector
|
||||
return if (shakeSensitivity == ShakeSensitivitySetting.VERY_HIGH) 1.2f
|
||||
else if (shakeSensitivity == ShakeSensitivitySetting.HIGH) 1.4f
|
||||
else if (shakeSensitivity == ShakeSensitivitySetting.MEDIUM) 1.6f
|
||||
return if (shakeSensitivity == ShakeSensitivitySetting.VERY_HIGH) 1.1f
|
||||
else if (shakeSensitivity == ShakeSensitivitySetting.HIGH) 1.3f
|
||||
else if (shakeSensitivity == ShakeSensitivitySetting.MEDIUM) 1.5f
|
||||
else if (shakeSensitivity == ShakeSensitivitySetting.LOW) 2f
|
||||
else if (shakeSensitivity == ShakeSensitivitySetting.VERY_LOW) 2.7f
|
||||
else {
|
||||
|
||||
@@ -34,6 +34,7 @@ object DeviceManager {
|
||||
|
||||
val serverConnectionConfigId get() = serverConnectionConfig?.id ?: ""
|
||||
val serverConnectionConfigName get() = serverConnectionConfig?.name ?: ""
|
||||
val serverConnectionConfigString get() = serverConnectionConfig?.name ?: "No server connection"
|
||||
val serverAddress
|
||||
get() = serverConnectionConfig?.address ?: ""
|
||||
val serverUserId
|
||||
@@ -63,6 +64,10 @@ object DeviceManager {
|
||||
if (deviceData.deviceSettings?.autoSleepTimerAutoRewindTime == null) {
|
||||
deviceData.deviceSettings?.autoSleepTimerAutoRewindTime = 300000L // 5 minutes
|
||||
}
|
||||
// Initialize sleep timer almost done chime added in v0.9.81
|
||||
if (deviceData.deviceSettings?.enableSleepTimerAlmostDoneChime == null) {
|
||||
deviceData.deviceSettings?.enableSleepTimerAlmostDoneChime = false
|
||||
}
|
||||
|
||||
// Language added in v0.9.69
|
||||
if (deviceData.deviceSettings?.languageCode == null) {
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ class InternalDownloadManager(
|
||||
*/
|
||||
@Throws(IOException::class)
|
||||
fun download(url: String) {
|
||||
val request: Request = Request.Builder().url(url).build()
|
||||
val request: Request = Request.Builder().url(url).addHeader("Accept-Encoding", "identity").build()
|
||||
client.newCall(request)
|
||||
.enqueue(
|
||||
object : Callback {
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
package com.audiobookshelf.app.managers
|
||||
|
||||
import android.content.Context
|
||||
import android.media.MediaPlayer
|
||||
import android.os.*
|
||||
import android.util.Log
|
||||
import com.audiobookshelf.app.R
|
||||
import com.audiobookshelf.app.device.DeviceManager
|
||||
import com.audiobookshelf.app.player.PlayerNotificationService
|
||||
import com.audiobookshelf.app.player.SLEEP_TIMER_WAKE_UP_EXPIRATION
|
||||
import com.audiobookshelf.app.plugins.AbsLogger
|
||||
import java.util.*
|
||||
import kotlin.concurrent.schedule
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
const val SLEEP_TIMER_CHIME_SOUND_VOLUME = 0.7f
|
||||
|
||||
class SleepTimerManager
|
||||
constructor(private val playerNotificationService: PlayerNotificationService) {
|
||||
private val tag = "SleepTimerManager"
|
||||
@@ -156,6 +161,10 @@ constructor(private val playerNotificationService: PlayerNotificationService) {
|
||||
)
|
||||
}
|
||||
|
||||
if (sleepTimeSecondsRemaining == 30 && sleepTimerElapsed > 1 && DeviceManager.deviceData.deviceSettings?.enableSleepTimerAlmostDoneChime == true) {
|
||||
playChimeSound()
|
||||
}
|
||||
|
||||
if (sleepTimeSecondsRemaining <= 0) {
|
||||
Log.d(tag, "Sleep Timer Pausing Player on Chapter")
|
||||
pause()
|
||||
@@ -263,6 +272,18 @@ constructor(private val playerNotificationService: PlayerNotificationService) {
|
||||
}
|
||||
}
|
||||
|
||||
/** Plays chime sound */
|
||||
private fun playChimeSound() {
|
||||
AbsLogger.info(tag, "playChimeSound: Playing sleep timer chime sound")
|
||||
val ctx = playerNotificationService.getContext()
|
||||
val mediaPlayer = MediaPlayer.create(ctx, R.raw.bell)
|
||||
mediaPlayer.setVolume(SLEEP_TIMER_CHIME_SOUND_VOLUME, SLEEP_TIMER_CHIME_SOUND_VOLUME)
|
||||
mediaPlayer.start()
|
||||
mediaPlayer.setOnCompletionListener {
|
||||
mediaPlayer.release()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the chapter end time for use in End of Chapter timers. If less than 10 seconds remain in
|
||||
* the chapter, then use the next chapter.
|
||||
|
||||
@@ -136,7 +136,6 @@ class MediaManager(private var apiHandler: ApiHandler, var ctx: Context) {
|
||||
val serverConnConfig = if (DeviceManager.isConnectedToServer) DeviceManager.serverConnectionConfig else DeviceManager.deviceData.getLastServerConnectionConfig()
|
||||
|
||||
if (!DeviceManager.isConnectedToServer || !DeviceManager.checkConnectivity(ctx) || serverConnConfig == null || serverConnConfig.id !== serverConfigIdUsed) {
|
||||
Log.d(tag, "Reset caches")
|
||||
podcastEpisodeLibraryItemMap = mutableMapOf()
|
||||
serverLibraries = listOf()
|
||||
serverLibraryItems = mutableListOf()
|
||||
|
||||
@@ -7,7 +7,6 @@ import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.provider.MediaStore
|
||||
import android.support.v4.media.session.MediaControllerCompat
|
||||
import android.util.Log
|
||||
import com.audiobookshelf.app.BuildConfig
|
||||
import com.audiobookshelf.app.R
|
||||
import com.bumptech.glide.Glide
|
||||
@@ -41,7 +40,6 @@ class AbMediaDescriptionAdapter constructor(private val controller: MediaControl
|
||||
// Cache the bitmap for the current audiobook so that successive calls to
|
||||
// `getCurrentLargeIcon` don't cause the bitmap to be recreated.
|
||||
currentIconUri = albumArtUri
|
||||
Log.d(tag, "ART $currentIconUri")
|
||||
|
||||
if (currentIconUri.toString().startsWith("content://")) {
|
||||
currentBitmap = if (Build.VERSION.SDK_INT < 28) {
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.util.Log
|
||||
import android.view.KeyEvent
|
||||
import com.audiobookshelf.app.data.LibraryItemWrapper
|
||||
import com.audiobookshelf.app.data.PodcastEpisode
|
||||
import com.audiobookshelf.app.device.DeviceManager
|
||||
import java.util.*
|
||||
import kotlin.concurrent.schedule
|
||||
|
||||
|
||||
+20
-28
@@ -4,14 +4,11 @@ import android.annotation.SuppressLint
|
||||
import android.app.*
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Color
|
||||
import android.graphics.ImageDecoder
|
||||
import android.hardware.Sensor
|
||||
import android.hardware.SensorManager
|
||||
import android.net.*
|
||||
import android.os.*
|
||||
import android.provider.MediaStore
|
||||
import android.provider.Settings
|
||||
import android.support.v4.media.MediaBrowserCompat
|
||||
import android.support.v4.media.MediaDescriptionCompat
|
||||
@@ -311,19 +308,6 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||
|
||||
val coverUri = currentPlaybackSession!!.getCoverUri(ctx)
|
||||
|
||||
var bitmap: Bitmap? = null
|
||||
// Local covers get bitmap
|
||||
if (currentPlaybackSession!!.localLibraryItem?.coverContentUrl != null) {
|
||||
bitmap =
|
||||
if (Build.VERSION.SDK_INT < 28) {
|
||||
MediaStore.Images.Media.getBitmap(ctx.contentResolver, coverUri)
|
||||
} else {
|
||||
val source: ImageDecoder.Source =
|
||||
ImageDecoder.createSource(ctx.contentResolver, coverUri)
|
||||
ImageDecoder.decodeBitmap(source)
|
||||
}
|
||||
}
|
||||
|
||||
// Fix for local images crashing on Android 11 for specific devices
|
||||
// https://stackoverflow.com/questions/64186578/android-11-mediastyle-notification-crash/64232958#64232958
|
||||
try {
|
||||
@@ -347,8 +331,7 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||
.setExtras(extra)
|
||||
.setTitle(currentPlaybackSession!!.displayTitle)
|
||||
|
||||
bitmap?.let { mediaDescriptionBuilder.setIconBitmap(it) }
|
||||
?: mediaDescriptionBuilder.setIconUri(coverUri)
|
||||
mediaDescriptionBuilder.setIconUri(coverUri)
|
||||
|
||||
return mediaDescriptionBuilder.build()
|
||||
}
|
||||
@@ -1106,11 +1089,12 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||
// No further calls will be made to other media browsing methods.
|
||||
null
|
||||
} else {
|
||||
Log.d(tag, "Android Auto starting $clientPackageName $clientUid")
|
||||
AbsLogger.info(tag, "onGetRoot: clientPackageName: $clientPackageName, clientUid: $clientUid")
|
||||
isStarted = true
|
||||
|
||||
// Reset cache if no longer connected to server or server changed
|
||||
if (mediaManager.checkResetServerItems()) {
|
||||
AbsLogger.info(tag, "onGetRoot: Reset Android Auto server items cache (${DeviceManager.serverConnectionConfigString})")
|
||||
forceReloadingAndroidAuto = true
|
||||
}
|
||||
|
||||
@@ -1135,7 +1119,7 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||
parentMediaId: String,
|
||||
result: Result<MutableList<MediaBrowserCompat.MediaItem>>
|
||||
) {
|
||||
Log.d(tag, "ON LOAD CHILDREN $parentMediaId")
|
||||
AbsLogger.info(tag, "onLoadChildren: parentMediaId: $parentMediaId (${DeviceManager.serverConnectionConfigString})")
|
||||
|
||||
result.detach()
|
||||
|
||||
@@ -1146,7 +1130,6 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||
}
|
||||
|
||||
if (parentMediaId == DOWNLOADS_ROOT) { // Load downloads
|
||||
|
||||
val localBooks = DeviceManager.dbManager.getLocalLibraryItems("book")
|
||||
val localPodcasts = DeviceManager.dbManager.getLocalLibraryItems("podcast")
|
||||
val localBrowseItems: MutableList<MediaBrowserCompat.MediaItem> = mutableListOf()
|
||||
@@ -1243,8 +1226,10 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||
Log.d(tag, "Trying to initialize browseTree.")
|
||||
if (!this::browseTree.isInitialized || forceReloadingAndroidAuto) {
|
||||
forceReloadingAndroidAuto = false
|
||||
AbsLogger.info(tag, "onLoadChildren: Loading Android Auto items")
|
||||
mediaManager.loadAndroidAutoItems {
|
||||
Log.d(tag, "android auto loaded. Starting browseTree initialize")
|
||||
AbsLogger.info(tag, "onLoadChildren: Loaded Android Auto data, initializing browseTree")
|
||||
|
||||
browseTree =
|
||||
BrowseTree(
|
||||
this,
|
||||
@@ -1260,15 +1245,21 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||
MediaBrowserCompat.MediaItem.FLAG_BROWSABLE
|
||||
)
|
||||
}
|
||||
Log.d(tag, "browseTree initialize and android auto loaded")
|
||||
|
||||
result.sendResult(children as MutableList<MediaBrowserCompat.MediaItem>?)
|
||||
firstLoadDone = true
|
||||
if (mediaManager.serverLibraries.isNotEmpty()) {
|
||||
Log.d(tag, "Starting personalization fetch")
|
||||
mediaManager.populatePersonalizedDataForAllLibraries { notifyChildrenChanged("/") }
|
||||
AbsLogger.info(tag, "onLoadChildren: Android Auto fetching personalized data for all libraries")
|
||||
mediaManager.populatePersonalizedDataForAllLibraries {
|
||||
AbsLogger.info(tag, "onLoadChildren: Android Auto loaded personalized data for all libraries")
|
||||
notifyChildrenChanged("/")
|
||||
}
|
||||
|
||||
Log.d(tag, "Initialize inprogress items")
|
||||
mediaManager.initializeInProgressItems { notifyChildrenChanged("/") }
|
||||
AbsLogger.info(tag, "onLoadChildren: Android Auto fetching in progress items")
|
||||
mediaManager.initializeInProgressItems {
|
||||
AbsLogger.info(tag, "onLoadChildren: Android Auto loaded in progress items")
|
||||
notifyChildrenChanged("/")
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -1288,7 +1279,8 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||
MediaBrowserCompat.MediaItem.FLAG_BROWSABLE
|
||||
)
|
||||
}
|
||||
Log.d(tag, "browseTree initialize and android auto loaded")
|
||||
|
||||
AbsLogger.info(tag, "onLoadChildren: Android auto data loaded")
|
||||
result.sendResult(children as MutableList<MediaBrowserCompat.MediaItem>?)
|
||||
}
|
||||
} else if (parentMediaId == LIBRARIES_ROOT || parentMediaId == RECENTLY_ROOT) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.hardware.SensorEvent
|
||||
import android.hardware.SensorEventListener
|
||||
import android.hardware.SensorManager
|
||||
import com.audiobookshelf.app.device.DeviceManager
|
||||
import com.audiobookshelf.app.plugins.AbsLogger
|
||||
import kotlin.math.sqrt
|
||||
|
||||
class ShakeDetector : SensorEventListener {
|
||||
@@ -46,6 +47,7 @@ class ShakeDetector : SensorEventListener {
|
||||
if (mShakeTimestamp + SHAKE_COUNT_RESET_TIME_MS < now) {
|
||||
mShakeCount = 0
|
||||
}
|
||||
AbsLogger.info("ShakeDetector", "Device shake above threshold ($gForce > $shakeThreshold)")
|
||||
mShakeTimestamp = now
|
||||
mShakeCount++
|
||||
mListener!!.onShake(mShakeCount)
|
||||
|
||||
@@ -29,16 +29,16 @@ class AbsLogger : Plugin() {
|
||||
onLogEmitter = { log:AbsLog ->
|
||||
notifyListeners("onLog", JSObject(jacksonMapper.writeValueAsString(log)))
|
||||
}
|
||||
Log.i("AbsLogger", "Initialize AbsLogger plugin")
|
||||
info("AbsLogger", "load: AbsLogger plugin initialized")
|
||||
}
|
||||
|
||||
companion object {
|
||||
lateinit var onLogEmitter:(log:AbsLog) -> Unit
|
||||
var onLogEmitter:((log:AbsLog) -> Unit)? = null
|
||||
|
||||
fun log(level:String, tag:String, message:String) {
|
||||
val absLog = AbsLog(id = UUID.randomUUID().toString(), tag, level, message, timestamp = System.currentTimeMillis())
|
||||
DeviceManager.dbManager.saveLog(absLog)
|
||||
onLogEmitter(absLog)
|
||||
onLogEmitter?.let { it(absLog) }
|
||||
}
|
||||
fun info(tag:String, message:String) {
|
||||
Log.i("AbsLogger", message)
|
||||
|
||||
Binary file not shown.
@@ -14,7 +14,7 @@ ext {
|
||||
androidx_core_ktx_version = '1.16.0'
|
||||
androidx_media_version = '1.7.0'
|
||||
exoplayer_version = '2.18.7'
|
||||
glide_version = '4.11.0'
|
||||
glide_version = '4.16.0'
|
||||
junit_version = '4.13.2'
|
||||
kotlin_version = '2.1.0'
|
||||
kotlin_coroutines_version = '1.10.1'
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<a v-if="showBack" @click="back" class="rounded-full h-10 w-10 flex items-center justify-center mr-2 cursor-pointer">
|
||||
<span class="material-symbols text-3xl text-fg">arrow_back</span>
|
||||
</a>
|
||||
<div v-if="user && currentLibrary && socketConnected">
|
||||
<div v-if="user && currentLibrary">
|
||||
<div class="pl-1.5 pr-2.5 py-2 bg-bg bg-opacity-30 rounded-md flex items-center" @click="clickShowLibraryModal">
|
||||
<ui-library-icon :icon="currentLibraryIcon" :size="4" font-size="base" />
|
||||
<p class="text-sm leading-4 ml-2 mt-0.5 max-w-24 truncate">{{ currentLibraryName }}</p>
|
||||
@@ -56,9 +56,6 @@ export default {
|
||||
this.$store.commit('setCastAvailable', val)
|
||||
}
|
||||
},
|
||||
socketConnected() {
|
||||
return this.$store.state.socketConnected
|
||||
},
|
||||
currentLibrary() {
|
||||
return this.$store.getters['libraries/getCurrentLibrary']
|
||||
},
|
||||
|
||||
@@ -77,12 +77,12 @@
|
||||
</div>
|
||||
|
||||
<!-- Series sequence -->
|
||||
<div v-if="seriesSequence && showSequence && !isSelectionMode" class="absolute rounded-lg bg-black bg-opacity-90 box-shadow-md z-10" :style="{ top: 0.375 * sizeMultiplier + 'rem', right: 0.375 * sizeMultiplier + 'rem', padding: `${0.1 * sizeMultiplier}rem ${0.25 * sizeMultiplier}rem` }">
|
||||
<div v-if="seriesSequence && showSequence && !isSelectionMode" class="absolute rounded-lg bg-black/90 text-white box-shadow-md z-10" :style="{ top: 0.375 * sizeMultiplier + 'rem', right: 0.375 * sizeMultiplier + 'rem', padding: `${0.1 * sizeMultiplier}rem ${0.25 * sizeMultiplier}rem` }">
|
||||
<p :style="{ fontSize: sizeMultiplier * 0.8 + 'rem' }">#{{ seriesSequence }}</p>
|
||||
</div>
|
||||
|
||||
<!-- Podcast Episode # -->
|
||||
<div v-if="recentEpisodeNumber !== null && !isSelectionMode" class="absolute rounded-lg bg-black bg-opacity-90 box-shadow-md z-10" :style="{ top: 0.375 * sizeMultiplier + 'rem', right: 0.375 * sizeMultiplier + 'rem', padding: `${0.1 * sizeMultiplier}rem ${0.25 * sizeMultiplier}rem` }">
|
||||
<div v-if="recentEpisodeNumber !== null && !isSelectionMode" class="absolute rounded-lg bg-black/90 box-shadow-md z-10" :style="{ top: 0.375 * sizeMultiplier + 'rem', right: 0.375 * sizeMultiplier + 'rem', padding: `${0.1 * sizeMultiplier}rem ${0.25 * sizeMultiplier}rem` }">
|
||||
<p class="text-white" :style="{ fontSize: sizeMultiplier * 0.8 + 'rem' }">
|
||||
Episode<span v-if="recentEpisodeNumber"> #{{ recentEpisodeNumber }}</span>
|
||||
</p>
|
||||
|
||||
@@ -732,12 +732,12 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = Icons;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 36;
|
||||
CURRENT_PROJECT_VERSION = 38;
|
||||
DEVELOPMENT_TEAM = 7UFJ7D8V6A;
|
||||
INFOPLIST_FILE = App/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 0.9.79;
|
||||
MARKETING_VERSION = 0.9.81;
|
||||
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.audiobookshelf.app.dev;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
@@ -756,12 +756,12 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = Icons;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 36;
|
||||
CURRENT_PROJECT_VERSION = 38;
|
||||
DEVELOPMENT_TEAM = 7UFJ7D8V6A;
|
||||
INFOPLIST_FILE = App/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 0.9.79;
|
||||
MARKETING_VERSION = 0.9.81;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.audiobookshelf.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
|
||||
|
||||
+10
-10
@@ -1,5 +1,5 @@
|
||||
PODS:
|
||||
- Alamofire (5.8.1)
|
||||
- Alamofire (5.10.2)
|
||||
- Capacitor (7.2.0):
|
||||
- CapacitorCordova
|
||||
- CapacitorApp (7.0.1):
|
||||
@@ -25,11 +25,11 @@ PODS:
|
||||
- Capacitor
|
||||
- CordovaPlugins (6.2.1):
|
||||
- CapacitorCordova
|
||||
- Realm (10.47.0):
|
||||
- Realm/Headers (= 10.47.0)
|
||||
- Realm/Headers (10.47.0)
|
||||
- RealmSwift (10.47.0):
|
||||
- Realm (= 10.47.0)
|
||||
- Realm (10.54.4):
|
||||
- Realm/Headers (= 10.54.4)
|
||||
- Realm/Headers (10.54.4)
|
||||
- RealmSwift (10.54.4):
|
||||
- Realm (= 10.54.4)
|
||||
- WebnativellcCapacitorFilesharer (7.0.4):
|
||||
- Capacitor
|
||||
|
||||
@@ -88,7 +88,7 @@ EXTERNAL SOURCES:
|
||||
:path: "../../node_modules/@webnativellc/capacitor-filesharer"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7
|
||||
Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496
|
||||
Capacitor: 106e7a4205f4618d582b886a975657c61179138d
|
||||
CapacitorApp: d63334c052278caf5d81585d80b21905c6f93f39
|
||||
CapacitorBrowser: 081852cf532acf77b9d2953f3a88fe5b9711fb06
|
||||
@@ -102,10 +102,10 @@ SPEC CHECKSUMS:
|
||||
CapacitorPreferences: cbf154e5e5519b7f5ab33817a334dda1e98387f9
|
||||
CapacitorStatusBar: 275cbf2f4dfc00388f519ef80c7ec22edda342c9
|
||||
CordovaPlugins: 5a72a85b45469e68556bb172409f1b6d57b27236
|
||||
Realm: e43fb540ae947497e3ea8a662443256920602060
|
||||
RealmSwift: 8b06ed06b5d16749ae0c4d91c0cba414a9e28189
|
||||
Realm: 8b5cda39a41f17a1734da2f39c6004eb8745587a
|
||||
RealmSwift: 0b4f808fed6898f1f6c26f501f740efd80dff0b4
|
||||
WebnativellcCapacitorFilesharer: 10b111373d4dc49608935600dcbcc14605258c73
|
||||
|
||||
PODFILE CHECKSUM: 498821c0cfa2508609567fa95d7244c01cbef538
|
||||
|
||||
COCOAPODS: 1.12.1
|
||||
COCOAPODS: 1.16.2
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "audiobookshelf-app",
|
||||
"version": "0.9.79-beta",
|
||||
"version": "0.9.81-beta",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "audiobookshelf-app",
|
||||
"version": "0.9.79-beta",
|
||||
"version": "0.9.81-beta",
|
||||
"dependencies": {
|
||||
"@capacitor-community/keep-awake": "^7.0.0",
|
||||
"@capacitor-community/volume-buttons": "^7.0.0",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "audiobookshelf-app",
|
||||
"version": "0.9.79-beta",
|
||||
"version": "0.9.81-beta",
|
||||
"author": "advplyr",
|
||||
"scripts": {
|
||||
"dev": "nuxt --hostname 0.0.0.0 --port 1337",
|
||||
|
||||
@@ -100,6 +100,13 @@
|
||||
<p class="pl-4">{{ $strings.LabelDisableVibrateOnReset }}</p>
|
||||
<span class="material-symbols text-xl ml-2" @click.stop="showInfo('disableSleepTimerResetFeedback')">info</span>
|
||||
</div>
|
||||
<div class="flex items-center py-3">
|
||||
<div class="w-10 flex justify-center" @click="toggleSleepTimerAlmostDoneChime">
|
||||
<ui-toggle-switch v-model="settings.enableSleepTimerAlmostDoneChime" @input="saveSettings" />
|
||||
</div>
|
||||
<p class="pl-4">{{ $strings.LabelSleepTimerAlmostDoneChime }}</p>
|
||||
<span class="material-symbols text-xl ml-2" @click.stop="showInfo('enableSleepTimerAlmostDoneChime')">info</span>
|
||||
</div>
|
||||
<div class="flex items-center py-3">
|
||||
<div class="w-10 flex justify-center" @click="toggleAutoSleepTimer">
|
||||
<ui-toggle-switch v-model="settings.autoSleepTimer" @input="saveSettings" />
|
||||
@@ -207,6 +214,7 @@ export default {
|
||||
sleepTimerLength: 900000, // 15 minutes
|
||||
disableSleepTimerFadeOut: false,
|
||||
disableSleepTimerResetFeedback: false,
|
||||
enableSleepTimerAlmostDoneChime: false,
|
||||
autoSleepTimerAutoRewind: false,
|
||||
autoSleepTimerAutoRewindTime: 300000, // 5 minutes
|
||||
languageCode: 'en-us',
|
||||
@@ -234,6 +242,10 @@ export default {
|
||||
name: this.$strings.LabelDisableVibrateOnReset,
|
||||
message: this.$strings.LabelDisableVibrateOnResetHelp
|
||||
},
|
||||
enableSleepTimerAlmostDoneChime: {
|
||||
name: this.$strings.LabelSleepTimerAlmostDoneChime,
|
||||
message: this.$strings.LabelSleepTimerAlmostDoneChimeHelp
|
||||
},
|
||||
autoSleepTimerAutoRewind: {
|
||||
name: this.$strings.LabelAutoSleepTimerAutoRewind,
|
||||
message: this.$strings.LabelAutoSleepTimerAutoRewindHelp
|
||||
@@ -549,6 +561,10 @@ export default {
|
||||
this.settings.disableSleepTimerResetFeedback = !this.settings.disableSleepTimerResetFeedback
|
||||
this.saveSettings()
|
||||
},
|
||||
toggleSleepTimerAlmostDoneChime() {
|
||||
this.settings.enableSleepTimerAlmostDoneChime = !this.settings.enableSleepTimerAlmostDoneChime
|
||||
this.saveSettings()
|
||||
},
|
||||
toggleDisableAutoRewind() {
|
||||
this.settings.disableAutoRewind = !this.settings.disableAutoRewind
|
||||
this.saveSettings()
|
||||
@@ -620,6 +636,7 @@ export default {
|
||||
this.settings.sleepTimerLength = !isNaN(deviceSettings.sleepTimerLength) ? deviceSettings.sleepTimerLength : 900000 // 15 minutes
|
||||
this.settings.disableSleepTimerFadeOut = !!deviceSettings.disableSleepTimerFadeOut
|
||||
this.settings.disableSleepTimerResetFeedback = !!deviceSettings.disableSleepTimerResetFeedback
|
||||
this.settings.enableSleepTimerAlmostDoneChime = !!deviceSettings.enableSleepTimerAlmostDoneChime
|
||||
|
||||
this.settings.autoSleepTimerAutoRewind = !!deviceSettings.autoSleepTimerAutoRewind
|
||||
this.settings.autoSleepTimerAutoRewindTime = !isNaN(deviceSettings.autoSleepTimerAutoRewindTime) ? deviceSettings.autoSleepTimerAutoRewindTime : 300000 // 5 minutes
|
||||
|
||||
+126
-10
@@ -20,24 +20,26 @@
|
||||
"ButtonDisableAutoTimer": "تعطيل المؤقت التلقائي",
|
||||
"ButtonDisconnect": "فصل",
|
||||
"ButtonGoToWebClient": "اذهب إلى عميل الويب",
|
||||
"ButtonHistory": "تاريخ",
|
||||
"ButtonHistory": "السجل التاريخي",
|
||||
"ButtonHome": "الرئيسية",
|
||||
"ButtonIssues": "مشاكل",
|
||||
"ButtonLatest": "أحدث",
|
||||
"ButtonLatest": "الأحدث",
|
||||
"ButtonLibrary": "المكتبة",
|
||||
"ButtonLocalMedia": "ملفات الوسائط المحلية",
|
||||
"ButtonLocalMedia": "الوسائط المحلية",
|
||||
"ButtonLogs": "سجلات",
|
||||
"ButtonManageLocalFiles": "إدارة الملفات المحلية",
|
||||
"ButtonNewFolder": "مجلد جديد",
|
||||
"ButtonNextEpisode": "الحلقة التالية",
|
||||
"ButtonOk": "موافق",
|
||||
"ButtonOpenFeed": "فتح التغذية",
|
||||
"ButtonOverride": "تجاوز",
|
||||
"ButtonPause": "تَوَقَّف",
|
||||
"ButtonPause": "إيقاف مؤقت",
|
||||
"ButtonPlay": "تشغيل",
|
||||
"ButtonPlayEpisode": "شغل الحلقة",
|
||||
"ButtonPlayEpisode": "تشغيل الحلقة",
|
||||
"ButtonPlaylists": "قوائم التشغيل",
|
||||
"ButtonRead": "اقرأ",
|
||||
"ButtonReadLess": "قلص",
|
||||
"ButtonReadMore": "المزيد",
|
||||
"ButtonReadLess": "اقرأ أقل",
|
||||
"ButtonReadMore": "اقرأ أكثر",
|
||||
"ButtonRemove": "إزالة",
|
||||
"ButtonRemoveFromServer": "إزالة من الخادم",
|
||||
"ButtonSave": "حفظ",
|
||||
@@ -47,21 +49,135 @@
|
||||
"ButtonSeries": "سلسلة",
|
||||
"ButtonSetTimer": "اضبط مؤقت",
|
||||
"ButtonStream": "بث",
|
||||
"ButtonSubmit": "تقديم",
|
||||
"ButtonSubmit": "إرسال",
|
||||
"ButtonSwitchServerUser": "تبديل الخادم/المستخدم",
|
||||
"ButtonUserStats": "إحصائيات المستخدم",
|
||||
"ButtonYes": "نعم",
|
||||
"HeaderAccount": "الحساب",
|
||||
"HeaderAdvanced": "متقدم",
|
||||
"HeaderAudioTracks": "المسارات الصوتية",
|
||||
"HeaderAndroidAutoSettings": "إعدادات أندرويد للسيارة",
|
||||
"HeaderAudioTracks": "المقاطع الصوتية",
|
||||
"HeaderChapters": "الفصول",
|
||||
"HeaderCollection": "مجموعة",
|
||||
"HeaderCollectionItems": "عناصر المجموعة",
|
||||
"HeaderConnectionStatus": "حالة الاتصال",
|
||||
"HeaderDataSettings": "إعدادات البيانات",
|
||||
"HeaderDetails": "التفاصيل",
|
||||
"HeaderDownloads": "التنزيلات",
|
||||
"HeaderEbookFiles": "ملفات الكتب الإلكترونية",
|
||||
"HeaderEpisodes": "الحلقات",
|
||||
"HeaderEreaderSettings": "إعدادات القارئ الإلكتروني",
|
||||
"HeaderLatestEpisodes": "أحدث الحلقات",
|
||||
"HeaderLibraries": "المكتبات"
|
||||
"HeaderLibraries": "المكتبات",
|
||||
"HeaderLocalFolders": "المجلدات المحلية",
|
||||
"HeaderLocalLibraryItems": "عناصر المكتبة المحلية",
|
||||
"HeaderNewPlaylist": "قائمة تشغيل جديدة",
|
||||
"HeaderOpenRSSFeed": "فتح تغذية RSS",
|
||||
"HeaderPlaybackSettings": "إعدادات التشغيل",
|
||||
"HeaderPlaylist": "قائمة تشغيل",
|
||||
"HeaderPlaylistItems": "عناصر قائمة التشغيل",
|
||||
"HeaderProgressSyncFailed": "فشلت المزامنة",
|
||||
"HeaderRSSFeed": "تغذية RSS",
|
||||
"HeaderRSSFeedGeneral": "تفاصيل RSS",
|
||||
"HeaderRSSFeedIsOpen": "مغذي RSS مفتوح",
|
||||
"HeaderSelectDownloadLocation": "حدد موقع التنزيل",
|
||||
"HeaderSettings": "إعدادات",
|
||||
"HeaderSleepTimer": "مؤقت النوم",
|
||||
"HeaderSleepTimerSettings": "إعدادات مؤقت النوم",
|
||||
"HeaderStatsMinutesListeningChart": "الدقائق المسموعة (آخر 7 أيام)",
|
||||
"HeaderStatsRecentSessions": "الجلسات الأخيرة",
|
||||
"HeaderTableOfContents": "جدول المحتويات",
|
||||
"HeaderUserInterfaceSettings": "إعدادات واجهة المستخدم",
|
||||
"HeaderYourStats": "إحصائياتك",
|
||||
"LabelAddToPlaylist": "أضف إلى قائمة التشغيل",
|
||||
"LabelAddedAt": "أضيفت على",
|
||||
"LabelAddedDate": "تمت الإضافة",
|
||||
"LabelAll": "الكل",
|
||||
"LabelAllowSeekingOnMediaControls": "السماح بالبحث عن الموضع في التحكم بإشعارات الوسائط",
|
||||
"LabelAlways": "دائماً",
|
||||
"LabelAndroidAutoBrowseLimitForGrouping": "حد السحب الأبجدي",
|
||||
"LabelAndroidAutoBrowseLimitForGroupingHelp": "لا تستخدم السحب الأبجدي عندما يكون عدد العناصر المراد عرضها أقل من هذا العدد",
|
||||
"LabelAndroidAutoBrowseSeriesSequenceOrder": "ترتيب كتب السلسلة",
|
||||
"LabelAskConfirmation": "اطلب التأكيد",
|
||||
"LabelAuthor": "المؤلف",
|
||||
"LabelAuthorFirstLast": "المؤلف (الاسم الأول الأخير)",
|
||||
"LabelAuthorLastFirst": "المؤلف (الاسم الأخير، الأول)",
|
||||
"LabelAuthors": "المؤلفون",
|
||||
"LabelAutoDownloadEpisodes": "تنزيل الحلقات تلقائيًا",
|
||||
"LabelAutoRewindTime": "إعادة الوقت تلقائياَ",
|
||||
"LabelAutoSleepTimer": "مؤقت النوم التلقائي",
|
||||
"LabelAutoSleepTimerAutoRewind": "مؤقتا النوم والإرجاع التلقائيين",
|
||||
"LabelAutoSleepTimerAutoRewindHelp": "عندما ينتهي مؤقت النوم التلقائي، فإن تشغيل العنصر مرة أخرى سيؤدي إلى الإرجاع التلقائي.",
|
||||
"LabelAutoSleepTimerHelp": "عند تشغيل الوسائط بين أوقات البداية والنهاية المحددة، سيبدأ مؤقت النوم تلقائيًا.",
|
||||
"LabelBooks": "الكتب",
|
||||
"LabelChapterTrack": "مسار الفصل",
|
||||
"LabelChapters": "الفصول",
|
||||
"LabelClosePlayer": "إغلاق المشغل",
|
||||
"LabelCollapseSeries": "إخفاء المسلسلات",
|
||||
"LabelComplete": "مكتمل",
|
||||
"LabelContinueBooks": "استمرار الكتب",
|
||||
"LabelContinueEpisodes": "استمرار الحلقات",
|
||||
"LabelContinueListening": "استمرار الاستماع",
|
||||
"LabelContinueReading": "استمرار القراءة",
|
||||
"LabelContinueSeries": "استمرار المسلسلات",
|
||||
"LabelCustomTime": "الوقت المخصص",
|
||||
"LabelDescription": "الوصف",
|
||||
"LabelDisableAudioFadeOut": "تعطيل التلاشي الصوتي",
|
||||
"LabelDisableAudioFadeOutHelp": "سيبدأ مستوى الصوت بالانخفاض عندما يتبقى أقل من دقيقة واحدة على مؤقت النوم. فعّل هذا الإعداد لعدم التلاشي.",
|
||||
"LabelDisableAutoRewind": "تعطيل الإعادة التلقائية",
|
||||
"LabelDisableShakeToReset": "تعطيل الرج لإعادة الضبط",
|
||||
"LabelDisableShakeToResetHelp": "سيؤدي هزّ جهازك أثناء تشغيل المؤقت أو خلال دقيقتين من انتهاءه إلى إعادة ضبط مؤقت النوم. فعّل هذا الإعداد لتعطيل الرج لإعادة الضبط.",
|
||||
"LabelDisableVibrateOnReset": "تعطيل الاهتزاز عند إعادة الضبط",
|
||||
"LabelDisableVibrateOnResetHelp": "عند إعادة ضبط مؤقت النوم، سيهتز جهازك. فعّل هذا الإعداد لعدم الاهتزاز عند إعادة ضبط مؤقت النوم.",
|
||||
"LabelDiscover": "استكشف",
|
||||
"LabelDownload": "تنزيل",
|
||||
"LabelDownloadUsingCellular": "التنزيل عبر بيانات الهاتف",
|
||||
"LabelDownloaded": "تم تنزيلها",
|
||||
"LabelDuration": "المدة",
|
||||
"LabelEbook": "الكتاب الإلكتروني",
|
||||
"LabelEbooks": "الكتب الإلكترونية",
|
||||
"LabelEnable": "تمكين",
|
||||
"LabelEnableMp3IndexSeeking": "تمكين البحث عن فهرس mp3",
|
||||
"LabelEnableMp3IndexSeekingHelp": "يجب تفعيل هذا الإعداد فقط إذا كانت ملفات MP3 لديك لا تعمل بشكل صحيح. غالبًا ما يكون البحث غير الدقيق ناتجًا عن ملفات MP3 ذات معدل البت المتغير (VBR). سيفرض هذا الإعداد البحث عن الفهرس، حيث يتم إنشاء تعيين زمني للبايت أثناء قراءة الملف. في بعض الحالات، مع ملفات MP3 كبيرة الحجم، قد يكون هناك تأخير عند البحث قرب نهاية الملف.",
|
||||
"LabelEnd": "انهاء",
|
||||
"LabelEndOfChapter": "نهاية الفصل",
|
||||
"LabelEndTime": "وقت النهاية",
|
||||
"LabelEpisode": "الحلقة",
|
||||
"LabelFeedURL": "عنوان التغذية",
|
||||
"LabelFile": "الملف",
|
||||
"LabelFileBirthtime": "وقت انشاء الملف",
|
||||
"LabelFileModified": "تم تعديل الملف",
|
||||
"LabelFilename": "اسم الملف",
|
||||
"LabelFinished": "المنجزة",
|
||||
"LabelFolder": "المجلد",
|
||||
"LabelFontBoldness": "تعريض الخط",
|
||||
"LabelFontScale": "نطاق الخط",
|
||||
"LabelGenre": "التصنيف",
|
||||
"LabelGenres": "التصانيف",
|
||||
"LabelHapticFeedback": "ردود الفعل اللمسية",
|
||||
"LabelHasEbook": "يحتوي كتاب إلكتروني",
|
||||
"LabelHasSupplementaryEbook": "يحتوي كتاب إلكتروني تكميلي",
|
||||
"LabelHeavy": "ثقيل",
|
||||
"LabelHigh": "مرتفع",
|
||||
"LabelHost": "المضيف",
|
||||
"LabelInProgress": "تحت التنفيذ",
|
||||
"LabelIncomplete": "غير مكتمل",
|
||||
"LabelInternalAppStorage": "وحدة تخزين التطبيق الداخلي",
|
||||
"LabelJumpBackwardsTime": "وقت القفز للخلف",
|
||||
"LabelJumpForwardsTime": "وقت القفز للأمام",
|
||||
"LabelKeepScreenAwake": "إبقاء الشاشة يقظة",
|
||||
"LabelLanguage": "اللغة",
|
||||
"LabelLayout": "التنسيق",
|
||||
"LabelLayoutAuto": "تلقائي",
|
||||
"LabelLayoutSinglePage": "صفحة واحدة",
|
||||
"LabelLight": "خفيف/فاتح",
|
||||
"LabelLineSpacing": "تباعد الأسطر",
|
||||
"LabelListenAgain": "الاستماع مجدداً",
|
||||
"LabelLocalBooks": "الكتب المحلية",
|
||||
"LabelLocalPodcasts": "المدونات الصوتية المحلية",
|
||||
"LabelLockOrientation": "قفل الاتجاه",
|
||||
"LabelLockPlayer": "قفل المشغل",
|
||||
"LabelLow": "منخفض",
|
||||
"LabelMediaType": "نوع الوسائط",
|
||||
"LabelMedium": "متوسط"
|
||||
}
|
||||
|
||||
+20
-3
@@ -26,6 +26,7 @@
|
||||
"ButtonLatest": "Nejnovější",
|
||||
"ButtonLibrary": "Knihovna",
|
||||
"ButtonLocalMedia": "Místní média",
|
||||
"ButtonLogs": "Záznamy",
|
||||
"ButtonManageLocalFiles": "Spravovat místní soubory",
|
||||
"ButtonNewFolder": "Nová složka",
|
||||
"ButtonNextEpisode": "Další epizoda",
|
||||
@@ -66,7 +67,7 @@
|
||||
"HeaderEbookFiles": "Soubory e-knih",
|
||||
"HeaderEpisodes": "Epizody",
|
||||
"HeaderEreaderSettings": "Nastavení čtečky e-knih",
|
||||
"HeaderLatestEpisodes": "Nejnovější epizody",
|
||||
"HeaderLatestEpisodes": "Nové epizody",
|
||||
"HeaderLibraries": "Knihovny",
|
||||
"HeaderLocalFolders": "Místní složky",
|
||||
"HeaderLocalLibraryItems": "Místní položky knihovny",
|
||||
@@ -75,7 +76,7 @@
|
||||
"HeaderPlaybackSettings": "Nastavení přehrávání",
|
||||
"HeaderPlaylist": "Seznam skladeb",
|
||||
"HeaderPlaylistItems": "Položky seznamu přehrávání",
|
||||
"HeaderProgressSyncFailed": "Chyba při synchronizaci",
|
||||
"HeaderProgressSyncFailed": "Chyba při synchronizaci pokroku",
|
||||
"HeaderRSSFeed": "RSS kanál",
|
||||
"HeaderRSSFeedGeneral": "Detaily RSS",
|
||||
"HeaderRSSFeedIsOpen": "Kanál RSS je otevřen",
|
||||
@@ -94,6 +95,9 @@
|
||||
"LabelAll": "Vše",
|
||||
"LabelAllowSeekingOnMediaControls": "Povolit vyhledávání polohy v ovládacích prvcích oznámení médií",
|
||||
"LabelAlways": "Vždy",
|
||||
"LabelAndroidAutoBrowseLimitForGrouping": "Omezení abecedního rozbalovacího seznamu",
|
||||
"LabelAndroidAutoBrowseLimitForGroupingHelp": "Nepoužívejte abecední řazení, pokud je k zobrazení méně než tento počet položek",
|
||||
"LabelAndroidAutoBrowseSeriesSequenceOrder": "Řazení sérií knih",
|
||||
"LabelAskConfirmation": "Požádat o potvrzení",
|
||||
"LabelAuthor": "Autor",
|
||||
"LabelAuthorFirstLast": "Autor (jméno a příjmení)",
|
||||
@@ -134,7 +138,7 @@
|
||||
"LabelEbooks": "E-knihy",
|
||||
"LabelEnable": "Povolit",
|
||||
"LabelEnableMp3IndexSeeking": "Povolit indexové vyhledávání mp3",
|
||||
"LabelEnableMp3IndexSeekingHelp": "Toto nastavení by mělo být povoleno pouze v případě, že soubory MP3 nejsou správně vyhledávány. Nepřesné vyhledávání je s největší pravděpodobností způsobeno soubory MP3 s proměnlivým datovým tokem (VBR). Toto nastavení vynutí indexové vyhledávání, při kterém se při čtení souboru vytváří mapování času na bajty. V některých případech u velkých souborů MP3 dochází ke zpoždění při vyhledávání ke konci souboru.",
|
||||
"LabelEnableMp3IndexSeekingHelp": "Toto nastavení by mělo být povoleno pouze v případě, že v souborech MP3 nelze přeskakovat. Nepřesné přeskakování je s největší pravděpodobností způsobeno soubory MP3 s proměnlivým datovým tokem (VBR). Toto nastavení vynutí indexové vyhledávání, při kterém se při čtení souboru vytváří mapování času na bajty. V některých případech u velkých souborů MP3 dochází ke zpoždění při vyhledávání ke konci souboru.",
|
||||
"LabelEnd": "Konec",
|
||||
"LabelEndOfChapter": "Konec kapitoly",
|
||||
"LabelEndTime": "Do",
|
||||
@@ -161,6 +165,7 @@
|
||||
"LabelInternalAppStorage": "Interní úložiště aplikace",
|
||||
"LabelJumpBackwardsTime": "Délka skoku zpět v čase",
|
||||
"LabelJumpForwardsTime": "Délka skoku vpřed v čase",
|
||||
"LabelKeepScreenAwake": "Nezhasínat obrazovku",
|
||||
"LabelLanguage": "Jazyk",
|
||||
"LabelLayout": "Rozvržení",
|
||||
"LabelLayoutAuto": "Automatické",
|
||||
@@ -175,6 +180,7 @@
|
||||
"LabelLow": "Nízké",
|
||||
"LabelMediaType": "Typ média",
|
||||
"LabelMedium": "Střední",
|
||||
"LabelMissing": "Chybějící",
|
||||
"LabelMore": "Více",
|
||||
"LabelMoreInfo": "Více informací",
|
||||
"LabelName": "Jméno",
|
||||
@@ -192,6 +198,8 @@
|
||||
"LabelNotFinished": "Nedokončeno",
|
||||
"LabelNotStarted": "Nezahájeno",
|
||||
"LabelNumEpisodes": "{0} epizod",
|
||||
"LabelNumEpisodesIncomplete": "{0} epizod, {1} nekompletní",
|
||||
"LabelNumberOfEpisodes": "Počet epizod",
|
||||
"LabelOff": "Vypnout",
|
||||
"LabelOn": "Zapnuto",
|
||||
"LabelPassword": "Heslo",
|
||||
@@ -220,6 +228,8 @@
|
||||
"LabelScaleElapsedTimeBySpeed": "Škálovat uplynulý čas podle rychlosti",
|
||||
"LabelSeason": "Sezóna",
|
||||
"LabelSelectADevice": "Vyberte zařízení",
|
||||
"LabelSequenceAscending": "Řadit vzestupně",
|
||||
"LabelSequenceDescending": "Řadit sestupně",
|
||||
"LabelSeries": "Série",
|
||||
"LabelServerAddress": "Adresa serveru",
|
||||
"LabelSetEbookAsPrimary": "Nastavit jako primární",
|
||||
@@ -243,6 +253,7 @@
|
||||
"LabelTag": "Štítek",
|
||||
"LabelTags": "Štítky",
|
||||
"LabelTheme": "Téma",
|
||||
"LabelThemeBlack": "Černé",
|
||||
"LabelThemeDark": "Tmavé",
|
||||
"LabelThemeLight": "Světlé",
|
||||
"LabelTimeRemaining": "{0} zbývá",
|
||||
@@ -269,6 +280,7 @@
|
||||
"MessageBookshelfEmpty": "Knihovna je prázdná",
|
||||
"MessageConfirmDeleteLocalEpisode": "Odebrat místní epizodu „{0}“ ze zařízení? Soubor na serveru zůstane nezměněný.",
|
||||
"MessageConfirmDeleteLocalFiles": "Odebrat místní soubory této položky ze zařízení? Soubory na serveru a váš pokrok nebudou ovlivněny.",
|
||||
"MessageConfirmDisableAutoTimer": "Určitě chcete vypnout automatický časovač pro zbytek dnešního dne? Časovač bude opět aktivován po uběhnutí doby automatického spánku nebo po restartování aplikace.",
|
||||
"MessageConfirmDiscardProgress": "Opravdu chcete zahodit svůj pokrok?",
|
||||
"MessageConfirmDownloadUsingCellular": "Chystáte se stahovat přes mobilní data. Toto může zahrnovat poplatky za mobilní data. Chcete pokračovat?",
|
||||
"MessageConfirmMarkAsFinished": "Opravdu chcete tuto položku označit jako dokončenou?",
|
||||
@@ -283,8 +295,10 @@
|
||||
"MessageFetching": "Načítání...",
|
||||
"MessageFollowTheProjectOnGithub": "Sledujte projekt na GitHubu",
|
||||
"MessageItemDownloadCompleteFailedToCreate": "Stahování položky bylo dokončeno, ale nepodařilo se vytvořit položku v knihovně",
|
||||
"MessageItemMissing": "Položka chybí a musí být opravena na serveru. Typicky je položka označena jako chybějící, protože cesty k souborům nejsou přístupné.",
|
||||
"MessageLoading": "Načítá se...",
|
||||
"MessageLoadingServerData": "Načítání dat ze serveru...",
|
||||
"MessageLocalFolderDescription": "„Interní úložiště aplikace“ je přístupné pouze této aplikaci. Tato aplikace podporuje pouze média stažená přímo prostřednictvím aplikace. Složky sdíleného úložiště lze použít k tomu, aby ostatní aplikace měly přístup k médiím staženým touto aplikací.",
|
||||
"MessageMarkAsFinished": "Označit jako dokončené",
|
||||
"MessageMediaLinkedToADifferentServer": "Média jsou propojena se serverem Audiobookshelf na jiné adrese ({0}). Pokrok bude synchronizován, když budete připojeni k této adrese serveru.",
|
||||
"MessageMediaLinkedToADifferentUser": "Média jsou propojena se serverem, ale byla stažena jiným uživatelem. Pokrok bude synchronizován pouze s uživatelem, který je stáhl.",
|
||||
@@ -303,7 +317,10 @@
|
||||
"MessageNoSeries": "Žádné série",
|
||||
"MessageNoUpdatesWereNecessary": "Nebyly nutné žádné aktualizace",
|
||||
"MessageNoUserPlaylists": "Nemáte žádné seznamy skladeb",
|
||||
"MessageOldServerConnectionWarning": "Konfigurace připojení k serveru používá staré ID uživatele. Odstraňte a znovu přidejte toto připojení k serveru.",
|
||||
"MessageOldServerConnectionWarningHelp": "Připojení k tomuto serveru jste původně nastavili před migrací databáze ve verzi 2.3.0 vydané v červnu 2023. Budoucí aktualizace serveru odstraní možnost přihlášení pomocí tohoto starého připojení. Odstraňte prosím stávající připojení k serveru a připojte se znovu (pomocí stejné adresy serveru a přihlašovacích údajů). Pokud máte v tomto zařízení stažená média, bude nutné je pro synchronizaci se serverem stáhnout znovu.",
|
||||
"MessagePodcastSearchField": "Zadejte hledaný pojem pro RSS feed URL",
|
||||
"MessageProgressSyncFailed": "Poslední pokus o nahlášení průběhu poslechu na server se nezdařil. Během přehrávání médií se budou požadavky na synchronizaci pokroku nadále pokoušet každých 15 až 60 sekund.",
|
||||
"MessageReportBugsAndContribute": "Nahlašte chyby, vyžádejte si funkce a přispěte na",
|
||||
"MessageSeriesAlreadyDownloaded": "Všechny knihy v této sérii jste již stáhli.",
|
||||
"MessageSeriesDownloadConfirm": "Stáhnout chybějící {0} knihu(y) s {1} souborem(y), celkem {2} do složky {3}?",
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"ButtonCancel": "Abbrechen",
|
||||
"ButtonCancelTimer": "Timer abbrechen",
|
||||
"ButtonClearFilter": "Filter löschen",
|
||||
"ButtonClearLogs": "Protokolle löschen",
|
||||
"ButtonCloseFeed": "Feed schließen",
|
||||
"ButtonCollections": "Sammlungen",
|
||||
"ButtonConnect": "Verbinden",
|
||||
@@ -26,7 +27,9 @@
|
||||
"ButtonLatest": "Neueste",
|
||||
"ButtonLibrary": "Bibliothek",
|
||||
"ButtonLocalMedia": "Lokale Medien",
|
||||
"ButtonLogs": "Protokolle",
|
||||
"ButtonManageLocalFiles": "Verwalte lokale Dateien",
|
||||
"ButtonMaskServerAddress": "Server Adresse verstecken",
|
||||
"ButtonNewFolder": "Neuer Ordner",
|
||||
"ButtonNextEpisode": "Nächste Episode",
|
||||
"ButtonOk": "Einverstanden",
|
||||
@@ -50,6 +53,7 @@
|
||||
"ButtonStream": "Streamen",
|
||||
"ButtonSubmit": "Ok",
|
||||
"ButtonSwitchServerUser": "Wechsle Server/Benutzer",
|
||||
"ButtonUnmaskServerAddress": "Server Adresse anzeigen",
|
||||
"ButtonUserStats": "Nutzerstatistiken",
|
||||
"ButtonYes": "Ja",
|
||||
"HeaderAccount": "Konto",
|
||||
@@ -310,6 +314,7 @@
|
||||
"MessageNoItems": "Keine Medien",
|
||||
"MessageNoItemsFound": "Keine Medien gefunden",
|
||||
"MessageNoListeningSessions": "Keine Hörsitzungen",
|
||||
"MessageNoLogs": "Keine Protokolle vorhanden",
|
||||
"MessageNoMediaFolders": "Keine Medien Ordner",
|
||||
"MessageNoNetworkConnection": "Keine Netzwerkverbindung",
|
||||
"MessageNoPodcastsFound": "Keine Podcasts gefunden",
|
||||
|
||||
@@ -241,6 +241,8 @@
|
||||
"LabelShowAll": "Show All",
|
||||
"LabelSize": "Size",
|
||||
"LabelSleepTimer": "Sleep timer",
|
||||
"LabelSleepTimerAlmostDoneChime": "Play a chime when almost finished",
|
||||
"LabelSleepTimerAlmostDoneChimeHelp": "Play a chime when the sleep timer has 30 seconds remaining",
|
||||
"LabelStart": "Start",
|
||||
"LabelStartTime": "Start time",
|
||||
"LabelStatsBestDay": "Best Day",
|
||||
|
||||
@@ -26,7 +26,9 @@
|
||||
"ButtonLatest": "Najnovije",
|
||||
"ButtonLibrary": "Knjižnica",
|
||||
"ButtonLocalMedia": "Preuzeti medijski zapisi",
|
||||
"ButtonLogs": "Zapisnici",
|
||||
"ButtonManageLocalFiles": "Upravljanje preuzetim datotekama",
|
||||
"ButtonMaskServerAddress": "Maskiraj adresu poslužitelja",
|
||||
"ButtonNewFolder": "Nova mapa",
|
||||
"ButtonNextEpisode": "Sljedeći nastavak",
|
||||
"ButtonOk": "U redu",
|
||||
@@ -50,6 +52,7 @@
|
||||
"ButtonStream": "Reproduciraj strujanjem",
|
||||
"ButtonSubmit": "Pošalji",
|
||||
"ButtonSwitchServerUser": "Promijeni poslužitelj/korisnika",
|
||||
"ButtonUnmaskServerAddress": "Prikaži adresu poslužitelja",
|
||||
"ButtonUserStats": "Statistika korisnika",
|
||||
"ButtonYes": "Da",
|
||||
"HeaderAccount": "Korisnički račun",
|
||||
@@ -310,6 +313,7 @@
|
||||
"MessageNoItems": "Nema stavki",
|
||||
"MessageNoItemsFound": "Nema pronađenih stavki",
|
||||
"MessageNoListeningSessions": "Nema sesija slušanja",
|
||||
"MessageNoLogs": "Nema zapisnika",
|
||||
"MessageNoMediaFolders": "Nema medijskih mapa",
|
||||
"MessageNoNetworkConnection": "Nema mrežne veze",
|
||||
"MessageNoPodcastsFound": "Nije pronađen niti jedan podcast",
|
||||
|
||||
+11
-2
@@ -6,6 +6,7 @@
|
||||
"ButtonCancel": "Mégsem",
|
||||
"ButtonCancelTimer": "Időzítő megszakítása",
|
||||
"ButtonClearFilter": "Szűrő törlése",
|
||||
"ButtonClearLogs": "Naplók tisztítása",
|
||||
"ButtonCloseFeed": "Hírcsatorna bezárása",
|
||||
"ButtonCollections": "Gyűjtemények",
|
||||
"ButtonConnect": "Csatlakozás",
|
||||
@@ -26,7 +27,9 @@
|
||||
"ButtonLatest": "Legújabb",
|
||||
"ButtonLibrary": "Könyvtár",
|
||||
"ButtonLocalMedia": "Helyi média",
|
||||
"ButtonLogs": "Naplók",
|
||||
"ButtonManageLocalFiles": "Helyi fájlok kezelése",
|
||||
"ButtonMaskServerAddress": "Kiszolgáló címének maszkolása",
|
||||
"ButtonNewFolder": "Új mappa",
|
||||
"ButtonNextEpisode": "Következő epizód",
|
||||
"ButtonOk": "Ok",
|
||||
@@ -50,6 +53,7 @@
|
||||
"ButtonStream": "Streamelés",
|
||||
"ButtonSubmit": "Küldés",
|
||||
"ButtonSwitchServerUser": "Szerver/Felhasználó váltása",
|
||||
"ButtonUnmaskServerAddress": "Kiszolgáló címének maszkolásának törlése",
|
||||
"ButtonUserStats": "Felhasználói statisztikák",
|
||||
"ButtonYes": "Igen",
|
||||
"HeaderAccount": "Fiók",
|
||||
@@ -95,6 +99,7 @@
|
||||
"LabelAllowSeekingOnMediaControls": "Pozíció keresés engedélyezése a média értesítési vezérlőkön",
|
||||
"LabelAlways": "Mindig",
|
||||
"LabelAndroidAutoBrowseLimitForGrouping": "Ábécé szerinti lehívási korlát",
|
||||
"LabelAndroidAutoBrowseLimitForGroupingHelp": "Ne használja az ábécé szerinti lehívási korlátot, ha ennél kevesebb elemet kell megjeleníteni",
|
||||
"LabelAndroidAutoBrowseSeriesSequenceOrder": "A sorozat könyveinek sorrendje",
|
||||
"LabelAskConfirmation": "Kérjen megerősítést",
|
||||
"LabelAuthor": "Szerző",
|
||||
@@ -136,7 +141,7 @@
|
||||
"LabelEbooks": "E-könyvek",
|
||||
"LabelEnable": "Engedélyezés",
|
||||
"LabelEnableMp3IndexSeeking": "Mp3 indexkeresés engedélyezése",
|
||||
"LabelEnableMp3IndexSeekingHelp": "Ezt a beállítást csak akkor kell engedélyezni, ha vannak mp3 fájljai, amelyek nem megfelelően keresnek. A pontatlan keresés leginkább a változó bitráta (VBR) mp3 fájlok miatt lehetséges. Ez a beállítás indexkeresést fog kényszeríteni, amely során egy idő-bájt leképezés jön létre, ahogy a fájlt olvassák. Nagy mp3 fájlok esetén előfordulhat késedelem a fájl végéhez való kereséskor.",
|
||||
"LabelEnableMp3IndexSeekingHelp": "Ezt a beállítást csak akkor kell engedélyezni, ha vannak mp3 fájljai, amelyek nem megfelelően keresnek. A pontatlan keresés leginkább a változó bitráta (VBR) mp3 fájlok miatt lehetséges. Ez a beállítás indexkeresést fog kényszeríteni, amely során egy idő-bájt leképezés jön létre, ahogy a fájlt olvassák. Nagy mp3 fájlok esetén előfordulhat késedelem a fájl végénél történő kereséskor.",
|
||||
"LabelEnd": "Vége",
|
||||
"LabelEndOfChapter": "Fejezet vége",
|
||||
"LabelEndTime": "Befejezés ideje",
|
||||
@@ -178,6 +183,7 @@
|
||||
"LabelLow": "Alacsony",
|
||||
"LabelMediaType": "Média típus",
|
||||
"LabelMedium": "Közepes",
|
||||
"LabelMissing": "Hiányzik",
|
||||
"LabelMore": "Több",
|
||||
"LabelMoreInfo": "Több információ",
|
||||
"LabelName": "Név",
|
||||
@@ -240,7 +246,7 @@
|
||||
"LabelStatsBestDay": "Legjobb nap",
|
||||
"LabelStatsDailyAverage": "Napi átlag",
|
||||
"LabelStatsDays": "Napok",
|
||||
"LabelStatsDaysListened": "Hallgatott napok",
|
||||
"LabelStatsDaysListened": "Hallgatással töltött napok",
|
||||
"LabelStatsInARow": "egymás után",
|
||||
"LabelStatsItemsFinished": "Befejezett elemek",
|
||||
"LabelStatsMinutes": "perc",
|
||||
@@ -250,6 +256,7 @@
|
||||
"LabelTag": "Címke",
|
||||
"LabelTags": "Címkék",
|
||||
"LabelTheme": "Téma",
|
||||
"LabelThemeBlack": "Fekete",
|
||||
"LabelThemeDark": "Sötét",
|
||||
"LabelThemeLight": "Világos",
|
||||
"LabelTimeRemaining": "{0} maradt",
|
||||
@@ -294,6 +301,7 @@
|
||||
"MessageItemMissing": "Az elem hiányzik, és a szerveren kell javítani. Egy elemet általában azért jelölnek hiányzónak, mert a fájl elérési útvonalai nem elérhetőek.",
|
||||
"MessageLoading": "Betöltés...",
|
||||
"MessageLoadingServerData": "Szerveradatok betöltése...",
|
||||
"MessageLocalFolderDescription": "A „Belső alkalmazás-tároló” csak ezzel az alkalmazással érhető el. Ez az alkalmazás csak a közvetlenül az alkalmazáson keresztül letöltött médiát támogatja. A megosztott tároló mappák segítségével más alkalmazások is hozzáférhetnek az alkalmazás által letöltött médiához.",
|
||||
"MessageMarkAsFinished": "Befejezettnek jelölés",
|
||||
"MessageMediaLinkedToADifferentServer": "A média egy másik címen található Audiobookshelf szerverhez kapcsolódik ({0}). A haladás szinkronizálva lesz, amikor csatlakozik ehhez a szervercímhez.",
|
||||
"MessageMediaLinkedToADifferentUser": "A média ehhez a szerverhez kapcsolódik, de egy másik felhasználó töltötte le. A haladás csak a letöltést végrehajtó felhasználóhoz lesz szinkronizálva.",
|
||||
@@ -306,6 +314,7 @@
|
||||
"MessageNoItems": "Nincsenek elemek",
|
||||
"MessageNoItemsFound": "Nincs találat",
|
||||
"MessageNoListeningSessions": "Nincsenek hallgatási munkamenetek",
|
||||
"MessageNoLogs": "Nincsenek naplók",
|
||||
"MessageNoMediaFolders": "Nincsenek médiamappák",
|
||||
"MessageNoNetworkConnection": "Nincs hálózati kapcsolat",
|
||||
"MessageNoPodcastsFound": "Nem találhatók podcastok",
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"ButtonCancel": "Annuleren",
|
||||
"ButtonCancelTimer": "Timer annuleren",
|
||||
"ButtonClearFilter": "Filter verwijderen",
|
||||
"ButtonClearLogs": "Log bestanden verwijderen",
|
||||
"ButtonCloseFeed": "Feed sluiten",
|
||||
"ButtonCollections": "Collecties",
|
||||
"ButtonConnect": "Verbinden",
|
||||
@@ -26,9 +27,11 @@
|
||||
"ButtonLatest": "Meest recent",
|
||||
"ButtonLibrary": "Bibliotheek",
|
||||
"ButtonLocalMedia": "Lokale Media",
|
||||
"ButtonLogs": "Log bestanden",
|
||||
"ButtonManageLocalFiles": "Beheer Lokale Bestanden",
|
||||
"ButtonNewFolder": "Nieuwe map",
|
||||
"ButtonNextEpisode": "Volgende aflevering",
|
||||
"ButtonOk": "Akkoord",
|
||||
"ButtonOpenFeed": "Feed openen",
|
||||
"ButtonOverride": "Overschrijven",
|
||||
"ButtonPause": "Pauze",
|
||||
@@ -74,6 +77,7 @@
|
||||
"HeaderPlaybackSettings": "Afspeel instellingen",
|
||||
"HeaderPlaylist": "Afspeellijst",
|
||||
"HeaderPlaylistItems": "Onderdelen in afspeellijst",
|
||||
"HeaderProgressSyncFailed": "Voortgang synchronisatie mislukt",
|
||||
"HeaderRSSFeed": "RSS Feed",
|
||||
"HeaderRSSFeedGeneral": "RSS-details",
|
||||
"HeaderRSSFeedIsOpen": "RSS-feed is open",
|
||||
@@ -162,6 +166,7 @@
|
||||
"LabelInternalAppStorage": "Interne App Opslag",
|
||||
"LabelJumpBackwardsTime": "Terug in tijd springen",
|
||||
"LabelJumpForwardsTime": "Verder in tijd springen",
|
||||
"LabelKeepScreenAwake": "Scherm actief houden",
|
||||
"LabelLanguage": "Taal",
|
||||
"LabelLayout": "Layout",
|
||||
"LabelLayoutAuto": "Automatisch",
|
||||
@@ -176,6 +181,7 @@
|
||||
"LabelLow": "Laag",
|
||||
"LabelMediaType": "Mediatype",
|
||||
"LabelMedium": "Medium",
|
||||
"LabelMissing": "Missende",
|
||||
"LabelMore": "Meer",
|
||||
"LabelMoreInfo": "Meer info",
|
||||
"LabelName": "Naam",
|
||||
@@ -193,6 +199,8 @@
|
||||
"LabelNotFinished": "Niet Voltooid",
|
||||
"LabelNotStarted": "Niet Gestart",
|
||||
"LabelNumEpisodes": "{0} afleveringen",
|
||||
"LabelNumEpisodesIncomplete": "{0} afleveringen, {1} incompleet",
|
||||
"LabelNumberOfEpisodes": "# Afleveringen",
|
||||
"LabelOff": "Uit",
|
||||
"LabelOn": "Aan",
|
||||
"LabelPassword": "Wachtwoord",
|
||||
@@ -246,6 +254,7 @@
|
||||
"LabelTag": "Tag",
|
||||
"LabelTags": "Tags",
|
||||
"LabelTheme": "Thema",
|
||||
"LabelThemeBlack": "Zwart",
|
||||
"LabelThemeDark": "Donker",
|
||||
"LabelThemeLight": "Licht",
|
||||
"LabelTimeRemaining": "{0} te gaan",
|
||||
@@ -272,6 +281,7 @@
|
||||
"MessageBookshelfEmpty": "Boekenplank leeg",
|
||||
"MessageConfirmDeleteLocalEpisode": "Lokale aflevering \"{0}\" van uw apparaat verwijderen? Het bestand op de server blijft onaangetast.",
|
||||
"MessageConfirmDeleteLocalFiles": "Lokale bestanden van dit item van uw apparaat verwijderen? De bestanden op de server en uw voortgang worden niet beïnvloed.",
|
||||
"MessageConfirmDisableAutoTimer": "Weet u zeker dat je de automatische timer voor de rest van vandaag wilt uitschakelen? De timer wordt automatisch weer ingeschakeld aan het einde van deze sluimerperiode of als u de app opnieuw start.",
|
||||
"MessageConfirmDiscardProgress": "Weet u zeker dat u uw voortgang wilt resetten?",
|
||||
"MessageConfirmDownloadUsingCellular": "U staat op het punt om te downloaden met behulp van mobiele data. Dit kan kosten voor data van de provider met zich meebrengen. Wilt u doorgaan?",
|
||||
"MessageConfirmMarkAsFinished": "Weet u zeker dat u dit item als voltooid wilt markeren?",
|
||||
@@ -300,12 +310,14 @@
|
||||
"MessageNoItems": "Geen onderdelen",
|
||||
"MessageNoItemsFound": "Geen onderdelen gevonden",
|
||||
"MessageNoListeningSessions": "Geen luistersessies",
|
||||
"MessageNoLogs": "Geen log bestanden",
|
||||
"MessageNoMediaFolders": "Geen Media Folders",
|
||||
"MessageNoNetworkConnection": "Geen netwerk connectie",
|
||||
"MessageNoPodcastsFound": "Geen podcasts gevonden",
|
||||
"MessageNoSeries": "Geen series",
|
||||
"MessageNoUpdatesWereNecessary": "Geen bijwerkingen waren noodzakelijk",
|
||||
"MessageNoUserPlaylists": "Je hebt geen afspeellijsten",
|
||||
"MessageOldServerConnectionWarning": "Server connectie configuratie gebruikt een oud user ID. Gelieve deze server connectie te verwijderen en opnieuw toe te voegen.",
|
||||
"MessagePodcastSearchField": "Zoekterm of RSS feed URL invullen",
|
||||
"MessageReportBugsAndContribute": "Rapporteer bugs, vraag functionaliteiten aan en draag bij op",
|
||||
"MessageSeriesAlreadyDownloaded": "Je hebt alle boeken in deze serie al gedownload.",
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"ButtonCancel": "Отмена",
|
||||
"ButtonCancelTimer": "Отмена таймера",
|
||||
"ButtonClearFilter": "Очистить фильтр",
|
||||
"ButtonClearLogs": "Очистить журнал",
|
||||
"ButtonCloseFeed": "Закрыть канал",
|
||||
"ButtonCollections": "Коллекции",
|
||||
"ButtonConnect": "Подключение",
|
||||
@@ -26,7 +27,9 @@
|
||||
"ButtonLatest": "Последнее",
|
||||
"ButtonLibrary": "Библиотека",
|
||||
"ButtonLocalMedia": "Локальные медиа",
|
||||
"ButtonLogs": "Журнал",
|
||||
"ButtonManageLocalFiles": "Управление локальными файлами",
|
||||
"ButtonMaskServerAddress": "Скрывать адрес сервера",
|
||||
"ButtonNewFolder": "Новая папка",
|
||||
"ButtonNextEpisode": "Следующий эпизод",
|
||||
"ButtonOk": "Ок",
|
||||
@@ -50,6 +53,7 @@
|
||||
"ButtonStream": "Стрим",
|
||||
"ButtonSubmit": "Применить",
|
||||
"ButtonSwitchServerUser": "Изменить Сервер/Пользователя",
|
||||
"ButtonUnmaskServerAddress": "Не скрывать адрес сервера",
|
||||
"ButtonUserStats": "Статистика пользователя",
|
||||
"ButtonYes": "Да",
|
||||
"HeaderAccount": "Учетная запись",
|
||||
@@ -310,6 +314,7 @@
|
||||
"MessageNoItems": "Нет элементов",
|
||||
"MessageNoItemsFound": "Элементы не найдены",
|
||||
"MessageNoListeningSessions": "Нет сеансов прослушивания",
|
||||
"MessageNoLogs": "Нет записей",
|
||||
"MessageNoMediaFolders": "Нет папок мультимедиа",
|
||||
"MessageNoNetworkConnection": "Нет подключения к сети",
|
||||
"MessageNoPodcastsFound": "Подкасты не найдены",
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"ButtonCancel": "Prekliči",
|
||||
"ButtonCancelTimer": "Prekliči časovnik",
|
||||
"ButtonClearFilter": "Počisti filter",
|
||||
"ButtonClearLogs": "Počisti dnevnike",
|
||||
"ButtonCloseFeed": "Zapri vir",
|
||||
"ButtonCollections": "Zbirke",
|
||||
"ButtonConnect": "Poveži",
|
||||
@@ -26,7 +27,9 @@
|
||||
"ButtonLatest": "Najnovejše",
|
||||
"ButtonLibrary": "Knjižnica",
|
||||
"ButtonLocalMedia": "Lokalni mediji",
|
||||
"ButtonLogs": "Dnevniki",
|
||||
"ButtonManageLocalFiles": "Upravljanje lokalnih datotek",
|
||||
"ButtonMaskServerAddress": "Zakrij naslov strežnika",
|
||||
"ButtonNewFolder": "Nova mapa",
|
||||
"ButtonNextEpisode": "Naslednja epizoda",
|
||||
"ButtonOk": "V redu",
|
||||
@@ -50,6 +53,7 @@
|
||||
"ButtonStream": "Pretakaj",
|
||||
"ButtonSubmit": "Potrdi",
|
||||
"ButtonSwitchServerUser": "Preklopi strežnik/uporabnik",
|
||||
"ButtonUnmaskServerAddress": "Odkrij naslov strežnika",
|
||||
"ButtonUserStats": "Uporabniška statistika",
|
||||
"ButtonYes": "Da",
|
||||
"HeaderAccount": "Račun",
|
||||
@@ -310,6 +314,7 @@
|
||||
"MessageNoItems": "Ni elementov",
|
||||
"MessageNoItemsFound": "Ni najdenih elementov",
|
||||
"MessageNoListeningSessions": "Ni sej poslušanja",
|
||||
"MessageNoLogs": "Ni dnevnikov",
|
||||
"MessageNoMediaFolders": "Brez medijskih map",
|
||||
"MessageNoNetworkConnection": "Ni omrežne povezave",
|
||||
"MessageNoPodcastsFound": "Ni podcastov",
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"ButtonCancel": "Скасувати",
|
||||
"ButtonCancelTimer": "Скасувати таймер",
|
||||
"ButtonClearFilter": "Скинути фільтри",
|
||||
"ButtonClearLogs": "Очистити журнали",
|
||||
"ButtonCloseFeed": "Закрити стрічку",
|
||||
"ButtonCollections": "Добірки",
|
||||
"ButtonConnect": "Підключитися",
|
||||
@@ -26,7 +27,9 @@
|
||||
"ButtonLatest": "Останні",
|
||||
"ButtonLibrary": "Бібліотека",
|
||||
"ButtonLocalMedia": "Локальні файли",
|
||||
"ButtonLogs": "Журнали",
|
||||
"ButtonManageLocalFiles": "Керування локальними файлами",
|
||||
"ButtonMaskServerAddress": "Маска адреси сервера",
|
||||
"ButtonNewFolder": "Нова тека",
|
||||
"ButtonNextEpisode": "Наступний епізод",
|
||||
"ButtonOk": "Добре",
|
||||
@@ -50,6 +53,7 @@
|
||||
"ButtonStream": "Транслювати",
|
||||
"ButtonSubmit": "Ввести",
|
||||
"ButtonSwitchServerUser": "Змінити сервер/користувача",
|
||||
"ButtonUnmaskServerAddress": "Розкрити адресу сервера",
|
||||
"ButtonUserStats": "Статистика",
|
||||
"ButtonYes": "Так",
|
||||
"HeaderAccount": "Профіль",
|
||||
@@ -310,6 +314,7 @@
|
||||
"MessageNoItems": "Елементи відсутні",
|
||||
"MessageNoItemsFound": "Елементів не знайдено",
|
||||
"MessageNoListeningSessions": "Сеанси прослуховування відсутні",
|
||||
"MessageNoLogs": "Без журналів",
|
||||
"MessageNoMediaFolders": "Теки медіа відсутні",
|
||||
"MessageNoNetworkConnection": "Немає підключення до мережі",
|
||||
"MessageNoPodcastsFound": "Подкастів не знайдено",
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"ButtonCancel": "取消",
|
||||
"ButtonCancelTimer": "取消计时器",
|
||||
"ButtonClearFilter": "清除过滤器",
|
||||
"ButtonClearLogs": "清除日志",
|
||||
"ButtonCloseFeed": "关闭源",
|
||||
"ButtonCollections": "收藏",
|
||||
"ButtonConnect": "连接",
|
||||
@@ -26,7 +27,9 @@
|
||||
"ButtonLatest": "最新",
|
||||
"ButtonLibrary": "媒体库",
|
||||
"ButtonLocalMedia": "本地媒体",
|
||||
"ButtonLogs": "日志",
|
||||
"ButtonManageLocalFiles": "管理本地文件",
|
||||
"ButtonMaskServerAddress": "屏蔽服务器地址",
|
||||
"ButtonNewFolder": "新建文件夹",
|
||||
"ButtonNextEpisode": "下一集",
|
||||
"ButtonOk": "确定",
|
||||
@@ -50,6 +53,7 @@
|
||||
"ButtonStream": "串流播放",
|
||||
"ButtonSubmit": "提交",
|
||||
"ButtonSwitchServerUser": "切换服务器/用户",
|
||||
"ButtonUnmaskServerAddress": "取消屏蔽服务器地址",
|
||||
"ButtonUserStats": "用户统计信息",
|
||||
"ButtonYes": "确定",
|
||||
"HeaderAccount": "帐户",
|
||||
@@ -310,6 +314,7 @@
|
||||
"MessageNoItems": "无项目",
|
||||
"MessageNoItemsFound": "未找到任何项目",
|
||||
"MessageNoListeningSessions": "无收听会话",
|
||||
"MessageNoLogs": "无日志",
|
||||
"MessageNoMediaFolders": "没有媒体文件夹",
|
||||
"MessageNoNetworkConnection": "无网络连接",
|
||||
"MessageNoPodcastsFound": "未找到播客",
|
||||
|
||||
Reference in New Issue
Block a user