diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/EditMangaDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/EditMangaDialog.kt
index 431034386..c6d038df2 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/EditMangaDialog.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/EditMangaDialog.kt
@@ -112,7 +112,8 @@ class EditMangaDialog : DialogController {
if (manga.title != manga.url) {
binding.title.setText(manga.title)
}
- binding.title.hint = "${resources?.getString(R.string.title)}: ${manga.url}"
+
+ binding.title.hint = context.getString(R.string.title_hint, manga.url)
binding.mangaAuthor.setText(manga.author.orEmpty())
binding.mangaArtist.setText(manga.artist.orEmpty())
binding.mangaDescription.setText(manga.description.orEmpty())
@@ -132,19 +133,22 @@ class EditMangaDialog : DialogController {
}
binding.mangaGenresTags.setChips(manga.getGenres().orEmpty().dropBlank())
- binding.title.hint = "${resources?.getString(R.string.title)}: ${manga.originalTitle}"
+ binding.title.hint = context.getString(R.string.title_hint, manga.originalTitle)
if (manga.originalAuthor != null) {
- binding.mangaAuthor.hint = "Author: ${manga.originalAuthor}"
+ binding.mangaAuthor.hint = context.getString(R.string.author_hint, manga.originalAuthor)
}
if (manga.originalArtist != null) {
- binding.mangaArtist.hint = "Artist: ${manga.originalArtist}"
+ binding.mangaArtist.hint = context.getString(R.string.artist_hint, manga.originalArtist)
}
if (manga.originalDescription != null) {
binding.mangaDescription.hint =
- "${resources?.getString(R.string.description)}: ${manga.originalDescription?.replace(
- "\n",
- " "
- )?.chop(20)}"
+ context.getString(
+ R.string.description_hint,
+ manga.originalDescription?.replace(
+ "\n",
+ " "
+ )?.chop(20)
+ )
}
}
binding.mangaGenresTags.clearFocus()
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt
index 2999c1ad2..4f51598aa 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt
@@ -110,7 +110,6 @@ import exh.source.isMdBasedSource
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.NonCancellable
-import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.withContext
@@ -737,7 +736,7 @@ class MangaController :
suspend fun mergeWithAnother() {
try {
val mergedManga = withContext(Dispatchers.IO + NonCancellable) {
- presenter.smartSearchMerge(presenter.manga, smartSearchConfig?.origMangaId!!)
+ presenter.smartSearchMerge(applicationContext!!, presenter.manga, smartSearchConfig?.origMangaId!!)
}
router?.popControllerWithTag(SMART_SEARCH_SOURCE_TAG)
@@ -749,12 +748,12 @@ class MangaController :
update = true
).withFadeTransaction()
)
- applicationContext?.toast("Manga merged!")
+ applicationContext?.toast(R.string.manga_merged)
} catch (e: Exception) {
if (e is CancellationException) throw e
- else {
- applicationContext?.toast("Failed to merge manga: ${e.message}")
- }
+
+ val activity = activity ?: return
+ activity.toast(activity.getString(R.string.failed_merge, e.message))
}
}
// EXH <--
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
index 93707548b..98e268979 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
@@ -8,6 +8,7 @@ import android.os.Bundle
import coil.imageLoader
import coil.memory.MemoryCache
import com.jakewharton.rxrelay.PublishRelay
+import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Category
@@ -400,12 +401,13 @@ class MangaPresenter(
}
}
- suspend fun smartSearchMerge(manga: Manga, originalMangaId: Long): Manga {
- val originalManga = db.getManga(originalMangaId).executeAsBlocking() ?: throw IllegalArgumentException("Unknown manga ID: $originalMangaId")
+ suspend fun smartSearchMerge(context: Context, manga: Manga, originalMangaId: Long): Manga {
+ val originalManga = db.getManga(originalMangaId).executeAsBlocking()
+ ?: throw IllegalArgumentException(context.getString(R.string.merge_unknown_manga, originalMangaId))
if (originalManga.source == MERGED_SOURCE_ID) {
val children = db.getMergedMangaReferences(originalMangaId).executeAsBlocking()
if (children.any { it.mangaSourceId == manga.source && it.mangaUrl == manga.url }) {
- throw IllegalArgumentException("This manga is already merged with the current manga!")
+ throw IllegalArgumentException(context.getString(R.string.merged_already))
}
val mangaReferences = mutableListOf(
@@ -456,7 +458,7 @@ class MangaPresenter(
var existingManga = db.getManga(mergedManga.url, mergedManga.source).executeAsBlocking()
while (existingManga != null) {
if (existingManga.favorite) {
- throw IllegalArgumentException("This merged manga is a duplicate!")
+ throw IllegalArgumentException(context.getString(R.string.merge_duplicate))
} else if (!existingManga.favorite) {
withContext(NonCancellable) {
db.deleteManga(existingManga!!).executeAsBlocking()
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt
index 8576de22e..c16a1b3f1 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt
@@ -6,6 +6,7 @@ import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.recyclerview.widget.RecyclerView
+import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.databinding.EditMergedSettingsHeaderBinding
import eu.kanade.tachiyomi.source.SourceManager
import exh.log.xLogD
@@ -40,11 +41,11 @@ class EditMergedSettingsHeaderAdapter(private val controller: EditMergedSettings
val dedupeAdapter: ArrayAdapter = ArrayAdapter(
itemView.context,
android.R.layout.simple_spinner_item,
- listOf(
- "No dedupe",
- /*"Dedupe by priority",*/
- "Show source with most chapters",
- "Show source with highest chapter number"
+ listOfNotNull(
+ itemView.context.getString(R.string.no_dedupe),
+ itemView.context.getString(R.string.dedupe_priority).let { null },
+ itemView.context.getString(R.string.dedupe_most_chapters),
+ itemView.context.getString(R.string.dedupe_highest_chapter)
)
)
dedupeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
index 0866c37a5..a9c28b490 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
@@ -780,7 +780,7 @@ class ReaderActivity : BaseRxActivity()
retried++
}
- toast("Retrying $retried failed pages...")
+ toast(resources.getQuantityString(R.plurals.eh_retry_toast, retried, retried))
}
.launchIn(lifecycleScope)
@@ -796,26 +796,25 @@ class ReaderActivity : BaseRxActivity()
binding.ehBoostPage.clicks()
.onEach {
- viewer?.let { _ ->
- val curPage = exhCurrentpage() ?: run {
- toast("This page cannot be boosted (invalid page)!")
- return@let
- }
+ viewer ?: return@onEach
+ val curPage = exhCurrentpage() ?: run {
+ toast(R.string.eh_boost_page_invalid)
+ return@onEach
+ }
- if (curPage.status == Page.ERROR) {
- toast("Page failed to load, press the retry button instead!")
- } else if (curPage.status == Page.LOAD_PAGE || curPage.status == Page.DOWNLOAD_IMAGE) {
- toast("This page is already downloading!")
- } else if (curPage.status == Page.READY) {
- toast("This page has already been downloaded!")
+ if (curPage.status == Page.ERROR) {
+ toast(R.string.eh_boost_page_errored)
+ } else if (curPage.status == Page.LOAD_PAGE || curPage.status == Page.DOWNLOAD_IMAGE) {
+ toast(R.string.eh_boost_page_downloading)
+ } else if (curPage.status == Page.READY) {
+ toast(R.string.eh_boost_page_downloaded)
+ } else {
+ val loader = (presenter.viewerChaptersRelay.value.currChapter.pageLoader as? HttpPageLoader)
+ if (loader != null) {
+ loader.boostPage(curPage)
+ toast(R.string.eh_boost_boosted)
} else {
- val loader = (presenter.viewerChaptersRelay.value.currChapter.pageLoader as? HttpPageLoader)
- if (loader != null) {
- loader.boostPage(curPage)
- toast("Boosted current page!")
- } else {
- toast("This page cannot be boosted (invalid page loader)!")
- }
+ toast(R.string.eh_boost_invalid_loader)
}
}
}
diff --git a/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt b/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt
index 686c43b56..a29f47f10 100644
--- a/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt
+++ b/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt
@@ -3,6 +3,7 @@ package exh.ui.smartsearch
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
+import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.databinding.EhSmartSearchBinding
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.SourceManager
@@ -47,9 +48,9 @@ class SmartSearchController(bundle: Bundle? = null) : NucleusControllerAutomatically scroll to the next page in the specified interval. Interval is specified in seconds.
Retry all help
Re-add all failed pages to the download queue.
+
+ - Retrying 0 failed pages…
+ - Retrying %1$d failed page…
+ - Retrying %1$d failed pages…
+
Boost page help
Normally the downloader can only download a specific amount of pages at the same time. This means you can be waiting for a page to download but the downloader will not start downloading the page until it has a free download slot. Pressing \'Boost page\' will force the downloader to begin downloading the current page, regardless of whether or not there is an available slot.
+ This page cannot be boosted (invalid page)!
+ Page failed to load, press the retry button instead!
+ This page is already downloading!
+ This page has already been downloaded!
+ Boosted current page!
+ This page cannot be boosted (invalid page loader)!
Crop borders Pager
Crop borders Continuous Vertical
Crop borders Webtoon
@@ -311,6 +322,11 @@
See Recommendations
Merge
Merge With Another
+ Manga merged!
+ Failed to merge manga: %1$s
+ Unknown manga ID: %1$d
+ This manga is already merged with the current manga!
+ This merged manga is a duplicate!
Hiatus
@@ -320,6 +336,10 @@
Reset Tags
Add Tag
+ Title: %1$s
+ Description: %1$s
+ Author: %1$s
+ Artist: %1$s
@@ -329,6 +349,8 @@
Searching source…
+ Couldn\'t find the manga in the source!
+ Error performing automatic search!
Saved Searches
@@ -619,6 +641,10 @@
Info manga:
Toggle dedupe
Refresh to get proper info
+ No dedupe
+ Dedupe by priority
+ Show source with most chapters
+ Show source with highest chapter number
MDList