Compare commits

...
Author SHA1 Message Date
advplyr 6672a21049 Version bump v0.9.74-beta 2024-05-19 16:58:20 -05:00
advplyrandGitHub 06a0a68143 Merge pull request #1205 from indiefan/command-target-duplication-fix
Fix bug iOS AudioPlayer where multiple calls to setupRemoteTransportC…
2024-05-17 17:05:14 -05:00
advplyrandGitHub 1a7ae468bd Merge pull request #1206 from cor-bee/patch-1
Update uk.json
2024-05-17 16:50:49 -05:00
Illia PyshniakandGitHub e8f74d7358 Update uk.json 2024-05-17 14:00:58 +03:00
Marke Hallowell 984f01da23 Fix bug iOS AudioPlayer where multiple calls to setupRemoteTransportControls resulted in duplicate MPRemoteCommand targets being applied for the same action. 2024-05-16 19:11:38 -07:00
advplyrandGitHub d6e75410a5 Merge pull request #1201 from nichwall/bug_report
App bug report format
2024-05-12 12:41:45 -05:00
Nicholas Wallace 7627e1b58c App bug report format 2024-05-11 18:24:38 -07:00
advplyrandGitHub 5fb31b18ae Merge pull request #1199 from nichwall/feature_request
Add: feature request
2024-05-10 17:55:03 -05:00
Nicholas WandGitHub 20903e8217 App selection allows for multiple 2024-05-09 07:12:02 -07:00
Nicholas WandGitHub 8fe348d4eb Update feature_request.yaml 2024-05-09 06:40:06 -07:00
Nicholas Wallace 24cda8a179 Add: feature request 2024-05-08 23:30:13 -07:00
advplyr fc954a968b Remove old missing parts references 2024-04-28 16:38:40 -05:00
advplyr aae53a54cd Update:UI/UX: Add explicit indicator next to titles #1181 2024-04-28 16:34:31 -05:00
advplyr cfedcffc98 Add:No series filter option for book libraries #1184 2024-04-28 16:00:57 -05:00
advplyrandGitHub 0e74c74a6c Merge pull request #1179 from indiefan/rate-manager
Refactor AudioPlayer to use a Rate Manager protocol.
2024-04-27 16:49:27 -05:00
advplyr fb86c45e78 iOS add defaultRate fixing merge 2024-04-27 16:41:29 -05:00
advplyrandGitHub 124300b215 Merge branch 'master' into rate-manager 2024-04-27 16:06:20 -05:00
advplyrandGitHub 6746c0627b Merge pull request #1178 from indiefan/master
Update Now Playing info with correct default rate.
2024-04-27 16:01:06 -05:00
Marke Hallowell 0f2cd3b132 Update Now Playing info with correct default rate so that third party apps don't mistake current status as scrubbing. 2024-04-21 15:39:37 -07:00
advplyr e94d6fdc1e Update:Android notification image to not resize #657 2024-04-19 16:32:16 -05:00
advplyr e301b3071c Update:Add 1.7x playback speed to modal #1180 2024-04-19 14:39:00 -05:00
Marke Hallowell 3d3dad5e4a Adding new sources to project file. 2024-04-14 16:47:38 -07:00
Marke Hallowell f8a9033738 Add an AudioPlayerRateManager implementation for iOS 16+. 2024-04-14 16:12:55 -07:00
Marke Hallowell edb25f5bcd Refactor AudioPlayer to use an AudioPlayerRateManager protocol for managing rate/defaultRate state management. Implements a LegacyAudioPlayerRateManager implementation with existing (pre-iOS 16) behavior. 2024-04-14 11:45:03 -07:00
Marke Hallowell bcb239efd1 Update Now Playing info with correct default rate so that third party apps don't mistake current status as scrubbing. 2024-04-13 23:10:03 -07:00
advplyrandGitHub d208211c6f Merge pull request #1176 from Fymyte/patch-4
Update French Translation
2024-04-12 15:22:06 -05:00
Pierrick GuillaumeandGitHub 0b20b72241 Update fr.json 2024-04-12 20:32:47 +02:00
Pierrick GuillaumeandGitHub 5c29459af2 Update fr.json 2024-04-12 20:31:15 +02:00
advplyrandGitHub e54fd38784 Merge pull request #1174 from nichwall/i18n-update
Update i18n workflow to use 1.2.0
2024-04-11 17:17:23 -05:00
Nicholas Wallace 94774f13df Update i18n workflow to use 1.2.0 2024-04-10 18:38:11 -07:00
advplyr 43ec35fe67 Fix:Android device info client version 2024-04-05 16:39:24 -05:00
advplyrandGitHub b2645dc444 Merge pull request #1162 from springsunx/patch-1
Update zh-cn.json
2024-04-03 18:16:14 -05:00
SunXandGitHub c79624a82c Update zh-cn.json 2024-04-03 09:06:13 +08:00
advplyr 8201f3c9a6 Fix:Close sleep timer custom timer sub modal on sleep timer close #1112 2024-04-01 17:35:22 -05:00
advplyrandGitHub e0ac6a1c38 Merge pull request #1160 from pmangro/master
[PR-BR] Go to Web Client
2024-04-01 17:18:33 -05:00
pmangroandGitHub 400da5566d [PR-BR] Go to Web Client 2024-03-31 19:50:45 -03:00
advplyr 9b67037774 Update:Support for comic files with webp images https://github.com/advplyr/audiobookshelf/issues/2792 2024-03-27 16:13:13 -05:00
advplyr 48596542c7 Merge branch 'master' of https://github.com/advplyr/audiobookshelf-app 2024-03-25 16:33:36 -05:00
advplyr 9715d65d88 Update:Go to web client buttons visible to all users #1079 2024-03-25 16:33:30 -05:00
advplyrandGitHub 2e14b31a69 Merge pull request #1153 from burghy86/patch-4
Update it.json
2024-03-25 14:51:30 -05:00
burghy86andGitHub 1c8ce6c3db Update it.json
monthly translation of new strings
2024-03-25 16:29:07 +01:00
advplyrandGitHub dc74a6213d Merge pull request #1150 from nichwall/translation_faq_link
Translation guide link added
2024-03-24 05:06:47 -05:00
Nicholas Wallace e9a66bb7a7 Translation guide link added 2024-03-23 20:08:41 -07:00
advplyr 3c6d4b5f19 Add:Nav button in side drawer and item more menu to go to web client #1079 2024-03-22 17:54:56 -05:00
advplyrandGitHub f04eebe0d8 Merge pull request #1142 from nichwall/translation_workflow_check
Add: i18n workflow check
2024-03-20 16:43:26 -05:00
advplyrandGitHub 63b5227ccc Merge pull request #1140 from cor-bee/master
Update Ukrainian translation
2024-03-20 16:31:00 -05:00
Nicholas Wallace 934d9b1df4 Fixed release number of action 2024-03-19 21:19:38 -07:00
Nicholas Wallace 8994cb3a6e Added newline to force check 2024-03-19 21:12:52 -07:00
Nicholas Wallace 4a32de482b Example: German keys alphabetized 2024-03-19 21:09:49 -07:00
Nicholas Wallace 95f47793d2 Example: German strings out of order 2024-03-19 21:08:43 -07:00
Nicholas Wallace f27048618d Add: newline to end of file 2024-03-19 21:05:53 -07:00
Nicholas Wallace c90ad419e8 Add: i18n workflow check 2024-03-19 21:05:09 -07:00
Illia PyshniakandGitHub 2cdc3ecb9d Update uk.json 2024-03-19 23:09:35 +02:00
advplyr 9f89fcd968 Fix:Podcast library playlists page incorrect label in toolbar #1135 2024-03-19 12:52:14 -05:00
advplyrandGitHub 7c2d51f811 Merge pull request #1136 from cor-bee/master
Ukrainian translation
2024-03-18 17:44:49 -05:00
advplyr 41fe7a29cd Merge 2024-03-18 17:41:13 -05:00
advplyrandGitHub 54f3eec303 Merge pull request #1127 from nichwall/vietnamese_translations
Vietnamese translations
2024-03-18 17:36:58 -05:00
advplyr cd91013f69 Update Vietnamese datefnslocale code 2024-03-18 17:37:04 -05:00
advplyrandGitHub 0af16ef05f Merge pull request #1139 from pmangro/master
[PT-BR] Remove from Playlist
2024-03-18 11:57:25 -05:00
pmangroandGitHub 5ba830d56e [PT-BR] Remove from Playlist 2024-03-18 09:45:46 -03:00
Illia PyshniakandGitHub 81919e963a Add Ukrainian language to i18n.js 2024-03-15 22:28:00 +02:00
Illia PyshniakandGitHub 8a1d4bb958 Ukrainian app translation 2024-03-15 22:26:52 +02:00
Nicholas Wallace eabac0e709 Add: Vietnamese to language code map 2024-03-09 16:23:25 -07:00
Nicholas Wallace d90783d7c8 Fixed whitespace 2024-03-09 16:20:24 -07:00
Nicholas Wallace faf8211e5c Add: Vietnamese app translations 2024-03-09 16:20:00 -07:00
advplyr 65d90947c5 Fix:Remove from playlist button #987 2024-03-04 14:56:58 -06:00
advplyr 752e918d26 iOS version bump 0.9.73 & update dependencies 2024-03-03 16:28:55 -06:00
advplyr ad08cc69f4 Version bump 0.9.73-beta 2024-03-03 14:15:32 -06:00
advplyr da3882fd5e Fix:Playlist tab not shown after adding first playlist #1092 2024-03-03 13:29:58 -06:00
advplyr c04c7a55d9 Fix:iOS progress bar overflowing edge of screen 2024-03-03 12:52:17 -06:00
advplyr 3318846b43 Add:Remove from playlist option in more menu for items on playlist page #987 2024-03-02 15:25:18 -06:00
advplyrandGitHub e0860feeb9 Merge pull request #1109 from megamegax/hu
feat(i18n): add Hungarian localization
2024-03-01 15:39:15 -06:00
Hunyady Mihály c0253a69b9 feat(i18n): replace NoItemsFound translation to a more general one 2024-03-01 22:09:33 +01:00
Hunyady Mihály 9242c7e6e0 feat(i18n): small grammar adjustments 2024-03-01 22:04:09 +01:00
Hunyady Mihály 0bfc579ae4 feat(i18n): adjust translation 2024-03-01 21:39:06 +01:00
megamegax 5fad06756b feat(i18n): add Hungarian localization 2024-03-01 20:03:21 +01:00
advplyrandGitHub 5be6afa6c1 Merge pull request #1106 from pmangro/0.9.72.a-PT-BR
[PT-BR] Translated LabelAllowSeekingOnMediaControls
2024-02-27 15:58:36 -06:00
pmangroandGitHub 5ba3b8be7a [PT-BR] Translated LabelAllowSeekingOnMediaControls 2024-02-27 14:39:21 -03:00
advplyr 0eb62f541d Fix:Local media item page long titles overflowing screen pushing play & more menu button offscreen #1103 2024-02-25 15:35:23 -06:00
advplyrandGitHub 6baff881c7 Merge pull request #1094 from fidoriel/disable-widget-ios-scrubing
Disable ios/android scrubbing in MPRemoteCommandCenter/MediaBrowserServiceCompat
2024-02-25 15:29:52 -06:00
fidoriel 8c23c1e795 german translation for LabelAllowSeekingOnMediaControls 2024-02-25 22:25:17 +01:00
advplyr 9706c66a27 iOS Update Realm schema version for new setting, update remote transport controls on device settings updated 2024-02-25 15:04:54 -06:00
advplyr f4f7252537 Update wording for enable seeking on media controls settings, remove restart required help text, map translations 2024-02-25 14:44:40 -06:00
advplyr 430d200151 Update android disable media control seek setting to update in realtime 2024-02-25 14:11:28 -06:00
advplyr 7be82d03f3 Merge branch 'master' into disable-widget-ios-scrubing 2024-02-25 12:51:58 -06:00
advplyr 15aaef742d Fix:Ignore swiping for audio player when modal is open #1099 2024-02-24 15:00:29 -06:00
advplyrandGitHub e443ba09da Merge pull request #1095 from pmangro/0.9.72.a-PT-BR
Added PT-BR Strings
2024-02-24 14:49:35 -06:00
luca 8235d1f1f7 reorder setting and add info label 2024-02-22 20:27:33 +01:00
pmangroandGitHub 9a39dcceee Update i18n.js to add pt-br 2024-02-21 08:55:45 -03:00
pmangroandGitHub a707b7fc86 Typos corrected 2024-02-21 08:53:34 -03:00
fidoriel b6fea85ef4 fix compile android 2024-02-21 10:16:47 +01:00
advplyr 7e3b3f55ae Fix:Android auto not loading server items #1081 2024-02-20 17:05:07 -06:00
fidoriel d2d3bbe8a1 fix default false 2024-02-20 22:08:47 +01:00
fidoriel 41a65c0f9d add setting for widget scrubbing 2024-02-20 21:58:31 +01:00
pmangroandGitHub 165ddd58a6 Update pt-br.json - initial file 2024-02-20 17:29:03 -03:00
pmangroandGitHub 09dc04c0de Created pt-br.json 2024-02-20 15:40:29 -03:00
advplyrandGitHub 57d5dbc0d0 Merge pull request #1082 from arcao/patch-1
Translate cs.json
2024-02-14 18:42:25 -06:00
Martin SloupandGitHub 11af75e127 Translate cs.json
Translate untranslated texts to Czech and fix already translated texts.
2024-02-14 02:10:33 +01:00
advplyr f8d82a3020 iOS version bump 0.9.72 2024-02-11 08:54:54 -06:00
70 changed files with 2327 additions and 531 deletions
-37
View File
@@ -1,37 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
labels: bug
---
### Steps to reproduce
1.
2.
3.
### Expected behaviour
- Tell us what should happen
### Actual behaviour
- Tell us what happens
### Environment data
Audiobookshelf Version:
- [ ] Android App?
- [ ] iOS App?
#### Android Issue
Android version:
Device model:
Stock or customized system:
#### iOS Issue
iOS Version:
iPhone model:
+86
View File
@@ -0,0 +1,86 @@
name: 🐞 ABS App Bug Report
description: File a bug/issue and help us improve the Audiobookshelf mobile apps.
title: '[Bug]: '
labels: ['bug', 'triage']
body:
- type: markdown
attributes:
value: '## App Bug Description'
- type: markdown
attributes:
value: 'Thank you for filing a bug report! 🐛'
- type: markdown
attributes:
value: 'Join the [discord server](https://discord.gg/HQgCbd6E75) for questions or if you are not sure about a bug.'
- type: textarea
id: what-happened
attributes:
label: What was the Problem?
description: Please help us understand the problem.
placeholder: Describe the problem you saw or experienced in detail! Include a screenshot or video, if applicable.
validations:
required: true
- type: textarea
id: steps-to-reproduce
attributes:
label: Steps to Reproduce the Issue
description: Please help us understand how we can reliably reproduce the issue.
placeholder: '1. Go to the library page of a Podcast library and...'
validations:
required: true
- type: textarea
id: what-was-expected
attributes:
label: What was Expected?
description: Please help us understand what should have happened.
placeholder: Please help us visualize by including a doodle or screenshot.
validations:
required: true
- type: markdown
attributes:
value: '## Mobile Environment'
- type: input
id: phone-model
attributes:
label: Phone Model
description: What kind of phone are you using?
placeholder: e.g. Pixel 6, iPhone 14, Samusung Galaxy s23, etc
validations:
required: true
- type: input
id: phone-os
attributes:
label: Phone OS
description: What operating system? If Android, is it stock or a custom system?
placeholder: e.g. Android 14, iOS 17.4, etc
validations:
required: true
- type: dropdown
id: app-version
attributes:
label: Audiobookshelf App Version
description: Please ensure your app is up to date. *If you are using a 3rd-party app, please reach out to them directly.*
multiple: true
options:
- Android App - 0.9.63
- iOS App - 0.9.63
validations:
required: true
- type: dropdown
id: install-source
attributes:
label: Installation Source
multiple: true
options:
- Google Play Store
- Testflight
- SideStore
- Other (List in "Additional Notes")
validations:
required: true
- type: textarea
id: additional-notes
attributes:
label: Additional Notes
description: Anything else you want to add?
placeholder: 'e.g. I have tried X, Y, and Z.'
-18
View File
@@ -1,18 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
labels: enhancement
---
### Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
### Describe the solution you'd like
A clear and concise description of what you want to happen.
### Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
### Additional context
Add any other context or screenshots about the feature request here.
@@ -0,0 +1,55 @@
name: 🚀 App Feature Request
description: Request a feature/enhancement
title: '[Enhancement]: '
labels: ['enhancement']
body:
- type: markdown
attributes:
value: '## App Feature Request Description'
- type: markdown
attributes:
value: 'Please first search in both issues & discussions for your enhancement and make sure your app is up to date.'
- type: textarea
id: describe
attributes:
label: Describe the Feature/Enhancement
description: Please help us understand what you want.
placeholder: What is your vision?
validations:
required: true
- type: textarea
id: the-why
attributes:
label: Why would this be helpful?
description: Please help us understand why this would enhance your experience.
placeholder: Explain the "why" or "use case".
validations:
required: true
- type: textarea
id: image
attributes:
label: Future Implementation (Screenshot)
description: Please help us visualize by including a doodle or screenshot.
placeholder: How could this look or where could it go?
validations:
required: true
- type: markdown
attributes:
value: '## App Current Implementation'
- type: dropdown
id: version
attributes:
label: Audiobookshelf App Version
description: Please ensure your app is up to date. *If you are using a 3rd-party app, please reach out to them directly.*
multiple: true
options:
- Android App - 0.9.63
- iOS App - 0.9.63
validations:
required: true
- type: textarea
id: current-image
attributes:
label: Current Implementation (Screenshot)
description: What screen were you looking at when you thought of this enhancement?
placeholder: If an image is not applicable, please explain why.
+28
View File
@@ -0,0 +1,28 @@
name: Verify all i18n files are alphabetized
on:
push:
pull_request:
paths:
- strings/** # Should only check if any strings changed
jobs:
update_translations:
runs-on: ubuntu-latest
steps:
# Check out the repository
- name: Checkout repository
uses: actions/checkout@v4
# Set up node to run the javascript
- name: Set up node
uses: actions/setup-node@v4
with:
node-version: '20'
# The only argument is the `directory`, which is where the i18n files are
# stored.
- name: Run Update JSON Files action
uses: audiobookshelf/audiobookshelf-i18n-updater@v1.2.0
with:
directory: 'strings/' # Adjust the directory path as needed
+2 -2
View File
@@ -33,8 +33,8 @@ android {
applicationId "com.audiobookshelf.app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 103
versionName "0.9.72-beta"
versionCode 105
versionName "0.9.74-beta"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
manifestPlaceholders = [
"appAuthRedirectScheme": "com.audiobookshelf.app"
@@ -103,6 +103,9 @@ class MainActivity : BridgeActivity() {
}
}
fun isPlayerNotificationServiceInitialized():Boolean {
return ::foregroundService.isInitialized
}
fun stopMyService() {
if (mBounded) {
@@ -107,6 +107,7 @@ data class PlayItemRequestPayload(
data class DeviceSettings(
var disableAutoRewind:Boolean,
var enableAltView:Boolean,
var allowSeekingOnMediaControls:Boolean,
var jumpBackwardsTime:Int,
var jumpForwardTime:Int,
var enableMp3IndexSeeking:Boolean,
@@ -130,6 +131,7 @@ data class DeviceSettings(
return DeviceSettings(
disableAutoRewind = false,
enableAltView = true,
allowSeekingOnMediaControls = false,
jumpBackwardsTime = 10,
jumpForwardTime = 10,
enableMp3IndexSeeking = false,
@@ -247,14 +247,16 @@ class MediaManager(private var apiHandler: ApiHandler, var ctx: Context) {
}
private fun checkSetValidServerConnectionConfig(cb: (Boolean) -> Unit) = runBlocking {
Log.d(tag, "checkSetValidServerConnectionConfig | $serverConfigIdUsed")
Log.d(tag, "checkSetValidServerConnectionConfig | serverConfigIdUsed=$serverConfigIdUsed | lastServerConnectionConfigId=${DeviceManager.deviceData.lastServerConnectionConfigId}")
coroutineScope {
if (!DeviceManager.checkConnectivity(ctx)) {
serverUserMediaProgress = mutableListOf()
Log.d(tag, "checkSetValidServerConnectionConfig: No connectivity")
cb(false)
} else if (DeviceManager.serverConnectionConfigId == "") { // If in offline mode server connection config is unset
} else if (DeviceManager.deviceData.lastServerConnectionConfigId.isNullOrBlank()) { // If in offline mode last server connection config is unset
serverUserMediaProgress = mutableListOf()
Log.d(tag, "checkSetValidServerConnectionConfig: No last server connection config")
cb(false)
} else {
var hasValidConn = false
@@ -334,6 +336,7 @@ class MediaManager(private var apiHandler: ApiHandler, var ctx: Context) {
checkSetValidServerConnectionConfig { isConnected ->
if (isConnected) {
serverConfigIdUsed = DeviceManager.serverConnectionConfigId
Log.d(tag, "loadAndroidAutoItems: Connected to server config id=$serverConfigIdUsed")
loadLibraries { libraries ->
if (libraries.isEmpty()) {
@@ -360,6 +363,7 @@ class MediaManager(private var apiHandler: ApiHandler, var ctx: Context) {
}
}
} else { // Not connected to server
Log.d(tag, "loadAndroidAutoItems: Not connected to server")
cb()
}
}
@@ -15,8 +15,6 @@ import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.ui.PlayerNotificationManager
import kotlinx.coroutines.*
const val NOTIFICATION_LARGE_ICON_SIZE = 144 // px
class AbMediaDescriptionAdapter constructor(private val controller: MediaControllerCompat, private val playerNotificationService: PlayerNotificationService) : PlayerNotificationManager.MediaDescriptionAdapter {
private val tag = "MediaDescriptionAdapter"
@@ -77,7 +75,7 @@ class AbMediaDescriptionAdapter constructor(private val controller: MediaControl
.load(uri)
.placeholder(R.drawable.icon)
.error(R.drawable.icon)
.submit(NOTIFICATION_LARGE_ICON_SIZE, NOTIFICATION_LARGE_ICON_SIZE)
.submit()
.get()
} catch (e: Exception) {
e.printStackTrace()
@@ -85,7 +83,7 @@ class AbMediaDescriptionAdapter constructor(private val controller: MediaControl
Glide.with(playerNotificationService)
.asBitmap()
.load(Uri.parse("android.resource://${BuildConfig.APPLICATION_ID}/" + R.drawable.icon))
.submit(NOTIFICATION_LARGE_ICON_SIZE, NOTIFICATION_LARGE_ICON_SIZE)
.submit()
.get()
}
}
@@ -34,6 +34,7 @@ import com.audiobookshelf.app.managers.SleepTimerManager
import com.audiobookshelf.app.media.MediaManager
import com.audiobookshelf.app.media.MediaProgressSyncer
import com.audiobookshelf.app.server.ApiHandler
import com.audiobookshelf.app.BuildConfig
import com.google.android.exoplayer2.*
import com.google.android.exoplayer2.audio.AudioAttributes
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector
@@ -329,15 +330,7 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
}
}
mediaSessionConnector.setEnabledPlaybackActions(
PlaybackStateCompat.ACTION_PLAY_PAUSE
or PlaybackStateCompat.ACTION_PLAY
or PlaybackStateCompat.ACTION_PAUSE
or PlaybackStateCompat.ACTION_SEEK_TO
or PlaybackStateCompat.ACTION_FAST_FORWARD
or PlaybackStateCompat.ACTION_REWIND
or PlaybackStateCompat.ACTION_STOP
)
setMediaSessionConnectorPlaybackActions()
mediaSessionConnector.setQueueNavigator(queueNavigator)
mediaSessionConnector.setPlaybackPreparer(MediaSessionPlaybackPreparer(this))
@@ -512,6 +505,20 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
mediaSessionConnector.setCustomActionProviders(*customActionProviders.toTypedArray())
}
fun setMediaSessionConnectorPlaybackActions() {
var playbackActions = PlaybackStateCompat.ACTION_PLAY_PAUSE or
PlaybackStateCompat.ACTION_PLAY or
PlaybackStateCompat.ACTION_PAUSE or
PlaybackStateCompat.ACTION_FAST_FORWARD or
PlaybackStateCompat.ACTION_REWIND or
PlaybackStateCompat.ACTION_STOP
if (deviceSettings.allowSeekingOnMediaControls) {
playbackActions = playbackActions or PlaybackStateCompat.ACTION_SEEK_TO
}
mediaSessionConnector.setEnabledPlaybackActions(playbackActions)
}
fun handlePlayerPlaybackError(errorMessage:String) {
// On error and was attempting to direct play - fallback to transcode
currentPlaybackSession?.let { playbackSession ->
@@ -941,7 +948,7 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
appVersion: 0.9.46-beta
*/
val deviceId = Settings.Secure.getString(ctx.contentResolver, Settings.Secure.ANDROID_ID)
return DeviceInfo(deviceId, Build.MANUFACTURER, Build.MODEL, Build.VERSION.SDK_INT, Build.VERSION.RELEASE)
return DeviceInfo(deviceId, Build.MANUFACTURER, Build.MODEL, Build.VERSION.SDK_INT, BuildConfig.VERSION_NAME)
}
private val deviceSettings get() = DeviceManager.deviceData.deviceSettings ?: DeviceSettings.default()
@@ -1,5 +1,7 @@
package com.audiobookshelf.app.plugins
import android.os.Handler
import android.os.Looper
import android.util.Log
import com.audiobookshelf.app.MainActivity
import com.audiobookshelf.app.data.*
@@ -493,9 +495,16 @@ class AbsDatabase : Plugin() {
fun updateDeviceSettings(call:PluginCall) { // Returns device data
Log.d(tag, "updateDeviceSettings ${call.data}")
val newDeviceSettings = jacksonMapper.readValue<DeviceSettings>(call.data.toString())
GlobalScope.launch(Dispatchers.IO) {
Handler(Looper.getMainLooper()).post {
DeviceManager.deviceData.deviceSettings = newDeviceSettings
DeviceManager.dbManager.saveDeviceData(DeviceManager.deviceData)
// Updates playback actions for media notification (handles media control seek locking setting)
if (mainActivity.isPlayerNotificationServiceInitialized()) {
mainActivity.foregroundService.setMediaSessionConnectorPlaybackActions()
}
call.resolve(JSObject(jacksonMapper.writeValueAsString(DeviceManager.deviceData)))
}
}
@@ -11,6 +11,7 @@ import com.audiobookshelf.app.media.MediaEventManager
import com.audiobookshelf.app.media.MediaProgressSyncData
import com.audiobookshelf.app.media.SyncResult
import com.audiobookshelf.app.models.User
import com.audiobookshelf.app.BuildConfig
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.core.json.JsonReadFeature
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
@@ -327,7 +328,7 @@ class ApiHandler(var ctx:Context) {
fun sendSyncLocalSessions(playbackSessions:List<PlaybackSession>, cb: (Boolean, String?) -> Unit) {
@SuppressLint("HardwareIds")
val deviceId = Settings.Secure.getString(ctx.contentResolver, Settings.Secure.ANDROID_ID)
val deviceInfo = DeviceInfo(deviceId, Build.MANUFACTURER, Build.MODEL, Build.VERSION.SDK_INT, Build.VERSION.RELEASE)
val deviceInfo = DeviceInfo(deviceId, Build.MANUFACTURER, Build.MODEL, Build.VERSION.SDK_INT, BuildConfig.VERSION_NAME)
val payload = JSObject(jacksonMapper.writeValueAsString(LocalSessionsSyncRequestPayload(playbackSessions, deviceInfo)))
Log.d(tag, "Sending ${playbackSessions.size} saved local playback sessions to server")
+28 -10
View File
@@ -163,7 +163,8 @@ export default {
showMoreMenuDialog: false,
coverRgb: 'rgb(55, 56, 56)',
coverBgIsLight: false,
titleMarquee: null
titleMarquee: null,
isRefreshingUI: false
}
},
watch: {
@@ -652,7 +653,7 @@ export default {
this.closePlayback()
},
touchstart(e) {
if (!e.changedTouches) return
if (!e.changedTouches || this.$store.state.globals.isModalOpen) return
const touchPosY = e.changedTouches[0].pageY
// when minimized only listen to touchstart on the player
if (!this.showFullscreen && touchPosY < window.innerHeight - 120) return
@@ -880,15 +881,32 @@ export default {
this.onProgressSyncSuccess = AbsAudioPlayer.addListener('onProgressSyncSuccess', this.showProgressSyncSuccess)
this.onPlaybackSpeedChangedListener = AbsAudioPlayer.addListener('onPlaybackSpeedChanged', this.onPlaybackSpeedChanged)
},
screenOrientationChange() {
setTimeout(() => {
this.updateScreenSize()
if (this.$refs.track) {
this.trackWidth = this.$refs.track.clientWidth
this.updateTrack()
this.updateReadyTrack()
async screenOrientationChange() {
if (this.isRefreshingUI) return
this.isRefreshingUI = true
const windowWidth = window.innerWidth
this.refreshUI()
// Window width does not always change right away. Wait up to 250ms for a change.
// iPhone 10 on iOS 16 took between 100 - 200ms to update when going from portrait to landscape
// but landscape to portrait was immediate
for (let i = 0; i < 5; i++) {
await new Promise((resolve) => setTimeout(resolve, 50))
if (window.innerWidth !== windowWidth) {
this.refreshUI()
break
}
}, 50)
}
this.isRefreshingUI = false
},
refreshUI() {
this.updateScreenSize()
if (this.$refs.track) {
this.trackWidth = this.$refs.track.clientWidth
this.updateTrack()
this.updateReadyTrack()
}
},
updateScreenSize() {
setTimeout(() => {
+14 -1
View File
@@ -79,7 +79,10 @@ export default {
return this.$store.state.serverSettings || {}
},
username() {
return this.user ? this.user.username : ''
return this.user?.username || ''
},
userIsAdminOrUp() {
return this.$store.getters['user/getIsAdminOrUp']
},
navItems() {
var items = [
@@ -132,6 +135,12 @@ export default {
})
if (this.serverConnectionConfig) {
items.push({
icon: 'language',
text: this.$strings.ButtonGoToWebClient,
action: 'openWebClient'
})
items.push({
icon: 'login',
text: this.$strings.ButtonSwitchServerUser,
@@ -151,6 +160,10 @@ export default {
if (action === 'logout') {
await this.logout()
this.$router.push('/connect')
} else if (action === 'openWebClient') {
this.show = false
let path = `/library/${this.$store.state.libraries.currentLibraryId}`
await this.$store.dispatch('user/openWebClient', path)
}
},
clickBackground() {
+1 -1
View File
@@ -79,7 +79,7 @@ export default {
return this.page
},
hasFilter() {
if (this.page === 'series' || this.page === 'collections') return false
if (this.page === 'series' || this.page === 'collections' || this.page === 'playlists') return false
return this.filterBy !== 'all'
},
orderBy() {
+9 -10
View File
@@ -7,9 +7,12 @@
<!-- Alternative bookshelf title/author/sort -->
<div v-if="isAltViewEnabled" class="absolute left-0 z-50 w-full" :style="{ bottom: `-${titleDisplayBottomOffset}rem` }">
<p class="truncate" :style="{ fontSize: 0.9 * sizeMultiplier + 'rem' }">
{{ displayTitle }}
</p>
<div :style="{ fontSize: 0.9 * sizeMultiplier + 'rem' }" class="flex items-center">
<p class="truncate" :style="{ fontSize: 0.9 * sizeMultiplier + 'rem' }">
{{ displayTitle }}
</p>
<widgets-explicit-indicator v-if="isExplicit" />
</div>
<p class="truncate text-fg-muted" :style="{ fontSize: 0.8 * sizeMultiplier + 'rem' }">{{ displayLineTwo || '&nbsp;' }}</p>
<p v-if="displaySortLine" class="truncate text-fg-muted" :style="{ fontSize: 0.8 * sizeMultiplier + 'rem' }">{{ displaySortLine }}</p>
</div>
@@ -310,7 +313,7 @@ export default {
return !!this.userProgress?.isFinished
},
showError() {
return this.numMissingParts || this.isMissing || this.isInvalid
return this.isMissing || this.isInvalid
},
localLibraryItemId() {
if (this.isLocal) return this.libraryItemId
@@ -341,9 +344,8 @@ export default {
isInvalid() {
return this._libraryItem.isInvalid
},
numMissingParts() {
if (this.isPodcast) return 0
return this.media.numMissingParts
isExplicit() {
return !!this.mediaMetadata.explicit
},
overlayWrapperClasslist() {
var classes = []
@@ -366,9 +368,6 @@ export default {
userCanDownload() {
return this.store.getters['user/getUserCanDownload']
},
userIsRoot() {
return this.store.getters['user/getIsRoot']
},
titleFontSize() {
return 0.75 * this.sizeMultiplier
},
+1 -5
View File
@@ -215,7 +215,7 @@ export default {
return !!this.userProgress?.isFinished
},
showError() {
return this.numMissingParts || this.isMissing || this.isInvalid
return this.isMissing || this.isInvalid
},
isStreaming() {
return this.store.getters['getlibraryItemIdStreaming'] === this.libraryItemId
@@ -235,10 +235,6 @@ export default {
isInvalid() {
return this._libraryItem.isInvalid
},
numMissingParts() {
if (this.isPodcast) return 0
return this.media.numMissingParts
},
store() {
return this.$store || this.$nuxt.$store
},
+5 -5
View File
@@ -64,14 +64,14 @@ export default {
return this.$route.query || {}
},
entityTitle() {
if (this.isPodcast) return this.$strings.LabelPodcasts
if (this.page === 'library') return this.$strings.LabelBooks
else if (this.page === 'series') {
if (this.page === 'library') {
return this.isPodcast ? this.$strings.LabelPodcasts : this.$strings.LabelBooks
} else if (this.page === 'playlists') {
return this.$strings.ButtonPlaylists
} else if (this.page === 'series') {
return this.$strings.LabelSeries
} else if (this.page === 'collections') {
return this.$strings.ButtonCollections
} else if (this.page === 'playlists') {
return this.$strings.ButtonPlaylists
} else if (this.page === 'authors') {
return this.$strings.LabelAuthors
}
+8 -1
View File
@@ -210,7 +210,7 @@ export default {
]
},
sublistItems() {
return (this[this.sublist] || []).map((item) => {
const sublistItems = (this[this.sublist] || []).map((item) => {
if (typeof item === 'string') {
return {
text: item,
@@ -223,6 +223,13 @@ export default {
}
}
})
if (this.sublist === 'series') {
sublistItems.unshift({
text: this.$strings.MessageNoSeries,
value: this.$encode('no-series')
})
}
return sublistItems
},
filterData() {
return this.$store.state.libraries.filterData || {}
+48
View File
@@ -26,6 +26,10 @@ export default {
type: Object,
default: () => null
},
playlist: {
type: Object,
default: () => null
},
hideRssFeedOption: Boolean
},
data() {
@@ -92,6 +96,15 @@ export default {
}
}
// If on playlist page show remove from playlist option
if (this.playlist) {
items.push({
text: this.$strings.LabelRemoveFromPlaylist,
value: 'removeFromPlaylist',
icon: 'playlist_remove'
})
}
if (this.showRSSFeedOption) {
items.push({
text: this.rssFeed ? this.$strings.HeaderRSSFeed : this.$strings.HeaderOpenRSSFeed,
@@ -122,6 +135,14 @@ export default {
}
}
if (this.isConnectedToServer) {
items.push({
text: this.$strings.ButtonGoToWebClient,
value: 'openWebClient',
icon: 'language'
})
}
if (!this.episode) {
items.push({
text: this.$strings.LabelMoreInfo,
@@ -255,6 +276,8 @@ export default {
} else if (action === 'playlist') {
this.$store.commit('globals/setSelectedPlaylistItems', [{ libraryItem: this.libraryItem, episode: this.episode }])
this.$store.commit('globals/setShowPlaylistsAddCreateModal', true)
} else if (action === 'removeFromPlaylist') {
this.removeFromPlaylistClick()
} else if (action === 'markFinished') {
if (this.episode) this.toggleEpisodeFinished()
else this.toggleFinished()
@@ -270,6 +293,8 @@ export default {
this.clickRSSFeed()
} else if (action === 'sendEbook') {
this.showSendEbookDevicesModal = true
} else if (action === 'openWebClient') {
this.$store.dispatch('user/openWebClient', `/item/${this.serverLibraryItemId}`)
}
},
async toggleFinished() {
@@ -456,6 +481,29 @@ export default {
.finally(() => {
this.$emit('update:processing', false)
})
},
removeFromPlaylistClick() {
if (!this.playlist) {
this.$toast.error('Invalid: No Playlist')
return
}
this.$emit('update:processing', true)
let url = `/api/playlists/${this.playlist.id}/item/${this.serverLibraryItemId}`
if (this.serverEpisodeId) url += `/${this.serverEpisodeId}`
this.$nativeHttp
.delete(url)
.then(() => {
this.$toast.success('Item removed from playlist')
})
.catch((error) => {
const errorMsg = error.response?.data || 'Unknown error'
console.error('Failed to remove item from playlist', error)
this.$toast.error('Failed to remove from playlist: ' + errorMsg)
})
.finally(() => {
this.$emit('update:processing', false)
})
}
},
mounted() {}
+1 -1
View File
@@ -71,7 +71,7 @@ export default {
}
},
rates() {
return [0.5, 1, 1.2, 1.5, 2, 3]
return [0.5, 1, 1.2, 1.5, 1.7, 2, 3]
},
canIncrement() {
return this.playbackRate + 0.1 <= this.MAX_SPEED
+5 -8
View File
@@ -6,13 +6,7 @@
</div>
</template>
<div
class="w-full h-full overflow-hidden absolute top-0 left-0 flex items-center justify-center"
@click="
show = false
manualTimerModal = false
"
>
<div class="w-full h-full overflow-hidden absolute top-0 left-0 flex items-center justify-center" @click="show = false">
<div class="w-full overflow-x-hidden overflow-y-auto bg-primary rounded-lg border border-border" style="max-height: 75%" @click.stop>
<div v-if="manualTimerModal" class="p-4">
<div class="flex mb-4" @click="manualTimerModal = false">
@@ -71,7 +65,7 @@ export default {
},
data() {
return {
manualTimerModal: null,
manualTimerModal: true,
manualTimeoutMin: 1
}
},
@@ -81,6 +75,9 @@ export default {
return this.value
},
set(val) {
if (!val) {
this.manualTimerModal = false
}
this.$emit('input', val)
}
},
+1 -1
View File
@@ -349,7 +349,7 @@ export default {
}
},
parseFilenames(filenames) {
const acceptableImages = ['.jpeg', '.jpg', '.png']
const acceptableImages = ['.jpeg', '.jpg', '.png', '.webp']
var imageFiles = filenames.filter((f) => {
return acceptableImages.includes((Path.extname(f) || '').toLowerCase())
})
@@ -6,8 +6,11 @@
<covers-preview-cover :src="$store.getters['globals/getLibraryItemCoverSrcById'](libraryItemId)" :width="40" :book-cover-aspect-ratio="bookCoverAspectRatio" :show-resolution="false" class="md:hidden" />
</div>
<div class="flex-grow px-2">
<div class="-mt-0.5 mb-0.5" @click.stop>
<nuxt-link :to="`/item/${libraryItemId}`" class="text-sm text-fg underline">{{ podcast.metadata.title }}</nuxt-link>
<div class="flex items-center">
<div class="-mt-0.5 mb-0.5" @click.stop>
<nuxt-link :to="`/item/${libraryItemId}`" class="text-sm text-fg underline">{{ podcast.metadata.title }}</nuxt-link>
</div>
<widgets-explicit-indicator v-if="podcast.metadata.explicit" />
</div>
<p v-if="publishedAt" class="text-xs text-fg-muted">{{ $dateDistanceFromNow(publishedAt) }}</p>
</div>
+50
View File
@@ -0,0 +1,50 @@
<template>
<div>
<svg xmlns="http://www.w3.org/2000/svg" width="12px" height="12px" viewBox="0 0 512 512" class="ml-1">
<path
fill="white"
d="M 89.00,40.12
C 89.00,40.12 127.00,40.12 127.00,40.12
127.00,40.12 198.00,40.12 198.00,40.12
198.00,40.12 416.00,40.12 416.00,40.12
446.58,40.05 472.95,66.42 473.00,97.00
473.00,97.00 473.00,303.00 473.00,303.00
473.00,303.00 473.00,418.00 473.00,418.00
472.65,447.55 445.06,472.95 416.00,473.00
416.00,473.00 210.00,473.00 210.00,473.00
210.00,473.00 95.00,473.00 95.00,473.00
65.45,472.65 40.05,445.06 40.00,416.00
40.00,416.00 40.00,136.00 40.00,136.00
40.00,136.00 40.00,109.00 40.00,109.00
40.00,109.00 40.00,96.00 40.00,96.00
40.07,81.58 46.89,67.14 57.01,57.01
61.17,52.86 64.86,50.13 70.00,47.31
77.25,43.33 81.02,42.18 89.00,40.12 Z
M 337.00,121.00
C 337.00,121.00 175.00,121.00 175.00,121.00
175.00,121.00 175.00,392.00 175.00,392.00
175.00,392.00 337.00,392.00 337.00,392.00
337.00,392.00 337.00,349.00 337.00,349.00
337.00,349.00 226.00,349.00 226.00,349.00
226.00,349.00 226.00,274.00 226.00,274.00
226.00,274.00 332.00,274.00 332.00,274.00
332.00,274.00 332.00,232.00 332.00,232.00
332.00,232.00 226.00,232.00 226.00,232.00
226.00,232.00 226.00,164.00 226.00,164.00
226.00,164.00 337.00,164.00 337.00,164.00
337.00,164.00 337.00,121.00 337.00,121.00 Z"
/>
</svg>
</div>
</template>
<script>
export default {
data() {
return {}
},
computed: {},
methods: {},
mounted() {}
}
</script>
+16 -4
View File
@@ -65,6 +65,9 @@
E9E8814D28DA6B9000D750C1 /* PlayerTimeUtilsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9E8814C28DA6B9000D750C1 /* PlayerTimeUtilsTests.swift */; };
E9E985F828B02D9400957F23 /* PlayerProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9E985F728B02D9400957F23 /* PlayerProgress.swift */; };
E9FA07E328C82848005520B0 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FA07E228C82848005520B0 /* Logger.swift */; };
EACB38122BCCA1330060DA4A /* AudioPlayerRateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EACB38112BCCA1330060DA4A /* AudioPlayerRateManager.swift */; };
EACB38142BCCA1410060DA4A /* LegacyAudioPlayerRateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EACB38132BCCA1410060DA4A /* LegacyAudioPlayerRateManager.swift */; };
EACB38162BCCA1500060DA4A /* DefaultedAudioPlayerRateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EACB38152BCCA1500060DA4A /* DefaultedAudioPlayerRateManager.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -142,6 +145,9 @@
E9E8814C28DA6B9000D750C1 /* PlayerTimeUtilsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerTimeUtilsTests.swift; sourceTree = "<group>"; };
E9E985F728B02D9400957F23 /* PlayerProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerProgress.swift; sourceTree = "<group>"; };
E9FA07E228C82848005520B0 /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
EACB38112BCCA1330060DA4A /* AudioPlayerRateManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioPlayerRateManager.swift; sourceTree = "<group>"; };
EACB38132BCCA1410060DA4A /* LegacyAudioPlayerRateManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyAudioPlayerRateManager.swift; sourceTree = "<group>"; };
EACB38152BCCA1500060DA4A /* DefaultedAudioPlayerRateManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultedAudioPlayerRateManager.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -183,6 +189,9 @@
3ABF6190280432610070250E /* player */ = {
isa = PBXGroup;
children = (
EACB38152BCCA1500060DA4A /* DefaultedAudioPlayerRateManager.swift */,
EACB38132BCCA1410060DA4A /* LegacyAudioPlayerRateManager.swift */,
EACB38112BCCA1330060DA4A /* AudioPlayerRateManager.swift */,
E9E8814828DA641B00D750C1 /* util */,
3A200C1427D64D7E00CBF02E /* AudioPlayer.swift */,
E9DFCBFA28C28F4A00B36356 /* AudioPlayerSleepTimer.swift */,
@@ -521,6 +530,7 @@
E9D5506228AC1CC900C746DD /* PlayerState.swift in Sources */,
3AD4FCE728043E72006DB301 /* AbsDatabase.m in Sources */,
504EC3081FED79650016851F /* AppDelegate.swift in Sources */,
EACB38122BCCA1330060DA4A /* AudioPlayerRateManager.swift in Sources */,
E9FA07E328C82848005520B0 /* Logger.swift in Sources */,
3A90295F280968E700E1D427 /* PlaybackReport.swift in Sources */,
E9D5505A28AC1C4500C746DD /* Folder.swift in Sources */,
@@ -540,6 +550,7 @@
3A200C1527D64D7E00CBF02E /* AudioPlayer.swift in Sources */,
E9D5507128AC1EC700C746DD /* DownloadItemPart.swift in Sources */,
4D66B956282EE951008272D4 /* AbsFileSystem.m in Sources */,
EACB38142BCCA1410060DA4A /* LegacyAudioPlayerRateManager.swift in Sources */,
3AFCB5E827EA240D00ECCC05 /* NowPlayingInfo.swift in Sources */,
3AB34053280829BF0039308B /* Extensions.swift in Sources */,
E9D5505828AC1C1A00C746DD /* Library.swift in Sources */,
@@ -548,6 +559,7 @@
4DABC04F2B0139CA000F6264 /* User.swift in Sources */,
4D66B952282EE822008272D4 /* AbsDownloader.m in Sources */,
E9D5506828AC1DC300C746DD /* LocalPodcastEpisode.swift in Sources */,
EACB38162BCCA1500060DA4A /* DefaultedAudioPlayerRateManager.swift in Sources */,
E9D5505228AC1B5D00C746DD /* Chapter.swift in Sources */,
E9D5506028AC1CA900C746DD /* PlaybackMetadata.swift in Sources */,
E9D5504828AC1A7A00C746DD /* MediaType.swift in Sources */,
@@ -728,12 +740,12 @@
ASSETCATALOG_COMPILER_APPICON_NAME = Icons;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 28;
CURRENT_PROJECT_VERSION = 30;
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.71;
MARKETING_VERSION = 0.9.73;
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
PRODUCT_BUNDLE_IDENTIFIER = com.audiobookshelf.app.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -752,12 +764,12 @@
ASSETCATALOG_COMPILER_APPICON_NAME = Icons;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 28;
CURRENT_PROJECT_VERSION = 30;
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.71;
MARKETING_VERSION = 0.9.73;
PRODUCT_BUNDLE_IDENTIFIER = com.audiobookshelf.app;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
+1 -1
View File
@@ -14,7 +14,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// Override point for customization after application launch.
let configuration = Realm.Configuration(
schemaVersion: 16,
schemaVersion: 17,
migrationBlock: { [weak self] migration, oldSchemaVersion in
if (oldSchemaVersion < 1) {
self?.logger.log("Realm schema version was \(oldSchemaVersion)")
+5 -1
View File
@@ -238,6 +238,7 @@ public class AbsDatabase: CAPPlugin {
@objc func updateDeviceSettings(_ call: CAPPluginCall) {
let disableAutoRewind = call.getBool("disableAutoRewind") ?? false
let enableAltView = call.getBool("enableAltView") ?? false
let allowSeekingOnMediaControls = call.getBool("allowSeekingOnMediaControls") ?? false
let jumpBackwardsTime = call.getInt("jumpBackwardsTime") ?? 10
let jumpForwardTime = call.getInt("jumpForwardTime") ?? 10
let lockOrientation = call.getString("lockOrientation") ?? "NONE"
@@ -246,6 +247,7 @@ public class AbsDatabase: CAPPlugin {
let settings = DeviceSettings()
settings.disableAutoRewind = disableAutoRewind
settings.enableAltView = enableAltView
settings.allowSeekingOnMediaControls = allowSeekingOnMediaControls
settings.jumpBackwardsTime = jumpBackwardsTime
settings.jumpForwardTime = jumpForwardTime
settings.lockOrientation = lockOrientation
@@ -254,7 +256,9 @@ public class AbsDatabase: CAPPlugin {
Database.shared.setDeviceSettings(deviceSettings: settings)
// call.resolve([ "value": [] ])
// Updates the media notification controls (for allowSeekingOnMediaControls setting)
PlayerHandler.updateRemoteTransportControls()
getDeviceData(call)
}
+9 -9
View File
@@ -1,5 +1,5 @@
PODS:
- Alamofire (5.6.4)
- Alamofire (5.8.1)
- ByteowlsCapacitorFilesharer (5.0.0):
- Capacitor
- Capacitor (5.4.0):
@@ -23,11 +23,11 @@ PODS:
- Capacitor
- CordovaPlugins (5.4.0):
- CapacitorCordova
- Realm (10.36.0):
- Realm/Headers (= 10.36.0)
- Realm/Headers (10.36.0)
- RealmSwift (10.36.0):
- Realm (= 10.36.0)
- Realm (10.47.0):
- Realm/Headers (= 10.47.0)
- Realm/Headers (10.47.0)
- RealmSwift (10.47.0):
- Realm (= 10.47.0)
DEPENDENCIES:
- Alamofire (~> 5.5)
@@ -78,7 +78,7 @@ EXTERNAL SOURCES:
:path: "../capacitor-cordova-ios-plugins"
SPEC CHECKSUMS:
Alamofire: 4e95d97098eacb88856099c4fc79b526a299e48c
Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7
ByteowlsCapacitorFilesharer: f6a773825632d65d5404a34764c4a3fd857bb176
Capacitor: a5cd803e02b471591c81165f400ace01f40b11d3
CapacitorApp: 024e1b1bea5f883d79f6330d309bc441c88ad04a
@@ -91,8 +91,8 @@ SPEC CHECKSUMS:
CapacitorPreferences: f03954bcb0ff09c792909e46bff88e3183c16b10
CapacitorStatusBar: 565c0a1ebd79bb40d797606a8992b4a105885309
CordovaPlugins: a5db67e5ac1061b9869a0efd754f2c2f776aeccc
Realm: 3fd136cb4c83a927482a7f1612496d37beed3cf5
RealmSwift: 513d4dcbf5bfc4d573454088b592685fc48dd716
Realm: e43fb540ae947497e3ea8a662443256920602060
RealmSwift: 8b06ed06b5d16749ae0c4d91c0cba414a9e28189
PODFILE CHECKSUM: 02e6ffe2f51a453ce222ee9af0e55e9448d8514c
@@ -11,6 +11,7 @@ import RealmSwift
class DeviceSettings: Object {
@Persisted var disableAutoRewind: Bool = false
@Persisted var enableAltView: Bool = true
@Persisted var allowSeekingOnMediaControls: Bool = false
@Persisted var jumpBackwardsTime: Int = 10
@Persisted var jumpForwardTime: Int = 10
@Persisted var lockOrientation: String = "NONE"
@@ -26,6 +27,7 @@ func deviceSettingsToJSON(settings: DeviceSettings) -> Dictionary<String, Any> {
return [
"disableAutoRewind": settings.disableAutoRewind,
"enableAltView": settings.enableAltView,
"allowSeekingOnMediaControls": settings.allowSeekingOnMediaControls,
"jumpBackwardsTime": settings.jumpBackwardsTime,
"jumpForwardTime": settings.jumpForwardTime,
"lockOrientation": settings.lockOrientation,
+28 -35
View File
@@ -29,9 +29,7 @@ class AudioPlayer: NSObject {
internal let logger = AppLogger(category: "AudioPlayer")
private var status: PlayerStatus
internal var rate: Float
private var tmpRate: Float = 1.0
internal var rateManager: AudioPlayerRateManager
private var playerContext = 0
private var playerItemContext = 0
@@ -64,11 +62,18 @@ class AudioPlayer: NSObject {
self.audioPlayer.automaticallyWaitsToMinimizeStalling = true
self.sessionId = sessionId
self.status = .uninitialized
self.rate = 0.0
self.tmpRate = playbackRate
if #available(iOS 16.0, *) {
self.rateManager = DefaultedAudioPlayerRateManager(audioPlayer: self.audioPlayer, defaultRate: playbackRate)
} else {
self.rateManager = LegacyAudioPlayerRateManager(audioPlayer: self.audioPlayer, defaultRate: playbackRate)
}
super.init()
self.rateManager.rateChangedCompletion = self.updateNowPlaying
self.rateManager.defaultRateChangedCompletion = self.setupTimeObservers
initAudioSession()
setupRemoteTransportControls()
@@ -81,7 +86,6 @@ class AudioPlayer: NSObject {
// Listen to player events
self.setupAudioSessionNotifications()
self.audioPlayer.addObserver(self, forKeyPath: #keyPath(AVPlayer.rate), options: .new, context: &playerContext)
self.audioPlayer.addObserver(self, forKeyPath: #keyPath(AVPlayer.currentItem), options: .new, context: &playerContext)
for track in playbackSession.audioTracks {
@@ -150,7 +154,6 @@ class AudioPlayer: NSObject {
}
// Remove observers
self.audioPlayer.removeObserver(self, forKeyPath: #keyPath(AVPlayer.rate), context: &playerContext)
self.audioPlayer.removeObserver(self, forKeyPath: #keyPath(AVPlayer.currentItem), context: &playerContext)
self.removeTimeObservers()
@@ -332,7 +335,7 @@ class AudioPlayer: NSObject {
self.markAudioSessionAs(active: true)
DispatchQueue.runOnMainQueue {
self.audioPlayer.play()
self.audioPlayer.rate = self.tmpRate
self.rateManager.handlePlayEvent()
}
self.status = .playing
@@ -424,25 +427,8 @@ class AudioPlayer: NSObject {
}
}
public func setPlaybackRate(_ rate: Float, observed: Bool = false) {
let playbackSpeedChanged = rate > 0.0 && rate != self.tmpRate && !(observed && rate == 1)
if self.audioPlayer.rate != rate {
logger.log("setPlaybakRate rate changed from \(self.audioPlayer.rate) to \(rate)")
DispatchQueue.runOnMainQueue {
self.audioPlayer.rate = rate
}
}
self.rate = rate
self.updateNowPlaying()
if playbackSpeedChanged {
self.tmpRate = rate
// Setup the time observer again at the new rate
self.setupTimeObservers()
}
public func setPlaybackRate(_ rate: Float) {
self.rateManager.setPlaybackRate(rate)
}
public func setChapterTrack() {
@@ -588,7 +574,7 @@ class AudioPlayer: NSObject {
}
// MARK: - Now playing
private func setupRemoteTransportControls() {
func setupRemoteTransportControls() {
DispatchQueue.runOnMainQueue {
UIApplication.shared.beginReceivingRemoteControlEvents()
}
@@ -598,6 +584,7 @@ class AudioPlayer: NSObject {
let jumpBackwardsTime = deviceSettings.jumpBackwardsTime
commandCenter.playCommand.isEnabled = true
commandCenter.playCommand.removeTarget(nil)
commandCenter.playCommand.addTarget { [weak self] event in
guard let strongSelf = self else { return .commandFailed }
if strongSelf.isPlaying() {
@@ -609,6 +596,7 @@ class AudioPlayer: NSObject {
}
commandCenter.pauseCommand.isEnabled = true
commandCenter.pauseCommand.removeTarget(nil)
commandCenter.pauseCommand.addTarget { [weak self] event in
guard let strongSelf = self else { return .commandFailed }
if strongSelf.isPlaying() {
@@ -620,6 +608,7 @@ class AudioPlayer: NSObject {
}
commandCenter.togglePlayPauseCommand.isEnabled = true
commandCenter.togglePlayPauseCommand.removeTarget(nil)
commandCenter.togglePlayPauseCommand.addTarget { [weak self] event in
guard let strongSelf = self else { return .commandFailed }
if strongSelf.isPlaying() {
@@ -631,6 +620,7 @@ class AudioPlayer: NSObject {
}
commandCenter.skipForwardCommand.isEnabled = true
commandCenter.skipForwardCommand.removeTarget(nil)
commandCenter.skipForwardCommand.preferredIntervals = [NSNumber(value: jumpForwardTime)]
commandCenter.skipForwardCommand.addTarget { [weak self] event in
guard let command = event.command as? MPSkipIntervalCommand else {
@@ -643,6 +633,7 @@ class AudioPlayer: NSObject {
return .success
}
commandCenter.skipBackwardCommand.isEnabled = true
commandCenter.skipBackwardCommand.removeTarget(nil)
commandCenter.skipBackwardCommand.preferredIntervals = [NSNumber(value: jumpBackwardsTime)]
commandCenter.skipBackwardCommand.addTarget { [weak self] event in
guard let command = event.command as? MPSkipIntervalCommand else {
@@ -656,6 +647,7 @@ class AudioPlayer: NSObject {
}
commandCenter.nextTrackCommand.isEnabled = true
commandCenter.nextTrackCommand.removeTarget(nil)
commandCenter.nextTrackCommand.addTarget { [weak self] _ in
guard let currentTime = self?.getCurrentTime() else {
return .commandFailed
@@ -664,6 +656,7 @@ class AudioPlayer: NSObject {
return .success
}
commandCenter.previousTrackCommand.isEnabled = true
commandCenter.previousTrackCommand.removeTarget(nil)
commandCenter.previousTrackCommand.addTarget { [weak self] _ in
guard let currentTime = self?.getCurrentTime() else {
return .commandFailed
@@ -672,7 +665,8 @@ class AudioPlayer: NSObject {
return .success
}
commandCenter.changePlaybackPositionCommand.isEnabled = true
commandCenter.changePlaybackPositionCommand.isEnabled = deviceSettings.allowSeekingOnMediaControls
commandCenter.changePlaybackPositionCommand.removeTarget(nil)
commandCenter.changePlaybackPositionCommand.addTarget { [weak self] event in
guard let event = event as? MPChangePlaybackPositionCommandEvent else {
return .noSuchContent
@@ -690,6 +684,7 @@ class AudioPlayer: NSObject {
}
commandCenter.changePlaybackRateCommand.isEnabled = true
commandCenter.changePlaybackRateCommand.removeTarget(nil)
commandCenter.changePlaybackRateCommand.supportedPlaybackRates = [0.5, 0.75, 1.0, 1.25, 1.5, 2]
commandCenter.changePlaybackRateCommand.addTarget { [weak self] event in
guard let event = event as? MPChangePlaybackRateCommandEvent else {
@@ -706,23 +701,21 @@ class AudioPlayer: NSObject {
NowPlayingInfo.shared.update(
duration: currentChapter.getRelativeChapterEndTime(),
currentTime: currentChapter.getRelativeChapterCurrentTime(sessionCurrentTime: session.currentTime),
rate: rate,
rate: self.rateManager.rate,
defaultRate: self.rateManager.defaultRate,
chapterName: currentChapter.title,
chapterNumber: (session.chapters.firstIndex(of: currentChapter) ?? 0) + 1,
chapterCount: session.chapters.count
)
} else if let duration = self.getDuration(), let currentTime = self.getCurrentTime() {
NowPlayingInfo.shared.update(duration: duration, currentTime: currentTime, rate: rate)
NowPlayingInfo.shared.update(duration: duration, currentTime: currentTime, rate: self.rateManager.rate, defaultRate: self.rateManager.defaultRate)
}
}
// MARK: - Observer
public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if context == &playerContext {
if keyPath == #keyPath(AVPlayer.rate) {
logger.log("playerContext observer player rate")
self.setPlaybackRate(change?[.newKey] as? Float ?? 1.0, observed: true)
} else if keyPath == #keyPath(AVPlayer.currentItem) {
if keyPath == #keyPath(AVPlayer.currentItem) {
NotificationCenter.default.post(name: NSNotification.Name(PlayerEvents.update.rawValue), object: nil)
logger.log("WARNING: Item ended")
}
@@ -0,0 +1,23 @@
//
// AudioPlayerRateManager.swift
// Audiobookshelf
//
// Created by Marke Hallowell on 4/14/24.
//
import Foundation
import AVFoundation
protocol AudioPlayerRateManager {
var rate: Float { get }
var defaultRate: Float { get }
var rateChangedCompletion: () -> Void { get set }
var defaultRateChangedCompletion: () -> Void { get set }
init(audioPlayer: AVPlayer, defaultRate: Float)
func setPlaybackRate(_ rate: Float)
// Callback for play events (e.g. LegacyAudioPlayerRateManager uses this set rate immediately after playback resumes)
func handlePlayEvent() -> Void
}
@@ -22,7 +22,7 @@ extension AudioPlayer {
// Return the player time until sleep
var sleepTimeRemaining: Double? = nil
if let chapterStopAt = self.sleepTimeChapterStopAt {
sleepTimeRemaining = (chapterStopAt - currentTime) / Double(self.rate > 0 ? self.rate : 1.0)
sleepTimeRemaining = (chapterStopAt - currentTime) / Double(self.rateManager.rate > 0 ? self.rateManager.rate : 1.0)
} else if self.isCountdownSleepTimerSet() {
sleepTimeRemaining = self.sleepTimeRemaining
}
@@ -0,0 +1,94 @@
//
// DefaultedAudioPlayerRateManager.swift
// Audiobookshelf
//
// Created by Marke Hallowell on 4/14/24.
//
import Foundation
import AVFoundation
@available(iOS 16.0, *)
class DefaultedAudioPlayerRateManager: NSObject, AudioPlayerRateManager {
internal let logger = AppLogger(category: "DefaultedAudioPlayerRateManager")
internal var audioPlayer: AVPlayer
// MARK: - AudioPlayerRateManager
public private(set) var defaultRate: Float
public private(set) var rate: Float
public var rateChangedCompletion: () -> Void
public var defaultRateChangedCompletion: () -> Void
required init(audioPlayer: AVPlayer, defaultRate: Float) {
self.audioPlayer = audioPlayer
self.rateChangedCompletion = {}
self.defaultRateChangedCompletion = {}
self.rate = self.audioPlayer.rate
self.defaultRate = defaultRate
self.audioPlayer.defaultRate = defaultRate
super.init()
NotificationCenter.default.addObserver(self, selector: #selector(handleObservedRateChange), name: AVPlayer.rateDidChangeNotification, object: self.audioPlayer)
}
public func setPlaybackRate(_ rate: Float) {
self.handlePlaybackRateChange(rate, observed: false)
}
// No-op (player automatically resumes at last-known defaultRate)
public func handlePlayEvent() { }
// MARK: - Destructor
public func destroy() {
NotificationCenter.default.removeObserver(self, name: AVPlayer.rateDidChangeNotification, object: self.audioPlayer)
}
// MARK: - Internal
internal func handlePlaybackRateChange(_ rate: Float, observed: Bool = false) {
let playbackSpeedChanged = rate > 0.0 && rate != self.defaultRate
if playbackSpeedChanged {
self.defaultRate = rate
self.audioPlayer.defaultRate = rate
self.defaultRateChangedCompletion()
// Check to see if we also need to make a temporary rate change to player
if self.audioPlayer.rate > 0.0 {
if self.audioPlayer.rate != rate {
self.rate = rate
self.audioPlayer.rate = rate
self.rateChangedCompletion()
}
}
} else {
self.rate = rate
self.rateChangedCompletion()
}
}
// MARK: - iOS rate change notification handler
@objc internal func handleObservedRateChange(notification: Notification) {
// TODO: Consider handling cases individually (e.g. overall session impact?)
/*
guard let reason = notification.userInfo?[AVPlayer.rateDidChangeReasonKey] as? AVPlayer.RateDidChangeReason else {
return
}
switch reason {
case .appBackgrounded:
// App transitioned to the background.
case .audioSessionInterrupted:
// The system interrupts the app's audio session.
case .setRateCalled:
// The app set the player's rate.
case .setRateFailed:
// An attempt to change the player's rate failed.
default:
break
}
*/
self.handlePlaybackRateChange(self.audioPlayer.rate, observed: true)
}
}
@@ -0,0 +1,84 @@
//
// LegacyAudioPlayerRateManager.swift
// Audiobookshelf
//
// Created by Marke Hallowell on 4/14/24.
//
import Foundation
import AVFoundation
class LegacyAudioPlayerRateManager: NSObject, AudioPlayerRateManager {
internal let logger = AppLogger(category: "AudioPlayer")
internal var audioPlayer: AVPlayer
internal var managerContext = 0
// MARK: - AudioPlayerRateManager
public private(set) var defaultRate: Float
public private(set) var rate: Float
public var rateChangedCompletion: () -> Void
public var defaultRateChangedCompletion: () -> Void
required init(audioPlayer: AVPlayer, defaultRate: Float) {
self.rate = 0.0
self.defaultRate = defaultRate
self.audioPlayer = audioPlayer
self.rateChangedCompletion = {}
self.defaultRateChangedCompletion = {}
super.init()
self.audioPlayer.addObserver(self, forKeyPath: #keyPath(AVPlayer.rate), options: .new, context: &managerContext)
}
public func setPlaybackRate(_ rate: Float) {
self.handlePlaybackRateChange(rate, observed: false)
}
public func handlePlayEvent() {
DispatchQueue.runOnMainQueue {
self.audioPlayer.rate = self.defaultRate
}
}
// MARK: - Destructor
public func destroy() {
// Remove Observer
self.audioPlayer.removeObserver(self, forKeyPath: #keyPath(AVPlayer.rate), context: &managerContext)
}
// MARK: - Internal
internal func handlePlaybackRateChange(_ rate: Float, observed: Bool = false) {
let playbackSpeedChanged = rate > 0.0 && rate != self.defaultRate && !(observed && rate == 1)
if self.audioPlayer.rate != rate {
logger.log("setPlaybakRate rate changed from \(self.audioPlayer.rate) to \(rate)")
DispatchQueue.runOnMainQueue {
self.audioPlayer.rate = rate
}
}
self.rate = rate
self.rateChangedCompletion()
if playbackSpeedChanged {
self.defaultRate = rate
self.defaultRateChangedCompletion()
}
}
// MARK: - Observer
public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if context == &managerContext {
if keyPath == #keyPath(AVPlayer.rate) {
logger.log("playerContext observer player rate")
self.handlePlaybackRateChange(change?[.newKey] as? Float ?? 1.0, observed: true)
}
} else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
return
}
}
}
+5 -1
View File
@@ -38,7 +38,7 @@ class PlayerHandler {
public static var paused: Bool {
get {
guard let player = player else { return true }
return player.rate == 0.0
return player.rateManager.rate == 0.0
}
set(paused) {
if paused {
@@ -135,6 +135,10 @@ class PlayerHandler {
)
}
public static func updateRemoteTransportControls() {
self.player?.setupRemoteTransportControls()
}
// MARK: - Helper logic
private static func cleanupOldSessions(currentSessionId: String?) {
+2 -2
View File
@@ -53,14 +53,14 @@ class NowPlayingInfo {
self.setMetadata(artwork: artwork, metadata: metadata)
}
}
public func update(duration: Double, currentTime: Double, rate: Float, chapterName: String? = nil, chapterNumber: Int? = nil, chapterCount: Int? = nil) {
public func update(duration: Double, currentTime: Double, rate: Float, defaultRate: Float, chapterName: String? = nil, chapterNumber: Int? = nil, chapterCount: Int? = nil) {
// Update on the main to prevent access collisions
DispatchQueue.main.async { [weak self] in
if let self = self {
self.nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = duration
self.nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = currentTime
self.nowPlayingInfo[MPNowPlayingInfoPropertyPlaybackRate] = rate
self.nowPlayingInfo[MPNowPlayingInfoPropertyDefaultPlaybackRate] = 1.0
self.nowPlayingInfo[MPNowPlayingInfoPropertyDefaultPlaybackRate] = defaultRate
if let chapterName = chapterName, let chapterNumber = chapterNumber, let chapterCount = chapterCount {
+1 -2
View File
@@ -212,8 +212,7 @@ export default {
}
},
userUpdated(user) {
// console.log('[default] userUpdated:', JSON.stringify(user))
if (this.user && this.user.id == user.id) {
if (this.user?.id == user.id) {
this.$store.commit('user/setUser', user)
}
},
+3 -3
View File
@@ -1,12 +1,12 @@
{
"name": "audiobookshelf-app",
"version": "0.9.72-beta",
"version": "0.9.74-beta",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "audiobookshelf-app",
"version": "0.9.72-beta",
"version": "0.9.74-beta",
"dependencies": {
"@byteowls/capacitor-filesharer": "^5.0.0",
"@capacitor/android": "^5.0.0",
@@ -18622,4 +18622,4 @@
}
}
}
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "audiobookshelf-app",
"version": "0.9.72-beta",
"version": "0.9.74-beta",
"author": "advplyr",
"scripts": {
"dev": "nuxt --hostname 0.0.0.0 --port 1337",
@@ -48,4 +48,4 @@
"postcss": "^8.4.33",
"tailwindcss": "^3.4.1"
}
}
}
+7 -1
View File
@@ -28,7 +28,10 @@
<div class="relative z-10 px-3 py-4">
<!-- title -->
<div class="text-center mb-2">
<h1 class="text-xl font-semibold">{{ title }}</h1>
<div class="flex items-center justify-center">
<h1 class="text-xl font-semibold">{{ title }}</h1>
<widgets-explicit-indicator v-if="isExplicit" />
</div>
<p v-if="subtitle" class="text-fg text-base">{{ subtitle }}</p>
</div>
@@ -436,6 +439,9 @@ export default {
isInvalid() {
return this.libraryItem.isInvalid
},
isExplicit() {
return !!this.mediaMetadata.explicit
},
showPlay() {
return !this.isMissing && !this.isInvalid && (this.numTracks || this.episodes.length)
},
+1 -1
View File
@@ -2,7 +2,7 @@
<div class="w-full h-full py-6 px-2">
<div v-if="localLibraryItem" class="w-full h-full">
<div class="px-2 flex items-center mb-2">
<p class="text-base font-semibold">{{ mediaMetadata.title }}</p>
<p class="text-base font-semibold truncate">{{ mediaMetadata.title }}</p>
<div class="flex-grow" />
<button v-if="audioTracks.length && !isPodcast" class="shadow-sm text-success flex items-center justify-center rounded-full mx-2" @click.stop="play">
+18 -2
View File
@@ -24,7 +24,7 @@
</div>
</div>
<modals-item-more-menu-modal v-model="showMoreMenu" :library-item="selectedLibraryItem" :episode="selectedEpisode" hide-rss-feed-option :processing.sync="processing" />
<modals-item-more-menu-modal v-model="showMoreMenu" :library-item="selectedLibraryItem" :episode="selectedEpisode" :playlist="playlist" hide-rss-feed-option :processing.sync="processing" />
<div v-show="processing" class="fixed top-0 left-0 w-screen h-screen flex items-center justify-center bg-black/50 z-50">
<ui-loading-indicator />
</div>
@@ -140,8 +140,24 @@ export default {
this.$eventBus.$emit('play-item', { libraryItemId: nextItem.libraryItemId, episodeId: nextItem.episodeId })
}
}
},
playlistUpdated(playlist) {
if (this.playlist.id !== playlist.id) return
this.playlist = playlist
},
playlistRemoved(playlist) {
if (this.playlist.id === playlist.id) {
this.$router.replace('/bookshelf/playlists')
}
}
},
mounted() {}
mounted() {
this.$socket.$on('playlist_updated', this.playlistUpdated)
this.$socket.$on('playlist_removed', this.playlistRemoved)
},
beforeDestroy() {
this.$socket.$off('playlist_updated', this.playlistUpdated)
this.$socket.$off('playlist_removed', this.playlistRemoved)
}
}
</script>
+12
View File
@@ -61,6 +61,12 @@
<p class="pl-4">{{ $strings.LabelEnableMp3IndexSeeking }}</p>
<span class="material-icons-outlined ml-2" @click.stop="showConfirmMp3IndexSeeking">info</span>
</div>
<div class="flex items-center py-3">
<div class="w-10 flex justify-center" @click="toggleAllowSeekingOnMediaControls">
<ui-toggle-switch v-model="settings.allowSeekingOnMediaControls" @input="saveSettings" />
</div>
<p class="pl-4">{{ $strings.LabelAllowSeekingOnMediaControls }}</p>
</div>
<!-- Sleep timer settings -->
<template v-if="!isiOS">
@@ -154,6 +160,7 @@ export default {
settings: {
disableAutoRewind: false,
enableAltView: true,
allowSeekingOnMediaControls: false,
jumpForwardTime: 10,
jumpBackwardsTime: 10,
enableMp3IndexSeeking: false,
@@ -429,6 +436,10 @@ export default {
this.settings.enableAltView = !this.settings.enableAltView
this.saveSettings()
},
toggleAllowSeekingOnMediaControls() {
this.settings.allowSeekingOnMediaControls = !this.settings.allowSeekingOnMediaControls
this.saveSettings()
},
getCurrentOrientation() {
const orientation = window.screen?.orientation || {}
const type = orientation.type || ''
@@ -471,6 +482,7 @@ export default {
const deviceSettings = this.deviceData.deviceSettings || {}
this.settings.disableAutoRewind = !!deviceSettings.disableAutoRewind
this.settings.enableAltView = !!deviceSettings.enableAltView
this.settings.allowSeekingOnMediaControls = !!deviceSettings.allowSeekingOnMediaControls
this.settings.jumpForwardTime = deviceSettings.jumpForwardTime || 10
this.settings.jumpBackwardsTime = deviceSettings.jumpBackwardsTime || 10
this.settings.enableMp3IndexSeeking = !!deviceSettings.enableMp3IndexSeeking
+5 -1
View File
@@ -14,11 +14,15 @@ const languageCodeMap = {
'hr': { label: 'Hrvatski', dateFnsLocale: 'hr' },
'it': { label: 'Italiano', dateFnsLocale: 'it' },
'lt': { label: 'Lietuvių', dateFnsLocale: 'lt' },
'hu': { label: 'Magyar', dateFnsLocale: 'hu' },
'nl': { label: 'Nederlands', dateFnsLocale: 'nl' },
'no': { label: 'Norsk', dateFnsLocale: 'no' },
'pl': { label: 'Polski', dateFnsLocale: 'pl' },
'pt-br': { label: 'Português (Brasil)', dateFnsLocale: 'ptBR' },
'ru': { label: 'Русский', dateFnsLocale: 'ru' },
'sv': { label: 'Svenska', dateFnsLocale: 'sv' },
'uk': { label: 'Українська', dateFnsLocale: 'uk' },
'vi-vn': { label: 'Tiếng Việt', dateFnsLocale: 'vi' },
'zh-cn': { label: '简体中文 (Simplified Chinese)', dateFnsLocale: 'zhCN' },
}
@@ -131,4 +135,4 @@ async function initialize() {
export default ({ app, store }, inject) => {
$localStore = app.$localStore
initialize()
}
}
+8 -5
View File
@@ -48,11 +48,7 @@ class ServerSocket extends EventEmitter {
this.socket.on('init', this.onInit.bind(this))
this.socket.on('user_updated', this.onUserUpdated.bind(this))
this.socket.on('user_item_progress_updated', this.onUserItemProgressUpdated.bind(this))
// Good for testing socket requests
// this.socket.onAny((evt, args) => {
// console.log(`[SOCKET] onAny: ${this.socket.id}: ${evt} ${JSON.stringify(args)}`)
// })
this.socket.on('playlist_added', this.onPlaylistAdded.bind(this))
}
removeListeners() {
@@ -93,6 +89,13 @@ class ServerSocket extends EventEmitter {
this.$store.commit('user/updateUserMediaProgress', payload.data)
this.emit('user_media_progress_updated', payload)
}
onPlaylistAdded() {
// Currently numUserPlaylists is only used for showing the playlist tab or not. Precise number is not necessary
if (!this.$store.state.libraries.numUserPlaylists) {
this.$store.commit('libraries/setNumUserPlaylists', 1)
}
}
}
export default ({ app, store }, inject) => {
+2
View File
@@ -25,6 +25,8 @@ Join us on [discord](https://discord.gg/pJsjuNCKRq) or [Matrix](https://matrix.t
This application is built using [NuxtJS](https://nuxtjs.org/) and [Capacitor](https://capacitorjs.com/) in order to run on both iOS and Android on the same code base.
Information on helping with translations of the apps [here](https://www.audiobookshelf.org/faq#how-do-i-help-with-translations).
### Windows Environment Setup for Android
Required Software:
+17
View File
@@ -1,3 +1,5 @@
import { Browser } from '@capacitor/browser'
export const state = () => ({
user: null,
serverConnectionConfig: null,
@@ -115,6 +117,21 @@ export const actions = {
commit('setSettings', userSettings)
this.$eventBus.$emit('user-settings', state.settings)
}
},
async openWebClient({ getters }, path = null) {
const serverAddress = getters.getServerAddress
if (!serverAddress) {
console.error('openWebClient: No server address')
return
}
try {
let url = serverAddress.replace(/\/$/, '') // Remove trailing slash
if (path?.startsWith('/')) url += path
await Browser.open({ url })
} catch (error) {
console.error('Error opening browser', error)
}
}
}
+162 -158
View File
@@ -1,52 +1,53 @@
{
"ButtonAdd": "Přidat",
"ButtonAddNewServer": "Add New Server",
"ButtonAddNewServer": "Přidat nový server",
"ButtonAuthors": "Autoři",
"ButtonBack": "Back",
"ButtonBack": "Zpět",
"ButtonCancel": "Zrušit",
"ButtonCancelTimer": "Cancel Timer",
"ButtonCancelTimer": "Zrušit časovač",
"ButtonClearFilter": "Vymazat filtr",
"ButtonCloseFeed": "Zavřít kanál",
"ButtonCollections": "Kolekce",
"ButtonConnect": "Connect",
"ButtonConnectToServer": "Connect to Server",
"ButtonConnect": "Připojit",
"ButtonConnectToServer": "Připojit k serveru",
"ButtonCreate": "Vytvořit",
"ButtonCreateBookmark": "Create Bookmark",
"ButtonCreateNewPlaylist": "Create New Playlist",
"ButtonCreateBookmark": "Vytvořit záložku",
"ButtonCreateNewPlaylist": "Vytvořit nový seznam skladeb",
"ButtonDelete": "Smazat",
"ButtonDeleteLocalEpisode": "Delete local episode",
"ButtonDeleteLocalFile": "Delete local file",
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonHistory": "History",
"ButtonDeleteLocalEpisode": "Smazat místní epizodu",
"ButtonDeleteLocalFile": "Smazat místní soubor",
"ButtonDeleteLocalItem": "Smazat místní položku",
"ButtonDisableAutoTimer": "Zakázat automatický časovač",
"ButtonDisconnect": "Odpojit",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "Historie",
"ButtonHome": "Domů",
"ButtonIssues": "Problémy",
"ButtonLatest": "Nejnovější",
"ButtonLibrary": "Knihovna",
"ButtonLocalMedia": "Local Media",
"ButtonManageLocalFiles": "Manage Local Files",
"ButtonNewFolder": "New Folder",
"ButtonNextEpisode": "Next Episode",
"ButtonLocalMedia": "Místní média",
"ButtonManageLocalFiles": "Spravovat místní soubory",
"ButtonNewFolder": "Nová složka",
"ButtonNextEpisode": "Další epizoda",
"ButtonOpenFeed": "Otevřít kanál",
"ButtonOverride": "Override",
"ButtonPause": "Pause",
"ButtonOverride": "Přepsat",
"ButtonPause": "Pozastavit",
"ButtonPlay": "Přehrát",
"ButtonPlaying": "Hraje",
"ButtonPlaying": "Přehrává se",
"ButtonPlaylists": "Seznamy skladeb",
"ButtonRead": "Číst",
"ButtonRemove": "Odstranit",
"ButtonRemoveFromServer": "Remove from Server",
"ButtonRemoveFromServer": "Odstranit ze serveru",
"ButtonSave": "Uložit",
"ButtonSaveOrder": "Save Order",
"ButtonSaveOrder": "Uložit pořadí",
"ButtonSearch": "Hledat",
"ButtonSendEbookToDevice": "Send Ebook to Device",
"ButtonSendEbookToDevice": "Odeslat e-knihu na zařízení",
"ButtonSeries": "Série",
"ButtonSetTimer": "Set Timer",
"ButtonStream": "Stream",
"ButtonSetTimer": "Nastavit časovač",
"ButtonStream": "Streamovat",
"ButtonSubmit": "Odeslat",
"ButtonSwitchServerUser": "Switch Server/User",
"ButtonUserStats": "User Stats",
"ButtonSwitchServerUser": "Přepnout server/uživatele",
"ButtonUserStats": "Statistiky uživatele",
"ButtonYes": "Ano",
"HeaderAccount": "Účet",
"HeaderAdvanced": "Pokročilé",
@@ -54,132 +55,133 @@
"HeaderChapters": "Kapitoly",
"HeaderCollection": "Kolekce",
"HeaderCollectionItems": "Položky kolekce",
"HeaderConnectionStatus": "Connection Status",
"HeaderConnectionStatus": "Stav připojení",
"HeaderDetails": "Podrobnosti",
"HeaderDownloads": "Downloads",
"HeaderEbookFiles": "Soubory elektronických knih",
"HeaderDownloads": "Stahování",
"HeaderEbookFiles": "Soubory e-knih",
"HeaderEpisodes": "Epizody",
"HeaderEreaderSettings": "Nastavení čtečky elektronických knih",
"HeaderLatestEpisodes": "Poslední epizody",
"HeaderEreaderSettings": "Nastavení čtečky e-knih",
"HeaderLatestEpisodes": "Nejnovější epizody",
"HeaderLibraries": "Knihovny",
"HeaderLocalFolders": "Local Folders",
"HeaderLocalLibraryItems": "Local Library Items",
"HeaderNewPlaylist": "New Playlist",
"HeaderLocalFolders": "Místní složky",
"HeaderLocalLibraryItems": "Místní položky knihovny",
"HeaderNewPlaylist": "Nový seznam skladeb",
"HeaderOpenRSSFeed": "Otevřít RSS kanál",
"HeaderPlaybackSettings": "Playback Settings",
"HeaderPlaybackSettings": "Nastavení přehrávání",
"HeaderPlaylist": "Seznam skladeb",
"HeaderPlaylistItems": "Položky seznamu přehrávání",
"HeaderRSSFeed": "RSS Feed",
"HeaderRSSFeedGeneral": "Podrobnosti o RSS",
"HeaderRSSFeedIsOpen": "Informační kanál RSS je otevřený",
"HeaderSelectDownloadLocation": "Select Download Location",
"HeaderRSSFeed": "RSS kanál",
"HeaderRSSFeedGeneral": "Detaily RSS",
"HeaderRSSFeedIsOpen": "Kanál RSS je otevřen",
"HeaderSelectDownloadLocation": "Vyberte umístění pro stažení",
"HeaderSettings": "Nastavení",
"HeaderSleepTimer": "Časovač vypnutí",
"HeaderSleepTimerSettings": "Sleep Timer Settings",
"HeaderStatsMinutesListeningChart": "Počet minut poslechu (posledních 7 dní)",
"HeaderStatsRecentSessions": "Poslední relace",
"HeaderSleepTimer": "Časovač spánku",
"HeaderSleepTimerSettings": "Nastavení časovače spánku",
"HeaderStatsMinutesListeningChart": "Minuty poslechu (posledních 7 dní)",
"HeaderStatsRecentSessions": "Poslední sezení",
"HeaderTableOfContents": "Obsah",
"HeaderUserInterfaceSettings": "User Interface Settings",
"HeaderUserInterfaceSettings": "Nastavení uživatelského rozhraní",
"HeaderYourStats": "Vaše statistiky",
"LabelAdded": "Přidáno",
"LabelAddedAt": "Přidáno v",
"LabelAddToPlaylist": "Přidat do seznamu přehrávání",
"LabelAddToPlaylist": "Přidat do seznamu skladeb",
"LabelAll": "Vše",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (jméno a příjmení)",
"LabelAuthorLastFirst": "Autor (příjmení a jméno)",
"LabelAuthors": "Autoři",
"LabelAutoDownloadEpisodes": "Automaticky stahovat epizody",
"LabelAutoRewindTime": "Auto rewind time",
"LabelAutoSleepTimer": "Auto sleep timer",
"LabelAutoSleepTimerAutoRewind": "Auto sleep timer auto rewind",
"LabelAutoSleepTimerAutoRewindHelp": "When the auto sleep timer finishes, playing the item again will automatically rewind your position.",
"LabelAutoSleepTimerHelp": "When playing media between the specified start and end times a sleep timer will automatically start.",
"LabelAutoRewindTime": "Přetočit zpět o",
"LabelAutoSleepTimer": "Automatický časovač spánku",
"LabelAutoSleepTimerAutoRewind": "Přetočit zpět po uspání",
"LabelAutoSleepTimerAutoRewindHelp": "Když dojde k uspání automatickým časovačem spánku, pozice přehrávání je posunuta zpět o vybraný čas.",
"LabelAutoSleepTimerHelp": "hem přehrávání média v časovém rozmezí \"Od\" a \"Do\" se automaticky spustí časovač spánku.",
"LabelBooks": "Knihy",
"LabelChapters": "Kapitoly",
"LabelChapterTrack": "Chapter Track",
"LabelChapterTrack": "Stopa kapitoly",
"LabelClosePlayer": "Zavřít přehrávač",
"LabelCollapseSeries": "Sbalit sérii",
"LabelComplete": "Dokončeno",
"LabelContinueBooks": "Continue Books",
"LabelContinueEpisodes": "Continue Episodes",
"LabelContinueListening": "Continue Listening",
"LabelContinueReading": "Continue Reading",
"LabelContinueSeries": "Continue Series",
"LabelCustomTime": "Custom time",
"LabelContinueBooks": "Pokračovat v knihách",
"LabelContinueEpisodes": "Pokračovat v epizodách",
"LabelContinueListening": "Pokračovat v poslechu",
"LabelContinueReading": "Pokračovat ve čtení",
"LabelContinueSeries": "Pokračovat v sériích",
"LabelCustomTime": "Vlastní čas",
"LabelDescription": "Popis",
"LabelDisableAudioFadeOut": "Disable audio fade out",
"LabelDisableAudioFadeOutHelp": "Audio volume will start decreasing when there is less than 1 minute remaining on the sleep timer. Enable this setting to not fade out.",
"LabelDisableAutoRewind": "Disable auto rewind",
"LabelDisableShakeToReset": "Disable shake to reset",
"LabelDisableShakeToResetHelp": "Shaking your device while the timer is running OR within 2 minutes of the timer expiring will reset the sleep timer. Enable this setting to disable shake to reset.",
"LabelDisableVibrateOnReset": "Disable vibrate on reset",
"LabelDisableVibrateOnResetHelp": "When the sleep timer gets reset your device will vibrate. Enable this setting to not vibrate when the sleep timer resets.",
"LabelDiscover": "Discover",
"LabelDisableAudioFadeOut": "Vypnout postupné snižování zvuku",
"LabelDisableAudioFadeOutHelp": "Hlasitost zvuku začne klesat, pokud zbývá méně než 1 minuta do vypršení časovače spánku. Tuto možnost povolte, pokud nechcete postupné snižování hlasitosti.",
"LabelDisableAutoRewind": "Zakázat automatické přetočení",
"LabelDisableShakeToReset": "Zakázat resetování otřesem",
"LabelDisableShakeToResetHelp": "Když je časovač spánku spuštěn nebo zbýva 2 minuty do jeho vypršení, zatřesení zařízením se resetuje časovač spánku. Povolte toto nastavení, pokud chcete resetování otřesem zakázat.",
"LabelDisableVibrateOnReset": "Zakázat vibraci při resetování",
"LabelDisableVibrateOnResetHelp": "Když je časovač spánku resetován, zařízení zavibruje. Tuto možnost povolte, pokud nechcete, aby zařízení vibrace provádělo při resetování časovače spánku.",
"LabelDiscover": "Objevit",
"LabelDownload": "Stáhnout",
"LabelDownloaded": "Downloaded",
"LabelDuration": "Doba trvání",
"LabelEbook": "Elektronická kniha",
"LabelEbooks": "Ebooks",
"LabelDownloaded": "Staženo",
"LabelDuration": "Trvání",
"LabelEbook": "E-kniha",
"LabelEbooks": "E-knihy",
"LabelEnable": "Povolit",
"LabelEnableMp3IndexSeeking": "Enable mp3 index seeking",
"LabelEnableMp3IndexSeekingHelp": "This setting should only be enabled if you have mp3 files that are not seeking correctly. Inaccurate seeking is most likely due to Variable birate (VBR) MP3 files. This setting will force index seeking, in which a time-to-byte mapping is built as the file is read. In some cases with large MP3 files there will be a delay when seeking towards the end of the file.",
"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.",
"LabelEnd": "Konec",
"LabelEndOfChapter": "End of Chapter",
"LabelEndTime": "End time",
"LabelEndOfChapter": "Konec kapitoly",
"LabelEndTime": "Do",
"LabelEpisode": "Epizoda",
"LabelFeedURL": "URL zdroje",
"LabelFeedURL": "URL kanálu",
"LabelFile": "Soubor",
"LabelFileBirthtime": "Čas vzniku souboru",
"LabelFileModified": "Soubor změněn",
"LabelFileBirthtime": "Čas vytvoření souboru",
"LabelFileModified": "Soubor upraven",
"LabelFilename": "Název souboru",
"LabelFinished": "Dokončeno",
"LabelFolder": "Složka",
"LabelFontScale": "Měřítko písma",
"LabelGenre": "Žánr",
"LabelGenres": "Žánry",
"LabelHapticFeedback": "Haptic feedback",
"LabelHasEbook": "Has ebook",
"LabelHasSupplementaryEbook": "Has supplementary ebook",
"LabelHeavy": "Heavy",
"LabelHigh": "High",
"LabelHapticFeedback": "Haptická odezva",
"LabelHasEbook": "Má e-knihu",
"LabelHasSupplementaryEbook": "Má doplňkovou e-knihu",
"LabelHeavy": "Těžké",
"LabelHigh": "Vysoké",
"LabelHost": "Hostitel",
"LabelIncomplete": "Neúplné",
"LabelInProgress": "Probíhá",
"LabelInternalAppStorage": "Internal App Storage",
"LabelJumpBackwardsTime": "Jump backwards time",
"LabelJumpForwardsTime": "Jump forwards time",
"LabelInternalAppStorage": "Interní úložiště aplikace",
"LabelJumpBackwardsTime": "Délka skoku zpět v čase",
"LabelJumpForwardsTime": "Délka skoku vpřed v čase",
"LabelLanguage": "Jazyk",
"LabelLayout": "Layout",
"LabelLayoutAuto": "Auto",
"LabelLayoutSinglePage": "Single page",
"LabelLight": "Light",
"LabelLayout": "Rozvržení",
"LabelLayoutAuto": "Automatické",
"LabelLayoutSinglePage": "Jedna stránka",
"LabelLight": "Světlé",
"LabelLineSpacing": "Řádkování",
"LabelListenAgain": "Listen Again",
"LabelLocalBooks": "Local Books",
"LabelLocalPodcasts": "Local Podcasts",
"LabelLockOrientation": "Lock orientation",
"LabelLockPlayer": "Lock Player",
"LabelLow": "Low",
"LabelListenAgain": "Poslechnout znovu",
"LabelLocalBooks": "Místní knihy",
"LabelLocalPodcasts": "Místní podcasty",
"LabelLockOrientation": "Zamknout orientaci",
"LabelLockPlayer": "Zamknout přehrávač",
"LabelLow": "Nízké",
"LabelMediaType": "Typ média",
"LabelMedium": "Medium",
"LabelMedium": "Střední",
"LabelMore": "Více",
"LabelMoreInfo": "Více informací",
"LabelName": "Jméno",
"LabelNarrator": "Interpret",
"LabelNarrators": "Interpreti",
"LabelNewestAuthors": "Newest Authors",
"LabelNewestEpisodes": "Newest Episodes",
"LabelNo": "No",
"LabelNarrator": "Vypravěč",
"LabelNarrators": "Vypravěči",
"LabelNewestAuthors": "Nejnovější autoři",
"LabelNewestEpisodes": "Nejnovější epizody",
"LabelNo": "Ne",
"LabelNotFinished": "Nedokončeno",
"LabelNotStarted": "Nezahájeno",
"LabelOff": "Off",
"LabelOff": "Vypnout",
"LabelPassword": "Heslo",
"LabelPath": "Cesta",
"LabelPlaybackDirect": "Direct",
"LabelPlaybackLocal": "Local",
"LabelPlaybackSpeed": "Playback Speed",
"LabelPlaybackTranscode": "Transcode",
"LabelPlaybackDirect": "Přímé",
"LabelPlaybackLocal": "Místní",
"LabelPlaybackSpeed": "Rychlost přehrávání",
"LabelPlaybackTranscode": "Překódovává se",
"LabelPodcast": "Podcast",
"LabelPodcasts": "Podcasty",
"LabelPreventIndexing": "Zabránit indexování vašeho kanálu v adresářích podcastů iTunes a Google",
@@ -187,96 +189,98 @@
"LabelPubDate": "Datum vydání",
"LabelPublishYear": "Rok vydání",
"LabelRead": "Číst",
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelReadAgain": "Číst znovu",
"LabelRecentlyAdded": "Nedávno přidáno",
"LabelRecentSeries": "Nedávné série",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Vlastní e-mail vlastníka",
"LabelRSSFeedCustomOwnerName": "Vlastní jméno vlastníka",
"LabelRSSFeedPreventIndexing": "Zabránit indexování",
"LabelRSSFeedSlug": "RSS kanál Slug",
"LabelScaleElapsedTimeBySpeed": "Scale Elapsed Time by Speed",
"LabelRSSFeedSlug": "Klíčové slovo kanálu RSS",
"LabelScaleElapsedTimeBySpeed": "Škálovat uplynulý čas podle rychlosti",
"LabelSeason": "Sezóna",
"LabelSelectADevice": "Select a device",
"LabelSelectADevice": "Vyberte zařízení",
"LabelSeries": "Série",
"LabelServerAddress": "Server address",
"LabelServerAddress": "Adresa serveru",
"LabelSetEbookAsPrimary": "Nastavit jako primární",
"LabelSetEbookAsSupplementary": "Nastavit jako doplňkové",
"LabelShakeSensitivity": "Shake sensitivity",
"LabelSetEbookAsSupplementary": "Nastavit jako doplňkový",
"LabelShakeSensitivity": "Citlivost na otřes",
"LabelShowAll": "Zobrazit vše",
"LabelSize": "Velikost",
"LabelSleepTimer": "Časovač vypnutí",
"LabelStart": "Spustit",
"LabelStartTime": "Čas Spuštění",
"LabelSleepTimer": "Spánek po",
"LabelStart": "Začít",
"LabelStartTime": "Od",
"LabelStatsBestDay": "Nejlepší den",
"LabelStatsDailyAverage": "Denní průměr",
"LabelStatsDays": "Dny",
"LabelStatsDaysListened": "Dny poslechu",
"LabelStatsInARow": "v řadě",
"LabelStatsItemsFinished": "Dokončené Položky",
"LabelStatsItemsFinished": "Dokončené položky",
"LabelStatsMinutes": "minut",
"LabelStatsMinutesListening": "Minuty poslechu",
"LabelStatsWeekListening": "Týdenní poslech",
"LabelTag": "Značka",
"LabelTags": "Značky",
"LabelStatsWeekListening": "Za týden",
"LabelTag": "Štítek",
"LabelTags": "Štítky",
"LabelTheme": "Téma",
"LabelThemeDark": "Tmavé",
"LabelThemeLight": "Světlé",
"LabelTimeRemaining": "{0} zbývá",
"LabelTitle": "Název",
"LabelTotalTrack": "Total Track",
"LabelTotalTrack": "Celková stopa",
"LabelTracks": "Stopy",
"LabelType": "Typ",
"LabelUnlockPlayer": "Unlock Player",
"LabelUseBookshelfView": "Use bookshelf view",
"LabelUnlockPlayer": "Odemknout přehrávač",
"LabelUseBookshelfView": "Použít vzhled knihovny",
"LabelUser": "Uživatel",
"LabelUsername": "Uživatelské jméno",
"LabelVeryHigh": "Very High",
"LabelVeryLow": "Very Low",
"LabelVeryHigh": "Velmi vysoké",
"LabelVeryLow": "Velmi nízké",
"LabelYourBookmarks": "Vaše záložky",
"LabelYourProgress": "Váš pokrok",
"MessageAndroid10Downloads": "Android 10 and below will use internal app storage for downloads.",
"MessageAttemptingServerConnection": "Attempting server connection...",
"MessageAudiobookshelfServerNotConnected": "Audiobookshelf server not connected",
"MessageAudiobookshelfServerRequired": "<strong>Important!</strong> This app is designed to work with an Audiobookshelf server that you or someone you know is hosting. This app does not provide any content.",
"MessageBookshelfEmpty": "Bookshelf empty",
"MessageConfirmDeleteLocalEpisode": "Remove local episode \"{0}\" from your device? The file on the server will be unaffected.",
"MessageConfirmDeleteLocalFiles": "Remove local files of this item from your device? The files on the server and your progress will be unaffected.",
"MessageConfirmDiscardProgress": "Are you sure you want to reset your progress?",
"MessageConfirmMarkAsFinished": "Are you sure you want to mark this item as finished?",
"MessageConfirmRemoveBookmark": "Are you sure you want to remove bookmark?",
"MessageDiscardProgress": "Discard Progress",
"MessageDownloadCompleteProcessing": "Download complete. Processing...",
"MessageDownloading": "Downloading...",
"MessageAndroid10Downloads": "Android 10 a starší budou používat interní úložiště aplikace pro stahování.",
"MessageAttemptingServerConnection": "Pokouším se o připojit k serveru...",
"MessageAudiobookshelfServerNotConnected": "Server Audiobookshelf není připojen",
"MessageAudiobookshelfServerRequired": "<strong>Důležité!</strong> Tato aplikace je navržena, aby pracovala se serverem Audiobookshelf, který hostuje buď vy, nebo někdo, koho znáte. Tato aplikace neposkytuje žádný obsah.",
"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.",
"MessageConfirmDiscardProgress": "Opravdu chcete zahodit svůj pokrok?",
"MessageConfirmMarkAsFinished": "Opravdu chcete tuto položku označit jako dokončenou?",
"MessageConfirmRemoveBookmark": "Opravdu chcete odebrat záložku?",
"MessageDiscardProgress": "Zahodit pokrok",
"MessageDownloadCompleteProcessing": "Stahování dokončeno. Zpracovává se...",
"MessageDownloading": "Stahuje se...",
"MessageDownloadingEpisode": "Stahuji epizodu",
"MessageEpisodesQueuedForDownload": "{0} epizody zařazené do fronty ke stažení",
"MessageEpisodesQueuedForDownload": "{0} epizod ve frontě ke stažení",
"MessageFeedURLWillBe": "URL zdroje bude {0}",
"MessageFetching": "Stahování...",
"MessageFollowTheProjectOnGithub": "Follow the project on Github",
"MessageItemDownloadCompleteFailedToCreate": "Item download complete but failed to create library item",
"MessageFetching": "Získává se...",
"MessageFollowTheProjectOnGithub": "Sledujte projekt na GitHubu",
"MessageItemDownloadCompleteFailedToCreate": "Stahování položky bylo dokončeno, ale nepodařilo se vytvořit položku v knihovně",
"MessageLoading": "Načítá se...",
"MessageLoadingServerData": "Loading server data...",
"MessageLoadingServerData": "Načítání dat ze serveru...",
"MessageMarkAsFinished": "Označit jako dokončené",
"MessageMediaLinkedToADifferentServer": "Media is linked to an Audiobookshelf server on a different address ({0}). Progress will be synced when connected to this server address.",
"MessageMediaLinkedToADifferentUser": "Media is linked to this server but was downloaded by a different user. Progress will only be synced to the user that downloaded it.",
"MessageMediaLinkedToServer": "Linked to server {0}",
"MessageMediaLinkedToThisServer": "Downloaded media is linked to this server",
"MessageMediaNotLinkedToServer": "Media is not linked to an Audiobookshelf server. No progress will be synced.",
"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.",
"MessageMediaLinkedToServer": "Propojeno se serverem {0}",
"MessageMediaLinkedToThisServer": "Stažená média jsou propojena s tímto serverem",
"MessageMediaNotLinkedToServer": "Média nejsou propojena se serverem Audiobookshelf. Pokrok nebude synchronizován.",
"MessageNoBookmarks": "Žádné záložky",
"MessageNoChapters": "Žádné kapitoly",
"MessageNoItems": "Žádné položky",
"MessageNoItemsFound": "Nebyly nalezeny žádné položky",
"MessageNoListeningSessions": "Žádné poslechové relace",
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoMediaFolders": "Žádné složky médií",
"MessageNoNetworkConnection": "Žádné připojení k síti",
"MessageNoPodcastsFound": "Nebyly nalezeny žádné podcasty",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Nebyly nutné žádné aktualizace",
"MessageNoUserPlaylists": "Nemáte žádné seznamy skladeb",
"MessageReportBugsAndContribute": "Hlásit chyby, žádat o funkce a přispívat",
"MessageSocketConnectedOverMeteredCellular": "Socket connected over metered cellular",
"MessageSocketConnectedOverMeteredWifi": "Socket connected over metered wifi",
"MessageSocketConnectedOverUnmeteredCellular": "Socket connected over unmetered cellular",
"MessageSocketConnectedOverUnmeteredWifi": "Socket connected over unmetered wifi",
"MessageSocketNotConnected": "Socket not connected",
"MessageReportBugsAndContribute": "Nahlašte chyby, vyžádejte si funkce a přispěte na",
"MessageSocketConnectedOverMeteredCellular": "Socket připojen přes měřenou mobilní síť",
"MessageSocketConnectedOverMeteredWifi": "Socket připojen přes měřenou wifi",
"MessageSocketConnectedOverUnmeteredCellular": "Socket připojen přes neměřenou mobilní síť",
"MessageSocketConnectedOverUnmeteredWifi": "Socket připojen přes neměřenou wifi",
"MessageSocketNotConnected": "Socket není připojen",
"NoteRSSFeedPodcastAppsHttps": "Upozornění: Většina aplikací pro podcasty bude vyžadovat, aby adresa URL kanálu RSS používala protokol HTTPS",
"NoteRSSFeedPodcastAppsPubDate": "Upozornění: 1 nebo více epizod nemá datum vydání. Některé podcastové aplikace to vyžadují.",
"ToastBookmarkCreateFailed": "Vytvoření záložky se nezdařilo",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "History",
"ButtonHome": "Hjem",
"ButtonIssues": "Problemer",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Tilføjet Kl.",
"LabelAddToPlaylist": "Tilføj til Afspilningsliste",
"LabelAll": "Alle",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Forfatter",
"LabelAuthorFirstLast": "Forfatter (Fornavn Efternavn)",
"LabelAuthorLastFirst": "Forfatter (Efternavn, Fornavn)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Brugerdefineret ejerens e-mail",
"LabelRSSFeedCustomOwnerName": "Brugerdefineret ejerens navn",
"LabelRSSFeedPreventIndexing": "Forhindrer indeksering",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoPodcastsFound": "Ingen podcasts fundet",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Ingen opdateringer var nødvendige",
"MessageNoUserPlaylists": "Du har ingen afspilningslister",
"MessageReportBugsAndContribute": "Rapporter fejl, anmod om funktioner og bidrag på",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Lösche lokales Element",
"ButtonDisableAutoTimer": "Deaktiviere automatischen Timer",
"ButtonDisconnect": "Trennen",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "Historie",
"ButtonHome": "Startseite",
"ButtonIssues": "Probleme",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Hinzugefügt am",
"LabelAddToPlaylist": "Zur Wiedergabeliste hinzufügen",
"LabelAll": "Alle",
"LabelAllowSeekingOnMediaControls": "Erlaube Vor- und Zurückspulen auf dem Medienkontrollelement bei den Benachrichtigungen",
"LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Vorname Nachname)",
"LabelAuthorLastFirst": "Autor (Nachname, Vorname)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Erneut lesen",
"LabelRecentlyAdded": "Kürzlich hinzugefügt",
"LabelRecentSeries": "Aktuelle Serien",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Benutzerdefinierte Eigentümer-E-Mail",
"LabelRSSFeedCustomOwnerName": "Benutzerdefinierter Name des Eigentümers",
"LabelRSSFeedPreventIndexing": "Indizierung verhindern",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "Keine Medien Ordner",
"MessageNoNetworkConnection": "Keine Netzwerkverbindung",
"MessageNoPodcastsFound": "Keine Podcasts gefunden",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Keine Aktualisierungen waren notwendig",
"MessageNoUserPlaylists": "Keine Wiedergabelisten vorhanden",
"MessageReportBugsAndContribute": "Fehler melden, Funktionen anfordern und mitwirken",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "History",
"ButtonHome": "Home",
"ButtonIssues": "Issues",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Added At",
"LabelAddToPlaylist": "Add to Playlist",
"LabelAll": "All",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Author",
"LabelAuthorFirstLast": "Author (First Last)",
"LabelAuthorLastFirst": "Author (Last, First)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Custom owner Email",
"LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedPreventIndexing": "Prevent Indexing",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoPodcastsFound": "No podcasts found",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "No updates were necessary",
"MessageNoUserPlaylists": "You have no playlists",
"MessageReportBugsAndContribute": "Report bugs, request features, and contribute on",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "History",
"ButtonHome": "Inicio",
"ButtonIssues": "Problemas",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Añadido",
"LabelAddToPlaylist": "Añadido a la Lista de Reproducción",
"LabelAll": "Todos",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Nombre Apellido)",
"LabelAuthorLastFirst": "Autor (Apellido, Nombre)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Email de dueño personalizado",
"LabelRSSFeedCustomOwnerName": "Nombre de dueño personalizado",
"LabelRSSFeedPreventIndexing": "Prevenir Indexado",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoPodcastsFound": "Ningún podcast encontrado",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "No fue necesario actualizar",
"MessageNoUserPlaylists": "No tienes lista de reproducciones",
"MessageReportBugsAndContribute": "Reporte erres, solicite funciones y contribuya en",
+145 -141
View File
@@ -1,52 +1,53 @@
{
"ButtonAdd": "Ajouter",
"ButtonAddNewServer": "Add New Server",
"ButtonAddNewServer": "Ajouter un Serveur",
"ButtonAuthors": "Auteurs",
"ButtonBack": "Back",
"ButtonBack": "Retour",
"ButtonCancel": "Annuler",
"ButtonCancelTimer": "Cancel Timer",
"ButtonClearFilter": "Effacer le filtre",
"ButtonCloseFeed": "Fermer le flux",
"ButtonCancelTimer": "Annuler le Minuteur",
"ButtonClearFilter": "Effacer le Filtre",
"ButtonCloseFeed": "Fermer le Flux",
"ButtonCollections": "Collections",
"ButtonConnect": "Connect",
"ButtonConnectToServer": "Connect to Server",
"ButtonConnect": "Connexion",
"ButtonConnectToServer": "Se Connecter au Serveur",
"ButtonCreate": "Créer",
"ButtonCreateBookmark": "Create Bookmark",
"ButtonCreateNewPlaylist": "Create New Playlist",
"ButtonCreateBookmark": "Créer un Marque-pages",
"ButtonCreateNewPlaylist": "Créer une Nouvelle Liste de Lecture",
"ButtonDelete": "Effacer",
"ButtonDeleteLocalEpisode": "Delete local episode",
"ButtonDeleteLocalFile": "Delete local file",
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonHistory": "History",
"ButtonDeleteLocalEpisode": "Supprimer l'Épisode de l'Appareil",
"ButtonDeleteLocalFile": "Supprimer le Fichier de l'Appareil",
"ButtonDeleteLocalItem": "Supprimer l'Élément de l'Appareil",
"ButtonDisableAutoTimer": "Désactiver le Minuteur Automatique",
"ButtonDisconnect": "Déconnexion",
"ButtonGoToWebClient": "Ouvrir dans le Navigateur",
"ButtonHistory": "Historique",
"ButtonHome": "Accueil",
"ButtonIssues": "Parutions",
"ButtonLatest": "Dernière version",
"ButtonLatest": "Dernière Version",
"ButtonLibrary": "Bibliothèque",
"ButtonLocalMedia": "Local Media",
"ButtonManageLocalFiles": "Manage Local Files",
"ButtonNewFolder": "New Folder",
"ButtonNextEpisode": "Next Episode",
"ButtonOpenFeed": "Ouvrir le flux",
"ButtonOverride": "Override",
"ButtonLocalMedia": "Medias Locaux",
"ButtonManageLocalFiles": "Gérer les Fichiers Locaux",
"ButtonNewFolder": "Nouveau Dossier",
"ButtonNextEpisode": "Prochain Épisode",
"ButtonOpenFeed": "Ouvrir le Flux",
"ButtonOverride": "Remplacer",
"ButtonPause": "Pause",
"ButtonPlay": "Écouter",
"ButtonPlaying": "En lecture",
"ButtonPlaylists": "Listes de lecture",
"ButtonPlaying": "En Lecture",
"ButtonPlaylists": "Listes de Lecture",
"ButtonRead": "Lire",
"ButtonRemove": "Supprimer",
"ButtonRemoveFromServer": "Remove from Server",
"ButtonRemoveFromServer": "Supprimer du Serveur",
"ButtonSave": "Sauvegarder",
"ButtonSaveOrder": "Save Order",
"ButtonSaveOrder": "Sauvegarder l'Ordre",
"ButtonSearch": "Chercher",
"ButtonSendEbookToDevice": "Send Ebook to Device",
"ButtonSendEbookToDevice": "Envoyer le Livre a l'Appareil",
"ButtonSeries": "Séries",
"ButtonSetTimer": "Set Timer",
"ButtonStream": "Stream",
"ButtonSetTimer": "Lancer",
"ButtonStream": "Streamer",
"ButtonSubmit": "Soumettre",
"ButtonSwitchServerUser": "Switch Server/User",
"ButtonUserStats": "User Stats",
"ButtonSwitchServerUser": "Changer de Serveur/Utilisateur",
"ButtonUserStats": "Statistiques Utilisateur",
"ButtonYes": "Oui",
"HeaderAccount": "Compte",
"HeaderAdvanced": "Avancé",
@@ -54,79 +55,80 @@
"HeaderChapters": "Chapitres",
"HeaderCollection": "Collection",
"HeaderCollectionItems": "Entrées de la Collection",
"HeaderConnectionStatus": "Connection Status",
"HeaderConnectionStatus": "Status de Connexion",
"HeaderDetails": "Détails",
"HeaderDownloads": "Downloads",
"HeaderDownloads": "Téléchargements",
"HeaderEbookFiles": "Fichier des livres numériques",
"HeaderEpisodes": "Épisodes",
"HeaderEreaderSettings": "Options Ereader",
"HeaderLatestEpisodes": "Dernier épisodes",
"HeaderLibraries": "Bibliothèque",
"HeaderLocalFolders": "Local Folders",
"HeaderLocalLibraryItems": "Local Library Items",
"HeaderNewPlaylist": "New Playlist",
"HeaderLocalFolders": "Dossiers Locaux",
"HeaderLocalLibraryItems": "Éléments de la Bibliothèque Local",
"HeaderNewPlaylist": "Nouvelle Liste de Lecture",
"HeaderOpenRSSFeed": "Ouvrir Flux RSS",
"HeaderPlaybackSettings": "Playback Settings",
"HeaderPlaybackSettings": "Paramètres de Lecture",
"HeaderPlaylist": "Liste de lecture",
"HeaderPlaylistItems": "Éléments de la liste de lecture",
"HeaderPlaylistItems": "Éléments de la Liste de Lecture",
"HeaderRSSFeed": "RSS Feed",
"HeaderRSSFeedGeneral": "Détails de flux RSS",
"HeaderRSSFeedGeneral": "Détails du Flux RSS",
"HeaderRSSFeedIsOpen": "Le Flux RSS est actif",
"HeaderSelectDownloadLocation": "Select Download Location",
"HeaderSelectDownloadLocation": "Sélectionner le Dossier de Téléchargement",
"HeaderSettings": "Paramètres",
"HeaderSleepTimer": "Minuterie",
"HeaderSleepTimerSettings": "Sleep Timer Settings",
"HeaderSleepTimerSettings": "Paramètres du Minuteur Nocturne",
"HeaderStatsMinutesListeningChart": "Minutes d’écoute (7 derniers jours)",
"HeaderStatsRecentSessions": "Sessions récentes",
"HeaderTableOfContents": "Table des matières",
"HeaderUserInterfaceSettings": "User Interface Settings",
"HeaderYourStats": "Vos statistiques",
"HeaderTableOfContents": "Table des Matières",
"HeaderUserInterfaceSettings": "Paramètres de l'Interface",
"HeaderYourStats": "Vos Statistiques",
"LabelAdded": "Ajouté",
"LabelAddedAt": "Date dajout",
"LabelAddToPlaylist": "Ajouter à la liste de lecture",
"LabelAddToPlaylist": "Ajouter à la Liste de Lecture",
"LabelAll": "Tout",
"LabelAllowSeekingOnMediaControls": "Autoriser la Recherche de Position depuis la Notification du Lecteur Multimédia",
"LabelAuthor": "Auteur",
"LabelAuthorFirstLast": "Auteur (Prénom Nom)",
"LabelAuthorLastFirst": "Auteur (Nom, Prénom)",
"LabelAuthors": "Auteurs",
"LabelAutoDownloadEpisodes": "Téléchargement automatique dépisode",
"LabelAutoRewindTime": "Auto rewind time",
"LabelAutoSleepTimer": "Auto sleep timer",
"LabelAutoSleepTimerAutoRewind": "Auto sleep timer auto rewind",
"LabelAutoSleepTimerAutoRewindHelp": "When the auto sleep timer finishes, playing the item again will automatically rewind your position.",
"LabelAutoSleepTimerHelp": "When playing media between the specified start and end times a sleep timer will automatically start.",
"LabelAutoDownloadEpisodes": "Téléchargement Automatique dÉpisode",
"LabelAutoRewindTime": "Saut arrière Automatique",
"LabelAutoSleepTimer": "Minuteur Nocturne Automatique",
"LabelAutoSleepTimerAutoRewind": "Saut arrière Automatique du Minuteur Nocturne",
"LabelAutoSleepTimerAutoRewindHelp": "Lorsque le minuteur nocturne de termine, relire l'élément fera un saut en arrière.",
"LabelAutoSleepTimerHelp": "Lorsqu'un éléments est lu entre l'heure de début et de fin, un minuteur nocturne se lance automatiquement.",
"LabelBooks": "Livres",
"LabelChapters": "Chapitres",
"LabelChapterTrack": "Chapter Track",
"LabelChapterTrack": "Piste des Chapitres",
"LabelClosePlayer": "Fermer le lecteur",
"LabelCollapseSeries": "Réduire les séries",
"LabelComplete": "Complet",
"LabelContinueBooks": "Continue Books",
"LabelContinueEpisodes": "Continue Episodes",
"LabelContinueListening": "Continue Listening",
"LabelContinueReading": "Continue Reading",
"LabelContinueSeries": "Continue Series",
"LabelCustomTime": "Custom time",
"LabelContinueBooks": "Continuer les Livres",
"LabelContinueEpisodes": "Continuer les Épisodes",
"LabelContinueListening": "Continuer d'Écouter",
"LabelContinueReading": "Continuer la lecture",
"LabelContinueSeries": "Continuer les series",
"LabelCustomTime": "Temps personalisé",
"LabelDescription": "Description",
"LabelDisableAudioFadeOut": "Disable audio fade out",
"LabelDisableAudioFadeOutHelp": "Audio volume will start decreasing when there is less than 1 minute remaining on the sleep timer. Enable this setting to not fade out.",
"LabelDisableAutoRewind": "Disable auto rewind",
"LabelDisableShakeToReset": "Disable shake to reset",
"LabelDisableShakeToResetHelp": "Shaking your device while the timer is running OR within 2 minutes of the timer expiring will reset the sleep timer. Enable this setting to disable shake to reset.",
"LabelDisableVibrateOnReset": "Disable vibrate on reset",
"LabelDisableVibrateOnResetHelp": "When the sleep timer gets reset your device will vibrate. Enable this setting to not vibrate when the sleep timer resets.",
"LabelDiscover": "Discover",
"LabelDisableAudioFadeOut": "Désactiver la diminution automatique du volume",
"LabelDisableAudioFadeOutHelp": "Le volume va diminuer lorsqu'il restera moins d'une minute sur le minuteur nocture. Sélectionner pour désactiver la diminution",
"LabelDisableAutoRewind": "Désactiver le saut arrière automatique",
"LabelDisableShakeToReset": "Désactiver secouer pour redémarrer",
"LabelDisableShakeToResetHelp": "Secouer l'appareil pendant le minuteur OU lorsqu'il ne reste que 2 minutes au minuteur va redémarrer le minuteur. Sélectionner pour désactiver ce paramètre",
"LabelDisableVibrateOnReset": "Désactiver la vibration au redémarrage",
"LabelDisableVibrateOnResetHelp": "Lorsque le minuteur est redémarré, l'appareil vibre. Sélectionner pour désactiver les vibrations..",
"LabelDiscover": "Découvrir",
"LabelDownload": "Téléchargement",
"LabelDownloaded": "Downloaded",
"LabelDownloaded": "Téléchargé",
"LabelDuration": "Durée",
"LabelEbook": "Livre numérique",
"LabelEbooks": "Ebooks",
"LabelEnable": "Activer",
"LabelEnableMp3IndexSeeking": "Enable mp3 index seeking",
"LabelEnableMp3IndexSeekingHelp": "This setting should only be enabled if you have mp3 files that are not seeking correctly. Inaccurate seeking is most likely due to Variable birate (VBR) MP3 files. This setting will force index seeking, in which a time-to-byte mapping is built as the file is read. In some cases with large MP3 files there will be a delay when seeking towards the end of the file.",
"LabelEnableMp3IndexSeeking": "Activer la recherche par index pour mp3",
"LabelEnableMp3IndexSeekingHelp": "Ce paramètres ne devrai être activer que si vous avez des problèmes avec des fichiers mp3 que vous ne pouvez pas chercher. La mauvaise indexation est probablement du au Bitrate Variable (VBR) du fichier MP3. Ce paramètre va forcer l'indexation. Une correspondance Temps-Octet est construit durant la lecture. Dans certains cas, avec de gros fichier MP3, il y aura du délais lors de la recherche vers la fin du fichier.",
"LabelEnd": "Fin",
"LabelEndOfChapter": "End of Chapter",
"LabelEndTime": "End time",
"LabelEndOfChapter": "Fin du Chapitre",
"LabelEndTime": "Heure de Fin",
"LabelEpisode": "Épisode",
"LabelFeedURL": "URL du flux",
"LabelFile": "Fichier",
@@ -138,48 +140,48 @@
"LabelFontScale": "Taille de la police de caractère",
"LabelGenre": "Genre",
"LabelGenres": "Genres",
"LabelHapticFeedback": "Haptic feedback",
"LabelHasEbook": "Has ebook",
"LabelHapticFeedback": "Retour haptique",
"LabelHasEbook": "Contient un ebook",
"LabelHasSupplementaryEbook": "Has supplementary ebook",
"LabelHeavy": "Heavy",
"LabelHigh": "High",
"LabelHeavy": "Puissant",
"LabelHigh": "Importante",
"LabelHost": "Hôte",
"LabelIncomplete": "Incomplet",
"LabelInProgress": "En cours",
"LabelInternalAppStorage": "Internal App Storage",
"LabelJumpBackwardsTime": "Jump backwards time",
"LabelJumpForwardsTime": "Jump forwards time",
"LabelInternalAppStorage": "Stockage Interne de l'application",
"LabelJumpBackwardsTime": "Durée du saut arrière",
"LabelJumpForwardsTime": "Durée du saut avant",
"LabelLanguage": "Langue",
"LabelLayout": "Layout",
"LabelLayoutAuto": "Auto",
"LabelLayoutSinglePage": "Single page",
"LabelLight": "Light",
"LabelLayout": "Arrangement",
"LabelLayoutAuto": "Automatique",
"LabelLayoutSinglePage": "Page seul",
"LabelLight": "Légé",
"LabelLineSpacing": "Interligne",
"LabelListenAgain": "Listen Again",
"LabelLocalBooks": "Local Books",
"LabelLocalPodcasts": "Local Podcasts",
"LabelLockOrientation": "Lock orientation",
"LabelLockPlayer": "Lock Player",
"LabelLow": "Low",
"LabelListenAgain": "Ré-écouter",
"LabelLocalBooks": "Livres Locaux",
"LabelLocalPodcasts": "Podcasts Locaux",
"LabelLockOrientation": "Verrouiller l'orientation",
"LabelLockPlayer": "Verrouiller le lecteur",
"LabelLow": "Basse",
"LabelMediaType": "Type de média",
"LabelMedium": "Medium",
"LabelMedium": "Moyenne",
"LabelMore": "Plus",
"LabelMoreInfo": "Plus dinfo",
"LabelName": "Nom",
"LabelNarrator": "Narrateur",
"LabelNarrators": "Narrateurs",
"LabelNewestAuthors": "Newest Authors",
"LabelNewestEpisodes": "Newest Episodes",
"LabelNo": "No",
"LabelNewestAuthors": "Auteurs Recents",
"LabelNewestEpisodes": "Épisodes Récents",
"LabelNo": "Non",
"LabelNotFinished": "Non terminé(e)",
"LabelNotStarted": "Non Démarré(e)",
"LabelOff": "Off",
"LabelOff": "Éteint",
"LabelPassword": "Mot de passe",
"LabelPath": "Chemin",
"LabelPlaybackDirect": "Direct",
"LabelPlaybackLocal": "Local",
"LabelPlaybackSpeed": "Playback Speed",
"LabelPlaybackTranscode": "Transcode",
"LabelPlaybackSpeed": "Vitesse de Lecture",
"LabelPlaybackTranscode": "Transcoder",
"LabelPodcast": "Podcast",
"LabelPodcasts": "Podcasts",
"LabelPreventIndexing": "Empêcher lindexation de votre flux par les bases de données iTunes et Google podcast",
@@ -187,21 +189,22 @@
"LabelPubDate": "Date de publication",
"LabelPublishYear": "Année d’édition",
"LabelRead": "Lire",
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelReadAgain": "Re-lire",
"LabelRecentlyAdded": "Ajouts Récents",
"LabelRecentSeries": "Series Recentes",
"LabelRemoveFromPlaylist": "Supprimer de la Liste de Lecture",
"LabelRSSFeedCustomOwnerEmail": "Courriel du propriétaire personnalisé",
"LabelRSSFeedCustomOwnerName": "Nom propriétaire personnalisé",
"LabelRSSFeedPreventIndexing": "Empêcher lindexation",
"LabelRSSFeedSlug": "Identificateur dadresse du Flux RSS ",
"LabelScaleElapsedTimeBySpeed": "Scale Elapsed Time by Speed",
"LabelScaleElapsedTimeBySpeed": "Traduire le temps restant en fonction de la vitesse de lecture",
"LabelSeason": "Saison",
"LabelSelectADevice": "Select a device",
"LabelSelectADevice": "Sélectionner un Appareil",
"LabelSeries": "Séries",
"LabelServerAddress": "Server address",
"LabelServerAddress": "Adresse du Serveur",
"LabelSetEbookAsPrimary": "Définir comme principale",
"LabelSetEbookAsSupplementary": "Définir comme supplémentaire",
"LabelShakeSensitivity": "Shake sensitivity",
"LabelShakeSensitivity": "Sensibilité de la secousse",
"LabelShowAll": "Afficher Tout",
"LabelSize": "Taille",
"LabelSleepTimer": "Minuterie",
@@ -223,65 +226,66 @@
"LabelThemeLight": "Clair",
"LabelTimeRemaining": "{0} restantes",
"LabelTitle": "Titre",
"LabelTotalTrack": "Total Track",
"LabelTotalTrack": "Pistes totale",
"LabelTracks": "Pistes",
"LabelType": "Type",
"LabelUnlockPlayer": "Unlock Player",
"LabelUseBookshelfView": "Use bookshelf view",
"LabelUnlockPlayer": "Déverrouiller le Lecteur",
"LabelUseBookshelfView": "Utiliser l'interface Bibliothèque",
"LabelUser": "Utilisateur",
"LabelUsername": "Nom dutilisateur",
"LabelVeryHigh": "Very High",
"LabelVeryLow": "Very Low",
"LabelYourBookmarks": "Vos signets",
"LabelVeryHigh": "Très importante",
"LabelVeryLow": "Très peu importante",
"LabelYourBookmarks": "Vos marque-pages",
"LabelYourProgress": "Votre progression",
"MessageAndroid10Downloads": "Android 10 and below will use internal app storage for downloads.",
"MessageAttemptingServerConnection": "Attempting server connection...",
"MessageAudiobookshelfServerNotConnected": "Audiobookshelf server not connected",
"MessageAudiobookshelfServerRequired": "<strong>Important!</strong> This app is designed to work with an Audiobookshelf server that you or someone you know is hosting. This app does not provide any content.",
"MessageBookshelfEmpty": "Bookshelf empty",
"MessageConfirmDeleteLocalEpisode": "Remove local episode \"{0}\" from your device? The file on the server will be unaffected.",
"MessageConfirmDeleteLocalFiles": "Remove local files of this item from your device? The files on the server and your progress will be unaffected.",
"MessageConfirmDiscardProgress": "Are you sure you want to reset your progress?",
"MessageConfirmMarkAsFinished": "Are you sure you want to mark this item as finished?",
"MessageConfirmRemoveBookmark": "Are you sure you want to remove bookmark?",
"MessageDiscardProgress": "Discard Progress",
"MessageDownloadCompleteProcessing": "Download complete. Processing...",
"MessageDownloading": "Downloading...",
"MessageAndroid10Downloads": "Android 10 et en dessous utiliseront le stockage interne de l'application pour les téléchargements.",
"MessageAttemptingServerConnection": "Tentative de connexion...",
"MessageAudiobookshelfServerNotConnected": "Serveur Audiobookshelf non connecté",
"MessageAudiobookshelfServerRequired": "<strong>Important!</strong> Cette application est faite pour fonctionner avec un serveur Audiobookshelf. L'application ne fournit aucun contenu.",
"MessageBookshelfEmpty": "Bibliothèque vide",
"MessageConfirmDeleteLocalEpisode": "Supprimer l'épisode local \"{0}\" de votre appareil ? Le fichier sur le serveur ne sera pas affecté.",
"MessageConfirmDeleteLocalFiles": "Supprimer les fichiers locaux de cet élément de votre appareil ? Les fichiers sur le serveur ainsi que votre progression ne serons pas affectés.",
"MessageConfirmDiscardProgress": "Êtes vous sûre de vouloir supprimer votre progression ?",
"MessageConfirmMarkAsFinished": "Êtes vous sûre de vouloir marquer cette élement comme terminé ?",
"MessageConfirmRemoveBookmark": "Êtes vous sûre de vouloir supprimer le marque-page ?",
"MessageDiscardProgress": "Supprimer la progression",
"MessageDownloadCompleteProcessing": "Téléchargements terminé. Analyse..",
"MessageDownloading": "Téléchargement...",
"MessageDownloadingEpisode": "Téléchargement de l’épisode",
"MessageEpisodesQueuedForDownload": "{0} épisode(s) mis en file pour téléchargement",
"MessageFeedURLWillBe": "lURL du flux sera {0}",
"MessageFetching": "Récupération…",
"MessageFollowTheProjectOnGithub": "Follow the project on Github",
"MessageItemDownloadCompleteFailedToCreate": "Item download complete but failed to create library item",
"MessageLoading": "Chargement",
"MessageLoadingServerData": "Loading server data...",
"MessageFollowTheProjectOnGithub": "Suivre le project sur Github",
"MessageItemDownloadCompleteFailedToCreate": "L'élément à été téléchargé avec succès, mais impossible de créer l'entré dans la bibliothèque.",
"MessageLoading": "Chargement...",
"MessageLoadingServerData": "Chargement des données du serveur...",
"MessageMarkAsFinished": "Marquer comme terminé",
"MessageMediaLinkedToADifferentServer": "Media is linked to an Audiobookshelf server on a different address ({0}). Progress will be synced when connected to this server address.",
"MessageMediaLinkedToADifferentUser": "Media is linked to this server but was downloaded by a different user. Progress will only be synced to the user that downloaded it.",
"MessageMediaLinkedToServer": "Linked to server {0}",
"MessageMediaLinkedToThisServer": "Downloaded media is linked to this server",
"MessageMediaNotLinkedToServer": "Media is not linked to an Audiobookshelf server. No progress will be synced.",
"MessageNoBookmarks": "Aucun signet",
"MessageMediaLinkedToADifferentServer": "L'élément est lié à un serveur Audiobookshelf sur une autre adresse ({0}). La progression sera synchroniser lors de la connexion au serveur à cette adresse.",
"MessageMediaLinkedToADifferentUser": "L'élément est lié a ce serveur, mais a ete téléchargé par un autre utilisateur. La progression ne sera synchronisé que pour l'utilisateur qui l'a téléchargé..",
"MessageMediaLinkedToServer": "Lié au serveur {0}",
"MessageMediaLinkedToThisServer": "L'élément téléchargé est lié à a ce serveur",
"MessageMediaNotLinkedToServer": "L'élément n'est lié à aucun serveur. La progression ne sera pas synchronisé.",
"MessageNoBookmarks": "Aucun marque-page",
"MessageNoChapters": "Aucun chapitre",
"MessageNoItems": "Aucun article",
"MessageNoItemsFound": "Aucun article trouvé",
"MessageNoListeningSessions": "Aucune session d’écoute en cours",
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoMediaFolders": "Aucun dossier multimédia",
"MessageNoNetworkConnection": "Pas de connexion réseau",
"MessageNoPodcastsFound": "Aucun podcast trouvé",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Aucune mise à jour n’était nécessaire",
"MessageNoUserPlaylists": "Vous navez aucune liste de lecture",
"MessageReportBugsAndContribute": "Remonter des anomalies, demander des fonctionnalités et contribuer sur",
"MessageSocketConnectedOverMeteredCellular": "Socket connected over metered cellular",
"MessageSocketConnectedOverMeteredWifi": "Socket connected over metered wifi",
"MessageSocketConnectedOverUnmeteredCellular": "Socket connected over unmetered cellular",
"MessageSocketConnectedOverUnmeteredWifi": "Socket connected over unmetered wifi",
"MessageSocketNotConnected": "Socket not connected",
"MessageSocketConnectedOverMeteredCellular": "Socket connecté via données cellulaire limitée",
"MessageSocketConnectedOverMeteredWifi": "Socket connecté via wifi limitée",
"MessageSocketConnectedOverUnmeteredCellular": "Socket connecté via données cellulaire",
"MessageSocketConnectedOverUnmeteredWifi": "Socket connecté via wifi",
"MessageSocketNotConnected": "Socket non connecté",
"NoteRSSFeedPodcastAppsHttps": "Attention : la majorité des application de podcast nécessite une adresse de flux en HTTPS.",
"NoteRSSFeedPodcastAppsPubDate": "Attention : un ou plusieurs de vos épisodes ne possèdent pas de date de publication. Certaines applications de podcast le requièrent.",
"ToastBookmarkCreateFailed": "Échec de la création de signet",
"ToastBookmarkRemoveFailed": "Échec de la suppression de signet",
"ToastBookmarkUpdateFailed": "Échec de la mise à jour de signet",
"ToastBookmarkCreateFailed": "Échec de la création de marque-page",
"ToastBookmarkRemoveFailed": "Échec de la suppression de marque-page",
"ToastBookmarkUpdateFailed": "Échec de la mise à jour de marsue-page",
"ToastItemMarkedAsFinishedFailed": "Échec de lannotation terminée",
"ToastItemMarkedAsNotFinishedFailed": "Échec de lannotation non-terminée",
"ToastPlaylistCreateFailed": "Échec de la création de la liste de lecture",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "History",
"ButtonHome": "ઘર",
"ButtonIssues": "સમસ્યાઓ",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Added At",
"LabelAddToPlaylist": "Add to Playlist",
"LabelAll": "All",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Author",
"LabelAuthorFirstLast": "Author (First Last)",
"LabelAuthorLastFirst": "Author (Last, First)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Custom owner Email",
"LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedPreventIndexing": "Prevent Indexing",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoPodcastsFound": "No podcasts found",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "No updates were necessary",
"MessageNoUserPlaylists": "You have no playlists",
"MessageReportBugsAndContribute": "Report bugs, request features, and contribute on",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "History",
"ButtonHome": "घर",
"ButtonIssues": "समस्याएं",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Added At",
"LabelAddToPlaylist": "Add to Playlist",
"LabelAll": "All",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Author",
"LabelAuthorFirstLast": "Author (First Last)",
"LabelAuthorLastFirst": "Author (Last, First)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Custom owner Email",
"LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedPreventIndexing": "Prevent Indexing",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoPodcastsFound": "No podcasts found",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "No updates were necessary",
"MessageNoUserPlaylists": "You have no playlists",
"MessageReportBugsAndContribute": "Report bugs, request features, and contribute on",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "History",
"ButtonHome": "Početna stranica",
"ButtonIssues": "Problemi",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Added At",
"LabelAddToPlaylist": "Add to Playlist",
"LabelAll": "All",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Author (First Last)",
"LabelAuthorLastFirst": "Author (Last, First)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Custom owner Email",
"LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedPreventIndexing": "Prevent Indexing",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoPodcastsFound": "Nijedan podcast pronađen",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Aktualiziranje nije bilo potrebno",
"MessageNoUserPlaylists": "You have no playlists",
"MessageReportBugsAndContribute": "Prijavte bugove, zatržite featurese i doprinosite na",
+296
View File
@@ -0,0 +1,296 @@
{
"ButtonAdd": "Hozzáadás",
"ButtonAddNewServer": "Új szerver hozzáadása",
"ButtonAuthors": "Szerzők",
"ButtonBack": "Vissza",
"ButtonCancel": "Mégse",
"ButtonCancelTimer": "Időzítő megszakítása",
"ButtonClearFilter": "Szűrő törlése",
"ButtonCloseFeed": "Hírcsatorna bezárása",
"ButtonCollections": "Gyűjtemények",
"ButtonConnect": "Csatlakozás",
"ButtonConnectToServer": "Csatlakozás a szerverhez",
"ButtonCreate": "Létrehozás",
"ButtonCreateBookmark": "Könyvjelző létrehozása",
"ButtonCreateNewPlaylist": "Új lejátszási lista készítése",
"ButtonDelete": "Törlés",
"ButtonDeleteLocalEpisode": "Helyi epizód törlése",
"ButtonDeleteLocalFile": "Helyi fájl törlése",
"ButtonDeleteLocalItem": "Helyi elem törlése",
"ButtonDisableAutoTimer": "Automatikus időzítő letiltása",
"ButtonDisconnect": "Kapcsolat bontása",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "Előzmények",
"ButtonHome": "Kezdőlap",
"ButtonIssues": "Problémák",
"ButtonLatest": "Legújabb",
"ButtonLibrary": "Könyvtár",
"ButtonLocalMedia": "Helyi média",
"ButtonManageLocalFiles": "Helyi fájlok kezelése",
"ButtonNewFolder": "Új mappa",
"ButtonNextEpisode": "Következő epizód",
"ButtonOpenFeed": "Hírcsatorna megnyitása",
"ButtonOverride": "Felülírás",
"ButtonPause": "Szünet",
"ButtonPlay": "Lejátszás",
"ButtonPlaying": "Lejátszás folyamatban",
"ButtonPlaylists": "Lejátszási listák",
"ButtonRead": "Olvasás",
"ButtonRemove": "Eltávolítás",
"ButtonRemoveFromServer": "Eltávolítás a szerverről",
"ButtonSave": "Mentés",
"ButtonSaveOrder": "Sorrend mentése",
"ButtonSearch": "Keresés",
"ButtonSendEbookToDevice": "E-könyv küldése eszközre",
"ButtonSeries": "Sorozatok",
"ButtonSetTimer": "Időzítő beállítása",
"ButtonStream": "Streamelés",
"ButtonSubmit": "Beküldés",
"ButtonSwitchServerUser": "Szerver/Felhasználó váltása",
"ButtonUserStats": "Felhasználói statisztikák",
"ButtonYes": "Igen",
"HeaderAccount": "Fiók",
"HeaderAdvanced": "Haladó",
"HeaderAudioTracks": "Audiósávok",
"HeaderChapters": "Fejezetek",
"HeaderCollection": "Gyűjtemény",
"HeaderCollectionItems": "Gyűjtemény elemek",
"HeaderConnectionStatus": "Kapcsolat állapota",
"HeaderDetails": "Részletek",
"HeaderDownloads": "Letöltések",
"HeaderEbookFiles": "E-könyv fájlok",
"HeaderEpisodes": "Epizódok",
"HeaderEreaderSettings": "E-olvasó beállításai",
"HeaderLatestEpisodes": "Legújabb epizódok",
"HeaderLibraries": "Könyvtárak",
"HeaderLocalFolders": "Helyi mappák",
"HeaderLocalLibraryItems": "Helyi könyvtári elemek",
"HeaderNewPlaylist": "Új lejátszási lista",
"HeaderOpenRSSFeed": "RSS hírcsatorna megnyitása",
"HeaderPlaybackSettings": "Lejátszási beállítások",
"HeaderPlaylist": "Lejátszási lista",
"HeaderPlaylistItems": "Lejátszási lista elemek",
"HeaderRSSFeed": "RSS Hírcsatorna",
"HeaderRSSFeedGeneral": "RSS részletek",
"HeaderRSSFeedIsOpen": "RSS hírcsatorna nyitva van",
"HeaderSelectDownloadLocation": "Letöltési hely kiválasztása",
"HeaderSettings": "Beállítások",
"HeaderSleepTimer": "Alvásidőzítő",
"HeaderSleepTimerSettings": "Alvásidőzítő beállításai",
"HeaderStatsMinutesListeningChart": "Hallgatási grafikon percekben (az elmúlt 7 napból)",
"HeaderStatsRecentSessions": "Legutóbbi munkamenetek",
"HeaderTableOfContents": "Tartalomjegyzék",
"HeaderUserInterfaceSettings": "Felhasználói felület beállításai",
"HeaderYourStats": "Saját statisztikák",
"LabelAdded": "Hozzáadva",
"LabelAddedAt": "Hozzáadva ekkor",
"LabelAddToPlaylist": "Hozzáadás a lejátszási listához",
"LabelAll": "Összes",
"LabelAllowSeekingOnMediaControls": "Pozíció keresés engedélyezése a média értesítési vezérlőkön",
"LabelAuthor": "Szerző",
"LabelAuthorFirstLast": "Szerző (Keresztnév Vezetéknév)",
"LabelAuthorLastFirst": "Szerző (Vezetéknév, Keresztnév)",
"LabelAuthors": "Szerző",
"LabelAutoDownloadEpisodes": "Epizódok automatikus letöltése",
"LabelAutoRewindTime": "Automatikus visszatekerési idő",
"LabelAutoSleepTimer": "Automatikus alvásidőzítő",
"LabelAutoSleepTimerAutoRewind": "Automatikus alvásidőzítő automatikus visszatekerése",
"LabelAutoSleepTimerAutoRewindHelp": "Amikor az automatikus alvásidőzítő befejeződik, az elem újrajátszásakor automatikusan visszatekeri a pozíciót.",
"LabelAutoSleepTimerHelp": "Amikor a megadott kezdési és befejezési idők között média lejátszása történik, egy alvásidőzítő automatikusan elindul.",
"LabelBooks": "Könyv",
"LabelChapters": "Fejezetek",
"LabelChapterTrack": "Fejezet sáv",
"LabelClosePlayer": "Lejátszó bezárása",
"LabelCollapseSeries": "Sorozatok összecsukása",
"LabelComplete": "Kész",
"LabelContinueBooks": "Könyvek folytatása",
"LabelContinueEpisodes": "Epizódok folytatása",
"LabelContinueListening": "Hallgatás folytatása",
"LabelContinueReading": "Olvasás folytatása",
"LabelContinueSeries": "Sorozat folytatása",
"LabelCustomTime": "Egyéni idő",
"LabelDescription": "Leírás",
"LabelDisableAudioFadeOut": "Hang fokozatos csendesítés letiltása",
"LabelDisableAudioFadeOutHelp": "Az audio hangerő csökkenése kezdődik, amikor kevesebb, mint 1 perc marad az alvásidőzítőből. Engedélyezze ezt a beállítást, hogy ne csendesedjen el fokozatosan a hang.",
"LabelDisableAutoRewind": "Automatikus visszatekerés letiltása",
"LabelDisableShakeToReset": "Rázás a visszaállításhoz letiltása",
"LabelDisableShakeToResetHelp": "Ha az időzítő futása alatt vagy az időzítő lejárta előtti 2 percben megrázza az eszközt, az alvásidőzítő visszaáll. Engedélyezze ezt a beállítást a rázásra történő visszaállítás letiltásához.",
"LabelDisableVibrateOnReset": "Rezgés kikapcsolása visszaállításkor",
"LabelDisableVibrateOnResetHelp": "Amikor az alvásidőzítő visszaállításra kerül, az eszköz rezegni fog. Engedélyezze ezt a beállítást, hogy ne rezegjen az alvásidőzítő visszaállításakor.",
"LabelDiscover": "Felfedezés",
"LabelDownload": "Letöltés",
"LabelDownloaded": "Letöltve",
"LabelDuration": "Időtartam",
"LabelEbook": "E-könyv",
"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.",
"LabelEnd": "Vége",
"LabelEndOfChapter": "Fejezet vége",
"LabelEndTime": "Befejezés ideje",
"LabelEpisode": "Epizód",
"LabelFeedURL": "Hírcsatorna URL",
"LabelFile": "Fájl",
"LabelFileBirthtime": "Fájl létrehozásának ideje",
"LabelFileModified": "Fájl módosítva",
"LabelFilename": "Fájlnév",
"LabelFinished": "Befejezve",
"LabelFolder": "Mappa",
"LabelFontScale": "Betűméret skála",
"LabelGenre": "Műfaj",
"LabelGenres": "Műfajok",
"LabelHapticFeedback": "Tapintás visszajelzés",
"LabelHasEbook": "Van e-könyv",
"LabelHasSupplementaryEbook": "Van kiegészítő e-könyv",
"LabelHeavy": "Nehéz",
"LabelHigh": "Magas",
"LabelHost": "Házigazda",
"LabelIncomplete": "Befejezetlen",
"LabelInProgress": "Folyamatban",
"LabelInternalAppStorage": "Belső alkalmazástároló",
"LabelJumpBackwardsTime": "Visszaugrás ideje",
"LabelJumpForwardsTime": "Előreugrás ideje",
"LabelLanguage": "Nyelv",
"LabelLayout": "Elrendezés",
"LabelLayoutAuto": "Automatikus",
"LabelLayoutSinglePage": "Egyoldalas",
"LabelLight": "Könnyű",
"LabelLineSpacing": "Sorköz",
"LabelListenAgain": "Újrahallgatás",
"LabelLocalBooks": "Helyi könyvek",
"LabelLocalPodcasts": "Helyi podcastok",
"LabelLockOrientation": "Tájolás zárolása",
"LabelLockPlayer": "Lejátszó zárolása",
"LabelLow": "Alacsony",
"LabelMediaType": "Média típus",
"LabelMedium": "Közepes",
"LabelMore": "Több",
"LabelMoreInfo": "Több információ",
"LabelName": "Név",
"LabelNarrator": "Előadó",
"LabelNarrators": "Előadók",
"LabelNewestAuthors": "Legújabb szerzők",
"LabelNewestEpisodes": "Legújabb epizódok",
"LabelNo": "Nem",
"LabelNotFinished": "Nem befejezett",
"LabelNotStarted": "Nem kezdődött el",
"LabelOff": "Ki",
"LabelPassword": "Jelszó",
"LabelPath": "Útvonal",
"LabelPlaybackDirect": "Közvetlen",
"LabelPlaybackLocal": "Helyi",
"LabelPlaybackSpeed": "Lejátszási sebesség",
"LabelPlaybackTranscode": "Átkódolás",
"LabelPodcast": "Podcast",
"LabelPodcasts": "Podcastok",
"LabelPreventIndexing": "Megakadályozza a hírcsatornájának indexelését az iTunes és a Google podcast könyvtárakban",
"LabelProgress": "Haladás",
"LabelPubDate": "Közzététel dátuma",
"LabelPublishYear": "Kiadás éve",
"LabelRead": "Olvasás",
"LabelReadAgain": "Újraolvasás",
"LabelRecentlyAdded": "Legutóbb hozzáadva",
"LabelRecentSeries": "Legutóbbi sorozatok",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Egyéni tulajdonos e-mail",
"LabelRSSFeedCustomOwnerName": "Egyéni tulajdonos neve",
"LabelRSSFeedPreventIndexing": "Indexelés megakadályozása",
"LabelRSSFeedSlug": "RSS hírcsatorna rövid cím",
"LabelScaleElapsedTimeBySpeed": "Eltelt idő skálázása sebesség szerint",
"LabelSeason": "Évad",
"LabelSelectADevice": "Eszköz kiválasztása",
"LabelSeries": "Sorozat",
"LabelServerAddress": "Szerver címe",
"LabelSetEbookAsPrimary": "Beállítás elsődlegesként",
"LabelSetEbookAsSupplementary": "Beállítás kiegészítőként",
"LabelShakeSensitivity": "Rázás érzékenység",
"LabelShowAll": "Összes megjelenítése",
"LabelSize": "Méret",
"LabelSleepTimer": "Alvásidőzítő",
"LabelStart": "Kezdés",
"LabelStartTime": "Kezdési idő",
"LabelStatsBestDay": "Legjobb nap",
"LabelStatsDailyAverage": "Napi átlag",
"LabelStatsDays": "Napok",
"LabelStatsDaysListened": "Hallgatott napok",
"LabelStatsInARow": "egymás után",
"LabelStatsItemsFinished": "Befejezett elemek",
"LabelStatsMinutes": "perc",
"LabelStatsMinutesListening": "Hallgatás percekben",
"LabelStatsWeekListening": "Heti hallgatás",
"LabelTag": "Címke",
"LabelTags": "Címkék",
"LabelTheme": "Téma",
"LabelThemeDark": "Sötét",
"LabelThemeLight": "Világos",
"LabelTimeRemaining": "{0} maradt",
"LabelTitle": "Cím",
"LabelTotalTrack": "Összes szám",
"LabelTracks": "Számok",
"LabelType": "Típus",
"LabelUnlockPlayer": "Lejátszó feloldása",
"LabelUseBookshelfView": "Polcnézet használata",
"LabelUser": "Felhasználó",
"LabelUsername": "Felhasználónév",
"LabelVeryHigh": "Nagyon magas",
"LabelVeryLow": "Nagyon alacsony",
"LabelYourBookmarks": "Könyvjelzőid",
"LabelYourProgress": "Haladásod",
"MessageAndroid10Downloads": "Az Android 10 és az alatti verziók belső alkalmazástárolót használnak a letöltésekhez.",
"MessageAttemptingServerConnection": "Szerverkapcsolat kísérlete...",
"MessageAudiobookshelfServerNotConnected": "Az Audiobookshelf szerver nem csatlakozik",
"MessageAudiobookshelfServerRequired": "<strong>Fontos!</strong> Ez az alkalmazás egy Audiobookshelf szervert igényel, amit Ön vagy valaki, akit ismer, üzemeltet. Ez az alkalmazás nem biztosít tartalmat.",
"MessageBookshelfEmpty": "A könyvespolc üres",
"MessageConfirmDeleteLocalEpisode": "\"{0}\" helyi epizód eltávolítása az eszközről? A szerveren lévő fájl nem érintett.",
"MessageConfirmDeleteLocalFiles": "Ezen elem helyi fájljainak eltávolítása az eszközről? A szerveren lévő fájlok és a haladás nem érintettek.",
"MessageConfirmDiscardProgress": "Biztosan alaphelyzetbe akarja állítani a haladást?",
"MessageConfirmMarkAsFinished": "Biztosan befejezettnek jelöli ezt az elemet?",
"MessageConfirmRemoveBookmark": "Biztosan eltávolítja a könyvjelzőt?",
"MessageDiscardProgress": "Haladás elvetése",
"MessageDownloadCompleteProcessing": "Letöltés kész. Feldolgozás...",
"MessageDownloading": "Letöltés...",
"MessageDownloadingEpisode": "Epizód letöltése",
"MessageEpisodesQueuedForDownload": "{0} epizód letöltésre vár",
"MessageFeedURLWillBe": "A hírcsatorna URL-je lesz: {0}",
"MessageFetching": "Lekérdezés...",
"MessageFollowTheProjectOnGithub": "Kövesse a projektet a Githubon",
"MessageItemDownloadCompleteFailedToCreate": "A könyv letöltése befejeződött, de nem sikerült létrehozni a könyvtári elemet",
"MessageLoading": "Betöltés...",
"MessageLoadingServerData": "Szerveradatok betöltése...",
"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.",
"MessageMediaLinkedToServer": "Szerverhez kapcsolt {0}",
"MessageMediaLinkedToThisServer": "A letöltött média ehhez a szerverhez kapcsolódik",
"MessageMediaNotLinkedToServer": "A média nem kapcsolódik egy Audiobookshelf szerverhez. Nem lesz szinkronizálva a haladás.",
"MessageNoBookmarks": "Nincsenek könyvjelzők",
"MessageNoChapters": "Nincsenek fejezetek",
"MessageNoItems": "Nincsenek elemek",
"MessageNoItemsFound": "Nincs találat",
"MessageNoListeningSessions": "Nincsenek hallgatási munkamenetek",
"MessageNoMediaFolders": "Nincsenek médiamappák",
"MessageNoNetworkConnection": "Nincs hálózati kapcsolat",
"MessageNoPodcastsFound": "Nem találhatók podcastok",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Nem volt szükséges frissítés",
"MessageNoUserPlaylists": "Nincsenek lejátszási listái",
"MessageReportBugsAndContribute": "Hibák jelentése, funkciók kérése és hozzájárulás a",
"MessageSocketConnectedOverMeteredCellular": "Csatlakoztatva mért mobilhálózaton keresztül",
"MessageSocketConnectedOverMeteredWifi": "Csatlakoztatva mért Wi-Fi hálózaton keresztül",
"MessageSocketConnectedOverUnmeteredCellular": "Csatlakoztatva korlátlan mobilhálózaton keresztül",
"MessageSocketConnectedOverUnmeteredWifi": "Csatlakoztatva korlátlan Wi-Fi hálózaton keresztül",
"MessageSocketNotConnected": "A socket nincs csatlakoztatva",
"NoteRSSFeedPodcastAppsHttps": "Figyelmeztetés: A legtöbb podcast alkalmazás megköveteli, hogy az RSS hírcsatorna URL-je HTTPS-t használjon",
"NoteRSSFeedPodcastAppsPubDate": "Figyelmeztetés: Egy vagy több epizódnak nincs közzétételi dátuma. Néhány podcast alkalmazás ezt megköveteli.",
"ToastBookmarkCreateFailed": "A könyvjelző létrehozása sikertelen",
"ToastBookmarkRemoveFailed": "A könyvjelző eltávolítása sikertelen",
"ToastBookmarkUpdateFailed": "A könyvjelző frissítése sikertelen",
"ToastItemMarkedAsFinishedFailed": "Az elem befejezettnek jelölése sikertelen",
"ToastItemMarkedAsNotFinishedFailed": "Az elem befejezetlennek jelölése sikertelen",
"ToastPlaylistCreateFailed": "A lejátszási lista létrehozása sikertelen",
"ToastPodcastCreateFailed": "A podcast létrehozása sikertelen",
"ToastPodcastCreateSuccess": "A podcast sikeresen létrehozva",
"ToastRSSFeedCloseFailed": "Az RSS hírcsatorna bezárása sikertelen",
"ToastRSSFeedCloseSuccess": "Az RSS hírcsatorna sikeresen bezárva"
}
+16 -12
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Elimina oggetto locale",
"ButtonDisableAutoTimer": "Disattiva Auto Timer",
"ButtonDisconnect": "Disconnetti",
"ButtonGoToWebClient": "Apri il Web Client",
"ButtonHistory": "Cronologia",
"ButtonHome": "Home",
"ButtonIssues": "Errori",
@@ -40,7 +41,7 @@
"ButtonSave": "Salva",
"ButtonSaveOrder": "Salva Ordine",
"ButtonSearch": "Cerca",
"ButtonSendEbookToDevice": "Invia Ebook al Device",
"ButtonSendEbookToDevice": "Invia Ebook al Dispositivo",
"ButtonSeries": "Serie",
"ButtonSetTimer": "Imposta Timer",
"ButtonStream": "Stream",
@@ -85,12 +86,13 @@
"LabelAddedAt": "Aggiunto il",
"LabelAddToPlaylist": "aggiungi alla Playlist",
"LabelAll": "Tutti",
"LabelAllowSeekingOnMediaControls": "Consenti la ricerca della posizione sui controlli delle notifiche multimediali",
"LabelAuthor": "Autore",
"LabelAuthorFirstLast": "Autore (Per Nome)",
"LabelAuthorLastFirst": "Autori (Per Cognome)",
"LabelAuthors": "Autori",
"LabelAutoDownloadEpisodes": "Auto Download Episodi",
"LabelAutoRewindTime": "Auto Riavvolgimento",
"LabelAutoRewindTime": "Auto avvolgimento",
"LabelAutoSleepTimer": "Auto Ibernazione",
"LabelAutoSleepTimerAutoRewind": "Auto Ibernazione e riavvolgimento",
"LabelAutoSleepTimerAutoRewindHelp": "Al termine del timer di spegnimento automatico, la riproduzione dell'elemento riavvolgerà automaticamente la tua posizione.",
@@ -108,7 +110,7 @@
"LabelContinueSeries": "Continua Serie",
"LabelCustomTime": "Personalizza tempo",
"LabelDescription": "Descrizione",
"LabelDisableAudioFadeOut": "Disabilita audio fade out",
"LabelDisableAudioFadeOut": "Disabilita dissolvenza audio in uscita",
"LabelDisableAudioFadeOutHelp": "Il volume dell'audio inizierà a diminuire quando rimane meno di 1 minuto sul timer di spegnimento. Abilita questa impostazione per non diminuirlo.",
"LabelDisableAutoRewind": "Disabilita auto riavvolgimento",
"LabelDisableShakeToReset": "Disabilita shake to reset",
@@ -125,7 +127,7 @@
"LabelEnableMp3IndexSeeking": "Abilita la ricerca dell'indice mp3",
"LabelEnableMp3IndexSeekingHelp": "Questa impostazione dovrebbe essere abilitata solo se hai file mp3 che non vengono ricercati correttamente. La ricerca imprecisa è molto probabilmente dovuta ai file MP3 a birate variabile (VBR). Questa impostazione imporrà la ricerca dell'indice, in cui viene creata una mappatura tempo-byte durante la lettura del file. In alcuni casi, con file MP3 di grandi dimensioni, si verificherà un ritardo durante la ricerca verso la fine del file.",
"LabelEnd": "Fine",
"LabelEndOfChapter": "End del capitolo",
"LabelEndOfChapter": "Fine del capitolo",
"LabelEndTime": "Tempo alla fine",
"LabelEpisode": "Episodio",
"LabelFeedURL": "Feed URL",
@@ -141,7 +143,7 @@
"LabelHapticFeedback": "Feedback tattile",
"LabelHasEbook": "Ha l'ebook",
"LabelHasSupplementaryEbook": "Ha un ebook supplementale",
"LabelHeavy": "Heavy",
"LabelHeavy": "Forte",
"LabelHigh": "Alto",
"LabelHost": "Host",
"LabelIncomplete": "Incompleta",
@@ -153,14 +155,14 @@
"LabelLayout": "Layout",
"LabelLayoutAuto": "Auto",
"LabelLayoutSinglePage": "Pagina singola",
"LabelLight": "Light",
"LabelLight": "Leggera",
"LabelLineSpacing": "Interlinea",
"LabelListenAgain": "Ascolta ancora",
"LabelLocalBooks": "Libri Locali",
"LabelLocalPodcasts": "Podcasts Locali",
"LabelLockOrientation": "Blocca orientamento",
"LabelLockPlayer": "Blocca Player",
"LabelLow": "Basso",
"LabelLow": "Bassa",
"LabelMediaType": "Tipo Media",
"LabelMedium": "Medio",
"LabelMore": "Molto",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Leggi Ancora",
"LabelRecentlyAdded": "Aggiunti Recentemente",
"LabelRecentSeries": "Serie Recenti",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Email del proprietario personalizzato",
"LabelRSSFeedCustomOwnerName": "Nome del proprietario personalizzato",
"LabelRSSFeedPreventIndexing": "Impedisci l'indicizzazione",
@@ -238,15 +241,15 @@
"MessageAttemptingServerConnection": "Tentativo di connessione al server...",
"MessageAudiobookshelfServerNotConnected": "Audiobookshelf server non connesso",
"MessageAudiobookshelfServerRequired": "<strong>Importante!</strong> Questa app è progettata per funzionare con un server Audiobookshelf ospitato da te o da qualcuno che conosci. Questa app non fornisce alcun contenuto.",
"MessageBookshelfEmpty": "Bookshelf vuoto",
"MessageBookshelfEmpty": "Scaffale vuoto",
"MessageConfirmDeleteLocalEpisode": "Rimuovi episodi locali \"{0}\" dal tuo dispositivo? i file sul server non verranno toccati.",
"MessageConfirmDeleteLocalFiles": "Remove i file locali dell'oggetto? i file sul server e i progressi non verranno toccati.",
"MessageConfirmDiscardProgress": "Sei sicuro di voler resettare i tuoi progressi?",
"MessageConfirmMarkAsFinished": "Sei sicuro di voler contrassegnare questo elemento come finito?",
"MessageConfirmRemoveBookmark": "Sei sicuro di voler rimuovere il segnalibro?",
"MessageDiscardProgress": "Elimina Progressi",
"MessageDownloadCompleteProcessing": "Download completato. Elaboratione...",
"MessageDownloading": "Downloading...",
"MessageDownloadCompleteProcessing": "Download completato. Elaborazione...",
"MessageDownloading": "Scaricamento...",
"MessageDownloadingEpisode": "Download episodio in corso",
"MessageEpisodesQueuedForDownload": "{0} Episodio(i) in coda per il Download",
"MessageFeedURLWillBe": "Feed URL Saranno {0}",
@@ -269,8 +272,9 @@
"MessageNoMediaFolders": "Nessuna Cartella Media",
"MessageNoNetworkConnection": "Nessuna connessione di rete",
"MessageNoPodcastsFound": "Nessun podcasts trovato",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Nessun aggiornamento necessario",
"MessageNoUserPlaylists": "non hai nessuna Playlist",
"MessageNoUserPlaylists": "Non hai nessuna Playlist",
"MessageReportBugsAndContribute": "Segnala bug, richiedi funzionalità e contribuisci",
"MessageSocketConnectedOverMeteredCellular": "Collegato tramite Rete cellulare a consumo",
"MessageSocketConnectedOverMeteredWifi": "Collegato tramite rete wifi a consumo",
@@ -289,4 +293,4 @@
"ToastPodcastCreateSuccess": "Podcast creato Correttamente",
"ToastRSSFeedCloseFailed": "Errore chiusura RSS feed",
"ToastRSSFeedCloseSuccess": "RSS feed chiuso"
}
}
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "History",
"ButtonHome": "Pradžia",
"ButtonIssues": "Problemos",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Pridėta {0}",
"LabelAddToPlaylist": "Pridėti į grojaraštį",
"LabelAll": "Visi",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autorius",
"LabelAuthorFirstLast": "Autorius (Vardas Pavardė)",
"LabelAuthorLastFirst": "Autorius (Pavardė, Vardas)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Pasirinktinis savininko el. paštas",
"LabelRSSFeedCustomOwnerName": "Pasirinktinis savininko vardas",
"LabelRSSFeedPreventIndexing": "Neleisti indeksuoti",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoPodcastsFound": "Tinklalaidžių nerasta",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Nereikalingi jokie atnaujinimai",
"MessageNoUserPlaylists": "Neturite grojaraščių",
"MessageReportBugsAndContribute": "Praneškite apie klaidas, prašykite naujovių ir prisidėkite",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "History",
"ButtonHome": "Home",
"ButtonIssues": "Issues",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Toegevoegd op",
"LabelAddToPlaylist": "Toevoegen aan afspeellijst",
"LabelAll": "Alle",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Auteur",
"LabelAuthorFirstLast": "Auteur (Voornaam Achternaam)",
"LabelAuthorLastFirst": "Auteur (Achternaam, Voornaam)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Aangepast e-mailadres eigenaar",
"LabelRSSFeedCustomOwnerName": "Aangepaste naam eigenaar",
"LabelRSSFeedPreventIndexing": "Voorkom indexering",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoPodcastsFound": "Geen podcasts gevonden",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Geen bijwerkingen waren noodzakelijk",
"MessageNoUserPlaylists": "Je hebt geen afspeellijsten",
"MessageReportBugsAndContribute": "Rapporteer bugs, vraag functionaliteiten aan en draag bij op",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "History",
"ButtonHome": "Hjem",
"ButtonIssues": "Problemer",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Dato lagt til ",
"LabelAddToPlaylist": "Legg til i spilleliste",
"LabelAll": "Alle",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Forfatter",
"LabelAuthorFirstLast": "Forfatter (Fornavn Etternavn)",
"LabelAuthorLastFirst": "Forfatter (Etternavn Fornavn)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Tilpasset eier Epost",
"LabelRSSFeedCustomOwnerName": "Tilpasset eier Navn",
"LabelRSSFeedPreventIndexing": "Forhindre indeksering",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoPodcastsFound": "Ingen podcaster funnet",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Ingen oppdatering var nødvendig",
"MessageNoUserPlaylists": "Du har ingen spillelister",
"MessageReportBugsAndContribute": "Rapporter feil, forespør funksjoner og tillegg og bidra på",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Usuń lokalny element",
"ButtonDisableAutoTimer": "Wyłącz automatyczny wyłącznik",
"ButtonDisconnect": "Rozłącz",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "Historia",
"ButtonHome": "Strona główna",
"ButtonIssues": "Błędy",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Dodano w",
"LabelAddToPlaylist": "Dodaj do playlisty",
"LabelAll": "Wszystkie",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Rosnąco)",
"LabelAuthorLastFirst": "Author (Malejąco)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Czytaj ponownie",
"LabelRecentlyAdded": "Ostatnio dodane",
"LabelRecentSeries": "Najnowsze serie",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Custom owner Email",
"LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedPreventIndexing": "Zapobiegaj indeksowaniu",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "Brak folderów z mediami",
"MessageNoNetworkConnection": "Brak połączenia sieciowego",
"MessageNoPodcastsFound": "Nie znaleziono podcastów",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Brak aktualizacji",
"MessageNoUserPlaylists": "Nie posiadasz playlist",
"MessageReportBugsAndContribute": "Zgłoś błędy, pomysły i pomóż rozwijać aplikację na",
+296
View File
@@ -0,0 +1,296 @@
{
"ButtonAdd": "Adicionar",
"ButtonAddNewServer": "Adicionar Novo Servidor",
"ButtonAuthors": "Autores",
"ButtonBack": "Voltar",
"ButtonCancel": "Cancelar",
"ButtonCancelTimer": "Cancelar Timer",
"ButtonClearFilter": "Limpar Filtro",
"ButtonCloseFeed": "Fechar Feed",
"ButtonCollections": "Coleções",
"ButtonConnect": "Conectar",
"ButtonConnectToServer": "Conectar ao Servidor",
"ButtonCreate": "Criar",
"ButtonCreateBookmark": "Criar Marcador",
"ButtonCreateNewPlaylist": "Criar Nova Lista de Reprodução",
"ButtonDelete": "Apagar",
"ButtonDeleteLocalEpisode": "Apagar episódio local",
"ButtonDeleteLocalFile": "Apagar arquivo local",
"ButtonDeleteLocalItem": "Apagar item local",
"ButtonDisableAutoTimer": "Desativar Timer Automático",
"ButtonDisconnect": "Desconectar",
"ButtonGoToWebClient": "Ir para o Cliente Web",
"ButtonHistory": "Histórico",
"ButtonHome": "Principal",
"ButtonIssues": "Problemas",
"ButtonLatest": "Mais Recentes",
"ButtonLibrary": "Biblioteca",
"ButtonLocalMedia": "Mídia Local",
"ButtonManageLocalFiles": "Gerenciar Arquivos Locais",
"ButtonNewFolder": "Nova Pasta",
"ButtonNextEpisode": "Próximo Episódio",
"ButtonOpenFeed": "Abrir Feed",
"ButtonOverride": "Sobrepor",
"ButtonPause": "Pausar",
"ButtonPlay": "Reproduzir",
"ButtonPlaying": "Reproduzindo",
"ButtonPlaylists": "Lista de Reprodução",
"ButtonRead": "Ler",
"ButtonRemove": "Remover",
"ButtonRemoveFromServer": "Remover do Servidor",
"ButtonSave": "Salvar",
"ButtonSaveOrder": "Salvar Ordem",
"ButtonSearch": "Pesquisar",
"ButtonSendEbookToDevice": "Enviar Ebook para Dispositivo",
"ButtonSeries": "Série",
"ButtonSetTimer": "Definir Timer",
"ButtonStream": "Stream",
"ButtonSubmit": "Enviar",
"ButtonSwitchServerUser": "Trocar Servidor/Usuário",
"ButtonUserStats": "Estatísticas do Usuário",
"ButtonYes": "Sim",
"HeaderAccount": "Conta",
"HeaderAdvanced": "Avançado",
"HeaderAudioTracks": "Trilhas de áudio",
"HeaderChapters": "Capítulos",
"HeaderCollection": "Coleção",
"HeaderCollectionItems": "Itens da Coleção",
"HeaderConnectionStatus": "Status da Conexão",
"HeaderDetails": "Detalhes",
"HeaderDownloads": "Downloads",
"HeaderEbookFiles": "Arquivos Ebook",
"HeaderEpisodes": "Episódios",
"HeaderEreaderSettings": "Configurações Ereader",
"HeaderLatestEpisodes": "Últimos episódios",
"HeaderLibraries": "Bibliotecas",
"HeaderLocalFolders": "Pastas Locais",
"HeaderLocalLibraryItems": "Itens de Biblioteca Locais",
"HeaderNewPlaylist": "Nova Lista de Reprodução",
"HeaderOpenRSSFeed": "Abrir Feed RSS",
"HeaderPlaybackSettings": "Configurações de Reprodução",
"HeaderPlaylist": "Lista de Reprodução",
"HeaderPlaylistItems": "Itens da lista de reprodução",
"HeaderRSSFeed": "Feed RSS",
"HeaderRSSFeedGeneral": "Detalhes RSS",
"HeaderRSSFeedIsOpen": "Feed RSS está Aberto",
"HeaderSelectDownloadLocation": "Selecione Local para Download",
"HeaderSettings": "Configurações",
"HeaderSleepTimer": "Timer",
"HeaderSleepTimerSettings": "Configurações do Timer",
"HeaderStatsMinutesListeningChart": "Minutos Escutados (últimos 7 dias)",
"HeaderStatsRecentSessions": "Sessões Recentes",
"HeaderTableOfContents": "Sumário",
"HeaderUserInterfaceSettings": "Configurações da Interface do Usuário",
"HeaderYourStats": "Suas Estatísticas",
"LabelAdded": "Acrescentado",
"LabelAddedAt": "Acrescentado Em",
"LabelAddToPlaylist": "Adicionar à Lista de Reprodução",
"LabelAll": "Todos",
"LabelAllowSeekingOnMediaControls": "Permitir busca de posição nos controles de notificação de mídia",
"LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Nome Sobrenome)",
"LabelAuthorLastFirst": "Autor (Sobrenome, Nome)",
"LabelAuthors": "Autores",
"LabelAutoDownloadEpisodes": "Download Automático de Episódios",
"LabelAutoRewindTime": "Tempo para retroceder automaticamente",
"LabelAutoSleepTimer": "Timer automático",
"LabelAutoSleepTimerAutoRewind": "Retrocesso automático do timer",
"LabelAutoSleepTimerAutoRewindHelp": "Após o timer terminar, da próxima vez que o item for reproduzido a sua posição será retrocedida automaticamente.",
"LabelAutoSleepTimerHelp": "Ao reproduzir uma mídia entre as horas especificadas como inicío e fim, um timer será iniciado automaticamente.",
"LabelBooks": "Livros",
"LabelChapters": "Capítulos",
"LabelChapterTrack": "Trilha do Capítulo",
"LabelClosePlayer": "Fechar Reprodutor",
"LabelCollapseSeries": "Fechar Série",
"LabelComplete": "Concluído",
"LabelContinueBooks": "Continuar Livros",
"LabelContinueEpisodes": "Continuar Episódios",
"LabelContinueListening": "Continuar Escutando",
"LabelContinueReading": "Continuar Lendo",
"LabelContinueSeries": "Continuar Série",
"LabelCustomTime": "Personalizar tempo",
"LabelDescription": "Descrição",
"LabelDisableAudioFadeOut": "Desativar fade out de áudio",
"LabelDisableAudioFadeOutHelp": "O volume do áudio diminuirá progressivamente quando houver menos que 1 minuto no seu timer. Ative essa configuração para não diminuir o volume.",
"LabelDisableAutoRewind": "Desativar retrocesso automático",
"LabelDisableShakeToReset": "Desativar sacudir para resetar",
"LabelDisableShakeToResetHelp": "Sacudir o seu dispositivo quando o timer estiver ativo OU em até 2 minutos após o seu fim resetará o seu timer. Ative essa configuração para desabilitar o sacudir para resetar.",
"LabelDisableVibrateOnReset": "Desativar vibração ao resetar",
"LabelDisableVibrateOnResetHelp": "Quando o timer for resetado o seu dispositivo vibrará. Ative essa configuração para não vibrar quando o timer for resetado.",
"LabelDiscover": "Descobrir",
"LabelDownload": "Download",
"LabelDownloaded": "Download realizado",
"LabelDuration": "Duração",
"LabelEbook": "Ebook",
"LabelEbooks": "Ebooks",
"LabelEnable": "Ativar",
"LabelEnableMp3IndexSeeking": "Ativar busca por índice mp3",
"LabelEnableMp3IndexSeekingHelp": "Esta configuração só deve ser ativada se a busca em arquivos mp3 não estiver funcionando corretamente. Buscas incorretas são normalmente causadas por arquivos MP3 com bitrate variável (VBR). Esta configuração forçará a busca por índice, que é uma consulta do tempo-para-byte, elaborado durante a leitura do arquivo. Em alguns casos, com arquivos MP3 maiores, haverá um atraso ao buscar perto do final do arquivo.",
"LabelEnd": "Fim",
"LabelEndOfChapter": "Fim do Chapítulo",
"LabelEndTime": "Tempo final",
"LabelEpisode": "Episódio",
"LabelFeedURL": "URL do Feed",
"LabelFile": "Arquivo",
"LabelFileBirthtime": "Criação do Arquivo",
"LabelFileModified": "Modificação do Arquivo",
"LabelFilename": "Nome do Arquivo",
"LabelFinished": "Concluído",
"LabelFolder": "Pasta",
"LabelFontScale": "Escala de fonte",
"LabelGenre": "Gênero",
"LabelGenres": "Gêneros",
"LabelHapticFeedback": "Feedback tátil",
"LabelHasEbook": "Tem ebook",
"LabelHasSupplementaryEbook": "Tem ebook complementar",
"LabelHeavy": "Pesado",
"LabelHigh": "Alta",
"LabelHost": "Host",
"LabelIncomplete": "Incompleto",
"LabelInProgress": "Em Andamento",
"LabelInternalAppStorage": "Armazenamento Interno do App",
"LabelJumpBackwardsTime": "Retroceder tempo",
"LabelJumpForwardsTime": "Adiantar tempo",
"LabelLanguage": "Idioma",
"LabelLayout": "Layout",
"LabelLayoutAuto": "Automático",
"LabelLayoutSinglePage": "Uma página",
"LabelLight": "Leve",
"LabelLineSpacing": "Espaçamento entre linhas",
"LabelListenAgain": "Escutar novamente",
"LabelLocalBooks": "Livros Locais",
"LabelLocalPodcasts": "Podcasts Locais",
"LabelLockOrientation": "Travar orientação",
"LabelLockPlayer": "Travar Reprodutor",
"LabelLow": "Baixa",
"LabelMediaType": "Tipo de Mídia",
"LabelMedium": "Média",
"LabelMore": "Mais",
"LabelMoreInfo": "Mais Informações",
"LabelName": "Nome",
"LabelNarrator": "Narrador",
"LabelNarrators": "Narradores",
"LabelNewestAuthors": "Novos Autores",
"LabelNewestEpisodes": "Episódios mais recentes",
"LabelNo": "Não",
"LabelNotFinished": "Não Concluído",
"LabelNotStarted": "Não Iniciado",
"LabelOff": "Desligado",
"LabelPassword": "Senha",
"LabelPath": "Caminho",
"LabelPlaybackDirect": "Direto",
"LabelPlaybackLocal": "Local",
"LabelPlaybackSpeed": "Velocidade de Reprodução",
"LabelPlaybackTranscode": "Transcodificar",
"LabelPodcast": "Podcast",
"LabelPodcasts": "Podcasts",
"LabelPreventIndexing": "Evitar que o seu feed seja indexado pelos diretórios de podcast do iTunes e Google",
"LabelProgress": "Progresso",
"LabelPubDate": "Data de Publicação",
"LabelPublishYear": "Ano de Publicação",
"LabelRead": "Lido",
"LabelReadAgain": "Ler Novamente",
"LabelRecentlyAdded": "Novidades",
"LabelRecentSeries": "Séries Recentes",
"LabelRemoveFromPlaylist": "Remover da Lista de Reprodução",
"LabelRSSFeedCustomOwnerEmail": "Email do dono personalizado",
"LabelRSSFeedCustomOwnerName": "Nome do dono personalizado",
"LabelRSSFeedPreventIndexing": "Impedir Indexação",
"LabelRSSFeedSlug": "Slug do Feed RSS",
"LabelScaleElapsedTimeBySpeed": "Proporcionalizar Tempo Decorrido com a Velocidade",
"LabelSeason": "Temporada",
"LabelSelectADevice": "Selecione um dispositivo",
"LabelSeries": "Série",
"LabelServerAddress": "Endereço do servidor",
"LabelSetEbookAsPrimary": "Definir como principal",
"LabelSetEbookAsSupplementary": "Definir como complementar",
"LabelShakeSensitivity": "Sensitividade do sacudir",
"LabelShowAll": "Exibir Todos",
"LabelSize": "Tamanho",
"LabelSleepTimer": "Timer",
"LabelStart": "Iniciar",
"LabelStartTime": "Iniciado Em",
"LabelStatsBestDay": "Melhor Dia",
"LabelStatsDailyAverage": "Média Diária",
"LabelStatsDays": "Dias",
"LabelStatsDaysListened": "Dias Escutando",
"LabelStatsInARow": "seguidos",
"LabelStatsItemsFinished": "Itens Concluídos",
"LabelStatsMinutes": "minutos",
"LabelStatsMinutesListening": "Minutos Escutando",
"LabelStatsWeekListening": "Tempo escutando na semana",
"LabelTag": "Etiqueta",
"LabelTags": "Etiquetas",
"LabelTheme": "Tema",
"LabelThemeDark": "Escuro",
"LabelThemeLight": "Claro",
"LabelTimeRemaining": "{0} restantes",
"LabelTitle": "Título",
"LabelTotalTrack": "Total da Trilha",
"LabelTracks": "Trilhas",
"LabelType": "Tipo",
"LabelUnlockPlayer": "Destravar Reprodutor",
"LabelUseBookshelfView": "Usar visão estante",
"LabelUser": "Usuário",
"LabelUsername": "Nome do Usuário",
"LabelVeryHigh": "Muito Alta",
"LabelVeryLow": "Muito Baixa",
"LabelYourBookmarks": "Seus Marcadores",
"LabelYourProgress": "Seu Progresso",
"MessageAndroid10Downloads": "Android 10 e versões anteriores utilizarão o armazenamento interno para downloads.",
"MessageAttemptingServerConnection": "Tentando conexão ao ...",
"MessageAudiobookshelfServerNotConnected": "Servidor Audiobookshelf não conectado",
"MessageAudiobookshelfServerRequired": "<strong>Importante!</strong> Esse aplicativo foi desenvolvido para funcionar com um servidor Audiobookshelf que você ou algum conhecido seu está mantendo. Esse aplicativo não oferece qualquer conteúdo.",
"MessageBookshelfEmpty": "Estante vazia",
"MessageConfirmDeleteLocalEpisode": "Remover episódio local \"{0}\" do seu dispositivo? O arquivo no servidor não será afetado.",
"MessageConfirmDeleteLocalFiles": "Remover arquivos locais deste item do seu dispositivo? Os arquivos no servidor e o seu progresso não serão afetados.",
"MessageConfirmDiscardProgress": "Tem certeza de que deseja restar o seu progresso?",
"MessageConfirmMarkAsFinished": "Tem certeza de que deseja marcar esse item como concluído?",
"MessageConfirmRemoveBookmark": "Tem certeza de que deseja remover o marcador?",
"MessageDiscardProgress": "Descartar Progresso",
"MessageDownloadCompleteProcessing": "Download concluído. Processando...",
"MessageDownloading": "Realizando o download...",
"MessageDownloadingEpisode": "Realizando o downloading do episódio",
"MessageEpisodesQueuedForDownload": "{0} Episódio(s) na fila de download",
"MessageFeedURLWillBe": "URL do Feed será {0}",
"MessageFetching": "Buscando...",
"MessageFollowTheProjectOnGithub": "Siga este projeto no Github",
"MessageItemDownloadCompleteFailedToCreate": "Download concluído mas não foi possível criar item da biblioteca",
"MessageLoading": "Carregando...",
"MessageLoadingServerData": "Carregando dados do servidor...",
"MessageMarkAsFinished": "Marcar como Concluído",
"MessageMediaLinkedToADifferentServer": "Mídia está associada a um servidor Audiobookshelf em um endereço diferente ({0}). O progresso será sincronizado quando conectado a esse servidor.",
"MessageMediaLinkedToADifferentUser": "Mídia está associada a este servidor mas o download foi feito por outro usuário. O progresso só será sincronizado para o usuário que realizou o download.",
"MessageMediaLinkedToServer": "Associado ao servidor {0}",
"MessageMediaLinkedToThisServer": "Mídia baixada está associada a esse servidor",
"MessageMediaNotLinkedToServer": "Mídia não está associada a um servidor Audiobookshelf. Nenhum progresso será sincronizado.",
"MessageNoBookmarks": "Sem Marcadores",
"MessageNoChapters": "Sem Capítulos",
"MessageNoItems": "Sem Itens",
"MessageNoItemsFound": "Nenhum item encontrado",
"MessageNoListeningSessions": "Sem Sessões de Escuta",
"MessageNoMediaFolders": "Sem Pastas de Mídia",
"MessageNoNetworkConnection": "Nem conexão de rede",
"MessageNoPodcastsFound": "Nenhum podcast encontrado",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Nenhuma atualização é necessária",
"MessageNoUserPlaylists": "Você não tem listas de reprodução",
"MessageReportBugsAndContribute": "Reporte bugs, peça funcionalidades e contribua em",
"MessageSocketConnectedOverMeteredCellular": "Socket conectado usando rede celular limitada",
"MessageSocketConnectedOverMeteredWifi": "Socket conectado usando wifi limitada",
"MessageSocketConnectedOverUnmeteredCellular": "Socket conectado usando rede celular ilimitada",
"MessageSocketConnectedOverUnmeteredWifi": "Socket conectado usando wifi ilimitada",
"MessageSocketNotConnected": "Socket não conectado",
"NoteRSSFeedPodcastAppsHttps": "Atenção: A maioria dos aplicativos de podcasts requer que a URL do feed RSS use HTTPS",
"NoteRSSFeedPodcastAppsPubDate": "Atenção: Um ou mais dos seus episódios não tem uma data de publicação. Alguns aplicativos de podcasts requerem isto.",
"ToastBookmarkCreateFailed": "Falha ao criar marcador",
"ToastBookmarkRemoveFailed": "Falha ao remover marcador",
"ToastBookmarkUpdateFailed": "Falha ao atualizar marcador",
"ToastItemMarkedAsFinishedFailed": "Falha ao marcar como Concluído",
"ToastItemMarkedAsNotFinishedFailed": "Falha ao marcar como Não Concluído",
"ToastPlaylistCreateFailed": "Falha ao criar lista de reprodução",
"ToastPodcastCreateFailed": "Falha ao criar podcast",
"ToastPodcastCreateSuccess": "Podcast criado",
"ToastRSSFeedCloseFailed": "Falha ao fechar feed RSS",
"ToastRSSFeedCloseSuccess": "Feed RSS fechado"
}
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Удалить локальный элемент",
"ButtonDisableAutoTimer": "Отключить автоматический таймер",
"ButtonDisconnect": "Отключиться",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "История",
"ButtonHome": "Домой",
"ButtonIssues": "Проблемы",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Дата добавления",
"LabelAddToPlaylist": "Добавить в плейлист",
"LabelAll": "Все",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Автор",
"LabelAuthorFirstLast": "Автор (Имя Фамилия)",
"LabelAuthorLastFirst": "Автор (Фамилия, Имя)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Недавно добавленные",
"LabelRecentSeries": "Недавние серии",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Пользовательский Email владельца",
"LabelRSSFeedCustomOwnerName": "Пользовательское Имя владельца",
"LabelRSSFeedPreventIndexing": "Запретить индексирование",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "Нет папок мультимедиа",
"MessageNoNetworkConnection": "Нет подключения к сети",
"MessageNoPodcastsFound": "Подкасты не найдены",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Обновления не требовались",
"MessageNoUserPlaylists": "У вас нет плейлистов",
"MessageReportBugsAndContribute": "Сообщайте об ошибках, запрашивайте функции и вносите свой вклад на",
+4
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "Delete local item",
"ButtonDisableAutoTimer": "Disable Auto Timer",
"ButtonDisconnect": "Disconnect",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "History",
"ButtonHome": "Hem",
"ButtonIssues": "Problem",
@@ -85,6 +86,7 @@
"LabelAddedAt": "Tillagd vid",
"LabelAddToPlaylist": "Lägg till i Spellista",
"LabelAll": "Alla",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Författare",
"LabelAuthorFirstLast": "Författare (Förnamn Efternamn)",
"LabelAuthorLastFirst": "Författare (Efternamn, Förnamn)",
@@ -190,6 +192,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
"LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Anpassad ägarens e-post",
"LabelRSSFeedCustomOwnerName": "Anpassat ägarnamn",
"LabelRSSFeedPreventIndexing": "Förhindra indexering",
@@ -269,6 +272,7 @@
"MessageNoMediaFolders": "No Media Folders",
"MessageNoNetworkConnection": "No network connection",
"MessageNoPodcastsFound": "Inga podcasts hittade",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Inga uppdateringar var nödvändiga",
"MessageNoUserPlaylists": "Du har inga spellistor",
"MessageReportBugsAndContribute": "Rapportera buggar, begär funktioner och bidra på",
+296
View File
@@ -0,0 +1,296 @@
{
"ButtonAdd": "Додати",
"ButtonAddNewServer": "Додати новий сервер",
"ButtonAuthors": "Автори",
"ButtonBack": "Назад",
"ButtonCancel": "Скасувати",
"ButtonCancelTimer": "Скасувати таймер",
"ButtonClearFilter": "Скинути фільтри",
"ButtonCloseFeed": "Закрити стрічку",
"ButtonCollections": "Добірки",
"ButtonConnect": "Підключитися",
"ButtonConnectToServer": "Підключитися до сервера",
"ButtonCreate": "Створити",
"ButtonCreateBookmark": "Додати закладку",
"ButtonCreateNewPlaylist": "Створити новий список відтворення",
"ButtonDelete": "Видалити",
"ButtonDeleteLocalEpisode": "Видалити локальний епізод",
"ButtonDeleteLocalFile": "Видалити локальний файл",
"ButtonDeleteLocalItem": "Видалити локальний елемент",
"ButtonDisableAutoTimer": "Вимкнути автотаймер",
"ButtonDisconnect": "Відключитися",
"ButtonGoToWebClient": "Відкрити вебклієнт",
"ButtonHistory": "Історія",
"ButtonHome": "Головна",
"ButtonIssues": "Проблеми",
"ButtonLatest": "Останні",
"ButtonLibrary": "Бібліотека",
"ButtonLocalMedia": "Локальні файли",
"ButtonManageLocalFiles": "Керування локальними файлами",
"ButtonNewFolder": "Нова тека",
"ButtonNextEpisode": "Наступний епізод",
"ButtonOpenFeed": "Відкрити стрічку",
"ButtonOverride": "Перевизначити",
"ButtonPause": "Призупинити",
"ButtonPlay": "Відтворити",
"ButtonPlaying": "Відтворюється",
"ButtonPlaylists": "Списки відтворення",
"ButtonRead": "Читати",
"ButtonRemove": "Видалити",
"ButtonRemoveFromServer": "Видалити з сервера",
"ButtonSave": "Зберегти",
"ButtonSaveOrder": "Зберегти порядок",
"ButtonSearch": "Пошук",
"ButtonSendEbookToDevice": "Надіслати книгу на пристрій",
"ButtonSeries": "Серії",
"ButtonSetTimer": "Встановити таймер",
"ButtonStream": "Транслювати",
"ButtonSubmit": "Ввести",
"ButtonSwitchServerUser": "Змінити сервер/користувача",
"ButtonUserStats": "Статистика",
"ButtonYes": "Так",
"HeaderAccount": "Профіль",
"HeaderAdvanced": "Розширені",
"HeaderAudioTracks": "Аудіодоріжки",
"HeaderChapters": "Глави",
"HeaderCollection": "Добірка",
"HeaderCollectionItems": "Елементи добірки",
"HeaderConnectionStatus": "Стан з'єднання",
"HeaderDetails": "Подробиці",
"HeaderDownloads": "Завантаження",
"HeaderEbookFiles": "Файли електронних книг",
"HeaderEpisodes": "Епізоди",
"HeaderEreaderSettings": "Налаштування читання",
"HeaderLatestEpisodes": "Останні епізоди",
"HeaderLibraries": "Бібліотеки",
"HeaderLocalFolders": "Локальні теки",
"HeaderLocalLibraryItems": "Локальні елементи бібліотеки",
"HeaderNewPlaylist": "Новий список відтворення",
"HeaderOpenRSSFeed": "Відкрити RSS-канал",
"HeaderPlaybackSettings": "Налаштування відтворення",
"HeaderPlaylist": "Список відтворення",
"HeaderPlaylistItems": "Елементи списку",
"HeaderRSSFeed": "RSS-канал",
"HeaderRSSFeedGeneral": "Деталі RSS",
"HeaderRSSFeedIsOpen": "RSS-канал відкрито",
"HeaderSelectDownloadLocation": "Виберіть розташування завантажень",
"HeaderSettings": "Налаштування",
"HeaderSleepTimer": "Таймер вимкнення",
"HeaderSleepTimerSettings": "Налаштування таймера вимкнення",
"HeaderStatsMinutesListeningChart": "Хвилин прослухано (останні 7 днів)",
"HeaderStatsRecentSessions": "Останні сеанси",
"HeaderTableOfContents": "Зміст",
"HeaderUserInterfaceSettings": "Налаштування користувацького інтерфейсу",
"HeaderYourStats": "Ваша статистика",
"LabelAdded": "Додано",
"LabelAddedAt": "Дата додавання",
"LabelAddToPlaylist": "Додати до списку відтворення",
"LabelAll": "Усе",
"LabelAllowSeekingOnMediaControls": "Увімкнути перемотування в меню управління медіа",
"LabelAuthor": "Автор",
"LabelAuthorFirstLast": "Автор (за ім'ям)",
"LabelAuthorLastFirst": "Автор (за прізвищем)",
"LabelAuthors": "Автори",
"LabelAutoDownloadEpisodes": "Автозавантаження епізодів",
"LabelAutoRewindTime": "Час автоперемотування",
"LabelAutoSleepTimer": "Автотаймер вимкнення",
"LabelAutoSleepTimerAutoRewind": "Автоперемотування автотаймеру вимкнення",
"LabelAutoSleepTimerAutoRewindHelp": "Коли сплине автотаймер вимкнення, відтворення знову автоматично перемотає доріжку.",
"LabelAutoSleepTimerHelp": "Таймер вимкнення автоматично ввімкнеться при відтворенні медіа між вказаним початковим та кінцевим часом.",
"LabelBooks": "Книги",
"LabelChapters": "Глави",
"LabelChapterTrack": "Прогрес глави",
"LabelClosePlayer": "Закрити програвач",
"LabelCollapseSeries": "Згорнути серії",
"LabelComplete": "Завершити",
"LabelContinueBooks": "Продовжити книги",
"LabelContinueEpisodes": "Продовжити епізоди",
"LabelContinueListening": "Слухати далі",
"LabelContinueReading": "Читати далі",
"LabelContinueSeries": "Продовжити серії",
"LabelCustomTime": "Власний час",
"LabelDescription": "Опис",
"LabelDisableAudioFadeOut": "Вимкнути затихання аудіо",
"LabelDisableAudioFadeOutHelp": "Гучність звуку почне зменшуватися, коли на таймері вимкнення лишиться 1 хвилина. Увімкніть це налаштування, аби прибрати затихання.",
"LabelDisableAutoRewind": "Вимкнути автоперемотування",
"LabelDisableShakeToReset": "Вимкнути скидання струшуванням",
"LabelDisableShakeToResetHelp": "Якщо потрясти пристроєм під час роботи таймера або протягом 2 хвилин після його закінчення, то таймер перезапуститься. Увімкніть це налаштування, аби вимкнути перезапуск струшуванням.",
"LabelDisableVibrateOnReset": "Вимкнути вібрацію при скиданні",
"LabelDisableVibrateOnResetHelp": "Коли таймер вимкнення буде скинуто, ваш пристрій завібрує. Увімкніть цей параметр, щоб не вібрувати при скиданні таймера.",
"LabelDiscover": "Огляд",
"LabelDownload": "Завантажити",
"LabelDownloaded": "Завантажено",
"LabelDuration": "Тривалість",
"LabelEbook": "Електронна книга",
"LabelEbooks": "Електронні книги",
"LabelEnable": "Увімкнути",
"LabelEnableMp3IndexSeeking": "Увімкнути індексоване перемотування mp3",
"LabelEnableMp3IndexSeekingHelp": "Цей параметр слід увімкнути, якщо у вас є mp3-файли, які перемотуються некоректно. Неточність, найімовірніше, спричинена MP3-файлами зі змінним бітрейтом (VBR). Цей параметр увімкне пошук за індексом, у якому під час зчитування файлу індексується прогрес. У деяких випадках у великих MP3-файлах може виникнути затримка під час перемотування в кінці файлу.",
"LabelEnd": "Кінець",
"LabelEndOfChapter": "Кінець глави",
"LabelEndTime": "Час завершення",
"LabelEpisode": "Епізод",
"LabelFeedURL": "Адреса стрічки",
"LabelFile": "Файл",
"LabelFileBirthtime": "Дата створення",
"LabelFileModified": "Дата змінення",
"LabelFilename": "Ім'я файлу",
"LabelFinished": "Завершено",
"LabelFolder": "Тека",
"LabelFontScale": "Розмір шрифту",
"LabelGenre": "Жанр",
"LabelGenres": "Жанри",
"LabelHapticFeedback": "Вібровідгук",
"LabelHasEbook": "Має електронну книгу",
"LabelHasSupplementaryEbook": "Має додаткову електронну книгу",
"LabelHeavy": "Сильно",
"LabelHigh": "Високо",
"LabelHost": "Гост",
"LabelIncomplete": "Не завершено",
"LabelInProgress": "У процесі",
"LabelInternalAppStorage": "Внутрішня пам'ять додатку",
"LabelJumpBackwardsTime": "Час відмотування назад",
"LabelJumpForwardsTime": "Час перемотування вперед",
"LabelLanguage": "Мова",
"LabelLayout": "Вигляд",
"LabelLayoutAuto": "Автоматично",
"LabelLayoutSinglePage": "Одна сторінка",
"LabelLight": "Легко",
"LabelLineSpacing": "Відстань між рядками",
"LabelListenAgain": "Слухати знову",
"LabelLocalBooks": "Локальні книги",
"LabelLocalPodcasts": "Локальні подкасти",
"LabelLockOrientation": "Вимкнути поворот",
"LabelLockPlayer": "Заблокувати програвач",
"LabelLow": "Низько",
"LabelMediaType": "Тип медіа",
"LabelMedium": "Середньо",
"LabelMore": "Більше",
"LabelMoreInfo": "Докладніше",
"LabelName": "Назва",
"LabelNarrator": "Читець",
"LabelNarrators": "Читці",
"LabelNewestAuthors": "Нові автори",
"LabelNewestEpisodes": "Нові епізоди",
"LabelNo": "Ні",
"LabelNotFinished": "Незавершені",
"LabelNotStarted": "Непочаті",
"LabelOff": "Вимкнути",
"LabelPassword": "Пароль",
"LabelPath": "Шлях",
"LabelPlaybackDirect": "Безпосередньо",
"LabelPlaybackLocal": "Локально",
"LabelPlaybackSpeed": "Швидкість відтворення",
"LabelPlaybackTranscode": "Перекодовано",
"LabelPodcast": "Подкаст",
"LabelPodcasts": "Подкасти",
"LabelPreventIndexing": "Заборонити індексування вашого каналу каталогами подкастів iTunes та Google",
"LabelProgress": "Прогрес",
"LabelPubDate": "Дата публікації",
"LabelPublishYear": "Рік публікації",
"LabelRead": "Читати",
"LabelReadAgain": "Читати знову",
"LabelRecentlyAdded": "Нещодавно додані",
"LabelRecentSeries": "Останні серії",
"LabelRemoveFromPlaylist": "Видалити зі списку",
"LabelRSSFeedCustomOwnerEmail": "Користувацька електронна адреса власника",
"LabelRSSFeedCustomOwnerName": "Користувацьке ім'я власника",
"LabelRSSFeedPreventIndexing": "Запобігати індексації",
"LabelRSSFeedSlug": "Назва RSS-каналу",
"LabelScaleElapsedTimeBySpeed": "Час відповідно швидкості",
"LabelSeason": "Сезон",
"LabelSelectADevice": "Обрати пристрій",
"LabelSeries": "Серії",
"LabelServerAddress": "Адреса сервера",
"LabelSetEbookAsPrimary": "Зробити основною",
"LabelSetEbookAsSupplementary": "Зробити додатковою",
"LabelShakeSensitivity": "Чутливість струшування",
"LabelShowAll": "Показати все",
"LabelSize": "Розмір",
"LabelSleepTimer": "Таймер вимкнення",
"LabelStart": "Початок",
"LabelStartTime": "Час початку",
"LabelStatsBestDay": "Найкращий день",
"LabelStatsDailyAverage": "В середньому за добу",
"LabelStatsDays": "Днів",
"LabelStatsDaysListened": "Днів прослухано",
"LabelStatsInARow": "поспіль",
"LabelStatsItemsFinished": "Елементів завершено",
"LabelStatsMinutes": "хвилин",
"LabelStatsMinutesListening": "Хвилин прослухано",
"LabelStatsWeekListening": "Прослухано за тиждень",
"LabelTag": "Мітка",
"LabelTags": "Мітки",
"LabelTheme": "Тема",
"LabelThemeDark": "Темна",
"LabelThemeLight": "Світла",
"LabelTimeRemaining": "Лишилося: {0}",
"LabelTitle": "Назва",
"LabelTotalTrack": "Загальний прогрес",
"LabelTracks": "Доріжки",
"LabelType": "Тип",
"LabelUnlockPlayer": "Розблокувати програвач",
"LabelUseBookshelfView": "Показувати полиці",
"LabelUser": "Користувач",
"LabelUsername": "Ім’я користувача",
"LabelVeryHigh": "Дуже високо",
"LabelVeryLow": "Дуже низько",
"LabelYourBookmarks": "Ваші закладки",
"LabelYourProgress": "Ваш прогрес",
"MessageAndroid10Downloads": "У Android 10 та нижче для завантажень буде використано внутрішню пам'ять додатку.",
"MessageAttemptingServerConnection": "Спроба підключення до сервера...",
"MessageAudiobookshelfServerNotConnected": "Сервер Audiobookshelf не підключений",
"MessageAudiobookshelfServerRequired": "<strong>Важливо!</strong> Цей додаток розроблений для роботи з сервером Audiobookshelf, яким володієте ви або ваші знайомі. Цей додаток не надає жодного контенту.",
"MessageBookshelfEmpty": "Полиця порожня",
"MessageConfirmDeleteLocalEpisode": "Видалити локальний епізод \"{0}\" з вашого пристрою? Файл лишиться на сервері.",
"MessageConfirmDeleteLocalFiles": "Видалити локальні файли цього елемента з вашого пристрою? Файли лишаться на сервері.",
"MessageConfirmDiscardProgress": "Ви дійсно бажаєте скинути ваш прогрес?",
"MessageConfirmMarkAsFinished": "Ви дійсно бажаєте позначити цей елемент завершеним?",
"MessageConfirmRemoveBookmark": "Ви дійсно бажаєте видалити закладку?",
"MessageDiscardProgress": "Скинути прогрес",
"MessageDownloadCompleteProcessing": "Завантаження завершено. Обробка...",
"MessageDownloading": "Завантажується...",
"MessageDownloadingEpisode": "Завантаження епізоду",
"MessageEpisodesQueuedForDownload": "Епізодів у черзі завантаження: {0}",
"MessageFeedURLWillBe": "URL-адреса каналу буде {0}",
"MessageFetching": "Отримання...",
"MessageFollowTheProjectOnGithub": "Слідкуйте за проєктом на Github",
"MessageItemDownloadCompleteFailedToCreate": "Завантаження завершено, але не вдалося створити елемент бібліотеки",
"MessageLoading": "Завантаження...",
"MessageLoadingServerData": "Завантаження даних сервера...",
"MessageMarkAsFinished": "Позначити завершеним",
"MessageMediaLinkedToADifferentServer": "Медіа пов'язане з Audiobookself-сервером за іншою адресою ({0}). Прогрес буде синхронізовано після підключення до вказаного сервера.",
"MessageMediaLinkedToADifferentUser": "Медіа пов'язане з цим сервером, але було завантажене іншим користувачем. Прогрес буде синхронізовано лише для користувача, що завантажив медіа.",
"MessageMediaLinkedToServer": "Пов'язано з сервером {0}",
"MessageMediaLinkedToThisServer": "Завантажене медіа пов’язане з цим сервером",
"MessageMediaNotLinkedToServer": "Медіа не пов'язане з сервером Audiobookshelf. Прогрес не буде синхронізовано.",
"MessageNoBookmarks": "Немає закладок",
"MessageNoChapters": "Глави відсутні",
"MessageNoItems": "Елементи відсутні",
"MessageNoItemsFound": "Елементів не знайдено",
"MessageNoListeningSessions": "Сеанси прослуховування відсутні",
"MessageNoMediaFolders": "Теки медіа відсутні",
"MessageNoNetworkConnection": "Немає підключення до мережі",
"MessageNoPodcastsFound": "Подкастів не знайдено",
"MessageNoSeries": "Серії відсутні",
"MessageNoUpdatesWereNecessary": "Оновлень не потрібно",
"MessageNoUserPlaylists": "У вас немає списків відтворення",
"MessageReportBugsAndContribute": "Повідомляйте про помилки, пропонуйте функції та долучайтеся на",
"MessageSocketConnectedOverMeteredCellular": "Сокет під'єднано до лімітної мобільної мережі",
"MessageSocketConnectedOverMeteredWifi": "Сокет під'єднано до лімітної мережі Wi-Fi",
"MessageSocketConnectedOverUnmeteredCellular": "Сокет під'єднано до безлімітної мобільної мережі",
"MessageSocketConnectedOverUnmeteredWifi": "Сокет під'єднано до безлімітної мережі Wi-Fi",
"MessageSocketNotConnected": "Сокет не під'єднано",
"NoteRSSFeedPodcastAppsHttps": "Попередження: Більшість додатків подкастів вимагатимуть використання протоколу HTTPS від RSS-каналу",
"NoteRSSFeedPodcastAppsPubDate": "Попередження: 1 або більше ваших епізодів не мають дати публікації. Деякі додатки подкастів вимагають це.",
"ToastBookmarkCreateFailed": "Не вдалося створити закладку",
"ToastBookmarkRemoveFailed": "Не вдалося видалити закладку",
"ToastBookmarkUpdateFailed": "Не вдалося оновити закладку",
"ToastItemMarkedAsFinishedFailed": "Не вдалося позначити завершеним",
"ToastItemMarkedAsNotFinishedFailed": "Не вдалося позначити незавершеним",
"ToastPlaylistCreateFailed": "Не вдалося створити список",
"ToastPodcastCreateFailed": "Не вдалося створити подкаст",
"ToastPodcastCreateSuccess": "Подкаст успішно створено",
"ToastRSSFeedCloseFailed": "Не вдалося закрити RSS-канал",
"ToastRSSFeedCloseSuccess": "RSS-канал закрито"
}
+296
View File
@@ -0,0 +1,296 @@
{
"ButtonAdd": "Thêm",
"ButtonAddNewServer": "Thêm Máy Chủ Mới",
"ButtonAuthors": "Tác Giả",
"ButtonBack": "Quay Lại",
"ButtonCancel": "Hủy",
"ButtonCancelTimer": "Hủy Bộ Đếm",
"ButtonClearFilter": "Xóa Bộ Lọc",
"ButtonCloseFeed": "Đóng Feed",
"ButtonCollections": "Bộ Sưu Tập",
"ButtonConnect": "Kết Nối",
"ButtonConnectToServer": "Kết Nối tới Máy Chủ",
"ButtonCreate": "Tạo",
"ButtonCreateBookmark": "Tạo Đánh Dấu",
"ButtonCreateNewPlaylist": "Tạo Danh Sách Phát Mới",
"ButtonDelete": "Xóa",
"ButtonDeleteLocalEpisode": "Xóa tập phim địa phương",
"ButtonDeleteLocalFile": "Xóa tập tin địa phương",
"ButtonDeleteLocalItem": "Xóa mục địa phương",
"ButtonDisableAutoTimer": "Tắt Bộ Đếm Tự Động",
"ButtonDisconnect": "Ngắt Kết Nối",
"ButtonGoToWebClient": "Go to Web Client",
"ButtonHistory": "Lịch Sử",
"ButtonHome": "Trang Chủ",
"ButtonIssues": "Vấn Đề",
"ButtonLatest": "Mới Nhất",
"ButtonLibrary": "Thư Viện",
"ButtonLocalMedia": "Phương Tiện Địa Phương",
"ButtonManageLocalFiles": "Quản Lý Tập Tin Địa Phương",
"ButtonNewFolder": "Thư Mục Mới",
"ButtonNextEpisode": "Tập Kế Tiếp",
"ButtonOpenFeed": "Mở Feed",
"ButtonOverride": "Bỏ Qua",
"ButtonPause": "Tạm Dừng",
"ButtonPlay": "Phát",
"ButtonPlaying": "Đang Phát",
"ButtonPlaylists": "Danh Sách Phát",
"ButtonRead": "Đọc",
"ButtonRemove": "Xóa",
"ButtonRemoveFromServer": "Xóa khỏi Máy Chủ",
"ButtonSave": "Lưu",
"ButtonSaveOrder": "Lưu Thứ Tự",
"ButtonSearch": "Tìm Kiếm",
"ButtonSendEbookToDevice": "Gửi Ebook đến Thiết Bị",
"ButtonSeries": "Chuỗi",
"ButtonSetTimer": "Thiết Lập Bộ Đếm",
"ButtonStream": "Phát Trực Tiếp",
"ButtonSubmit": "Gửi",
"ButtonSwitchServerUser": "Chuyển Đổi Máy Chủ/Người Dùng",
"ButtonUserStats": "Thống Kê Người Dùng",
"ButtonYes": "Có",
"HeaderAccount": "Tài Khoản",
"HeaderAdvanced": "Nâng Cao",
"HeaderAudioTracks": "Danh Sách Âm Thanh",
"HeaderChapters": "Chương",
"HeaderCollection": "Bộ Sưu Tập",
"HeaderCollectionItems": "Mục Bộ Sưu Tập",
"HeaderConnectionStatus": "Trạng Thái Kết Nối",
"HeaderDetails": "Chi Tiết",
"HeaderDownloads": "Tải Xuống",
"HeaderEbookFiles": "Tập Tin Ebook",
"HeaderEpisodes": "Tập Phim",
"HeaderEreaderSettings": "Cài Đặt Ereader",
"HeaderLatestEpisodes": "Các tập phim mới nhất",
"HeaderLibraries": "Thư Viện",
"HeaderLocalFolders": "Thư Mục Địa Phương",
"HeaderLocalLibraryItems": "Các Mục Thư Viện Địa Phương",
"HeaderNewPlaylist": "Danh Sách Phát Mới",
"HeaderOpenRSSFeed": "Mở RSS Feed",
"HeaderPlaybackSettings": "Cài Đặt Phát Lại",
"HeaderPlaylist": "Danh Sách Phát",
"HeaderPlaylistItems": "Các Mục Danh Sách Phát",
"HeaderRSSFeed": "RSS Feed",
"HeaderRSSFeedGeneral": "Thông Tin Chi Tiết về RSS",
"HeaderRSSFeedIsOpen": "RSS Feed đã được Mở",
"HeaderSelectDownloadLocation": "Chọn Vị Trí Tải Xuống",
"HeaderSettings": "Cài Đặt",
"HeaderSleepTimer": "Bộ Đếm Thời Gian Ngủ",
"HeaderSleepTimerSettings": "Cài Đặt Bộ Đếm Thời Gian Ngủ",
"HeaderStatsMinutesListeningChart": "Phút Nghe (7 ngày gần đây)",
"HeaderStatsRecentSessions": "Các Phiên Gần Đây",
"HeaderTableOfContents": "Mục Lục",
"HeaderUserInterfaceSettings": "Cài Đặt Giao Diện Người Dùng",
"HeaderYourStats": "Thống Kê của Bạn",
"LabelAdded": "Đã Thêm",
"LabelAddedAt": "Đã Thêm Vào",
"LabelAddToPlaylist": "Thêm vào Danh Sách Phát",
"LabelAll": "Tất Cả",
"LabelAllowSeekingOnMediaControls": "Cho phép tìm kiếm vị trí trên các điều khiển phương tiện thông báo",
"LabelAuthor": "Tác Giả",
"LabelAuthorFirstLast": "Tác Giả (Tên Đầu Tiên, Họ)",
"LabelAuthorLastFirst": "Tác Giả (Họ, Tên Đầu Tiên)",
"LabelAuthors": "Tác Giả",
"LabelAutoDownloadEpisodes": "Tự Động Tải Xuống Các Tập Phim",
"LabelAutoRewindTime": "Thời Gian Tự Động Lùi",
"LabelAutoSleepTimer": "Bộ Đếm Thời Gian Ngủ Tự Động",
"LabelAutoSleepTimerAutoRewind": "Lùi Tự Động Bộ Đếm Thời Gian Ngủ",
"LabelAutoSleepTimerAutoRewindHelp": "Khi bộ đếm thời gian ngủ tự động hoàn thành, việc phát lại mục sẽ tự động lùi lại vị trí của bạn.",
"LabelAutoSleepTimerHelp": "Khi phát phương tiện giữa các thời gian bắt đầu và kết thúc được chỉ định, một bộ đếm thời gian ngủ sẽ tự động bắt đầu.",
"LabelBooks": "Sách",
"LabelChapters": "Chương",
"LabelChapterTrack": "Theo Dõi Chương",
"LabelClosePlayer": "Đóng Trình Phát",
"LabelCollapseSeries": "Thu Gọn Chuỗi",
"LabelComplete": "Hoàn Thành",
"LabelContinueBooks": "Tiếp Tục Sách",
"LabelContinueEpisodes": "Tiếp Tục Tập Phim",
"LabelContinueListening": "Tiếp Tục Nghe",
"LabelContinueReading": "Tiếp Tục Đọc",
"LabelContinueSeries": "Tiếp Tục Chuỗi",
"LabelCustomTime": "Thời Gian Tùy Chỉnh",
"LabelDescription": "Mô Tả",
"LabelDisableAudioFadeOut": "Tắt Phai Âm Thanh",
"LabelDisableAudioFadeOutHelp": "Âm lượng sẽ bắt đầu giảm khi còn ít hơn 1 phút trên bộ đếm thời gian ngủ. Bật cài đặt này để không phai âm thanh.",
"LabelDisableAutoRewind": "Tắt Lùi Tự Động",
"LabelDisableShakeToReset": "Tắt Rung Để Đặt Lại",
"LabelDisableShakeToResetHelp": "Rung thiết bị của bạn trong khi bộ đếm đang chạy HOẶC trong vòng 2 phút sau khi bộ đếm kết thúc sẽ đặt lại bộ đếm thời gian ngủ. Bật cài đặt này để tắt chế độ rung để đặt lại.",
"LabelDisableVibrateOnReset": "Tắt Rung Khi Đặt Lại",
"LabelDisableVibrateOnResetHelp": "Khi bộ đếm thời gian ngủ được đặt lại, thiết bị của bạn sẽ rung. Bật cài đặt này để không rung khi bộ đếm thời gian ngủ được đặt lại.",
"LabelDiscover": "Khám Phá",
"LabelDownload": "Tải Xuống",
"LabelDownloaded": "Đã Tải Xuống",
"LabelDuration": "Thời Lượng",
"LabelEbook": "Ebook",
"LabelEbooks": "Ebooks",
"LabelEnable": "Bật",
"LabelEnableMp3IndexSeeking": "Bật Tìm Kiếm Chỉ Mục Mp3",
"LabelEnableMp3IndexSeekingHelp": "Cài đặt này chỉ nên được bật nếu bạn có các tập tin mp3 không tìm kiếm đúng cách. Việc tìm kiếm không chính xác chủ yếu là do các tập tin MP3 biến đổi biến (VBR). Cài đặt này sẽ buộc tìm kiếm chỉ mục, trong đó một bản đồ thời gian-đến-byte được xây dựng khi tập tin được đọc. Trong một số trường hợp với các tập tin MP3 lớn, có thể có một sự trễ khi tìm kiếm về phía cuối của tập tin.",
"LabelEnd": "Kết Thúc",
"LabelEndOfChapter": "Kết Thúc Chương",
"LabelEndTime": "Thời Gian Kết Thúc",
"LabelEpisode": "Tập Phim",
"LabelFeedURL": "URL Feed",
"LabelFile": "Tập Tin",
"LabelFileBirthtime": "Thời Gian Tạo Tập Tin",
"LabelFileModified": "Tập Tin Đã Sửa Đổi",
"LabelFilename": "Tên Tập Tin",
"LabelFinished": "Hoàn Thành",
"LabelFolder": "Thư Mục",
"LabelFontScale": "Tỷ Lệ Phông Chữ",
"LabelGenre": "Thể Loại",
"LabelGenres": "Thể Loại",
"LabelHapticFeedback": "Phản Hồi Haptic",
"LabelHasEbook": "Có ebook",
"LabelHasSupplementaryEbook": "Có ebook bổ sung",
"LabelHeavy": "Nặng",
"LabelHigh": "Cao",
"LabelHost": "Máy Chủ",
"LabelIncomplete": "Chưa Hoàn Thành",
"LabelInProgress": "Đang Tiến Hành",
"LabelInternalAppStorage": "Bộ Nhớ Ứng Dụng Nội Bộ",
"LabelJumpBackwardsTime": "Nhảy Lùi Thời Gian",
"LabelJumpForwardsTime": "Nhảy Chuyển Tiếp Thời Gian",
"LabelLanguage": "Ngôn Ngữ",
"LabelLayout": "Bố Cục",
"LabelLayoutAuto": "Tự Động",
"LabelLayoutSinglePage": "Một Trang",
"LabelLight": "Nhẹ",
"LabelLineSpacing": "Khoảng Cách Dòng",
"LabelListenAgain": "Nghe Lại",
"LabelLocalBooks": "Sách Địa Phương",
"LabelLocalPodcasts": "Podcast Địa Phương",
"LabelLockOrientation": "Khóa Hướng",
"LabelLockPlayer": "Khóa Trình Phát",
"LabelLow": "Thấp",
"LabelMediaType": "Loại Phương Tiện",
"LabelMedium": "Trung Bình",
"LabelMore": "Thêm",
"LabelMoreInfo": "Thông Tin Thêm",
"LabelName": "Tên",
"LabelNarrator": "Người Đọc",
"LabelNarrators": "Người Đọc",
"LabelNewestAuthors": "Tác Giả Mới Nhất",
"LabelNewestEpisodes": "Các Tập Phim Mới Nhất",
"LabelNo": "Không",
"LabelNotFinished": "Chưa Hoàn Thành",
"LabelNotStarted": "Chưa Bắt Đầu",
"LabelOff": "Tắt",
"LabelPassword": "Mật Khẩu",
"LabelPath": "Đường Dẫn",
"LabelPlaybackDirect": "Trực Tiếp",
"LabelPlaybackLocal": "Địa Phương",
"LabelPlaybackSpeed": "Tốc Độ Phát Lại",
"LabelPlaybackTranscode": "Chuyển Đổi",
"LabelPodcast": "Podcast",
"LabelPodcasts": "Podcasts",
"LabelPreventIndexing": "Ngăn Chặn Feed của bạn được lập chỉ mục bởi iTunes và Google podcast directories",
"LabelProgress": "Tiến Độ",
"LabelPubDate": "Ngày Xuất Bản",
"LabelPublishYear": "Năm Xuất Bản",
"LabelRead": "Đã Đọc",
"LabelReadAgain": "Đọc Lại",
"LabelRecentlyAdded": "Được Thêm Gần Đây",
"LabelRecentSeries": "Chuỗi Gần Đây",
"LabelRemoveFromPlaylist": "Xóa khỏi Danh Sách Phát",
"LabelRSSFeedCustomOwnerEmail": "Email Chủ Sở Hữu Tùy Chỉnh",
"LabelRSSFeedCustomOwnerName": "Tên Chủ Sở Hữu Tùy Chỉnh",
"LabelRSSFeedPreventIndexing": "Ngăn Chặn Lập Chỉ Mục",
"LabelRSSFeedSlug": "RSS Feed Slug",
"LabelScaleElapsedTimeBySpeed": "Tỷ Lệ Thời Gian Đã Trôi Theo Tốc Độ",
"LabelSeason": "Mùa",
"LabelSelectADevice": "Chọn Một Thiết Bị",
"LabelSeries": "Chuỗi",
"LabelServerAddress": "Địa Chỉ Máy Chủ",
"LabelSetEbookAsPrimary": "Đặt Làm Chính",
"LabelSetEbookAsSupplementary": "Đặt Làm Bổ Sung",
"LabelShakeSensitivity": "Độ Nhạy Rung",
"LabelShowAll": "Hiển Thị Tất Cả",
"LabelSize": "Kích Thước",
"LabelSleepTimer": "Bộ Đếm Thời Gian Ngủ",
"LabelStart": "Bắt Đầu",
"LabelStartTime": "Thời Gian Bắt Đầu",
"LabelStatsBestDay": "Ngày Tốt Nhất",
"LabelStatsDailyAverage": "Trung Bình Hàng Ngày",
"LabelStatsDays": "Ngày",
"LabelStatsDaysListened": "Ngày Đã Nghe",
"LabelStatsInARow": "liên tiếp",
"LabelStatsItemsFinished": "Các Mục Đã Hoàn Thành",
"LabelStatsMinutes": "phút",
"LabelStatsMinutesListening": "Phút Đã Nghe",
"LabelStatsWeekListening": "Tuần Đã Nghe",
"LabelTag": "Thẻ",
"LabelTags": "Thẻ",
"LabelTheme": "Giao Diện",
"LabelThemeDark": "Tối",
"LabelThemeLight": "Sáng",
"LabelTimeRemaining": "{0} còn lại",
"LabelTitle": "Tiêu Đề",
"LabelTotalTrack": "Tổng Số Đường Dẫn",
"LabelTracks": "Các Đường Dẫn",
"LabelType": "Loại",
"LabelUnlockPlayer": "Mở Khóa Trình Phát",
"LabelUseBookshelfView": "Sử Dụng Chế Độ Xem Kệ Sách",
"LabelUser": "Người Dùng",
"LabelUsername": "Tên Người Dùng",
"LabelVeryHigh": "Rất Cao",
"LabelVeryLow": "Rất Thấp",
"LabelYourBookmarks": "Đánh Dấu của Bạn",
"LabelYourProgress": "Tiến Độ của Bạn",
"MessageAndroid10Downloads": "Android 10 và dưới đây sẽ sử dụng bộ nhớ ứng dụng nội bộ cho các tải xuống.",
"MessageAttemptingServerConnection": "Đang cố kết nối tới máy chủ...",
"MessageAudiobookshelfServerNotConnected": "Máy chủ Audiobookshelf không kết nối",
"MessageAudiobookshelfServerRequired": "<strong>Quan trọng!</strong> Ứng dụng này được thiết kế để hoạt động với một máy chủ Audiobookshelf mà bạn hoặc ai đó bạn biết đang lưu trữ. Ứng dụng này không cung cấp bất kỳ nội dung nào.",
"MessageBookshelfEmpty": "Kệ sách trống",
"MessageConfirmDeleteLocalEpisode": "Xóa tập phim địa phương \"{0}\" khỏi thiết bị của bạn? Tập tin trên máy chủ sẽ không bị ảnh hưởng.",
"MessageConfirmDeleteLocalFiles": "Xóa các tập tin địa phương của mục này khỏi thiết bị của bạn? Các tập tin trên máy chủ và tiến trình của bạn sẽ không bị ảnh hưởng.",
"MessageConfirmDiscardProgress": "Bạn có chắc chắn muốn đặt lại tiến trình của mình không?",
"MessageConfirmMarkAsFinished": "Bạn có chắc chắn muốn đánh dấu mục này là đã hoàn thành không?",
"MessageConfirmRemoveBookmark": "Bạn có chắc chắn muốn xóa đánh dấu?",
"MessageDiscardProgress": "Hủy Bỏ Tiến Độ",
"MessageDownloadCompleteProcessing": "Tải xuống hoàn tất. Đang xử lý...",
"MessageDownloading": "Đang tải xuống...",
"MessageDownloadingEpisode": "Đang tải xuống tập phim",
"MessageEpisodesQueuedForDownload": "{0} Tập phim được xếp hàng để tải xuống",
"MessageFeedURLWillBe": "URL Feed sẽ là {0}",
"MessageFetching": "Đang lấy dữ liệu...",
"MessageFollowTheProjectOnGithub": "Theo dõi dự án trên Github",
"MessageItemDownloadCompleteFailedToCreate": "Tải xuống mục hoàn tất nhưng không thể tạo mục thư viện",
"MessageLoading": "Đang tải...",
"MessageLoadingServerData": "Đang tải dữ liệu máy chủ...",
"MessageMarkAsFinished": "Đánh dấu là Hoàn Thành",
"MessageMediaLinkedToADifferentServer": "Phương tiện được liên kết với một máy chủ Audiobookshelf trên một địa chỉ khác ({0}). Tiến trình sẽ được đồng bộ hóa khi kết nối với địa chỉ máy chủ này.",
"MessageMediaLinkedToADifferentUser": "Phương tiện được liên kết với máy chủ này nhưng đã được tải xuống bởi một người dùng khác. Tiến trình chỉ sẽ được đồng bộ hóa với người dùng đã tải xuống nó.",
"MessageMediaLinkedToServer": "Được liên kết với máy chủ {0}",
"MessageMediaLinkedToThisServer": "Phương tiện đã tải xuống được liên kết với máy chủ này",
"MessageMediaNotLinkedToServer": "Phương tiện không được liên kết với một máy chủ Audiobookshelf. Không có tiến trình nào sẽ được đồng bộ hóa.",
"MessageNoBookmarks": "Không có Đánh Dấu",
"MessageNoChapters": "Không có Chương",
"MessageNoItems": "Không có Mục",
"MessageNoItemsFound": "Không tìm thấy mục",
"MessageNoListeningSessions": "Không có Phiên Nghe",
"MessageNoMediaFolders": "Không có Thư Mục Phương Tiện",
"MessageNoNetworkConnection": "Không có kết nối mạng",
"MessageNoPodcastsFound": "Không tìm thấy podcast",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "Không cần cập nhật nào",
"MessageNoUserPlaylists": "Bạn không có danh sách phát nào",
"MessageReportBugsAndContribute": "Báo cáo lỗi, yêu cầu tính năng và đóng góp tại",
"MessageSocketConnectedOverMeteredCellular": "Kết nối Socket qua dữ liệu di động đo lường",
"MessageSocketConnectedOverMeteredWifi": "Kết nối Socket qua wifi đo lường",
"MessageSocketConnectedOverUnmeteredCellular": "Kết nối Socket qua dữ liệu di động không đo lường",
"MessageSocketConnectedOverUnmeteredWifi": "Kết nối Socket qua wifi không đo lường",
"MessageSocketNotConnected": "Socket không kết nối",
"NoteRSSFeedPodcastAppsHttps": "Lưu ý: Hầu hết các ứng dụng podcast sẽ yêu cầu URL feed RSS sử dụng HTTPS",
"NoteRSSFeedPodcastAppsPubDate": "Lưu ý: 1 hoặc nhiều tập phim của bạn không có Ngày Xuất Bản. Một số ứng dụng podcast yêu cầu điều này.",
"ToastBookmarkCreateFailed": "Không thể tạo đánh dấu",
"ToastBookmarkRemoveFailed": "Không thể xóa đánh dấu",
"ToastBookmarkUpdateFailed": "Không thể cập nhật đánh dấu",
"ToastItemMarkedAsFinishedFailed": "Không thể đánh dấu là Hoàn Thành",
"ToastItemMarkedAsNotFinishedFailed": "Không thể đánh dấu là Chưa Hoàn Thành",
"ToastPlaylistCreateFailed": "Không thể tạo danh sách phát",
"ToastPodcastCreateFailed": "Không thể tạo podcast",
"ToastPodcastCreateSuccess": "Tạo podcast thành công",
"ToastRSSFeedCloseFailed": "Không thể đóng RSS feed",
"ToastRSSFeedCloseSuccess": "Đóng RSS feed thành công"
}
+33 -29
View File
@@ -19,6 +19,7 @@
"ButtonDeleteLocalItem": "删除本地项目",
"ButtonDisableAutoTimer": "禁用自动定时器",
"ButtonDisconnect": "断开连接",
"ButtonGoToWebClient": "转到 Web 客户端",
"ButtonHistory": "历史",
"ButtonHome": "首页",
"ButtonIssues": "问题",
@@ -85,6 +86,7 @@
"LabelAddedAt": "添加于",
"LabelAddToPlaylist": "添加到播放列表",
"LabelAll": "全部",
"LabelAllowSeekingOnMediaControls": "允许在媒体通知控件上查找位置",
"LabelAuthor": "作者",
"LabelAuthorFirstLast": "作者 (姓 名)",
"LabelAuthorLastFirst": "作者 (名, 姓)",
@@ -93,8 +95,8 @@
"LabelAutoRewindTime": "自动倒带时间",
"LabelAutoSleepTimer": "自动睡眠定时器",
"LabelAutoSleepTimerAutoRewind": "自动睡眠定时器自动倒带",
"LabelAutoSleepTimerAutoRewindHelp": "当自动睡眠计时器结束时再次播放该项目将自动倒带您之前的位置",
"LabelAutoSleepTimerHelp": "当在指定的时间范围内播放媒体时睡眠计时器将自动启动",
"LabelAutoSleepTimerAutoRewindHelp": "当自动睡眠计时器结束时, 再次播放该项目将自动倒带您之前的位置.",
"LabelAutoSleepTimerHelp": "当在指定的时间范围内播放媒体时, 睡眠计时器将自动启动.",
"LabelBooks": "图书",
"LabelChapters": "章节",
"LabelChapterTrack": "章节音轨",
@@ -109,12 +111,12 @@
"LabelCustomTime": "自定义时间",
"LabelDescription": "描述",
"LabelDisableAudioFadeOut": "禁用音频淡出",
"LabelDisableAudioFadeOutHelp": "当睡眠计时器的剩余时间不到1分钟时音频音量将开始降低启用此设置不淡出",
"LabelDisableAudioFadeOutHelp": "当睡眠计时器的剩余时间不到1分钟时, 音频音量将开始降低.启用此设置不淡出.",
"LabelDisableAutoRewind": "禁用自动倒带",
"LabelDisableShakeToReset": "禁用抖动设备重置",
"LabelDisableShakeToResetHelp": "在计时器运行时摇晃设备或者在计时器到期后2分钟内摇晃设备将重置睡眠计时器启用此设置可禁用抖动以重置",
"LabelDisableShakeToResetHelp": "在计时器运行时摇晃设备, 或者在计时器到期后 2 分钟内摇晃设备将重置睡眠计时器. 启用此设置可禁用抖动以重置.",
"LabelDisableVibrateOnReset": "重置时禁用振动",
"LabelDisableVibrateOnResetHelp": "当睡眠计时器重置时你的设备会振动启用此设置以在睡眠计时器重置时不振动",
"LabelDisableVibrateOnResetHelp": "当睡眠计时器重置时, 你的设备会振动. 启用此设置以在睡眠计时器重置时不振动.",
"LabelDiscover": "发现",
"LabelDownload": "下载",
"LabelDownloaded": "已下载",
@@ -122,8 +124,8 @@
"LabelEbook": "电子书",
"LabelEbooks": "电子书",
"LabelEnable": "启用",
"LabelEnableMp3IndexSeeking": "启用mp3索引搜索",
"LabelEnableMp3IndexSeekingHelp": "只有当您的mp3文件未正确查找时才应启用此设置不准确的搜索很可能是由于可变二进制VBRMP3文件此设置将强制进行索引查找即在读取文件时构建时间到字节的映射在某些情况下对于大型MP3文件在查找文件末尾时会有延迟",
"LabelEnableMp3IndexSeeking": "启用 mp3 索引搜索",
"LabelEnableMp3IndexSeekingHelp": "只有当您的mp3文件未正确查找时, 才应启用此设置.不准确的搜索很可能是由于可变二进制(VBR)MP3文件. 此设置将强制进行索引查找, 即在读取文件时构建时间到字节的映射. 在某些情况下, 对于大型MP3文件, 在查找文件末尾时会有延迟.",
"LabelEnd": "结束",
"LabelEndOfChapter": "章节结尾",
"LabelEndTime": "结束时间",
@@ -150,9 +152,9 @@
"LabelJumpBackwardsTime": "快退时间",
"LabelJumpForwardsTime": "快进时间",
"LabelLanguage": "语言",
"LabelLayout": "Layout",
"LabelLayoutAuto": "Auto",
"LabelLayoutSinglePage": "Single page",
"LabelLayout": "布局",
"LabelLayoutAuto": "自动",
"LabelLayoutSinglePage": "单页",
"LabelLight": "轻",
"LabelLineSpacing": "行间距",
"LabelListenAgain": "再次收听",
@@ -190,11 +192,12 @@
"LabelReadAgain": "再次阅读",
"LabelRecentlyAdded": "最近添加",
"LabelRecentSeries": "最近添加系列",
"LabelRemoveFromPlaylist": "从播放列表中删除",
"LabelRSSFeedCustomOwnerEmail": "自定义所有者电子邮件",
"LabelRSSFeedCustomOwnerName": "自定义所有者名称",
"LabelRSSFeedPreventIndexing": "防止索引",
"LabelRSSFeedSlug": "RSS 源段",
"LabelScaleElapsedTimeBySpeed": "Scale Elapsed Time by Speed",
"LabelScaleElapsedTimeBySpeed": "按速度缩放播放时间",
"LabelSeason": "季",
"LabelSelectADevice": "选择设备",
"LabelSeries": "系列",
@@ -234,33 +237,33 @@
"LabelVeryLow": "很低",
"LabelYourBookmarks": "你的书签",
"LabelYourProgress": "你的进度",
"MessageAndroid10Downloads": "Android 10及以下版本将使用内部应用程序存储进行下载",
"MessageAttemptingServerConnection": "正在尝试连接服务器。。。",
"MessageAudiobookshelfServerNotConnected": "Audiobookshelf服务器未连接",
"MessageAudiobookshelfServerRequired": "<strong>重要!</strong> 此应用程序设计用于与您或您认识的人托管的Audiobookshelf服务器配合使用此应用程序不提供任何内容",
"MessageAndroid10Downloads": "Android 10 及以下版本将使用内部应用程序存储进行下载.",
"MessageAttemptingServerConnection": "正在尝试连接服务器...",
"MessageAudiobookshelfServerNotConnected": "Audiobookshelf 服务器未连接",
"MessageAudiobookshelfServerRequired": "<strong>重要!</strong> 此应用程序设计用于与您或您认识的人托管的 Audiobookshelf 服务器配合使用. 此应用程序不提供任何内容.",
"MessageBookshelfEmpty": "书架是空的",
"MessageConfirmDeleteLocalEpisode": "要从设备中删除本地剧集 \"{0}\" 吗服务器上的文件将不受影响",
"MessageConfirmDeleteLocalFiles": "要从设备中删除此项目的本地文件吗服务器上的文件和您的进度将不受影响",
"MessageConfirmDiscardProgress": "您确定要重置进度吗",
"MessageConfirmMarkAsFinished": "您确定要要将此项目标记为已完成吗",
"MessageConfirmRemoveBookmark": "您确定要删除书签吗",
"MessageConfirmDeleteLocalEpisode": "要从设备中删除本地剧集 \"{0}\" 吗? 服务器上的文件将不受影响.",
"MessageConfirmDeleteLocalFiles": "要从设备中删除此项目的本地文件吗? 服务器上的文件和您的进度将不受影响.",
"MessageConfirmDiscardProgress": "您确定要重置进度吗?",
"MessageConfirmMarkAsFinished": "您确定要要将此项目标记为已完成吗?",
"MessageConfirmRemoveBookmark": "您确定要删除书签吗?",
"MessageDiscardProgress": "放弃进度",
"MessageDownloadCompleteProcessing": "下载完成正在处理。。。",
"MessageDownloading": "下载中。。。",
"MessageDownloadCompleteProcessing": "下载完成.正在处理...",
"MessageDownloading": "下载中...",
"MessageDownloadingEpisode": "正在下载剧集",
"MessageEpisodesQueuedForDownload": "{0} 个剧集排队等待下载",
"MessageFeedURLWillBe": "源 URL 将改为 {0}",
"MessageFetching": "正在获取...",
"MessageFollowTheProjectOnGithub": "在Github上关注此项目",
"MessageItemDownloadCompleteFailedToCreate": "项目下载完成但未能创建库项目",
"MessageFollowTheProjectOnGithub": "在 Github 上关注此项目",
"MessageItemDownloadCompleteFailedToCreate": "项目下载完成, 但未能创建库项目",
"MessageLoading": "加载...",
"MessageLoadingServerData": "正在加载服务器数据。。。",
"MessageLoadingServerData": "正在加载服务器数据...",
"MessageMarkAsFinished": "标记为已听完",
"MessageMediaLinkedToADifferentServer": "媒体链接到了一个地址不同({0})的Audiobookshelf服务器上连接到此服务器地址时将同步进度",
"MessageMediaLinkedToADifferentUser": "媒体链接到此服务器但是由其他用户下载进度将只同步到下载的用户",
"MessageMediaLinkedToADifferentServer": "媒体链接到了一个地址不同({0})的 Audiobookshelf 服务器上. 连接到此服务器地址时将同步进度.",
"MessageMediaLinkedToADifferentUser": "媒体链接到此服务器, 但是由其他用户下载. 进度将只同步到下载的用户.",
"MessageMediaLinkedToServer": "链接到服务器 {0}",
"MessageMediaLinkedToThisServer": "下载的媒体链接到此服务器",
"MessageMediaNotLinkedToServer": "媒体未链接到Audiobookshelf服务器不会同步任何进度",
"MessageMediaNotLinkedToServer": "媒体未链接到 Audiobookshelf 服务器. 不会同步任何进度.",
"MessageNoBookmarks": "没有书签",
"MessageNoChapters": "没有章节",
"MessageNoItems": "无项目",
@@ -269,9 +272,10 @@
"MessageNoMediaFolders": "没有媒体文件夹",
"MessageNoNetworkConnection": "无网络连接",
"MessageNoPodcastsFound": "未找到播客",
"MessageNoSeries": "No series",
"MessageNoUpdatesWereNecessary": "无需更新",
"MessageNoUserPlaylists": "你没有播放列表",
"MessageReportBugsAndContribute": "报告错误请求功能和贡献在",
"MessageReportBugsAndContribute": "报告错误, 请求功能和贡献在",
"MessageSocketConnectedOverMeteredCellular": "通过按流量计费的蜂窝网络完成连接",
"MessageSocketConnectedOverMeteredWifi": "通过按流量计费的无线网络完成连接",
"MessageSocketConnectedOverUnmeteredCellular": "通过不计量的蜂窝网络完成连接",