mirror of
https://github.com/mihonapp/mihon.git
synced 2025-06-29 20:47:50 +02:00
Compare commits
48 Commits
Author | SHA1 | Date | |
---|---|---|---|
e6f025a9fb | |||
aa607e0ecb | |||
65b32ddeb2 | |||
5e9bdc2690 | |||
9ce994168a | |||
748a720199 | |||
8db34eb3dd | |||
b657bba96e | |||
dbaac69fad | |||
b6a1e89535 | |||
cce919750a | |||
9376b223bb | |||
6f047fb5aa | |||
3e6b0117fd | |||
421dfb4a2d | |||
abaca6e676 | |||
8bab1d9798 | |||
13d31669ac | |||
c1dfdeb500 | |||
dda7e677a5 | |||
b1fb401f63 | |||
885ace111e | |||
885552b792 | |||
4f02872a84 | |||
ecec1bd102 | |||
0c07e05a2b | |||
060f0682f4 | |||
88032e11df | |||
493c8b0943 | |||
af2ef0621a | |||
095461e31b | |||
3ddd1033c3 | |||
912687ac78 | |||
40a9595012 | |||
12ff37d052 | |||
4857073f30 | |||
cdbefd9191 | |||
2e9d89574d | |||
569c99496b | |||
ea3b8767de | |||
8e8c30c1eb | |||
d921ba81c8 | |||
ad9f646102 | |||
2ef277bcef | |||
9e396e1624 | |||
9708d84e60 | |||
4efc195548 | |||
0d15cbe334 |
4
.github/ISSUE_TEMPLATE.md
vendored
4
.github/ISSUE_TEMPLATE.md
vendored
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
I acknowledge that:
|
I acknowledge that:
|
||||||
|
|
||||||
- I have updated to the latest version of the app (stable is v0.10.1)
|
- I have updated to the latest version of the app (stable is v0.10.4)
|
||||||
- I have updated all extensions
|
- I have updated all extensions
|
||||||
- If this is an issue with an extension, that I should be opening an issue in https://github.com/inorichi/tachiyomi-extensions
|
- If this is an issue with an extension, that I should be opening an issue in https://github.com/inorichi/tachiyomi-extensions
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ I acknowledge that:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Device information
|
## Device information
|
||||||
* Tachiyomi version: ?
|
* Tachiyomi version: ?
|
||||||
* Android version: ?
|
* Android version: ?
|
||||||
* Device: ?
|
* Device: ?
|
||||||
|
6
.github/ISSUE_TEMPLATE/bug_report.md
vendored
6
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -9,7 +9,7 @@ labels: "bug"
|
|||||||
|
|
||||||
I acknowledge that:
|
I acknowledge that:
|
||||||
|
|
||||||
- I have updated to the latest version of the app (stable is v0.10.1)
|
- I have updated to the latest version of the app (stable is v0.10.4)
|
||||||
- I have updated all extensions
|
- I have updated all extensions
|
||||||
- If this is an issue with an extension, that I should be opening an issue in https://github.com/inorichi/tachiyomi-extensions
|
- If this is an issue with an extension, that I should be opening an issue in https://github.com/inorichi/tachiyomi-extensions
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ I acknowledge that:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Device information
|
## Device information
|
||||||
* Tachiyomi version: ?
|
* Tachiyomi version: ?
|
||||||
* Android version: ?
|
* Android version: ?
|
||||||
* Device: ?
|
* Device: ?
|
||||||
@ -32,5 +32,5 @@ This should happen.
|
|||||||
### Actual behavior
|
### Actual behavior
|
||||||
This happened instead.
|
This happened instead.
|
||||||
|
|
||||||
### Other details
|
## Other details
|
||||||
Additional details and attachments.
|
Additional details and attachments.
|
||||||
|
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Tachiyomi help website
|
||||||
|
url: https://tachiyomi.org/help/
|
||||||
|
about: Common questions are answered here.
|
||||||
|
- name: Tachiyomi extensions GitHub repository
|
||||||
|
url: https://github.com/inorichi/tachiyomi-extensions
|
||||||
|
about: Issues about an extension/source/catalogue should be opened here instead.
|
6
.github/ISSUE_TEMPLATE/feature_request.md
vendored
6
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -9,7 +9,7 @@ labels: "feature"
|
|||||||
|
|
||||||
I acknowledge that:
|
I acknowledge that:
|
||||||
|
|
||||||
- I have updated to the latest version of the app (stable is v0.10.1)
|
- I have updated to the latest version of the app (stable is v0.10.4)
|
||||||
- I have updated all extensions
|
- I have updated all extensions
|
||||||
- If this is an issue with an extension, that I should be opening an issue in https://github.com/inorichi/tachiyomi-extensions
|
- If this is an issue with an extension, that I should be opening an issue in https://github.com/inorichi/tachiyomi-extensions
|
||||||
|
|
||||||
@ -17,8 +17,8 @@ I acknowledge that:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Why/User Benefit/User Problem
|
## Why/User Benefit/User Problem
|
||||||
(explain why this feature should be added)
|
(explain why this feature should be added)
|
||||||
|
|
||||||
### What/Requirements
|
## What/Requirements
|
||||||
(explain how this feature would behave)
|
(explain how this feature would behave)
|
||||||
|
4
.github/ISSUE_TEMPLATE/source_issue.md
vendored
4
.github/ISSUE_TEMPLATE/source_issue.md
vendored
@ -2,7 +2,7 @@
|
|||||||
name: "Extension/source/catalogue issue"
|
name: "Extension/source/catalogue issue"
|
||||||
about: "Do not open an issue here. See https://github.com/inorichi/tachiyomi-extensions"
|
about: "Do not open an issue here. See https://github.com/inorichi/tachiyomi-extensions"
|
||||||
title: "THIS ISSUE IS IN THE WRONG REPO; SEE https://github.com/inorichi/tachiyomi-extensions"
|
title: "THIS ISSUE IS IN THE WRONG REPO; SEE https://github.com/inorichi/tachiyomi-extensions"
|
||||||
labels: "catalog"
|
labels: "catalog, invalid"
|
||||||
---
|
---
|
||||||
|
|
||||||
DO NOT OPEN AN ISSUE IN THIS REPO. SEE https://github.com/inorichi/tachiyomi-extensions
|
DO NOT OPEN AN ISSUE IN THIS REPO. SEE https://github.com/inorichi/tachiyomi-extensions
|
||||||
|
@ -40,8 +40,8 @@ android {
|
|||||||
minSdkVersion AndroidConfig.minSdk
|
minSdkVersion AndroidConfig.minSdk
|
||||||
targetSdkVersion AndroidConfig.targetSdk
|
targetSdkVersion AndroidConfig.targetSdk
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
versionCode 47
|
versionCode 50
|
||||||
versionName "0.10.1"
|
versionName "0.10.4"
|
||||||
|
|
||||||
buildConfigField "String", "COMMIT_COUNT", "\"${getCommitCount()}\""
|
buildConfigField "String", "COMMIT_COUNT", "\"${getCommitCount()}\""
|
||||||
buildConfigField "String", "COMMIT_SHA", "\"${getGitSha()}\""
|
buildConfigField "String", "COMMIT_SHA", "\"${getGitSha()}\""
|
||||||
@ -135,11 +135,11 @@ dependencies {
|
|||||||
implementation 'androidx.cardview:cardview:1.0.0'
|
implementation 'androidx.cardview:cardview:1.0.0'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-rc1'
|
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-rc1'
|
||||||
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
|
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
|
||||||
|
implementation 'androidx.core:core-ktx:1.4.0-alpha01'
|
||||||
implementation 'androidx.multidex:multidex:2.0.1'
|
implementation 'androidx.multidex:multidex:2.0.1'
|
||||||
implementation 'androidx.preference:preference:1.1.1'
|
implementation 'androidx.preference:preference:1.1.1'
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha05'
|
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha05'
|
||||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01'
|
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01'
|
||||||
implementation 'androidx.webkit:webkit:1.3.0-rc01'
|
|
||||||
|
|
||||||
final lifecycle_version = '2.3.0-alpha06'
|
final lifecycle_version = '2.3.0-alpha06'
|
||||||
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
|
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
|
||||||
@ -163,7 +163,7 @@ dependencies {
|
|||||||
implementation 'com.github.pwittchen:reactivenetwork:0.13.0'
|
implementation 'com.github.pwittchen:reactivenetwork:0.13.0'
|
||||||
|
|
||||||
// Network client
|
// Network client
|
||||||
final okhttp_version = '4.8.0'
|
final okhttp_version = '4.8.1'
|
||||||
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
|
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
|
||||||
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
|
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
|
||||||
implementation "com.squareup.okhttp3:okhttp-dnsoverhttps:$okhttp_version"
|
implementation "com.squareup.okhttp3:okhttp-dnsoverhttps:$okhttp_version"
|
||||||
@ -200,7 +200,7 @@ dependencies {
|
|||||||
implementation 'io.requery:sqlite-android:3.32.2'
|
implementation 'io.requery:sqlite-android:3.32.2'
|
||||||
|
|
||||||
// Preferences
|
// Preferences
|
||||||
implementation 'com.github.tfcporciuncula:flow-preferences:1.1.1'
|
implementation 'com.github.tfcporciuncula:flow-preferences:1.3.0'
|
||||||
|
|
||||||
// Model View Presenter
|
// Model View Presenter
|
||||||
final nucleus_version = '3.0.0'
|
final nucleus_version = '3.0.0'
|
||||||
@ -276,8 +276,7 @@ dependencies {
|
|||||||
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||||
|
|
||||||
// Do not update until we bump to Kotlin 1.4, see https://github.com/Kotlin/kotlinx.coroutines/issues/2049
|
final coroutines_version = '1.3.8'
|
||||||
final coroutines_version = '1.3.6'
|
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
|
||||||
|
|
||||||
|
5
app/src/main/java/eu/kanade/tachiyomi/annoations/Nsfw.kt
Normal file
5
app/src/main/java/eu/kanade/tachiyomi/annoations/Nsfw.kt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package eu.kanade.tachiyomi.annoations
|
||||||
|
|
||||||
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
annotation class Nsfw
|
@ -7,16 +7,22 @@ import com.google.gson.JsonParser
|
|||||||
import com.google.gson.stream.JsonReader
|
import com.google.gson.stream.JsonReader
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.backup.models.Backup
|
import eu.kanade.tachiyomi.data.backup.models.Backup
|
||||||
|
import eu.kanade.tachiyomi.data.track.TrackManager
|
||||||
|
import eu.kanade.tachiyomi.source.SourceManager
|
||||||
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
object BackupRestoreValidator {
|
object BackupRestoreValidator {
|
||||||
|
|
||||||
|
private val sourceManager: SourceManager by injectLazy()
|
||||||
|
private val trackManager: TrackManager by injectLazy()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks for critical backup file data.
|
* Checks for critical backup file data.
|
||||||
*
|
*
|
||||||
* @throws Exception if version or manga cannot be found.
|
* @throws Exception if version or manga cannot be found.
|
||||||
* @return List of required sources.
|
* @return List of missing sources or missing trackers.
|
||||||
*/
|
*/
|
||||||
fun validate(context: Context, uri: Uri): Map<Long, String> {
|
fun validate(context: Context, uri: Uri): Results {
|
||||||
val reader = JsonReader(context.contentResolver.openInputStream(uri)!!.bufferedReader())
|
val reader = JsonReader(context.contentResolver.openInputStream(uri)!!.bufferedReader())
|
||||||
val json = JsonParser.parseReader(reader).asJsonObject
|
val json = JsonParser.parseReader(reader).asJsonObject
|
||||||
|
|
||||||
@ -26,11 +32,29 @@ object BackupRestoreValidator {
|
|||||||
throw Exception(context.getString(R.string.invalid_backup_file_missing_data))
|
throw Exception(context.getString(R.string.invalid_backup_file_missing_data))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mangasJson.asJsonArray.size() == 0) {
|
val mangas = mangasJson.asJsonArray
|
||||||
|
if (mangas.size() == 0) {
|
||||||
throw Exception(context.getString(R.string.invalid_backup_file_missing_manga))
|
throw Exception(context.getString(R.string.invalid_backup_file_missing_manga))
|
||||||
}
|
}
|
||||||
|
|
||||||
return getSourceMapping(json)
|
val sources = getSourceMapping(json)
|
||||||
|
val missingSources = sources
|
||||||
|
.filter { sourceManager.get(it.key) == null }
|
||||||
|
.values
|
||||||
|
.sorted()
|
||||||
|
|
||||||
|
val trackers = mangas
|
||||||
|
.filter { it.asJsonObject.has("track") }
|
||||||
|
.flatMap { it.asJsonObject["track"].asJsonArray }
|
||||||
|
.map { it.asJsonObject["s"].asInt }
|
||||||
|
.distinct()
|
||||||
|
val missingTrackers = trackers
|
||||||
|
.mapNotNull { trackManager.getService(it) }
|
||||||
|
.filter { !it.isLogged }
|
||||||
|
.map { it.name }
|
||||||
|
.sorted()
|
||||||
|
|
||||||
|
return Results(missingSources, missingTrackers)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getSourceMapping(json: JsonObject): Map<Long, String> {
|
fun getSourceMapping(json: JsonObject): Map<Long, String> {
|
||||||
@ -43,4 +67,6 @@ object BackupRestoreValidator {
|
|||||||
}
|
}
|
||||||
.toMap()
|
.toMap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class Results(val missingSources: List<String>, val missingTrackers: List<String>)
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.data.database.models.Chapter
|
|||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.download.model.Download
|
import eu.kanade.tachiyomi.data.download.model.Download
|
||||||
import eu.kanade.tachiyomi.data.download.model.DownloadQueue
|
import eu.kanade.tachiyomi.data.download.model.DownloadQueue
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.source.Source
|
import eu.kanade.tachiyomi.source.Source
|
||||||
import eu.kanade.tachiyomi.source.SourceManager
|
import eu.kanade.tachiyomi.source.SourceManager
|
||||||
import eu.kanade.tachiyomi.source.model.Page
|
import eu.kanade.tachiyomi.source.model.Page
|
||||||
@ -24,10 +25,8 @@ import uy.kohesive.injekt.injectLazy
|
|||||||
*/
|
*/
|
||||||
class DownloadManager(private val context: Context) {
|
class DownloadManager(private val context: Context) {
|
||||||
|
|
||||||
/**
|
private val sourceManager: SourceManager by injectLazy()
|
||||||
* The sources manager.
|
private val preferences: PreferencesHelper by injectLazy()
|
||||||
*/
|
|
||||||
private val sourceManager by injectLazy<SourceManager>()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Downloads provider, used to retrieve the folders where the chapters are or should be stored.
|
* Downloads provider, used to retrieve the folders where the chapters are or should be stored.
|
||||||
@ -201,9 +200,16 @@ class DownloadManager(private val context: Context) {
|
|||||||
*/
|
*/
|
||||||
fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source) {
|
fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source) {
|
||||||
queue.remove(chapters)
|
queue.remove(chapters)
|
||||||
val chapterDirs = provider.findChapterDirs(chapters, manga, source)
|
|
||||||
|
val filteredChapters = if (!preferences.removeBookmarkedChapters()) {
|
||||||
|
chapters.filterNot { it.bookmark }
|
||||||
|
} else {
|
||||||
|
chapters
|
||||||
|
}
|
||||||
|
|
||||||
|
val chapterDirs = provider.findChapterDirs(filteredChapters, manga, source)
|
||||||
chapterDirs.forEach { it.delete() }
|
chapterDirs.forEach { it.delete() }
|
||||||
cache.removeChapters(chapters, manga)
|
cache.removeChapters(filteredChapters, manga)
|
||||||
if (cache.getDownloadCount(manga) == 0) { // Delete manga directory if empty
|
if (cache.getDownloadCount(manga) == 0) { // Delete manga directory if empty
|
||||||
chapterDirs.firstOrNull()?.parentFile?.delete()
|
chapterDirs.firstOrNull()?.parentFile?.delete()
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.util.lang.chop
|
|||||||
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
||||||
import eu.kanade.tachiyomi.util.system.notificationManager
|
import eu.kanade.tachiyomi.util.system.notificationManager
|
||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
import uy.kohesive.injekt.api.get
|
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -25,12 +24,22 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
|
|
||||||
private val preferences: PreferencesHelper by injectLazy()
|
private val preferences: PreferencesHelper by injectLazy()
|
||||||
|
|
||||||
private val progressNotificationBuilder = context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
|
private val progressNotificationBuilder by lazy {
|
||||||
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
|
context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
|
||||||
|
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val completeNotificationBuilder = context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_COMPLETE) {
|
private val completeNotificationBuilder by lazy {
|
||||||
setAutoCancel(false)
|
context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_COMPLETE) {
|
||||||
|
setAutoCancel(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val errorNotificationBuilder by lazy {
|
||||||
|
context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_ERROR) {
|
||||||
|
setAutoCancel(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,7 +62,7 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
*
|
*
|
||||||
* @param id the id of the notification.
|
* @param id the id of the notification.
|
||||||
*/
|
*/
|
||||||
private fun NotificationCompat.Builder.show(id: Int = Notifications.ID_DOWNLOAD_CHAPTER) {
|
private fun NotificationCompat.Builder.show(id: Int) {
|
||||||
context.notificationManager.notify(id, build())
|
context.notificationManager.notify(id, build())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,8 +79,8 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
* Dismiss the downloader's notification. Downloader error notifications use a different id, so
|
* Dismiss the downloader's notification. Downloader error notifications use a different id, so
|
||||||
* those can only be dismissed by the user.
|
* those can only be dismissed by the user.
|
||||||
*/
|
*/
|
||||||
fun dismiss() {
|
fun dismissProgress() {
|
||||||
context.notificationManager.cancel(Notifications.ID_DOWNLOAD_CHAPTER)
|
context.notificationManager.cancel(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -112,14 +121,15 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setProgress(download.pages!!.size, download.downloadedImages, false)
|
setProgress(download.pages!!.size, download.downloadedImages, false)
|
||||||
|
|
||||||
|
show(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS)
|
||||||
}
|
}
|
||||||
progressNotificationBuilder.show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show notification when download is paused.
|
* Show notification when download is paused.
|
||||||
*/
|
*/
|
||||||
fun onDownloadPaused() {
|
fun onPaused() {
|
||||||
with(progressNotificationBuilder) {
|
with(progressNotificationBuilder) {
|
||||||
setContentTitle(context.getString(R.string.chapter_paused))
|
setContentTitle(context.getString(R.string.chapter_paused))
|
||||||
setContentText(context.getString(R.string.download_notifier_download_paused))
|
setContentText(context.getString(R.string.download_notifier_download_paused))
|
||||||
@ -141,8 +151,9 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
context.getString(R.string.action_cancel_all),
|
context.getString(R.string.action_cancel_all),
|
||||||
NotificationReceiver.clearDownloadsPendingBroadcast(context)
|
NotificationReceiver.clearDownloadsPendingBroadcast(context)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
show(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS)
|
||||||
}
|
}
|
||||||
progressNotificationBuilder.show()
|
|
||||||
|
|
||||||
// Reset initial values
|
// Reset initial values
|
||||||
isDownloading = false
|
isDownloading = false
|
||||||
@ -151,18 +162,21 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
/**
|
/**
|
||||||
* This function shows a notification to inform download tasks are done.
|
* This function shows a notification to inform download tasks are done.
|
||||||
*/
|
*/
|
||||||
fun downloadFinished() {
|
fun onComplete() {
|
||||||
// Create notification
|
if (!errorThrown) {
|
||||||
with(completeNotificationBuilder) {
|
// Create notification
|
||||||
setContentTitle(context.getString(R.string.download_notifier_downloader_title))
|
with(completeNotificationBuilder) {
|
||||||
setContentText(context.getString(R.string.download_notifier_download_finish))
|
setContentTitle(context.getString(R.string.download_notifier_downloader_title))
|
||||||
setSmallIcon(android.R.drawable.stat_sys_download_done)
|
setContentText(context.getString(R.string.download_notifier_download_finish))
|
||||||
clearActions()
|
setSmallIcon(android.R.drawable.stat_sys_download_done)
|
||||||
setAutoCancel(true)
|
clearActions()
|
||||||
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
setAutoCancel(true)
|
||||||
setProgress(0, 0, false)
|
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
||||||
|
setProgress(0, 0, false)
|
||||||
|
|
||||||
|
show(Notifications.ID_DOWNLOAD_CHAPTER_COMPLETE)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
completeNotificationBuilder.show(Notifications.ID_DOWNLOAD_CHAPTER_COMPLETE)
|
|
||||||
|
|
||||||
// Reset states to default
|
// Reset states to default
|
||||||
errorThrown = false
|
errorThrown = false
|
||||||
@ -175,7 +189,7 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
* @param reason the text to show.
|
* @param reason the text to show.
|
||||||
*/
|
*/
|
||||||
fun onWarning(reason: String) {
|
fun onWarning(reason: String) {
|
||||||
with(completeNotificationBuilder) {
|
with(errorNotificationBuilder) {
|
||||||
setContentTitle(context.getString(R.string.download_notifier_downloader_title))
|
setContentTitle(context.getString(R.string.download_notifier_downloader_title))
|
||||||
setContentText(reason)
|
setContentText(reason)
|
||||||
setSmallIcon(android.R.drawable.stat_sys_warning)
|
setSmallIcon(android.R.drawable.stat_sys_warning)
|
||||||
@ -183,8 +197,9 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
clearActions()
|
clearActions()
|
||||||
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
||||||
setProgress(0, 0, false)
|
setProgress(0, 0, false)
|
||||||
|
|
||||||
|
show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR)
|
||||||
}
|
}
|
||||||
completeNotificationBuilder.show()
|
|
||||||
|
|
||||||
// Reset download information
|
// Reset download information
|
||||||
isDownloading = false
|
isDownloading = false
|
||||||
@ -199,7 +214,7 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
*/
|
*/
|
||||||
fun onError(error: String? = null, chapter: String? = null) {
|
fun onError(error: String? = null, chapter: String? = null) {
|
||||||
// Create notification
|
// Create notification
|
||||||
with(completeNotificationBuilder) {
|
with(errorNotificationBuilder) {
|
||||||
setContentTitle(
|
setContentTitle(
|
||||||
chapter
|
chapter
|
||||||
?: context.getString(R.string.download_notifier_downloader_title)
|
?: context.getString(R.string.download_notifier_downloader_title)
|
||||||
@ -210,8 +225,9 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
setAutoCancel(false)
|
setAutoCancel(false)
|
||||||
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
||||||
setProgress(0, 0, false)
|
setProgress(0, 0, false)
|
||||||
|
|
||||||
|
show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR)
|
||||||
}
|
}
|
||||||
completeNotificationBuilder.show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR)
|
|
||||||
|
|
||||||
// Reset download information
|
// Reset download information
|
||||||
errorThrown = true
|
errorThrown = true
|
||||||
|
@ -83,7 +83,7 @@ class DownloadService : Service() {
|
|||||||
*/
|
*/
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
startForeground(Notifications.ID_DOWNLOAD_CHAPTER, getPlaceholderNotification())
|
startForeground(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS, getPlaceholderNotification())
|
||||||
wakeLock = acquireWakeLock(javaClass.name)
|
wakeLock = acquireWakeLock(javaClass.name)
|
||||||
runningRelay.call(true)
|
runningRelay.call(true)
|
||||||
subscriptions = CompositeSubscription()
|
subscriptions = CompositeSubscription()
|
||||||
|
@ -137,9 +137,10 @@ class Downloader(
|
|||||||
} else {
|
} else {
|
||||||
if (notifier.paused) {
|
if (notifier.paused) {
|
||||||
notifier.paused = false
|
notifier.paused = false
|
||||||
notifier.onDownloadPaused()
|
notifier.onPaused()
|
||||||
} else {
|
} else {
|
||||||
notifier.downloadFinished()
|
notifier.dismissProgress()
|
||||||
|
notifier.onComplete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -170,7 +171,7 @@ class Downloader(
|
|||||||
.forEach { it.status = Download.NOT_DOWNLOADED }
|
.forEach { it.status = Download.NOT_DOWNLOADED }
|
||||||
}
|
}
|
||||||
queue.clear()
|
queue.clear()
|
||||||
notifier.dismiss()
|
notifier.dismissProgress()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -266,15 +267,16 @@ class Downloader(
|
|||||||
* @param download the chapter to be downloaded.
|
* @param download the chapter to be downloaded.
|
||||||
*/
|
*/
|
||||||
private fun downloadChapter(download: Download): Observable<Download> = Observable.defer {
|
private fun downloadChapter(download: Download): Observable<Download> = Observable.defer {
|
||||||
val chapterDirname = provider.getChapterDirName(download.chapter)
|
|
||||||
val mangaDir = provider.getMangaDir(download.manga, download.source)
|
val mangaDir = provider.getMangaDir(download.manga, download.source)
|
||||||
|
|
||||||
if (DiskUtil.getAvailableStorageSpace(mangaDir) < MIN_DISK_SPACE) {
|
val availSpace = DiskUtil.getAvailableStorageSpace(mangaDir)
|
||||||
|
if (availSpace != -1L && availSpace < MIN_DISK_SPACE) {
|
||||||
download.status = Download.ERROR
|
download.status = Download.ERROR
|
||||||
notifier.onError(context.getString(R.string.download_insufficient_space), download.chapter.name)
|
notifier.onError(context.getString(R.string.download_insufficient_space), download.chapter.name)
|
||||||
return@defer Observable.just(download)
|
return@defer Observable.just(download)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val chapterDirname = provider.getChapterDirName(download.chapter)
|
||||||
val tmpDir = mangaDir.createDirectory(chapterDirname + TMP_DIR_SUFFIX)
|
val tmpDir = mangaDir.createDirectory(chapterDirname + TMP_DIR_SUFFIX)
|
||||||
|
|
||||||
val pageListObservable = if (download.pages == null) {
|
val pageListObservable = if (download.pages == null) {
|
||||||
|
@ -155,7 +155,7 @@ class NotificationReceiver : BroadcastReceiver() {
|
|||||||
* @param mangaId id of manga
|
* @param mangaId id of manga
|
||||||
* @param chapterId id of chapter
|
* @param chapterId id of chapter
|
||||||
*/
|
*/
|
||||||
internal fun openChapter(context: Context, mangaId: Long, chapterId: Long) {
|
private fun openChapter(context: Context, mangaId: Long, chapterId: Long) {
|
||||||
val db = DatabaseHelper(context)
|
val db = DatabaseHelper(context)
|
||||||
val manga = db.getManga(mangaId).executeAsBlocking()
|
val manga = db.getManga(mangaId).executeAsBlocking()
|
||||||
val chapter = db.getChapter(chapterId).executeAsBlocking()
|
val chapter = db.getChapter(chapterId).executeAsBlocking()
|
||||||
|
@ -32,10 +32,11 @@ object Notifications {
|
|||||||
*/
|
*/
|
||||||
private const val GROUP_DOWNLOADER = "group_downloader"
|
private const val GROUP_DOWNLOADER = "group_downloader"
|
||||||
const val CHANNEL_DOWNLOADER_PROGRESS = "downloader_progress_channel"
|
const val CHANNEL_DOWNLOADER_PROGRESS = "downloader_progress_channel"
|
||||||
const val ID_DOWNLOAD_CHAPTER = -201
|
const val ID_DOWNLOAD_CHAPTER_PROGRESS = -201
|
||||||
const val CHANNEL_DOWNLOADER_COMPLETE = "downloader_complete_channel"
|
const val CHANNEL_DOWNLOADER_COMPLETE = "downloader_complete_channel"
|
||||||
const val ID_DOWNLOAD_CHAPTER_ERROR = -202
|
|
||||||
const val ID_DOWNLOAD_CHAPTER_COMPLETE = -203
|
const val ID_DOWNLOAD_CHAPTER_COMPLETE = -203
|
||||||
|
const val CHANNEL_DOWNLOADER_ERROR = "downloader_error_channel"
|
||||||
|
const val ID_DOWNLOAD_CHAPTER_ERROR = -202
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notification channel and ids used by the library updater.
|
* Notification channel and ids used by the library updater.
|
||||||
@ -104,6 +105,13 @@ object Notifications {
|
|||||||
group = GROUP_DOWNLOADER
|
group = GROUP_DOWNLOADER
|
||||||
setShowBadge(false)
|
setShowBadge(false)
|
||||||
},
|
},
|
||||||
|
NotificationChannel(
|
||||||
|
CHANNEL_DOWNLOADER_ERROR, context.getString(R.string.channel_errors),
|
||||||
|
NotificationManager.IMPORTANCE_LOW
|
||||||
|
).apply {
|
||||||
|
group = GROUP_DOWNLOADER
|
||||||
|
setShowBadge(false)
|
||||||
|
},
|
||||||
NotificationChannel(
|
NotificationChannel(
|
||||||
CHANNEL_NEW_CHAPTERS, context.getString(R.string.channel_new_chapters),
|
CHANNEL_NEW_CHAPTERS, context.getString(R.string.channel_new_chapters),
|
||||||
NotificationManager.IMPORTANCE_DEFAULT
|
NotificationManager.IMPORTANCE_DEFAULT
|
||||||
|
@ -97,6 +97,8 @@ object PreferenceKeys {
|
|||||||
|
|
||||||
const val removeAfterMarkedAsRead = "pref_remove_after_marked_as_read_key"
|
const val removeAfterMarkedAsRead = "pref_remove_after_marked_as_read_key"
|
||||||
|
|
||||||
|
const val removeBookmarkedChapters = "pref_remove_bookmarked"
|
||||||
|
|
||||||
const val libraryUpdateInterval = "pref_library_update_interval_key"
|
const val libraryUpdateInterval = "pref_library_update_interval_key"
|
||||||
|
|
||||||
const val libraryUpdateRestriction = "library_update_restriction"
|
const val libraryUpdateRestriction = "library_update_restriction"
|
||||||
@ -117,6 +119,8 @@ object PreferenceKeys {
|
|||||||
|
|
||||||
const val automaticExtUpdates = "automatic_ext_updates"
|
const val automaticExtUpdates = "automatic_ext_updates"
|
||||||
|
|
||||||
|
const val allowNsfwSource = "allow_nsfw_source"
|
||||||
|
|
||||||
const val startScreen = "start_screen"
|
const val startScreen = "start_screen"
|
||||||
|
|
||||||
const val useBiometricLock = "use_biometric_lock"
|
const val useBiometricLock = "use_biometric_lock"
|
||||||
|
@ -37,4 +37,10 @@ object PreferenceValues {
|
|||||||
VERTICAL,
|
VERTICAL,
|
||||||
BOTH
|
BOTH
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class NsfwAllowance {
|
||||||
|
ALLOWED,
|
||||||
|
PARTIAL,
|
||||||
|
BLOCKED
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
|
import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues.DisplayMode
|
import eu.kanade.tachiyomi.data.preference.PreferenceValues.DisplayMode
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferenceValues.NsfwAllowance
|
||||||
import eu.kanade.tachiyomi.data.track.TrackService
|
import eu.kanade.tachiyomi.data.track.TrackService
|
||||||
import eu.kanade.tachiyomi.data.track.anilist.Anilist
|
import eu.kanade.tachiyomi.data.track.anilist.Anilist
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@ -187,6 +188,8 @@ class PreferencesHelper(val context: Context) {
|
|||||||
|
|
||||||
fun removeAfterMarkedAsRead() = prefs.getBoolean(Keys.removeAfterMarkedAsRead, false)
|
fun removeAfterMarkedAsRead() = prefs.getBoolean(Keys.removeAfterMarkedAsRead, false)
|
||||||
|
|
||||||
|
fun removeBookmarkedChapters() = prefs.getBoolean(Keys.removeBookmarkedChapters, false)
|
||||||
|
|
||||||
fun libraryUpdateInterval() = flowPrefs.getInt(Keys.libraryUpdateInterval, 24)
|
fun libraryUpdateInterval() = flowPrefs.getInt(Keys.libraryUpdateInterval, 24)
|
||||||
|
|
||||||
fun libraryUpdateRestriction() = prefs.getStringSet(Keys.libraryUpdateRestriction, setOf("wifi"))
|
fun libraryUpdateRestriction() = prefs.getStringSet(Keys.libraryUpdateRestriction, setOf("wifi"))
|
||||||
@ -217,6 +220,8 @@ class PreferencesHelper(val context: Context) {
|
|||||||
|
|
||||||
fun automaticExtUpdates() = flowPrefs.getBoolean(Keys.automaticExtUpdates, true)
|
fun automaticExtUpdates() = flowPrefs.getBoolean(Keys.automaticExtUpdates, true)
|
||||||
|
|
||||||
|
fun allowNsfwSource() = flowPrefs.getEnum(Keys.allowNsfwSource, NsfwAllowance.ALLOWED)
|
||||||
|
|
||||||
fun extensionUpdatesCount() = flowPrefs.getInt("ext_updates_count", 0)
|
fun extensionUpdatesCount() = flowPrefs.getInt("ext_updates_count", 0)
|
||||||
|
|
||||||
fun lastExtCheck() = flowPrefs.getLong("last_ext_check", 0)
|
fun lastExtCheck() = flowPrefs.getLong("last_ext_check", 0)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package eu.kanade.tachiyomi.data.preference
|
package eu.kanade.tachiyomi.data.preference
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
import androidx.core.content.edit
|
||||||
import androidx.preference.PreferenceDataStore
|
import androidx.preference.PreferenceDataStore
|
||||||
|
|
||||||
class SharedPreferencesDataStore(private val prefs: SharedPreferences) : PreferenceDataStore() {
|
class SharedPreferencesDataStore(private val prefs: SharedPreferences) : PreferenceDataStore() {
|
||||||
@ -10,7 +11,9 @@ class SharedPreferencesDataStore(private val prefs: SharedPreferences) : Prefere
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun putBoolean(key: String?, value: Boolean) {
|
override fun putBoolean(key: String?, value: Boolean) {
|
||||||
prefs.edit().putBoolean(key, value).apply()
|
prefs.edit {
|
||||||
|
putBoolean(key, value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getInt(key: String?, defValue: Int): Int {
|
override fun getInt(key: String?, defValue: Int): Int {
|
||||||
@ -18,7 +21,9 @@ class SharedPreferencesDataStore(private val prefs: SharedPreferences) : Prefere
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun putInt(key: String?, value: Int) {
|
override fun putInt(key: String?, value: Int) {
|
||||||
prefs.edit().putInt(key, value).apply()
|
prefs.edit {
|
||||||
|
putInt(key, value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getLong(key: String?, defValue: Long): Long {
|
override fun getLong(key: String?, defValue: Long): Long {
|
||||||
@ -26,7 +31,9 @@ class SharedPreferencesDataStore(private val prefs: SharedPreferences) : Prefere
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun putLong(key: String?, value: Long) {
|
override fun putLong(key: String?, value: Long) {
|
||||||
prefs.edit().putLong(key, value).apply()
|
prefs.edit {
|
||||||
|
putLong(key, value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFloat(key: String?, defValue: Float): Float {
|
override fun getFloat(key: String?, defValue: Float): Float {
|
||||||
@ -34,7 +41,9 @@ class SharedPreferencesDataStore(private val prefs: SharedPreferences) : Prefere
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun putFloat(key: String?, value: Float) {
|
override fun putFloat(key: String?, value: Float) {
|
||||||
prefs.edit().putFloat(key, value).apply()
|
prefs.edit {
|
||||||
|
putFloat(key, value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getString(key: String?, defValue: String?): String? {
|
override fun getString(key: String?, defValue: String?): String? {
|
||||||
@ -42,7 +51,9 @@ class SharedPreferencesDataStore(private val prefs: SharedPreferences) : Prefere
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun putString(key: String?, value: String?) {
|
override fun putString(key: String?, value: String?) {
|
||||||
prefs.edit().putString(key, value).apply()
|
prefs.edit {
|
||||||
|
putString(key, value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getStringSet(key: String?, defValues: MutableSet<String>?): MutableSet<String>? {
|
override fun getStringSet(key: String?, defValues: MutableSet<String>?): MutableSet<String>? {
|
||||||
@ -50,6 +61,8 @@ class SharedPreferencesDataStore(private val prefs: SharedPreferences) : Prefere
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun putStringSet(key: String?, values: MutableSet<String>?) {
|
override fun putStringSet(key: String?, values: MutableSet<String>?) {
|
||||||
prefs.edit().putStringSet(key, values).apply()
|
prefs.edit {
|
||||||
|
putStringSet(key, values)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -476,7 +476,9 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI
|
|||||||
fun copyPersonalFrom(track: Track) {
|
fun copyPersonalFrom(track: Track) {
|
||||||
num_read_chapters = track.last_chapter_read.toString()
|
num_read_chapters = track.last_chapter_read.toString()
|
||||||
val numScore = track.score.toInt()
|
val numScore = track.score.toInt()
|
||||||
if (numScore in 1..9) {
|
if (numScore == 0) {
|
||||||
|
score = ""
|
||||||
|
} else if (numScore in 1..10) {
|
||||||
score = numScore.toString()
|
score = numScore.toString()
|
||||||
}
|
}
|
||||||
status = track.status.toString()
|
status = track.status.toString()
|
||||||
|
@ -26,7 +26,7 @@ class DevRepoUpdateChecker : UpdateChecker() {
|
|||||||
|
|
||||||
override suspend fun checkForUpdate(): UpdateResult {
|
override suspend fun checkForUpdate(): UpdateResult {
|
||||||
val response = withContext(Dispatchers.IO) {
|
val response = withContext(Dispatchers.IO) {
|
||||||
client.newCall(GET(DevRepoRelease.LATEST_URL)).await(assertSuccess = false)
|
client.newCall(GET(DevRepoRelease.LATEST_URL)).await()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get latest repo version number from header in format "Location: tachiyomi-r1512.apk"
|
// Get latest repo version number from header in format "Location: tachiyomi-r1512.apk"
|
||||||
|
@ -1,43 +1,29 @@
|
|||||||
package eu.kanade.tachiyomi.extension.api
|
package eu.kanade.tachiyomi.extension.api
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.github.salomonbrys.kotson.fromJson
|
|
||||||
import com.github.salomonbrys.kotson.get
|
import com.github.salomonbrys.kotson.get
|
||||||
import com.github.salomonbrys.kotson.int
|
import com.github.salomonbrys.kotson.int
|
||||||
import com.github.salomonbrys.kotson.string
|
import com.github.salomonbrys.kotson.string
|
||||||
import com.google.gson.Gson
|
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.extension.model.Extension
|
import eu.kanade.tachiyomi.extension.model.Extension
|
||||||
import eu.kanade.tachiyomi.extension.model.LoadResult
|
import eu.kanade.tachiyomi.extension.model.LoadResult
|
||||||
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.network.NetworkHelper
|
|
||||||
import eu.kanade.tachiyomi.network.await
|
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import okhttp3.Response
|
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
internal class ExtensionGithubApi {
|
internal class ExtensionGithubApi {
|
||||||
|
|
||||||
private val network: NetworkHelper by injectLazy()
|
|
||||||
private val preferences: PreferencesHelper by injectLazy()
|
private val preferences: PreferencesHelper by injectLazy()
|
||||||
|
|
||||||
private val gson: Gson by injectLazy()
|
|
||||||
|
|
||||||
suspend fun findExtensions(): List<Extension.Available> {
|
suspend fun findExtensions(): List<Extension.Available> {
|
||||||
val call = GET(EXT_URL)
|
val service: ExtensionGithubService = ExtensionGithubService.create()
|
||||||
|
|
||||||
return withContext(Dispatchers.IO) {
|
return withContext(Dispatchers.IO) {
|
||||||
val response = network.client.newCall(call).await()
|
val response = service.getRepo()
|
||||||
if (response.isSuccessful) {
|
parseResponse(response)
|
||||||
parseResponse(response)
|
|
||||||
} else {
|
|
||||||
response.close()
|
|
||||||
throw Exception("Failed to get extensions")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,11 +50,7 @@ internal class ExtensionGithubApi {
|
|||||||
return extensionsWithUpdate
|
return extensionsWithUpdate
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseResponse(response: Response): List<Extension.Available> {
|
private fun parseResponse(json: JsonArray): List<Extension.Available> {
|
||||||
val text = response.body?.use { it.string() } ?: return emptyList()
|
|
||||||
|
|
||||||
val json = gson.fromJson<JsonArray>(text)
|
|
||||||
|
|
||||||
return json
|
return json
|
||||||
.filter { element ->
|
.filter { element ->
|
||||||
val versionName = element["version"].string
|
val versionName = element["version"].string
|
||||||
@ -82,18 +64,19 @@ internal class ExtensionGithubApi {
|
|||||||
val versionName = element["version"].string
|
val versionName = element["version"].string
|
||||||
val versionCode = element["code"].int
|
val versionCode = element["code"].int
|
||||||
val lang = element["lang"].string
|
val lang = element["lang"].string
|
||||||
val icon = "$REPO_URL/icon/${apkName.replace(".apk", ".png")}"
|
val nsfw = element["nsfw"].int == 1
|
||||||
|
val icon = "$REPO_URL_PREFIX/icon/${apkName.replace(".apk", ".png")}"
|
||||||
|
|
||||||
Extension.Available(name, pkgName, versionName, versionCode, lang, apkName, icon)
|
Extension.Available(name, pkgName, versionName, versionCode, lang, nsfw, apkName, icon)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getApkUrl(extension: Extension.Available): String {
|
fun getApkUrl(extension: Extension.Available): String {
|
||||||
return "$REPO_URL/apk/${extension.apkName}"
|
return "$REPO_URL_PREFIX/apk/${extension.apkName}"
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val REPO_URL = "https://raw.githubusercontent.com/inorichi/tachiyomi-extensions/repo"
|
const val BASE_URL = "https://raw.githubusercontent.com/"
|
||||||
private const val EXT_URL = "$REPO_URL/index.json"
|
const val REPO_URL_PREFIX = "${BASE_URL}inorichi/tachiyomi-extensions/repo/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
package eu.kanade.tachiyomi.extension.api
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray
|
||||||
|
import eu.kanade.tachiyomi.network.NetworkHelper
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import retrofit2.http.GET
|
||||||
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to get the extension repo listing from GitHub.
|
||||||
|
*/
|
||||||
|
interface ExtensionGithubService {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val client by lazy {
|
||||||
|
val network: NetworkHelper by injectLazy()
|
||||||
|
network.client.newBuilder()
|
||||||
|
.addNetworkInterceptor { chain ->
|
||||||
|
val originalResponse = chain.proceed(chain.request())
|
||||||
|
originalResponse.newBuilder()
|
||||||
|
.header("Content-Encoding", "gzip")
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun create(): ExtensionGithubService {
|
||||||
|
val adapter = Retrofit.Builder()
|
||||||
|
.baseUrl(ExtensionGithubApi.BASE_URL)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.client(client)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
return adapter.create(ExtensionGithubService::class.java)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GET("${ExtensionGithubApi.REPO_URL_PREFIX}index.json.gz")
|
||||||
|
suspend fun getRepo(): JsonArray
|
||||||
|
}
|
@ -9,14 +9,16 @@ sealed class Extension {
|
|||||||
abstract val versionName: String
|
abstract val versionName: String
|
||||||
abstract val versionCode: Int
|
abstract val versionCode: Int
|
||||||
abstract val lang: String?
|
abstract val lang: String?
|
||||||
|
abstract val isNsfw: Boolean
|
||||||
|
|
||||||
data class Installed(
|
data class Installed(
|
||||||
override val name: String,
|
override val name: String,
|
||||||
override val pkgName: String,
|
override val pkgName: String,
|
||||||
override val versionName: String,
|
override val versionName: String,
|
||||||
override val versionCode: Int,
|
override val versionCode: Int,
|
||||||
val sources: List<Source>,
|
|
||||||
override val lang: String,
|
override val lang: String,
|
||||||
|
override val isNsfw: Boolean,
|
||||||
|
val sources: List<Source>,
|
||||||
val hasUpdate: Boolean = false,
|
val hasUpdate: Boolean = false,
|
||||||
val isObsolete: Boolean = false,
|
val isObsolete: Boolean = false,
|
||||||
val isUnofficial: Boolean = false
|
val isUnofficial: Boolean = false
|
||||||
@ -28,6 +30,7 @@ sealed class Extension {
|
|||||||
override val versionName: String,
|
override val versionName: String,
|
||||||
override val versionCode: Int,
|
override val versionCode: Int,
|
||||||
override val lang: String,
|
override val lang: String,
|
||||||
|
override val isNsfw: Boolean,
|
||||||
val apkName: String,
|
val apkName: String,
|
||||||
val iconUrl: String
|
val iconUrl: String
|
||||||
) : Extension()
|
) : Extension()
|
||||||
@ -38,6 +41,7 @@ sealed class Extension {
|
|||||||
override val versionName: String,
|
override val versionName: String,
|
||||||
override val versionCode: Int,
|
override val versionCode: Int,
|
||||||
val signatureHash: String,
|
val signatureHash: String,
|
||||||
override val lang: String? = null
|
override val lang: String? = null,
|
||||||
|
override val isNsfw: Boolean = false
|
||||||
) : Extension()
|
) : Extension()
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import android.content.Context
|
|||||||
import android.content.pm.PackageInfo
|
import android.content.pm.PackageInfo
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import dalvik.system.PathClassLoader
|
import dalvik.system.PathClassLoader
|
||||||
|
import eu.kanade.tachiyomi.annoations.Nsfw
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferenceValues
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.extension.model.Extension
|
import eu.kanade.tachiyomi.extension.model.Extension
|
||||||
import eu.kanade.tachiyomi.extension.model.LoadResult
|
import eu.kanade.tachiyomi.extension.model.LoadResult
|
||||||
@ -15,8 +17,7 @@ import eu.kanade.tachiyomi.util.lang.Hash
|
|||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.injectLazy
|
||||||
import uy.kohesive.injekt.api.get
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class that handles the loading of the extensions installed in the system.
|
* Class that handles the loading of the extensions installed in the system.
|
||||||
@ -24,20 +25,25 @@ import uy.kohesive.injekt.api.get
|
|||||||
@SuppressLint("PackageManagerGetSignatures")
|
@SuppressLint("PackageManagerGetSignatures")
|
||||||
internal object ExtensionLoader {
|
internal object ExtensionLoader {
|
||||||
|
|
||||||
|
private val preferences: PreferencesHelper by injectLazy()
|
||||||
|
private val allowNsfwSource by lazy {
|
||||||
|
preferences.allowNsfwSource().get()
|
||||||
|
}
|
||||||
|
|
||||||
private const val EXTENSION_FEATURE = "tachiyomi.extension"
|
private const val EXTENSION_FEATURE = "tachiyomi.extension"
|
||||||
private const val METADATA_SOURCE_CLASS = "tachiyomi.extension.class"
|
private const val METADATA_SOURCE_CLASS = "tachiyomi.extension.class"
|
||||||
|
private const val METADATA_NSFW = "tachiyomi.extension.nsfw"
|
||||||
const val LIB_VERSION_MIN = 1.2
|
const val LIB_VERSION_MIN = 1.2
|
||||||
const val LIB_VERSION_MAX = 1.2
|
const val LIB_VERSION_MAX = 1.2
|
||||||
|
|
||||||
private const val PACKAGE_FLAGS = PackageManager.GET_CONFIGURATIONS or PackageManager.GET_SIGNATURES
|
private const val PACKAGE_FLAGS = PackageManager.GET_CONFIGURATIONS or PackageManager.GET_SIGNATURES
|
||||||
|
|
||||||
// inorichi's key
|
// inorichi's key
|
||||||
val officialSignature = "7ce04da7773d41b489f4693a366c36bcd0a11fc39b547168553c285bd7348e23"
|
private const val officialSignature = "7ce04da7773d41b489f4693a366c36bcd0a11fc39b547168553c285bd7348e23"
|
||||||
/**
|
/**
|
||||||
* List of the trusted signatures.
|
* List of the trusted signatures.
|
||||||
*/
|
*/
|
||||||
var trustedSignatures = mutableSetOf<String>() +
|
var trustedSignatures = mutableSetOf<String>() + preferences.trustedSignatures().get() + officialSignature
|
||||||
Injekt.get<PreferencesHelper>().trustedSignatures().get() + officialSignature
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a list of all the installed extensions initialized concurrently.
|
* Return a list of all the installed extensions initialized concurrently.
|
||||||
@ -125,6 +131,11 @@ internal object ExtensionLoader {
|
|||||||
return LoadResult.Untrusted(extension)
|
return LoadResult.Untrusted(extension)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val isNsfw = appInfo.metaData.getInt(METADATA_NSFW) == 1
|
||||||
|
if (allowNsfwSource == PreferenceValues.NsfwAllowance.BLOCKED && isNsfw) {
|
||||||
|
return LoadResult.Error("NSFW extension $pkgName not allowed")
|
||||||
|
}
|
||||||
|
|
||||||
val classLoader = PathClassLoader(appInfo.sourceDir, null, context.classLoader)
|
val classLoader = PathClassLoader(appInfo.sourceDir, null, context.classLoader)
|
||||||
|
|
||||||
val sources = appInfo.metaData.getString(METADATA_SOURCE_CLASS)!!
|
val sources = appInfo.metaData.getString(METADATA_SOURCE_CLASS)!!
|
||||||
@ -141,7 +152,13 @@ internal object ExtensionLoader {
|
|||||||
try {
|
try {
|
||||||
when (val obj = Class.forName(it, false, classLoader).newInstance()) {
|
when (val obj = Class.forName(it, false, classLoader).newInstance()) {
|
||||||
is Source -> listOf(obj)
|
is Source -> listOf(obj)
|
||||||
is SourceFactory -> obj.createSources()
|
is SourceFactory -> {
|
||||||
|
if (isSourceNsfw(obj)) {
|
||||||
|
emptyList()
|
||||||
|
} else {
|
||||||
|
obj.createSources()
|
||||||
|
}
|
||||||
|
}
|
||||||
else -> throw Exception("Unknown source class type! ${obj.javaClass}")
|
else -> throw Exception("Unknown source class type! ${obj.javaClass}")
|
||||||
}
|
}
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
@ -149,10 +166,11 @@ internal object ExtensionLoader {
|
|||||||
return LoadResult.Error(e)
|
return LoadResult.Error(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.filter { !isSourceNsfw(it) }
|
||||||
|
|
||||||
val langs = sources.filterIsInstance<CatalogueSource>()
|
val langs = sources.filterIsInstance<CatalogueSource>()
|
||||||
.map { it.lang }
|
.map { it.lang }
|
||||||
.toSet()
|
.toSet()
|
||||||
|
|
||||||
val lang = when (langs.size) {
|
val lang = when (langs.size) {
|
||||||
0 -> ""
|
0 -> ""
|
||||||
1 -> langs.first()
|
1 -> langs.first()
|
||||||
@ -160,7 +178,7 @@ internal object ExtensionLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val extension = Extension.Installed(
|
val extension = Extension.Installed(
|
||||||
extName, pkgName, versionName, versionCode, sources, lang,
|
extName, pkgName, versionName, versionCode, lang, isNsfw, sources,
|
||||||
isUnofficial = signatureHash != officialSignature
|
isUnofficial = signatureHash != officialSignature
|
||||||
)
|
)
|
||||||
return LoadResult.Success(extension)
|
return LoadResult.Success(extension)
|
||||||
@ -188,4 +206,22 @@ internal object ExtensionLoader {
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether a Source or SourceFactory is annotated with @Nsfw.
|
||||||
|
*/
|
||||||
|
private fun isSourceNsfw(clazz: Any): Boolean {
|
||||||
|
if (allowNsfwSource == PreferenceValues.NsfwAllowance.ALLOWED) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clazz !is Source && clazz !is SourceFactory) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Annotations are proxied, hence this janky way of checking for them
|
||||||
|
return clazz.javaClass.annotations
|
||||||
|
.flatMap { it.javaClass.interfaces.map { it.simpleName } }
|
||||||
|
.firstOrNull { it == Nsfw::class.java.simpleName } != null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,18 +2,16 @@ package eu.kanade.tachiyomi.network
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.os.Build
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.webkit.WebResourceRequest
|
|
||||||
import android.webkit.WebResourceResponse
|
|
||||||
import android.webkit.WebSettings
|
import android.webkit.WebSettings
|
||||||
import android.webkit.WebView
|
import android.webkit.WebView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.webkit.WebViewClientCompat
|
|
||||||
import androidx.webkit.WebViewFeature
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import eu.kanade.tachiyomi.util.lang.launchUI
|
import eu.kanade.tachiyomi.util.lang.launchUI
|
||||||
|
import eu.kanade.tachiyomi.util.system.WebViewClientCompat
|
||||||
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
||||||
import eu.kanade.tachiyomi.util.system.isOutdated
|
import eu.kanade.tachiyomi.util.system.isOutdated
|
||||||
import eu.kanade.tachiyomi.util.system.setDefaultSettings
|
import eu.kanade.tachiyomi.util.system.setDefaultSettings
|
||||||
@ -116,7 +114,7 @@ class CloudflareInterceptor(private val context: Context) : Interceptor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// HTTP error codes are only received since M
|
// HTTP error codes are only received since M
|
||||||
if (WebViewFeature.isFeatureSupported(WebViewFeature.RECEIVE_WEB_RESOURCE_ERROR) &&
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
|
||||||
url == origRequestUrl && !challengeFound
|
url == origRequestUrl && !challengeFound
|
||||||
) {
|
) {
|
||||||
// The first request didn't return the challenge, abort.
|
// The first request didn't return the challenge, abort.
|
||||||
@ -124,13 +122,15 @@ class CloudflareInterceptor(private val context: Context) : Interceptor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onReceivedHttpError(
|
override fun onReceivedErrorCompat(
|
||||||
view: WebView,
|
view: WebView,
|
||||||
request: WebResourceRequest,
|
errorCode: Int,
|
||||||
errorResponse: WebResourceResponse
|
description: String?,
|
||||||
|
failingUrl: String,
|
||||||
|
isMainFrame: Boolean
|
||||||
) {
|
) {
|
||||||
if (request.isForMainFrame) {
|
if (isMainFrame) {
|
||||||
if (errorResponse.statusCode == 503) {
|
if (errorCode == 503) {
|
||||||
// Found the Cloudflare challenge page.
|
// Found the Cloudflare challenge page.
|
||||||
challengeFound = true
|
challengeFound = true
|
||||||
} else {
|
} else {
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
package eu.kanade.tachiyomi.ui.base.controller
|
||||||
|
|
||||||
|
interface ToolbarLiftOnScrollController
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.ui.browse.source
|
package eu.kanade.tachiyomi.ui.browse
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
@ -23,8 +23,8 @@ class SourceDividerItemDecoration(context: Context) : RecyclerView.ItemDecoratio
|
|||||||
for (i in 0 until childCount - 1) {
|
for (i in 0 until childCount - 1) {
|
||||||
val child = parent.getChildAt(i)
|
val child = parent.getChildAt(i)
|
||||||
val holder = parent.getChildViewHolder(child)
|
val holder = parent.getChildViewHolder(child)
|
||||||
if (holder is SourceHolder &&
|
if (holder is SourceListItem &&
|
||||||
parent.getChildViewHolder(parent.getChildAt(i + 1)) is SourceHolder
|
parent.getChildViewHolder(parent.getChildAt(i + 1)) is SourceListItem
|
||||||
) {
|
) {
|
||||||
val top = child.bottom + child.marginBottom
|
val top = child.bottom + child.marginBottom
|
||||||
val bottom = top + divider.intrinsicHeight
|
val bottom = top + divider.intrinsicHeight
|
@ -0,0 +1,5 @@
|
|||||||
|
package eu.kanade.tachiyomi.ui.browse
|
||||||
|
|
||||||
|
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
||||||
|
|
||||||
|
interface SourceListItem : SlicedHolder
|
@ -18,6 +18,7 @@ import eu.kanade.tachiyomi.extension.model.Extension
|
|||||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
||||||
|
import eu.kanade.tachiyomi.ui.browse.SourceDividerItemDecoration
|
||||||
import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsController
|
import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsController
|
||||||
import kotlinx.coroutines.flow.filter
|
import kotlinx.coroutines.flow.filter
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
@ -75,7 +76,7 @@ open class ExtensionController :
|
|||||||
// Create recycler and set adapter.
|
// Create recycler and set adapter.
|
||||||
binding.recycler.layoutManager = LinearLayoutManager(view.context)
|
binding.recycler.layoutManager = LinearLayoutManager(view.context)
|
||||||
binding.recycler.adapter = adapter
|
binding.recycler.adapter = adapter
|
||||||
binding.recycler.addItemDecoration(ExtensionDividerItemDecoration(view.context))
|
binding.recycler.addItemDecoration(SourceDividerItemDecoration(view.context))
|
||||||
adapter?.fastScroller = binding.fastScroller
|
adapter?.fastScroller = binding.fastScroller
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.ui.browse.extension
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.graphics.Canvas
|
|
||||||
import android.graphics.Rect
|
|
||||||
import android.graphics.drawable.Drawable
|
|
||||||
import android.view.View
|
|
||||||
import androidx.core.view.marginBottom
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
|
|
||||||
class ExtensionDividerItemDecoration(context: Context) : RecyclerView.ItemDecoration() {
|
|
||||||
|
|
||||||
private val divider: Drawable
|
|
||||||
|
|
||||||
init {
|
|
||||||
val a = context.obtainStyledAttributes(intArrayOf(android.R.attr.listDivider))
|
|
||||||
divider = a.getDrawable(0)!!
|
|
||||||
a.recycle()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
|
|
||||||
val childCount = parent.childCount
|
|
||||||
for (i in 0 until childCount - 1) {
|
|
||||||
val child = parent.getChildAt(i)
|
|
||||||
val holder = parent.getChildViewHolder(child)
|
|
||||||
if (holder is ExtensionHolder &&
|
|
||||||
parent.getChildViewHolder(parent.getChildAt(i + 1)) is ExtensionHolder
|
|
||||||
) {
|
|
||||||
val top = child.bottom + child.marginBottom
|
|
||||||
val bottom = top + divider.intrinsicHeight
|
|
||||||
val left = parent.paddingStart + holder.margin
|
|
||||||
val right = parent.width - parent.paddingEnd - holder.margin
|
|
||||||
|
|
||||||
divider.setBounds(left, top, right, bottom)
|
|
||||||
divider.draw(c)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getItemOffsets(
|
|
||||||
outRect: Rect,
|
|
||||||
view: View,
|
|
||||||
parent: RecyclerView,
|
|
||||||
state: RecyclerView.State
|
|
||||||
) {
|
|
||||||
outRect.set(0, 0, 0, divider.intrinsicHeight)
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.extension.model.Extension
|
|||||||
import eu.kanade.tachiyomi.extension.model.InstallStep
|
import eu.kanade.tachiyomi.extension.model.InstallStep
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
||||||
|
import eu.kanade.tachiyomi.ui.browse.SourceListItem
|
||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import io.github.mthli.slice.Slice
|
import io.github.mthli.slice.Slice
|
||||||
import kotlinx.android.synthetic.main.extension_card_item.card
|
import kotlinx.android.synthetic.main.extension_card_item.card
|
||||||
@ -19,6 +20,7 @@ import kotlinx.android.synthetic.main.extension_card_item.warning
|
|||||||
|
|
||||||
class ExtensionHolder(view: View, override val adapter: ExtensionAdapter) :
|
class ExtensionHolder(view: View, override val adapter: ExtensionAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter),
|
BaseFlexibleViewHolder(view, adapter),
|
||||||
|
SourceListItem,
|
||||||
SlicedHolder {
|
SlicedHolder {
|
||||||
|
|
||||||
override val slice = Slice(card).apply {
|
override val slice = Slice(card).apply {
|
||||||
@ -42,11 +44,12 @@ class ExtensionHolder(view: View, override val adapter: ExtensionAdapter) :
|
|||||||
version.text = extension.versionName
|
version.text = extension.versionName
|
||||||
lang.text = LocaleHelper.getSourceDisplayName(extension.lang, itemView.context)
|
lang.text = LocaleHelper.getSourceDisplayName(extension.lang, itemView.context)
|
||||||
warning.text = when {
|
warning.text = when {
|
||||||
extension is Extension.Untrusted -> itemView.context.getString(R.string.ext_untrusted).toUpperCase()
|
extension is Extension.Untrusted -> itemView.context.getString(R.string.ext_untrusted)
|
||||||
extension is Extension.Installed && extension.isObsolete -> itemView.context.getString(R.string.ext_obsolete).toUpperCase()
|
extension is Extension.Installed && extension.isObsolete -> itemView.context.getString(R.string.ext_obsolete)
|
||||||
extension is Extension.Installed && extension.isUnofficial -> itemView.context.getString(R.string.ext_unofficial).toUpperCase()
|
extension is Extension.Installed && extension.isUnofficial -> itemView.context.getString(R.string.ext_unofficial)
|
||||||
else -> null
|
extension.isNsfw -> itemView.context.getString(R.string.ext_nsfw_short)
|
||||||
}
|
else -> ""
|
||||||
|
}.toUpperCase()
|
||||||
|
|
||||||
GlideApp.with(itemView.context).clear(image)
|
GlideApp.with(itemView.context).clear(image)
|
||||||
if (extension is Extension.Available) {
|
if (extension is Extension.Available) {
|
||||||
|
@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.browse.extension
|
|||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferenceValues
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.extension.ExtensionManager
|
import eu.kanade.tachiyomi.extension.ExtensionManager
|
||||||
import eu.kanade.tachiyomi.extension.model.Extension
|
import eu.kanade.tachiyomi.extension.model.Extension
|
||||||
@ -55,20 +56,22 @@ open class ExtensionPresenter(
|
|||||||
private fun toItems(tuple: ExtensionTuple): List<ExtensionItem> {
|
private fun toItems(tuple: ExtensionTuple): List<ExtensionItem> {
|
||||||
val context = Injekt.get<Application>()
|
val context = Injekt.get<Application>()
|
||||||
val activeLangs = preferences.enabledLanguages().get()
|
val activeLangs = preferences.enabledLanguages().get()
|
||||||
|
val showNsfwExtensions = preferences.allowNsfwSource().get() != PreferenceValues.NsfwAllowance.BLOCKED
|
||||||
|
|
||||||
val (installed, untrusted, available) = tuple
|
val (installed, untrusted, available) = tuple
|
||||||
|
|
||||||
val items = mutableListOf<ExtensionItem>()
|
val items = mutableListOf<ExtensionItem>()
|
||||||
|
|
||||||
val updatesSorted = installed.filter { it.hasUpdate }.sortedBy { it.pkgName }
|
val updatesSorted = installed.filter { it.hasUpdate && (showNsfwExtensions || !it.isNsfw) }.sortedBy { it.pkgName }
|
||||||
val installedSorted = installed.filter { !it.hasUpdate }.sortedWith(compareBy({ !it.isObsolete }, { it.pkgName }))
|
val installedSorted = installed.filter { !it.hasUpdate && (showNsfwExtensions || !it.isNsfw) }.sortedWith(compareBy({ !it.isObsolete }, { it.pkgName }))
|
||||||
val untrustedSorted = untrusted.sortedBy { it.pkgName }
|
val untrustedSorted = untrusted.sortedBy { it.pkgName }
|
||||||
val availableSorted = available
|
val availableSorted = available
|
||||||
// Filter out already installed extensions and disabled languages
|
// Filter out already installed extensions and disabled languages
|
||||||
.filter { avail ->
|
.filter { avail ->
|
||||||
installed.none { it.pkgName == avail.pkgName } &&
|
installed.none { it.pkgName == avail.pkgName } &&
|
||||||
untrusted.none { it.pkgName == avail.pkgName } &&
|
untrusted.none { it.pkgName == avail.pkgName } &&
|
||||||
(avail.lang in activeLangs || avail.lang == "all")
|
(avail.lang in activeLangs || avail.lang == "all") &&
|
||||||
|
(showNsfwExtensions || !avail.isNsfw)
|
||||||
}
|
}
|
||||||
.sortedBy { it.pkgName }
|
.sortedBy { it.pkgName }
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@ import eu.kanade.tachiyomi.source.CatalogueSource
|
|||||||
import eu.kanade.tachiyomi.source.ConfigurableSource
|
import eu.kanade.tachiyomi.source.ConfigurableSource
|
||||||
import eu.kanade.tachiyomi.source.Source
|
import eu.kanade.tachiyomi.source.Source
|
||||||
import eu.kanade.tachiyomi.source.getPreferenceKey
|
import eu.kanade.tachiyomi.source.getPreferenceKey
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.NoToolbarElevationController
|
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||||
|
import eu.kanade.tachiyomi.ui.base.controller.ToolbarLiftOnScrollController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.util.preference.DSL
|
import eu.kanade.tachiyomi.util.preference.DSL
|
||||||
import eu.kanade.tachiyomi.util.preference.onChange
|
import eu.kanade.tachiyomi.util.preference.onChange
|
||||||
@ -50,7 +50,7 @@ import uy.kohesive.injekt.injectLazy
|
|||||||
@SuppressLint("RestrictedApi")
|
@SuppressLint("RestrictedApi")
|
||||||
class ExtensionDetailsController(bundle: Bundle? = null) :
|
class ExtensionDetailsController(bundle: Bundle? = null) :
|
||||||
NucleusController<ExtensionDetailControllerBinding, ExtensionDetailsPresenter>(bundle),
|
NucleusController<ExtensionDetailControllerBinding, ExtensionDetailsPresenter>(bundle),
|
||||||
NoToolbarElevationController {
|
ToolbarLiftOnScrollController {
|
||||||
|
|
||||||
private val preferences: PreferencesHelper by injectLazy()
|
private val preferences: PreferencesHelper by injectLazy()
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ class ExtensionDetailsHeaderAdapter(private val presenter: ExtensionDetailsPrese
|
|||||||
binding.extensionTitle.text = extension.name
|
binding.extensionTitle.text = extension.name
|
||||||
binding.extensionVersion.text = context.getString(R.string.ext_version_info, extension.versionName)
|
binding.extensionVersion.text = context.getString(R.string.ext_version_info, extension.versionName)
|
||||||
binding.extensionLang.text = context.getString(R.string.ext_language_info, LocaleHelper.getSourceDisplayName(extension.lang, context))
|
binding.extensionLang.text = context.getString(R.string.ext_language_info, LocaleHelper.getSourceDisplayName(extension.lang, context))
|
||||||
|
binding.extensionNsfw.isVisible = extension.isNsfw
|
||||||
binding.extensionPkg.text = extension.pkgName
|
binding.extensionPkg.text = extension.pkgName
|
||||||
|
|
||||||
binding.extensionUninstallButton.clicks()
|
binding.extensionUninstallButton.clicks()
|
||||||
|
@ -10,8 +10,8 @@ import eu.davidea.flexibleadapter.items.IFlexible
|
|||||||
import eu.kanade.tachiyomi.databinding.MigrationMangaControllerBinding
|
import eu.kanade.tachiyomi.databinding.MigrationMangaControllerBinding
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
|
import eu.kanade.tachiyomi.ui.browse.SourceDividerItemDecoration
|
||||||
import eu.kanade.tachiyomi.ui.browse.migration.search.SearchController
|
import eu.kanade.tachiyomi.ui.browse.migration.search.SearchController
|
||||||
import eu.kanade.tachiyomi.ui.browse.source.SourceDividerItemDecoration
|
|
||||||
|
|
||||||
class MigrationMangaController :
|
class MigrationMangaController :
|
||||||
NucleusController<MigrationMangaControllerBinding, MigrationMangaPresenter>,
|
NucleusController<MigrationMangaControllerBinding, MigrationMangaPresenter>,
|
||||||
|
@ -8,8 +8,8 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
|
|||||||
import eu.kanade.tachiyomi.databinding.MigrationSourcesControllerBinding
|
import eu.kanade.tachiyomi.databinding.MigrationSourcesControllerBinding
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
|
import eu.kanade.tachiyomi.ui.browse.SourceDividerItemDecoration
|
||||||
import eu.kanade.tachiyomi.ui.browse.migration.manga.MigrationMangaController
|
import eu.kanade.tachiyomi.ui.browse.migration.manga.MigrationMangaController
|
||||||
import eu.kanade.tachiyomi.ui.browse.source.SourceDividerItemDecoration
|
|
||||||
|
|
||||||
class MigrationSourcesController :
|
class MigrationSourcesController :
|
||||||
NucleusController<MigrationSourcesControllerBinding, MigrationSourcesPresenter>(),
|
NucleusController<MigrationSourcesControllerBinding, MigrationSourcesPresenter>(),
|
||||||
|
@ -4,6 +4,7 @@ import android.view.View
|
|||||||
import eu.kanade.tachiyomi.source.icon
|
import eu.kanade.tachiyomi.source.icon
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
||||||
|
import eu.kanade.tachiyomi.ui.browse.SourceListItem
|
||||||
import io.github.mthli.slice.Slice
|
import io.github.mthli.slice.Slice
|
||||||
import kotlinx.android.synthetic.main.source_main_controller_card_item.card
|
import kotlinx.android.synthetic.main.source_main_controller_card_item.card
|
||||||
import kotlinx.android.synthetic.main.source_main_controller_card_item.image
|
import kotlinx.android.synthetic.main.source_main_controller_card_item.image
|
||||||
@ -11,6 +12,7 @@ import kotlinx.android.synthetic.main.source_main_controller_card_item.title
|
|||||||
|
|
||||||
class SourceHolder(view: View, override val adapter: SourceAdapter) :
|
class SourceHolder(view: View, override val adapter: SourceAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter),
|
BaseFlexibleViewHolder(view, adapter),
|
||||||
|
SourceListItem,
|
||||||
SlicedHolder {
|
SlicedHolder {
|
||||||
|
|
||||||
override val slice = Slice(card).apply {
|
override val slice = Slice(card).apply {
|
||||||
|
@ -30,6 +30,7 @@ import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
|||||||
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
|
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
||||||
|
import eu.kanade.tachiyomi.ui.browse.SourceDividerItemDecoration
|
||||||
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
|
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
|
||||||
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchController
|
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchController
|
||||||
import eu.kanade.tachiyomi.ui.browse.source.latest.LatestUpdatesController
|
import eu.kanade.tachiyomi.ui.browse.source.latest.LatestUpdatesController
|
||||||
@ -148,7 +149,7 @@ class SourceController :
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
SourceOptionsDialog(item, items).showDialog(router)
|
SourceOptionsDialog(item.source.toString(), items).showDialog(router)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun disableSource(source: Source) {
|
private fun disableSource(source: Source) {
|
||||||
@ -269,17 +270,17 @@ class SourceController :
|
|||||||
|
|
||||||
class SourceOptionsDialog(bundle: Bundle? = null) : DialogController(bundle) {
|
class SourceOptionsDialog(bundle: Bundle? = null) : DialogController(bundle) {
|
||||||
|
|
||||||
private lateinit var item: SourceItem
|
private lateinit var source: String
|
||||||
private lateinit var items: List<Pair<String, () -> Unit>>
|
private lateinit var items: List<Pair<String, () -> Unit>>
|
||||||
|
|
||||||
constructor(item: SourceItem, items: List<Pair<String, () -> Unit>>) : this() {
|
constructor(source: String, items: List<Pair<String, () -> Unit>>) : this() {
|
||||||
this.item = item
|
this.source = source
|
||||||
this.items = items
|
this.items = items
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||||
return MaterialDialog(activity!!)
|
return MaterialDialog(activity!!)
|
||||||
.title(text = item.source.toString())
|
.title(text = source)
|
||||||
.listItems(
|
.listItems(
|
||||||
items = items.map { it.first },
|
items = items.map { it.first },
|
||||||
waitForPositiveButton = false
|
waitForPositiveButton = false
|
||||||
|
@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.source.LocalSource
|
|||||||
import eu.kanade.tachiyomi.source.icon
|
import eu.kanade.tachiyomi.source.icon
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
||||||
|
import eu.kanade.tachiyomi.ui.browse.SourceListItem
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import eu.kanade.tachiyomi.util.view.setVectorCompat
|
import eu.kanade.tachiyomi.util.view.setVectorCompat
|
||||||
import io.github.mthli.slice.Slice
|
import io.github.mthli.slice.Slice
|
||||||
@ -18,6 +19,7 @@ import kotlinx.android.synthetic.main.source_main_controller_card_item.title
|
|||||||
|
|
||||||
class SourceHolder(private val view: View, override val adapter: SourceAdapter) :
|
class SourceHolder(private val view: View, override val adapter: SourceAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter),
|
BaseFlexibleViewHolder(view, adapter),
|
||||||
|
SourceListItem,
|
||||||
SlicedHolder {
|
SlicedHolder {
|
||||||
|
|
||||||
override val slice = Slice(card).apply {
|
override val slice = Slice(card).apply {
|
||||||
|
@ -103,7 +103,10 @@ class SourcePresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updateLastUsedSource(sourceId: Long) {
|
private fun updateLastUsedSource(sourceId: Long) {
|
||||||
val source = (sourceManager.get(sourceId) as? CatalogueSource)?.let { SourceItem(it) }
|
val source = (sourceManager.get(sourceId) as? CatalogueSource)?.let {
|
||||||
|
val isPinned = it.id.toString() in preferences.pinnedSources().get()
|
||||||
|
SourceItem(it, null, isPinned)
|
||||||
|
}
|
||||||
source?.let { view?.setLastUsedSource(it) }
|
source?.let { view?.setLastUsedSource(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ import eu.kanade.tachiyomi.util.view.shrinkOnScroll
|
|||||||
import eu.kanade.tachiyomi.util.view.snack
|
import eu.kanade.tachiyomi.util.view.snack
|
||||||
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
||||||
import eu.kanade.tachiyomi.widget.EmptyView
|
import eu.kanade.tachiyomi.widget.EmptyView
|
||||||
|
import kotlinx.android.synthetic.main.main_activity.root_coordinator
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.flow.drop
|
import kotlinx.coroutines.flow.drop
|
||||||
import kotlinx.coroutines.flow.filter
|
import kotlinx.coroutines.flow.filter
|
||||||
@ -403,7 +404,7 @@ open class BrowseSourceController(bundle: Bundle) :
|
|||||||
|
|
||||||
binding.emptyView.show(message, actions)
|
binding.emptyView.show(message, actions)
|
||||||
} else {
|
} else {
|
||||||
snack = binding.catalogueView.snack(message, Snackbar.LENGTH_INDEFINITE) {
|
snack = activity!!.root_coordinator?.snack(message, Snackbar.LENGTH_INDEFINITE) {
|
||||||
setAction(R.string.action_retry, retryAction)
|
setAction(R.string.action_retry, retryAction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,11 +16,14 @@ class TriStateSectionItem(filter: Filter.TriState) : TriStateItem(filter), ISect
|
|||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (javaClass != other?.javaClass) return false
|
if (javaClass != other?.javaClass) return false
|
||||||
return filter == (other as TriStateSectionItem).filter
|
|
||||||
|
other as TriStateSectionItem
|
||||||
|
if (head != other.head) return false
|
||||||
|
return filter == other.filter
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
return filter.hashCode()
|
return filter.hashCode() + (head?.hashCode() ?: 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,11 +40,14 @@ class TextSectionItem(filter: Filter.Text) : TextItem(filter), ISectionable<Text
|
|||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (javaClass != other?.javaClass) return false
|
if (javaClass != other?.javaClass) return false
|
||||||
return filter == (other as TextSectionItem).filter
|
|
||||||
|
other as TextSectionItem
|
||||||
|
if (head != other.head) return false
|
||||||
|
return filter == other.filter
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
return filter.hashCode()
|
return filter.hashCode() + (head?.hashCode() ?: 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,11 +64,14 @@ class CheckboxSectionItem(filter: Filter.CheckBox) : CheckboxItem(filter), ISect
|
|||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (javaClass != other?.javaClass) return false
|
if (javaClass != other?.javaClass) return false
|
||||||
return filter == (other as CheckboxSectionItem).filter
|
|
||||||
|
other as CheckboxSectionItem
|
||||||
|
if (head != other.head) return false
|
||||||
|
return filter == other.filter
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
return filter.hashCode()
|
return filter.hashCode() + (head?.hashCode() ?: 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,10 +88,13 @@ class SelectSectionItem(filter: Filter.Select<*>) : SelectItem(filter), ISection
|
|||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (javaClass != other?.javaClass) return false
|
if (javaClass != other?.javaClass) return false
|
||||||
return filter == (other as SelectSectionItem).filter
|
|
||||||
|
other as SelectSectionItem
|
||||||
|
if (head != other.head) return false
|
||||||
|
return filter == other.filter
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
return filter.hashCode()
|
return filter.hashCode() + (head?.hashCode() ?: 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,7 +108,7 @@ open class GlobalSearchPresenter(
|
|||||||
return sourceManager.getCatalogueSources()
|
return sourceManager.getCatalogueSources()
|
||||||
.filter { it.lang in languages }
|
.filter { it.lang in languages }
|
||||||
.filterNot { it.id.toString() in disabledSourceIds }
|
.filterNot { it.id.toString() in disabledSourceIds }
|
||||||
.sortedWith(compareBy({ it.id.toString() !in pinnedSourceIds }, { "(${it.lang}) ${it.name}" }))
|
.sortedWith(compareBy({ it.id.toString() !in pinnedSourceIds }, { "${it.name} (${it.lang})" }))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getSourcesToQuery(): List<CatalogueSource> {
|
private fun getSourcesToQuery(): List<CatalogueSource> {
|
||||||
@ -161,6 +161,8 @@ open class GlobalSearchPresenter(
|
|||||||
val initialItems = sources.map { createCatalogueSearchItem(it, null) }
|
val initialItems = sources.map { createCatalogueSearchItem(it, null) }
|
||||||
var items = initialItems
|
var items = initialItems
|
||||||
|
|
||||||
|
val pinnedSourceIds = preferences.pinnedSources().get()
|
||||||
|
|
||||||
fetchSourcesSubscription?.unsubscribe()
|
fetchSourcesSubscription?.unsubscribe()
|
||||||
fetchSourcesSubscription = Observable.from(sources)
|
fetchSourcesSubscription = Observable.from(sources)
|
||||||
.flatMap(
|
.flatMap(
|
||||||
@ -178,7 +180,17 @@ open class GlobalSearchPresenter(
|
|||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
// Update matching source with the obtained results
|
// Update matching source with the obtained results
|
||||||
.map { result ->
|
.map { result ->
|
||||||
items.map { item -> if (item.source == result.source) result else item }
|
items
|
||||||
|
.map { item -> if (item.source == result.source) result else item }
|
||||||
|
.sortedWith(
|
||||||
|
compareBy(
|
||||||
|
// Bubble up sources that actually have results
|
||||||
|
{ it.results.isNullOrEmpty() },
|
||||||
|
// Same as initial sort, i.e. pinned first then alphabetically
|
||||||
|
{ it.source.id.toString() !in pinnedSourceIds },
|
||||||
|
{ "${it.source.name} (${it.source.lang})" }
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
// Update current state
|
// Update current state
|
||||||
.doOnNext { items = it }
|
.doOnNext { items = it }
|
||||||
|
@ -472,6 +472,8 @@ class LibraryController(
|
|||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.action_move_to_category -> showChangeMangaCategoriesDialog()
|
R.id.action_move_to_category -> showChangeMangaCategoriesDialog()
|
||||||
R.id.action_download_unread -> downloadUnreadChapters()
|
R.id.action_download_unread -> downloadUnreadChapters()
|
||||||
|
R.id.action_mark_as_read -> markReadStatus(true)
|
||||||
|
R.id.action_mark_as_unread -> markReadStatus(false)
|
||||||
R.id.action_delete -> showDeleteMangaDialog()
|
R.id.action_delete -> showDeleteMangaDialog()
|
||||||
R.id.action_select_all -> selectAllCategoryManga()
|
R.id.action_select_all -> selectAllCategoryManga()
|
||||||
R.id.action_select_inverse -> selectInverseCategoryManga()
|
R.id.action_select_inverse -> selectInverseCategoryManga()
|
||||||
@ -554,6 +556,12 @@ class LibraryController(
|
|||||||
destroyActionModeIfNeeded()
|
destroyActionModeIfNeeded()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun markReadStatus(read: Boolean) {
|
||||||
|
val mangas = selectedMangas.toList()
|
||||||
|
presenter.markReadStatus(mangas, read)
|
||||||
|
destroyActionModeIfNeeded()
|
||||||
|
}
|
||||||
|
|
||||||
private fun showDeleteMangaDialog() {
|
private fun showDeleteMangaDialog() {
|
||||||
DeleteLibraryMangasDialog(this, selectedMangas.toList()).showDialog(router)
|
DeleteLibraryMangasDialog(this, selectedMangas.toList()).showDialog(router)
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import com.jakewharton.rxrelay.BehaviorRelay
|
|||||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||||
import eu.kanade.tachiyomi.data.database.models.Category
|
import eu.kanade.tachiyomi.data.database.models.Category
|
||||||
|
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.database.models.MangaCategory
|
import eu.kanade.tachiyomi.data.database.models.MangaCategory
|
||||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||||
@ -326,6 +327,36 @@ class LibraryPresenter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Marks mangas' chapters read status.
|
||||||
|
*
|
||||||
|
* @param mangas the list of manga.
|
||||||
|
*/
|
||||||
|
fun markReadStatus(mangas: List<Manga>, read: Boolean) {
|
||||||
|
mangas.forEach { manga ->
|
||||||
|
launchIO {
|
||||||
|
val chapters = db.getChapters(manga).executeAsBlocking()
|
||||||
|
chapters.forEach {
|
||||||
|
it.read = read
|
||||||
|
if (!read) {
|
||||||
|
it.last_page_read = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
db.updateChaptersProgress(chapters).executeAsBlocking()
|
||||||
|
|
||||||
|
if (preferences.removeAfterMarkedAsRead()) {
|
||||||
|
deleteChapters(manga, chapters)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun deleteChapters(manga: Manga, chapters: List<Chapter>) {
|
||||||
|
sourceManager.get(manga.source)?.let { source ->
|
||||||
|
downloadManager.deleteChapters(chapters, manga, source)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove the selected manga from the library.
|
* Remove the selected manga from the library.
|
||||||
*
|
*
|
||||||
|
@ -4,14 +4,12 @@ import android.app.Activity
|
|||||||
import android.app.SearchManager
|
import android.app.SearchManager
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Gravity
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
import androidx.core.net.toUri
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.core.view.updateLayoutParams
|
import androidx.preference.PreferenceDialogController
|
||||||
import com.bluelinelabs.conductor.Conductor
|
import com.bluelinelabs.conductor.Conductor
|
||||||
import com.bluelinelabs.conductor.Controller
|
import com.bluelinelabs.conductor.Controller
|
||||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||||
@ -19,12 +17,12 @@ import com.bluelinelabs.conductor.Router
|
|||||||
import com.bluelinelabs.conductor.RouterTransaction
|
import com.bluelinelabs.conductor.RouterTransaction
|
||||||
import com.google.android.material.appbar.AppBarLayout
|
import com.google.android.material.appbar.AppBarLayout
|
||||||
import com.google.android.material.behavior.HideBottomViewOnScrollBehavior
|
import com.google.android.material.behavior.HideBottomViewOnScrollBehavior
|
||||||
import com.google.android.material.snackbar.Snackbar
|
|
||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayout
|
||||||
import eu.kanade.tachiyomi.BuildConfig
|
import eu.kanade.tachiyomi.BuildConfig
|
||||||
import eu.kanade.tachiyomi.Migrations
|
import eu.kanade.tachiyomi.Migrations
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
||||||
|
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
||||||
import eu.kanade.tachiyomi.databinding.MainActivityBinding
|
import eu.kanade.tachiyomi.databinding.MainActivityBinding
|
||||||
import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
|
import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
|
||||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
||||||
@ -33,6 +31,7 @@ import eu.kanade.tachiyomi.ui.base.controller.FabController
|
|||||||
import eu.kanade.tachiyomi.ui.base.controller.NoToolbarElevationController
|
import eu.kanade.tachiyomi.ui.base.controller.NoToolbarElevationController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.RootController
|
import eu.kanade.tachiyomi.ui.base.controller.RootController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.TabbedController
|
import eu.kanade.tachiyomi.ui.base.controller.TabbedController
|
||||||
|
import eu.kanade.tachiyomi.ui.base.controller.ToolbarLiftOnScrollController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
||||||
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchController
|
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchController
|
||||||
@ -45,14 +44,12 @@ import eu.kanade.tachiyomi.ui.recent.updates.UpdatesController
|
|||||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||||
import eu.kanade.tachiyomi.util.lang.launchUI
|
import eu.kanade.tachiyomi.util.lang.launchUI
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import eu.kanade.tachiyomi.util.view.snack
|
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import kotlinx.android.synthetic.main.main_activity.appbar
|
import kotlinx.android.synthetic.main.main_activity.appbar
|
||||||
import kotlinx.android.synthetic.main.main_activity.tabs
|
import kotlinx.android.synthetic.main.main_activity.tabs
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
class MainActivity : BaseActivity<MainActivityBinding>() {
|
class MainActivity : BaseActivity<MainActivityBinding>() {
|
||||||
@ -155,13 +152,12 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
|
|||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
// Show changelog prompt on update
|
// Show changelog prompt on update
|
||||||
if (Migrations.upgrade(preferences) && !BuildConfig.DEBUG) {
|
if (Migrations.upgrade(preferences) && !BuildConfig.DEBUG) {
|
||||||
showUpdateInfoSnackbar()
|
WhatsNewDialogController().showDialog(router)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setExtensionsBadge()
|
preferences.extensionUpdatesCount()
|
||||||
preferences.extensionUpdatesCount().asFlow()
|
.asImmediateFlow { setExtensionsBadge() }
|
||||||
.onEach { setExtensionsBadge() }
|
|
||||||
.launchIn(scope)
|
.launchIn(scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,6 +319,9 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
|
|||||||
if (from is DialogController || to is DialogController) {
|
if (from is DialogController || to is DialogController) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if (from is PreferenceDialogController || to is PreferenceDialogController) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
supportActionBar?.setDisplayHomeAsUpEnabled(router.backstackSize != 1)
|
supportActionBar?.setDisplayHomeAsUpEnabled(router.backstackSize != 1)
|
||||||
|
|
||||||
@ -357,10 +356,16 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
|
|||||||
to.configureFab(binding.rootFab)
|
to.configureFab(binding.rootFab)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (to is NoToolbarElevationController) {
|
when (to) {
|
||||||
binding.appbar.disableElevation()
|
is NoToolbarElevationController -> {
|
||||||
} else {
|
binding.appbar.disableElevation()
|
||||||
binding.appbar.enableElevation()
|
}
|
||||||
|
is ToolbarLiftOnScrollController -> {
|
||||||
|
binding.appbar.enableElevation(true)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
binding.appbar.enableElevation(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -382,32 +387,6 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showUpdateInfoSnackbar() {
|
|
||||||
val snack = binding.rootCoordinator.snack(
|
|
||||||
getString(R.string.updated_version, BuildConfig.VERSION_NAME),
|
|
||||||
Snackbar.LENGTH_INDEFINITE
|
|
||||||
) {
|
|
||||||
setAction(R.string.whats_new) {
|
|
||||||
val url = "https://github.com/inorichi/tachiyomi/releases/tag/v${BuildConfig.VERSION_NAME}"
|
|
||||||
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
|
|
||||||
startActivity(intent)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure the snackbar sits above the bottom nav
|
|
||||||
view.updateLayoutParams<CoordinatorLayout.LayoutParams> {
|
|
||||||
anchorId = binding.bottomNav.id
|
|
||||||
anchorGravity = Gravity.TOP
|
|
||||||
gravity = Gravity.TOP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Manually handle dismiss delay since Snackbar.LENGTH_LONG is a too short
|
|
||||||
launchIO {
|
|
||||||
delay(10000)
|
|
||||||
snack.dismiss()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
// Shortcut actions
|
// Shortcut actions
|
||||||
const val SHORTCUT_LIBRARY = "eu.kanade.tachiyomi.SHOW_LIBRARY"
|
const val SHORTCUT_LIBRARY = "eu.kanade.tachiyomi.SHOW_LIBRARY"
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package eu.kanade.tachiyomi.ui.main
|
||||||
|
|
||||||
|
import android.app.Dialog
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.core.net.toUri
|
||||||
|
import com.afollestad.materialdialogs.MaterialDialog
|
||||||
|
import eu.kanade.tachiyomi.BuildConfig
|
||||||
|
import eu.kanade.tachiyomi.R
|
||||||
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
|
|
||||||
|
class WhatsNewDialogController(bundle: Bundle? = null) : DialogController(bundle) {
|
||||||
|
|
||||||
|
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||||
|
return MaterialDialog(activity!!)
|
||||||
|
.title(text = activity!!.getString(R.string.updated_version, BuildConfig.VERSION_NAME))
|
||||||
|
.positiveButton(android.R.string.ok)
|
||||||
|
.neutralButton(R.string.whats_new) {
|
||||||
|
val url = "https://github.com/inorichi/tachiyomi/releases/tag/v${BuildConfig.VERSION_NAME}"
|
||||||
|
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -14,6 +14,9 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.view.ActionMode
|
import androidx.appcompat.view.ActionMode
|
||||||
|
import androidx.core.graphics.blue
|
||||||
|
import androidx.core.graphics.green
|
||||||
|
import androidx.core.graphics.red
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.ConcatAdapter
|
import androidx.recyclerview.widget.ConcatAdapter
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
@ -39,6 +42,7 @@ import eu.kanade.tachiyomi.source.SourceManager
|
|||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.FabController
|
import eu.kanade.tachiyomi.ui.base.controller.FabController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||||
|
import eu.kanade.tachiyomi.ui.base.controller.ToolbarLiftOnScrollController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.browse.migration.search.SearchController
|
import eu.kanade.tachiyomi.ui.browse.migration.search.SearchController
|
||||||
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
|
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
|
||||||
@ -82,6 +86,7 @@ import uy.kohesive.injekt.injectLazy
|
|||||||
|
|
||||||
class MangaController :
|
class MangaController :
|
||||||
NucleusController<MangaControllerBinding, MangaPresenter>,
|
NucleusController<MangaControllerBinding, MangaPresenter>,
|
||||||
|
ToolbarLiftOnScrollController,
|
||||||
FabController,
|
FabController,
|
||||||
ActionMode.Callback,
|
ActionMode.Callback,
|
||||||
FlexibleAdapter.OnItemClickListener,
|
FlexibleAdapter.OnItemClickListener,
|
||||||
@ -122,20 +127,20 @@ class MangaController :
|
|||||||
private val coverCache: CoverCache by injectLazy()
|
private val coverCache: CoverCache by injectLazy()
|
||||||
|
|
||||||
private val toolbarTextColor by lazy { view!!.context.getResourceColor(R.attr.colorOnPrimary) }
|
private val toolbarTextColor by lazy { view!!.context.getResourceColor(R.attr.colorOnPrimary) }
|
||||||
private var toolbarTextAlpha = 255
|
|
||||||
|
|
||||||
private var mangaInfoAdapter: MangaInfoHeaderAdapter? = null
|
private var mangaInfoAdapter: MangaInfoHeaderAdapter? = null
|
||||||
private var chaptersHeaderAdapter: MangaChaptersHeaderAdapter? = null
|
private var chaptersHeaderAdapter: MangaChaptersHeaderAdapter? = null
|
||||||
private var chaptersAdapter: ChaptersAdapter? = null
|
private var chaptersAdapter: ChaptersAdapter? = null
|
||||||
|
|
||||||
/**
|
// Sheet containing filter/sort/display items.
|
||||||
* Sheet containing filter/sort/display items.
|
|
||||||
*/
|
|
||||||
private var settingsSheet: ChaptersSettingsSheet? = null
|
private var settingsSheet: ChaptersSettingsSheet? = null
|
||||||
|
|
||||||
private var actionFab: ExtendedFloatingActionButton? = null
|
private var actionFab: ExtendedFloatingActionButton? = null
|
||||||
private var actionFabScrollListener: RecyclerView.OnScrollListener? = null
|
private var actionFabScrollListener: RecyclerView.OnScrollListener? = null
|
||||||
|
|
||||||
|
// Snackbar to add manga to library after downloading chapter(s)
|
||||||
|
private var addSnackbar: Snackbar? = null
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action mode for multiple selection.
|
* Action mode for multiple selection.
|
||||||
*/
|
*/
|
||||||
@ -157,6 +162,19 @@ class MangaController :
|
|||||||
setHasOptionsMenu(true)
|
setHasOptionsMenu(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getTitle(): String? {
|
||||||
|
return manga?.title
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) {
|
||||||
|
super.onChangeStarted(handler, type)
|
||||||
|
|
||||||
|
// Hide toolbar title on enter
|
||||||
|
if (type.isEnter) {
|
||||||
|
updateToolbarTitleAlpha()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onChangeEnded(handler: ControllerChangeHandler, type: ControllerChangeType) {
|
override fun onChangeEnded(handler: ControllerChangeHandler, type: ControllerChangeType) {
|
||||||
super.onChangeEnded(handler, type)
|
super.onChangeEnded(handler, type)
|
||||||
if (manga == null || source == null) {
|
if (manga == null || source == null) {
|
||||||
@ -204,7 +222,6 @@ class MangaController :
|
|||||||
// Delayed in case we need to jump to chapters
|
// Delayed in case we need to jump to chapters
|
||||||
binding.recycler.post {
|
binding.recycler.post {
|
||||||
updateToolbarTitleAlpha()
|
updateToolbarTitleAlpha()
|
||||||
setTitle(manga?.title)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,18 +260,14 @@ class MangaController :
|
|||||||
else -> min(binding.recycler.computeVerticalScrollOffset(), 255)
|
else -> min(binding.recycler.computeVerticalScrollOffset(), 255)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (calculatedAlpha != toolbarTextAlpha) {
|
activity?.toolbar?.setTitleTextColor(
|
||||||
toolbarTextAlpha = calculatedAlpha
|
Color.argb(
|
||||||
|
calculatedAlpha,
|
||||||
activity?.toolbar?.setTitleTextColor(
|
toolbarTextColor.red,
|
||||||
Color.argb(
|
toolbarTextColor.green,
|
||||||
toolbarTextAlpha,
|
toolbarTextColor.blue
|
||||||
Color.red(toolbarTextColor),
|
|
||||||
Color.green(toolbarTextColor),
|
|
||||||
Color.blue(toolbarTextColor)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateFilterIconState() {
|
private fun updateFilterIconState() {
|
||||||
@ -306,6 +319,7 @@ class MangaController :
|
|||||||
chaptersHeaderAdapter = null
|
chaptersHeaderAdapter = null
|
||||||
chaptersAdapter = null
|
chaptersAdapter = null
|
||||||
settingsSheet = null
|
settingsSheet = null
|
||||||
|
addSnackbar?.dismiss()
|
||||||
updateToolbarTitleAlpha(255)
|
updateToolbarTitleAlpha(255)
|
||||||
super.onDestroyView(view)
|
super.onDestroyView(view)
|
||||||
}
|
}
|
||||||
@ -881,7 +895,7 @@ class MangaController :
|
|||||||
val manga = presenter.manga
|
val manga = presenter.manga
|
||||||
presenter.downloadChapters(chapters)
|
presenter.downloadChapters(chapters)
|
||||||
if (view != null && !manga.favorite) {
|
if (view != null && !manga.favorite) {
|
||||||
binding.recycler.snack(view.context.getString(R.string.snack_add_to_library), Snackbar.LENGTH_INDEFINITE) {
|
addSnackbar = activity!!.root_coordinator?.snack(view.context.getString(R.string.snack_add_to_library), Snackbar.LENGTH_INDEFINITE) {
|
||||||
setAction(R.string.action_add) {
|
setAction(R.string.action_add) {
|
||||||
addToLibrary(manga)
|
addToLibrary(manga)
|
||||||
}
|
}
|
||||||
|
@ -494,8 +494,14 @@ class MangaPresenter(
|
|||||||
* @param chapters the chapters to delete.
|
* @param chapters the chapters to delete.
|
||||||
*/
|
*/
|
||||||
private fun deleteChaptersInternal(chapters: List<ChapterItem>) {
|
private fun deleteChaptersInternal(chapters: List<ChapterItem>) {
|
||||||
downloadManager.deleteChapters(chapters, manga, source)
|
val filteredChapters = if (!preferences.removeBookmarkedChapters()) {
|
||||||
chapters.forEach {
|
chapters.filterNot { it.bookmark }
|
||||||
|
} else {
|
||||||
|
chapters
|
||||||
|
}
|
||||||
|
|
||||||
|
downloadManager.deleteChapters(filteredChapters, manga, source)
|
||||||
|
filteredChapters.forEach {
|
||||||
it.status = Download.NOT_DOWNLOADED
|
it.status = Download.NOT_DOWNLOADED
|
||||||
it.download = null
|
it.download = null
|
||||||
}
|
}
|
||||||
|
@ -238,7 +238,7 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
|||||||
R.id.action_settings -> ReaderSettingsSheet(this).show()
|
R.id.action_settings -> ReaderSettingsSheet(this).show()
|
||||||
R.id.action_custom_filter -> {
|
R.id.action_custom_filter -> {
|
||||||
val sheet = ReaderColorFilterSheet(this)
|
val sheet = ReaderColorFilterSheet(this)
|
||||||
// Remove dimmed backdrop so changes can be previewd
|
// Remove dimmed backdrop so changes can be previewed
|
||||||
.apply { window?.setDimAmount(0f) }
|
.apply { window?.setDimAmount(0f) }
|
||||||
|
|
||||||
// Hide toolbars while sheet is open for better preview
|
// Hide toolbars while sheet is open for better preview
|
||||||
|
@ -80,29 +80,38 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
|
|||||||
isIdle = state == ViewPager.SCROLL_STATE_IDLE
|
isIdle = state == ViewPager.SCROLL_STATE_IDLE
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
pager.tapListener = { event ->
|
pager.tapListener = f@{ event ->
|
||||||
|
if (!config.tappingEnabled) {
|
||||||
|
activity.toggleMenu()
|
||||||
|
return@f
|
||||||
|
}
|
||||||
|
|
||||||
|
val positionX = event.x
|
||||||
|
val positionY = event.y
|
||||||
|
val topSideTap = positionY < pager.height * 0.25f
|
||||||
|
val bottomSideTap = positionY > pager.height * 0.75f
|
||||||
|
val leftSideTap = positionX < pager.width * 0.33f
|
||||||
|
val rightSideTap = positionX > pager.width * 0.66f
|
||||||
|
|
||||||
val invertMode = config.tappingInverted
|
val invertMode = config.tappingInverted
|
||||||
|
val invertVertical = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH
|
||||||
|
val invertHorizontal = invertMode == TappingInvertMode.HORIZONTAL || invertMode == TappingInvertMode.BOTH
|
||||||
|
|
||||||
if (this is VerticalPagerViewer) {
|
if (this is VerticalPagerViewer) {
|
||||||
val positionY = event.y
|
|
||||||
val tappingInverted = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH
|
|
||||||
val topSideTap = positionY < pager.height * 0.33f && config.tappingEnabled
|
|
||||||
val bottomSideTap = positionY > pager.height * 0.66f && config.tappingEnabled
|
|
||||||
|
|
||||||
when {
|
when {
|
||||||
topSideTap && !tappingInverted || bottomSideTap && tappingInverted -> moveLeft()
|
topSideTap && !invertVertical || bottomSideTap && invertVertical -> moveLeft()
|
||||||
bottomSideTap && !tappingInverted || topSideTap && tappingInverted -> moveRight()
|
bottomSideTap && !invertVertical || topSideTap && invertVertical -> moveRight()
|
||||||
|
|
||||||
|
leftSideTap && !invertHorizontal || rightSideTap && invertHorizontal -> moveLeft()
|
||||||
|
rightSideTap && !invertHorizontal || leftSideTap && invertHorizontal -> moveRight()
|
||||||
|
|
||||||
else -> activity.toggleMenu()
|
else -> activity.toggleMenu()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val positionX = event.x
|
|
||||||
val tappingInverted = invertMode == TappingInvertMode.HORIZONTAL || invertMode == TappingInvertMode.BOTH
|
|
||||||
val leftSideTap = positionX < pager.width * 0.33f && config.tappingEnabled
|
|
||||||
val rightSideTap = positionX > pager.width * 0.66f && config.tappingEnabled
|
|
||||||
|
|
||||||
when {
|
when {
|
||||||
leftSideTap && !tappingInverted || rightSideTap && tappingInverted -> moveLeft()
|
leftSideTap && !invertHorizontal || rightSideTap && invertHorizontal -> moveLeft()
|
||||||
rightSideTap && !tappingInverted || leftSideTap && tappingInverted -> moveRight()
|
rightSideTap && !invertHorizontal || leftSideTap && invertHorizontal -> moveRight()
|
||||||
|
|
||||||
else -> activity.toggleMenu()
|
else -> activity.toggleMenu()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,17 +93,30 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
recycler.tapListener = { event ->
|
recycler.tapListener = f@{ event ->
|
||||||
val positionY = event.rawY
|
if (!config.tappingEnabled) {
|
||||||
val invertMode = config.tappingInverted
|
activity.toggleMenu()
|
||||||
val topSideTap = positionY < recycler.height * 0.33f && config.tappingEnabled
|
return@f
|
||||||
val bottomSideTap = positionY > recycler.height * 0.66f && config.tappingEnabled
|
}
|
||||||
|
|
||||||
val tappingInverted = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH
|
val positionX = event.rawX
|
||||||
|
val positionY = event.rawY
|
||||||
|
val topSideTap = positionY < recycler.height * 0.25f
|
||||||
|
val bottomSideTap = positionY > recycler.height * 0.75f
|
||||||
|
val leftSideTap = positionX < recycler.width * 0.33f
|
||||||
|
val rightSideTap = positionX > recycler.width * 0.66f
|
||||||
|
|
||||||
|
val invertMode = config.tappingInverted
|
||||||
|
val invertVertical = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH
|
||||||
|
val invertHorizontal = invertMode == TappingInvertMode.HORIZONTAL || invertMode == TappingInvertMode.BOTH
|
||||||
|
|
||||||
when {
|
when {
|
||||||
topSideTap && !tappingInverted || bottomSideTap && tappingInverted -> scrollUp()
|
topSideTap && !invertVertical || bottomSideTap && invertVertical -> scrollUp()
|
||||||
bottomSideTap && !tappingInverted || topSideTap && tappingInverted -> scrollDown()
|
bottomSideTap && !invertVertical || topSideTap && invertVertical -> scrollDown()
|
||||||
|
|
||||||
|
leftSideTap && !invertHorizontal || rightSideTap && invertHorizontal -> scrollUp()
|
||||||
|
rightSideTap && !invertHorizontal || leftSideTap && invertHorizontal -> scrollDown()
|
||||||
|
|
||||||
else -> activity.toggleMenu()
|
else -> activity.toggleMenu()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ import eu.kanade.tachiyomi.data.backup.BackupRestoreValidator
|
|||||||
import eu.kanade.tachiyomi.data.backup.models.Backup
|
import eu.kanade.tachiyomi.data.backup.models.Backup
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||||
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
||||||
import eu.kanade.tachiyomi.source.SourceManager
|
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
|
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
|
||||||
import eu.kanade.tachiyomi.util.preference.defaultValue
|
import eu.kanade.tachiyomi.util.preference.defaultValue
|
||||||
@ -37,8 +36,6 @@ import eu.kanade.tachiyomi.util.system.getFilePicker
|
|||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import uy.kohesive.injekt.Injekt
|
|
||||||
import uy.kohesive.injekt.api.get
|
|
||||||
|
|
||||||
class SettingsBackupController : SettingsController() {
|
class SettingsBackupController : SettingsController() {
|
||||||
|
|
||||||
@ -258,16 +255,12 @@ class SettingsBackupController : SettingsController() {
|
|||||||
return try {
|
return try {
|
||||||
var message = activity.getString(R.string.backup_restore_content)
|
var message = activity.getString(R.string.backup_restore_content)
|
||||||
|
|
||||||
val sources = BackupRestoreValidator.validate(activity, uri)
|
val results = BackupRestoreValidator.validate(activity, uri)
|
||||||
if (sources.isNotEmpty()) {
|
if (results.missingSources.isNotEmpty()) {
|
||||||
val sourceManager = Injekt.get<SourceManager>()
|
message += "\n\n${activity.getString(R.string.backup_restore_missing_sources)}\n${results.missingSources.joinToString("\n") { "- $it" }}"
|
||||||
val missingSources = sources
|
}
|
||||||
.filter { sourceManager.get(it.key) == null }
|
if (results.missingTrackers.isNotEmpty()) {
|
||||||
.values
|
message += "\n\n${activity.getString(R.string.backup_restore_missing_trackers)}\n${results.missingTrackers.joinToString("\n") { "- $it" }}"
|
||||||
.sorted()
|
|
||||||
if (missingSources.isNotEmpty()) {
|
|
||||||
message += "\n\n${activity.getString(R.string.backup_restore_missing_sources)}\n${missingSources.joinToString("\n") { "- $it" }}"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MaterialDialog(activity)
|
MaterialDialog(activity)
|
||||||
|
@ -65,7 +65,7 @@ class SettingsDownloadController : SettingsController() {
|
|||||||
defaultValue = true
|
defaultValue = true
|
||||||
}
|
}
|
||||||
preferenceCategory {
|
preferenceCategory {
|
||||||
titleRes = R.string.pref_remove_after_read
|
titleRes = R.string.pref_category_delete_chapters
|
||||||
|
|
||||||
switchPreference {
|
switchPreference {
|
||||||
key = Keys.removeAfterMarkedAsRead
|
key = Keys.removeAfterMarkedAsRead
|
||||||
@ -84,6 +84,11 @@ class SettingsDownloadController : SettingsController() {
|
|||||||
defaultValue = "-1"
|
defaultValue = "-1"
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
}
|
}
|
||||||
|
switchPreference {
|
||||||
|
key = Keys.removeBookmarkedChapters
|
||||||
|
titleRes = R.string.pref_remove_bookmarked_chapters
|
||||||
|
defaultValue = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val dbCategories = db.getCategories().executeAsBlocking()
|
val dbCategories = db.getCategories().executeAsBlocking()
|
||||||
|
@ -204,7 +204,6 @@ class SettingsGeneralController : SettingsController() {
|
|||||||
"sr",
|
"sr",
|
||||||
"sv",
|
"sv",
|
||||||
"th",
|
"th",
|
||||||
"tl",
|
|
||||||
"tr",
|
"tr",
|
||||||
"uk",
|
"uk",
|
||||||
"ur-rPK",
|
"ur-rPK",
|
||||||
|
@ -65,6 +65,12 @@ class SettingsMainController : SettingsController() {
|
|||||||
titleRes = R.string.pref_category_security
|
titleRes = R.string.pref_category_security
|
||||||
onClick { navigateTo(SettingsSecurityController()) }
|
onClick { navigateTo(SettingsSecurityController()) }
|
||||||
}
|
}
|
||||||
|
// preference {
|
||||||
|
// iconRes = R.drawable.ic_outline_people_alt_24dp
|
||||||
|
// iconTint = tintColor
|
||||||
|
// titleRes = R.string.pref_category_parental_controls
|
||||||
|
// onClick { navigateTo(SettingsParentalControlsController()) }
|
||||||
|
// }
|
||||||
preference {
|
preference {
|
||||||
iconRes = R.drawable.ic_code_24dp
|
iconRes = R.drawable.ic_code_24dp
|
||||||
iconTint = tintColor
|
iconTint = tintColor
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
package eu.kanade.tachiyomi.ui.setting
|
||||||
|
|
||||||
|
import androidx.preference.PreferenceScreen
|
||||||
|
import eu.kanade.tachiyomi.R
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
|
||||||
|
import eu.kanade.tachiyomi.util.preference.defaultValue
|
||||||
|
import eu.kanade.tachiyomi.util.preference.entriesRes
|
||||||
|
import eu.kanade.tachiyomi.util.preference.infoPreference
|
||||||
|
import eu.kanade.tachiyomi.util.preference.listPreference
|
||||||
|
import eu.kanade.tachiyomi.util.preference.preferenceCategory
|
||||||
|
import eu.kanade.tachiyomi.util.preference.titleRes
|
||||||
|
|
||||||
|
class SettingsParentalControlsController : SettingsController() {
|
||||||
|
|
||||||
|
override fun setupPreferenceScreen(screen: PreferenceScreen) = with(screen) {
|
||||||
|
titleRes = R.string.pref_category_parental_controls
|
||||||
|
|
||||||
|
listPreference {
|
||||||
|
key = Keys.allowNsfwSource
|
||||||
|
titleRes = R.string.pref_allow_nsfw_sources
|
||||||
|
entriesRes = arrayOf(
|
||||||
|
R.string.pref_allow_nsfw_sources_allowed,
|
||||||
|
R.string.pref_allow_nsfw_sources_allowed_multisource,
|
||||||
|
R.string.pref_allow_nsfw_sources_blocked
|
||||||
|
)
|
||||||
|
entryValues = arrayOf(
|
||||||
|
Values.NsfwAllowance.ALLOWED.name,
|
||||||
|
Values.NsfwAllowance.PARTIAL.name,
|
||||||
|
Values.NsfwAllowance.BLOCKED.name
|
||||||
|
)
|
||||||
|
defaultValue = Values.NsfwAllowance.ALLOWED.name
|
||||||
|
summary = "%s"
|
||||||
|
}
|
||||||
|
|
||||||
|
preferenceCategory {
|
||||||
|
infoPreference(R.string.parental_controls_info)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,8 @@ import eu.kanade.tachiyomi.data.track.TrackService
|
|||||||
import eu.kanade.tachiyomi.data.track.anilist.AnilistApi
|
import eu.kanade.tachiyomi.data.track.anilist.AnilistApi
|
||||||
import eu.kanade.tachiyomi.data.track.bangumi.BangumiApi
|
import eu.kanade.tachiyomi.data.track.bangumi.BangumiApi
|
||||||
import eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi
|
import eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi
|
||||||
|
import eu.kanade.tachiyomi.ui.setting.track.TrackLoginDialog
|
||||||
|
import eu.kanade.tachiyomi.ui.setting.track.TrackLogoutDialog
|
||||||
import eu.kanade.tachiyomi.util.preference.defaultValue
|
import eu.kanade.tachiyomi.util.preference.defaultValue
|
||||||
import eu.kanade.tachiyomi.util.preference.infoPreference
|
import eu.kanade.tachiyomi.util.preference.infoPreference
|
||||||
import eu.kanade.tachiyomi.util.preference.initThenAdd
|
import eu.kanade.tachiyomi.util.preference.initThenAdd
|
||||||
@ -20,8 +22,6 @@ import eu.kanade.tachiyomi.util.preference.switchPreference
|
|||||||
import eu.kanade.tachiyomi.util.preference.titleRes
|
import eu.kanade.tachiyomi.util.preference.titleRes
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import eu.kanade.tachiyomi.widget.preference.LoginPreference
|
import eu.kanade.tachiyomi.widget.preference.LoginPreference
|
||||||
import eu.kanade.tachiyomi.widget.preference.TrackLoginDialog
|
|
||||||
import eu.kanade.tachiyomi.widget.preference.TrackLogoutDialog
|
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
class SettingsTrackingController :
|
class SettingsTrackingController :
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.widget.preference
|
package eu.kanade.tachiyomi.ui.setting.track
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.data.track.TrackManager
|
import eu.kanade.tachiyomi.data.track.TrackManager
|
||||||
import eu.kanade.tachiyomi.data.track.TrackService
|
import eu.kanade.tachiyomi.data.track.TrackService
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
|
import eu.kanade.tachiyomi.widget.preference.LoginDialogPreference
|
||||||
import kotlinx.android.synthetic.main.pref_account_login.view.login
|
import kotlinx.android.synthetic.main.pref_account_login.view.login
|
||||||
import kotlinx.android.synthetic.main.pref_account_login.view.password
|
import kotlinx.android.synthetic.main.pref_account_login.view.password
|
||||||
import kotlinx.android.synthetic.main.pref_account_login.view.username
|
import kotlinx.android.synthetic.main.pref_account_login.view.username
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.tachiyomi.widget.preference
|
package eu.kanade.tachiyomi.ui.setting.track
|
||||||
|
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
@ -9,19 +9,18 @@ import android.os.Bundle
|
|||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.webkit.WebChromeClient
|
import android.webkit.WebChromeClient
|
||||||
import android.webkit.WebResourceRequest
|
|
||||||
import android.webkit.WebView
|
import android.webkit.WebView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.graphics.ColorUtils
|
import androidx.core.graphics.ColorUtils
|
||||||
import androidx.core.view.isInvisible
|
import androidx.core.view.isInvisible
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.webkit.WebViewClientCompat
|
|
||||||
import eu.kanade.tachiyomi.BuildConfig
|
import eu.kanade.tachiyomi.BuildConfig
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.databinding.WebviewActivityBinding
|
import eu.kanade.tachiyomi.databinding.WebviewActivityBinding
|
||||||
import eu.kanade.tachiyomi.source.SourceManager
|
import eu.kanade.tachiyomi.source.SourceManager
|
||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
||||||
|
import eu.kanade.tachiyomi.util.system.WebViewClientCompat
|
||||||
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import eu.kanade.tachiyomi.util.system.openInBrowser
|
import eu.kanade.tachiyomi.util.system.openInBrowser
|
||||||
@ -100,8 +99,8 @@ class WebViewActivity : BaseActivity<WebviewActivityBinding>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.webview.webViewClient = object : WebViewClientCompat() {
|
binding.webview.webViewClient = object : WebViewClientCompat() {
|
||||||
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
|
override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
|
||||||
view.loadUrl(request.url.toString())
|
view.loadUrl(url)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,13 +36,15 @@ fun syncChaptersWithSource(
|
|||||||
// Chapters from db.
|
// Chapters from db.
|
||||||
val dbChapters = db.getChapters(manga).executeAsBlocking()
|
val dbChapters = db.getChapters(manga).executeAsBlocking()
|
||||||
|
|
||||||
val sourceChapters = rawSourceChapters.mapIndexed { i, sChapter ->
|
val sourceChapters = rawSourceChapters
|
||||||
Chapter.create().apply {
|
.distinctBy { it.url }
|
||||||
copyFrom(sChapter)
|
.mapIndexed { i, sChapter ->
|
||||||
manga_id = manga.id
|
Chapter.create().apply {
|
||||||
source_order = i
|
copyFrom(sChapter)
|
||||||
|
manga_id = manga.id
|
||||||
|
source_order = i
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Chapters from the source not in db.
|
// Chapters from the source not in db.
|
||||||
val toAdd = mutableListOf<Chapter>()
|
val toAdd = mutableListOf<Chapter>()
|
||||||
|
@ -34,11 +34,12 @@ object DiskUtil {
|
|||||||
* Gets the available space for the disk that a file path points to, in bytes.
|
* Gets the available space for the disk that a file path points to, in bytes.
|
||||||
*/
|
*/
|
||||||
fun getAvailableStorageSpace(f: UniFile): Long {
|
fun getAvailableStorageSpace(f: UniFile): Long {
|
||||||
val stat = StatFs(f.filePath)
|
return try {
|
||||||
val availBlocks = stat.availableBlocksLong
|
val stat = StatFs(f.uri.path)
|
||||||
val blockSize = stat.blockSizeLong
|
stat.availableBlocksLong * stat.blockSizeLong
|
||||||
|
} catch (_: Exception) {
|
||||||
return availBlocks * blockSize
|
-1L
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,91 @@
|
|||||||
|
package eu.kanade.tachiyomi.util.system
|
||||||
|
|
||||||
|
import android.annotation.TargetApi
|
||||||
|
import android.os.Build
|
||||||
|
import android.webkit.WebResourceError
|
||||||
|
import android.webkit.WebResourceRequest
|
||||||
|
import android.webkit.WebResourceResponse
|
||||||
|
import android.webkit.WebView
|
||||||
|
import android.webkit.WebViewClient
|
||||||
|
|
||||||
|
@Suppress("OverridingDeprecatedMember")
|
||||||
|
abstract class WebViewClientCompat : WebViewClient() {
|
||||||
|
|
||||||
|
open fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun shouldInterceptRequestCompat(view: WebView, url: String): WebResourceResponse? {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun onReceivedErrorCompat(
|
||||||
|
view: WebView,
|
||||||
|
errorCode: Int,
|
||||||
|
description: String?,
|
||||||
|
failingUrl: String,
|
||||||
|
isMainFrame: Boolean
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.N)
|
||||||
|
final override fun shouldOverrideUrlLoading(
|
||||||
|
view: WebView,
|
||||||
|
request: WebResourceRequest
|
||||||
|
): Boolean {
|
||||||
|
return shouldOverrideUrlCompat(view, request.url.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
|
||||||
|
return shouldOverrideUrlCompat(view, url)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun shouldInterceptRequest(
|
||||||
|
view: WebView,
|
||||||
|
request: WebResourceRequest
|
||||||
|
): WebResourceResponse? {
|
||||||
|
return shouldInterceptRequestCompat(view, request.url.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun shouldInterceptRequest(
|
||||||
|
view: WebView,
|
||||||
|
url: String
|
||||||
|
): WebResourceResponse? {
|
||||||
|
return shouldInterceptRequestCompat(view, url)
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.M)
|
||||||
|
final override fun onReceivedError(
|
||||||
|
view: WebView,
|
||||||
|
request: WebResourceRequest,
|
||||||
|
error: WebResourceError
|
||||||
|
) {
|
||||||
|
onReceivedErrorCompat(
|
||||||
|
view, error.errorCode, error.description?.toString(),
|
||||||
|
request.url.toString(), request.isForMainFrame
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun onReceivedError(
|
||||||
|
view: WebView,
|
||||||
|
errorCode: Int,
|
||||||
|
description: String?,
|
||||||
|
failingUrl: String
|
||||||
|
) {
|
||||||
|
onReceivedErrorCompat(view, errorCode, description, failingUrl, failingUrl == view.url)
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.M)
|
||||||
|
final override fun onReceivedHttpError(
|
||||||
|
view: WebView,
|
||||||
|
request: WebResourceRequest,
|
||||||
|
error: WebResourceResponse
|
||||||
|
) {
|
||||||
|
onReceivedErrorCompat(
|
||||||
|
view, error.statusCode, error.reasonPhrase,
|
||||||
|
request.url
|
||||||
|
.toString(),
|
||||||
|
request.isForMainFrame
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -18,8 +18,9 @@ class ElevationAppBarLayout @JvmOverloads constructor(
|
|||||||
origStateAnimator = stateListAnimator
|
origStateAnimator = stateListAnimator
|
||||||
}
|
}
|
||||||
|
|
||||||
fun enableElevation() {
|
fun enableElevation(liftOnScroll: Boolean) {
|
||||||
stateListAnimator = origStateAnimator
|
stateListAnimator = origStateAnimator
|
||||||
|
isLiftOnScroll = liftOnScroll
|
||||||
}
|
}
|
||||||
|
|
||||||
fun disableElevation() {
|
fun disableElevation() {
|
||||||
|
@ -17,10 +17,7 @@ class ThemedSwipeRefreshLayout @JvmOverloads constructor(context: Context, attrs
|
|||||||
// Background is controlled with "swipeRefreshLayoutProgressSpinnerBackgroundColor" in XML
|
// Background is controlled with "swipeRefreshLayoutProgressSpinnerBackgroundColor" in XML
|
||||||
|
|
||||||
// This updates the progress arrow color
|
// This updates the progress arrow color
|
||||||
setColorSchemeColors(
|
val white = ContextCompat.getColor(context, R.color.md_white_1000)
|
||||||
ContextCompat.getColor(context, R.color.md_white_1000),
|
setColorSchemeColors(white, white, white)
|
||||||
ContextCompat.getColor(context, R.color.md_white_1000),
|
|
||||||
ContextCompat.getColor(context, R.color.md_white_1000)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
18
app/src/main/res/drawable/ic_outline_people_alt_24dp.xml
Normal file
18
app/src/main/res/drawable/ic_outline_people_alt_24dp.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M16.67,13.13C18.04,14.06 19,15.32 19,17v3h4v-3C23,14.82 19.43,13.53 16.67,13.13z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M15,12c2.21,0 4,-1.79 4,-4c0,-2.21 -1.79,-4 -4,-4c-0.47,0 -0.91,0.1 -1.33,0.24C14.5,5.27 15,6.58 15,8s-0.5,2.73 -1.33,3.76C14.09,11.9 14.53,12 15,12z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M9,12c2.21,0 4,-1.79 4,-4c0,-2.21 -1.79,-4 -4,-4S5,5.79 5,8C5,10.21 6.79,12 9,12zM9,6c1.1,0 2,0.9 2,2c0,1.1 -0.9,2 -2,2S7,9.1 7,8C7,6.9 7.9,6 9,6z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M9,13c-2.67,0 -8,1.34 -8,4v3h16v-3C17,14.34 11.67,13 9,13zM15,18H3l0,-0.99C3.2,16.29 6.3,15 9,15s5.8,1.29 6,2V18z" />
|
||||||
|
</vector>
|
@ -69,6 +69,21 @@
|
|||||||
app:layout_constraintTop_toBottomOf="@id/extension_version"
|
app:layout_constraintTop_toBottomOf="@id/extension_version"
|
||||||
tools:text="Language: English" />
|
tools:text="Language: English" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/extension_nsfw"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:elevation="3dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/ext_nsfw_warning"
|
||||||
|
android:textColor="?attr/colorError"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintStart_toStartOf="@id/extension_title"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/extension_lang"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/extension_pkg"
|
android:id="@+id/extension_pkg"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
@ -78,7 +93,7 @@
|
|||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="@id/extension_title"
|
app:layout_constraintStart_toStartOf="@id/extension_title"
|
||||||
app:layout_constraintTop_toBottomOf="@id/extension_lang"
|
app:layout_constraintTop_toBottomOf="@id/extension_nsfw"
|
||||||
tools:text="eu.kanade.tachiyomi.extension.en.myext" />
|
tools:text="eu.kanade.tachiyomi.extension.en.myext" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
@ -86,12 +101,12 @@
|
|||||||
style="@style/Theme.Widget.Button.FilledAccent"
|
style="@style/Theme.Widget.Button.FilledAccent"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="32dp"
|
android:layout_marginTop="8dp"
|
||||||
android:paddingStart="32dp"
|
android:paddingStart="32dp"
|
||||||
android:paddingEnd="32dp"
|
android:paddingEnd="32dp"
|
||||||
android:text="@string/ext_uninstall"
|
android:text="@string/ext_uninstall"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/extension_lang" />
|
app:layout_constraintTop_toBottomOf="@id/extension_pkg" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:id="@+id/holder"
|
android:id="@+id/holder"
|
||||||
style="@style/Theme.Widget.CardView.Item"
|
style="@style/Theme.Widget.CardView.Item"
|
||||||
android:padding="0dp">
|
android:padding="0dp">
|
||||||
@ -19,7 +20,8 @@
|
|||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintDimensionRatio="h,3:2"
|
app:layout_constraintDimensionRatio="h,3:2"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:src="@mipmap/ic_launcher" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
@ -38,13 +40,15 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:maxLines="2"
|
android:maxLines="2"
|
||||||
android:textAppearance="@style/TextAppearance.Medium" />
|
android:textAppearance="@style/TextAppearance.Medium"
|
||||||
|
tools:text="Title" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/manga_subtitle"
|
android:id="@+id/manga_subtitle"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="4dp" />
|
android:layout_marginTop="4dp"
|
||||||
|
tools:text="Subtitle" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@ -59,7 +63,7 @@
|
|||||||
app:layout_constraintEnd_toStartOf="@+id/resume"
|
app:layout_constraintEnd_toStartOf="@+id/resume"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:srcCompat="@drawable/ic_delete_24dp"
|
app:srcCompat="@drawable/ic_delete_24dp"
|
||||||
app:tint="?attr/colorOnPrimary" />
|
app:tint="?android:attr/textColorPrimary" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/resume"
|
android:id="@+id/resume"
|
||||||
@ -73,7 +77,7 @@
|
|||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:srcCompat="@drawable/ic_play_arrow_24dp"
|
app:srcCompat="@drawable/ic_play_arrow_24dp"
|
||||||
app:tint="?attr/colorOnPrimary" />
|
app:tint="?android:attr/textColorPrimary" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
android:id="@+id/downloaded_only"
|
android:id="@+id/downloaded_only"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/pale_green"
|
android:background="@color/green"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:visibility="visible">
|
tools:visibility="visible">
|
||||||
|
|
||||||
@ -24,7 +24,7 @@
|
|||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:padding="4dp"
|
android:padding="4dp"
|
||||||
android:text="@string/label_downloaded_only"
|
android:text="@string/label_downloaded_only"
|
||||||
android:textColor="@color/md_black_1000" />
|
android:textColor="@color/md_white_1000" />
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
|
@ -41,13 +41,13 @@
|
|||||||
style="@style/TextAppearance.Regular.Caption"
|
style="@style/TextAppearance.Regular.Caption"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/pale_green"
|
android:background="@color/green"
|
||||||
android:paddingStart="3dp"
|
android:paddingStart="3dp"
|
||||||
android:paddingTop="1dp"
|
android:paddingTop="1dp"
|
||||||
android:paddingEnd="3dp"
|
android:paddingEnd="3dp"
|
||||||
android:paddingBottom="1dp"
|
android:paddingBottom="1dp"
|
||||||
android:text="@string/local_source_badge"
|
android:text="@string/local_source_badge"
|
||||||
android:textColor="@color/md_black_1000"
|
android:textColor="@color/md_white_1000"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
@ -56,12 +56,12 @@
|
|||||||
style="@style/TextAppearance.Regular.Caption"
|
style="@style/TextAppearance.Regular.Caption"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/pale_green"
|
android:background="@color/green"
|
||||||
android:paddingStart="3dp"
|
android:paddingStart="3dp"
|
||||||
android:paddingTop="1dp"
|
android:paddingTop="1dp"
|
||||||
android:paddingEnd="3dp"
|
android:paddingEnd="3dp"
|
||||||
android:paddingBottom="1dp"
|
android:paddingBottom="1dp"
|
||||||
android:textColor="@color/md_black_1000"
|
android:textColor="@color/md_white_1000"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:text="120"
|
tools:text="120"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
@ -41,13 +41,13 @@
|
|||||||
style="@style/TextAppearance.Regular.Caption"
|
style="@style/TextAppearance.Regular.Caption"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/pale_green"
|
android:background="@color/green"
|
||||||
android:paddingStart="3dp"
|
android:paddingStart="3dp"
|
||||||
android:paddingTop="1dp"
|
android:paddingTop="1dp"
|
||||||
android:paddingEnd="3dp"
|
android:paddingEnd="3dp"
|
||||||
android:paddingBottom="1dp"
|
android:paddingBottom="1dp"
|
||||||
android:text="@string/local_source_badge"
|
android:text="@string/local_source_badge"
|
||||||
android:textColor="@color/md_black_1000"
|
android:textColor="@color/md_white_1000"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
@ -56,12 +56,12 @@
|
|||||||
style="@style/TextAppearance.Regular.Caption"
|
style="@style/TextAppearance.Regular.Caption"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/pale_green"
|
android:background="@color/green"
|
||||||
android:paddingStart="3dp"
|
android:paddingStart="3dp"
|
||||||
android:paddingTop="1dp"
|
android:paddingTop="1dp"
|
||||||
android:paddingEnd="3dp"
|
android:paddingEnd="3dp"
|
||||||
android:paddingBottom="1dp"
|
android:paddingBottom="1dp"
|
||||||
android:textColor="@color/md_black_1000"
|
android:textColor="@color/md_white_1000"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:text="120"
|
tools:text="120"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
@ -54,14 +54,14 @@
|
|||||||
style="@style/TextAppearance.Regular.Caption"
|
style="@style/TextAppearance.Regular.Caption"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/pale_green"
|
android:background="@color/green"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:paddingStart="3dp"
|
android:paddingStart="3dp"
|
||||||
android:paddingTop="1dp"
|
android:paddingTop="1dp"
|
||||||
android:paddingEnd="3dp"
|
android:paddingEnd="3dp"
|
||||||
android:paddingBottom="1dp"
|
android:paddingBottom="1dp"
|
||||||
android:text="@string/local_source_badge"
|
android:text="@string/local_source_badge"
|
||||||
android:textColor="@color/md_black_1000"
|
android:textColor="@color/md_white_1000"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
@ -70,13 +70,13 @@
|
|||||||
style="@style/TextAppearance.Regular.Caption"
|
style="@style/TextAppearance.Regular.Caption"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/pale_green"
|
android:background="@color/green"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:paddingStart="3dp"
|
android:paddingStart="3dp"
|
||||||
android:paddingTop="1dp"
|
android:paddingTop="1dp"
|
||||||
android:paddingEnd="3dp"
|
android:paddingEnd="3dp"
|
||||||
android:paddingBottom="1dp"
|
android:paddingBottom="1dp"
|
||||||
android:textColor="@color/md_black_1000"
|
android:textColor="@color/md_white_1000"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:text="122"
|
tools:text="122"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
@ -16,6 +16,20 @@
|
|||||||
app:iconTint="?attr/colorOnPrimary"
|
app:iconTint="?attr/colorOnPrimary"
|
||||||
app:showAsAction="always" />
|
app:showAsAction="always" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_mark_as_read"
|
||||||
|
android:icon="@drawable/ic_done_24dp"
|
||||||
|
android:title="@string/action_mark_as_read"
|
||||||
|
app:iconTint="?attr/colorOnPrimary"
|
||||||
|
app:showAsAction="always" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_mark_as_unread"
|
||||||
|
android:icon="@drawable/ic_done_outline_24dp"
|
||||||
|
android:title="@string/action_mark_as_unread"
|
||||||
|
app:iconTint="?attr/colorOnPrimary"
|
||||||
|
app:showAsAction="always" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_delete"
|
android:id="@+id/action_delete"
|
||||||
android:icon="@drawable/ic_delete_24dp"
|
android:icon="@drawable/ic_delete_24dp"
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
<string name="label_migration">Migrar</string>
|
<string name="label_migration">Migrar</string>
|
||||||
<string name="label_recent_updates">Actualizaciones</string>
|
<string name="label_recent_updates">Actualizaciones</string>
|
||||||
<string name="label_library">Biblioteca</string>
|
<string name="label_library">Biblioteca</string>
|
||||||
<string name="label_settings">Configuraciónes</string>
|
<string name="label_settings">Configuraciones</string>
|
||||||
<string name="name">Nombre</string>
|
<string name="name">Nombre</string>
|
||||||
<string name="label_categories">Categorías</string>
|
<string name="label_categories">Categorías</string>
|
||||||
<string name="label_sources">Fuentes</string>
|
<string name="label_sources">Fuentes</string>
|
||||||
@ -597,4 +597,11 @@
|
|||||||
<item quantity="one">Rastreador</item>
|
<item quantity="one">Rastreador</item>
|
||||||
<item quantity="other">Rastreadores</item>
|
<item quantity="other">Rastreadores</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="group_downloader">Descargas</string>
|
||||||
|
<string name="channel_errors">Errores</string>
|
||||||
|
<string name="channel_complete">Completo</string>
|
||||||
|
<string name="channel_progress">Progreso</string>
|
||||||
|
<string name="download_notifier_download_finish">Descarga completada</string>
|
||||||
|
<string name="group_backup_restore">Respaldar y restaurar</string>
|
||||||
|
<string name="no_pinned_sources">No tienes fuentes fijadas</string>
|
||||||
</resources>
|
</resources>
|
@ -86,7 +86,7 @@
|
|||||||
<string name="portrait">ঘুরান</string>
|
<string name="portrait">ঘুরান</string>
|
||||||
<string name="landscape">আড়াআড়ি ভাবে</string>
|
<string name="landscape">আড়াআড়ি ভাবে</string>
|
||||||
<string name="default_columns">ডিফল্ট</string>
|
<string name="default_columns">ডিফল্ট</string>
|
||||||
<string name="pref_library_update_interval">"মাংগাশালা আপডেট কাল"</string>
|
<string name="pref_library_update_interval">মাংগাশালা আপডেট কাল</string>
|
||||||
<string name="update_never">সারগ্রন্থ</string>
|
<string name="update_never">সারগ্রন্থ</string>
|
||||||
<string name="update_1hour">ঘন্টায়</string>
|
<string name="update_1hour">ঘন্টায়</string>
|
||||||
<string name="update_2hour">প্রতি ২ ঘন্টায়</string>
|
<string name="update_2hour">প্রতি ২ ঘন্টায়</string>
|
||||||
@ -178,7 +178,9 @@
|
|||||||
<string name="pref_backup_slots">স্বয়ংক্রিয় ব্যাকআপের উচ্চমাত্রা</string>
|
<string name="pref_backup_slots">স্বয়ংক্রিয় ব্যাকআপের উচ্চমাত্রা</string>
|
||||||
<string name="backup_created">পুনরুদ্ধার তৈরী হয়েছে</string>
|
<string name="backup_created">পুনরুদ্ধার তৈরী হয়েছে</string>
|
||||||
<string name="restore_completed">পুনরুদ্ধার হয়েছে</string>
|
<string name="restore_completed">পুনরুদ্ধার হয়েছে</string>
|
||||||
<string name="backup_restore_content">পুনরুদ্ধারের সন্ধান করার জন্য উৎস ব্যবহার করা হয়, ক্যারিয়ারের খরচগুলি প্রযোজ্য হতে পারে। এছাড়াও নিশ্চিত করুন যে আপনি পুনরুদ্ধারের আগে উৎসগুলোতে যথাযথভাবে লগ-ইন করা আছেন যেখানে প্রোয়জন হয়।</string>
|
<string name="backup_restore_content">পুনরুদ্ধারের সন্ধান করার জন্য উৎস ব্যবহার করা হয়, ক্যারিয়ারের খরচগুলি প্রযোজ্য হতে পারে। এছাড়াও নিশ্চিত করুন যে আপনি
|
||||||
|
\n
|
||||||
|
\nপুনরুদ্ধারের আগে উৎসগুলোতে যথাযথভাবে লগ-ইন করা আছেন যেখানে প্রোয়জন হয়।</string>
|
||||||
<string name="backup_choice">আপনি কি ব্যাকআপ করতে ইচ্ছুক?</string>
|
<string name="backup_choice">আপনি কি ব্যাকআপ করতে ইচ্ছুক?</string>
|
||||||
<string name="restoring_backup">ব্যাকআপ পুনরুদ্ধার হচ্ছে</string>
|
<string name="restoring_backup">ব্যাকআপ পুনরুদ্ধার হচ্ছে</string>
|
||||||
<string name="creating_backup">ব্যাকআপ তৈরী হচ্ছে</string>
|
<string name="creating_backup">ব্যাকআপ তৈরী হচ্ছে</string>
|
||||||
|
@ -602,4 +602,6 @@
|
|||||||
<string name="group_downloader">Baixades</string>
|
<string name="group_downloader">Baixades</string>
|
||||||
<string name="channel_complete">Completada</string>
|
<string name="channel_complete">Completada</string>
|
||||||
<string name="channel_progress">Progrés</string>
|
<string name="channel_progress">Progrés</string>
|
||||||
|
<string name="channel_errors">Errors</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Seguidors sense sessió iniciada:</string>
|
||||||
</resources>
|
</resources>
|
@ -195,7 +195,7 @@
|
|||||||
<string name="update_check_notification_file_download">Stáhnout aktualizaci</string>
|
<string name="update_check_notification_file_download">Stáhnout aktualizaci</string>
|
||||||
<string name="update_check_notification_download_complete">Stahování dokončeno</string>
|
<string name="update_check_notification_download_complete">Stahování dokončeno</string>
|
||||||
<string name="update_check_notification_download_error">Chyba při stahování</string>
|
<string name="update_check_notification_download_error">Chyba při stahování</string>
|
||||||
<string name="update_check_notification_update_available">Dostupná aktualizace</string>
|
<string name="update_check_notification_update_available">Dostupná aktualizace!</string>
|
||||||
<string name="information_no_recent">Žádné nedávné kapitoly</string>
|
<string name="information_no_recent">Žádné nedávné kapitoly</string>
|
||||||
<string name="information_no_recent_manga">Žádné nedávno čtené mangy</string>
|
<string name="information_no_recent_manga">Žádné nedávno čtené mangy</string>
|
||||||
<string name="download_notifier_title_error">Chyba</string>
|
<string name="download_notifier_title_error">Chyba</string>
|
||||||
@ -349,6 +349,7 @@
|
|||||||
<string name="pref_restore_backup_summ">Obnovit knihovnu ze záložního souboru</string>
|
<string name="pref_restore_backup_summ">Obnovit knihovnu ze záložního souboru</string>
|
||||||
<string name="pref_backup_slots">Maximální automatické zálohování</string>
|
<string name="pref_backup_slots">Maximální automatické zálohování</string>
|
||||||
<string name="backup_restore_content">Obnovení používá zdroje pro načítání dat, mohou být účtovány poplatky od operátora (v případě použití datového připojení).
|
<string name="backup_restore_content">Obnovení používá zdroje pro načítání dat, mohou být účtovány poplatky od operátora (v případě použití datového připojení).
|
||||||
|
\n
|
||||||
\nTaké se před obnovením ujistěte, že jste správně přihlášeni do zdrojů, které to vyžadují.</string>
|
\nTaké se před obnovením ujistěte, že jste správně přihlášeni do zdrojů, které to vyžadují.</string>
|
||||||
<string name="choices_reset">Volby dialogu se vynulují</string>
|
<string name="choices_reset">Volby dialogu se vynulují</string>
|
||||||
<string name="login_title">Přihlásit se do %1$s</string>
|
<string name="login_title">Přihlásit se do %1$s</string>
|
||||||
@ -401,4 +402,7 @@
|
|||||||
<string name="logout_title">Odhlásit z %1$s\?</string>
|
<string name="logout_title">Odhlásit z %1$s\?</string>
|
||||||
<string name="logout_success">Byl jste odhlášen</string>
|
<string name="logout_success">Byl jste odhlášen</string>
|
||||||
<string name="paused">Pozastaveno</string>
|
<string name="paused">Pozastaveno</string>
|
||||||
|
<string name="label_more">Více</string>
|
||||||
|
<string name="action_menu">Menu</string>
|
||||||
|
<string name="label_sources">Zdroje</string>
|
||||||
</resources>
|
</resources>
|
@ -6,13 +6,13 @@
|
|||||||
<string name="cookies_cleared">Куккисем катертнӗ</string>
|
<string name="cookies_cleared">Куккисем катертнӗ</string>
|
||||||
<string name="pref_clear_cookies">Кукки тасат</string>
|
<string name="pref_clear_cookies">Кукки тасат</string>
|
||||||
<string name="label_network">Тетел</string>
|
<string name="label_network">Тетел</string>
|
||||||
<string name="restore_duration">%02d минут, %02d ҫеккунт</string>
|
<string name="restore_duration">%02d минут та %02d ҫеккунт</string>
|
||||||
<string name="source_not_found_name">Ҫӑл куҫ тупӑнман: %1$s</string>
|
<string name="source_not_found_name">Ҫӑл куҫ тупӑнман: %1$s</string>
|
||||||
<string name="services">Сервиссем</string>
|
<string name="services">Сервиссем</string>
|
||||||
<string name="pref_download_new">Ҫӗнӗ сыпӑксене тиесе илмелле</string>
|
<string name="pref_download_new">Ҫӗнӗ сыпӑксене тиесе илмелле</string>
|
||||||
<string name="last_read_chapter">Юлашки вуланӑ сыпăк</string>
|
<string name="last_read_chapter">Юлашки вуланӑ сыпăк</string>
|
||||||
<string name="disabled">Сӳнтернӗ</string>
|
<string name="disabled">Сӳнтернӗ</string>
|
||||||
<string name="pref_remove_after_read">Вуланӑ хыҫҫӑн катертмелле</string>
|
<string name="pref_remove_after_read">Вуланӑ хыҫҫӑн</string>
|
||||||
<string name="pref_download_only_over_wifi">Wi-Fi урлӑ ҫеҫ тиесе илмелле</string>
|
<string name="pref_download_only_over_wifi">Wi-Fi урлӑ ҫеҫ тиесе илмелле</string>
|
||||||
<string name="pref_download_directory">Тиев вырӑнӗ</string>
|
<string name="pref_download_directory">Тиев вырӑнӗ</string>
|
||||||
<string name="pref_category_reading">Вулани</string>
|
<string name="pref_category_reading">Вулани</string>
|
||||||
@ -52,7 +52,7 @@
|
|||||||
<string name="charging">Тулать</string>
|
<string name="charging">Тулать</string>
|
||||||
<string name="wifi">Wi-Fi</string>
|
<string name="wifi">Wi-Fi</string>
|
||||||
<string name="pref_library_update_restriction">Вулавӑша ҫӗнетни чарӑвӗсем</string>
|
<string name="pref_library_update_restriction">Вулавӑша ҫӗнетни чарӑвӗсем</string>
|
||||||
<string name="pref_library_update_prioritization">Вулавӑша ҫӗнетни йӗркийӗ</string>
|
<string name="pref_library_update_prioritization">Вулавӑша ҫӗнетни йӗрки</string>
|
||||||
<string name="update_monthly">Кашни уйӑх</string>
|
<string name="update_monthly">Кашни уйӑх</string>
|
||||||
<string name="update_weekly">Кашни эрне</string>
|
<string name="update_weekly">Кашни эрне</string>
|
||||||
<string name="update_48hour">Кашни 2 кун</string>
|
<string name="update_48hour">Кашни 2 кун</string>
|
||||||
@ -150,8 +150,8 @@
|
|||||||
<string name="action_select_all">Веҫех суйла</string>
|
<string name="action_select_all">Веҫех суйла</string>
|
||||||
<string name="action_global_search">Пур ҫӗрте шыра</string>
|
<string name="action_global_search">Пур ҫӗрте шыра</string>
|
||||||
<string name="action_search">Шырав</string>
|
<string name="action_search">Шырав</string>
|
||||||
<string name="action_sort_latest_chapter">Юлашки сыпӑк</string>
|
<string name="action_sort_latest_chapter">Юлашки сыпӑкпа</string>
|
||||||
<string name="action_sort_last_checked">Юлашки тӗрӗслени</string>
|
<string name="action_sort_last_checked">Юлашки тӗрӗсленипе</string>
|
||||||
<string name="action_sort_last_read">Юлашки вулани</string>
|
<string name="action_sort_last_read">Юлашки вулани</string>
|
||||||
<string name="action_sort_total">Сыпӑксен шучӗпе</string>
|
<string name="action_sort_total">Сыпӑксен шучӗпе</string>
|
||||||
<string name="action_sort_alpha">Алфавитпа</string>
|
<string name="action_sort_alpha">Алфавитпа</string>
|
||||||
@ -177,7 +177,7 @@
|
|||||||
<string name="update_check_notification_download_error">Тиев йӑнӑшӗ</string>
|
<string name="update_check_notification_download_error">Тиев йӑнӑшӗ</string>
|
||||||
<string name="update_check_notification_download_complete">Тиенсе пӗтрӗ</string>
|
<string name="update_check_notification_download_complete">Тиенсе пӗтрӗ</string>
|
||||||
<string name="update_check_notification_file_download">Тиев ҫӗнетни</string>
|
<string name="update_check_notification_file_download">Тиев ҫӗнетни</string>
|
||||||
<string name="notification_chapters_single">%1$s сыпӑк</string>
|
<string name="notification_chapters_single">%1$s-мӗш сыпӑк</string>
|
||||||
<string name="notification_new_chapters">Ҫӗнӗ сыпӑксем тупӑнман</string>
|
<string name="notification_new_chapters">Ҫӗнӗ сыпӑксем тупӑнман</string>
|
||||||
<string name="notification_update_progress">Ҫӗнетӳ халӗ: %1$d/%2$d</string>
|
<string name="notification_update_progress">Ҫӗнетӳ халӗ: %1$d/%2$d</string>
|
||||||
<string name="information_no_recent_manga">Юлашки вӑхӑтра нимӗнте вуламан</string>
|
<string name="information_no_recent_manga">Юлашки вӑхӑтра нимӗнте вуламан</string>
|
||||||
@ -221,16 +221,16 @@
|
|||||||
<string name="loading">Тиев…</string>
|
<string name="loading">Тиев…</string>
|
||||||
<string name="action_restore">Тавӑр</string>
|
<string name="action_restore">Тавӑр</string>
|
||||||
<string name="action_unpin">Салт</string>
|
<string name="action_unpin">Салт</string>
|
||||||
<string name="action_migrate">Куҫ</string>
|
<string name="action_migrate">Куҫар</string>
|
||||||
<string name="action_next_chapter">Тепӗр сыпӑк</string>
|
<string name="action_next_chapter">Маллали сыпӑк</string>
|
||||||
<string name="action_previous_chapter">Малтанхи сыпӑк</string>
|
<string name="action_previous_chapter">Умӗнхи сыпӑк</string>
|
||||||
<string name="action_sort_down">Сахаланӑ май</string>
|
<string name="action_sort_down">Сахаланнӑ май</string>
|
||||||
<string name="action_sort_up">Нумайланӑ май</string>
|
<string name="action_sort_up">Нумайланнӑ май</string>
|
||||||
<string name="track">Сӑнану</string>
|
<string name="track">Сӑнану</string>
|
||||||
<string name="information_webview_outdated">Чи лайӑх пӗрлӗхшӗн WebView-а ҫӗнет</string>
|
<string name="information_webview_outdated">Чи лайӑх пӗрлӗхшӗн WebView-а ҫӗнет</string>
|
||||||
<string name="information_cloudflare_bypass_failure">Cloudflare-ран иртеймерӗ</string>
|
<string name="information_cloudflare_bypass_failure">Cloudflare-ран иртеймерӗ</string>
|
||||||
<string name="information_empty_category">Санӑн пухмӑшсем ҫук. Хӑвӑн вулавӑша йӗркелеме + пускӑч ҫине пус.</string>
|
<string name="information_empty_category">Санӑн пухмӑшсем ҫук. Хӑвӑн вулавӑша йӗркелеме + пускӑч ҫине пус.</string>
|
||||||
<string name="label_migration">Куҫ</string>
|
<string name="label_migration">Куҫар</string>
|
||||||
<string name="label_backup">Янтӑв</string>
|
<string name="label_backup">Янтӑв</string>
|
||||||
<string name="ext_obsolete">Кивелнӗ</string>
|
<string name="ext_obsolete">Кивелнӗ</string>
|
||||||
<string name="ext_updates_pending">Ҫӗнетӳсем кӗтеҫҫӗ</string>
|
<string name="ext_updates_pending">Ҫӗнетӳсем кӗтеҫҫӗ</string>
|
||||||
@ -269,7 +269,7 @@
|
|||||||
<string name="pref_library_update_restriction_summary">Майсем пурнӑҫланӑ чухне кӑна ҫӗнет</string>
|
<string name="pref_library_update_restriction_summary">Майсем пурнӑҫланӑ чухне кӑна ҫӗнет</string>
|
||||||
<string name="lock_when_idle">Кӗтмелли тытӑмра ҫаклатса лартмалла</string>
|
<string name="lock_when_idle">Кӗтмелли тытӑмра ҫаклатса лартмалла</string>
|
||||||
<string name="webtoon_side_padding_10">10%</string>
|
<string name="webtoon_side_padding_10">10%</string>
|
||||||
<string name="display_mode_chapter">%1$s сыпӑк</string>
|
<string name="display_mode_chapter">%1$s-мӗш сыпӑк</string>
|
||||||
<string name="lock_with_biometrics">Алӑ йӗрпе ҫаклатса ларт</string>
|
<string name="lock_with_biometrics">Алӑ йӗрпе ҫаклатса ларт</string>
|
||||||
<string name="webtoon_side_padding_25">25%</string>
|
<string name="webtoon_side_padding_25">25%</string>
|
||||||
<string name="webtoon_side_padding_20">20%</string>
|
<string name="webtoon_side_padding_20">20%</string>
|
||||||
@ -325,8 +325,8 @@
|
|||||||
\n
|
\n
|
||||||
\nҪак сертификата шаннипе эсӗ ҫав теветкеле йышӑнатӑн.</string>
|
\nҪак сертификата шаннипе эсӗ ҫав теветкеле йышӑнатӑн.</string>
|
||||||
<plurals name="restore_completed_message">
|
<plurals name="restore_completed_message">
|
||||||
<item quantity="one">%1$s %2$s йӑнӑшпа тӑвӑннӑ</item>
|
<item quantity="one">%1$s,%2$s йӑнӑшпа тӑвӑннӑ</item>
|
||||||
<item quantity="other">%1$s %2$s йӑнӑшпа тӑвӑннӑ</item>
|
<item quantity="other">%1$s, %2$s йӑнӑшпа тӑвӑннӑ</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="backup_restore_content">Пӗлӗмсене тавӑрнӑ чух ҫӑл куҫсем усӑ курӑнаҫҫӗ, ҫакӑ вара пысӑк трафик тӑкакӗсене кӳме пултарать.
|
<string name="backup_restore_content">Пӗлӗмсене тавӑрнӑ чух ҫӑл куҫсем усӑ курӑнаҫҫӗ, ҫакӑ вара пысӑк трафик тӑкакӗсене кӳме пултарать.
|
||||||
\n
|
\n
|
||||||
@ -375,7 +375,7 @@
|
|||||||
<string name="file_select_cover">Хуплашка суйла</string>
|
<string name="file_select_cover">Хуплашка суйла</string>
|
||||||
<string name="notification_no_connection_body">Ҫыхӑну кӗме май ҫук</string>
|
<string name="notification_no_connection_body">Ҫыхӑну кӗме май ҫук</string>
|
||||||
<string name="notification_no_connection_title">Пӗрлӗхлени пӑрахӑҫланӑ</string>
|
<string name="notification_no_connection_title">Пӗрлӗхлени пӑрахӑҫланӑ</string>
|
||||||
<string name="notification_not_connected_to_ac_body">Батарей тулмасть</string>
|
<string name="notification_not_connected_to_ac_body">Петтерей тулмасть</string>
|
||||||
<string name="notification_not_connected_to_ac_title">Пӗрлӗхлени пӑрахӑҫланӑ</string>
|
<string name="notification_not_connected_to_ac_title">Пӗрлӗхлени пӑрахӑҫланӑ</string>
|
||||||
<string name="notification_first_add_to_library">Ҫакна тӑвас умӗн манкка санӑн вулавӑша хуш-ха</string>
|
<string name="notification_first_add_to_library">Ҫакна тӑвас умӗн манкка санӑн вулавӑша хуш-ха</string>
|
||||||
<string name="notification_cover_update_failed">Хуплашкана ҫӗнетеймерӗ</string>
|
<string name="notification_cover_update_failed">Хуплашкана ҫӗнетеймерӗ</string>
|
||||||
@ -394,36 +394,36 @@
|
|||||||
<item quantity="other">%1$d ҫӗнӗ сыпӑк</item>
|
<item quantity="other">%1$d ҫӗнӗ сыпӑк</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<plurals name="notification_new_chapters_summary">
|
<plurals name="notification_new_chapters_summary">
|
||||||
<item quantity="one">Ҫӗнӗ сыпӑксем 1 пуҫ элӗк валли тупӑннӑ</item>
|
<item quantity="one">Ҫӗнӗ сыпӑксем 1 хайлав валли тупӑннӑ</item>
|
||||||
<item quantity="other">Ҫӗнӗ сыпӑксем %d пуҫ элӗк валли тупӑннӑ</item>
|
<item quantity="other">Ҫӗнӗ сыпӑксем %d хайлав валли тупӑннӑ</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="notification_check_updates">Ҫӗнӗ сыпӑксен пуррине тӗрӗслени</string>
|
<string name="notification_check_updates">Ҫӗнӗ сыпӑксен пуррине тӗрӗслени</string>
|
||||||
<string name="download_queue_error">Сыпӑксене тиесе илес ҫук. Тиевсем пайӗнче ҫӗнӗрен хӑтланса пӑхма пултаратӑн</string>
|
<string name="download_queue_error">Сыпӑксене тиесе илес ҫук. Тиевсем пайӗнче ҫӗнӗрен хӑтланса пӑхма пултаратӑн</string>
|
||||||
<string name="copy">Ӑтавла</string>
|
<string name="copy">Ӑтавла</string>
|
||||||
<string name="migrate">Куҫ</string>
|
<string name="migrate">Куҫар</string>
|
||||||
<string name="migration_selection_prompt">Куҫма ҫӑл куҫ суйла</string>
|
<string name="migration_selection_prompt">Куҫарма ҫӑл куҫ суйла</string>
|
||||||
<string name="migration_dialog_what_to_include">Хушма пӗлӗмсене суйла</string>
|
<string name="migration_dialog_what_to_include">Хушма пӗлӗмсене суйла</string>
|
||||||
<string name="migration_info">Куҫма ҫӑл куҫ суйлама пус</string>
|
<string name="migration_info">Куҫарма ҫӑл куҫа суйлама пус</string>
|
||||||
<string name="recent_manga_time">%1$s-мӗш сыпӑка %2$s</string>
|
<string name="recent_manga_time">%1$s-мӗш сыпӑка %2$s</string>
|
||||||
<string name="updating_library">Вулавӑша ҫӗнетни</string>
|
<string name="updating_library">Вулавӑша ҫӗнетни</string>
|
||||||
<string name="loader_not_implemented_error">Ҫӑл куҫ тупӑнман</string>
|
<string name="loader_not_implemented_error">Ҫӑл куҫ тупӑнман</string>
|
||||||
<string name="page_list_empty_error">Элсем тупӑнман</string>
|
<string name="page_list_empty_error">Элсем тупӑнман</string>
|
||||||
<string name="transition_pages_error">Элсем тиенеймерӗҫ: %1$s</string>
|
<string name="transition_pages_error">Элсем тиенеймерӗҫ: %1$s</string>
|
||||||
<string name="transition_pages_loading">Элсем тиевӗ…</string>
|
<string name="transition_pages_loading">Элсем тиевӗ…</string>
|
||||||
<string name="transition_no_previous">Унчченхи сыпӑк ҫук</string>
|
<string name="transition_no_previous">Умӗнхи сыпӑк ҫук</string>
|
||||||
<string name="transition_no_next">Тепӗр сыпӑк ҫук</string>
|
<string name="transition_no_next">Малалли сыпӑк ҫук</string>
|
||||||
<string name="transition_previous">Умӗнхи:</string>
|
<string name="transition_previous">Умӗнхи:</string>
|
||||||
<string name="transition_next">Тепри:</string>
|
<string name="transition_next">Малалли:</string>
|
||||||
<string name="transition_current">Кулленхи:</string>
|
<string name="transition_current">Кулленхи:</string>
|
||||||
<string name="transition_finished">Пӗтернӗ:</string>
|
<string name="transition_finished">Пӗтернӗ:</string>
|
||||||
<string name="viewer">Вулав тытӑмӗ</string>
|
<string name="viewer">Вулав тытӑмӗ</string>
|
||||||
<string name="pref_category_for_this_series">Ҫак сери валли</string>
|
<string name="pref_category_for_this_series">Ҫак серилӗх валли</string>
|
||||||
<string name="confirm_set_image_as_cover">Ҫак ӳкерчĕке хуплашка пек усӑ курмалла\?</string>
|
<string name="confirm_set_image_as_cover">Ҫак ӳкерчĕке хуплашка пек усӑ курмалла-и\?</string>
|
||||||
<string name="decode_image_error">Ӳкерчӗк тиенмерӗ</string>
|
<string name="decode_image_error">Ӳкерчӗк тиенмерӗ</string>
|
||||||
<string name="no_previous_chapter">Унчченхи сыпӑк тупӑнман</string>
|
<string name="no_previous_chapter">Умӗнхи сыпӑк тупӑнман</string>
|
||||||
<string name="no_next_chapter">Тепӗр сыпӑк тупӑнман</string>
|
<string name="no_next_chapter">Малалли сыпӑк тупӑнман</string>
|
||||||
<string name="chapter_subtitle">%1$s сыпӑк</string>
|
<string name="chapter_subtitle">%1$s-мӗш сыпӑк</string>
|
||||||
<string name="chapter_progress">%1$d эл</string>
|
<string name="chapter_progress">%1$d-мӗш эл</string>
|
||||||
<string name="download_progress">%1$d%% тиенӗ</string>
|
<string name="download_progress">%1$d%% тиенӗ</string>
|
||||||
<string name="downloading">Тиев…</string>
|
<string name="downloading">Тиев…</string>
|
||||||
<string name="page_downloaded">Элӗ %1$s ӑтавланӑ</string>
|
<string name="page_downloaded">Элӗ %1$s ӑтавланӑ</string>
|
||||||
@ -438,8 +438,8 @@
|
|||||||
<string name="error_invalid_date_supplied">Тӗрӗс мар палӑртнӑ вӑхӑт</string>
|
<string name="error_invalid_date_supplied">Тӗрӗс мар палӑртнӑ вӑхӑт</string>
|
||||||
<string name="track_author">Авттӑр</string>
|
<string name="track_author">Авттӑр</string>
|
||||||
<string name="track_type">Тӗс</string>
|
<string name="track_type">Тӗс</string>
|
||||||
<string name="track_finished_reading_date">Вулама пӗтернӗ вӑхӑчӗ</string>
|
<string name="track_finished_reading_date">Вуласа пӗтернӗ вӑхӑт</string>
|
||||||
<string name="track_started_reading_date">Вулама пуҫланӑ вӑхӑчӗ</string>
|
<string name="track_started_reading_date">Вулама пуҫланӑ вӑхӑт</string>
|
||||||
<string name="track_start_date">Пуҫланӑ</string>
|
<string name="track_start_date">Пуҫланӑ</string>
|
||||||
<string name="track_status">Хал</string>
|
<string name="track_status">Хал</string>
|
||||||
<string name="status">Хал</string>
|
<string name="status">Хал</string>
|
||||||
@ -449,18 +449,18 @@
|
|||||||
<string name="want_to_read">Вуласшӑн</string>
|
<string name="want_to_read">Вуласшӑн</string>
|
||||||
<string name="plan_to_read">Вулӑп</string>
|
<string name="plan_to_read">Вулӑп</string>
|
||||||
<string name="paused">Вӑхӑтлӑха чарнӑ</string>
|
<string name="paused">Вӑхӑтлӑха чарнӑ</string>
|
||||||
<string name="on_hold">Вӑхӑтлӑха чарнӑ</string>
|
<string name="on_hold">Чарнӑ</string>
|
||||||
<string name="dropped">Пӑрахнӑ</string>
|
<string name="dropped">Пӑрахнӑ</string>
|
||||||
<string name="completed">Вӗҫленӗ</string>
|
<string name="completed">Вӗҫленӗ</string>
|
||||||
<string name="currently_reading">Халь вулатӑп</string>
|
<string name="currently_reading">Халь вулатӑп</string>
|
||||||
<string name="reading">Вулатӑп</string>
|
<string name="reading">Вулатӑп</string>
|
||||||
<string name="confirm_delete_chapters">Эсӗ суйланӑ сыпӑксене катертесшӗнех-и\?</string>
|
<string name="confirm_delete_chapters">Эсӗ суйланӑ сыпӑксене катертесшӗнех-и\?</string>
|
||||||
<string name="download_unread">Вуламан</string>
|
<string name="download_unread">Вуламанине</string>
|
||||||
<string name="download_all">Веҫех</string>
|
<string name="download_all">Веҫех</string>
|
||||||
<string name="download_custom">Урӑх шут йышӗ</string>
|
<string name="download_custom">Урӑх шут йышӗ</string>
|
||||||
<string name="download_10">Тепӗр 10 сыпӑк</string>
|
<string name="download_10">Малалли 10 сыпӑк</string>
|
||||||
<string name="download_5">Тепӗр 5 сыпӑка</string>
|
<string name="download_5">Малалли 5 сыпӑка</string>
|
||||||
<string name="download_1">Тепӗр сыпӑк</string>
|
<string name="download_1">Малалли сыпӑка</string>
|
||||||
<string name="custom_download">Палӑртнӑ шутне тиесе ил</string>
|
<string name="custom_download">Палӑртнӑ шутне тиесе ил</string>
|
||||||
<string name="manga_download">Тиесе ил</string>
|
<string name="manga_download">Тиесе ил</string>
|
||||||
<string name="sort_by_upload_date">Тиенӗ вӑхӑчӗпе</string>
|
<string name="sort_by_upload_date">Тиенӗ вӑхӑчӗпе</string>
|
||||||
@ -474,23 +474,23 @@
|
|||||||
<string name="chapter_downloading_progress">Тиенет (%1$d/%2$d)</string>
|
<string name="chapter_downloading_progress">Тиенет (%1$d/%2$d)</string>
|
||||||
<string name="chapter_downloading">Тиенет</string>
|
<string name="chapter_downloading">Тиенет</string>
|
||||||
<string name="chapter_queued">Черетре</string>
|
<string name="chapter_queued">Черетре</string>
|
||||||
<string name="manga_chapter_no_title">Ячӗ ҫук</string>
|
<string name="manga_chapter_no_title">Хайлав ячӗ ҫук</string>
|
||||||
<string name="manga_chapters_tab">Сыпӑксем</string>
|
<string name="manga_chapters_tab">Сыпӑксем</string>
|
||||||
<string name="snack_add_to_library">Манкка вулавăша хушмалла\?</string>
|
<string name="snack_add_to_library">Манкка вулавăша хушмалла-и\?</string>
|
||||||
<string name="source_not_installed">Ҫӑл куҫа лартман: %1$s</string>
|
<string name="source_not_installed">Ҫӑл куҫа лартман: %1$s</string>
|
||||||
<string name="copied_to_clipboard">Пайлашу буфере ӑтавланӑ:
|
<string name="copied_to_clipboard">Пайлашу буфере ӑтавланӑ:
|
||||||
\n%1$s</string>
|
\n%1$s</string>
|
||||||
<string name="delete_downloads_for_manga">Тиенӗ сыпӑксене катертмелле\?</string>
|
<string name="delete_downloads_for_manga">Тиенӗ сыпӑксене катертмелле-и\?</string>
|
||||||
<plurals name="manga_num_chapters">
|
<plurals name="manga_num_chapters">
|
||||||
<item quantity="one">1 сыпӑк</item>
|
<item quantity="one">1 сыпӑк</item>
|
||||||
<item quantity="other">%1$s сыпӑк</item>
|
<item quantity="other">%1$s сыпӑк</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="manga_info_collapse">Сахалтарах</string>
|
<string name="manga_info_collapse">Сахалрах</string>
|
||||||
<string name="manga_info_expand">Ытларах</string>
|
<string name="manga_info_expand">Ытларах</string>
|
||||||
<string name="manga_info_about_label">Манкӑ ҫинчен</string>
|
<string name="manga_info_about_label">Манкӑ ҫинчен</string>
|
||||||
<string name="manga_removed_library">Вулавӑшран катерт</string>
|
<string name="manga_removed_library">Вулавӑшран катерт</string>
|
||||||
<string name="manga_added_library">Вулавӑша хуш</string>
|
<string name="manga_added_library">Вулавӑша хуш</string>
|
||||||
<string name="manga_info_full_title_label">Пуҫ элӗк</string>
|
<string name="manga_info_full_title_label">Хайлав ячӗ</string>
|
||||||
<string name="remove_from_library">Вулавӑшран катерт</string>
|
<string name="remove_from_library">Вулавӑшран катерт</string>
|
||||||
<string name="in_library">Вулавăшра</string>
|
<string name="in_library">Вулавăшра</string>
|
||||||
<string name="add_to_library">Вулавӑша хуш</string>
|
<string name="add_to_library">Вулавӑша хуш</string>
|
||||||
@ -525,12 +525,12 @@
|
|||||||
<string name="invalid_backup_file">Тӗрӗс мар янтӑв файлӗ</string>
|
<string name="invalid_backup_file">Тӗрӗс мар янтӑв файлӗ</string>
|
||||||
<string name="local_source_badge">Вырӑнти</string>
|
<string name="local_source_badge">Вырӑнти</string>
|
||||||
<string name="updating_category">Пухмӑша ҫӗнетни</string>
|
<string name="updating_category">Пухмӑша ҫӗнетни</string>
|
||||||
<string name="library_search_hint">Ячӗ е авттӑрӗ…</string>
|
<string name="library_search_hint">Хайлав ячӗ е авттӑрӗ…</string>
|
||||||
<string name="unknown_error">Паллӑ мар йӑнӑш</string>
|
<string name="unknown_error">Паллӑ мар йӑнӑш</string>
|
||||||
<string name="invalid_login">Кӗни йӑнӑшӗ</string>
|
<string name="invalid_login">Кӗни йӑнӑшӗ</string>
|
||||||
<string name="logout_success">Эсӗ халь тухрӑн</string>
|
<string name="logout_success">Эсӗ тухрӑн</string>
|
||||||
<string name="logout">Тух</string>
|
<string name="logout">Тух</string>
|
||||||
<string name="logout_title">%1$s тухмалла\?</string>
|
<string name="logout_title">“%1$s тухмалла-и\?</string>
|
||||||
<string name="login_success">Ӑнӑҫлӑ кӗни</string>
|
<string name="login_success">Ӑнӑҫлӑ кӗни</string>
|
||||||
<string name="login">Кӗр</string>
|
<string name="login">Кӗр</string>
|
||||||
<string name="show_password">Кӗме сӑмах кӑтарт</string>
|
<string name="show_password">Кӗме сӑмах кӑтарт</string>
|
||||||
@ -590,7 +590,7 @@
|
|||||||
<string name="whats_new">Мӗн ҫӗнни</string>
|
<string name="whats_new">Мӗн ҫӗнни</string>
|
||||||
<string name="pref_category_locale">Вырӑн</string>
|
<string name="pref_category_locale">Вырӑн</string>
|
||||||
<string name="pref_category_theme">Тема</string>
|
<string name="pref_category_theme">Тема</string>
|
||||||
<string name="action_sort_date_added">Хушнӑ вӑхӑт</string>
|
<string name="action_sort_date_added">Хушнӑ вӑхӑтпа</string>
|
||||||
<string name="download_insufficient_space">Тиск ҫинче вырӑн ҫитмен пирки сыпӑксене тиесе илес ҫук</string>
|
<string name="download_insufficient_space">Тиск ҫинче вырӑн ҫитмен пирки сыпӑксене тиесе илес ҫук</string>
|
||||||
<string name="action_global_search_query">\"%1$s\" пур ҫӗрте шыра</string>
|
<string name="action_global_search_query">\"%1$s\" пур ҫӗрте шыра</string>
|
||||||
<string name="pref_category_reading_mode">Вулав тытӑмӗ</string>
|
<string name="pref_category_reading_mode">Вулав тытӑмӗ</string>
|
||||||
@ -603,5 +603,13 @@
|
|||||||
<string name="group_downloader">Тиевсем</string>
|
<string name="group_downloader">Тиевсем</string>
|
||||||
<string name="channel_complete">Вӗҫленӗ</string>
|
<string name="channel_complete">Вӗҫленӗ</string>
|
||||||
<string name="channel_progress">Ӳсӗм</string>
|
<string name="channel_progress">Ӳсӗм</string>
|
||||||
<string name="download_notifier_download_finish">Тиенчӗ</string>
|
<string name="download_notifier_download_finish">Тиев вӗҫленӗ</string>
|
||||||
|
<string name="channel_errors">Йӑнӑшсем</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Кӗмен сӑнанусем:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Ҫӑл куҫа чарса ларт, анчах хушмасен ят-йышӗнче кӑтарт</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">NSFW ҫӑл куҫсем</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Ирӗк панӑ</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Чарса лартнӑ</string>
|
||||||
|
<string name="pref_remove_bookmarked_chapters">Картнӑ сыпӑксене катерт</string>
|
||||||
|
<string name="pref_category_delete_chapters">Сыпӑксене катерт</string>
|
||||||
</resources>
|
</resources>
|
@ -149,8 +149,8 @@
|
|||||||
<string name="color_filter_a_value">A</string>
|
<string name="color_filter_a_value">A</string>
|
||||||
<string name="pref_download_directory">Speicherort</string>
|
<string name="pref_download_directory">Speicherort</string>
|
||||||
<string name="pref_download_only_over_wifi">Nur über WLAN herunterladen</string>
|
<string name="pref_download_only_over_wifi">Nur über WLAN herunterladen</string>
|
||||||
<string name="pref_remove_after_marked_as_read">Als gelesen markierte Kap. löschen</string>
|
<string name="pref_remove_after_marked_as_read">Nachdem manuell als gelesen markiert</string>
|
||||||
<string name="pref_remove_after_read">Nach dem Lesen löschen</string>
|
<string name="pref_remove_after_read">Nach dem Lesen</string>
|
||||||
<string name="custom_dir">Eigener Speicherort</string>
|
<string name="custom_dir">Eigener Speicherort</string>
|
||||||
<string name="disabled">Deaktiviert</string>
|
<string name="disabled">Deaktiviert</string>
|
||||||
<string name="last_read_chapter">Zuletzt gelesenes Kapitel</string>
|
<string name="last_read_chapter">Zuletzt gelesenes Kapitel</string>
|
||||||
@ -603,4 +603,14 @@
|
|||||||
<string name="group_downloader">Downloads</string>
|
<string name="group_downloader">Downloads</string>
|
||||||
<string name="channel_complete">Abgeschlossen</string>
|
<string name="channel_complete">Abgeschlossen</string>
|
||||||
<string name="channel_progress">Fortschritt</string>
|
<string name="channel_progress">Fortschritt</string>
|
||||||
|
<string name="channel_errors">Fehler</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Nicht-eingeloggte Tracker:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">NSFW-Quellen</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Blockiert</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Quelle blockieren, aber in der Erweiterungsliste anzeigen</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Erlaubt</string>
|
||||||
|
<string name="pref_remove_bookmarked_chapters">Mit Lesezeichen versehene Kapitel löschen</string>
|
||||||
|
<string name="pref_category_delete_chapters">Kapitel löschen</string>
|
||||||
|
<string name="ext_nsfw_warning">Kann 18+ Inhalte enthalten</string>
|
||||||
|
<string name="ext_nsfw_short">18+</string>
|
||||||
</resources>
|
</resources>
|
@ -603,4 +603,13 @@
|
|||||||
<string name="channel_complete">Ολοκληρωμένο</string>
|
<string name="channel_complete">Ολοκληρωμένο</string>
|
||||||
<string name="channel_progress">Η λήψη ολοκληρώθηκε</string>
|
<string name="channel_progress">Η λήψη ολοκληρώθηκε</string>
|
||||||
<string name="download_notifier_download_finish">Η λήψη ολοκληρώθηκε</string>
|
<string name="download_notifier_download_finish">Η λήψη ολοκληρώθηκε</string>
|
||||||
|
<string name="channel_errors">Σφάλματα</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Ιχνηλάτες που δεν έχουν συνδεθεί:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Αποκλείστηκε</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Αποκλεισμός πηγής αλλά εμφάνιση στη λίστα επεκτάσεων</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Επιτρέπεται</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">Πηγές NSFW</string>
|
||||||
|
<string name="pref_category_delete_chapters">Διαγραφή κεφαλαίων</string>
|
||||||
|
<string name="ext_nsfw_warning">Μπορεί να περιέχει 18+ περιεχόμενο</string>
|
||||||
|
<string name="ext_nsfw_short">18+</string>
|
||||||
</resources>
|
</resources>
|
@ -116,8 +116,8 @@
|
|||||||
<!-- Downloads section -->
|
<!-- Downloads section -->
|
||||||
<string name="pref_download_directory">Ubicación de descargas</string>
|
<string name="pref_download_directory">Ubicación de descargas</string>
|
||||||
<string name="pref_download_only_over_wifi">Descargar sólo a través de Wi-Fi</string>
|
<string name="pref_download_only_over_wifi">Descargar sólo a través de Wi-Fi</string>
|
||||||
<string name="pref_remove_after_marked_as_read">Eliminar cuando esta marcado como leído</string>
|
<string name="pref_remove_after_marked_as_read">Despues de marcar manualmente como leído</string>
|
||||||
<string name="pref_remove_after_read">Eliminar después de leer</string>
|
<string name="pref_remove_after_read">Después de leer</string>
|
||||||
<string name="custom_dir">Directorio personalizado</string>
|
<string name="custom_dir">Directorio personalizado</string>
|
||||||
<!-- Sources section -->
|
<!-- Sources section -->
|
||||||
<!-- Sync section -->
|
<!-- Sync section -->
|
||||||
@ -634,4 +634,14 @@
|
|||||||
<string name="group_downloader">Descargas</string>
|
<string name="group_downloader">Descargas</string>
|
||||||
<string name="channel_complete">Completo</string>
|
<string name="channel_complete">Completo</string>
|
||||||
<string name="channel_progress">Progreso</string>
|
<string name="channel_progress">Progreso</string>
|
||||||
|
<string name="channel_errors">Errores</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Rastreadores no conectados:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">Fuentes NSFW</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Bloqueado</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Bloquear fuente pero mostrarlo en la lista de extensiones</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Permitido</string>
|
||||||
|
<string name="pref_remove_bookmarked_chapters">Borrar capítulos marcados</string>
|
||||||
|
<string name="pref_category_delete_chapters">Borrar capítulos</string>
|
||||||
|
<string name="ext_nsfw_warning">Puede contener contenido 18+</string>
|
||||||
|
<string name="ext_nsfw_short">18+</string>
|
||||||
</resources>
|
</resources>
|
@ -2,16 +2,16 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="description_cover">عکس روی جلد مانگا</string>
|
<string name="description_cover">عکس روی جلد مانگا</string>
|
||||||
<plurals name="update_check_notification_ext_updates">
|
<plurals name="update_check_notification_ext_updates">
|
||||||
<item quantity="one">بروزرسانی برای یک افرونه موجود است</item>
|
<item quantity="one">آپدیت برای یک افرونه موجود است</item>
|
||||||
<item quantity="other">بروزرسانی برای %d افرونه موجود است</item>
|
<item quantity="other">آپدیت برای %d افرونه موجود است</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="update_check_notification_update_available">نسخه جدید موجود است!</string>
|
<string name="update_check_notification_update_available">نسخه جدید موجود است!</string>
|
||||||
<string name="update_check_notification_download_error">خطا در دانلود</string>
|
<string name="update_check_notification_download_error">خطا در دانلود</string>
|
||||||
<string name="update_check_notification_download_complete">دانلود تکمیل شد</string>
|
<string name="update_check_notification_download_complete">دانلود تکمیل شد</string>
|
||||||
<string name="update_check_notification_download_in_progress">در حال دانلود…</string>
|
<string name="update_check_notification_download_in_progress">در حال دانلود…</string>
|
||||||
<string name="update_check_notification_file_download">دانلود بروزرسانی</string>
|
<string name="update_check_notification_file_download">دانلود آپدیت</string>
|
||||||
<string name="update_check_look_for_updates">در حال جستجوی به روزرسانی ها …</string>
|
<string name="update_check_look_for_updates">در حال جستجوی آپدیتها …</string>
|
||||||
<string name="update_check_no_new_updates">هیچ بروزرسانی جدیدی موجود نیست</string>
|
<string name="update_check_no_new_updates">هیچ آپدیت جدیدی موجود نیست</string>
|
||||||
<string name="update_check_ignore">نادیده گرفتن</string>
|
<string name="update_check_ignore">نادیده گرفتن</string>
|
||||||
<string name="update_check_confirm">دانلود</string>
|
<string name="update_check_confirm">دانلود</string>
|
||||||
<string name="file_select_icon">آیکون میانبر را انتخاب کنید</string>
|
<string name="file_select_icon">آیکون میانبر را انتخاب کنید</string>
|
||||||
@ -19,7 +19,7 @@
|
|||||||
<string name="file_select_cover">عکس روی جلد را انتخاب کنید</string>
|
<string name="file_select_cover">عکس روی جلد را انتخاب کنید</string>
|
||||||
<string name="notification_no_connection_body">اتصال در دسترس نیست</string>
|
<string name="notification_no_connection_body">اتصال در دسترس نیست</string>
|
||||||
<string name="notification_no_connection_title">هم گام سازی کنسل شد</string>
|
<string name="notification_no_connection_title">هم گام سازی کنسل شد</string>
|
||||||
<string name="notification_not_connected_to_ac_body">دستگاه به منبع شارژ وصل نیست</string>
|
<string name="notification_not_connected_to_ac_body">دستگاه به شارژر وصل نیست</string>
|
||||||
<string name="notification_not_connected_to_ac_title">هم گام سازی کنسل شد</string>
|
<string name="notification_not_connected_to_ac_title">هم گام سازی کنسل شد</string>
|
||||||
<string name="notification_first_add_to_library">لطفا قبل این کار مانگای موردنظر را به کتابخانه اضافه کنید</string>
|
<string name="notification_first_add_to_library">لطفا قبل این کار مانگای موردنظر را به کتابخانه اضافه کنید</string>
|
||||||
<string name="notification_cover_update_failed">آپدیت عکس روی جلد با خطا مواجه شد</string>
|
<string name="notification_cover_update_failed">آپدیت عکس روی جلد با خطا مواجه شد</string>
|
||||||
@ -35,7 +35,7 @@
|
|||||||
<string name="notification_chapters_single_and_more">فصل %1$s و %2$d فصل دیگر</string>
|
<string name="notification_chapters_single_and_more">فصل %1$s و %2$d فصل دیگر</string>
|
||||||
<string name="notification_chapters_single">فصل %1$s</string>
|
<string name="notification_chapters_single">فصل %1$s</string>
|
||||||
<string name="notification_new_chapters">فصلهای جدید پیدا شدند</string>
|
<string name="notification_new_chapters">فصلهای جدید پیدا شدند</string>
|
||||||
<string name="notification_update_progress">روند بروزرسانی: %1$d/%2$d</string>
|
<string name="notification_update_progress">روند آپدیت: %1$d/%2$d</string>
|
||||||
<string name="notification_check_updates">درحال بررسی برای فصلهای جدید</string>
|
<string name="notification_check_updates">درحال بررسی برای فصلهای جدید</string>
|
||||||
<string name="download_queue_error">دانلود فصلها با خطا مواجه شد. با مراجعه به قسمت دانلودها میتوانید دوباره تلاش کنید</string>
|
<string name="download_queue_error">دانلود فصلها با خطا مواجه شد. با مراجعه به قسمت دانلودها میتوانید دوباره تلاش کنید</string>
|
||||||
<string name="copy">کپی</string>
|
<string name="copy">کپی</string>
|
||||||
@ -131,7 +131,7 @@
|
|||||||
<string name="manga_info_full_title_label">عنوان</string>
|
<string name="manga_info_full_title_label">عنوان</string>
|
||||||
<string name="remove_from_library">حذف از کتابخانه</string>
|
<string name="remove_from_library">حذف از کتابخانه</string>
|
||||||
<string name="in_library">در کتابخانه</string>
|
<string name="in_library">در کتابخانه</string>
|
||||||
<string name="pref_refresh_library_tracking_summary">وضعیت خواندن، امتیاز و آخرین فصل خوانده شده را از سایت خدمات ردیابی بروزرسانی میکند</string>
|
<string name="pref_refresh_library_tracking_summary">وضعیت خواندن، امتیاز و آخرین فصل خوانده شده را از سایت خدمات ردیابی آپدیت میکند</string>
|
||||||
<string name="pref_refresh_library_tracking">تازه کردن ردیابی</string>
|
<string name="pref_refresh_library_tracking">تازه کردن ردیابی</string>
|
||||||
<string name="tracking_info">همگام سازی یک طرفه برای به روز رسانی اطلاعات خواندن فصل در سایتهای خدمات ردیابی. برای ردیابی هر مانگا از تب ردیابی اقدام کنید.</string>
|
<string name="tracking_info">همگام سازی یک طرفه برای به روز رسانی اطلاعات خواندن فصل در سایتهای خدمات ردیابی. برای ردیابی هر مانگا از تب ردیابی اقدام کنید.</string>
|
||||||
<string name="webtoon_viewer">وب تون(Webtoon)</string>
|
<string name="webtoon_viewer">وب تون(Webtoon)</string>
|
||||||
@ -144,7 +144,7 @@
|
|||||||
<string name="information_empty_library">کتابخانه خالی است, از قسمت مرور مانگاای اضافه کنید.</string>
|
<string name="information_empty_library">کتابخانه خالی است, از قسمت مرور مانگاای اضافه کنید.</string>
|
||||||
<string name="information_no_recent_manga">هیچ چیز مانگاای به تازگی خوانده شده</string>
|
<string name="information_no_recent_manga">هیچ چیز مانگاای به تازگی خوانده شده</string>
|
||||||
<string name="information_no_recent">هیچ فصل جدیدی یافت نشد</string>
|
<string name="information_no_recent">هیچ فصل جدیدی یافت نشد</string>
|
||||||
<string name="information_no_downloads">بارگیری فعالی وجود ندارد</string>
|
<string name="information_no_downloads">صف خالی است</string>
|
||||||
<string name="label_help">راهنما</string>
|
<string name="label_help">راهنما</string>
|
||||||
<string name="label_extension_info">اطلاعات افزونه</string>
|
<string name="label_extension_info">اطلاعات افزونه</string>
|
||||||
<string name="label_extensions">افزونهها</string>
|
<string name="label_extensions">افزونهها</string>
|
||||||
@ -153,9 +153,9 @@
|
|||||||
<string name="label_categories">دسته بندی ها</string>
|
<string name="label_categories">دسته بندی ها</string>
|
||||||
<string name="label_sources">منابع</string>
|
<string name="label_sources">منابع</string>
|
||||||
<string name="label_recent_manga">تاریخچه</string>
|
<string name="label_recent_manga">تاریخچه</string>
|
||||||
<string name="label_recent_updates">بروزرسانیها</string>
|
<string name="label_recent_updates">آپدیت ها</string>
|
||||||
<string name="label_library">کتابخانه</string>
|
<string name="label_library">کتابخانه</string>
|
||||||
<string name="label_download_queue">صف بارگیری</string>
|
<string name="label_download_queue">صف دانلود</string>
|
||||||
<string name="label_settings">تنضیمات</string>
|
<string name="label_settings">تنضیمات</string>
|
||||||
<string name="label_more">بیشتر</string>
|
<string name="label_more">بیشتر</string>
|
||||||
<string name="name">نام</string>
|
<string name="name">نام</string>
|
||||||
@ -198,9 +198,9 @@
|
|||||||
<string name="pref_create_backup">تهیه نسخه پشتیبان</string>
|
<string name="pref_create_backup">تهیه نسخه پشتیبان</string>
|
||||||
<string name="backup">پشتیبان گیری</string>
|
<string name="backup">پشتیبان گیری</string>
|
||||||
<string name="pref_search_pinned_sources_only">فقط افزونههای پین شده شامل شوند</string>
|
<string name="pref_search_pinned_sources_only">فقط افزونههای پین شده شامل شوند</string>
|
||||||
<string name="pref_enable_automatic_extension_updates">بررسی برای به افزونههای بروزرسانی شده</string>
|
<string name="pref_enable_automatic_extension_updates">بررسی برای به افزونههای آپدیتشده</string>
|
||||||
<string name="services">خدمات</string>
|
<string name="services">خدمات</string>
|
||||||
<string name="pref_auto_update_manga_sync">بعد از خوانده شدن وضعیت فصل بروزرسانی شود</string>
|
<string name="pref_auto_update_manga_sync">بعد از خواندهشدن، وضعیت فصل بروزرسانی شود</string>
|
||||||
<string name="pref_download_new_categories">دسته بندی هایی که در دانلود شامل می شوند</string>
|
<string name="pref_download_new_categories">دسته بندی هایی که در دانلود شامل می شوند</string>
|
||||||
<string name="pref_download_new">دانلود فصلهای جدید</string>
|
<string name="pref_download_new">دانلود فصلهای جدید</string>
|
||||||
<string name="fifth_to_last">پنجم به آخرین فصل خوانده شده</string>
|
<string name="fifth_to_last">پنجم به آخرین فصل خوانده شده</string>
|
||||||
@ -248,7 +248,7 @@
|
|||||||
</plurals>
|
</plurals>
|
||||||
<string name="action_bookmark">بوک مارک</string>
|
<string name="action_bookmark">بوک مارک</string>
|
||||||
<string name="channel_ext_updates">آپدیت افزونهها</string>
|
<string name="channel_ext_updates">آپدیت افزونهها</string>
|
||||||
<string name="channel_new_chapters">آپدیت فصل ها</string>
|
<string name="channel_new_chapters">آپدیت فصلها</string>
|
||||||
<string name="channel_library">کتابخانه</string>
|
<string name="channel_library">کتابخانه</string>
|
||||||
<string name="channel_common">عمومی</string>
|
<string name="channel_common">عمومی</string>
|
||||||
<string name="download_notifier_download_paused">دانلود متوقف شد</string>
|
<string name="download_notifier_download_paused">دانلود متوقف شد</string>
|
||||||
@ -259,7 +259,7 @@
|
|||||||
<string name="download_notifier_unknown_error">به دلیل خطای غیرمنتظره فصل دانلود نشد</string>
|
<string name="download_notifier_unknown_error">به دلیل خطای غیرمنتظره فصل دانلود نشد</string>
|
||||||
<string name="download_notifier_title_error">خطا</string>
|
<string name="download_notifier_title_error">خطا</string>
|
||||||
<string name="download_notifier_downloader_title">سیستم دانلود</string>
|
<string name="download_notifier_downloader_title">سیستم دانلود</string>
|
||||||
<string name="information_webview_outdated">لطفا برنامه WebView را برای سازگاری بهتر بروز کنید</string>
|
<string name="information_webview_outdated">لطفا برنامه WebView را برای سازگاری بهتر آپدیت کنید</string>
|
||||||
<string name="information_webview_required">WebView برای Tachiyomi مورد نیاز است</string>
|
<string name="information_webview_required">WebView برای Tachiyomi مورد نیاز است</string>
|
||||||
<string name="information_cloudflare_bypass_failure">عدم موفقیت در دور زدن Cloudflare</string>
|
<string name="information_cloudflare_bypass_failure">عدم موفقیت در دور زدن Cloudflare</string>
|
||||||
<string name="color_filter_a_value">opacity</string>
|
<string name="color_filter_a_value">opacity</string>
|
||||||
@ -338,23 +338,23 @@
|
|||||||
<string name="ext_downloading">در حال بارگیری</string>
|
<string name="ext_downloading">در حال بارگیری</string>
|
||||||
<string name="ext_pending">در انتظار</string>
|
<string name="ext_pending">در انتظار</string>
|
||||||
<string name="ext_obsolete">منسوخ شده</string>
|
<string name="ext_obsolete">منسوخ شده</string>
|
||||||
<string name="ext_update">بروزرسانی</string>
|
<string name="ext_update">آپدیت</string>
|
||||||
<string name="ext_updates_pending">بروزرسانیهای در انتظار</string>
|
<string name="ext_updates_pending">آپدیتهای در انتظار</string>
|
||||||
<string name="all_lang">همه</string>
|
<string name="all_lang">همه</string>
|
||||||
<string name="all">همه</string>
|
<string name="all">همه</string>
|
||||||
<string name="pref_library_update_categories">دسته بندی هایی که در به روزرسانی سراسری شامل می شوند</string>
|
<string name="pref_library_update_categories">دستهبندیهایی که در به آپدیت سراسری شامل می شوند</string>
|
||||||
<string name="default_category_summary">همیشه بپرس</string>
|
<string name="default_category_summary">همیشه بپرس</string>
|
||||||
<string name="default_category">کاتالوگ پیشفرض</string>
|
<string name="default_category">کاتالوگ پیشفرض</string>
|
||||||
<string name="pref_category_library_categories">کاتالوگها</string>
|
<string name="pref_category_library_categories">کاتالوگها</string>
|
||||||
<string name="pref_library_update_error_notification">خطاهای بروزرسانی در اعلان ها نمایش داده شود</string>
|
<string name="pref_library_update_error_notification">خطاهای آپدیت در اعلانها نمایش داده شود</string>
|
||||||
<string name="pref_library_update_refresh_metadata_summary">وقتی کتابخانه بروزآوری میشود عکس روی جلد و اطلاعات مانگاها را نیز بروزآوری شود</string>
|
<string name="pref_library_update_refresh_metadata_summary">هنگام آپدیت عکس روی جلد و اطلاعات مانگا ها (در صورت تغییر) آپدیت شوند</string>
|
||||||
<string name="pref_library_update_refresh_metadata">فراداده فقط به صورت خودکار بروز شود</string>
|
<string name="pref_library_update_refresh_metadata">متادیتا فقط به صورت خودکار آپدیت شود</string>
|
||||||
<string name="pref_update_only_non_completed">فقط مانگاهایی آپدیت شوند که تمام نشده</string>
|
<string name="pref_update_only_non_completed">فقط مانگاهایی آپدیت شوند که تمام نشده</string>
|
||||||
<string name="charging">درحال شارژ</string>
|
<string name="charging">درحال شارژ</string>
|
||||||
<string name="wifi">وایفای</string>
|
<string name="wifi">وایفای</string>
|
||||||
<string name="pref_library_update_restriction_summary">فقط وقتی بروز شود که شرایط برآورده میشوند</string>
|
<string name="pref_library_update_restriction_summary">در چه شرایطی کتابخانه آپدیت شود</string>
|
||||||
<string name="pref_library_update_restriction">محدودیتهای بروزرسانی کتابخانه</string>
|
<string name="pref_library_update_restriction">محدودیتهای آپدیت کتابخانه</string>
|
||||||
<string name="pref_library_update_prioritization">ترتیب بروزرسانی کتابخانه</string>
|
<string name="pref_library_update_prioritization">ترتیب آپدیت کتابخانه</string>
|
||||||
<string name="update_monthly">ماهانه</string>
|
<string name="update_monthly">ماهانه</string>
|
||||||
<string name="update_weekly">هفتگی</string>
|
<string name="update_weekly">هفتگی</string>
|
||||||
<string name="update_48hour">هر ۴۸ ساعت یکبار</string>
|
<string name="update_48hour">هر ۴۸ ساعت یکبار</string>
|
||||||
@ -364,14 +364,14 @@
|
|||||||
<string name="update_6hour">هر ۶ ساعت یکبار</string>
|
<string name="update_6hour">هر ۶ ساعت یکبار</string>
|
||||||
<string name="update_1hour">یک ساعت یکبار</string>
|
<string name="update_1hour">یک ساعت یکبار</string>
|
||||||
<string name="update_never">فقط دستی</string>
|
<string name="update_never">فقط دستی</string>
|
||||||
<string name="pref_library_update_interval">بروزرسانی کتابخانه چند وقت یکبار</string>
|
<string name="pref_library_update_interval">فرکانس آپدیت کتابخانه</string>
|
||||||
<string name="pref_category_library_update">بروزرسانیها</string>
|
<string name="pref_category_library_update">آپدیتها</string>
|
||||||
<string name="default_columns">پیشفرض</string>
|
<string name="default_columns">پیشفرض</string>
|
||||||
<string name="landscape">افقی</string>
|
<string name="landscape">افقی</string>
|
||||||
<string name="portrait">عمودی</string>
|
<string name="portrait">عمودی</string>
|
||||||
<string name="pref_library_columns">موارد در هر ردیف</string>
|
<string name="pref_library_columns">موارد در هر ردیف</string>
|
||||||
<string name="pref_category_display">نمایش</string>
|
<string name="pref_category_display">نمایش</string>
|
||||||
<string name="hide_notification_content">مخفی کردن ناتیفیکشنها</string>
|
<string name="hide_notification_content">مخفی کردن اعلانها</string>
|
||||||
<string name="secure_screen_summary">محتویات برنامه هنگام تعویض برنامه ها مخفی و از عکس گرفتن از صفحه برنامه جلوگیری شود</string>
|
<string name="secure_screen_summary">محتویات برنامه هنگام تعویض برنامه ها مخفی و از عکس گرفتن از صفحه برنامه جلوگیری شود</string>
|
||||||
<string name="secure_screen">صفحه نمایش امن</string>
|
<string name="secure_screen">صفحه نمایش امن</string>
|
||||||
<plurals name="lock_after_mins">
|
<plurals name="lock_after_mins">
|
||||||
@ -383,7 +383,7 @@
|
|||||||
<string name="lock_when_idle">قفل صفحه هنگام بیکاری</string>
|
<string name="lock_when_idle">قفل صفحه هنگام بیکاری</string>
|
||||||
<string name="lock_with_biometrics">با بیومتریک قفل کنید</string>
|
<string name="lock_with_biometrics">با بیومتریک قفل کنید</string>
|
||||||
<string name="pref_category_security">امنیت</string>
|
<string name="pref_category_security">امنیت</string>
|
||||||
<string name="pref_manage_notifications">مدیریت ناتیفیکیشنها</string>
|
<string name="pref_manage_notifications">مدیریت اعلانها</string>
|
||||||
<string name="pref_confirm_exit">هنگام خروج از برنامه تایید گرفته شود</string>
|
<string name="pref_confirm_exit">هنگام خروج از برنامه تایید گرفته شود</string>
|
||||||
<string name="pref_date_format">فرمت تاریخ</string>
|
<string name="pref_date_format">فرمت تاریخ</string>
|
||||||
<string name="system_default">پیشفرض سیستم</string>
|
<string name="system_default">پیشفرض سیستم</string>
|
||||||
@ -407,7 +407,7 @@
|
|||||||
<string name="pref_category_reader">کتابخوان</string>
|
<string name="pref_category_reader">کتابخوان</string>
|
||||||
<string name="pref_category_library">کتابخانه</string>
|
<string name="pref_category_library">کتابخانه</string>
|
||||||
<string name="pref_category_general">عمومی</string>
|
<string name="pref_category_general">عمومی</string>
|
||||||
<string name="short_recent_updates">بروزرسانیها</string>
|
<string name="short_recent_updates">آپدیتها</string>
|
||||||
<string name="app_not_available">برنامه موجود نیست</string>
|
<string name="app_not_available">برنامه موجود نیست</string>
|
||||||
<string name="loading">درحال بارگیری…</string>
|
<string name="loading">درحال بارگیری…</string>
|
||||||
<string name="action_webview_refresh">بازآوری</string>
|
<string name="action_webview_refresh">بازآوری</string>
|
||||||
@ -480,7 +480,7 @@
|
|||||||
<string name="label_downloaded_only">فقط دانلود شده ها</string>
|
<string name="label_downloaded_only">فقط دانلود شده ها</string>
|
||||||
<string name="pref_acra_summary">به رفع اشکالات برنامه کمک می کند. هیچ گونه داده حساسی ارسال نخواهد شد</string>
|
<string name="pref_acra_summary">به رفع اشکالات برنامه کمک می کند. هیچ گونه داده حساسی ارسال نخواهد شد</string>
|
||||||
<string name="pref_enable_acra">ارسال گزارش های خرابی</string>
|
<string name="pref_enable_acra">ارسال گزارش های خرابی</string>
|
||||||
<string name="check_for_updates">بررسی برای به روز رسانی</string>
|
<string name="check_for_updates">بررسی برای به آپدیتها</string>
|
||||||
<string name="licenses">مجوزهای منبع باز</string>
|
<string name="licenses">مجوزهای منبع باز</string>
|
||||||
<string name="notices">اطلاعیه های نسخه پیش نمایش</string>
|
<string name="notices">اطلاعیه های نسخه پیش نمایش</string>
|
||||||
<string name="build_time">زمان ساخت</string>
|
<string name="build_time">زمان ساخت</string>
|
||||||
@ -488,7 +488,7 @@
|
|||||||
<string name="website">وب سایت</string>
|
<string name="website">وب سایت</string>
|
||||||
<string name="battery_optimization_setting_activity_not_found">تنظیمات دستگاه باز نشد</string>
|
<string name="battery_optimization_setting_activity_not_found">تنظیمات دستگاه باز نشد</string>
|
||||||
<string name="battery_optimization_disabled">بهینه سازی باتری از قبل غیرفعال شده است</string>
|
<string name="battery_optimization_disabled">بهینه سازی باتری از قبل غیرفعال شده است</string>
|
||||||
<string name="pref_disable_battery_optimization_summary">به بروزرسانی ها و پشتیبان گیری از کتابخانه در حالت پس زمینه کمک می کند</string>
|
<string name="pref_disable_battery_optimization_summary">به بروزرسانیها و پشتیبانگیری از کتابخانه در حالت پس زمینه کمک میکند</string>
|
||||||
<string name="pref_disable_battery_optimization">غیر فعال کردن بهینه سازی باتری</string>
|
<string name="pref_disable_battery_optimization">غیر فعال کردن بهینه سازی باتری</string>
|
||||||
<string name="pref_refresh_library_covers">تازه کردن عکس روی جلد مانگاها</string>
|
<string name="pref_refresh_library_covers">تازه کردن عکس روی جلد مانگاها</string>
|
||||||
<string name="clear_database_completed">اطلاعات حذف شدند</string>
|
<string name="clear_database_completed">اطلاعات حذف شدند</string>
|
||||||
@ -535,8 +535,8 @@
|
|||||||
<string name="action_edit">ویرایش</string>
|
<string name="action_edit">ویرایش</string>
|
||||||
<string name="action_disable_all">غیر فعال کردن همه</string>
|
<string name="action_disable_all">غیر فعال کردن همه</string>
|
||||||
<string name="action_enable_all">فعال کردن همه</string>
|
<string name="action_enable_all">فعال کردن همه</string>
|
||||||
<string name="action_update_library">به روز رسانی کتابخانه</string>
|
<string name="action_update_library">آپدیت کتابخانه</string>
|
||||||
<string name="action_update">بروز رسانی</string>
|
<string name="action_update">آپدیت</string>
|
||||||
<string name="action_delete">پاک کردن</string>
|
<string name="action_delete">پاک کردن</string>
|
||||||
<string name="action_remove_bookmark">حذف نشان</string>
|
<string name="action_remove_bookmark">حذف نشان</string>
|
||||||
<string name="action_download">دانلود شود</string>
|
<string name="action_download">دانلود شود</string>
|
||||||
@ -565,4 +565,38 @@
|
|||||||
<string name="chapters">فصلها</string>
|
<string name="chapters">فصلها</string>
|
||||||
<string name="manga">مانگا</string>
|
<string name="manga">مانگا</string>
|
||||||
<string name="categories">کاتالوگها</string>
|
<string name="categories">کاتالوگها</string>
|
||||||
|
<string name="group_backup_restore">پشتیبان گیری و بازیابی</string>
|
||||||
|
<string name="group_downloader">دانلودها</string>
|
||||||
|
<string name="channel_errors">خطاها</string>
|
||||||
|
<string name="channel_complete">تکمیل شده</string>
|
||||||
|
<string name="channel_progress">پیشرفت</string>
|
||||||
|
<string name="download_notifier_download_finish">دانلود تکمیل شد</string>
|
||||||
|
<string name="download_insufficient_space">به دلیل فضای کم دیسک امکان دانلود فصلها وجود ندارد</string>
|
||||||
|
<string name="loader_not_implemented_error">منبع یافت نشد</string>
|
||||||
|
<plurals name="num_trackers">
|
||||||
|
<item quantity="one">۱ ردیاب</item>
|
||||||
|
<item quantity="other">%d ردیاب</item>
|
||||||
|
</plurals>
|
||||||
|
<plurals name="manga_num_chapters">
|
||||||
|
<item quantity="one">۱ فصل</item>
|
||||||
|
<item quantity="other">%1$s فصل</item>
|
||||||
|
</plurals>
|
||||||
|
<string name="unknown_status">وضعیت ناشناخته</string>
|
||||||
|
<string name="unknown_author">نویسنده ناشناخته</string>
|
||||||
|
<string name="no_pinned_sources">شما هیچ منبع پینشدهای ندارید</string>
|
||||||
|
<string name="action_global_search_query">«%1$s» در همه منابع جستجو شود</string>
|
||||||
|
<string name="whats_new">اخبار</string>
|
||||||
|
<string name="pref_dns_over_https_summary">برای اعمال تغییرات برنامه نیاز به راه اندازی مجدد دارد</string>
|
||||||
|
<string name="label_network">شبکه</string>
|
||||||
|
<string name="backup_restore_missing_trackers">ردیابیهایی که به سیستم وارد نشده اند:</string>
|
||||||
|
<string name="pref_category_reading_mode">حالت خواندن</string>
|
||||||
|
<string name="pref_jump_to_chapters">برنامه در تب فصلها باز شود</string>
|
||||||
|
<string name="pref_category_locale">محلی</string>
|
||||||
|
<string name="pref_category_theme">تم</string>
|
||||||
|
<string name="action_sort_descending">نزولی</string>
|
||||||
|
<string name="action_disable">غیرفعال کردن</string>
|
||||||
|
<string name="action_open_in_settings">در تنظیمات باز شود</string>
|
||||||
|
<string name="action_download_unread">دانلود فصلهای خواندهنشده</string>
|
||||||
|
<string name="action_sort_date_added">تاریخ اضافه شدن</string>
|
||||||
|
<string name="updated_version">به نسخه v%1$s آپدیت شد</string>
|
||||||
</resources>
|
</resources>
|
@ -249,8 +249,8 @@
|
|||||||
<string name="color_filter_a_value">Alpha</string>
|
<string name="color_filter_a_value">Alpha</string>
|
||||||
<string name="pref_download_directory">Lataus kansio</string>
|
<string name="pref_download_directory">Lataus kansio</string>
|
||||||
<string name="pref_download_only_over_wifi">Lataa vain Wi-Fi-yhteydellä</string>
|
<string name="pref_download_only_over_wifi">Lataa vain Wi-Fi-yhteydellä</string>
|
||||||
<string name="pref_remove_after_marked_as_read">Poista luetuksi merkitsemisen jälkeen</string>
|
<string name="pref_remove_after_marked_as_read">Manuaalisesti luetuksi merkitsemisen jälkeen</string>
|
||||||
<string name="pref_remove_after_read">Poista lukemisen jälkeen</string>
|
<string name="pref_remove_after_read">Lukemisen jälkeen</string>
|
||||||
<string name="custom_dir">Mukautettu kansio</string>
|
<string name="custom_dir">Mukautettu kansio</string>
|
||||||
<string name="disabled">Pois käytöstä</string>
|
<string name="disabled">Pois käytöstä</string>
|
||||||
<string name="last_read_chapter">Viimeksi luettu luku</string>
|
<string name="last_read_chapter">Viimeksi luettu luku</string>
|
||||||
@ -603,4 +603,14 @@
|
|||||||
<string name="channel_complete">Valmis</string>
|
<string name="channel_complete">Valmis</string>
|
||||||
<string name="channel_progress">Edistyminen</string>
|
<string name="channel_progress">Edistyminen</string>
|
||||||
<string name="download_notifier_download_finish">Lataus valmis</string>
|
<string name="download_notifier_download_finish">Lataus valmis</string>
|
||||||
|
<string name="channel_errors">Virheet</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Seurantapalvelimet joihin et ole kirjautunut sisään:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Estetty</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Estä lähde, mutta näytä laajennusluettelossa</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Sallittu</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">NSFW-lähteet</string>
|
||||||
|
<string name="pref_remove_bookmarked_chapters">Poista kirjanmerkityt luvut</string>
|
||||||
|
<string name="pref_category_delete_chapters">Poista luvut</string>
|
||||||
|
<string name="ext_nsfw_warning">Voi sisältää 18+ sisältöä</string>
|
||||||
|
<string name="ext_nsfw_short">18+</string>
|
||||||
</resources>
|
</resources>
|
@ -55,7 +55,7 @@
|
|||||||
<string name="action_edit_cover">Baguhin ang pabalat</string>
|
<string name="action_edit_cover">Baguhin ang pabalat</string>
|
||||||
<string name="action_move_category">Magtakda ng kategorya</string>
|
<string name="action_move_category">Magtakda ng kategorya</string>
|
||||||
<string name="action_add_category">Magdagdag</string>
|
<string name="action_add_category">Magdagdag</string>
|
||||||
<string name="action_edit_categories">Isaayos</string>
|
<string name="action_edit_categories">Ayusin</string>
|
||||||
<string name="action_rename_category">Baguhin ang pangalan</string>
|
<string name="action_rename_category">Baguhin ang pangalan</string>
|
||||||
<string name="action_add">Magdagdag</string>
|
<string name="action_add">Magdagdag</string>
|
||||||
<string name="action_edit">Isaayos</string>
|
<string name="action_edit">Isaayos</string>
|
||||||
@ -90,7 +90,7 @@
|
|||||||
<string name="confirm_exit">Pindutin muli para makaalis</string>
|
<string name="confirm_exit">Pindutin muli para makaalis</string>
|
||||||
<string name="unlock_app">Buksan ang Tachiyomi</string>
|
<string name="unlock_app">Buksan ang Tachiyomi</string>
|
||||||
<string name="history">Kasaysayan</string>
|
<string name="history">Kasaysayan</string>
|
||||||
<string name="track">Sinusundan</string>
|
<string name="track">Sinusubaybayan</string>
|
||||||
<string name="chapters">Mga Kabanata</string>
|
<string name="chapters">Mga Kabanata</string>
|
||||||
<string name="manga">Mga Manga</string>
|
<string name="manga">Mga Manga</string>
|
||||||
<string name="categories">Mga Kategorya</string>
|
<string name="categories">Mga Kategorya</string>
|
||||||
@ -142,7 +142,7 @@
|
|||||||
<string name="pref_theme_mode">Madilim na tema</string>
|
<string name="pref_theme_mode">Madilim na tema</string>
|
||||||
<string name="pref_category_about">Patungkol</string>
|
<string name="pref_category_about">Patungkol</string>
|
||||||
<string name="pref_category_advanced">Higit pa</string>
|
<string name="pref_category_advanced">Higit pa</string>
|
||||||
<string name="pref_category_tracking">Pagsunod</string>
|
<string name="pref_category_tracking">Pagsubaybay</string>
|
||||||
<string name="pref_category_downloads">Pag-download</string>
|
<string name="pref_category_downloads">Pag-download</string>
|
||||||
<string name="pref_category_reader">Pagbása</string>
|
<string name="pref_category_reader">Pagbása</string>
|
||||||
<string name="pref_category_library">Aklatan</string>
|
<string name="pref_category_library">Aklatan</string>
|
||||||
@ -154,8 +154,8 @@
|
|||||||
<string name="last_read_chapter">Huling nabásang kabanata</string>
|
<string name="last_read_chapter">Huling nabásang kabanata</string>
|
||||||
<string name="disabled">Sarado</string>
|
<string name="disabled">Sarado</string>
|
||||||
<string name="custom_dir">Pinili kong lugar</string>
|
<string name="custom_dir">Pinili kong lugar</string>
|
||||||
<string name="pref_remove_after_marked_as_read">Burahin kung nabása na</string>
|
<string name="pref_remove_after_marked_as_read">Kung nabása na</string>
|
||||||
<string name="pref_remove_after_read">Burahin matapos basahin</string>
|
<string name="pref_remove_after_read">Matapos basahin</string>
|
||||||
<string name="pref_download_only_over_wifi">Mag-download lamang kapag naka-wifi</string>
|
<string name="pref_download_only_over_wifi">Mag-download lamang kapag naka-wifi</string>
|
||||||
<string name="pref_download_directory">Lugar ng paglalagyan</string>
|
<string name="pref_download_directory">Lugar ng paglalagyan</string>
|
||||||
<string name="webtoon_side_padding_25">25%</string>
|
<string name="webtoon_side_padding_25">25%</string>
|
||||||
@ -253,7 +253,7 @@
|
|||||||
<string name="ext_install">I-install</string>
|
<string name="ext_install">I-install</string>
|
||||||
<string name="ext_obsolete">Wala na</string>
|
<string name="ext_obsolete">Wala na</string>
|
||||||
<string name="ext_update">Isapanahon</string>
|
<string name="ext_update">Isapanahon</string>
|
||||||
<string name="ext_updates_pending">Mga nakabinbin</string>
|
<string name="ext_updates_pending">Isapanahon</string>
|
||||||
<string name="all_lang">Lahat</string>
|
<string name="all_lang">Lahat</string>
|
||||||
<string name="all">Lahat</string>
|
<string name="all">Lahat</string>
|
||||||
<string name="pref_library_update_categories">Kategoryang kasama sa panlahat na update</string>
|
<string name="pref_library_update_categories">Kategoryang kasama sa panlahat na update</string>
|
||||||
@ -262,7 +262,7 @@
|
|||||||
<item quantity="other">%d (na) kategorya</item>
|
<item quantity="other">%d (na) kategorya</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="default_category_summary">Palaging tanungin</string>
|
<string name="default_category_summary">Palaging tanungin</string>
|
||||||
<string name="default_category">Lagayan</string>
|
<string name="default_category">Panimulang lagayan</string>
|
||||||
<string name="pref_library_update_refresh_metadata_summary">Tumingin ng mga bagong pabalat at detalye tuwing nagsasapanahon</string>
|
<string name="pref_library_update_refresh_metadata_summary">Tumingin ng mga bagong pabalat at detalye tuwing nagsasapanahon</string>
|
||||||
<string name="pref_library_update_error_notification">Abiso sa pagpalya ng update</string>
|
<string name="pref_library_update_error_notification">Abiso sa pagpalya ng update</string>
|
||||||
<string name="pref_category_library_categories">Mga Kategorya</string>
|
<string name="pref_category_library_categories">Mga Kategorya</string>
|
||||||
@ -294,7 +294,7 @@
|
|||||||
<string name="secure_screen_summary">Itago ang nilalaman ng app habang nagpapalit ng app at harangin ang mga screenshot</string>
|
<string name="secure_screen_summary">Itago ang nilalaman ng app habang nagpapalit ng app at harangin ang mga screenshot</string>
|
||||||
<string name="secure_screen">Bantayán ang iskrin</string>
|
<string name="secure_screen">Bantayán ang iskrin</string>
|
||||||
<string name="pref_jump_to_chapters">Buksan agad ang kabanata</string>
|
<string name="pref_jump_to_chapters">Buksan agad ang kabanata</string>
|
||||||
<string name="pref_read_with_tapping_inverted">Baliktarin ang pag-tap</string>
|
<string name="pref_read_with_tapping_inverted">Baliktad na pagpindot</string>
|
||||||
<string name="backup_restore_missing_sources">Nawawalang (mga) pinagkunan:</string>
|
<string name="backup_restore_missing_sources">Nawawalang (mga) pinagkunan:</string>
|
||||||
<string name="invalid_backup_file_missing_manga">Walang manga ang backup.</string>
|
<string name="invalid_backup_file_missing_manga">Walang manga ang backup.</string>
|
||||||
<string name="invalid_backup_file_missing_data">May kulang na data ang file.</string>
|
<string name="invalid_backup_file_missing_data">May kulang na data ang file.</string>
|
||||||
@ -311,9 +311,9 @@
|
|||||||
<string name="pref_create_backup_summ">Magagamit para maibalik ang kasalukuyang Aklatan</string>
|
<string name="pref_create_backup_summ">Magagamit para maibalik ang kasalukuyang Aklatan</string>
|
||||||
<string name="pref_create_backup">Gumawa ng backup</string>
|
<string name="pref_create_backup">Gumawa ng backup</string>
|
||||||
<string name="backup">Pag-backup</string>
|
<string name="backup">Pag-backup</string>
|
||||||
<string name="pref_search_pinned_sources_only">Isama lamang ang mga naka-pin na pinagkukunan</string>
|
<string name="pref_search_pinned_sources_only">Isama lamang ang mga naka-pin</string>
|
||||||
<string name="pref_enable_automatic_extension_updates">Tumingin ng update sa dugtong</string>
|
<string name="pref_enable_automatic_extension_updates">Tumingin ng update sa dugtong</string>
|
||||||
<string name="tracking_info">Isahang pagsabay (sync) para ma-update ang bilang ng nabásang kabanata sa mga serbisyo ng panunundan (tracking services). Isaayos ang Pagsunod para sa mga manga sa kanilang mga tab ng Pagsunod.</string>
|
<string name="tracking_info">Isahang pagsabay (sync) para ma-update ang bilang ng nabásang kabanata sa mga tagasubaybay (tracking services). Isaayos ang Pagsubaybay para sa mga manga sa kanilang mga tab ng Pagsubaybay.</string>
|
||||||
<string name="services">Mga Serbisyo</string>
|
<string name="services">Mga Serbisyo</string>
|
||||||
<string name="pref_auto_update_manga_sync">I-update ang bahagdang nabása pagkabása</string>
|
<string name="pref_auto_update_manga_sync">I-update ang bahagdang nabása pagkabása</string>
|
||||||
<string name="pref_download_new_categories">Mga kategoryang kasama sa download</string>
|
<string name="pref_download_new_categories">Mga kategoryang kasama sa download</string>
|
||||||
@ -330,7 +330,7 @@
|
|||||||
<string name="tapping_inverted_vertical">Patayo</string>
|
<string name="tapping_inverted_vertical">Patayo</string>
|
||||||
<string name="tapping_inverted_horizontal">Pahiga</string>
|
<string name="tapping_inverted_horizontal">Pahiga</string>
|
||||||
<string name="channel_ext_updates">Mga update sa dugtong</string>
|
<string name="channel_ext_updates">Mga update sa dugtong</string>
|
||||||
<string name="tapping_inverted_none">Wala</string>
|
<string name="tapping_inverted_none">Hindi</string>
|
||||||
<string name="channel_new_chapters">Mga update sa kabanata</string>
|
<string name="channel_new_chapters">Mga update sa kabanata</string>
|
||||||
<string name="channel_library">Aklatan</string>
|
<string name="channel_library">Aklatan</string>
|
||||||
<string name="channel_common">Komon</string>
|
<string name="channel_common">Komon</string>
|
||||||
@ -356,7 +356,7 @@
|
|||||||
<string name="update_check_notification_download_in_progress">Dina-download…</string>
|
<string name="update_check_notification_download_in_progress">Dina-download…</string>
|
||||||
<string name="update_check_notification_file_download">I-download ang update</string>
|
<string name="update_check_notification_file_download">I-download ang update</string>
|
||||||
<string name="update_check_look_for_updates">Naghahanap ng mga update…</string>
|
<string name="update_check_look_for_updates">Naghahanap ng mga update…</string>
|
||||||
<string name="update_check_no_new_updates">Walang mga bagong update</string>
|
<string name="update_check_no_new_updates">Walang bagong update</string>
|
||||||
<string name="update_check_ignore">Balewalain</string>
|
<string name="update_check_ignore">Balewalain</string>
|
||||||
<string name="update_check_confirm">I-download</string>
|
<string name="update_check_confirm">I-download</string>
|
||||||
<string name="file_select_icon">Pumili ng shortcut icon</string>
|
<string name="file_select_icon">Pumili ng shortcut icon</string>
|
||||||
@ -394,7 +394,7 @@
|
|||||||
<string name="download_queue_error">Di ma-download ang (mga) kabanata. Maaari mo uli itong subukan sa Mga Dina-download</string>
|
<string name="download_queue_error">Di ma-download ang (mga) kabanata. Maaari mo uli itong subukan sa Mga Dina-download</string>
|
||||||
<string name="copy">Kopyahin</string>
|
<string name="copy">Kopyahin</string>
|
||||||
<string name="migrate">Lumipat</string>
|
<string name="migrate">Lumipat</string>
|
||||||
<string name="migration_selection_prompt">Pumili ng paglilipatang pinagkukunan</string>
|
<string name="migration_selection_prompt">Pumili ng paglilipatan</string>
|
||||||
<string name="migration_dialog_what_to_include">Pumili ng data na isasama</string>
|
<string name="migration_dialog_what_to_include">Pumili ng data na isasama</string>
|
||||||
<string name="migration_info">Pindutin para makapili ng lilipatang pinagkukunan</string>
|
<string name="migration_info">Pindutin para makapili ng lilipatang pinagkukunan</string>
|
||||||
<string name="recent_manga_time">Kab. %1$s - %2$s</string>
|
<string name="recent_manga_time">Kab. %1$s - %2$s</string>
|
||||||
@ -445,7 +445,7 @@
|
|||||||
<string name="plan_to_read">Binabalak</string>
|
<string name="plan_to_read">Binabalak</string>
|
||||||
<string name="paused">Hininto</string>
|
<string name="paused">Hininto</string>
|
||||||
<string name="on_hold">Tinigil</string>
|
<string name="on_hold">Tinigil</string>
|
||||||
<string name="completed">Natapos</string>
|
<string name="completed">Tapos na</string>
|
||||||
<string name="dropped">Binitawan</string>
|
<string name="dropped">Binitawan</string>
|
||||||
<string name="currently_reading">Kasalukuyang binabása</string>
|
<string name="currently_reading">Kasalukuyang binabása</string>
|
||||||
<string name="reading">Binabása</string>
|
<string name="reading">Binabása</string>
|
||||||
@ -513,7 +513,7 @@
|
|||||||
<string name="pinned_sources">Naka-pin</string>
|
<string name="pinned_sources">Naka-pin</string>
|
||||||
<string name="last_used_source">Huling ginamit</string>
|
<string name="last_used_source">Huling ginamit</string>
|
||||||
<string name="other_source">Iba pa</string>
|
<string name="other_source">Iba pa</string>
|
||||||
<string name="local_source">Lokál na bukál</string>
|
<string name="local_source">Lokál na pinagkukunan</string>
|
||||||
<string name="http_error_hint">Bisitahin ang site sa WebView</string>
|
<string name="http_error_hint">Bisitahin ang site sa WebView</string>
|
||||||
<string name="no_results_found">Walang resultang nakita</string>
|
<string name="no_results_found">Walang resultang nakita</string>
|
||||||
<string name="no_more_results">Wala na\'ng (mga) resulta</string>
|
<string name="no_more_results">Wala na\'ng (mga) resulta</string>
|
||||||
@ -535,15 +535,15 @@
|
|||||||
<string name="login_success">Naka-login ka na</string>
|
<string name="login_success">Naka-login ka na</string>
|
||||||
<string name="login">Mag-login</string>
|
<string name="login">Mag-login</string>
|
||||||
<string name="show_password">Ipakita ang password</string>
|
<string name="show_password">Ipakita ang password</string>
|
||||||
<string name="password">Password</string>
|
<string name="password">Hudyat (password)</string>
|
||||||
<string name="email">Email address</string>
|
<string name="email">Email address</string>
|
||||||
<string name="username">Sagisag</string>
|
<string name="username">Sagisag (username)</string>
|
||||||
<string name="login_title">Mag-login sa %1$s</string>
|
<string name="login_title">Mag-login sa %1$s</string>
|
||||||
<plurals name="download_queue_summary">
|
<plurals name="download_queue_summary">
|
||||||
<item quantity="one">Isa na lang ang natitira</item>
|
<item quantity="one">Isa na lang ang natitira</item>
|
||||||
<item quantity="other">%1$s na lang ang natitira</item>
|
<item quantity="other">%1$s na lang ang natitira</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="downloaded_only_summary">Sinasala ang lahat ng manga ng Aklatan</string>
|
<string name="downloaded_only_summary">Isalâ ang Aklatan</string>
|
||||||
<string name="label_downloaded_only">Mga na-download lang</string>
|
<string name="label_downloaded_only">Mga na-download lang</string>
|
||||||
<string name="pref_acra_summary">Nakatutulong sa pag-ayos sa mga bug. Walang sensitibong data ang ipapadala</string>
|
<string name="pref_acra_summary">Nakatutulong sa pag-ayos sa mga bug. Walang sensitibong data ang ipapadala</string>
|
||||||
<string name="pref_enable_acra">Ipadala ang mga ulat ng pag-crash</string>
|
<string name="pref_enable_acra">Ipadala ang mga ulat ng pag-crash</string>
|
||||||
@ -559,8 +559,8 @@
|
|||||||
<string name="battery_optimization_disabled">Nakapatay na ang pag-o-optimisa sa baterya</string>
|
<string name="battery_optimization_disabled">Nakapatay na ang pag-o-optimisa sa baterya</string>
|
||||||
<string name="pref_disable_battery_optimization">Patayin ang pag-o-optimisa sa baterya</string>
|
<string name="pref_disable_battery_optimization">Patayin ang pag-o-optimisa sa baterya</string>
|
||||||
<string name="pref_disable_battery_optimization_summary">Nakatutulong sa gawaing-likuran na pagsasapanahon at pag-backup</string>
|
<string name="pref_disable_battery_optimization_summary">Nakatutulong sa gawaing-likuran na pagsasapanahon at pag-backup</string>
|
||||||
<string name="pref_refresh_library_tracking_summary">Inia-update ang estado, iskor, at huling nabásang kabanata mula sa mga serbisyo ng panunundan</string>
|
<string name="pref_refresh_library_tracking_summary">Inia-update ang estado, iskor, at huling nabásang kabanata mula sa mga tagasubaybay (tracking services)</string>
|
||||||
<string name="pref_refresh_library_tracking">Sariwain ang pagsunod</string>
|
<string name="pref_refresh_library_tracking">Sariwain ang pagsubaybay</string>
|
||||||
<string name="pref_refresh_library_covers">Sariwain ang pabalat ng mga manga</string>
|
<string name="pref_refresh_library_covers">Sariwain ang pabalat ng mga manga</string>
|
||||||
<string name="clear_database_completed">Binura na</string>
|
<string name="clear_database_completed">Binura na</string>
|
||||||
<string name="clear_database_confirmation">Sigurado ka ba\? Mawawala ang datos ng mga manga na wala sa Aklatan mo</string>
|
<string name="clear_database_confirmation">Sigurado ka ba\? Mawawala ang datos ng mga manga na wala sa Aklatan mo</string>
|
||||||
@ -584,18 +584,31 @@
|
|||||||
<item quantity="other">Naibalik sa loob ng %1$s na may %2$s (na) mga error</item>
|
<item quantity="other">Naibalik sa loob ng %1$s na may %2$s (na) mga error</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="restore_completed">Naibalik na</string>
|
<string name="restore_completed">Naibalik na</string>
|
||||||
<string name="backup_restore_content">Ginagamit ng Pagbalik ang mga pinagkukunan para makuha ang mga data, maaaring makagastos ka dahil rito.
|
<string name="backup_restore_content">Ginagamit ng Pagbalik ang mga pinagkukunan para kunin ang data, maaari kang makagastos dahil rito.
|
||||||
\n
|
\n
|
||||||
\nSiguraduhin mong na-install mo na ang lahat ng mga kinakailangang dugtong at naka-login ka na sa mga pinagkukunan at serbisyo ng panunundan bago ka magpanumbalik.</string>
|
\nSiguraduhing na-install mo na ang mga lahat ng mga kinakailangang dugtong at naka-login ka na sa lahat ng mga pinagkukunan at tagasubaybay (tracking services) bago mo simulan ang pagbalik.</string>
|
||||||
<string name="restoring_backup">Pinapanumbalik</string>
|
<string name="restoring_backup">Binabalik</string>
|
||||||
<string name="creating_backup_error">Pumalya sa pag-backup</string>
|
<string name="creating_backup_error">Pumalya sa pag-backup</string>
|
||||||
<string name="creating_backup">Bina-backup</string>
|
<string name="creating_backup">Bina-backup</string>
|
||||||
<string name="backup_choice">Anong gusto mong i-backup\?</string>
|
<string name="backup_choice">Anong iba-backup mo\?</string>
|
||||||
<string name="backup_in_progress">Bina-backup na</string>
|
<string name="backup_in_progress">Bina-backup na</string>
|
||||||
<string name="restore_duration">%02d (na) min, %02d (na) seg</string>
|
<string name="restore_duration">%02d (na) min, %02d (na) seg</string>
|
||||||
<plurals name="num_trackers">
|
<plurals name="num_trackers">
|
||||||
<item quantity="one">Isang tagatunton</item>
|
<item quantity="one">Isang tagasubaybay</item>
|
||||||
<item quantity="other">%d (na) tagatunton</item>
|
<item quantity="other">%d (na) tagasubaybay</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="no_pinned_sources">Wala kang naka-pin na pinagkukunan</string>
|
<string name="no_pinned_sources">Wala kang naka-pin na pinagkukunan</string>
|
||||||
|
<string name="group_backup_restore">Pag-backup at Pagbalik</string>
|
||||||
|
<string name="group_downloader">Mga Download</string>
|
||||||
|
<string name="channel_complete">Tapos na</string>
|
||||||
|
<string name="channel_errors">Mga Error</string>
|
||||||
|
<string name="channel_progress">Takbo</string>
|
||||||
|
<string name="download_notifier_download_finish">Tapos na sa pag-download</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Di naka-login sa (mga) tagasubaybay:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Harangan pero ipakita sa Mga Dugtong</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Harangan</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Payagan</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">Mga NSFW</string>
|
||||||
|
<string name="pref_remove_bookmarked_chapters">Burahin ang mga tinandaan</string>
|
||||||
|
<string name="pref_category_delete_chapters">Magbura ng kabanata</string>
|
||||||
</resources>
|
</resources>
|
@ -603,4 +603,5 @@
|
|||||||
<string name="channel_complete">पूर्ण</string>
|
<string name="channel_complete">पूर्ण</string>
|
||||||
<string name="channel_progress">प्रगती</string>
|
<string name="channel_progress">प्रगती</string>
|
||||||
<string name="download_notifier_download_finish">डाउनलोड सम्पन्न हुआ</string>
|
<string name="download_notifier_download_finish">डाउनलोड सम्पन्न हुआ</string>
|
||||||
|
<string name="channel_errors">त्रुटियाँ</string>
|
||||||
</resources>
|
</resources>
|
@ -191,7 +191,7 @@
|
|||||||
<string name="action_select_inverse">Kiválasztás megfordítása</string>
|
<string name="action_select_inverse">Kiválasztás megfordítása</string>
|
||||||
<string name="action_sort_last_checked">Utoljára ellenőrizve</string>
|
<string name="action_sort_last_checked">Utoljára ellenőrizve</string>
|
||||||
<string name="action_menu">Menü</string>
|
<string name="action_menu">Menü</string>
|
||||||
<string name="confirm_exit">A befejezéshez nyomd meg újfent a Vissza gombot!</string>
|
<string name="confirm_exit">A befejezéshez nyomd meg újfent a Vissza gombot</string>
|
||||||
<string name="unlock_app">Tachiyomi feloldása</string>
|
<string name="unlock_app">Tachiyomi feloldása</string>
|
||||||
<string name="information_empty_library">A könyvtárad üres. Adj hozzá új sorozatokat a Böngészőből.</string>
|
<string name="information_empty_library">A könyvtárad üres. Adj hozzá új sorozatokat a Böngészőből.</string>
|
||||||
<string name="information_no_recent">Nincs új frissítés</string>
|
<string name="information_no_recent">Nincs új frissítés</string>
|
||||||
@ -205,7 +205,7 @@
|
|||||||
<string name="download_notifier_page_error">Egy oldal hiányzik a könyvtárból</string>
|
<string name="download_notifier_page_error">Egy oldal hiányzik a könyvtárból</string>
|
||||||
<string name="download_notifier_unknown_error">Egy váratlan hiba miatt nem sikerült letölteni a fejezetet</string>
|
<string name="download_notifier_unknown_error">Egy váratlan hiba miatt nem sikerült letölteni a fejezetet</string>
|
||||||
<string name="download_notifier_title_error">Hiba</string>
|
<string name="download_notifier_title_error">Hiba</string>
|
||||||
<string name="information_webview_outdated">A jobb kompatibilitás érdekében kérlek, frissítsd a WebView alkalmazást!</string>
|
<string name="information_webview_outdated">A jobb kompatibilitás érdekében kérlek, frissítsd a WebView alkalmazást</string>
|
||||||
<plurals name="update_check_notification_ext_updates">
|
<plurals name="update_check_notification_ext_updates">
|
||||||
<item quantity="one">Egy új bővítményfrissítés érhető el</item>
|
<item quantity="one">Egy új bővítményfrissítés érhető el</item>
|
||||||
<item quantity="other">%d bővítményfrissítés érhető el</item>
|
<item quantity="other">%d bővítményfrissítés érhető el</item>
|
||||||
|
@ -592,4 +592,8 @@
|
|||||||
<string name="channel_complete">Lengkap</string>
|
<string name="channel_complete">Lengkap</string>
|
||||||
<string name="channel_progress">Kemajuan</string>
|
<string name="channel_progress">Kemajuan</string>
|
||||||
<string name="download_notifier_download_finish">Unduhan selesai</string>
|
<string name="download_notifier_download_finish">Unduhan selesai</string>
|
||||||
|
<string name="channel_errors">error</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Pelacakan tidak tersinkronisasi di:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Diizinkan</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">Sumber NSFW</string>
|
||||||
</resources>
|
</resources>
|
@ -3,8 +3,8 @@
|
|||||||
<string name="name">Nome</string>
|
<string name="name">Nome</string>
|
||||||
<!-- Activities and fragments labels (toolbar title) -->
|
<!-- Activities and fragments labels (toolbar title) -->
|
||||||
<string name="label_settings">Impostazioni</string>
|
<string name="label_settings">Impostazioni</string>
|
||||||
<string name="label_download_queue">Coda degli scaricamenti</string>
|
<string name="label_download_queue">Coda di download</string>
|
||||||
<string name="label_library">Collezione</string>
|
<string name="label_library">Libreria</string>
|
||||||
<string name="label_recent_manga">Cronologia</string>
|
<string name="label_recent_manga">Cronologia</string>
|
||||||
<string name="label_recent_updates">Aggiornamenti</string>
|
<string name="label_recent_updates">Aggiornamenti</string>
|
||||||
<string name="label_categories">Categorie</string>
|
<string name="label_categories">Categorie</string>
|
||||||
@ -17,7 +17,7 @@
|
|||||||
<string name="action_filter_unread">Non letti</string>
|
<string name="action_filter_unread">Non letti</string>
|
||||||
<string name="action_filter_read">Letti</string>
|
<string name="action_filter_read">Letti</string>
|
||||||
<string name="action_filter_empty">Rimuovi filtri</string>
|
<string name="action_filter_empty">Rimuovi filtri</string>
|
||||||
<string name="action_sort_alpha">In ordine alfabetico</string>
|
<string name="action_sort_alpha">Ordine alfabetico</string>
|
||||||
<string name="action_sort_last_read">Ultimi letti</string>
|
<string name="action_sort_last_read">Ultimi letti</string>
|
||||||
<string name="action_search">Ricerca</string>
|
<string name="action_search">Ricerca</string>
|
||||||
<string name="action_select_all">Seleziona tutto</string>
|
<string name="action_select_all">Seleziona tutto</string>
|
||||||
@ -251,7 +251,7 @@
|
|||||||
<!-- Downloads activity and service -->
|
<!-- Downloads activity and service -->
|
||||||
<string name="download_queue_error">Impossibile scaricare i capitoli. Puoi provare di nuovo nella sezione scaricamento</string>
|
<string name="download_queue_error">Impossibile scaricare i capitoli. Puoi provare di nuovo nella sezione scaricamento</string>
|
||||||
<!-- Library update service notifications -->
|
<!-- Library update service notifications -->
|
||||||
<string name="notification_update_progress">Progressione aggiornamento: %1$d/%2$d</string>
|
<string name="notification_update_progress">Progresso dell\'aggiornamento: %1$d/%2$d</string>
|
||||||
<string name="notification_new_chapters">Nuovi capitoli trovati</string>
|
<string name="notification_new_chapters">Nuovi capitoli trovati</string>
|
||||||
<string name="notification_cover_update_failed">Impossibile aggiornare la copertina</string>
|
<string name="notification_cover_update_failed">Impossibile aggiornare la copertina</string>
|
||||||
<string name="notification_first_add_to_library">Prima di compiere questa azione per favore aggiungi il manga alla libreria</string>
|
<string name="notification_first_add_to_library">Prima di compiere questa azione per favore aggiungi il manga alla libreria</string>
|
||||||
@ -270,15 +270,15 @@
|
|||||||
<string name="update_check_look_for_updates">Ricerca aggiornamenti…</string>
|
<string name="update_check_look_for_updates">Ricerca aggiornamenti…</string>
|
||||||
<!--UpdateCheck Notifications-->
|
<!--UpdateCheck Notifications-->
|
||||||
<string name="update_check_notification_file_download">Scarica aggiornamento</string>
|
<string name="update_check_notification_file_download">Scarica aggiornamento</string>
|
||||||
<string name="update_check_notification_download_in_progress">Scaricamento…</string>
|
<string name="update_check_notification_download_in_progress">Download in corso…</string>
|
||||||
<string name="update_check_notification_download_complete">Scaricamento completato</string>
|
<string name="update_check_notification_download_complete">Download completato</string>
|
||||||
<string name="update_check_notification_download_error">Errore di scaricamento</string>
|
<string name="update_check_notification_download_error">Errore di download</string>
|
||||||
<string name="update_check_notification_update_available">Aggiornamento disponibile!</string>
|
<string name="update_check_notification_update_available">Aggiornamento disponibile!</string>
|
||||||
<!--Content Description-->
|
<!--Content Description-->
|
||||||
<string name="description_cover">Copertina del manga</string>
|
<string name="description_cover">Copertina del manga</string>
|
||||||
<!-- Information Text -->
|
<!-- Information Text -->
|
||||||
<string name="information_no_downloads">Nessuno scaricamento</string>
|
<string name="information_no_downloads">Nessun download in coda</string>
|
||||||
<string name="information_no_recent">Nessun aggiornamento recenti</string>
|
<string name="information_no_recent">Nessun aggiornamento recente</string>
|
||||||
<string name="information_no_recent_manga">Non è stato letto niente di recente</string>
|
<string name="information_no_recent_manga">Non è stato letto niente di recente</string>
|
||||||
<string name="information_empty_library">La tua libreria è vuota. Aggiungi dei contenuti alla tua libreria dalle fonti.</string>
|
<string name="information_empty_library">La tua libreria è vuota. Aggiungi dei contenuti alla tua libreria dalle fonti.</string>
|
||||||
<!-- Download Notification -->
|
<!-- Download Notification -->
|
||||||
@ -340,7 +340,7 @@
|
|||||||
<string name="download_notifier_download_paused">Scaricamento in pausa</string>
|
<string name="download_notifier_download_paused">Scaricamento in pausa</string>
|
||||||
<string name="label_migration">Migrazione etichette</string>
|
<string name="label_migration">Migrazione etichette</string>
|
||||||
<string name="label_extensions">Estensioni</string>
|
<string name="label_extensions">Estensioni</string>
|
||||||
<string name="label_extension_info">Info estensioni</string>
|
<string name="label_extension_info">Info estensione</string>
|
||||||
<string name="action_global_search">Ricerca globale</string>
|
<string name="action_global_search">Ricerca globale</string>
|
||||||
<string name="action_display_download_badge">Indicatore capitoli scaricati</string>
|
<string name="action_display_download_badge">Indicatore capitoli scaricati</string>
|
||||||
<string name="action_reset">Reimposta</string>
|
<string name="action_reset">Reimposta</string>
|
||||||
@ -630,4 +630,5 @@
|
|||||||
<item quantity="one">1 tracciatore</item>
|
<item quantity="one">1 tracciatore</item>
|
||||||
<item quantity="other">%d tracciatori</item>
|
<item quantity="other">%d tracciatori</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="channel_progress">Progresso</string>
|
||||||
</resources>
|
</resources>
|
@ -14,14 +14,14 @@
|
|||||||
<string name="label_backup">バックアップ</string>
|
<string name="label_backup">バックアップ</string>
|
||||||
<string name="action_settings">設定</string>
|
<string name="action_settings">設定</string>
|
||||||
<string name="action_filter">フィルター</string>
|
<string name="action_filter">フィルター</string>
|
||||||
<string name="action_filter_downloaded">ダウンロードした</string>
|
<string name="action_filter_downloaded">ダウンロード済み</string>
|
||||||
<string name="action_filter_bookmarked">お気に入り</string>
|
<string name="action_filter_bookmarked">お気に入り</string>
|
||||||
<string name="action_filter_unread">未読</string>
|
<string name="action_filter_unread">未読</string>
|
||||||
<string name="action_filter_read">既読</string>
|
<string name="action_filter_read">既読</string>
|
||||||
<string name="action_filter_empty">フィルタを削除</string>
|
<string name="action_filter_empty">フィルタを削除</string>
|
||||||
<string name="action_sort_alpha">アルファベット順</string>
|
<string name="action_sort_alpha">アルファベット順</string>
|
||||||
<string name="action_sort_total">すべての章</string>
|
<string name="action_sort_total">章の数順</string>
|
||||||
<string name="action_sort_last_read">最後に読んだ</string>
|
<string name="action_sort_last_read">最後に読んだ日時順</string>
|
||||||
<string name="action_search">検索</string>
|
<string name="action_search">検索</string>
|
||||||
<string name="action_global_search">グローバル検索</string>
|
<string name="action_global_search">グローバル検索</string>
|
||||||
<string name="action_select_all">すべて選択</string>
|
<string name="action_select_all">すべて選択</string>
|
||||||
@ -53,7 +53,7 @@
|
|||||||
<string name="action_open_in_browser">ブラウザで開く</string>
|
<string name="action_open_in_browser">ブラウザで開く</string>
|
||||||
<string name="action_display_mode">表示モード</string>
|
<string name="action_display_mode">表示モード</string>
|
||||||
<string name="action_display">表示</string>
|
<string name="action_display">表示</string>
|
||||||
<string name="action_display_download_badge">バッジをダウンロードする</string>
|
<string name="action_display_download_badge">ダウンロードバッジ</string>
|
||||||
<string name="action_cancel">キャンセル</string>
|
<string name="action_cancel">キャンセル</string>
|
||||||
<string name="action_share">シェア</string>
|
<string name="action_share">シェア</string>
|
||||||
<string name="action_save">保存</string>
|
<string name="action_save">保存</string>
|
||||||
@ -399,7 +399,7 @@
|
|||||||
<string name="want_to_read">読みたい</string>
|
<string name="want_to_read">読みたい</string>
|
||||||
<string name="other_source">他</string>
|
<string name="other_source">他</string>
|
||||||
<string name="label_more">その他</string>
|
<string name="label_more">その他</string>
|
||||||
<string name="action_sort_latest_chapter">最新章</string>
|
<string name="action_sort_latest_chapter">最新章の更新日付順</string>
|
||||||
<string name="action_view_chapters">章を見る</string>
|
<string name="action_view_chapters">章を見る</string>
|
||||||
<string name="action_cancel_all">全てキャンセル</string>
|
<string name="action_cancel_all">全てキャンセル</string>
|
||||||
<string name="pref_theme_mode">ダークモード</string>
|
<string name="pref_theme_mode">ダークモード</string>
|
||||||
@ -439,7 +439,7 @@
|
|||||||
<string name="label_downloaded_only">ダウンロード済みのみ</string>
|
<string name="label_downloaded_only">ダウンロード済みのみ</string>
|
||||||
<string name="check_for_updates">更新を確認</string>
|
<string name="check_for_updates">更新を確認</string>
|
||||||
<string name="licenses">オープンソースライセンス</string>
|
<string name="licenses">オープンソースライセンス</string>
|
||||||
<string name="notices">ビルド通知をプレビュー</string>
|
<string name="notices">プレビュービルドの更新情報</string>
|
||||||
<string name="website">Webサイト</string>
|
<string name="website">Webサイト</string>
|
||||||
<string name="battery_optimization_setting_activity_not_found">デバイス設定を開きませんでした</string>
|
<string name="battery_optimization_setting_activity_not_found">デバイス設定を開きませんでした</string>
|
||||||
<string name="battery_optimization_disabled">バッテリー最適化は既に無効です</string>
|
<string name="battery_optimization_disabled">バッテリー最適化は既に無効です</string>
|
||||||
@ -591,5 +591,6 @@
|
|||||||
<string name="action_global_search_query">グローバルで「%1$s」を探す</string>
|
<string name="action_global_search_query">グローバルで「%1$s」を探す</string>
|
||||||
<string name="pref_category_locale">ロカール</string>
|
<string name="pref_category_locale">ロカール</string>
|
||||||
<string name="pref_category_theme">テーマ</string>
|
<string name="pref_category_theme">テーマ</string>
|
||||||
<string name="action_sort_date_added">日付</string>
|
<string name="action_sort_date_added">ライブラリへの追加日付順</string>
|
||||||
|
<string name="channel_errors">エラー</string>
|
||||||
</resources>
|
</resources>
|
@ -87,7 +87,7 @@
|
|||||||
<string name="action_webview_back">უკან</string>
|
<string name="action_webview_back">უკან</string>
|
||||||
<string name="action_webview_forward">წინ</string>
|
<string name="action_webview_forward">წინ</string>
|
||||||
<string name="action_webview_refresh">განახლება</string>
|
<string name="action_webview_refresh">განახლება</string>
|
||||||
<string name="loading">იტვირთება...</string>
|
<string name="loading">იტვირთება…</string>
|
||||||
<string name="app_not_available">აპლიკაცია არ არის ხელმისაწვდომი</string>
|
<string name="app_not_available">აპლიკაცია არ არის ხელმისაწვდომი</string>
|
||||||
<string name="short_recent_updates">განახლებები</string>
|
<string name="short_recent_updates">განახლებები</string>
|
||||||
<string name="pref_category_general">ზოგადი</string>
|
<string name="pref_category_general">ზოგადი</string>
|
||||||
@ -302,7 +302,7 @@
|
|||||||
<string name="logout_success">გამოსვლა წარმატებით მოხერხდა</string>
|
<string name="logout_success">გამოსვლა წარმატებით მოხერხდა</string>
|
||||||
<string name="invalid_login">შესვლა ვერ მოხერხდა</string>
|
<string name="invalid_login">შესვლა ვერ მოხერხდა</string>
|
||||||
<string name="unknown_error">დაფიქსირდა უცნობი შეცდომა</string>
|
<string name="unknown_error">დაფიქსირდა უცნობი შეცდომა</string>
|
||||||
<string name="library_search_hint">სათაური ან ავტორი...</string>
|
<string name="library_search_hint">სათაური ან ავტორი…</string>
|
||||||
<string name="updating_category">კატეგორია ახლდება</string>
|
<string name="updating_category">კატეგორია ახლდება</string>
|
||||||
<string name="local_source_badge">ლოკალური</string>
|
<string name="local_source_badge">ლოკალური</string>
|
||||||
<string name="confirm_delete_manga">დარწმუნებული ხართ რომ გსურთ წაშალოთ შერჩეული მანგა?</string>
|
<string name="confirm_delete_manga">დარწმუნებული ხართ რომ გსურთ წაშალოთ შერჩეული მანგა?</string>
|
||||||
@ -320,7 +320,7 @@
|
|||||||
<string name="last_used_source">ბოლოს გამოყენებული</string>
|
<string name="last_used_source">ბოლოს გამოყენებული</string>
|
||||||
<string name="invalid_combination">ნაგულისხმევის მონიშვნა შეუძლებელია სხვა კატეგორიასთან ერთად</string>
|
<string name="invalid_combination">ნაგულისხმევის მონიშვნა შეუძლებელია სხვა კატეგორიასთან ერთად</string>
|
||||||
<string name="added_to_library">მანგა დაემატა თქვენს ბიბლიოთეკას</string>
|
<string name="added_to_library">მანგა დაემატა თქვენს ბიბლიოთეკას</string>
|
||||||
<string name="action_global_search_hint">გლობალური ძებნა...</string>
|
<string name="action_global_search_hint">გლობალური ძებნა…</string>
|
||||||
<string name="latest">უკანასკნელი</string>
|
<string name="latest">უკანასკნელი</string>
|
||||||
<string name="browse">დათვალიერება</string>
|
<string name="browse">დათვალიერება</string>
|
||||||
<string name="manga_detail_tab">ინფორმაცია</string>
|
<string name="manga_detail_tab">ინფორმაცია</string>
|
||||||
@ -338,7 +338,8 @@
|
|||||||
<string name="manga_info_expand">მეტი ინფორმაციის ჩვენება</string>
|
<string name="manga_info_expand">მეტი ინფორმაციის ჩვენება</string>
|
||||||
<string name="manga_info_collapse">ნაკლები ინფორმაციის ჩვენება</string>
|
<string name="manga_info_collapse">ნაკლები ინფორმაციის ჩვენება</string>
|
||||||
<string name="delete_downloads_for_manga">გადმოწერილი თავების წაშლა</string>
|
<string name="delete_downloads_for_manga">გადმოწერილი თავების წაშლა</string>
|
||||||
<string name="copied_to_clipboard">დაკოპირებულია ბუფერში:\\n%1$s</string>
|
<string name="copied_to_clipboard">დაკოპირებულია ბუფერში:
|
||||||
|
\n%1$s</string>
|
||||||
<string name="source_not_installed">წყარო არ არის დაინსტალირებული: %1$s</string>
|
<string name="source_not_installed">წყარო არ არის დაინსტალირებული: %1$s</string>
|
||||||
<string name="snack_add_to_library">დავამატო მანგა ბიბლიოთეკაში?</string>
|
<string name="snack_add_to_library">დავამატო მანგა ბიბლიოთეკაში?</string>
|
||||||
<string name="manga_chapters_tab">თავები</string>
|
<string name="manga_chapters_tab">თავები</string>
|
||||||
@ -392,9 +393,9 @@
|
|||||||
<string name="snack_categories_deleted">კატეგორიები წაიშალა</string>
|
<string name="snack_categories_deleted">კატეგორიები წაიშალა</string>
|
||||||
<string name="dialog_with_checkbox_remove_description">ეს წაშლის ამ თავის წაკითხვის თარიღს. დარწმუნებული ხართ?</string>
|
<string name="dialog_with_checkbox_remove_description">ეს წაშლის ამ თავის წაკითხვის თარიღს. დარწმუნებული ხართ?</string>
|
||||||
<string name="picture_saved">სურათი შენახულია</string>
|
<string name="picture_saved">სურათი შენახულია</string>
|
||||||
<string name="saving_picture">სურათი ინახება...</string>
|
<string name="saving_picture">სურათი ინახება</string>
|
||||||
<string name="options">პარამეტრები</string>
|
<string name="options">პარამეტრები</string>
|
||||||
<string name="downloading">გადმოწერა...</string>
|
<string name="downloading">გადმოწერა…</string>
|
||||||
<string name="download_progress">გადმოწერილია %1$d%%</string>
|
<string name="download_progress">გადმოწერილია %1$d%%</string>
|
||||||
<string name="chapter_progress">გვერდი: %1$d</string>
|
<string name="chapter_progress">გვერდი: %1$d</string>
|
||||||
<string name="chapter_subtitle">თავი: %1$d</string>
|
<string name="chapter_subtitle">თავი: %1$d</string>
|
||||||
@ -409,7 +410,7 @@
|
|||||||
<string name="transition_previous">წინა:</string>
|
<string name="transition_previous">წინა:</string>
|
||||||
<string name="transition_no_next">შემდეგი თავი არ არის</string>
|
<string name="transition_no_next">შემდეგი თავი არ არის</string>
|
||||||
<string name="transition_no_previous">წინა თავი არ არის</string>
|
<string name="transition_no_previous">წინა თავი არ არის</string>
|
||||||
<string name="transition_pages_loading">გვერდები იტვირთება...</string>
|
<string name="transition_pages_loading">გვერდები იტვირთება…</string>
|
||||||
<string name="transition_pages_error">გვერდების ჩატვირთვა ვერ მოხერხდა: %1$s</string>
|
<string name="transition_pages_error">გვერდების ჩატვირთვა ვერ მოხერხდა: %1$s</string>
|
||||||
<string name="page_list_empty_error">ვერცერთი გვერდი ვერ მოიძევნა</string>
|
<string name="page_list_empty_error">ვერცერთი გვერდი ვერ მოიძევნა</string>
|
||||||
<string name="updating_library">ბიბლიოთეკის განახლება</string>
|
<string name="updating_library">ბიბლიოთეკის განახლება</string>
|
||||||
@ -427,7 +428,7 @@
|
|||||||
<string name="notification_chapters_single_and_more">თავი %1$s და %2$d მეტი</string>
|
<string name="notification_chapters_single_and_more">თავი %1$s და %2$d მეტი</string>
|
||||||
<string name="notification_chapters_multiple">თავები %1$s</string>
|
<string name="notification_chapters_multiple">თავები %1$s</string>
|
||||||
<string name="notification_cover_update_failed">ვერ მოხერხდა ყდის განახლება</string>
|
<string name="notification_cover_update_failed">ვერ მოხერხდა ყდის განახლება</string>
|
||||||
<string name="notification_first_add_to_library">"გთხოვთ ჯერ დაამატოთ მანგა თქვენს ბიბლიოთეკაში "</string>
|
<string name="notification_first_add_to_library">გთხოვთ ჯერ დაამატოთ მანგა თქვენს ბიბლიოთეკაში</string>
|
||||||
<string name="notification_not_connected_to_ac_title">სინქრონიზაცია გაუქმებულია</string>
|
<string name="notification_not_connected_to_ac_title">სინქრონიზაცია გაუქმებულია</string>
|
||||||
<string name="notification_no_connection_title">სინქრონიზაცია გაუქმებულია</string>
|
<string name="notification_no_connection_title">სინქრონიზაცია გაუქმებულია</string>
|
||||||
<string name="notification_not_connected_to_ac_body">არ არის შეერთებული დენის წყაროსთან</string>
|
<string name="notification_not_connected_to_ac_body">არ არის შეერთებული დენის წყაროსთან</string>
|
||||||
@ -437,10 +438,10 @@
|
|||||||
<string name="file_select_icon">ამოირჩიე მალსახმობის ნიშნაკი</string>
|
<string name="file_select_icon">ამოირჩიე მალსახმობის ნიშნაკი</string>
|
||||||
<string name="update_check_confirm">გადმოწერა</string>
|
<string name="update_check_confirm">გადმოწერა</string>
|
||||||
<string name="update_check_ignore">დაიგნორება</string>
|
<string name="update_check_ignore">დაიგნორება</string>
|
||||||
<string name="update_check_no_new_updates">"განახლება ვერ მოიძებნა "</string>
|
<string name="update_check_no_new_updates">განახლება ვერ მოიძებნა</string>
|
||||||
<string name="update_check_look_for_updates">განახლების ძებნა...</string>
|
<string name="update_check_look_for_updates">განახლების ძებნა…</string>
|
||||||
<string name="update_check_notification_file_download">განახლების გადმოწერა</string>
|
<string name="update_check_notification_file_download">განახლების გადმოწერა</string>
|
||||||
<string name="update_check_notification_download_in_progress">გადმოწერა...</string>
|
<string name="update_check_notification_download_in_progress">გადმოწერა…</string>
|
||||||
<string name="update_check_notification_download_complete">გადმოწერა დასრულებულია</string>
|
<string name="update_check_notification_download_complete">გადმოწერა დასრულებულია</string>
|
||||||
<string name="update_check_notification_download_error">გადმოწერის შეცდომა</string>
|
<string name="update_check_notification_download_error">გადმოწერის შეცდომა</string>
|
||||||
<string name="update_check_notification_update_available">ხელმისაწვდომია ახალი ვერსია!</string>
|
<string name="update_check_notification_update_available">ხელმისაწვდომია ახალი ვერსია!</string>
|
||||||
@ -513,10 +514,16 @@
|
|||||||
<string name="download_notifier_page_error">გვერდი გამოტოვებულია დირექტორიაში</string>
|
<string name="download_notifier_page_error">გვერდი გამოტოვებულია დირექტორიაში</string>
|
||||||
<string name="action_enable_all">ჩართე ყველა</string>
|
<string name="action_enable_all">ჩართე ყველა</string>
|
||||||
<string name="action_disable_all">გამორთე ყველა</string>
|
<string name="action_disable_all">გამორთე ყველა</string>
|
||||||
<string name="secure_screen_summary">"აპლიკაციებს შორის გადართვისას შემადგენლობის დამალვა და სკრინშოტების დაბლოკვა "</string>
|
<string name="secure_screen_summary">აპლიკაციებს შორის გადართვისას შემადგენლობის დამალვა და სკრინშოტების დაბლოკვა</string>
|
||||||
<string name="untrusted_extension_message">ეს დამატება ხელმოწერილია უცნობი სერთიფიკატის მიერ და არ არის აქტივირებული\\n\\nმავნე დამატებას შეუძლია წაიკითხოს შესვლის მონაცემები შენახული ამ აპლიკაციაში ან გაუშვას თავისი კოდი \\n\\nამ სერტიფიკატის ნდობით თქვენ თქვენს თავზე იღებთ რისკებს და პასუხისმგებლობას.</string>
|
<string name="untrusted_extension_message">ეს დამატება ხელმოწერილია უცნობი სერთიფიკატის მიერ და არ არის აქტივირებული\\n\\nმავნე დამატებას შეუძლია
|
||||||
|
\n
|
||||||
|
\nწაიკითხოს შესვლის მონაცემები შენახული ამ აპლიკაციაში ან გაუშვას თავისი კოდი \\n\\nამ სერტიფიკატის ნდობით თქვენ
|
||||||
|
\n
|
||||||
|
\nთქვენს თავზე იღებთ რისკებს და პასუხისმგებლობას.</string>
|
||||||
<string name="tracking_info">ცალმხრივი სინქრონიზაცია თვალყურის სადევნებელ სერვისებში თავების პროგრესის განსაახლებლად. მიადევნე თვალყური ინდივიდუალურ მანგებს მათი ჩანართებიდან</string>
|
<string name="tracking_info">ცალმხრივი სინქრონიზაცია თვალყურის სადევნებელ სერვისებში თავების პროგრესის განსაახლებლად. მიადევნე თვალყური ინდივიდუალურ მანგებს მათი ჩანართებიდან</string>
|
||||||
<string name="backup_restore_content">აღდგენა იყენებს წყაროებს მონაცემების გადმოსაწერად.\\n\\nდარწმუნდი რომ გაქვს დაინსტალირებული ყველა საჭირო დამატება და ხარ დალოგინებული წყაროებში და თვალყურის სადევნებელ სერვისებში ააღდგენამდე.</string>
|
<string name="backup_restore_content">აღდგენა იყენებს წყაროებს მონაცემების გადმოსაწერად.\\n\\nდარწმუნდი რომ გაქვს დაინსტალირებული ყველა
|
||||||
|
\n
|
||||||
|
\nსაჭირო დამატება და ხარ დალოგინებული წყაროებში და თვალყურის სადევნებელ სერვისებში ააღდგენამდე.</string>
|
||||||
<string name="pref_refresh_library_tracking_summary">ანახლებს სტატუსს, შეფასებას და ბოლო თავს წაკითხულს თვალყურის სადევნებელ სერვისებიდან</string>
|
<string name="pref_refresh_library_tracking_summary">ანახლებს სტატუსს, შეფასებას და ბოლო თავს წაკითხულს თვალყურის სადევნებელ სერვისებიდან</string>
|
||||||
<string name="download_notifier_page_ready_error">გვერდი ვერ ჩაიტვირთა</string>
|
<string name="download_notifier_page_ready_error">გვერდი ვერ ჩაიტვირთა</string>
|
||||||
<string name="filter_mode_overlay">გადაფარება</string>
|
<string name="filter_mode_overlay">გადაფარება</string>
|
||||||
|
@ -283,12 +283,12 @@
|
|||||||
<string name="update_check_confirm">다운로드</string>
|
<string name="update_check_confirm">다운로드</string>
|
||||||
<string name="update_check_ignore">무시</string>
|
<string name="update_check_ignore">무시</string>
|
||||||
<string name="update_check_no_new_updates">새로운 업데이트 없음</string>
|
<string name="update_check_no_new_updates">새로운 업데이트 없음</string>
|
||||||
<string name="update_check_look_for_updates">"업데이트를 찾는중 "</string>
|
<string name="update_check_look_for_updates">업데이트를 찾는중…</string>
|
||||||
<string name="update_check_notification_file_download">업데이트 다운로드</string>
|
<string name="update_check_notification_file_download">업데이트 다운로드</string>
|
||||||
<string name="update_check_notification_download_in_progress">다운로드 진행중</string>
|
<string name="update_check_notification_download_in_progress">다운로드 진행중…</string>
|
||||||
<string name="update_check_notification_download_complete">다운로드 완료됨</string>
|
<string name="update_check_notification_download_complete">다운로드 완료됨</string>
|
||||||
<string name="update_check_notification_download_error">다운로드 오류</string>
|
<string name="update_check_notification_download_error">다운로드 오류</string>
|
||||||
<string name="update_check_notification_update_available">업데이트 이용 가능</string>
|
<string name="update_check_notification_update_available">업데이트 이용 가능!</string>
|
||||||
<string name="description_cover">만화 표지</string>
|
<string name="description_cover">만화 표지</string>
|
||||||
<string name="information_no_downloads">다운로드 없음</string>
|
<string name="information_no_downloads">다운로드 없음</string>
|
||||||
<string name="information_no_recent">최신 챕터 없음</string>
|
<string name="information_no_recent">최신 챕터 없음</string>
|
||||||
@ -339,7 +339,7 @@
|
|||||||
<string name="invalid_combination">기본 카테고리는 다른 카테고리와 함께 선택될 수 없습니다</string>
|
<string name="invalid_combination">기본 카테고리는 다른 카테고리와 함께 선택될 수 없습니다</string>
|
||||||
<string name="added_to_library">만화가 서재에 추가되었습니다</string>
|
<string name="added_to_library">만화가 서재에 추가되었습니다</string>
|
||||||
<string name="browse">찾아보기</string>
|
<string name="browse">찾아보기</string>
|
||||||
<string name="manga_not_in_db">이 만화는 데이터베이스에서 제거되었습니다!</string>
|
<string name="manga_not_in_db">이 만화는 데이터베이스에서 제거되었습니다</string>
|
||||||
<string name="licensed">판권작</string>
|
<string name="licensed">판권작</string>
|
||||||
<string name="copied_to_clipboard">클립보드에 %1$s 복사됨</string>
|
<string name="copied_to_clipboard">클립보드에 %1$s 복사됨</string>
|
||||||
<string name="manga_chapter_no_title">제목 없음</string>
|
<string name="manga_chapter_no_title">제목 없음</string>
|
||||||
|
@ -154,8 +154,8 @@
|
|||||||
<string name="color_filter_a_value">A</string>
|
<string name="color_filter_a_value">A</string>
|
||||||
<string name="pref_download_directory">Lokasi muat turun</string>
|
<string name="pref_download_directory">Lokasi muat turun</string>
|
||||||
<string name="pref_download_only_over_wifi">Hanya muat turun melalui Wi-Fi</string>
|
<string name="pref_download_only_over_wifi">Hanya muat turun melalui Wi-Fi</string>
|
||||||
<string name="pref_remove_after_marked_as_read">Padam apabila ditandakan sebagai dibaca</string>
|
<string name="pref_remove_after_marked_as_read">Selepas ditandakan sebagai dibaca secara manual</string>
|
||||||
<string name="pref_remove_after_read">Padam setelah dibaca</string>
|
<string name="pref_remove_after_read">Setelah membaca</string>
|
||||||
<string name="custom_dir">Lokasi tersuai</string>
|
<string name="custom_dir">Lokasi tersuai</string>
|
||||||
<string name="disabled">Dinyahaktifkan</string>
|
<string name="disabled">Dinyahaktifkan</string>
|
||||||
<string name="last_read_chapter">Bab terakhir dibaca</string>
|
<string name="last_read_chapter">Bab terakhir dibaca</string>
|
||||||
@ -592,4 +592,14 @@
|
|||||||
<string name="group_backup_restore">Sandaran dan memulih</string>
|
<string name="group_backup_restore">Sandaran dan memulih</string>
|
||||||
<string name="group_downloader">Muat turun</string>
|
<string name="group_downloader">Muat turun</string>
|
||||||
<string name="channel_complete">Selesai</string>
|
<string name="channel_complete">Selesai</string>
|
||||||
|
<string name="channel_errors">Ralat</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Penjejak yang tidak dilog masuk:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">Sumber NSFW</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Disekat</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Sekat sumber tetapi tunjuk dalam senarai sambungan</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Dibenarkan</string>
|
||||||
|
<string name="pref_remove_bookmarked_chapters">Padam bab yang ditanda</string>
|
||||||
|
<string name="pref_category_delete_chapters">Padam bab</string>
|
||||||
|
<string name="ext_nsfw_warning">Mungkin mengandungi kandungan 18+ tahun keatas</string>
|
||||||
|
<string name="ext_nsfw_short">18+</string>
|
||||||
</resources>
|
</resources>
|
@ -97,7 +97,7 @@
|
|||||||
<string name="charging">Lading</string>
|
<string name="charging">Lading</string>
|
||||||
<string name="pref_start_screen">Startskjerm</string>
|
<string name="pref_start_screen">Startskjerm</string>
|
||||||
<string name="pref_language">Språk</string>
|
<string name="pref_language">Språk</string>
|
||||||
<string name="system_default">Systemforvalg</string>
|
<string name="system_default">Forvalg</string>
|
||||||
<string name="default_category">Forvalgt kategori</string>
|
<string name="default_category">Forvalgt kategori</string>
|
||||||
<string name="default_category_summary">Alltid spør</string>
|
<string name="default_category_summary">Alltid spør</string>
|
||||||
<string name="all_lang">Alle</string>
|
<string name="all_lang">Alle</string>
|
||||||
@ -116,7 +116,7 @@
|
|||||||
<string name="ext_language_info">Språk: %1$s</string>
|
<string name="ext_language_info">Språk: %1$s</string>
|
||||||
<string name="pref_fullscreen">Fullskjermsvisning</string>
|
<string name="pref_fullscreen">Fullskjermsvisning</string>
|
||||||
<string name="pref_lock_orientation">Lås sideretning</string>
|
<string name="pref_lock_orientation">Lås sideretning</string>
|
||||||
<string name="pref_page_transitions">Sideoverganger</string>
|
<string name="pref_page_transitions">Sideovergangsanimasjoner</string>
|
||||||
<string name="pref_show_page_number">Vis sidenummer</string>
|
<string name="pref_show_page_number">Vis sidenummer</string>
|
||||||
<string name="pref_keep_screen_on">Behold skjerm på</string>
|
<string name="pref_keep_screen_on">Behold skjerm på</string>
|
||||||
<string name="pref_reader_navigation">Navigasjon</string>
|
<string name="pref_reader_navigation">Navigasjon</string>
|
||||||
@ -205,21 +205,21 @@
|
|||||||
<string name="creating_backup">Oppretter sikkerhetskopi</string>
|
<string name="creating_backup">Oppretter sikkerhetskopi</string>
|
||||||
<string name="pref_clear_chapter_cache">Tøm kapittelhurtiglager</string>
|
<string name="pref_clear_chapter_cache">Tøm kapittelhurtiglager</string>
|
||||||
<string name="used_cache">Brukt: %1$s</string>
|
<string name="used_cache">Brukt: %1$s</string>
|
||||||
<string name="cache_deleted">Hurtiglager tømt. %1$d filer har blitt slettet.</string>
|
<string name="cache_deleted">Hurtiglager tømt. %1$d filer har blitt slettet</string>
|
||||||
<string name="cache_delete_error">Feil oppstod under tømming av hurtiglager</string>
|
<string name="cache_delete_error">Feil oppstod under tømming av hurtiglager</string>
|
||||||
<string name="pref_clear_cookies">Tøm kaker</string>
|
<string name="pref_clear_cookies">Tøm kaker</string>
|
||||||
<string name="cookies_cleared">Kaker tømt</string>
|
<string name="cookies_cleared">Kaker tømt</string>
|
||||||
<string name="choices_reset">Dialogvinduvalg tilbakestilt</string>
|
<string name="choices_reset">Dialogvinduvalg tilbakestilt</string>
|
||||||
<string name="pref_clear_database">Tøm database</string>
|
<string name="pref_clear_database">Tøm database</string>
|
||||||
<string name="pref_clear_database_summary">Slett manga og kapittel som ikke finnes i biblioteket ditt</string>
|
<string name="pref_clear_database_summary">Slett manga og kapittel som ikke finnes i biblioteket ditt</string>
|
||||||
<string name="clear_database_confirmation">Er du sikker\? Leste kapittel og framdrift for manga som ikke er i biblioteket vil gå tapt.</string>
|
<string name="clear_database_confirmation">Er du sikker\? Leste kapittel og framdrift for manga som ikke er i biblioteket vil gå tapt</string>
|
||||||
<string name="clear_database_completed">Oppføringer slettet</string>
|
<string name="clear_database_completed">Oppføringer slettet</string>
|
||||||
<string name="pref_refresh_library_tracking">Gjenopprett sporingsmetadata</string>
|
<string name="pref_refresh_library_tracking">Gjenopprett sporingsmetadata</string>
|
||||||
<string name="pref_refresh_library_tracking_summary">Oppdaterer status, poengsum og sist leste kapittel fra sporingstjenestene</string>
|
<string name="pref_refresh_library_tracking_summary">Oppdaterer status, poengsum og sist leste kapittel fra sporingstjenestene</string>
|
||||||
<string name="version">Versjon</string>
|
<string name="version">Versjon</string>
|
||||||
<string name="build_time">Byggtid</string>
|
<string name="build_time">Byggtid</string>
|
||||||
<string name="pref_enable_acra">Send kræsjrapporter</string>
|
<string name="pref_enable_acra">Send kræsjrapporter</string>
|
||||||
<string name="pref_acra_summary">Hjelper til med fiksing av feil. Ingen sensitiv data vil bli sendt.</string>
|
<string name="pref_acra_summary">Hjelper til med fiksing av feil. Ingen sensitiv data vil bli sendt</string>
|
||||||
<string name="login_title">Innlogging for %1$s</string>
|
<string name="login_title">Innlogging for %1$s</string>
|
||||||
<string name="username">Brukernavn</string>
|
<string name="username">Brukernavn</string>
|
||||||
<string name="password">Passord</string>
|
<string name="password">Passord</string>
|
||||||
@ -295,7 +295,7 @@
|
|||||||
<string name="track_start_date">Startet</string>
|
<string name="track_start_date">Startet</string>
|
||||||
<string name="track_type">Type</string>
|
<string name="track_type">Type</string>
|
||||||
<string name="track_author">Forfatter</string>
|
<string name="track_author">Forfatter</string>
|
||||||
<string name="error_category_exists">En kategori ved dette navnet finnes allerede.</string>
|
<string name="error_category_exists">En kategori ved dette navnet finnes allerede!</string>
|
||||||
<string name="snack_categories_deleted">Kategorier slettet</string>
|
<string name="snack_categories_deleted">Kategorier slettet</string>
|
||||||
<string name="dialog_with_checkbox_remove_description">Lesningsdato for dette kapittelet vil bli fjernet. Er du sikker\?</string>
|
<string name="dialog_with_checkbox_remove_description">Lesningsdato for dette kapittelet vil bli fjernet. Er du sikker\?</string>
|
||||||
<string name="dialog_with_checkbox_reset">Tilbakestill alle kapittel for denne mangaen</string>
|
<string name="dialog_with_checkbox_reset">Tilbakestill alle kapittel for denne mangaen</string>
|
||||||
@ -335,7 +335,7 @@
|
|||||||
<string name="filter_mode_screen">Skjerm</string>
|
<string name="filter_mode_screen">Skjerm</string>
|
||||||
<string name="label_help">Hjelp</string>
|
<string name="label_help">Hjelp</string>
|
||||||
<string name="action_display_download_badge">Last ned merker</string>
|
<string name="action_display_download_badge">Last ned merker</string>
|
||||||
<string name="pref_library_columns">Bibliotekmanga per rad</string>
|
<string name="pref_library_columns">Elementer per rad</string>
|
||||||
<string name="untrusted_extension_message">Denne utvidelsen ble signert med et usikkert sertifikat, og ble dermed ikke aktivert
|
<string name="untrusted_extension_message">Denne utvidelsen ble signert med et usikkert sertifikat, og ble dermed ikke aktivert
|
||||||
\n
|
\n
|
||||||
\nEn skadelig utvidelse kan lese innloggingsdetaljer lagret i Tachiyomi, eller kjøre ukjent kode.
|
\nEn skadelig utvidelse kan lese innloggingsdetaljer lagret i Tachiyomi, eller kjøre ukjent kode.
|
||||||
@ -348,7 +348,7 @@
|
|||||||
\nForsikre deg om at du har installert alle nødvendige utvidelser og er logget inn i kilder og sporingstjenester før du gjenoppretter.</string>
|
\nForsikre deg om at du har installert alle nødvendige utvidelser og er logget inn i kilder og sporingstjenester før du gjenoppretter.</string>
|
||||||
<string name="confirm_set_image_as_cover">Bruk dette bildet som omslag\?</string>
|
<string name="confirm_set_image_as_cover">Bruk dette bildet som omslag\?</string>
|
||||||
<string name="migration_info">Trykk for å velge kilde å migrere fra</string>
|
<string name="migration_info">Trykk for å velge kilde å migrere fra</string>
|
||||||
<string name="download_queue_error">Kunne ikke laste ned kapitler. Du kan prøve igjen i nedlastingsdelen.</string>
|
<string name="download_queue_error">Kunne ikke laste ned kapitler. Du kan prøve igjen i nedlastingsdelen</string>
|
||||||
<string name="notification_update_progress">Oppdateringsfremdrift: %1$d/%2$d</string>
|
<string name="notification_update_progress">Oppdateringsfremdrift: %1$d/%2$d</string>
|
||||||
<string name="notification_first_add_to_library">Legg til mangaen i biblioteket ditt før du gjør dette</string>
|
<string name="notification_first_add_to_library">Legg til mangaen i biblioteket ditt før du gjør dette</string>
|
||||||
<string name="notification_not_connected_to_ac_title">Synkronisering avbrutt</string>
|
<string name="notification_not_connected_to_ac_title">Synkronisering avbrutt</string>
|
||||||
@ -562,4 +562,14 @@
|
|||||||
<string name="action_sort_descending">Fallende</string>
|
<string name="action_sort_descending">Fallende</string>
|
||||||
<string name="action_download_unread">Last ned uleste kapittel</string>
|
<string name="action_download_unread">Last ned uleste kapittel</string>
|
||||||
<string name="action_sort_date_added">Dato lagt til</string>
|
<string name="action_sort_date_added">Dato lagt til</string>
|
||||||
|
<string name="pref_category_locale">Språk</string>
|
||||||
|
<string name="ext_updates_pending">Oppdateringer som venter</string>
|
||||||
|
<string name="pref_category_reading_mode">Lesemodus</string>
|
||||||
|
<string name="pref_show_reading_mode_summary">Sniktitt av nåværende modus når leseren åpnes</string>
|
||||||
|
<string name="group_backup_restore">Sikkerhetskopier og gjenopprett</string>
|
||||||
|
<string name="group_downloader">Nedlastninger</string>
|
||||||
|
<string name="channel_errors">Feil</string>
|
||||||
|
<string name="channel_complete">Fullført</string>
|
||||||
|
<string name="notification_chapters_single_and_more">Kapittel %1$s og %2$s til</string>
|
||||||
|
<string name="no_pinned_sources">Du har ingen festede kilder</string>
|
||||||
</resources>
|
</resources>
|
@ -253,8 +253,8 @@
|
|||||||
<string name="pref_zoom_start">Zoom startpositie</string>
|
<string name="pref_zoom_start">Zoom startpositie</string>
|
||||||
<string name="rotation_force_portrait">Forceer staand</string>
|
<string name="rotation_force_portrait">Forceer staand</string>
|
||||||
<string name="rotation_force_landscape">Forceer liggend</string>
|
<string name="rotation_force_landscape">Forceer liggend</string>
|
||||||
<string name="pref_remove_after_marked_as_read">Verwijder wanneer gemarkeerd als gelezen</string>
|
<string name="pref_remove_after_marked_as_read">Nadat ze handmatig gemarkeerd zijn als gelezen</string>
|
||||||
<string name="pref_remove_after_read">Verwijder na lezen</string>
|
<string name="pref_remove_after_read">Na het lezen</string>
|
||||||
<string name="disabled">Uitgeschakeld</string>
|
<string name="disabled">Uitgeschakeld</string>
|
||||||
<string name="fourth_to_last">Drie-na-laatste hoofdstuk</string>
|
<string name="fourth_to_last">Drie-na-laatste hoofdstuk</string>
|
||||||
<string name="fifth_to_last">Vier-na-laatste hoofdstuk</string>
|
<string name="fifth_to_last">Vier-na-laatste hoofdstuk</string>
|
||||||
@ -603,4 +603,12 @@
|
|||||||
<string name="channel_complete">Voltooid</string>
|
<string name="channel_complete">Voltooid</string>
|
||||||
<string name="channel_progress">Voortgang</string>
|
<string name="channel_progress">Voortgang</string>
|
||||||
<string name="download_notifier_download_finish">Download voltooid</string>
|
<string name="download_notifier_download_finish">Download voltooid</string>
|
||||||
|
<string name="channel_errors">Fouten</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Niet-ingelogde trackers:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Geblokkeerd</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Blokkeer bron, maar laat wel zien in lijst van extensies</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Toegestaan</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">NSFW-bronnen</string>
|
||||||
|
<string name="pref_remove_bookmarked_chapters">Verwijder hoofdstukken met bladwijzers</string>
|
||||||
|
<string name="pref_category_delete_chapters">Hoofdstukken verwijderen</string>
|
||||||
</resources>
|
</resources>
|
@ -22,7 +22,7 @@
|
|||||||
<string name="action_filter_empty">Remover filtros</string>
|
<string name="action_filter_empty">Remover filtros</string>
|
||||||
<string name="action_sort_alpha">Alfabeticamente</string>
|
<string name="action_sort_alpha">Alfabeticamente</string>
|
||||||
<string name="action_sort_total">Total de capítulos</string>
|
<string name="action_sort_total">Total de capítulos</string>
|
||||||
<string name="action_sort_last_read">Última leitura</string>
|
<string name="action_sort_last_read">Lido por último</string>
|
||||||
<string name="action_search">Pesquisar</string>
|
<string name="action_search">Pesquisar</string>
|
||||||
<string name="action_select_all">Selecionar tudo</string>
|
<string name="action_select_all">Selecionar tudo</string>
|
||||||
<string name="action_mark_as_read">Marcar como lido</string>
|
<string name="action_mark_as_read">Marcar como lido</string>
|
||||||
@ -151,8 +151,8 @@
|
|||||||
<string name="color_filter_a_value">A</string>
|
<string name="color_filter_a_value">A</string>
|
||||||
<string name="pref_download_directory">Local de download</string>
|
<string name="pref_download_directory">Local de download</string>
|
||||||
<string name="pref_download_only_over_wifi">Fazer download apenas via Wi-Fi</string>
|
<string name="pref_download_only_over_wifi">Fazer download apenas via Wi-Fi</string>
|
||||||
<string name="pref_remove_after_marked_as_read">Excluir ao marcar como lido</string>
|
<string name="pref_remove_after_marked_as_read">Após marcado manualmente como lido</string>
|
||||||
<string name="pref_remove_after_read">Excluir após a leitura</string>
|
<string name="pref_remove_after_read">Após a leitura</string>
|
||||||
<string name="custom_dir">Local personalizado</string>
|
<string name="custom_dir">Local personalizado</string>
|
||||||
<string name="disabled">Desativado</string>
|
<string name="disabled">Desativado</string>
|
||||||
<string name="last_read_chapter">Último capítulo lido</string>
|
<string name="last_read_chapter">Último capítulo lido</string>
|
||||||
@ -250,7 +250,7 @@
|
|||||||
<string name="completed">Concluído</string>
|
<string name="completed">Concluído</string>
|
||||||
<string name="dropped">Abandonado</string>
|
<string name="dropped">Abandonado</string>
|
||||||
<string name="on_hold">Em espera</string>
|
<string name="on_hold">Em espera</string>
|
||||||
<string name="plan_to_read">Ler depois</string>
|
<string name="plan_to_read">Planejo ler</string>
|
||||||
<string name="score">Avaliação</string>
|
<string name="score">Avaliação</string>
|
||||||
<string name="title">Título</string>
|
<string name="title">Título</string>
|
||||||
<string name="status">Estado</string>
|
<string name="status">Estado</string>
|
||||||
@ -320,7 +320,7 @@
|
|||||||
<string name="channel_library">Biblioteca</string>
|
<string name="channel_library">Biblioteca</string>
|
||||||
<string name="action_display_download_badge">Selos de disponível offline</string>
|
<string name="action_display_download_badge">Selos de disponível offline</string>
|
||||||
<string name="local_source_badge">Local</string>
|
<string name="local_source_badge">Local</string>
|
||||||
<string name="information_empty_category">Você ainda não tem nenhuma categoria. Toque no botão Adicionar para criar uma para organizar a sua biblioteca.</string>
|
<string name="information_empty_category">Você ainda não tem nenhuma categoria. Toque no botão Adicionar para criar uma e organizar a sua biblioteca.</string>
|
||||||
<string name="label_migration">Migrar</string>
|
<string name="label_migration">Migrar</string>
|
||||||
<string name="label_extensions">Extensões</string>
|
<string name="label_extensions">Extensões</string>
|
||||||
<string name="label_extension_info">Informações da extensão</string>
|
<string name="label_extension_info">Informações da extensão</string>
|
||||||
@ -467,7 +467,7 @@
|
|||||||
<string name="action_oldest">Mais antigos</string>
|
<string name="action_oldest">Mais antigos</string>
|
||||||
<string name="action_move_to_top">Mover para o topo</string>
|
<string name="action_move_to_top">Mover para o topo</string>
|
||||||
<string name="action_move_to_bottom">Mover para o final</string>
|
<string name="action_move_to_bottom">Mover para o final</string>
|
||||||
<string name="action_sort_last_checked">Última verificação</string>
|
<string name="action_sort_last_checked">Último verificado</string>
|
||||||
<string name="pref_enable_automatic_extension_updates">Procurar por atualizações de extensão</string>
|
<string name="pref_enable_automatic_extension_updates">Procurar por atualizações de extensão</string>
|
||||||
<plurals name="update_check_notification_ext_updates">
|
<plurals name="update_check_notification_ext_updates">
|
||||||
<item quantity="one">Atualização de extensão disponível</item>
|
<item quantity="one">Atualização de extensão disponível</item>
|
||||||
@ -603,4 +603,14 @@
|
|||||||
<string name="group_backup_restore">Backup e restauração</string>
|
<string name="group_backup_restore">Backup e restauração</string>
|
||||||
<string name="group_downloader">Downloads</string>
|
<string name="group_downloader">Downloads</string>
|
||||||
<string name="channel_complete">Concluído</string>
|
<string name="channel_complete">Concluído</string>
|
||||||
|
<string name="channel_errors">Erros</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Monitoradores sem login realizado:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">Fontes NSFW</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Bloquear fonte, mas exibi-la na lista de extensões</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Bloqueado</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Permitido</string>
|
||||||
|
<string name="pref_remove_bookmarked_chapters">Excluir capítulos favoritos</string>
|
||||||
|
<string name="pref_category_delete_chapters">Excluir capítulos</string>
|
||||||
|
<string name="ext_nsfw_warning">Pode haver conteúdo para maiores de 18 anos</string>
|
||||||
|
<string name="ext_nsfw_short">18+</string>
|
||||||
</resources>
|
</resources>
|
@ -633,4 +633,6 @@
|
|||||||
<string name="channel_complete">Completo</string>
|
<string name="channel_complete">Completo</string>
|
||||||
<string name="channel_progress">Progresso</string>
|
<string name="channel_progress">Progresso</string>
|
||||||
<string name="download_notifier_download_finish">Transferência concluída</string>
|
<string name="download_notifier_download_finish">Transferência concluída</string>
|
||||||
|
<string name="channel_errors">Erros</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Monitorizadores sem sessão iniciada:</string>
|
||||||
</resources>
|
</resources>
|
@ -49,7 +49,7 @@
|
|||||||
<string name="action_stop">Стоп</string>
|
<string name="action_stop">Стоп</string>
|
||||||
<string name="action_update">Обновить</string>
|
<string name="action_update">Обновить</string>
|
||||||
<string name="action_update_library">Обновить библиотеку</string>
|
<string name="action_update_library">Обновить библиотеку</string>
|
||||||
<string name="all">Всё</string>
|
<string name="all">Все</string>
|
||||||
<string name="backup">Резервная копия</string>
|
<string name="backup">Резервная копия</string>
|
||||||
<string name="black_background">Черный</string>
|
<string name="black_background">Черный</string>
|
||||||
<string name="build_time">Дата сборки</string>
|
<string name="build_time">Дата сборки</string>
|
||||||
@ -192,8 +192,8 @@
|
|||||||
<string name="pref_read_with_volume_keys">Клавиши громкости</string>
|
<string name="pref_read_with_volume_keys">Клавиши громкости</string>
|
||||||
<string name="pref_reader_navigation">Навигация</string>
|
<string name="pref_reader_navigation">Навигация</string>
|
||||||
<string name="pref_reader_theme">Цвет фона</string>
|
<string name="pref_reader_theme">Цвет фона</string>
|
||||||
<string name="pref_remove_after_marked_as_read">Удалить когда отмечена как прочитанная</string>
|
<string name="pref_remove_after_marked_as_read">После того, как было помечено вручную как прочитано</string>
|
||||||
<string name="pref_remove_after_read">Удалять после прочтения</string>
|
<string name="pref_remove_after_read">После прочтения</string>
|
||||||
<string name="pref_rotation_type">Ориентация</string>
|
<string name="pref_rotation_type">Ориентация</string>
|
||||||
<string name="pref_show_page_number">Показывать номер страницы</string>
|
<string name="pref_show_page_number">Показывать номер страницы</string>
|
||||||
<string name="pref_start_screen">Стартовый экран</string>
|
<string name="pref_start_screen">Стартовый экран</string>
|
||||||
@ -621,4 +621,14 @@
|
|||||||
<string name="group_downloader">Загрузки</string>
|
<string name="group_downloader">Загрузки</string>
|
||||||
<string name="channel_complete">Завершено</string>
|
<string name="channel_complete">Завершено</string>
|
||||||
<string name="channel_progress">Прогресс</string>
|
<string name="channel_progress">Прогресс</string>
|
||||||
|
<string name="channel_errors">Ошибки</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Трекеры не авторизованы:</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">NSFW источники</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Заблокировано</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Блокировать источник, но отображать его в списке расширений</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Разрешено</string>
|
||||||
|
<string name="pref_remove_bookmarked_chapters">Удалить главы с закладками</string>
|
||||||
|
<string name="pref_category_delete_chapters">Удалить главы</string>
|
||||||
|
<string name="ext_nsfw_warning">Может содержать контент 18+</string>
|
||||||
|
<string name="ext_nsfw_short">18+</string>
|
||||||
</resources>
|
</resources>
|
447
app/src/main/res/values-sah/strings.xml
Normal file
447
app/src/main/res/values-sah/strings.xml
Normal file
@ -0,0 +1,447 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="action_add">Киллэр</string>
|
||||||
|
<string name="action_edit">Уларыт</string>
|
||||||
|
<string name="action_disable_all">Барытын араар</string>
|
||||||
|
<string name="action_enable_all">Барытын холбоо</string>
|
||||||
|
<string name="action_update_library">Библиотеканы саҥардыы</string>
|
||||||
|
<string name="action_update">Саҥардыы</string>
|
||||||
|
<string name="action_delete">Сотон кэбис</string>
|
||||||
|
<string name="action_remove_bookmark">Кыбытыыны хомуй</string>
|
||||||
|
<string name="action_bookmark">Кыбытыы</string>
|
||||||
|
<string name="action_download_unread">Ааҕыллыбатах түһүмэҕи хачайдаа</string>
|
||||||
|
<string name="action_download">Хачайдаа</string>
|
||||||
|
<string name="action_mark_previous_as_read">Ааспыты аахтым диэн бэлиэтээ</string>
|
||||||
|
<string name="action_mark_as_unread">Аахпатым диэн бэлиэтээ</string>
|
||||||
|
<string name="action_mark_as_read">Аахтым диэн бэлиэтээ</string>
|
||||||
|
<string name="action_select_inverse">Төттөрөтүн тал</string>
|
||||||
|
<string name="action_select_all">Барытын тал</string>
|
||||||
|
<string name="action_global_search">Толору көрдөөһүн</string>
|
||||||
|
<string name="action_search">Көрдөөһүн</string>
|
||||||
|
<string name="action_sort_date_added">Киирбит кэмэ</string>
|
||||||
|
<string name="action_sort_latest_chapter">Бүтэһик түһүмэх</string>
|
||||||
|
<string name="action_sort_last_checked">Бүтэһигинэн көрүллүбүт</string>
|
||||||
|
<string name="action_sort_last_read">Бүтэһигинэн ааҕыллыбыт</string>
|
||||||
|
<string name="action_sort_total">Түһүмэх ахсаанынан</string>
|
||||||
|
<string name="action_sort_alpha">Алпаабыт бэрээдэгинэн</string>
|
||||||
|
<string name="action_filter_empty">Биилтирэни ылыы</string>
|
||||||
|
<string name="action_filter_read">Ааҕыллыбыт</string>
|
||||||
|
<string name="action_filter_unread">Ааҕыллыбатах</string>
|
||||||
|
<string name="action_filter_bookmarked">Кыбытыы</string>
|
||||||
|
<string name="action_filter_downloaded">Хачайдаммыт</string>
|
||||||
|
<string name="action_filter">Биилтирэ</string>
|
||||||
|
<string name="action_menu">Талба</string>
|
||||||
|
<string name="action_settings">Түстэл</string>
|
||||||
|
<string name="confirm_exit">Өссө биирдэ төттөрүнү баттаан, тахсар курдук</string>
|
||||||
|
<string name="unlock_app">Тachiyomi арыйыыта</string>
|
||||||
|
<string name="history">История</string>
|
||||||
|
<string name="track">Кэтээһин</string>
|
||||||
|
<string name="chapters">Түһүмэхтэр</string>
|
||||||
|
<string name="manga">Маанга</string>
|
||||||
|
<string name="categories">Бөлөхтөр</string>
|
||||||
|
<string name="information_empty_category">Эйиэхэ бөлөхтөр суохтар. Эбэр бэлиэни батта, библиотекаҕа саҥа бөлөҕү оҥорорго.</string>
|
||||||
|
<string name="information_empty_library">Эн библиотекан кураанах. Библиотекаҕа айымньыыларыы көрдөөһүнтэн эп.</string>
|
||||||
|
<string name="information_no_recent_manga">Бүтэһик кэмҥэ тугу да аахпатын</string>
|
||||||
|
<string name="information_no_recent">Саҥардыылар суохтар</string>
|
||||||
|
<string name="information_no_downloads">Хачаайдааһын суох</string>
|
||||||
|
<string name="label_help">Көмө</string>
|
||||||
|
<string name="label_extension_info">Кэҥэтии туһунан</string>
|
||||||
|
<string name="label_extensions">Кэҥэтии</string>
|
||||||
|
<string name="label_migration">Көһүү</string>
|
||||||
|
<string name="label_backup">Резервнай куопуйа</string>
|
||||||
|
<string name="label_categories">Бөлөхтөр</string>
|
||||||
|
<string name="label_sources">Төрүттэр</string>
|
||||||
|
<string name="label_recent_manga">Остуоруйа</string>
|
||||||
|
<string name="label_recent_updates">Саҥардыылар</string>
|
||||||
|
<string name="label_library">Библиотека</string>
|
||||||
|
<string name="label_download_queue">Хачаайдааһын уочарата</string>
|
||||||
|
<string name="label_settings">Түстэл</string>
|
||||||
|
<string name="label_more">Өссө</string>
|
||||||
|
<string name="name">Аат</string>
|
||||||
|
<string name="app_name" translatable="false">Tachiyomi</string>
|
||||||
|
<plurals name="num_categories">
|
||||||
|
<item quantity="other">%d бөлөхтөр</item>
|
||||||
|
</plurals>
|
||||||
|
<string name="default_category_summary">Наар ыйыт</string>
|
||||||
|
<string name="default_category">Куолутунан бөлөх</string>
|
||||||
|
<string name="pref_category_library_categories">Бөлөхтөр</string>
|
||||||
|
<string name="pref_library_update_error_notification">Саҥардыы сыаһатын туһунан биллэриилэри көрдөр</string>
|
||||||
|
<string name="pref_library_update_refresh_metadata_summary">Саҥа тас уонна кыра чаастар баалларын, бэрэбиэркэлээ</string>
|
||||||
|
<string name="pref_library_update_refresh_metadata">Метаданнайдары автоматическайдык саҥарт</string>
|
||||||
|
<string name="pref_update_only_non_completed">Бүтэ илик маанганы эрэ, саҥарт</string>
|
||||||
|
<string name="charging">Иитиллэр</string>
|
||||||
|
<string name="wifi">Wi-Fi</string>
|
||||||
|
<string name="pref_library_update_restriction_summary">Усулуобуйалар толоруллубутугар эрэ, саҥарт</string>
|
||||||
|
<string name="pref_library_update_restriction">Библиотека саҥардыытын хааччахтааһын</string>
|
||||||
|
<string name="pref_library_update_prioritization">Библиотека саҥардыытын бэрээдэгэ</string>
|
||||||
|
<string name="update_monthly">Ый аайы</string>
|
||||||
|
<string name="update_weekly">Нэдиэлэ аайы</string>
|
||||||
|
<string name="update_48hour">Икки күн аайы</string>
|
||||||
|
<string name="update_24hour">Күн аайы</string>
|
||||||
|
<string name="update_12hour">Уон икки чаас аайы</string>
|
||||||
|
<string name="update_6hour">Алта чаас аайы</string>
|
||||||
|
<string name="update_3hour">Үс чаас аайы</string>
|
||||||
|
<string name="update_2hour">Икки чаас аайы</string>
|
||||||
|
<string name="update_1hour">Чаас аайы</string>
|
||||||
|
<string name="update_never">Илиинэн</string>
|
||||||
|
<string name="pref_library_update_interval">Библиотека саҥардыытын түргэнэ</string>
|
||||||
|
<string name="pref_category_library_update">Саҥардыылар</string>
|
||||||
|
<string name="pref_jump_to_chapters">Аһаҕас түһүмэххэ көһүү</string>
|
||||||
|
<string name="default_columns">Куолутунан</string>
|
||||||
|
<string name="landscape">Сытыары</string>
|
||||||
|
<string name="portrait">Туруору</string>
|
||||||
|
<string name="pref_library_columns">Маллары кэккэ туруор</string>
|
||||||
|
<string name="pref_category_display">Көрдөр</string>
|
||||||
|
<string name="hide_notification_content">Биллэрии иһин кистээ</string>
|
||||||
|
<string name="secure_screen_summary">Атын эбиликкэ көһөргөр, скриншоту сабаргар, эбилик иһин кистээ</string>
|
||||||
|
<string name="secure_screen">Көмүскэл экрана</string>
|
||||||
|
<plurals name="lock_after_mins">
|
||||||
|
<item quantity="other">%1$s мүнүүтэ кэннэ</item>
|
||||||
|
</plurals>
|
||||||
|
<string name="lock_never">Хаһан да</string>
|
||||||
|
<string name="lock_always">Наар</string>
|
||||||
|
<string name="lock_when_idle">Күүтү эрэһиимигэр сап</string>
|
||||||
|
<string name="lock_with_biometrics">Тарбах суолунан сап</string>
|
||||||
|
<string name="pref_category_security">Көмүскэл</string>
|
||||||
|
<string name="pref_manage_notifications">Биллэриилэри салай</string>
|
||||||
|
<string name="pref_confirm_exit">Тахсыыны бигэргэт</string>
|
||||||
|
<string name="pref_date_format">Даататын формаата</string>
|
||||||
|
<string name="system_default">Куолутунан</string>
|
||||||
|
<string name="pref_language">Тыл</string>
|
||||||
|
<string name="pref_start_screen">Сүрүн экран</string>
|
||||||
|
<string name="theme_dark_amoled">AMOLED хара</string>
|
||||||
|
<string name="theme_dark_blue">Хараҥа күөх</string>
|
||||||
|
<string name="theme_dark_default">Куолутунан</string>
|
||||||
|
<string name="pref_theme_dark">Хараҥа тиэмэ</string>
|
||||||
|
<string name="theme_light_blue">Сырдык күөх</string>
|
||||||
|
<string name="theme_light_default">Куолутунан</string>
|
||||||
|
<string name="pref_theme_light">Сырдык тиэмэ</string>
|
||||||
|
<string name="theme_dark">Холбоммут</string>
|
||||||
|
<string name="theme_light">Араарыллыбыт</string>
|
||||||
|
<string name="theme_system">Системнайы тутуһуҥ</string>
|
||||||
|
<string name="pref_theme_mode">Хараҥа тиэмэ</string>
|
||||||
|
<string name="pref_category_locale">Миэстэтэ</string>
|
||||||
|
<string name="pref_category_theme">Тиэмэ</string>
|
||||||
|
<string name="pref_category_about">Эбии туһунан</string>
|
||||||
|
<string name="pref_category_advanced">Эбии</string>
|
||||||
|
<string name="pref_category_tracking">Кэтээһин</string>
|
||||||
|
<string name="pref_category_downloads">Хачайдаммыттар</string>
|
||||||
|
<string name="pref_category_reader">Ааҕааччы</string>
|
||||||
|
<string name="pref_category_library">Библиотека</string>
|
||||||
|
<string name="pref_category_general">Сүрүн</string>
|
||||||
|
<string name="short_recent_updates">Саҥардыылар</string>
|
||||||
|
<string name="app_not_available">Сыһыарыы кыаллыбат</string>
|
||||||
|
<string name="loading">Холбонуу…</string>
|
||||||
|
<string name="action_webview_refresh">Чэбдигирт</string>
|
||||||
|
<string name="action_webview_forward">Инники</string>
|
||||||
|
<string name="action_webview_back">Төптөрү</string>
|
||||||
|
<string name="action_login">Киир</string>
|
||||||
|
<string name="action_open">Арый</string>
|
||||||
|
<string name="action_restore">Чөлүгэр түһэр</string>
|
||||||
|
<string name="action_create">Оҥор</string>
|
||||||
|
<string name="action_open_log">Программа сурунаалын арый</string>
|
||||||
|
<string name="action_undo">Уларыт</string>
|
||||||
|
<string name="action_reset">Ыраастаа</string>
|
||||||
|
<string name="action_save">Хааллар</string>
|
||||||
|
<string name="action_share">Тарҕат</string>
|
||||||
|
<string name="action_install">Туруор</string>
|
||||||
|
<string name="action_move_to_bottom">Бүтүүгэ көһөр</string>
|
||||||
|
<string name="action_move_to_top">Саҕаланыыга көһөр</string>
|
||||||
|
<string name="action_oldest">Олох урукку</string>
|
||||||
|
<string name="action_newest">Сабыс-саҥа</string>
|
||||||
|
<string name="action_reorganize_by">Саҥаттаан сааһылыы</string>
|
||||||
|
<string name="action_sort_descending">Кыччыырынан</string>
|
||||||
|
<string name="action_sort">Сааһылаа</string>
|
||||||
|
<string name="action_cancel_all">Барытын уларыт</string>
|
||||||
|
<string name="action_cancel">Уларытыы</string>
|
||||||
|
<string name="action_unpin">Уһул</string>
|
||||||
|
<string name="action_pin">Иҥиннэр</string>
|
||||||
|
<string name="action_disable">Араар</string>
|
||||||
|
<string name="action_display_show_tabs">Бөлөхтөр кыбытыктарын көрдөр</string>
|
||||||
|
<string name="action_display_unread_badge">Ааҕыллыбатахтар бэлиэлэрэ</string>
|
||||||
|
<string name="action_display_download_badge">Бэлиэлэри хачайдаа</string>
|
||||||
|
<string name="action_display_comfortable_grid">Табыгастаах илим</string>
|
||||||
|
<string name="action_display_list">испииһэк</string>
|
||||||
|
<string name="action_display_grid">Биир кэлим илим</string>
|
||||||
|
<string name="action_display">Көрдөр</string>
|
||||||
|
<string name="action_display_mode">Көрүнүн уларыт</string>
|
||||||
|
<string name="action_migrate">Көһүү</string>
|
||||||
|
<string name="action_open_in_settings">Түстэлгэ арый</string>
|
||||||
|
<string name="action_open_in_web_view">WebViewга арый</string>
|
||||||
|
<string name="action_open_in_browser">Көрдөөһүнҥэ арый</string>
|
||||||
|
<string name="action_move">Көһөр</string>
|
||||||
|
<string name="action_resume">Салҕаа</string>
|
||||||
|
<string name="action_start">Саҕалаа</string>
|
||||||
|
<string name="action_remove">Суох гын</string>
|
||||||
|
<string name="action_retry">Хатылаа</string>
|
||||||
|
<string name="action_next_chapter">Аныгыскы түһүмэх</string>
|
||||||
|
<string name="action_previous_chapter">Ааспыттанны түһүмэх</string>
|
||||||
|
<string name="action_close">Сап</string>
|
||||||
|
<string name="action_pause">Тохтобул</string>
|
||||||
|
<string name="action_stop">Тохтоо</string>
|
||||||
|
<string name="action_view_chapters">Түһүмэхтэри көр</string>
|
||||||
|
<string name="action_next_unread">Аныгыскы ааҕыллыбатаҕы</string>
|
||||||
|
<string name="action_show_downloaded">Хачайдаммыт</string>
|
||||||
|
<string name="action_sort_down">Кыччыырынан</string>
|
||||||
|
<string name="action_sort_up">Улаатарынан</string>
|
||||||
|
<string name="action_edit_cover">Таһын уларытыы</string>
|
||||||
|
<string name="action_move_category">Бөлө(ххө/хтөргө) киллэр</string>
|
||||||
|
<string name="action_rename_category">Бөлөх аатын уларыт</string>
|
||||||
|
<string name="action_edit_categories">Бөлөхтөрү уларыт</string>
|
||||||
|
<string name="action_add_category">Бөлөҕү киллэр</string>
|
||||||
|
<string name="webtoon_side_padding_25">25%</string>
|
||||||
|
<string name="webtoon_side_padding_20">20%</string>
|
||||||
|
<string name="webtoon_side_padding_15">15%</string>
|
||||||
|
<string name="webtoon_side_padding_10">10%</string>
|
||||||
|
<string name="webtoon_side_padding_0">Тэйиитэ суох</string>
|
||||||
|
<string name="pref_webtoon_side_padding">Ойоҕостон тэйии</string>
|
||||||
|
<string name="pref_category_reading">Ааҕы</string>
|
||||||
|
<string name="pref_category_reading_mode">Ааҕы эрэһиимэ</string>
|
||||||
|
<string name="pref_always_show_chapter_transition">Көһөр түһүмэҕи куруук көрдөр</string>
|
||||||
|
<string name="color_filter_a_value">А</string>
|
||||||
|
<string name="color_filter_b_value">Халлаан күөх</string>
|
||||||
|
<string name="color_filter_g_value">От күөх</string>
|
||||||
|
<string name="color_filter_r_value">Кыһыл</string>
|
||||||
|
<string name="rotation_force_landscape">Сытыары</string>
|
||||||
|
<string name="rotation_force_portrait">Туруору</string>
|
||||||
|
<string name="rotation_lock">Хатаммыт</string>
|
||||||
|
<string name="rotation_free">Босхо</string>
|
||||||
|
<string name="pref_rotation_type">Эргичийии</string>
|
||||||
|
<string name="ext_language_info">Тыл: %1$S</string>
|
||||||
|
<string name="pref_lock_orientation">Эргичийиини хатаа</string>
|
||||||
|
<string name="double_tap_anim_speed_fast">Түргэнник</string>
|
||||||
|
<string name="double_tap_anim_speed_normal">Көннөрү</string>
|
||||||
|
<string name="double_tap_anim_speed_0">Хамсааһына суох</string>
|
||||||
|
<string name="zoom_start_center">Киин</string>
|
||||||
|
<string name="zoom_start_right">Уҥа</string>
|
||||||
|
<string name="zoom_start_left">Хаҥас</string>
|
||||||
|
<string name="zoom_start_automatic">Автоматическай</string>
|
||||||
|
<string name="pref_zoom_start">Улаатыннары маҥнайгы туруга</string>
|
||||||
|
<string name="scale_type_smart_fit">Өйдөөх</string>
|
||||||
|
<string name="scale_type_original_size">Маҥнайгы кээмэй</string>
|
||||||
|
<string name="scale_type_fit_height">Үрдүгүнэн</string>
|
||||||
|
<string name="scale_type_fit_width">Туоратынан</string>
|
||||||
|
<string name="scale_type_stretch">Ууннар</string>
|
||||||
|
<string name="scale_type_fit_screen">Экранынан</string>
|
||||||
|
<string name="pref_image_scale_type">Тарҕаныыта</string>
|
||||||
|
<string name="pref_image_decoder">Дьүһүн быһаарааччыта</string>
|
||||||
|
<string name="pager_viewer">Сирэйдэринэн</string>
|
||||||
|
<string name="vertical_plus_viewer">Тохтообоххо туруору</string>
|
||||||
|
<string name="webtoon_viewer">Webtoon</string>
|
||||||
|
<string name="vertical_viewer">Туруору</string>
|
||||||
|
<string name="right_to_left_viewer">Хаҥас диэки</string>
|
||||||
|
<string name="left_to_right_viewer">Уҥа диэки</string>
|
||||||
|
<string name="default_viewer">Куолутунан</string>
|
||||||
|
<string name="pref_viewer_type">Куолутунан ааҕар эрэһиим</string>
|
||||||
|
<string name="black_background">Хара</string>
|
||||||
|
<string name="gray_background">Бороҥ</string>
|
||||||
|
<string name="white_background">Маҥан</string>
|
||||||
|
<string name="pref_reader_theme">Кэнники өҥ</string>
|
||||||
|
<string name="pref_read_with_long_tap">Уһун баттааһыҥҥа - кэпсэтии</string>
|
||||||
|
<string name="pref_read_with_tapping">Баттааһын</string>
|
||||||
|
<string name="pref_read_with_volume_keys_inverted">Тыас талкыйдарын миэстэлэрин уларыт</string>
|
||||||
|
<string name="pref_read_with_volume_keys">Тыас талкыйдара</string>
|
||||||
|
<string name="pref_reader_navigation">Хамсыы</string>
|
||||||
|
<string name="pref_skip_filtered_chapters">Биилтирэммит түһүмэхтэри көтүт</string>
|
||||||
|
<string name="pref_skip_read_chapters">Ааҕыллыбыт түһүмэхтэри көтүт</string>
|
||||||
|
<string name="pref_keep_screen_on">Экран холбонон турдун</string>
|
||||||
|
<string name="filter_mode_darken">Хараҥатыы</string>
|
||||||
|
<string name="filter_mode_lighten">Сырдатыы</string>
|
||||||
|
<string name="filter_mode_screen">Экран</string>
|
||||||
|
<string name="filter_mode_multiply">Төгүллээһин</string>
|
||||||
|
<string name="filter_mode_overlay">Сабыы</string>
|
||||||
|
<string name="pref_show_reading_mode_summary">Ааҕаччы холбонон турдаҕына, билиҥҥи эрэһиими кылгастык көрдөр</string>
|
||||||
|
<string name="pref_show_reading_mode">Ааҕыы эрэһиимин көрдөр</string>
|
||||||
|
<string name="filter_mode_default">Куолутунан</string>
|
||||||
|
<string name="pref_color_filter_mode">Өҥ биилтирэни олордор эрэһиим</string>
|
||||||
|
<string name="pref_custom_color_filter">Туттааччы өҥ биилтирэ</string>
|
||||||
|
<string name="pref_custom_brightness">Туттааччы сырдыга</string>
|
||||||
|
<string name="pref_crop_borders">Быһыллы кыраныыссата</string>
|
||||||
|
<string name="pref_true_color_summary">Тиэрбэс аҕыйыыр, ол гынан баран улэҕэ дьайар</string>
|
||||||
|
<string name="pref_true_color">32-бит өҥ</string>
|
||||||
|
<string name="pref_show_page_number">Сирэй нүөмэрин көрдөр</string>
|
||||||
|
<string name="pref_double_tap_anim_speed">Иккитэ баттыырга хамсааһын түргэнэ</string>
|
||||||
|
<string name="pref_page_transitions">Хамсааһыннах, сирэй арыйыыта</string>
|
||||||
|
<string name="pref_cutout_short">Быһыллыбыт хонууга баары көрдөр</string>
|
||||||
|
<string name="pref_fullscreen">Толору экран</string>
|
||||||
|
<string name="ext_version_info">Биэрсия: %1$S</string>
|
||||||
|
<string name="unofficial_extension_message">Бу кэҥэтии официальнай Tachiyomi испииһэгиттэн буолбатах.</string>
|
||||||
|
<string name="ext_available">Кыаллар</string>
|
||||||
|
<string name="obsolete_extension_message">Бу кэҥэтии кыаллыбат буолла.</string>
|
||||||
|
<string name="untrusted_extension_message">Бу кэҥэтии эрэлэ суох туоһу суругунан бэлиэтэммит уонна холбоммотох.
|
||||||
|
\n
|
||||||
|
\nКуһаҕан кэҥэтии ханнык баҕар, киирэргэ наадалах даннайдары, устуон сөп уонна бэйэтэ киириэн сөп.
|
||||||
|
\n
|
||||||
|
\nБу туоһу сурукка эрэнэр буоллаххына, бэйэҕин кутталга угаҕын.</string>
|
||||||
|
<string name="untrusted_extension">Эрэлэ суох кэҥэтии</string>
|
||||||
|
<string name="ext_uninstall">Сотон кэбис</string>
|
||||||
|
<string name="ext_untrusted">Эрэлэ суох</string>
|
||||||
|
<string name="ext_unofficial">Официальнайа суох</string>
|
||||||
|
<string name="ext_trust">Эрэллээх</string>
|
||||||
|
<string name="ext_installed">Турда</string>
|
||||||
|
<string name="ext_installing">ТуруорааҺын</string>
|
||||||
|
<string name="ext_downloading">Хачайдааһын</string>
|
||||||
|
<string name="ext_pending">Кэтэһэбит</string>
|
||||||
|
<string name="ext_install">Туруор</string>
|
||||||
|
<string name="ext_obsolete">Эргэрбит</string>
|
||||||
|
<string name="ext_update">Саҥардыы</string>
|
||||||
|
<string name="ext_updates_pending">Саҥардыылары кэтэһэбит</string>
|
||||||
|
<string name="all_lang">Барыта</string>
|
||||||
|
<string name="all">Барыта</string>
|
||||||
|
<string name="pref_library_update_categories">Толору көрдөөһүннэ киирбит бөлөхтөр</string>
|
||||||
|
<string name="pref_clear_cookies">Кукины ырааста</string>
|
||||||
|
<string name="label_network">Ситим</string>
|
||||||
|
<string name="restoring_backup_canceled">Төнүҥнэри тохтоото</string>
|
||||||
|
<string name="restoring_backup_error">Резервнай куопуйа төнүҥнэриитэ туолбата</string>
|
||||||
|
<string name="restoring_backup">Резервнай куопуйаны төнүҥнэри туола турар</string>
|
||||||
|
<string name="restore_in_progress">Төнүҥнэрии туола турар</string>
|
||||||
|
<string name="creating_backup_error">Резервнай куопуйа оҥоһуллубата</string>
|
||||||
|
<string name="creating_backup">Резервнай куопуйа оҥоһуута</string>
|
||||||
|
<string name="backup_choice">Тугу куопуйалаары гынннын\?</string>
|
||||||
|
<string name="backup_in_progress">Резервнай куопуйа оҥоруута туола турар</string>
|
||||||
|
<plurals name="restore_completed_message">
|
||||||
|
<item quantity="other">Туолла %1$sҕа %2$s сыаһалаах</item>
|
||||||
|
</plurals>
|
||||||
|
<string name="restore_duration">%02d мүнүүтэ %02d сөкүүндэ</string>
|
||||||
|
<string name="restore_completed">Төнүҥнэри бүттэ</string>
|
||||||
|
<string name="backup_restore_content">Төнүҥнэриигэ төрүттэр дааннайдара тутталлар, элбэх трафик барыан сөп.
|
||||||
|
\n
|
||||||
|
\nУонна төнүҥнэрии иннигэр, көрүҥ, туох баар наадалах кэтээһин кэҥэтиилэригэр уонна өҥөтүгэр киирдиҥ диэн.</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Трэкэрдар киирбэтилэр:</string>
|
||||||
|
<string name="backup_restore_missing_sources">Суох төрүттэр:</string>
|
||||||
|
<string name="invalid_backup_file_missing_manga">Резервнай куопуйа маангата суох.</string>
|
||||||
|
<string name="invalid_backup_file_missing_data">Биликкэ дааннайдар суохтар.</string>
|
||||||
|
<string name="invalid_backup_file">Резервнай куопуйа алдьаммыт билэтэ</string>
|
||||||
|
<string name="backup_created">Резервнай куопуйа оҥоһуллунна</string>
|
||||||
|
<string name="tracker_not_logged_in">Киирбэтэх: %1$s</string>
|
||||||
|
<string name="source_not_found_name">Төрүт булуллубата: %$1s</string>
|
||||||
|
<string name="pref_backup_slots">Муҥутугар дылы резервнай куопуйалар</string>
|
||||||
|
<string name="pref_backup_interval">Резервнай куопуйа оҥоһуутун түргэнэ</string>
|
||||||
|
<string name="pref_backup_service_category">Автоматическай резервнай куопуйалар</string>
|
||||||
|
<string name="pref_backup_directory">Резервнай куопуйа сурунаала</string>
|
||||||
|
<string name="pref_restore_backup_summ">Библиотеканы резервнай куопуйа билэтиттэн төнүҥнэрии</string>
|
||||||
|
<string name="pref_restore_backup">Резервнай куопуйаны куолутунан туруоруу</string>
|
||||||
|
<string name="pref_create_backup_summ">Билиҥни бибилиотеканы төнүннэрэргэ туттуохха сөп</string>
|
||||||
|
<string name="pref_create_backup">Резервнай куопуйаны оҥоруу</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_blocked">Хаамнаммыт</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed_multisource">Төрүтү хаамна, ол да буоллар кэҥэтии испииһигэр көрдөр</string>
|
||||||
|
<string name="pref_allow_nsfw_sources_allowed">Көҥүллэммит</string>
|
||||||
|
<string name="pref_allow_nsfw_sources">NSFW төрүттэр</string>
|
||||||
|
<string name="backup">Резервнай куопуйа</string>
|
||||||
|
<string name="pref_search_pinned_sources_only">Сыһыарыллыбыт эрэ төрүттэри киллэр</string>
|
||||||
|
<string name="pref_enable_automatic_extension_updates">Кэҥэтии саҥардыыларын баар буолутун бэрэбиэркэлээһин</string>
|
||||||
|
<string name="tracking_info">Биир өттүттэн мэнэйдэһии, кэтээһин өҥөлөргө баар түһүмэхтэр туруктарын саҥардыыга. Маанга туспа суругун кэтээһинин
|
||||||
|
\nтүстэлгэ уларыт.</string>
|
||||||
|
<string name="services">Өҥөлөр</string>
|
||||||
|
<string name="pref_auto_update_manga_sync">Түһүмэх туругун ааҕы кэннэ саҥарт</string>
|
||||||
|
<string name="pref_download_new_categories">Хачайдааһыҥҥа киирбит бөлөхтөр</string>
|
||||||
|
<string name="pref_download_new">Саҥа түһүмэхтэри хачайдаа</string>
|
||||||
|
<string name="fifth_to_last">Бүтэһик түһүмэхтэн бэһис</string>
|
||||||
|
<string name="fourth_to_last">Бүтэһик түһүмэхтэн төрдүс</string>
|
||||||
|
<string name="third_to_last">Бүтэһик түһүмэхтэн үһүс</string>
|
||||||
|
<string name="second_to_last">Бүтэһик түһүмэх иннинээҕи</string>
|
||||||
|
<string name="last_read_chapter">Бүтэһигинэн ааҕыллыбыт түһүмэх</string>
|
||||||
|
<string name="disabled">Араарыллыбыт</string>
|
||||||
|
<string name="custom_dir">Туттааччы ыйдарыыта</string>
|
||||||
|
<string name="pref_remove_after_read">Ааҕы кэннэ</string>
|
||||||
|
<string name="pref_remove_after_marked_as_read">Ааҕыллыбыт диэн суруллубутун кэннэ</string>
|
||||||
|
<string name="pref_download_only_over_wifi">Wi-Fi эрэ баар буоллаҕына хачайдаа</string>
|
||||||
|
<string name="pref_download_directory">Хачайдааһын сурунаала</string>
|
||||||
|
<string name="pref_dns_over_https_summary">Уларыйыы киирэрин гына сыһыарыыны хос холбоо</string>
|
||||||
|
<string name="cache_delete_error">Кээс сотторуутугар сыыһааһын буолла</string>
|
||||||
|
<string name="cache_deleted">Кээс ыраастанна. %1$d билэ сотторуллубут этэ</string>
|
||||||
|
<string name="used_cache">Туттуллубут: %1$s</string>
|
||||||
|
<string name="pref_clear_chapter_cache">Түһүмэх кээһин ыраастааһын</string>
|
||||||
|
<string name="label_data">Билим</string>
|
||||||
|
<string name="cookies_cleared">Куки ыраастанна</string>
|
||||||
|
<string name="clear_database_confirmation">Эрэллэххин дуо\? Ааҕыллыбыт түһүмэхтэр уонна библиотекаҕа суох маанга туруга сүтүө</string>
|
||||||
|
<string name="pref_clear_database_summary">Эн библиотекаҕар суох маанга остуоруйатын сотторуу</string>
|
||||||
|
<string name="pref_clear_database">Билим олоҕо ыраастааһына</string>
|
||||||
|
<string name="choices_reset">Кэпсэтии түстэлэ ыраастанна</string>
|
||||||
|
<string name="pref_disable_battery_optimization">Батарея тупсарыытын араарыы</string>
|
||||||
|
<string name="pref_refresh_library_tracking_summary">Туругу, ахсааны уонна бүтэһик ааҕыллыбыт түһүмэҕи кэтээн көрөр өҥөлөртөн саҥардыы</string>
|
||||||
|
<string name="pref_refresh_library_tracking">Кэтээһини чэбдигирии</string>
|
||||||
|
<string name="pref_refresh_library_covers">Библиотекаҕа баар маанга таһын чэбдигирии</string>
|
||||||
|
<string name="clear_database_completed">Дааннайдар сотуллубуттар</string>
|
||||||
|
<string name="pref_disable_battery_optimization_summary">Библиотека уонна резервнай куопуйатыгар кэннинээҕи саҥардыытыгар көмөлөһөр</string>
|
||||||
|
<string name="battery_optimization_setting_activity_not_found">Устройства түстэлэ сатаан арыллыбата</string>
|
||||||
|
<string name="battery_optimization_disabled">Батарея тупсуруута араарыллынна</string>
|
||||||
|
<string name="group_backup_restore">Резервнай куопуйаны оҥоруу уонна төнүҥнэрии</string>
|
||||||
|
<string name="file_select_backup">Резервнай куопуйа билимин талыы</string>
|
||||||
|
<string name="notices">Инники биэрсиялар бэлиэтэ</string>
|
||||||
|
<string name="whats_new">Туох саҥа баарый</string>
|
||||||
|
<string name="build_time">Тахсыбыт кэмэ</string>
|
||||||
|
<string name="version">Биэрсия</string>
|
||||||
|
<string name="website">Үөп сир</string>
|
||||||
|
<string name="licenses">Аһаҕас төрүттээх лицензиялар</string>
|
||||||
|
<string name="updated_version">v%1$s дылы саҥарданна</string>
|
||||||
|
<string name="check_for_updates">Саҥардыы баар буолуутун бэрэбиэркэлээһин</string>
|
||||||
|
<string name="action_global_search_hint">Толору көрдөөһүн…</string>
|
||||||
|
<string name="added_to_library">Бу маанга библиотекаҕа киирбитэ</string>
|
||||||
|
<string name="invalid_combination">Куолунунан сылдьар бөлөх ураты бөлөҕү кытта талыллыбат</string>
|
||||||
|
<string name="pinned_sources">Иҥиннэриллибит</string>
|
||||||
|
<string name="last_used_source">Бүтэһигинэн туттуллубут</string>
|
||||||
|
<string name="other_source">Атыттар</string>
|
||||||
|
<string name="local_source">Локальнай төрүт</string>
|
||||||
|
<string name="http_error_hint">Үөп сири WebView\'га көрүн</string>
|
||||||
|
<string name="no_results_found">Түмүк суох</string>
|
||||||
|
<string name="no_more_results">Эбии түмүк суох</string>
|
||||||
|
<string name="no_valid_sources">Баһаалыста биир эмит төрүтү холбоон</string>
|
||||||
|
<string name="select_source">Төрүтү тал</string>
|
||||||
|
<string name="source_requires_login">Бу төрүт киирини көрдүүр</string>
|
||||||
|
<string name="tabs_header">Кыбытыктар</string>
|
||||||
|
<string name="badges_header">Бэлиэлэр</string>
|
||||||
|
<string name="also_delete_chapters">Хачайдаммыт түһүмэхтэри эмиэ соттор</string>
|
||||||
|
<string name="confirm_delete_manga">Талыллыбыт маанганы сотторорго эрэллээххин дуо\?</string>
|
||||||
|
<string name="local_source_badge">Локальнай</string>
|
||||||
|
<string name="updating_category">Бөлөх саҥардыыта</string>
|
||||||
|
<string name="library_search_hint">Айымньы эбэтэр суручааччы аата…</string>
|
||||||
|
<string name="unknown_error">Биллибэт сыыһыы</string>
|
||||||
|
<string name="invalid_login">Сатаан киирбэтин</string>
|
||||||
|
<string name="logout_success">Эн таҕыстын</string>
|
||||||
|
<string name="logout">Тахсыы</string>
|
||||||
|
<string name="logout_title">%1$s\'тан тахсаҕын\?</string>
|
||||||
|
<string name="login_success">Киирдин</string>
|
||||||
|
<string name="login">Киири</string>
|
||||||
|
<string name="show_password">Аһарыгы көрдөрүү</string>
|
||||||
|
<string name="password">Аһарык</string>
|
||||||
|
<string name="email">Эл.пуoчта аадырыһа</string>
|
||||||
|
<string name="username">Туттааччы аата</string>
|
||||||
|
<string name="login_title">%1$s\'га киири</string>
|
||||||
|
<plurals name="download_queue_summary">
|
||||||
|
<item quantity="other">%1$s хаалла</item>
|
||||||
|
</plurals>
|
||||||
|
<string name="downloaded_only_summary">Библиотекаҕа баар маанганы барытын биилтирдээһин</string>
|
||||||
|
<string name="label_downloaded_only">Хачайдаммыт эрэ</string>
|
||||||
|
<string name="pref_acra_summary">Ханнык баҕар сыаһалары көннөрөргө көмөлөһөр. Бэйэ дааннайдар ылыллыбаттар</string>
|
||||||
|
<string name="pref_enable_acra">Охтуу туһунан отчуоту ыытыы</string>
|
||||||
|
<string name="delete_downloads_for_manga">Хачайдаммыт түһүмэхтэри сотторобут\?</string>
|
||||||
|
<plurals name="manga_num_chapters">
|
||||||
|
<item quantity="other">%1$s түһүмэх</item>
|
||||||
|
</plurals>
|
||||||
|
<string name="manga_info_collapse">Кырата</string>
|
||||||
|
<string name="manga_info_expand">Эбии</string>
|
||||||
|
<string name="manga_info_about_label">Маанга туһунан</string>
|
||||||
|
<string name="manga_removed_library">Библиотекаттан ылылынна</string>
|
||||||
|
<string name="manga_added_library">Библиотекаҕа киирдэ</string>
|
||||||
|
<string name="manga_info_full_title_label">Айымньы аата</string>
|
||||||
|
<string name="remove_from_library">Библиотекаттан ыл</string>
|
||||||
|
<string name="in_library">Библиотекаҕа</string>
|
||||||
|
<string name="add_to_library">Библиотекаҕа киллэр</string>
|
||||||
|
<string name="licensed">Лицензиялаах</string>
|
||||||
|
<string name="unknown_status">Биллибэт турук</string>
|
||||||
|
<string name="unknown">Биллибэт</string>
|
||||||
|
<string name="ongoing">Салҕанар</string>
|
||||||
|
<string name="track_author">Суруйааччы</string>
|
||||||
|
<string name="unknown_author">Биллибэт суруйааччы</string>
|
||||||
|
<string name="description">Ойуулааһын</string>
|
||||||
|
<string name="manga_detail_tab">Маанга туһунан</string>
|
||||||
|
<string name="manga_not_in_db">Бу маанга билим баазатыттан сотторуллубут.</string>
|
||||||
|
<string name="no_pinned_sources">Эһиэхэ иҥиннэллибит төрүттэр суохтар</string>
|
||||||
|
<string name="local_source_help_guide">Төрүт локальнай салалтата</string>
|
||||||
|
<string name="browse">Көрдөөһүн</string>
|
||||||
|
<string name="latest">Тиһэх</string>
|
||||||
|
<string name="action_global_search_query">\"%1$s\" толору көрдөө</string>
|
||||||
|
<string name="pref_remove_bookmarked_chapters">Кыбытыылах түһүмэхтэри соттор</string>
|
||||||
|
<string name="pref_category_delete_chapters">Түһүмэхтэри соттор</string>
|
||||||
|
</resources>
|
@ -603,4 +603,6 @@
|
|||||||
<string name="channel_complete">Acabada</string>
|
<string name="channel_complete">Acabada</string>
|
||||||
<string name="channel_progress">Progressu</string>
|
<string name="channel_progress">Progressu</string>
|
||||||
<string name="download_notifier_download_finish">Iscarrigamentu acabadu</string>
|
<string name="download_notifier_download_finish">Iscarrigamentu acabadu</string>
|
||||||
|
<string name="channel_errors">Errores</string>
|
||||||
|
<string name="backup_restore_missing_trackers">Arrastadores a sos cales no as fatu atzessu:</string>
|
||||||
</resources>
|
</resources>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user