Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5436c65b76 | ||
|
|
c590813a1a | ||
|
|
1cf36e1b41 | ||
|
|
5895a20af1 | ||
|
|
fd5fd43b72 | ||
|
|
dfb88feaf0 | ||
|
|
149b171eda | ||
|
|
c70a2487d9 | ||
|
|
865f335b25 | ||
|
|
6b1e89eda8 | ||
|
|
0dbaf919e2 | ||
|
|
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 |
@@ -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 519
|
||||
versionName '4.4.3'
|
||||
versionCode 525
|
||||
versionName '4.4.9'
|
||||
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 {
|
||||
@@ -68,7 +59,7 @@ android {
|
||||
]
|
||||
}
|
||||
lint {
|
||||
abortOnError false
|
||||
abortOnError true
|
||||
disable 'MissingTranslation', 'PrivateResource', 'NotifyDataSetChanged'
|
||||
}
|
||||
testOptions {
|
||||
@@ -87,7 +78,8 @@ afterEvaluate {
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
implementation('com.github.KotatsuApp:kotatsu-parsers:1093584202') {
|
||||
//noinspection GradleDependency
|
||||
implementation('com.github.KotatsuApp:kotatsu-parsers:1b6d1456f3') {
|
||||
exclude group: 'org.json', module: 'json'
|
||||
}
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -10,6 +10,8 @@ import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.withContext
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONObject
|
||||
import org.koitharu.kotatsu.BuildConfig
|
||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||
import org.koitharu.kotatsu.parsers.util.await
|
||||
@@ -28,6 +30,7 @@ import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
private const val CERT_SHA1 = "2C:19:C7:E8:07:61:2B:8E:94:51:1B:FD:72:67:07:64:5D:C2:58:AE"
|
||||
private const val CONTENT_TYPE_APK = "application/vnd.android.package-archive"
|
||||
|
||||
@Singleton
|
||||
class AppUpdateRepository @Inject constructor(
|
||||
@@ -46,7 +49,9 @@ class AppUpdateRepository @Inject constructor(
|
||||
.url("https://api.github.com/repos/KotatsuApp/Kotatsu/releases?page=1&per_page=10")
|
||||
val jsonArray = okHttp.newCall(request.build()).await().parseJsonArray()
|
||||
return jsonArray.mapJSONNotNull { json ->
|
||||
val asset = json.optJSONArray("assets")?.optJSONObject(0) ?: return@mapJSONNotNull null
|
||||
val asset = json.optJSONArray("assets")?.find { jo ->
|
||||
jo.optString("content_type") == CONTENT_TYPE_APK
|
||||
} ?: return@mapJSONNotNull null
|
||||
AppVersion(
|
||||
id = json.getLong("id"),
|
||||
url = json.getString("html_url"),
|
||||
@@ -103,4 +108,15 @@ class AppUpdateRepository @Inject constructor(
|
||||
}.onFailure { error ->
|
||||
error.printStackTraceDebug()
|
||||
}.getOrNull()
|
||||
|
||||
private inline fun JSONArray.find(predicate: (JSONObject) -> Boolean): JSONObject? {
|
||||
val size = length()
|
||||
for (i in 0 until size) {
|
||||
val jo = getJSONObject(i)
|
||||
if (predicate(jo)) {
|
||||
return jo
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()),
|
||||
)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.koitharu.kotatsu.core.parser
|
||||
|
||||
import android.util.Log
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -9,6 +10,7 @@ import kotlinx.coroutines.currentCoroutineContext
|
||||
import okhttp3.Headers
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Response
|
||||
import org.koitharu.kotatsu.BuildConfig
|
||||
import org.koitharu.kotatsu.core.cache.ContentCache
|
||||
import org.koitharu.kotatsu.core.cache.SafeDeferred
|
||||
import org.koitharu.kotatsu.core.prefs.SourceSettings
|
||||
@@ -77,7 +79,7 @@ class RemoteMangaRepository(
|
||||
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
|
||||
cache.getPages(source, chapter.url)?.let { return it }
|
||||
val pages = asyncSafe {
|
||||
parser.getPages(chapter)
|
||||
parser.getPages(chapter).distinctById()
|
||||
}
|
||||
cache.putPages(source, chapter.url, pages)
|
||||
return pages.await()
|
||||
@@ -108,4 +110,20 @@ class RemoteMangaRepository(
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
private fun List<MangaPage>.distinctById(): List<MangaPage> {
|
||||
if (isEmpty()) {
|
||||
return emptyList()
|
||||
}
|
||||
val result = ArrayList<MangaPage>(size)
|
||||
val set = HashSet<Long>(size)
|
||||
for (page in this) {
|
||||
if (set.add(page.id)) {
|
||||
result.add(page)
|
||||
} else if (BuildConfig.DEBUG) {
|
||||
Log.w(null, "Duplicate page: $page")
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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
|
||||
@@ -24,17 +26,21 @@ import org.koitharu.kotatsu.scrobbling.common.domain.model.ScrobblerUser
|
||||
import org.koitharu.kotatsu.utils.ext.toRequestBody
|
||||
|
||||
private const val REDIRECT_URI = "kotatsu://shikimori-auth"
|
||||
private const val BASE_URL = "https://shikimori.one/"
|
||||
private const val BASE_URL = "https://shikimori.me/"
|
||||
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)
|
||||
},
|
||||
@@ -189,15 +195,15 @@ class ShikimoriRepository(
|
||||
id = json.getLong("id"),
|
||||
name = json.getString("name"),
|
||||
altName = json.getStringOrNull("russian"),
|
||||
cover = json.getJSONObject("image").getString("preview").toAbsoluteUrl("shikimori.one"),
|
||||
url = json.getString("url").toAbsoluteUrl("shikimori.one"),
|
||||
cover = json.getJSONObject("image").getString("preview").toAbsoluteUrl("shikimori.me"),
|
||||
url = json.getString("url").toAbsoluteUrl("shikimori.me"),
|
||||
)
|
||||
|
||||
private fun ScrobblerMangaInfo(json: JSONObject) = ScrobblerMangaInfo(
|
||||
id = json.getLong("id"),
|
||||
name = json.getString("name"),
|
||||
cover = json.getJSONObject("image").getString("preview").toAbsoluteUrl("shikimori.one"),
|
||||
url = json.getString("url").toAbsoluteUrl("shikimori.one"),
|
||||
cover = json.getJSONObject("image").getString("preview").toAbsoluteUrl("shikimori.me"),
|
||||
url = json.getString("url").toAbsoluteUrl("shikimori.me"),
|
||||
descriptionHtml = json.getString("description_html"),
|
||||
)
|
||||
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
package org.koitharu.kotatsu.settings
|
||||
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.internal.toCanonicalHost
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.utils.EditTextValidator
|
||||
|
||||
class DomainValidator : EditTextValidator() {
|
||||
|
||||
private val urlBuilder = HttpUrl.Builder()
|
||||
|
||||
override fun validate(text: String): ValidationResult {
|
||||
val trimmed = text.trim()
|
||||
if (trimmed.isEmpty()) {
|
||||
@@ -18,13 +21,7 @@ class DomainValidator : EditTextValidator() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkCharacters(value: String): Boolean {
|
||||
for (i in value.indices) {
|
||||
val c = value[i]
|
||||
if (c !in '\u0020'..'\u007e') {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
private fun checkCharacters(value: String): Boolean = runCatching {
|
||||
urlBuilder.host(value)
|
||||
}.isSuccess
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ class AboutSettingsFragment : BasePreferenceFragment(R.string.about) {
|
||||
}
|
||||
findPreference<SwitchPreferenceCompat>(AppSettings.KEY_UPDATES_UNSTABLE)?.run {
|
||||
isEnabled = VersionId(BuildConfig.VERSION_NAME).isStable
|
||||
if (!isEnabled) isChecked = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,8 +31,7 @@ class AboutLinksPreference @JvmOverloads constructor(
|
||||
binding.btn4pda,
|
||||
binding.btnDiscord,
|
||||
binding.btnGithub,
|
||||
binding.btnReddit,
|
||||
binding.btnTwitter,
|
||||
binding.btnTelegram,
|
||||
).forEach { button ->
|
||||
TooltipCompat.setTooltipText(button, button.contentDescription)
|
||||
button.setOnClickListener(this)
|
||||
@@ -43,8 +42,7 @@ class AboutLinksPreference @JvmOverloads constructor(
|
||||
val urlResId = when (v.id) {
|
||||
R.id.btn_4pda -> R.string.url_forpda
|
||||
R.id.btn_discord -> R.string.url_discord
|
||||
R.id.btn_twitter -> R.string.url_twitter
|
||||
R.id.btn_reddit -> R.string.url_reddit
|
||||
R.id.btn_telegram -> R.string.url_telegram
|
||||
R.id.btn_github -> R.string.url_github
|
||||
else -> return
|
||||
}
|
||||
@@ -59,7 +57,7 @@ class AboutLinksPreference @JvmOverloads constructor(
|
||||
Intent.createChooser(intent, title)
|
||||
} else {
|
||||
intent
|
||||
}
|
||||
},
|
||||
)
|
||||
} catch (_: ActivityNotFoundException) {
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M14.5 15.41C14.58 15.5 14.58 15.69 14.5 15.8C13.77 16.5 12.41 16.56 12 16.56C11.61 16.56 10.25 16.5 9.54 15.8C9.44 15.69 9.44 15.5 9.54 15.41C9.65 15.31 9.82 15.31 9.92 15.41C10.38 15.87 11.33 16 12 16C12.69 16 13.66 15.87 14.1 15.41C14.21 15.31 14.38 15.31 14.5 15.41M10.75 13.04C10.75 12.47 10.28 12 9.71 12C9.14 12 8.67 12.47 8.67 13.04C8.67 13.61 9.14 14.09 9.71 14.08C10.28 14.08 10.75 13.61 10.75 13.04M14.29 12C13.72 12 13.25 12.5 13.25 13.05S13.72 14.09 14.29 14.09C14.86 14.09 15.33 13.61 15.33 13.05C15.33 12.5 14.86 12 14.29 12M22 12C22 17.5 17.5 22 12 22S2 17.5 2 12C2 6.5 6.5 2 12 2S22 6.5 22 12M18.67 12C18.67 11.19 18 10.54 17.22 10.54C16.82 10.54 16.46 10.7 16.2 10.95C15.2 10.23 13.83 9.77 12.3 9.71L12.97 6.58L15.14 7.05C15.16 7.6 15.62 8.04 16.18 8.04C16.75 8.04 17.22 7.57 17.22 7C17.22 6.43 16.75 5.96 16.18 5.96C15.77 5.96 15.41 6.2 15.25 6.55L12.82 6.03C12.75 6 12.68 6.03 12.63 6.07C12.57 6.11 12.54 6.17 12.53 6.24L11.79 9.72C10.24 9.77 8.84 10.23 7.82 10.96C7.56 10.71 7.2 10.56 6.81 10.56C6 10.56 5.35 11.21 5.35 12C5.35 12.61 5.71 13.11 6.21 13.34C6.19 13.5 6.18 13.62 6.18 13.78C6.18 16 8.79 17.85 12 17.85C15.23 17.85 17.85 16.03 17.85 13.78C17.85 13.64 17.84 13.5 17.81 13.34C18.31 13.11 18.67 12.6 18.67 12Z" />
|
||||
</vector>
|
||||
10
app/src/main/res/drawable/ic_telegram.xml
Normal file
10
app/src/main/res/drawable/ic_telegram.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="512"
|
||||
android:viewportHeight="512">
|
||||
<path
|
||||
android:pathData="m196.03,328.68 l162,118.8c16.8,10.8 31.2,4.8 36,-16.8l66,-309.6c6,-26.4 -10.8,-38.4 -28.8,-30L46.03,239.88c-25.2,9.6 -25.2,25.2 -4.8,31.2l99.6,31.2 228,-145.2c10.8,-6 20.4,-3.6 13.2,4.8"
|
||||
android:strokeWidth="1.2"
|
||||
android:fillColor="#000000"/>
|
||||
</vector>
|
||||
@@ -1,11 +0,0 @@
|
||||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M22.46,6C21.69,6.35 20.86,6.58 20,6.69C20.88,6.16 21.56,5.32 21.88,4.31C21.05,4.81 20.13,5.16 19.16,5.36C18.37,4.5 17.26,4 16,4C13.65,4 11.73,5.92 11.73,8.29C11.73,8.63 11.77,8.96 11.84,9.27C8.28,9.09 5.11,7.38 3,4.79C2.63,5.42 2.42,6.16 2.42,6.94C2.42,8.43 3.17,9.75 4.33,10.5C3.62,10.5 2.96,10.3 2.38,10C2.38,10 2.38,10 2.38,10.03C2.38,12.11 3.86,13.85 5.82,14.24C5.46,14.34 5.08,14.39 4.69,14.39C4.42,14.39 4.15,14.36 3.89,14.31C4.43,16 6,17.26 7.89,17.29C6.43,18.45 4.58,19.13 2.56,19.13C2.22,19.13 1.88,19.11 1.54,19.07C3.44,20.29 5.7,21 8.12,21C16,21 20.33,14.46 20.33,8.79C20.33,8.6 20.33,8.42 20.32,8.23C21.16,7.63 21.88,6.87 22.46,6Z" />
|
||||
</vector>
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout
|
||||
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"
|
||||
android:layout_width="match_parent"
|
||||
@@ -7,13 +8,13 @@
|
||||
android:gravity="center">
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/btn_4pda"
|
||||
android:id="@+id/btn_github"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="4PDA"
|
||||
android:contentDescription="GitHub"
|
||||
android:padding="16dp"
|
||||
android:src="@drawable/ic_4pda"
|
||||
android:src="@drawable/ic_github"
|
||||
app:tint="?attr/colorAccent"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
@@ -29,35 +30,24 @@
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/btn_twitter"
|
||||
android:id="@+id/btn_telegram"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="Twitter"
|
||||
android:contentDescription="Telegram"
|
||||
android:padding="16dp"
|
||||
android:src="@drawable/ic_twitter"
|
||||
android:src="@drawable/ic_telegram"
|
||||
app:tint="?attr/colorAccent"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/btn_reddit"
|
||||
android:id="@+id/btn_4pda"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="Reddit"
|
||||
android:contentDescription="4PDA"
|
||||
android:padding="16dp"
|
||||
android:src="@drawable/ic_reddit"
|
||||
app:tint="?attr/colorAccent"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/btn_github"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="GitHub"
|
||||
android:padding="16dp"
|
||||
android:src="@drawable/ic_github"
|
||||
android:src="@drawable/ic_4pda"
|
||||
app:tint="?attr/colorAccent"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -423,4 +420,5 @@
|
||||
<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>
|
||||
@@ -41,7 +41,7 @@
|
||||
<string name="large_manga_save_confirm">Ang manga na ito ay may %s. I-save ang lahat ng ito\?</string>
|
||||
<string name="notifications">Mga abiso</string>
|
||||
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d ng %2$d sa</string>
|
||||
<string name="new_chapters">Bagong mga kabanata</string>
|
||||
<string name="new_chapters">Mga bagong kabanata</string>
|
||||
<string name="read_from_start">Basahin mula sa simula</string>
|
||||
<string name="restart">I-restart</string>
|
||||
<string name="categories_">Mga kategorya…</string>
|
||||
@@ -408,4 +408,17 @@
|
||||
<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>
|
||||
<string name="user_agent">Header ng UserAgent</string>
|
||||
<string name="cache">Cache</string>
|
||||
<string name="text_file_sizes">B|kB|MB|GB|TB</string>
|
||||
<string name="standard">Standard</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="read_mode">Read mode</string>
|
||||
<string name="error">Error</string>
|
||||
<string name="internal_storage">Internal storage</string>
|
||||
<string name="external_storage">External storage</string>
|
||||
<string name="vibration">Vibration</string>
|
||||
<string name="domain">Domain</string>
|
||||
<string name="light_indicator">LED indicator</string>
|
||||
<string name="settings_apply_restart_required">Mangyaring i-restart ang application upang ilapat ang mga pagbabagong ito</string>
|
||||
</resources>
|
||||
@@ -403,10 +403,8 @@
|
||||
<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>
|
||||
@@ -422,4 +420,5 @@
|
||||
<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>
|
||||
2
app/src/main/res/values-nn/strings.xml
Normal file
2
app/src/main/res/values-nn/strings.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></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>
|
||||
@@ -420,4 +420,5 @@
|
||||
<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>
|
||||
@@ -419,4 +419,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>
|
||||
@@ -4,5 +4,4 @@
|
||||
<dimen name="grid_spacing_outer">2dp</dimen>
|
||||
<dimen name="preferred_grid_width">140dp</dimen>
|
||||
<dimen name="bottom_sheet_width">420dp</dimen>
|
||||
<dimen name="fragment_horizontal_margin">48dp</dimen>
|
||||
</resources>
|
||||
@@ -405,8 +405,6 @@
|
||||
<string name="show_suspicious_content">显示可疑内容</string>
|
||||
<string name="theme_name_dynamic">动态</string>
|
||||
<string name="color_theme">颜色方案</string>
|
||||
<string name="theme_name_mint">薄荷绿</string>
|
||||
<string name="theme_name_october">October</string>
|
||||
<string name="show_in_grid_view">用网格视图显示</string>
|
||||
<string name="theme_name_miku">Miku</string>
|
||||
<string name="theme_name_asuka">Asuka</string>
|
||||
@@ -422,4 +420,5 @@
|
||||
<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>
|
||||
@@ -3,12 +3,18 @@
|
||||
<string name="url_github" translatable="false">https://github.com/KotatsuApp/Kotatsu</string>
|
||||
<string name="url_discord" translatable="false">https://discord.gg/NNJ5RgVBC5</string>
|
||||
<string name="url_forpda" translatable="false">https://4pda.to/forum/index.php?showtopic=697669</string>
|
||||
<string name="url_twitter" translatable="false">https://twitter.com/kotatsuapp</string>
|
||||
<string name="url_reddit" translatable="false">https://reddit.com/user/kotatsuapp</string>
|
||||
<string name="url_telegram" translatable="false">https://t.me/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>
|
||||
|
||||
11
build.gradle
11
build.gradle
@@ -4,7 +4,7 @@ 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.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 {
|
||||
|
||||
Reference in New Issue
Block a user