i18n for Komikku

This commit is contained in:
Cuong M. Tran 2024-06-10 16:27:20 +07:00
parent 1483b71cf0
commit 271e78eaf1
No known key found for this signature in database
GPG key ID: 733AA7624B9315C2
48 changed files with 245 additions and 96 deletions

View file

@ -151,6 +151,9 @@ android {
dependencies {
implementation(projects.i18n)
// KMK -->
implementation(projects.i18nKmk)
// KMK <--
// SY -->
implementation(projects.i18nSy)
// SY <--

View file

@ -57,6 +57,7 @@ import eu.kanade.tachiyomi.util.system.copyToClipboard
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
import tachiyomi.presentation.core.components.material.Scaffold
@ -107,7 +108,7 @@ fun ExtensionDetailsScreen(
)
add(
AppBar.Action(
title = stringResource(MR.strings.action_faq_and_guides),
title = stringResource(KMR.strings.action_faq_and_guides),
icon = Icons.AutoMirrored.Outlined.HelpOutline,
onClick = onClickReadme,
),
@ -190,7 +191,7 @@ private fun ExtensionDetails(
// SY <--
if (extension.isUnofficial) {
item {
WarningBanner(MR.strings.unofficial_extension_message)
WarningBanner(KMR.strings.unofficial_extension_message)
}
}
if (extension.isObsolete) {

View file

@ -57,6 +57,7 @@ import eu.kanade.tachiyomi.util.system.LocaleHelper
import eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.components.FastScrollLazyColumn
import tachiyomi.presentation.core.components.material.PullRefresh
@ -360,7 +361,7 @@ private fun ExtensionItemContent(
val warning = when {
extension is Extension.Untrusted -> MR.strings.ext_untrusted
extension is Extension.Installed && extension.isUnofficial -> MR.strings.ext_unofficial
extension is Extension.Installed && extension.isUnofficial -> KMR.strings.ext_unofficial
extension is Extension.Installed && extension.isObsolete -> MR.strings.ext_obsolete
// SY -->
extension is Extension.Installed && extension.isRedundant -> SYMR.strings.ext_redundant

View file

@ -63,6 +63,7 @@ import kotlinx.collections.immutable.ImmutableList
import tachiyomi.domain.source.model.Pin
import tachiyomi.domain.source.model.Source
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.components.FastScrollLazyColumn
import tachiyomi.presentation.core.components.LabeledCheckbox
@ -109,7 +110,7 @@ fun SourcesScreen(
listState = lazyListState,
searchQuery = state.searchQuery,
onChangeSearchQuery = onChangeSearchQuery,
placeholderText = stringResource(MR.strings.action_source_search),
placeholderText = stringResource(KMR.strings.action_source_search),
)
FastScrollLazyColumn(

View file

@ -18,7 +18,7 @@ import eu.kanade.presentation.library.components.CommonMangaItemDefaults
import eu.kanade.tachiyomi.ui.manga.RelatedManga
import tachiyomi.domain.manga.model.Manga
import tachiyomi.i18n.MR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.components.material.padding
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.presentation.core.util.plus
@ -59,9 +59,9 @@ fun RelatedMangasComfortableGrid(
header(key = "${related.keyword}#header") {
RelatedMangaTitle(
title = if (relatedManga.keyword.isNotBlank()) {
stringResource(SYMR.strings.related_mangas_more)
stringResource(KMR.strings.related_mangas_more)
} else {
stringResource(SYMR.strings.pref_source_related_mangas)
stringResource(KMR.strings.pref_source_related_mangas)
},
subtitle = null,
onClick = {

View file

@ -18,7 +18,7 @@ import eu.kanade.presentation.library.components.CommonMangaItemDefaults
import eu.kanade.tachiyomi.ui.manga.RelatedManga
import tachiyomi.domain.manga.model.Manga
import tachiyomi.i18n.MR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.components.material.padding
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.presentation.core.util.plus
@ -59,9 +59,9 @@ fun RelatedMangasCompactGrid(
header(key = "${related.keyword}#header") {
RelatedMangaTitle(
title = if (relatedManga.keyword.isNotBlank()) {
stringResource(SYMR.strings.related_mangas_more)
stringResource(KMR.strings.related_mangas_more)
} else {
stringResource(SYMR.strings.pref_source_related_mangas)
stringResource(KMR.strings.pref_source_related_mangas)
},
subtitle = null,
onClick = {

View file

@ -15,7 +15,7 @@ import eu.kanade.presentation.browse.RelatedMangasLoadingItem
import eu.kanade.tachiyomi.ui.manga.RelatedManga
import tachiyomi.domain.manga.model.Manga
import tachiyomi.i18n.MR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.components.material.padding
import tachiyomi.presentation.core.i18n.stringResource
@ -54,9 +54,9 @@ fun RelatedMangasList(
stickyHeader(key = "${related.keyword}#header") {
RelatedMangaTitle(
title = if (relatedManga.keyword.isNotBlank()) {
stringResource(SYMR.strings.related_mangas_more)
stringResource(KMR.strings.related_mangas_more)
} else {
stringResource(SYMR.strings.pref_source_related_mangas)
stringResource(KMR.strings.pref_source_related_mangas)
},
subtitle = null,
onClick = {

View file

@ -33,6 +33,7 @@ import eu.kanade.presentation.components.TabbedDialogPaddings
import eu.kanade.presentation.more.settings.LocalPreferenceMinHeight
import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.i18n.stringResource
@Composable
@ -162,7 +163,7 @@ fun DuplicateMangasDialog(
},
Modifier.align(Alignment.CenterHorizontally),
) {
Text(text = stringResource(MR.strings.action_allow_duplicate_manga))
Text(text = stringResource(KMR.strings.action_allow_duplicate_manga))
}
TextButton(
@ -172,7 +173,7 @@ fun DuplicateMangasDialog(
},
Modifier.align(Alignment.CenterHorizontally),
) {
Text(text = stringResource(MR.strings.action_allow_all_duplicate_manga))
Text(text = stringResource(KMR.strings.action_allow_all_duplicate_manga))
}
}
@ -184,7 +185,7 @@ fun DuplicateMangasDialog(
},
Modifier.align(Alignment.CenterHorizontally),
) {
Text(text = stringResource(MR.strings.action_skip_duplicate_manga))
Text(text = stringResource(KMR.strings.action_skip_duplicate_manga))
}
TextButton(
@ -194,7 +195,7 @@ fun DuplicateMangasDialog(
},
Modifier.align(Alignment.CenterHorizontally),
) {
Text(text = stringResource(MR.strings.action_skip_all_duplicate_manga))
Text(text = stringResource(KMR.strings.action_skip_all_duplicate_manga))
}
}

View file

@ -100,7 +100,7 @@ import tachiyomi.domain.library.service.LibraryPreferences
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.source.model.StubSource
import tachiyomi.i18n.MR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.components.TwoPanelBox
import tachiyomi.presentation.core.components.VerticalFastScroller
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
@ -584,7 +584,7 @@ private fun MangaScreenSmallImpl(
) {
Column {
RelatedMangaTitle(
title = stringResource(SYMR.strings.pref_source_related_mangas),
title = stringResource(KMR.strings.pref_source_related_mangas),
subtitle = null,
onClick = onRelatedMangasScreenClick,
onLongClick = null,
@ -953,7 +953,7 @@ private fun MangaScreenLargeImpl(
) {
Column {
RelatedMangaTitle(
title = stringResource(SYMR.strings.pref_source_related_mangas),
title = stringResource(KMR.strings.pref_source_related_mangas),
subtitle = null,
onClick = onRelatedMangasScreenClick,
onLongClick = null,

View file

@ -21,6 +21,7 @@ import com.halilibo.richtext.ui.material3.RichText
import com.halilibo.richtext.ui.string.RichTextStringStyle
import eu.kanade.presentation.theme.TachiyomiPreviewTheme
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.components.material.padding
import tachiyomi.presentation.core.i18n.stringResource
@ -36,9 +37,9 @@ fun ComingUpdatesScreen(
) {
InfoScreen(
icon = Icons.Outlined.NewReleases,
headingText = stringResource(MR.strings.update_check_notification_preview_available),
headingText = stringResource(KMR.strings.update_check_notification_preview_available),
subtitleText = stringResource(SYMR.strings.latest_, versionName),
acceptText = stringResource(MR.strings.update_check_try_now),
acceptText = stringResource(KMR.strings.update_check_try_now),
onAcceptClick = onAcceptUpdate,
rejectText = stringResource(MR.strings.action_not_now),
onRejectClick = onRejectUpdate,

View file

@ -21,6 +21,7 @@ import com.halilibo.richtext.ui.material3.RichText
import com.halilibo.richtext.ui.string.RichTextStringStyle
import eu.kanade.presentation.theme.TachiyomiPreviewTheme
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.components.material.padding
import tachiyomi.presentation.core.i18n.stringResource
@ -38,7 +39,7 @@ fun WhatsNewScreen(
icon = Icons.Outlined.NewReleases,
headingText = stringResource(MR.strings.whats_new),
subtitleText = stringResource(SYMR.strings.latest_, versionName) +
" - " + stringResource(SYMR.strings.current_, currentVersion),
" - " + stringResource(KMR.strings.current_, currentVersion),
acceptText = stringResource(MR.strings.action_ok),
onAcceptClick = onAcceptUpdate,
) {

View file

@ -3,7 +3,6 @@ package eu.kanade.presentation.more.settings.screen
import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Intent
import android.os.Build
import android.provider.Settings
import android.webkit.WebStorage
import android.webkit.WebView
@ -91,6 +90,7 @@ import tachiyomi.domain.manga.interactor.GetAllManga
import tachiyomi.domain.manga.interactor.ResetViewerFlags
import tachiyomi.domain.source.service.SourceManager
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.components.LabeledCheckbox
import tachiyomi.presentation.core.i18n.stringResource
@ -221,11 +221,11 @@ object SettingsAdvancedScreen : SearchableSettings {
),
// KMK -->
Preference.PreferenceItem.TextPreference(
title = stringResource(MR.strings.pref_clean_invalid_downloads),
subtitle = stringResource(MR.strings.pref_clean_invalid_downloads_summary),
title = stringResource(KMR.strings.pref_clean_invalid_downloads),
subtitle = stringResource(KMR.strings.pref_clean_invalid_downloads_summary),
onClick = {
Injekt.get<DownloadCache>().invalidateCache()
context.toast(MR.strings.invalid_downloads_cleaned)
context.toast(KMR.strings.invalid_downloads_cleaned)
},
),
// KMK <--
@ -451,7 +451,7 @@ object SettingsAdvancedScreen : SearchableSettings {
}
},
),
Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.pref_private_installer_warning)),
Preference.PreferenceItem.InfoPreference(stringResource(KMR.strings.pref_private_installer_warning)),
Preference.PreferenceItem.TextPreference(
title = stringResource(MR.strings.ext_revoke_trust),
onClick = {

View file

@ -25,6 +25,7 @@ import eu.kanade.tachiyomi.util.system.toast
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableMap
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.i18n.pluralStringResource
import tachiyomi.presentation.core.i18n.stringResource
@ -113,15 +114,15 @@ object SettingsAppearanceScreen : SearchableSettings {
Injekt.get<UiPreferences>().detailsPageThemeCoverBased().asState(scope)
}
return Preference.PreferenceGroup(
title = stringResource(MR.strings.pref_details_page_theme),
title = stringResource(KMR.strings.pref_details_page_theme),
preferenceItems = persistentListOf(
Preference.PreferenceItem.SwitchPreference(
pref = uiPreferences.detailsPageThemeCoverBased(),
title = stringResource(MR.strings.pref_details_page_theme_cover_based),
title = stringResource(KMR.strings.pref_details_page_theme_cover_based),
),
Preference.PreferenceItem.ListPreference(
pref = uiPreferences.themeCoverBasedStyle(),
title = stringResource(MR.strings.pref_theme_cover_based_style),
title = stringResource(KMR.strings.pref_theme_cover_based_style),
enabled = detailsPageThemeCoverBased,
entries = PaletteStyle.entries
.associateWith { it.name }
@ -129,7 +130,7 @@ object SettingsAppearanceScreen : SearchableSettings {
),
Preference.PreferenceItem.SwitchPreference(
pref = uiPreferences.themeCoverBasedAnimate(),
title = stringResource(MR.strings.pref_theme_cover_based_animate),
title = stringResource(KMR.strings.pref_theme_cover_based_animate),
enabled = detailsPageThemeCoverBased,
),
),

View file

@ -22,6 +22,7 @@ import mihon.domain.extensionrepo.interactor.GetExtensionRepoCount
import tachiyomi.core.common.i18n.stringResource
import tachiyomi.domain.UnsortedPreferences
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.i18n.pluralStringResource
import tachiyomi.presentation.core.i18n.stringResource
@ -59,8 +60,8 @@ object SettingsBrowseScreen : SearchableSettings {
// KMK -->
Preference.PreferenceItem.SwitchPreference(
pref = sourcePreferences.relatedMangas(),
title = stringResource(SYMR.strings.pref_source_related_mangas),
subtitle = stringResource(SYMR.strings.pref_source_related_mangas_summary),
title = stringResource(KMR.strings.pref_source_related_mangas),
subtitle = stringResource(KMR.strings.pref_source_related_mangas_summary),
),
// KMK <--
kotlin.run {

View file

@ -20,6 +20,7 @@ import tachiyomi.domain.category.interactor.GetCategories
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.download.service.DownloadPreferences
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.i18n.pluralStringResource
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.presentation.core.util.collectAsState
@ -200,21 +201,21 @@ object SettingsDownloadScreen : SearchableSettings {
downloadPreferences: DownloadPreferences,
): Preference.PreferenceGroup {
return Preference.PreferenceGroup(
title = stringResource(MR.strings.download_cache_renew_interval),
title = stringResource(KMR.strings.download_cache_renew_interval),
preferenceItems = persistentListOf(
Preference.PreferenceItem.ListPreference(
pref = downloadPreferences.downloadCacheRenewInterval(),
title = stringResource(MR.strings.download_cache_renew_interval),
title = stringResource(KMR.strings.download_cache_renew_interval),
entries = persistentMapOf(
-1 to stringResource(MR.strings.download_cache_renew_interval_manual),
1 to stringResource(MR.strings.download_cache_renew_interval_1hour),
2 to stringResource(MR.strings.download_cache_renew_interval_2hour),
6 to stringResource(MR.strings.download_cache_renew_interval_6hour),
12 to stringResource(MR.strings.download_cache_renew_interval_12hour),
24 to stringResource(MR.strings.download_cache_renew_interval_24hour),
-1 to stringResource(KMR.strings.download_cache_renew_interval_manual),
1 to stringResource(KMR.strings.download_cache_renew_interval_1hour),
2 to stringResource(KMR.strings.download_cache_renew_interval_2hour),
6 to stringResource(KMR.strings.download_cache_renew_interval_6hour),
12 to stringResource(KMR.strings.download_cache_renew_interval_12hour),
24 to stringResource(KMR.strings.download_cache_renew_interval_24hour),
),
),
Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.download_cache_renew_interval_info)),
Preference.PreferenceItem.InfoPreference(stringResource(KMR.strings.download_cache_renew_interval_info)),
),
)
}

View file

@ -57,6 +57,7 @@ import tachiyomi.core.common.util.lang.launchIO
import tachiyomi.core.common.util.lang.withUIContext
import tachiyomi.domain.source.service.SourceManager
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.components.material.padding
import tachiyomi.presentation.core.i18n.stringResource
import uy.kohesive.injekt.Injekt
@ -127,11 +128,11 @@ object SettingsTrackingScreen : SearchableSettings {
),
Preference.PreferenceItem.SwitchPreference(
pref = trackPreferences.updateTrackMarkedRead(),
title = stringResource(MR.strings.pref_update_tracking_marked_read),
title = stringResource(KMR.strings.pref_update_tracking_marked_read),
),
Preference.PreferenceItem.SwitchPreference(
pref = trackPreferences.autoSyncReadChapters(),
title = stringResource(MR.strings.pref_auto_sync_read_chapters),
title = stringResource(KMR.strings.pref_auto_sync_read_chapters),
),
Preference.PreferenceGroup(
title = stringResource(MR.strings.services),

View file

@ -44,6 +44,7 @@ import tachiyomi.core.common.util.lang.withUIContext
import tachiyomi.core.common.util.system.logcat
import tachiyomi.domain.release.interactor.GetApplicationRelease
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.components.LinkIcon
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
import tachiyomi.presentation.core.components.material.Scaffold
@ -185,7 +186,7 @@ object AboutScreen : Screen() {
if (isReleaseBuildType || isDevFlavor) {
item {
TextPreferenceWidget(
title = stringResource(MR.strings.whats_coming),
title = stringResource(KMR.strings.whats_coming),
widget = {
AnimatedVisibility(visible = isCheckingWhatsComing) {
CircularProgressIndicator(

View file

@ -34,6 +34,7 @@ import nl.adaptivity.xmlutil.serialization.XmlSerialName
import nl.adaptivity.xmlutil.serialization.XmlValue
import tachiyomi.core.common.util.lang.withIOContext
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.components.material.padding
import tachiyomi.presentation.core.i18n.stringResource
@ -51,7 +52,7 @@ fun WhatsNewDialog(onDismissRequest: () -> Unit) {
title = { Text(text = stringResource(MR.strings.updated_version, BuildConfig.VERSION_NAME)) },
dismissButton = {
TextButton(onClick = { context.openInBrowser(RELEASE_URL) }) {
Text(text = stringResource(SYMR.strings.changelogs))
Text(text = stringResource(KMR.strings.changelogs))
}
},
text = {

View file

@ -50,7 +50,7 @@ import tachiyomi.domain.manga.interactor.GetDuplicateLibraryManga
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.model.toMangaUpdate
import tachiyomi.domain.source.service.SourceManager
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.i18n.stringResource
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@ -493,7 +493,7 @@ fun AllowDuplicateDialog(bulkFavoriteScreenModel: BulkFavoriteScreenModel) {
@Composable
fun bulkSelectionButton(toggleSelectionMode: () -> Unit) =
AppBar.Action(
title = stringResource(MR.strings.action_bulk_select),
title = stringResource(KMR.strings.action_bulk_select),
icon = Icons.Outlined.Checklist,
onClick = toggleSelectionMode,
)

View file

@ -18,6 +18,7 @@ import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen
import eu.kanade.tachiyomi.ui.webview.WebViewScreen
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.presentation.core.i18n.stringResource
@Composable
@ -34,7 +35,7 @@ fun extensionsTab(
actions = persistentListOf(
// KMK -->
AppBar.Action(
title = stringResource(MR.strings.action_toggle_nsfw_only),
title = stringResource(KMR.strings.action_toggle_nsfw_only),
icon = Icons.Outlined._18UpRating,
iconTint = if (state.nsfwOnly) MaterialTheme.colorScheme.error else LocalContentColor.current,
onClick = { extensionsScreenModel.toggleNsfwOnly() },

View file

@ -33,6 +33,7 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import tachiyomi.domain.source.interactor.GetRemoteManga
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.i18n.stringResource
@ -196,7 +197,7 @@ fun feedTab(
// KMK <--
val internalErrString = stringResource(MR.strings.internal_error)
val tooManyFeedsString = stringResource(SYMR.strings.too_many_in_feed)
val tooManyFeedsString = stringResource(KMR.strings.too_many_in_feed)
LaunchedEffect(Unit) {
screenModel.events.collectLatest { event ->
when (event) {

View file

@ -31,6 +31,7 @@ import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.i18n.stringResource
@ -57,7 +58,7 @@ fun Screen.sourcesTab(
),
// KMK -->
AppBar.Action(
title = stringResource(MR.strings.action_toggle_nsfw_only),
title = stringResource(KMR.strings.action_toggle_nsfw_only),
icon = Icons.Outlined._18UpRating,
iconTint = if (state.nsfwOnly) MaterialTheme.colorScheme.error else LocalContentColor.current,
onClick = { screenModel.toggleNsfwOnly() },
@ -74,7 +75,7 @@ fun Screen.sourcesTab(
persistentListOf(
// KMK -->
AppBar.Action(
title = stringResource(MR.strings.action_toggle_nsfw_only),
title = stringResource(KMR.strings.action_toggle_nsfw_only),
icon = Icons.Outlined._18UpRating,
iconTint = if (state.nsfwOnly) MaterialTheme.colorScheme.error else LocalContentColor.current,
onClick = { screenModel.toggleNsfwOnly() },

View file

@ -50,6 +50,7 @@ import tachiyomi.domain.source.model.EXHSavedSearch
import tachiyomi.domain.source.model.FeedSavedSearch
import tachiyomi.domain.source.model.SavedSearch
import tachiyomi.domain.source.service.SourceManager
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@ -272,7 +273,7 @@ open class SourceFeedScreenModel(
screenModelScope.launchIO {
if (hasTooManyFeeds()) {
withUIContext {
onToast(SYMR.strings.too_many_in_feed)
onToast(KMR.strings.too_many_in_feed)
}
return@launchIO
}

View file

@ -19,6 +19,9 @@ android {
dependencies {
implementation(projects.i18n)
// KMK -->
implementation(projects.i18nKmk)
// KMK <--
// SY -->
implementation(projects.i18nSy)
// SY <--

48
i18n-kmk/build.gradle.kts Normal file
View file

@ -0,0 +1,48 @@
plugins {
id("mihon.library")
id("dev.icerock.mobile.multiplatform-resources")
kotlin("multiplatform")
id("com.github.ben-manes.versions")
}
kotlin {
androidTarget()
applyDefaultHierarchyTemplate()
sourceSets {
val commonMain by getting {
dependencies {
api(libs.moko.core)
}
}
androidMain {
dependsOn(commonMain) // https://github.com/icerockdev/moko-resources/issues/562
}
}
}
android {
namespace = "tachiyomi.i18n.kmk"
sourceSets {
named("main") {
res.srcDir("src/commonMain/resources")
}
}
lint {
disable.addAll(listOf("MissingTranslation", "ExtraTranslation"))
}
}
multiplatformResources {
multiplatformResourcesClassName = "KMR"
multiplatformResourcesPackage = "tachiyomi.i18n.kmk"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions.freeCompilerArgs += listOf(
"-Xexpect-actual-classes",
)
}

View file

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

View file

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Actions -->
<string name="action_source_search">Search for source</string>
<string name="action_toggle_nsfw_only">Toggle NSFW only</string>
<string name="action_bulk_select">Bulk selection mode</string>
<string name="action_faq_and_guides">FAQ and Guides</string>
<!-- Preferences -->
<!-- General section -->
<string name="pref_details_page_theme">Details page</string>
<string name="pref_details_page_theme_cover_based">Details page theme based on cover</string>
<string name="pref_theme_cover_based_style">Theme style</string>
<string name="pref_theme_cover_based_animate">Theme animate</string>
<!-- Extension section -->
<string name="ext_unofficial">Unofficial</string>
<string name="unofficial_extension_message">This extension is not from the official repo.</string>
<!-- Extension repos -->
<!-- Downloads section -->
<string name="download_cache_renew_interval">Download cache renew interval</string>
<string name="download_cache_renew_interval_manual">Manual</string>
<string name="download_cache_renew_interval_1hour">1 hour</string>
<string name="download_cache_renew_interval_2hour">2 hours</string>
<string name="download_cache_renew_interval_6hour">6 hours</string>
<string name="download_cache_renew_interval_12hour">12 hours</string>
<string name="download_cache_renew_interval_24hour">1 day</string>
<string name="download_cache_renew_interval_info">If set to "manual", either refresh each manga or using the "Invalidate downloads index" action in "Advanced"</string>
<!-- Tracking section -->
<string name="pref_update_tracking_marked_read">Update progress when marked as read</string>
<string name="pref_auto_sync_read_chapters">Auto sync read chapters from Trackers</string>
<!-- Sync section -->
<!-- Advanced section -->
<string name="pref_clean_invalid_downloads">Clean invalid downloads</string>
<string name="pref_clean_invalid_downloads_summary">Find and remove all downloads, files, folders which are not saved in your library</string>
<string name="invalid_downloads_cleaned">Invalid downloads cleaned</string>
<string name="pref_private_installer_warning">Avoid using Private Installer because it\'s not stable yet, will lead to really slow start/resume App.</string>
<!-- About section -->
<string name="whats_coming">What\'s coming (soon)</string>
<!-- Manga info -->
<string name="action_allow_duplicate_manga">Allow it</string>
<string name="action_skip_duplicate_manga">Skip it</string>
<string name="action_allow_all_duplicate_manga">Allow all</string>
<string name="action_skip_all_duplicate_manga">Skip all</string>
<!--UpdateCheck-->
<string name="update_check_try_now">Try now</string>
<!--UpdateCheck Notifications-->
<string name="update_check_notification_preview_available">Coming (soon) updates!</string>
<!-- About -->
<string name="changelogs">Change Logs</string>
<!-- Browse settings -->
<string name="pref_source_related_mangas">Related titles</string>
<string name="pref_source_related_mangas_summary">Show related titles while viewing entry</string>
<string name="related_mangas_more">More like these...</string>
<!-- Feed Tab -->
<string name="too_many_in_feed">Too many sources in your feed, cannot add more than limited (20)</string>
<!-- Migration -->
<string name="current_">Current: %1$s</string>
</resources>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -28,7 +28,6 @@
<!-- About -->
<string name="changelog_version">Version %1$s</string>
<string name="changelogs">Change Logs</string>
<!-- EH Settings -->
<string name="ehentai_prefs_account_settings">E-Hentai Website Account Settings</string>
@ -202,9 +201,6 @@
<string name="pref_source_navigation_summery">Replace latest button with a custom browse view that includes both latest and browse</string>
<string name="pref_local_source_hidden_folders">Local source hidden folders</string>
<string name="pref_local_source_hidden_folders_summery">Allow local source to read hidden folders</string>
<string name="pref_source_related_mangas">Related titles</string>
<string name="pref_source_related_mangas_summary">Show related titles while viewing entry</string>
<string name="related_mangas_more">More like these...</string>
<!-- Backup settings -->
<string name="custom_entry_info">Custom entry info</string>
@ -434,7 +430,6 @@
<!-- Feed Tab -->
<string name="feed">Feed</string>
<string name="feed_delete">Delete feed item?</string>
<string name="too_many_in_feed">Too many sources in your feed, cannot add more than limited</string>
<string name="feed_tab_empty">You don\'t have any sources in your feed, navigate to the top right to add one</string>
<string name="feed_add">Add %1$s to feed?</string>
@ -466,7 +461,6 @@
<string name="skip_this_step_next_time">Skip this step next time</string>
<string name="hide_not_found_entries">Hide not found entries</string>
<string name="search_parameter">Search parameter (e.g. language:english)</string>
<string name="current_">Current: %1$s</string>
<string name="latest_">Latest: %1$s</string>
<string name="migrating_to">migrating to</string>
<string name="match_pinned_sources">Match pinned sources</string>

View file

@ -418,7 +418,6 @@
<!-- Feed Tab -->
<string name="feed">Лента</string>
<string name="feed_delete">Удалить элемент из ленты?</string>
<string name="too_many_in_feed">Слишком большое количество источников в вашей ленте. Количество не должно превышать 10</string>
<string name="feed_tab_empty">Ваша лента не имеет отслеживаемых источников. Чтобы добавить источник нажмите «+»</string>
<string name="feed_add">Добавить %1$s в ленту?</string>

View file

@ -371,7 +371,6 @@
<!-- Feed Tab -->
<string name="feed">订阅</string>
<string name="feed_delete">删除订阅项?</string>
<string name="too_many_in_feed">你订阅的图源太多了,不能大于 10</string>
<string name="feed_tab_empty">没有订阅任何图源,请使用右上角按钮添加一个</string>
<string name="feed_add">添加 %1$s 到订阅?</string>

View file

@ -371,7 +371,6 @@
<!-- Feed Tab -->
<string name="feed">訂閱</string>
<string name="feed_delete">刪除訂閱項?</string>
<string name="too_many_in_feed">你訂閱的來源太多了,不能大於 10</string>
<string name="feed_tab_empty">訂閱中沒有任何來源,導覽到右上角新增一個</string>
<string name="feed_add">新增 %1$s 到訂閱?</string>

View file

@ -73,11 +73,8 @@
<string name="action_search_hint">Search…</string>
<string name="action_search_settings">Search settings</string>
<string name="action_global_search">Global search</string>
<string name="action_source_search">Search for source</string>
<string name="action_toggle_nsfw_only">Toggle NSFW only</string>
<string name="action_select_all">Select all</string>
<string name="action_select_inverse">Select inverse</string>
<string name="action_bulk_select">Bulk selection mode</string>
<string name="action_mark_as_read">Mark as read</string>
<string name="action_mark_as_unread">Mark as unread</string>
<string name="action_mark_previous_as_read">Mark previous as read</string>
@ -163,7 +160,6 @@
<string name="action_webview_forward">Forward</string>
<string name="action_webview_refresh">Refresh</string>
<string name="action_start_downloading_now">Start downloading now</string>
<string name="action_faq_and_guides">FAQ and Guides</string>
<string name="action_not_now">Not now</string>
<string name="action_add_anyway">Add anyway</string>
<string name="action_migrate_duplicate">Migrate existing entry</string>
@ -240,10 +236,6 @@
<!-- "Today" instead of "2023-12-31" -->
<string name="pref_relative_format_summary">\"%1$s\" instead of \"%2$s\"</string>
<string name="pref_date_format">Date format</string>
<string name="pref_details_page_theme">Details page</string>
<string name="pref_details_page_theme_cover_based">Details page theme based on cover</string>
<string name="pref_theme_cover_based_style">Theme style</string>
<string name="pref_theme_cover_based_animate">Theme animate</string>
<string name="pref_manage_notifications">Manage notifications</string>
<string name="pref_app_language">App language</string>
@ -322,14 +314,12 @@
<string name="ext_installing">Installing</string>
<string name="ext_installed">Installed</string>
<string name="ext_trust">Trust</string>
<string name="ext_unofficial">Unofficial</string>
<string name="ext_untrusted">Untrusted</string>
<string name="ext_uninstall">Uninstall</string>
<string name="ext_app_info">App info</string>
<string name="untrusted_extension">Untrusted extension</string>
<string name="untrusted_extension_message">Malicious extensions can read any stored login credentials or execute arbitrary code.\n\nBy trusting this extension, you accept these risks.</string>
<string name="obsolete_extension_message">This extension is no longer available. It may not function properly and can cause issues with the app. Uninstalling it is recommended.</string>
<string name="unofficial_extension_message">This extension is not from the official repo.</string>
<string name="extension_api_error">Failed to fetch available extensions</string>
<string name="ext_info_version">Version</string>
<string name="ext_info_language">Language</string>
@ -493,20 +483,10 @@
<string name="save_chapter_as_cbz">Save as CBZ archive</string>
<string name="split_tall_images">Split tall images</string>
<string name="split_tall_images_summary">Improves reader performance</string>
<string name="download_cache_renew_interval">Download cache renew interval</string>
<string name="download_cache_renew_interval_manual">Manual</string>
<string name="download_cache_renew_interval_1hour">1 hour</string>
<string name="download_cache_renew_interval_2hour">2 hours</string>
<string name="download_cache_renew_interval_6hour">6 hours</string>
<string name="download_cache_renew_interval_12hour">12 hours</string>
<string name="download_cache_renew_interval_24hour">1 day</string>
<string name="download_cache_renew_interval_info">If set to "manual", either refresh each manga or using the "Invalidate downloads index" action in "Advanced"</string>
<!-- Tracking section -->
<string name="tracking_guide">Tracking guide</string>
<string name="pref_auto_update_manga_sync">Update progress after reading</string>
<string name="pref_update_tracking_marked_read">Update progress when marked as read</string>
<string name="pref_auto_sync_read_chapters">Auto sync read chapters from Trackers</string>
<string name="services">Trackers</string>
<string name="tracking_info">One-way sync to update the chapter progress in external tracker services. Set up tracking for individual entries from their tracking button.</string>
<string name="enhanced_services">Enhanced trackers</string>
@ -576,12 +556,6 @@
<string name="pref_reset_user_agent_string">Reset default user agent string</string>
<string name="requires_app_restart">Requires app restart to take effect</string>
<string name="cookies_cleared">Cookies cleared</string>
<!-- KMK >> -->
<string name="pref_clean_invalid_downloads">Clean invalid downloads</string>
<string name="pref_clean_invalid_downloads_summary">Find and remove all downloads, files, folders which are not saved in your library</string>
<string name="invalid_downloads_cleaned">Invalid downloads cleaned</string>
<string name="pref_private_installer_warning">Avoid using Private Installer because it\'s not stable yet, will lead to really slow start/resume App.</string>
<!-- KMK << -->
<string name="pref_invalidate_download_cache">Invalidate downloads index</string>
<string name="pref_invalidate_download_cache_summary">Force app to recheck downloaded chapters</string>
<string name="download_cache_invalidated">Downloads index invalidated</string>
@ -615,7 +589,6 @@
<string name="website">Website</string>
<string name="version">Version</string>
<string name="whats_new">What\'s new</string>
<string name="whats_coming">What\'s coming (soon)</string>
<string name="help_translate">Help translate</string>
<string name="licenses">Open source licenses</string>
<string name="privacy_policy">Privacy policy</string>
@ -695,10 +668,6 @@
<string name="remove_from_library">Remove from library</string>
<string name="unknown_title">Unknown title</string>
<string name="confirm_add_duplicate_manga">You have an entry in your library with the same name.\n\nDo you still wish to continue?</string>
<string name="action_allow_duplicate_manga">Allow it</string>
<string name="action_skip_duplicate_manga">Skip it</string>
<string name="action_allow_all_duplicate_manga">Allow all</string>
<string name="action_skip_all_duplicate_manga">Skip all</string>
<string name="manga_added_library">Added to library</string>
<string name="manga_removed_library">Removed from library</string>
<string name="manga_info_expand">More</string>
@ -905,7 +874,6 @@
<!--UpdateCheck-->
<string name="update_check_confirm">Download</string>
<string name="update_check_try_now">Try now</string>
<string name="update_check_open">Open on GitHub</string>
<!-- reserved for future use -->
<string name="update_check_eol">This Android version is no longer supported</string>
@ -916,7 +884,6 @@
<string name="update_check_notification_download_complete">Tap to install update</string>
<string name="update_check_notification_download_error">Download error</string>
<string name="update_check_notification_update_available">New version available!</string>
<string name="update_check_notification_preview_available">Coming (soon) updates!</string>
<string name="update_check_fdroid_migration_info">A new version is available from the official releases. Tap to learn how to migrate from unofficial F-Droid releases.</string>
<!-- Information Text -->

View file

@ -16,6 +16,9 @@ android {
dependencies {
api(projects.core.common)
api(projects.i18n)
// KMK -->
api(projects.i18nKmk)
// KMK <--
// SY -->
api(projects.i18nSy)
// SY <--

View file

@ -47,6 +47,9 @@ include(":core:common")
include(":data")
include(":domain")
include(":i18n")
// KMK -->
include(":i18n-kmk")
// KMK <--
// SY -->
include(":i18n-sy")
// SY <--

View file

@ -14,6 +14,9 @@ kotlin {
api(libs.injekt.core)
api(libs.rxjava)
api(libs.jsoup)
// KMK -->
api(projects.i18nKmk)
// KMK <--
// SY -->
api(projects.i18n)
api(projects.i18nSy)

View file

@ -10,6 +10,9 @@ kotlin {
dependencies {
implementation(projects.sourceApi)
api(projects.i18n)
// KMK -->
api(projects.i18nKmk)
// KMK <--
// SY -->
api(projects.i18nSy)
// SY <--