Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
42bb5a65ab | ||
|
|
0c37265a5b | ||
|
|
7a65ae3ea7 | ||
|
|
ee027cd64f | ||
|
|
7b2bb5ea8f | ||
|
|
eff2d6bcb6 | ||
|
|
08acf2d882 | ||
|
|
1d78c64350 | ||
|
|
321a9ecf62 | ||
|
|
439a01c43f | ||
|
|
3a9d0def7d | ||
|
|
e4c80b4443 | ||
|
|
940d448e00 | ||
|
|
5ab48a7545 | ||
|
|
cb2bdbdd9a | ||
|
|
8fdaf92cc4 | ||
|
|
0416077964 | ||
|
|
7b60ed6bad | ||
|
|
619be69580 | ||
|
|
9f3c3f8985 | ||
|
|
f345977858 | ||
|
|
9610caf002 | ||
|
|
b75220a1b7 | ||
|
|
ab2a6f5a17 | ||
|
|
2aeefc607b | ||
|
|
9af769bc69 | ||
|
|
46b78cfcd7 | ||
|
|
c24324de9a | ||
|
|
48b9c1236d | ||
|
|
c69d293caa | ||
|
|
0f4cca0e07 | ||
|
|
d6500b8fec | ||
|
|
86140cab1e |
3
.idea/gradle.xml
generated
3
.idea/gradle.xml
generated
@@ -4,8 +4,6 @@
|
|||||||
<component name="GradleSettings">
|
<component name="GradleSettings">
|
||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
<option name="testRunner" value="GRADLE" />
|
|
||||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
|
||||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
<option name="gradleJvm" value="jbr-17" />
|
<option name="gradleJvm" value="jbr-17" />
|
||||||
<option name="modules">
|
<option name="modules">
|
||||||
@@ -14,6 +12,7 @@
|
|||||||
<option value="$PROJECT_DIR$/app" />
|
<option value="$PROJECT_DIR$/app" />
|
||||||
</set>
|
</set>
|
||||||
</option>
|
</option>
|
||||||
|
<option name="resolveExternalAnnotations" value="false" />
|
||||||
</GradleProjectSettings>
|
</GradleProjectSettings>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ android {
|
|||||||
//TODO: update as soon as sources becomes available
|
//TODO: update as soon as sources becomes available
|
||||||
//noinspection OldTargetApi
|
//noinspection OldTargetApi
|
||||||
targetSdkVersion 33
|
targetSdkVersion 33
|
||||||
versionCode 560
|
versionCode 566
|
||||||
versionName '5.3.3'
|
versionName '5.3.9'
|
||||||
generatedDensities = []
|
generatedDensities = []
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ afterEvaluate {
|
|||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
//noinspection GradleDependency
|
//noinspection GradleDependency
|
||||||
implementation('com.github.KotatsuApp:kotatsu-parsers:07df5a81cf') {
|
implementation('com.github.KotatsuApp:kotatsu-parsers:42cc0430f8') {
|
||||||
exclude group: 'org.json', module: 'json'
|
exclude group: 'org.json', module: 'json'
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,24 +122,24 @@ dependencies {
|
|||||||
|
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
|
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
|
||||||
implementation 'com.squareup.okhttp3:okhttp-dnsoverhttps:4.11.0'
|
implementation 'com.squareup.okhttp3:okhttp-dnsoverhttps:4.11.0'
|
||||||
implementation 'com.squareup.okio:okio:3.3.0'
|
implementation 'com.squareup.okio:okio:3.4.0'
|
||||||
|
|
||||||
implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl:4.3.2'
|
implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl:4.3.2'
|
||||||
implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl-viewbinding:4.3.2'
|
implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl-viewbinding:4.3.2'
|
||||||
|
|
||||||
implementation 'com.google.dagger:hilt-android:2.46.1'
|
implementation 'com.google.dagger:hilt-android:2.47'
|
||||||
kapt 'com.google.dagger:hilt-compiler:2.46.1'
|
kapt 'com.google.dagger:hilt-compiler:2.47'
|
||||||
implementation 'androidx.hilt:hilt-work:1.0.0'
|
implementation 'androidx.hilt:hilt-work:1.0.0'
|
||||||
kapt 'androidx.hilt:hilt-compiler:1.0.0'
|
kapt 'androidx.hilt:hilt-compiler:1.0.0'
|
||||||
|
|
||||||
implementation 'io.coil-kt:coil-base:2.4.0'
|
implementation 'io.coil-kt:coil-base:2.4.0'
|
||||||
implementation 'io.coil-kt:coil-svg:2.4.0'
|
implementation 'io.coil-kt:coil-svg:2.4.0'
|
||||||
implementation 'com.github.KotatsuApp:subsampling-scale-image-view:1b19231b2f'
|
implementation 'com.github.KotatsuApp:subsampling-scale-image-view:9b1d20be67'
|
||||||
implementation 'com.github.solkin:disk-lru-cache:1.4'
|
implementation 'com.github.solkin:disk-lru-cache:1.4'
|
||||||
implementation 'io.noties.markwon:core:4.6.2'
|
implementation 'io.noties.markwon:core:4.6.2'
|
||||||
|
|
||||||
implementation 'ch.acra:acra-http:5.10.1'
|
implementation 'ch.acra:acra-http:5.11.0'
|
||||||
implementation 'ch.acra:acra-dialog:5.10.1'
|
implementation 'ch.acra:acra-dialog:5.11.0'
|
||||||
|
|
||||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'
|
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'
|
||||||
|
|
||||||
@@ -157,6 +157,6 @@ dependencies {
|
|||||||
androidTestImplementation 'androidx.room:room-testing:2.5.2'
|
androidTestImplementation 'androidx.room:room-testing:2.5.2'
|
||||||
androidTestImplementation 'com.squareup.moshi:moshi-kotlin:1.15.0'
|
androidTestImplementation 'com.squareup.moshi:moshi-kotlin:1.15.0'
|
||||||
|
|
||||||
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.46.1'
|
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.47'
|
||||||
kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.46.1'
|
kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.47'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import java.util.EnumSet
|
|||||||
class DummyParser(context: MangaLoaderContext) : MangaParser(context, MangaSource.DUMMY) {
|
class DummyParser(context: MangaLoaderContext) : MangaParser(context, MangaSource.DUMMY) {
|
||||||
|
|
||||||
override val configKeyDomain: ConfigKey.Domain
|
override val configKeyDomain: ConfigKey.Domain
|
||||||
get() = ConfigKey.Domain()
|
get() = ConfigKey.Domain("")
|
||||||
|
|
||||||
override val sortOrders: Set<SortOrder>
|
override val sortOrders: Set<SortOrder>
|
||||||
get() = EnumSet.allOf(SortOrder::class.java)
|
get() = EnumSet.allOf(SortOrder::class.java)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.koitharu.kotatsu.bookmarks.domain
|
package org.koitharu.kotatsu.bookmarks.domain
|
||||||
|
|
||||||
|
import org.koitharu.kotatsu.local.data.ImageFileFilter
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaPage
|
import org.koitharu.kotatsu.parsers.model.MangaPage
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
@@ -26,7 +27,8 @@ class Bookmark(
|
|||||||
)
|
)
|
||||||
|
|
||||||
private fun isImageUrlDirect(): Boolean {
|
private fun isImageUrlDirect(): Boolean {
|
||||||
return imageUrl.substringAfterLast('.').length in 2..4
|
val extension = imageUrl.substringAfterLast('.')
|
||||||
|
return extension.isNotEmpty() && ImageFileFilter().isExtensionValid(extension)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
|
|||||||
@@ -5,15 +5,19 @@ import coil.ImageLoader
|
|||||||
import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding
|
import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.bookmarks.domain.Bookmark
|
import org.koitharu.kotatsu.bookmarks.domain.Bookmark
|
||||||
|
import org.koitharu.kotatsu.core.ui.drawable.TextDrawable
|
||||||
import org.koitharu.kotatsu.core.ui.image.CoverSizeResolver
|
import org.koitharu.kotatsu.core.ui.image.CoverSizeResolver
|
||||||
import org.koitharu.kotatsu.core.ui.list.AdapterDelegateClickListenerAdapter
|
import org.koitharu.kotatsu.core.ui.list.AdapterDelegateClickListenerAdapter
|
||||||
import org.koitharu.kotatsu.core.ui.list.OnListItemClickListener
|
import org.koitharu.kotatsu.core.ui.list.OnListItemClickListener
|
||||||
import org.koitharu.kotatsu.core.util.ext.decodeRegion
|
import org.koitharu.kotatsu.core.util.ext.decodeRegion
|
||||||
import org.koitharu.kotatsu.core.util.ext.disposeImageRequest
|
import org.koitharu.kotatsu.core.util.ext.disposeImageRequest
|
||||||
import org.koitharu.kotatsu.core.util.ext.enqueueWith
|
import org.koitharu.kotatsu.core.util.ext.enqueueWith
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.getThemeResId
|
||||||
import org.koitharu.kotatsu.core.util.ext.newImageRequest
|
import org.koitharu.kotatsu.core.util.ext.newImageRequest
|
||||||
import org.koitharu.kotatsu.core.util.ext.source
|
import org.koitharu.kotatsu.core.util.ext.source
|
||||||
import org.koitharu.kotatsu.databinding.ItemBookmarkBinding
|
import org.koitharu.kotatsu.databinding.ItemBookmarkBinding
|
||||||
|
import org.koitharu.kotatsu.parsers.util.format
|
||||||
|
import com.google.android.material.R as materialR
|
||||||
|
|
||||||
fun bookmarkListAD(
|
fun bookmarkListAD(
|
||||||
coil: ImageLoader,
|
coil: ImageLoader,
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ abstract class BaseViewModel : ViewModel() {
|
|||||||
|
|
||||||
val isLoading: StateFlow<Boolean>
|
val isLoading: StateFlow<Boolean>
|
||||||
get() = loadingCounter.map { it > 0 }
|
get() = loadingCounter.map { it > 0 }
|
||||||
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), false)
|
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), loadingCounter.value > 0)
|
||||||
|
|
||||||
protected fun launchJob(
|
protected fun launchJob(
|
||||||
context: CoroutineContext = EmptyCoroutineContext,
|
context: CoroutineContext = EmptyCoroutineContext,
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
package org.koitharu.kotatsu.core.ui.drawable
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Context
|
||||||
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.graphics.ColorFilter
|
||||||
|
import android.graphics.Paint
|
||||||
|
import android.graphics.PixelFormat
|
||||||
|
import android.graphics.Typeface
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
|
import android.os.Build
|
||||||
|
import android.text.Layout
|
||||||
|
import android.text.StaticLayout
|
||||||
|
import android.text.TextPaint
|
||||||
|
import androidx.annotation.ColorInt
|
||||||
|
import androidx.annotation.Px
|
||||||
|
import androidx.annotation.StyleRes
|
||||||
|
import androidx.core.graphics.withTranslation
|
||||||
|
import com.google.android.material.resources.TextAppearance
|
||||||
|
import com.google.android.material.resources.TextAppearanceFontCallback
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.getThemeColor
|
||||||
|
|
||||||
|
class TextDrawable(
|
||||||
|
val text: CharSequence,
|
||||||
|
) : Drawable() {
|
||||||
|
|
||||||
|
private val paint = TextPaint(Paint.ANTI_ALIAS_FLAG)
|
||||||
|
private var cachedLayout: StaticLayout? = null
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
constructor(context: Context, text: CharSequence, @StyleRes textAppearanceId: Int) : this(text) {
|
||||||
|
val ta = TextAppearance(context, textAppearanceId)
|
||||||
|
paint.color = ta.textColor?.defaultColor ?: context.getThemeColor(android.R.attr.textColorPrimary, Color.BLACK)
|
||||||
|
paint.typeface = ta.fallbackFont
|
||||||
|
ta.getFontAsync(
|
||||||
|
context, paint,
|
||||||
|
object : TextAppearanceFontCallback() {
|
||||||
|
override fun onFontRetrieved(typeface: Typeface?, fontResolvedSynchronously: Boolean) = Unit
|
||||||
|
override fun onFontRetrievalFailed(reason: Int) = Unit
|
||||||
|
},
|
||||||
|
)
|
||||||
|
paint.letterSpacing = ta.letterSpacing
|
||||||
|
}
|
||||||
|
|
||||||
|
var alignment = Layout.Alignment.ALIGN_NORMAL
|
||||||
|
|
||||||
|
var lineSpacingMultiplier = 1f
|
||||||
|
|
||||||
|
@Px
|
||||||
|
var lineSpacingExtra = 0f
|
||||||
|
|
||||||
|
@get:ColorInt
|
||||||
|
var textColor: Int
|
||||||
|
get() = paint.color
|
||||||
|
set(@ColorInt value) {
|
||||||
|
paint.color = value
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun draw(canvas: Canvas) {
|
||||||
|
val b = bounds
|
||||||
|
if (b.isEmpty) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
canvas.withTranslation(x = b.left.toFloat(), y = b.top.toFloat()) {
|
||||||
|
obtainLayout().draw(canvas)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setAlpha(alpha: Int) {
|
||||||
|
paint.alpha = alpha
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setColorFilter(colorFilter: ColorFilter?) {
|
||||||
|
paint.setColorFilter(colorFilter)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("DeprecatedCallableAddReplaceWith")
|
||||||
|
@Deprecated("Deprecated in Java")
|
||||||
|
override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
|
||||||
|
|
||||||
|
private fun obtainLayout(): StaticLayout {
|
||||||
|
val width = bounds.width()
|
||||||
|
cachedLayout?.let {
|
||||||
|
if (it.width == width) {
|
||||||
|
return it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
StaticLayout.Builder.obtain(text, 0, text.length, paint, width)
|
||||||
|
.setAlignment(alignment)
|
||||||
|
.setLineSpacing(lineSpacingExtra, lineSpacingMultiplier)
|
||||||
|
.setIncludePad(true)
|
||||||
|
.build()
|
||||||
|
} else {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
StaticLayout(text, paint, width, alignment, lineSpacingMultiplier, lineSpacingExtra, true)
|
||||||
|
}.also { cachedLayout = it }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -60,3 +60,10 @@ fun Context.getThemeColorStateList(
|
|||||||
) = obtainStyledAttributes(intArrayOf(resId)).use {
|
) = obtainStyledAttributes(intArrayOf(resId)).use {
|
||||||
it.getColorStateList(0)
|
it.getColorStateList(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Context.getThemeResId(
|
||||||
|
@AttrRes resId: Int,
|
||||||
|
fallback: Int
|
||||||
|
): Int = obtainStyledAttributes(intArrayOf(resId)).use {
|
||||||
|
it.getResourceId(0, fallback)
|
||||||
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import androidx.core.view.updatePadding
|
|||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import coil.ImageLoader
|
import coil.ImageLoader
|
||||||
import coil.request.ImageRequest
|
import coil.request.ImageRequest
|
||||||
|
import coil.request.SuccessResult
|
||||||
import coil.util.CoilUtils
|
import coil.util.CoilUtils
|
||||||
import com.google.android.material.chip.Chip
|
import com.google.android.material.chip.Chip
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
@@ -296,7 +297,7 @@ class DetailsFragment :
|
|||||||
private fun loadCover(manga: Manga) {
|
private fun loadCover(manga: Manga) {
|
||||||
val imageUrl = manga.largeCoverUrl.ifNullOrEmpty { manga.coverUrl }
|
val imageUrl = manga.largeCoverUrl.ifNullOrEmpty { manga.coverUrl }
|
||||||
val lastResult = CoilUtils.result(requireViewBinding().imageViewCover)
|
val lastResult = CoilUtils.result(requireViewBinding().imageViewCover)
|
||||||
if (lastResult?.request?.data == imageUrl) {
|
if (lastResult is SuccessResult && lastResult.request.data == imageUrl) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val request = ImageRequest.Builder(context ?: return)
|
val request = ImageRequest.Builder(context ?: return)
|
||||||
|
|||||||
@@ -121,13 +121,14 @@ class ScrobblingInfoSheet :
|
|||||||
dismissAllowingStateLoss()
|
dismissAllowingStateLoss()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
requireViewBinding().textViewTitle.text = scrobbling.title
|
val binding = viewBinding ?: return
|
||||||
requireViewBinding().ratingBar.rating = scrobbling.rating * requireViewBinding().ratingBar.numStars
|
binding.textViewTitle.text = scrobbling.title
|
||||||
requireViewBinding().textViewDescription.text = scrobbling.description?.sanitize()
|
binding.ratingBar.rating = scrobbling.rating * binding.ratingBar.numStars
|
||||||
requireViewBinding().spinnerStatus.setSelection(scrobbling.status?.ordinal ?: -1)
|
binding.textViewDescription.text = scrobbling.description?.sanitize()
|
||||||
requireViewBinding().imageViewLogo.contentDescription = getString(scrobbling.scrobbler.titleResId)
|
binding.spinnerStatus.setSelection(scrobbling.status?.ordinal ?: -1)
|
||||||
requireViewBinding().imageViewLogo.setImageResource(scrobbling.scrobbler.iconResId)
|
binding.imageViewLogo.contentDescription = getString(scrobbling.scrobbler.titleResId)
|
||||||
requireViewBinding().imageViewCover.newImageRequest(viewLifecycleOwner, scrobbling.coverUrl)?.apply {
|
binding.imageViewLogo.setImageResource(scrobbling.scrobbler.iconResId)
|
||||||
|
binding.imageViewCover.newImageRequest(viewLifecycleOwner, scrobbling.coverUrl)?.apply {
|
||||||
placeholder(R.drawable.ic_placeholder)
|
placeholder(R.drawable.ic_placeholder)
|
||||||
fallback(R.drawable.ic_placeholder)
|
fallback(R.drawable.ic_placeholder)
|
||||||
error(R.drawable.ic_error_placeholder)
|
error(R.drawable.ic_error_placeholder)
|
||||||
|
|||||||
@@ -141,11 +141,13 @@ class DownloadsViewModel @Inject constructor(
|
|||||||
fun remove(ids: Set<Long>) {
|
fun remove(ids: Set<Long>) {
|
||||||
launchJob(Dispatchers.Default) {
|
launchJob(Dispatchers.Default) {
|
||||||
val snapshot = works.value ?: return@launchJob
|
val snapshot = works.value ?: return@launchJob
|
||||||
|
val uuids = HashSet<UUID>(ids.size)
|
||||||
for (work in snapshot) {
|
for (work in snapshot) {
|
||||||
if (work.id.mostSignificantBits in ids) {
|
if (work.id.mostSignificantBits in ids) {
|
||||||
workScheduler.delete(work.id)
|
uuids.add(work.id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
workScheduler.delete(uuids)
|
||||||
onActionDone.call(ReversibleAction(R.string.downloads_removed, null))
|
onActionDone.call(ReversibleAction(R.string.downloads_removed, null))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import org.koitharu.kotatsu.core.util.WorkManagerHelper
|
|||||||
import org.koitharu.kotatsu.core.util.ext.deleteAwait
|
import org.koitharu.kotatsu.core.util.ext.deleteAwait
|
||||||
import org.koitharu.kotatsu.core.util.ext.getDisplayMessage
|
import org.koitharu.kotatsu.core.util.ext.getDisplayMessage
|
||||||
import org.koitharu.kotatsu.core.util.ext.ifNullOrEmpty
|
import org.koitharu.kotatsu.core.util.ext.ifNullOrEmpty
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
|
||||||
import org.koitharu.kotatsu.core.util.ext.writeAllCancellable
|
import org.koitharu.kotatsu.core.util.ext.writeAllCancellable
|
||||||
import org.koitharu.kotatsu.core.util.progress.TimeLeftEstimator
|
import org.koitharu.kotatsu.core.util.progress.TimeLeftEstimator
|
||||||
import org.koitharu.kotatsu.download.domain.DownloadState
|
import org.koitharu.kotatsu.download.domain.DownloadState
|
||||||
@@ -60,7 +61,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
|
|||||||
import org.koitharu.kotatsu.parsers.util.await
|
import org.koitharu.kotatsu.parsers.util.await
|
||||||
import org.koitharu.kotatsu.parsers.util.mapToSet
|
import org.koitharu.kotatsu.parsers.util.mapToSet
|
||||||
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
|
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
|
||||||
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
@@ -322,9 +322,9 @@ class DownloadWorker @AssistedInject constructor(
|
|||||||
manga: Manga,
|
manga: Manga,
|
||||||
includedIds: LongArray?,
|
includedIds: LongArray?,
|
||||||
): List<MangaChapter> {
|
): List<MangaChapter> {
|
||||||
val chapters = checkNotNull(manga.chapters?.toMutableList()) {
|
val chapters = checkNotNull(manga.chapters) {
|
||||||
"Chapters list must not be null"
|
"Chapters list must not be null"
|
||||||
}
|
}.toMutableList()
|
||||||
if (includedIds != null) {
|
if (includedIds != null) {
|
||||||
val chaptersIdsSet = includedIds.toMutableSet()
|
val chaptersIdsSet = includedIds.toMutableSet()
|
||||||
chapters.retainAll { x -> chaptersIdsSet.remove(x.id) }
|
chapters.retainAll { x -> chaptersIdsSet.remove(x.id) }
|
||||||
@@ -399,6 +399,13 @@ class DownloadWorker @AssistedInject constructor(
|
|||||||
WorkManagerHelper(workManager).deleteWork(id)
|
WorkManagerHelper(workManager).deleteWork(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun delete(ids: Collection<UUID>) {
|
||||||
|
val wm = workManager
|
||||||
|
val helper = WorkManagerHelper(wm)
|
||||||
|
ids.forEach { id -> wm.cancelWorkById(id).await() }
|
||||||
|
helper.deleteWorks(ids)
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun removeCompleted() {
|
suspend fun removeCompleted() {
|
||||||
val helper = WorkManagerHelper(workManager)
|
val helper = WorkManagerHelper(workManager)
|
||||||
val finishedWorks = helper.getFinishedWorkInfosByTag(TAG)
|
val finishedWorks = helper.getFinishedWorkInfosByTag(TAG)
|
||||||
@@ -406,10 +413,7 @@ class DownloadWorker @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
suspend fun updateConstraints() {
|
suspend fun updateConstraints() {
|
||||||
val constraints = Constraints.Builder()
|
val constraints = createConstraints()
|
||||||
.setRequiresStorageNotLow(true)
|
|
||||||
.setRequiredNetworkType(if (settings.isDownloadsWiFiOnly) NetworkType.UNMETERED else NetworkType.CONNECTED)
|
|
||||||
.build()
|
|
||||||
val helper = WorkManagerHelper(workManager)
|
val helper = WorkManagerHelper(workManager)
|
||||||
val works = helper.getWorkInfosByTag(TAG)
|
val works = helper.getWorkInfosByTag(TAG)
|
||||||
for (work in works) {
|
for (work in works) {
|
||||||
@@ -418,6 +422,7 @@ class DownloadWorker @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
val request = OneTimeWorkRequestBuilder<DownloadWorker>()
|
val request = OneTimeWorkRequestBuilder<DownloadWorker>()
|
||||||
.setConstraints(constraints)
|
.setConstraints(constraints)
|
||||||
|
.addTag(TAG)
|
||||||
.setId(work.id)
|
.setId(work.id)
|
||||||
.build()
|
.build()
|
||||||
helper.updateWork(request)
|
helper.updateWork(request)
|
||||||
@@ -425,15 +430,15 @@ class DownloadWorker @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun scheduleImpl(data: Collection<Data>) {
|
private suspend fun scheduleImpl(data: Collection<Data>) {
|
||||||
val constraints = Constraints.Builder()
|
if (data.isEmpty()) {
|
||||||
.setRequiresStorageNotLow(true)
|
return
|
||||||
.setRequiredNetworkType(if (settings.isDownloadsWiFiOnly) NetworkType.UNMETERED else NetworkType.CONNECTED)
|
}
|
||||||
.build()
|
val constraints = createConstraints()
|
||||||
val requests = data.map { inputData ->
|
val requests = data.map { inputData ->
|
||||||
OneTimeWorkRequestBuilder<DownloadWorker>()
|
OneTimeWorkRequestBuilder<DownloadWorker>()
|
||||||
.setConstraints(constraints)
|
.setConstraints(constraints)
|
||||||
.addTag(TAG)
|
.addTag(TAG)
|
||||||
.keepResultsForAtLeast(7, TimeUnit.DAYS)
|
.keepResultsForAtLeast(30, TimeUnit.DAYS)
|
||||||
.setBackoffCriteria(BackoffPolicy.LINEAR, 10, TimeUnit.SECONDS)
|
.setBackoffCriteria(BackoffPolicy.LINEAR, 10, TimeUnit.SECONDS)
|
||||||
.setInputData(inputData)
|
.setInputData(inputData)
|
||||||
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
|
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
|
||||||
@@ -441,6 +446,10 @@ class DownloadWorker @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
workManager.enqueue(requests).await()
|
workManager.enqueue(requests).await()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun createConstraints() = Constraints.Builder()
|
||||||
|
.setRequiredNetworkType(if (settings.isDownloadsWiFiOnly) NetworkType.UNMETERED else NetworkType.CONNECTED)
|
||||||
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class ImageFileFilter : FilenameFilter, FileFilter {
|
|||||||
return isExtensionValid(ext)
|
return isExtensionValid(ext)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isExtensionValid(ext: String): Boolean {
|
fun isExtensionValid(ext: String): Boolean {
|
||||||
return ext == "png" || ext == "jpg" || ext == "jpeg" || ext == "webp"
|
return ext == "png" || ext == "jpg" || ext == "jpeg" || ext == "webp"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ enum class ScoreFormat {
|
|||||||
|
|
||||||
POINT_5 -> score / 5f
|
POINT_5 -> score / 5f
|
||||||
POINT_3 -> score / 3f
|
POINT_3 -> score / 3f
|
||||||
}
|
}.coerceIn(0f, 1f)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ class MALRepository @Inject constructor(
|
|||||||
status = json.getString("status"),
|
status = json.getString("status"),
|
||||||
chapter = json.getInt("num_chapters_read"),
|
chapter = json.getInt("num_chapters_read"),
|
||||||
comment = json.getString("comments"),
|
comment = json.getString("comments"),
|
||||||
rating = json.getDouble("score").toFloat() / 10f,
|
rating = (json.getDouble("score").toFloat() / 10f).coerceIn(0f, 1f),
|
||||||
)
|
)
|
||||||
db.scrobblingDao.upsert(entity)
|
db.scrobblingDao.upsert(entity)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ class ShikimoriRepository @Inject constructor(
|
|||||||
status = json.getString("status"),
|
status = json.getString("status"),
|
||||||
chapter = json.getInt("chapters"),
|
chapter = json.getInt("chapters"),
|
||||||
comment = json.getString("text"),
|
comment = json.getString("text"),
|
||||||
rating = json.getDouble("score").toFloat() / 10f,
|
rating = (json.getDouble("score").toFloat() / 10f).coerceIn(0f, 1f),
|
||||||
)
|
)
|
||||||
db.scrobblingDao.upsert(entity)
|
db.scrobblingDao.upsert(entity)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,34 +8,28 @@ import android.os.Bundle
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.activity.result.ActivityResultCallback
|
import androidx.activity.result.ActivityResultCallback
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.TwoStatePreference
|
import androidx.preference.TwoStatePreference
|
||||||
|
import androidx.preference.forEach
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import kotlinx.coroutines.runInterruptible
|
|
||||||
import okhttp3.Cache
|
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.network.cookies.MutableCookieJar
|
import org.koitharu.kotatsu.core.exceptions.resolve.SnackbarErrorObserver
|
||||||
import org.koitharu.kotatsu.core.os.AppShortcutManager
|
import org.koitharu.kotatsu.core.os.AppShortcutManager
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
import org.koitharu.kotatsu.core.ui.BasePreferenceFragment
|
import org.koitharu.kotatsu.core.ui.BasePreferenceFragment
|
||||||
|
import org.koitharu.kotatsu.core.ui.util.ReversibleActionObserver
|
||||||
import org.koitharu.kotatsu.core.util.FileSize
|
import org.koitharu.kotatsu.core.util.FileSize
|
||||||
import org.koitharu.kotatsu.core.util.ext.awaitStateAtLeast
|
import org.koitharu.kotatsu.core.util.ext.observe
|
||||||
import org.koitharu.kotatsu.core.util.ext.getDisplayMessage
|
import org.koitharu.kotatsu.core.util.ext.observeEvent
|
||||||
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
|
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
|
||||||
import org.koitharu.kotatsu.core.util.ext.viewLifecycleScope
|
|
||||||
import org.koitharu.kotatsu.local.data.CacheDir
|
import org.koitharu.kotatsu.local.data.CacheDir
|
||||||
import org.koitharu.kotatsu.local.data.LocalStorageManager
|
|
||||||
import org.koitharu.kotatsu.search.domain.MangaSearchRepository
|
|
||||||
import org.koitharu.kotatsu.settings.backup.BackupDialogFragment
|
import org.koitharu.kotatsu.settings.backup.BackupDialogFragment
|
||||||
import org.koitharu.kotatsu.settings.backup.RestoreDialogFragment
|
import org.koitharu.kotatsu.settings.backup.RestoreDialogFragment
|
||||||
import org.koitharu.kotatsu.settings.protect.ProtectSetupActivity
|
import org.koitharu.kotatsu.settings.protect.ProtectSetupActivity
|
||||||
import org.koitharu.kotatsu.tracker.domain.TrackingRepository
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
@@ -43,24 +37,11 @@ class UserDataSettingsFragment : BasePreferenceFragment(R.string.data_and_privac
|
|||||||
SharedPreferences.OnSharedPreferenceChangeListener,
|
SharedPreferences.OnSharedPreferenceChangeListener,
|
||||||
ActivityResultCallback<Uri?> {
|
ActivityResultCallback<Uri?> {
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var trackerRepo: TrackingRepository
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var searchRepository: MangaSearchRepository
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var storageManager: LocalStorageManager
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var cookieJar: MutableCookieJar
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var cache: Cache
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var appShortcutManager: AppShortcutManager
|
lateinit var appShortcutManager: AppShortcutManager
|
||||||
|
|
||||||
|
private val viewModel: UserDataSettingsViewModel by viewModels()
|
||||||
|
|
||||||
private val backupSelectCall = registerForActivityResult(
|
private val backupSelectCall = registerForActivityResult(
|
||||||
ActivityResultContracts.OpenDocument(),
|
ActivityResultContracts.OpenDocument(),
|
||||||
this,
|
this,
|
||||||
@@ -76,23 +57,34 @@ class UserDataSettingsFragment : BasePreferenceFragment(R.string.data_and_privac
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
findPreference<Preference>(AppSettings.KEY_PAGES_CACHE_CLEAR)?.bindSummaryToCacheSize(CacheDir.PAGES)
|
findPreference<Preference>(AppSettings.KEY_PAGES_CACHE_CLEAR)?.bindBytesSizeSummary(checkNotNull(viewModel.cacheSizes[CacheDir.PAGES]))
|
||||||
findPreference<Preference>(AppSettings.KEY_THUMBS_CACHE_CLEAR)?.bindSummaryToCacheSize(CacheDir.THUMBS)
|
findPreference<Preference>(AppSettings.KEY_THUMBS_CACHE_CLEAR)?.bindBytesSizeSummary(checkNotNull(viewModel.cacheSizes[CacheDir.THUMBS]))
|
||||||
findPreference<Preference>(AppSettings.KEY_HTTP_CACHE_CLEAR)?.bindSummaryToHttpCacheSize()
|
findPreference<Preference>(AppSettings.KEY_HTTP_CACHE_CLEAR)?.bindBytesSizeSummary(viewModel.httpCacheSize)
|
||||||
findPreference<Preference>(AppSettings.KEY_SEARCH_HISTORY_CLEAR)?.let { pref ->
|
findPreference<Preference>(AppSettings.KEY_SEARCH_HISTORY_CLEAR)?.let { pref ->
|
||||||
viewLifecycleScope.launch {
|
viewModel.searchHistoryCount.observe(viewLifecycleOwner) {
|
||||||
lifecycle.awaitStateAtLeast(Lifecycle.State.RESUMED)
|
pref.summary = if (it < 0) {
|
||||||
val items = searchRepository.getSearchHistoryCount()
|
view.context.getString(R.string.loading_)
|
||||||
pref.summary = pref.context.resources.getQuantityString(R.plurals.items, items, items)
|
} else {
|
||||||
|
pref.context.resources.getQuantityString(R.plurals.items, it, it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
findPreference<Preference>(AppSettings.KEY_UPDATES_FEED_CLEAR)?.let { pref ->
|
findPreference<Preference>(AppSettings.KEY_UPDATES_FEED_CLEAR)?.let { pref ->
|
||||||
viewLifecycleScope.launch {
|
viewModel.feedItemsCount.observe(viewLifecycleOwner) {
|
||||||
lifecycle.awaitStateAtLeast(Lifecycle.State.RESUMED)
|
pref.summary = if (it < 0) {
|
||||||
val items = trackerRepo.getLogsCount()
|
view.context.getString(R.string.loading_)
|
||||||
pref.summary = pref.context.resources.getQuantityString(R.plurals.items, items, items)
|
} else {
|
||||||
|
pref.context.resources.getQuantityString(R.plurals.items, it, it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
viewModel.loadingKeys.observe(viewLifecycleOwner) { keys ->
|
||||||
|
preferenceScreen.forEach { pref ->
|
||||||
|
pref.isEnabled = pref.key !in keys
|
||||||
|
}
|
||||||
|
}
|
||||||
|
viewModel.onError.observeEvent(viewLifecycleOwner, SnackbarErrorObserver(listView, this))
|
||||||
|
viewModel.onActionDone.observeEvent(viewLifecycleOwner, ReversibleActionObserver(listView))
|
||||||
settings.subscribe(this)
|
settings.subscribe(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,12 +96,12 @@ class UserDataSettingsFragment : BasePreferenceFragment(R.string.data_and_privac
|
|||||||
override fun onPreferenceTreeClick(preference: Preference): Boolean {
|
override fun onPreferenceTreeClick(preference: Preference): Boolean {
|
||||||
return when (preference.key) {
|
return when (preference.key) {
|
||||||
AppSettings.KEY_PAGES_CACHE_CLEAR -> {
|
AppSettings.KEY_PAGES_CACHE_CLEAR -> {
|
||||||
clearCache(preference, CacheDir.PAGES)
|
viewModel.clearCache(preference.key, CacheDir.PAGES)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
AppSettings.KEY_THUMBS_CACHE_CLEAR -> {
|
AppSettings.KEY_THUMBS_CACHE_CLEAR -> {
|
||||||
clearCache(preference, CacheDir.THUMBS)
|
viewModel.clearCache(preference.key, CacheDir.THUMBS)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,26 +111,17 @@ class UserDataSettingsFragment : BasePreferenceFragment(R.string.data_and_privac
|
|||||||
}
|
}
|
||||||
|
|
||||||
AppSettings.KEY_SEARCH_HISTORY_CLEAR -> {
|
AppSettings.KEY_SEARCH_HISTORY_CLEAR -> {
|
||||||
clearSearchHistory(preference)
|
clearSearchHistory()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
AppSettings.KEY_HTTP_CACHE_CLEAR -> {
|
AppSettings.KEY_HTTP_CACHE_CLEAR -> {
|
||||||
clearHttpCache()
|
viewModel.clearHttpCache()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
AppSettings.KEY_UPDATES_FEED_CLEAR -> {
|
AppSettings.KEY_UPDATES_FEED_CLEAR -> {
|
||||||
viewLifecycleScope.launch {
|
viewModel.clearUpdatesFeed()
|
||||||
trackerRepo.clearLogs()
|
|
||||||
preference.summary = preference.context.resources
|
|
||||||
.getQuantityString(R.plurals.items, 0, 0)
|
|
||||||
Snackbar.make(
|
|
||||||
view ?: return@launch,
|
|
||||||
R.string.updates_feed_cleared,
|
|
||||||
Snackbar.LENGTH_SHORT,
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,71 +172,23 @@ class UserDataSettingsFragment : BasePreferenceFragment(R.string.data_and_privac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun clearCache(preference: Preference, cache: CacheDir) {
|
private fun Preference.bindBytesSizeSummary(stateFlow: StateFlow<Long>) {
|
||||||
val ctx = preference.context.applicationContext
|
stateFlow.observe(viewLifecycleOwner) { size ->
|
||||||
viewLifecycleScope.launch {
|
summary = if (size < 0) {
|
||||||
try {
|
context.getString(R.string.computing_)
|
||||||
preference.isEnabled = false
|
} else {
|
||||||
storageManager.clearCache(cache)
|
FileSize.BYTES.format(context, size)
|
||||||
val size = storageManager.computeCacheSize(cache)
|
|
||||||
preference.summary = FileSize.BYTES.format(ctx, size)
|
|
||||||
} catch (e: CancellationException) {
|
|
||||||
throw e
|
|
||||||
} catch (e: Exception) {
|
|
||||||
preference.summary = e.getDisplayMessage(ctx.resources)
|
|
||||||
} finally {
|
|
||||||
preference.isEnabled = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Preference.bindSummaryToCacheSize(dir: CacheDir) = viewLifecycleScope.launch {
|
private fun clearSearchHistory() {
|
||||||
val size = storageManager.computeCacheSize(dir)
|
|
||||||
summary = FileSize.BYTES.format(context, size)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Preference.bindSummaryToHttpCacheSize() = viewLifecycleScope.launch {
|
|
||||||
val size = runInterruptible(Dispatchers.IO) { cache.size() }
|
|
||||||
summary = FileSize.BYTES.format(context, size)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun clearHttpCache() {
|
|
||||||
val preference = findPreference<Preference>(AppSettings.KEY_HTTP_CACHE_CLEAR) ?: return
|
|
||||||
val ctx = preference.context.applicationContext
|
|
||||||
viewLifecycleScope.launch {
|
|
||||||
try {
|
|
||||||
preference.isEnabled = false
|
|
||||||
val size = runInterruptible(Dispatchers.IO) {
|
|
||||||
cache.evictAll()
|
|
||||||
cache.size()
|
|
||||||
}
|
|
||||||
preference.summary = FileSize.BYTES.format(ctx, size)
|
|
||||||
} catch (e: CancellationException) {
|
|
||||||
throw e
|
|
||||||
} catch (e: Exception) {
|
|
||||||
preference.summary = e.getDisplayMessage(ctx.resources)
|
|
||||||
} finally {
|
|
||||||
preference.isEnabled = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun clearSearchHistory(preference: Preference) {
|
|
||||||
MaterialAlertDialogBuilder(context ?: return)
|
MaterialAlertDialogBuilder(context ?: return)
|
||||||
.setTitle(R.string.clear_search_history)
|
.setTitle(R.string.clear_search_history)
|
||||||
.setMessage(R.string.text_clear_search_history_prompt)
|
.setMessage(R.string.text_clear_search_history_prompt)
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
.setPositiveButton(R.string.clear) { _, _ ->
|
.setPositiveButton(R.string.clear) { _, _ ->
|
||||||
viewLifecycleScope.launch {
|
viewModel.clearSearchHistory()
|
||||||
searchRepository.clearSearchHistory()
|
|
||||||
preference.summary = preference.context.resources
|
|
||||||
.getQuantityString(R.plurals.items, 0, 0)
|
|
||||||
Snackbar.make(
|
|
||||||
view ?: return@launch,
|
|
||||||
R.string.search_history_cleared,
|
|
||||||
Snackbar.LENGTH_SHORT,
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}.show()
|
}.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -263,14 +198,7 @@ class UserDataSettingsFragment : BasePreferenceFragment(R.string.data_and_privac
|
|||||||
.setMessage(R.string.text_clear_cookies_prompt)
|
.setMessage(R.string.text_clear_cookies_prompt)
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
.setPositiveButton(R.string.clear) { _, _ ->
|
.setPositiveButton(R.string.clear) { _, _ ->
|
||||||
viewLifecycleScope.launch {
|
viewModel.clearCookies()
|
||||||
cookieJar.clear()
|
|
||||||
Snackbar.make(
|
|
||||||
listView ?: return@launch,
|
|
||||||
R.string.cookies_cleared,
|
|
||||||
Snackbar.LENGTH_SHORT,
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}.show()
|
}.show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,109 @@
|
|||||||
|
package org.koitharu.kotatsu.settings
|
||||||
|
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlinx.coroutines.flow.update
|
||||||
|
import kotlinx.coroutines.runInterruptible
|
||||||
|
import okhttp3.Cache
|
||||||
|
import org.koitharu.kotatsu.R
|
||||||
|
import org.koitharu.kotatsu.core.network.cookies.MutableCookieJar
|
||||||
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
|
import org.koitharu.kotatsu.core.ui.BaseViewModel
|
||||||
|
import org.koitharu.kotatsu.core.ui.util.ReversibleAction
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.MutableEventFlow
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.call
|
||||||
|
import org.koitharu.kotatsu.local.data.CacheDir
|
||||||
|
import org.koitharu.kotatsu.local.data.LocalStorageManager
|
||||||
|
import org.koitharu.kotatsu.search.domain.MangaSearchRepository
|
||||||
|
import org.koitharu.kotatsu.tracker.domain.TrackingRepository
|
||||||
|
import java.util.EnumMap
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@HiltViewModel
|
||||||
|
class UserDataSettingsViewModel @Inject constructor(
|
||||||
|
private val storageManager: LocalStorageManager,
|
||||||
|
private val httpCache: Cache,
|
||||||
|
private val searchRepository: MangaSearchRepository,
|
||||||
|
private val trackingRepository: TrackingRepository,
|
||||||
|
private val cookieJar: MutableCookieJar,
|
||||||
|
) : BaseViewModel() {
|
||||||
|
|
||||||
|
val onActionDone = MutableEventFlow<ReversibleAction>()
|
||||||
|
val loadingKeys = MutableStateFlow(emptySet<String>())
|
||||||
|
|
||||||
|
val searchHistoryCount = MutableStateFlow(-1)
|
||||||
|
val feedItemsCount = MutableStateFlow(-1)
|
||||||
|
val httpCacheSize = MutableStateFlow(-1L)
|
||||||
|
val cacheSizes = EnumMap<CacheDir, MutableStateFlow<Long>>(CacheDir::class.java)
|
||||||
|
|
||||||
|
init {
|
||||||
|
CacheDir.values().forEach {
|
||||||
|
cacheSizes[it] = MutableStateFlow(-1L)
|
||||||
|
}
|
||||||
|
launchJob(Dispatchers.Default) {
|
||||||
|
searchHistoryCount.value = searchRepository.getSearchHistoryCount()
|
||||||
|
}
|
||||||
|
launchJob(Dispatchers.Default) {
|
||||||
|
feedItemsCount.value = trackingRepository.getLogsCount()
|
||||||
|
}
|
||||||
|
CacheDir.values().forEach { cache ->
|
||||||
|
launchJob(Dispatchers.Default) {
|
||||||
|
checkNotNull(cacheSizes[cache]).value = storageManager.computeCacheSize(cache)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
launchJob(Dispatchers.Default) {
|
||||||
|
httpCacheSize.value = runInterruptible { httpCache.size() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clearCache(key: String, cache: CacheDir) {
|
||||||
|
launchJob(Dispatchers.Default) {
|
||||||
|
try {
|
||||||
|
loadingKeys.update { it + key }
|
||||||
|
storageManager.clearCache(cache)
|
||||||
|
checkNotNull(cacheSizes[cache]).value = storageManager.computeCacheSize(cache)
|
||||||
|
} finally {
|
||||||
|
loadingKeys.update { it - key }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clearHttpCache() {
|
||||||
|
launchJob(Dispatchers.Default) {
|
||||||
|
try {
|
||||||
|
loadingKeys.update { it + AppSettings.KEY_HTTP_CACHE_CLEAR }
|
||||||
|
val size = runInterruptible(Dispatchers.IO) {
|
||||||
|
httpCache.evictAll()
|
||||||
|
httpCache.size()
|
||||||
|
}
|
||||||
|
httpCacheSize.value = size
|
||||||
|
} finally {
|
||||||
|
loadingKeys.update { it - AppSettings.KEY_HTTP_CACHE_CLEAR }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clearSearchHistory() {
|
||||||
|
launchJob(Dispatchers.Default) {
|
||||||
|
searchRepository.clearSearchHistory()
|
||||||
|
searchHistoryCount.value = searchRepository.getSearchHistoryCount()
|
||||||
|
onActionDone.call(ReversibleAction(R.string.search_history_cleared, null))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clearCookies() {
|
||||||
|
launchJob {
|
||||||
|
cookieJar.clear()
|
||||||
|
onActionDone.call(ReversibleAction(R.string.cookies_cleared, null))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clearUpdatesFeed() {
|
||||||
|
launchJob(Dispatchers.Default) {
|
||||||
|
trackingRepository.clearLogs()
|
||||||
|
feedItemsCount.value = trackingRepository.getLogsCount()
|
||||||
|
onActionDone.call(ReversibleAction(R.string.updates_feed_cleared, null))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,9 @@ import androidx.annotation.WorkerThread
|
|||||||
import androidx.core.os.LocaleListCompat
|
import androidx.core.os.LocaleListCompat
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.cancelAndJoin
|
||||||
|
import kotlinx.coroutines.ensureActive
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import org.koitharu.kotatsu.core.model.getLocaleTitle
|
import org.koitharu.kotatsu.core.model.getLocaleTitle
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
@@ -19,19 +22,27 @@ class NewSourcesViewModel @Inject constructor(
|
|||||||
|
|
||||||
private val initialList = settings.newSources
|
private val initialList = settings.newSources
|
||||||
val sources = MutableStateFlow<List<SourceConfigItem>?>(null)
|
val sources = MutableStateFlow<List<SourceConfigItem>?>(null)
|
||||||
|
private var listUpdateJob: Job? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
launchJob(Dispatchers.Default) {
|
listUpdateJob = launchJob(Dispatchers.Default) {
|
||||||
sources.value = buildList()
|
sources.value = buildList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onItemEnabledChanged(item: SourceConfigItem.SourceItem, isEnabled: Boolean) {
|
fun onItemEnabledChanged(item: SourceConfigItem.SourceItem, isEnabled: Boolean) {
|
||||||
|
val prevJob = listUpdateJob
|
||||||
|
listUpdateJob = launchJob(Dispatchers.Default) {
|
||||||
if (isEnabled) {
|
if (isEnabled) {
|
||||||
settings.hiddenSources -= item.source.name
|
settings.hiddenSources -= item.source.name
|
||||||
} else {
|
} else {
|
||||||
settings.hiddenSources += item.source.name
|
settings.hiddenSources += item.source.name
|
||||||
}
|
}
|
||||||
|
prevJob?.cancelAndJoin()
|
||||||
|
val list = buildList()
|
||||||
|
ensureActive()
|
||||||
|
sources.value = list
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun apply() {
|
fun apply() {
|
||||||
@@ -61,3 +72,4 @@ class NewSourcesViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ class MultiSummaryProvider(@StringRes private val emptySummaryId: Int) :
|
|||||||
return preference.context.getString(emptySummaryId)
|
return preference.context.getString(emptySummaryId)
|
||||||
} else {
|
} else {
|
||||||
values.joinToString(", ") {
|
values.joinToString(", ") {
|
||||||
preference.entries[preference.findIndexOfValue(it)]
|
preference.entries.getOrNull(preference.findIndexOfValue(it))
|
||||||
|
?: preference.context.getString(androidx.preference.R.string.not_set)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import kotlinx.coroutines.flow.onStart
|
|||||||
import org.koitharu.kotatsu.core.db.MangaDatabase
|
import org.koitharu.kotatsu.core.db.MangaDatabase
|
||||||
import org.koitharu.kotatsu.core.model.FavouriteCategory
|
import org.koitharu.kotatsu.core.model.FavouriteCategory
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
import org.koitharu.kotatsu.core.prefs.observeAsFlow
|
|
||||||
import org.koitharu.kotatsu.favourites.data.FavouriteCategoryEntity
|
import org.koitharu.kotatsu.favourites.data.FavouriteCategoryEntity
|
||||||
import org.koitharu.kotatsu.favourites.data.toFavouriteCategory
|
import org.koitharu.kotatsu.favourites.data.toFavouriteCategory
|
||||||
import org.koitharu.kotatsu.favourites.data.toMangaList
|
import org.koitharu.kotatsu.favourites.data.toMangaList
|
||||||
@@ -52,8 +51,8 @@ class ShelfContentObserveUseCase @Inject constructor(
|
|||||||
private fun observeLocalManga(sortOrder: SortOrder, limit: Int): Flow<List<Manga>> {
|
private fun observeLocalManga(sortOrder: SortOrder, limit: Int): Flow<List<Manga>> {
|
||||||
return combine<LocalManga?, String, Any?>(
|
return combine<LocalManga?, String, Any?>(
|
||||||
localStorageChanges,
|
localStorageChanges,
|
||||||
settings.observe().filter { it == AppSettings.KEY_LOCAL_MANGA_DIRS }
|
settings.observe().filter { it == AppSettings.KEY_LOCAL_MANGA_DIRS }.onStart { emit("") }
|
||||||
) { _, _ -> Any() }
|
) { a, b -> a to b }
|
||||||
.onStart { emit(null) }
|
.onStart { emit(null) }
|
||||||
.mapLatest {
|
.mapLatest {
|
||||||
localMangaRepository.getList(0, null, sortOrder).take(limit)
|
localMangaRepository.getList(0, null, sortOrder).take(limit)
|
||||||
|
|||||||
@@ -93,8 +93,7 @@
|
|||||||
android:id="@+id/progressBar"
|
android:id="@+id/progressBar"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:indeterminate="true"
|
android:indeterminate="true" />
|
||||||
app:trackCornerRadius="@dimen/mtrl_progress_indicator_full_rounded_corner_radius" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/textView_loading"
|
android:id="@+id/textView_loading"
|
||||||
|
|||||||
33
app/src/main/res/values-cs/plurals.xml
Normal file
33
app/src/main/res/values-cs/plurals.xml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<plurals name="items">
|
||||||
|
<item quantity="one">%1$d předmět</item>
|
||||||
|
<item quantity="few">%1$d předměty</item>
|
||||||
|
<item quantity="other">%1$d předměty</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="new_chapters">
|
||||||
|
<item quantity="one">%1$d nová kapitola</item>
|
||||||
|
<item quantity="few">%1$d nové kapitoly</item>
|
||||||
|
<item quantity="other">%1$d nové kapitoly</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="chapters">
|
||||||
|
<item quantity="one">%1$d kapitola</item>
|
||||||
|
<item quantity="few">%1$d kapitoly</item>
|
||||||
|
<item quantity="other">%1$d kapitoly</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="minutes_ago">
|
||||||
|
<item quantity="one">%1$d před minutou</item>
|
||||||
|
<item quantity="few">%1$d před pár minutami</item>
|
||||||
|
<item quantity="other">%1$d před několika minutami</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="hours_ago">
|
||||||
|
<item quantity="one">%1$d před hodinou</item>
|
||||||
|
<item quantity="few">%1$d před pár hodinamy</item>
|
||||||
|
<item quantity="other">%1$d před několika hodinamy</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="days_ago">
|
||||||
|
<item quantity="one">%1$d před dnem</item>
|
||||||
|
<item quantity="few">%1$d před pár dny</item>
|
||||||
|
<item quantity="other">%1$d před několika dny</item>
|
||||||
|
</plurals>
|
||||||
|
</resources>
|
||||||
446
app/src/main/res/values-cs/strings.xml
Normal file
446
app/src/main/res/values-cs/strings.xml
Normal file
@@ -0,0 +1,446 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
<string name="network_error">Problém s připojením</string>
|
||||||
|
<string name="details">Detaily</string>
|
||||||
|
<string name="chapters">Kapitoly</string>
|
||||||
|
<string name="list">Seznam</string>
|
||||||
|
<string name="detailed_list">Podrobný seznam</string>
|
||||||
|
<string name="grid">Mřížka</string>
|
||||||
|
<string name="list_mode">Režim seznamu</string>
|
||||||
|
<string name="settings">Nastavení</string>
|
||||||
|
<string name="remote_sources">Zdroje mang</string>
|
||||||
|
<string name="loading_">Načítání…</string>
|
||||||
|
<string name="computing_">Vypočítávání…</string>
|
||||||
|
<string name="chapter_d_of_d">Kapitola %1$d z %2$d</string>
|
||||||
|
<string name="close">Zavřít</string>
|
||||||
|
<string name="try_again">Zkusit znovu</string>
|
||||||
|
<string name="clear_history">Vyčistit historii</string>
|
||||||
|
<string name="nothing_found">Nic nenalezeno</string>
|
||||||
|
<string name="history_is_empty">Zatím žádná historie</string>
|
||||||
|
<string name="read">Číst</string>
|
||||||
|
<string name="you_have_not_favourites_yet">Zatím žádné oblíbené</string>
|
||||||
|
<string name="add_to_favourites">Oblíbit toto</string>
|
||||||
|
<string name="add">Přidat</string>
|
||||||
|
<string name="share">Sdílet</string>
|
||||||
|
<string name="create_shortcut">Vytvořit zkratku…</string>
|
||||||
|
<string name="share_s">Sdílet %s</string>
|
||||||
|
<string name="processing_">Zpracovávání…</string>
|
||||||
|
<string name="download_complete">Staženo</string>
|
||||||
|
<string name="downloads">Stažené</string>
|
||||||
|
<string name="by_name">Název</string>
|
||||||
|
<string name="sort_order">Pořadí řazení</string>
|
||||||
|
<string name="filter">Filtr</string>
|
||||||
|
<string name="theme">Téma</string>
|
||||||
|
<string name="light">Světlé</string>
|
||||||
|
<string name="dark">Tmavé</string>
|
||||||
|
<string name="automatic">Následovat systém</string>
|
||||||
|
<string name="remove">Odstranit</string>
|
||||||
|
<string name="_s_deleted_from_local_storage">\"%s\" smazáno z místního uložiště</string>
|
||||||
|
<string name="share_image">Sdílet obrázek</string>
|
||||||
|
<string name="_import">Importovat</string>
|
||||||
|
<string name="delete">Smazat</string>
|
||||||
|
<string name="text_file_not_supported">Vyberte buď soubor ZIP či CBZ.</string>
|
||||||
|
<string name="clear_pages_cache">Vyčistit mezipaměť stran</string>
|
||||||
|
<string name="text_file_sizes">B|kB|MB|GB|TB</string>
|
||||||
|
<string name="standard">Standardní</string>
|
||||||
|
<string name="webtoon">Webtoon</string>
|
||||||
|
<string name="read_mode">Režim čtení</string>
|
||||||
|
<string name="grid_size">Velikost mřížky</string>
|
||||||
|
<string name="delete_manga">Smazat mangu</string>
|
||||||
|
<string name="text_delete_local_manga">Smazat \"%s\" permanentně z tohoto zařízení\?</string>
|
||||||
|
<string name="reader_settings">Nastavení čtečky</string>
|
||||||
|
<string name="switch_pages">Prohodit strany</string>
|
||||||
|
<string name="taps_on_edges">Rohová kliknutí</string>
|
||||||
|
<string name="volume_buttons">Tlačítka hlasitosti</string>
|
||||||
|
<string name="_continue">Pokračovat</string>
|
||||||
|
<string name="error">Chyba</string>
|
||||||
|
<string name="clear_thumbs_cache">Vyčistit mezipamět náhledů</string>
|
||||||
|
<string name="clear_search_history">Vyčisit historii vyhledávání</string>
|
||||||
|
<string name="domain">Doména</string>
|
||||||
|
<string name="app_update_available">Je dostupná nová verze této aplikace</string>
|
||||||
|
<string name="open_in_browser">Otevřít v prohlížeči</string>
|
||||||
|
<string name="large_manga_save_confirm">Tato manga má %s. Uložit všechny\?</string>
|
||||||
|
<string name="save_manga">Uložit</string>
|
||||||
|
<string name="notifications">Oznámení</string>
|
||||||
|
<string name="text_empty_holder_primary">Je tu nějak prázdno…</string>
|
||||||
|
<string name="text_search_holder_secondary">Zkuste přeformulovat dotaz.</string>
|
||||||
|
<string name="text_history_holder_primary">To co čtete se zobrazí zde</string>
|
||||||
|
<string name="text_history_holder_secondary">Zjistěte co číst na boční nabídce.</string>
|
||||||
|
<string name="text_shelf_holder_primary">Vaše manga bude zobrazena zde</string>
|
||||||
|
<string name="text_shelf_holder_secondary">Zjistěte co číst v sekci «Prozkoumat»</string>
|
||||||
|
<string name="text_local_holder_primary">Nejdříve něco uložte</string>
|
||||||
|
<string name="text_local_holder_secondary">Uložte to z online zdrojů nebo importujte soubor.</string>
|
||||||
|
<string name="recent_manga">Nedávné</string>
|
||||||
|
<string name="manga_shelf">Polička</string>
|
||||||
|
<string name="pages_animation">Animace stránek</string>
|
||||||
|
<string name="manga_save_location">Složka pro stahování</string>
|
||||||
|
<string name="not_available">Není dostupné</string>
|
||||||
|
<string name="cannot_find_available_storage">Není dostupné uložiště</string>
|
||||||
|
<string name="other_storage">Další uložiště</string>
|
||||||
|
<string name="done">Hotovo</string>
|
||||||
|
<string name="all_favourites">Všechny oblíbené</string>
|
||||||
|
<string name="favourites_category_empty">Prázdná kategorie</string>
|
||||||
|
<string name="text_feed_holder">Nové kapitoly toho co čtete jsou zobrazeny zde</string>
|
||||||
|
<string name="search_results">Výsledky vyhledávání</string>
|
||||||
|
<string name="new_version_s">Nová verze: %s</string>
|
||||||
|
<string name="updates_feed_cleared">Vyčištěno</string>
|
||||||
|
<string name="rotate_screen">Otočit displej</string>
|
||||||
|
<string name="update">Aktualizovat</string>
|
||||||
|
<string name="dont_check">Nekontrolovat</string>
|
||||||
|
<string name="enter_password">Zadejte heslo</string>
|
||||||
|
<string name="wrong_password">Špatné heslo</string>
|
||||||
|
<string name="protect_application">Chránit aplikaci</string>
|
||||||
|
<string name="repeat_password">Zopakujte heslo</string>
|
||||||
|
<string name="about">O</string>
|
||||||
|
<string name="app_version">Verze %s</string>
|
||||||
|
<string name="check_for_updates">Zkontrolovat aktualizace</string>
|
||||||
|
<string name="no_update_available">Nejsou dostupné žádné aktualizace</string>
|
||||||
|
<string name="scale_mode">Režim měřítka</string>
|
||||||
|
<string name="zoom_mode_fit_center">Pasovat do středu</string>
|
||||||
|
<string name="zoom_mode_fit_height">Pasovat na výšku</string>
|
||||||
|
<string name="zoom_mode_fit_width">Pasovat na šířku</string>
|
||||||
|
<string name="zoom_mode_keep_start">Uchovat při zapnutí</string>
|
||||||
|
<string name="black_dark_theme">Černá</string>
|
||||||
|
<string name="black_dark_theme_summary">Využívá méně energie na AMOLED displejích</string>
|
||||||
|
<string name="backup_restore">Zálohovat a obnovit</string>
|
||||||
|
<string name="create_backup">Vytvořit zálohu dat</string>
|
||||||
|
<string name="restore_backup">Obnovit ze zálohy</string>
|
||||||
|
<string name="data_restored">Obnoveno</string>
|
||||||
|
<string name="preparing_">Připravuji…</string>
|
||||||
|
<string name="file_not_found">Soubor nebyl nalezen</string>
|
||||||
|
<string name="data_restored_success">Všechna data byla obnovena</string>
|
||||||
|
<string name="clear_updates_feed">Vyčistit frontu aktualizací</string>
|
||||||
|
<string name="feed_will_update_soon">Aktualizace fronty brzy začne</string>
|
||||||
|
<string name="just_now">Právě teď</string>
|
||||||
|
<string name="long_ago">Dávno</string>
|
||||||
|
<string name="group">Skupina</string>
|
||||||
|
<string name="today">Dnes</string>
|
||||||
|
<string name="tap_to_try_again">Klikněte pro zopakování</string>
|
||||||
|
<string name="reader_mode_hint">Zvolená konfigurace bude pro tuto mangu zapamatována</string>
|
||||||
|
<string name="silent">Tiché</string>
|
||||||
|
<string name="captcha_required">Vyžadována CAPTCHA</string>
|
||||||
|
<string name="captcha_solve">Vyřešit</string>
|
||||||
|
<string name="text_clear_updates_feed_prompt">Vyčistit permanentně všechnu historii aktualizací\?</string>
|
||||||
|
<string name="check_for_new_chapters">Zkontrolovat nové kapitoly</string>
|
||||||
|
<string name="reverse">Obráceně</string>
|
||||||
|
<string name="sign_in">Přihlásit se</string>
|
||||||
|
<string name="auth_required">Abyste mohli vidět tento kontent, je nutné se přihlásit</string>
|
||||||
|
<string name="default_s">Základní: %s</string>
|
||||||
|
<string name="next">Další</string>
|
||||||
|
<string name="protect_application_subtitle">Zadejte heslo pro spuštění aplikace s</string>
|
||||||
|
<string name="password_length_hint">Heslo musí obsahovat nejméně 4 nebo více znaků</string>
|
||||||
|
<string name="text_clear_search_history_prompt">Odstranit permanentně všechny nedávné vyhledávání\?</string>
|
||||||
|
<string name="welcome">Vítejte</string>
|
||||||
|
<string name="backup_saved">Záloha uložena</string>
|
||||||
|
<string name="queued">Ve frontě</string>
|
||||||
|
<string name="chapter_is_missing">Chybí kapitola</string>
|
||||||
|
<string name="about_app_translation">Překlad</string>
|
||||||
|
<string name="auth_complete">Autorizováno</string>
|
||||||
|
<string name="auth_not_supported_by">Přihlášení na %s není podporováno</string>
|
||||||
|
<string name="text_clear_cookies_prompt">Budete odhlášeni ze všech zdrojů</string>
|
||||||
|
<string name="genres">Žánry</string>
|
||||||
|
<string name="state_ongoing">Pokračující</string>
|
||||||
|
<string name="system_default">Základní</string>
|
||||||
|
<string name="exclude_nsfw_from_history">Vynechat všechny NSFW mangy z historie</string>
|
||||||
|
<string name="show_pages_numbers">Očíslované stránky</string>
|
||||||
|
<string name="enabled_sources">Použité zdroje</string>
|
||||||
|
<string name="screenshots_policy">Zásady snímku obrazovky</string>
|
||||||
|
<string name="screenshots_allow">Povolit</string>
|
||||||
|
<string name="screenshots_block_nsfw">Zakázat na NSFW</string>
|
||||||
|
<string name="screenshots_block_all">Vždy blokovat</string>
|
||||||
|
<string name="suggestions">Návrhy</string>
|
||||||
|
<string name="suggestions_enable">Zapnout návrhy</string>
|
||||||
|
<string name="suggestions_summary">Navrhovat mangy dle vašich preferencí</string>
|
||||||
|
<string name="suggestions_info">Všechna data jsou analyzována pouze lokálně na tomto zařízení a nikdy nejsou nikam odesílána.</string>
|
||||||
|
<string name="text_suggestion_holder">Začněte číst mangu a získejte personalizované návrhy</string>
|
||||||
|
<string name="exclude_nsfw_from_suggestions">Nenavrhovat NSFW mangu</string>
|
||||||
|
<string name="enabled">Zapnuto</string>
|
||||||
|
<string name="disabled">Vypnuto</string>
|
||||||
|
<string name="filter_load_error">Nelze načíst seznam žánrů</string>
|
||||||
|
<string name="reset_filter">Resetovat filtr</string>
|
||||||
|
<string name="onboard_text">Vyberte jazyk ve kterém si přejete číst mangu. Můžete jej později změnit v nastavení.</string>
|
||||||
|
<string name="never">Nikdy</string>
|
||||||
|
<string name="only_using_wifi">Pouze na Wi-Fi</string>
|
||||||
|
<string name="always">Vždy</string>
|
||||||
|
<string name="preload_pages">Přednačíst stránky</string>
|
||||||
|
<string name="logged_in_as">Přihlášen jako %s</string>
|
||||||
|
<string name="nsfw">18+</string>
|
||||||
|
<string name="various_languages">Různé jazyky</string>
|
||||||
|
<string name="search_chapters">Najít kapitolu</string>
|
||||||
|
<string name="chapters_empty">Žádné kapitoly v této manze</string>
|
||||||
|
<string name="percent_string_pattern">%1$s%%</string>
|
||||||
|
<string name="appearance">Vzhled</string>
|
||||||
|
<string name="suggestions_excluded_genres_summary">Specifikujte žánry které nechcete vidět v návrzích</string>
|
||||||
|
<string name="text_delete_local_manga_batch">Permanentně odstranit vybrané předměty ze zařízení\?</string>
|
||||||
|
<string name="removal_completed">Odstraňování dokončeno</string>
|
||||||
|
<string name="download_slowdown">Zpomalení stahování</string>
|
||||||
|
<string name="local_manga_processing">Zpracovávání uložených mang</string>
|
||||||
|
<string name="chapters_will_removed_background">Kapitoly budou na pozadí odstraněny</string>
|
||||||
|
<string name="account_already_exists">Účet již existuje</string>
|
||||||
|
<string name="back">Zpět</string>
|
||||||
|
<string name="sync_title">Synchronizujte svá data</string>
|
||||||
|
<string name="email_enter_hint">Pro pokračování zadejte svůj email</string>
|
||||||
|
<string name="hide">Schovat</string>
|
||||||
|
<string name="new_sources_text">Jsou dostupné nové zdroje mang</string>
|
||||||
|
<string name="check_new_chapters_title">Kontrolovat nové kapiroly a upozornit na ně</string>
|
||||||
|
<string name="show_notification_new_chapters_on">Dostanete oznámení o aktualizaci mang které čtete</string>
|
||||||
|
<string name="notifications_enable">Zapnout oznámení</string>
|
||||||
|
<string name="name">Jméno</string>
|
||||||
|
<string name="edit">Upravit</string>
|
||||||
|
<string name="edit_category">Upravit kategorii</string>
|
||||||
|
<string name="tracking">Sledování</string>
|
||||||
|
<string name="empty_favourite_categories">Žádné oblíbené kategorie</string>
|
||||||
|
<string name="logout">Odhlásit se</string>
|
||||||
|
<string name="bookmark_add">Přidat záložku</string>
|
||||||
|
<string name="bookmark_remove">Odstranit záložku</string>
|
||||||
|
<string name="bookmarks">Záložky</string>
|
||||||
|
<string name="bookmark_added">Přidána záložka</string>
|
||||||
|
<string name="undo">Vrátit zpět</string>
|
||||||
|
<string name="removed_from_history">Odstraněno z historie</string>
|
||||||
|
<string name="dns_over_https">DNS přes HTTPS</string>
|
||||||
|
<string name="default_mode">Základní režim</string>
|
||||||
|
<string name="detect_reader_mode">Automaticky detekovat režim čtení</string>
|
||||||
|
<string name="detect_reader_mode_summary">Automaticky detekovat zda je manga webtoon</string>
|
||||||
|
<string name="disable_battery_optimization">Vypnout optimalizaci baterie</string>
|
||||||
|
<string name="disable_battery_optimization_summary">Pomáhá s kontrolou nových kapitol</string>
|
||||||
|
<string name="send">Odeslat</string>
|
||||||
|
<string name="status_planned">Plánované</string>
|
||||||
|
<string name="status_reading">Čtení</string>
|
||||||
|
<string name="status_re_reading">Znovu-čtení</string>
|
||||||
|
<string name="status_completed">Dokončeno</string>
|
||||||
|
<string name="status_on_hold">Pozastaveno</string>
|
||||||
|
<string name="status_dropped">Zahozeno</string>
|
||||||
|
<string name="disable_all">Vypnout vše</string>
|
||||||
|
<string name="use_fingerprint">Pokud lze, použít otisk prstu</string>
|
||||||
|
<string name="appwidget_shelf_description">Manga z vašich oblíbených</string>
|
||||||
|
<string name="appwidget_recent_description">Vaše nedávno čtená manga</string>
|
||||||
|
<string name="report">Hlášení</string>
|
||||||
|
<string name="show_reading_indicators">Zobrazovat idikátory pokroku</string>
|
||||||
|
<string name="data_deletion">Smazání dat</string>
|
||||||
|
<string name="show_reading_indicators_summary">Zobrazovat procento čtení v historii a oblíbených</string>
|
||||||
|
<string name="exclude_nsfw_from_history_summary">Manga označená jako NSFW nebude nikdy přidána do historie a nebude ukládán váš pokrok</string>
|
||||||
|
<string name="clear_cookies_summary">Může pomoci v případě nekterých problémů. Všechny autorizace budou neplatné</string>
|
||||||
|
<string name="show_all">Zobrazit vše</string>
|
||||||
|
<string name="invalid_domain_message">Neplatná doména</string>
|
||||||
|
<string name="clear_all_history">Vyčistit celou historii</string>
|
||||||
|
<string name="history_cleared">Historie vyčištěna</string>
|
||||||
|
<string name="manage">Spravovat</string>
|
||||||
|
<string name="no_bookmarks_yet">Zatím žádné záložky</string>
|
||||||
|
<string name="bookmarks_removed">Záložky odstraněny</string>
|
||||||
|
<string name="no_manga_sources">Žádné zdroje mang</string>
|
||||||
|
<string name="no_manga_sources_text">Zapnout zdroje mang pro čtení online</string>
|
||||||
|
<string name="categories_delete_confirm">Jste si jisti že chcete smazat zvolené oblíbené kategorie\?
|
||||||
|
\nVšechny mangy v ní budou ztraceny a nelze jej vrátit zpět.</string>
|
||||||
|
<string name="reorder">Přeskupit</string>
|
||||||
|
<string name="empty">Prázdné</string>
|
||||||
|
<string name="explore">Prozkoumat</string>
|
||||||
|
<string name="confirm_exit">Stiskněte Zpět znovu pro ukončení</string>
|
||||||
|
<string name="exit_confirmation_summary">Stiskněte Zpět dvakrát pro ukončení aplikace</string>
|
||||||
|
<string name="exit_confirmation">Potvrzení ukončení</string>
|
||||||
|
<string name="saved_manga">Uložená manga</string>
|
||||||
|
<string name="pages_cache">Mezipaměť stránek</string>
|
||||||
|
<string name="other_cache">Další mezipamět</string>
|
||||||
|
<string name="storage_usage">Využívání uložiště</string>
|
||||||
|
<string name="available">Dostupné</string>
|
||||||
|
<string name="memory_usage_pattern">%s -%s</string>
|
||||||
|
<string name="removed_from_favourites">Odstraněno z oblíbených</string>
|
||||||
|
<string name="options">Možnosti</string>
|
||||||
|
<string name="not_found_404">Kontent nebyl nalezen nebo byl odstraněn</string>
|
||||||
|
<string name="incognito_mode">Režim inkognito</string>
|
||||||
|
<string name="no_chapters">Žádné kapitoly</string>
|
||||||
|
<string name="automatic_scroll">Automatické rolování</string>
|
||||||
|
<string name="reader_info_pattern">Kap. %1$d/%2$d Str. %3$d/%4$d</string>
|
||||||
|
<string name="reader_info_bar">Zobrazovat informační lištu v čtečce</string>
|
||||||
|
<string name="comics_archive">Archív komiksů</string>
|
||||||
|
<string name="folder_with_images">Složka s obrázky</string>
|
||||||
|
<string name="importing_manga">Importuji mangu</string>
|
||||||
|
<string name="import_will_start_soon">Importování brzy začne</string>
|
||||||
|
<string name="feed">Fronta</string>
|
||||||
|
<string name="manga_error_description_pattern">Podrobnosti chyby:<br><tt>%1$s</tt><br><br>1. Zkuste <a href=%2$s>otveřít mangu v prohlížeči</a> abyste se ujistili že je dostupná na zdroji<br>2. Ujistěte se že používáte <a href=kotatsu://about>nejnovější verzi Kotatsu</a><br>3. Pokud je dostupná, pošlete hlášení o chybě vývojářům.</string>
|
||||||
|
<string name="history_shortcuts">Zobrazovat zkratky nedávných mang</string>
|
||||||
|
<string name="history_shortcuts_summary">Udělejte nedávné mangy dostupné dlouhým kliknutím na ikonu aplikace</string>
|
||||||
|
<string name="reader_control_ltr_summary">Klikněte do pravého rohu nebo stisknutí pravého tlačítka vždy změní na další stranu</string>
|
||||||
|
<string name="reader_control_ltr">Ovládání ergonomické čtečky</string>
|
||||||
|
<string name="color_correction">Korekce barev</string>
|
||||||
|
<string name="brightness">Jas</string>
|
||||||
|
<string name="contrast">Kontrast</string>
|
||||||
|
<string name="reset">Resetovat</string>
|
||||||
|
<string name="color_correction_hint">Vybrané nastavení barev bude pro tuto mangu zapamatováno</string>
|
||||||
|
<string name="text_unsaved_changes_prompt">Uložit nebo zahodit neuložené změny\?</string>
|
||||||
|
<string name="discard">Zahodit</string>
|
||||||
|
<string name="error_no_space_left">Na zařízení není volné žádné místo</string>
|
||||||
|
<string name="reader_slider">Zobrazovat posuvník změny stran</string>
|
||||||
|
<string name="webtoon_zoom">Webtoon přiblížení</string>
|
||||||
|
<string name="different_languages">Různé jazyky</string>
|
||||||
|
<string name="network_unavailable">Připojení není dostupné</string>
|
||||||
|
<string name="network_unavailable_hint">Zapněte Wi-Fi nebo mobilní data abyste mohli číst mangu online</string>
|
||||||
|
<string name="server_error">Chyba na straně serveru (%1$d). Prosíme zkuste to znovu později</string>
|
||||||
|
<string name="clear_new_chapters_counters">Také vyčistit informace o nových kapitolách</string>
|
||||||
|
<string name="compact">Kompaktní</string>
|
||||||
|
<string name="source_disabled">Zdroj vypnut</string>
|
||||||
|
<string name="prefetch_content">Přednačítání kontentu</string>
|
||||||
|
<string name="mark_as_current">Označit jako aktuální</string>
|
||||||
|
<string name="language">Jazyk</string>
|
||||||
|
<string name="share_logs">Sdílet záznamy</string>
|
||||||
|
<string name="enable_logging">Zapnout zaznamenávání</string>
|
||||||
|
<string name="enable_logging_summary">Zaznamenat některé akce pro spravovací účely</string>
|
||||||
|
<string name="show_suspicious_content">Zobrazovat podezřelý kontent</string>
|
||||||
|
<string name="theme_name_dynamic">Dynamické</string>
|
||||||
|
<string name="color_theme">Schéma barev</string>
|
||||||
|
<string name="show_in_grid_view">Zobrazovat v zobrazení mřížek</string>
|
||||||
|
<string name="theme_name_miku">Miku</string>
|
||||||
|
<string name="theme_name_asuka">Asuka</string>
|
||||||
|
<string name="theme_name_mion">Mion</string>
|
||||||
|
<string name="theme_name_rikka">Rikka</string>
|
||||||
|
<string name="theme_name_sakura">Sakura</string>
|
||||||
|
<string name="theme_name_mamimi">Mamimi</string>
|
||||||
|
<string name="theme_name_kanade">Kanade</string>
|
||||||
|
<string name="nothing_here">Nic tu není</string>
|
||||||
|
<string name="scrobbling_empty_hint">Pro sledování pokroku čtení, vyberte Menu → Sledovat na displeji detailů mangy.</string>
|
||||||
|
<string name="services">Služby</string>
|
||||||
|
<string name="allow_unstable_updates">Povolit nestabilní aktualizace</string>
|
||||||
|
<string name="allow_unstable_updates_summary">Navrhnout beta aktualizace této aplikace</string>
|
||||||
|
<string name="download_started">Stahování začalo</string>
|
||||||
|
<string name="got_it">Mám to</string>
|
||||||
|
<string name="sources_reorder_tip">Klikněte a přidržte na předmětu pro přeskupení</string>
|
||||||
|
<string name="user_agent">UserAgent header</string>
|
||||||
|
<string name="settings_apply_restart_required">Prosíme restartujte aplikaci pro aplikování těchto změn</string>
|
||||||
|
<string name="comics_archive_import_description">Můžete vybrat jeden nebo vícs .cbz nebo .zip souborů, každý soubor bude znám jako samostatná manga.</string>
|
||||||
|
<string name="restore_backup_description">Importovat dřive vytvořenou zálohu uživatelských dat</string>
|
||||||
|
<string name="show_on_shelf">Zobrazovat na poličce</string>
|
||||||
|
<string name="sync_auth_hint">Můžete se přihlásit do již existujícího účtu nebo vytvořit nový</string>
|
||||||
|
<string name="find_similar">Najít podobné</string>
|
||||||
|
<string name="sync_settings">Nastavení synchronizace</string>
|
||||||
|
<string name="server_address">Adresa serveru</string>
|
||||||
|
<string name="ignore_ssl_errors">Ignorovat SSL chyby</string>
|
||||||
|
<string name="mirror_switching">Vybrat zrcadlo automaticky</string>
|
||||||
|
<string name="mirror_switching_summary">Automaticky prohodit doménu pro vzdálené zdroje při chybě pokud jsou zrcadla dostupná</string>
|
||||||
|
<string name="pause">Pozastavit</string>
|
||||||
|
<string name="resume">Vrátit</string>
|
||||||
|
<string name="paused">Pozastaveno</string>
|
||||||
|
<string name="remove_completed">Odstranění dokončeno</string>
|
||||||
|
<string name="downloads_wifi_only_summary">Zastavit stahování při měnění na mobilní data</string>
|
||||||
|
<string name="suggestion_manga">Doporučení: %s</string>
|
||||||
|
<string name="suggestions_notifications_summary">Občas zobrazit oznámení s navrženou mangou</string>
|
||||||
|
<string name="more">Více</string>
|
||||||
|
<string name="enable">Zapnout</string>
|
||||||
|
<string name="no_thanks">Ne, děkuji</string>
|
||||||
|
<string name="cancel_all_downloads_confirm">Všechna aktivní stahování budou zrušena, částečně stažená data budou ztracena</string>
|
||||||
|
<string name="remove_completed_downloads_confirm">Vaše historie stahování bude permanentně odstraněna</string>
|
||||||
|
<string name="text_downloads_list_holder">Nemáte žádná stažení</string>
|
||||||
|
<string name="downloads_resumed">Stahování bylo vráceno</string>
|
||||||
|
<string name="downloads_paused">Stahování bylo pozastaveno</string>
|
||||||
|
<string name="downloads_removed">Stažené soubory byly odstraněny</string>
|
||||||
|
<string name="downloads_cancelled">Stahování bylo zrušeno</string>
|
||||||
|
<string name="suggestions_enable_prompt">Chcete získávat personalizované návrhy mang\?</string>
|
||||||
|
<string name="translations">Překlady</string>
|
||||||
|
<string name="web_view_unavailable">WebView není dostupné: zkontrolovay jestli je provozovatel WebView nainstalovaný</string>
|
||||||
|
<string name="clear_network_cache">Vyčistit mezipaměť sítě</string>
|
||||||
|
<string name="type">Typ</string>
|
||||||
|
<string name="address">Adresa</string>
|
||||||
|
<string name="invalid_value_message">Neplatná hodnota</string>
|
||||||
|
<string name="manga_branch_title_template">%1$s (%2$s)</string>
|
||||||
|
<string name="downloaded">Staženo</string>
|
||||||
|
<string name="images_proxy_title">Proxy pro optimalizaci obrázků</string>
|
||||||
|
<string name="images_procy_description">Použít službu wsrv.nl ke snížení využití provozu a urychlení načítání obrázků, pokud je to možné</string>
|
||||||
|
<string name="invert_colors">Invertovat barvy</string>
|
||||||
|
<string name="username">Uživatelské jméno</string>
|
||||||
|
<string name="password">Heslo</string>
|
||||||
|
<string name="authorization_optional">Autorizace (dobrovolné)</string>
|
||||||
|
<string name="invalid_port_number">Neplatné číslo portu</string>
|
||||||
|
<string name="network">Síť</string>
|
||||||
|
<string name="data_and_privacy">Data a soukromí</string>
|
||||||
|
<string name="restore_summary">Obnovit nedávno vytvořenou zálohu</string>
|
||||||
|
<string name="reader_info_bar_summary">Zobrazovat aktuální čas a pokrok čtení na vršku displeje</string>
|
||||||
|
<string name="show_pages_numbers_summary">Zobrazovat číslo strany ve spodním rohu</string>
|
||||||
|
<string name="pages_animation_summary">Animovat změny stran</string>
|
||||||
|
<string name="details_button_tip">Stiskněte a podržte tlačítko Číst pro více možností</string>
|
||||||
|
<string name="download_option_all_chapters">Všechny kapitoly s překladem %s</string>
|
||||||
|
<string name="download_option_whole_manga">Celá manga</string>
|
||||||
|
<string name="download_option_first_n_chapters">První %s</string>
|
||||||
|
<string name="download_option_next_unread_n_chapters">Další nepřečtené %s</string>
|
||||||
|
<string name="download_option_all_unread">Všechny nepřečtené kapitoly</string>
|
||||||
|
<string name="download_option_all_unread_b">Všechny nepřečtené kapitoly (%s)</string>
|
||||||
|
<string name="custom_directory">Vlastní adrešář</string>
|
||||||
|
<string name="pick_custom_directory">Vyberte vlastní adresář</string>
|
||||||
|
<string name="no_access_to_file">Nemáte žádný přístup k tomuto souboru nebo adresáři</string>
|
||||||
|
<string name="local_manga_directories">Lokální adresář mang</string>
|
||||||
|
<string name="local_storage">Místní uložiště</string>
|
||||||
|
<string name="favourites">Oblíbené</string>
|
||||||
|
<string name="history">Historie</string>
|
||||||
|
<string name="error_occurred">Vyskytla se chyba</string>
|
||||||
|
<string name="add_new_category">Nová kategorie</string>
|
||||||
|
<string name="save">Uložit</string>
|
||||||
|
<string name="search">Hledat</string>
|
||||||
|
<string name="manga_downloading_">Stahování…</string>
|
||||||
|
<string name="updated">Aktualizováno</string>
|
||||||
|
<string name="by_rating">Hodnocení</string>
|
||||||
|
<string name="search_manga">Hledat mangu</string>
|
||||||
|
<string name="popular">Populární</string>
|
||||||
|
<string name="newest">Nejnovější</string>
|
||||||
|
<string name="text_clear_history_prompt">Permanentně vyčistit celou historii čtení\?</string>
|
||||||
|
<string name="no_description">Žádný popis</string>
|
||||||
|
<string name="pages">Strany</string>
|
||||||
|
<string name="clear">Vyčistit</string>
|
||||||
|
<string name="save_page">Uložit stranu</string>
|
||||||
|
<string name="page_saved">Uloženo</string>
|
||||||
|
<string name="operation_not_supported">Tato operace není podporována</string>
|
||||||
|
<string name="search_on_s">Hledat na %s</string>
|
||||||
|
<string name="internal_storage">Interní uložiště</string>
|
||||||
|
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d z %2$d na</string>
|
||||||
|
<string name="notification_sound">Zvuk oznámení</string>
|
||||||
|
<string name="search_history_cleared">Vyčištěno</string>
|
||||||
|
<string name="gestures_only">Pouze gesta</string>
|
||||||
|
<string name="external_storage">Externí uložiště</string>
|
||||||
|
<string name="new_chapters">Nové kapitoly</string>
|
||||||
|
<string name="download">Stáhnout</string>
|
||||||
|
<string name="notifications_settings">Nastavení oznámení</string>
|
||||||
|
<string name="light_indicator">LED indikátor</string>
|
||||||
|
<string name="vibration">Vibrace</string>
|
||||||
|
<string name="favourites_categories">Oblíbené kategorie</string>
|
||||||
|
<string name="remove_category">Odstranit</string>
|
||||||
|
<string name="read_later">Přečíst později</string>
|
||||||
|
<string name="updates">Aktualizace</string>
|
||||||
|
<string name="size_s">Velikost: %s</string>
|
||||||
|
<string name="passwords_mismatch">Neodpovídající heslo</string>
|
||||||
|
<string name="track_sources">Hledat aktualizace</string>
|
||||||
|
<string name="protect_application_summary">Zeptat se na heslo při zapnutí Kotatsu</string>
|
||||||
|
<string name="yesterday">Včera</string>
|
||||||
|
<string name="right_to_left">Z prava doleva</string>
|
||||||
|
<string name="clear_feed">Vyčistit frontu</string>
|
||||||
|
<string name="create_category">Nová kategorie</string>
|
||||||
|
<string name="clear_cookies">Vyčistit cookies</string>
|
||||||
|
<string name="data_restored_with_errors">Data byla obnovena, ale vyskytly se chyby</string>
|
||||||
|
<string name="backup_information">Můžete vytvořit zálohu vaší historie a oblíbených a obnovit jej</string>
|
||||||
|
<string name="cookies_cleared">Všechny cookies byli odstraněny</string>
|
||||||
|
<string name="suggestions_updating">Aktualizují se návrhy</string>
|
||||||
|
<string name="tracker_warning">Některá zařízení mají jiné systémové chování, to může rozbít procesy na pozadí.</string>
|
||||||
|
<string name="read_more">Číst více</string>
|
||||||
|
<string name="about_app_translation_summary">Přeložte tuto aplikaci</string>
|
||||||
|
<string name="confirm">Potvrdit</string>
|
||||||
|
<string name="available_sources">Dostupné zdroje</string>
|
||||||
|
<string name="suggestions_excluded_genres">Vynechat žánry</string>
|
||||||
|
<string name="download_slowdown_summary">Pomohá předejít zablokování vaší IP adresy</string>
|
||||||
|
<string name="canceled">Zrušeno</string>
|
||||||
|
<string name="sync">Synchronizace</string>
|
||||||
|
<string name="show_notification_new_chapters_off">Nedostanete oznámení ale nové kapitoly budou v seznamu zvýrazněné</string>
|
||||||
|
<string name="bookmark_removed">Záložka odstraněna</string>
|
||||||
|
<string name="crash_text">Něco se pokazilo. Prosím odešlete hlášení o chybě vývojářům aby jste nám ji pomohli opravit.</string>
|
||||||
|
<string name="state_finished">Hotovo</string>
|
||||||
|
<string name="select_range">Vybrat rozsah</string>
|
||||||
|
<string name="last_2_hours">Poslední 2 hodiny</string>
|
||||||
|
<string name="no_bookmarks_summary">Můžete vytvořit záložku při čtení mangy</string>
|
||||||
|
<string name="random">Náhodné</string>
|
||||||
|
<string name="import_completed">Importování dokončeno</string>
|
||||||
|
<string name="import_completed_hint">Můžete odstranit originální soubor z uložiště abyste ušetřili místo</string>
|
||||||
|
<string name="folder_with_images_import_description">Můžete vybrat adresář s archivy nebo obrázky. Každý archiv (nebo podkategorie) bude znám jako kapitola.</string>
|
||||||
|
<string name="speed">Rychlost</string>
|
||||||
|
<string name="downloads_wifi_only">Stahovat pouze přes Wi-Fi</string>
|
||||||
|
<string name="sync_host_description">Můžete použít samostatně hostovaný synchronizační server nebo základní. Neměňte pokud si nejste jisti co děláte.</string>
|
||||||
|
<string name="cancel_all">Zrušit vše</string>
|
||||||
|
<string name="proxy">Proxy</string>
|
||||||
|
<string name="port">Port</string>
|
||||||
|
<string name="webtoon_zoom_summary">Povolit přiblížení v gestu ve webtoon režimu</string>
|
||||||
|
<string name="clear_source_cookies_summary">Vyčistit cookies pouze pro specifikované domény. Ve většině případech bude neplatná autorizace</string>
|
||||||
|
<string name="download_option_manual_selection">Vyberte kapitoly manuálně</string>
|
||||||
|
</resources>
|
||||||
@@ -408,4 +408,38 @@
|
|||||||
<string name="suggestions_enable_prompt">Gusto mo bang makatanggap ng personalized na mga mungkahi sa manga\?</string>
|
<string name="suggestions_enable_prompt">Gusto mo bang makatanggap ng personalized na mga mungkahi sa manga\?</string>
|
||||||
<string name="downloads_removed">Inalis na ang mga download</string>
|
<string name="downloads_removed">Inalis na ang mga download</string>
|
||||||
<string name="downloads_cancelled">Nakansela ang mga pag-download</string>
|
<string name="downloads_cancelled">Nakansela ang mga pag-download</string>
|
||||||
|
<string name="clear_network_cache">Linisin ang network cache</string>
|
||||||
|
<string name="type">Uri</string>
|
||||||
|
<string name="address">Address</string>
|
||||||
|
<string name="port">Port</string>
|
||||||
|
<string name="proxy">Proxy</string>
|
||||||
|
<string name="invalid_value_message">Imbalidong value</string>
|
||||||
|
<string name="downloaded">Na-download</string>
|
||||||
|
<string name="images_proxy_title">Proxy sa pag-optimize ng mga imahe</string>
|
||||||
|
<string name="images_procy_description">Gamitin ang serbisyo ng wsrv.nl upang bawasan ang paggamit ng trapiko at pabilisin ang pag-load ng imahe kung maaari</string>
|
||||||
|
<string name="username">Username</string>
|
||||||
|
<string name="authorization_optional">Awtorisasyon (opsyonal)</string>
|
||||||
|
<string name="network">Network</string>
|
||||||
|
<string name="data_and_privacy">Data at privacy</string>
|
||||||
|
<string name="restore_summary">Ibalik ang dating ginawang backup</string>
|
||||||
|
<string name="webtoon_zoom_summary">Payagan ang pag-zoom in na gesture sa webtoon mode</string>
|
||||||
|
<string name="reader_info_bar_summary">Ipakita ang kasalukuyang oras at pagbabasa ng progreso sa tuktok ng screen</string>
|
||||||
|
<string name="show_pages_numbers_summary">Ipakita ang mga numero ng pahina sa ibabang gilid</string>
|
||||||
|
<string name="pages_animation_summary">I-animate ang paglipat ng pahina</string>
|
||||||
|
<string name="invalid_port_number">Imbalidong numero ng port</string>
|
||||||
|
<string name="clear_source_cookies_summary">I-clear ang mga cookie para sa tinukoy na domain lamang. Sa karamihan ng mga kaso, magpapawalang-bisa ang awtorisasyon</string>
|
||||||
|
<string name="manga_branch_title_template">%1$s (%2$s)</string>
|
||||||
|
<string name="download_option_all_chapters">Lahat ng mga kabanata na may pagsasalin na %s</string>
|
||||||
|
<string name="download_option_whole_manga">Ang buong manga</string>
|
||||||
|
<string name="download_option_first_n_chapters">Unang %s</string>
|
||||||
|
<string name="download_option_next_unread_n_chapters">Susunod na di-nabasa %s</string>
|
||||||
|
<string name="download_option_all_unread">Lahat ng di-nababasang kabanata</string>
|
||||||
|
<string name="download_option_all_unread_b">Lahat ng di-nababasang kabanata (%s)</string>
|
||||||
|
<string name="download_option_manual_selection">Manu-manong pumili ng mga kabanata</string>
|
||||||
|
<string name="invert_colors">Baliktarin ang mga kulay</string>
|
||||||
|
<string name="custom_directory">Pasadyang direktoryo</string>
|
||||||
|
<string name="pick_custom_directory">Pumili ng pasadyang direktoryo</string>
|
||||||
|
<string name="no_access_to_file">Wala kang access sa file o direktoryo na ito</string>
|
||||||
|
<string name="local_manga_directories">Mga lokal na direktoryo ng manga</string>
|
||||||
|
<string name="password">Password</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -439,4 +439,8 @@
|
|||||||
<string name="download_option_all_chapters">Semua bab dengan terjemahan %s</string>
|
<string name="download_option_all_chapters">Semua bab dengan terjemahan %s</string>
|
||||||
<string name="download_option_next_unread_n_chapters">Belum dibaca %s</string>
|
<string name="download_option_next_unread_n_chapters">Belum dibaca %s</string>
|
||||||
<string name="download_option_manual_selection">Pilih bab secara manual</string>
|
<string name="download_option_manual_selection">Pilih bab secara manual</string>
|
||||||
|
<string name="custom_directory">Direktori khusus</string>
|
||||||
|
<string name="pick_custom_directory">Pilih direktori khusus</string>
|
||||||
|
<string name="no_access_to_file">Anda tidak memiliki akses ke file atau direktori ini</string>
|
||||||
|
<string name="local_manga_directories">Direktori manga</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -323,4 +323,33 @@
|
|||||||
<string name="never">절대</string>
|
<string name="never">절대</string>
|
||||||
<string name="clear_network_cache">네트워크 캐시 지우기</string>
|
<string name="clear_network_cache">네트워크 캐시 지우기</string>
|
||||||
<string name="invalid_value_message">잘못된 값</string>
|
<string name="invalid_value_message">잘못된 값</string>
|
||||||
|
<string name="just_now">방금</string>
|
||||||
|
<string name="enabled_sources">중고 소스</string>
|
||||||
|
<string name="detect_reader_mode">자동 감지 리더 모드</string>
|
||||||
|
<string name="explore">탐색</string>
|
||||||
|
<string name="options">옵션</string>
|
||||||
|
<string name="importing_manga">만화 가져오기</string>
|
||||||
|
<string name="color_correction_hint">선택한 색상 설정은 이 만화에 대해 기억됩니다</string>
|
||||||
|
<string name="services">서비스</string>
|
||||||
|
<string name="details_button_tip">더 많은 옵션을 보려면 읽기 버튼을 길게 누르세요</string>
|
||||||
|
<string name="clear_source_cookies_summary">지정된 도메인에 대해서만 쿠키를 지웁니다. 대부분의 경우 인증이 무효화됩니다</string>
|
||||||
|
<string name="history_shortcuts_summary">응용 프로그램 아이콘을 길게 눌러 최신 만화를 사용할 수 있도록 합니다</string>
|
||||||
|
<string name="reorder">재 주문</string>
|
||||||
|
<string name="folder_with_images">이미지가 있는 폴더</string>
|
||||||
|
<string name="download_option_all_unread_b">읽지 않은 모든 챕터(%s)</string>
|
||||||
|
<string name="download_option_all_unread">읽지 않은 모든 챕터</string>
|
||||||
|
<string name="download_option_all_chapters">%s 번역이 있는 모든 챕터</string>
|
||||||
|
<string name="color_correction">색보정</string>
|
||||||
|
<string name="reader_control_ltr">인체공학적 리더 컨트롤</string>
|
||||||
|
<string name="brightness">명도</string>
|
||||||
|
<string name="local_manga_directories">지역 만화 디렉토리</string>
|
||||||
|
<string name="no_access_to_file">이 파일 또는 디렉터리에 대한 액세스 권한이 없습니다</string>
|
||||||
|
<string name="various_languages">다양한 언어</string>
|
||||||
|
<string name="local_manga_processing">저장된 만화 처리</string>
|
||||||
|
<string name="show_reading_indicators_summary">기록 및 즐겨찾기에서 읽은 비율 표시</string>
|
||||||
|
<string name="reader_control_ltr_summary">오른쪽 가장자리를 탭하거나 오른쪽 키를 누르면 항상 다음 페이지로 전환됩니다</string>
|
||||||
|
<string name="contrast">차이</string>
|
||||||
|
<string name="reset">초기화</string>
|
||||||
|
<string name="text_unsaved_changes_prompt">저장되지 않은 변경 사항을 저장하거나 삭제하시겠습니까\?</string>
|
||||||
|
<string name="manga_error_description_pattern">오류 세부정보:<br><tt>%1$s</tt><br><br>1. <a href=%2$s>웹 브라우저에서 만화를 열어</a> 소스에서 사용할 수 있는지 확인하세요<br>2. <a href=kotatsu://about>최신 버전의 Kotatsu</a><br>를 사용하고 있는지 확인하세요.3. 사용 가능한 경우 개발자에게 오류 보고서를 보냅니다.</string>
|
||||||
</resources>
|
</resources>
|
||||||
2
app/src/main/res/values-ml/plurals.xml
Normal file
2
app/src/main/res/values-ml/plurals.xml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources></resources>
|
||||||
@@ -138,4 +138,95 @@
|
|||||||
<string name="no_update_available">कुनै अपडेट उपलब्ध छैन</string>
|
<string name="no_update_available">कुनै अपडेट उपलब्ध छैन</string>
|
||||||
<string name="explore">अन्वेषण</string>
|
<string name="explore">अन्वेषण</string>
|
||||||
<string name="enter_password">पासवर्ड एन्टर गर्नुहोस्</string>
|
<string name="enter_password">पासवर्ड एन्टर गर्नुहोस्</string>
|
||||||
|
<string name="just_now">भर्खरै</string>
|
||||||
|
<string name="reader_mode_hint">छनोट गरिएको कन्फिगरेसन यो मङ्गाको लागि सम्झिनेछ</string>
|
||||||
|
<string name="next">अर्को</string>
|
||||||
|
<string name="never">कहिल्यै</string>
|
||||||
|
<string name="zoom_mode_fit_center">फिट केन्द्र</string>
|
||||||
|
<string name="zoom_mode_fit_height">उचाइमा फिट</string>
|
||||||
|
<string name="zoom_mode_fit_width">चौडाइमा फिट</string>
|
||||||
|
<string name="zoom_mode_keep_start">सुरुमा राख्नुहोस्</string>
|
||||||
|
<string name="black_dark_theme">कालो</string>
|
||||||
|
<string name="black_dark_theme_summary">AMOLED स्क्रिनहरूमा कम पावर प्रयोग हुन्छ</string>
|
||||||
|
<string name="backup_restore">जगेडाना र पुनर्स्थापना</string>
|
||||||
|
<string name="create_backup">डाटा ब्याकअप सिर्जना गर्नुहोस्</string>
|
||||||
|
<string name="restore_backup">ब्याकअपबाट पुनर्स्थापना गर्नुहोस्</string>
|
||||||
|
<string name="data_restored">पुनर्स्थापित</string>
|
||||||
|
<string name="preparing_">तयारी गर्दै…</string>
|
||||||
|
<string name="file_not_found">फाइल फेला परेन</string>
|
||||||
|
<string name="data_restored_success">सबै डाटा पुनर्स्थापित गरियो</string>
|
||||||
|
<string name="data_restored_with_errors">डाटा पुनर्स्थापित गरियो, तर त्यहाँ त्रुटिहरू पनि छन्</string>
|
||||||
|
<string name="backup_information">तपाईं आफ्नो इतिहास र मनपर्ने को जगेडा सिर्जना र यसलाई पुनर्स्थापित गर्न सक्नुहुन्छ</string>
|
||||||
|
<string name="yesterday">हिजो</string>
|
||||||
|
<string name="long_ago">धेरै पहिले</string>
|
||||||
|
<string name="group">समूह</string>
|
||||||
|
<string name="today">आज</string>
|
||||||
|
<string name="silent">मौनधारण</string>
|
||||||
|
<string name="captcha_solve">समाधान गर्नुहोस्</string>
|
||||||
|
<string name="clear_cookies">कुकीहरू खाली गर्नुहोस्</string>
|
||||||
|
<string name="cookies_cleared">सबै कुकीहरू हटाइयो</string>
|
||||||
|
<string name="clear_feed">फिड खाली गर्नुहोस्</string>
|
||||||
|
<string name="default_s">पूर्वनिर्धारित: %s</string>
|
||||||
|
<string name="protect_application_subtitle">एप सुरु गर्न पासवर्ड प्रविष्ट गर्नुहोस्</string>
|
||||||
|
<string name="confirm">पुष्टि गर्नुहोस्</string>
|
||||||
|
<string name="password_length_hint">पासवर्ड ४ वर्ण वा सोभन्दा बढी हुनुपर्छ</string>
|
||||||
|
<string name="text_clear_search_history_prompt">हालका सबै खोज प्रश्नहरू स्थायी रूपमा हटाउने हो\?</string>
|
||||||
|
<string name="text_clear_updates_feed_prompt">सबै अद्यावधिक इतिहास स्थायी रूपमा खाली गर्ने हो\?</string>
|
||||||
|
<string name="auth_required">यो सामग्री हेर्न साइन इन गर्नुहोस्</string>
|
||||||
|
<string name="welcome">स्वागत छ</string>
|
||||||
|
<string name="backup_saved">ब्याकअप सुरक्षित गरियो छ</string>
|
||||||
|
<string name="tracker_warning">केही यन्त्रहरूमा फरक प्रणाली व्यवहार हुन्छ, जसले पृष्ठभूमि कार्यहरू तोड्न सक्छ।</string>
|
||||||
|
<string name="queued">लामबद्ध</string>
|
||||||
|
<string name="about_app_translation_summary">यो एप अनुवाद गर्नुहोस्</string>
|
||||||
|
<string name="about_app_translation">अनुवादन</string>
|
||||||
|
<string name="auth_complete">अधिकृत</string>
|
||||||
|
<string name="auth_not_supported_by">%s मा लग इन गर्न समर्थित छैन</string>
|
||||||
|
<string name="text_clear_cookies_prompt">मा लग इन गर्न समर्थित छैन</string>
|
||||||
|
<string name="state_finished">समाप्त भयो</string>
|
||||||
|
<string name="state_ongoing">जारी छ</string>
|
||||||
|
<string name="system_default">पूर्वनिर्धारित</string>
|
||||||
|
<string name="exclude_nsfw_from_history">इतिहासबाट NSFW मङ्गा बहिष्कार गर्नुहोस्</string>
|
||||||
|
<string name="show_pages_numbers">अंकित पृष्ठहरू</string>
|
||||||
|
<string name="enabled_sources">प्रयोग गरिएको स्रोतहरू</string>
|
||||||
|
<string name="available_sources">उपलब्ध स्रोतहरू</string>
|
||||||
|
<string name="screenshots_policy">स्क्रिनसट नीति</string>
|
||||||
|
<string name="screenshots_allow">अनुमति दिनुहोस्</string>
|
||||||
|
<string name="screenshots_block_nsfw">NSFW मा रोक लगाउनुहोस्</string>
|
||||||
|
<string name="screenshots_block_all">सधैं ब्लक गर्नुहोस्</string>
|
||||||
|
<string name="suggestions">सुझावहरू</string>
|
||||||
|
<string name="suggestions_enable">सुझावहरू सक्षम गर्नुहोस्</string>
|
||||||
|
<string name="suggestions_info">सबै डेटा यस उपकरणमा स्थानीय रूपमा मात्र विश्लेषण गरिन्छ र कहिँ पनि पठाइँदैन।</string>
|
||||||
|
<string name="text_suggestion_holder">मङ्गा पढ्न सुरु गर्नुहोस् र तपाईंले व्यक्तिगत सुझावहरू प्राप्त गर्नुहुनेछ</string>
|
||||||
|
<string name="exclude_nsfw_from_suggestions">NSFW मंगा सुझाव नगर्नुहोस्</string>
|
||||||
|
<string name="enabled">सक्षम गरियो</string>
|
||||||
|
<string name="disabled">अक्षम</string>
|
||||||
|
<string name="filter_load_error">विधाहरूको सूची लोड गर्न सकिएन</string>
|
||||||
|
<string name="reset_filter">फिल्टर रिसेट गर्नुहोस्</string>
|
||||||
|
<string name="only_using_wifi">Wi-Fi मा मात्र</string>
|
||||||
|
<string name="always">सधैं</string>
|
||||||
|
<string name="preload_pages">प्रिलोड पृष्ठहरू</string>
|
||||||
|
<string name="logged_in_as">%s को रूपमा लग इन गरियो</string>
|
||||||
|
<string name="nsfw">१८+</string>
|
||||||
|
<string name="percent_string_pattern">%1$s%%</string>
|
||||||
|
<string name="create_category">नयाँ श्रेणी</string>
|
||||||
|
<string name="scale_mode">स्केल मोड</string>
|
||||||
|
<string name="tap_to_try_again">फेरि प्रयास गर्न ट्याप गर्नुहोस्</string>
|
||||||
|
<string name="check_for_new_chapters">नयाँ अध्यायहरूको लागि जाँच गर्नुहोस्</string>
|
||||||
|
<string name="right_to_left">दायाँ-देखि-बायाँ</string>
|
||||||
|
<string name="chapters_empty">यो मङ्गामा कुनै अध्याय छैन</string>
|
||||||
|
<string name="captcha_required">क्याप्चा आवश्यक छ</string>
|
||||||
|
<string name="sign_in">साइन इन गर्नुहोस्</string>
|
||||||
|
<string name="reverse">उल्टो</string>
|
||||||
|
<string name="read_more">थप पढ्नुहोस्</string>
|
||||||
|
<string name="chapter_is_missing">अध्याय हराइरहेको छ</string>
|
||||||
|
<string name="genres">विधाहरू</string>
|
||||||
|
<string name="suggestions_summary">तपाईको प्राथमिकतामा आधारित मंगा सुझाव दिनुहोस्</string>
|
||||||
|
<string name="onboard_text">तपाईले मङ्गा पढ्न चाहनुहुने भाषाहरू चयन गर्नुहोस्। तपाईं यसलाई पछि सेटिङहरूमा परिवर्तन गर्न सक्नुहुन्छ।</string>
|
||||||
|
<string name="various_languages">विभिन्न भाषाहरू</string>
|
||||||
|
<string name="search_chapters">अध्याय खोज्नुहोस्</string>
|
||||||
|
<string name="appearance">उपस्थिति</string>
|
||||||
|
<string name="history_shortcuts">हालैको मंगा सर्टकट देखाउनुहोस्</string>
|
||||||
|
<string name="reader_control_ltr_summary">दायाँ किनारामा ट्याप गर्नुहोस् वा दायाँ कुञ्जी थिच्दा सधैं अर्को पृष्ठमा स्विच हुन्छ</string>
|
||||||
|
<string name="reader_control_ltr">Ergonomic पाठक नियन्त्रण</string>
|
||||||
|
<string name="manga_error_description_pattern">त्रुटि विवरण:<br> <tt>%1$s</tt><br><br> 1. <a href=%2$s>वेब ब्राउजरमा मंगा खोल्ने</a> प्रयास गर्नुहोस् कि यो यसको स्रोतमा उपलब्ध छ<br> 2. निश्चित गर्नुहोस् कि तपाइँ <a href=kotatsu://about>Kotatsu को नवीनतम संस्करण</a> प्रयोग गर्दै हुनुहुन्छ<br> 3. यदि यो उपलब्ध छ भने, विकासकर्ताहरूलाई त्रुटि रिपोर्ट पठाउनुहोस्।</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
<string name="grid_size">Wielkość siatki</string>
|
<string name="grid_size">Wielkość siatki</string>
|
||||||
<string name="search_on_s">Szukaj na %s</string>
|
<string name="search_on_s">Szukaj na %s</string>
|
||||||
<string name="delete_manga">Usuń mangę</string>
|
<string name="delete_manga">Usuń mangę</string>
|
||||||
<string name="_continue">Dalej</string>
|
<string name="_continue">Kontynuuj</string>
|
||||||
<string name="error">Błąd</string>
|
<string name="error">Błąd</string>
|
||||||
<string name="search_history_cleared">Wyczyszczone</string>
|
<string name="search_history_cleared">Wyczyszczone</string>
|
||||||
<string name="internal_storage">Pamięć wewnętrzna</string>
|
<string name="internal_storage">Pamięć wewnętrzna</string>
|
||||||
@@ -431,4 +431,16 @@
|
|||||||
<string name="reader_info_bar_summary">Pokaż aktualny czas i postęp czytania u góry ekranu</string>
|
<string name="reader_info_bar_summary">Pokaż aktualny czas i postęp czytania u góry ekranu</string>
|
||||||
<string name="details_button_tip">Naciśnij i przytrzymaj przycisk Czytaj, aby zobaczyć więcej opcji</string>
|
<string name="details_button_tip">Naciśnij i przytrzymaj przycisk Czytaj, aby zobaczyć więcej opcji</string>
|
||||||
<string name="manga_branch_title_template">%1$s (%2$s)</string>
|
<string name="manga_branch_title_template">%1$s (%2$s)</string>
|
||||||
|
<string name="clear_source_cookies_summary">Wyczyść pliki cookie tylko dla określonej domeny. W większości przypadków unieważni autoryzację</string>
|
||||||
|
<string name="download_option_all_chapters">Wszystkie rozdziały z tłumaczeniem %s</string>
|
||||||
|
<string name="download_option_first_n_chapters">Pierwszy %s</string>
|
||||||
|
<string name="download_option_all_unread">Wszystkie nieprzeczytane rozdziały</string>
|
||||||
|
<string name="download_option_all_unread_b">Wszystkie nieprzeczytane rozdziały (%s)</string>
|
||||||
|
<string name="download_option_whole_manga">Cała manga</string>
|
||||||
|
<string name="download_option_next_unread_n_chapters">Następna nieprzeczytana %s</string>
|
||||||
|
<string name="download_option_manual_selection">Wybierz rozdziały ręcznie</string>
|
||||||
|
<string name="custom_directory">Katalog niestandardowy</string>
|
||||||
|
<string name="pick_custom_directory">Wybierz katalog niestandardowy</string>
|
||||||
|
<string name="no_access_to_file">Nie masz dostępu do tego pliku lub katalogu</string>
|
||||||
|
<string name="local_manga_directories">Lokalne katalogi mangi</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -379,4 +379,68 @@
|
|||||||
<string name="user_agent">Cabeçalho UserAgent</string>
|
<string name="user_agent">Cabeçalho UserAgent</string>
|
||||||
<string name="reader_slider">Mostrar controle deslizante de troca de página</string>
|
<string name="reader_slider">Mostrar controle deslizante de troca de página</string>
|
||||||
<string name="webtoon_zoom">Zoom Webtoon</string>
|
<string name="webtoon_zoom">Zoom Webtoon</string>
|
||||||
|
<string name="pages_animation_summary">Animar troca de página</string>
|
||||||
|
<string name="show_pages_numbers_summary">Mostrar números de página no canto inferior</string>
|
||||||
|
<string name="find_similar">Encontrar semelhante</string>
|
||||||
|
<string name="resume">Retomar</string>
|
||||||
|
<string name="paused">Pausado</string>
|
||||||
|
<string name="remove_completed">Remoção concluída</string>
|
||||||
|
<string name="cancel_all">Cancelar tudo</string>
|
||||||
|
<string name="suggestions_notifications_summary">Às vezes, mostra notificações com mangás sugeridos</string>
|
||||||
|
<string name="more">Mais</string>
|
||||||
|
<string name="enable">Permitir</string>
|
||||||
|
<string name="no_thanks">Não, obrigado</string>
|
||||||
|
<string name="remove_completed_downloads_confirm">Seu histórico de downloads será excluído permanentemente</string>
|
||||||
|
<string name="text_downloads_list_holder">Você não tem nenhum download</string>
|
||||||
|
<string name="downloads_paused">Os downloads foram pausados</string>
|
||||||
|
<string name="downloads_removed">Os downloads foram removidos</string>
|
||||||
|
<string name="downloads_cancelled">Os downloads foram cancelados</string>
|
||||||
|
<string name="translations">Traduções</string>
|
||||||
|
<string name="clear_network_cache">Limpar cache de rede</string>
|
||||||
|
<string name="type">Tipo</string>
|
||||||
|
<string name="invalid_value_message">Valor inválido</string>
|
||||||
|
<string name="downloaded">Baixado</string>
|
||||||
|
<string name="images_proxy_title">Proxy de otimização de imagens</string>
|
||||||
|
<string name="images_procy_description">Use o serviço wsrv.nl para reduzir o uso de tráfego e acelerar o carregamento de imagens, se possível</string>
|
||||||
|
<string name="invert_colors">Cores invertidas</string>
|
||||||
|
<string name="username">Nome de usuário</string>
|
||||||
|
<string name="password">Senha</string>
|
||||||
|
<string name="invalid_port_number">Número de porta inválido</string>
|
||||||
|
<string name="network">Rede</string>
|
||||||
|
<string name="data_and_privacy">Dados e privacidade</string>
|
||||||
|
<string name="restore_summary">Restaurar backup criado anteriormente</string>
|
||||||
|
<string name="webtoon_zoom_summary">Permitir zoom no gesto no modo webtoon</string>
|
||||||
|
<string name="reader_info_bar_summary">Mostrar a hora atual e o progresso da leitura na parte superior da tela</string>
|
||||||
|
<string name="details_button_tip">Pressione e segure o botão Ler para ver mais opções</string>
|
||||||
|
<string name="clear_source_cookies_summary">Limpar cookies apenas para o domínio especificado. Na maioria dos casos invalidará a autorização</string>
|
||||||
|
<string name="manga_branch_title_template">%1$s (%2$s)</string>
|
||||||
|
<string name="download_option_all_chapters">Todos os capítulos com tradução %s</string>
|
||||||
|
<string name="download_option_whole_manga">O mangá inteiro</string>
|
||||||
|
<string name="download_option_first_n_chapters">Primeiro %s</string>
|
||||||
|
<string name="download_option_next_unread_n_chapters">Próxima não lida %s</string>
|
||||||
|
<string name="download_option_all_unread">Todos os capítulos não lidos</string>
|
||||||
|
<string name="download_option_all_unread_b">Todos os capítulos não lidos (%s)</string>
|
||||||
|
<string name="download_option_manual_selection">Selecionar capítulos manualmente</string>
|
||||||
|
<string name="custom_directory">Diretório personalizado</string>
|
||||||
|
<string name="authorization_optional">Autorização (opcional)</string>
|
||||||
|
<string name="proxy">Proxy</string>
|
||||||
|
<string name="sync_settings">Configurações de sincronização</string>
|
||||||
|
<string name="server_address">Endereço do servidor</string>
|
||||||
|
<string name="sync_host_description">Você pode usar um servidor de sincronização auto-hospedado ou um padrão. Não mude isso se não tiver certeza do que está fazendo.</string>
|
||||||
|
<string name="ignore_ssl_errors">Ignorar erros de SSL</string>
|
||||||
|
<string name="mirror_switching">Escolher espelho automaticamente</string>
|
||||||
|
<string name="mirror_switching_summary">Alternar domínios automaticamente para fontes remotas em caso de erros, se espelhos estiverem disponíveis</string>
|
||||||
|
<string name="pause">Pausar</string>
|
||||||
|
<string name="suggestions_enable_prompt">Quer receber sugestões personalizadas de mangás\?</string>
|
||||||
|
<string name="suggestion_manga">Sugestão: %s</string>
|
||||||
|
<string name="downloads_resumed">Os downloads foram retomados</string>
|
||||||
|
<string name="downloads_wifi_only_summary">Interrompa o download ao mudar para uma rede móvel</string>
|
||||||
|
<string name="cancel_all_downloads_confirm">Todos os downloads ativos serão cancelados, dados parcialmente baixados serão perdidos</string>
|
||||||
|
<string name="downloads_wifi_only">Baixe apenas via Wi-Fi</string>
|
||||||
|
<string name="web_view_unavailable">WebView não disponível: verifique se o provedor WebView está instalado</string>
|
||||||
|
<string name="port">Porta</string>
|
||||||
|
<string name="address">Endereço</string>
|
||||||
|
<string name="pick_custom_directory">Escolha um diretório personalizado</string>
|
||||||
|
<string name="no_access_to_file">Você não tem acesso a esse arquivo ou diretório</string>
|
||||||
|
<string name="local_manga_directories">Diretórios locais de mangá</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<string name="nothing_found">Không tìm thấy kết quả</string>
|
<string name="nothing_found">Không tìm thấy kết quả</string>
|
||||||
<string name="history_is_empty">Chưa có lịch sử</string>
|
<string name="history_is_empty">Chưa có lịch sử</string>
|
||||||
<string name="you_have_not_favourites_yet">Chưa có truyện yêu thích nào</string>
|
<string name="you_have_not_favourites_yet">Chưa có truyện yêu thích nào</string>
|
||||||
<string name="add_to_favourites">Yêu thích</string>
|
<string name="add_to_favourites">Thêm vào yêu thích</string>
|
||||||
<string name="add">Thêm</string>
|
<string name="add">Thêm</string>
|
||||||
<string name="create_shortcut">Tạo lối tắt…</string>
|
<string name="create_shortcut">Tạo lối tắt…</string>
|
||||||
<string name="share_s">Chia sẻ %s</string>
|
<string name="share_s">Chia sẻ %s</string>
|
||||||
@@ -362,7 +362,7 @@
|
|||||||
<string name="enable">Kích hoạt</string>
|
<string name="enable">Kích hoạt</string>
|
||||||
<string name="cancel_all_downloads_confirm">Tất cả tải xuống đang hoạt động sẽ bị huỷ bỏ, dữ liệu không hoàn toàn tải xuống sẽ bị mất</string>
|
<string name="cancel_all_downloads_confirm">Tất cả tải xuống đang hoạt động sẽ bị huỷ bỏ, dữ liệu không hoàn toàn tải xuống sẽ bị mất</string>
|
||||||
<string name="downloads_paused">Tải xuống đã bị tạm dừng</string>
|
<string name="downloads_paused">Tải xuống đã bị tạm dừng</string>
|
||||||
<string name="text_downloads_list_holder">Bạn chưa tải xuống manga nào</string>
|
<string name="text_downloads_list_holder">Bạn chưa tải xuống bộ truyện nào</string>
|
||||||
<string name="downloads_cancelled">Tải xuống đã bị huỷ</string>
|
<string name="downloads_cancelled">Tải xuống đã bị huỷ</string>
|
||||||
<string name="translations">Dịch thuật</string>
|
<string name="translations">Dịch thuật</string>
|
||||||
<string name="suggestions_enable_prompt">Bạn có muốn nhận đề xuất manga đã được cá nhân hoá không\?</string>
|
<string name="suggestions_enable_prompt">Bạn có muốn nhận đề xuất manga đã được cá nhân hoá không\?</string>
|
||||||
@@ -378,7 +378,7 @@
|
|||||||
<string name="show_pages_numbers_summary">Hiển thị số trang ở góc bên dưới</string>
|
<string name="show_pages_numbers_summary">Hiển thị số trang ở góc bên dưới</string>
|
||||||
<string name="clear_source_cookies_summary">Xoá cookies chỉ cho tên miền này. Trong hầu hết mọi trường hợp sẽ làm mất hiệu lực uỷ quyền</string>
|
<string name="clear_source_cookies_summary">Xoá cookies chỉ cho tên miền này. Trong hầu hết mọi trường hợp sẽ làm mất hiệu lực uỷ quyền</string>
|
||||||
<string name="ignore_ssl_errors">Bỏ qua lỗi SSL</string>
|
<string name="ignore_ssl_errors">Bỏ qua lỗi SSL</string>
|
||||||
<string name="sources_reorder_tip">Chạm và giữ các nguồn truyện để sắp xếp</string>
|
<string name="sources_reorder_tip">Chạm và giữ các nguồn truyện để sắp xếp chúng</string>
|
||||||
<string name="settings_apply_restart_required">Vui lòng khởi động lại ứng dụng để áp dụng những thay đổi trên</string>
|
<string name="settings_apply_restart_required">Vui lòng khởi động lại ứng dụng để áp dụng những thay đổi trên</string>
|
||||||
<string name="server_address">Địa chỉ máy chủ</string>
|
<string name="server_address">Địa chỉ máy chủ</string>
|
||||||
<string name="comics_archive_import_description">Bạn có thể chọn một hoặc nhiều file .cbz hoặc .zip, mỗi file sẽ được nhận dạng như một manga riêng biệt</string>
|
<string name="comics_archive_import_description">Bạn có thể chọn một hoặc nhiều file .cbz hoặc .zip, mỗi file sẽ được nhận dạng như một manga riêng biệt</string>
|
||||||
@@ -393,11 +393,38 @@
|
|||||||
<string name="download_option_all_unread">Tất cả các chương chưa đọc</string>
|
<string name="download_option_all_unread">Tất cả các chương chưa đọc</string>
|
||||||
<string name="resume">Tiếp tục</string>
|
<string name="resume">Tiếp tục</string>
|
||||||
<string name="clear_new_chapters_counters">Xoá thông tin về chương mới</string>
|
<string name="clear_new_chapters_counters">Xoá thông tin về chương mới</string>
|
||||||
<string name="source_disabled">Nguồn truyện đã được vô hiệu hoá</string>
|
<string name="source_disabled">Đã vô hiệu hoá nguồn truyện</string>
|
||||||
<string name="sync_host_description">Bạn có thể dùng một máy chủ đồng bộ hoá của bạn (self-hosted) hoặc máy chủ đồng bộ hoá mặc định. Đừng thay đổi địa chủ máy chủ nếu bạn không chắc chắn mình đang làm gì.</string>
|
<string name="sync_host_description">Bạn có thể dùng một máy chủ đồng bộ hoá của bạn (self-hosted) hoặc máy chủ đồng bộ hoá mặc định. Đừng thay đổi địa chủ máy chủ nếu bạn không chắc chắn mình đang làm gì.</string>
|
||||||
<string name="downloads_resumed">Tải xuống đã được tiếp tục</string>
|
<string name="downloads_resumed">Tải xuống đã được tiếp tục</string>
|
||||||
<string name="downloads_removed">Tải xuống đã bị xoá bỏ</string>
|
<string name="downloads_removed">Tải xuống đã bị xoá bỏ</string>
|
||||||
<string name="more">Thêm nữa</string>
|
<string name="more">Thêm nữa</string>
|
||||||
<string name="no_thanks">Không, cảm ơn</string>
|
<string name="no_thanks">Không, cảm ơn</string>
|
||||||
<string name="download_option_all_chapters">Số chương đã được dịch: %s</string>
|
<string name="download_option_all_chapters">Số chương đã được dịch %s</string>
|
||||||
|
<string name="auth_not_supported_by">Đăng nhập trên %s không được hỗ trợ</string>
|
||||||
|
<string name="logged_in_as">Đăng nhập với tư cách %s</string>
|
||||||
|
<string name="removal_completed">Xoá hoàn thành</string>
|
||||||
|
<string name="download_slowdown">Làm chậm tải xuống</string>
|
||||||
|
<string name="local_manga_processing">Xử lý các truyện được lưu</string>
|
||||||
|
<string name="text_delete_local_manga_batch">Xoá vĩnh viễn những thứ được chọn khỏi thiết bị\?</string>
|
||||||
|
<string name="percent_string_pattern">%1$s%%</string>
|
||||||
|
<string name="disable_battery_optimization_summary">Giúp kiểm tra chương mới dưới nền dễ dàng hơn</string>
|
||||||
|
<string name="show_on_shelf">Hiển thị trên kệ sách</string>
|
||||||
|
<string name="mirror_switching">Tự động chọn máy chủ dự phòng</string>
|
||||||
|
<string name="mirror_switching_summary">Tự động chuyển tên miền sang máy chủ dự phòng (nếu có) nếu gặp lỗi trên tên miền chính</string>
|
||||||
|
<string name="paused">Đã tạm dừng</string>
|
||||||
|
<string name="manga_branch_title_template">%1$s (%2$s)</string>
|
||||||
|
<string name="images_proxy_title">Proxy tối ưu hình ảnh</string>
|
||||||
|
<string name="images_procy_description">Sử dụng dịch vụ wsrv.nl để giảm lưu lượng sử dụng và tăng tốc quá trình tải ảnh nếu có thể</string>
|
||||||
|
<string name="restore_summary">Khôi phục bản sao lưu đã được tạo trước đó</string>
|
||||||
|
<string name="reader_info_bar_summary">Hiển thị thời gian hiện tại và tiến trình đọc ở góc bên trên màn hình</string>
|
||||||
|
<string name="download_option_whole_manga">Toàn bộ truyện</string>
|
||||||
|
<string name="download_option_all_unread_b">Tất cả các chương chưa đọc (%s)</string>
|
||||||
|
<string name="no_access_to_file">Bạn không có quyền truy cập vào tập tin hoặc thư mục này</string>
|
||||||
|
<string name="local_manga_directories">Thư mục truyện cục bộ</string>
|
||||||
|
<string name="custom_directory">Thư mục tuỳ chỉnh</string>
|
||||||
|
<string name="pick_custom_directory">Chọn thư mục tuỳ chỉnh</string>
|
||||||
|
<string name="reader_info_pattern">Chương. %1$d/%2$d Trang. %3$d/%4$d</string>
|
||||||
|
<string name="memory_usage_pattern">%s - %s</string>
|
||||||
|
<string name="web_view_unavailable">WebView hiện không có sẵn, vui lòng kiểm tra trình cung cấp WebView liệu có được cài đặt</string>
|
||||||
|
<string name="manga_error_description_pattern">Chi tiết lỗi:<br><tt>%1$s</tt><br><br>1. Hãy thử mở truyện trong trình duyệt</a> để đảm bảo rằng nó có sẵn trên nguồn truyện<br>2. Hãy chắc chắn rằng bạn đang sử dụng <a href=kotatsu://about>phiên bản mới nhất của Kotatsu</a><br>3. Nếu có thể, hãy gửi một báo cáo lỗi cho nhà phát triển.</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,103 +1,446 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||||
<string name="show_notification_new_chapters_off">你将不会收到通知,但新的章节将在列表中突出显示</string>
|
<string name="show_notification_new_chapters_off">您將不會收到通知,但新的章節將在清單中被凸顯</string>
|
||||||
<string name="computing_">计算…</string>
|
<string name="computing_">計算中…</string>
|
||||||
<string name="try_again">再试一次</string>
|
<string name="try_again">重試</string>
|
||||||
<string name="history_is_empty">尚无历史记录</string>
|
<string name="history_is_empty">尚無歷史紀錄</string>
|
||||||
<string name="operation_not_supported">不支持这种操作</string>
|
<string name="operation_not_supported">不支援此操作</string>
|
||||||
<string name="text_shelf_holder_secondary">在 \"探索 \"部分找到要读的内容</string>
|
<string name="text_shelf_holder_secondary">在 «瀏覽» 頁面找到想要閱讀的漫畫</string>
|
||||||
<string name="text_local_holder_secondary">从在线来源保存或导入文件。</string>
|
<string name="text_local_holder_secondary">從線上來源儲存或者匯入檔案。</string>
|
||||||
<string name="text_history_holder_primary">你所读的内容将在这里显示</string>
|
<string name="text_history_holder_primary">您所閱讀的將被顯示在此</string>
|
||||||
<string name="text_history_holder_secondary">在侧面菜单中找到要读的内容。</string>
|
<string name="text_history_holder_secondary">在側邊選單找到想要閱讀的內容。</string>
|
||||||
<string name="text_shelf_holder_primary">你的漫画将显示在这里</string>
|
<string name="text_shelf_holder_primary">您的漫畫將被顯示在此</string>
|
||||||
<string name="text_empty_holder_primary">这里有点空…</string>
|
<string name="text_empty_holder_primary">這裡有點空…</string>
|
||||||
<string name="feed_will_update_soon">饲料更新将很快开始</string>
|
<string name="feed_will_update_soon">訂閱更新即將開始</string>
|
||||||
<string name="reader_mode_hint">所选择的配置将因这部漫画而被记住</string>
|
<string name="reader_mode_hint">於此漫畫選擇的組態將會被記住</string>
|
||||||
<string name="data_restored_with_errors">数据被恢复了,但有错误</string>
|
<string name="data_restored_with_errors">資料已還原,但有錯誤</string>
|
||||||
<string name="black_dark_theme_summary">在AMOLED屏幕上使用更少的电力</string>
|
<string name="black_dark_theme_summary">在 AMOLED 螢幕上使用更少電量</string>
|
||||||
<string name="auth_required">登录后可查看此内容</string>
|
<string name="auth_required">登陸以檢視此內容</string>
|
||||||
<string name="text_clear_search_history_prompt">永久地删除所有最近的搜索查询?</string>
|
<string name="text_clear_search_history_prompt">永久地移除所有最近的搜尋查詢\?</string>
|
||||||
<string name="text_clear_updates_feed_prompt">永久地清除所有的更新历史?</string>
|
<string name="text_clear_updates_feed_prompt">永久地清除更新歷史資料\?</string>
|
||||||
<string name="text_clear_cookies_prompt">你将从所有来源中注销</string>
|
<string name="text_clear_cookies_prompt">您將從所有來源中登出</string>
|
||||||
<string name="exclude_nsfw_from_history">從歷史中排除NSFW漫畫</string>
|
<string name="exclude_nsfw_from_history">從歷史紀錄中排除 NSFW 漫畫</string>
|
||||||
<string name="text_suggestion_holder">开始阅读漫画,你会得到个性化的建议</string>
|
<string name="text_suggestion_holder">開始閱讀漫畫,您將得到個人化推薦</string>
|
||||||
<string name="suggestions_summary">根据你的喜好推荐漫画</string>
|
<string name="suggestions_summary">根據您的偏好推薦漫畫</string>
|
||||||
<string name="suggestions_excluded_genres_summary">指定您不希望在建议中看到的体裁</string>
|
<string name="suggestions_excluded_genres_summary">指定您不希望在推薦中看到的類型</string>
|
||||||
<string name="text_delete_local_manga_batch">从设备中永久删除选定的项目?</string>
|
<string name="text_delete_local_manga_batch">從裝置中永久地刪除選取項目\?</string>
|
||||||
<string name="filter_load_error">无法加载流派列表</string>
|
<string name="filter_load_error">無法載入流派列表</string>
|
||||||
<string name="chapters_will_removed_background">章节将在后台被删除。这可能需要一些时间</string>
|
<string name="chapters_will_removed_background">章節將在背景被刪除</string>
|
||||||
<string name="check_new_chapters_title">检查新的章节并通知有关情况</string>
|
<string name="check_new_chapters_title">檢查新的章節並通知關於它資訊</string>
|
||||||
<string name="download_slowdown_summary">有助于避免阻断你的IP地址</string>
|
<string name="download_slowdown_summary">有助于避免阻断您的IP地址</string>
|
||||||
<string name="email_enter_hint">输入你的电子邮件以继续</string>
|
<string name="email_enter_hint">輸入您的 email 以繼續</string>
|
||||||
<string name="new_sources_text">有了新的漫画来源</string>
|
<string name="new_sources_text">有新的漫畫來源可用</string>
|
||||||
<string name="detect_reader_mode_summary">自动检测漫画是否为网络漫画</string>
|
<string name="detect_reader_mode_summary">自動檢測是否為 webtoon 漫畫</string>
|
||||||
<string name="show_reading_indicators_summary">在历史和收藏夹中显示阅读百分比</string>
|
<string name="show_reading_indicators_summary">在歷史紀錄與最愛中顯示閱讀百分比</string>
|
||||||
<string name="confirm_exit">再次按 \"返回 \"键退出</string>
|
<string name="confirm_exit">再點擊一次返回鍵以退出</string>
|
||||||
<string name="local_storage">本地存储</string>
|
<string name="local_storage">本機儲存區</string>
|
||||||
<string name="reader_control_ltr_summary">轻敲右边缘或按右键总是切换到下一页</string>
|
<string name="reader_control_ltr_summary">輕觸右邊緣或按右鍵總是切換到下一頁</string>
|
||||||
<string name="text_unsaved_changes_prompt">你有未保存的修改,你想保存还是丢弃它们?</string>
|
<string name="text_unsaved_changes_prompt">儲存或放棄未儲存的變更?</string>
|
||||||
<string name="import_completed_hint">您可以從儲存中刪除原始檔案以節省空間</string>
|
<string name="import_completed_hint">您可以從儲存區中刪除原始檔案以節省空間</string>
|
||||||
<string name="favourites">最爱</string>
|
<string name="favourites">最愛</string>
|
||||||
<string name="chapters">章节</string>
|
<string name="chapters">章節</string>
|
||||||
<string name="list">列表</string>
|
<string name="list">清單</string>
|
||||||
<string name="grid">栅格</string>
|
<string name="grid">網格</string>
|
||||||
<string name="settings">设置</string>
|
<string name="settings">設定</string>
|
||||||
<string name="nothing_found">没有发现</string>
|
<string name="nothing_found">沒有發現</string>
|
||||||
<string name="onboard_text">选择你想看的漫画的语言。你可以在以后的设置中改变它。</string>
|
<string name="onboard_text">選擇您想閱讀的漫畫的語言。您可以之後在設定中變更。</string>
|
||||||
<string name="clear_cookies_summary">可以在出现一些问题时提供帮助。所有授权将被视为无效</string>
|
<string name="clear_cookies_summary">可以在出現一些問題時提供幫助。 所有授權將被視為無效</string>
|
||||||
<string name="history">历史</string>
|
<string name="history">歷史紀錄</string>
|
||||||
<string name="error_occurred">发生了一个错误</string>
|
<string name="error_occurred">發生錯誤</string>
|
||||||
<string name="network_error">无法连接到互联网</string>
|
<string name="network_error">網路錯誤</string>
|
||||||
<string name="details">详情</string>
|
<string name="details">詳細資料</string>
|
||||||
<string name="chapter_d_of_d">第%1$d 。%2$d</string>
|
<string name="chapter_d_of_d">%1$d/%2$d 章節</string>
|
||||||
<string name="detailed_list">详细列表</string>
|
<string name="detailed_list">詳細清單</string>
|
||||||
<string name="list_mode">列表模式</string>
|
<string name="list_mode">清單模式</string>
|
||||||
<string name="remote_sources">远程资源</string>
|
<string name="remote_sources">漫畫來源</string>
|
||||||
<string name="loading_">正在加载…</string>
|
<string name="loading_">載入中…</string>
|
||||||
<string name="close">关闭</string>
|
<string name="close">關閉</string>
|
||||||
<string name="clear_history">清除历史</string>
|
<string name="clear_history">清除歷史紀錄</string>
|
||||||
<string name="suggestions_info">所有的数据都在这个设备上进行本地分析。您的个人数据不会被转移到任何服务机构。</string>
|
<string name="suggestions_info">所有的資料都在此裝置上進本機分析,並不會傳送至任何其他地方。</string>
|
||||||
<string name="exclude_nsfw_from_history_summary">标记为NSFW的漫画将永远不会被添加到历史中,你的进度也不会被保存</string>
|
<string name="exclude_nsfw_from_history_summary">標記為 NSFW 的漫畫將永遠不會被加入到歷史資料中,您的進度也不會被儲存</string>
|
||||||
<string name="backup_information">你可以创建你的历史和收藏的备份并恢复它</string>
|
<string name="backup_information">您可以建立您的歷史紀錄與最愛的備份,並還原它</string>
|
||||||
<string name="crash_text">出了点问题。请向开发人员提交一份错误报告,以帮助我们修复它。</string>
|
<string name="crash_text">發生了一些問題。請向開發人員提交一個錯誤告告,以幫助我們修復它。</string>
|
||||||
<string name="color_correction_hint">所选择的颜色设置将被铭记在这部漫画中</string>
|
<string name="color_correction_hint">所選的色彩設定將被銘記在這部漫畫中</string>
|
||||||
<string name="text_file_not_supported">要么选择ZIP或CBZ文件。</string>
|
<string name="text_file_not_supported">選擇 ZIP 或 CBZ 檔案。</string>
|
||||||
<string name="no_bookmarks_summary">你可以在阅读漫画时创建书签</string>
|
<string name="no_bookmarks_summary">您可以在閱讀漫畫時建立書籤</string>
|
||||||
<string name="show_notification_new_chapters_on">你会收到你正在阅读的漫画的更新通知</string>
|
<string name="show_notification_new_chapters_on">您將會收到您正在閱讀的漫畫的更新通知</string>
|
||||||
<string name="tracker_warning">一些设备有不同的系统行为,这可能会破坏后台任务。</string>
|
<string name="tracker_warning">一些裝置有不同的系統行為,這可能會破壞背景任務。</string>
|
||||||
<string name="protect_application_subtitle">输入密码以启动应用程序</string>
|
<string name="protect_application_subtitle">輸入密碼以啟動應用程式</string>
|
||||||
<string name="protect_application_summary">在启动Kotatsu时要求输入密码</string>
|
<string name="protect_application_summary">在啟動 Kotatsu 時要求密碼</string>
|
||||||
<string name="chapters_empty">这部漫画中没有章节</string>
|
<string name="chapters_empty">此漫畫沒有章節</string>
|
||||||
<string name="text_feed_holder">你正在阅读的新章节显示在这里</string>
|
<string name="text_feed_holder">您想要閱讀的漫畫的新的章節會顯示在此</string>
|
||||||
<string name="history_shortcuts_summary">通过长按应用程序图标来提供最近的漫画</string>
|
<string name="history_shortcuts_summary">通過長案應用程式圖示來提供最近的漫畫</string>
|
||||||
<string name="large_manga_save_confirm">这部漫画有%s 。全部保存?</string>
|
<string name="large_manga_save_confirm">此漫畫有 %s。 全部儲存\?</string>
|
||||||
<string name="app_update_available">新版本的应用程序已经推出</string>
|
<string name="app_update_available">已有可用的新版本應用程式</string>
|
||||||
<string name="password_length_hint">密码必须是4个字符或以上</string>
|
<string name="password_length_hint">密碼必須是 4 個字元以上</string>
|
||||||
<string name="auth_not_supported_by">不支持在%s 上登录</string>
|
<string name="auth_not_supported_by">不支援在 %s 上登錄</string>
|
||||||
<string name="_s_deleted_from_local_storage">\"%s\" 从本地存储中删除</string>
|
<string name="_s_deleted_from_local_storage">\"%s\" 已從本機儲存區中刪除</string>
|
||||||
<string name="exit_confirmation_summary">按两次 \"返回 \"键,退出应用程序</string>
|
<string name="exit_confirmation_summary">點擊兩次返回鍵以退出應用程式</string>
|
||||||
<string name="no_manga_sources_text">启用漫画来源,在线阅读漫画</string>
|
<string name="no_manga_sources_text">啟用漫畫來源以閱讀線上漫畫</string>
|
||||||
<string name="text_clear_history_prompt">永久清除所有阅读历史?</string>
|
<string name="text_clear_history_prompt">永久清除所有閱讀歷史紀錄\?</string>
|
||||||
<string name="text_delete_local_manga">从设备中永久删除 \"%s\"?</string>
|
<string name="text_delete_local_manga">從裝置中永久刪除 \"%s\"\?</string>
|
||||||
<string name="text_search_holder_secondary">尝试重新表述查询。</string>
|
<string name="text_search_holder_secondary">嘗試重新表述查詢。</string>
|
||||||
<string name="disable_battery_optimization_summary">帮助进行背景更新检查</string>
|
<string name="disable_battery_optimization_summary">帮助进行背景更新检查</string>
|
||||||
<string name="exclude_nsfw_from_suggestions">请勿推荐NSFW漫画</string>
|
<string name="exclude_nsfw_from_suggestions">不要推薦 NSFW 漫畫</string>
|
||||||
<string name="add_new_category">新类别</string>
|
<string name="add_new_category">新分類</string>
|
||||||
<string name="read">阅读</string>
|
<string name="read">閱讀</string>
|
||||||
<string name="you_have_not_favourites_yet">暂时没有喜欢的人</string>
|
<string name="you_have_not_favourites_yet">尚無最愛</string>
|
||||||
<string name="add_to_favourites">最喜欢这个</string>
|
<string name="add_to_favourites">加入最愛</string>
|
||||||
<string name="add">添加</string>
|
<string name="add">加入</string>
|
||||||
<string name="save">存儲</string>
|
<string name="save">儲存</string>
|
||||||
<string name="share_s">分享 %s</string>
|
<string name="share_s">分享 %s</string>
|
||||||
<string name="search">搜尋</string>
|
<string name="search">搜尋</string>
|
||||||
<string name="manga_downloading_">下載中……</string>
|
<string name="manga_downloading_">下載中…</string>
|
||||||
<string name="download_complete">已下載</string>
|
<string name="download_complete">已下載</string>
|
||||||
<string name="filter">過濾器</string>
|
<string name="filter">篩選器</string>
|
||||||
<string name="theme">主題</string>
|
<string name="theme">主題</string>
|
||||||
<string name="light">淺色</string>
|
<string name="light">淺色</string>
|
||||||
<string name="clear">清除</string>
|
<string name="clear">清除</string>
|
||||||
<string name="remove">刪除</string>
|
<string name="remove">移除</string>
|
||||||
<string name="share_image">分享圖片</string>
|
<string name="share_image">分享圖片</string>
|
||||||
<string name="delete">刪除</string>
|
<string name="delete">刪除</string>
|
||||||
<string name="clear_pages_cache">清除頁面快取</string>
|
<string name="clear_pages_cache">清除頁面快取</string>
|
||||||
|
<string name="network">網路</string>
|
||||||
|
<string name="webtoon_zoom_summary">在 webtoon 模式中允許手勢縮放</string>
|
||||||
|
<string name="show_pages_numbers_summary">在底部角落顯示頁碼</string>
|
||||||
|
<string name="reader_info_bar_summary">在畫面頂部顯示目前時間與閱讀進度</string>
|
||||||
|
<string name="pages_animation_summary">翻頁動畫</string>
|
||||||
|
<string name="search_history_cleared">已清除</string>
|
||||||
|
<string name="gestures_only">僅限手勢</string>
|
||||||
|
<string name="notifications">通知</string>
|
||||||
|
<string name="download">下載</string>
|
||||||
|
<string name="notifications_settings">通知設定</string>
|
||||||
|
<string name="notification_sound">通知聲音</string>
|
||||||
|
<string name="light_indicator">LED 指示燈</string>
|
||||||
|
<string name="manga_shelf">書架</string>
|
||||||
|
<string name="new_chapters">新章節</string>
|
||||||
|
<string name="recent_manga">最近</string>
|
||||||
|
<string name="cannot_find_available_storage">沒有可用的儲存空間</string>
|
||||||
|
<string name="other_storage">其他儲存</string>
|
||||||
|
<string name="done">完成</string>
|
||||||
|
<string name="all_favourites">所有最愛</string>
|
||||||
|
<string name="favourites_category_empty">空白分類</string>
|
||||||
|
<string name="search_results">搜尋結果</string>
|
||||||
|
<string name="new_version_s">新版本: %s</string>
|
||||||
|
<string name="size_s">大小: %s</string>
|
||||||
|
<string name="updates_feed_cleared">已清除</string>
|
||||||
|
<string name="clear_updates_feed">清除更新訂閱</string>
|
||||||
|
<string name="rotate_screen">旋轉畫面</string>
|
||||||
|
<string name="update">更新</string>
|
||||||
|
<string name="track_sources">尋找更新</string>
|
||||||
|
<string name="dont_check">不要檢查</string>
|
||||||
|
<string name="enter_password">輸入密碼</string>
|
||||||
|
<string name="wrong_password">密碼錯誤</string>
|
||||||
|
<string name="protect_application">保護應用程式</string>
|
||||||
|
<string name="repeat_password">重複密碼</string>
|
||||||
|
<string name="passwords_mismatch">密碼不匹配</string>
|
||||||
|
<string name="about">關於</string>
|
||||||
|
<string name="app_version">版本 %s</string>
|
||||||
|
<string name="check_for_updates">檢查更新</string>
|
||||||
|
<string name="no_update_available">沒有可用的更新</string>
|
||||||
|
<string name="right_to_left">由右至左</string>
|
||||||
|
<string name="create_category">新分類</string>
|
||||||
|
<string name="scale_mode">縮放模式</string>
|
||||||
|
<string name="backup_restore">備份與還原</string>
|
||||||
|
<string name="create_backup">建立資料備份</string>
|
||||||
|
<string name="restore_backup">從備份中還原</string>
|
||||||
|
<string name="data_restored">已還原</string>
|
||||||
|
<string name="data_restored_success">所有資料已還原</string>
|
||||||
|
<string name="just_now">現在</string>
|
||||||
|
<string name="yesterday">昨日</string>
|
||||||
|
<string name="long_ago">很久以前</string>
|
||||||
|
<string name="group">群組</string>
|
||||||
|
<string name="today">今日</string>
|
||||||
|
<string name="silent">無聲</string>
|
||||||
|
<string name="cookies_cleared">所有 cookies 已被移除</string>
|
||||||
|
<string name="clear_feed">清除檔案</string>
|
||||||
|
<string name="check_for_new_chapters">檢查新的章節</string>
|
||||||
|
<string name="reverse">撤銷</string>
|
||||||
|
<string name="sign_in">登錄</string>
|
||||||
|
<string name="default_s">預設: %s</string>
|
||||||
|
<string name="next">下一頁</string>
|
||||||
|
<string name="confirm">確認</string>
|
||||||
|
<string name="about_app_translation_summary">翻譯此應用程式</string>
|
||||||
|
<string name="screenshots_policy">螢幕擷圖</string>
|
||||||
|
<string name="screenshots_allow">允許</string>
|
||||||
|
<string name="screenshots_block_nsfw">禁止 NSFW</string>
|
||||||
|
<string name="screenshots_block_all">始終禁止</string>
|
||||||
|
<string name="suggestions">推薦</string>
|
||||||
|
<string name="suggestions_enable">啟用推薦</string>
|
||||||
|
<string name="enabled">啟用</string>
|
||||||
|
<string name="always">總是</string>
|
||||||
|
<string name="preload_pages">預載頁面</string>
|
||||||
|
<string name="logged_in_as">以 %s 登入</string>
|
||||||
|
<string name="nsfw">18+</string>
|
||||||
|
<string name="various_languages">各種語言</string>
|
||||||
|
<string name="search_chapters">尋找章節</string>
|
||||||
|
<string name="percent_string_pattern">%1$s%%</string>
|
||||||
|
<string name="suggestions_updating">推薦更新</string>
|
||||||
|
<string name="suggestions_excluded_genres">排除流派</string>
|
||||||
|
<string name="download_slowdown">下載減緩</string>
|
||||||
|
<string name="back">返回</string>
|
||||||
|
<string name="sync">同步</string>
|
||||||
|
<string name="notifications_enable">啟用通知</string>
|
||||||
|
<string name="name">名稱</string>
|
||||||
|
<string name="edit">編輯</string>
|
||||||
|
<string name="edit_category">編輯分類</string>
|
||||||
|
<string name="tracking">追蹤</string>
|
||||||
|
<string name="empty_favourite_categories">沒有最愛分類</string>
|
||||||
|
<string name="logout">登出</string>
|
||||||
|
<string name="bookmark_remove">移除書籤</string>
|
||||||
|
<string name="bookmarks">書籤</string>
|
||||||
|
<string name="use_fingerprint">使用指紋,如果可用</string>
|
||||||
|
<string name="appwidget_shelf_description">您最愛的漫畫</string>
|
||||||
|
<string name="appwidget_recent_description">您最近閱讀的漫畫</string>
|
||||||
|
<string name="data_deletion">資料刪除</string>
|
||||||
|
<string name="manage">管理</string>
|
||||||
|
<string name="clear_new_chapters_counters">也清除關於新章節的資訊</string>
|
||||||
|
<string name="compact">緊湊</string>
|
||||||
|
<string name="source_disabled">來源已禁用</string>
|
||||||
|
<string name="prefetch_content">內容預先載入</string>
|
||||||
|
<string name="mark_as_current">標記目前</string>
|
||||||
|
<string name="enable_logging">啟動登入</string>
|
||||||
|
<string name="theme_name_sakura">Sakura</string>
|
||||||
|
<string name="got_it">知道了</string>
|
||||||
|
<string name="settings_apply_restart_required">請重新啟動此應用程式以應用這些變更</string>
|
||||||
|
<string name="sources_reorder_tip">點擊並按住一個項目以重新排序它們</string>
|
||||||
|
<string name="speed">速度</string>
|
||||||
|
<string name="show_on_shelf">在書架上顯示</string>
|
||||||
|
<string name="comics_archive_import_description">您可以選擇一個或多個 .cbz 或 .zip 檔案,每個檔案將被認定為個別的漫畫。</string>
|
||||||
|
<string name="folder_with_images_import_description">您可以選擇一個圖片資料夾或壓縮檔。每個壓縮檔 (或子目錄) 將被認定為個別的章節。</string>
|
||||||
|
<string name="find_similar">尋找相似</string>
|
||||||
|
<string name="server_address">伺服器位址</string>
|
||||||
|
<string name="ignore_ssl_errors">忽略 SSL 錯誤</string>
|
||||||
|
<string name="mirror_switching">自動選擇鏡像</string>
|
||||||
|
<string name="resume">還原</string>
|
||||||
|
<string name="paused">已暫停</string>
|
||||||
|
<string name="remove_completed">移除已完成</string>
|
||||||
|
<string name="cancel_all">取消全部</string>
|
||||||
|
<string name="suggestion_manga">推薦: %s</string>
|
||||||
|
<string name="enable">啟用</string>
|
||||||
|
<string name="proxy">Proxy</string>
|
||||||
|
<string name="invalid_value_message">無效的值</string>
|
||||||
|
<string name="downloaded">已下載</string>
|
||||||
|
<string name="manga_branch_title_template">%1$s (%2$s)</string>
|
||||||
|
<string name="images_proxy_title">圖片最佳化代理</string>
|
||||||
|
<string name="username">使用者名稱</string>
|
||||||
|
<string name="password">密碼</string>
|
||||||
|
<string name="invalid_port_number">無效的連接埠編號</string>
|
||||||
|
<string name="share_logs">分享日誌</string>
|
||||||
|
<string name="clear_source_cookies_summary">僅清除指定網域的 cookie,大多數情況下會使授權會失效</string>
|
||||||
|
<string name="share">分享</string>
|
||||||
|
<string name="create_shortcut">建立捷徑…</string>
|
||||||
|
<string name="search_manga">搜尋漫畫</string>
|
||||||
|
<string name="processing_">處理中…</string>
|
||||||
|
<string name="newest">最新</string>
|
||||||
|
<string name="by_rating">評分</string>
|
||||||
|
<string name="sort_order">排列順序</string>
|
||||||
|
<string name="dark">深色</string>
|
||||||
|
<string name="automatic">跟隨系統</string>
|
||||||
|
<string name="pages">頁數</string>
|
||||||
|
<string name="_import">匯入</string>
|
||||||
|
<string name="no_description">沒有描述</string>
|
||||||
|
<string name="text_file_sizes">B|kB|MB|GB|TB</string>
|
||||||
|
<string name="standard">標準</string>
|
||||||
|
<string name="webtoon">Webtoon</string>
|
||||||
|
<string name="search_on_s">在 %s 上搜尋</string>
|
||||||
|
<string name="delete_manga">刪除漫畫</string>
|
||||||
|
<string name="switch_pages">切換頁面</string>
|
||||||
|
<string name="taps_on_edges">邊緣點擊</string>
|
||||||
|
<string name="volume_buttons">音量按鍵</string>
|
||||||
|
<string name="_continue">繼續</string>
|
||||||
|
<string name="error">錯誤</string>
|
||||||
|
<string name="clear_thumbs_cache">清除縮圖快取</string>
|
||||||
|
<string name="clear_search_history">清除搜尋歷史紀錄</string>
|
||||||
|
<string name="internal_storage">內部儲存區</string>
|
||||||
|
<string name="external_storage">外部儲存區</string>
|
||||||
|
<string name="domain">範圍</string>
|
||||||
|
<string name="open_in_browser">在網頁瀏覽器中開啟</string>
|
||||||
|
<string name="save_manga">儲存</string>
|
||||||
|
<string name="favourites_categories">最愛分類</string>
|
||||||
|
<string name="remove_category">移除</string>
|
||||||
|
<string name="text_local_holder_primary">首先儲存內容</string>
|
||||||
|
<string name="manga_save_location">下載資料夾</string>
|
||||||
|
<string name="not_available">不可用</string>
|
||||||
|
<string name="zoom_mode_fit_center">適應中心</string>
|
||||||
|
<string name="zoom_mode_fit_height">適應高度</string>
|
||||||
|
<string name="black_dark_theme">黑色</string>
|
||||||
|
<string name="preparing_">準備…</string>
|
||||||
|
<string name="file_not_found">沒有找到檔案</string>
|
||||||
|
<string name="tap_to_try_again">輕觸以重試</string>
|
||||||
|
<string name="captcha_solve">解決</string>
|
||||||
|
<string name="clear_cookies">清除 cookies</string>
|
||||||
|
<string name="chapter_is_missing">此章節已遺失</string>
|
||||||
|
<string name="about_app_translation">翻譯</string>
|
||||||
|
<string name="auth_complete">授權</string>
|
||||||
|
<string name="system_default">預設</string>
|
||||||
|
<string name="enabled_sources">使用的來源</string>
|
||||||
|
<string name="available_sources">可用的來源</string>
|
||||||
|
<string name="disabled">禁用</string>
|
||||||
|
<string name="reset_filter">重置篩選器</string>
|
||||||
|
<string name="never">永不</string>
|
||||||
|
<string name="only_using_wifi">僅在 Wi-Fi</string>
|
||||||
|
<string name="appearance">外觀</string>
|
||||||
|
<string name="removal_completed">移除已完成</string>
|
||||||
|
<string name="sync_title">同步您的資料</string>
|
||||||
|
<string name="hide">隱藏</string>
|
||||||
|
<string name="bookmark_add">新增書籤</string>
|
||||||
|
<string name="bookmark_removed">書籤已移除</string>
|
||||||
|
<string name="bookmark_added">書籤已新增</string>
|
||||||
|
<string name="show_reading_indicators">顯示閱讀進度指示</string>
|
||||||
|
<string name="last_2_hours">最近 2 小時</string>
|
||||||
|
<string name="history_cleared">歷史紀錄已清除</string>
|
||||||
|
<string name="no_bookmarks_yet">還沒有書籤</string>
|
||||||
|
<string name="bookmarks_removed">書籤已移除</string>
|
||||||
|
<string name="no_manga_sources">沒有漫畫來源</string>
|
||||||
|
<string name="random">隨機</string>
|
||||||
|
<string name="categories_delete_confirm">您是否確定要刪除選取的最愛分類\?
|
||||||
|
\n所有的漫畫將會遺失且無法復原。</string>
|
||||||
|
<string name="other_cache">其他快取</string>
|
||||||
|
<string name="storage_usage">儲存區使用</string>
|
||||||
|
<string name="importing_manga">正在匯入漫畫</string>
|
||||||
|
<string name="import_completed">匯入已完成</string>
|
||||||
|
<string name="import_will_start_soon">即將開始匯入</string>
|
||||||
|
<string name="feed">訂閱</string>
|
||||||
|
<string name="history_shortcuts">顯示最近閱讀漫畫的捷徑</string>
|
||||||
|
<string name="contrast">對比度</string>
|
||||||
|
<string name="reset">重置</string>
|
||||||
|
<string name="discard">放棄</string>
|
||||||
|
<string name="error_no_space_left">裝置上沒有可用空間</string>
|
||||||
|
<string name="webtoon_zoom">Webtoon 縮放</string>
|
||||||
|
<string name="different_languages">不同的語言</string>
|
||||||
|
<string name="network_unavailable">網路不可用</string>
|
||||||
|
<string name="network_unavailable_hint">開啟 Wi-Fi 或行動網路以閱讀線上漫畫</string>
|
||||||
|
<string name="server_error">伺服器端錯誤 (%1$d)。請稍後重試</string>
|
||||||
|
<string name="theme_name_rikka">Rikka</string>
|
||||||
|
<string name="theme_name_mamimi">Mamimi</string>
|
||||||
|
<string name="theme_name_kanade">Kanade</string>
|
||||||
|
<string name="restore_backup_description">匯入先前建立的使用者資料備份</string>
|
||||||
|
<string name="sync_auth_hint">您可登錄已有帳號或建立一個新帳號</string>
|
||||||
|
<string name="mirror_switching_summary">如果鏡像可用,在遠端來源發生錯誤時自動切換網域</string>
|
||||||
|
<string name="suggestions_notifications_summary">偶爾顯示推薦漫畫通知</string>
|
||||||
|
<string name="more">更多</string>
|
||||||
|
<string name="downloads_removed">下載已被移除</string>
|
||||||
|
<string name="downloads_cancelled">下載已被取消</string>
|
||||||
|
<string name="suggestions_enable_prompt">您想要接收個人漫畫推薦嗎\?</string>
|
||||||
|
<string name="translations">翻譯</string>
|
||||||
|
<string name="web_view_unavailable">WebView 不可用: 檢查是否已安裝 WebView</string>
|
||||||
|
<string name="type">類型</string>
|
||||||
|
<string name="address">位址</string>
|
||||||
|
<string name="data_and_privacy">資料與隱私</string>
|
||||||
|
<string name="restore_summary">還原先前建立的備份</string>
|
||||||
|
<string name="port">連接埠</string>
|
||||||
|
<string name="details_button_tip">點擊並按住閱讀按紐以檢視更多選項</string>
|
||||||
|
<string name="download_option_all_unread">所有未讀章節</string>
|
||||||
|
<string name="download_option_all_unread_b">所有未讀章節 (%s)</string>
|
||||||
|
<string name="downloads">下載</string>
|
||||||
|
<string name="save_page">儲存頁面</string>
|
||||||
|
<string name="page_saved">已儲存</string>
|
||||||
|
<string name="read_mode">閱讀模式</string>
|
||||||
|
<string name="grid_size">網格大小</string>
|
||||||
|
<string name="reader_settings">閱讀設定</string>
|
||||||
|
<string name="vibration">震動</string>
|
||||||
|
<string name="pages_animation">頁面動畫</string>
|
||||||
|
<string name="zoom_mode_fit_width">適應寬度</string>
|
||||||
|
<string name="zoom_mode_keep_start">從頭開始</string>
|
||||||
|
<string name="captcha_required">需要驗證碼</string>
|
||||||
|
<string name="welcome">歡迎</string>
|
||||||
|
<string name="backup_saved">備份已儲存</string>
|
||||||
|
<string name="read_more">閱讀更多</string>
|
||||||
|
<string name="queued">排隊</string>
|
||||||
|
<string name="show_pages_numbers">頁碼</string>
|
||||||
|
<string name="status_reading">閱讀</string>
|
||||||
|
<string name="download_started">下載已開始</string>
|
||||||
|
<string name="download_option_whole_manga">整個漫畫</string>
|
||||||
|
<string name="download_option_manual_selection">手動選擇章節</string>
|
||||||
|
<string name="language">語言</string>
|
||||||
|
<string name="invert_colors">反轉色彩</string>
|
||||||
|
<string name="images_procy_description">如果可能的話,使用 wsrv.nl 服務以減少流量使用與提升圖片載入速度</string>
|
||||||
|
<string name="disable_battery_optimization">禁用電池最佳化</string>
|
||||||
|
<string name="default_mode">預設模式</string>
|
||||||
|
<string name="detect_reader_mode">自動檢測閱讀器模式</string>
|
||||||
|
<string name="send">發送</string>
|
||||||
|
<string name="status_planned">計畫</string>
|
||||||
|
<string name="reorder">重新排序</string>
|
||||||
|
<string name="empty">空白</string>
|
||||||
|
<string name="explore">瀏覽</string>
|
||||||
|
<string name="exit_confirmation">退出確認</string>
|
||||||
|
<string name="saved_manga">儲存的漫畫</string>
|
||||||
|
<string name="pages_cache">頁面快取</string>
|
||||||
|
<string name="status_completed">完成</string>
|
||||||
|
<string name="status_on_hold">暫停</string>
|
||||||
|
<string name="status_re_reading">重新閱讀</string>
|
||||||
|
<string name="status_dropped">已放棄</string>
|
||||||
|
<string name="disable_all">全部禁用</string>
|
||||||
|
<string name="report">報告</string>
|
||||||
|
<string name="show_all">選是全部</string>
|
||||||
|
<string name="invalid_domain_message">無效的網域</string>
|
||||||
|
<string name="select_range">選擇範圍</string>
|
||||||
|
<string name="clear_all_history">清除所有歷史紀錄</string>
|
||||||
|
<string name="available">可用</string>
|
||||||
|
<string name="options">選項</string>
|
||||||
|
<string name="removed_from_favourites">從最愛中移除</string>
|
||||||
|
<string name="not_found_404">找不到內容或已刪除</string>
|
||||||
|
<string name="incognito_mode">隱身模式</string>
|
||||||
|
<string name="no_chapters">無章節</string>
|
||||||
|
<string name="automatic_scroll">自動捲動</string>
|
||||||
|
<string name="reader_info_bar">在閱讀器中顯示資訊列</string>
|
||||||
|
<string name="comics_archive">漫畫壓縮檔</string>
|
||||||
|
<string name="folder_with_images">圖片資料夾</string>
|
||||||
|
<string name="clear_network_cache">清除網路快取</string>
|
||||||
|
<string name="custom_directory">自訂目錄</string>
|
||||||
|
<string name="pick_custom_directory">選擇自訂目錄</string>
|
||||||
|
<string name="no_access_to_file">您沒有權限存取此檔案或資料夾</string>
|
||||||
|
<string name="local_manga_directories">本機漫畫目錄</string>
|
||||||
|
<string name="authorization_optional">授權 (可選)</string>
|
||||||
|
<string name="theme_name_dynamic">動態</string>
|
||||||
|
<string name="color_theme">顏色方案</string>
|
||||||
|
<string name="theme_name_miku">Miku</string>
|
||||||
|
<string name="theme_name_asuka">Asuka</string>
|
||||||
|
<string name="theme_name_mion">Mion</string>
|
||||||
|
<string name="pause">暫停</string>
|
||||||
|
<string name="downloads_wifi_only">只通過 Wi-Fi 下載</string>
|
||||||
|
<string name="downloads_wifi_only_summary">切換到行動網路時停止下載</string>
|
||||||
|
<string name="by_name">名稱</string>
|
||||||
|
<string name="popular">熱門</string>
|
||||||
|
<string name="updated">已更新</string>
|
||||||
|
<string name="read_later">稍後閱讀</string>
|
||||||
|
<string name="updates">更新</string>
|
||||||
|
<string name="genres">類型</string>
|
||||||
|
<string name="state_finished">已完結</string>
|
||||||
|
<string name="state_ongoing">連載中</string>
|
||||||
|
<string name="local_manga_processing">儲存的漫畫處裡</string>
|
||||||
|
<string name="canceled">已取消</string>
|
||||||
|
<string name="account_already_exists">帳號已存在</string>
|
||||||
|
<string name="dns_over_https">DNS over HTTPS</string>
|
||||||
|
<string name="reader_slider">顯示頁面切換滑塊</string>
|
||||||
|
<string name="enable_logging_summary">紀錄一些動作用於除錯</string>
|
||||||
|
<string name="show_suspicious_content">顯示可疑內容</string>
|
||||||
|
<string name="show_in_grid_view">在網格檢視中顯示</string>
|
||||||
|
<string name="nothing_here">這裡沒有任何東西</string>
|
||||||
|
<string name="allow_unstable_updates">允許不穩定更新</string>
|
||||||
|
<string name="sync_settings">同步設定</string>
|
||||||
|
<string name="no_thanks">不,謝謝</string>
|
||||||
|
<string name="cancel_all_downloads_confirm">所有進行中的下載將被取消, 未下載完成的資料將會遺失</string>
|
||||||
|
<string name="remove_completed_downloads_confirm">您的下載紀錄將被永久地刪除</string>
|
||||||
|
<string name="text_downloads_list_holder">您沒有任何下載</string>
|
||||||
|
<string name="downloads_resumed">下載已被恢復</string>
|
||||||
|
<string name="downloads_paused">下載已被暫停</string>
|
||||||
|
<string name="undo">撤銷</string>
|
||||||
|
<string name="removed_from_history">從歷史紀錄移除</string>
|
||||||
|
<string name="color_correction">顏色校正</string>
|
||||||
|
<string name="brightness">亮度</string>
|
||||||
|
<string name="reader_control_ltr">人體工學閱讀器控制</string>
|
||||||
|
<string name="services">服務</string>
|
||||||
|
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%2$d 之 %1$d 啟用</string>
|
||||||
|
<string name="user_agent">UserAgent 標頭</string>
|
||||||
|
<string name="sync_host_description">您可以使用自建同步伺服器或預設伺服器。如果您不確定您在做什麼,請勿變更此項。</string>
|
||||||
|
<string name="reader_info_pattern">Ch. %1$d/%2$d Pg. %3$d/%4$d</string>
|
||||||
|
<string name="download_option_all_chapters">所有 %s 翻譯的章節</string>
|
||||||
|
<string name="download_option_next_unread_n_chapters">下一個未讀 %s</string>
|
||||||
|
<string name="download_option_first_n_chapters">最初 %s</string>
|
||||||
|
<string name="memory_usage_pattern">%s - %s</string>
|
||||||
|
<string name="allow_unstable_updates_summary">應用程式 beta 版更新提示</string>
|
||||||
|
<string name="scrobbling_empty_hint">要追蹤閱讀進度,在漫畫詳細畫面選擇選單 → 追蹤。</string>
|
||||||
|
<string name="manga_error_description_pattern">錯誤詳情:<br><tt>%1$s</tt><br><br>1. 嘗試<a href=%2$s>在瀏覽器中開啟漫畫</a> 以確保它在其來源中是可用的<br>2. 確認您使用的是 <a href=kotatsu://about>最新版的的 Kotatsu</a><br>3. 如果可用,請向開發人員發送錯誤報告。</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -6,7 +6,7 @@ buildscript {
|
|||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:8.0.2'
|
classpath 'com.android.tools.build:gradle:8.0.2'
|
||||||
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.22'
|
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.22'
|
||||||
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.46.1'
|
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.47'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user