Compare commits
52 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 | ||
|
|
4ec50f83d2 | ||
|
|
d0b9412559 | ||
|
|
9adf209445 | ||
|
|
5d2395b569 | ||
|
|
29114ae8a7 | ||
|
|
47f80085d1 | ||
|
|
73c1d2a616 | ||
|
|
35366ac660 | ||
|
|
dc2dd4e3c9 | ||
|
|
66817ae545 | ||
|
|
b6e3cb929b | ||
|
|
6f29259395 | ||
|
|
c520699f9f |
@@ -8,15 +8,15 @@ plugins {
|
||||
|
||||
android {
|
||||
compileSdk = 33
|
||||
buildToolsVersion = '33.0.1'
|
||||
buildToolsVersion = '33.0.2'
|
||||
namespace = 'org.koitharu.kotatsu'
|
||||
|
||||
defaultConfig {
|
||||
applicationId 'org.koitharu.kotatsu'
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 33
|
||||
versionCode 516
|
||||
versionName '4.4'
|
||||
versionCode 522
|
||||
versionName '4.4.6'
|
||||
generatedDensities = []
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
@@ -25,15 +25,6 @@ android {
|
||||
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 {
|
||||
debug {
|
||||
@@ -87,7 +78,8 @@ afterEvaluate {
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
implementation('com.github.KotatsuApp:kotatsu-parsers:cf345d2d0c') {
|
||||
//noinspection GradleDependency
|
||||
implementation('com.github.KotatsuApp:kotatsu-parsers:cc418570d5') {
|
||||
exclude group: 'org.json', module: 'json'
|
||||
}
|
||||
|
||||
@@ -124,8 +116,8 @@ dependencies {
|
||||
implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl:4.3.2'
|
||||
implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl-viewbinding:4.3.2'
|
||||
|
||||
implementation 'com.google.dagger:hilt-android:2.44.2'
|
||||
kapt 'com.google.dagger:hilt-compiler:2.44.2'
|
||||
implementation 'com.google.dagger:hilt-android:2.45'
|
||||
kapt 'com.google.dagger:hilt-compiler:2.45'
|
||||
implementation 'androidx.hilt:hilt-work:1.0.0'
|
||||
kapt 'androidx.hilt:hilt-compiler:1.0.0'
|
||||
|
||||
@@ -141,7 +133,7 @@ dependencies {
|
||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
|
||||
|
||||
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'
|
||||
|
||||
androidTestImplementation 'androidx.test:runner:1.5.2'
|
||||
@@ -154,6 +146,6 @@ dependencies {
|
||||
androidTestImplementation 'androidx.room:room-testing:2.5.0'
|
||||
androidTestImplementation 'com.squareup.moshi:moshi-kotlin:1.14.0'
|
||||
|
||||
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.44.2'
|
||||
kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.44.2'
|
||||
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.45'
|
||||
kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.45'
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<bool name="leak_canary_add_launcher_icon" tools:node="replace">false</bool>
|
||||
<bool name="is_sync_enabled">true</bool>
|
||||
</resources>
|
||||
@@ -96,6 +96,9 @@ interface AppModule {
|
||||
writeTimeout(20, TimeUnit.SECONDS)
|
||||
cookieJar(cookieJar)
|
||||
dns(DoHManager(cache, settings))
|
||||
if (settings.isSSLBypassEnabled) {
|
||||
bypassSSLErrors()
|
||||
}
|
||||
cache(cache)
|
||||
addInterceptor(GZipInterceptor())
|
||||
addInterceptor(commonHeadersInterceptor)
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.koitharu.kotatsu.core.exceptions.resolve
|
||||
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import androidx.activity.result.ActivityResultCallback
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.collection.ArrayMap
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import okhttp3.Headers
|
||||
import org.koitharu.kotatsu.R
|
||||
@@ -17,6 +21,7 @@ import org.koitharu.kotatsu.parsers.exception.NotFoundException
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.settings.sources.auth.SourceAuthActivity
|
||||
import org.koitharu.kotatsu.utils.TaggedActivityResult
|
||||
import org.koitharu.kotatsu.utils.ext.getDisplayMessage
|
||||
import org.koitharu.kotatsu.utils.isSuccess
|
||||
import kotlin.coroutines.Continuation
|
||||
import kotlin.coroutines.resume
|
||||
@@ -95,5 +100,21 @@ class ExceptionResolver private constructor(
|
||||
}
|
||||
|
||||
fun canResolve(e: Throwable) = getResolveStringId(e) != 0
|
||||
|
||||
fun showDetails(context: Context, e: Throwable) {
|
||||
val stackTrace = e.stackTraceToString()
|
||||
val dialog = MaterialAlertDialogBuilder(context)
|
||||
.setTitle(e.getDisplayMessage(context.resources))
|
||||
.setMessage(stackTrace)
|
||||
.setPositiveButton(androidx.preference.R.string.copy) { _, _ ->
|
||||
val clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
clipboardManager.setPrimaryClip(
|
||||
ClipData.newPlainText(context.getString(R.string.error), stackTrace),
|
||||
)
|
||||
}
|
||||
.setNegativeButton(R.string.close, null)
|
||||
.create()
|
||||
dialog.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,6 +68,12 @@ class FileLogger(
|
||||
postFlush()
|
||||
}
|
||||
|
||||
inline fun log(messageProducer: () -> String) {
|
||||
if (isEnabled) {
|
||||
log(messageProducer())
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun flush() {
|
||||
if (!isEnabled) {
|
||||
return
|
||||
|
||||
@@ -5,3 +5,7 @@ import javax.inject.Qualifier
|
||||
@Qualifier
|
||||
@Retention(AnnotationRetention.BINARY)
|
||||
annotation class TrackerLogger
|
||||
|
||||
@Qualifier
|
||||
@Retention(AnnotationRetention.BINARY)
|
||||
annotation class SyncLogger
|
||||
|
||||
@@ -21,11 +21,20 @@ object LoggersModule {
|
||||
settings: AppSettings,
|
||||
) = FileLogger(context, settings, "tracker")
|
||||
|
||||
@Provides
|
||||
@SyncLogger
|
||||
fun provideSyncLogger(
|
||||
@ApplicationContext context: Context,
|
||||
settings: AppSettings,
|
||||
) = FileLogger(context, settings, "sync")
|
||||
|
||||
@Provides
|
||||
@ElementsIntoSet
|
||||
fun provideAllLoggers(
|
||||
@TrackerLogger trackerLogger: FileLogger,
|
||||
@SyncLogger syncLogger: FileLogger,
|
||||
): Set<@JvmSuppressWildcards FileLogger> = arraySetOf(
|
||||
trackerLogger,
|
||||
syncLogger,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -52,7 +52,6 @@ fun Parcel.readManga() = Manga(
|
||||
fun MangaPage.writeToParcel(out: Parcel) {
|
||||
out.writeLong(id)
|
||||
out.writeString(url)
|
||||
out.writeString(referer)
|
||||
out.writeString(preview)
|
||||
out.writeSerializable(source)
|
||||
}
|
||||
@@ -60,7 +59,6 @@ fun MangaPage.writeToParcel(out: Parcel) {
|
||||
fun Parcel.readMangaPage() = MangaPage(
|
||||
id = readLong(),
|
||||
url = requireNotNull(readString()),
|
||||
referer = requireNotNull(readString()),
|
||||
preview = readString(),
|
||||
source = checkNotNull(readSerializableCompat()),
|
||||
)
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.koitharu.kotatsu.core.network
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import dagger.Lazy
|
||||
import okhttp3.Headers
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@@ -11,6 +12,7 @@ import org.koitharu.kotatsu.core.parser.MangaRepository
|
||||
import org.koitharu.kotatsu.core.parser.RemoteMangaRepository
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.util.mergeWith
|
||||
import org.koitharu.kotatsu.utils.ext.printStackTraceDebug
|
||||
import java.util.Locale
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
@@ -39,12 +41,18 @@ class CommonHeadersInterceptor @Inject constructor(
|
||||
headersBuilder[CommonHeaders.USER_AGENT] = userAgentFallback
|
||||
}
|
||||
if (headersBuilder[CommonHeaders.REFERER] == null && repository != null) {
|
||||
headersBuilder[CommonHeaders.REFERER] = "https://${repository.domain}/"
|
||||
headersBuilder.trySet(CommonHeaders.REFERER, "https://${repository.domain}/")
|
||||
}
|
||||
val newRequest = request.newBuilder().headers(headersBuilder.build()).build()
|
||||
return repository?.intercept(ProxyChain(chain, newRequest)) ?: chain.proceed(newRequest)
|
||||
}
|
||||
|
||||
private fun Headers.Builder.trySet(name: String, value: String) = try {
|
||||
set(name, value)
|
||||
} catch (e: IllegalArgumentException) {
|
||||
e.printStackTraceDebug()
|
||||
}
|
||||
|
||||
private class ProxyChain(
|
||||
private val delegate: Interceptor.Chain,
|
||||
private val request: Request,
|
||||
|
||||
@@ -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
|
||||
get() = prefs.getEnumValue(KEY_DOH, DoHProvider.NONE)
|
||||
|
||||
val isSSLBypassEnabled: Boolean
|
||||
get() = prefs.getBoolean(KEY_SSL_BYPASS, false)
|
||||
|
||||
var localListOrder: SortOrder
|
||||
get() = prefs.getEnumValue(KEY_LOCAL_LIST_ORDER, SortOrder.NEWEST)
|
||||
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_SOURCES_GRID = "sources_grid"
|
||||
const val KEY_UPDATES_UNSTABLE = "updates_unstable"
|
||||
const val KEY_SSL_BYPASS = "ssl_bypass"
|
||||
|
||||
// About
|
||||
const val KEY_APP_UPDATE = "app_update"
|
||||
|
||||
@@ -23,6 +23,7 @@ class SourceSettings(context: Context, source: MangaSource) : MangaSourceConfig
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <T> get(key: ConfigKey<T>): T {
|
||||
return when (key) {
|
||||
is ConfigKey.UserAgent -> prefs.getString(key.key, key.defaultValue).ifNullOrEmpty { key.defaultValue }
|
||||
is ConfigKey.Domain -> prefs.getString(key.key, key.defaultValue).ifNullOrEmpty { key.defaultValue }
|
||||
is ConfigKey.ShowSuspiciousContent -> prefs.getBoolean(key.key, key.defaultValue)
|
||||
} as T
|
||||
|
||||
@@ -117,7 +117,7 @@ class DownloadManager @AssistedInject constructor(
|
||||
val data = if (manga.chapters.isNullOrEmpty()) repo.getDetails(manga) else manga
|
||||
output = CbzMangaOutput.get(destination, data)
|
||||
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))
|
||||
}
|
||||
val chapters = checkNotNull(
|
||||
@@ -138,8 +138,8 @@ class DownloadManager @AssistedInject constructor(
|
||||
for ((pageIndex, page) in pages.withIndex()) {
|
||||
runFailsafe(outState, pausingHandle) {
|
||||
val url = repo.getPageUrl(page)
|
||||
val file = cache[url]
|
||||
?: downloadFile(url, page.referer, destination, tempFileName, repo.source)
|
||||
val file = cache.get(url)
|
||||
?: downloadFile(url, destination, tempFileName, repo.source)
|
||||
output.addPage(
|
||||
chapter = chapter,
|
||||
file = file,
|
||||
@@ -211,14 +211,12 @@ class DownloadManager @AssistedInject constructor(
|
||||
|
||||
private suspend fun downloadFile(
|
||||
url: String,
|
||||
referer: String,
|
||||
destination: File,
|
||||
tempFileName: String,
|
||||
source: MangaSource,
|
||||
): File {
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
.header(CommonHeaders.REFERER, referer)
|
||||
.tag(MangaSource::class.java, source)
|
||||
.cacheControl(CommonHeaders.CACHE_CONTROL_DISABLED)
|
||||
.get()
|
||||
|
||||
@@ -36,6 +36,7 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.search.ui.MangaListActivity
|
||||
import org.koitharu.kotatsu.settings.SettingsActivity
|
||||
import org.koitharu.kotatsu.suggestions.ui.SuggestionsActivity
|
||||
import org.koitharu.kotatsu.utils.ext.addMenuProvider
|
||||
import org.koitharu.kotatsu.utils.ext.getDisplayMessage
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -70,6 +71,7 @@ class ExploreFragment :
|
||||
val spacing = resources.getDimensionPixelOffset(R.dimen.list_spacing)
|
||||
paddingHorizontal = spacing
|
||||
}
|
||||
addMenuProvider(ExploreMenuProvider(view.context, viewModel))
|
||||
viewModel.content.observe(viewLifecycleOwner) {
|
||||
exploreAdapter?.items = it
|
||||
}
|
||||
@@ -162,6 +164,7 @@ class ExploreFragment :
|
||||
} else {
|
||||
LinearLayoutManager(requireContext())
|
||||
}
|
||||
activity?.invalidateOptionsMenu()
|
||||
}
|
||||
|
||||
private inner class SourceMenuListener(
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package org.koitharu.kotatsu.explore.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import androidx.core.view.MenuProvider
|
||||
import org.koitharu.kotatsu.R
|
||||
|
||||
class ExploreMenuProvider(
|
||||
private val context: Context,
|
||||
private val viewModel: ExploreViewModel,
|
||||
) : MenuProvider {
|
||||
|
||||
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
||||
menuInflater.inflate(R.menu.opt_explore, menu)
|
||||
}
|
||||
|
||||
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
|
||||
return when (menuItem.itemId) {
|
||||
R.id.action_grid -> {
|
||||
viewModel.setGridMode(!menuItem.isChecked)
|
||||
true
|
||||
}
|
||||
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPrepareMenu(menu: Menu) {
|
||||
super.onPrepareMenu(menu)
|
||||
menu.findItem(R.id.action_grid)?.isChecked = viewModel.isGrid.value == true
|
||||
}
|
||||
}
|
||||
@@ -69,6 +69,10 @@ class ExploreViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun setGridMode(value: Boolean) {
|
||||
settings.isSourcesGridMode = value
|
||||
}
|
||||
|
||||
private fun createContentFlow() = settings.observe()
|
||||
.filter {
|
||||
it == AppSettings.KEY_SOURCES_HIDDEN ||
|
||||
|
||||
@@ -60,6 +60,9 @@ fun mangaListDetailedItemAD(
|
||||
lifecycle(lifecycleOwner)
|
||||
enqueueWith(coil)
|
||||
}
|
||||
if (payloads.isEmpty()) {
|
||||
binding.scrollViewTags.scrollTo(0, 0)
|
||||
}
|
||||
binding.chipsTags.setChips(item.tags)
|
||||
binding.ratingBar.isVisible = item.manga.hasRating
|
||||
binding.ratingBar.rating = binding.ratingBar.numStars * item.manga.rating
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.content.Context
|
||||
import com.tomclaw.cache.DiskLruCache
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.runInterruptible
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.koitharu.kotatsu.utils.FileSize
|
||||
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),
|
||||
)
|
||||
|
||||
operator fun get(url: String): File? {
|
||||
return lruCache.get(url)?.takeIfReadable()
|
||||
suspend fun get(url: String): File? = runInterruptible(Dispatchers.IO) {
|
||||
lruCache.get(url)?.takeIfReadable()
|
||||
}
|
||||
|
||||
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(),
|
||||
url = entryUri,
|
||||
preview = null,
|
||||
referer = chapter.url,
|
||||
source = MangaSource.LOCAL,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -327,10 +327,12 @@ class MainActivity :
|
||||
TrackWorker.setup(applicationContext)
|
||||
SuggestionsWorker.setup(applicationContext)
|
||||
}
|
||||
whenResumed {
|
||||
MangaPrefetchService.prefetchLast(this@MainActivity)
|
||||
requestNotificationsPermission()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun adjustFabVisibility(
|
||||
isResumeEnabled: Boolean = viewModel.isResumeEnabled.value == true,
|
||||
|
||||
@@ -5,7 +5,6 @@ import android.graphics.BitmapFactory
|
||||
import android.net.Uri
|
||||
import androidx.collection.LongSparseArray
|
||||
import androidx.collection.set
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import kotlinx.coroutines.CoroutineExceptionHandler
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -13,7 +12,7 @@ import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runInterruptible
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
@@ -54,11 +53,11 @@ class PageLoader @Inject constructor(
|
||||
|
||||
private val tasks = LongSparseArray<ProgressDeferred<File, Float>>()
|
||||
private val convertLock = Mutex()
|
||||
private val prefetchLock = Mutex()
|
||||
private var repository: MangaRepository? = null
|
||||
private val prefetchQueue = LinkedList<MangaPage>()
|
||||
private val counter = AtomicInteger(0)
|
||||
private var prefetchQueueLimit = PREFETCH_LIMIT_DEFAULT // TODO adaptive
|
||||
private val emptyProgressFlow: StateFlow<Float> = MutableStateFlow(-1f)
|
||||
|
||||
override fun close() {
|
||||
loaderScope.cancel()
|
||||
@@ -71,8 +70,8 @@ class PageLoader @Inject constructor(
|
||||
return repository is RemoteMangaRepository && settings.isPagesPreloadEnabled()
|
||||
}
|
||||
|
||||
fun prefetch(pages: List<ReaderPage>) {
|
||||
synchronized(prefetchQueue) {
|
||||
fun prefetch(pages: List<ReaderPage>) = loaderScope.launch {
|
||||
prefetchLock.withLock {
|
||||
for (page in pages.asReversed()) {
|
||||
if (tasks.containsKey(page.id)) {
|
||||
continue
|
||||
@@ -89,18 +88,13 @@ class PageLoader @Inject constructor(
|
||||
}
|
||||
|
||||
fun loadPageAsync(page: MangaPage, force: Boolean): ProgressDeferred<File, Float> {
|
||||
if (!force) {
|
||||
cache[page.url]?.let {
|
||||
return getCompletedTask(it)
|
||||
}
|
||||
}
|
||||
var task = tasks[page.id]
|
||||
if (force) {
|
||||
task?.cancel()
|
||||
} else if (task?.isCancelled == false) {
|
||||
return task
|
||||
}
|
||||
task = loadPageAsyncImpl(page)
|
||||
task = loadPageAsyncImpl(page, force)
|
||||
synchronized(tasks) {
|
||||
tasks[page.id] = task
|
||||
}
|
||||
@@ -130,23 +124,26 @@ class PageLoader @Inject constructor(
|
||||
return getRepository(page.source).getPageUrl(page)
|
||||
}
|
||||
|
||||
private fun onIdle() {
|
||||
synchronized(prefetchQueue) {
|
||||
private fun onIdle() = loaderScope.launch {
|
||||
prefetchLock.withLock {
|
||||
while (prefetchQueue.isNotEmpty()) {
|
||||
val page = prefetchQueue.pollFirst() ?: return
|
||||
if (cache[page.url] == null) {
|
||||
val page = prefetchQueue.pollFirst() ?: return@launch
|
||||
if (cache.get(page.url) == null) {
|
||||
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 deferred = loaderScope.async {
|
||||
if (!skipCache) {
|
||||
cache.get(page.url)?.let { return@async it }
|
||||
}
|
||||
counter.incrementAndGet()
|
||||
try {
|
||||
loadPageImpl(page, progress)
|
||||
@@ -188,7 +185,6 @@ class PageLoader @Inject constructor(
|
||||
val request = Request.Builder()
|
||||
.url(pageUrl)
|
||||
.get()
|
||||
.header(CommonHeaders.REFERER, page.referer)
|
||||
.header(CommonHeaders.ACCEPT, "image/webp,image/png;q=0.9,image/jpeg,*/*;q=0.8")
|
||||
.cacheControl(CommonHeaders.CACHE_CONTROL_DISABLED)
|
||||
.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),
|
||||
CoroutineExceptionHandler {
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@ class ColorFilterConfigViewModel @AssistedInject constructor(
|
||||
preview.value = MangaPage(
|
||||
id = page.id,
|
||||
url = url,
|
||||
referer = page.referer,
|
||||
preview = page.preview,
|
||||
source = page.source,
|
||||
)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.koitharu.kotatsu.reader.ui.pager
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import androidx.core.net.toUri
|
||||
import androidx.lifecycle.Observer
|
||||
@@ -59,6 +60,11 @@ class PageHolderDelegate(
|
||||
}
|
||||
}
|
||||
|
||||
fun showErrorDetails(context: Context) {
|
||||
val e = error ?: return
|
||||
ExceptionResolver.showDetails(context, e)
|
||||
}
|
||||
|
||||
fun onAttachedToWindow() {
|
||||
readerSettings.observeForever(this)
|
||||
}
|
||||
@@ -87,6 +93,7 @@ class PageHolderDelegate(
|
||||
}
|
||||
|
||||
override fun onImageLoadError(e: Throwable) {
|
||||
e.printStackTraceDebug()
|
||||
val file = this.file
|
||||
error = e
|
||||
if (state == State.LOADED && e is IOException && file != null && file.exists()) {
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
data class ReaderPage(
|
||||
val id: Long,
|
||||
val url: String,
|
||||
val referer: String,
|
||||
val preview: String?,
|
||||
val chapterId: Long,
|
||||
val index: Int,
|
||||
@@ -19,7 +18,6 @@ data class ReaderPage(
|
||||
constructor(page: MangaPage, index: Int, chapterId: Long) : this(
|
||||
id = page.id,
|
||||
url = page.url,
|
||||
referer = page.referer,
|
||||
preview = page.preview,
|
||||
chapterId = chapterId,
|
||||
index = index,
|
||||
@@ -29,7 +27,6 @@ data class ReaderPage(
|
||||
fun toMangaPage() = MangaPage(
|
||||
id = id,
|
||||
url = url,
|
||||
referer = referer,
|
||||
preview = preview,
|
||||
source = source,
|
||||
)
|
||||
|
||||
@@ -33,8 +33,8 @@ open class PageHolder(
|
||||
binding.ssiv.bindToLifecycle(owner)
|
||||
binding.ssiv.isEagerLoadingEnabled = !isLowRamDevice(context)
|
||||
binding.ssiv.addOnImageEventListener(delegate)
|
||||
@Suppress("LeakingThis")
|
||||
bindingInfo.buttonRetry.setOnClickListener(this)
|
||||
bindingInfo.buttonErrorDetails.setOnClickListener(this)
|
||||
binding.textViewNumber.isVisible = settings.isPagesNumbersEnabled
|
||||
}
|
||||
|
||||
@@ -115,6 +115,7 @@ open class PageHolder(
|
||||
override fun onClick(v: View) {
|
||||
when (v.id) {
|
||||
R.id.button_retry -> delegate.retry(boundData?.toMangaPage() ?: return)
|
||||
R.id.button_error_details -> delegate.showErrorDetails(v.context)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import org.koitharu.kotatsu.utils.GoneOnInvisibleListener
|
||||
import org.koitharu.kotatsu.utils.ext.getDisplayMessage
|
||||
import org.koitharu.kotatsu.utils.ext.hideCompat
|
||||
import org.koitharu.kotatsu.utils.ext.ifZero
|
||||
import org.koitharu.kotatsu.utils.ext.setProgressCompat
|
||||
import org.koitharu.kotatsu.utils.ext.showCompat
|
||||
|
||||
class WebtoonHolder(
|
||||
@@ -40,6 +39,7 @@ class WebtoonHolder(
|
||||
binding.ssiv.regionDecoderFactory = SkiaPooledImageRegionDecoder.Factory()
|
||||
binding.ssiv.addOnImageEventListener(delegate)
|
||||
bindingInfo.buttonRetry.setOnClickListener(this)
|
||||
bindingInfo.buttonErrorDetails.setOnClickListener(this)
|
||||
}
|
||||
|
||||
override fun onBind(data: ReaderPage) {
|
||||
@@ -104,6 +104,7 @@ class WebtoonHolder(
|
||||
override fun onClick(v: View) {
|
||||
when (v.id) {
|
||||
R.id.button_retry -> delegate.retry(boundData?.toMangaPage() ?: return)
|
||||
R.id.button_error_details -> delegate.showErrorDetails(v.context)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ object ScrobblingModule {
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideShikimoriRepository(
|
||||
@ApplicationContext context: Context,
|
||||
@ScrobblerType(ScrobblerService.SHIKIMORI) storage: ScrobblerStorage,
|
||||
database: MangaDatabase,
|
||||
authenticator: ShikimoriAuthenticator,
|
||||
@@ -47,12 +48,13 @@ object ScrobblingModule {
|
||||
addInterceptor(CurlLoggingInterceptor())
|
||||
}
|
||||
}.build()
|
||||
return ShikimoriRepository(okHttp, storage, database)
|
||||
return ShikimoriRepository(context, okHttp, storage, database)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideMALRepository(
|
||||
@ApplicationContext context: Context,
|
||||
@ScrobblerType(ScrobblerService.MAL) storage: ScrobblerStorage,
|
||||
database: MangaDatabase,
|
||||
authenticator: MALAuthenticator,
|
||||
@@ -64,12 +66,13 @@ object ScrobblingModule {
|
||||
addInterceptor(CurlLoggingInterceptor())
|
||||
}
|
||||
}.build()
|
||||
return MALRepository(okHttp, storage, database)
|
||||
return MALRepository(context, okHttp, storage, database)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideAniListRepository(
|
||||
@ApplicationContext context: Context,
|
||||
@ScrobblerType(ScrobblerService.ANILIST) storage: ScrobblerStorage,
|
||||
database: MangaDatabase,
|
||||
authenticator: AniListAuthenticator,
|
||||
@@ -81,7 +84,7 @@ object ScrobblingModule {
|
||||
addInterceptor(CurlLoggingInterceptor())
|
||||
}
|
||||
}.build()
|
||||
return AniListRepository(okHttp, storage, database)
|
||||
return AniListRepository(context, okHttp, storage, database)
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package org.koitharu.kotatsu.scrobbling.anilist.data
|
||||
|
||||
import android.content.Context
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
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.parsers.exception.GraphQLException
|
||||
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.parseJson
|
||||
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.ScrobblingEntity
|
||||
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"
|
||||
|
||||
class AniListRepository(
|
||||
@ApplicationContext context: Context,
|
||||
private val okHttp: OkHttpClient,
|
||||
private val storage: ScrobblerStorage,
|
||||
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
|
||||
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"
|
||||
|
||||
override val isAuthorized: Boolean
|
||||
@@ -48,8 +55,8 @@ class AniListRepository(
|
||||
|
||||
override suspend fun authorize(code: String?) {
|
||||
val body = FormBody.Builder()
|
||||
body.add("client_id", BuildConfig.ANILIST_CLIENT_ID)
|
||||
body.add("client_secret", BuildConfig.ANILIST_CLIENT_SECRET)
|
||||
body.add("client_id", clientId)
|
||||
body.add("client_secret", clientSecret)
|
||||
if (code != null) {
|
||||
body.add("grant_type", "authorization_code")
|
||||
body.add("redirect_uri", REDIRECT_URI)
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
package org.koitharu.kotatsu.scrobbling.mal.data
|
||||
|
||||
import android.content.Context
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
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.parsers.model.MangaChapter
|
||||
import org.koitharu.kotatsu.parsers.util.await
|
||||
import org.koitharu.kotatsu.parsers.util.json.mapJSONNotNull
|
||||
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.ScrobblingEntity
|
||||
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"
|
||||
|
||||
class MALRepository(
|
||||
@ApplicationContext context: Context,
|
||||
private val okHttp: OkHttpClient,
|
||||
private val storage: ScrobblerStorage,
|
||||
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()
|
||||
|
||||
override val oauthUrl: String
|
||||
get() = "$BASE_WEB_URL/v1/oauth2/authorize?" +
|
||||
"response_type=code" +
|
||||
"&client_id=${BuildConfig.MAL_CLIENT_ID}" +
|
||||
"&client_id=$clientId" +
|
||||
"&redirect_uri=$REDIRECT_URI" +
|
||||
"&code_challenge=$codeVerifier" +
|
||||
"&code_challenge_method=plain"
|
||||
@@ -51,7 +56,7 @@ class MALRepository(
|
||||
override suspend fun authorize(code: String?) {
|
||||
val body = FormBody.Builder()
|
||||
if (code != null) {
|
||||
body.add("client_id", BuildConfig.MAL_CLIENT_ID)
|
||||
body.add("client_id", clientId)
|
||||
body.add("grant_type", "authorization_code")
|
||||
body.add("code", code)
|
||||
body.add("redirect_uri", REDIRECT_URI)
|
||||
@@ -205,5 +210,4 @@ class MALRepository(
|
||||
avatar = json.getString("picture") ?: AVATAR_STUB,
|
||||
service = ScrobblerService.MAL,
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package org.koitharu.kotatsu.scrobbling.shikimori.data
|
||||
|
||||
import android.content.Context
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
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.parsers.model.MangaChapter
|
||||
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
|
||||
|
||||
class ShikimoriRepository(
|
||||
@ApplicationContext context: Context,
|
||||
private val okHttp: OkHttpClient,
|
||||
private val storage: ScrobblerStorage,
|
||||
private val db: MangaDatabase,
|
||||
) : ScrobblerRepository {
|
||||
|
||||
private val clientId = context.getString(R.string.shikimori_clientId)
|
||||
private val clientSecret = context.getString(R.string.shikimori_clientSecret)
|
||||
|
||||
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="
|
||||
|
||||
override val isAuthorized: Boolean
|
||||
@@ -42,8 +48,8 @@ class ShikimoriRepository(
|
||||
|
||||
override suspend fun authorize(code: String?) {
|
||||
val body = FormBody.Builder()
|
||||
body.add("client_id", BuildConfig.SHIKIMORI_CLIENT_ID)
|
||||
body.add("client_secret", BuildConfig.SHIKIMORI_CLIENT_SECRET)
|
||||
body.add("client_id", clientId)
|
||||
body.add("client_secret", clientSecret)
|
||||
if (code != null) {
|
||||
body.add("grant_type", "authorization_code")
|
||||
body.add("redirect_uri", REDIRECT_URI)
|
||||
@@ -98,13 +104,13 @@ class ShikimoriRepository(
|
||||
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 payload = JSONObject()
|
||||
payload.put(
|
||||
"user_rate",
|
||||
JSONObject().apply {
|
||||
put("target_id", shikiMangaId)
|
||||
put("target_id", scrobblerMangaId)
|
||||
put("target_type", "Manga")
|
||||
put("user_id", user.id)
|
||||
},
|
||||
|
||||
@@ -3,6 +3,9 @@ package org.koitharu.kotatsu.search.ui.widget
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.os.Parcelable
|
||||
import android.text.Spannable
|
||||
import android.text.SpannableString
|
||||
import android.text.style.TextAppearanceSpan
|
||||
import android.util.AttributeSet
|
||||
import android.view.KeyEvent
|
||||
import android.view.MotionEvent
|
||||
@@ -12,11 +15,11 @@ import android.view.inputmethod.EditorInfo
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.appcompat.widget.AppCompatEditText
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.google.android.material.R as materialR
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.search.ui.suggestion.SearchSuggestionListener
|
||||
import org.koitharu.kotatsu.utils.ext.drawableEnd
|
||||
import org.koitharu.kotatsu.utils.ext.drawableStart
|
||||
import com.google.android.material.R as materialR
|
||||
|
||||
private const val DRAWABLE_END = 2
|
||||
|
||||
@@ -31,6 +34,10 @@ class SearchEditText @JvmOverloads constructor(
|
||||
private val voiceIcon = ContextCompat.getDrawable(context, R.drawable.ic_voice_input)
|
||||
private var isEmpty = text.isNullOrEmpty()
|
||||
|
||||
init {
|
||||
wrapHint()
|
||||
}
|
||||
|
||||
var isVoiceSearchEnabled: Boolean = false
|
||||
set(value) {
|
||||
field = value
|
||||
@@ -124,4 +131,16 @@ class SearchEditText @JvmOverloads constructor(
|
||||
setCompoundDrawablesRelativeWithIntrinsicBounds(drawableStart, null, icon, null)
|
||||
}
|
||||
}
|
||||
|
||||
private fun wrapHint() {
|
||||
val rawHint = hint?.toString() ?: return
|
||||
val formatted = SpannableString(rawHint)
|
||||
formatted.setSpan(
|
||||
TextAppearanceSpan(context, materialR.style.TextAppearance_Material3_SearchView),
|
||||
0,
|
||||
formatted.length,
|
||||
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE,
|
||||
)
|
||||
hint = formatted
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.Preference
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koitharu.kotatsu.R
|
||||
@@ -85,6 +86,10 @@ class ContentSettingsFragment :
|
||||
AppSettings.KEY_SOURCES_HIDDEN -> {
|
||||
bindRemoteSourcesSummary()
|
||||
}
|
||||
|
||||
AppSettings.KEY_SSL_BYPASS -> {
|
||||
Snackbar.make(listView, R.string.settings_apply_restart_required, Snackbar.LENGTH_INDEFINITE).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,14 +7,24 @@ import org.koitharu.kotatsu.utils.EditTextValidator
|
||||
class DomainValidator : EditTextValidator() {
|
||||
|
||||
override fun validate(text: String): ValidationResult {
|
||||
if (text.isBlank()) {
|
||||
val trimmed = text.trim()
|
||||
if (trimmed.isEmpty()) {
|
||||
return ValidationResult.Success
|
||||
}
|
||||
val host = text.trim().toCanonicalHost()
|
||||
return if (host == null) {
|
||||
return if (!checkCharacters(trimmed) || trimmed.toCanonicalHost() == null) {
|
||||
ValidationResult.Failed(context.getString(R.string.invalid_domain_message))
|
||||
} else {
|
||||
ValidationResult.Success
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkCharacters(value: String): Boolean {
|
||||
for (i in value.indices) {
|
||||
val c = value[i]
|
||||
if (c !in '\u0020'..'\u007e') {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -37,6 +37,21 @@ fun PreferenceFragmentCompat.addPreferencesFromRepository(repository: RemoteMang
|
||||
}
|
||||
}
|
||||
|
||||
is ConfigKey.UserAgent -> {
|
||||
EditTextPreference(requireContext()).apply {
|
||||
summaryProvider = EditTextDefaultSummaryProvider(key.defaultValue)
|
||||
setOnBindEditTextListener(
|
||||
EditTextBindListener(
|
||||
inputType = EditorInfo.TYPE_CLASS_TEXT,
|
||||
hint = key.defaultValue,
|
||||
validator = null,
|
||||
),
|
||||
)
|
||||
setTitle(R.string.user_agent)
|
||||
setDialogTitle(R.string.user_agent)
|
||||
}
|
||||
}
|
||||
|
||||
is ConfigKey.ShowSuspiciousContent -> {
|
||||
SwitchPreferenceCompat(requireContext()).apply {
|
||||
setDefaultValue(key.defaultValue)
|
||||
|
||||
@@ -19,6 +19,7 @@ import androidx.preference.PreferenceViewHolder
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.core.prefs.ColorScheme
|
||||
import org.koitharu.kotatsu.databinding.ItemColorSchemeBinding
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class ThemeChooserPreference @JvmOverloads constructor(
|
||||
context: Context,
|
||||
@@ -68,7 +69,7 @@ class ThemeChooserPreference @JvmOverloads constructor(
|
||||
}
|
||||
scrollView.viewTreeObserver.run {
|
||||
scrollPersistListener?.let { removeOnScrollChangedListener(it) }
|
||||
scrollPersistListener = ScrollPersistListener(scrollView, lastScrollPosition)
|
||||
scrollPersistListener = ScrollPersistListener(WeakReference(scrollView), lastScrollPosition)
|
||||
addOnScrollChangedListener(scrollPersistListener)
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
@@ -106,7 +107,6 @@ class ThemeChooserPreference @JvmOverloads constructor(
|
||||
}
|
||||
super.onRestoreInstanceState(state.superState)
|
||||
lastScrollPosition[0] = state.scrollPosition
|
||||
// notifyChanged()
|
||||
}
|
||||
|
||||
private fun setValueInternal(enumName: String, notifyChanged: Boolean) {
|
||||
@@ -152,11 +152,12 @@ class ThemeChooserPreference @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
private class ScrollPersistListener(
|
||||
private val scrollView: HorizontalScrollView,
|
||||
private val scrollViewRef: WeakReference<HorizontalScrollView>,
|
||||
private val lastScrollPosition: IntArray,
|
||||
) : ViewTreeObserver.OnScrollChangedListener {
|
||||
|
||||
override fun onScrollChanged() {
|
||||
val scrollView = scrollViewRef.get() ?: return
|
||||
lastScrollPosition[0] = scrollView.scrollX
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,15 +14,17 @@ import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.EntryPointAccessors
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import org.koitharu.kotatsu.core.db.*
|
||||
import org.koitharu.kotatsu.core.logs.FileLogger
|
||||
import org.koitharu.kotatsu.core.logs.SyncLogger
|
||||
import java.util.concurrent.Callable
|
||||
|
||||
abstract class SyncProvider : ContentProvider() {
|
||||
|
||||
private val database by lazy {
|
||||
val appContext = checkNotNull(context?.applicationContext)
|
||||
val entryPoint = EntryPointAccessors.fromApplication(appContext, SyncProviderEntryPoint::class.java)
|
||||
entryPoint.database()
|
||||
private val entryPoint by lazy {
|
||||
EntryPointAccessors.fromApplication(checkNotNull(context), SyncProviderEntryPoint::class.java)
|
||||
}
|
||||
private val database by lazy { entryPoint.database }
|
||||
private val logger by lazy { entryPoint.logger }
|
||||
|
||||
private val supportedTables = setOf(
|
||||
TABLE_FAVOURITES,
|
||||
@@ -50,6 +52,7 @@ abstract class SyncProvider : ContentProvider() {
|
||||
.selection(selection, selectionArgs)
|
||||
.orderBy(sortOrder)
|
||||
.create()
|
||||
logger.log("query: ${sqlQuery.sql} (${selectionArgs.contentToString()})")
|
||||
return database.openHelper.readableDatabase.query(sqlQuery)
|
||||
}
|
||||
|
||||
@@ -62,6 +65,7 @@ abstract class SyncProvider : ContentProvider() {
|
||||
if (values == null || table == null) {
|
||||
return null
|
||||
}
|
||||
logger.log { "insert: $table [$values]" }
|
||||
val db = database.openHelper.writableDatabase
|
||||
if (db.insert(table, SQLiteDatabase.CONFLICT_IGNORE, values) < 0) {
|
||||
db.update(table, values)
|
||||
@@ -71,6 +75,7 @@ abstract class SyncProvider : ContentProvider() {
|
||||
|
||||
override fun delete(uri: Uri, selection: String?, selectionArgs: Array<out String>?): Int {
|
||||
val table = getTableName(uri) ?: return 0
|
||||
logger.log { "delete: $table ($selection) : (${selectionArgs.contentToString()})" }
|
||||
return database.openHelper.writableDatabase.delete(table, selection, selectionArgs)
|
||||
}
|
||||
|
||||
@@ -79,6 +84,7 @@ abstract class SyncProvider : ContentProvider() {
|
||||
if (values == null || table == null) {
|
||||
return 0
|
||||
}
|
||||
logger.log { "update: $table ($selection) : (${selectionArgs.contentToString()}) [$values]" }
|
||||
return database.openHelper.writableDatabase
|
||||
.update(table, SQLiteDatabase.CONFLICT_IGNORE, values, selection, selectionArgs)
|
||||
}
|
||||
@@ -119,6 +125,10 @@ abstract class SyncProvider : ContentProvider() {
|
||||
@EntryPoint
|
||||
@InstallIn(SingletonComponent::class)
|
||||
interface SyncProviderEntryPoint {
|
||||
fun database(): MangaDatabase
|
||||
|
||||
val database: MangaDatabase
|
||||
|
||||
@get:SyncLogger
|
||||
val logger: FileLogger
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.content.ContentProviderClient
|
||||
import android.content.Context
|
||||
import android.content.SyncResult
|
||||
import android.os.Bundle
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.sync.domain.SyncController
|
||||
import org.koitharu.kotatsu.sync.domain.SyncHelper
|
||||
import org.koitharu.kotatsu.utils.ext.onError
|
||||
@@ -20,6 +21,9 @@ class FavouritesSyncAdapter(context: Context) : AbstractThreadedSyncAdapter(cont
|
||||
provider: ContentProviderClient,
|
||||
syncResult: SyncResult,
|
||||
) {
|
||||
if (!context.resources.getBoolean(R.bool.is_sync_enabled)) {
|
||||
return
|
||||
}
|
||||
val syncHelper = SyncHelper(context, account, provider)
|
||||
runCatchingCancellable {
|
||||
syncHelper.syncFavourites(syncResult)
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.content.ContentProviderClient
|
||||
import android.content.Context
|
||||
import android.content.SyncResult
|
||||
import android.os.Bundle
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.sync.domain.SyncController
|
||||
import org.koitharu.kotatsu.sync.domain.SyncHelper
|
||||
import org.koitharu.kotatsu.utils.ext.onError
|
||||
@@ -20,6 +21,9 @@ class HistorySyncAdapter(context: Context) : AbstractThreadedSyncAdapter(context
|
||||
provider: ContentProviderClient,
|
||||
syncResult: SyncResult,
|
||||
) {
|
||||
if (!context.resources.getBoolean(R.bool.is_sync_enabled)) {
|
||||
return
|
||||
}
|
||||
val syncHelper = SyncHelper(context, account, provider)
|
||||
runCatchingCancellable {
|
||||
syncHelper.syncHistory(syncResult)
|
||||
|
||||
@@ -3,8 +3,9 @@ package org.koitharu.kotatsu.utils.ext
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
import okhttp3.Response
|
||||
import okhttp3.internal.closeQuietly
|
||||
import okio.IOException
|
||||
import org.json.JSONObject
|
||||
import org.koitharu.kotatsu.parsers.util.parseJson
|
||||
import java.net.HttpURLConnection
|
||||
|
||||
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 Response.parseJsonOrNull(): JSONObject? {
|
||||
return if (code == HttpURLConnection.HTTP_NO_CONTENT) {
|
||||
null
|
||||
} else {
|
||||
parseJson()
|
||||
return try {
|
||||
when {
|
||||
!isSuccessful -> throw IOException(body?.string())
|
||||
code == HttpURLConnection.HTTP_NO_CONTENT -> null
|
||||
else -> JSONObject(body?.string() ?: return null)
|
||||
}
|
||||
} finally {
|
||||
closeQuietly()
|
||||
}
|
||||
}
|
||||
|
||||
4
app/src/main/res/color-v23/colored_button.xml
Normal file
4
app/src/main/res/color-v23/colored_button.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:alpha="0.08" android:color="?attr/elevationOverlayColor" />
|
||||
</selector>
|
||||
4
app/src/main/res/color/colored_button.xml
Normal file
4
app/src/main/res/color/colored_button.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:alpha="0.08" android:color="@color/kotatsu_onSurface" />
|
||||
</selector>
|
||||
@@ -2,6 +2,6 @@
|
||||
<shape
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/toolbar_background_scrim" />
|
||||
<solid android:color="@color/colored_button" />
|
||||
<corners android:radius="100dp" />
|
||||
</shape>
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:parentTag="android.widget.FrameLayout">
|
||||
|
||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
android:id="@+id/progressBar"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:indeterminate="true"
|
||||
android:max="100"
|
||||
tools:viewBindingType="android.widget.ProgressBar" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/layout_error"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginStart="60dp"
|
||||
android:layout_marginEnd="60dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView_error"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawablePadding="12dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:textAlignment="center"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
app:drawableTopCompat="@drawable/ic_error_large"
|
||||
tools:text="@tools:sample/lorem[6]" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_retry"
|
||||
style="@style/Widget.Material3.Button.TonalButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="@string/try_again" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</merge>
|
||||
@@ -47,7 +47,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/name"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="textCapSentences" />
|
||||
android:inputType="textCapSentences"
|
||||
android:maxLength="120" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
@@ -5,15 +5,13 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:parentTag="android.widget.FrameLayout">
|
||||
|
||||
<!-- https://github.com/material-components/material-components-android/issues/2028 -->
|
||||
<ProgressBar
|
||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
android:id="@+id/progressBar"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:indeterminate="true"
|
||||
android:max="100"
|
||||
tools:viewBindingType="android.widget.ProgressBar" />
|
||||
android:max="100" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/layout_error"
|
||||
@@ -46,6 +44,12 @@
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="@string/try_again" />
|
||||
|
||||
</LinearLayout>
|
||||
<Button
|
||||
android:id="@+id/button_error_details"
|
||||
style="@style/Widget.Material3.Button.TextButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/details" />
|
||||
|
||||
</LinearLayout>
|
||||
</merge>
|
||||
11
app/src/main/res/menu/opt_explore.xml
Normal file
11
app/src/main/res/menu/opt_explore.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_grid"
|
||||
android:checkable="true"
|
||||
android:title="@string/show_in_grid_view"
|
||||
android:titleCondensed="@string/grid" />
|
||||
|
||||
</menu>
|
||||
@@ -326,7 +326,8 @@
|
||||
<string name="clear_all_history">Ачысціць усю гісторыю</string>
|
||||
<string name="history_cleared">Гісторыя ачышчана</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="saved_manga">Захаваная манга</string>
|
||||
<string name="enter_email_text">Каб працягнуць, увядзіце свой адрас электроннай пошты</string>
|
||||
@@ -415,4 +416,9 @@
|
||||
<string name="options">Параметры</string>
|
||||
<string name="downloading_manga">Спампоўка мангі</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>
|
||||
@@ -403,7 +403,5 @@
|
||||
<string name="show_suspicious_content">Verdächtige Inhalte anzeigen</string>
|
||||
<string name="status_dropped">Abgebrochen</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>
|
||||
</resources>
|
||||
@@ -78,4 +78,12 @@
|
||||
<string name="operation_not_supported">Αυτή η λειτουργία δεν υποστηρίζεται</string>
|
||||
<string name="read_mode">Λειτουργία ανάγνωσης</string>
|
||||
<string name="grid_size">Μέγεθος πλέγματος</string>
|
||||
<string name="theme_name_mamimi">Μαμίμι</string>
|
||||
<string name="theme_name_kanade">Κανάντε</string>
|
||||
<string name="nothing_here">Δεν υπάρχει τίποτα εδώ</string>
|
||||
<string name="theme_name_miku">Μίκου</string>
|
||||
<string name="theme_name_asuka">Άσουκα</string>
|
||||
<string name="theme_name_mion">Μιόν</string>
|
||||
<string name="theme_name_rikka">Ρίκκα</string>
|
||||
<string name="theme_name_sakura">Σακούρα</string>
|
||||
</resources>
|
||||
@@ -360,7 +360,6 @@
|
||||
<string name="explore">Explorar</string>
|
||||
<string name="memory_usage_pattern">%s - %s</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">Confirmación de salida</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">Activar el registro</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="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="theme_name_asuka">Asuka</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">Permitir actualizaciones inestables</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>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
35
app/src/main/res/values-fil/plurals.xml
Normal file
35
app/src/main/res/values-fil/plurals.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="items">
|
||||
<item quantity="one">%1$d aytem</item>
|
||||
<item quantity="other">%1$d (na) aytem</item>
|
||||
</plurals>
|
||||
<plurals name="pages">
|
||||
<item quantity="one">"Kabuuang %1$d pahina"</item>
|
||||
<item quantity="other">Kabuuang %1$d (na) pahina</item>
|
||||
</plurals>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">%1$d minutong nakakalipas</item>
|
||||
<item quantity="other">%1$d (na) minutong nakakalipas</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="one">%1$d bagong kabanata</item>
|
||||
<item quantity="other">%1$d mga bagong kabanata</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="one">"%1$d kabanata"</item>
|
||||
<item quantity="other">%1$d (na) kabanata</item>
|
||||
</plurals>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="one">%1$d kabanata mula sa %2$d</item>
|
||||
<item quantity="other">%1$d (na) kabanata mula sa %2$d</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%1$d oras ang nakalipas</item>
|
||||
<item quantity="other">%1$d (na) oras ang nakalipas</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">%1$d araw ang nakalipas</item>
|
||||
<item quantity="other">%1$d (na) araw ang nakalipas</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
411
app/src/main/res/values-fil/strings.xml
Normal file
411
app/src/main/res/values-fil/strings.xml
Normal file
@@ -0,0 +1,411 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="updated">Na-update</string>
|
||||
<string name="newest">Pinakabago</string>
|
||||
<string name="light">Maliwanag</string>
|
||||
<string name="by_rating">Marka</string>
|
||||
<string name="filter">Pansala</string>
|
||||
<string name="theme">Tema</string>
|
||||
<string name="dark">Madilim</string>
|
||||
<string name="automatic">Sundan ang sistema</string>
|
||||
<string name="error_occurred">May nangyaring error</string>
|
||||
<string name="network_error">Error sa network</string>
|
||||
<string name="details">Mga detalye</string>
|
||||
<string name="chapters">Mga kabanata</string>
|
||||
<string name="list">Listahan</string>
|
||||
<string name="page_saved">Na-save</string>
|
||||
<string name="share_image">I-share ang larawan</string>
|
||||
<string name="_import">Mag-angkat</string>
|
||||
<string name="delete">Tanggalin</string>
|
||||
<string name="operation_not_supported">Hindi suportado ang operasyong ito</string>
|
||||
<string name="text_file_not_supported">Pumili ng ZIP o CBZ file.</string>
|
||||
<string name="history_and_cache">Kasaysayan at cache</string>
|
||||
<string name="no_description">Walang paglalarawan</string>
|
||||
<string name="grid_size">Laki ng grid</string>
|
||||
<string name="search_on_s">Hanapin sa %s</string>
|
||||
<string name="delete_manga">Tanggalin ang manga</string>
|
||||
<string name="text_delete_local_manga">Permanenteng tanggalin ang \"%s\" sa device\?</string>
|
||||
<string name="reader_settings">Mga setting sa pagbasa</string>
|
||||
<string name="switch_pages">Magpalit ng (mga) pahina</string>
|
||||
<string name="volume_buttons">Pindutan ng volume</string>
|
||||
<string name="_continue">Magpatuloy</string>
|
||||
<string name="warning">Babala</string>
|
||||
<string name="dont_ask_again">Huwag na magtanong muli</string>
|
||||
<string name="cancelling_">Kinakansela…</string>
|
||||
<string name="clear_thumbs_cache">I-clear ang cache ng mga thumbnail</string>
|
||||
<string name="search_history_cleared">Na-clear</string>
|
||||
<string name="gestures_only">Mga kilos lang</string>
|
||||
<string name="application_update">Tingnan kung may mga bagong bersyon ng app</string>
|
||||
<string name="app_update_available">Available ang isang bagong bersyon ng app</string>
|
||||
<string name="open_in_browser">Buksan sa web browser</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="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d ng %2$d sa</string>
|
||||
<string name="new_chapters">Mga bagong kabanata</string>
|
||||
<string name="read_from_start">Basahin mula sa simula</string>
|
||||
<string name="restart">I-restart</string>
|
||||
<string name="categories_">Mga kategorya…</string>
|
||||
<string name="rename">Palitan ang pangalan</string>
|
||||
<string name="text_search_holder_secondary">Subukang i-reformulate ang query.</string>
|
||||
<string name="text_history_holder_primary">Ang iyong nabasa ay ipapakita dito</string>
|
||||
<string name="text_shelf_holder_primary">Ang iyong manga ay ipapakita dito</string>
|
||||
<string name="text_local_holder_primary">Mag-save muna ng isang bagay</string>
|
||||
<string name="text_local_holder_secondary">I-save ito mula sa mga online na source o mag import ng mga file.</string>
|
||||
<string name="manga_shelf">Istante</string>
|
||||
<string name="pages_animation">Animasyon ng pahina</string>
|
||||
<string name="not_available">Hindi magagamit</string>
|
||||
<string name="cannot_find_available_storage">Walang available na storage</string>
|
||||
<string name="other_storage">Iba pang storage</string>
|
||||
<string name="done">Tapos na</string>
|
||||
<string name="all_favourites">Lahat ng paborito</string>
|
||||
<string name="favourites_category_empty">Walang laman ang kategorya</string>
|
||||
<string name="read_later">Basahin mamaya</string>
|
||||
<string name="updates">Mga update</string>
|
||||
<string name="search_results">Mga resulta ng paghahanap</string>
|
||||
<string name="related">Kaugnay</string>
|
||||
<string name="size_s">Laki: %s</string>
|
||||
<string name="waiting_for_network">Naghihintay ng network…</string>
|
||||
<string name="clear_updates_feed">I-clear ang feed ng mga update</string>
|
||||
<string name="updates_feed_cleared">Na-clear</string>
|
||||
<string name="update">Update</string>
|
||||
<string name="feed_will_update_soon">Ang pag update ng feed ay magsisimula sa lalong madaling panahon</string>
|
||||
<string name="track_sources">Maghanap ng mga update</string>
|
||||
<string name="enter_password">Ilagay ang password</string>
|
||||
<string name="protect_application_summary">Humingi ng password kapag sinimulan ang Kotatsu</string>
|
||||
<string name="about">Tungkol rito</string>
|
||||
<string name="check_for_updates">Maghanap ng update</string>
|
||||
<string name="checking_for_updates">Naghahanap ng update…</string>
|
||||
<string name="update_check_failed">Hindi makahanap ng mga update</string>
|
||||
<string name="right_to_left">Kanan sa kaliwa</string>
|
||||
<string name="create_category">Bagong Kategorya</string>
|
||||
<string name="zoom_mode_fit_center">Pagkasyahin sa gitna</string>
|
||||
<string name="zoom_mode_keep_start">Panatilihin sa simula</string>
|
||||
<string name="black_dark_theme_summary">Gumagamit ng mas kaunting power sa mga AMOLED na screen</string>
|
||||
<string name="backup_restore">I-backup at i-restore</string>
|
||||
<string name="data_restored">Naibalik na</string>
|
||||
<string name="preparing_">Naghahanda…</string>
|
||||
<string name="report_github">Lumikha ng isyu sa GitHub</string>
|
||||
<string name="file_not_found">Hindi nahanap ang file</string>
|
||||
<string name="backup_information">Maaari kang lumikha ng backup ng iyong kasaysayan at mga paborito at ibalik ito</string>
|
||||
<string name="just_now">Ngayon lang</string>
|
||||
<string name="yesterday">Kahapon</string>
|
||||
<string name="long_ago">Matagal na ang nakalipas</string>
|
||||
<string name="today">Ngayong araw</string>
|
||||
<string name="tap_to_try_again">I-tap para subukang muli</string>
|
||||
<string name="captcha_solve">Lutasin</string>
|
||||
<string name="cookies_cleared">Inalis ang lahat ng mga cookie</string>
|
||||
<string name="chapters_checking_progress">Sinusuri ang mga bagong kabanata: %1$d ng %2$d</string>
|
||||
<string name="clear_feed">I-clear ang feed</string>
|
||||
<string name="check_for_new_chapters">Suriin ang mga bagong kabanata</string>
|
||||
<string name="sign_in">Mag-sign in</string>
|
||||
<string name="auth_required">Mag-sign in upang tingnan ang nilalamang ito</string>
|
||||
<string name="default_s">Default: %s</string>
|
||||
<string name="next">Susunod</string>
|
||||
<string name="confirm">Kumpirmahin</string>
|
||||
<string name="password_length_hint">Ang password ay dapat na 4 na character o higit pa</string>
|
||||
<string name="search_only_on_s">Maghanap lamang sa %s</string>
|
||||
<string name="other">Iba pa</string>
|
||||
<string name="welcome">Maligayang pagdating</string>
|
||||
<string name="backup_saved">Na-save ang backup</string>
|
||||
<string name="read_more">Magbasa pa</string>
|
||||
<string name="text_downloads_holder">Walang aktibong pag-download</string>
|
||||
<string name="chapter_is_missing">Kulang ang kabanata</string>
|
||||
<string name="about_feedback">Feedback</string>
|
||||
<string name="about_feedback_4pda">Paksa sa 4PDA</string>
|
||||
<string name="auth_not_supported_by">Ang pag-log in sa %s ay hindi suportado</string>
|
||||
<string name="genres">Mga genre</string>
|
||||
<string name="state_ongoing">Patuloy</string>
|
||||
<string name="system_default">Default</string>
|
||||
<string name="exclude_nsfw_from_history">Hindi isali ang NSFW manga mula sa kasaysayan</string>
|
||||
<string name="show_pages_numbers">Mga pahinang may bilang</string>
|
||||
<string name="importing_progress">Ini-import ang manga: %1$d ng %2$d</string>
|
||||
<string name="screenshots_policy">Patakaran sa screenshot</string>
|
||||
<string name="screenshots_allow">Payagan</string>
|
||||
<string name="screenshots_block_all">Palaging i-block</string>
|
||||
<string name="suggestions">Mga mungkahi</string>
|
||||
<string name="suggestions_enable">Paganahin ang mga mungkahi</string>
|
||||
<string name="text_suggestion_holder">Simulan ang pagbabasa ng manga at makakakuha ka ng mga personalized na mungkahi</string>
|
||||
<string name="exclude_nsfw_from_suggestions">Huwag magmungkahi ng NSFW manga</string>
|
||||
<string name="enabled">Pinagana</string>
|
||||
<string name="find_genre">Maghanap ng genre</string>
|
||||
<string name="onboard_text">Pumili ng mga wika na gusto mong basahin ang manga. Maaari mo itong baguhin sa ibang pagkakataon sa mga setting.</string>
|
||||
<string name="open_menu">Buksan ang menu</string>
|
||||
<string name="local_storage">Lokal na storage</string>
|
||||
<string name="favourites">Mga paborito</string>
|
||||
<string name="history">Nakaraan</string>
|
||||
<string name="list_mode">Mode na listahan</string>
|
||||
<string name="detailed_list">Detalyadong listahan</string>
|
||||
<string name="grid">Grid</string>
|
||||
<string name="settings">Mga setting</string>
|
||||
<string name="remote_sources">Mga remote na source</string>
|
||||
<string name="loading_">Naglo-load…</string>
|
||||
<string name="close">Isara</string>
|
||||
<string name="nothing_found">Walang nahanap</string>
|
||||
<string name="remove">Tanggalin</string>
|
||||
<string name="add_new_category">Bagong Kategorya</string>
|
||||
<string name="enter_category_name">Ipasok ang pangalan ng kategorya</string>
|
||||
<string name="read">Nabasa</string>
|
||||
<string name="you_have_not_favourites_yet">Wala pang paborito</string>
|
||||
<string name="add_to_favourites">I-paborito ito</string>
|
||||
<string name="add">Idagdag</string>
|
||||
<string name="save">I-save</string>
|
||||
<string name="share">Ibahagi</string>
|
||||
<string name="create_shortcut">Lumikha ng shortcut…</string>
|
||||
<string name="share_s">Ibahagi sa %s</string>
|
||||
<string name="search">Maghanap</string>
|
||||
<string name="search_manga">Maghanap ng manga</string>
|
||||
<string name="manga_downloading_">Nagda-download…</string>
|
||||
<string name="processing_">Nagpoproseso…</string>
|
||||
<string name="download_complete">Na-download</string>
|
||||
<string name="downloads">Mga download</string>
|
||||
<string name="by_name">Pangalan</string>
|
||||
<string name="popular">Sikat</string>
|
||||
<string name="pages">Mga pahina</string>
|
||||
<string name="clear_history">I-clear ang kasaysayan</string>
|
||||
<string name="clear_search_history">I-clear ang kasaysayan ng paghahanap</string>
|
||||
<string name="network_consumption_warning">Maaari itong maglipat ng maraming data</string>
|
||||
<string name="new_version_s">Bagong bersyon: %s</string>
|
||||
<string name="passwords_mismatch">Hindi tumutugma sa mga password</string>
|
||||
<string name="clear_cookies">I-clear ang mga cookie</string>
|
||||
<string name="clear_pages_cache">I-clear ang page cache</string>
|
||||
<string name="save_manga">I-save</string>
|
||||
<string name="show_notification_app_update">Ipakita ang abiso kung may available na bagong bersyon</string>
|
||||
<string name="download">I-download</string>
|
||||
<string name="notifications_settings">Mga setting ng abiso</string>
|
||||
<string name="notification_sound">Tunog ng abiso</string>
|
||||
<string name="favourites_categories">Mga paboritong kategorya</string>
|
||||
<string name="category_delete_confirm">Alisin ang kategoryang \"%s\" sa iyong mga paborito\?
|
||||
\nMawawala ang lahat ng manga sa loob nito.</string>
|
||||
<string name="remove_category">Tanggalin</string>
|
||||
<string name="text_empty_holder_primary">Parang walang laman dito…</string>
|
||||
<string name="text_categories_holder">Maaari kang gumamit ng mga kategorya upang ayusin ang iyong mga paborito. Pindutin ang «+» upang lumikha ng kategorya</string>
|
||||
<string name="text_history_holder_secondary">Hanapin kung ano ang babasahin sa side menu.</string>
|
||||
<string name="text_shelf_holder_secondary">Hanapin kung ano ang babasahin sa seksyong «Mag-explore»</string>
|
||||
<string name="recent_manga">Kamakailan</string>
|
||||
<string name="manga_save_location">Folder para sa mga download</string>
|
||||
<string name="save_page">I-save ang pahina</string>
|
||||
<string name="_s_deleted_from_local_storage">Natanggal ang \"%s\" sa lokal na storage</string>
|
||||
<string name="history_is_empty">Wala pang kasaysayan</string>
|
||||
<string name="wait_for_loading_finish">Hintaying matapos ang paglo-load…</string>
|
||||
<string name="text_clear_history_prompt">Permanenteng i-clear ang lahat ng kasaysayan ng pagbabasa\?</string>
|
||||
<string name="dont_check">Huwag suriin</string>
|
||||
<string name="repeat_password">Ulitin ang password</string>
|
||||
<string name="protect_application">Protektahan ang app</string>
|
||||
<string name="wrong_password">Maling password</string>
|
||||
<string name="app_version">Bersyon %s</string>
|
||||
<string name="scale_mode">Mode ng scale</string>
|
||||
<string name="no_update_available">Walang available na update</string>
|
||||
<string name="reverse">Baliktarin</string>
|
||||
<string name="group">Grupo</string>
|
||||
<string name="silent">Tahimik</string>
|
||||
<string name="zoom_mode_fit_width">Pagkasyahin sa lapad</string>
|
||||
<string name="black_dark_theme">Itim</string>
|
||||
<string name="create_backup">Lumikha ng data backup</string>
|
||||
<string name="restore_backup">Ibalik mula sa backup</string>
|
||||
<string name="data_restored_success">Naibalik ang lahat ng data</string>
|
||||
<string name="data_restored_with_errors">Ang data ay naibalik, ngunit may mga error</string>
|
||||
<string name="reader_mode_hint">Ang napiling pagsasaayos ay maaalala para sa manga na ito</string>
|
||||
<string name="about_app_translation_summary">Isalin ang app na ito</string>
|
||||
<string name="auth_complete">Awtorisado na</string>
|
||||
<string name="captcha_required">Kinakailangan ang CAPTCHA</string>
|
||||
<string name="text_clear_updates_feed_prompt">I-clear nang permanente ang lahat ng update history\?</string>
|
||||
<string name="_and_x_more">…at %1$d higit pa</string>
|
||||
<string name="protect_application_subtitle">Maglagay ng password para simulan ang app</string>
|
||||
<string name="tracker_warning">Ang ilang device ay may iba\'t ibang gawi ng system, na maaaring masira ang mga gawain sa background.</string>
|
||||
<string name="queued">Nakapila na</string>
|
||||
<string name="chapter_is_missing_text">I-download o basahin ang nawawalang kabanata online.</string>
|
||||
<string name="text_clear_cookies_prompt">Mala-log out ka mula sa lahat ng source</string>
|
||||
<string name="state_finished">Tapos na</string>
|
||||
<string name="text_clear_search_history_prompt">Alisin ang lahat ng kamakailang query sa paghahanap nang permanente\?</string>
|
||||
<string name="about_app_translation">Pagsasalin</string>
|
||||
<string name="error_empty_name">Kailangan mong maglagay ng pangalan</string>
|
||||
<string name="date_format">Format ng petsa</string>
|
||||
<string name="dynamic_theme">Dynamic na tema</string>
|
||||
<string name="dynamic_theme_summary">Naglalapat ng temang ginawa sa scheme ng kulay ng iyong wallpaper</string>
|
||||
<string name="screenshots_block_nsfw">I-block sa NSFW</string>
|
||||
<string name="suggestions_summary">Magmungkahi ng manga batay sa iyong mga kagustuhan</string>
|
||||
<string name="suggestions_info">Ang lahat ng data ay sinusuri nang lokal sa aparatong ito. Walang paglipat ng iyong personal na data sa anumang mga serbisyo</string>
|
||||
<string name="disabled">Hindi pinagana</string>
|
||||
<string name="filter_load_error">Hindi ma-load ang listahan ng mga genre</string>
|
||||
<string name="reset_filter">I-reset ang filter</string>
|
||||
<string name="text_feed_holder">Ang mga bagong kabanata ng iyong binabasa ay makikita dito</string>
|
||||
<string name="rotate_screen">I-rotate ang screen</string>
|
||||
<string name="zoom_mode_fit_height">Pagkasyahin sa tangkad</string>
|
||||
<string name="never">Hindi kailanman</string>
|
||||
<string name="only_using_wifi">Sa Wi-Fi lang</string>
|
||||
<string name="close_menu">Isara ang menu</string>
|
||||
<string name="computing_">Nagco-compute…</string>
|
||||
<string name="chapter_d_of_d">Kabanata %1$d ng %2$d</string>
|
||||
<string name="try_again">Subukan ulit</string>
|
||||
<string name="sort_order">Pag-aayos ng order</string>
|
||||
<string name="clear">I-clear</string>
|
||||
<string name="_s_removed_from_history">Natanggal ang \"%s\" sa kasaysayan</string>
|
||||
<string name="taps_on_edges">Mga taps ng gilid</string>
|
||||
<string name="enabled_sources">Mga ginamit na source</string>
|
||||
<string name="available_sources">Magagamit na mga source</string>
|
||||
<string name="always">Lagi na lang</string>
|
||||
<string name="preload_pages">I-preload ang mga pahina</string>
|
||||
<string name="logged_in_as">Naka-log in bilang %s</string>
|
||||
<string name="various_languages">Iba\'t ibang wika</string>
|
||||
<string name="search_chapters">Maghanap ng kabanata</string>
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
<string name="appearance">Hitsura</string>
|
||||
<string name="suggestions_excluded_genres">Hindi isali ang mga genre</string>
|
||||
<string name="suggestions_excluded_genres_summary">Tukuyin ang mga genre na hindi mo nais na makita sa mga mungkahi</string>
|
||||
<string name="removal_completed">Nakumpleto na ang pagtanggal</string>
|
||||
<string name="download_slowdown_summary">Tumutulong na maiwasan ang pag-block ng iyong IP address</string>
|
||||
<string name="local_manga_processing">Naka-save na pagproseso ng manga</string>
|
||||
<string name="account_already_exists">Mayroon nang account</string>
|
||||
<string name="back">Bumalik</string>
|
||||
<string name="sync">Pag-synchronize</string>
|
||||
<string name="email_enter_hint">Ilagay ang iyong email upang magpatuloy</string>
|
||||
<string name="hide">Itago</string>
|
||||
<string name="new_sources_text">May mga bagong source ng manga</string>
|
||||
<string name="show_notification_new_chapters_off">Hindi ka makakatanggap ng mga abiso ngunit ang mga bagong kabanata ay iha-highlight sa mga listahan</string>
|
||||
<string name="notifications_enable">Paganahin ang mga abiso</string>
|
||||
<string name="edit_category">Ayusin ang kategorya</string>
|
||||
<string name="tracking">Tina-track</string>
|
||||
<string name="empty_favourite_categories">Walang mga paboritong kategorya</string>
|
||||
<string name="logout">Mag-log out</string>
|
||||
<string name="bookmark_add">Magdagdag ng bookmark</string>
|
||||
<string name="bookmark_removed">Tinanggal ang bookmark</string>
|
||||
<string name="removed_from_history">Inalis sa kasaysayan</string>
|
||||
<string name="dns_over_https">DNS sa HTTPS</string>
|
||||
<string name="default_mode">Default na mode</string>
|
||||
<string name="detect_reader_mode">Automatikong matukoy ang reader mode</string>
|
||||
<string name="crash_text">May nangyaring mali. Mangyaring magsumite ng isang bug report sa mga developer upang matulungan kaming ayusin ito.</string>
|
||||
<string name="send">Ipadala</string>
|
||||
<string name="status_re_reading">Muling pagbabasa</string>
|
||||
<string name="status_dropped">Binitawan</string>
|
||||
<string name="appwidget_shelf_description">Manga mula sa iyong mga paborito</string>
|
||||
<string name="appwidget_recent_description">Ang iyong kamakailang nabasa na manga</string>
|
||||
<string name="data_deletion">Pagtanggal ng data</string>
|
||||
<string name="show_reading_indicators_summary">Ipakita ang porsyento na nabasa sa kasaysayan at mga paborito</string>
|
||||
<string name="show_all">Ipakita lahat</string>
|
||||
<string name="select_range">Pumili ng saklaw</string>
|
||||
<string name="clear_all_history">I-clear ang lahat ng kasaysayan</string>
|
||||
<string name="no_bookmarks_summary">Maaari kang lumikha ng bookmark habang nagbabasa ng manga</string>
|
||||
<string name="bookmarks_removed">Tinanggal ang mga bookmark</string>
|
||||
<string name="random">Random</string>
|
||||
<string name="no_manga_sources">Walang mga source ng manga</string>
|
||||
<string name="no_manga_sources_text">Paganahin ang mga source ng manga upang basahin ang manga online</string>
|
||||
<string name="reorder">Ayusin muli</string>
|
||||
<string name="empty">Walang laman</string>
|
||||
<string name="changelog">Changelog</string>
|
||||
<string name="confirm_exit">Pindutin muli ang Bumalik upang lumabas</string>
|
||||
<string name="exit_confirmation_summary">Pindutin ang Bumalik nang dalawang beses upang lumabas sa app</string>
|
||||
<string name="exit_confirmation">Pagkumpirma ng paglabas</string>
|
||||
<string name="saved_manga">Na-save na manga</string>
|
||||
<string name="explore">Mag-Explore</string>
|
||||
<string name="other_cache">Iba pang cache</string>
|
||||
<string name="storage_usage">Paggamit ng storage</string>
|
||||
<string name="available">Magagamit na</string>
|
||||
<string name="memory_usage_pattern">%s - %s</string>
|
||||
<string name="removed_from_favourites">Inalis sa mga paborito</string>
|
||||
<string name="removed_from_s">Inalis mula sa \"%s\"</string>
|
||||
<string name="options">Mga pagpipilian</string>
|
||||
<string name="downloading_manga">Nagda-download ng manga</string>
|
||||
<string name="incognito_mode">Incognito mode</string>
|
||||
<string name="app_update_available_s">Magagamit ang pag update ng application: %s</string>
|
||||
<string name="no_chapters">Walang mga kabanata</string>
|
||||
<string name="automatic_scroll">Awtomatikong pag-scroll</string>
|
||||
<string name="reader_info_pattern">Ch. %1$d/%2$d Pg. %3$d/%4$d</string>
|
||||
<string name="reader_info_bar">Ipakita ang information bar sa pagbasa</string>
|
||||
<string name="comics_archive">Archive ng mga comics</string>
|
||||
<string name="folder_with_images">Folder na may mga larawan</string>
|
||||
<string name="import_completed">Nakumpleto na ang pag-import</string>
|
||||
<string name="import_will_start_soon">Magsisimula na ang pag-import</string>
|
||||
<string name="feed">Feed</string>
|
||||
<string name="history_shortcuts_summary">Gawing magagamit ang kamakailang manga sa pamamagitan ng mahabang pagpindot sa icon ng application</string>
|
||||
<string name="history_shortcuts">Ipakita ang mga kamakailang manga shortcut</string>
|
||||
<string name="reader_control_ltr">Ergonomic na kontrol sa mambabasa</string>
|
||||
<string name="color_correction">Pagwawasto ng kulay</string>
|
||||
<string name="brightness">Liwanag</string>
|
||||
<string name="contrast">Kaibahan</string>
|
||||
<string name="text_unsaved_changes_prompt">I-save o kalimutan ang mga hindi na-save na pagbabago\?</string>
|
||||
<string name="discard">Kalimutan</string>
|
||||
<string name="error_no_space_left">Walang natitirang espasyo sa device</string>
|
||||
<string name="webtoon_zoom">Pag-zoom sa webtoon</string>
|
||||
<string name="different_languages">Iba\'t ibang wika</string>
|
||||
<string name="server_error">Server side error (%1$d). Subukang muli mamaya</string>
|
||||
<string name="clear_new_chapters_counters">I-clear din ang impormasyon tungkol sa mga bagong kabanata</string>
|
||||
<string name="prefetch_content">Preloading ng nilalaman</string>
|
||||
<string name="mark_as_current">Markahan bilang kasalukuyan</string>
|
||||
<string name="language">Wika</string>
|
||||
<string name="share_logs">Ibahagi ang mga log</string>
|
||||
<string name="show_suspicious_content">Magpakita ng kahina-hinalang nilalaman</string>
|
||||
<string name="theme_name_dynamic">Dynamic</string>
|
||||
<string name="show_in_grid_view">Ipakita sa grid view</string>
|
||||
<string name="theme_name_asuka">Asuka</string>
|
||||
<string name="theme_name_mion">Mion</string>
|
||||
<string name="theme_name_rikka">Rikka</string>
|
||||
<string name="theme_name_sakura">Sakura</string>
|
||||
<string name="theme_name_mamimi">Mamimi</string>
|
||||
<string name="theme_name_kanade">Kanade</string>
|
||||
<string name="nothing_here">Wala naman dito</string>
|
||||
<string name="services">Mga serbisyo</string>
|
||||
<string name="allow_unstable_updates">Payagan ang mga hindi stable na update</string>
|
||||
<string name="show_reading_indicators">Ipakita ang mga tagapagpahiwatig ng progress ng pagbabasa</string>
|
||||
<string name="exclude_nsfw_from_history_summary">Manga na minarkahan bilang NSFW ay hindi kailanman idadagdag sa kasaysayan at ang iyong progress ay hindi mase-save</string>
|
||||
<string name="clear_cookies_summary">Maaaring makatulong sa kaso ng ilang mga isyu. Ang lahat ng pahintulot ay mawawalan ng bisa</string>
|
||||
<string name="invalid_domain_message">Imbalidong domain</string>
|
||||
<string name="last_2_hours">Huling 2 oras</string>
|
||||
<string name="history_cleared">Nabura ang kasaysayan</string>
|
||||
<string name="manage">Pamahalaan</string>
|
||||
<string name="no_bookmarks_yet">Wala pang bookmark</string>
|
||||
<string name="nsfw">18+</string>
|
||||
<string name="not_found_404">Hindi natagpuan o inalis ang nilalaman</string>
|
||||
<string name="enable_logging_summary">Magtala ng ilang pagkilos para sa mga layunin ng pag-debug</string>
|
||||
<string name="text_delete_local_manga_batch">Permanenteng tanggalin ang mga napiling item sa device\?</string>
|
||||
<string name="chapters_empty">Walang mga kabanata sa manga na ito</string>
|
||||
<string name="suggestions_updating">Nag-a-update ang mga mungkahi</string>
|
||||
<string name="content">Nilalaman</string>
|
||||
<string name="batch_manga_save_confirm">I-download ang lahat ng napiling manga at ang mga kabanata nito\? Maaari itong kumonsumo ng maraming trapiko at storage.</string>
|
||||
<string name="parallel_downloads">Mga parallel na pag-download</string>
|
||||
<string name="download_slowdown">Pagbagal ng pag-download</string>
|
||||
<string name="chapters_will_removed_background">Tatanggalin ang mga chapters sa background. Maaari itong tumagal ng ilang oras</string>
|
||||
<string name="canceled">Kinansela</string>
|
||||
<string name="sync_title">I-sync ang iyong data</string>
|
||||
<string name="check_new_chapters_title">Tingnan ang mga bagong kabanata at ipaalam ang tungkol dito</string>
|
||||
<string name="name">Pangalan</string>
|
||||
<string name="edit">I-edit</string>
|
||||
<string name="bookmark_remove">Tanggalin ang bookmark</string>
|
||||
<string name="show_notification_new_chapters_on">Makakatanggap ka ng mga abiso tungkol sa mga update ng manga na iyong binabasa</string>
|
||||
<string name="undo">Mag-undo</string>
|
||||
<string name="status_reading">Nagbabasa</string>
|
||||
<string name="pages_cache">Cache ng mga pahina</string>
|
||||
<string name="bookmarks">Mga bookmark</string>
|
||||
<string name="categories_delete_confirm">Sigurado ka bang gusto mong tanggalin ang mga napiling paboritong kategorya\?
|
||||
\nAng lahat ng manga sa loob nito ay mawawala at hindi na ito mababawi.</string>
|
||||
<string name="bookmark_added">Idinagdag ang bookmark</string>
|
||||
<string name="detect_reader_mode_summary">Awtomatikong matukoy kung ang manga ay webtoon</string>
|
||||
<string name="disable_battery_optimization">Huwag paganahin ang pag-optimize ng baterya</string>
|
||||
<string name="disable_battery_optimization_summary">Tumutulong sa mga pagsusuri sa mga update sa background</string>
|
||||
<string name="status_planned">Nakaplano</string>
|
||||
<string name="status_completed">Nakumpleto na</string>
|
||||
<string name="status_on_hold">Naka-hold</string>
|
||||
<string name="disable_all">Huwag paganahin ang lahat</string>
|
||||
<string name="use_fingerprint">Gumamit ng fingerprint kung magagamit</string>
|
||||
<string name="report">Ulat</string>
|
||||
<string name="enter_email_text">Ilagay ang iyong email upang magpatuloy</string>
|
||||
<string name="reset">I-reset</string>
|
||||
<string name="allow_unstable_updates_summary">Magmungkahi ng mga update sa mga beta na bersyon ng app</string>
|
||||
<string name="network_unavailable">Hindi magagamit ang network</string>
|
||||
<string name="network_unavailable_hint">I-on ang Wi-Fi o mobile network para magbasa ng manga online</string>
|
||||
<string name="off_short">Naka-off</string>
|
||||
<string name="seconds_pattern">%ss</string>
|
||||
<string name="reader_control_ltr_summary">Mag-tap sa kanang gilid o ang pagpindot sa kanang key ay palaging lilipat sa susunod na pahina</string>
|
||||
<string name="reader_slider">Ipakita ang slider ng paglipat ng pahina</string>
|
||||
<string name="manga_error_description_pattern">Mga detalye ng error:<br><tt>%1$s</tt><br><br>1. Subukang <a href=%2$s>buksan ang manga sa isang web browser</a> upang matiyak na magagamit ito sa source<br>nito 2. Kung magagamit ito, magpadala ng isang ulat ng error sa mga developer.</string>
|
||||
<string name="enable_logging">Paganahin ang pag-log</string>
|
||||
<string name="source_disabled">Hindi pinagana ang source</string>
|
||||
<string name="importing_manga">Pag-import ng manga</string>
|
||||
<string name="import_completed_hint">Maaari mong tanggalin ang orihinal na file mula sa storage upang makatipid ng espasyo</string>
|
||||
<string name="color_correction_hint">Ang napiling mga setting ng kulay ay matatandaan para sa manga na ito</string>
|
||||
<string name="webtoon_zoom_summary">Payagan ang pag-zoom in/zoom out na galaw sa webtoon mode (beta)</string>
|
||||
<string name="compact">Compact</string>
|
||||
<string name="scrobbling_empty_hint">Upang subaybayan ang pag unlad ng pagbabasa, piliin ang Menu → Track sa screen ng mga detalye ng manga.</string>
|
||||
<string name="download_started">Nagsimula na ang pag-download</string>
|
||||
<string name="color_theme">Scheme ng kulay</string>
|
||||
<string name="theme_name_miku">Miku</string>
|
||||
</resources>
|
||||
@@ -403,12 +403,22 @@
|
||||
<string name="enable_logging_summary">Enregistrer certaines actions à des fins de débogage</string>
|
||||
<string name="language">Langue</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="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="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="nothing_here">Il n\'y a rien ici</string>
|
||||
<string name="theme_name_sakura">Sakura</string>
|
||||
<string name="theme_name_rikka">Rikka</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_mamimi">Mamimi</string>
|
||||
<string name="allow_unstable_updates">Autoriser les mises à jour instables</string>
|
||||
<string name="download_started">Téléchargement commencé</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="user_agent">En-tête UserAgent</string>
|
||||
<string name="settings_apply_restart_required">Veuillez redémarrer l\'application pour appliquer ces changements</string>
|
||||
</resources>
|
||||
@@ -5,8 +5,8 @@
|
||||
<string name="local_storage">Penyimpanan lokal</string>
|
||||
<string name="favourites">Favorit</string>
|
||||
<string name="history">Riwayat</string>
|
||||
<string name="error_occurred">Terjadi galat</string>
|
||||
<string name="network_error">Tidak bisa menyambung ke internet</string>
|
||||
<string name="error_occurred">Terjadi kesalahan</string>
|
||||
<string name="network_error">Kesalahan jaringan</string>
|
||||
<string name="details">Detail</string>
|
||||
<string name="grid">Kisi</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="close">Tutup</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="read">Baca</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="share_s">Bagikan %s</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="processing_">Memproses…</string>
|
||||
<string name="download_complete">Diunduh</string>
|
||||
@@ -39,9 +39,9 @@
|
||||
<string name="popular">Populer</string>
|
||||
<string name="updated">Diperbarui</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="filter">Filter</string>
|
||||
<string name="filter">Saring</string>
|
||||
<string name="theme">Tema</string>
|
||||
<string name="light">Terang</string>
|
||||
<string name="dark">Gelap</string>
|
||||
@@ -61,14 +61,14 @@
|
||||
<string name="page_saved">Disimpan</string>
|
||||
<string name="share_image">Bagikan gambar</string>
|
||||
<string name="_import">Impor</string>
|
||||
<string name="history_and_cache">Riwayat dan tembolok</string>
|
||||
<string name="clear_pages_cache">Bersihkan tembolok halaman</string>
|
||||
<string name="cache">Tembolok</string>
|
||||
<string name="history_and_cache">Riwayat dan cache</string>
|
||||
<string name="clear_pages_cache">Bersihkan cache halaman</string>
|
||||
<string name="cache">Cache</string>
|
||||
<string name="text_file_sizes">B|kB|MB|GB|TB</string>
|
||||
<string name="standard">Standar</string>
|
||||
<string name="grid_size">Ukuran kisi</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="reader_settings">Pengaturan pembaca</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="dont_ask_again">Jangan tanya lagi</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="search_history_cleared">Dibersihkan</string>
|
||||
<string name="domain">Domain</string>
|
||||
@@ -103,7 +103,7 @@
|
||||
<string name="categories_">Kategori…</string>
|
||||
<string name="rename">Ubah Nama</string>
|
||||
<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_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>
|
||||
@@ -112,7 +112,7 @@
|
||||
<string name="manga_shelf">Rak</string>
|
||||
<string name="recent_manga">Baru-baru ini</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="cannot_find_available_storage">Tidak ada penyimpanan yang tersedia</string>
|
||||
<string name="other_storage">Penyimpanan lain</string>
|
||||
@@ -133,20 +133,20 @@
|
||||
<string name="wrong_password">Kata sandi salah</string>
|
||||
<string name="protect_application">Lindungi aplikasi</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="create_backup">Buat cadangan data</string>
|
||||
<string name="data_restored">Dipulihkan</string>
|
||||
<string name="report_github">Buat isu di GitHub</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="backup_information">Anda bisa membuat cadangan riwayat dan favorit Anda dan memulihkannya</string>
|
||||
<string name="data_restored_with_errors">Data berhasil dipulihkan, tapi ada kesalahan</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="long_ago">Dulu kala</string>
|
||||
<string name="long_ago">Lama</string>
|
||||
<string name="group">Kelompok</string>
|
||||
<string name="today">Hari ini</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="captcha_required">CAPTCHA diperlukan</string>
|
||||
<string name="captcha_solve">Selesaikan</string>
|
||||
@@ -156,7 +156,7 @@
|
||||
<string name="clear_feed">Bersihkan umpan</string>
|
||||
<string name="check_for_new_chapters">Periksa bab baru</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="protect_application_subtitle">Masukkan kata sandi untuk memulai aplikasi</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="genres">Genre</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="system_default">Standar</string>
|
||||
<string name="exclude_nsfw_from_history">Kecualikan manga NSFW dari riwayat</string>
|
||||
<string name="show_pages_numbers">Halaman bernomor</string>
|
||||
<string name="exclude_nsfw_from_history">Kecualikan komik NSFW dari riwayat</string>
|
||||
<string name="show_pages_numbers">Nomor halaman</string>
|
||||
<string name="enabled_sources">Sumber yang digunakan</string>
|
||||
<string name="available_sources">Sumber yang tersedia</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="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_allow">Bolehkan</string>
|
||||
<string name="screenshots_block_nsfw">Blokir pada NSFW</string>
|
||||
<string name="screenshots_block_all">Selalu blokir</string>
|
||||
<string name="suggestions">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="text_suggestion_holder">Mulai membaca manga dan Anda akan mendapatkan saran yang dipersonalisasi</string>
|
||||
<string name="exclude_nsfw_from_suggestions">Jangan menyarankan manga NSFW</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 komik NSFW</string>
|
||||
<string name="always">Selalu</string>
|
||||
<string name="preload_pages">Muat ulang halaman</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="reset_filter">Atur ulang filter</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="only_using_wifi">Hanya di Wi-Fi</string>
|
||||
<string name="nsfw">18+</string>
|
||||
<string name="various_languages">Berbagai bahasa</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="appearance">Tampilan</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="text_delete_local_manga_batch">Hapus yang dipilih dari perangkat secara permanen\?</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="download_slowdown">Perlambatan unduhan</string>
|
||||
<string name="suggestions_updating">Saran diperbarui</string>
|
||||
<string name="download_slowdown">Perlambat unduhan</string>
|
||||
<string name="suggestions_updating">Pembaruan saran</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="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="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="notifications_enable">Aktifkan pemberitahuan</string>
|
||||
<string name="name">Nama</string>
|
||||
@@ -240,9 +240,9 @@
|
||||
<string name="bookmark_added">Markah ditambahkan</string>
|
||||
<string name="undo">Urung</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_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="show_notification_app_update">Tampilkan pemberitahuan ketika versi baru tersedia</string>
|
||||
<string name="light_indicator">Indikator LED</string>
|
||||
@@ -250,7 +250,7 @@
|
||||
<string name="favourites_categories">Kategori favorit</string>
|
||||
<string name="remove_category">Hapus</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="rotate_screen">Putar layar</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="internal_storage">Penyimpanan internal</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="no_update_available">Tidak ada pembaruan yang tersedia</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="error_empty_name">Anda harus memasukkan sebuah nama</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="zoom_mode_fit_center">Cocokkan tengah</string>
|
||||
<string name="zoom_mode_fit_height">Cocokkan dengan tinggi</string>
|
||||
<string name="zoom_mode_fit_width">Cocokkan dengan lebar</string>
|
||||
<string name="large_manga_save_confirm">Komik ini memiliki %s. Simpan semuanya\?</string>
|
||||
<string name="zoom_mode_fit_center">Pas tengah</string>
|
||||
<string name="zoom_mode_fit_height">Pas tinggi</string>
|
||||
<string name="zoom_mode_fit_width">Pas lebar</string>
|
||||
<string name="reverse">Balik</string>
|
||||
<string name="queued">Diantrikan</string>
|
||||
<string name="auth_complete">Berhasil Diotorisasi</string>
|
||||
<string name="queued">Antri</string>
|
||||
<string name="auth_complete">Diotorisasi</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="email_enter_hint">Masukkan surel Anda untuk melanjutkan</string>
|
||||
<string name="status_re_reading">Dibaca ulang</string>
|
||||
@@ -307,17 +307,17 @@
|
||||
<string name="status_on_hold">Ditunda</string>
|
||||
<string name="invalid_domain_message">Domain tidak valid</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="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="empty">Kosong</string>
|
||||
<string name="changelog">Daftar Perubahan</string>
|
||||
<string name="removed_from_s">Dihapus dari \"%s\"</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="downloading_manga">Mengunduh manga</string>
|
||||
<string name="downloading_manga">Mengunduh komik</string>
|
||||
<string name="show_all">Tampilkan semua</string>
|
||||
<string name="history_cleared">Riwayat dihapus</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="exit_confirmation_summary">Tekan Kembali dua kali untuk keluar dari aplikasi</string>
|
||||
<string name="exit_confirmation">Konfirmasi keluar</string>
|
||||
<string name="pages_cache">Tembolok halaman</string>
|
||||
<string name="other_cache">Tembolok lainnya</string>
|
||||
<string name="pages_cache">Cache halaman</string>
|
||||
<string name="other_cache">Cache lainnya</string>
|
||||
<string name="storage_usage">Penggunaan penyimpanan</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="automatic_scroll">Gulir otomatis</string>
|
||||
<string name="comics_archive">Arsip komik</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="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="contrast">Kontras</string>
|
||||
<string name="reset">Atur Ulang</string>
|
||||
<string name="color_correction_hint">Pengaturan warna yang dipilih akan diingat untuk manga ini</string>
|
||||
<string name="text_unsaved_changes_prompt">Anda memiliki perubahan belum tersimpan, apakah Anda ingin menyimpannya atau membuangnya\?</string>
|
||||
<string name="color_correction_hint">Pengaturan warna yang dipilih akan diingat untuk komik ini</string>
|
||||
<string name="text_unsaved_changes_prompt">Menyimpan atau membuang perubahan yang belum disimpan\?</string>
|
||||
<string name="discard">Buang</string>
|
||||
<string name="use_fingerprint">Gunakan sidik jari jika tersedia</string>
|
||||
<string name="appwidget_shelf_description">Manga dari favorit Anda</string>
|
||||
<string name="appwidget_recent_description">Manga yang baru-baru ini Anda baca</string>
|
||||
<string name="appwidget_shelf_description">Komik dari favorit Anda</string>
|
||||
<string name="appwidget_recent_description">Komik yang baru-baru ini Anda baca</string>
|
||||
<string name="data_deletion">Penghapusan data</string>
|
||||
<string name="account_already_exists">Akun sudah ada</string>
|
||||
<string name="back">Kembali</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="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="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\?
|
||||
\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="saved_manga">Manga tersimpan</string>
|
||||
<string name="saved_manga">Komik tersimpan</string>
|
||||
<string name="confirm_exit">Tekan Kembali lagi untuk keluar</string>
|
||||
<string name="no_chapters">Tidak ada bab</string>
|
||||
<string name="history_shortcuts">Tampilkan pintasan manga 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">Tampilkan pintasan komik baru-baru ini</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="disable_all">Matikan semua</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="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>
|
||||
@@ -403,8 +403,6 @@
|
||||
<string name="enable_logging_summary">Registra alcune azioni a scopo di debug</string>
|
||||
<string name="enable_logging">Abilita la registrazione</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="color_theme">Schema colori</string>
|
||||
<string name="show_in_grid_view">Mostra nella vista griglia</string>
|
||||
|
||||
@@ -327,7 +327,6 @@
|
||||
<string name="empty">空</string>
|
||||
<string name="changelog">変更ログ</string>
|
||||
<string name="explore">探検</string>
|
||||
<string name="tools">ツール</string>
|
||||
<string name="exit_confirmation_summary">アプリを終了するには、戻るを2回押してください</string>
|
||||
<string name="saved_manga">保存したマンガ</string>
|
||||
<string name="app_update_available_s">アプリケーションのアップデートが利用可能: %s</string>
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
<string name="webtoon">웹툰</string>
|
||||
<string name="clear_search_history">검색 기록 지우기</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="dont_ask_again">다시 묻지 않음</string>
|
||||
<string name="cancelling_">취소 중…</string>
|
||||
@@ -105,4 +105,250 @@
|
||||
<string name="read_later">나중에 읽기</string>
|
||||
<string name="search_results">검색 결과</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>
|
||||
@@ -341,7 +341,6 @@
|
||||
<string name="exit_confirmation">Avsluttingsbekreftelse</string>
|
||||
<string name="invalid_domain_message">Ugyldig daomene</string>
|
||||
<string name="share_logs">Del loggføring</string>
|
||||
<string name="theme_name_october">Oktober</string>
|
||||
<string name="color_theme">Fargedrakt</string>
|
||||
<string name="theme_name_dynamic">Dynamisk</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="history">Histórico</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="chapters">Capítulos</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="discard">Descartar</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>
|
||||
@@ -396,4 +396,23 @@
|
||||
<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="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>
|
||||
@@ -331,7 +331,6 @@
|
||||
<string name="reorder">Упорядочить</string>
|
||||
<string name="empty">Пусто</string>
|
||||
<string name="explore">Обзор</string>
|
||||
<string name="tools">Инструменты</string>
|
||||
<string name="confirm_exit">Нажмите Назад ещё раз, чтобы выйти</string>
|
||||
<string name="exit_confirmation_summary">Нажмите Назад 2 раза для выхода из приложения</string>
|
||||
<string name="other_cache">Другой кэш</string>
|
||||
@@ -404,10 +403,8 @@
|
||||
<string name="enable_logging">Включить логирование</string>
|
||||
<string name="enable_logging_summary">Записывать некоторые действия для отладки</string>
|
||||
<string name="show_suspicious_content">Отображать сомнительный контент</string>
|
||||
<string name="theme_name_mint">Мята</string>
|
||||
<string name="theme_name_dynamic">Динамическая</string>
|
||||
<string name="color_theme">Цветовая схема</string>
|
||||
<string name="theme_name_october">Октябрь</string>
|
||||
<string name="show_in_grid_view">Показать в виде сетки</string>
|
||||
<string name="theme_name_miku">Мику</string>
|
||||
<string name="theme_name_asuka">Аска</string>
|
||||
@@ -422,4 +419,6 @@
|
||||
<string name="download_started">Загрузка началась</string>
|
||||
<string name="allow_unstable_updates">Разрешить нестабильные обновления</string>
|
||||
<string name="allow_unstable_updates_summary">Предлагать обновления до бета-версий приложения</string>
|
||||
<string name="settings_apply_restart_required">Пожалуйста, перезапустите приложение, чтобы применить эти изменения</string>
|
||||
<string name="user_agent">Заголовок UserAgent</string>
|
||||
</resources>
|
||||
@@ -409,4 +409,16 @@
|
||||
<string name="theme_name_dynamic">Dinamik</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="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>
|
||||
@@ -20,7 +20,7 @@
|
||||
<string name="favourites">Уподобання</string>
|
||||
<string name="history">Історія</string>
|
||||
<string name="error_occurred">Сталася помилка</string>
|
||||
<string name="chapters">Глави</string>
|
||||
<string name="chapters">Розділи</string>
|
||||
<string name="list">Список</string>
|
||||
<string name="detailed_list">Детальний список</string>
|
||||
<string name="list_mode">Режим списку</string>
|
||||
@@ -64,7 +64,7 @@
|
||||
<string name="cache">Кеш</string>
|
||||
<string name="text_file_sizes">Б|кБ|МБ|ГБ|ТБ</string>
|
||||
<string name="standard">Стандартний</string>
|
||||
<string name="webtoon">Вебтун</string>
|
||||
<string name="webtoon">Манхва</string>
|
||||
<string name="read_mode">Режим читання</string>
|
||||
<string name="grid_size">Розмір сітки</string>
|
||||
<string name="search_on_s">Пошук по %s</string>
|
||||
@@ -88,7 +88,7 @@
|
||||
<string name="save_manga">Зберегти</string>
|
||||
<string name="notifications">Сповіщення</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="read_from_start">Читати з початку</string>
|
||||
<string name="restart">Перезавантажити</string>
|
||||
@@ -416,4 +416,9 @@
|
||||
<string name="theme_name_dynamic">Динамічний</string>
|
||||
<string name="color_theme">Колірний акцент</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>
|
||||
@@ -421,4 +421,6 @@
|
||||
<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>
|
||||
@@ -5,4 +5,5 @@
|
||||
<bool name="light_navigation_bar">false</bool>
|
||||
<bool name="com_samsung_android_icon_container_has_icon_container">true</bool>
|
||||
<bool name="is_color_themes_available">false</bool>
|
||||
<bool name="is_sync_enabled">false</bool>
|
||||
</resources>
|
||||
|
||||
@@ -6,9 +6,16 @@
|
||||
<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_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="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">
|
||||
<item>-1</item>
|
||||
<item>1</item>
|
||||
|
||||
@@ -424,4 +424,6 @@
|
||||
<string name="allow_unstable_updates">Allow unstable updates</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="user_agent">UserAgent header</string>
|
||||
<string name="settings_apply_restart_required">Please restart the application to apply these changes</string>
|
||||
</resources>
|
||||
|
||||
@@ -86,7 +86,6 @@
|
||||
<style name="Widget.Kotatsu.SearchView" parent="@style/Widget.AppCompat.SearchView">
|
||||
<item name="iconifiedByDefault">false</item>
|
||||
<item name="searchIcon">@null</item>
|
||||
<item name="hintTextAppearance">?textAppearanceBodyMedium</item>
|
||||
<item name="queryBackground">@null</item>
|
||||
<item name="android:textColorHint">?attr/colorControlNormal</item>
|
||||
<item name="android:textSize">18sp</item>
|
||||
@@ -164,9 +163,10 @@
|
||||
<item name="iconGravity">start</item>
|
||||
<item name="android:insetTop">2dp</item>
|
||||
<item name="android:insetBottom">2dp</item>
|
||||
<item name="iconTint">?attr/colorSecondary</item>
|
||||
<item name="iconTint">?attr/colorPrimaryDark</item>
|
||||
<item name="android:gravity">start|center_vertical</item>
|
||||
<item name="android:textAppearance">?textAppearanceButton</item>
|
||||
<item name="backgroundTint">@color/colored_button</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Kotatsu.TextView.Indicator" parent="Widget.MaterialComponents.TextView">
|
||||
|
||||
@@ -20,12 +20,6 @@
|
||||
android:title="@string/suggestions"
|
||||
app:allowDividerAbove="true" />
|
||||
|
||||
<ListPreference
|
||||
android:entries="@array/doh_providers"
|
||||
android:key="doh"
|
||||
android:title="@string/dns_over_https"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<ListPreference
|
||||
android:defaultValue="0"
|
||||
android:entries="@array/network_policy"
|
||||
@@ -56,6 +50,17 @@
|
||||
android:valueTo="5"
|
||||
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
|
||||
android:fragment="org.koitharu.kotatsu.settings.backup.BackupSettingsFragment"
|
||||
android:title="@string/backup_restore"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<Preference
|
||||
android:enabled="@bool/is_sync_enabled"
|
||||
android:key="sync"
|
||||
android:persistent="false"
|
||||
android:summary="@string/sync_title"
|
||||
|
||||
13
build.gradle
13
build.gradle
@@ -4,9 +4,9 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
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 'com.google.dagger:hilt-android-gradle-plugin:2.44.2'
|
||||
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() {
|
||||
def branchName = ""
|
||||
try {
|
||||
|
||||
6
gradle/wrapper/gradle-wrapper.properties
vendored
6
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,7 +1,7 @@
|
||||
#Fri Jan 20 14:35:39 EET 2023
|
||||
#Sat Feb 25 17:16:02 EET 2023
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionSha256Sum=7ba68c54029790ab444b39d7e293d3236b2632631fb5f2e012bb28b4ff669e4b
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
|
||||
distributionSha256Sum=6147605a23b4eff6c334927a86ff3508cb5d6722cd624c97ded4c2e8640f1f87
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
Reference in New Issue
Block a user