Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7431f46117 | ||
|
|
48ac417189 | ||
|
|
98453c34a7 | ||
|
|
c62e29d995 | ||
|
|
4d0bd9538b | ||
|
|
fdb4e5098e | ||
|
|
758d3c55d4 | ||
|
|
f40ff12250 | ||
|
|
4f3721beea | ||
|
|
346526267e | ||
|
|
6c82c6e9f5 | ||
|
|
11dabd7426 | ||
|
|
056a26b55c | ||
|
|
f1863ddc71 | ||
|
|
437ae4cdae | ||
|
|
98f5615d77 | ||
|
|
44ce3ce66d | ||
|
|
080c2724cd | ||
|
|
43872ffe01 | ||
|
|
5cfad9ab8a | ||
|
|
866f9272ef | ||
|
|
f5a6e1e124 | ||
|
|
5595bc6971 | ||
|
|
e6ed353211 | ||
|
|
4e10908015 | ||
|
|
087ececfdd | ||
|
|
c090018acd | ||
|
|
5f6256a5c6 | ||
|
|
9e6be12707 | ||
|
|
737ca4a916 | ||
|
|
b2958d03e4 | ||
|
|
af8550744f | ||
|
|
2f5fd71bb1 | ||
|
|
271750ad93 | ||
|
|
0281c09dde | ||
|
|
f2ac3c331c | ||
|
|
4fc56f9786 | ||
|
|
a13c498d00 | ||
|
|
e15934bdc6 |
@@ -8,15 +8,15 @@ plugins {
|
|||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdk = 33
|
compileSdk = 33
|
||||||
buildToolsVersion = '33.0.1'
|
buildToolsVersion = '33.0.2'
|
||||||
namespace = 'org.koitharu.kotatsu'
|
namespace = 'org.koitharu.kotatsu'
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId 'org.koitharu.kotatsu'
|
applicationId 'org.koitharu.kotatsu'
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 33
|
targetSdkVersion 33
|
||||||
versionCode 518
|
versionCode 522
|
||||||
versionName '4.4.2'
|
versionName '4.4.6'
|
||||||
generatedDensities = []
|
generatedDensities = []
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
@@ -25,15 +25,6 @@ android {
|
|||||||
arg 'room.schemaLocation', "$projectDir/schemas".toString()
|
arg 'room.schemaLocation', "$projectDir/schemas".toString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// define this values in your local.properties file
|
|
||||||
buildConfigField 'String', 'SHIKIMORI_CLIENT_ID', "\"${localProperty('shikimori.clientId')}\""
|
|
||||||
buildConfigField 'String', 'SHIKIMORI_CLIENT_SECRET', "\"${localProperty('shikimori.clientSecret')}\""
|
|
||||||
buildConfigField 'String', 'ANILIST_CLIENT_ID', "\"${localProperty('anilist.clientId')}\""
|
|
||||||
buildConfigField 'String', 'ANILIST_CLIENT_SECRET', "\"${localProperty('anilist.clientSecret')}\""
|
|
||||||
buildConfigField 'String', 'MAL_CLIENT_ID', "\"${localProperty('mal.clientId')}\""
|
|
||||||
resValue "string", "acra_login", "${localProperty('acra.login')}"
|
|
||||||
resValue "string", "acra_password", "${localProperty('acra.password')}"
|
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
debug {
|
debug {
|
||||||
@@ -87,7 +78,8 @@ afterEvaluate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation('com.github.KotatsuApp:kotatsu-parsers:1093584202') {
|
//noinspection GradleDependency
|
||||||
|
implementation('com.github.KotatsuApp:kotatsu-parsers:cc418570d5') {
|
||||||
exclude group: 'org.json', module: 'json'
|
exclude group: 'org.json', module: 'json'
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,7 +133,7 @@ dependencies {
|
|||||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
|
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.13.2'
|
testImplementation 'junit:junit:4.13.2'
|
||||||
testImplementation 'org.json:json:20220924'
|
testImplementation 'org.json:json:20230227'
|
||||||
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4'
|
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4'
|
||||||
|
|
||||||
androidTestImplementation 'androidx.test:runner:1.5.2'
|
androidTestImplementation 'androidx.test:runner:1.5.2'
|
||||||
|
|||||||
@@ -96,6 +96,9 @@ interface AppModule {
|
|||||||
writeTimeout(20, TimeUnit.SECONDS)
|
writeTimeout(20, TimeUnit.SECONDS)
|
||||||
cookieJar(cookieJar)
|
cookieJar(cookieJar)
|
||||||
dns(DoHManager(cache, settings))
|
dns(DoHManager(cache, settings))
|
||||||
|
if (settings.isSSLBypassEnabled) {
|
||||||
|
bypassSSLErrors()
|
||||||
|
}
|
||||||
cache(cache)
|
cache(cache)
|
||||||
addInterceptor(GZipInterceptor())
|
addInterceptor(GZipInterceptor())
|
||||||
addInterceptor(commonHeadersInterceptor)
|
addInterceptor(commonHeadersInterceptor)
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ fun Parcel.readManga() = Manga(
|
|||||||
fun MangaPage.writeToParcel(out: Parcel) {
|
fun MangaPage.writeToParcel(out: Parcel) {
|
||||||
out.writeLong(id)
|
out.writeLong(id)
|
||||||
out.writeString(url)
|
out.writeString(url)
|
||||||
out.writeString(referer)
|
|
||||||
out.writeString(preview)
|
out.writeString(preview)
|
||||||
out.writeSerializable(source)
|
out.writeSerializable(source)
|
||||||
}
|
}
|
||||||
@@ -60,7 +59,6 @@ fun MangaPage.writeToParcel(out: Parcel) {
|
|||||||
fun Parcel.readMangaPage() = MangaPage(
|
fun Parcel.readMangaPage() = MangaPage(
|
||||||
id = readLong(),
|
id = readLong(),
|
||||||
url = requireNotNull(readString()),
|
url = requireNotNull(readString()),
|
||||||
referer = requireNotNull(readString()),
|
|
||||||
preview = readString(),
|
preview = readString(),
|
||||||
source = checkNotNull(readSerializableCompat()),
|
source = checkNotNull(readSerializableCompat()),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package org.koitharu.kotatsu.core.network
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import org.koitharu.kotatsu.utils.ext.printStackTraceDebug
|
||||||
|
import java.security.SecureRandom
|
||||||
|
import java.security.cert.X509Certificate
|
||||||
|
import javax.net.ssl.SSLContext
|
||||||
|
import javax.net.ssl.SSLSocketFactory
|
||||||
|
import javax.net.ssl.X509TrustManager
|
||||||
|
|
||||||
|
@SuppressLint("CustomX509TrustManager")
|
||||||
|
fun OkHttpClient.Builder.bypassSSLErrors() = also { builder ->
|
||||||
|
runCatching {
|
||||||
|
val trustAllCerts = object : X509TrustManager {
|
||||||
|
override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) = Unit
|
||||||
|
|
||||||
|
override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) = Unit
|
||||||
|
|
||||||
|
override fun getAcceptedIssuers(): Array<X509Certificate> = emptyArray()
|
||||||
|
}
|
||||||
|
val sslContext = SSLContext.getInstance("SSL")
|
||||||
|
sslContext.init(null, arrayOf(trustAllCerts), SecureRandom())
|
||||||
|
val sslSocketFactory: SSLSocketFactory = sslContext.socketFactory
|
||||||
|
builder.sslSocketFactory(sslSocketFactory, trustAllCerts)
|
||||||
|
builder.hostnameVerifier { _, _ -> true }
|
||||||
|
}.onFailure {
|
||||||
|
it.printStackTraceDebug()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -255,6 +255,9 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
|
|||||||
val dnsOverHttps: DoHProvider
|
val dnsOverHttps: DoHProvider
|
||||||
get() = prefs.getEnumValue(KEY_DOH, DoHProvider.NONE)
|
get() = prefs.getEnumValue(KEY_DOH, DoHProvider.NONE)
|
||||||
|
|
||||||
|
val isSSLBypassEnabled: Boolean
|
||||||
|
get() = prefs.getBoolean(KEY_SSL_BYPASS, false)
|
||||||
|
|
||||||
var localListOrder: SortOrder
|
var localListOrder: SortOrder
|
||||||
get() = prefs.getEnumValue(KEY_LOCAL_LIST_ORDER, SortOrder.NEWEST)
|
get() = prefs.getEnumValue(KEY_LOCAL_LIST_ORDER, SortOrder.NEWEST)
|
||||||
set(value) = prefs.edit { putEnumValue(KEY_LOCAL_LIST_ORDER, value) }
|
set(value) = prefs.edit { putEnumValue(KEY_LOCAL_LIST_ORDER, value) }
|
||||||
@@ -380,6 +383,7 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
|
|||||||
const val KEY_LOGS_SHARE = "logs_share"
|
const val KEY_LOGS_SHARE = "logs_share"
|
||||||
const val KEY_SOURCES_GRID = "sources_grid"
|
const val KEY_SOURCES_GRID = "sources_grid"
|
||||||
const val KEY_UPDATES_UNSTABLE = "updates_unstable"
|
const val KEY_UPDATES_UNSTABLE = "updates_unstable"
|
||||||
|
const val KEY_SSL_BYPASS = "ssl_bypass"
|
||||||
|
|
||||||
// About
|
// About
|
||||||
const val KEY_APP_UPDATE = "app_update"
|
const val KEY_APP_UPDATE = "app_update"
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ class DownloadManager @AssistedInject constructor(
|
|||||||
val data = if (manga.chapters.isNullOrEmpty()) repo.getDetails(manga) else manga
|
val data = if (manga.chapters.isNullOrEmpty()) repo.getDetails(manga) else manga
|
||||||
output = CbzMangaOutput.get(destination, data)
|
output = CbzMangaOutput.get(destination, data)
|
||||||
val coverUrl = data.largeCoverUrl ?: data.coverUrl
|
val coverUrl = data.largeCoverUrl ?: data.coverUrl
|
||||||
downloadFile(coverUrl, data.publicUrl, destination, tempFileName, repo.source).let { file ->
|
downloadFile(coverUrl, destination, tempFileName, repo.source).let { file ->
|
||||||
output.addCover(file, MimeTypeMap.getFileExtensionFromUrl(coverUrl))
|
output.addCover(file, MimeTypeMap.getFileExtensionFromUrl(coverUrl))
|
||||||
}
|
}
|
||||||
val chapters = checkNotNull(
|
val chapters = checkNotNull(
|
||||||
@@ -138,8 +138,8 @@ class DownloadManager @AssistedInject constructor(
|
|||||||
for ((pageIndex, page) in pages.withIndex()) {
|
for ((pageIndex, page) in pages.withIndex()) {
|
||||||
runFailsafe(outState, pausingHandle) {
|
runFailsafe(outState, pausingHandle) {
|
||||||
val url = repo.getPageUrl(page)
|
val url = repo.getPageUrl(page)
|
||||||
val file = cache[url]
|
val file = cache.get(url)
|
||||||
?: downloadFile(url, page.referer, destination, tempFileName, repo.source)
|
?: downloadFile(url, destination, tempFileName, repo.source)
|
||||||
output.addPage(
|
output.addPage(
|
||||||
chapter = chapter,
|
chapter = chapter,
|
||||||
file = file,
|
file = file,
|
||||||
@@ -211,14 +211,12 @@ class DownloadManager @AssistedInject constructor(
|
|||||||
|
|
||||||
private suspend fun downloadFile(
|
private suspend fun downloadFile(
|
||||||
url: String,
|
url: String,
|
||||||
referer: String,
|
|
||||||
destination: File,
|
destination: File,
|
||||||
tempFileName: String,
|
tempFileName: String,
|
||||||
source: MangaSource,
|
source: MangaSource,
|
||||||
): File {
|
): File {
|
||||||
val request = Request.Builder()
|
val request = Request.Builder()
|
||||||
.url(url)
|
.url(url)
|
||||||
.header(CommonHeaders.REFERER, referer)
|
|
||||||
.tag(MangaSource::class.java, source)
|
.tag(MangaSource::class.java, source)
|
||||||
.cacheControl(CommonHeaders.CACHE_CONTROL_DISABLED)
|
.cacheControl(CommonHeaders.CACHE_CONTROL_DISABLED)
|
||||||
.get()
|
.get()
|
||||||
|
|||||||
@@ -60,6 +60,9 @@ fun mangaListDetailedItemAD(
|
|||||||
lifecycle(lifecycleOwner)
|
lifecycle(lifecycleOwner)
|
||||||
enqueueWith(coil)
|
enqueueWith(coil)
|
||||||
}
|
}
|
||||||
|
if (payloads.isEmpty()) {
|
||||||
|
binding.scrollViewTags.scrollTo(0, 0)
|
||||||
|
}
|
||||||
binding.chipsTags.setChips(item.tags)
|
binding.chipsTags.setChips(item.tags)
|
||||||
binding.ratingBar.isVisible = item.manga.hasRating
|
binding.ratingBar.isVisible = item.manga.hasRating
|
||||||
binding.ratingBar.rating = binding.ratingBar.numStars * item.manga.rating
|
binding.ratingBar.rating = binding.ratingBar.numStars * item.manga.rating
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.content.Context
|
|||||||
import com.tomclaw.cache.DiskLruCache
|
import com.tomclaw.cache.DiskLruCache
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.runInterruptible
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.koitharu.kotatsu.utils.FileSize
|
import org.koitharu.kotatsu.utils.FileSize
|
||||||
import org.koitharu.kotatsu.utils.ext.copyToSuspending
|
import org.koitharu.kotatsu.utils.ext.copyToSuspending
|
||||||
@@ -30,8 +31,8 @@ class PagesCache @Inject constructor(@ApplicationContext context: Context) {
|
|||||||
size = FileSize.MEGABYTES.convert(200, FileSize.BYTES),
|
size = FileSize.MEGABYTES.convert(200, FileSize.BYTES),
|
||||||
)
|
)
|
||||||
|
|
||||||
operator fun get(url: String): File? {
|
suspend fun get(url: String): File? = runInterruptible(Dispatchers.IO) {
|
||||||
return lruCache.get(url)?.takeIfReadable()
|
lruCache.get(url)?.takeIfReadable()
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun put(url: String, inputStream: InputStream): File = withContext(Dispatchers.IO) {
|
suspend fun put(url: String, inputStream: InputStream): File = withContext(Dispatchers.IO) {
|
||||||
|
|||||||
@@ -118,7 +118,6 @@ class LocalMangaRepository @Inject constructor(private val storageManager: Local
|
|||||||
id = entryUri.longHashCode(),
|
id = entryUri.longHashCode(),
|
||||||
url = entryUri,
|
url = entryUri,
|
||||||
preview = null,
|
preview = null,
|
||||||
referer = chapter.url,
|
|
||||||
source = MangaSource.LOCAL,
|
source = MangaSource.LOCAL,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import android.graphics.BitmapFactory
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.collection.LongSparseArray
|
import androidx.collection.LongSparseArray
|
||||||
import androidx.collection.set
|
import androidx.collection.set
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
|
||||||
import kotlinx.coroutines.CoroutineExceptionHandler
|
import kotlinx.coroutines.CoroutineExceptionHandler
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -13,7 +12,7 @@ import kotlinx.coroutines.SupervisorJob
|
|||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.cancel
|
import kotlinx.coroutines.cancel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runInterruptible
|
import kotlinx.coroutines.runInterruptible
|
||||||
import kotlinx.coroutines.sync.Mutex
|
import kotlinx.coroutines.sync.Mutex
|
||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
@@ -54,11 +53,11 @@ class PageLoader @Inject constructor(
|
|||||||
|
|
||||||
private val tasks = LongSparseArray<ProgressDeferred<File, Float>>()
|
private val tasks = LongSparseArray<ProgressDeferred<File, Float>>()
|
||||||
private val convertLock = Mutex()
|
private val convertLock = Mutex()
|
||||||
|
private val prefetchLock = Mutex()
|
||||||
private var repository: MangaRepository? = null
|
private var repository: MangaRepository? = null
|
||||||
private val prefetchQueue = LinkedList<MangaPage>()
|
private val prefetchQueue = LinkedList<MangaPage>()
|
||||||
private val counter = AtomicInteger(0)
|
private val counter = AtomicInteger(0)
|
||||||
private var prefetchQueueLimit = PREFETCH_LIMIT_DEFAULT // TODO adaptive
|
private var prefetchQueueLimit = PREFETCH_LIMIT_DEFAULT // TODO adaptive
|
||||||
private val emptyProgressFlow: StateFlow<Float> = MutableStateFlow(-1f)
|
|
||||||
|
|
||||||
override fun close() {
|
override fun close() {
|
||||||
loaderScope.cancel()
|
loaderScope.cancel()
|
||||||
@@ -71,8 +70,8 @@ class PageLoader @Inject constructor(
|
|||||||
return repository is RemoteMangaRepository && settings.isPagesPreloadEnabled()
|
return repository is RemoteMangaRepository && settings.isPagesPreloadEnabled()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun prefetch(pages: List<ReaderPage>) {
|
fun prefetch(pages: List<ReaderPage>) = loaderScope.launch {
|
||||||
synchronized(prefetchQueue) {
|
prefetchLock.withLock {
|
||||||
for (page in pages.asReversed()) {
|
for (page in pages.asReversed()) {
|
||||||
if (tasks.containsKey(page.id)) {
|
if (tasks.containsKey(page.id)) {
|
||||||
continue
|
continue
|
||||||
@@ -89,18 +88,13 @@ class PageLoader @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun loadPageAsync(page: MangaPage, force: Boolean): ProgressDeferred<File, Float> {
|
fun loadPageAsync(page: MangaPage, force: Boolean): ProgressDeferred<File, Float> {
|
||||||
if (!force) {
|
|
||||||
cache[page.url]?.let {
|
|
||||||
return getCompletedTask(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var task = tasks[page.id]
|
var task = tasks[page.id]
|
||||||
if (force) {
|
if (force) {
|
||||||
task?.cancel()
|
task?.cancel()
|
||||||
} else if (task?.isCancelled == false) {
|
} else if (task?.isCancelled == false) {
|
||||||
return task
|
return task
|
||||||
}
|
}
|
||||||
task = loadPageAsyncImpl(page)
|
task = loadPageAsyncImpl(page, force)
|
||||||
synchronized(tasks) {
|
synchronized(tasks) {
|
||||||
tasks[page.id] = task
|
tasks[page.id] = task
|
||||||
}
|
}
|
||||||
@@ -130,23 +124,26 @@ class PageLoader @Inject constructor(
|
|||||||
return getRepository(page.source).getPageUrl(page)
|
return getRepository(page.source).getPageUrl(page)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onIdle() {
|
private fun onIdle() = loaderScope.launch {
|
||||||
synchronized(prefetchQueue) {
|
prefetchLock.withLock {
|
||||||
while (prefetchQueue.isNotEmpty()) {
|
while (prefetchQueue.isNotEmpty()) {
|
||||||
val page = prefetchQueue.pollFirst() ?: return
|
val page = prefetchQueue.pollFirst() ?: return@launch
|
||||||
if (cache[page.url] == null) {
|
if (cache.get(page.url) == null) {
|
||||||
synchronized(tasks) {
|
synchronized(tasks) {
|
||||||
tasks[page.id] = loadPageAsyncImpl(page)
|
tasks[page.id] = loadPageAsyncImpl(page, false)
|
||||||
}
|
}
|
||||||
return
|
return@launch
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadPageAsyncImpl(page: MangaPage): ProgressDeferred<File, Float> {
|
private fun loadPageAsyncImpl(page: MangaPage, skipCache: Boolean): ProgressDeferred<File, Float> {
|
||||||
val progress = MutableStateFlow(PROGRESS_UNDEFINED)
|
val progress = MutableStateFlow(PROGRESS_UNDEFINED)
|
||||||
val deferred = loaderScope.async {
|
val deferred = loaderScope.async {
|
||||||
|
if (!skipCache) {
|
||||||
|
cache.get(page.url)?.let { return@async it }
|
||||||
|
}
|
||||||
counter.incrementAndGet()
|
counter.incrementAndGet()
|
||||||
try {
|
try {
|
||||||
loadPageImpl(page, progress)
|
loadPageImpl(page, progress)
|
||||||
@@ -188,7 +185,6 @@ class PageLoader @Inject constructor(
|
|||||||
val request = Request.Builder()
|
val request = Request.Builder()
|
||||||
.url(pageUrl)
|
.url(pageUrl)
|
||||||
.get()
|
.get()
|
||||||
.header(CommonHeaders.REFERER, page.referer)
|
|
||||||
.header(CommonHeaders.ACCEPT, "image/webp,image/png;q=0.9,image/jpeg,*/*;q=0.8")
|
.header(CommonHeaders.ACCEPT, "image/webp,image/png;q=0.9,image/jpeg,*/*;q=0.8")
|
||||||
.cacheControl(CommonHeaders.CACHE_CONTROL_DISABLED)
|
.cacheControl(CommonHeaders.CACHE_CONTROL_DISABLED)
|
||||||
.tag(MangaSource::class.java, page.source)
|
.tag(MangaSource::class.java, page.source)
|
||||||
@@ -207,11 +203,6 @@ class PageLoader @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getCompletedTask(file: File): ProgressDeferred<File, Float> {
|
|
||||||
val deferred = CompletableDeferred(file)
|
|
||||||
return ProgressDeferred(deferred, emptyProgressFlow)
|
|
||||||
}
|
|
||||||
|
|
||||||
private class InternalErrorHandler : AbstractCoroutineContextElement(CoroutineExceptionHandler),
|
private class InternalErrorHandler : AbstractCoroutineContextElement(CoroutineExceptionHandler),
|
||||||
CoroutineExceptionHandler {
|
CoroutineExceptionHandler {
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ class ColorFilterConfigViewModel @AssistedInject constructor(
|
|||||||
preview.value = MangaPage(
|
preview.value = MangaPage(
|
||||||
id = page.id,
|
id = page.id,
|
||||||
url = url,
|
url = url,
|
||||||
referer = page.referer,
|
|
||||||
preview = page.preview,
|
preview = page.preview,
|
||||||
source = page.source,
|
source = page.source,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
|
|||||||
data class ReaderPage(
|
data class ReaderPage(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
val url: String,
|
val url: String,
|
||||||
val referer: String,
|
|
||||||
val preview: String?,
|
val preview: String?,
|
||||||
val chapterId: Long,
|
val chapterId: Long,
|
||||||
val index: Int,
|
val index: Int,
|
||||||
@@ -19,7 +18,6 @@ data class ReaderPage(
|
|||||||
constructor(page: MangaPage, index: Int, chapterId: Long) : this(
|
constructor(page: MangaPage, index: Int, chapterId: Long) : this(
|
||||||
id = page.id,
|
id = page.id,
|
||||||
url = page.url,
|
url = page.url,
|
||||||
referer = page.referer,
|
|
||||||
preview = page.preview,
|
preview = page.preview,
|
||||||
chapterId = chapterId,
|
chapterId = chapterId,
|
||||||
index = index,
|
index = index,
|
||||||
@@ -29,7 +27,6 @@ data class ReaderPage(
|
|||||||
fun toMangaPage() = MangaPage(
|
fun toMangaPage() = MangaPage(
|
||||||
id = id,
|
id = id,
|
||||||
url = url,
|
url = url,
|
||||||
referer = referer,
|
|
||||||
preview = preview,
|
preview = preview,
|
||||||
source = source,
|
source = source,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ object ScrobblingModule {
|
|||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideShikimoriRepository(
|
fun provideShikimoriRepository(
|
||||||
|
@ApplicationContext context: Context,
|
||||||
@ScrobblerType(ScrobblerService.SHIKIMORI) storage: ScrobblerStorage,
|
@ScrobblerType(ScrobblerService.SHIKIMORI) storage: ScrobblerStorage,
|
||||||
database: MangaDatabase,
|
database: MangaDatabase,
|
||||||
authenticator: ShikimoriAuthenticator,
|
authenticator: ShikimoriAuthenticator,
|
||||||
@@ -47,12 +48,13 @@ object ScrobblingModule {
|
|||||||
addInterceptor(CurlLoggingInterceptor())
|
addInterceptor(CurlLoggingInterceptor())
|
||||||
}
|
}
|
||||||
}.build()
|
}.build()
|
||||||
return ShikimoriRepository(okHttp, storage, database)
|
return ShikimoriRepository(context, okHttp, storage, database)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideMALRepository(
|
fun provideMALRepository(
|
||||||
|
@ApplicationContext context: Context,
|
||||||
@ScrobblerType(ScrobblerService.MAL) storage: ScrobblerStorage,
|
@ScrobblerType(ScrobblerService.MAL) storage: ScrobblerStorage,
|
||||||
database: MangaDatabase,
|
database: MangaDatabase,
|
||||||
authenticator: MALAuthenticator,
|
authenticator: MALAuthenticator,
|
||||||
@@ -64,12 +66,13 @@ object ScrobblingModule {
|
|||||||
addInterceptor(CurlLoggingInterceptor())
|
addInterceptor(CurlLoggingInterceptor())
|
||||||
}
|
}
|
||||||
}.build()
|
}.build()
|
||||||
return MALRepository(okHttp, storage, database)
|
return MALRepository(context, okHttp, storage, database)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideAniListRepository(
|
fun provideAniListRepository(
|
||||||
|
@ApplicationContext context: Context,
|
||||||
@ScrobblerType(ScrobblerService.ANILIST) storage: ScrobblerStorage,
|
@ScrobblerType(ScrobblerService.ANILIST) storage: ScrobblerStorage,
|
||||||
database: MangaDatabase,
|
database: MangaDatabase,
|
||||||
authenticator: AniListAuthenticator,
|
authenticator: AniListAuthenticator,
|
||||||
@@ -81,7 +84,7 @@ object ScrobblingModule {
|
|||||||
addInterceptor(CurlLoggingInterceptor())
|
addInterceptor(CurlLoggingInterceptor())
|
||||||
}
|
}
|
||||||
}.build()
|
}.build()
|
||||||
return AniListRepository(okHttp, storage, database)
|
return AniListRepository(context, okHttp, storage, database)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
package org.koitharu.kotatsu.scrobbling.anilist.data
|
package org.koitharu.kotatsu.scrobbling.anilist.data
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import okhttp3.FormBody
|
import okhttp3.FormBody
|
||||||
import okhttp3.MediaType.Companion.toMediaType
|
import okhttp3.MediaType.Companion.toMediaType
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import okhttp3.RequestBody.Companion.toRequestBody
|
import okhttp3.RequestBody.Companion.toRequestBody
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import org.koitharu.kotatsu.BuildConfig
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.db.MangaDatabase
|
import org.koitharu.kotatsu.core.db.MangaDatabase
|
||||||
import org.koitharu.kotatsu.parsers.exception.GraphQLException
|
import org.koitharu.kotatsu.parsers.exception.GraphQLException
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
||||||
@@ -15,6 +17,7 @@ import org.koitharu.kotatsu.parsers.util.json.getStringOrNull
|
|||||||
import org.koitharu.kotatsu.parsers.util.json.mapJSON
|
import org.koitharu.kotatsu.parsers.util.json.mapJSON
|
||||||
import org.koitharu.kotatsu.parsers.util.parseJson
|
import org.koitharu.kotatsu.parsers.util.parseJson
|
||||||
import org.koitharu.kotatsu.parsers.util.toIntUp
|
import org.koitharu.kotatsu.parsers.util.toIntUp
|
||||||
|
import org.koitharu.kotatsu.scrobbling.common.data.ScrobblerRepository
|
||||||
import org.koitharu.kotatsu.scrobbling.common.data.ScrobblerStorage
|
import org.koitharu.kotatsu.scrobbling.common.data.ScrobblerStorage
|
||||||
import org.koitharu.kotatsu.scrobbling.common.data.ScrobblingEntity
|
import org.koitharu.kotatsu.scrobbling.common.data.ScrobblingEntity
|
||||||
import org.koitharu.kotatsu.scrobbling.common.domain.model.ScrobblerManga
|
import org.koitharu.kotatsu.scrobbling.common.domain.model.ScrobblerManga
|
||||||
@@ -32,13 +35,17 @@ private const val REQUEST_MUTATION = "mutation"
|
|||||||
private const val KEY_SCORE_FORMAT = "score_format"
|
private const val KEY_SCORE_FORMAT = "score_format"
|
||||||
|
|
||||||
class AniListRepository(
|
class AniListRepository(
|
||||||
|
@ApplicationContext context: Context,
|
||||||
private val okHttp: OkHttpClient,
|
private val okHttp: OkHttpClient,
|
||||||
private val storage: ScrobblerStorage,
|
private val storage: ScrobblerStorage,
|
||||||
private val db: MangaDatabase,
|
private val db: MangaDatabase,
|
||||||
) : org.koitharu.kotatsu.scrobbling.common.data.ScrobblerRepository {
|
) : ScrobblerRepository {
|
||||||
|
|
||||||
|
private val clientId = context.getString(R.string.anilist_clientId)
|
||||||
|
private val clientSecret = context.getString(R.string.anilist_clientSecret)
|
||||||
|
|
||||||
override val oauthUrl: String
|
override val oauthUrl: String
|
||||||
get() = "${BASE_URL}oauth/authorize?client_id=${BuildConfig.ANILIST_CLIENT_ID}&" +
|
get() = "${BASE_URL}oauth/authorize?client_id=$clientId&" +
|
||||||
"redirect_uri=${REDIRECT_URI}&response_type=code"
|
"redirect_uri=${REDIRECT_URI}&response_type=code"
|
||||||
|
|
||||||
override val isAuthorized: Boolean
|
override val isAuthorized: Boolean
|
||||||
@@ -48,8 +55,8 @@ class AniListRepository(
|
|||||||
|
|
||||||
override suspend fun authorize(code: String?) {
|
override suspend fun authorize(code: String?) {
|
||||||
val body = FormBody.Builder()
|
val body = FormBody.Builder()
|
||||||
body.add("client_id", BuildConfig.ANILIST_CLIENT_ID)
|
body.add("client_id", clientId)
|
||||||
body.add("client_secret", BuildConfig.ANILIST_CLIENT_SECRET)
|
body.add("client_secret", clientSecret)
|
||||||
if (code != null) {
|
if (code != null) {
|
||||||
body.add("grant_type", "authorization_code")
|
body.add("grant_type", "authorization_code")
|
||||||
body.add("redirect_uri", REDIRECT_URI)
|
body.add("redirect_uri", REDIRECT_URI)
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
package org.koitharu.kotatsu.scrobbling.mal.data
|
package org.koitharu.kotatsu.scrobbling.mal.data
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import okhttp3.FormBody
|
import okhttp3.FormBody
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import org.koitharu.kotatsu.BuildConfig
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.db.MangaDatabase
|
import org.koitharu.kotatsu.core.db.MangaDatabase
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
||||||
import org.koitharu.kotatsu.parsers.util.await
|
import org.koitharu.kotatsu.parsers.util.await
|
||||||
import org.koitharu.kotatsu.parsers.util.json.mapJSONNotNull
|
import org.koitharu.kotatsu.parsers.util.json.mapJSONNotNull
|
||||||
import org.koitharu.kotatsu.parsers.util.parseJson
|
import org.koitharu.kotatsu.parsers.util.parseJson
|
||||||
|
import org.koitharu.kotatsu.scrobbling.common.data.ScrobblerRepository
|
||||||
import org.koitharu.kotatsu.scrobbling.common.data.ScrobblerStorage
|
import org.koitharu.kotatsu.scrobbling.common.data.ScrobblerStorage
|
||||||
import org.koitharu.kotatsu.scrobbling.common.data.ScrobblingEntity
|
import org.koitharu.kotatsu.scrobbling.common.data.ScrobblingEntity
|
||||||
import org.koitharu.kotatsu.scrobbling.common.domain.model.ScrobblerManga
|
import org.koitharu.kotatsu.scrobbling.common.domain.model.ScrobblerManga
|
||||||
@@ -25,17 +28,19 @@ private const val BASE_API_URL = "https://api.myanimelist.net/v2"
|
|||||||
private const val AVATAR_STUB = "https://cdn.myanimelist.net/images/questionmark_50.gif"
|
private const val AVATAR_STUB = "https://cdn.myanimelist.net/images/questionmark_50.gif"
|
||||||
|
|
||||||
class MALRepository(
|
class MALRepository(
|
||||||
|
@ApplicationContext context: Context,
|
||||||
private val okHttp: OkHttpClient,
|
private val okHttp: OkHttpClient,
|
||||||
private val storage: ScrobblerStorage,
|
private val storage: ScrobblerStorage,
|
||||||
private val db: MangaDatabase,
|
private val db: MangaDatabase,
|
||||||
) : org.koitharu.kotatsu.scrobbling.common.data.ScrobblerRepository {
|
) : ScrobblerRepository {
|
||||||
|
|
||||||
|
private val clientId = context.getString(R.string.mal_clientId)
|
||||||
private var codeVerifier: String = getPKCEChallengeCode()
|
private var codeVerifier: String = getPKCEChallengeCode()
|
||||||
|
|
||||||
override val oauthUrl: String
|
override val oauthUrl: String
|
||||||
get() = "$BASE_WEB_URL/v1/oauth2/authorize?" +
|
get() = "$BASE_WEB_URL/v1/oauth2/authorize?" +
|
||||||
"response_type=code" +
|
"response_type=code" +
|
||||||
"&client_id=${BuildConfig.MAL_CLIENT_ID}" +
|
"&client_id=$clientId" +
|
||||||
"&redirect_uri=$REDIRECT_URI" +
|
"&redirect_uri=$REDIRECT_URI" +
|
||||||
"&code_challenge=$codeVerifier" +
|
"&code_challenge=$codeVerifier" +
|
||||||
"&code_challenge_method=plain"
|
"&code_challenge_method=plain"
|
||||||
@@ -51,7 +56,7 @@ class MALRepository(
|
|||||||
override suspend fun authorize(code: String?) {
|
override suspend fun authorize(code: String?) {
|
||||||
val body = FormBody.Builder()
|
val body = FormBody.Builder()
|
||||||
if (code != null) {
|
if (code != null) {
|
||||||
body.add("client_id", BuildConfig.MAL_CLIENT_ID)
|
body.add("client_id", clientId)
|
||||||
body.add("grant_type", "authorization_code")
|
body.add("grant_type", "authorization_code")
|
||||||
body.add("code", code)
|
body.add("code", code)
|
||||||
body.add("redirect_uri", REDIRECT_URI)
|
body.add("redirect_uri", REDIRECT_URI)
|
||||||
@@ -205,5 +210,4 @@ class MALRepository(
|
|||||||
avatar = json.getString("picture") ?: AVATAR_STUB,
|
avatar = json.getString("picture") ?: AVATAR_STUB,
|
||||||
service = ScrobblerService.MAL,
|
service = ScrobblerService.MAL,
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
package org.koitharu.kotatsu.scrobbling.shikimori.data
|
package org.koitharu.kotatsu.scrobbling.shikimori.data
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import okhttp3.FormBody
|
import okhttp3.FormBody
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import org.koitharu.kotatsu.BuildConfig
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.db.MangaDatabase
|
import org.koitharu.kotatsu.core.db.MangaDatabase
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
||||||
import org.koitharu.kotatsu.parsers.util.await
|
import org.koitharu.kotatsu.parsers.util.await
|
||||||
@@ -28,13 +30,17 @@ private const val BASE_URL = "https://shikimori.one/"
|
|||||||
private const val MANGA_PAGE_SIZE = 10
|
private const val MANGA_PAGE_SIZE = 10
|
||||||
|
|
||||||
class ShikimoriRepository(
|
class ShikimoriRepository(
|
||||||
|
@ApplicationContext context: Context,
|
||||||
private val okHttp: OkHttpClient,
|
private val okHttp: OkHttpClient,
|
||||||
private val storage: ScrobblerStorage,
|
private val storage: ScrobblerStorage,
|
||||||
private val db: MangaDatabase,
|
private val db: MangaDatabase,
|
||||||
) : ScrobblerRepository {
|
) : ScrobblerRepository {
|
||||||
|
|
||||||
|
private val clientId = context.getString(R.string.shikimori_clientId)
|
||||||
|
private val clientSecret = context.getString(R.string.shikimori_clientSecret)
|
||||||
|
|
||||||
override val oauthUrl: String
|
override val oauthUrl: String
|
||||||
get() = "${BASE_URL}oauth/authorize?client_id=${BuildConfig.SHIKIMORI_CLIENT_ID}&" +
|
get() = "${BASE_URL}oauth/authorize?client_id=$clientId&" +
|
||||||
"redirect_uri=$REDIRECT_URI&response_type=code&scope="
|
"redirect_uri=$REDIRECT_URI&response_type=code&scope="
|
||||||
|
|
||||||
override val isAuthorized: Boolean
|
override val isAuthorized: Boolean
|
||||||
@@ -42,8 +48,8 @@ class ShikimoriRepository(
|
|||||||
|
|
||||||
override suspend fun authorize(code: String?) {
|
override suspend fun authorize(code: String?) {
|
||||||
val body = FormBody.Builder()
|
val body = FormBody.Builder()
|
||||||
body.add("client_id", BuildConfig.SHIKIMORI_CLIENT_ID)
|
body.add("client_id", clientId)
|
||||||
body.add("client_secret", BuildConfig.SHIKIMORI_CLIENT_SECRET)
|
body.add("client_secret", clientSecret)
|
||||||
if (code != null) {
|
if (code != null) {
|
||||||
body.add("grant_type", "authorization_code")
|
body.add("grant_type", "authorization_code")
|
||||||
body.add("redirect_uri", REDIRECT_URI)
|
body.add("redirect_uri", REDIRECT_URI)
|
||||||
@@ -98,13 +104,13 @@ class ShikimoriRepository(
|
|||||||
return if (pageOffset != 0) list.drop(pageOffset) else list
|
return if (pageOffset != 0) list.drop(pageOffset) else list
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun createRate(mangaId: Long, shikiMangaId: Long) {
|
override suspend fun createRate(mangaId: Long, scrobblerMangaId: Long) {
|
||||||
val user = cachedUser ?: loadUser()
|
val user = cachedUser ?: loadUser()
|
||||||
val payload = JSONObject()
|
val payload = JSONObject()
|
||||||
payload.put(
|
payload.put(
|
||||||
"user_rate",
|
"user_rate",
|
||||||
JSONObject().apply {
|
JSONObject().apply {
|
||||||
put("target_id", shikiMangaId)
|
put("target_id", scrobblerMangaId)
|
||||||
put("target_type", "Manga")
|
put("target_type", "Manga")
|
||||||
put("user_id", user.id)
|
put("user_id", user.id)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import android.os.Bundle
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
@@ -85,6 +86,10 @@ class ContentSettingsFragment :
|
|||||||
AppSettings.KEY_SOURCES_HIDDEN -> {
|
AppSettings.KEY_SOURCES_HIDDEN -> {
|
||||||
bindRemoteSourcesSummary()
|
bindRemoteSourcesSummary()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AppSettings.KEY_SSL_BYPASS -> {
|
||||||
|
Snackbar.make(listView, R.string.settings_apply_restart_required, Snackbar.LENGTH_INDEFINITE).show()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import androidx.preference.PreferenceViewHolder
|
|||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.prefs.ColorScheme
|
import org.koitharu.kotatsu.core.prefs.ColorScheme
|
||||||
import org.koitharu.kotatsu.databinding.ItemColorSchemeBinding
|
import org.koitharu.kotatsu.databinding.ItemColorSchemeBinding
|
||||||
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
class ThemeChooserPreference @JvmOverloads constructor(
|
class ThemeChooserPreference @JvmOverloads constructor(
|
||||||
context: Context,
|
context: Context,
|
||||||
@@ -68,7 +69,7 @@ class ThemeChooserPreference @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
scrollView.viewTreeObserver.run {
|
scrollView.viewTreeObserver.run {
|
||||||
scrollPersistListener?.let { removeOnScrollChangedListener(it) }
|
scrollPersistListener?.let { removeOnScrollChangedListener(it) }
|
||||||
scrollPersistListener = ScrollPersistListener(scrollView, lastScrollPosition)
|
scrollPersistListener = ScrollPersistListener(WeakReference(scrollView), lastScrollPosition)
|
||||||
addOnScrollChangedListener(scrollPersistListener)
|
addOnScrollChangedListener(scrollPersistListener)
|
||||||
}
|
}
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
@@ -106,7 +107,6 @@ class ThemeChooserPreference @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
super.onRestoreInstanceState(state.superState)
|
super.onRestoreInstanceState(state.superState)
|
||||||
lastScrollPosition[0] = state.scrollPosition
|
lastScrollPosition[0] = state.scrollPosition
|
||||||
// notifyChanged()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setValueInternal(enumName: String, notifyChanged: Boolean) {
|
private fun setValueInternal(enumName: String, notifyChanged: Boolean) {
|
||||||
@@ -152,11 +152,12 @@ class ThemeChooserPreference @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class ScrollPersistListener(
|
private class ScrollPersistListener(
|
||||||
private val scrollView: HorizontalScrollView,
|
private val scrollViewRef: WeakReference<HorizontalScrollView>,
|
||||||
private val lastScrollPosition: IntArray,
|
private val lastScrollPosition: IntArray,
|
||||||
) : ViewTreeObserver.OnScrollChangedListener {
|
) : ViewTreeObserver.OnScrollChangedListener {
|
||||||
|
|
||||||
override fun onScrollChanged() {
|
override fun onScrollChanged() {
|
||||||
|
val scrollView = scrollViewRef.get() ?: return
|
||||||
lastScrollPosition[0] = scrollView.scrollX
|
lastScrollPosition[0] = scrollView.scrollX
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ abstract class SyncProvider : ContentProvider() {
|
|||||||
.selection(selection, selectionArgs)
|
.selection(selection, selectionArgs)
|
||||||
.orderBy(sortOrder)
|
.orderBy(sortOrder)
|
||||||
.create()
|
.create()
|
||||||
logger.log("query: ${sqlQuery.sql}")
|
logger.log("query: ${sqlQuery.sql} (${selectionArgs.contentToString()})")
|
||||||
return database.openHelper.readableDatabase.query(sqlQuery)
|
return database.openHelper.readableDatabase.query(sqlQuery)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ abstract class SyncProvider : ContentProvider() {
|
|||||||
|
|
||||||
override fun delete(uri: Uri, selection: String?, selectionArgs: Array<out String>?): Int {
|
override fun delete(uri: Uri, selection: String?, selectionArgs: Array<out String>?): Int {
|
||||||
val table = getTableName(uri) ?: return 0
|
val table = getTableName(uri) ?: return 0
|
||||||
logger.log { "delete: $table ($selection) : ($selectionArgs)" }
|
logger.log { "delete: $table ($selection) : (${selectionArgs.contentToString()})" }
|
||||||
return database.openHelper.writableDatabase.delete(table, selection, selectionArgs)
|
return database.openHelper.writableDatabase.delete(table, selection, selectionArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ abstract class SyncProvider : ContentProvider() {
|
|||||||
if (values == null || table == null) {
|
if (values == null || table == null) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
logger.log { "update: $table ($selection) : ($selectionArgs) [$values]" }
|
logger.log { "update: $table ($selection) : (${selectionArgs.contentToString()}) [$values]" }
|
||||||
return database.openHelper.writableDatabase
|
return database.openHelper.writableDatabase
|
||||||
.update(table, SQLiteDatabase.CONFLICT_IGNORE, values, selection, selectionArgs)
|
.update(table, SQLiteDatabase.CONFLICT_IGNORE, values, selection, selectionArgs)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ package org.koitharu.kotatsu.utils.ext
|
|||||||
import okhttp3.MediaType.Companion.toMediaType
|
import okhttp3.MediaType.Companion.toMediaType
|
||||||
import okhttp3.RequestBody.Companion.toRequestBody
|
import okhttp3.RequestBody.Companion.toRequestBody
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
|
import okhttp3.internal.closeQuietly
|
||||||
|
import okio.IOException
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import org.koitharu.kotatsu.parsers.util.parseJson
|
|
||||||
import java.net.HttpURLConnection
|
import java.net.HttpURLConnection
|
||||||
|
|
||||||
private val TYPE_JSON = "application/json".toMediaType()
|
private val TYPE_JSON = "application/json".toMediaType()
|
||||||
@@ -12,9 +13,13 @@ private val TYPE_JSON = "application/json".toMediaType()
|
|||||||
fun JSONObject.toRequestBody() = toString().toRequestBody(TYPE_JSON)
|
fun JSONObject.toRequestBody() = toString().toRequestBody(TYPE_JSON)
|
||||||
|
|
||||||
fun Response.parseJsonOrNull(): JSONObject? {
|
fun Response.parseJsonOrNull(): JSONObject? {
|
||||||
return if (code == HttpURLConnection.HTTP_NO_CONTENT) {
|
return try {
|
||||||
null
|
when {
|
||||||
} else {
|
!isSuccessful -> throw IOException(body?.string())
|
||||||
parseJson()
|
code == HttpURLConnection.HTTP_NO_CONTENT -> null
|
||||||
|
else -> JSONObject(body?.string() ?: return null)
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
closeQuietly()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,8 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:hint="@string/name"
|
android:hint="@string/name"
|
||||||
android:imeOptions="actionDone"
|
android:imeOptions="actionDone"
|
||||||
android:inputType="textCapSentences" />
|
android:inputType="textCapSentences"
|
||||||
|
android:maxLength="120" />
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -326,7 +326,8 @@
|
|||||||
<string name="clear_all_history">Ачысціць усю гісторыю</string>
|
<string name="clear_all_history">Ачысціць усю гісторыю</string>
|
||||||
<string name="history_cleared">Гісторыя ачышчана</string>
|
<string name="history_cleared">Гісторыя ачышчана</string>
|
||||||
<string name="incognito_mode">Рэжым інкогніта</string>
|
<string name="incognito_mode">Рэжым інкогніта</string>
|
||||||
<string name="categories_delete_confirm">Вы ўпэўнены, што хочаце выдаліць выбраныя абраныя катэгорыі\? Уся манга ў ім будзе страчана, і гэта нельга будзе адрабіць.</string>
|
<string name="categories_delete_confirm">Вы ўпэўнены, што хочаце выдаліць выбраныя абраныя катэгорыі\?
|
||||||
|
\nУся манга ў ім будзе страчана, і гэта нельга будзе адрабіць.</string>
|
||||||
<string name="no_bookmarks_summary">Вы можаце стварыць закладку падчас чытання мангі</string>
|
<string name="no_bookmarks_summary">Вы можаце стварыць закладку падчас чытання мангі</string>
|
||||||
<string name="saved_manga">Захаваная манга</string>
|
<string name="saved_manga">Захаваная манга</string>
|
||||||
<string name="enter_email_text">Каб працягнуць, увядзіце свой адрас электроннай пошты</string>
|
<string name="enter_email_text">Каб працягнуць, увядзіце свой адрас электроннай пошты</string>
|
||||||
@@ -415,4 +416,9 @@
|
|||||||
<string name="options">Параметры</string>
|
<string name="options">Параметры</string>
|
||||||
<string name="downloading_manga">Спампоўка мангі</string>
|
<string name="downloading_manga">Спампоўка мангі</string>
|
||||||
<string name="seconds_pattern">%s с</string>
|
<string name="seconds_pattern">%s с</string>
|
||||||
|
<string name="user_agent">Загаловак UserAgent</string>
|
||||||
|
<string name="allow_unstable_updates">Дазволіць нестабільныя абнаўленні</string>
|
||||||
|
<string name="allow_unstable_updates_summary">Прапануйце абнаўленні да бэта-версій праграмы</string>
|
||||||
|
<string name="download_started">Спампоўка пачалася</string>
|
||||||
|
<string name="settings_apply_restart_required">Калі ласка, перазапусціце праграму каб прымяніць змены</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -403,7 +403,5 @@
|
|||||||
<string name="show_suspicious_content">Verdächtige Inhalte anzeigen</string>
|
<string name="show_suspicious_content">Verdächtige Inhalte anzeigen</string>
|
||||||
<string name="status_dropped">Abgebrochen</string>
|
<string name="status_dropped">Abgebrochen</string>
|
||||||
<string name="color_theme">Farbschema</string>
|
<string name="color_theme">Farbschema</string>
|
||||||
<string name="theme_name_october">Oktober</string>
|
|
||||||
<string name="theme_name_mint">Minze</string>
|
|
||||||
<string name="theme_name_dynamic">Dynamisch</string>
|
<string name="theme_name_dynamic">Dynamisch</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -360,7 +360,6 @@
|
|||||||
<string name="explore">Explorar</string>
|
<string name="explore">Explorar</string>
|
||||||
<string name="memory_usage_pattern">%s - %s</string>
|
<string name="memory_usage_pattern">%s - %s</string>
|
||||||
<string name="changelog">Registro de cambios</string>
|
<string name="changelog">Registro de cambios</string>
|
||||||
<string name="tools">Herramientas</string>
|
|
||||||
<string name="exit_confirmation_summary">Pulse dos veces «Atrás» para salir de la aplicación</string>
|
<string name="exit_confirmation_summary">Pulse dos veces «Atrás» para salir de la aplicación</string>
|
||||||
<string name="exit_confirmation">Confirmación de salida</string>
|
<string name="exit_confirmation">Confirmación de salida</string>
|
||||||
<string name="pages_cache">Caché de páginas</string>
|
<string name="pages_cache">Caché de páginas</string>
|
||||||
@@ -404,10 +403,8 @@
|
|||||||
<string name="enable_logging_summary">Grabar algunas acciones para depurar</string>
|
<string name="enable_logging_summary">Grabar algunas acciones para depurar</string>
|
||||||
<string name="enable_logging">Activar el registro</string>
|
<string name="enable_logging">Activar el registro</string>
|
||||||
<string name="show_suspicious_content">Mostrar contenido sospechoso</string>
|
<string name="show_suspicious_content">Mostrar contenido sospechoso</string>
|
||||||
<string name="theme_name_mint">Mint</string>
|
|
||||||
<string name="theme_name_dynamic">Dinámico</string>
|
<string name="theme_name_dynamic">Dinámico</string>
|
||||||
<string name="color_theme">Esquema de colores</string>
|
<string name="color_theme">Esquema de colores</string>
|
||||||
<string name="theme_name_october">Octubre</string>
|
|
||||||
<string name="show_in_grid_view">Mostrar en vista de cuadrícula</string>
|
<string name="show_in_grid_view">Mostrar en vista de cuadrícula</string>
|
||||||
<string name="theme_name_asuka">Asuka</string>
|
<string name="theme_name_asuka">Asuka</string>
|
||||||
<string name="theme_name_mion">Mion</string>
|
<string name="theme_name_mion">Mion</string>
|
||||||
@@ -422,4 +419,6 @@
|
|||||||
<string name="allow_unstable_updates_summary">Actualizaciones propuestas para las versiones beta de la aplicación</string>
|
<string name="allow_unstable_updates_summary">Actualizaciones propuestas para las versiones beta de la aplicación</string>
|
||||||
<string name="allow_unstable_updates">Permitir actualizaciones inestables</string>
|
<string name="allow_unstable_updates">Permitir actualizaciones inestables</string>
|
||||||
<string name="download_started">Descarga iniciada</string>
|
<string name="download_started">Descarga iniciada</string>
|
||||||
|
<string name="user_agent">Encabezado del agente de usuario</string>
|
||||||
|
<string name="settings_apply_restart_required">Por favor, reinicie la aplicación para aplicar estos cambios</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources></resources>
|
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<string name="large_manga_save_confirm">Ang manga na ito ay may %s. I-save ang lahat ng ito\?</string>
|
<string name="large_manga_save_confirm">Ang manga na ito ay may %s. I-save ang lahat ng ito\?</string>
|
||||||
<string name="notifications">Mga abiso</string>
|
<string name="notifications">Mga abiso</string>
|
||||||
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d ng %2$d sa</string>
|
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d ng %2$d sa</string>
|
||||||
<string name="new_chapters">Bagong mga kabanata</string>
|
<string name="new_chapters">Mga bagong kabanata</string>
|
||||||
<string name="read_from_start">Basahin mula sa simula</string>
|
<string name="read_from_start">Basahin mula sa simula</string>
|
||||||
<string name="restart">I-restart</string>
|
<string name="restart">I-restart</string>
|
||||||
<string name="categories_">Mga kategorya…</string>
|
<string name="categories_">Mga kategorya…</string>
|
||||||
|
|||||||
@@ -403,10 +403,8 @@
|
|||||||
<string name="enable_logging_summary">Enregistrer certaines actions à des fins de débogage</string>
|
<string name="enable_logging_summary">Enregistrer certaines actions à des fins de débogage</string>
|
||||||
<string name="language">Langue</string>
|
<string name="language">Langue</string>
|
||||||
<string name="show_suspicious_content">Afficher le contenu suspect</string>
|
<string name="show_suspicious_content">Afficher le contenu suspect</string>
|
||||||
<string name="theme_name_mint">Menthe</string>
|
|
||||||
<string name="theme_name_dynamic">Dynamique</string>
|
<string name="theme_name_dynamic">Dynamique</string>
|
||||||
<string name="color_theme">Schéma de couleurs</string>
|
<string name="color_theme">Schéma de couleurs</string>
|
||||||
<string name="theme_name_october">Octobre</string>
|
|
||||||
<string name="show_in_grid_view">Afficher en vue grille</string>
|
<string name="show_in_grid_view">Afficher en vue grille</string>
|
||||||
<string name="scrobbling_empty_hint">Pour suivre la progression de la lecture, sélectionnez Menu → Suivre sur l\'écran des détails du manga.</string>
|
<string name="scrobbling_empty_hint">Pour suivre la progression de la lecture, sélectionnez Menu → Suivre sur l\'écran des détails du manga.</string>
|
||||||
<string name="services">Prestations de service</string>
|
<string name="services">Prestations de service</string>
|
||||||
@@ -421,4 +419,6 @@
|
|||||||
<string name="download_started">Téléchargement commencé</string>
|
<string name="download_started">Téléchargement commencé</string>
|
||||||
<string name="theme_name_kanade">Kanade</string>
|
<string name="theme_name_kanade">Kanade</string>
|
||||||
<string name="allow_unstable_updates_summary">Proposer des mises à jour des versions bêta de l\'application</string>
|
<string name="allow_unstable_updates_summary">Proposer des mises à jour des versions bêta de l\'application</string>
|
||||||
|
<string name="user_agent">En-tête UserAgent</string>
|
||||||
|
<string name="settings_apply_restart_required">Veuillez redémarrer l\'application pour appliquer ces changements</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -5,8 +5,8 @@
|
|||||||
<string name="local_storage">Penyimpanan lokal</string>
|
<string name="local_storage">Penyimpanan lokal</string>
|
||||||
<string name="favourites">Favorit</string>
|
<string name="favourites">Favorit</string>
|
||||||
<string name="history">Riwayat</string>
|
<string name="history">Riwayat</string>
|
||||||
<string name="error_occurred">Terjadi galat</string>
|
<string name="error_occurred">Terjadi kesalahan</string>
|
||||||
<string name="network_error">Tidak bisa menyambung ke internet</string>
|
<string name="network_error">Kesalahan jaringan</string>
|
||||||
<string name="details">Detail</string>
|
<string name="details">Detail</string>
|
||||||
<string name="grid">Kisi</string>
|
<string name="grid">Kisi</string>
|
||||||
<string name="list_mode">Mode daftar</string>
|
<string name="list_mode">Mode daftar</string>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<string name="chapter_d_of_d">Bab %1$d dari %2$d</string>
|
<string name="chapter_d_of_d">Bab %1$d dari %2$d</string>
|
||||||
<string name="close">Tutup</string>
|
<string name="close">Tutup</string>
|
||||||
<string name="try_again">Coba lagi</string>
|
<string name="try_again">Coba lagi</string>
|
||||||
<string name="nothing_found">Tidak ditemukan apa-apa</string>
|
<string name="nothing_found">Tidak ada yang ditemukan</string>
|
||||||
<string name="history_is_empty">Belum ada riwayat</string>
|
<string name="history_is_empty">Belum ada riwayat</string>
|
||||||
<string name="read">Baca</string>
|
<string name="read">Baca</string>
|
||||||
<string name="you_have_not_favourites_yet">Belum ada favorit</string>
|
<string name="you_have_not_favourites_yet">Belum ada favorit</string>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<string name="create_shortcut">Buat pintasan…</string>
|
<string name="create_shortcut">Buat pintasan…</string>
|
||||||
<string name="share_s">Bagikan %s</string>
|
<string name="share_s">Bagikan %s</string>
|
||||||
<string name="search">Cari</string>
|
<string name="search">Cari</string>
|
||||||
<string name="search_manga">Cari manga</string>
|
<string name="search_manga">Cari komik</string>
|
||||||
<string name="manga_downloading_">Mengunduh…</string>
|
<string name="manga_downloading_">Mengunduh…</string>
|
||||||
<string name="processing_">Memproses…</string>
|
<string name="processing_">Memproses…</string>
|
||||||
<string name="download_complete">Diunduh</string>
|
<string name="download_complete">Diunduh</string>
|
||||||
@@ -39,9 +39,9 @@
|
|||||||
<string name="popular">Populer</string>
|
<string name="popular">Populer</string>
|
||||||
<string name="updated">Diperbarui</string>
|
<string name="updated">Diperbarui</string>
|
||||||
<string name="newest">Terbaru</string>
|
<string name="newest">Terbaru</string>
|
||||||
<string name="by_rating">Rating</string>
|
<string name="by_rating">Peringkat</string>
|
||||||
<string name="sort_order">Urutan penyortiran</string>
|
<string name="sort_order">Urutan penyortiran</string>
|
||||||
<string name="filter">Filter</string>
|
<string name="filter">Saring</string>
|
||||||
<string name="theme">Tema</string>
|
<string name="theme">Tema</string>
|
||||||
<string name="light">Terang</string>
|
<string name="light">Terang</string>
|
||||||
<string name="dark">Gelap</string>
|
<string name="dark">Gelap</string>
|
||||||
@@ -61,14 +61,14 @@
|
|||||||
<string name="page_saved">Disimpan</string>
|
<string name="page_saved">Disimpan</string>
|
||||||
<string name="share_image">Bagikan gambar</string>
|
<string name="share_image">Bagikan gambar</string>
|
||||||
<string name="_import">Impor</string>
|
<string name="_import">Impor</string>
|
||||||
<string name="history_and_cache">Riwayat dan tembolok</string>
|
<string name="history_and_cache">Riwayat dan cache</string>
|
||||||
<string name="clear_pages_cache">Bersihkan tembolok halaman</string>
|
<string name="clear_pages_cache">Bersihkan cache halaman</string>
|
||||||
<string name="cache">Tembolok</string>
|
<string name="cache">Cache</string>
|
||||||
<string name="text_file_sizes">B|kB|MB|GB|TB</string>
|
<string name="text_file_sizes">B|kB|MB|GB|TB</string>
|
||||||
<string name="standard">Standar</string>
|
<string name="standard">Standar</string>
|
||||||
<string name="grid_size">Ukuran kisi</string>
|
<string name="grid_size">Ukuran kisi</string>
|
||||||
<string name="search_on_s">Cari di %s</string>
|
<string name="search_on_s">Cari di %s</string>
|
||||||
<string name="delete_manga">Hapus manga</string>
|
<string name="delete_manga">Hapus komik</string>
|
||||||
<string name="text_delete_local_manga">Hapus \"%s\" dari perangkat secara permanen\?</string>
|
<string name="text_delete_local_manga">Hapus \"%s\" dari perangkat secara permanen\?</string>
|
||||||
<string name="reader_settings">Pengaturan pembaca</string>
|
<string name="reader_settings">Pengaturan pembaca</string>
|
||||||
<string name="switch_pages">Ganti halaman</string>
|
<string name="switch_pages">Ganti halaman</string>
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
<string name="network_consumption_warning">Ini mungkin akan mentransfer banyak data</string>
|
<string name="network_consumption_warning">Ini mungkin akan mentransfer banyak data</string>
|
||||||
<string name="dont_ask_again">Jangan tanya lagi</string>
|
<string name="dont_ask_again">Jangan tanya lagi</string>
|
||||||
<string name="cancelling_">Membatalkan…</string>
|
<string name="cancelling_">Membatalkan…</string>
|
||||||
<string name="clear_thumbs_cache">Bersihkan tembolok keluku</string>
|
<string name="clear_thumbs_cache">Bersihkan cache gambar mini</string>
|
||||||
<string name="clear_search_history">Bersihkan riwayat pencarian</string>
|
<string name="clear_search_history">Bersihkan riwayat pencarian</string>
|
||||||
<string name="search_history_cleared">Dibersihkan</string>
|
<string name="search_history_cleared">Dibersihkan</string>
|
||||||
<string name="domain">Domain</string>
|
<string name="domain">Domain</string>
|
||||||
@@ -103,7 +103,7 @@
|
|||||||
<string name="categories_">Kategori…</string>
|
<string name="categories_">Kategori…</string>
|
||||||
<string name="rename">Ubah Nama</string>
|
<string name="rename">Ubah Nama</string>
|
||||||
<string name="category_delete_confirm">Hapus kategori \"%s\" dari favorit Anda\?
|
<string name="category_delete_confirm">Hapus kategori \"%s\" dari favorit Anda\?
|
||||||
\nSemua manga di situ akan hilang.</string>
|
\nSemua komik di dalamnya akan hilang.</string>
|
||||||
<string name="text_empty_holder_primary">Sepi juga di sini…</string>
|
<string name="text_empty_holder_primary">Sepi juga di sini…</string>
|
||||||
<string name="text_categories_holder">Anda bisa menggunakan kategori untuk mengelola favorit Anda. Tekan «+» untuk membuat kategori</string>
|
<string name="text_categories_holder">Anda bisa menggunakan kategori untuk mengelola favorit Anda. Tekan «+» untuk membuat kategori</string>
|
||||||
<string name="text_history_holder_primary">Apa yang Anda baca akan ditampilkan di sini</string>
|
<string name="text_history_holder_primary">Apa yang Anda baca akan ditampilkan di sini</string>
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
<string name="manga_shelf">Rak</string>
|
<string name="manga_shelf">Rak</string>
|
||||||
<string name="recent_manga">Baru-baru ini</string>
|
<string name="recent_manga">Baru-baru ini</string>
|
||||||
<string name="pages_animation">Animasi halaman</string>
|
<string name="pages_animation">Animasi halaman</string>
|
||||||
<string name="manga_save_location">Folder untuk unduhan</string>
|
<string name="manga_save_location">Folder unduhan</string>
|
||||||
<string name="not_available">Tidak tersedia</string>
|
<string name="not_available">Tidak tersedia</string>
|
||||||
<string name="cannot_find_available_storage">Tidak ada penyimpanan yang tersedia</string>
|
<string name="cannot_find_available_storage">Tidak ada penyimpanan yang tersedia</string>
|
||||||
<string name="other_storage">Penyimpanan lain</string>
|
<string name="other_storage">Penyimpanan lain</string>
|
||||||
@@ -133,20 +133,20 @@
|
|||||||
<string name="wrong_password">Kata sandi salah</string>
|
<string name="wrong_password">Kata sandi salah</string>
|
||||||
<string name="protect_application">Lindungi aplikasi</string>
|
<string name="protect_application">Lindungi aplikasi</string>
|
||||||
<string name="repeat_password">Ulangi kata sandi</string>
|
<string name="repeat_password">Ulangi kata sandi</string>
|
||||||
<string name="update_check_failed">Tidak bisa mencari pembaruan</string>
|
<string name="update_check_failed">Tidak dapat mencari pembaruan</string>
|
||||||
<string name="scale_mode">Mode skala</string>
|
<string name="scale_mode">Mode skala</string>
|
||||||
<string name="create_backup">Buat cadangan data</string>
|
<string name="create_backup">Buat cadangan data</string>
|
||||||
<string name="data_restored">Dipulihkan</string>
|
<string name="data_restored">Dipulihkan</string>
|
||||||
<string name="report_github">Buat isu di GitHub</string>
|
<string name="report_github">Buat isu di GitHub</string>
|
||||||
<string name="data_restored_success">Semua data dipulihkan</string>
|
<string name="data_restored_success">Semua data dipulihkan</string>
|
||||||
<string name="data_restored_with_errors">Data berhasil dipulihkan, tapi ada galat</string>
|
<string name="data_restored_with_errors">Data berhasil dipulihkan, tapi ada kesalahan</string>
|
||||||
<string name="backup_information">Anda bisa membuat cadangan riwayat dan favorit Anda dan memulihkannya</string>
|
<string name="backup_information">Anda dapat membuat cadangan riwayat dan favorit Anda dan memulihkannya</string>
|
||||||
<string name="just_now">Baru saja</string>
|
<string name="just_now">Baru saja</string>
|
||||||
<string name="long_ago">Dulu kala</string>
|
<string name="long_ago">Lama</string>
|
||||||
<string name="group">Kelompok</string>
|
<string name="group">Kelompok</string>
|
||||||
<string name="today">Hari ini</string>
|
<string name="today">Hari ini</string>
|
||||||
<string name="tap_to_try_again">Ketuk untuk coba lagi</string>
|
<string name="tap_to_try_again">Ketuk untuk coba lagi</string>
|
||||||
<string name="reader_mode_hint">Konfigurasi yang dipilih akan diingat untuk manga ini</string>
|
<string name="reader_mode_hint">Konfigurasi yang dipilih akan diingat untuk komik ini</string>
|
||||||
<string name="silent">Diam</string>
|
<string name="silent">Diam</string>
|
||||||
<string name="captcha_required">CAPTCHA diperlukan</string>
|
<string name="captcha_required">CAPTCHA diperlukan</string>
|
||||||
<string name="captcha_solve">Selesaikan</string>
|
<string name="captcha_solve">Selesaikan</string>
|
||||||
@@ -156,7 +156,7 @@
|
|||||||
<string name="clear_feed">Bersihkan umpan</string>
|
<string name="clear_feed">Bersihkan umpan</string>
|
||||||
<string name="check_for_new_chapters">Periksa bab baru</string>
|
<string name="check_for_new_chapters">Periksa bab baru</string>
|
||||||
<string name="auth_required">Masuk untuk melihat konten ini</string>
|
<string name="auth_required">Masuk untuk melihat konten ini</string>
|
||||||
<string name="_and_x_more">…dan %1$d lagi</string>
|
<string name="_and_x_more">…dan %1$d lainnya</string>
|
||||||
<string name="next">Selanjutnya</string>
|
<string name="next">Selanjutnya</string>
|
||||||
<string name="protect_application_subtitle">Masukkan kata sandi untuk memulai aplikasi</string>
|
<string name="protect_application_subtitle">Masukkan kata sandi untuk memulai aplikasi</string>
|
||||||
<string name="confirm">Konfirmasi</string>
|
<string name="confirm">Konfirmasi</string>
|
||||||
@@ -175,26 +175,26 @@
|
|||||||
<string name="text_clear_cookies_prompt">Anda akan keluar dari semua sumber</string>
|
<string name="text_clear_cookies_prompt">Anda akan keluar dari semua sumber</string>
|
||||||
<string name="genres">Genre</string>
|
<string name="genres">Genre</string>
|
||||||
<string name="state_finished">Selesai</string>
|
<string name="state_finished">Selesai</string>
|
||||||
<string name="state_ongoing">Sedang dibaca</string>
|
<string name="state_ongoing">Berlanjut</string>
|
||||||
<string name="date_format">Format tanggal</string>
|
<string name="date_format">Format tanggal</string>
|
||||||
<string name="system_default">Standar</string>
|
<string name="system_default">Standar</string>
|
||||||
<string name="exclude_nsfw_from_history">Kecualikan manga NSFW dari riwayat</string>
|
<string name="exclude_nsfw_from_history">Kecualikan komik NSFW dari riwayat</string>
|
||||||
<string name="show_pages_numbers">Halaman bernomor</string>
|
<string name="show_pages_numbers">Nomor halaman</string>
|
||||||
<string name="enabled_sources">Sumber yang digunakan</string>
|
<string name="enabled_sources">Sumber yang digunakan</string>
|
||||||
<string name="available_sources">Sumber yang tersedia</string>
|
<string name="available_sources">Sumber yang tersedia</string>
|
||||||
<string name="dynamic_theme">Tema dinamis</string>
|
<string name="dynamic_theme">Tema dinamis</string>
|
||||||
<string name="dynamic_theme_summary">Gunakan tema yang dibuat pada skema warna gambar latar belakang Anda</string>
|
<string name="dynamic_theme_summary">Gunakan tema yang dibuat pada skema warna gambar latar belakang Anda</string>
|
||||||
<string name="importing_progress">Mengimpor manga: %1$d dari %2$d</string>
|
<string name="importing_progress">Mengimpor komik: %1$d dari %2$d</string>
|
||||||
<string name="screenshots_policy">Kebijakan tangkapan layar</string>
|
<string name="screenshots_policy">Kebijakan tangkapan layar</string>
|
||||||
<string name="screenshots_allow">Bolehkan</string>
|
<string name="screenshots_allow">Bolehkan</string>
|
||||||
<string name="screenshots_block_nsfw">Blokir pada NSFW</string>
|
<string name="screenshots_block_nsfw">Blokir pada NSFW</string>
|
||||||
<string name="screenshots_block_all">Selalu blokir</string>
|
<string name="screenshots_block_all">Selalu blokir</string>
|
||||||
<string name="suggestions">Saran</string>
|
<string name="suggestions">Saran</string>
|
||||||
<string name="suggestions_enable">Aktifkan saran</string>
|
<string name="suggestions_enable">Aktifkan saran</string>
|
||||||
<string name="suggestions_summary">Sarankan manga berdasarkan preferensi Anda</string>
|
<string name="suggestions_summary">Sarankan komik berdasarkan preferensi Anda</string>
|
||||||
<string name="suggestions_info">Semua data dianalisis secara lokal di perangkat ini. Tidak ada transfer data personal ke layanan apa pun</string>
|
<string name="suggestions_info">Semua data dianalisis secara lokal di perangkat ini. Tidak ada transfer data personal ke layanan apa pun</string>
|
||||||
<string name="text_suggestion_holder">Mulai membaca manga dan Anda akan mendapatkan saran yang dipersonalisasi</string>
|
<string name="text_suggestion_holder">Mulai membaca komik dan Anda akan mendapatkan saran yang dipersonalisasi</string>
|
||||||
<string name="exclude_nsfw_from_suggestions">Jangan menyarankan manga NSFW</string>
|
<string name="exclude_nsfw_from_suggestions">Jangan menyarankan komik NSFW</string>
|
||||||
<string name="always">Selalu</string>
|
<string name="always">Selalu</string>
|
||||||
<string name="preload_pages">Muat ulang halaman</string>
|
<string name="preload_pages">Muat ulang halaman</string>
|
||||||
<string name="logged_in_as">Masuk sebagai %s</string>
|
<string name="logged_in_as">Masuk sebagai %s</string>
|
||||||
@@ -203,13 +203,13 @@
|
|||||||
<string name="filter_load_error">Tidak bisa memuat daftar genre</string>
|
<string name="filter_load_error">Tidak bisa memuat daftar genre</string>
|
||||||
<string name="reset_filter">Atur ulang filter</string>
|
<string name="reset_filter">Atur ulang filter</string>
|
||||||
<string name="find_genre">Cari genre</string>
|
<string name="find_genre">Cari genre</string>
|
||||||
<string name="onboard_text">Pilih bahasa manga yang ingin Anda baca. Anda bisa mengubahnya nanti di pengaturan.</string>
|
<string name="onboard_text">Pilih bahasa komik yang ingin Anda baca. Anda bisa mengubahnya nanti di pengaturan.</string>
|
||||||
<string name="never">Jangan Pernah</string>
|
<string name="never">Jangan Pernah</string>
|
||||||
<string name="only_using_wifi">Hanya di Wi-Fi</string>
|
<string name="only_using_wifi">Hanya di Wi-Fi</string>
|
||||||
<string name="nsfw">18+</string>
|
<string name="nsfw">18+</string>
|
||||||
<string name="various_languages">Berbagai bahasa</string>
|
<string name="various_languages">Berbagai bahasa</string>
|
||||||
<string name="search_chapters">Cari bab</string>
|
<string name="search_chapters">Cari bab</string>
|
||||||
<string name="chapters_empty">Tidak ada bab di manga ini</string>
|
<string name="chapters_empty">Tidak ada bab di komik ini</string>
|
||||||
<string name="percent_string_pattern">%1$s%%</string>
|
<string name="percent_string_pattern">%1$s%%</string>
|
||||||
<string name="appearance">Tampilan</string>
|
<string name="appearance">Tampilan</string>
|
||||||
<string name="content">Konten</string>
|
<string name="content">Konten</string>
|
||||||
@@ -217,16 +217,16 @@
|
|||||||
<string name="suggestions_excluded_genres_summary">Tentukan genre yang Anda tidak ingin lihat di saran</string>
|
<string name="suggestions_excluded_genres_summary">Tentukan genre yang Anda tidak ingin lihat di saran</string>
|
||||||
<string name="text_delete_local_manga_batch">Hapus yang dipilih dari perangkat secara permanen\?</string>
|
<string name="text_delete_local_manga_batch">Hapus yang dipilih dari perangkat secara permanen\?</string>
|
||||||
<string name="removal_completed">Selesai menghapus</string>
|
<string name="removal_completed">Selesai menghapus</string>
|
||||||
<string name="batch_manga_save_confirm">Apakah Anda yakin ingin mengunduh semua manga yang dipilih dengan semua babnya\? Tindakan ini akan memakan banyak data dan penyimpanan</string>
|
<string name="batch_manga_save_confirm">Unduh semua komik yang dipilih dan babnya\? Ini dapat mengkonsumsi banyak lalu lintas jaringan dan penyimpanan.</string>
|
||||||
<string name="parallel_downloads">Unduhan paralel</string>
|
<string name="parallel_downloads">Unduhan paralel</string>
|
||||||
<string name="download_slowdown">Perlambatan unduhan</string>
|
<string name="download_slowdown">Perlambat unduhan</string>
|
||||||
<string name="suggestions_updating">Saran diperbarui</string>
|
<string name="suggestions_updating">Pembaruan saran</string>
|
||||||
<string name="download_slowdown_summary">Membantu menghidari pemblokiran alamat IP Anda</string>
|
<string name="download_slowdown_summary">Membantu menghidari pemblokiran alamat IP Anda</string>
|
||||||
<string name="chapters_will_removed_background">Bab akan dihapus di latar belakang. Akan memakan beberapa waktu</string>
|
<string name="chapters_will_removed_background">Bab akan dihapus di latar belakang. Akan memakan beberapa waktu</string>
|
||||||
<string name="hide">Sembunyikan</string>
|
<string name="hide">Sembunyikan</string>
|
||||||
<string name="new_sources_text">Sumber manga baru tersedia</string>
|
<string name="new_sources_text">Tersedia sumber komik baru</string>
|
||||||
<string name="check_new_chapters_title">Periksa bab baru dan beri tahu tentang itu</string>
|
<string name="check_new_chapters_title">Periksa bab baru dan beri tahu tentang itu</string>
|
||||||
<string name="show_notification_new_chapters_on">Anda akan menerima pemberitahuan tentang pembaruan manga yang Anda baca</string>
|
<string name="show_notification_new_chapters_on">Anda akan menerima pemberitahuan tentang pembaruan komik yang Anda baca</string>
|
||||||
<string name="show_notification_new_chapters_off">Anda tidak akan menerima pemberitahuan, tapi bab baru akan disorot di daftar</string>
|
<string name="show_notification_new_chapters_off">Anda tidak akan menerima pemberitahuan, tapi bab baru akan disorot di daftar</string>
|
||||||
<string name="notifications_enable">Aktifkan pemberitahuan</string>
|
<string name="notifications_enable">Aktifkan pemberitahuan</string>
|
||||||
<string name="name">Nama</string>
|
<string name="name">Nama</string>
|
||||||
@@ -240,9 +240,9 @@
|
|||||||
<string name="bookmark_added">Markah ditambahkan</string>
|
<string name="bookmark_added">Markah ditambahkan</string>
|
||||||
<string name="undo">Urung</string>
|
<string name="undo">Urung</string>
|
||||||
<string name="removed_from_history">Dihapus dari riwayat</string>
|
<string name="removed_from_history">Dihapus dari riwayat</string>
|
||||||
<string name="default_mode">Mode standar</string>
|
<string name="default_mode">Mode pembaca</string>
|
||||||
<string name="detect_reader_mode">Otomatis deteksi mode pembaca</string>
|
<string name="detect_reader_mode">Otomatis deteksi mode pembaca</string>
|
||||||
<string name="detect_reader_mode_summary">Secara otomatis mendeteksi jika manga itu webtoon</string>
|
<string name="detect_reader_mode_summary">Secara otomatis mendeteksi jika komik itu webtoon</string>
|
||||||
<string name="create_category">Kategori baru</string>
|
<string name="create_category">Kategori baru</string>
|
||||||
<string name="show_notification_app_update">Tampilkan pemberitahuan ketika versi baru tersedia</string>
|
<string name="show_notification_app_update">Tampilkan pemberitahuan ketika versi baru tersedia</string>
|
||||||
<string name="light_indicator">Indikator LED</string>
|
<string name="light_indicator">Indikator LED</string>
|
||||||
@@ -250,7 +250,7 @@
|
|||||||
<string name="favourites_categories">Kategori favorit</string>
|
<string name="favourites_categories">Kategori favorit</string>
|
||||||
<string name="remove_category">Hapus</string>
|
<string name="remove_category">Hapus</string>
|
||||||
<string name="clear_updates_feed">Bersihkan umpan pembaruan</string>
|
<string name="clear_updates_feed">Bersihkan umpan pembaruan</string>
|
||||||
<string name="right_to_left">Kanan ke kiri (←)</string>
|
<string name="right_to_left">Kanan ke kiri</string>
|
||||||
<string name="waiting_for_network">Menunggu jaringan…</string>
|
<string name="waiting_for_network">Menunggu jaringan…</string>
|
||||||
<string name="rotate_screen">Putar layar</string>
|
<string name="rotate_screen">Putar layar</string>
|
||||||
<string name="feed_will_update_soon">Pembaruan umpan akan dimulai</string>
|
<string name="feed_will_update_soon">Pembaruan umpan akan dimulai</string>
|
||||||
@@ -262,7 +262,7 @@
|
|||||||
<string name="app_version">Versi %s</string>
|
<string name="app_version">Versi %s</string>
|
||||||
<string name="internal_storage">Penyimpanan internal</string>
|
<string name="internal_storage">Penyimpanan internal</string>
|
||||||
<string name="external_storage">Penyimpanan eksternal</string>
|
<string name="external_storage">Penyimpanan eksternal</string>
|
||||||
<string name="error">Galat</string>
|
<string name="error">Kesalahan</string>
|
||||||
<string name="checking_for_updates">Memeriksa pembaruan…</string>
|
<string name="checking_for_updates">Memeriksa pembaruan…</string>
|
||||||
<string name="no_update_available">Tidak ada pembaruan yang tersedia</string>
|
<string name="no_update_available">Tidak ada pembaruan yang tersedia</string>
|
||||||
<string name="black_dark_theme_summary">Menggunakan daya lebih sedikit pada layar AMOLED</string>
|
<string name="black_dark_theme_summary">Menggunakan daya lebih sedikit pada layar AMOLED</string>
|
||||||
@@ -281,15 +281,15 @@
|
|||||||
<string name="about_feedback">Umpan Balik</string>
|
<string name="about_feedback">Umpan Balik</string>
|
||||||
<string name="error_empty_name">Anda harus memasukkan sebuah nama</string>
|
<string name="error_empty_name">Anda harus memasukkan sebuah nama</string>
|
||||||
<string name="taps_on_edges">Tekan di tepi</string>
|
<string name="taps_on_edges">Tekan di tepi</string>
|
||||||
<string name="large_manga_save_confirm">Manga ini memiliki %s. Simpan semuanya\?</string>
|
<string name="large_manga_save_confirm">Komik ini memiliki %s. Simpan semuanya\?</string>
|
||||||
<string name="zoom_mode_fit_center">Cocokkan tengah</string>
|
<string name="zoom_mode_fit_center">Pas tengah</string>
|
||||||
<string name="zoom_mode_fit_height">Cocokkan dengan tinggi</string>
|
<string name="zoom_mode_fit_height">Pas tinggi</string>
|
||||||
<string name="zoom_mode_fit_width">Cocokkan dengan lebar</string>
|
<string name="zoom_mode_fit_width">Pas lebar</string>
|
||||||
<string name="reverse">Balik</string>
|
<string name="reverse">Balik</string>
|
||||||
<string name="queued">Diantrikan</string>
|
<string name="queued">Antri</string>
|
||||||
<string name="auth_complete">Berhasil Diotorisasi</string>
|
<string name="auth_complete">Diotorisasi</string>
|
||||||
<string name="text_local_holder_secondary">Simpan dari sumber daring atau berkas impor.</string>
|
<string name="text_local_holder_secondary">Simpan dari sumber daring atau berkas impor.</string>
|
||||||
<string name="text_shelf_holder_primary">Manga Anda akan ditampilkan di sini</string>
|
<string name="text_shelf_holder_primary">Komik Anda akan ditampilkan di sini</string>
|
||||||
<string name="text_shelf_holder_secondary">Cari apa untuk dibaca di bagian «Jelajah»</string>
|
<string name="text_shelf_holder_secondary">Cari apa untuk dibaca di bagian «Jelajah»</string>
|
||||||
<string name="email_enter_hint">Masukkan surel Anda untuk melanjutkan</string>
|
<string name="email_enter_hint">Masukkan surel Anda untuk melanjutkan</string>
|
||||||
<string name="status_re_reading">Dibaca ulang</string>
|
<string name="status_re_reading">Dibaca ulang</string>
|
||||||
@@ -307,17 +307,17 @@
|
|||||||
<string name="status_on_hold">Ditunda</string>
|
<string name="status_on_hold">Ditunda</string>
|
||||||
<string name="invalid_domain_message">Domain tidak valid</string>
|
<string name="invalid_domain_message">Domain tidak valid</string>
|
||||||
<string name="no_bookmarks_yet">Belum ada markah</string>
|
<string name="no_bookmarks_yet">Belum ada markah</string>
|
||||||
<string name="no_bookmarks_summary">Anda bisa membuat markah ketika membaca manga</string>
|
<string name="no_bookmarks_summary">Anda bisa membuat markah ketika membaca komik</string>
|
||||||
<string name="bookmarks_removed">Markah dihapus</string>
|
<string name="bookmarks_removed">Markah dihapus</string>
|
||||||
<string name="no_manga_sources">Tidak ada sumber manga</string>
|
<string name="no_manga_sources">Tidak ada sumber komik</string>
|
||||||
<string name="random">Acak</string>
|
<string name="random">Acak</string>
|
||||||
<string name="empty">Kosong</string>
|
<string name="empty">Kosong</string>
|
||||||
<string name="changelog">Daftar Perubahan</string>
|
<string name="changelog">Daftar Perubahan</string>
|
||||||
<string name="removed_from_s">Dihapus dari \"%s\"</string>
|
<string name="removed_from_s">Dihapus dari \"%s\"</string>
|
||||||
<string name="reader_info_bar">Tampilkan bilah informasi di pembaca</string>
|
<string name="reader_info_bar">Tampilkan bilah informasi di pembaca</string>
|
||||||
<string name="importing_manga">Mengimpor manga</string>
|
<string name="importing_manga">Mengimpor komik</string>
|
||||||
<string name="last_2_hours">Dua jam terakhir</string>
|
<string name="last_2_hours">Dua jam terakhir</string>
|
||||||
<string name="downloading_manga">Mengunduh manga</string>
|
<string name="downloading_manga">Mengunduh komik</string>
|
||||||
<string name="show_all">Tampilkan semua</string>
|
<string name="show_all">Tampilkan semua</string>
|
||||||
<string name="history_cleared">Riwayat dihapus</string>
|
<string name="history_cleared">Riwayat dihapus</string>
|
||||||
<string name="clear_all_history">Hapus semua riwayat</string>
|
<string name="clear_all_history">Hapus semua riwayat</string>
|
||||||
@@ -328,49 +328,97 @@
|
|||||||
<string name="not_found_404">Konten tidak ditemukan atau dihapus</string>
|
<string name="not_found_404">Konten tidak ditemukan atau dihapus</string>
|
||||||
<string name="exit_confirmation_summary">Tekan Kembali dua kali untuk keluar dari aplikasi</string>
|
<string name="exit_confirmation_summary">Tekan Kembali dua kali untuk keluar dari aplikasi</string>
|
||||||
<string name="exit_confirmation">Konfirmasi keluar</string>
|
<string name="exit_confirmation">Konfirmasi keluar</string>
|
||||||
<string name="pages_cache">Tembolok halaman</string>
|
<string name="pages_cache">Cache halaman</string>
|
||||||
<string name="other_cache">Tembolok lainnya</string>
|
<string name="other_cache">Cache lainnya</string>
|
||||||
<string name="storage_usage">Penggunaan penyimpanan</string>
|
<string name="storage_usage">Penggunaan penyimpanan</string>
|
||||||
<string name="available">Tersedia</string>
|
<string name="available">Tersedia</string>
|
||||||
<string name="incognito_mode">Mode Incognito</string>
|
<string name="incognito_mode">Mode penyamaran</string>
|
||||||
<string name="app_update_available_s">Pembaruan aplikasi tersedia: %s</string>
|
<string name="app_update_available_s">Pembaruan aplikasi tersedia: %s</string>
|
||||||
<string name="automatic_scroll">Gulir otomatis</string>
|
<string name="automatic_scroll">Gulir otomatis</string>
|
||||||
<string name="comics_archive">Arsip komik</string>
|
<string name="comics_archive">Arsip komik</string>
|
||||||
<string name="folder_with_images">Folder dengan gambar</string>
|
<string name="folder_with_images">Folder dengan gambar</string>
|
||||||
<string name="import_completed_hint">Anda bisa menghapus berkas asli dari penyimpanan untuk menghemat ruang</string>
|
<string name="import_completed_hint">Anda bisa menghapus berkas asli dari penyimpanan untuk menghemat ruang</string>
|
||||||
<string name="feed">Umpan</string>
|
<string name="feed">Umpan</string>
|
||||||
<string name="manga_error_description_pattern">Detail galat:<br><tt>%1$s</tt><br><br>1. Coba untuk <a href=%2$s>membuka manga di peramban web</a> untuk memastikan bahwa itu tersedia di sumbernya<br>2. Jika tersedia, kirim laporan galat ke pengembang.</string>
|
<string name="manga_error_description_pattern">Detail kesalahan:<br><tt>%1$s</tt><br><br>1. Coba untuk <a href=%2$s>membuka komik di peramban web</a> untuk memastikan bahwa itu tersedia di sumbernya<br>2. Jika tersedia, kirim laporan kesalahan ke pengembang.</string>
|
||||||
<string name="brightness">Kecerahan</string>
|
<string name="brightness">Kecerahan</string>
|
||||||
<string name="contrast">Kontras</string>
|
<string name="contrast">Kontras</string>
|
||||||
<string name="reset">Atur Ulang</string>
|
<string name="reset">Atur Ulang</string>
|
||||||
<string name="color_correction_hint">Pengaturan warna yang dipilih akan diingat untuk manga ini</string>
|
<string name="color_correction_hint">Pengaturan warna yang dipilih akan diingat untuk komik ini</string>
|
||||||
<string name="text_unsaved_changes_prompt">Anda memiliki perubahan belum tersimpan, apakah Anda ingin menyimpannya atau membuangnya\?</string>
|
<string name="text_unsaved_changes_prompt">Menyimpan atau membuang perubahan yang belum disimpan\?</string>
|
||||||
<string name="discard">Buang</string>
|
<string name="discard">Buang</string>
|
||||||
<string name="use_fingerprint">Gunakan sidik jari jika tersedia</string>
|
<string name="use_fingerprint">Gunakan sidik jari jika tersedia</string>
|
||||||
<string name="appwidget_shelf_description">Manga dari favorit Anda</string>
|
<string name="appwidget_shelf_description">Komik dari favorit Anda</string>
|
||||||
<string name="appwidget_recent_description">Manga yang baru-baru ini Anda baca</string>
|
<string name="appwidget_recent_description">Komik yang baru-baru ini Anda baca</string>
|
||||||
<string name="data_deletion">Penghapusan data</string>
|
<string name="data_deletion">Penghapusan data</string>
|
||||||
<string name="account_already_exists">Akun sudah ada</string>
|
<string name="account_already_exists">Akun sudah ada</string>
|
||||||
<string name="back">Kembali</string>
|
<string name="back">Kembali</string>
|
||||||
<string name="disable_battery_optimization_summary">Membantu pemeriksaan pembaruan di latar belakang</string>
|
<string name="disable_battery_optimization_summary">Membantu pemeriksaan pembaruan di latar belakang</string>
|
||||||
<string name="crash_text">Ada sesuatu yang salah. Mohon untuk mengirim laporan kutu (bug) ke pengembang untuk membantu kami memperbaikinya.</string>
|
<string name="crash_text">Ada sesuatu yang salah. Mohon untuk mengirim laporan kutu (bug) ke pengembang untuk membantu kami memperbaikinya.</string>
|
||||||
<string name="report">Lapor</string>
|
<string name="report">Lapor</string>
|
||||||
<string name="exclude_nsfw_from_history_summary">Manga yang ditandai sebagai NSFW tidak akan ditambahkan ke riwayat dan progres Anda tidak akan disimpan</string>
|
<string name="exclude_nsfw_from_history_summary">Komik yang ditandai sebagai NSFW tidak akan ditambahkan ke riwayat dan pencapaian Anda tidak akan disimpan</string>
|
||||||
<string name="clear_cookies_summary">Bisa membantu dalam beberapa masalah. Seluruh otorisasi akan menjadi tidak valid</string>
|
<string name="clear_cookies_summary">Bisa membantu dalam beberapa masalah. Seluruh otorisasi akan menjadi tidak valid</string>
|
||||||
<string name="manage">Kelola</string>
|
<string name="manage">Kelola</string>
|
||||||
<string name="no_manga_sources_text">Aktifkan sumber manga untuk membaca manga daring</string>
|
<string name="no_manga_sources_text">Aktifkan sumber komik untuk membaca komik daring</string>
|
||||||
<string name="categories_delete_confirm">Apakah Anda yakin ingin menghapus kategori favorit yang dipilih\?
|
<string name="categories_delete_confirm">Apakah Anda yakin ingin menghapus kategori favorit yang dipilih\?
|
||||||
\n Semua manga di sana akan hilang dan ini tidak bisa diurungkan.</string>
|
\nSemua komik di sana akan hilang dan ini tidak bisa diurungkan.</string>
|
||||||
<string name="reorder">Atur Ulang</string>
|
<string name="reorder">Atur Ulang</string>
|
||||||
<string name="saved_manga">Manga tersimpan</string>
|
<string name="saved_manga">Komik tersimpan</string>
|
||||||
<string name="confirm_exit">Tekan Kembali lagi untuk keluar</string>
|
<string name="confirm_exit">Tekan Kembali lagi untuk keluar</string>
|
||||||
<string name="no_chapters">Tidak ada bab</string>
|
<string name="no_chapters">Tidak ada bab</string>
|
||||||
<string name="history_shortcuts">Tampilkan pintasan manga baru-baru ini</string>
|
<string name="history_shortcuts">Tampilkan pintasan komik baru-baru ini</string>
|
||||||
<string name="history_shortcuts_summary">Buat manga baru-baru ini tersedia dengan menekan panjang pada ikon aplikasi</string>
|
<string name="history_shortcuts_summary">Buat komik baru-baru ini tersedia dengan menekan panjang pada ikon aplikasi</string>
|
||||||
<string name="select_range">Pilih jangkauan</string>
|
<string name="select_range">Pilih jangkauan</string>
|
||||||
<string name="disable_all">Matikan semua</string>
|
<string name="disable_all">Matikan semua</string>
|
||||||
<string name="gestures_only">Hanya gestur</string>
|
<string name="gestures_only">Hanya gestur</string>
|
||||||
<string name="dns_over_https">DNS melalui HTTPS</string>
|
<string name="dns_over_https">DNS over HTTPS</string>
|
||||||
<string name="status_dropped">Istirahat</string>
|
<string name="status_dropped">Istirahat</string>
|
||||||
<string name="off_short">Mati</string>
|
<string name="off_short">Mati</string>
|
||||||
|
<string name="theme_name_mamimi">Mamimi</string>
|
||||||
|
<string name="server_error">Kesalahan sisi server (%1$d). Silakan coba lagi nanti</string>
|
||||||
|
<string name="compact">kompak</string>
|
||||||
|
<string name="prefetch_content">Pramuat konten</string>
|
||||||
|
<string name="memory_usage_pattern">%s - %s</string>
|
||||||
|
<string name="nothing_here">Tidak ada apapun di sini</string>
|
||||||
|
<string name="reader_control_ltr_summary">Ketuk di tepi kanan atau menekan tombol kanan akan selalu beralih ke halaman berikutnya</string>
|
||||||
|
<string name="source_disabled">Sumber dinonaktifkan</string>
|
||||||
|
<string name="mark_as_current">Tandai sebagai saat ini</string>
|
||||||
|
<string name="show_suspicious_content">Tampilkan konten yang mencurigakan</string>
|
||||||
|
<string name="scrobbling_empty_hint">Untuk melacak kemajuan membaca, pilih Menu → Lacak di layar detail komik.</string>
|
||||||
|
<string name="services">Layanan</string>
|
||||||
|
<string name="clear_new_chapters_counters">Juga informasi yang jelas tentang bab baru</string>
|
||||||
|
<string name="network_unavailable_hint">Nyalakan Wi-Fi atau jaringan seluler untuk membaca komik daring</string>
|
||||||
|
<string name="user_agent">Tajuk Agen Pengguna</string>
|
||||||
|
<string name="settings_apply_restart_required">Mulai ulang aplikasi untuk menerapkan perubahan ini</string>
|
||||||
|
<string name="theme_name_kanade">Kanade</string>
|
||||||
|
<string name="share_logs">Bagikan log</string>
|
||||||
|
<string name="error_no_space_left">Tidak ada ruang tersisa di perangkat</string>
|
||||||
|
<string name="allow_unstable_updates">Izinkan pembaruan yang tidak stabil</string>
|
||||||
|
<string name="allow_unstable_updates_summary">Usulkan pembaruan ke versi beta</string>
|
||||||
|
<string name="download_started">Unduh dimulai</string>
|
||||||
|
<string name="show_reading_indicators">Tampilkan indikator kemajuan membaca</string>
|
||||||
|
<string name="show_reading_indicators_summary">Tampilkan persentase baca dalam riwayat dan favorit</string>
|
||||||
|
<string name="language">Bahasa</string>
|
||||||
|
<string name="text_search_holder_secondary">Cobalah untuk merubah kueri.</string>
|
||||||
|
<string name="zoom_mode_keep_start">Tetap di awal</string>
|
||||||
|
<string name="seconds_pattern">%ss</string>
|
||||||
|
<string name="reader_info_pattern">Bab. %1$d/%2$d Hal. %3$d/%4$d</string>
|
||||||
|
<string name="enable_logging">Aktifkan pencatatan</string>
|
||||||
|
<string name="enable_logging_summary">Rekam beberapa tindakan untuk tujuan debug</string>
|
||||||
|
<string name="theme_name_dynamic">Dinamis</string>
|
||||||
|
<string name="color_theme">Skema warna</string>
|
||||||
|
<string name="show_in_grid_view">Perlihatkan dalam tampilan kisi</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="local_manga_processing">Pemrosesan komik tersimpan</string>
|
||||||
|
<string name="disable_battery_optimization">Nonaktifkan pengoptimalan baterai</string>
|
||||||
|
<string name="reader_control_ltr">Kontrol pembaca ergonomis</string>
|
||||||
|
<string name="color_correction">Koreksi warna</string>
|
||||||
|
<string name="reader_slider">Perlihatkan penggeser peralihan halaman</string>
|
||||||
|
<string name="webtoon_zoom">Zoom webtoon</string>
|
||||||
|
<string name="webtoon_zoom_summary">Izinkan gerakan memperbesar/memperkecil tampilan dalam mode webtoon (beta)</string>
|
||||||
|
<string name="different_languages">Berbagai bahasa</string>
|
||||||
|
<string name="network_unavailable">Jaringan tidak tersedia</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -403,8 +403,6 @@
|
|||||||
<string name="enable_logging_summary">Registra alcune azioni a scopo di debug</string>
|
<string name="enable_logging_summary">Registra alcune azioni a scopo di debug</string>
|
||||||
<string name="enable_logging">Abilita la registrazione</string>
|
<string name="enable_logging">Abilita la registrazione</string>
|
||||||
<string name="show_suspicious_content">Mostra il contenuto sospetto</string>
|
<string name="show_suspicious_content">Mostra il contenuto sospetto</string>
|
||||||
<string name="theme_name_mint">Menta</string>
|
|
||||||
<string name="theme_name_october">Ottobre</string>
|
|
||||||
<string name="theme_name_dynamic">Dinamico</string>
|
<string name="theme_name_dynamic">Dinamico</string>
|
||||||
<string name="color_theme">Schema colori</string>
|
<string name="color_theme">Schema colori</string>
|
||||||
<string name="show_in_grid_view">Mostra nella vista griglia</string>
|
<string name="show_in_grid_view">Mostra nella vista griglia</string>
|
||||||
|
|||||||
@@ -327,7 +327,6 @@
|
|||||||
<string name="empty">空</string>
|
<string name="empty">空</string>
|
||||||
<string name="changelog">変更ログ</string>
|
<string name="changelog">変更ログ</string>
|
||||||
<string name="explore">探検</string>
|
<string name="explore">探検</string>
|
||||||
<string name="tools">ツール</string>
|
|
||||||
<string name="exit_confirmation_summary">アプリを終了するには、戻るを2回押してください</string>
|
<string name="exit_confirmation_summary">アプリを終了するには、戻るを2回押してください</string>
|
||||||
<string name="saved_manga">保存したマンガ</string>
|
<string name="saved_manga">保存したマンガ</string>
|
||||||
<string name="app_update_available_s">アプリケーションのアップデートが利用可能: %s</string>
|
<string name="app_update_available_s">アプリケーションのアップデートが利用可能: %s</string>
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
<string name="webtoon">웹툰</string>
|
<string name="webtoon">웹툰</string>
|
||||||
<string name="clear_search_history">검색 기록 지우기</string>
|
<string name="clear_search_history">검색 기록 지우기</string>
|
||||||
<string name="reader_settings">읽기 모드</string>
|
<string name="reader_settings">읽기 모드</string>
|
||||||
<string name="network_consumption_warning">이 동작은 많은 데이터 사용을</string>
|
<string name="network_consumption_warning">이 동작은 많은 데이터 사용을 야기할 수 있습니다</string>
|
||||||
<string name="clear_thumbs_cache">썸네일 캐시 지우기</string>
|
<string name="clear_thumbs_cache">썸네일 캐시 지우기</string>
|
||||||
<string name="dont_ask_again">다시 묻지 않음</string>
|
<string name="dont_ask_again">다시 묻지 않음</string>
|
||||||
<string name="cancelling_">취소 중…</string>
|
<string name="cancelling_">취소 중…</string>
|
||||||
@@ -105,4 +105,250 @@
|
|||||||
<string name="read_later">나중에 읽기</string>
|
<string name="read_later">나중에 읽기</string>
|
||||||
<string name="search_results">검색 결과</string>
|
<string name="search_results">검색 결과</string>
|
||||||
<string name="size_s">크기: %s</string>
|
<string name="size_s">크기: %s</string>
|
||||||
|
<string name="computing_">계산중…</string>
|
||||||
|
<string name="clear">지우기</string>
|
||||||
|
<string name="text_clear_history_prompt">모든 기록을 영구적으로 삭제하시겠어요\?</string>
|
||||||
|
<string name="restart">재시작</string>
|
||||||
|
<string name="text_categories_holder">카테고리를 이용하여 선호작을 관리하세요. «+»을 눌러 카테고리를 만들 수 있습니다</string>
|
||||||
|
<string name="text_local_holder_primary">먼저 아무거나 저장해보세요</string>
|
||||||
|
<string name="text_feed_holder">여기서 읽고 있는 만화의 새로운 챕터들을 확인할 수 있습니다</string>
|
||||||
|
<string name="related">연관된</string>
|
||||||
|
<string name="protect_application">앱 잠금 활성화</string>
|
||||||
|
<string name="protect_application_summary">Kotatsu를 실행할 때마다 비밀번호 묻기</string>
|
||||||
|
<string name="check_for_updates">업데이트 확인하기</string>
|
||||||
|
<string name="update_check_failed">업데이트를 찾을 수 없음</string>
|
||||||
|
<string name="right_to_left">오른쪽에서 왼쪽</string>
|
||||||
|
<string name="zoom_mode_fit_center">가운데 맞춤</string>
|
||||||
|
<string name="no_update_available">가능한 업데이트 없음</string>
|
||||||
|
<string name="zoom_mode_fit_height">세로 맞춤</string>
|
||||||
|
<string name="tap_to_try_again">탭해서 재시도</string>
|
||||||
|
<string name="restore_backup">백업한 데이터 복원하기</string>
|
||||||
|
<string name="create_backup">백업하기</string>
|
||||||
|
<string name="data_restored">복원됨</string>
|
||||||
|
<string name="preparing_">준비중…</string>
|
||||||
|
<string name="welcome">환영합니다</string>
|
||||||
|
<string name="auth_complete">인증됨</string>
|
||||||
|
<string name="error_empty_name">이름을 입력해야 합니다</string>
|
||||||
|
<string name="about_feedback">피드백</string>
|
||||||
|
<string name="about_app_translation">번역</string>
|
||||||
|
<string name="about_app_translation_summary">이 앱을 번역하기</string>
|
||||||
|
<string name="dynamic_theme_summary">기기의 배경화면 색상을 기반으로 한 테마</string>
|
||||||
|
<string name="screenshots_block_nsfw">성인 컨텐츠에서만 차단</string>
|
||||||
|
<string name="screenshots_allow">항상 허용</string>
|
||||||
|
<string name="exclude_nsfw_from_suggestions">성인 만화(NSFW)는 추천하지 않기</string>
|
||||||
|
<string name="disabled">비활성화됨</string>
|
||||||
|
<string name="filter_load_error">장르 목록을 불러올 수 없음</string>
|
||||||
|
<string name="chapters_empty">이 만화는 챕터로 나눠져 있지 않습니다</string>
|
||||||
|
<string name="search_chapters">챕터 찾아보기</string>
|
||||||
|
<string name="chapters_will_removed_background">챕터들이 백그라운드에서 제거됩니다. 이 작업은 많은 시간이 소요될 수 있습니다</string>
|
||||||
|
<string name="download_slowdown_summary">IP 차단을 회피할 수 있게 합니다</string>
|
||||||
|
<string name="check_new_chapters_title">새로운 챕터가 나오면 알려주기</string>
|
||||||
|
<string name="standard">스탠다드</string>
|
||||||
|
<string name="text_local_holder_secondary">온라인 소스 혹은 직접 파일을 불러와 저장하기.</string>
|
||||||
|
<string name="suggestions_info">모든 데이터는 기기 안에서만 분석 및 사용되며 어떠한 서드파티 서비스들과도 공유되지 않습니다</string>
|
||||||
|
<string name="suggestions_summary">당신의 선호도를 바탕으로 만화를 추천합니다</string>
|
||||||
|
<string name="bookmark_add">북마크에 추가</string>
|
||||||
|
<string name="bookmark_remove">북마크 제거</string>
|
||||||
|
<string name="bookmarks">북마크</string>
|
||||||
|
<string name="data_deletion">데이터 삭제</string>
|
||||||
|
<string name="no_manga_sources">만화 소스 사이트 없음</string>
|
||||||
|
<string name="changelog">체인지로그</string>
|
||||||
|
<string name="history">최근에 본 만화</string>
|
||||||
|
<string name="error_occurred">오류 발생</string>
|
||||||
|
<string name="details">세부정보</string>
|
||||||
|
<string name="chapters">챕터</string>
|
||||||
|
<string name="detailed_list">자세한 목록</string>
|
||||||
|
<string name="list_mode">설정</string>
|
||||||
|
<string name="grid">그리드</string>
|
||||||
|
<string name="remote_sources">소스 사이트 관리</string>
|
||||||
|
<string name="clear_history">기록 삭제</string>
|
||||||
|
<string name="add">추가</string>
|
||||||
|
<string name="history_is_empty">아직 기록이 없습니다</string>
|
||||||
|
<string name="enter_category_name">카테고리 이름 추가</string>
|
||||||
|
<string name="create_shortcut">바로가기 추가…</string>
|
||||||
|
<string name="theme">테마</string>
|
||||||
|
<string name="_s_removed_from_history">\"%s\"가 라이브러리에서 삭제됨</string>
|
||||||
|
<string name="_s_deleted_from_local_storage">\"%s\"가 로컬 저장소에서 삭제됨</string>
|
||||||
|
<string name="operation_not_supported">지원되지 않는 동작입니다</string>
|
||||||
|
<string name="no_description">설명없음</string>
|
||||||
|
<string name="_continue">계속</string>
|
||||||
|
<string name="search_history_cleared">삭제됨</string>
|
||||||
|
<string name="gestures_only">제스쳐만 사용</string>
|
||||||
|
<string name="new_chapters">새로운 챕터</string>
|
||||||
|
<string name="text_empty_holder_primary">이 항목은 비어있는 것 같습니다…</string>
|
||||||
|
<string name="recent_manga">최근에 추가된</string>
|
||||||
|
<string name="manga_save_location">다운로드를 저장하기 위한 폴더</string>
|
||||||
|
<string name="manga_shelf">책장</string>
|
||||||
|
<string name="other_storage">기타 저장소</string>
|
||||||
|
<string name="updates_feed_cleared">삭제됨</string>
|
||||||
|
<string name="update">업데이트</string>
|
||||||
|
<string name="feed_will_update_soon">피드가 곧 업데이트 됩니다</string>
|
||||||
|
<string name="dont_check">확인하지 않기</string>
|
||||||
|
<string name="enter_password">비밀번호를 입력하세요</string>
|
||||||
|
<string name="wrong_password">잘못된 비밀번호</string>
|
||||||
|
<string name="rotate_screen">화면 회전</string>
|
||||||
|
<string name="track_sources">업데이트 확인하기</string>
|
||||||
|
<string name="repeat_password">비밀번호 재입력</string>
|
||||||
|
<string name="passwords_mismatch">일치하지 않는 비밀번호</string>
|
||||||
|
<string name="app_version">%s 버전</string>
|
||||||
|
<string name="about">정보</string>
|
||||||
|
<string name="checking_for_updates">업데이트 확인중…</string>
|
||||||
|
<string name="create_category">새로운 카테고리</string>
|
||||||
|
<string name="scale_mode">확대 설정</string>
|
||||||
|
<string name="zoom_mode_fit_width">가로 맞춤</string>
|
||||||
|
<string name="black_dark_theme">검은색</string>
|
||||||
|
<string name="black_dark_theme_summary">AMOLED 화면에서의 전력소모를 줄입니다</string>
|
||||||
|
<string name="backup_restore">백업 및 복원</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="captcha_required">CAPTCHA 설정이 필요합니다</string>
|
||||||
|
<string name="captcha_solve">해결됨</string>
|
||||||
|
<string name="clear_cookies">쿠키 삭제</string>
|
||||||
|
<string name="zoom_mode_keep_start">첫 칸에 맞춤</string>
|
||||||
|
<string name="report_github">Github에 문제 제기하기</string>
|
||||||
|
<string name="silent">무음</string>
|
||||||
|
<string name="reader_mode_hint">선택된 설정값이 항상 이 만화에 적용됩니다</string>
|
||||||
|
<string name="cookies_cleared">모든 쿠키가 삭제되었습니다</string>
|
||||||
|
<string name="text_clear_updates_feed_prompt">모든 업데이트 기록을 영구적으로 삭제하시겠습니까\?</string>
|
||||||
|
<string name="chapters_checking_progress">새로운 챕터 확인중: %2$d의 %1$d</string>
|
||||||
|
<string name="clear_feed">피드 정리</string>
|
||||||
|
<string name="check_for_new_chapters">새로운 챕터 확인하기</string>
|
||||||
|
<string name="sign_in">로그인</string>
|
||||||
|
<string name="auth_required">로그인이 필요합니다</string>
|
||||||
|
<string name="default_s">기본값: %s</string>
|
||||||
|
<string name="next">다음</string>
|
||||||
|
<string name="protect_application_subtitle">비밀번호를 입력하세요</string>
|
||||||
|
<string name="confirm">확인</string>
|
||||||
|
<string name="password_length_hint">최소 4자리 이상의 비밀번호를 입력해 주세요</string>
|
||||||
|
<string name="backup_saved">백업 저장됨</string>
|
||||||
|
<string name="tracker_warning">몇몇 기기들은 시스템이 백그라운드 작업을 방해할 수 있습니다.</string>
|
||||||
|
<string name="text_downloads_holder">다운로드 중인 도서 없음</string>
|
||||||
|
<string name="_and_x_more">…그리고 %1$d만큼 더</string>
|
||||||
|
<string name="search_only_on_s">%s에 대해서만 검색하기</string>
|
||||||
|
<string name="text_clear_search_history_prompt">모든 검색 기록을 영구적으로 삭제 하시겠어요\?</string>
|
||||||
|
<string name="other">기타</string>
|
||||||
|
<string name="read_more">더 읽기</string>
|
||||||
|
<string name="queued">대기열</string>
|
||||||
|
<string name="chapter_is_missing_text">이 챕터는 다운로드 하거나 온라인으로 읽어야 합니다.</string>
|
||||||
|
<string name="text_clear_cookies_prompt">모든 사이트에서 로그아웃됩니다</string>
|
||||||
|
<string name="genres">장르</string>
|
||||||
|
<string name="state_finished">완료됨</string>
|
||||||
|
<string name="date_format">날짜 초기화</string>
|
||||||
|
<string name="system_default">기본</string>
|
||||||
|
<string name="exclude_nsfw_from_history">기록에서 성인 만화(NSFW) 제외하기</string>
|
||||||
|
<string name="chapter_is_missing">찾으시는 챕터가 존재하지 않습니다</string>
|
||||||
|
<string name="about_feedback_4pda">4PDA에 토픽 생성하기</string>
|
||||||
|
<string name="auth_not_supported_by">%s에 로그인은 지원되지 않습니다</string>
|
||||||
|
<string name="available_sources">사용 가능한 소스 사이트</string>
|
||||||
|
<string name="dynamic_theme">동적 테마</string>
|
||||||
|
<string name="screenshots_policy">스크린샷 규칙</string>
|
||||||
|
<string name="screenshots_block_all">항상 차단</string>
|
||||||
|
<string name="suggestions">추천</string>
|
||||||
|
<string name="suggestions_enable">추천 켜기</string>
|
||||||
|
<string name="importing_progress">만화를 추가하는 중: %2$d의 %1$d</string>
|
||||||
|
<string name="text_suggestion_holder">아무 만화나 읽어보세요 당신의 기록을 바탕으로 개인화된 추천 만화를 제공합니다</string>
|
||||||
|
<string name="enabled">활성화됨</string>
|
||||||
|
<string name="reset_filter">필터 초기화</string>
|
||||||
|
<string name="find_genre">장르 찾기</string>
|
||||||
|
<string name="only_using_wifi">와이파이에 연결된 경우에만</string>
|
||||||
|
<string name="always">항상</string>
|
||||||
|
<string name="onboard_text">무슨 언어의 만화를 읽을지 선택하세요. 나중에 설정에서 이를 변경할 수 있습니다.</string>
|
||||||
|
<string name="nsfw">18+</string>
|
||||||
|
<string name="percent_string_pattern">%1$s%%</string>
|
||||||
|
<string name="content">컨텐츠</string>
|
||||||
|
<string name="preload_pages">페이지 미리 로드하기</string>
|
||||||
|
<string name="logged_in_as">%s로 로그인 됨</string>
|
||||||
|
<string name="appearance">외관</string>
|
||||||
|
<string name="suggestions_excluded_genres">제외할 장르 선택</string>
|
||||||
|
<string name="suggestions_excluded_genres_summary">추천 목록에서 보고 싶지 않은 장르를 특정합니다</string>
|
||||||
|
<string name="text_delete_local_manga_batch">선택된 항목을 기기에서 영구히 제거하시겠어요\?</string>
|
||||||
|
<string name="removal_completed">제거 완료</string>
|
||||||
|
<string name="batch_manga_save_confirm">선택된 모든 만화와 챕터들을 다운로드 받으시겠어요\? 많은 데이터와 기기 저장소 용량을 소비합니다.</string>
|
||||||
|
<string name="suggestions_updating">추천 항목 업데이트 중</string>
|
||||||
|
<string name="canceled">취소됨</string>
|
||||||
|
<string name="name">이름</string>
|
||||||
|
<string name="disable_battery_optimization">배터리 최적화 해제하기</string>
|
||||||
|
<string name="disable_battery_optimization_summary">백그라운드에서의 업데이트 확인이 안드로이드 시스템에 의해 중지되지 않습니다</string>
|
||||||
|
<string name="send">보내기</string>
|
||||||
|
<string name="use_fingerprint">가능할 경우 지문 사용</string>
|
||||||
|
<string name="select_range">범위 선택</string>
|
||||||
|
<string name="history_cleared">기록 삭제됨</string>
|
||||||
|
<string name="random">랜덤</string>
|
||||||
|
<string name="not_found_404">컨텐츠를 찾을 수 없거나 제거되었습니다</string>
|
||||||
|
<string name="downloading_manga">만화 다운로드 중</string>
|
||||||
|
<string name="incognito_mode">사생활 보호 모드</string>
|
||||||
|
<string name="app_update_available_s">애플리케이션 업데이트가 가능합니다: %s</string>
|
||||||
|
<string name="no_chapters">챕터 없음</string>
|
||||||
|
<string name="automatic_scroll">자동 스크롤</string>
|
||||||
|
<string name="reader_info_bar">리더 안에서 만화 정보 보여주기</string>
|
||||||
|
<string name="feed">피드</string>
|
||||||
|
<string name="show_notification_new_chapters_on">읽고 있는 만화의 업데이트 알림을 수신할 수 있게 됩니다</string>
|
||||||
|
<string name="show_notification_new_chapters_off">알림은 받지 못하지만 여전히 새로운 챕터들이 목록 상에서 강조 표시되어 보여집니다</string>
|
||||||
|
<string name="notifications_enable">알림 활성화</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_removed">북마크 제거됨</string>
|
||||||
|
<string name="bookmark_added">북마크 추가됨</string>
|
||||||
|
<string name="undo">실행취소</string>
|
||||||
|
<string name="removed_from_history">기록에서 지우기</string>
|
||||||
|
<string name="dns_over_https">DNS over HTTPS 활성화</string>
|
||||||
|
<string name="default_mode">기본 모드</string>
|
||||||
|
<string name="detect_reader_mode_summary">왭툰 자동 감지</string>
|
||||||
|
<string name="crash_text">오류. 저희가 고칠 수 있게 버그 정보를 보내주세요.</string>
|
||||||
|
<string name="status_planned">계획됨</string>
|
||||||
|
<string name="status_reading">읽는 중</string>
|
||||||
|
<string name="status_re_reading">다시 읽는 중</string>
|
||||||
|
<string name="status_completed">완료됨</string>
|
||||||
|
<string name="disable_all">모두 비활성화</string>
|
||||||
|
<string name="appwidget_shelf_description">선호작 목록에 존재하는 만화</string>
|
||||||
|
<string name="appwidget_recent_description">최근에 본 만화</string>
|
||||||
|
<string name="report">제보하기</string>
|
||||||
|
<string name="show_reading_indicators">읽기 진행 상황 표시</string>
|
||||||
|
<string name="exclude_nsfw_from_history_summary">성인 만화는 읽은 기록에 포함되지 않으며 읽기 진행 상황은 저장되지 않습니다</string>
|
||||||
|
<string name="show_all">모두 보여주기</string>
|
||||||
|
<string name="invalid_domain_message">유효하지 않은 도메인</string>
|
||||||
|
<string name="clear_all_history">모든 기록 삭제</string>
|
||||||
|
<string name="last_2_hours">지난 2시간</string>
|
||||||
|
<string name="manage">관리</string>
|
||||||
|
<string name="no_bookmarks_yet">아직 추가된 븍마크가 없습니다</string>
|
||||||
|
<string name="no_bookmarks_summary">만화를 읽는 도중 북마크를 추가할 수 있습니다</string>
|
||||||
|
<string name="bookmarks_removed">북마크 제거됨</string>
|
||||||
|
<string name="no_manga_sources_text">만화를 읽기 위해 만화 소스 사이트를 활성화 하세요</string>
|
||||||
|
<string name="categories_delete_confirm">정말 선택된 즐겨 찾는 카테고리를 삭제하시겠습니까\?
|
||||||
|
\n해당 카테고리의 모든 만화가 손실되며 취소할 수 없습니다.</string>
|
||||||
|
<string name="empty">비어있음</string>
|
||||||
|
<string name="confirm_exit">뒤로가기 버튼을 다시 눌러 나가기</string>
|
||||||
|
<string name="exit_confirmation_summary">뒤로가기 버튼을 두 번 눌러 앱을 종료할 수 있습니다</string>
|
||||||
|
<string name="exit_confirmation">앱 종료 확인</string>
|
||||||
|
<string name="saved_manga">저장된 만화</string>
|
||||||
|
<string name="pages_cache">페이지 캐시</string>
|
||||||
|
<string name="other_cache">기타 캐시</string>
|
||||||
|
<string name="storage_usage">저장소 사용량</string>
|
||||||
|
<string name="memory_usage_pattern">%s -%s</string>
|
||||||
|
<string name="enter_email_text">이메일을 입력하여 계속</string>
|
||||||
|
<string name="removed_from_favourites">즐겨찾기 목록에서 제거됨</string>
|
||||||
|
<string name="removed_from_s">\"%s\"에서 제거됨</string>
|
||||||
|
<string name="reader_info_pattern">챕터.%1$d/%2$d 페이지.%3$d/%4$d</string>
|
||||||
|
<string name="comics_archive">코믹스 모음</string>
|
||||||
|
<string name="import_completed">가져오기 완료</string>
|
||||||
|
<string name="import_completed_hint">본 파일을 제거함으로써 저장소 공간을 아낄 수 있습니다</string>
|
||||||
|
<string name="import_will_start_soon">가져오기가 곧 시작됩니다</string>
|
||||||
|
<string name="history_shortcuts">최근 추가된 만화 바로가기 보여주기</string>
|
||||||
|
<string name="hide">숨기기</string>
|
||||||
|
<string name="new_sources_text">새로운 만화 소스 사이트 사용 가능</string>
|
||||||
|
<string name="account_already_exists">계정이 이미 존재합니다</string>
|
||||||
|
<string name="back">뒤로가기</string>
|
||||||
|
<string name="sync">동기화</string>
|
||||||
|
<string name="sync_title">데이터 동기화 하기</string>
|
||||||
|
<string name="email_enter_hint">이메일을 입력하여 계속</string>
|
||||||
|
<string name="download_slowdown">다운로드 속도 늦추기</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -341,7 +341,6 @@
|
|||||||
<string name="exit_confirmation">Avsluttingsbekreftelse</string>
|
<string name="exit_confirmation">Avsluttingsbekreftelse</string>
|
||||||
<string name="invalid_domain_message">Ugyldig daomene</string>
|
<string name="invalid_domain_message">Ugyldig daomene</string>
|
||||||
<string name="share_logs">Del loggføring</string>
|
<string name="share_logs">Del loggføring</string>
|
||||||
<string name="theme_name_october">Oktober</string>
|
|
||||||
<string name="color_theme">Fargedrakt</string>
|
<string name="color_theme">Fargedrakt</string>
|
||||||
<string name="theme_name_dynamic">Dynamisk</string>
|
<string name="theme_name_dynamic">Dynamisk</string>
|
||||||
<string name="language">Språk</string>
|
<string name="language">Språk</string>
|
||||||
|
|||||||
35
app/src/main/res/values-ne/plurals.xml
Normal file
35
app/src/main/res/values-ne/plurals.xml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<plurals name="pages">
|
||||||
|
<item quantity="one">कुल %1$d पृष्ठ</item>
|
||||||
|
<item quantity="other">कुल %1$d पृष्ठहरू</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="new_chapters">
|
||||||
|
<item quantity="one">%1$d नयाँ अध्याय</item>
|
||||||
|
<item quantity="other">%1$d नयाँ अध्यायहरू</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="chapters">
|
||||||
|
<item quantity="one">%1$d अध्याय</item>
|
||||||
|
<item quantity="other">%1$d अध्यायहरू</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="minutes_ago">
|
||||||
|
<item quantity="one">%1$d मिनेट पहिले</item>
|
||||||
|
<item quantity="other">%1$d मिनेट पहिले</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="hours_ago">
|
||||||
|
<item quantity="one">%1$d घण्टा पहिले</item>
|
||||||
|
<item quantity="other">%1$d घण्टा पहिले</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="items">
|
||||||
|
<item quantity="one">%1$d वस्तु</item>
|
||||||
|
<item quantity="other">%1$d वस्तुहरू</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="chapters_from_x">
|
||||||
|
<item quantity="one">%2$d बाट %1$d अध्याय</item>
|
||||||
|
<item quantity="other">%2$d बाट %1$d अध्यायहरू</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="days_ago">
|
||||||
|
<item quantity="one">%1$d दिन अघि</item>
|
||||||
|
<item quantity="other">%1$d दिन पहिले</item>
|
||||||
|
</plurals>
|
||||||
|
</resources>
|
||||||
56
app/src/main/res/values-ne/strings.xml
Normal file
56
app/src/main/res/values-ne/strings.xml
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="manga_downloading_">डाउनलोड गर्दै…</string>
|
||||||
|
<string name="download_complete">डाउनलोड गरेको</string>
|
||||||
|
<string name="filter">फिल्टर</string>
|
||||||
|
<string name="dark">अँध्यारो</string>
|
||||||
|
<string name="clear">खाली गर्नुहोस्</string>
|
||||||
|
<string name="pages">पृष्ठहरू</string>
|
||||||
|
<string name="error_occurred">एउटा त्रुटि भयो</string>
|
||||||
|
<string name="list_mode">सूची मोड</string>
|
||||||
|
<string name="list">सूची</string>
|
||||||
|
<string name="try_again">पुनः प्रयास गर्नुहोस्</string>
|
||||||
|
<string name="nothing_found">केही पनि फेला परेन</string>
|
||||||
|
<string name="read">पढ्नुहोस्</string>
|
||||||
|
<string name="local_storage">लोकल भण्डारण</string>
|
||||||
|
<string name="history">इतिहास</string>
|
||||||
|
<string name="network_error">नेटवर्क त्रुटि</string>
|
||||||
|
<string name="chapters">अध्यायहरू</string>
|
||||||
|
<string name="settings">सेटिङहरू</string>
|
||||||
|
<string name="remote_sources">रिमोट स्रोतहरू</string>
|
||||||
|
<string name="loading_">लोड हुँदै…</string>
|
||||||
|
<string name="clear_history">इतिहास खाली गर्नुहोस्</string>
|
||||||
|
<string name="you_have_not_favourites_yet">अहिले कुनै मनपर्ने छैन</string>
|
||||||
|
<string name="add_to_favourites">मनपर्ने मा राख्नुहोस्</string>
|
||||||
|
<string name="add_new_category">नयाँ वर्ग</string>
|
||||||
|
<string name="enter_category_name">वर्ग को नाम लेख्नुहोस्</string>
|
||||||
|
<string name="share_s">%s साझा गर्नुहोस्</string>
|
||||||
|
<string name="search">खोज्नुहोस्</string>
|
||||||
|
<string name="search_manga">माङ्गा खोज्नुहोस्</string>
|
||||||
|
<string name="processing_">प्रक्रिया गर्दैछ…</string>
|
||||||
|
<string name="downloads">डाउनलोडहरू</string>
|
||||||
|
<string name="by_name">नाम</string>
|
||||||
|
<string name="updated">अपडेट गरियो</string>
|
||||||
|
<string name="newest">नवीनतम</string>
|
||||||
|
<string name="sort_order">क्रमबद्ध क्रम</string>
|
||||||
|
<string name="theme">थीम</string>
|
||||||
|
<string name="light">उज्यालो</string>
|
||||||
|
<string name="automatic">सिस्टम पालना गर्नुहोस्</string>
|
||||||
|
<string name="computing_">कम्प्युटिङ…</string>
|
||||||
|
<string name="close_menu">मेनु बन्द गर्नुहोस्</string>
|
||||||
|
<string name="open_menu">मेनु खोल्नुहोस्</string>
|
||||||
|
<string name="favourites">मनपर्नेहरू</string>
|
||||||
|
<string name="details">विवरणहरू</string>
|
||||||
|
<string name="detailed_list">विस्तृत सूची</string>
|
||||||
|
<string name="grid">ग्रिड</string>
|
||||||
|
<string name="chapter_d_of_d">%2$d को अध्याय %1$d</string>
|
||||||
|
<string name="close">बन्द गर्नुहोस्</string>
|
||||||
|
<string name="history_is_empty">अहिलेसम्म इतिहास छैन</string>
|
||||||
|
<string name="add">थप्नुहोस्</string>
|
||||||
|
<string name="save">बचत गर्नुहोस्</string>
|
||||||
|
<string name="share">साझा गर्नुहोस्</string>
|
||||||
|
<string name="create_shortcut">सर्टकट सिर्जना गर्नुहोस्…</string>
|
||||||
|
<string name="popular">लोकप्रिय</string>
|
||||||
|
<string name="by_rating">मूल्याङ्कन</string>
|
||||||
|
<string name="new_chapters">नयाँ अध्यायहरू</string>
|
||||||
|
</resources>
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<string name="favourites">Favoritos</string>
|
<string name="favourites">Favoritos</string>
|
||||||
<string name="history">Histórico</string>
|
<string name="history">Histórico</string>
|
||||||
<string name="error_occurred">Um erro ocorreu</string>
|
<string name="error_occurred">Um erro ocorreu</string>
|
||||||
<string name="network_error">Não foi possível conectar à Internet</string>
|
<string name="network_error">Erro de rede</string>
|
||||||
<string name="details">Detalhes</string>
|
<string name="details">Detalhes</string>
|
||||||
<string name="chapters">Capítulos</string>
|
<string name="chapters">Capítulos</string>
|
||||||
<string name="list">Lista</string>
|
<string name="list">Lista</string>
|
||||||
@@ -385,4 +385,32 @@
|
|||||||
<string name="text_unsaved_changes_prompt">Você tem alterações não salvas, deseja salvá-las ou descartá-las\?</string>
|
<string name="text_unsaved_changes_prompt">Você tem alterações não salvas, deseja salvá-las ou descartá-las\?</string>
|
||||||
<string name="discard">Descartar</string>
|
<string name="discard">Descartar</string>
|
||||||
<string name="not_found_404">Conteúdo não encontrado ou removido</string>
|
<string name="not_found_404">Conteúdo não encontrado ou removido</string>
|
||||||
|
<string name="services">Serviços</string>
|
||||||
|
<string name="nothing_here">Não há nada aqui</string>
|
||||||
|
<string name="server_error">Erro do lado do servidor (%1$d). Por favor, tente novamente mais tarde</string>
|
||||||
|
<string name="compact">Compactar</string>
|
||||||
|
<string name="enable_logging">Habilitar registros</string>
|
||||||
|
<string name="share_logs">Compartilhar registros</string>
|
||||||
|
<string name="error_no_space_left">Não há espaço disponível no aparelho</string>
|
||||||
|
<string name="network_unavailable">A rede não está disponível</string>
|
||||||
|
<string name="network_unavailable_hint">Ative o Wi-Fi ou a rede móvel para ler mangá online</string>
|
||||||
|
<string name="allow_unstable_updates">Permitir atualizações instáveis</string>
|
||||||
|
<string name="download_started">Download iniciado</string>
|
||||||
|
<string name="language">Idioma</string>
|
||||||
|
<string name="mark_as_current">Marcar como atual</string>
|
||||||
|
<string name="show_in_grid_view">Mostrar na visualização em grade</string>
|
||||||
|
<string name="color_theme">Esquema de cores</string>
|
||||||
|
<string name="show_suspicious_content">Exibir conteúdo suspeito</string>
|
||||||
|
<string name="prefetch_content">Pré-carregamento de conteúdo</string>
|
||||||
|
<string name="theme_name_dynamic">Dinâmico</string>
|
||||||
|
<string name="settings_apply_restart_required">Por favor, reinicie o app para aplicar essas mudanças</string>
|
||||||
|
<string name="different_languages">Idiomas diferentes</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="source_disabled">Fonte desativada</string>
|
||||||
|
<string name="enable_logging_summary">Gravar algumas ações para propósitos de depuração</string>
|
||||||
|
<string name="theme_name_mamimi">Mamimi</string>
|
||||||
|
<string name="theme_name_miku">Miku</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -396,4 +396,23 @@
|
|||||||
<string name="reader_control_ltr">Controle de leitura ergonômico</string>
|
<string name="reader_control_ltr">Controle de leitura ergonômico</string>
|
||||||
<string name="color_correction_hint">As configurações de cor escolhidas serão lembradas para esse mangá</string>
|
<string name="color_correction_hint">As configurações de cor escolhidas serão lembradas para esse mangá</string>
|
||||||
<string name="discard">Descartar</string>
|
<string name="discard">Descartar</string>
|
||||||
|
<string name="language">Idioma</string>
|
||||||
|
<string name="theme_name_mamimi">Mamimi</string>
|
||||||
|
<string name="nothing_here">Não há nada aqui</string>
|
||||||
|
<string name="services">Serviços</string>
|
||||||
|
<string name="enable_logging_summary">Gravar algumas ações para propósitos de depuração</string>
|
||||||
|
<string name="allow_unstable_updates">Permitir atualizações instáveis</string>
|
||||||
|
<string name="download_started">Descarga iniciada</string>
|
||||||
|
<string name="share_logs">Compartilhar registos</string>
|
||||||
|
<string name="enable_logging">Ativar registos</string>
|
||||||
|
<string name="theme_name_miku">Miku</string>
|
||||||
|
<string name="theme_name_rikka">Rikka</string>
|
||||||
|
<string name="theme_name_sakura">Sakura</string>
|
||||||
|
<string name="show_suspicious_content">Exibir conteúdo suspeito</string>
|
||||||
|
<string name="theme_name_dynamic">Dinâmico</string>
|
||||||
|
<string name="color_theme">Esquema de cores</string>
|
||||||
|
<string name="show_in_grid_view">Mostrar na visualização em grade</string>
|
||||||
|
<string name="theme_name_asuka">Asuka</string>
|
||||||
|
<string name="theme_name_mion">Mion</string>
|
||||||
|
<string name="settings_apply_restart_required">Por favor, reinicie o app para aplicar essas mudanças</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -331,7 +331,6 @@
|
|||||||
<string name="reorder">Упорядочить</string>
|
<string name="reorder">Упорядочить</string>
|
||||||
<string name="empty">Пусто</string>
|
<string name="empty">Пусто</string>
|
||||||
<string name="explore">Обзор</string>
|
<string name="explore">Обзор</string>
|
||||||
<string name="tools">Инструменты</string>
|
|
||||||
<string name="confirm_exit">Нажмите Назад ещё раз, чтобы выйти</string>
|
<string name="confirm_exit">Нажмите Назад ещё раз, чтобы выйти</string>
|
||||||
<string name="exit_confirmation_summary">Нажмите Назад 2 раза для выхода из приложения</string>
|
<string name="exit_confirmation_summary">Нажмите Назад 2 раза для выхода из приложения</string>
|
||||||
<string name="other_cache">Другой кэш</string>
|
<string name="other_cache">Другой кэш</string>
|
||||||
@@ -404,10 +403,8 @@
|
|||||||
<string name="enable_logging">Включить логирование</string>
|
<string name="enable_logging">Включить логирование</string>
|
||||||
<string name="enable_logging_summary">Записывать некоторые действия для отладки</string>
|
<string name="enable_logging_summary">Записывать некоторые действия для отладки</string>
|
||||||
<string name="show_suspicious_content">Отображать сомнительный контент</string>
|
<string name="show_suspicious_content">Отображать сомнительный контент</string>
|
||||||
<string name="theme_name_mint">Мята</string>
|
|
||||||
<string name="theme_name_dynamic">Динамическая</string>
|
<string name="theme_name_dynamic">Динамическая</string>
|
||||||
<string name="color_theme">Цветовая схема</string>
|
<string name="color_theme">Цветовая схема</string>
|
||||||
<string name="theme_name_october">Октябрь</string>
|
|
||||||
<string name="show_in_grid_view">Показать в виде сетки</string>
|
<string name="show_in_grid_view">Показать в виде сетки</string>
|
||||||
<string name="theme_name_miku">Мику</string>
|
<string name="theme_name_miku">Мику</string>
|
||||||
<string name="theme_name_asuka">Аска</string>
|
<string name="theme_name_asuka">Аска</string>
|
||||||
@@ -422,4 +419,6 @@
|
|||||||
<string name="download_started">Загрузка началась</string>
|
<string name="download_started">Загрузка началась</string>
|
||||||
<string name="allow_unstable_updates">Разрешить нестабильные обновления</string>
|
<string name="allow_unstable_updates">Разрешить нестабильные обновления</string>
|
||||||
<string name="allow_unstable_updates_summary">Предлагать обновления до бета-версий приложения</string>
|
<string name="allow_unstable_updates_summary">Предлагать обновления до бета-версий приложения</string>
|
||||||
|
<string name="settings_apply_restart_required">Пожалуйста, перезапустите приложение, чтобы применить эти изменения</string>
|
||||||
|
<string name="user_agent">Заголовок UserAgent</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -409,4 +409,16 @@
|
|||||||
<string name="theme_name_dynamic">Dinamik</string>
|
<string name="theme_name_dynamic">Dinamik</string>
|
||||||
<string name="color_theme">renk vurgusu</string>
|
<string name="color_theme">renk vurgusu</string>
|
||||||
<string name="show_in_grid_view">Izgara görünümünde göster</string>
|
<string name="show_in_grid_view">Izgara görünümünde göster</string>
|
||||||
|
<string name="theme_name_mamimi">Mamimi</string>
|
||||||
|
<string name="theme_name_kanade">Kanade</string>
|
||||||
|
<string name="user_agent">UserAgent başlığı</string>
|
||||||
|
<string name="allow_unstable_updates_summary">Uygulamanın beta sürümleri için güncellemeler öner</string>
|
||||||
|
<string name="allow_unstable_updates">Kararsız güncellemelere izin ver</string>
|
||||||
|
<string name="download_started">İndirme başladı</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="settings_apply_restart_required">Bu değişiklikleri uygulamak için lütfen uygulamayı yeniden başlatın</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<string name="favourites">Уподобання</string>
|
<string name="favourites">Уподобання</string>
|
||||||
<string name="history">Історія</string>
|
<string name="history">Історія</string>
|
||||||
<string name="error_occurred">Сталася помилка</string>
|
<string name="error_occurred">Сталася помилка</string>
|
||||||
<string name="chapters">Глави</string>
|
<string name="chapters">Розділи</string>
|
||||||
<string name="list">Список</string>
|
<string name="list">Список</string>
|
||||||
<string name="detailed_list">Детальний список</string>
|
<string name="detailed_list">Детальний список</string>
|
||||||
<string name="list_mode">Режим списку</string>
|
<string name="list_mode">Режим списку</string>
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
<string name="cache">Кеш</string>
|
<string name="cache">Кеш</string>
|
||||||
<string name="text_file_sizes">Б|кБ|МБ|ГБ|ТБ</string>
|
<string name="text_file_sizes">Б|кБ|МБ|ГБ|ТБ</string>
|
||||||
<string name="standard">Стандартний</string>
|
<string name="standard">Стандартний</string>
|
||||||
<string name="webtoon">Вебтун</string>
|
<string name="webtoon">Манхва</string>
|
||||||
<string name="read_mode">Режим читання</string>
|
<string name="read_mode">Режим читання</string>
|
||||||
<string name="grid_size">Розмір сітки</string>
|
<string name="grid_size">Розмір сітки</string>
|
||||||
<string name="search_on_s">Пошук по %s</string>
|
<string name="search_on_s">Пошук по %s</string>
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
<string name="save_manga">Зберегти</string>
|
<string name="save_manga">Зберегти</string>
|
||||||
<string name="notifications">Сповіщення</string>
|
<string name="notifications">Сповіщення</string>
|
||||||
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">Увімкнено %1$d з %2$d</string>
|
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">Увімкнено %1$d з %2$d</string>
|
||||||
<string name="new_chapters">Нові глави</string>
|
<string name="new_chapters">Нові розділи</string>
|
||||||
<string name="download">Завантажити</string>
|
<string name="download">Завантажити</string>
|
||||||
<string name="read_from_start">Читати з початку</string>
|
<string name="read_from_start">Читати з початку</string>
|
||||||
<string name="restart">Перезавантажити</string>
|
<string name="restart">Перезавантажити</string>
|
||||||
@@ -416,4 +416,9 @@
|
|||||||
<string name="theme_name_dynamic">Динамічний</string>
|
<string name="theme_name_dynamic">Динамічний</string>
|
||||||
<string name="color_theme">Колірний акцент</string>
|
<string name="color_theme">Колірний акцент</string>
|
||||||
<string name="show_in_grid_view">Показати у вигляді сітки</string>
|
<string name="show_in_grid_view">Показати у вигляді сітки</string>
|
||||||
|
<string name="allow_unstable_updates">Дозволити нестабільні оновлення</string>
|
||||||
|
<string name="allow_unstable_updates_summary">Пропонувати оновлення до бета-версій додатку</string>
|
||||||
|
<string name="download_started">Завантаження розпочато</string>
|
||||||
|
<string name="user_agent">Заголовок UserAgent</string>
|
||||||
|
<string name="settings_apply_restart_required">Перезапустіть програму, щоб застосувати зміни</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -421,4 +421,6 @@
|
|||||||
<string name="allow_unstable_updates">允许不稳定更新</string>
|
<string name="allow_unstable_updates">允许不稳定更新</string>
|
||||||
<string name="allow_unstable_updates_summary">提示更新到测试版</string>
|
<string name="allow_unstable_updates_summary">提示更新到测试版</string>
|
||||||
<string name="download_started">已开始下载</string>
|
<string name="download_started">已开始下载</string>
|
||||||
|
<string name="user_agent">UserAgent 标头</string>
|
||||||
|
<string name="settings_apply_restart_required">要应用这些更改请重启程序</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -6,9 +6,16 @@
|
|||||||
<string name="url_twitter" translatable="false">https://twitter.com/kotatsuapp</string>
|
<string name="url_twitter" translatable="false">https://twitter.com/kotatsuapp</string>
|
||||||
<string name="url_reddit" translatable="false">https://reddit.com/user/kotatsuapp</string>
|
<string name="url_reddit" translatable="false">https://reddit.com/user/kotatsuapp</string>
|
||||||
<string name="url_weblate" translatable="false">https://hosted.weblate.org/engage/kotatsu</string>
|
<string name="url_weblate" translatable="false">https://hosted.weblate.org/engage/kotatsu</string>
|
||||||
<string name="url_error_report" translatable="false">https://acra.rumblur.space/report</string>
|
<string name="url_error_report" translatable="false">https://acra.kotatsu.app/report</string>
|
||||||
<string name="account_type_sync" translatable="false">org.kotatsu.sync</string>
|
<string name="account_type_sync" translatable="false">org.kotatsu.sync</string>
|
||||||
<string name="url_sync_server" translatable="false">http://86.57.183.214:8081</string>
|
<string name="url_sync_server" translatable="false">https://sync.kotatsu.app</string>
|
||||||
|
<string name="shikimori_clientId" translatable="false">Mw6F0tPEOgyV7F9U9Twg50Q8SndMY7hzIOfXg0AX_XU</string>
|
||||||
|
<string name="shikimori_clientSecret" translatable="false">euBMt1GGRSDpVIFQVPxZrO7Kh6X4gWyv0dABuj4B-M8</string>
|
||||||
|
<string name="anilist_clientId" translatable="false">9887</string>
|
||||||
|
<string name="anilist_clientSecret" translatable="false">wrMqFosItQWsmB8dtAHfIFPDt15FfQi2ZGiKkJoW</string>
|
||||||
|
<string name="mal_clientId" translatable="false">6cd8e6349e9a36bc1fc1ab97703c9fd1</string>
|
||||||
|
<string name="acra_login" translatable="false">SxhkCVnqVLbGogvi</string>
|
||||||
|
<string name="acra_password" translatable="false">xPDACTLHnHU9Nfjv</string>
|
||||||
<string-array name="values_theme" translatable="false">
|
<string-array name="values_theme" translatable="false">
|
||||||
<item>-1</item>
|
<item>-1</item>
|
||||||
<item>1</item>
|
<item>1</item>
|
||||||
|
|||||||
@@ -425,4 +425,5 @@
|
|||||||
<string name="allow_unstable_updates_summary">Propose updates to beta versions of the app</string>
|
<string name="allow_unstable_updates_summary">Propose updates to beta versions of the app</string>
|
||||||
<string name="download_started">Download started</string>
|
<string name="download_started">Download started</string>
|
||||||
<string name="user_agent">UserAgent header</string>
|
<string name="user_agent">UserAgent header</string>
|
||||||
|
<string name="settings_apply_restart_required">Please restart the application to apply these changes</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -20,12 +20,6 @@
|
|||||||
android:title="@string/suggestions"
|
android:title="@string/suggestions"
|
||||||
app:allowDividerAbove="true" />
|
app:allowDividerAbove="true" />
|
||||||
|
|
||||||
<ListPreference
|
|
||||||
android:entries="@array/doh_providers"
|
|
||||||
android:key="doh"
|
|
||||||
android:title="@string/dns_over_https"
|
|
||||||
app:useSimpleSummaryProvider="true" />
|
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:defaultValue="0"
|
android:defaultValue="0"
|
||||||
android:entries="@array/network_policy"
|
android:entries="@array/network_policy"
|
||||||
@@ -56,6 +50,17 @@
|
|||||||
android:valueTo="5"
|
android:valueTo="5"
|
||||||
app:defaultValue="2" />
|
app:defaultValue="2" />
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
android:entries="@array/doh_providers"
|
||||||
|
android:key="doh"
|
||||||
|
android:title="@string/dns_over_https"
|
||||||
|
app:allowDividerAbove="true"
|
||||||
|
app:useSimpleSummaryProvider="true" />
|
||||||
|
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
android:key="ssl_bypass"
|
||||||
|
android:title="Ignore SSL errors" />
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:fragment="org.koitharu.kotatsu.settings.backup.BackupSettingsFragment"
|
android:fragment="org.koitharu.kotatsu.settings.backup.BackupSettingsFragment"
|
||||||
android:title="@string/backup_restore"
|
android:title="@string/backup_restore"
|
||||||
|
|||||||
11
build.gradle
11
build.gradle
@@ -4,7 +4,7 @@ buildscript {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:7.4.1'
|
classpath 'com.android.tools.build:gradle:7.4.2'
|
||||||
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10'
|
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10'
|
||||||
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.45'
|
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.45'
|
||||||
}
|
}
|
||||||
@@ -20,15 +20,6 @@ allprojects {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String localProperty(String name, String defaultValue = 'null') {
|
|
||||||
Properties localProperties = new Properties()
|
|
||||||
project.rootProject.file('local.properties').withInputStream { localProperties.load(it) }
|
|
||||||
|
|
||||||
def value = localProperties[name]
|
|
||||||
|
|
||||||
return value != null ? value : defaultValue
|
|
||||||
}
|
|
||||||
|
|
||||||
String currentBranch() {
|
String currentBranch() {
|
||||||
def branchName = ""
|
def branchName = ""
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user