Compare commits

...

18 Commits

Author SHA1 Message Date
Koitharu
009eb9fe44 Fix recursive sync 2023-06-17 18:34:08 +03:00
Koitharu
fc8a5ccd9f Fix Continue button in offline mode 2023-06-17 18:20:57 +03:00
Koitharu
91f46de547 Fix crashes 2023-06-17 18:11:09 +03:00
Koitharu
d548993e14 Move syncronization to main process 2023-06-17 17:36:12 +03:00
Koitharu
4f32664b33 Respect system PowerSave mode 2023-06-17 16:12:14 +03:00
Koitharu
71b14a3aa8 Refactor FilterOwner 2023-06-17 16:05:08 +03:00
Isira Seneviratne
183a61272e Use ParcelCompat methods. 2023-06-17 15:50:08 +03:00
Koitharu
f1f208ad15 Merge branch 'master' into devel 2023-06-16 10:45:12 +03:00
Koitharu
c6983d794c Fix tablet portrait layout 2023-06-16 10:42:19 +03:00
Koitharu
8228153c83 Fix tablet portrait layout 2023-06-16 10:41:32 +03:00
Koitharu
844bd13a07 Fix filter lifecycle 2023-06-16 10:23:40 +03:00
Koitharu
60a5620134 Schedule workers only on demand 2023-06-16 09:50:02 +03:00
qrynill
dd09a39077 Translated using Weblate (Norwegian Nynorsk)
Currently translated at 82.0% (357 of 435 strings)

Co-authored-by: qrynill <tryvseu@tuta.io>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/nn/
Translation: Kotatsu/Strings
2023-06-15 09:45:35 +03:00
MaSHiNiK
1511bd3279 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (435 of 435 strings)

Co-authored-by: MaSHiNiK <infinitymashinik456@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/uk/
Translation: Kotatsu/Strings
2023-06-15 09:45:35 +03:00
Макар Разин
259c335607 Translated using Weblate (Turkish)
Currently translated at 100.0% (435 of 435 strings)

Translated using Weblate (French)

Currently translated at 100.0% (435 of 435 strings)

Translated using Weblate (Portuguese)

Currently translated at 86.2% (375 of 435 strings)

Translated using Weblate (Belarusian)

Currently translated at 100.0% (435 of 435 strings)

Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/be/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/fr/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/pt/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/tr/
Translation: Kotatsu/Strings
2023-06-15 09:45:07 +03:00
Nick New
86367b6d3b Added translation using Weblate (Thai)
Co-authored-by: Nick New <newblackseries@gmail.com>
2023-06-15 09:45:07 +03:00
Koitharu
19b893738d Update parsers 2023-06-15 09:44:35 +03:00
Koitharu
d817ae0394 Fix Cloudflare bypass 2023-06-15 09:43:14 +03:00
56 changed files with 1566 additions and 1352 deletions

View File

@@ -15,8 +15,8 @@ android {
applicationId 'org.koitharu.kotatsu' applicationId 'org.koitharu.kotatsu'
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 33 targetSdkVersion 33
versionCode 553 versionCode 555
versionName '5.2.1' versionName '5.2.3'
generatedDensities = [] generatedDensities = []
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -79,7 +79,7 @@ afterEvaluate {
} }
dependencies { dependencies {
//noinspection GradleDependency //noinspection GradleDependency
implementation('com.github.KotatsuApp:kotatsu-parsers:f732582d55') { implementation('com.github.KotatsuApp:kotatsu-parsers:86a82970fc') {
exclude group: 'org.json', module: 'json' exclude group: 'org.json', module: 'json'
} }
@@ -104,6 +104,7 @@ dependencies {
//noinspection LifecycleAnnotationProcessorWithJava8 //noinspection LifecycleAnnotationProcessorWithJava8
kapt 'androidx.lifecycle:lifecycle-compiler:2.6.1' kapt 'androidx.lifecycle:lifecycle-compiler:2.6.1'
// TODO https://issuetracker.google.com/issues/254846063
implementation 'androidx.work:work-runtime-ktx:2.8.1' implementation 'androidx.work:work-runtime-ktx:2.8.1'
//noinspection GradleDependency //noinspection GradleDependency
implementation('com.google.guava:guava:32.0.0-android') { implementation('com.google.guava:guava:32.0.0-android') {

View File

@@ -188,8 +188,7 @@
<service <service
android:name="org.koitharu.kotatsu.sync.ui.favourites.FavouritesSyncService" android:name="org.koitharu.kotatsu.sync.ui.favourites.FavouritesSyncService"
android:exported="false" android:exported="false"
android:label="@string/favourites" android:label="@string/favourites">
android:process=":sync">
<intent-filter> <intent-filter>
<action android:name="android.content.SyncAdapter" /> <action android:name="android.content.SyncAdapter" />
</intent-filter> </intent-filter>
@@ -200,8 +199,7 @@
<service <service
android:name="org.koitharu.kotatsu.sync.ui.history.HistorySyncService" android:name="org.koitharu.kotatsu.sync.ui.history.HistorySyncService"
android:exported="false" android:exported="false"
android:label="@string/history" android:label="@string/history">
android:process=":sync">
<intent-filter> <intent-filter>
<action android:name="android.content.SyncAdapter" /> <action android:name="android.content.SyncAdapter" />
</intent-filter> </intent-filter>

View File

@@ -28,6 +28,7 @@ import org.koitharu.kotatsu.local.data.LocalMangaRepository
import org.koitharu.kotatsu.local.data.PagesCache import org.koitharu.kotatsu.local.data.PagesCache
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.reader.domain.PageLoader import org.koitharu.kotatsu.reader.domain.PageLoader
import org.koitharu.kotatsu.settings.work.WorkScheduleManager
import javax.inject.Inject import javax.inject.Inject
@HiltAndroidApp @HiltAndroidApp
@@ -51,6 +52,9 @@ class KotatsuApp : Application(), Configuration.Provider {
@Inject @Inject
lateinit var appValidator: AppValidator lateinit var appValidator: AppValidator
@Inject
lateinit var workScheduleManager: WorkScheduleManager
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
ACRA.errorReporter.putCustomData("isOriginalApp", appValidator.isOriginalApp.toString()) ACRA.errorReporter.putCustomData("isOriginalApp", appValidator.isOriginalApp.toString())
@@ -63,6 +67,7 @@ class KotatsuApp : Application(), Configuration.Provider {
processLifecycleScope.launch(Dispatchers.Default) { processLifecycleScope.launch(Dispatchers.Default) {
setupDatabaseObservers() setupDatabaseObservers()
} }
workScheduleManager.init()
WorkServiceStopHelper(applicationContext).setup() WorkServiceStopHelper(applicationContext).setup()
} }

View File

@@ -13,13 +13,13 @@ private const val SERVER_CLOUDFLARE = "cloudflare"
class CloudFlareInterceptor : Interceptor { class CloudFlareInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response { override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request() val response = chain.proceed(chain.request())
val response = chain.proceed(request)
if (response.code == HTTP_FORBIDDEN || response.code == HTTP_UNAVAILABLE) { if (response.code == HTTP_FORBIDDEN || response.code == HTTP_UNAVAILABLE) {
if (response.header(HEADER_SERVER)?.startsWith(SERVER_CLOUDFLARE) == true) { if (response.header(HEADER_SERVER)?.startsWith(SERVER_CLOUDFLARE) == true) {
val request = response.request
response.closeQuietly() response.closeQuietly()
throw CloudFlareProtectedException( throw CloudFlareProtectedException(
url = response.request.url.toString(), url = request.url.toString(),
headers = request.headers, headers = request.headers,
) )
} }

View File

@@ -61,6 +61,10 @@ class WorkManagerHelper(
return workManagerImpl.getWorkInfoById(id).await() return workManagerImpl.getWorkInfoById(id).await()
} }
suspend fun getUniqueWorkInfoByName(name: String): List<WorkInfo> {
return workManagerImpl.getWorkInfosForUniqueWork(name).await().orEmpty()
}
suspend fun updateWork(request: WorkRequest): WorkManager.UpdateResult { suspend fun updateWork(request: WorkRequest): WorkManager.UpdateResult {
return workManagerImpl.updateWork(request).await() return workManagerImpl.updateWork(request).await()
} }

View File

@@ -6,6 +6,7 @@ import android.app.ActivityManager.MemoryInfo
import android.app.ActivityOptions import android.app.ActivityOptions
import android.content.Context import android.content.Context
import android.content.Context.ACTIVITY_SERVICE import android.content.Context.ACTIVITY_SERVICE
import android.content.Context.POWER_SERVICE
import android.content.ContextWrapper import android.content.ContextWrapper
import android.content.OperationApplicationException import android.content.OperationApplicationException
import android.content.SharedPreferences import android.content.SharedPreferences
@@ -17,6 +18,7 @@ import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.PowerManager
import android.provider.Settings import android.provider.Settings
import android.view.View import android.view.View
import android.view.ViewPropertyAnimator import android.view.ViewPropertyAnimator
@@ -51,6 +53,9 @@ import kotlin.math.roundToLong
val Context.activityManager: ActivityManager? val Context.activityManager: ActivityManager?
get() = getSystemService(ACTIVITY_SERVICE) as? ActivityManager get() = getSystemService(ACTIVITY_SERVICE) as? ActivityManager
val Context.powerManager: PowerManager?
get() = getSystemService(POWER_SERVICE) as? PowerManager
fun String.toUriOrNull() = if (isEmpty()) null else Uri.parse(this) fun String.toUriOrNull() = if (isEmpty()) null else Uri.parse(this)
suspend fun CoroutineWorker.trySetForeground(): Boolean = runCatchingCancellable { suspend fun CoroutineWorker.trySetForeground(): Boolean = runCatchingCancellable {
@@ -141,6 +146,10 @@ fun Context.isLowRamDevice(): Boolean {
return activityManager?.isLowRamDevice ?: false return activityManager?.isLowRamDevice ?: false
} }
fun Context.isPowerSaveMode(): Boolean {
return powerManager?.isPowerSaveMode == true
}
val Context.ramAvailable: Long val Context.ramAvailable: Long
get() { get() {
val result = MemoryInfo() val result = MemoryInfo()

View File

@@ -9,8 +9,8 @@ import android.os.Parcel
import android.os.Parcelable import android.os.Parcelable
import androidx.core.content.IntentCompat import androidx.core.content.IntentCompat
import androidx.core.os.BundleCompat import androidx.core.os.BundleCompat
import androidx.core.os.ParcelCompat
import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.SavedStateHandle
import org.koitharu.kotatsu.core.model.parcelable.ParcelableMangaTags
import java.io.Serializable import java.io.Serializable
// https://issuetracker.google.com/issues/240585930 // https://issuetracker.google.com/issues/240585930
@@ -36,11 +36,11 @@ inline fun <reified T : Serializable> Bundle.getSerializableCompat(key: String):
} }
inline fun <reified T : Parcelable> Parcel.readParcelableCompat(): T? { inline fun <reified T : Parcelable> Parcel.readParcelableCompat(): T? {
return readParcelable(ParcelableMangaTags::class.java.classLoader) as T? return ParcelCompat.readParcelable(this, T::class.java.classLoader, T::class.java)
} }
inline fun <reified T : Serializable> Parcel.readSerializableCompat(): T? { inline fun <reified T : Serializable> Parcel.readSerializableCompat(): T? {
return readSerializable() as T? return ParcelCompat.readSerializable(this, T::class.java.classLoader, T::class.java)
} }
inline fun <reified T : Serializable> Bundle.requireSerializable(key: String): T { inline fun <reified T : Serializable> Bundle.requireSerializable(key: String): T {
@@ -49,12 +49,6 @@ inline fun <reified T : Serializable> Bundle.requireSerializable(key: String): T
} }
} }
inline fun <reified T : Parcelable> Bundle.requireParcelable(key: String): T {
return checkNotNull(getParcelableCompat(key)) {
"Parcelable of type \"${T::class.java.name}\" not found at \"$key\""
}
}
fun <T> SavedStateHandle.require(key: String): T { fun <T> SavedStateHandle.require(key: String): T {
return checkNotNull(get(key)) { return checkNotNull(get(key)) {
"Value $key not found in SavedStateHandle or has a wrong type" "Value $key not found in SavedStateHandle or has a wrong type"

View File

@@ -10,12 +10,13 @@ import org.koitharu.kotatsu.core.model.parcelable.ParcelableMangaChapters
import org.koitharu.kotatsu.core.parser.MangaRepository import org.koitharu.kotatsu.core.parser.MangaRepository
import org.koitharu.kotatsu.core.ui.CoroutineIntentService import org.koitharu.kotatsu.core.ui.CoroutineIntentService
import org.koitharu.kotatsu.core.util.ext.getParcelableExtraCompat import org.koitharu.kotatsu.core.util.ext.getParcelableExtraCompat
import org.koitharu.kotatsu.core.util.ext.isPowerSaveMode
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import org.koitharu.kotatsu.history.data.HistoryRepository import org.koitharu.kotatsu.history.data.HistoryRepository
import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@@ -115,6 +116,9 @@ class MangaPrefetchService : CoroutineIntentService() {
if (source == MangaSource.LOCAL) { if (source == MangaSource.LOCAL) {
return false return false
} }
if (context.isPowerSaveMode()) {
return false
}
val entryPoint = EntryPointAccessors.fromApplication(context, PrefetchCompanionEntryPoint::class.java) val entryPoint = EntryPointAccessors.fromApplication(context, PrefetchCompanionEntryPoint::class.java)
return entryPoint.contentCache.isCachingEnabled && entryPoint.settings.isContentPrefetchEnabled return entryPoint.contentCache.isCachingEnabled && entryPoint.settings.isContentPrefetchEnabled
} }

View File

@@ -22,6 +22,7 @@ import org.koitharu.kotatsu.core.parser.MangaDataRepository
import org.koitharu.kotatsu.core.parser.MangaRepository import org.koitharu.kotatsu.core.parser.MangaRepository
import org.koitharu.kotatsu.core.ui.widgets.ChipsView import org.koitharu.kotatsu.core.ui.widgets.ChipsView
import org.koitharu.kotatsu.core.util.ext.lifecycleScope import org.koitharu.kotatsu.core.util.ext.lifecycleScope
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import org.koitharu.kotatsu.core.util.ext.require import org.koitharu.kotatsu.core.util.ext.require
import org.koitharu.kotatsu.filter.ui.model.FilterHeaderModel import org.koitharu.kotatsu.filter.ui.model.FilterHeaderModel
import org.koitharu.kotatsu.filter.ui.model.FilterItem import org.koitharu.kotatsu.filter.ui.model.FilterItem
@@ -35,7 +36,6 @@ import org.koitharu.kotatsu.parsers.util.SuspendLazy
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.remotelist.ui.RemoteListFragment import org.koitharu.kotatsu.remotelist.ui.RemoteListFragment
import org.koitharu.kotatsu.search.domain.MangaSearchRepository import org.koitharu.kotatsu.search.domain.MangaSearchRepository
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import java.text.Collator import java.text.Collator
import java.util.LinkedList import java.util.LinkedList
import java.util.Locale import java.util.Locale
@@ -49,7 +49,7 @@ class FilterCoordinator @Inject constructor(
dataRepository: MangaDataRepository, dataRepository: MangaDataRepository,
private val searchRepository: MangaSearchRepository, private val searchRepository: MangaSearchRepository,
lifecycle: ViewModelLifecycle, lifecycle: ViewModelLifecycle,
) : FilterOwner { ) : MangaFilter {
private val coroutineScope = lifecycle.lifecycleScope private val coroutineScope = lifecycle.lifecycleScope
private val repository = mangaRepositoryFactory.create(savedStateHandle.require(RemoteListFragment.ARG_SOURCE)) private val repository = mangaRepositoryFactory.create(savedStateHandle.require(RemoteListFragment.ARG_SOURCE))

View File

@@ -19,9 +19,8 @@ import com.google.android.material.R as materialR
class FilterHeaderFragment : BaseFragment<FragmentFilterHeaderBinding>(), ChipsView.OnChipClickListener { class FilterHeaderFragment : BaseFragment<FragmentFilterHeaderBinding>(), ChipsView.OnChipClickListener {
private val owner by lazy(LazyThreadSafetyMode.NONE) { private val filter: MangaFilter
FilterOwner.from(requireActivity()) get() = (requireActivity() as FilterOwner).filter
}
override fun onCreateViewBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFilterHeaderBinding { override fun onCreateViewBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFilterHeaderBinding {
return FragmentFilterHeaderBinding.inflate(inflater, container, false) return FragmentFilterHeaderBinding.inflate(inflater, container, false)
@@ -30,7 +29,7 @@ class FilterHeaderFragment : BaseFragment<FragmentFilterHeaderBinding>(), ChipsV
override fun onViewBindingCreated(binding: FragmentFilterHeaderBinding, savedInstanceState: Bundle?) { override fun onViewBindingCreated(binding: FragmentFilterHeaderBinding, savedInstanceState: Bundle?) {
super.onViewBindingCreated(binding, savedInstanceState) super.onViewBindingCreated(binding, savedInstanceState)
binding.chipsTags.onChipClickListener = this binding.chipsTags.onChipClickListener = this
owner.header.observe(viewLifecycleOwner, ::onDataChanged) filter.header.observe(viewLifecycleOwner, ::onDataChanged)
} }
override fun onWindowInsetsChanged(insets: Insets) = Unit override fun onWindowInsetsChanged(insets: Insets) = Unit
@@ -40,7 +39,7 @@ class FilterHeaderFragment : BaseFragment<FragmentFilterHeaderBinding>(), ChipsV
if (tag == null) { if (tag == null) {
FilterSheetFragment.show(parentFragmentManager) FilterSheetFragment.show(parentFragmentManager)
} else { } else {
owner.onTagItemClick(FilterItem.Tag(tag, !chip.isChecked)) filter.onTagItemClick(FilterItem.Tag(tag, !chip.isChecked))
} }
} }

View File

@@ -1,32 +1,6 @@
package org.koitharu.kotatsu.filter.ui package org.koitharu.kotatsu.filter.ui
import androidx.fragment.app.Fragment interface FilterOwner {
import androidx.fragment.app.FragmentActivity
import kotlinx.coroutines.flow.StateFlow
import org.koitharu.kotatsu.core.util.ext.values
import org.koitharu.kotatsu.filter.ui.model.FilterHeaderModel
import org.koitharu.kotatsu.list.ui.model.ListModel
import org.koitharu.kotatsu.parsers.model.MangaTag
interface FilterOwner : OnFilterChangedListener { val filter: MangaFilter
val filterItems: StateFlow<List<ListModel>>
val header: StateFlow<FilterHeaderModel>
fun applyFilter(tags: Set<MangaTag>)
companion object {
fun from(activity: FragmentActivity): FilterOwner {
for (f in activity.supportFragmentManager.fragments) {
return find(f) ?: continue
}
error("Cannot find FilterOwner")
}
fun find(fragment: Fragment): FilterOwner? {
return fragment.viewModelStore.values.firstNotNullOfOrNull { it as? FilterOwner }
}
}
} }

View File

@@ -21,20 +21,17 @@ class FilterSheetFragment :
AdaptiveSheetCallback, AdaptiveSheetCallback,
AsyncListDiffer.ListListener<ListModel> { AsyncListDiffer.ListListener<ListModel> {
private val owner by lazy(LazyThreadSafetyMode.NONE) {
FilterOwner.from(requireActivity())
}
override fun onCreateViewBinding(inflater: LayoutInflater, container: ViewGroup?): SheetFilterBinding { override fun onCreateViewBinding(inflater: LayoutInflater, container: ViewGroup?): SheetFilterBinding {
return SheetFilterBinding.inflate(inflater, container, false) return SheetFilterBinding.inflate(inflater, container, false)
} }
override fun onViewBindingCreated(binding: SheetFilterBinding, savedInstanceState: Bundle?) { override fun onViewBindingCreated(binding: SheetFilterBinding, savedInstanceState: Bundle?) {
super.onViewBindingCreated(binding, savedInstanceState) super.onViewBindingCreated(binding, savedInstanceState)
val filter = (requireActivity() as FilterOwner).filter
addSheetCallback(this) addSheetCallback(this)
val adapter = FilterAdapter(owner, this) val adapter = FilterAdapter(filter, this)
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
owner.filterItems.observe(viewLifecycleOwner, adapter::setItems) filter.filterItems.observe(viewLifecycleOwner, adapter::setItems)
if (dialog == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (dialog == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
binding.recyclerView.scrollIndicators = 0 binding.recyclerView.scrollIndicators = 0

View File

@@ -0,0 +1,15 @@
package org.koitharu.kotatsu.filter.ui
import kotlinx.coroutines.flow.StateFlow
import org.koitharu.kotatsu.filter.ui.model.FilterHeaderModel
import org.koitharu.kotatsu.list.ui.model.ListModel
import org.koitharu.kotatsu.parsers.model.MangaTag
interface MangaFilter : OnFilterChangedListener {
val filterItems: StateFlow<List<ListModel>>
val header: StateFlow<FilterHeaderModel>
fun applyFilter(tags: Set<MangaTag>)
}

View File

@@ -45,6 +45,13 @@ class HistoryRepository @Inject constructor(
return entity.manga.toManga(entity.tags.toMangaTags()) return entity.manga.toManga(entity.tags.toMangaTags())
} }
fun observeLast(): Flow<Manga?> {
return db.historyDao.observeAll(1).map {
val first = it.firstOrNull()
first?.manga?.toManga(first.tags.toMangaTags())
}
}
fun observeAll(): Flow<List<Manga>> { fun observeAll(): Flow<List<Manga>> {
return db.historyDao.observeAll().mapItems { return db.historyDao.observeAll().mapItems {
it.manga.toManga(it.tags.toMangaTags()) it.manga.toManga(it.tags.toMangaTags())

View File

@@ -1,13 +1,15 @@
package org.koitharu.kotatsu.history.domain package org.koitharu.kotatsu.history.domain
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import org.koitharu.kotatsu.core.util.ext.processLifecycleScope import org.koitharu.kotatsu.core.util.ext.processLifecycleScope
import org.koitharu.kotatsu.history.data.HistoryRepository import org.koitharu.kotatsu.history.data.HistoryRepository
import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.reader.ui.ReaderState import org.koitharu.kotatsu.reader.ui.ReaderState
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import javax.inject.Inject import javax.inject.Inject
class HistoryUpdateUseCase @Inject constructor( class HistoryUpdateUseCase @Inject constructor(
@@ -30,7 +32,9 @@ class HistoryUpdateUseCase @Inject constructor(
percent: Float percent: Float
) = processLifecycleScope.launch(Dispatchers.Default) { ) = processLifecycleScope.launch(Dispatchers.Default) {
runCatchingCancellable { runCatchingCancellable {
invoke(manga, readerState, percent) withContext(NonCancellable) {
invoke(manga, readerState, percent)
}
}.onFailure { }.onFailure {
it.printStackTraceDebug() it.printStackTraceDebug()
} }

View File

@@ -17,15 +17,20 @@ import org.koitharu.kotatsu.core.util.ext.addMenuProvider
import org.koitharu.kotatsu.core.util.ext.observeEvent import org.koitharu.kotatsu.core.util.ext.observeEvent
import org.koitharu.kotatsu.core.util.ext.withArgs import org.koitharu.kotatsu.core.util.ext.withArgs
import org.koitharu.kotatsu.databinding.FragmentListBinding import org.koitharu.kotatsu.databinding.FragmentListBinding
import org.koitharu.kotatsu.filter.ui.FilterOwner
import org.koitharu.kotatsu.filter.ui.FilterSheetFragment import org.koitharu.kotatsu.filter.ui.FilterSheetFragment
import org.koitharu.kotatsu.filter.ui.MangaFilter
import org.koitharu.kotatsu.list.ui.MangaListFragment import org.koitharu.kotatsu.list.ui.MangaListFragment
import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.remotelist.ui.RemoteListFragment import org.koitharu.kotatsu.remotelist.ui.RemoteListFragment
class LocalListFragment : MangaListFragment() { class LocalListFragment : MangaListFragment(), FilterOwner {
override val viewModel by viewModels<LocalListViewModel>() override val viewModel by viewModels<LocalListViewModel>()
override val filter: MangaFilter
get() = viewModel
override fun onViewBindingCreated(binding: FragmentListBinding, savedInstanceState: Bundle?) { override fun onViewBindingCreated(binding: FragmentListBinding, savedInstanceState: Bundle?) {
super.onViewBindingCreated(binding, savedInstanceState) super.onViewBindingCreated(binding, savedInstanceState)
addMenuProvider(LocalListMenuProvider(this::onEmptyActionClick)) addMenuProvider(LocalListMenuProvider(this::onEmptyActionClick))

View File

@@ -9,6 +9,7 @@ import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager import androidx.work.WorkManager
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import androidx.work.await
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import org.koitharu.kotatsu.local.data.LocalMangaRepository import org.koitharu.kotatsu.local.data.LocalMangaRepository
@@ -33,7 +34,7 @@ class LocalStorageCleanupWorker @AssistedInject constructor(
private const val TAG = "cleanup" private const val TAG = "cleanup"
fun enqueue(context: Context) { suspend fun enqueue(context: Context) {
val constraints = Constraints.Builder() val constraints = Constraints.Builder()
.setRequiresBatteryNotLow(true) .setRequiresBatteryNotLow(true)
.build() .build()
@@ -42,7 +43,7 @@ class LocalStorageCleanupWorker @AssistedInject constructor(
.addTag(TAG) .addTag(TAG)
.setBackoffCriteria(BackoffPolicy.LINEAR, 1, TimeUnit.MINUTES) .setBackoffCriteria(BackoffPolicy.LINEAR, 1, TimeUnit.MINUTES)
.build() .build()
WorkManager.getInstance(context).enqueueUniqueWork(TAG, ExistingWorkPolicy.KEEP, request) WorkManager.getInstance(context).enqueueUniqueWork(TAG, ExistingWorkPolicy.KEEP, request).await()
} }
} }
} }

View File

@@ -0,0 +1,31 @@
package org.koitharu.kotatsu.main.domain
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import org.koitharu.kotatsu.core.os.NetworkState
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.prefs.observeAsFlow
import org.koitharu.kotatsu.history.data.HistoryRepository
import org.koitharu.kotatsu.parsers.model.MangaSource
import javax.inject.Inject
class ReadingResumeEnabledUseCase @Inject constructor(
private val networkState: NetworkState,
private val historyRepository: HistoryRepository,
private val settings: AppSettings,
) {
operator fun invoke(): Flow<Boolean> = settings.observeAsFlow(AppSettings.KEY_INCOGNITO_MODE) {
isIncognitoModeEnabled
}.flatMapLatest { incognito ->
if (incognito) {
flowOf(false)
} else {
combine(networkState, historyRepository.observeLast()) { isOnline, last ->
last != null && (isOnline || last.source == MangaSource.LOCAL)
}
}
}
}

View File

@@ -69,8 +69,6 @@ import org.koitharu.kotatsu.search.ui.suggestion.SearchSuggestionViewModel
import org.koitharu.kotatsu.settings.newsources.NewSourcesDialogFragment import org.koitharu.kotatsu.settings.newsources.NewSourcesDialogFragment
import org.koitharu.kotatsu.settings.onboard.OnboardDialogFragment import org.koitharu.kotatsu.settings.onboard.OnboardDialogFragment
import org.koitharu.kotatsu.shelf.ui.ShelfFragment import org.koitharu.kotatsu.shelf.ui.ShelfFragment
import org.koitharu.kotatsu.suggestions.ui.SuggestionsWorker
import org.koitharu.kotatsu.tracker.work.TrackWorker
import javax.inject.Inject import javax.inject.Inject
import com.google.android.material.R as materialR import com.google.android.material.R as materialR
@@ -321,8 +319,6 @@ class MainActivity :
} }
} }
withContext(Dispatchers.Default) { withContext(Dispatchers.Default) {
TrackWorker.setup(applicationContext)
SuggestionsWorker.setup(applicationContext)
LocalStorageCleanupWorker.enqueue(applicationContext) LocalStorageCleanupWorker.enqueue(applicationContext)
} }
withResumed { withResumed {

View File

@@ -97,7 +97,7 @@ class MainNavigationDelegate(
} }
private fun onNavigationItemSelected(@IdRes itemId: Int): Boolean { private fun onNavigationItemSelected(@IdRes itemId: Int): Boolean {
setPrimaryFragment( return setPrimaryFragment(
when (itemId) { when (itemId) {
R.id.nav_shelf -> ShelfFragment.newInstance() R.id.nav_shelf -> ShelfFragment.newInstance()
R.id.nav_explore -> ExploreFragment.newInstance() R.id.nav_explore -> ExploreFragment.newInstance()
@@ -106,7 +106,6 @@ class MainNavigationDelegate(
else -> return false else -> return false
}, },
) )
return true
} }
private fun getItemId(fragment: Fragment) = when (fragment) { private fun getItemId(fragment: Fragment) = when (fragment) {
@@ -117,13 +116,17 @@ class MainNavigationDelegate(
else -> 0 else -> 0
} }
private fun setPrimaryFragment(fragment: Fragment) { private fun setPrimaryFragment(fragment: Fragment): Boolean {
if (fragmentManager.isStateSaved) {
return false
}
fragmentManager.beginTransaction() fragmentManager.beginTransaction()
.setReorderingAllowed(true) .setReorderingAllowed(true)
.replace(R.id.container, fragment, TAG_PRIMARY) .replace(R.id.container, fragment, TAG_PRIMARY)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.commit() .commit()
onFragmentChanged(fragment, fromUser = true) onFragmentChanged(fragment, fromUser = true)
return true
} }
private fun onFragmentChanged(fragment: Fragment, fromUser: Boolean) { private fun onFragmentChanged(fragment: Fragment, fromUser: Boolean) {

View File

@@ -13,12 +13,12 @@ import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.exceptions.EmptyHistoryException import org.koitharu.kotatsu.core.exceptions.EmptyHistoryException
import org.koitharu.kotatsu.core.github.AppUpdateRepository import org.koitharu.kotatsu.core.github.AppUpdateRepository
import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.prefs.observeAsFlow
import org.koitharu.kotatsu.core.prefs.observeAsStateFlow import org.koitharu.kotatsu.core.prefs.observeAsStateFlow
import org.koitharu.kotatsu.core.ui.BaseViewModel import org.koitharu.kotatsu.core.ui.BaseViewModel
import org.koitharu.kotatsu.core.util.ext.MutableEventFlow import org.koitharu.kotatsu.core.util.ext.MutableEventFlow
import org.koitharu.kotatsu.core.util.ext.call import org.koitharu.kotatsu.core.util.ext.call
import org.koitharu.kotatsu.history.data.HistoryRepository import org.koitharu.kotatsu.history.data.HistoryRepository
import org.koitharu.kotatsu.main.domain.ReadingResumeEnabledUseCase
import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.tracker.domain.TrackingRepository import org.koitharu.kotatsu.tracker.domain.TrackingRepository
import javax.inject.Inject import javax.inject.Inject
@@ -29,16 +29,12 @@ class MainViewModel @Inject constructor(
private val appUpdateRepository: AppUpdateRepository, private val appUpdateRepository: AppUpdateRepository,
trackingRepository: TrackingRepository, trackingRepository: TrackingRepository,
settings: AppSettings, settings: AppSettings,
readingResumeEnabledUseCase: ReadingResumeEnabledUseCase,
) : BaseViewModel() { ) : BaseViewModel() {
val onOpenReader = MutableEventFlow<Manga>() val onOpenReader = MutableEventFlow<Manga>()
val isResumeEnabled = combine( val isResumeEnabled = readingResumeEnabledUseCase().stateIn(
historyRepository.observeHasItems(),
settings.observeAsFlow(AppSettings.KEY_INCOGNITO_MODE) { isIncognitoModeEnabled },
) { hasItems, incognito ->
hasItems && !incognito
}.stateIn(
scope = viewModelScope + Dispatchers.Default, scope = viewModelScope + Dispatchers.Default,
started = SharingStarted.WhileSubscribed(5000), started = SharingStarted.WhileSubscribed(5000),
initialValue = false, initialValue = false,

View File

@@ -34,6 +34,8 @@ import org.koitharu.kotatsu.core.util.FileSize
import org.koitharu.kotatsu.core.util.RetainedLifecycleCoroutineScope import org.koitharu.kotatsu.core.util.RetainedLifecycleCoroutineScope
import org.koitharu.kotatsu.core.util.ext.ensureSuccess import org.koitharu.kotatsu.core.util.ext.ensureSuccess
import org.koitharu.kotatsu.core.util.ext.isNotEmpty import org.koitharu.kotatsu.core.util.ext.isNotEmpty
import org.koitharu.kotatsu.core.util.ext.isPowerSaveMode
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import org.koitharu.kotatsu.core.util.ext.ramAvailable import org.koitharu.kotatsu.core.util.ext.ramAvailable
import org.koitharu.kotatsu.core.util.ext.withProgress import org.koitharu.kotatsu.core.util.ext.withProgress
import org.koitharu.kotatsu.core.util.progress.ProgressDeferred import org.koitharu.kotatsu.core.util.progress.ProgressDeferred
@@ -42,7 +44,6 @@ import org.koitharu.kotatsu.local.data.PagesCache
import org.koitharu.kotatsu.parsers.model.MangaPage import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.reader.ui.pager.ReaderPage import org.koitharu.kotatsu.reader.ui.pager.ReaderPage
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import java.io.File import java.io.File
import java.util.LinkedList import java.util.LinkedList
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
@@ -83,7 +84,10 @@ class PageLoader @Inject constructor(
} }
fun isPrefetchApplicable(): Boolean { fun isPrefetchApplicable(): Boolean {
return repository is RemoteMangaRepository && settings.isPagesPreloadEnabled && !isLowRam() return repository is RemoteMangaRepository
&& settings.isPagesPreloadEnabled
&& !context.isPowerSaveMode()
&& !isLowRam()
} }
@AnyThread @AnyThread

View File

@@ -15,7 +15,9 @@ import org.koitharu.kotatsu.core.ui.list.ListSelectionController
import org.koitharu.kotatsu.core.util.ext.addMenuProvider import org.koitharu.kotatsu.core.util.ext.addMenuProvider
import org.koitharu.kotatsu.core.util.ext.withArgs import org.koitharu.kotatsu.core.util.ext.withArgs
import org.koitharu.kotatsu.databinding.FragmentListBinding import org.koitharu.kotatsu.databinding.FragmentListBinding
import org.koitharu.kotatsu.filter.ui.FilterOwner
import org.koitharu.kotatsu.filter.ui.FilterSheetFragment import org.koitharu.kotatsu.filter.ui.FilterSheetFragment
import org.koitharu.kotatsu.filter.ui.MangaFilter
import org.koitharu.kotatsu.list.ui.MangaListFragment import org.koitharu.kotatsu.list.ui.MangaListFragment
import org.koitharu.kotatsu.main.ui.owners.AppBarOwner import org.koitharu.kotatsu.main.ui.owners.AppBarOwner
import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaSource
@@ -23,10 +25,13 @@ import org.koitharu.kotatsu.search.ui.SearchActivity
import org.koitharu.kotatsu.settings.SettingsActivity import org.koitharu.kotatsu.settings.SettingsActivity
@AndroidEntryPoint @AndroidEntryPoint
class RemoteListFragment : MangaListFragment() { class RemoteListFragment : MangaListFragment(), FilterOwner {
override val viewModel by viewModels<RemoteListViewModel>() override val viewModel by viewModels<RemoteListViewModel>()
override val filter: MangaFilter
get() = viewModel
override fun onViewBindingCreated(binding: FragmentListBinding, savedInstanceState: Bundle?) { override fun onViewBindingCreated(binding: FragmentListBinding, savedInstanceState: Bundle?) {
super.onViewBindingCreated(binding, savedInstanceState) super.onViewBindingCreated(binding, savedInstanceState)
addMenuProvider(RemoteListMenuProvider()) addMenuProvider(RemoteListMenuProvider())

View File

@@ -20,10 +20,11 @@ import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.parser.MangaRepository import org.koitharu.kotatsu.core.parser.MangaRepository
import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.util.ext.call import org.koitharu.kotatsu.core.util.ext.call
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import org.koitharu.kotatsu.core.util.ext.require import org.koitharu.kotatsu.core.util.ext.require
import org.koitharu.kotatsu.download.ui.worker.DownloadWorker import org.koitharu.kotatsu.download.ui.worker.DownloadWorker
import org.koitharu.kotatsu.filter.ui.FilterCoordinator import org.koitharu.kotatsu.filter.ui.FilterCoordinator
import org.koitharu.kotatsu.filter.ui.FilterOwner import org.koitharu.kotatsu.filter.ui.MangaFilter
import org.koitharu.kotatsu.filter.ui.model.FilterState import org.koitharu.kotatsu.filter.ui.model.FilterState
import org.koitharu.kotatsu.list.domain.ListExtraProvider import org.koitharu.kotatsu.list.domain.ListExtraProvider
import org.koitharu.kotatsu.list.ui.MangaListViewModel import org.koitharu.kotatsu.list.ui.MangaListViewModel
@@ -36,7 +37,6 @@ import org.koitharu.kotatsu.list.ui.model.toUi
import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.model.MangaTag import org.koitharu.kotatsu.parsers.model.MangaTag
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import javax.inject.Inject import javax.inject.Inject
private const val FILTER_MIN_INTERVAL = 250L private const val FILTER_MIN_INTERVAL = 250L
@@ -49,7 +49,7 @@ open class RemoteListViewModel @Inject constructor(
settings: AppSettings, settings: AppSettings,
listExtraProvider: ListExtraProvider, listExtraProvider: ListExtraProvider,
downloadScheduler: DownloadWorker.Scheduler, downloadScheduler: DownloadWorker.Scheduler,
) : MangaListViewModel(settings, downloadScheduler), FilterOwner by filter { ) : MangaListViewModel(settings, downloadScheduler), MangaFilter by filter {
val source = savedStateHandle.require<MangaSource>(RemoteListFragment.ARG_SOURCE) val source = savedStateHandle.require<MangaSource>(RemoteListFragment.ARG_SOURCE)
private val repository = mangaRepositoryFactory.create(source) private val repository = mangaRepositoryFactory.create(source)

View File

@@ -26,7 +26,7 @@ import org.koitharu.kotatsu.databinding.ActivityMangaListBinding
import org.koitharu.kotatsu.filter.ui.FilterHeaderFragment import org.koitharu.kotatsu.filter.ui.FilterHeaderFragment
import org.koitharu.kotatsu.filter.ui.FilterOwner import org.koitharu.kotatsu.filter.ui.FilterOwner
import org.koitharu.kotatsu.filter.ui.FilterSheetFragment import org.koitharu.kotatsu.filter.ui.FilterSheetFragment
import org.koitharu.kotatsu.list.ui.MangaListFragment import org.koitharu.kotatsu.filter.ui.MangaFilter
import org.koitharu.kotatsu.local.ui.LocalListFragment import org.koitharu.kotatsu.local.ui.LocalListFragment
import org.koitharu.kotatsu.main.ui.owners.AppBarOwner import org.koitharu.kotatsu.main.ui.owners.AppBarOwner
import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaSource
@@ -36,11 +36,16 @@ import org.koitharu.kotatsu.remotelist.ui.RemoteListFragment
@AndroidEntryPoint @AndroidEntryPoint
class MangaListActivity : class MangaListActivity :
BaseActivity<ActivityMangaListBinding>(), BaseActivity<ActivityMangaListBinding>(),
AppBarOwner, View.OnClickListener { AppBarOwner, View.OnClickListener, FilterOwner {
override val appBar: AppBarLayout override val appBar: AppBarLayout
get() = viewBinding.appbar get() = viewBinding.appbar
override val filter: MangaFilter
get() = checkNotNull(findFilterOwner()) {
"Cannot find FilterOwner fragment in ${supportFragmentManager.fragments}"
}.filter
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(ActivityMangaListBinding.inflate(layoutInflater)) setContentView(ActivityMangaListBinding.inflate(layoutInflater))
@@ -74,7 +79,10 @@ class MangaListActivity :
private fun initList(source: MangaSource, tags: Set<MangaTag>?) { private fun initList(source: MangaSource, tags: Set<MangaTag>?) {
val fm = supportFragmentManager val fm = supportFragmentManager
if (fm.findFragmentById(R.id.container) == null) { val existingFragment = fm.findFragmentById(R.id.container)
if (existingFragment is FilterOwner) {
initFilter(existingFragment)
} else {
fm.commit { fm.commit {
setReorderingAllowed(true) setReorderingAllowed(true)
val fragment = if (source == MangaSource.LOCAL) { val fragment = if (source == MangaSource.LOCAL) {
@@ -83,17 +91,15 @@ class MangaListActivity :
RemoteListFragment.newInstance(source) RemoteListFragment.newInstance(source)
} }
replace(R.id.container, fragment) replace(R.id.container, fragment)
runOnCommit { initFilter() } runOnCommit { initFilter(fragment) }
if (!tags.isNullOrEmpty() && fragment is RemoteListFragment) { if (!tags.isNullOrEmpty()) {
runOnCommit(ApplyFilterRunnable(fragment, tags)) runOnCommit(ApplyFilterRunnable(fragment, tags))
} }
} }
} else {
initFilter()
} }
} }
private fun initFilter() { private fun initFilter(filterOwner: FilterOwner) {
if (viewBinding.containerFilter != null) { if (viewBinding.containerFilter != null) {
if (supportFragmentManager.findFragmentById(R.id.container_filter) == null) { if (supportFragmentManager.findFragmentById(R.id.container_filter) == null) {
supportFragmentManager.commit { supportFragmentManager.commit {
@@ -109,14 +115,14 @@ class MangaListActivity :
} }
} }
} }
val filterOwner = FilterOwner.from(this) val filter = filterOwner.filter
val chipSort = viewBinding.chipSort val chipSort = viewBinding.chipSort
if (chipSort != null) { if (chipSort != null) {
filterOwner.header.observe(this) { filter.header.observe(this) {
chipSort.setTextAndVisible(it.sortOrder?.titleRes ?: 0) chipSort.setTextAndVisible(it.sortOrder?.titleRes ?: 0)
} }
} else { } else {
filterOwner.header.map { filter.header.map {
it.textSummary it.textSummary
}.flowOn(Dispatchers.Default) }.flowOn(Dispatchers.Default)
.observe(this) { .observe(this) {
@@ -125,15 +131,17 @@ class MangaListActivity :
} }
} }
private fun findFilterOwner(): FilterOwner? {
return supportFragmentManager.findFragmentById(R.id.container) as? FilterOwner
}
private class ApplyFilterRunnable( private class ApplyFilterRunnable(
private val fragment: MangaListFragment, private val filterOwner: FilterOwner,
private val tags: Set<MangaTag>, private val tags: Set<MangaTag>,
) : Runnable { ) : Runnable {
override fun run() { override fun run() {
checkNotNull(FilterOwner.find(fragment)) { filterOwner.filter.applyFilter(tags)
"Cannot find FilterOwner"
}.applyFilter(tags)
} }
} }

View File

@@ -24,6 +24,7 @@ import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.ui.BasePreferenceFragment import org.koitharu.kotatsu.core.ui.BasePreferenceFragment
import org.koitharu.kotatsu.core.util.ext.observe import org.koitharu.kotatsu.core.util.ext.observe
import org.koitharu.kotatsu.core.util.ext.powerManager
import org.koitharu.kotatsu.settings.tracker.categories.TrackerCategoriesConfigSheet import org.koitharu.kotatsu.settings.tracker.categories.TrackerCategoriesConfigSheet
import org.koitharu.kotatsu.settings.utils.MultiSummaryProvider import org.koitharu.kotatsu.settings.utils.MultiSummaryProvider
import org.koitharu.kotatsu.tracker.work.TrackerNotificationChannels import org.koitharu.kotatsu.tracker.work.TrackerNotificationChannels
@@ -155,7 +156,7 @@ class TrackerSettingsFragment :
return return
} }
val packageName = context.packageName val packageName = context.packageName
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager val powerManager = context.powerManager ?: return
if (!powerManager.isIgnoringBatteryOptimizations(packageName)) { if (!powerManager.isIgnoringBatteryOptimizations(packageName)) {
try { try {
val intent = Intent( val intent = Intent(

View File

@@ -0,0 +1,12 @@
package org.koitharu.kotatsu.settings.work
import android.content.Context
interface PeriodicWorkScheduler {
suspend fun schedule(context: Context)
suspend fun unschedule(context: Context)
suspend fun isScheduled(context: Context): Boolean
}

View File

@@ -0,0 +1,49 @@
package org.koitharu.kotatsu.settings.work
import android.content.Context
import android.content.SharedPreferences
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.util.ext.processLifecycleScope
import org.koitharu.kotatsu.suggestions.ui.SuggestionsWorker
import org.koitharu.kotatsu.tracker.work.TrackWorker
import javax.inject.Inject
class WorkScheduleManager @Inject constructor(
@ApplicationContext private val context: Context,
private val settings: AppSettings,
) : SharedPreferences.OnSharedPreferenceChangeListener {
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
when (key) {
AppSettings.KEY_TRACKER_ENABLED -> updateWorker(TrackWorker, settings.isTrackerEnabled)
AppSettings.KEY_SUGGESTIONS -> updateWorker(SuggestionsWorker, settings.isSuggestionsEnabled)
}
}
fun init() {
settings.subscribe(this)
processLifecycleScope.launch(Dispatchers.Default) {
updateWorkerImpl(TrackWorker, settings.isTrackerEnabled)
updateWorkerImpl(SuggestionsWorker, settings.isSuggestionsEnabled)
}
}
private fun updateWorker(scheduler: PeriodicWorkScheduler, isEnabled: Boolean) {
processLifecycleScope.launch(Dispatchers.Default) {
updateWorkerImpl(scheduler, isEnabled)
}
}
private suspend fun updateWorkerImpl(scheduler: PeriodicWorkScheduler, isEnabled: Boolean) {
if (scheduler.isScheduled(context) != isEnabled) {
if (isEnabled) {
scheduler.schedule(context)
} else {
scheduler.unschedule(context)
}
}
}
}

View File

@@ -23,6 +23,7 @@ import androidx.work.OutOfQuotaPolicy
import androidx.work.PeriodicWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager import androidx.work.WorkManager
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import androidx.work.await
import androidx.work.workDataOf import androidx.work.workDataOf
import coil.ImageLoader import coil.ImageLoader
import coil.request.ImageRequest import coil.request.ImageRequest
@@ -38,6 +39,7 @@ import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.model.distinctById import org.koitharu.kotatsu.core.model.distinctById
import org.koitharu.kotatsu.core.parser.MangaRepository import org.koitharu.kotatsu.core.parser.MangaRepository
import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.util.WorkManagerHelper
import org.koitharu.kotatsu.core.util.ext.almostEquals import org.koitharu.kotatsu.core.util.ext.almostEquals
import org.koitharu.kotatsu.core.util.ext.asArrayList import org.koitharu.kotatsu.core.util.ext.asArrayList
import org.koitharu.kotatsu.core.util.ext.flatten import org.koitharu.kotatsu.core.util.ext.flatten
@@ -55,6 +57,7 @@ import org.koitharu.kotatsu.parsers.model.MangaTag
import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.model.SortOrder
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.reader.ui.ReaderActivity.IntentBuilder import org.koitharu.kotatsu.reader.ui.ReaderActivity.IntentBuilder
import org.koitharu.kotatsu.settings.work.PeriodicWorkScheduler
import org.koitharu.kotatsu.suggestions.domain.MangaSuggestion import org.koitharu.kotatsu.suggestions.domain.MangaSuggestion
import org.koitharu.kotatsu.suggestions.domain.SuggestionRepository import org.koitharu.kotatsu.suggestions.domain.SuggestionRepository
import org.koitharu.kotatsu.suggestions.domain.TagsBlacklist import org.koitharu.kotatsu.suggestions.domain.TagsBlacklist
@@ -75,11 +78,11 @@ class SuggestionsWorker @AssistedInject constructor(
) : CoroutineWorker(appContext, params) { ) : CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result { override suspend fun doWork(): Result {
trySetForeground()
if (!appSettings.isSuggestionsEnabled) { if (!appSettings.isSuggestionsEnabled) {
suggestionRepository.clear() suggestionRepository.clear()
return Result.success() return Result.success()
} }
trySetForeground()
val count = doWorkImpl() val count = doWorkImpl()
val outputData = workDataOf(DATA_COUNT to count) val outputData = workDataOf(DATA_COUNT to count)
return Result.success(outputData) return Result.success(outputData)
@@ -303,7 +306,7 @@ class SuggestionsWorker @AssistedInject constructor(
return -1 return -1
} }
companion object { companion object : PeriodicWorkScheduler {
private const val TAG = "suggestions" private const val TAG = "suggestions"
private const val TAG_ONESHOT = "suggestions_oneshot" private const val TAG_ONESHOT = "suggestions_oneshot"
@@ -324,7 +327,7 @@ class SuggestionsWorker @AssistedInject constructor(
SortOrder.RATING, SortOrder.RATING,
) )
fun setup(context: Context) { override suspend fun schedule(context: Context) {
val constraints = Constraints.Builder() val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED) .setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresBatteryNotLow(true) .setRequiresBatteryNotLow(true)
@@ -336,6 +339,19 @@ class SuggestionsWorker @AssistedInject constructor(
.build() .build()
WorkManager.getInstance(context) WorkManager.getInstance(context)
.enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.KEEP, request) .enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.KEEP, request)
.await()
}
override suspend fun unschedule(context: Context) {
WorkManager.getInstance(context)
.cancelUniqueWork(TAG)
.await()
}
override suspend fun isScheduled(context: Context): Boolean {
return WorkManagerHelper(WorkManager.getInstance(context))
.getUniqueWorkInfoByName(TAG)
.any { !it.state.isFinished }
} }
fun startNow(context: Context) { fun startNow(context: Context) {

View File

@@ -43,10 +43,12 @@ class SyncController @Inject constructor(
private val defaultGcPeriod = TimeUnit.DAYS.toMillis(2) // gc period if sync disabled private val defaultGcPeriod = TimeUnit.DAYS.toMillis(2) // gc period if sync disabled
override fun onInvalidated(tables: Set<String>) { override fun onInvalidated(tables: Set<String>) {
requestSync( val favourites = (TABLE_FAVOURITES in tables || TABLE_FAVOURITE_CATEGORIES in tables)
favourites = TABLE_FAVOURITES in tables || TABLE_FAVOURITE_CATEGORIES in tables, && !isSyncActiveOrPending(authorityFavourites)
history = TABLE_HISTORY in tables, val history = TABLE_HISTORY in tables && !isSyncActiveOrPending(authorityHistory)
) if (favourites || history) {
requestSync(favourites, history)
}
} }
fun isEnabled(account: Account): Boolean { fun isEnabled(account: Account): Boolean {
@@ -126,6 +128,11 @@ class SyncController @Inject constructor(
} }
} }
private fun isSyncActiveOrPending(authority: String): Boolean {
val account = peekAccount() ?: return false
return ContentResolver.isSyncActive(account, authority) || ContentResolver.isSyncPending(account, authority)
}
companion object { companion object {
@JvmStatic @JvmStatic

View File

@@ -11,6 +11,10 @@ import android.database.Cursor
import android.net.Uri import android.net.Uri
import androidx.annotation.WorkerThread import androidx.annotation.WorkerThread
import androidx.core.content.contentValuesOf import androidx.core.content.contentValuesOf
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import dagger.hilt.android.qualifiers.ApplicationContext
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
@@ -23,9 +27,9 @@ import org.koitharu.kotatsu.core.db.TABLE_HISTORY
import org.koitharu.kotatsu.core.db.TABLE_MANGA import org.koitharu.kotatsu.core.db.TABLE_MANGA
import org.koitharu.kotatsu.core.db.TABLE_MANGA_TAGS import org.koitharu.kotatsu.core.db.TABLE_MANGA_TAGS
import org.koitharu.kotatsu.core.db.TABLE_TAGS import org.koitharu.kotatsu.core.db.TABLE_TAGS
import org.koitharu.kotatsu.core.logs.LoggersModule import org.koitharu.kotatsu.core.logs.FileLogger
import org.koitharu.kotatsu.core.network.GZipInterceptor import org.koitharu.kotatsu.core.logs.SyncLogger
import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.network.BaseHttpClient
import org.koitharu.kotatsu.core.util.ext.parseJsonOrNull import org.koitharu.kotatsu.core.util.ext.parseJsonOrNull
import org.koitharu.kotatsu.core.util.ext.toContentValues import org.koitharu.kotatsu.core.util.ext.toContentValues
import org.koitharu.kotatsu.core.util.ext.toJson import org.koitharu.kotatsu.core.util.ext.toJson
@@ -39,23 +43,20 @@ import java.util.concurrent.TimeUnit
private const val FIELD_TIMESTAMP = "timestamp" private const val FIELD_TIMESTAMP = "timestamp"
/** class SyncHelper @AssistedInject constructor(
* Warning! This class may be used in another process @ApplicationContext context: Context,
*/ @BaseHttpClient baseHttpClient: OkHttpClient,
@WorkerThread @Assisted private val account: Account,
class SyncHelper( @Assisted private val provider: ContentProviderClient,
context: Context, private val settings: SyncSettings,
private val account: Account, @SyncLogger private val logger: FileLogger,
private val provider: ContentProviderClient,
) { ) {
private val authorityHistory = context.getString(R.string.sync_authority_history) private val authorityHistory = context.getString(R.string.sync_authority_history)
private val authorityFavourites = context.getString(R.string.sync_authority_favourites) private val authorityFavourites = context.getString(R.string.sync_authority_favourites)
private val settings = SyncSettings(context, account) private val httpClient = baseHttpClient.newBuilder()
private val httpClient = OkHttpClient.Builder()
.authenticator(SyncAuthenticator(context, account, settings, SyncAuthApi(OkHttpClient()))) .authenticator(SyncAuthenticator(context, account, settings, SyncAuthApi(OkHttpClient())))
.addInterceptor(SyncInterceptor(context, account)) .addInterceptor(SyncInterceptor(context, account))
.addInterceptor(GZipInterceptor())
.build() .build()
private val baseUrl: String by lazy { private val baseUrl: String by lazy {
val host = settings.host val host = settings.host
@@ -64,8 +65,8 @@ class SyncHelper(
} }
private val defaultGcPeriod: Long // gc period if sync enabled private val defaultGcPeriod: Long // gc period if sync enabled
get() = TimeUnit.DAYS.toMillis(4) get() = TimeUnit.DAYS.toMillis(4)
private val logger = LoggersModule.provideSyncLogger(context, AppSettings(context))
@WorkerThread
fun syncFavourites(syncResult: SyncResult) { fun syncFavourites(syncResult: SyncResult) {
val data = JSONObject() val data = JSONObject()
data.put(TABLE_FAVOURITE_CATEGORIES, getFavouriteCategories()) data.put(TABLE_FAVOURITE_CATEGORIES, getFavouriteCategories())
@@ -89,6 +90,7 @@ class SyncHelper(
gcFavourites() gcFavourites()
} }
@WorkerThread
fun syncHistory(syncResult: SyncResult) { fun syncHistory(syncResult: SyncResult) {
val data = JSONObject() val data = JSONObject()
data.put(TABLE_HISTORY, getHistory()) data.put(TABLE_HISTORY, getHistory())
@@ -321,4 +323,13 @@ class SyncHelper(
logger.log("$code ${request.url}") logger.log("$code ${request.url}")
} }
} }
@AssistedFactory
interface Factory {
fun create(
account: Account,
contentProviderClient: ContentProviderClient,
): SyncHelper
}
} }

View File

@@ -0,0 +1,12 @@
package org.koitharu.kotatsu.sync.ui
import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import org.koitharu.kotatsu.sync.domain.SyncHelper
@EntryPoint
@InstallIn(SingletonComponent::class)
interface SyncAdapterEntryPoint {
val syncHelperFactory: SyncHelper.Factory
}

View File

@@ -6,11 +6,12 @@ import android.content.ContentProviderClient
import android.content.Context import android.content.Context
import android.content.SyncResult import android.content.SyncResult
import android.os.Bundle import android.os.Bundle
import dagger.hilt.android.EntryPointAccessors
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.util.ext.onError import org.koitharu.kotatsu.core.util.ext.onError
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.sync.domain.SyncController import org.koitharu.kotatsu.sync.domain.SyncController
import org.koitharu.kotatsu.sync.domain.SyncHelper import org.koitharu.kotatsu.sync.ui.SyncAdapterEntryPoint
class FavouritesSyncAdapter(context: Context) : AbstractThreadedSyncAdapter(context, true) { class FavouritesSyncAdapter(context: Context) : AbstractThreadedSyncAdapter(context, true) {
@@ -24,7 +25,8 @@ class FavouritesSyncAdapter(context: Context) : AbstractThreadedSyncAdapter(cont
if (!context.resources.getBoolean(R.bool.is_sync_enabled)) { if (!context.resources.getBoolean(R.bool.is_sync_enabled)) {
return return
} }
val syncHelper = SyncHelper(context, account, provider) val entryPoint = EntryPointAccessors.fromApplication(context, SyncAdapterEntryPoint::class.java)
val syncHelper = entryPoint.syncHelperFactory.create(account, provider)
runCatchingCancellable { runCatchingCancellable {
syncHelper.syncFavourites(syncResult) syncHelper.syncFavourites(syncResult)
SyncController.setLastSync(context, account, authority, System.currentTimeMillis()) SyncController.setLastSync(context, account, authority, System.currentTimeMillis())

View File

@@ -6,11 +6,12 @@ import android.content.ContentProviderClient
import android.content.Context import android.content.Context
import android.content.SyncResult import android.content.SyncResult
import android.os.Bundle import android.os.Bundle
import dagger.hilt.android.EntryPointAccessors
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.util.ext.onError import org.koitharu.kotatsu.core.util.ext.onError
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.sync.domain.SyncController import org.koitharu.kotatsu.sync.domain.SyncController
import org.koitharu.kotatsu.sync.domain.SyncHelper import org.koitharu.kotatsu.sync.ui.SyncAdapterEntryPoint
class HistorySyncAdapter(context: Context) : AbstractThreadedSyncAdapter(context, true) { class HistorySyncAdapter(context: Context) : AbstractThreadedSyncAdapter(context, true) {
@@ -24,7 +25,8 @@ class HistorySyncAdapter(context: Context) : AbstractThreadedSyncAdapter(context
if (!context.resources.getBoolean(R.bool.is_sync_enabled)) { if (!context.resources.getBoolean(R.bool.is_sync_enabled)) {
return return
} }
val syncHelper = SyncHelper(context, account, provider) val entryPoint = EntryPointAccessors.fromApplication(context, SyncAdapterEntryPoint::class.java)
val syncHelper = entryPoint.syncHelperFactory.create(account, provider)
runCatchingCancellable { runCatchingCancellable {
syncHelper.syncHistory(syncResult) syncHelper.syncHistory(syncResult)
SyncController.setLastSync(context, account, authority, System.currentTimeMillis()) SyncController.setLastSync(context, account, authority, System.currentTimeMillis())

View File

@@ -26,6 +26,7 @@ import androidx.work.WorkInfo
import androidx.work.WorkManager import androidx.work.WorkManager
import androidx.work.WorkQuery import androidx.work.WorkQuery
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import androidx.work.await
import coil.ImageLoader import coil.ImageLoader
import coil.request.ImageRequest import coil.request.ImageRequest
import dagger.assisted.Assisted import dagger.assisted.Assisted
@@ -42,12 +43,14 @@ import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.logs.FileLogger import org.koitharu.kotatsu.core.logs.FileLogger
import org.koitharu.kotatsu.core.logs.TrackerLogger import org.koitharu.kotatsu.core.logs.TrackerLogger
import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.util.WorkManagerHelper
import org.koitharu.kotatsu.core.util.ext.toBitmapOrNull import org.koitharu.kotatsu.core.util.ext.toBitmapOrNull
import org.koitharu.kotatsu.core.util.ext.trySetForeground import org.koitharu.kotatsu.core.util.ext.trySetForeground
import org.koitharu.kotatsu.details.ui.DetailsActivity import org.koitharu.kotatsu.details.ui.DetailsActivity
import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.settings.work.PeriodicWorkScheduler
import org.koitharu.kotatsu.tracker.domain.Tracker import org.koitharu.kotatsu.tracker.domain.Tracker
import org.koitharu.kotatsu.tracker.domain.model.MangaUpdates import org.koitharu.kotatsu.tracker.domain.model.MangaUpdates
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@@ -67,6 +70,7 @@ class TrackWorker @AssistedInject constructor(
} }
override suspend fun doWork(): Result { override suspend fun doWork(): Result {
trySetForeground()
logger.log("doWork()") logger.log("doWork()")
try { try {
return doWorkImpl() return doWorkImpl()
@@ -85,7 +89,6 @@ class TrackWorker @AssistedInject constructor(
if (!settings.isTrackerEnabled) { if (!settings.isTrackerEnabled) {
return Result.success(workDataOf(0, 0)) return Result.success(workDataOf(0, 0))
} }
trySetForeground()
val tracks = tracker.getAllTracks() val tracks = tracker.getAllTracks()
logger.log("Total ${tracks.size} tracks") logger.log("Total ${tracks.size} tracks")
if (tracks.isEmpty()) { if (tracks.isEmpty()) {
@@ -234,7 +237,7 @@ class TrackWorker @AssistedInject constructor(
.build() .build()
} }
companion object { companion object : PeriodicWorkScheduler {
private const val WORKER_CHANNEL_ID = "track_worker" private const val WORKER_CHANNEL_ID = "track_worker"
private const val WORKER_NOTIFICATION_ID = 35 private const val WORKER_NOTIFICATION_ID = 35
@@ -244,14 +247,28 @@ class TrackWorker @AssistedInject constructor(
private const val DATA_KEY_SUCCESS = "success" private const val DATA_KEY_SUCCESS = "success"
private const val DATA_KEY_FAILED = "failed" private const val DATA_KEY_FAILED = "failed"
fun setup(context: Context) { override suspend fun schedule(context: Context) {
val constraints = Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build() val constraints = Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
val request = PeriodicWorkRequestBuilder<TrackWorker>(4, TimeUnit.HOURS) val request = PeriodicWorkRequestBuilder<TrackWorker>(4, TimeUnit.HOURS)
.setConstraints(constraints) .setConstraints(constraints)
.addTag(TAG) .addTag(TAG)
.setBackoffCriteria(BackoffPolicy.LINEAR, 30, TimeUnit.MINUTES) .setBackoffCriteria(BackoffPolicy.LINEAR, 30, TimeUnit.MINUTES)
.build() .build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.KEEP, request) WorkManager.getInstance(context)
.enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.KEEP, request)
.await()
}
override suspend fun unschedule(context: Context) {
WorkManager.getInstance(context)
.cancelUniqueWork(TAG)
.await()
}
override suspend fun isScheduled(context: Context): Boolean {
return WorkManagerHelper(WorkManager.getInstance(context))
.getUniqueWorkInfoByName(TAG)
.any { !it.state.isFinished }
} }
fun startNow(context: Context) { fun startNow(context: Context) {

View File

@@ -56,7 +56,7 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/barrier_top" app:layout_constraintTop_toBottomOf="@id/barrier_top"
app:trackColor="?colorPrimaryContainer" app:trackColor="?android:colorBackground"
tools:progress="25" /> tools:progress="25" />
<TextView <TextView

View File

@@ -95,7 +95,7 @@
<string name="vibration">Вібрацыя</string> <string name="vibration">Вібрацыя</string>
<string name="favourites_categories">Катэгорыі абранага</string> <string name="favourites_categories">Катэгорыі абранага</string>
<string name="remove_category">Выдаліць катэгорыю</string> <string name="remove_category">Выдаліць катэгорыю</string>
<string name="manga_shelf">Паліца з мангай</string> <string name="manga_shelf">Паліца</string>
<string name="recent_manga">Нядаўняя манга</string> <string name="recent_manga">Нядаўняя манга</string>
<string name="pages_animation">Анімацыя гартання</string> <string name="pages_animation">Анімацыя гартання</string>
<string name="manga_save_location">Месца спампоўвання мангі</string> <string name="manga_save_location">Месца спампоўвання мангі</string>
@@ -201,7 +201,7 @@
<string name="screenshots_block_all">Заўсёды блакуйце</string> <string name="screenshots_block_all">Заўсёды блакуйце</string>
<string name="screenshots_block_nsfw">Блок на NSFW</string> <string name="screenshots_block_nsfw">Блок на NSFW</string>
<string name="filter_load_error">Немагчыма загрузіць спіс жанраў</string> <string name="filter_load_error">Немагчыма загрузіць спіс жанраў</string>
<string name="disabled">Непрацаздольны</string> <string name="disabled">Адключаны</string>
<string name="enabled">Уключаны</string> <string name="enabled">Уключаны</string>
<string name="exclude_nsfw_from_suggestions">Не прапануйце мангу NSFW</string> <string name="exclude_nsfw_from_suggestions">Не прапануйце мангу NSFW</string>
<string name="text_suggestion_holder">Пачніце чытаць мангу, і вы атрымаеце персаналізаваныя прапановы</string> <string name="text_suggestion_holder">Пачніце чытаць мангу, і вы атрымаеце персаналізаваныя прапановы</string>
@@ -255,7 +255,7 @@
<string name="edit">Змяніць</string> <string name="edit">Змяніць</string>
<string name="edit_category">Змяніць катэгорыю</string> <string name="edit_category">Змяніць катэгорыю</string>
<string name="bookmark_add">Дадаць закладку</string> <string name="bookmark_add">Дадаць закладку</string>
<string name="undo">Адмяніць</string> <string name="undo">Адмена</string>
<string name="disable_battery_optimization">Адключыць аптымізацыю акумулятара</string> <string name="disable_battery_optimization">Адключыць аптымізацыю акумулятара</string>
<string name="disable_battery_optimization_summary">Дапамагае з фонавай праверкай абнаўленняў</string> <string name="disable_battery_optimization_summary">Дапамагае з фонавай праверкай абнаўленняў</string>
<string name="crash_text">Штосьці пайшло не так. Калі ласка, адпраўце справаздачу пра памылку распрацоўшчыкам, каб дапамагчы нам яе выправіць.</string> <string name="crash_text">Штосьці пайшло не так. Калі ласка, адпраўце справаздачу пра памылку распрацоўшчыкам, каб дапамагчы нам яе выправіць.</string>
@@ -327,7 +327,7 @@
<string name="enable_logging_summary">Запішыце некаторыя дзеянні для адладкі</string> <string name="enable_logging_summary">Запішыце некаторыя дзеянні для адладкі</string>
<string name="show_suspicious_content">Паказаць падазроны кантэнт</string> <string name="show_suspicious_content">Паказаць падазроны кантэнт</string>
<string name="text_shelf_holder_primary">Ваша манга будзе адлюстроўвацца тут</string> <string name="text_shelf_holder_primary">Ваша манга будзе адлюстроўвацца тут</string>
<string name="text_shelf_holder_secondary">Знайдзіце, што пачытаць, у раздзеле «Даследаваць»</string> <string name="text_shelf_holder_secondary">Знайдзіце, што пачытаць, у раздзеле «Агляд»</string>
<string name="canceled">Адменена</string> <string name="canceled">Адменена</string>
<string name="manage">Кіраваць</string> <string name="manage">Кіраваць</string>
<string name="available">Даступны</string> <string name="available">Даступны</string>
@@ -356,7 +356,7 @@
<string name="random">Выпадковы</string> <string name="random">Выпадковы</string>
<string name="reorder">Змяніць парадак</string> <string name="reorder">Змяніць парадак</string>
<string name="empty">Пуста</string> <string name="empty">Пуста</string>
<string name="explore">Дасьледуйце</string> <string name="explore">Агляд</string>
<string name="confirm_exit">Націсніце \"Назад\" яшчэ раз, каб выйсці</string> <string name="confirm_exit">Націсніце \"Назад\" яшчэ раз, каб выйсці</string>
<string name="exit_confirmation_summary">Двойчы націсніце \"Назад\", каб выйсці з праграмы</string> <string name="exit_confirmation_summary">Двойчы націсніце \"Назад\", каб выйсці з праграмы</string>
<string name="exit_confirmation">Пацверджанне выхаду</string> <string name="exit_confirmation">Пацверджанне выхаду</string>
@@ -425,7 +425,7 @@
<string name="invert_colors">Інвертаваць колеры</string> <string name="invert_colors">Інвертаваць колеры</string>
<string name="show_pages_numbers_summary">Паказаць нумары старонак у ніжнім куце</string> <string name="show_pages_numbers_summary">Паказаць нумары старонак у ніжнім куце</string>
<string name="network">Сетка</string> <string name="network">Сетка</string>
<string name="data_and_privacy">Дадзеныя і прыватнасць</string> <string name="data_and_privacy">Дадзеныя і канфідэнцыяльнасць</string>
<string name="webtoon_zoom_summary">Дазволіць жэст для павелічэння ў рэжыме webtoon</string> <string name="webtoon_zoom_summary">Дазволіць жэст для павелічэння ў рэжыме webtoon</string>
<string name="details_button_tip">Націсніце і ўтрымлівайце кнопку \"Чытаць\", каб убачыць дадатковыя параметры</string> <string name="details_button_tip">Націсніце і ўтрымлівайце кнопку \"Чытаць\", каб убачыць дадатковыя параметры</string>
<string name="restore_summary">Аднавіць раней створаную рэзервовую копію</string> <string name="restore_summary">Аднавіць раней створаную рэзервовую копію</string>

View File

@@ -1,425 +1,434 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="read_more">Lire la suite</string> <string name="read_more">Lire la suite</string>
<string name="tracker_warning">Certains appareils ont un comportement différent du système, ce qui peut interrompre les tâches d\'arrière-plan.</string> <string name="tracker_warning">Certains appareils ont un comportement différent du système, ce qui peut interrompre les tâches d\'arrière-plan.</string>
<string name="backup_saved">Sauvegarde enregistrée</string> <string name="backup_saved">Sauvegarde enregistrée</string>
<string name="welcome">Bienvenue</string> <string name="welcome">Bienvenue</string>
<string name="text_clear_search_history_prompt">Supprimer définitivement toutes les requêtes de recherche récentes \?</string> <string name="text_clear_search_history_prompt">Supprimer définitivement toutes les requêtes de recherche récentes \?</string>
<string name="password_length_hint">Le mot de passe doit comporter 4 caractères ou plus</string> <string name="password_length_hint">Le mot de passe doit comporter 4 caractères ou plus</string>
<string name="confirm">Confirmer</string> <string name="confirm">Confirmer</string>
<string name="protect_application_subtitle">Entrez un mot de passe pour démarrer l\'application avec</string> <string name="protect_application_subtitle">Entrez un mot de passe pour démarrer l\'application avec</string>
<string name="next">Suivant</string> <string name="next">Suivant</string>
<string name="default_s">Par défaut : %s</string> <string name="default_s">Par défaut : %s</string>
<string name="auth_required">Connectez-vous pour voir ce contenu</string> <string name="auth_required">Connectez-vous pour voir ce contenu</string>
<string name="sign_in">Se connecter</string> <string name="sign_in">Se connecter</string>
<string name="reverse">Inverser</string> <string name="reverse">Inverser</string>
<string name="check_for_new_chapters">À la recherche de nouveaux chapitres</string> <string name="check_for_new_chapters">À la recherche de nouveaux chapitres</string>
<string name="text_clear_updates_feed_prompt">Effacer définitivement l\'historique des mises à jour \?</string> <string name="text_clear_updates_feed_prompt">Effacer définitivement l\'historique des mises à jour \?</string>
<string name="clear_feed">Effacer le flux</string> <string name="clear_feed">Effacer le flux</string>
<string name="cookies_cleared">Tous les cookies ont été retirés</string> <string name="cookies_cleared">Tous les cookies ont été retirés</string>
<string name="clear_cookies">Effacer les cookies</string> <string name="clear_cookies">Effacer les cookies</string>
<string name="captcha_solve">Résoudre</string> <string name="captcha_solve">Résoudre</string>
<string name="captcha_required">CAPTCHA requis</string> <string name="captcha_required">CAPTCHA requis</string>
<string name="silent">Silencieux</string> <string name="silent">Silencieux</string>
<string name="reader_mode_hint">On se souviendra de la configuration choisie pour ce manga</string> <string name="reader_mode_hint">On se souviendra de la configuration choisie pour ce manga</string>
<string name="tap_to_try_again">Appuyez pour réessayer</string> <string name="tap_to_try_again">Appuyez pour réessayer</string>
<string name="today">Aujourd\'hui</string> <string name="today">Aujourd\'hui</string>
<string name="group">Groupe</string> <string name="group">Groupe</string>
<string name="long_ago">Il y a longtemps</string> <string name="long_ago">Il y a longtemps</string>
<string name="yesterday">Hier</string> <string name="yesterday">Hier</string>
<string name="just_now">À l\'instant</string> <string name="just_now">À l\'instant</string>
<string name="backup_information">Vous pouvez créer une sauvegarde de votre historique et de vos favoris et la restaurer</string> <string name="backup_information">Vous pouvez créer une sauvegarde de votre historique et de vos favoris et la restaurer</string>
<string name="data_restored_with_errors">Les données ont été restaurées, mais il y a des erreurs</string> <string name="data_restored_with_errors">Les données ont été restaurées, mais il y a des erreurs</string>
<string name="data_restored_success">Toutes les données ont été restaurées</string> <string name="data_restored_success">Toutes les données ont été restaurées</string>
<string name="file_not_found">Fichier introuvable</string> <string name="file_not_found">Fichier introuvable</string>
<string name="preparing_">Préparation…</string> <string name="preparing_">Préparation…</string>
<string name="data_restored">Restauré</string> <string name="data_restored">Restauré</string>
<string name="restore_backup">Restaurer à partir d\'une sauvegarde</string> <string name="restore_backup">Restaurer à partir d\'une sauvegarde</string>
<string name="create_backup">Créer une sauvegarde des données</string> <string name="create_backup">Créer une sauvegarde des données</string>
<string name="backup_restore">Sauvegarde et restauration</string> <string name="backup_restore">Sauvegarde et restauration</string>
<string name="black_dark_theme_summary">Utilise moins d\'énergie pour les écrans AMOLED</string> <string name="black_dark_theme_summary">Utilise moins d\'énergie pour les écrans AMOLED</string>
<string name="black_dark_theme">Noir</string> <string name="black_dark_theme">Noir</string>
<string name="zoom_mode_keep_start">Garder au début</string> <string name="zoom_mode_keep_start">Garder au début</string>
<string name="zoom_mode_fit_width">Ajuster à la largeur</string> <string name="zoom_mode_fit_width">Ajuster à la largeur</string>
<string name="zoom_mode_fit_height">Ajuster à la hauteur</string> <string name="zoom_mode_fit_height">Ajuster à la hauteur</string>
<string name="zoom_mode_fit_center">Ajuster au centre</string> <string name="zoom_mode_fit_center">Ajuster au centre</string>
<string name="scale_mode">Mode mise à l\'échelle</string> <string name="scale_mode">Mode mise à l\'échelle</string>
<string name="create_category">Nouvelle catégorie</string> <string name="create_category">Nouvelle catégorie</string>
<string name="right_to_left">De droite à gauche</string> <string name="right_to_left">De droite à gauche</string>
<string name="no_update_available">Aucune mise à jour disponible</string> <string name="no_update_available">Aucune mise à jour disponible</string>
<string name="check_for_updates">Vérifier les mises à jour</string> <string name="check_for_updates">Vérifier les mises à jour</string>
<string name="app_version">Version %s</string> <string name="app_version">Version %s</string>
<string name="about">À propos</string> <string name="about">À propos</string>
<string name="passwords_mismatch">Les mots de passe ne correspondent pas</string> <string name="passwords_mismatch">Les mots de passe ne correspondent pas</string>
<string name="repeat_password">Répéter le mot de passe</string> <string name="repeat_password">Répéter le mot de passe</string>
<string name="protect_application_summary">Demander le mot de passe au démarrage de Kotatsu</string> <string name="protect_application_summary">Demander le mot de passe au démarrage de Kotatsu</string>
<string name="protect_application">Protéger l\'application</string> <string name="protect_application">Protéger l\'application</string>
<string name="wrong_password">Mot de passe erroné</string> <string name="wrong_password">Mot de passe erroné</string>
<string name="enter_password">Entrez le mot de passe</string> <string name="enter_password">Entrez le mot de passe</string>
<string name="dont_check">Ne pas vérifier</string> <string name="dont_check">Ne pas vérifier</string>
<string name="track_sources">Rechercher les mises à jour</string> <string name="track_sources">Rechercher les mises à jour</string>
<string name="feed_will_update_soon">La mise à jour des flux commencera bientôt</string> <string name="feed_will_update_soon">La mise à jour des flux commencera bientôt</string>
<string name="update">Mettre à Jour</string> <string name="update">Mettre à Jour</string>
<string name="rotate_screen">Faire pivoter l\'écran</string> <string name="rotate_screen">Faire pivoter l\'écran</string>
<string name="updates_feed_cleared">Effacé</string> <string name="updates_feed_cleared">Effacé</string>
<string name="clear_updates_feed">Effacer le flux des mises à jour</string> <string name="clear_updates_feed">Effacer le flux des mises à jour</string>
<string name="size_s">Taille : %s</string> <string name="size_s">Taille : %s</string>
<string name="new_version_s">Nouvelle version : %s</string> <string name="new_version_s">Nouvelle version : %s</string>
<string name="search_results">Résultats de la recherche</string> <string name="search_results">Résultats de la recherche</string>
<string name="text_feed_holder">Les nouveaux chapitres de ce que vous lisez sont présentés ici</string> <string name="text_feed_holder">Les nouveaux chapitres de ce que vous lisez sont présentés ici</string>
<string name="updates">Mises à jour</string> <string name="updates">Mises à jour</string>
<string name="read_later">Lire plus tard</string> <string name="read_later">Lire plus tard</string>
<string name="favourites_category_empty">Catégorie vide</string> <string name="favourites_category_empty">Catégorie vide</string>
<string name="all_favourites">Tous les favoris</string> <string name="all_favourites">Tous les favoris</string>
<string name="done">Terminé</string> <string name="done">Terminé</string>
<string name="other_storage">Autre stockage</string> <string name="other_storage">Autre stockage</string>
<string name="cannot_find_available_storage">Pas de stockage disponible</string> <string name="cannot_find_available_storage">Pas de stockage disponible</string>
<string name="not_available">Non disponible</string> <string name="not_available">Non disponible</string>
<string name="manga_save_location">Dossier pour les téléchargements</string> <string name="manga_save_location">Dossier pour les téléchargements</string>
<string name="pages_animation">Animation de page</string> <string name="pages_animation">Animation de page</string>
<string name="recent_manga">Récents</string> <string name="recent_manga">Récents</string>
<string name="manga_shelf">Étagère</string> <string name="manga_shelf">Étagère</string>
<string name="text_local_holder_secondary">Enregistrez-le à partir de sources en ligne ou importez des fichiers.</string> <string name="text_local_holder_secondary">Enregistrez-le à partir de sources en ligne ou importez des fichiers.</string>
<string name="text_local_holder_primary">Sauvegardez d\'abord quelque chose</string> <string name="text_local_holder_primary">Sauvegardez d\'abord quelque chose</string>
<string name="text_history_holder_secondary">Trouvez ce que vous voulez lire dans le menu latéral.</string> <string name="text_history_holder_secondary">Trouvez ce que vous voulez lire dans le menu latéral.</string>
<string name="text_history_holder_primary">Ce que vous lisez sera affiché ici</string> <string name="text_history_holder_primary">Ce que vous lisez sera affiché ici</string>
<string name="text_search_holder_secondary">Essayez de reformuler la requête.</string> <string name="text_search_holder_secondary">Essayez de reformuler la requête.</string>
<string name="text_empty_holder_primary">C\'est un peu vide ici…</string> <string name="text_empty_holder_primary">C\'est un peu vide ici…</string>
<string name="remove_category">Retirer</string> <string name="remove_category">Retirer</string>
<string name="favourites_categories">Catégories favorites</string> <string name="favourites_categories">Catégories favorites</string>
<string name="vibration">Vibration</string> <string name="vibration">Vibration</string>
<string name="light_indicator">Indicateur lumineux</string> <string name="light_indicator">Indicateur lumineux</string>
<string name="notification_sound">Son de notification</string> <string name="notification_sound">Son de notification</string>
<string name="notifications_settings">Paramètres des notifications</string> <string name="notifications_settings">Paramètres des notifications</string>
<string name="download">Télécharger</string> <string name="download">Télécharger</string>
<string name="new_chapters">Nouveaux chapitres</string> <string name="new_chapters">Nouveaux chapitres</string>
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d de %2$d activé(s)</string> <string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d de %2$d activé(s)</string>
<string name="notifications">Notifications</string> <string name="notifications">Notifications</string>
<string name="large_manga_save_confirm">Ce manga a %s. Tout sauvegarder \?</string> <string name="large_manga_save_confirm">Ce manga a %s. Tout sauvegarder \?</string>
<string name="save_manga">Enregistrer</string> <string name="save_manga">Enregistrer</string>
<string name="open_in_browser">Ouvrir dans le navigateur</string> <string name="open_in_browser">Ouvrir dans le navigateur</string>
<string name="app_update_available">Une nouvelle version de l\'application est disponible</string> <string name="app_update_available">Une nouvelle version de l\'application est disponible</string>
<string name="domain">Domaine</string> <string name="domain">Domaine</string>
<string name="external_storage">Stockage externe</string> <string name="external_storage">Stockage externe</string>
<string name="internal_storage">Stockage interne</string> <string name="internal_storage">Stockage interne</string>
<string name="gestures_only">Gestes uniquement</string> <string name="gestures_only">Gestes uniquement</string>
<string name="search_history_cleared">Effacé</string> <string name="search_history_cleared">Effacé</string>
<string name="clear_search_history">Effacer l\'historique de recherche</string> <string name="clear_search_history">Effacer l\'historique de recherche</string>
<string name="clear_thumbs_cache">Vider le cache des miniatures</string> <string name="clear_thumbs_cache">Vider le cache des miniatures</string>
<string name="error">Erreur</string> <string name="error">Erreur</string>
<string name="_continue">Continuer</string> <string name="_continue">Continuer</string>
<string name="volume_buttons">Boutons de volume</string> <string name="volume_buttons">Boutons de volume</string>
<string name="taps_on_edges">Appuis au bord</string> <string name="taps_on_edges">Appuis au bord</string>
<string name="switch_pages">Changer de pages</string> <string name="switch_pages">Changer de pages</string>
<string name="reader_settings">Paramètres du lecteur</string> <string name="reader_settings">Paramètres du lecteur</string>
<string name="text_delete_local_manga">Supprimer « %s » de l\'appareil de façon permanente \?</string> <string name="text_delete_local_manga">Supprimer « %s » de l\'appareil de façon permanente \?</string>
<string name="delete_manga">Supprimer le manga</string> <string name="delete_manga">Supprimer le manga</string>
<string name="search_on_s">Rechercher sur %s</string> <string name="search_on_s">Rechercher sur %s</string>
<string name="grid_size">Taille de la grille</string> <string name="grid_size">Taille de la grille</string>
<string name="read_mode">Mode lecture</string> <string name="read_mode">Mode lecture</string>
<string name="webtoon">Webtoon</string> <string name="webtoon">Webtoon</string>
<string name="standard">Standard</string> <string name="standard">Standard</string>
<string name="text_file_sizes">o|ko|Mo|Go|To</string> <string name="text_file_sizes">o|ko|Mo|Go|To</string>
<string name="clear_pages_cache">Vider le cache de la page</string> <string name="clear_pages_cache">Vider le cache de la page</string>
<string name="no_description">Aucune description</string> <string name="no_description">Aucune description</string>
<string name="text_file_not_supported">Choisissez un fichier ZIP ou CBZ.</string> <string name="text_file_not_supported">Choisissez un fichier ZIP ou CBZ.</string>
<string name="operation_not_supported">Cette opération n\'est pas prise en charge</string> <string name="operation_not_supported">Cette opération n\'est pas prise en charge</string>
<string name="delete">Supprimer</string> <string name="delete">Supprimer</string>
<string name="_import">Importer</string> <string name="_import">Importer</string>
<string name="share_image">Partager l\'image</string> <string name="share_image">Partager l\'image</string>
<string name="page_saved">Sauvegardé</string> <string name="page_saved">Sauvegardé</string>
<string name="save_page">Sauvegarder la page</string> <string name="save_page">Sauvegarder la page</string>
<string name="_s_deleted_from_local_storage">« %s » supprimé du stockage local</string> <string name="_s_deleted_from_local_storage">« %s » supprimé du stockage local</string>
<string name="remove">Retirer</string> <string name="remove">Retirer</string>
<string name="text_clear_history_prompt">Effacer définitivement l\'historique de lecture \?</string> <string name="text_clear_history_prompt">Effacer définitivement l\'historique de lecture \?</string>
<string name="clear">Effacer</string> <string name="clear">Effacer</string>
<string name="pages">Pages</string> <string name="pages">Pages</string>
<string name="automatic">Suivre le système</string> <string name="automatic">Suivre le système</string>
<string name="dark">Sombre</string> <string name="dark">Sombre</string>
<string name="light">Clair</string> <string name="light">Clair</string>
<string name="theme">Thème</string> <string name="theme">Thème</string>
<string name="filter">Filtre</string> <string name="filter">Filtre</string>
<string name="sort_order">Ordre de tri</string> <string name="sort_order">Ordre de tri</string>
<string name="by_rating">Évaluation</string> <string name="by_rating">Évaluation</string>
<string name="newest">Le plus récent</string> <string name="newest">Le plus récent</string>
<string name="updated">Mis à jour</string> <string name="updated">Mis à jour</string>
<string name="popular">Populaire</string> <string name="popular">Populaire</string>
<string name="by_name">Nom</string> <string name="by_name">Nom</string>
<string name="downloads">Téléchargements</string> <string name="downloads">Téléchargements</string>
<string name="download_complete">Téléchargé</string> <string name="download_complete">Téléchargé</string>
<string name="processing_">Traitement…</string> <string name="processing_">Traitement…</string>
<string name="manga_downloading_">Téléchargement…</string> <string name="manga_downloading_">Téléchargement…</string>
<string name="search_manga">Rechercher un manga</string> <string name="search_manga">Rechercher un manga</string>
<string name="search">Rechercher</string> <string name="search">Rechercher</string>
<string name="share_s">Partager %s</string> <string name="share_s">Partager %s</string>
<string name="create_shortcut">Créer un raccourci…</string> <string name="create_shortcut">Créer un raccourci…</string>
<string name="share">Partager</string> <string name="share">Partager</string>
<string name="save">Enregistrer</string> <string name="save">Enregistrer</string>
<string name="add">Ajouter</string> <string name="add">Ajouter</string>
<string name="add_new_category">Nouvelle catégorie</string> <string name="add_new_category">Nouvelle catégorie</string>
<string name="add_to_favourites">Ajouter aux favoris</string> <string name="add_to_favourites">Ajouter aux favoris</string>
<string name="you_have_not_favourites_yet">Aucun favori pour le moment</string> <string name="you_have_not_favourites_yet">Aucun favori pour le moment</string>
<string name="read">Lire</string> <string name="read">Lire</string>
<string name="history_is_empty">Pas encore d\'historique</string> <string name="history_is_empty">Pas encore d\'historique</string>
<string name="nothing_found">Rien n\'a été trouvé</string> <string name="nothing_found">Rien n\'a été trouvé</string>
<string name="clear_history">Effacer l\'historique</string> <string name="clear_history">Effacer l\'historique</string>
<string name="try_again">Réessayer</string> <string name="try_again">Réessayer</string>
<string name="close">Fermer</string> <string name="close">Fermer</string>
<string name="chapter_d_of_d">Chapitre %1$d sur %2$d</string> <string name="chapter_d_of_d">Chapitre %1$d sur %2$d</string>
<string name="loading_">Chargement…</string> <string name="loading_">Chargement…</string>
<string name="remote_sources">Sources des mangas</string> <string name="remote_sources">Sources des mangas</string>
<string name="settings">Paramètres</string> <string name="settings">Paramètres</string>
<string name="list_mode">Mode liste</string> <string name="list_mode">Mode liste</string>
<string name="grid">Grille</string> <string name="grid">Grille</string>
<string name="detailed_list">Liste détaillée</string> <string name="detailed_list">Liste détaillée</string>
<string name="list">Liste</string> <string name="list">Liste</string>
<string name="chapters">Chapitres</string> <string name="chapters">Chapitres</string>
<string name="details">Détails</string> <string name="details">Détails</string>
<string name="network_error">Erreur réseau</string> <string name="network_error">Erreur réseau</string>
<string name="error_occurred">Une erreur s\'est produite</string> <string name="error_occurred">Une erreur s\'est produite</string>
<string name="history">Historique</string> <string name="history">Historique</string>
<string name="favourites">Favoris</string> <string name="favourites">Favoris</string>
<string name="local_storage">Stockage local</string> <string name="local_storage">Stockage local</string>
<string name="chapter_is_missing">Le chapitre est manquant</string> <string name="chapter_is_missing">Le chapitre est manquant</string>
<string name="queued">En file d\'attente</string> <string name="queued">En file d\'attente</string>
<string name="about_app_translation">Traduction</string> <string name="about_app_translation">Traduction</string>
<string name="about_app_translation_summary">Traduire cette application</string> <string name="about_app_translation_summary">Traduire cette application</string>
<string name="genres">Genres</string> <string name="genres">Genres</string>
<string name="text_clear_cookies_prompt">Vous serez déconnecté de toutes les sources</string> <string name="text_clear_cookies_prompt">Vous serez déconnecté de toutes les sources</string>
<string name="auth_not_supported_by">La connexion sur %s n\'est pas prise en charge</string> <string name="auth_not_supported_by">La connexion sur %s n\'est pas prise en charge</string>
<string name="auth_complete">Autorisé</string> <string name="auth_complete">Autorisé</string>
<string name="state_finished">Terminé</string> <string name="state_finished">Terminé</string>
<string name="state_ongoing">En cours</string> <string name="state_ongoing">En cours</string>
<string name="system_default">Par défaut</string> <string name="system_default">Par défaut</string>
<string name="exclude_nsfw_from_history">Exclure les mangas osés de l\'historique</string> <string name="exclude_nsfw_from_history">Exclure les mangas osés de l\'historique</string>
<string name="show_pages_numbers">Pages numérotées</string> <string name="show_pages_numbers">Pages numérotées</string>
<string name="enabled_sources">Sources utilisées</string> <string name="enabled_sources">Sources utilisées</string>
<string name="available_sources">Sources disponibles</string> <string name="available_sources">Sources disponibles</string>
<string name="computing_">Calcul…</string> <string name="computing_">Calcul…</string>
<string name="screenshots_block_nsfw">Bloquer pour contenu sensible</string> <string name="screenshots_block_nsfw">Bloquer pour contenu sensible</string>
<string name="screenshots_block_all">Toujours bloquer</string> <string name="screenshots_block_all">Toujours bloquer</string>
<string name="screenshots_policy">Politique relative aux captures d\'écran</string> <string name="screenshots_policy">Politique relative aux captures d\'écran</string>
<string name="screenshots_allow">Autoriser</string> <string name="screenshots_allow">Autoriser</string>
<string name="suggestions">Suggestions</string> <string name="suggestions">Suggestions</string>
<string name="exclude_nsfw_from_suggestions">Ne pas suggérer de mangas osés</string> <string name="exclude_nsfw_from_suggestions">Ne pas suggérer de mangas osés</string>
<string name="suggestions_enable">Activer les suggestions</string> <string name="suggestions_enable">Activer les suggestions</string>
<string name="suggestions_summary">Suggérer des mangas en fonction de vos préférences</string> <string name="suggestions_summary">Suggérer des mangas en fonction de vos préférences</string>
<string name="suggestions_info">Toutes les données sont analysées localement sur cet appareil et ne sont jamais envoyées ailleurs.</string> <string name="suggestions_info">Toutes les données sont analysées localement sur cet appareil et ne sont jamais envoyées ailleurs.</string>
<string name="text_suggestion_holder">Commencez à lire des mangas et vous recevrez des suggestions personnalisées</string> <string name="text_suggestion_holder">Commencez à lire des mangas et vous recevrez des suggestions personnalisées</string>
<string name="filter_load_error">Impossible de charger la liste des genres</string> <string name="filter_load_error">Impossible de charger la liste des genres</string>
<string name="enabled">Activé</string> <string name="enabled">Activé</string>
<string name="disabled">Désactivé</string> <string name="disabled">Désactivé</string>
<string name="only_using_wifi">Uniquement en Wi-Fi</string> <string name="only_using_wifi">Uniquement en Wi-Fi</string>
<string name="always">Toujours</string> <string name="always">Toujours</string>
<string name="preload_pages">Précharger les pages</string> <string name="preload_pages">Précharger les pages</string>
<string name="never">Jamais</string> <string name="never">Jamais</string>
<string name="reset_filter">Réinitialiser le filtre</string> <string name="reset_filter">Réinitialiser le filtre</string>
<string name="onboard_text">Sélectionnez les langues dans lesquelles vous souhaitez lire les mangas. Vous pouvez le changer plus tard dans les paramètres.</string> <string name="onboard_text">Sélectionnez les langues dans lesquelles vous souhaitez lire les mangas. Vous pouvez le changer plus tard dans les paramètres.</string>
<string name="logged_in_as">Connecté en tant que %s</string> <string name="logged_in_as">Connecté en tant que %s</string>
<string name="nsfw">18+</string> <string name="nsfw">18+</string>
<string name="various_languages">Langues diverses</string> <string name="various_languages">Langues diverses</string>
<string name="search_chapters">Trouver un chapitre</string> <string name="search_chapters">Trouver un chapitre</string>
<string name="chapters_empty">Pas de chapitres dans ce manga</string> <string name="chapters_empty">Pas de chapitres dans ce manga</string>
<string name="percent_string_pattern">%1$s%%</string> <string name="percent_string_pattern">%1$s%%</string>
<string name="appearance">Apparence</string> <string name="appearance">Apparence</string>
<string name="suggestions_updating">Mise à jour des suggestions</string> <string name="suggestions_updating">Mise à jour des suggestions</string>
<string name="suggestions_excluded_genres">Exclure des genres</string> <string name="suggestions_excluded_genres">Exclure des genres</string>
<string name="suggestions_excluded_genres_summary">Spécifiez les genres que vous ne voulez pas voir apparaître dans les suggestions</string> <string name="suggestions_excluded_genres_summary">Spécifiez les genres que vous ne voulez pas voir apparaître dans les suggestions</string>
<string name="text_delete_local_manga_batch">Supprimer définitivement les éléments sélectionnés de l\'appareil \?</string> <string name="text_delete_local_manga_batch">Supprimer définitivement les éléments sélectionnés de l\'appareil \?</string>
<string name="removal_completed">Suppression terminée</string> <string name="removal_completed">Suppression terminée</string>
<string name="download_slowdown">Ralentissement du téléchargement</string> <string name="download_slowdown">Ralentissement du téléchargement</string>
<string name="download_slowdown_summary">Permet d\'éviter le blocage de votre adresse IP</string> <string name="download_slowdown_summary">Permet d\'éviter le blocage de votre adresse IP</string>
<string name="chapters_will_removed_background">Les chapitres seront supprimés en arrière-plan</string> <string name="chapters_will_removed_background">Les chapitres seront supprimés en arrière-plan</string>
<string name="local_manga_processing">Traitement des mangas sauvegardés</string> <string name="local_manga_processing">Traitement des mangas sauvegardés</string>
<string name="hide">Masquer</string> <string name="hide">Masquer</string>
<string name="new_sources_text">De nouvelles sources de mangas sont disponibles</string> <string name="new_sources_text">De nouvelles sources de mangas sont disponibles</string>
<string name="check_new_chapters_title">Vérifier les nouveaux chapitres et les notifier</string> <string name="check_new_chapters_title">Vérifier les nouveaux chapitres et les notifier</string>
<string name="notifications_enable">Activer les notifications</string> <string name="notifications_enable">Activer les notifications</string>
<string name="show_notification_new_chapters_on">Vous recevrez des notifications sur les mises à jour des mangas que vous lisez</string> <string name="show_notification_new_chapters_on">Vous recevrez des notifications sur les mises à jour des mangas que vous lisez</string>
<string name="show_notification_new_chapters_off">Vous ne recevrez pas de notifications mais les nouveaux chapitres seront mis en évidence dans les listes</string> <string name="show_notification_new_chapters_off">Vous ne recevrez pas de notifications mais les nouveaux chapitres seront mis en évidence dans les listes</string>
<string name="empty_favourite_categories">Pas de catégories préférées</string> <string name="empty_favourite_categories">Pas de catégories préférées</string>
<string name="name">Nom</string> <string name="name">Nom</string>
<string name="edit">Modifier</string> <string name="edit">Modifier</string>
<string name="edit_category">Modifier la catégorie</string> <string name="edit_category">Modifier la catégorie</string>
<string name="bookmark_add">Ajouter un marque-page</string> <string name="bookmark_add">Ajouter un marque-page</string>
<string name="bookmark_remove">Retirer le marque-page</string> <string name="bookmark_remove">Retirer le marque-page</string>
<string name="bookmarks">Marque-pages</string> <string name="bookmarks">Marque-pages</string>
<string name="bookmark_added">Marque-page ajouté</string> <string name="bookmark_added">Marque-page ajouté</string>
<string name="bookmark_removed">Marque-page retiré</string> <string name="bookmark_removed">Marque-page retiré</string>
<string name="undo">Annuler</string> <string name="undo">Annuler</string>
<string name="removed_from_history">Retiré de l\'historique</string> <string name="removed_from_history">Retiré de l\'historique</string>
<string name="dns_over_https">DNS sur HTTPS</string> <string name="dns_over_https">DNS sur HTTPS</string>
<string name="default_mode">Mode par défaut</string> <string name="default_mode">Mode par défaut</string>
<string name="detect_reader_mode">Mode de détection automatique du lecteur</string> <string name="detect_reader_mode">Mode de détection automatique du lecteur</string>
<string name="detect_reader_mode_summary">Détecter automatiquement si un manga est un webtoon</string> <string name="detect_reader_mode_summary">Détecter automatiquement si un manga est un webtoon</string>
<string name="disable_battery_optimization">Désactiver l\'optimisation de la batterie</string> <string name="disable_battery_optimization">Désactiver l\'optimisation de la batterie</string>
<string name="disable_battery_optimization_summary">Aide à la vérification des mises à jour des antécédents</string> <string name="disable_battery_optimization_summary">Aide à la vérification des mises à jour des antécédents</string>
<string name="crash_text">Un problème est survenu. Veuillez soumettre un rapport de bogue aux développeurs pour nous aider à le corriger.</string> <string name="crash_text">Un problème est survenu. Veuillez soumettre un rapport de bogue aux développeurs pour nous aider à le corriger.</string>
<string name="send">Envoyer</string> <string name="send">Envoyer</string>
<string name="disable_all">Tout désactiver</string> <string name="disable_all">Tout désactiver</string>
<string name="use_fingerprint">Utiliser l\'empreinte digitale si elle est disponible</string> <string name="use_fingerprint">Utiliser l\'empreinte digitale si elle est disponible</string>
<string name="appwidget_recent_description">Vos mangas récemment lus</string> <string name="appwidget_recent_description">Vos mangas récemment lus</string>
<string name="appwidget_shelf_description">Les mangas de vos favoris</string> <string name="appwidget_shelf_description">Les mangas de vos favoris</string>
<string name="report">Signaler</string> <string name="report">Signaler</string>
<string name="tracking">Suivi</string> <string name="tracking">Suivi</string>
<string name="status_planned">Planifié</string> <string name="status_planned">Planifié</string>
<string name="status_reading">Lecture</string> <string name="status_reading">Lecture</string>
<string name="show_reading_indicators">Afficher les indicateurs de progression de lecture</string> <string name="show_reading_indicators">Afficher les indicateurs de progression de lecture</string>
<string name="show_reading_indicators_summary">Afficher le pourcentage de lecture dans l\'historique et les favoris</string> <string name="show_reading_indicators_summary">Afficher le pourcentage de lecture dans l\'historique et les favoris</string>
<string name="exclude_nsfw_from_history_summary">Les mangas marqués comme étant pour adultes ne seront jamais ajoutés à l\'historique et votre progression ne sera pas sauvegardée</string> <string name="exclude_nsfw_from_history_summary">Les mangas marqués comme étant pour adultes ne seront jamais ajoutés à l\'historique et votre progression ne sera pas sauvegardée</string>
<string name="clear_cookies_summary">Peut aider en cas de problème. Toutes les autorisations seront invalidées</string> <string name="clear_cookies_summary">Peut aider en cas de problème. Toutes les autorisations seront invalidées</string>
<string name="show_all">Tout afficher</string> <string name="show_all">Tout afficher</string>
<string name="status_on_hold">En attente</string> <string name="status_on_hold">En attente</string>
<string name="status_dropped">Abandonné</string> <string name="status_dropped">Abandonné</string>
<string name="data_deletion">Suppression des données</string> <string name="data_deletion">Suppression des données</string>
<string name="logout">Se déconnecter</string> <string name="logout">Se déconnecter</string>
<string name="status_completed">Terminé</string> <string name="status_completed">Terminé</string>
<string name="status_re_reading">Relecture</string> <string name="status_re_reading">Relecture</string>
<string name="invalid_domain_message">Domaine invalide</string> <string name="invalid_domain_message">Domaine invalide</string>
<string name="select_range">Sélectionner une plage</string> <string name="select_range">Sélectionner une plage</string>
<string name="not_found_404">Contenu non trouvé ou supprimé</string> <string name="not_found_404">Contenu non trouvé ou supprimé</string>
<string name="manga_error_description_pattern">Détails de l\'erreur:&lt;br&gt;&lt;tt&gt;%1$s&lt;/tt&gt;&lt;br&gt;&lt;br&gt;1. Essayez d\'&lt;a href=%2$s&gt;ouvrir le manga dans un navigateur web&lt;/a&gt; pour vous assurer qu\'il est disponible sur sa source&lt;br&gt;2. Assurez-vous que vous utilisez la &lt;a href=kotatsu://about&gt;dernière version de Kotatsu&lt;/a&gt;&lt;br&gt;3. Si elle est disponible, envoyez un rapport d\'erreur aux développeurs.</string> <string name="manga_error_description_pattern">Détails de l\'erreur:&lt;br&gt;&lt;tt&gt;%1$s&lt;/tt&gt;&lt;br&gt;&lt;br&gt;1. Essayez d\'&lt;a href=%2$s&gt;ouvrir le manga dans un navigateur web&lt;/a&gt; pour vous assurer qu\'il est disponible sur sa source&lt;br&gt;2. Assurez-vous que vous utilisez la &lt;a href=kotatsu://about&gt;dernière version de Kotatsu&lt;/a&gt;&lt;br&gt;3. Si elle est disponible, envoyez un rapport d\'erreur aux développeurs.</string>
<string name="confirm_exit">Rappuyez sur Retour pour quitter</string> <string name="confirm_exit">Rappuyez sur Retour pour quitter</string>
<string name="categories_delete_confirm">Êtes-vous sûr·e de vouloir supprimer les catégories de favoris sélectionnées \? <string name="categories_delete_confirm">Êtes-vous sûr·e de vouloir supprimer les catégories de favoris sélectionnées \?
\nTous les mangas qui s\'y trouvent seront perdus et ceci ne peut pas être annulé.</string> \nTous les mangas qui s\'y trouvent seront perdus et ceci ne peut pas être annulé.</string>
<string name="exit_confirmation_summary">Appuyez deux fois sur la touche Retour pour quitter l\'appli</string> <string name="exit_confirmation_summary">Appuyez deux fois sur la touche Retour pour quitter l\'appli</string>
<string name="available">Disponible</string> <string name="available">Disponible</string>
<string name="exit_confirmation">Confirmation de sortie</string> <string name="exit_confirmation">Confirmation de sortie</string>
<string name="memory_usage_pattern">%s - %s</string> <string name="memory_usage_pattern">%s - %s</string>
<string name="feed">Flux</string> <string name="feed">Flux</string>
<string name="importing_manga">Importation de mangas</string> <string name="importing_manga">Importation de mangas</string>
<string name="removed_from_favourites">Retiré des favoris</string> <string name="removed_from_favourites">Retiré des favoris</string>
<string name="clear_all_history">Effacer tout l\'historique</string> <string name="clear_all_history">Effacer tout l\'historique</string>
<string name="last_2_hours">Les 2 dernières heures</string> <string name="last_2_hours">Les 2 dernières heures</string>
<string name="history_cleared">Historique effacé</string> <string name="history_cleared">Historique effacé</string>
<string name="manage">Gérer</string> <string name="manage">Gérer</string>
<string name="no_bookmarks_yet">Aucun marque-page</string> <string name="no_bookmarks_yet">Aucun marque-page</string>
<string name="no_bookmarks_summary">Vous pouvez créer un marque-page pendant la lecture d\'un manga</string> <string name="no_bookmarks_summary">Vous pouvez créer un marque-page pendant la lecture d\'un manga</string>
<string name="bookmarks_removed">Marque-pages supprimés</string> <string name="bookmarks_removed">Marque-pages supprimés</string>
<string name="no_manga_sources">Aucune source de mangas</string> <string name="no_manga_sources">Aucune source de mangas</string>
<string name="no_manga_sources_text">Autoriser les sources de mangas de lire des mangas en ligne</string> <string name="no_manga_sources_text">Autoriser les sources de mangas de lire des mangas en ligne</string>
<string name="random">Aléatoire</string> <string name="random">Aléatoire</string>
<string name="reorder">Réordonner</string> <string name="reorder">Réordonner</string>
<string name="empty">Vide</string> <string name="empty">Vide</string>
<string name="explore">Explorer</string> <string name="explore">Explorer</string>
<string name="text_shelf_holder_primary">Vos mangas seront affichés ici</string> <string name="text_shelf_holder_primary">Vos mangas seront affichés ici</string>
<string name="text_shelf_holder_secondary">Trouvez ce que vous voulez lire dans la section « Explorer »</string> <string name="text_shelf_holder_secondary">Trouvez ce que vous voulez lire dans la section « Explorer »</string>
<string name="canceled">Annulé</string> <string name="canceled">Annulé</string>
<string name="account_already_exists">Le compte existe déjà</string> <string name="account_already_exists">Le compte existe déjà</string>
<string name="back">Retour</string> <string name="back">Retour</string>
<string name="sync">Synchronisation</string> <string name="sync">Synchronisation</string>
<string name="sync_title">Synchronisez vos données</string> <string name="sync_title">Synchronisez vos données</string>
<string name="email_enter_hint">Entrez votre courriel pour continuer</string> <string name="email_enter_hint">Entrez votre courriel pour continuer</string>
<string name="saved_manga">Mangas sauvegardés</string> <string name="saved_manga">Mangas sauvegardés</string>
<string name="pages_cache">Cache des pages</string> <string name="pages_cache">Cache des pages</string>
<string name="other_cache">Autre cache</string> <string name="other_cache">Autre cache</string>
<string name="storage_usage">Utilisation du stockage</string> <string name="storage_usage">Utilisation du stockage</string>
<string name="options">Options</string> <string name="options">Options</string>
<string name="incognito_mode">Mode incognito</string> <string name="incognito_mode">Mode incognito</string>
<string name="no_chapters">Aucun chapitre</string> <string name="no_chapters">Aucun chapitre</string>
<string name="automatic_scroll">Défilement automatique</string> <string name="automatic_scroll">Défilement automatique</string>
<string name="reader_info_pattern">Ch. %1$d/%2$d Pg. %3$d/%4$d</string> <string name="reader_info_pattern">Ch. %1$d/%2$d Pg. %3$d/%4$d</string>
<string name="reader_info_bar">Afficher la barre d\'infos dans le lecteur</string> <string name="reader_info_bar">Afficher la barre d\'infos dans le lecteur</string>
<string name="comics_archive">Archives des BD</string> <string name="comics_archive">Archives des BD</string>
<string name="folder_with_images">Dossier avec des images</string> <string name="folder_with_images">Dossier avec des images</string>
<string name="import_completed">Importation terminée</string> <string name="import_completed">Importation terminée</string>
<string name="import_completed_hint">Vous pouvez supprimer le fichier original du stockage pour gagner de l\'espace</string> <string name="import_completed_hint">Vous pouvez supprimer le fichier original du stockage pour gagner de l\'espace</string>
<string name="import_will_start_soon">L\'importation va bientôt commencer</string> <string name="import_will_start_soon">L\'importation va bientôt commencer</string>
<string name="text_unsaved_changes_prompt">Sauvegarde ou abandon des modifications non sauvegardées \?</string> <string name="text_unsaved_changes_prompt">Sauvegarde ou abandon des modifications non sauvegardées \?</string>
<string name="discard">Abandonner</string> <string name="discard">Abandonner</string>
<string name="history_shortcuts_summary">Rendre les mangas récents disponibles en appuyant longuement sur l\'icône de l\'application</string> <string name="history_shortcuts_summary">Rendre les mangas récents disponibles en appuyant longuement sur l\'icône de l\'application</string>
<string name="reader_control_ltr_summary">Taper sur le bord droit ou appuyer sur la touche droite permet toujours de passer à la page suivante</string> <string name="reader_control_ltr_summary">Taper sur le bord droit ou appuyer sur la touche droite permet toujours de passer à la page suivante</string>
<string name="reader_control_ltr">Contrôle ergonomique du lecteur</string> <string name="reader_control_ltr">Contrôle ergonomique du lecteur</string>
<string name="history_shortcuts">Afficher les raccourcis des mangas récents</string> <string name="history_shortcuts">Afficher les raccourcis des mangas récents</string>
<string name="color_correction">Correction des couleurs</string> <string name="color_correction">Correction des couleurs</string>
<string name="brightness">Luminosité</string> <string name="brightness">Luminosité</string>
<string name="contrast">Contraste</string> <string name="contrast">Contraste</string>
<string name="reset">Réinitialiser</string> <string name="reset">Réinitialiser</string>
<string name="color_correction_hint">Les paramètres de couleurs choisis seront sauvegardés pour ce manga</string> <string name="color_correction_hint">Les paramètres de couleurs choisis seront sauvegardés pour ce manga</string>
<string name="error_no_space_left">Il n\'y a plus d\'espace sur l\'appareil</string> <string name="error_no_space_left">Il n\'y a plus d\'espace sur l\'appareil</string>
<string name="reader_slider">Afficher le curseur de changement de page</string> <string name="reader_slider">Afficher le curseur de changement de page</string>
<string name="webtoon_zoom">Zoom Webtoon</string> <string name="webtoon_zoom">Zoom Webtoon</string>
<string name="network_unavailable_hint">Activez le Wi-Fi ou le réseau mobile pour lire les mangas en ligne</string> <string name="network_unavailable_hint">Activez le Wi-Fi ou le réseau mobile pour lire les mangas en ligne</string>
<string name="different_languages">Différentes langues</string> <string name="different_languages">Différentes langues</string>
<string name="network_unavailable">Le réseau n\'est pas disponible</string> <string name="network_unavailable">Le réseau n\'est pas disponible</string>
<string name="compact">Compact</string> <string name="compact">Compact</string>
<string name="server_error">Erreur côté serveur (%1$d). Veuillez réessayer plus tard</string> <string name="server_error">Erreur côté serveur (%1$d). Veuillez réessayer plus tard</string>
<string name="clear_new_chapters_counters">Effacer aussi les informations sur les nouveaux chapitres</string> <string name="clear_new_chapters_counters">Effacer aussi les informations sur les nouveaux chapitres</string>
<string name="source_disabled">Source désactivée</string> <string name="source_disabled">Source désactivée</string>
<string name="prefetch_content">Préchargement du contenu</string> <string name="prefetch_content">Préchargement du contenu</string>
<string name="mark_as_current">Marquer comme actuel</string> <string name="mark_as_current">Marquer comme actuel</string>
<string name="share_logs">Partager les journaux</string> <string name="share_logs">Partager les journaux</string>
<string name="enable_logging">Activer la journalisation</string> <string name="enable_logging">Activer la journalisation</string>
<string name="enable_logging_summary">Enregistrer certaines actions à des fins de débogage</string> <string name="enable_logging_summary">Enregistrer certaines actions à des fins de débogage</string>
<string name="language">Langue</string> <string name="language">Langue</string>
<string name="show_suspicious_content">Afficher le contenu suspect</string> <string name="show_suspicious_content">Afficher le contenu suspect</string>
<string name="theme_name_dynamic">Dynamique</string> <string name="theme_name_dynamic">Dynamique</string>
<string name="color_theme">Schéma de couleurs</string> <string name="color_theme">Schéma de couleurs</string>
<string name="show_in_grid_view">Afficher en vue grille</string> <string name="show_in_grid_view">Afficher en vue grille</string>
<string name="scrobbling_empty_hint">Pour suivre la progression de la lecture, sélectionnez Menu → Suivre sur l\'écran des détails du manga.</string> <string name="scrobbling_empty_hint">Pour suivre la progression de la lecture, sélectionnez Menu → Suivre sur l\'écran des détails du manga.</string>
<string name="services">Prestations de service</string> <string name="services">Prestations de service</string>
<string name="nothing_here">Il n\'y a rien ici</string> <string name="nothing_here">Il n\'y a rien ici</string>
<string name="theme_name_sakura">Sakura</string> <string name="theme_name_sakura">Sakura</string>
<string name="theme_name_rikka">Rikka</string> <string name="theme_name_rikka">Rikka</string>
<string name="theme_name_miku">Miku</string> <string name="theme_name_miku">Miku</string>
<string name="theme_name_asuka">Asuka</string> <string name="theme_name_asuka">Asuka</string>
<string name="theme_name_mion">Mion</string> <string name="theme_name_mion">Mion</string>
<string name="theme_name_mamimi">Mamimi</string> <string name="theme_name_mamimi">Mamimi</string>
<string name="allow_unstable_updates">Autoriser les mises à jour instables</string> <string name="allow_unstable_updates">Autoriser les mises à jour instables</string>
<string name="download_started">Téléchargement commencé</string> <string name="download_started">Téléchargement commencé</string>
<string name="theme_name_kanade">Kanade</string> <string name="theme_name_kanade">Kanade</string>
<string name="allow_unstable_updates_summary">Proposer des mises à jour des versions bêta de l\'application</string> <string name="allow_unstable_updates_summary">Proposer des mises à jour des versions bêta de l\'application</string>
<string name="user_agent">En-tête UserAgent</string> <string name="user_agent">En-tête UserAgent</string>
<string name="settings_apply_restart_required">Veuillez redémarrer l\'application pour appliquer ces changements</string> <string name="settings_apply_restart_required">Veuillez redémarrer l\'application pour appliquer ces changements</string>
<string name="got_it">Compris</string> <string name="got_it">Compris</string>
<string name="speed">Vitesse</string> <string name="speed">Vitesse</string>
<string name="restore_backup_description">Importer une sauvegarde des données de l\'utilisateur créée précédemment</string> <string name="restore_backup_description">Importer une sauvegarde des données de l\'utilisateur créée précédemment</string>
<string name="folder_with_images_import_description">Vous pouvez sélectionner un répertoire contenant des archives ou des images. Chaque archive (ou sous-répertoire) sera reconnue comme un chapitre.</string> <string name="folder_with_images_import_description">Vous pouvez sélectionner un répertoire contenant des archives ou des images. Chaque archive (ou sous-répertoire) sera reconnue comme un chapitre.</string>
<string name="comics_archive_import_description">Vous pouvez sélectionner un ou plusieurs fichiers .cbz ou .zip, chaque fichier sera reconnu comme un manga séparé.</string> <string name="comics_archive_import_description">Vous pouvez sélectionner un ou plusieurs fichiers .cbz ou .zip, chaque fichier sera reconnu comme un manga séparé.</string>
<string name="show_on_shelf">Afficher sur l\'étagère</string> <string name="show_on_shelf">Afficher sur l\'étagère</string>
<string name="sources_reorder_tip">Appuyez sur un élément et maintenez-le enfoncé pour le réorganiser</string> <string name="sources_reorder_tip">Appuyez sur un élément et maintenez-le enfoncé pour le réorganiser</string>
<string name="find_similar">Trouver des similaires</string> <string name="find_similar">Trouver des similaires</string>
<string name="downloads_wifi_only_summary">Arrêter le téléchargement lors du passage à un réseau mobile</string> <string name="downloads_wifi_only_summary">Arrêter le téléchargement lors du passage à un réseau mobile</string>
<string name="sync_auth_hint">Vous pouvez vous connecter à un compte existant ou en créer un nouveau</string> <string name="sync_auth_hint">Vous pouvez vous connecter à un compte existant ou en créer un nouveau</string>
<string name="server_address">Adresse du serveur</string> <string name="server_address">Adresse du serveur</string>
<string name="sync_host_description">Vous pouvez utiliser un serveur de synchronisation autohébergé ou un serveur par défaut. Ne modifiez pas ce paramètre si vous n\'êtes pas sûr·e de ce que vous faites.</string> <string name="sync_host_description">Vous pouvez utiliser un serveur de synchronisation autohébergé ou un serveur par défaut. Ne modifiez pas ce paramètre si vous n\'êtes pas sûr·e de ce que vous faites.</string>
<string name="remove_completed">Retrait terminé</string> <string name="remove_completed">Retrait terminé</string>
<string name="enable">Activer</string> <string name="enable">Activer</string>
<string name="no_thanks">Non merci</string> <string name="no_thanks">Non merci</string>
<string name="sync_settings">Paramètres de synchronisation</string> <string name="sync_settings">Paramètres de synchronisation</string>
<string name="ignore_ssl_errors">Ignorer les erreurs SSL</string> <string name="ignore_ssl_errors">Ignorer les erreurs SSL</string>
<string name="mirror_switching">Choisir le miroir automatiquement</string> <string name="mirror_switching">Choisir le miroir automatiquement</string>
<string name="mirror_switching_summary">Changement automatique de domaine pour les sources distantes en cas d\'erreur si des miroirs sont disponibles</string> <string name="mirror_switching_summary">Changement automatique de domaine pour les sources distantes en cas d\'erreur si des miroirs sont disponibles</string>
<string name="pause">Mettre en pause</string> <string name="pause">Mettre en pause</string>
<string name="resume">Reprendre</string> <string name="resume">Reprendre</string>
<string name="paused">En pause</string> <string name="paused">En pause</string>
<string name="cancel_all">Tout annuler</string> <string name="cancel_all">Tout annuler</string>
<string name="downloads_wifi_only">Téléchargement uniquement via Wi-Fi</string> <string name="downloads_wifi_only">Téléchargement uniquement via Wi-Fi</string>
<string name="remove_completed_downloads_confirm">L\'historique de vos téléchargements sera définitivement supprimé</string> <string name="remove_completed_downloads_confirm">L\'historique de vos téléchargements sera définitivement supprimé</string>
<string name="suggestions_notifications_summary">Notifications parfois affichées avec des mangas suggérés</string> <string name="suggestions_notifications_summary">Notifications parfois affichées avec des mangas suggérés</string>
<string name="cancel_all_downloads_confirm">Tous les téléchargements actifs seront annulés, les données partiellement téléchargées seront perdues</string> <string name="cancel_all_downloads_confirm">Tous les téléchargements actifs seront annulés, les données partiellement téléchargées seront perdues</string>
<string name="downloads_paused">Les téléchargements ont été interrompus</string> <string name="downloads_paused">Les téléchargements ont été interrompus</string>
<string name="suggestion_manga">Suggestion : %s</string> <string name="suggestion_manga">Suggestion : %s</string>
<string name="more">Plus</string> <string name="more">Plus</string>
<string name="text_downloads_list_holder">Vous n\'avez pas de téléchargements</string> <string name="text_downloads_list_holder">Vous n\'avez pas de téléchargements</string>
<string name="downloads_resumed">Les téléchargements ont repris</string> <string name="downloads_resumed">Les téléchargements ont repris</string>
<string name="downloads_removed">Les téléchargements ont été supprimés</string> <string name="downloads_removed">Les téléchargements ont été supprimés</string>
<string name="downloads_cancelled">Les téléchargements ont été annulés</string> <string name="downloads_cancelled">Les téléchargements ont été annulés</string>
<string name="suggestions_enable_prompt">Voulez-vous recevoir des suggestions de mangas personnalisées \?</string> <string name="suggestions_enable_prompt">Voulez-vous recevoir des suggestions de mangas personnalisées \?</string>
<string name="web_view_unavailable">WebView non disponible : vérifier si le fournisseur WebView est installé</string> <string name="web_view_unavailable">WebView non disponible : vérifier si le fournisseur WebView est installé</string>
<string name="translations">Traductions</string> <string name="translations">Traductions</string>
<string name="clear_network_cache">Effacer le cache réseau</string> <string name="clear_network_cache">Effacer le cache réseau</string>
<string name="type">Taper</string> <string name="type">Taper</string>
<string name="address">Adresse</string> <string name="address">Adresse</string>
<string name="port">Port</string> <string name="port">Port</string>
<string name="proxy">Proxy</string> <string name="proxy">Proxy</string>
<string name="downloaded">Téléchargé</string> <string name="downloaded">Téléchargé</string>
<string name="username">Pseudonyme</string> <string name="username">Pseudonyme</string>
<string name="images_proxy_title">Proxy d\'optimisation des images</string> <string name="images_proxy_title">Proxy d\'optimisation des images</string>
<string name="invert_colors">Inverser les couleurs</string> <string name="invert_colors">Inverser les couleurs</string>
<string name="images_procy_description">Utilisez le service wsrv.nl pour réduire le trafic et augmenter la vitesse de chargement des images si possible</string> <string name="images_procy_description">Utilisez le service wsrv.nl pour réduire le trafic et augmenter la vitesse de chargement des images si possible</string>
<string name="manga_branch_title_template">%1$s (%2$s)</string> <string name="manga_branch_title_template">%1$s (%2$s)</string>
<string name="password">Mot de passe</string> <string name="password">Mot de passe</string>
<string name="invalid_value_message">Valeur invalide</string> <string name="invalid_value_message">Valeur invalide</string>
<string name="authorization_optional">Autorisation (optionnel)</string> <string name="authorization_optional">Autorisation (optionnel)</string>
</resources> <string name="invalid_port_number">Numéro de port invalide</string>
<string name="restore_summary">Restaurer la sauvegarde précédemment créée</string>
<string name="webtoon_zoom_summary">Autoriser le geste de zoom avant en mode webtoon</string>
<string name="reader_info_bar_summary">Afficher l\'heure actuelle et la progression de la lecture en haut de l\'écran</string>
<string name="pages_animation_summary">Animation de tournage de page</string>
<string name="details_button_tip">Appuyez et maintenez le bouton Lire pour voir plus d\'options</string>
<string name="network">Réseau</string>
<string name="data_and_privacy">Données et confidentialité</string>
<string name="show_pages_numbers_summary">Afficher les numéros de page dans le coin inférieur</string>
</resources>

View File

@@ -359,4 +359,5 @@
<string name="allow_unstable_updates">Tillat ustøe oppdateringar</string> <string name="allow_unstable_updates">Tillat ustøe oppdateringar</string>
<string name="downloads_wifi_only">Hent berre på WiFi</string> <string name="downloads_wifi_only">Hent berre på WiFi</string>
<string name="downloads_wifi_only_summary">Stans all henting når du byter til eit mobilnettverk</string> <string name="downloads_wifi_only_summary">Stans all henting når du byter til eit mobilnettverk</string>
<string name="find_similar">Finn liknande</string>
</resources> </resources>

View File

@@ -1,369 +1,374 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="local_storage">Armazenamento local</string> <string name="local_storage">Armazenamento local</string>
<string name="favourites">Favoritos</string> <string name="favourites">Favoritos</string>
<string name="error_occurred">Um erro ocorreu</string> <string name="error_occurred">Um erro ocorreu</string>
<string name="network_error">Erro de rede</string> <string name="network_error">Erro de rede</string>
<string name="details">Detalhes</string> <string name="details">Detalhes</string>
<string name="list">Lista</string> <string name="list">Lista</string>
<string name="detailed_list">Lista detalhada</string> <string name="detailed_list">Lista detalhada</string>
<string name="grid">Grade</string> <string name="grid">Grade</string>
<string name="list_mode">Modo lista</string> <string name="list_mode">Modo lista</string>
<string name="settings">Configurações</string> <string name="settings">Configurações</string>
<string name="loading_">A carregar…</string> <string name="loading_">A carregar…</string>
<string name="chapter_d_of_d">Capítulo %1$d de %2$d</string> <string name="chapter_d_of_d">Capítulo %1$d de %2$d</string>
<string name="try_again">Tente novamente</string> <string name="try_again">Tente novamente</string>
<string name="clear_history">Limpar histórico</string> <string name="clear_history">Limpar histórico</string>
<string name="nothing_found">Nada encontrado</string> <string name="nothing_found">Nada encontrado</string>
<string name="history_is_empty">Sem histórico ainda</string> <string name="history_is_empty">Sem histórico ainda</string>
<string name="you_have_not_favourites_yet">Ainda não há favoritos</string> <string name="you_have_not_favourites_yet">Ainda não há favoritos</string>
<string name="add_to_favourites">Favoritar isso</string> <string name="add_to_favourites">Favoritar isso</string>
<string name="add">Adicionar</string> <string name="add">Adicionar</string>
<string name="save">Salvar</string> <string name="save">Salvar</string>
<string name="share">Compartilhar</string> <string name="share">Compartilhar</string>
<string name="create_shortcut">Criar atalho…</string> <string name="create_shortcut">Criar atalho…</string>
<string name="share_s">Compartilhar %s</string> <string name="share_s">Compartilhar %s</string>
<string name="search">Pesquisar</string> <string name="search">Pesquisar</string>
<string name="search_manga">Pesquisar mangá</string> <string name="search_manga">Pesquisar mangá</string>
<string name="manga_downloading_">A descarregar…</string> <string name="manga_downloading_">A descarregar…</string>
<string name="download_complete">Descarregado</string> <string name="download_complete">Descarregado</string>
<string name="downloads">Descargas</string> <string name="downloads">Descargas</string>
<string name="by_name">Nome</string> <string name="by_name">Nome</string>
<string name="popular">Populares</string> <string name="popular">Populares</string>
<string name="by_rating">Avaliação</string> <string name="by_rating">Avaliação</string>
<string name="sort_order">Ordem de classificação</string> <string name="sort_order">Ordem de classificação</string>
<string name="filter">Filtro</string> <string name="filter">Filtro</string>
<string name="dark">Escuro</string> <string name="dark">Escuro</string>
<string name="automatic">Siga o sistema</string> <string name="automatic">Siga o sistema</string>
<string name="pages">Páginas</string> <string name="pages">Páginas</string>
<string name="clear">Limpar</string> <string name="clear">Limpar</string>
<string name="text_clear_history_prompt">Limpar todo o histórico de leitura permanentemente\?</string> <string name="text_clear_history_prompt">Limpar todo o histórico de leitura permanentemente\?</string>
<string name="remove">Remover</string> <string name="remove">Remover</string>
<string name="_s_deleted_from_local_storage">«%s» deletado do armazenamento local</string> <string name="_s_deleted_from_local_storage">«%s» deletado do armazenamento local</string>
<string name="save_page">Salvar página</string> <string name="save_page">Salvar página</string>
<string name="page_saved">Salvou</string> <string name="page_saved">Salvou</string>
<string name="share_image">Compartilhar imagem</string> <string name="share_image">Compartilhar imagem</string>
<string name="_import">Importar</string> <string name="_import">Importar</string>
<string name="updated">Atualizado</string> <string name="updated">Atualizado</string>
<string name="delete">Deletar</string> <string name="delete">Deletar</string>
<string name="operation_not_supported">Essa operação não é suportada</string> <string name="operation_not_supported">Essa operação não é suportada</string>
<string name="clear_pages_cache">Limpar cache de página</string> <string name="clear_pages_cache">Limpar cache de página</string>
<string name="text_file_sizes">B|kB|MB|GB|TB</string> <string name="text_file_sizes">B|kB|MB|GB|TB</string>
<string name="standard">Padrão</string> <string name="standard">Padrão</string>
<string name="webtoon">Webtoon</string> <string name="webtoon">Webtoon</string>
<string name="read_mode">Modo leitura</string> <string name="read_mode">Modo leitura</string>
<string name="grid_size">Tamanho da grade</string> <string name="grid_size">Tamanho da grade</string>
<string name="search_on_s">Pesquisar em %s</string> <string name="search_on_s">Pesquisar em %s</string>
<string name="delete_manga">Deletar mangá</string> <string name="delete_manga">Deletar mangá</string>
<string name="reader_settings">Configurações de leitura</string> <string name="reader_settings">Configurações de leitura</string>
<string name="switch_pages">Mudar páginas</string> <string name="switch_pages">Mudar páginas</string>
<string name="taps_on_edges">Toques de borda</string> <string name="taps_on_edges">Toques de borda</string>
<string name="volume_buttons">Botões de volume</string> <string name="volume_buttons">Botões de volume</string>
<string name="error">Erro</string> <string name="error">Erro</string>
<string name="clear_thumbs_cache">Limpar cache de miniaturas</string> <string name="clear_thumbs_cache">Limpar cache de miniaturas</string>
<string name="search_history_cleared">Limpo</string> <string name="search_history_cleared">Limpo</string>
<string name="gestures_only">Apenas gestos</string> <string name="gestures_only">Apenas gestos</string>
<string name="internal_storage">Armazenamento interno</string> <string name="internal_storage">Armazenamento interno</string>
<string name="external_storage">Armazenamento externo</string> <string name="external_storage">Armazenamento externo</string>
<string name="domain">Domínio</string> <string name="domain">Domínio</string>
<string name="app_update_available">Uma nova versão da app está disponível</string> <string name="app_update_available">Uma nova versão da app está disponível</string>
<string name="open_in_browser">Abrir no navegador da web</string> <string name="open_in_browser">Abrir no navegador da web</string>
<string name="large_manga_save_confirm">Este mangá tem %s. Salvar tudo isso\?</string> <string name="large_manga_save_confirm">Este mangá tem %s. Salvar tudo isso\?</string>
<string name="save_manga">Salve</string> <string name="save_manga">Salve</string>
<string name="notifications">Notificações</string> <string name="notifications">Notificações</string>
<string name="new_chapters">Novos capítulos</string> <string name="new_chapters">Novos capítulos</string>
<string name="download">Download</string> <string name="download">Download</string>
<string name="notifications_settings">Configurações das notificações</string> <string name="notifications_settings">Configurações das notificações</string>
<string name="light_indicator">Indicador LED</string> <string name="light_indicator">Indicador LED</string>
<string name="remote_sources">Fontes remotas</string> <string name="remote_sources">Fontes de mangá</string>
<string name="close">Fechar</string> <string name="close">Fechar</string>
<string name="light">Claro</string> <string name="light">Claro</string>
<string name="history">Histórico</string> <string name="history">Histórico</string>
<string name="read">Ler</string> <string name="read">Ler</string>
<string name="processing_">Processando…</string> <string name="processing_">Processando…</string>
<string name="newest">Novos</string> <string name="newest">Novos</string>
<string name="theme">Tema</string> <string name="theme">Tema</string>
<string name="no_description">Sem descrição</string> <string name="no_description">Sem descrição</string>
<string name="_continue">Continuar</string> <string name="_continue">Continuar</string>
<string name="chapters">Capítulos</string> <string name="chapters">Capítulos</string>
<string name="add_new_category">Nova categoria</string> <string name="add_new_category">Nova categoria</string>
<string name="text_delete_local_manga">Apagar «%s» do dispositivo permanentemente\?</string> <string name="text_delete_local_manga">Apagar «%s» do dispositivo permanentemente\?</string>
<string name="text_file_not_supported">Escolha um ficheiro ZIP ou CBZ.</string> <string name="text_file_not_supported">Escolha um ficheiro ZIP ou CBZ.</string>
<string name="clear_search_history">Limpar histórico de pesquisa</string> <string name="clear_search_history">Limpar histórico de pesquisa</string>
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">Ativado %1$d de %2$d</string> <string name="enabled_d_of_d" tools:ignore="PluralsCandidate">Ativado %1$d de %2$d</string>
<string name="notification_sound">Som de notificação</string> <string name="notification_sound">Som de notificação</string>
<string name="show_pages_numbers">Páginas numeradas</string> <string name="show_pages_numbers">Páginas numeradas</string>
<string name="state_finished">Concluído</string> <string name="state_finished">Concluído</string>
<string name="state_ongoing">Em andamento</string> <string name="state_ongoing">Em andamento</string>
<string name="remove_category">Remover</string> <string name="remove_category">Remover</string>
<string name="text_empty_holder_primary">Está meio vazio aqui…</string> <string name="text_empty_holder_primary">Está meio vazio aqui…</string>
<string name="manga_shelf">Estante</string> <string name="manga_shelf">Estante</string>
<string name="done">Feito</string> <string name="done">Feito</string>
<string name="zoom_mode_keep_start">Manter no início</string> <string name="zoom_mode_keep_start">Manter no início</string>
<string name="clear_updates_feed">Limpar feed de atualizações</string> <string name="clear_updates_feed">Limpar feed de atualizações</string>
<string name="updates_feed_cleared">Limpo</string> <string name="updates_feed_cleared">Limpo</string>
<string name="update">Atualizar</string> <string name="update">Atualizar</string>
<string name="feed_will_update_soon">A atualização do feed começará em breve</string> <string name="feed_will_update_soon">A atualização do feed começará em breve</string>
<string name="track_sources">Procure atualizações</string> <string name="track_sources">Procure atualizações</string>
<string name="dont_check">Não verifique</string> <string name="dont_check">Não verifique</string>
<string name="enter_password">Digite a senha</string> <string name="enter_password">Digite a senha</string>
<string name="wrong_password">Senha incorreta</string> <string name="wrong_password">Senha incorreta</string>
<string name="repeat_password">Repita a senha</string> <string name="repeat_password">Repita a senha</string>
<string name="passwords_mismatch">Senhas incompatíveis</string> <string name="passwords_mismatch">Senhas incompatíveis</string>
<string name="about">Cerca de</string> <string name="about">Cerca de</string>
<string name="app_version">Versão %s</string> <string name="app_version">Versão %s</string>
<string name="check_for_updates">Verifique se há atualizações</string> <string name="check_for_updates">Verifique se há atualizações</string>
<string name="no_update_available">Nenhuma atualização disponível</string> <string name="no_update_available">Nenhuma atualização disponível</string>
<string name="right_to_left">Da direita para a esquerda</string> <string name="right_to_left">Da direita para a esquerda (←)</string>
<string name="create_category">Nova categoria</string> <string name="create_category">Nova categoria</string>
<string name="scale_mode">Modo de escala</string> <string name="scale_mode">Modo de escala</string>
<string name="zoom_mode_fit_center">Centro de ajuste</string> <string name="zoom_mode_fit_center">Centro de ajuste</string>
<string name="zoom_mode_fit_width">Ajustar à largura</string> <string name="zoom_mode_fit_width">Ajustar à largura</string>
<string name="backup_restore">Backup e restauração</string> <string name="backup_restore">Backup e restauração</string>
<string name="create_backup">Criar backup de dados</string> <string name="create_backup">Criar backup de dados</string>
<string name="restore_backup">Restaurar do backup</string> <string name="restore_backup">Restaurar do backup</string>
<string name="data_restored">Restaurado</string> <string name="data_restored">Restaurado</string>
<string name="preparing_">Preparando…</string> <string name="preparing_">Preparando…</string>
<string name="file_not_found">Ficheiro não encontrado</string> <string name="file_not_found">Ficheiro não encontrado</string>
<string name="data_restored_success">Todos os dados foram restaurados</string> <string name="data_restored_success">Todos os dados foram restaurados</string>
<string name="data_restored_with_errors">Os dados foram restaurados, mas há erros</string> <string name="data_restored_with_errors">Os dados foram restaurados, mas há erros</string>
<string name="just_now">Agora mesmo</string> <string name="just_now">Agora mesmo</string>
<string name="yesterday">Ontem</string> <string name="yesterday">Ontem</string>
<string name="long_ago">Muito tempo atrás</string> <string name="long_ago">Muito tempo atrás</string>
<string name="group">Grupo</string> <string name="group">Grupo</string>
<string name="today">Hoje</string> <string name="today">Hoje</string>
<string name="tap_to_try_again">Toque para tentar novamente</string> <string name="tap_to_try_again">Toque para tentar novamente</string>
<string name="silent">Silencioso</string> <string name="silent">Silencioso</string>
<string name="captcha_required">CAPTCHA obrigatório</string> <string name="captcha_required">CAPTCHA obrigatório</string>
<string name="captcha_solve">Resolver</string> <string name="captcha_solve">Resolver</string>
<string name="cookies_cleared">Todos os cookies foram removidos</string> <string name="cookies_cleared">Todos os cookies foram removidos</string>
<string name="clear_feed">Limpar feed</string> <string name="clear_feed">Limpar feed</string>
<string name="text_clear_updates_feed_prompt">Limpar todo o histórico de atualizações permanentemente\?</string> <string name="text_clear_updates_feed_prompt">Limpar todo o histórico de atualizações permanentemente\?</string>
<string name="check_for_new_chapters">Em busca de novos capítulos</string> <string name="check_for_new_chapters">Em busca de novos capítulos</string>
<string name="reverse">Reverter</string> <string name="reverse">Reverter</string>
<string name="sign_in">Entrar</string> <string name="sign_in">Entrar</string>
<string name="default_s">Padrão: %s</string> <string name="default_s">Padrão: %s</string>
<string name="next">Próximo</string> <string name="next">Próximo</string>
<string name="protect_application_subtitle">Digite a senha que será necessária quando a app for iniciado</string> <string name="protect_application_subtitle">Digite a senha que será necessária quando a app for iniciado</string>
<string name="confirm">Confirme</string> <string name="confirm">Confirme</string>
<string name="password_length_hint">A senha deve ter 4 caracteres ou mais</string> <string name="password_length_hint">A senha deve ter 4 caracteres ou mais</string>
<string name="backup_saved">Backup salvo</string> <string name="backup_saved">Backup salvo</string>
<string name="tracker_warning">Alguns aparelhos têm um comportamento de sistema diferente, o que pode interromper as tarefas em segundo plano.</string> <string name="tracker_warning">Alguns aparelhos têm um comportamento de sistema diferente, o que pode interromper as tarefas em segundo plano.</string>
<string name="read_more">Leia mais</string> <string name="read_more">Leia mais</string>
<string name="welcome">Bem vindo</string> <string name="welcome">Bem vindo</string>
<string name="available_sources">Fontes disponíveis</string> <string name="available_sources">Fontes disponíveis</string>
<string name="enabled_sources">Fontes usadas</string> <string name="enabled_sources">Fontes usadas</string>
<string name="queued">Enfileirado</string> <string name="queued">Enfileirado</string>
<string name="about_app_translation_summary">Traduzir esta aplicação</string> <string name="about_app_translation_summary">Traduzir esta aplicação</string>
<string name="chapter_is_missing">O capítulo está em falta</string> <string name="chapter_is_missing">O capítulo está em falta</string>
<string name="auth_complete">Autorizado</string> <string name="auth_complete">Autorizado</string>
<string name="auth_not_supported_by">O login em %s não é suportado</string> <string name="auth_not_supported_by">O login em %s não é suportado</string>
<string name="genres">Gêneros</string> <string name="genres">Gêneros</string>
<string name="about_app_translation">Tradução</string> <string name="about_app_translation">Tradução</string>
<string name="text_clear_cookies_prompt">Será desconectado de todas as fontes</string> <string name="text_clear_cookies_prompt">Será desconectado de todas as fontes</string>
<string name="vibration">Vibração</string> <string name="vibration">Vibração</string>
<string name="cannot_find_available_storage">Sem armazenamento disponível</string> <string name="cannot_find_available_storage">Sem armazenamento disponível</string>
<string name="favourites_categories">Categorias favoritas</string> <string name="favourites_categories">Categorias favoritas</string>
<string name="text_history_holder_secondary">Encontre o que ler no menu lateral.</string> <string name="text_history_holder_secondary">Encontre o que ler no menu lateral.</string>
<string name="text_local_holder_secondary">Salve-o de fontes online ou importe fiheiros.</string> <string name="text_local_holder_secondary">Salve-o de fontes online ou importe fiheiros.</string>
<string name="recent_manga">Recente</string> <string name="recent_manga">Recente</string>
<string name="other_storage">Outro armazenamento</string> <string name="other_storage">Outro armazenamento</string>
<string name="text_search_holder_secondary">Tente reformular a consulta.</string> <string name="text_search_holder_secondary">Tente reformular a consulta.</string>
<string name="not_available">Não disponível</string> <string name="not_available">Não disponível</string>
<string name="size_s">Tamanho: %s</string> <string name="size_s">Tamanho: %s</string>
<string name="text_history_holder_primary">O que ler será exibido aqui</string> <string name="text_history_holder_primary">O que ler será exibido aqui</string>
<string name="text_local_holder_primary">Salve algo primeiro</string> <string name="text_local_holder_primary">Salve algo primeiro</string>
<string name="pages_animation">Animação de página</string> <string name="pages_animation">Animação de página</string>
<string name="favourites_category_empty">Categoria vazia</string> <string name="favourites_category_empty">Categoria vazia</string>
<string name="read_later">Leia mais tarde</string> <string name="read_later">Leia mais tarde</string>
<string name="updates">Atualizações</string> <string name="updates">Atualizações</string>
<string name="all_favourites">Todos os favoritos</string> <string name="all_favourites">Todos os favoritos</string>
<string name="search_results">Resultados da pesquisa</string> <string name="search_results">Resultados da pesquisa</string>
<string name="text_feed_holder">Novos capítulos do que lé são mostrados aqui</string> <string name="text_feed_holder">Novos capítulos do que lé são mostrados aqui</string>
<string name="new_version_s">Nova versão: %s</string> <string name="new_version_s">Nova versão: %s</string>
<string name="rotate_screen">Girar o ecrã</string> <string name="rotate_screen">Girar o ecrã</string>
<string name="protect_application">Proteja a app</string> <string name="protect_application">Proteja a app</string>
<string name="protect_application_summary">Peça a senha ao iniciar o Kotatsu</string> <string name="protect_application_summary">Peça a senha ao iniciar o Kotatsu</string>
<string name="zoom_mode_fit_height">Ajustar à altura</string> <string name="zoom_mode_fit_height">Ajustar à altura</string>
<string name="black_dark_theme">Escuro</string> <string name="black_dark_theme">Escuro</string>
<string name="black_dark_theme_summary">Usa menos energia em telas AMOLED</string> <string name="black_dark_theme_summary">Usa menos energia em telas AMOLED</string>
<string name="reader_mode_hint">A configuração escolhida será lembrada para este mangá</string> <string name="reader_mode_hint">A configuração escolhida será lembrada para este mangá</string>
<string name="backup_information">Pode criar um backup do seu histórico e favoritos e restaurá-lo</string> <string name="backup_information">Pode criar um backup do seu histórico e favoritos e restaurá-lo</string>
<string name="clear_cookies">Limpar cookies</string> <string name="clear_cookies">Limpar cookies</string>
<string name="text_clear_search_history_prompt">Remover todas as consultas de pesquisa recentes permanentemente\?</string> <string name="text_clear_search_history_prompt">Remover todas as consultas de pesquisa recentes permanentemente\?</string>
<string name="auth_required">Faça login para ver este conteúdo</string> <string name="auth_required">Faça login para ver este conteúdo</string>
<string name="manga_save_location">Pasta para downloads</string> <string name="manga_save_location">Pasta para downloads</string>
<string name="exclude_nsfw_from_history">Excluir mangá NSFW do histórico</string> <string name="exclude_nsfw_from_history">Excluir mangá NSFW do histórico</string>
<string name="system_default">Padrão</string> <string name="system_default">Padrão</string>
<string name="computing_">A computar…</string> <string name="computing_">A computar…</string>
<string name="screenshots_allow">Permitir</string> <string name="screenshots_allow">Permitir</string>
<string name="screenshots_block_nsfw">Bloquear no NSFW</string> <string name="screenshots_block_nsfw">Bloquear no NSFW</string>
<string name="screenshots_policy">Política de captura de ecrã</string> <string name="screenshots_policy">Política de captura de ecrã</string>
<string name="screenshots_block_all">Sempre bloquear</string> <string name="screenshots_block_all">Sempre bloquear</string>
<string name="suggestions_summary">Sugira mangá com base nas suas preferências</string> <string name="suggestions_summary">Sugira mangá com base nas suas preferências</string>
<string name="suggestions_info">Todos os dados são analisados localmente neste dispositivo. Não há transferência dos seus dados pessoais para nenhum serviço</string> <string name="suggestions_info">Todos os dados são analisados apenas localmente neste dispositivo e nunca são enviados para qualquer lugar.</string>
<string name="text_suggestion_holder">Comece a ler mangá e receberá sugestões personalizadas</string> <string name="text_suggestion_holder">Comece a ler mangá e receberá sugestões personalizadas</string>
<string name="suggestions">Sugestões</string> <string name="suggestions">Sugestões</string>
<string name="suggestions_enable">Ativar sugestões</string> <string name="suggestions_enable">Ativar sugestões</string>
<string name="exclude_nsfw_from_suggestions">Não sugira mangá NSFW</string> <string name="exclude_nsfw_from_suggestions">Não sugira mangá NSFW</string>
<string name="enabled">Habilitado</string> <string name="enabled">Habilitado</string>
<string name="disabled">Desabilitado</string> <string name="disabled">Desabilitado</string>
<string name="filter_load_error">Não foi possível carregar a lista de gêneros</string> <string name="filter_load_error">Não foi possível carregar a lista de gêneros</string>
<string name="only_using_wifi">Somente em Wi-Fi</string> <string name="only_using_wifi">Somente em Wi-Fi</string>
<string name="onboard_text">Selecione os idiomas que deseja ler mangá. Pode alterá-lo mais tarde nas configurações.</string> <string name="onboard_text">Selecione os idiomas que deseja ler mangá. Pode alterá-lo mais tarde nas configurações.</string>
<string name="always">Sempre</string> <string name="always">Sempre</string>
<string name="reset_filter">Redefinir filtro</string> <string name="reset_filter">Redefinir filtro</string>
<string name="never">Nunca</string> <string name="never">Nunca</string>
<string name="preload_pages">Pré-carregar páginas</string> <string name="preload_pages">Pré-carregar páginas</string>
<string name="logged_in_as">Conectado como %s</string> <string name="logged_in_as">Conectado como %s</string>
<string name="nsfw">18+</string> <string name="nsfw">18+</string>
<string name="various_languages">Vários idiomas</string> <string name="various_languages">Vários idiomas</string>
<string name="suggestions_updating">Atualização das sugestões</string> <string name="suggestions_updating">Atualização das sugestões</string>
<string name="appearance">Aparência</string> <string name="appearance">Aparência</string>
<string name="search_chapters">Encontrar capítulo</string> <string name="search_chapters">Encontrar capítulo</string>
<string name="chapters_empty">Não há capítulos nesta manga</string> <string name="chapters_empty">Não há capítulos nesta manga</string>
<string name="percent_string_pattern">%1$s%%</string> <string name="percent_string_pattern">%1$s%%</string>
<string name="text_shelf_holder_primary">O seu mangá será exibido aqui</string> <string name="text_shelf_holder_primary">O seu mangá será exibido aqui</string>
<string name="color_correction">Correção de cor</string> <string name="color_correction">Correção de cor</string>
<string name="server_error">Erro do lado do servidor (%1$d). Por favor, tente novamente mais tarde</string> <string name="server_error">Erro do servidor (%1$d). Por favor, tente novamente mais tarde</string>
<string name="clear_new_chapters_counters">Também limpar informações sobre capítulos novos</string> <string name="clear_new_chapters_counters">Apagar informações sobre novos capítulos</string>
<string name="hide">Esconder</string> <string name="hide">Ocultar</string>
<string name="text_delete_local_manga_batch">Apagar itens selecionados do aparelho permanentemente\?</string> <string name="text_delete_local_manga_batch">Excluir os itens selecionados do dispositivo permanentemente\?</string>
<string name="compact">Compactar</string> <string name="compact">Compactar</string>
<string name="bookmark_added">Marcador adicionado</string> <string name="bookmark_added">Marcador adicionado</string>
<string name="prefetch_content">Pré-carregamento de conteúdo</string> <string name="prefetch_content">Pré-carregamento de conteúdo</string>
<string name="invalid_domain_message">Endereço inválido</string> <string name="invalid_domain_message">Domínio inválido</string>
<string name="use_fingerprint">Usar impressão digital, se disponível</string> <string name="use_fingerprint">Usar impressão digital, se estiver disponível</string>
<string name="appwidget_shelf_description">Mangás dos seus favoritos</string> <string name="appwidget_shelf_description">Mangá dos seus favoritos</string>
<string name="appwidget_recent_description">Os seus mangás recentemente lidos</string> <string name="appwidget_recent_description">Mangás lidos recentemente</string>
<string name="suggestions_excluded_genres_summary">Especifique os gêneros que não deseja ver nas sugestões</string> <string name="suggestions_excluded_genres_summary">Especifique os gêneros que você não deseja ver nas sugestões</string>
<string name="removal_completed">Remoção concluída</string> <string name="removal_completed">Remoção concluída</string>
<string name="check_new_chapters_title">Verifique se há novos capítulos e notifique sobre isso</string> <string name="check_new_chapters_title">Verifique se há novos capítulos e notifique se houver</string>
<string name="default_mode">Modo padrão</string> <string name="default_mode">Modo padrão</string>
<string name="mark_as_current">Marcar como atual</string> <string name="mark_as_current">Marcar como atual</string>
<string name="error_no_space_left">Não há espaço disponível no aparelho</string> <string name="error_no_space_left">Não há espaço disponível no dispositivo</string>
<string name="different_languages">Idiomas diferentes</string> <string name="different_languages">Idiomas diferentes</string>
<string name="network_unavailable">A rede não está disponível</string> <string name="network_unavailable">A rede não está disponível</string>
<string name="network_unavailable_hint">Ative o Wi-Fi ou a rede móvel para ler mangá online</string> <string name="network_unavailable_hint">Ative o Wi-Fi ou a rede móvel para ler o mangá online</string>
<string name="name">Nome</string> <string name="name">Nome</string>
<string name="logout">Terminar sessão</string> <string name="logout">Sair</string>
<string name="edit">Editar</string> <string name="edit">Editar</string>
<string name="edit_category">Editar categoria</string> <string name="edit_category">Editar categoria</string>
<string name="tracking">Monitoramento</string> <string name="tracking">Monitoramento</string>
<string name="empty_favourite_categories">Nenhuma categoria favorita</string> <string name="empty_favourite_categories">Nenhuma categoria favorita</string>
<string name="removed_from_history">Removido do histórico</string> <string name="removed_from_history">Removido do histórico</string>
<string name="send">Enviar</string> <string name="send">Enviar</string>
<string name="text_shelf_holder_secondary">Encontre o que ler na secção &lt;«Explorar»</string> <string name="text_shelf_holder_secondary">Encontre o que ler na secção «Explorar»</string>
<string name="suggestions_excluded_genres">Excluir gêneros</string> <string name="suggestions_excluded_genres">Excluir gêneros</string>
<string name="download_slowdown">Lentidão de descarga</string> <string name="download_slowdown">Download lento</string>
<string name="download_slowdown_summary">Ajuda a evitar o bloqueio do seu endereço IP</string> <string name="download_slowdown_summary">Ajude a evitar o bloqueio do seu endereço IP</string>
<string name="local_manga_processing">Processamento de mangá gravado</string> <string name="local_manga_processing">Processando mangá salvo</string>
<string name="chapters_will_removed_background">Os capítulos serão removidos em segundo plano. Pode levar algum tempo</string> <string name="chapters_will_removed_background">Os capítulos serão removidos em segundo plano</string>
<string name="canceled">Cancelado</string> <string name="canceled">Cancelado</string>
<string name="email_enter_hint">Digite o seu e-mail para continuar</string> <string name="email_enter_hint">Digite seu e-mail para continuar</string>
<string name="new_sources_text">Novas fontes de mangá estão disponíveis</string> <string name="new_sources_text">Novas fontes de mangá estão disponíveis</string>
<string name="show_notification_new_chapters_on">Receberá notificações sobre atualizações do mangá que está lendo</string> <string name="show_notification_new_chapters_on">Você receberá notificações sobre atualizações do mangá que está lendo</string>
<string name="notifications_enable">Ativar notificações</string> <string name="notifications_enable">Ativar notificações</string>
<string name="crash_text">Algo deu errado. Por favor, envie um relatório de bug para ajudar os programadores a consertarem isso.</string> <string name="crash_text">Algo deu errado. Por favor, envie um relatório de bug para os desenvolvedores para nos ajudar a corrigi-lo.</string>
<string name="status_planned">Planejado</string> <string name="status_planned">Planejado</string>
<string name="status_reading">Lendo</string> <string name="status_reading">Leitura</string>
<string name="status_re_reading">Relendo</string> <string name="status_re_reading">Relendo</string>
<string name="status_completed">Concluído</string> <string name="status_completed">Concluído</string>
<string name="status_on_hold">Em espera</string> <string name="status_on_hold">Em espera</string>
<string name="show_reading_indicators">Mostrar indicadores de progresso de leitura</string> <string name="show_reading_indicators">Mostrar indicadores de progresso de leitura</string>
<string name="data_deletion">Exclusão de dados</string> <string name="data_deletion">Exclusão de dados</string>
<string name="clear_cookies_summary">Pode ajudar no caso de alguns problemas. Todas as autorizações serão invalidadas</string> <string name="clear_cookies_summary">Pode ajudar em caso de alguns problemas. Todas as autorizações serão invalidadas</string>
<string name="show_all">Mostrar tudo</string> <string name="show_all">Mostrar tudo</string>
<string name="clear_all_history">Limpar todo o histórico</string> <string name="clear_all_history">Apagar todo o histórico</string>
<string name="last_2_hours">Ultimas 2 horas</string> <string name="last_2_hours">Últimas 2 horas</string>
<string name="categories_delete_confirm">Tem certeza que deseja apagar as categorias favoritas selecionadas\? <string name="categories_delete_confirm">Tem certeza de que deseja excluir as categorias favoritas selecionadas\?
\nTodos os mangás serão perdidos e isso não pode ser desfeito.</string> \nTodos os mangás serão perdidos e isso não pode ser desfeito.</string>
<string name="reorder">Reordenar</string> <string name="reorder">Reorganizar</string>
<string name="empty">Vazio</string> <string name="empty">Vazio</string>
<string name="explore">Explorar</string> <string name="explore">Explorar</string>
<string name="comics_archive">Arquivo de banda desenhada</string> <string name="comics_archive">Arquivos de quadrinhos</string>
<string name="folder_with_images">Pasta com imagens</string> <string name="folder_with_images">Pasta com imagens</string>
<string name="importing_manga">Importando mangá(s)</string> <string name="importing_manga">Importando mangá</string>
<string name="saved_manga">Mangás gravados</string> <string name="saved_manga">Mangás salvos</string>
<string name="history_shortcuts">Mostrar atalhos de mangás recentes</string> <string name="history_shortcuts">Mostrar atalhos de mangá recentes</string>
<string name="history_shortcuts_summary">Torne os mangás recentes visíveis pressionando o ícone da aplicação</string> <string name="history_shortcuts_summary">Disponibilizar mangás recentes pressionando por um curto período de tempo o ícone do aplicativo</string>
<string name="brightness">Luminosidade</string> <string name="brightness">Brilho</string>
<string name="contrast">Contraste</string> <string name="contrast">Contraste</string>
<string name="reset">Redefinir</string> <string name="reset">Redefinir</string>
<string name="text_unsaved_changes_prompt">Gravar ou descartar alterações não gravadas\?</string> <string name="text_unsaved_changes_prompt">Salvar ou descartar alterações não salvas\?</string>
<string name="select_range">Selecionar intervalo</string> <string name="select_range">Selecionar intervalo</string>
<string name="reader_slider">Mostrar controle deslizante de troca de página</string> <string name="reader_slider">Mostrar controle de leitura deslizante</string>
<string name="source_disabled">Fonte desativada</string> <string name="source_disabled">Fonte desativada</string>
<string name="account_already_exists">Essa conta já existe</string> <string name="account_already_exists">Essa conta já existe</string>
<string name="back">Voltar</string> <string name="back">Voltar</string>
<string name="sync">Sincronização</string> <string name="sync">Sincronização</string>
<string name="sync_title">Sincronize os seus dados</string> <string name="sync_title">Sincronizar os seus dados</string>
<string name="show_notification_new_chapters_off">Não receberá notificações, mas novos capítulos serão destacados nas listas</string> <string name="show_notification_new_chapters_off">Você não receberá notificações, mas novos capítulos serão destacados nas listas</string>
<string name="bookmark_add">Adicionar marcador</string> <string name="bookmark_add">Adicionar marcador</string>
<string name="bookmark_remove">Remover marcador</string> <string name="bookmark_remove">Remover marcador</string>
<string name="bookmarks">Marcadores</string> <string name="bookmarks">Marcadores</string>
<string name="bookmark_removed">Marcador removido</string> <string name="bookmark_removed">Marcador removido</string>
<string name="undo">Desfazer</string> <string name="undo">Desfazer</string>
<string name="dns_over_https">DNS sobre HTTPS</string> <string name="dns_over_https">DNS sobre HTTPS</string>
<string name="detect_reader_mode">Detecção automática do modo de leitura</string> <string name="detect_reader_mode">Modo de leitor de detecção automática</string>
<string name="detect_reader_mode_summary">Detetar automaticamente se o mangá é webtoon</string> <string name="detect_reader_mode_summary">Detectar automaticamente se o mangá é webtoon</string>
<string name="disable_battery_optimization">Desative a otimização da bateria</string> <string name="disable_battery_optimization">Desativar otimização de bateria</string>
<string name="disable_battery_optimization_summary">Ajuda com verificações de atualizações em segundo plano</string> <string name="disable_battery_optimization_summary">Ajuda com verificações de atualizações em segundo plano</string>
<string name="status_dropped">Desistido</string> <string name="status_dropped">Dropado</string>
<string name="disable_all">Desativar tudo</string> <string name="disable_all">Desativar tudo</string>
<string name="report">Reportar</string> <string name="report">Relatório</string>
<string name="show_reading_indicators_summary">Mostrar percentual de leitura no histórico e nos favoritos</string> <string name="show_reading_indicators_summary">Mostrar porcentagem lida no histórico e favoritos</string>
<string name="exclude_nsfw_from_history_summary">Mangás marcados como +18 nunca serão adicionados ao histórico e o seu progresso não sera gravado</string> <string name="exclude_nsfw_from_history_summary">Mangás marcados como NSFW nunca serão adicionados ao seu histórico e seu progresso não será salvo</string>
<string name="history_cleared">Histórico apagado</string> <string name="history_cleared">Histórico deletado</string>
<string name="manage">Gerir</string> <string name="manage">Gerenciar</string>
<string name="no_bookmarks_yet">Sem páginas marcadas ainda</string> <string name="no_bookmarks_yet">Ainda não há marcadores</string>
<string name="no_bookmarks_summary">Pode criar um marcador de página enquanto lé o mangá</string> <string name="no_bookmarks_summary">Você pode criar marcadores enquanto lê o mangá</string>
<string name="bookmarks_removed">Marcadores de página removidos</string> <string name="bookmarks_removed">Marcadores removidos</string>
<string name="no_manga_sources">Sem fontes de mangás</string> <string name="no_manga_sources">Sem fontes de mangá</string>
<string name="no_manga_sources_text">Ative as fontes de mangá para ler online</string> <string name="no_manga_sources_text">Habilitar fontes de mangá para ler o mangá online</string>
<string name="random">Aleatório</string> <string name="random">Aleatório</string>
<string name="confirm_exit">Pressione Voltar novamente para sair</string> <string name="confirm_exit">Pressione Voltar novamente para sair</string>
<string name="exit_confirmation_summary">Pressione Voltar duas vezes para sair do app</string> <string name="exit_confirmation_summary">Pressione Voltar duas vezes para sair do aplicativo</string>
<string name="exit_confirmation">Confirmação de saída</string> <string name="exit_confirmation">Confirmação de saída</string>
<string name="pages_cache">Cache de páginas</string> <string name="pages_cache">Cache de páginas</string>
<string name="other_cache">Outro cache</string> <string name="other_cache">Outros cache</string>
<string name="storage_usage">Uso de armazenamento</string> <string name="storage_usage">Armazenamento usado</string>
<string name="available">Disponível</string> <string name="available">Disponível</string>
<string name="memory_usage_pattern">%s - %s</string> <string name="memory_usage_pattern">%s - %s</string>
<string name="removed_from_favourites">Removido dos favoritos</string> <string name="removed_from_favourites">Removido dos favoritos</string>
<string name="options">Opções</string> <string name="options">Opções</string>
<string name="not_found_404">Conteúdo não encontrado ou removido</string> <string name="not_found_404">Conteúdo não encontrado ou removido</string>
<string name="incognito_mode">Modo anônimo</string> <string name="incognito_mode">Modo de navegação anônima</string>
<string name="no_chapters">Sem capítulos</string> <string name="no_chapters">Sem capítulos</string>
<string name="automatic_scroll">Rolagem automática</string> <string name="automatic_scroll">Rolagem automática</string>
<string name="reader_info_pattern">Cap. %1$d/%2$d Pág. %3$d/%4$d</string> <string name="reader_info_pattern">Cap. %1$d/%2$d Pág. %3$d/%4$d</string>
<string name="reader_info_bar">Mostrar barra de informações no leitor</string> <string name="reader_info_bar">Mostrar barra de informações no leitor</string>
<string name="import_completed">Importação completa</string> <string name="import_completed">Importação concluída</string>
<string name="import_completed_hint">Pode apagar o ficheiro original do aparelho para poupar espaço</string> <string name="import_completed_hint">Você pode excluir o arquivo original do armazenamento para economizar espaço</string>
<string name="import_will_start_soon">A importação começará em breve</string> <string name="import_will_start_soon">A importação começará em breve</string>
<string name="feed">Feed</string> <string name="feed">Fluxo de conteúdo</string>
<string name="manga_error_description_pattern">Detalhes do erro:&lt;br&gt;&lt;tt&gt;%1$s&lt;/tt&gt;&lt;br&gt;&lt;br&gt;1. Tente &lt;a href=%2$s&gt;abrir o mangá num navegador de internet&lt;/a&gt;para garantir que ele está disponível na fonte&lt;br&gt;2. Se estiver disponível, envie um relatório de erro para os programadores.</string> <string name="manga_error_description_pattern">Detalhes do erro:&lt;br&gt;&lt;tt&gt;%1$s&lt;/tt&gt;&lt;br&gt;&lt;br&gt;1. Tente &lt;a href=%2$s&gt;abra a página do mangá em um navegador da web&lt;/a&gt; para garantir que o mesmo esteja disponível em sua fonte&lt;br&gt;2. Se estiver disponível, envie um relatório de erro para os desenvolvedores.</string>
<string name="reader_control_ltr_summary">Tocar na borda direita ou pressionar a tecla direita sempre passa para a próxima página</string> <string name="reader_control_ltr_summary">Tocar na borda direita ou pressionar a tecla direita sempre muda para a próxima página</string>
<string name="reader_control_ltr">Controle de leitura ergonômico</string> <string name="reader_control_ltr">Controle ergonômico do leitor</string>
<string name="color_correction_hint">As configurações de cor escolhidas serão lembradas para esse mangá</string> <string name="color_correction_hint">As configurações de cores escolhidas serão lembradas para este mangá</string>
<string name="discard">Descartar</string> <string name="discard">Descartar</string>
<string name="language">Idioma</string> <string name="language">Idioma</string>
<string name="theme_name_mamimi">Mamimi</string> <string name="theme_name_mamimi">Mamimi</string>
<string name="nothing_here">Não há nada aqui</string> <string name="nothing_here">Não há nada aqui</string>
<string name="services">Serviços</string> <string name="services">Serviços</string>
<string name="enable_logging_summary">Gravar algumas ações para propósitos de depuração</string> <string name="enable_logging_summary">Gravar algumas ações para propósitos de depuração</string>
<string name="allow_unstable_updates">Permitir atualizações instáveis</string> <string name="allow_unstable_updates">Permitir atualizações instáveis</string>
<string name="download_started">Descarga iniciada</string> <string name="download_started">Descarga iniciada</string>
<string name="share_logs">Compartilhar registos</string> <string name="share_logs">Compartilhar registos</string>
<string name="enable_logging">Ativar registos</string> <string name="enable_logging">Ativar registos</string>
<string name="theme_name_miku">Miku</string> <string name="theme_name_miku">Miku</string>
<string name="theme_name_rikka">Rikka</string> <string name="theme_name_rikka">Rikka</string>
<string name="theme_name_sakura">Sakura</string> <string name="theme_name_sakura">Sakura</string>
<string name="show_suspicious_content">Exibir conteúdo suspeito</string> <string name="show_suspicious_content">Exibir conteúdo suspeito</string>
<string name="theme_name_dynamic">Dinâmico</string> <string name="theme_name_dynamic">Dinâmico</string>
<string name="color_theme">Esquema de cores</string> <string name="color_theme">Esquema de cores</string>
<string name="show_in_grid_view">Mostrar na visualização em grade</string> <string name="show_in_grid_view">Mostrar na visualização em grade</string>
<string name="theme_name_asuka">Asuka</string> <string name="theme_name_asuka">Asuka</string>
<string name="theme_name_mion">Mion</string> <string name="theme_name_mion">Mion</string>
<string name="settings_apply_restart_required">Por favor, reinicie o app para aplicar essas mudanças</string> <string name="settings_apply_restart_required">Por favor, reinicie o app para aplicar essas mudanças</string>
</resources> <string name="theme_name_kanade">Kanade</string>
<string name="scrobbling_empty_hint">Para acompanhar o progresso da leitura, selecione Menu → Vá até a tela de detalhes do mangá.</string>
<string name="details_button_tip">Pressione e segure o botão Ler para ver mais opções</string>
<string name="webtoon_zoom">Zoom Webtoon</string>
<string name="allow_unstable_updates_summary">Propor atualizações para versões beta do aplicativo</string>
</resources>

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View File

@@ -1,426 +1,434 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="network_error">Ağ hatası</string> <string name="network_error">Ağ hatası</string>
<string name="local_storage">Dahili Depolama</string> <string name="local_storage">Dahili Depolama</string>
<string name="favourites">Favoriler</string> <string name="favourites">Favoriler</string>
<string name="history">Geçmiş</string> <string name="history">Geçmiş</string>
<string name="chapters">Bölümler</string> <string name="chapters">Bölümler</string>
<string name="list">Liste</string> <string name="list">Liste</string>
<string name="detailed_list">Detaylı liste</string> <string name="detailed_list">Detaylı liste</string>
<string name="grid">Izgara</string> <string name="grid">Izgara</string>
<string name="list_mode">Liste modu</string> <string name="list_mode">Liste modu</string>
<string name="loading_">Yükleniyor…</string> <string name="loading_">Yükleniyor…</string>
<string name="close">Kapat</string> <string name="close">Kapat</string>
<string name="try_again">Tekrar dene</string> <string name="try_again">Tekrar dene</string>
<string name="clear_history">Geçmişi temizle</string> <string name="clear_history">Geçmişi temizle</string>
<string name="nothing_found">Hiçbir şey bulunamadı</string> <string name="nothing_found">Hiçbir şey bulunamadı</string>
<string name="history_is_empty">Geçmiş yok</string> <string name="history_is_empty">Geçmiş yok</string>
<string name="read">Oku</string> <string name="read">Oku</string>
<string name="you_have_not_favourites_yet">Henüz favorileriniz yok</string> <string name="you_have_not_favourites_yet">Henüz favorileriniz yok</string>
<string name="add_to_favourites">Favoriniz</string> <string name="add_to_favourites">Favoriniz</string>
<string name="add_new_category">Yeni kategori</string> <string name="add_new_category">Yeni kategori</string>
<string name="add">Ekle</string> <string name="add">Ekle</string>
<string name="save">Kaydet</string> <string name="save">Kaydet</string>
<string name="share">Paylaş</string> <string name="share">Paylaş</string>
<string name="share_s">%s Paylaş</string> <string name="share_s">%s Paylaş</string>
<string name="search">Ara</string> <string name="search">Ara</string>
<string name="search_manga">Manga ara</string> <string name="search_manga">Manga ara</string>
<string name="manga_downloading_">İndiriliyor…</string> <string name="manga_downloading_">İndiriliyor…</string>
<string name="processing_">İşleniyor…</string> <string name="processing_">İşleniyor…</string>
<string name="download_complete">İndirildi</string> <string name="download_complete">İndirildi</string>
<string name="downloads">İndirilenler</string> <string name="downloads">İndirilenler</string>
<string name="by_name">Ad</string> <string name="by_name">Ad</string>
<string name="updated">Güncellenme</string> <string name="updated">Güncellenme</string>
<string name="newest">Yeniler</string> <string name="newest">Yeniler</string>
<string name="by_rating">Puanlama</string> <string name="by_rating">Puanlama</string>
<string name="filter">Litre</string> <string name="filter">Litre</string>
<string name="theme">Tema</string> <string name="theme">Tema</string>
<string name="light">ık</string> <string name="light">ık</string>
<string name="dark">Koyu</string> <string name="dark">Koyu</string>
<string name="automatic">Takip sistemi</string> <string name="automatic">Takip sistemi</string>
<string name="pages">Sayfalar</string> <string name="pages">Sayfalar</string>
<string name="clear">Temizle</string> <string name="clear">Temizle</string>
<string name="text_clear_history_prompt">Tüm okuma geçmişi kalıcı olarak silinsin mi\?</string> <string name="text_clear_history_prompt">Tüm okuma geçmişi kalıcı olarak silinsin mi\?</string>
<string name="remove">Kaldır</string> <string name="remove">Kaldır</string>
<string name="_s_deleted_from_local_storage">“%s” yerel depolama alanından sil</string> <string name="_s_deleted_from_local_storage">“%s” yerel depolama alanından sil</string>
<string name="save_page">Sayfayı kaydet</string> <string name="save_page">Sayfayı kaydet</string>
<string name="share_image">Resmi paylaş</string> <string name="share_image">Resmi paylaş</string>
<string name="popular">Popüler</string> <string name="popular">Popüler</string>
<string name="details">Detaylar</string> <string name="details">Detaylar</string>
<string name="settings">Ayarlar</string> <string name="settings">Ayarlar</string>
<string name="page_saved">Kaydet</string> <string name="page_saved">Kaydet</string>
<string name="error_occurred">Bir hata oluştu</string> <string name="error_occurred">Bir hata oluştu</string>
<string name="remote_sources">Manga kaynakları</string> <string name="remote_sources">Manga kaynakları</string>
<string name="search_history_cleared">Temizlendi</string> <string name="search_history_cleared">Temizlendi</string>
<string name="_continue">Devam</string> <string name="_continue">Devam</string>
<string name="not_available">Müsait değil</string> <string name="not_available">Müsait değil</string>
<string name="favourites_category_empty">Boş kategori</string> <string name="favourites_category_empty">Boş kategori</string>
<string name="remove_category">Kaldır</string> <string name="remove_category">Kaldır</string>
<string name="delete">Sil</string> <string name="delete">Sil</string>
<string name="chapter_d_of_d">Bölüm %1$d / %2$d</string> <string name="chapter_d_of_d">Bölüm %1$d / %2$d</string>
<string name="text_file_not_supported">Bir ZIP veya CBZ dosyası seçin.</string> <string name="text_file_not_supported">Bir ZIP veya CBZ dosyası seçin.</string>
<string name="read_mode">Okuma modu</string> <string name="read_mode">Okuma modu</string>
<string name="grid_size">Izgara boyutu</string> <string name="grid_size">Izgara boyutu</string>
<string name="webtoon">Webtoon</string> <string name="webtoon">Webtoon</string>
<string name="text_file_sizes">B|kB|MB|GB|TB</string> <string name="text_file_sizes">B|kB|MB|GB|TB</string>
<string name="reader_settings">Okuyucu ayarları</string> <string name="reader_settings">Okuyucu ayarları</string>
<string name="volume_buttons">Ses butonları</string> <string name="volume_buttons">Ses butonları</string>
<string name="error">Hata</string> <string name="error">Hata</string>
<string name="clear_thumbs_cache">Küçük resim önbelleğini temizle</string> <string name="clear_thumbs_cache">Küçük resim önbelleğini temizle</string>
<string name="gestures_only">Yalnızca hareketler</string> <string name="gestures_only">Yalnızca hareketler</string>
<string name="domain">Alan adi</string> <string name="domain">Alan adi</string>
<string name="open_in_browser">Web tarayıcısında aç</string> <string name="open_in_browser">Web tarayıcısında aç</string>
<string name="new_chapters">Yeni bölümler</string> <string name="new_chapters">Yeni bölümler</string>
<string name="notifications_settings">Bildirim ayarları</string> <string name="notifications_settings">Bildirim ayarları</string>
<string name="notification_sound">Bildirim sesi</string> <string name="notification_sound">Bildirim sesi</string>
<string name="light_indicator">LED göstergesi</string> <string name="light_indicator">LED göstergesi</string>
<string name="vibration">Titreşim</string> <string name="vibration">Titreşim</string>
<string name="other_storage">Diğer depolama</string> <string name="other_storage">Diğer depolama</string>
<string name="updates">Güncellemeler</string> <string name="updates">Güncellemeler</string>
<string name="create_shortcut">Kısayol oluştur…</string> <string name="create_shortcut">Kısayol oluştur…</string>
<string name="_import">İçe aktar</string> <string name="_import">İçe aktar</string>
<string name="delete_manga">Mangayı sil</string> <string name="delete_manga">Mangayı sil</string>
<string name="computing_">Bilgi işleniyor…</string> <string name="computing_">Bilgi işleniyor…</string>
<string name="sort_order">Sıralama düzeni</string> <string name="sort_order">Sıralama düzeni</string>
<string name="no_description">ıklama yok</string> <string name="no_description">ıklama yok</string>
<string name="operation_not_supported">Bu işlem desteklenmiyor</string> <string name="operation_not_supported">Bu işlem desteklenmiyor</string>
<string name="standard">Standart</string> <string name="standard">Standart</string>
<string name="clear_pages_cache">Sayfa önbelleğini temizle</string> <string name="clear_pages_cache">Sayfa önbelleğini temizle</string>
<string name="search_on_s">%s üzerinde ara</string> <string name="search_on_s">%s üzerinde ara</string>
<string name="internal_storage">Dahili depolama</string> <string name="internal_storage">Dahili depolama</string>
<string name="notifications">Bildirimler</string> <string name="notifications">Bildirimler</string>
<string name="switch_pages">Sayfaları değiştir</string> <string name="switch_pages">Sayfaları değiştir</string>
<string name="save_manga">Kaydet</string> <string name="save_manga">Kaydet</string>
<string name="download">İndir</string> <string name="download">İndir</string>
<string name="manga_save_location">İndirilenler klasörü</string> <string name="manga_save_location">İndirilenler klasörü</string>
<string name="external_storage">Harici depolama</string> <string name="external_storage">Harici depolama</string>
<string name="app_update_available">Uygulamanın yeni bir sürümü mevcut</string> <string name="app_update_available">Uygulamanın yeni bir sürümü mevcut</string>
<string name="favourites_categories">Favori kategoriler</string> <string name="favourites_categories">Favori kategoriler</string>
<string name="done">Bitti</string> <string name="done">Bitti</string>
<string name="read_later">Sonra oku</string> <string name="read_later">Sonra oku</string>
<string name="pages_animation">Sayfa animasyonu</string> <string name="pages_animation">Sayfa animasyonu</string>
<string name="cannot_find_available_storage">Kullanılabilir depolama alanı yok</string> <string name="cannot_find_available_storage">Kullanılabilir depolama alanı yok</string>
<string name="text_delete_local_manga">“%s” cihazdan kalıcı olarak silinsin mi\?</string> <string name="text_delete_local_manga">“%s” cihazdan kalıcı olarak silinsin mi\?</string>
<string name="clear_search_history">Arama geçmişini temizle</string> <string name="clear_search_history">Arama geçmişini temizle</string>
<string name="text_empty_holder_primary">Burası biraz boş…</string> <string name="text_empty_holder_primary">Burası biraz boş…</string>
<string name="rotate_screen">Ekranı döndür</string> <string name="rotate_screen">Ekranı döndür</string>
<string name="scale_mode">Ölçek modu</string> <string name="scale_mode">Ölçek modu</string>
<string name="zoom_mode_fit_height">Yüksekliğe sığdır</string> <string name="zoom_mode_fit_height">Yüksekliğe sığdır</string>
<string name="black_dark_theme">Siyah</string> <string name="black_dark_theme">Siyah</string>
<string name="zoom_mode_keep_start">Başlangıçta tut</string> <string name="zoom_mode_keep_start">Başlangıçta tut</string>
<string name="clear_feed">Akışı temizle</string> <string name="clear_feed">Akışı temizle</string>
<string name="restore_backup">Yedekten geri yükle</string> <string name="restore_backup">Yedekten geri yükle</string>
<string name="update">Güncelle</string> <string name="update">Güncelle</string>
<string name="sign_in">Oturum aç</string> <string name="sign_in">Oturum aç</string>
<string name="state_finished">Bitti</string> <string name="state_finished">Bitti</string>
<string name="about">Hakkında</string> <string name="about">Hakkında</string>
<string name="auth_required">Bu içeriği görüntülemek için oturum açın</string> <string name="auth_required">Bu içeriği görüntülemek için oturum açın</string>
<string name="confirm">Onayla</string> <string name="confirm">Onayla</string>
<string name="auth_complete">Yetkilendirildi</string> <string name="auth_complete">Yetkilendirildi</string>
<string name="just_now">Az önce</string> <string name="just_now">Az önce</string>
<string name="taps_on_edges">Kenar dokunuşları</string> <string name="taps_on_edges">Kenar dokunuşları</string>
<string name="large_manga_save_confirm">Bu mangada %s var. Hepsi kaydedilsin mi\?</string> <string name="large_manga_save_confirm">Bu mangada %s var. Hepsi kaydedilsin mi\?</string>
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d / %2$d açık</string> <string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d / %2$d açık</string>
<string name="text_search_holder_secondary">Sorguyu yeniden biçimlendirmeyi deneyin.</string> <string name="text_search_holder_secondary">Sorguyu yeniden biçimlendirmeyi deneyin.</string>
<string name="text_history_holder_primary">Okuduklarınız burada görüntülenecek</string> <string name="text_history_holder_primary">Okuduklarınız burada görüntülenecek</string>
<string name="text_history_holder_secondary">Yan menüde ne okuyacağınızı bulun.</string> <string name="text_history_holder_secondary">Yan menüde ne okuyacağınızı bulun.</string>
<string name="text_local_holder_primary">Önce bir şey kaydedin</string> <string name="text_local_holder_primary">Önce bir şey kaydedin</string>
<string name="text_local_holder_secondary">Çevrim içi kaynaklardan kaydedin veya dosyaları içe aktarın.</string> <string name="text_local_holder_secondary">Çevrim içi kaynaklardan kaydedin veya dosyaları içe aktarın.</string>
<string name="manga_shelf">Raf</string> <string name="manga_shelf">Raf</string>
<string name="recent_manga">Son</string> <string name="recent_manga">Son</string>
<string name="size_s">Boyut: %s</string> <string name="size_s">Boyut: %s</string>
<string name="updates_feed_cleared">Temizlendi</string> <string name="updates_feed_cleared">Temizlendi</string>
<string name="enter_password">Parola gir</string> <string name="enter_password">Parola gir</string>
<string name="protect_application_summary">Kotatsu başlatılırken parola sor</string> <string name="protect_application_summary">Kotatsu başlatılırken parola sor</string>
<string name="track_sources">Güncellemeleri ara</string> <string name="track_sources">Güncellemeleri ara</string>
<string name="clear_updates_feed">Güncelleme akışını temizle</string> <string name="clear_updates_feed">Güncelleme akışını temizle</string>
<string name="feed_will_update_soon">Akış güncellemesi yakında başlayacak</string> <string name="feed_will_update_soon">Akış güncellemesi yakında başlayacak</string>
<string name="app_version">Sürüm %s</string> <string name="app_version">Sürüm %s</string>
<string name="check_for_updates">Güncellemeleri denetle</string> <string name="check_for_updates">Güncellemeleri denetle</string>
<string name="zoom_mode_fit_center">Merkeze sığdır</string> <string name="zoom_mode_fit_center">Merkeze sığdır</string>
<string name="zoom_mode_fit_width">Genişliğe sığdır</string> <string name="zoom_mode_fit_width">Genişliğe sığdır</string>
<string name="black_dark_theme_summary">AMOLED ekranlarda daha az güç kullanır</string> <string name="black_dark_theme_summary">AMOLED ekranlarda daha az güç kullanır</string>
<string name="backup_restore">Yedekle ve geri yükle</string> <string name="backup_restore">Yedekle ve geri yükle</string>
<string name="create_backup">Veri yedeği oluştur</string> <string name="create_backup">Veri yedeği oluştur</string>
<string name="data_restored">Geri yüklendi</string> <string name="data_restored">Geri yüklendi</string>
<string name="preparing_">Hazırlanıyor…</string> <string name="preparing_">Hazırlanıyor…</string>
<string name="yesterday">Dün</string> <string name="yesterday">Dün</string>
<string name="group">Grup</string> <string name="group">Grup</string>
<string name="silent">Sessiz</string> <string name="silent">Sessiz</string>
<string name="captcha_solve">Çöz</string> <string name="captcha_solve">Çöz</string>
<string name="clear_cookies">Çerezleri temizle</string> <string name="clear_cookies">Çerezleri temizle</string>
<string name="default_s">Öntanımlı: %s</string> <string name="default_s">Öntanımlı: %s</string>
<string name="reverse">Ters</string> <string name="reverse">Ters</string>
<string name="password_length_hint">Parola 4 veya daha fazla karakterden oluşmalıdır</string> <string name="password_length_hint">Parola 4 veya daha fazla karakterden oluşmalıdır</string>
<string name="welcome">Hoş geldiniz</string> <string name="welcome">Hoş geldiniz</string>
<string name="queued">Sıraya alındı</string> <string name="queued">Sıraya alındı</string>
<string name="chapter_is_missing">Bölüm eksik</string> <string name="chapter_is_missing">Bölüm eksik</string>
<string name="about_app_translation_summary">Bu uygulamayı çevirin</string> <string name="about_app_translation_summary">Bu uygulamayı çevirin</string>
<string name="about_app_translation">Çeviri</string> <string name="about_app_translation">Çeviri</string>
<string name="state_ongoing">Devam ediyor</string> <string name="state_ongoing">Devam ediyor</string>
<string name="text_clear_cookies_prompt">Tüm kaynaklardaki oturumunuz kapatılacak</string> <string name="text_clear_cookies_prompt">Tüm kaynaklardaki oturumunuz kapatılacak</string>
<string name="enabled_sources">Kullanılan kaynaklar</string> <string name="enabled_sources">Kullanılan kaynaklar</string>
<string name="available_sources">Kullanılabilir kaynaklar</string> <string name="available_sources">Kullanılabilir kaynaklar</string>
<string name="exclude_nsfw_from_history">Uygunsuz mangayı geçmişten hariç tut</string> <string name="exclude_nsfw_from_history">Uygunsuz mangayı geçmişten hariç tut</string>
<string name="show_pages_numbers">Numaralı sayfalar</string> <string name="show_pages_numbers">Numaralı sayfalar</string>
<string name="search_results">Arama sonuçları</string> <string name="search_results">Arama sonuçları</string>
<string name="repeat_password">Parolayı tekrarla</string> <string name="repeat_password">Parolayı tekrarla</string>
<string name="dont_check">Denetleme</string> <string name="dont_check">Denetleme</string>
<string name="wrong_password">Yanlış parola</string> <string name="wrong_password">Yanlış parola</string>
<string name="backup_information">Geçmişinizin ve favorilerinizin yedeğini oluşturabilir ve bunları geri yükleyebilirsiniz</string> <string name="backup_information">Geçmişinizin ve favorilerinizin yedeğini oluşturabilir ve bunları geri yükleyebilirsiniz</string>
<string name="long_ago">Uzun zaman önce</string> <string name="long_ago">Uzun zaman önce</string>
<string name="today">Bugün</string> <string name="today">Bugün</string>
<string name="no_update_available">Güncelleme yok</string> <string name="no_update_available">Güncelleme yok</string>
<string name="all_favourites">Tüm favoriler</string> <string name="all_favourites">Tüm favoriler</string>
<string name="text_feed_holder">Okuduklarınızın yeni bölümleri burada gösterilir</string> <string name="text_feed_holder">Okuduklarınızın yeni bölümleri burada gösterilir</string>
<string name="new_version_s">Yeni sürüm: %s</string> <string name="new_version_s">Yeni sürüm: %s</string>
<string name="protect_application">Uygulamayı koru</string> <string name="protect_application">Uygulamayı koru</string>
<string name="passwords_mismatch">Parolalar eşleşmiyor</string> <string name="passwords_mismatch">Parolalar eşleşmiyor</string>
<string name="right_to_left">Sağdan-sola</string> <string name="right_to_left">Sağdan-sola</string>
<string name="create_category">Yeni kategori</string> <string name="create_category">Yeni kategori</string>
<string name="file_not_found">Dosya bulunamadı</string> <string name="file_not_found">Dosya bulunamadı</string>
<string name="data_restored_success">Tüm veriler geri yüklendi</string> <string name="data_restored_success">Tüm veriler geri yüklendi</string>
<string name="data_restored_with_errors">Veriler geri yüklendi, ancak hatalar var</string> <string name="data_restored_with_errors">Veriler geri yüklendi, ancak hatalar var</string>
<string name="tap_to_try_again">Tekrar denemek için dokunun</string> <string name="tap_to_try_again">Tekrar denemek için dokunun</string>
<string name="next">İleri</string> <string name="next">İleri</string>
<string name="captcha_required">CAPTCHA gerekli</string> <string name="captcha_required">CAPTCHA gerekli</string>
<string name="cookies_cleared">Tüm çerezler kaldırıldı</string> <string name="cookies_cleared">Tüm çerezler kaldırıldı</string>
<string name="reader_mode_hint">Seçilen yapılandırma bu manga için hatırlanacak</string> <string name="reader_mode_hint">Seçilen yapılandırma bu manga için hatırlanacak</string>
<string name="text_clear_updates_feed_prompt">Tüm güncelleme geçmişi kalıcı olarak silinsin mi\?</string> <string name="text_clear_updates_feed_prompt">Tüm güncelleme geçmişi kalıcı olarak silinsin mi\?</string>
<string name="protect_application_subtitle">Uygulamayı başlatmak için bir parola girin</string> <string name="protect_application_subtitle">Uygulamayı başlatmak için bir parola girin</string>
<string name="text_clear_search_history_prompt">Tüm son arama sorguları kalıcı olarak kaldırılsın mı\?</string> <string name="text_clear_search_history_prompt">Tüm son arama sorguları kalıcı olarak kaldırılsın mı\?</string>
<string name="backup_saved">Yedek kaydedildi</string> <string name="backup_saved">Yedek kaydedildi</string>
<string name="genres">Türler</string> <string name="genres">Türler</string>
<string name="system_default">Öntanımlı</string> <string name="system_default">Öntanımlı</string>
<string name="auth_not_supported_by">%s üzerinde oturum açma desteklenmiyor</string> <string name="auth_not_supported_by">%s üzerinde oturum açma desteklenmiyor</string>
<string name="read_more">Daha fazla oku</string> <string name="read_more">Daha fazla oku</string>
<string name="tracker_warning">Bazı aygıtların arka plan görevlerini bozabilecek farklı sistem davranışları vardır.</string> <string name="tracker_warning">Bazı aygıtların arka plan görevlerini bozabilecek farklı sistem davranışları vardır.</string>
<string name="screenshots_policy">Ekran görüntüsü politikası</string> <string name="screenshots_policy">Ekran görüntüsü politikası</string>
<string name="screenshots_block_nsfw">Uygunsuzlarda engelle</string> <string name="screenshots_block_nsfw">Uygunsuzlarda engelle</string>
<string name="screenshots_block_all">Her zaman engelle</string> <string name="screenshots_block_all">Her zaman engelle</string>
<string name="screenshots_allow">İzin ver</string> <string name="screenshots_allow">İzin ver</string>
<string name="check_for_new_chapters">Yeni bölümleri denetle</string> <string name="check_for_new_chapters">Yeni bölümleri denetle</string>
<string name="suggestions">Öneriler</string> <string name="suggestions">Öneriler</string>
<string name="suggestions_enable">Önerileri etkinleştir</string> <string name="suggestions_enable">Önerileri etkinleştir</string>
<string name="suggestions_summary">Tercihlerinize göre manga önerileri alın</string> <string name="suggestions_summary">Tercihlerinize göre manga önerileri alın</string>
<string name="suggestions_info">Tüm veriler sadece bu cihaz üzerinde yerel olarak işlenir ve asla herhangi bir yere satılmaz.</string> <string name="suggestions_info">Tüm veriler bu cihazda yalnızca yerel olarak analiz edilir ve asla hbir yere gönderilmez.</string>
<string name="text_suggestion_holder">Manga okumaya başladıktan sonra kişiselleştirilmiş öneriler alacaksınız</string> <string name="text_suggestion_holder">Manga okumaya başladıktan sonra kişiselleştirilmiş öneriler alacaksınız</string>
<string name="exclude_nsfw_from_suggestions">Uygunsuz manga önerme</string> <string name="exclude_nsfw_from_suggestions">Uygunsuz manga önerme</string>
<string name="enabled">Etkin</string> <string name="enabled">Etkin</string>
<string name="disabled">Devre dışı</string> <string name="disabled">Devre dışı</string>
<string name="filter_load_error">Türler listesi yüklenemiyor</string> <string name="filter_load_error">Türler listesi yüklenemiyor</string>
<string name="reset_filter">Filtreyi sıfırla</string> <string name="reset_filter">Filtreyi sıfırla</string>
<string name="onboard_text">Manga okumak istediğiniz dilleri seçin. Daha sonra ayarlardan değiştirebilirsiniz.</string> <string name="onboard_text">Manga okumak istediğiniz dilleri seçin. Daha sonra ayarlardan değiştirebilirsiniz.</string>
<string name="always">Her zaman</string> <string name="always">Her zaman</string>
<string name="never">Hiçbir zaman</string> <string name="never">Hiçbir zaman</string>
<string name="only_using_wifi">Yalnızca Wi-Fi\'de</string> <string name="only_using_wifi">Yalnızca Wi-Fi\'de</string>
<string name="preload_pages">Sayfaları önceden yükle</string> <string name="preload_pages">Sayfaları önceden yükle</string>
<string name="logged_in_as">%s olarak oturum açıldı</string> <string name="logged_in_as">%s olarak oturum açıldı</string>
<string name="nsfw">18+</string> <string name="nsfw">18+</string>
<string name="various_languages">Çeşitli diller</string> <string name="various_languages">Çeşitli diller</string>
<string name="search_chapters">Bölüm bul</string> <string name="search_chapters">Bölüm bul</string>
<string name="chapters_empty">Bu mangada bölüm yok</string> <string name="chapters_empty">Bu mangada bölüm yok</string>
<string name="percent_string_pattern">%%%1$s</string> <string name="percent_string_pattern">%%%1$s</string>
<string name="suggestions_updating">Öneriler güncelleniyor</string> <string name="suggestions_updating">Öneriler güncelleniyor</string>
<string name="appearance">Görünüm</string> <string name="appearance">Görünüm</string>
<string name="suggestions_excluded_genres">Türleri hariç tut</string> <string name="suggestions_excluded_genres">Türleri hariç tut</string>
<string name="suggestions_excluded_genres_summary">Önerilerde görmek istemediğiniz türleri belirtin</string> <string name="suggestions_excluded_genres_summary">Önerilerde görmek istemediğiniz türleri belirtin</string>
<string name="text_delete_local_manga_batch">Seçilen ögeler aygıttan kalıcı olarak silinsin mi\?</string> <string name="text_delete_local_manga_batch">Seçilen ögeler aygıttan kalıcı olarak silinsin mi\?</string>
<string name="removal_completed">Kaldırma tamamlandı</string> <string name="removal_completed">Kaldırma tamamlandı</string>
<string name="chapters_will_removed_background">Bölümler arka planda kaldırılacak.</string> <string name="chapters_will_removed_background">Bölümler arka planda kaldırılacak</string>
<string name="download_slowdown">İndirmeyi yavaşlat</string> <string name="download_slowdown">İndirmeyi yavaşlat</string>
<string name="download_slowdown_summary">IP adresinizin engellenmesinden kaçınmanıza yardımcı olur</string> <string name="download_slowdown_summary">IP adresinizin engellenmesinden kaçınmanıza yardımcı olur</string>
<string name="local_manga_processing">Kaydedilen manga işleme</string> <string name="local_manga_processing">Kaydedilen manga işleme</string>
<string name="hide">Gizle</string> <string name="hide">Gizle</string>
<string name="new_sources_text">Yeni manga kaynakları var</string> <string name="new_sources_text">Yeni manga kaynakları var</string>
<string name="show_notification_new_chapters_off">Bildirim almayacaksınız ancak yeni bölümler listelerde vurgulanacak</string> <string name="show_notification_new_chapters_off">Bildirim almayacaksınız ancak yeni bölümler listelerde vurgulanacak</string>
<string name="notifications_enable">Bildirimleri etkinleştir</string> <string name="notifications_enable">Bildirimleri etkinleştir</string>
<string name="check_new_chapters_title">Yeni bölümleri denetle ve bildirim gönder</string> <string name="check_new_chapters_title">Yeni bölümleri denetle ve bildirim gönder</string>
<string name="show_notification_new_chapters_on">Okuduğunuz manga güncellemeleri hakkında bildirim alacaksınız</string> <string name="show_notification_new_chapters_on">Okuduğunuz manga güncellemeleri hakkında bildirim alacaksınız</string>
<string name="empty_favourite_categories">Favori kategori yok</string> <string name="empty_favourite_categories">Favori kategori yok</string>
<string name="name">Ad</string> <string name="name">Ad</string>
<string name="edit">Düzenle</string> <string name="edit">Düzenle</string>
<string name="edit_category">Kategoriyi düzenle</string> <string name="edit_category">Kategoriyi düzenle</string>
<string name="bookmark_add">Yer imi ekle</string> <string name="bookmark_add">Yer imi ekle</string>
<string name="bookmark_remove">Yer imini kaldır</string> <string name="bookmark_remove">Yer imini kaldır</string>
<string name="bookmarks">Yer imleri</string> <string name="bookmarks">Yer imleri</string>
<string name="bookmark_removed">Yer imi kaldırıldı</string> <string name="bookmark_removed">Yer imi kaldırıldı</string>
<string name="bookmark_added">Yer imi eklendi</string> <string name="bookmark_added">Yer imi eklendi</string>
<string name="undo">Geri al</string> <string name="undo">Geri al</string>
<string name="removed_from_history">Geçmişten kaldırıldı</string> <string name="removed_from_history">Geçmişten kaldırıldı</string>
<string name="dns_over_https">HTTPS üzerinden DNS</string> <string name="dns_over_https">HTTPS üzerinden DNS</string>
<string name="detect_reader_mode">Okuyucu modunu otomatik algıla</string> <string name="detect_reader_mode">Okuyucu modunu otomatik algıla</string>
<string name="detect_reader_mode_summary">Manganın webtoon olup olmadığını otomatik olarak algıla</string> <string name="detect_reader_mode_summary">Manganın webtoon olup olmadığını otomatik olarak algıla</string>
<string name="default_mode">Öntanımlı mod</string> <string name="default_mode">Öntanımlı mod</string>
<string name="disable_battery_optimization">Pil iyileştirmesini devre dışı bırak</string> <string name="disable_battery_optimization">Pil iyileştirmesini devre dışı bırak</string>
<string name="disable_battery_optimization_summary">Arka planda güncelleme denetimlerine yardımcı olur</string> <string name="disable_battery_optimization_summary">Arka planda güncelleme denetimlerine yardımcı olur</string>
<string name="crash_text">Bir şeyler yanlış gitti. Düzeltmemize yardımcı olması için lütfen geliştiricilere bir hata bildirimi gönderin.</string> <string name="crash_text">Bir şeyler yanlış gitti. Düzeltmemize yardımcı olması için lütfen geliştiricilere bir hata bildirimi gönderin.</string>
<string name="send">Gönder</string> <string name="send">Gönder</string>
<string name="disable_all">Tümünü devre dışı bırak</string> <string name="disable_all">Tümünü devre dışı bırak</string>
<string name="use_fingerprint">Varsa parmak izi kullan</string> <string name="use_fingerprint">Varsa parmak izi kullan</string>
<string name="appwidget_shelf_description">Favorilerinizden mangalar</string> <string name="appwidget_shelf_description">Favorilerinizden mangalar</string>
<string name="appwidget_recent_description">Son okuduğunuz mangalar</string> <string name="appwidget_recent_description">Son okuduğunuz mangalar</string>
<string name="report">Bildir</string> <string name="report">Bildir</string>
<string name="tracking">İzleme</string> <string name="tracking">İzleme</string>
<string name="logout">Oturumu kapat</string> <string name="logout">Oturumu kapat</string>
<string name="status_reading">Okunuyor</string> <string name="status_reading">Okunuyor</string>
<string name="status_completed">Tamamlandı</string> <string name="status_completed">Tamamlandı</string>
<string name="show_reading_indicators">Okuma ilerleme göstergelerini göster</string> <string name="show_reading_indicators">Okuma ilerleme göstergelerini göster</string>
<string name="data_deletion">Verileri sil</string> <string name="data_deletion">Verileri sil</string>
<string name="show_reading_indicators_summary">Geçmişte ve favorilerde okunma yüzdesini göster</string> <string name="show_reading_indicators_summary">Geçmişte ve favorilerde okunma yüzdesini göster</string>
<string name="exclude_nsfw_from_history_summary">Uygunsuz olarak işaretlenen mangalar asla geçmişe eklenmeyecek ve ilerlemeniz kaydedilmeyecektir</string> <string name="exclude_nsfw_from_history_summary">Uygunsuz olarak işaretlenen mangalar asla geçmişe eklenmeyecek ve ilerlemeniz kaydedilmeyecektir</string>
<string name="clear_cookies_summary">Bazı sorunlarda yardımcı olabilir. Tüm yetkilendirmeler geçersiz kılınacaktır</string> <string name="clear_cookies_summary">Bazı sorunlarda yardımcı olabilir. Tüm yetkilendirmeler geçersiz kılınacaktır</string>
<string name="status_on_hold">Beklemede</string> <string name="status_on_hold">Beklemede</string>
<string name="status_dropped">Bırakıldı</string> <string name="status_dropped">Bırakıldı</string>
<string name="status_planned">Planlandı</string> <string name="status_planned">Planlandı</string>
<string name="status_re_reading">Yeniden okunuyor</string> <string name="status_re_reading">Yeniden okunuyor</string>
<string name="show_all">Tümünü göster</string> <string name="show_all">Tümünü göster</string>
<string name="invalid_domain_message">Geçersiz etki alanı</string> <string name="invalid_domain_message">Geçersiz etki alanı</string>
<string name="select_range">Aralık seç</string> <string name="select_range">Aralık seç</string>
<string name="not_found_404">İçerik bulunamadı veya kaldırıldı</string> <string name="not_found_404">İçerik bulunamadı veya kaldırıldı</string>
<string name="text_shelf_holder_primary">Manganız burada görüntülenecek</string> <string name="text_shelf_holder_primary">Manganız burada görüntülenecek</string>
<string name="canceled">İptal edilmiş</string> <string name="canceled">İptal edilmiş</string>
<string name="account_already_exists">Hesap zaten var</string> <string name="account_already_exists">Hesap zaten var</string>
<string name="back">Geri</string> <string name="back">Geri</string>
<string name="sync">Senkronizasyon</string> <string name="sync">Senkronizasyon</string>
<string name="sync_title">Verini yedekle</string> <string name="sync_title">Verini yedekle</string>
<string name="email_enter_hint">Devam etmek için E-Postanızı girin</string> <string name="email_enter_hint">Devam etmek için E-Postanızı girin</string>
<string name="clear_all_history">Tüm gecmişi temizle</string> <string name="clear_all_history">Tüm gecmişi temizle</string>
<string name="last_2_hours">Son 2 saat</string> <string name="last_2_hours">Son 2 saat</string>
<string name="history_cleared">Geçmiş temizlendi</string> <string name="history_cleared">Geçmiş temizlendi</string>
<string name="manage">Yönet</string> <string name="manage">Yönet</string>
<string name="no_bookmarks_yet">Yer işareti yok</string> <string name="no_bookmarks_yet">Yer işareti yok</string>
<string name="no_bookmarks_summary">Manga okurken yer işareti oluşturabilirsiniz</string> <string name="no_bookmarks_summary">Manga okurken yer işareti oluşturabilirsiniz</string>
<string name="bookmarks_removed">Yer işaretleri kaldırıldı</string> <string name="bookmarks_removed">Yer işaretleri kaldırıldı</string>
<string name="no_manga_sources">Manga kaynağı yok</string> <string name="no_manga_sources">Manga kaynağı yok</string>
<string name="no_manga_sources_text">Çevrimiçi manga okumak için manga kaynaklarını aktif edin</string> <string name="no_manga_sources_text">Çevrimiçi manga okumak için manga kaynaklarını aktif edin</string>
<string name="random">Rastgele</string> <string name="random">Rastgele</string>
<string name="empty">Boş</string> <string name="empty">Boş</string>
<string name="explore">Keşfet</string> <string name="explore">Keşfet</string>
<string name="confirm_exit">Çıkmak için tekrar Geri tıkla</string> <string name="confirm_exit">Çıkmak için tekrar Geri tıkla</string>
<string name="exit_confirmation_summary">Çıkmak için iki defa Geri tıkla</string> <string name="exit_confirmation_summary">Çıkmak için iki defa Geri tıkla</string>
<string name="removed_from_favourites">Favorilerden kaldırıldı</string> <string name="removed_from_favourites">Favorilerden kaldırıldı</string>
<string name="exit_confirmation">Çıkış doğrulaması</string> <string name="exit_confirmation">Çıkış doğrulaması</string>
<string name="comics_archive">Çizgi roman arşivi</string> <string name="comics_archive">Çizgi roman arşivi</string>
<string name="manga_error_description_pattern">Hata ayrıntıları:&lt;br&gt;&lt;tt&gt;%1$s&lt;/tt&gt;&lt;br&gt;&lt;br&gt;1.Mangayı &lt;a href=%2$s&gt;kaynağında mevcut olduğuna emin olmak için&lt;/a&gt; bir web tarayıcısında açın&lt;br&gt;2. &lt;a href=kotatsu://about&gt; Kotatsunun son sürümünü kullandığnızdan emin olun.&lt;/a&gt;/br&gt; 3. Mevcutsa, geliştiricilere bir hata reporu gönderin.</string> <string name="manga_error_description_pattern">Hata ayrıntıları:&lt;br&gt;&lt;tt&gt;%1$s&lt;/tt&gt;&lt;br&gt;&lt;br&gt;1. Kaynağında bulunduğundan emin olmak için &lt;a href=%2$s&gt;mangayı bir web tarayıcısında açmayı&lt;/a&gt; deneyin&lt;br&gt;2. &lt;a href=kotatsu://about&gt;Kotatsu\'nun en son sürümünü&lt;/a&gt;&lt;br&gt;3 kullandığınızdan emin olun. Varsa, geliştiricilere bir hata raporu gönderin.</string>
<string name="text_shelf_holder_secondary">«Keşfet» kısmında neler okuyacağınızı bulun</string> <string name="text_shelf_holder_secondary">«Keşfet» kısmında neler okuyacağınızı bulun</string>
<string name="categories_delete_confirm">Seçilen favori kategorileri silmek istediğinizden emin misiniz\? <string name="categories_delete_confirm">Seçilen favori kategorileri silmek istediğinizden emin misiniz\?
\nİçindeki tüm mangalar kaybolur ve bu işlem geri alınamaz.</string> \nİçindeki tüm mangalar kaybolur ve bu işlem geri alınamaz.</string>
<string name="reorder">Yeniden sırala</string> <string name="reorder">Yeniden sırala</string>
<string name="pages_cache">Sayfa önbelleği</string> <string name="pages_cache">Sayfa önbelleği</string>
<string name="other_cache">Diğer önbellekler</string> <string name="other_cache">Diğer önbellekler</string>
<string name="storage_usage">Depolama kullanımı</string> <string name="storage_usage">Depolama kullanımı</string>
<string name="available">Mevcut</string> <string name="available">Mevcut</string>
<string name="memory_usage_pattern">%s - %s</string> <string name="memory_usage_pattern">%s - %s</string>
<string name="options">Seçenekler</string> <string name="options">Seçenekler</string>
<string name="incognito_mode">Gizli mod</string> <string name="incognito_mode">Gizli mod</string>
<string name="no_chapters">Bölüm yok</string> <string name="no_chapters">Bölüm yok</string>
<string name="automatic_scroll">Otomatik kaydır</string> <string name="automatic_scroll">Otomatik kaydır</string>
<string name="reader_info_pattern">Böl. %1$d/%2$d Sayf. %3$d/%4$d</string> <string name="reader_info_pattern">Böl. %1$d/%2$d Sayf. %3$d/%4$d</string>
<string name="reader_info_bar">Okuyucuda bilgi çubuğu göster</string> <string name="reader_info_bar">Okuyucuda bilgi çubuğu göster</string>
<string name="folder_with_images">Resimlerle klasör</string> <string name="folder_with_images">Resimlerle klasör</string>
<string name="importing_manga">Manga içe aktarılıyor</string> <string name="importing_manga">Manga içe aktarılıyor</string>
<string name="import_completed">İçe aktarım tamamlandı</string> <string name="import_completed">İçe aktarım tamamlandı</string>
<string name="import_completed_hint">Yer açmak için orijinal dosyayı depolamadan silebilirsiniz</string> <string name="import_completed_hint">Yer açmak için orijinal dosyayı depolamadan silebilirsiniz</string>
<string name="import_will_start_soon">İçe aktarım birazdan başlayacak</string> <string name="import_will_start_soon">İçe aktarım birazdan başlayacak</string>
<string name="feed">Akış</string> <string name="feed">Akış</string>
<string name="history_shortcuts">En son manga kısayollarını göster</string> <string name="history_shortcuts">En son manga kısayollarını göster</string>
<string name="reader_control_ltr">Ergonomik okuyucu kontrol</string> <string name="reader_control_ltr">Ergonomik okuyucu kontrol</string>
<string name="color_correction">Renk düzeltme</string> <string name="color_correction">Renk düzeltme</string>
<string name="brightness">Parlaklık</string> <string name="brightness">Parlaklık</string>
<string name="contrast">Kontrast</string> <string name="contrast">Kontrast</string>
<string name="reset">Sıfırla</string> <string name="reset">Sıfırla</string>
<string name="color_correction_hint">Seçilen renk ayarları bu manga için hatırlanacaktır</string> <string name="color_correction_hint">Seçilen renk ayarları bu manga için hatırlanacaktır</string>
<string name="text_unsaved_changes_prompt">Kaydedilmeyen değişiklikler kaydedilsin mi yoksa atılsın mı\?</string> <string name="text_unsaved_changes_prompt">Kaydedilmeyen değişiklikler kaydedilsin mi yoksa atılsın mı\?</string>
<string name="discard">Yoksay</string> <string name="discard">Yoksay</string>
<string name="error_no_space_left">Cihazda yer yok</string> <string name="error_no_space_left">Cihazda yer yok</string>
<string name="webtoon_zoom">Webtoon yakınlaştırma</string> <string name="webtoon_zoom">Webtoon yakınlaştırma</string>
<string name="reader_slider">Sayfa değiştirme kaydırıcısını göster</string> <string name="reader_slider">Sayfa değiştirme kaydırıcısını göster</string>
<string name="clear_new_chapters_counters">Ayrıca yeni bölümler hakkındaki bilgileri temizle</string> <string name="clear_new_chapters_counters">Ayrıca yeni bölümler hakkındaki bilgileri temizle</string>
<string name="compact">Sıkı</string> <string name="compact">Sıkı</string>
<string name="different_languages">Farklı diller</string> <string name="different_languages">Farklı diller</string>
<string name="network_unavailable">Ağ kullanılamıyor</string> <string name="network_unavailable">Ağ kullanılamıyor</string>
<string name="network_unavailable_hint">Çevrim içi manga okumak için Wi-Fi veya mobil ağıın</string> <string name="network_unavailable_hint">Çevrim içi manga okumak için Wi-Fi veya mobil ağıın</string>
<string name="server_error">Sunucu tarafı hatası (%1$d). Lütfen daha sonra tekrar deneyin</string> <string name="server_error">Sunucu tarafı hatası (%1$d). Lütfen daha sonra tekrar deneyin</string>
<string name="saved_manga">Kaydedilen mangalar</string> <string name="saved_manga">Kaydedilen mangalar</string>
<string name="history_shortcuts_summary">Uygulama simgesine uzun basarak son mangaları kullanılabilir hale getirin</string> <string name="history_shortcuts_summary">Uygulama simgesine uzun basarak son mangaları kullanılabilir hale getirin</string>
<string name="reader_control_ltr_summary">Sağ kenara dokunulduğunda veya sağ tuşa basıldığında her zaman bir sonraki sayfaya geçilir</string> <string name="reader_control_ltr_summary">Sağ kenara dokunulduğunda veya sağ tuşa basıldığında her zaman bir sonraki sayfaya geçilir</string>
<string name="source_disabled">Kaynak devre dışı</string> <string name="source_disabled">Kaynak devre dışı</string>
<string name="prefetch_content">İçerik ön yüklemesi</string> <string name="prefetch_content">İçerik ön yüklemesi</string>
<string name="mark_as_current">Geçerli olarak işaretle</string> <string name="mark_as_current">Geçerli olarak işaretle</string>
<string name="language">Dil</string> <string name="language">Dil</string>
<string name="share_logs">Günlükleri paylaş</string> <string name="share_logs">Günlükleri paylaş</string>
<string name="enable_logging">Günlük kaydını etkinleştir</string> <string name="enable_logging">Günlük kaydını etkinleştir</string>
<string name="enable_logging_summary">Hata ayıklama amacıyla bazı eylemleri kaydedin</string> <string name="enable_logging_summary">Hata ayıklama amacıyla bazı eylemleri kaydedin</string>
<string name="show_suspicious_content">Şüpheli içeriği göster</string> <string name="show_suspicious_content">Şüpheli içeriği göster</string>
<string name="services">Hizmetler</string> <string name="services">Hizmetler</string>
<string name="scrobbling_empty_hint">Okuma ilerlemesini izlemek için manga ayrıntıları ekranında Menü → İzle\'yi seçin.</string> <string name="scrobbling_empty_hint">Okuma ilerlemesini izlemek için manga ayrıntıları ekranında Menü → İzle\'yi seçin.</string>
<string name="nothing_here">burada hiçbir şey yok</string> <string name="nothing_here">burada hiçbir şey yok</string>
<string name="theme_name_dynamic">Dinamik</string> <string name="theme_name_dynamic">Dinamik</string>
<string name="color_theme">renk vurgusu</string> <string name="color_theme">renk vurgusu</string>
<string name="show_in_grid_view">Izgara görünümünde göster</string> <string name="show_in_grid_view">Izgara görünümünde göster</string>
<string name="theme_name_mamimi">Mamimi</string> <string name="theme_name_mamimi">Mamimi</string>
<string name="theme_name_kanade">Kanade</string> <string name="theme_name_kanade">Kanade</string>
<string name="user_agent">UserAgent başlığı</string> <string name="user_agent">UserAgent başlığı</string>
<string name="allow_unstable_updates_summary">Uygulamanın beta sürümleri için güncellemeler öner</string> <string name="allow_unstable_updates_summary">Uygulamanın beta sürümleri için güncellemeler öner</string>
<string name="allow_unstable_updates">Kararsız güncellemelere izin ver</string> <string name="allow_unstable_updates">Kararsız güncellemelere izin ver</string>
<string name="download_started">İndirme başladı</string> <string name="download_started">İndirme başladı</string>
<string name="theme_name_miku">Miku</string> <string name="theme_name_miku">Miku</string>
<string name="theme_name_asuka">Asuka</string> <string name="theme_name_asuka">Asuka</string>
<string name="theme_name_mion">Mion</string> <string name="theme_name_mion">Mion</string>
<string name="theme_name_rikka">Rikka</string> <string name="theme_name_rikka">Rikka</string>
<string name="theme_name_sakura">Sakura</string> <string name="theme_name_sakura">Sakura</string>
<string name="settings_apply_restart_required">Bu değişiklikleri uygulamak için lütfen uygulamayı yeniden başlatın</string> <string name="settings_apply_restart_required">Bu değişiklikleri uygulamak için lütfen uygulamayı yeniden başlatın</string>
<string name="find_similar">Benzerini bul</string> <string name="find_similar">Benzerini bul</string>
<string name="translations">Çeviriler</string> <string name="translations">Çeviriler</string>
<string name="web_view_unavailable">WebView kullanılamıyor: WebView sağlayıcısının kurulu olup olmadığını kontrol edin</string> <string name="web_view_unavailable">WebView kullanılamıyor: WebView sağlayıcısının kurulu olup olmadığını kontrol edin</string>
<string name="enable">Etkinleştir</string> <string name="enable">Etkinleştir</string>
<string name="no_thanks">Hayır teşekkürler</string> <string name="no_thanks">Hayır teşekkürler</string>
<string name="clear_network_cache">İnternet geçmişini temizle</string> <string name="clear_network_cache">İnternet geçmişini temizle</string>
<string name="sync_settings">Eşitleme seçenekleri</string> <string name="sync_settings">Eşitleme seçenekleri</string>
<string name="server_address">Sunucu adresi</string> <string name="server_address">Sunucu adresi</string>
<string name="sync_host_description">"Şirket içinde barındırılan bir eşitleme sunucusu veya varsayılan bir sunucu kullanabilirsiniz. Ne yaptığınızdan emin değilseniz bunu değiştirmeyin."</string> <string name="sync_host_description">Şirket içinde barındırılan bir eşitleme sunucusu veya varsayılan bir sunucu kullanabilirsiniz. Ne yaptığınızdan emin değilseniz bunu değiştirmeyin.</string>
<string name="mirror_switching_summary">Yansıtmalar varsa, hatalarda uzak kaynaklar için etki alanlarını otomatik olarak değiştir</string> <string name="mirror_switching_summary">Yansıtmalar varsa, hatalarda uzak kaynaklar için etki alanlarını otomatik olarak değiştir</string>
<string name="downloads_wifi_only_summary">Mobil ağa geçerken indirmeyi durdur</string> <string name="downloads_wifi_only_summary">Mobil ağa geçerken indirmeyi durdur</string>
<string name="remove_completed">Bitirilenleri kaldır</string> <string name="remove_completed">Bitirilenleri kaldır</string>
<string name="cancel_all">Hepsini iptal et</string> <string name="cancel_all">Hepsini iptal et</string>
<string name="downloads_wifi_only">Sadece Wi-Fi ile indir</string> <string name="downloads_wifi_only">Sadece Wi-Fi ile indir</string>
<string name="got_it">Anladım</string> <string name="got_it">Anladım</string>
<string name="sources_reorder_tip">Yeniden sıralamak için bir öğeye dokunun ve basılı tutun</string> <string name="sources_reorder_tip">Yeniden sıralamak için bir öğeye dokunun ve basılı tutun</string>
<string name="comics_archive_import_description">Bir veya daha fazla .cbz veya .zip dosyası seçebilirsiniz, her dosya ayrı bir manga olarak tanınacaktır.</string> <string name="comics_archive_import_description">Bir veya daha fazla .cbz veya .zip dosyası seçebilirsiniz, her dosya ayrı bir manga olarak tanınacaktır.</string>
<string name="folder_with_images_import_description">Arşivler veya resimler içeren bir dizin seçebilirsiniz. Her arşiv (veya alt dizin) bir bölüm olarak tanınacaktır.</string> <string name="folder_with_images_import_description">Arşivler veya resimler içeren bir dizin seçebilirsiniz. Her arşiv (veya alt dizin) bir bölüm olarak tanınacaktır.</string>
<string name="speed">Hız</string> <string name="speed">Hız</string>
<string name="restore_backup_description">Kullanıcı verilerinin önceden oluşturulmuş bir yedeğini içe aktarın</string> <string name="restore_backup_description">Kullanıcı verilerinin önceden oluşturulmuş bir yedeğini içe aktarın</string>
<string name="show_on_shelf">Rafta Göster</string> <string name="show_on_shelf">Rafta Göster</string>
<string name="sync_auth_hint">Mevcut bir hesapta oturum açabilir veya yeni bir hesap oluşturabilirsiniz.</string> <string name="sync_auth_hint">Mevcut bir hesapta oturum açabilir veya yeni bir hesap oluşturabilirsiniz</string>
<string name="ignore_ssl_errors">SSL hatalarını görmezden gel</string> <string name="ignore_ssl_errors">SSL hatalarını görmezden gel</string>
<string name="pause">Durdur</string> <string name="pause">Durdur</string>
<string name="resume">Devam et</string> <string name="resume">Devam et</string>
<string name="paused">Durduruldu</string> <string name="paused">Durduruldu</string>
<string name="suggestion_manga">Öneri:%s</string> <string name="suggestion_manga">Öneri:%s</string>
<string name="suggestions_notifications_summary">Bazen manga öneri bildirimlerilerini göster</string> <string name="suggestions_notifications_summary">Bazen manga öneri bildirimlerilerini göster</string>
<string name="more">Daha fazla</string> <string name="more">Daha fazla</string>
<string name="cancel_all_downloads_confirm">Tüm aktif indirmeler iptal edilecek, kısmen indirilen veriler kaybolacak</string> <string name="cancel_all_downloads_confirm">Tüm aktif indirmeler iptal edilecek, kısmen indirilen veriler kaybolacak</string>
<string name="remove_completed_downloads_confirm">İndirme geçmişin tamamen silinecek</string> <string name="remove_completed_downloads_confirm">İndirme geçmişin tamamen silinecek</string>
<string name="text_downloads_list_holder">Hiçbir indirmeniz yok</string> <string name="text_downloads_list_holder">Hiçbir indirmeniz yok</string>
<string name="downloads_resumed">İndirmeler devam ettirildi</string> <string name="downloads_resumed">İndirmeler devam ettirildi</string>
<string name="downloads_paused">İndirmeler durduruldu</string> <string name="downloads_paused">İndirmeler durduruldu</string>
<string name="downloads_removed">İndirmeler silindi</string> <string name="downloads_removed">İndirmeler silindi</string>
<string name="mirror_switching">Aynayı otomatik olarak seç</string> <string name="mirror_switching">Aynayı otomatik olarak seç</string>
<string name="downloads_cancelled">İndirmeler iptal edildi</string> <string name="downloads_cancelled">İndirmeler iptal edildi</string>
<string name="suggestions_enable_prompt">Kişiselleştirilmiş manga önerileri almak istiyor musunuz\?</string> <string name="suggestions_enable_prompt">Kişiselleştirilmiş manga önerileri almak istiyor musunuz\?</string>
<string name="address">Adres</string> <string name="address">Adres</string>
<string name="type">Tür</string> <string name="type">Tür</string>
<string name="manga_branch_title_template">%1$s (%2$s)</string> <string name="manga_branch_title_template">%1$s (%2$s)</string>
<string name="port">Menü</string> <string name="port">Menü</string>
<string name="proxy">Proxy</string> <string name="proxy">Proxy</string>
<string name="invalid_value_message">Geçersiz değer</string> <string name="invalid_value_message">Geçersiz değer</string>
<string name="invalid_port_number">Geçersiz port numarası</string> <string name="invalid_port_number">Geçersiz port numarası</string>
<string name="invert_colors">Renkleri ters çevir</string> <string name="invert_colors">Renkleri ters çevir</string>
<string name="images_proxy_title">Görüntü optimizasyon proxy\'si</string> <string name="images_proxy_title">Görüntü optimizasyon proxy\'si</string>
<string name="password">Şifre</string> <string name="password">Şifre</string>
<string name="authorization_optional">Doğrulama (isteğe bağlı)</string> <string name="authorization_optional">Doğrulama (isteğe bağlı)</string>
<string name="downloaded">İndirildi</string> <string name="downloaded">İndirildi</string>
<string name="images_procy_description">Trafik kullanımını azaltmak ve mümkünse resim yüklemeyi hızlandırmak için wsrv.nl hizmetini kullanın</string> <string name="images_procy_description">Trafik kullanımını azaltmak ve mümkünse resim yüklemeyi hızlandırmak için wsrv.nl hizmetini kullanın</string>
<string name="username">Kullanıcı adı</string> <string name="username">Kullanıcı adı</string>
</resources> <string name="network"></string>
<string name="data_and_privacy">Veri ve gizlilik</string>
<string name="restore_summary">Önceden oluşturulmuş yedeği geri yükle</string>
<string name="webtoon_zoom_summary">Webtoon modunda yakınlaştırma hareketine izin ver</string>
<string name="reader_info_bar_summary">Geçerli saati ve okuma ilerlemesini ekranın üst kısmında gösterin</string>
<string name="show_pages_numbers_summary">Sayfa numaralarını alt köşede göster</string>
<string name="pages_animation_summary">Sayfa Çevirme Animasyonu</string>
<string name="details_button_tip">Daha fazla seçenek görmek için Oku düğmesini basılı tutun</string>
</resources>

View File

@@ -22,7 +22,7 @@
<string name="detailed_list">Детальний список</string> <string name="detailed_list">Детальний список</string>
<string name="list_mode">Режим списку</string> <string name="list_mode">Режим списку</string>
<string name="settings">Налаштування</string> <string name="settings">Налаштування</string>
<string name="remote_sources">Джерела манги</string> <string name="remote_sources">Джерела манґи</string>
<string name="loading_">Завантаження…</string> <string name="loading_">Завантаження…</string>
<string name="computing_">Обчислення…</string> <string name="computing_">Обчислення…</string>
<string name="chapter_d_of_d">Розділ %1$d із %2$d</string> <string name="chapter_d_of_d">Розділ %1$d із %2$d</string>