From 82098460ff1a5d80a7b13440e0e22fa4835013e7 Mon Sep 17 00:00:00 2001 From: arkon Date: Sat, 18 Nov 2023 19:41:33 -0500 Subject: [PATCH] Replace remaining Android-specific strings Also renaming the helper composables so it's a bit easier to find/replace everything in forks. (cherry picked from commit 0d1bced1226878336f8156671ae0c224c02f2604) # Conflicts: # app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt # app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt # app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt # app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt # app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt # app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt # app/src/main/java/eu/kanade/presentation/manga/components/MangaBottomActionMenu.kt # app/src/main/java/eu/kanade/presentation/manga/components/MangaDialogs.kt # app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearDatabaseScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/data/CreateBackupScreen.kt # app/src/main/java/eu/kanade/presentation/reader/ReaderPageActionsDialog.kt # app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt # app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt # app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt # app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt # app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt # app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateDialog.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrateSourceTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceFilterDialog.kt # app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt # app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt --- .../presentation/browse/BrowseSourceScreen.kt | 8 +-- .../browse/ExtensionFilterScreen.kt | 4 +- .../browse/MigrateSourceScreen.kt | 14 ++-- .../browse/SourcesFilterScreen.kt | 4 +- .../browse/components/BrowseSourceDialogs.kt | 10 +-- .../browse/components/GlobalSearchCardRow.kt | 4 +- .../components/GlobalSearchResultItems.kt | 5 +- .../browse/components/GlobalSearchToolbar.kt | 8 +-- .../category/CategoryExtensions.kt | 8 +-- .../presentation/category/CategoryScreen.kt | 6 +- .../CategoryFloatingActionButton.kt | 4 +- .../category/components/CategoryListItem.kt | 7 +- .../kanade/presentation/components/AppBar.kt | 21 +++--- .../kanade/presentation/components/Banners.kt | 10 +-- .../components/DownloadDropdownMenu.kt | 14 ++-- .../presentation/components/DropdownMenu.kt | 6 +- .../presentation/components/TabbedDialog.kt | 4 +- .../presentation/components/TabbedScreen.kt | 6 +- .../kanade/presentation/crash/CrashScreen.kt | 10 +-- .../presentation/history/HistoryScreen.kt | 6 +- .../history/components/HistoryDialogs.kt | 20 +++--- .../history/components/HistoryItem.kt | 6 +- .../library/DeleteLibraryMangaDialog.kt | 10 +-- .../library/components/CommonMangaItem.kt | 4 +- .../library/components/GlobalSearchItem.kt | 4 +- .../library/components/LibraryToolbar.kt | 14 ++-- .../manga/ChapterSettingsDialog.kt | 34 +++++----- .../manga/DuplicateMangaDialog.kt | 12 ++-- .../kanade/presentation/manga/MangaScreen.kt | 14 ++-- .../components/ChapterDownloadIndicator.kt | 12 ++-- .../manga/components/ChapterHeader.kt | 10 +-- .../manga/components/MangaChapterListItem.kt | 6 +- .../manga/components/MangaCoverDialog.kt | 14 ++-- .../manga/components/MangaInfoHeader.kt | 46 ++++++------- .../manga/components/MangaToolbar.kt | 18 ++--- .../components/MissingChapterCountListItem.kt | 4 +- .../manga/components/ScanlatorFilterDialog.kt | 16 ++--- .../presentation/more/NewUpdateScreen.kt | 11 ++- .../presentation/more/settings/Preference.kt | 4 +- .../more/settings/PreferenceScaffold.kt | 4 +- .../more/settings/screen/Commons.kt | 16 ++--- .../screen/SettingsAppearanceScreen.kt | 42 ++++++------ .../settings/screen/SettingsDataScreen.kt | 68 ++++++++++--------- .../settings/screen/SettingsDownloadScreen.kt | 62 ++++++++--------- .../settings/screen/SettingsSearchScreen.kt | 8 +-- .../settings/screen/SettingsTrackingScreen.kt | 32 ++++----- .../about/OpenSourceLibraryLicenseScreen.kt | 4 +- .../screen/about/OpenSourceLicensesScreen.kt | 4 +- .../screen/debug/BackupSchemaScreen.kt | 4 +- .../settings/screen/debug/WorkerInfoScreen.kt | 4 +- .../widget/AppThemePreferenceWidget.kt | 6 +- .../widget/EditTextPreferenceWidget.kt | 6 +- .../more/settings/widget/InfoWidget.kt | 4 +- .../settings/widget/ListPreferenceWidget.kt | 4 +- .../widget/MultiSelectListPreferenceWidget.kt | 6 +- .../widget/TrackingPreferenceWidget.kt | 4 +- .../settings/widget/TriStateListDialog.kt | 8 +-- .../more/stats/StatsScreenContent.kt | 30 ++++---- .../more/stats/components/StatsSection.kt | 4 +- .../presentation/reader/ChapterTransition.kt | 20 +++--- .../reader/OrientationSelectDialog.kt | 4 +- .../reader/ReadingModeSelectDialog.kt | 4 +- .../reader/components/ModeSelectionDialog.kt | 6 +- .../reader/settings/ColorFilterPage.kt | 22 +++--- .../reader/settings/ReaderSettingsDialog.kt | 8 +-- .../reader/settings/ReadingModePage.kt | 38 +++++------ .../presentation/track/TrackInfoDialogHome.kt | 18 ++--- .../track/TrackInfoDialogSelector.kt | 20 +++--- .../presentation/track/TrackerSearch.kt | 14 ++-- .../presentation/updates/UpdatesDialog.kt | 8 +-- .../presentation/updates/UpdatesScreen.kt | 10 +-- .../presentation/updates/UpdatesUiItem.kt | 10 +-- .../presentation/util/ExceptionFormatter.kt | 14 ++-- .../eu/kanade/presentation/util/TimeUtils.kt | 22 +++--- .../webview/WebViewScreenContent.kt | 14 ++-- app/src/main/java/eu/kanade/tachiyomi/App.kt | 6 +- .../tachiyomi/data/backup/BackupCreator.kt | 8 +-- .../data/backup/BackupFileValidator.kt | 4 +- .../tachiyomi/data/backup/BackupNotifier.kt | 26 +++---- .../tachiyomi/data/backup/BackupRestoreJob.kt | 4 +- .../tachiyomi/data/backup/BackupRestorer.kt | 20 +++--- .../data/download/DownloadNotifier.kt | 20 +++--- .../data/download/DownloadProvider.kt | 4 +- .../data/download/DownloadService.kt | 6 +- .../data/notification/Notifications.kt | 34 +++++----- .../kanade/tachiyomi/data/saver/ImageSaver.kt | 10 +-- .../data/updater/AppUpdateDownloadJob.kt | 4 +- .../data/updater/AppUpdateNotifier.kt | 28 ++++---- .../extension/api/ExtensionUpdateNotifier.kt | 4 +- .../extension/util/ExtensionInstallService.kt | 4 +- .../browse/extension/ExtensionFilterScreen.kt | 4 +- .../ui/browse/extension/ExtensionsTab.kt | 4 +- .../tachiyomi/ui/deeplink/DeepLinkScreen.kt | 4 +- .../ui/download/DownloadQueueScreen.kt | 22 +++--- .../eu/kanade/tachiyomi/ui/home/HomeScreen.kt | 6 +- .../kanade/tachiyomi/ui/library/LibraryTab.kt | 16 ++--- .../ui/manga/MangaCoverScreenModel.kt | 12 ++-- .../ui/manga/track/TrackInfoDialog.kt | 30 ++++---- .../eu/kanade/tachiyomi/ui/more/MoreTab.kt | 4 +- .../ui/reader/ReaderNavigationOverlayView.kt | 6 +- .../tachiyomi/ui/reader/SaveImageNotifier.kt | 12 ++-- .../viewer/pager/PagerTransitionHolder.kt | 8 +-- .../viewer/webtoon/WebtoonTransitionHolder.kt | 8 +-- .../tachiyomi/ui/security/UnlockActivity.kt | 4 +- .../tachiyomi/util/lang/DateExtensions.kt | 8 +-- .../util/system/AuthenticatorUtil.kt | 4 +- .../util/system/ContextExtensions.kt | 4 +- .../tachiyomi/util/system/IntentExtensions.kt | 4 +- .../tachiyomi/util/system/LocaleHelper.kt | 10 +-- .../interceptor/CloudflareInterceptor.kt | 4 +- .../tachiyomi/util/system/ToastExtensions.kt | 4 +- .../main/java/tachiyomi/core/i18n/Localize.kt | 8 +-- .../provider/AndroidBackupFolderProvider.kt | 4 +- .../provider/AndroidDownloadFolderProvider.kt | 4 +- .../commonMain/resources/MR/base/strings.xml | 7 +- .../core/components/SettingsItems.kt | 4 +- .../presentation/core/i18n/Localize.kt | 20 +++--- .../presentation/core/screens/EmptyScreen.kt | 6 +- .../widget/components/LockedWidget.kt | 4 +- .../widget/components/UpdatesWidget.kt | 4 +- .../tachiyomi/source/local/LocalSource.kt | 8 +-- .../tachiyomi/source/local/filter/OrderBy.kt | 6 +- .../source/local/io/LocalSourceFileSystem.kt | 4 +- 123 files changed, 708 insertions(+), 701 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt index 29e36233d..fc4cb2a05 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt @@ -28,13 +28,13 @@ import exh.source.isEhBasedSource import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.StateFlow -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.model.StubSource import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction import tachiyomi.presentation.core.screens.LoadingScreen @@ -72,7 +72,7 @@ fun BrowseSourceContent( if (mangaList.itemCount > 0 && errorState != null && errorState is LoadState.Error) { val result = snackbarHostState.showSnackbar( message = getErrorMessage(errorState), - actionLabel = context.localize(MR.strings.action_retry), + actionLabel = context.stringResource(MR.strings.action_retry), duration = SnackbarDuration.Indefinite, ) when (result) { @@ -192,7 +192,7 @@ internal fun MissingSourceScreen( }, ) { paddingValues -> EmptyScreen( - message = localize(MR.strings.source_not_installed, source.toString()), + message = stringResource(MR.strings.source_not_installed, source.toString()), modifier = Modifier.padding(paddingValues), ) } diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt index 1178e1e85..51acdfccf 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt @@ -13,7 +13,7 @@ import eu.kanade.tachiyomi.ui.browse.extension.ExtensionFilterState import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable @@ -25,7 +25,7 @@ fun ExtensionFilterScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = localize(MR.strings.label_extensions), + title = stringResource(MR.strings.label_extensions), navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) diff --git a/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt index 1dccc934c..2478ac591 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt @@ -36,7 +36,7 @@ import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.theme.header @@ -106,7 +106,7 @@ private fun MigrateSourceList( verticalAlignment = Alignment.CenterVertically, ) { Text( - text = localize(MR.strings.migration_selection_prompt), + text = stringResource(MR.strings.migration_selection_prompt), modifier = Modifier.weight(1f), style = MaterialTheme.typography.header, ) @@ -115,11 +115,11 @@ private fun MigrateSourceList( when (sortingMode) { SetMigrateSorting.Mode.ALPHABETICAL -> Icon( Icons.Outlined.SortByAlpha, - contentDescription = localize(MR.strings.action_sort_alpha), + contentDescription = stringResource(MR.strings.action_sort_alpha), ) SetMigrateSorting.Mode.TOTAL -> Icon( Icons.Outlined.Numbers, - contentDescription = localize(MR.strings.action_sort_count), + contentDescription = stringResource(MR.strings.action_sort_count), ) } } @@ -127,11 +127,11 @@ private fun MigrateSourceList( when (sortingDirection) { SetMigrateSorting.Direction.ASCENDING -> Icon( Icons.Outlined.ArrowUpward, - contentDescription = localize(MR.strings.action_asc), + contentDescription = stringResource(MR.strings.action_asc), ) SetMigrateSorting.Direction.DESCENDING -> Icon( Icons.Outlined.ArrowDownward, - contentDescription = localize(MR.strings.action_desc), + contentDescription = stringResource(MR.strings.action_desc), ) } } @@ -216,7 +216,7 @@ private fun MigrateSourceItem( if (source.isStub) { Text( modifier = Modifier.secondaryItemAlpha(), - text = localize(MR.strings.not_installed), + text = stringResource(MR.strings.not_installed), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt index e6548aae7..b0de76ba4 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt @@ -17,7 +17,7 @@ import tachiyomi.domain.source.model.Source import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable @@ -33,7 +33,7 @@ fun SourcesFilterScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = localize(MR.strings.label_sources), + title = stringResource(MR.strings.label_sources), navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt index 7eb176588..d996d141f 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt @@ -19,7 +19,7 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.system.toast import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun RemoveMangaDialog( @@ -31,7 +31,7 @@ fun RemoveMangaDialog( onDismissRequest = onDismissRequest, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -41,14 +41,14 @@ fun RemoveMangaDialog( onConfirm() }, ) { - Text(text = localize(MR.strings.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) } }, title = { - Text(text = localize(MR.strings.are_you_sure)) + Text(text = stringResource(MR.strings.are_you_sure)) }, text = { - Text(text = localize(MR.strings.remove_manga, mangaToRemove.title)) + Text(text = stringResource(MR.strings.remove_manga, mangaToRemove.title)) }, ) } diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchCardRow.kt b/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchCardRow.kt index 5d35fdebd..135b1135e 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchCardRow.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchCardRow.kt @@ -21,7 +21,7 @@ import tachiyomi.domain.manga.model.MangaCover import tachiyomi.domain.manga.model.asMangaCover import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalSearchCardRow( @@ -78,7 +78,7 @@ private fun MangaItem( @Composable private fun EmptyResultItem() { Text( - text = localize(MR.strings.no_results_found), + text = stringResource(MR.strings.no_results_found), modifier = Modifier .padding( horizontal = MaterialTheme.padding.medium, diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchResultItems.kt b/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchResultItems.kt index 1ad97acfc..96da0ada6 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchResultItems.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchResultItems.kt @@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowForward -import androidx.compose.material.icons.outlined.ArrowForward import androidx.compose.material.icons.outlined.Error import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Icon @@ -27,7 +26,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalSearchResultItem( @@ -112,7 +111,7 @@ fun GlobalSearchErrorResultItem(message: String?) { Icon(imageVector = Icons.Outlined.Error, contentDescription = null) Spacer(Modifier.height(4.dp)) Text( - text = message ?: localize(MR.strings.unknown_error), + text = message ?: stringResource(MR.strings.unknown_error), textAlign = TextAlign.Center, ) } diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchToolbar.kt index e439e7da6..fa61696ae 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchToolbar.kt @@ -30,7 +30,7 @@ import eu.kanade.presentation.components.SearchToolbar import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SourceFilter import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalSearchToolbar( @@ -85,7 +85,7 @@ fun GlobalSearchToolbar( ) }, label = { - Text(text = localize(MR.strings.pinned_sources)) + Text(text = stringResource(MR.strings.pinned_sources)) }, ) FilterChip( @@ -100,7 +100,7 @@ fun GlobalSearchToolbar( ) }, label = { - Text(text = localize(MR.strings.all)) + Text(text = stringResource(MR.strings.all)) }, ) @@ -118,7 +118,7 @@ fun GlobalSearchToolbar( ) }, label = { - Text(text = localize(MR.strings.has_results)) + Text(text = stringResource(MR.strings.has_results)) }, ) } diff --git a/app/src/main/java/eu/kanade/presentation/category/CategoryExtensions.kt b/app/src/main/java/eu/kanade/presentation/category/CategoryExtensions.kt index ce0f071c4..a6c22c240 100644 --- a/app/src/main/java/eu/kanade/presentation/category/CategoryExtensions.kt +++ b/app/src/main/java/eu/kanade/presentation/category/CategoryExtensions.kt @@ -2,20 +2,20 @@ package eu.kanade.presentation.category import android.content.Context import androidx.compose.runtime.Composable -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.category.model.Category import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource val Category.visualName: String @Composable get() = when { - isSystemCategory -> localize(MR.strings.label_default) + isSystemCategory -> stringResource(MR.strings.label_default) else -> name } fun Category.visualName(context: Context): String = when { - isSystemCategory -> context.localize(MR.strings.label_default) + isSystemCategory -> context.stringResource(MR.strings.label_default) else -> name } diff --git a/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt b/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt index 9412d7559..ed3767010 100644 --- a/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt @@ -23,7 +23,7 @@ import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.util.plus @@ -42,13 +42,13 @@ fun CategoryScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = localize(MR.strings.action_edit_categories), + title = stringResource(MR.strings.action_edit_categories), navigateUp = navigateUp, actions = { AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.action_sort), + title = stringResource(MR.strings.action_sort), icon = Icons.Outlined.SortByAlpha, onClick = onClickSortAlphabetically, ), diff --git a/app/src/main/java/eu/kanade/presentation/category/components/CategoryFloatingActionButton.kt b/app/src/main/java/eu/kanade/presentation/category/components/CategoryFloatingActionButton.kt index bbb17095c..2aaf81efd 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/CategoryFloatingActionButton.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/CategoryFloatingActionButton.kt @@ -8,7 +8,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrollingUp @@ -18,7 +18,7 @@ fun CategoryFloatingActionButton( onCreate: () -> Unit, ) { ExtendedFloatingActionButton( - text = { Text(text = localize(MR.strings.action_add)) }, + text = { Text(text = stringResource(MR.strings.action_add)) }, icon = { Icon(imageVector = Icons.Outlined.Add, contentDescription = null) }, onClick = onCreate, expanded = lazyListState.isScrollingUp() || lazyListState.isScrolledToEnd(), diff --git a/app/src/main/java/eu/kanade/presentation/category/components/CategoryListItem.kt b/app/src/main/java/eu/kanade/presentation/category/components/CategoryListItem.kt index 07b4c4fba..e2d5c4261 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/CategoryListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/CategoryListItem.kt @@ -11,7 +11,6 @@ import androidx.compose.material.icons.outlined.ArrowDropDown import androidx.compose.material.icons.outlined.ArrowDropUp import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Edit -import androidx.compose.material.icons.outlined.Label import androidx.compose.material3.ElevatedCard import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -23,7 +22,7 @@ import androidx.compose.ui.Modifier import tachiyomi.domain.category.model.Category import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun CategoryListItem( @@ -74,11 +73,11 @@ fun CategoryListItem( IconButton(onClick = onRename) { Icon( imageVector = Icons.Outlined.Edit, - contentDescription = localize(MR.strings.action_rename_category), + contentDescription = stringResource(MR.strings.action_rename_category), ) } IconButton(onClick = onDelete) { - Icon(imageVector = Icons.Outlined.Delete, contentDescription = localize(MR.strings.action_delete)) + Icon(imageVector = Icons.Outlined.Delete, contentDescription = stringResource(MR.strings.action_delete)) } } } diff --git a/app/src/main/java/eu/kanade/presentation/components/AppBar.kt b/app/src/main/java/eu/kanade/presentation/components/AppBar.kt index be162175b..0bfd039eb 100644 --- a/app/src/main/java/eu/kanade/presentation/components/AppBar.kt +++ b/app/src/main/java/eu/kanade/presentation/components/AppBar.kt @@ -50,10 +50,9 @@ import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.ImmutableList import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide import tachiyomi.presentation.core.util.runOnEnterKeyPressed import tachiyomi.presentation.core.util.secondaryItemAlpha @@ -135,7 +134,7 @@ fun AppBar( IconButton(onClick = onCancelActionMode) { Icon( imageVector = Icons.Outlined.Close, - contentDescription = localize(MR.strings.action_cancel), + contentDescription = stringResource(MR.strings.action_cancel), ) } } else { @@ -220,7 +219,7 @@ fun AppBarActions( positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), tooltip = { PlainTooltip { - Text(stringResource(R.string.abc_action_menu_overflow_description)) + Text(stringResource(MR.strings.action_menu_overflow_description)) } }, state = rememberTooltipState(), @@ -230,7 +229,7 @@ fun AppBarActions( ) { Icon( Icons.Outlined.MoreVert, - contentDescription = stringResource(R.string.abc_action_menu_overflow_description), + contentDescription = stringResource(MR.strings.action_menu_overflow_description), ) } } @@ -319,7 +318,7 @@ fun SearchToolbar( placeholder = { Text( modifier = Modifier.secondaryItemAlpha(), - text = (placeholderText ?: localize(MR.strings.action_search_hint)), + text = (placeholderText ?: stringResource(MR.strings.action_search_hint)), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.titleMedium.copy( @@ -344,7 +343,7 @@ fun SearchToolbar( positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), tooltip = { PlainTooltip { - Text(localize(MR.strings.action_search)) + Text(stringResource(MR.strings.action_search)) } }, state = rememberTooltipState(), @@ -354,7 +353,7 @@ fun SearchToolbar( ) { Icon( Icons.Outlined.Search, - contentDescription = localize(MR.strings.action_search), + contentDescription = stringResource(MR.strings.action_search), ) } } @@ -363,7 +362,7 @@ fun SearchToolbar( positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), tooltip = { PlainTooltip { - Text(localize(MR.strings.action_reset)) + Text(stringResource(MR.strings.action_reset)) } }, state = rememberTooltipState(), @@ -376,7 +375,7 @@ fun SearchToolbar( ) { Icon( Icons.Outlined.Close, - contentDescription = localize(MR.strings.action_reset), + contentDescription = stringResource(MR.strings.action_reset), ) } } @@ -396,7 +395,7 @@ fun UpIcon(navigationIcon: ImageVector? = null) { ?: Icons.AutoMirrored.Outlined.ArrowBack Icon( imageVector = icon, - contentDescription = stringResource(R.string.abc_action_bar_up_description), + contentDescription = stringResource(MR.strings.action_bar_up_description), ) } diff --git a/app/src/main/java/eu/kanade/presentation/components/Banners.kt b/app/src/main/java/eu/kanade/presentation/components/Banners.kt index 070cc9a69..7e702a810 100644 --- a/app/src/main/java/eu/kanade/presentation/components/Banners.kt +++ b/app/src/main/java/eu/kanade/presentation/components/Banners.kt @@ -32,7 +32,7 @@ import androidx.compose.ui.util.fastMap import androidx.compose.ui.util.fastMaxBy import dev.icerock.moko.resources.StringResource import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource val DownloadedOnlyBannerBackgroundColor @Composable get() = MaterialTheme.colorScheme.tertiary @@ -47,7 +47,7 @@ fun WarningBanner( modifier: Modifier = Modifier, ) { Text( - text = localize(textRes), + text = stringResource(textRes), modifier = modifier .fillMaxWidth() .background(MaterialTheme.colorScheme.error) @@ -127,7 +127,7 @@ fun AppStateBanners( @Composable private fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) { Text( - text = localize(MR.strings.label_downloaded_only), + text = stringResource(MR.strings.label_downloaded_only), modifier = Modifier .background(DownloadedOnlyBannerBackgroundColor) .fillMaxWidth() @@ -142,7 +142,7 @@ private fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) { @Composable private fun IncognitoModeBanner(modifier: Modifier = Modifier) { Text( - text = localize(MR.strings.pref_incognito_mode), + text = stringResource(MR.strings.pref_incognito_mode), modifier = Modifier .background(IncognitoModeBannerBackgroundColor) .fillMaxWidth() @@ -173,7 +173,7 @@ private fun IndexingDownloadBanner(modifier: Modifier = Modifier) { ) Spacer(modifier = Modifier.width(8.dp)) Text( - text = localize(MR.strings.download_notifier_cache_renewal), + text = stringResource(MR.strings.download_notifier_cache_renewal), color = MaterialTheme.colorScheme.onSecondary, textAlign = TextAlign.Center, style = MaterialTheme.typography.labelMedium, diff --git a/app/src/main/java/eu/kanade/presentation/components/DownloadDropdownMenu.kt b/app/src/main/java/eu/kanade/presentation/components/DownloadDropdownMenu.kt index 8eb83b9f4..36449f13c 100644 --- a/app/src/main/java/eu/kanade/presentation/components/DownloadDropdownMenu.kt +++ b/app/src/main/java/eu/kanade/presentation/components/DownloadDropdownMenu.kt @@ -5,8 +5,8 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import eu.kanade.presentation.manga.DownloadAction import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize -import tachiyomi.presentation.core.i18n.localizePlural +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource @Composable fun DownloadDropdownMenu( @@ -19,11 +19,11 @@ fun DownloadDropdownMenu( onDismissRequest = onDismissRequest, ) { listOfNotNull( - DownloadAction.NEXT_1_CHAPTER to localizePlural(MR.plurals.download_amount, 1, 1), - DownloadAction.NEXT_5_CHAPTERS to localizePlural(MR.plurals.download_amount, 5, 5), - DownloadAction.NEXT_10_CHAPTERS to localizePlural(MR.plurals.download_amount, 10, 10), - DownloadAction.NEXT_25_CHAPTERS to localizePlural(MR.plurals.download_amount, 25, 25), - DownloadAction.UNREAD_CHAPTERS to localize(MR.strings.download_unread), + DownloadAction.NEXT_1_CHAPTER to pluralStringResource(MR.plurals.download_amount, 1, 1), + DownloadAction.NEXT_5_CHAPTERS to pluralStringResource(MR.plurals.download_amount, 5, 5), + DownloadAction.NEXT_10_CHAPTERS to pluralStringResource(MR.plurals.download_amount, 10, 10), + DownloadAction.NEXT_25_CHAPTERS to pluralStringResource(MR.plurals.download_amount, 25, 25), + DownloadAction.UNREAD_CHAPTERS to stringResource(MR.strings.download_unread), ).map { (downloadAction, string) -> DropdownMenuItem( text = { Text(text = string) }, diff --git a/app/src/main/java/eu/kanade/presentation/components/DropdownMenu.kt b/app/src/main/java/eu/kanade/presentation/components/DropdownMenu.kt index 509751504..531ebd406 100644 --- a/app/src/main/java/eu/kanade/presentation/components/DropdownMenu.kt +++ b/app/src/main/java/eu/kanade/presentation/components/DropdownMenu.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.window.PopupProperties import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import androidx.compose.material3.DropdownMenu as ComposeDropdownMenu @Composable @@ -54,13 +54,13 @@ fun RadioMenuItem( if (isChecked) { Icon( imageVector = Icons.Outlined.RadioButtonChecked, - contentDescription = localize(MR.strings.selected), + contentDescription = stringResource(MR.strings.selected), tint = MaterialTheme.colorScheme.primary, ) } else { Icon( imageVector = Icons.Outlined.RadioButtonUnchecked, - contentDescription = localize(MR.strings.not_selected), + contentDescription = stringResource(MR.strings.not_selected), ) } }, diff --git a/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt b/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt index 9a62b42f0..dfba8cd61 100644 --- a/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt @@ -31,7 +31,7 @@ import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.HorizontalPager import tachiyomi.presentation.core.components.material.TabText -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource object TabbedDialogPaddings { val Horizontal = 24.dp @@ -94,7 +94,7 @@ private fun MoreMenu( IconButton(onClick = { expanded = true }) { Icon( imageVector = Icons.Default.MoreVert, - contentDescription = localize(MR.strings.label_more), + contentDescription = stringResource(MR.strings.label_more), ) } DropdownMenu( diff --git a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt index 0e276a159..e7f185b71 100644 --- a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt @@ -26,7 +26,7 @@ import kotlinx.coroutines.launch import tachiyomi.presentation.core.components.HorizontalPager import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.TabText -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun TabbedScreen( @@ -52,7 +52,7 @@ fun TabbedScreen( val searchEnabled = tab.searchEnabled SearchToolbar( - titleContent = { AppBarTitle(localize(titleRes)) }, + titleContent = { AppBarTitle(stringResource(titleRes)) }, searchEnabled = searchEnabled, searchQuery = if (searchEnabled) searchQuery else null, onChangeSearchQuery = onChangeSearchQuery, @@ -75,7 +75,7 @@ fun TabbedScreen( Tab( selected = state.currentPage == index, onClick = { scope.launch { state.animateScrollToPage(index) } }, - text = { TabText(text = localize(tab.titleRes), badgeCount = tab.badgeNumber) }, + text = { TabText(text = stringResource(tab.titleRes), badgeCount = tab.badgeNumber) }, unselectedContentColor = MaterialTheme.colorScheme.onSurface, ) } diff --git a/app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt b/app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt index d61600f3f..f90aeb252 100644 --- a/app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt @@ -19,7 +19,7 @@ import eu.kanade.tachiyomi.util.CrashLogUtil import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.InfoScreen @Composable @@ -32,15 +32,15 @@ fun CrashScreen( InfoScreen( icon = Icons.Outlined.BugReport, - headingText = localize(MR.strings.crash_screen_title), - subtitleText = localize(MR.strings.crash_screen_description, localize(MR.strings.app_name)), - acceptText = localize(MR.strings.pref_dump_crash_logs), + headingText = stringResource(MR.strings.crash_screen_title), + subtitleText = stringResource(MR.strings.crash_screen_description, stringResource(MR.strings.app_name)), + acceptText = stringResource(MR.strings.pref_dump_crash_logs), onAcceptClick = { scope.launch { CrashLogUtil(context).dumpLogs() } }, - rejectText = localize(MR.strings.crash_screen_restart_application), + rejectText = stringResource(MR.strings.crash_screen_restart_application), onRejectClick = onRestartClick, ) { Box( diff --git a/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt b/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt index 9613f0f4c..ec6416480 100644 --- a/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt @@ -27,7 +27,7 @@ import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import uy.kohesive.injekt.Injekt @@ -47,14 +47,14 @@ fun HistoryScreen( Scaffold( topBar = { scrollBehavior -> SearchToolbar( - titleContent = { AppBarTitle(localize(MR.strings.history)) }, + titleContent = { AppBarTitle(stringResource(MR.strings.history)) }, searchQuery = state.searchQuery, onChangeSearchQuery = onSearchQueryChange, actions = { AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.pref_clear_history), + title = stringResource(MR.strings.pref_clear_history), icon = Icons.Outlined.DeleteSweep, onClick = { onDialogChange(HistoryScreenModel.Dialog.DeleteAll) diff --git a/app/src/main/java/eu/kanade/presentation/history/components/HistoryDialogs.kt b/app/src/main/java/eu/kanade/presentation/history/components/HistoryDialogs.kt index e97bdbcc7..2ab192235 100644 --- a/app/src/main/java/eu/kanade/presentation/history/components/HistoryDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/history/components/HistoryDialogs.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.unit.dp import eu.kanade.presentation.theme.TachiyomiTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun HistoryDeleteDialog( @@ -26,16 +26,16 @@ fun HistoryDeleteDialog( AlertDialog( title = { - Text(text = localize(MR.strings.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) }, text = { Column( verticalArrangement = Arrangement.spacedBy(8.dp), ) { - Text(text = localize(MR.strings.dialog_with_checkbox_remove_description)) + Text(text = stringResource(MR.strings.dialog_with_checkbox_remove_description)) LabeledCheckbox( - label = localize(MR.strings.dialog_with_checkbox_reset), + label = stringResource(MR.strings.dialog_with_checkbox_reset), checked = removeEverything, onCheckedChange = { removeEverything = it }, ) @@ -47,12 +47,12 @@ fun HistoryDeleteDialog( onDelete(removeEverything) onDismissRequest() }) { - Text(text = localize(MR.strings.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) @@ -65,10 +65,10 @@ fun HistoryDeleteAllDialog( ) { AlertDialog( title = { - Text(text = localize(MR.strings.action_remove_everything)) + Text(text = stringResource(MR.strings.action_remove_everything)) }, text = { - Text(text = localize(MR.strings.clear_history_confirmation)) + Text(text = stringResource(MR.strings.clear_history_confirmation)) }, onDismissRequest = onDismissRequest, confirmButton = { @@ -76,12 +76,12 @@ fun HistoryDeleteAllDialog( onDelete() onDismissRequest() }) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/history/components/HistoryItem.kt b/app/src/main/java/eu/kanade/presentation/history/components/HistoryItem.kt index 1cb3034dc..846903b1b 100644 --- a/app/src/main/java/eu/kanade/presentation/history/components/HistoryItem.kt +++ b/app/src/main/java/eu/kanade/presentation/history/components/HistoryItem.kt @@ -29,7 +29,7 @@ import eu.kanade.tachiyomi.util.lang.toTimestampString import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource private val HistoryItemHeight = 96.dp @@ -69,7 +69,7 @@ fun HistoryItem( val readAt = remember { history.readAt?.toTimestampString() ?: "" } Text( text = if (history.chapterNumber > -1) { - localize( + stringResource( MR.strings.recent_manga_time, formatChapterNumber(history.chapterNumber), readAt, @@ -85,7 +85,7 @@ fun HistoryItem( IconButton(onClick = onClickDelete) { Icon( imageVector = Icons.Outlined.Delete, - contentDescription = localize(MR.strings.action_delete), + contentDescription = stringResource(MR.strings.action_delete), tint = MaterialTheme.colorScheme.onSurface, ) } diff --git a/app/src/main/java/eu/kanade/presentation/library/DeleteLibraryMangaDialog.kt b/app/src/main/java/eu/kanade/presentation/library/DeleteLibraryMangaDialog.kt index 539392b6a..36346f14a 100644 --- a/app/src/main/java/eu/kanade/presentation/library/DeleteLibraryMangaDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/library/DeleteLibraryMangaDialog.kt @@ -13,7 +13,7 @@ import dev.icerock.moko.resources.StringResource import tachiyomi.core.preference.CheckboxState import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun DeleteLibraryMangaDialog( @@ -35,7 +35,7 @@ fun DeleteLibraryMangaDialog( onDismissRequest = onDismissRequest, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -49,17 +49,17 @@ fun DeleteLibraryMangaDialog( ) }, ) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, title = { - Text(text = localize(MR.strings.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) }, text = { Column { list.forEach { state -> LabeledCheckbox( - label = localize(state.value), + label = stringResource(state.value), checked = state.isChecked, onCheckedChange = { val index = list.indexOf(state) diff --git a/app/src/main/java/eu/kanade/presentation/library/components/CommonMangaItem.kt b/app/src/main/java/eu/kanade/presentation/library/components/CommonMangaItem.kt index 47f215f4e..83a679336 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/CommonMangaItem.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/CommonMangaItem.kt @@ -40,7 +40,7 @@ import androidx.compose.ui.unit.sp import eu.kanade.presentation.manga.components.MangaCover import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.BadgeGroup -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground object CommonMangaItemDefaults { @@ -378,7 +378,7 @@ private fun ContinueReadingButton( ) { Icon( imageVector = Icons.Filled.PlayArrow, - contentDescription = localize(MR.strings.action_resume), + contentDescription = stringResource(MR.strings.action_resume), modifier = Modifier.size(16.dp), ) } diff --git a/app/src/main/java/eu/kanade/presentation/library/components/GlobalSearchItem.kt b/app/src/main/java/eu/kanade/presentation/library/components/GlobalSearchItem.kt index f5e60539b..c01d58f19 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/GlobalSearchItem.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/GlobalSearchItem.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.zIndex import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable internal fun GlobalSearchItem( @@ -19,7 +19,7 @@ internal fun GlobalSearchItem( onClick = onClick, ) { Text( - text = localize(MR.strings.action_global_search_query, searchQuery), + text = stringResource(MR.strings.action_global_search_query, searchQuery), modifier = Modifier.zIndex(99f), ) } diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt index 398e338e6..ddba36cf7 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt @@ -22,7 +22,7 @@ import eu.kanade.presentation.components.SearchToolbar import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Pill -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.active @Composable @@ -107,21 +107,21 @@ private fun LibraryRegularToolbar( AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.action_filter), + title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.FilterList, iconTint = filterTint, onClick = onClickFilter, ), AppBar.OverflowAction( - title = localize(MR.strings.action_update_library), + title = stringResource(MR.strings.action_update_library), onClick = onClickGlobalUpdate, ), AppBar.OverflowAction( - title = localize(MR.strings.action_update_category), + title = stringResource(MR.strings.action_update_category), onClick = onClickRefresh, ), AppBar.OverflowAction( - title = localize(MR.strings.action_open_random_manga), + title = stringResource(MR.strings.action_open_random_manga), onClick = onClickOpenRandomManga, ), @@ -156,12 +156,12 @@ private fun LibrarySelectionToolbar( AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = onClickSelectAll, ), AppBar.Action( - title = localize(MR.strings.action_select_inverse), + title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = onClickInvertSelection, ), diff --git a/app/src/main/java/eu/kanade/presentation/manga/ChapterSettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/manga/ChapterSettingsDialog.kt index 6463ab785..64cba7158 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/ChapterSettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/ChapterSettingsDialog.kt @@ -38,7 +38,7 @@ import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.RadioItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TriStateItem -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.active @Composable @@ -66,20 +66,20 @@ fun ChapterSettingsDialog( TabbedDialog( onDismissRequest = onDismissRequest, tabTitles = persistentListOf( - localize(MR.strings.action_filter), - localize(MR.strings.action_sort), - localize(MR.strings.action_display), + stringResource(MR.strings.action_filter), + stringResource(MR.strings.action_sort), + stringResource(MR.strings.action_display), ), tabOverflowMenuContent = { closeMenu -> DropdownMenuItem( - text = { Text(localize(MR.strings.set_chapter_settings_as_default)) }, + text = { Text(stringResource(MR.strings.set_chapter_settings_as_default)) }, onClick = { showSetAsDefaultDialog = true closeMenu() }, ) DropdownMenuItem( - text = { Text(localize(MR.strings.action_reset)) }, + text = { Text(stringResource(MR.strings.action_reset)) }, onClick = { onResetToDefault() closeMenu() @@ -136,17 +136,17 @@ private fun ColumnScope.FilterPage( onScanlatorFilterClicked: (() -> Unit), ) { TriStateItem( - label = localize(MR.strings.label_downloaded), + label = stringResource(MR.strings.label_downloaded), state = downloadFilter, onClick = onDownloadFilterChanged, ) TriStateItem( - label = localize(MR.strings.action_filter_unread), + label = stringResource(MR.strings.action_filter_unread), state = unreadFilter, onClick = onUnreadFilterChanged, ) TriStateItem( - label = localize(MR.strings.action_filter_bookmarked), + label = stringResource(MR.strings.action_filter_bookmarked), state = bookmarkedFilter, onClick = onBookmarkedFilterChanged, ) @@ -179,7 +179,7 @@ fun ScanlatorFilterItem( }, ) Text( - text = localize(MR.strings.scanlator), + text = stringResource(MR.strings.scanlator), style = MaterialTheme.typography.bodyMedium, ) } @@ -198,7 +198,7 @@ private fun ColumnScope.SortPage( MR.strings.action_sort_alpha to Manga.CHAPTER_SORTING_ALPHABET, ).map { (titleRes, mode) -> SortItem( - label = localize(titleRes), + label = stringResource(titleRes), sortDescending = sortDescending.takeIf { sortingMode == mode }, onClick = { onItemSelected(mode) }, ) @@ -215,7 +215,7 @@ private fun ColumnScope.DisplayPage( MR.strings.show_chapter_number to Manga.CHAPTER_DISPLAY_NUMBER, ).map { (titleRes, mode) -> RadioItem( - label = localize(titleRes), + label = stringResource(titleRes), selected = displayMode == mode, onClick = { onItemSelected(mode) }, ) @@ -231,15 +231,15 @@ private fun SetAsDefaultDialog( AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = localize(MR.strings.chapter_settings)) }, + title = { Text(text = stringResource(MR.strings.chapter_settings)) }, text = { Column( verticalArrangement = Arrangement.spacedBy(12.dp), ) { - Text(text = localize(MR.strings.confirm_set_chapter_settings)) + Text(text = stringResource(MR.strings.confirm_set_chapter_settings)) LabeledCheckbox( - label = localize(MR.strings.also_set_chapter_settings_for_library), + label = stringResource(MR.strings.also_set_chapter_settings_for_library), checked = optionalChecked, onCheckedChange = { optionalChecked = it }, ) @@ -247,7 +247,7 @@ private fun SetAsDefaultDialog( }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -257,7 +257,7 @@ private fun SetAsDefaultDialog( onDismissRequest() }, ) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/manga/DuplicateMangaDialog.kt b/app/src/main/java/eu/kanade/presentation/manga/DuplicateMangaDialog.kt index afb845833..a44a53b37 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/DuplicateMangaDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/DuplicateMangaDialog.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun DuplicateMangaDialog( @@ -21,10 +21,10 @@ fun DuplicateMangaDialog( AlertDialog( onDismissRequest = onDismissRequest, title = { - Text(text = localize(MR.strings.are_you_sure)) + Text(text = stringResource(MR.strings.are_you_sure)) }, text = { - Text(text = localize(MR.strings.confirm_add_duplicate_manga)) + Text(text = stringResource(MR.strings.confirm_add_duplicate_manga)) }, confirmButton = { FlowRow( @@ -36,13 +36,13 @@ fun DuplicateMangaDialog( onOpenManga() }, ) { - Text(text = localize(MR.strings.action_show_manga)) + Text(text = stringResource(MR.strings.action_show_manga)) } Spacer(modifier = Modifier.weight(1f)) TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } TextButton( onClick = { @@ -50,7 +50,7 @@ fun DuplicateMangaDialog( onConfirm() }, ) { - Text(text = localize(MR.strings.action_add)) + Text(text = stringResource(MR.strings.action_add)) } } }, diff --git a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt index ae69bfd3e..a0d556948 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt @@ -98,7 +98,7 @@ import tachiyomi.presentation.core.components.VerticalFastScroller import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton import tachiyomi.presentation.core.components.material.PullRefresh import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrollingUp import java.text.DateFormat @@ -422,7 +422,9 @@ private fun MangaScreenSmallImpl( val isReading = remember(state.chapters) { state.chapters.fastAny { it.chapter.read } } - Text(text = localize(if (isReading) MR.strings.action_resume else MR.strings.action_start)) + Text( + text = stringResource(if (isReading) MR.strings.action_resume else MR.strings.action_start), + ) }, icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) }, onClick = onContinueReading, @@ -758,7 +760,9 @@ fun MangaScreenLargeImpl( state.chapters.fastAny { it.chapter.read } } Text( - text = localize(if (isReading) MR.strings.action_resume else MR.strings.action_start), + text = stringResource( + if (isReading) MR.strings.action_resume else MR.strings.action_start, + ), ) }, icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) }, @@ -977,7 +981,7 @@ private fun LazyListScope.sharedChapterItems( is ChapterList.Item -> { MangaChapterListItem( title = if (manga.displayMode == Manga.CHAPTER_DISPLAY_NUMBER) { - localize( + stringResource( MR.strings.display_mode_chapter, formatChapterNumber(item.chapter.chapterNumber), ) @@ -1002,7 +1006,7 @@ private fun LazyListScope.sharedChapterItems( readProgress = item.chapter.lastPageRead .takeIf { /* SY --> */(!item.chapter.read || alwaysShowReadingProgress)/* SY <-- */ && it > 0L } ?.let { - localize( + stringResource( MR.strings.chapter_progress, it + 1, ) diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/ChapterDownloadIndicator.kt b/app/src/main/java/eu/kanade/presentation/manga/components/ChapterDownloadIndicator.kt index 7ff00fbaf..59f00a8e7 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/ChapterDownloadIndicator.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/ChapterDownloadIndicator.kt @@ -36,7 +36,7 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.model.Download import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.IconButtonTokens -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha enum class ChapterDownloadAction { @@ -99,7 +99,7 @@ private fun NotDownloadedIndicator( ) { Icon( painter = painterResource(R.drawable.ic_download_chapter_24dp), - contentDescription = localize(MR.strings.manga_download), + contentDescription = stringResource(MR.strings.manga_download), modifier = Modifier.size(IndicatorSize), tint = MaterialTheme.colorScheme.onSurfaceVariant, ) @@ -156,14 +156,14 @@ private fun DownloadingIndicator( } DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) { DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_start_downloading_now)) }, + text = { Text(text = stringResource(MR.strings.action_start_downloading_now)) }, onClick = { onClick(ChapterDownloadAction.START_NOW) isMenuExpanded = false }, ) DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_cancel)) }, + text = { Text(text = stringResource(MR.strings.action_cancel)) }, onClick = { onClick(ChapterDownloadAction.CANCEL) isMenuExpanded = false @@ -204,7 +204,7 @@ private fun DownloadedIndicator( ) DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) { DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_delete)) }, + text = { Text(text = stringResource(MR.strings.action_delete)) }, onClick = { onClick(ChapterDownloadAction.DELETE) isMenuExpanded = false @@ -232,7 +232,7 @@ private fun ErrorIndicator( ) { Icon( imageVector = Icons.Outlined.ErrorOutline, - contentDescription = localize(MR.strings.chapter_error), + contentDescription = stringResource(MR.strings.chapter_error), modifier = Modifier.size(IndicatorSize), tint = MaterialTheme.colorScheme.error, ) diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/ChapterHeader.kt b/app/src/main/java/eu/kanade/presentation/manga/components/ChapterHeader.kt index ef7d5a923..a193a190e 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/ChapterHeader.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/ChapterHeader.kt @@ -13,8 +13,8 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.SecondaryItemAlpha -import tachiyomi.presentation.core.i18n.localize -import tachiyomi.presentation.core.i18n.localizePlural +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource @Composable fun ChapterHeader( @@ -35,9 +35,9 @@ fun ChapterHeader( ) { Text( text = if (chapterCount == null) { - localize(MR.strings.chapters) + stringResource(MR.strings.chapters) } else { - localizePlural(MR.plurals.manga_num_chapters, count = chapterCount, chapterCount) + pluralStringResource(MR.plurals.manga_num_chapters, count = chapterCount, chapterCount) }, style = MaterialTheme.typography.titleMedium, color = MaterialTheme.colorScheme.onBackground, @@ -54,7 +54,7 @@ private fun MissingChaptersWarning(count: Int) { } Text( - text = localizePlural(MR.plurals.missing_chapters, count = count, count), + text = pluralStringResource(MR.plurals.missing_chapters, count = count, count), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaChapterListItem.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaChapterListItem.kt index bb18b965b..43a93af3f 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaChapterListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaChapterListItem.kt @@ -52,7 +52,7 @@ import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.ReadItemAlpha import tachiyomi.presentation.core.components.material.SecondaryItemAlpha -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground import kotlin.math.absoluteValue @@ -146,7 +146,7 @@ fun MangaChapterListItem( if (!read) { Icon( imageVector = Icons.Filled.Circle, - contentDescription = localize(MR.strings.unread), + contentDescription = stringResource(MR.strings.unread), modifier = Modifier .height(8.dp) .padding(end = 4.dp), @@ -156,7 +156,7 @@ fun MangaChapterListItem( if (bookmark) { Icon( imageVector = Icons.Filled.Bookmark, - contentDescription = localize(MR.strings.action_filter_bookmarked), + contentDescription = stringResource(MR.strings.action_filter_bookmarked), modifier = Modifier .sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }), tint = MaterialTheme.colorScheme.primary, diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt index 0dc88296c..b3c06a979 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt @@ -51,7 +51,7 @@ import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clickableNoIndication @Composable @@ -85,7 +85,7 @@ fun MangaCoverDialog( IconButton(onClick = onDismissRequest) { Icon( imageVector = Icons.Outlined.Close, - contentDescription = localize(MR.strings.action_close), + contentDescription = stringResource(MR.strings.action_close), ) } } @@ -94,12 +94,12 @@ fun MangaCoverDialog( AppBarActions( actions = persistentListOf( AppBar.Action( - title = localize(MR.strings.action_share), + title = stringResource(MR.strings.action_share), icon = Icons.Outlined.Share, onClick = onShareClick, ), AppBar.Action( - title = localize(MR.strings.action_save), + title = stringResource(MR.strings.action_save), icon = Icons.Outlined.Save, onClick = onSaveClick, ), @@ -119,7 +119,7 @@ fun MangaCoverDialog( ) { Icon( imageVector = Icons.Outlined.Edit, - contentDescription = localize(MR.strings.action_edit_cover), + contentDescription = stringResource(MR.strings.action_edit_cover), ) } DropdownMenu( @@ -128,14 +128,14 @@ fun MangaCoverDialog( offset = DpOffset(8.dp, 0.dp), ) { DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_edit)) }, + text = { Text(text = stringResource(MR.strings.action_edit)) }, onClick = { onEditClick(EditCoverAction.EDIT) expanded = false }, ) DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_delete)) }, + text = { Text(text = stringResource(MR.strings.action_delete)) }, onClick = { onEditClick(EditCoverAction.DELETE) expanded = false diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt index 3d353b000..e6ed97e90 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt @@ -80,8 +80,8 @@ import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.TextButton import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize -import tachiyomi.presentation.core.i18n.localizePlural +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clickableNoIndication import tachiyomi.presentation.core.util.secondaryItemAlpha import kotlin.math.absoluteValue @@ -181,9 +181,9 @@ fun MangaActionRow( Row(modifier = modifier.padding(start = 16.dp, top = 8.dp, end = 16.dp)) { MangaActionButton( title = if (favorite) { - localize(MR.strings.in_library) + stringResource(MR.strings.in_library) } else { - localize(MR.strings.add_to_library) + stringResource(MR.strings.add_to_library) }, icon = if (favorite) Icons.Filled.Favorite else Icons.Outlined.FavoriteBorder, color = if (favorite) MaterialTheme.colorScheme.primary else defaultActionButtonColor, @@ -192,7 +192,7 @@ fun MangaActionRow( ) if (onEditIntervalClicked != null && fetchInterval != null) { MangaActionButton( - title = localizePlural( + title = pluralStringResource( MR.plurals.day, count = fetchInterval.absoluteValue, fetchInterval.absoluteValue, @@ -205,9 +205,9 @@ fun MangaActionRow( if (onTrackingClicked != null) { MangaActionButton( title = if (trackingCount == 0) { - localize(MR.strings.manga_tracking_tab) + stringResource(MR.strings.manga_tracking_tab) } else { - localizePlural(MR.plurals.num_trackers, count = trackingCount, trackingCount) + pluralStringResource(MR.plurals.num_trackers, count = trackingCount, trackingCount) }, icon = if (trackingCount == 0) Icons.Outlined.Sync else Icons.Outlined.Done, color = if (trackingCount == 0) defaultActionButtonColor else MaterialTheme.colorScheme.primary, @@ -216,7 +216,7 @@ fun MangaActionRow( } if (onWebViewClicked != null) { MangaActionButton( - title = localize(MR.strings.action_web_view), + title = stringResource(MR.strings.action_web_view), icon = Icons.Outlined.Public, color = defaultActionButtonColor, onClick = onWebViewClicked, @@ -254,7 +254,7 @@ fun ExpandableMangaDescription( mutableStateOf(defaultExpandState) } val desc = - description.takeIf { !it.isNullOrBlank() } ?: localize(MR.strings.description_placeholder) + description.takeIf { !it.isNullOrBlank() } ?: stringResource(MR.strings.description_placeholder) val trimmedDescription = remember(desc) { desc .replace(whitespaceLineRegex, "\n") @@ -284,7 +284,7 @@ fun ExpandableMangaDescription( onDismissRequest = { showMenu = false }, ) { DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_search)) }, + text = { Text(text = stringResource(MR.strings.action_search)) }, onClick = { onTagSearch(tagSelected) showMenu = false @@ -300,7 +300,7 @@ fun ExpandableMangaDescription( ) // SY <-- DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_copy_to_clipboard)) }, + text = { Text(text = stringResource(MR.strings.action_copy_to_clipboard)) }, onClick = { onCopyTagToClipboard(tagSelected) showMenu = false @@ -379,7 +379,7 @@ private fun MangaAndSourceTitlesLarge( MangaCover.Book( modifier = Modifier.fillMaxWidth(0.65f), data = coverDataProvider(), - contentDescription = localize(MR.strings.manga_cover), + contentDescription = stringResource(MR.strings.manga_cover), onClick = onCoverClick, ) Spacer(modifier = Modifier.height(16.dp)) @@ -421,7 +421,7 @@ private fun MangaAndSourceTitlesSmall( .sizeIn(maxWidth = 100.dp) .align(Alignment.Top), data = coverDataProvider(), - contentDescription = localize(MR.strings.manga_cover), + contentDescription = stringResource(MR.strings.manga_cover), onClick = onCoverClick, ) Column( @@ -453,7 +453,7 @@ private fun MangaContentInfo( ) { val context = LocalContext.current Text( - text = title.ifBlank { localize(MR.strings.unknown_title) }, + text = title.ifBlank { stringResource(MR.strings.unknown_title) }, style = MaterialTheme.typography.titleLarge, modifier = Modifier.clickableNoIndication( onLongClick = { @@ -483,7 +483,7 @@ private fun MangaContentInfo( ) Text( text = author?.takeIf { it.isNotBlank() } - ?: localize(MR.strings.unknown_author), + ?: stringResource(MR.strings.unknown_author), style = MaterialTheme.typography.titleSmall, modifier = Modifier .clickableNoIndication( @@ -549,13 +549,13 @@ private fun MangaContentInfo( ProvideTextStyle(MaterialTheme.typography.bodyMedium) { Text( text = when (status) { - SManga.ONGOING.toLong() -> localize(MR.strings.ongoing) - SManga.COMPLETED.toLong() -> localize(MR.strings.completed) - SManga.LICENSED.toLong() -> localize(MR.strings.licensed) - SManga.PUBLISHING_FINISHED.toLong() -> localize(MR.strings.publishing_finished) - SManga.CANCELLED.toLong() -> localize(MR.strings.cancelled) - SManga.ON_HIATUS.toLong() -> localize(MR.strings.on_hiatus) - else -> localize(MR.strings.unknown) + SManga.ONGOING.toLong() -> stringResource(MR.strings.ongoing) + SManga.COMPLETED.toLong() -> stringResource(MR.strings.completed) + SManga.LICENSED.toLong() -> stringResource(MR.strings.licensed) + SManga.PUBLISHING_FINISHED.toLong() -> stringResource(MR.strings.publishing_finished) + SManga.CANCELLED.toLong() -> stringResource(MR.strings.cancelled) + SManga.ON_HIATUS.toLong() -> stringResource(MR.strings.on_hiatus) + else -> stringResource(MR.strings.unknown) }, overflow = TextOverflow.Ellipsis, maxLines = 1, @@ -629,7 +629,7 @@ private fun MangaSummary( val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_caret_down) Icon( painter = rememberAnimatedVectorPainter(image, !expanded), - contentDescription = localize( + contentDescription = stringResource( if (expanded) MR.strings.manga_info_collapse else MR.strings.manga_info_expand, ), tint = MaterialTheme.colorScheme.onBackground, diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaToolbar.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaToolbar.kt index 58e505c69..87c9ca2bf 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaToolbar.kt @@ -30,7 +30,7 @@ import eu.kanade.presentation.components.UpIcon import eu.kanade.presentation.manga.DownloadAction import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.active @Composable @@ -81,12 +81,12 @@ fun MangaToolbar( AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = onSelectAll, ), AppBar.Action( - title = localize(MR.strings.action_select_inverse), + title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = onInvertSelection, ), @@ -110,7 +110,7 @@ fun MangaToolbar( if (onClickDownload != null) { add( AppBar.Action( - title = localize(MR.strings.manga_download), + title = stringResource(MR.strings.manga_download), icon = Icons.Outlined.Download, onClick = { downloadExpanded = !downloadExpanded }, ), @@ -118,7 +118,7 @@ fun MangaToolbar( } add( AppBar.Action( - title = localize(MR.strings.action_filter), + title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.FilterList, iconTint = filterTint, onClick = onClickFilter, @@ -126,14 +126,14 @@ fun MangaToolbar( ) add( AppBar.OverflowAction( - title = localize(MR.strings.action_webview_refresh), + title = stringResource(MR.strings.action_webview_refresh), onClick = onClickRefresh, ), ) if (onClickEditCategory != null) { add( AppBar.OverflowAction( - title = localize(MR.strings.action_edit_categories), + title = stringResource(MR.strings.action_edit_categories), onClick = onClickEditCategory, ), ) @@ -141,7 +141,7 @@ fun MangaToolbar( if (onClickMigrate != null) { add( AppBar.OverflowAction( - title = localize(MR.strings.action_migrate), + title = stringResource(MR.strings.action_migrate), onClick = onClickMigrate, ), ) @@ -149,7 +149,7 @@ fun MangaToolbar( if (onClickShare != null) { add( AppBar.OverflowAction( - title = localize(MR.strings.action_share), + title = stringResource(MR.strings.action_share), onClick = onClickShare, ), ) diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MissingChapterCountListItem.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MissingChapterCountListItem.kt index 557b051a5..e40f1bd69 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MissingChapterCountListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MissingChapterCountListItem.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localizePlural +import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable @@ -34,7 +34,7 @@ fun MissingChapterCountListItem( ) { HorizontalDivider(modifier = Modifier.weight(1f)) Text( - text = localizePlural(MR.plurals.missing_chapters, count = count, count), + text = pluralStringResource(MR.plurals.missing_chapters, count = count, count), style = MaterialTheme.typography.labelMedium, ) HorizontalDivider(modifier = Modifier.weight(1f)) diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/ScanlatorFilterDialog.kt b/app/src/main/java/eu/kanade/presentation/manga/components/ScanlatorFilterDialog.kt index b5500b3e8..d7c46e90d 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/ScanlatorFilterDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/ScanlatorFilterDialog.kt @@ -20,9 +20,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.minimumInteractiveComponentSize import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.runtime.toMutableStateList import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -32,7 +30,7 @@ import androidx.compose.ui.window.DialogProperties import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.TextButton import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrolledToStart @@ -49,10 +47,10 @@ fun ScanlatorFilterDialog( val mutableExcludedScanlators = remember(excludedScanlators) { excludedScanlators.toMutableStateList() } AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = localize(MR.strings.exclude_scanlators)) }, + title = { Text(text = stringResource(MR.strings.exclude_scanlators)) }, text = textFunc@{ if (sortedAvailableScanlators.isEmpty()) { - Text(text = localize(MR.strings.no_scanlators_found)) + Text(text = stringResource(MR.strings.no_scanlators_found)) return@textFunc } Box { @@ -108,16 +106,16 @@ fun ScanlatorFilterDialog( confirmButton = { if (sortedAvailableScanlators.isEmpty()) { TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } } else { FlowRow { TextButton(onClick = mutableExcludedScanlators::clear) { - Text(text = localize(MR.strings.action_reset)) + Text(text = stringResource(MR.strings.action_reset)) } Spacer(modifier = Modifier.weight(1f)) TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } TextButton( onClick = { @@ -125,7 +123,7 @@ fun ScanlatorFilterDialog( onDismissRequest() }, ) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } } } diff --git a/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt b/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt index ff584e2a9..33656e388 100644 --- a/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt @@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.OpenInNew -import androidx.compose.material.icons.filled.OpenInNew import androidx.compose.material.icons.outlined.NewReleases import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -23,7 +22,7 @@ import com.halilibo.richtext.ui.string.RichTextStringStyle import eu.kanade.presentation.theme.TachiyomiTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.InfoScreen @Composable @@ -36,11 +35,11 @@ fun NewUpdateScreen( ) { InfoScreen( icon = Icons.Outlined.NewReleases, - headingText = localize(MR.strings.update_check_notification_update_available), + headingText = stringResource(MR.strings.update_check_notification_update_available), subtitleText = versionName, - acceptText = localize(MR.strings.update_check_confirm), + acceptText = stringResource(MR.strings.update_check_confirm), onAcceptClick = onAcceptUpdate, - rejectText = localize(MR.strings.action_not_now), + rejectText = stringResource(MR.strings.action_not_now), onRejectClick = onRejectUpdate, ) { Material3RichText( @@ -59,7 +58,7 @@ fun NewUpdateScreen( onClick = onOpenInBrowser, modifier = Modifier.padding(top = MaterialTheme.padding.small), ) { - Text(text = localize(MR.strings.update_check_open)) + Text(text = stringResource(MR.strings.update_check_open)) Spacer(modifier = Modifier.width(MaterialTheme.padding.tiny)) Icon(imageVector = Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt b/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt index 052fd0d95..c2ef84915 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.graphics.vector.ImageVector import eu.kanade.tachiyomi.data.track.Tracker import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.core.preference.Preference as PreferenceData sealed class Preference { @@ -112,7 +112,7 @@ sealed class Preference { v.map { e[it] } .takeIf { it.isNotEmpty() } ?.joinToString() - } ?: localize(MR.strings.none) + } ?: stringResource(MR.strings.none) subtitle?.format(combined) }, override val icon: ImageVector? = null, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScaffold.kt b/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScaffold.kt index 541dd6a53..bc68af5fc 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScaffold.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScaffold.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.components.AppBar import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun PreferenceScaffold( @@ -17,7 +17,7 @@ fun PreferenceScaffold( Scaffold( topBar = { AppBar( - title = localize(titleRes), + title = stringResource(titleRes), navigateUp = onBackPressed, actions = actions, scrollBehavior = it, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/Commons.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/Commons.kt index a5acb0fb1..dc128a7aa 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/Commons.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/Commons.kt @@ -6,7 +6,7 @@ import androidx.compose.ui.platform.LocalContext import eu.kanade.presentation.category.visualName import tachiyomi.domain.category.model.Category import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource /** * Returns a string of categories name for settings subtitle @@ -34,15 +34,15 @@ fun getCategoriesLabel( includedCategories.isNotEmpty() && includedCategories.size != allCategories.size -> includedCategories.joinToString { it.visualName(context) } // All explicitly selected - includedCategories.size == allCategories.size -> localize(MR.strings.all) - allExcluded -> localize(MR.strings.none) - else -> localize(MR.strings.all) + includedCategories.size == allCategories.size -> stringResource(MR.strings.all) + allExcluded -> stringResource(MR.strings.none) + else -> stringResource(MR.strings.all) } val excludedItemsText = when { - excludedCategories.isEmpty() -> localize(MR.strings.none) - allExcluded -> localize(MR.strings.all) + excludedCategories.isEmpty() -> stringResource(MR.strings.none) + allExcluded -> stringResource(MR.strings.all) else -> excludedCategories.joinToString { it.visualName(context) } } - return localize(MR.strings.include, includedItemsText) + "\n" + - localize(MR.strings.exclude, excludedItemsText) + return stringResource(MR.strings.include, includedItemsText) + "\n" + + stringResource(MR.strings.exclude, excludedItemsText) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt index 7c03c786a..6081ec45b 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt @@ -27,9 +27,9 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.merge import org.xmlpull.v1.XmlPullParser -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -80,26 +80,26 @@ object SettingsAppearanceScreen : SearchableSettings { } return Preference.PreferenceGroup( - title = localize(MR.strings.pref_category_theme), + title = stringResource(MR.strings.pref_category_theme), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = themeModePref, - title = localize(MR.strings.pref_theme_mode), + title = stringResource(MR.strings.pref_theme_mode), entries = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mapOf( - ThemeMode.SYSTEM to localize(MR.strings.theme_system), - ThemeMode.LIGHT to localize(MR.strings.theme_light), - ThemeMode.DARK to localize(MR.strings.theme_dark), + ThemeMode.SYSTEM to stringResource(MR.strings.theme_system), + ThemeMode.LIGHT to stringResource(MR.strings.theme_light), + ThemeMode.DARK to stringResource(MR.strings.theme_dark), ) } else { mapOf( - ThemeMode.LIGHT to localize(MR.strings.theme_light), - ThemeMode.DARK to localize(MR.strings.theme_dark), + ThemeMode.LIGHT to stringResource(MR.strings.theme_light), + ThemeMode.DARK to stringResource(MR.strings.theme_dark), ) }, ), Preference.PreferenceItem.CustomPreference( - title = localize(MR.strings.pref_app_theme), + title = stringResource(MR.strings.pref_app_theme), ) { item -> val value by appThemePref.collectAsState() AppThemePreferenceWidget( @@ -111,7 +111,7 @@ object SettingsAppearanceScreen : SearchableSettings { }, Preference.PreferenceItem.SwitchPreference( pref = amoledPref, - title = localize(MR.strings.pref_dark_theme_pure_black), + title = stringResource(MR.strings.pref_dark_theme_pure_black), enabled = themeMode != ThemeMode.LIGHT, ), ), @@ -144,11 +144,11 @@ object SettingsAppearanceScreen : SearchableSettings { } return Preference.PreferenceGroup( - title = localize(MR.strings.pref_category_display), + title = stringResource(MR.strings.pref_category_display), preferenceItems = listOf( Preference.PreferenceItem.BasicListPreference( value = currentLanguage, - title = localize(MR.strings.pref_app_language), + title = stringResource(MR.strings.pref_app_language), entries = langs, onValueChanged = { newValue -> currentLanguage = newValue @@ -157,8 +157,8 @@ object SettingsAppearanceScreen : SearchableSettings { ), Preference.PreferenceItem.ListPreference( pref = uiPreferences.tabletUiMode(), - title = localize(MR.strings.pref_tablet_ui_mode), - entries = TabletUiMode.entries.associateWith { localize(it.titleRes) }, + title = stringResource(MR.strings.pref_tablet_ui_mode), + entries = TabletUiMode.entries.associateWith { stringResource(it.titleRes) }, onValueChanged = { context.toast(MR.strings.requires_app_restart) true @@ -166,19 +166,19 @@ object SettingsAppearanceScreen : SearchableSettings { ), Preference.PreferenceItem.ListPreference( pref = uiPreferences.dateFormat(), - title = localize(MR.strings.pref_date_format), + title = stringResource(MR.strings.pref_date_format), entries = DateFormats .associateWith { val formattedDate = UiPreferences.dateFormat(it).format(now) - "${it.ifEmpty { localize(MR.strings.label_default) }} ($formattedDate)" + "${it.ifEmpty { stringResource(MR.strings.label_default) }} ($formattedDate)" }, ), Preference.PreferenceItem.SwitchPreference( pref = uiPreferences.relativeTime(), - title = localize(MR.strings.pref_relative_format), - subtitle = localize( + title = stringResource(MR.strings.pref_relative_format), + subtitle = stringResource( MR.strings.pref_relative_format_summary, - localize(MR.strings.relative_time_today), + stringResource(MR.strings.relative_time_today), formattedNow, ), ), @@ -205,7 +205,7 @@ object SettingsAppearanceScreen : SearchableSettings { } langs.sortBy { it.second } - langs.add(0, Pair("", context.localize(MR.strings.label_default))) + langs.add(0, Pair("", context.stringResource(MR.strings.label_default))) return langs.toMap() } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt index 84bb70198..4900d47b8 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt @@ -44,14 +44,14 @@ import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.toast import logcat.LogPriority -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchNonCancellable import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.backup.service.BackupPreferences import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -82,7 +82,7 @@ object SettingsDataScreen : SearchableSettings { val lastAutoBackup by backupPreferences.lastAutoBackupTimestamp().collectAsState() return Preference.PreferenceGroup( - title = localize(MR.strings.label_backup), + title = stringResource(MR.strings.label_backup), preferenceItems = listOf( // Manual actions getCreateBackupPref(), @@ -91,14 +91,14 @@ object SettingsDataScreen : SearchableSettings { // Automatic backups Preference.PreferenceItem.ListPreference( pref = backupIntervalPref, - title = localize(MR.strings.pref_backup_interval), + title = stringResource(MR.strings.pref_backup_interval), entries = mapOf( - 0 to localize(MR.strings.off), - 6 to localize(MR.strings.update_6hour), - 12 to localize(MR.strings.update_12hour), - 24 to localize(MR.strings.update_24hour), - 48 to localize(MR.strings.update_48hour), - 168 to localize(MR.strings.update_weekly), + 0 to stringResource(MR.strings.off), + 6 to stringResource(MR.strings.update_6hour), + 12 to stringResource(MR.strings.update_12hour), + 24 to stringResource(MR.strings.update_24hour), + 48 to stringResource(MR.strings.update_48hour), + 168 to stringResource(MR.strings.update_weekly), ), onValueChanged = { BackupCreateJob.setupTask(context, it) @@ -108,12 +108,12 @@ object SettingsDataScreen : SearchableSettings { Preference.PreferenceItem.ListPreference( pref = backupPreferences.numberOfBackups(), enabled = backupInterval != 0, - title = localize(MR.strings.pref_backup_slots), + title = stringResource(MR.strings.pref_backup_slots), entries = listOf(2, 3, 4, 5).associateWith { it.toString() }, ), Preference.PreferenceItem.InfoPreference( - localize(MR.strings.backup_info) + "\n\n" + - localize(MR.strings.last_auto_backup_info, relativeTimeSpanString(lastAutoBackup)), + stringResource(MR.strings.backup_info) + "\n\n" + + stringResource(MR.strings.last_auto_backup_info, relativeTimeSpanString(lastAutoBackup)), ), ), ) @@ -123,8 +123,8 @@ object SettingsDataScreen : SearchableSettings { private fun getCreateBackupPref(): Preference.PreferenceItem.TextPreference { val navigator = LocalNavigator.currentOrThrow return Preference.PreferenceItem.TextPreference( - title = localize(MR.strings.pref_create_backup), - subtitle = localize(MR.strings.pref_create_backup_summ), + title = stringResource(MR.strings.pref_create_backup), + subtitle = stringResource(MR.strings.pref_create_backup_summ), onClick = { navigator.push(CreateBackupScreen()) }, ) } @@ -139,7 +139,7 @@ object SettingsDataScreen : SearchableSettings { is InvalidRestore -> { AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = localize(MR.strings.invalid_backup_file)) }, + title = { Text(text = stringResource(MR.strings.invalid_backup_file)) }, text = { Text(text = listOfNotNull(err.uri, err.message).joinToString("\n\n")) }, dismissButton = { TextButton( @@ -148,12 +148,12 @@ object SettingsDataScreen : SearchableSettings { onDismissRequest() }, ) { - Text(text = localize(MR.strings.action_copy_to_clipboard)) + Text(text = stringResource(MR.strings.action_copy_to_clipboard)) } }, confirmButton = { TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) @@ -161,15 +161,15 @@ object SettingsDataScreen : SearchableSettings { is MissingRestoreComponents -> { AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = localize(MR.strings.pref_restore_backup)) }, + title = { Text(text = stringResource(MR.strings.pref_restore_backup)) }, text = { Column( modifier = Modifier.verticalScroll(rememberScrollState()), ) { val msg = buildString { - append(localize(MR.strings.backup_restore_content_full)) + append(stringResource(MR.strings.backup_restore_content_full)) if (err.sources.isNotEmpty()) { - append("\n\n").append(localize(MR.strings.backup_restore_missing_sources)) + append("\n\n").append(stringResource(MR.strings.backup_restore_missing_sources)) err.sources.joinTo( this, separator = "\n- ", @@ -177,7 +177,9 @@ object SettingsDataScreen : SearchableSettings { ) } if (err.trackers.isNotEmpty()) { - append("\n\n").append(localize(MR.strings.backup_restore_missing_trackers)) + append( + "\n\n", + ).append(stringResource(MR.strings.backup_restore_missing_trackers)) err.trackers.joinTo( this, separator = "\n- ", @@ -195,7 +197,7 @@ object SettingsDataScreen : SearchableSettings { onDismissRequest() }, ) { - Text(text = localize(MR.strings.action_restore)) + Text(text = stringResource(MR.strings.action_restore)) } }, ) @@ -208,7 +210,7 @@ object SettingsDataScreen : SearchableSettings { object : ActivityResultContracts.GetContent() { override fun createIntent(context: Context, input: String): Intent { val intent = super.createIntent(context, input) - return Intent.createChooser(intent, context.localize(MR.strings.file_select_backup)) + return Intent.createChooser(intent, context.stringResource(MR.strings.file_select_backup)) } }, ) { @@ -233,8 +235,8 @@ object SettingsDataScreen : SearchableSettings { } return Preference.PreferenceItem.TextPreference( - title = localize(MR.strings.pref_restore_backup), - subtitle = localize(MR.strings.pref_restore_backup_summ), + title = stringResource(MR.strings.pref_restore_backup), + subtitle = stringResource(MR.strings.pref_restore_backup_summ), onClick = { if (!BackupRestoreJob.isRunning(context)) { if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) { @@ -266,19 +268,19 @@ object SettingsDataScreen : SearchableSettings { // SY <-- return Preference.PreferenceGroup( - title = localize(MR.strings.label_data), + title = stringResource(MR.strings.label_data), preferenceItems = listOf( getStorageInfoPref(cacheReadableSize), Preference.PreferenceItem.TextPreference( - title = localize(MR.strings.pref_clear_chapter_cache), - subtitle = localize(MR.strings.used_cache, cacheReadableSize), + title = stringResource(MR.strings.pref_clear_chapter_cache), + subtitle = stringResource(MR.strings.used_cache, cacheReadableSize), onClick = { scope.launchNonCancellable { try { val deletedFiles = chapterCache.clear() withUIContext { - context.toast(context.localize(MR.strings.cache_deleted, deletedFiles)) + context.toast(context.stringResource(MR.strings.cache_deleted, deletedFiles)) cacheReadableSizeSema++ } } catch (e: Throwable) { @@ -310,7 +312,7 @@ object SettingsDataScreen : SearchableSettings { // SY <-- Preference.PreferenceItem.SwitchPreference( pref = libraryPreferences.autoClearChapterCache(), - title = localize(MR.strings.pref_auto_clear_chapter_cache), + title = stringResource(MR.strings.pref_auto_clear_chapter_cache), ), ), ) @@ -329,10 +331,10 @@ object SettingsDataScreen : SearchableSettings { } return Preference.PreferenceItem.CustomPreference( - title = localize(MR.strings.pref_storage_usage), + title = stringResource(MR.strings.pref_storage_usage), ) { BasePreferenceWidget( - title = localize(MR.strings.pref_storage_usage), + title = stringResource(MR.strings.pref_storage_usage), subcomponent = { // TODO: downloads, SD cards, bar representation?, i18n Box(modifier = Modifier.padding(horizontal = PrefsHorizontalPadding)) { diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt index 888e47681..9fb1e829b 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt @@ -24,8 +24,8 @@ import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.model.Category import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize -import tachiyomi.presentation.core.i18n.localizePlural +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -47,16 +47,16 @@ object SettingsDownloadScreen : SearchableSettings { getDownloadLocationPreference(downloadPreferences = downloadPreferences), Preference.PreferenceItem.SwitchPreference( pref = downloadPreferences.downloadOnlyOverWifi(), - title = localize(MR.strings.connected_to_wifi), + title = stringResource(MR.strings.connected_to_wifi), ), Preference.PreferenceItem.SwitchPreference( pref = downloadPreferences.saveChaptersAsCBZ(), - title = localize(MR.strings.save_chapter_as_cbz), + title = stringResource(MR.strings.save_chapter_as_cbz), ), Preference.PreferenceItem.SwitchPreference( pref = downloadPreferences.splitTallImages(), - title = localize(MR.strings.split_tall_images), - subtitle = localize(MR.strings.split_tall_images_summary), + title = stringResource(MR.strings.split_tall_images), + subtitle = stringResource(MR.strings.split_tall_images_summary), ), getDeleteChaptersGroup( downloadPreferences = downloadPreferences, @@ -97,15 +97,15 @@ object SettingsDownloadScreen : SearchableSettings { return Preference.PreferenceItem.ListPreference( pref = currentDirPref, - title = localize(MR.strings.pref_download_directory), + title = stringResource(MR.strings.pref_download_directory), subtitleProvider = { value, _ -> remember(value) { UniFile.fromUri(context, value.toUri())?.filePath - } ?: localize(MR.strings.invalid_location, value) + } ?: stringResource(MR.strings.invalid_location, value) }, entries = mapOf( defaultDirPair, - customDirEntryKey to localize(MR.strings.custom_dir), + customDirEntryKey to stringResource(MR.strings.custom_dir), ), onValueChanged = { val default = it == defaultDirPair.first @@ -119,7 +119,7 @@ object SettingsDownloadScreen : SearchableSettings { @Composable private fun rememberDefaultDownloadDir(): Pair { - val appName = localize(MR.strings.app_name) + val appName = stringResource(MR.strings.app_name) return remember { val file = UniFile.fromFile( File( @@ -137,27 +137,27 @@ object SettingsDownloadScreen : SearchableSettings { categories: List, ): Preference.PreferenceGroup { return Preference.PreferenceGroup( - title = localize(MR.strings.pref_category_delete_chapters), + title = stringResource(MR.strings.pref_category_delete_chapters), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = downloadPreferences.removeAfterMarkedAsRead(), - title = localize(MR.strings.pref_remove_after_marked_as_read), + title = stringResource(MR.strings.pref_remove_after_marked_as_read), ), Preference.PreferenceItem.ListPreference( pref = downloadPreferences.removeAfterReadSlots(), - title = localize(MR.strings.pref_remove_after_read), + title = stringResource(MR.strings.pref_remove_after_read), entries = mapOf( - -1 to localize(MR.strings.disabled), - 0 to localize(MR.strings.last_read_chapter), - 1 to localize(MR.strings.second_to_last), - 2 to localize(MR.strings.third_to_last), - 3 to localize(MR.strings.fourth_to_last), - 4 to localize(MR.strings.fifth_to_last), + -1 to stringResource(MR.strings.disabled), + 0 to stringResource(MR.strings.last_read_chapter), + 1 to stringResource(MR.strings.second_to_last), + 2 to stringResource(MR.strings.third_to_last), + 3 to stringResource(MR.strings.fourth_to_last), + 4 to stringResource(MR.strings.fifth_to_last), ), ), Preference.PreferenceItem.SwitchPreference( pref = downloadPreferences.removeBookmarkedChapters(), - title = localize(MR.strings.pref_remove_bookmarked_chapters), + title = stringResource(MR.strings.pref_remove_bookmarked_chapters), ), getExcludedCategoriesPreference( downloadPreferences = downloadPreferences, @@ -174,7 +174,7 @@ object SettingsDownloadScreen : SearchableSettings { ): Preference.PreferenceItem.MultiSelectListPreference { return Preference.PreferenceItem.MultiSelectListPreference( pref = downloadPreferences.removeExcludeCategories(), - title = localize(MR.strings.pref_remove_exclude_categories), + title = stringResource(MR.strings.pref_remove_exclude_categories), entries = categories().associate { it.id.toString() to it.visualName }, ) } @@ -195,8 +195,8 @@ object SettingsDownloadScreen : SearchableSettings { var showDialog by rememberSaveable { mutableStateOf(false) } if (showDialog) { TriStateListDialog( - title = localize(MR.strings.categories), - message = localize(MR.strings.pref_download_new_categories_details), + title = stringResource(MR.strings.categories), + message = stringResource(MR.strings.pref_download_new_categories_details), items = allCategories, initialChecked = included.mapNotNull { id -> allCategories.find { it.id.toString() == id } }, initialInversed = excluded.mapNotNull { id -> allCategories.find { it.id.toString() == id } }, @@ -211,14 +211,14 @@ object SettingsDownloadScreen : SearchableSettings { } return Preference.PreferenceGroup( - title = localize(MR.strings.pref_category_auto_download), + title = stringResource(MR.strings.pref_category_auto_download), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = downloadNewChaptersPref, - title = localize(MR.strings.pref_download_new), + title = stringResource(MR.strings.pref_download_new), ), Preference.PreferenceItem.TextPreference( - title = localize(MR.strings.categories), + title = stringResource(MR.strings.categories), subtitle = getCategoriesLabel( allCategories = allCategories, included = included, @@ -236,20 +236,20 @@ object SettingsDownloadScreen : SearchableSettings { downloadPreferences: DownloadPreferences, ): Preference.PreferenceGroup { return Preference.PreferenceGroup( - title = localize(MR.strings.download_ahead), + title = stringResource(MR.strings.download_ahead), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = downloadPreferences.autoDownloadWhileReading(), - title = localize(MR.strings.auto_download_while_reading), + title = stringResource(MR.strings.auto_download_while_reading), entries = listOf(0, 2, 3, 5, 10).associateWith { if (it == 0) { - localize(MR.strings.disabled) + stringResource(MR.strings.disabled) } else { - localizePlural(MR.plurals.next_unread_chapters, count = it, it) + pluralStringResource(MR.plurals.next_unread_chapters, count = it, it) } }, ), - Preference.PreferenceItem.InfoPreference(localize(MR.strings.download_ahead_info)), + Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.download_ahead_info)), ), ) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt index b791009e3..182ca9a1c 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt @@ -54,7 +54,7 @@ import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.util.Screen import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.util.runOnEnterKeyPressed import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen @@ -118,7 +118,7 @@ class SettingsSearchScreen : Screen() { decorationBox = { if (textFieldValue.text.isEmpty()) { Text( - text = localize(MR.strings.action_search_settings), + text = stringResource(MR.strings.action_search_settings), color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyLarge, ) @@ -215,7 +215,7 @@ private fun SearchResult( when { it == null -> {} it.isEmpty() -> { - EmptyScreen(localize(MR.strings.no_results_found)) + EmptyScreen(stringResource(MR.strings.no_results_found)) } else -> { LazyColumn( @@ -264,7 +264,7 @@ private fun getIndex() = settingScreens // SY <-- .map { screen -> SettingsData( - title = localize(screen.getTitleRes()), + title = stringResource(screen.getTitleRes()), route = screen, contents = screen.getPreferences(), ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt index 076270150..4aa7a26bd 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt @@ -56,7 +56,7 @@ import tachiyomi.core.util.lang.withUIContext import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -72,7 +72,7 @@ object SettingsTrackingScreen : SearchableSettings { IconButton(onClick = { uriHandler.openUri("https://tachiyomi.org/docs/guides/tracking") }) { Icon( imageVector = Icons.AutoMirrored.Outlined.HelpOutline, - contentDescription = localize(MR.strings.tracking_guide), + contentDescription = stringResource(MR.strings.tracking_guide), ) } } @@ -109,9 +109,9 @@ object SettingsTrackingScreen : SearchableSettings { val acceptedSources = (service as EnhancedTracker).getAcceptedSources() sourceManager.getCatalogueSources().any { it::class.qualifiedName in acceptedSources } } - var enhancedTrackerInfo = localize(MR.strings.enhanced_tracking_info) + var enhancedTrackerInfo = stringResource(MR.strings.enhanced_tracking_info) if (enhancedTrackers.second.isNotEmpty()) { - val missingSourcesInfo = localize( + val missingSourcesInfo = stringResource( MR.strings.enhanced_services_not_installed, enhancedTrackers.second.joinToString { it.name }, ) @@ -121,10 +121,10 @@ object SettingsTrackingScreen : SearchableSettings { return listOf( Preference.PreferenceItem.SwitchPreference( pref = trackPreferences.autoUpdateTrack(), - title = localize(MR.strings.pref_auto_update_manga_sync), + title = stringResource(MR.strings.pref_auto_update_manga_sync), ), Preference.PreferenceGroup( - title = localize(MR.strings.services), + title = stringResource(MR.strings.services), preferenceItems = listOf( Preference.PreferenceItem.TrackerPreference( title = trackerManager.myAnimeList.name, @@ -162,11 +162,11 @@ object SettingsTrackingScreen : SearchableSettings { login = { context.openInBrowser(BangumiApi.authUrl(), forceDefaultBrowser = true) }, logout = { dialog = LogoutDialog(trackerManager.bangumi) }, ), - Preference.PreferenceItem.InfoPreference(localize(MR.strings.tracking_info)), + Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.tracking_info)), ), ), Preference.PreferenceGroup( - title = localize(MR.strings.enhanced_services), + title = stringResource(MR.strings.enhanced_services), preferenceItems = enhancedTrackers.first .map { service -> Preference.PreferenceItem.TrackerPreference( @@ -199,13 +199,13 @@ object SettingsTrackingScreen : SearchableSettings { title = { Row(verticalAlignment = Alignment.CenterVertically) { Text( - text = localize(MR.strings.login_title, tracker.name), + text = stringResource(MR.strings.login_title, tracker.name), modifier = Modifier.weight(1f), ) IconButton(onClick = onDismissRequest) { Icon( imageVector = Icons.Outlined.Close, - contentDescription = localize(MR.strings.action_close), + contentDescription = stringResource(MR.strings.action_close), ) } } @@ -216,7 +216,7 @@ object SettingsTrackingScreen : SearchableSettings { modifier = Modifier.fillMaxWidth(), value = username, onValueChange = { username = it }, - label = { Text(text = localize(uNameStringRes)) }, + label = { Text(text = stringResource(uNameStringRes)) }, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), singleLine = true, isError = inputError && !processing, @@ -227,7 +227,7 @@ object SettingsTrackingScreen : SearchableSettings { modifier = Modifier.fillMaxWidth(), value = password, onValueChange = { password = it }, - label = { Text(text = localize(MR.strings.password)) }, + label = { Text(text = stringResource(MR.strings.password)) }, trailingIcon = { IconButton(onClick = { hidePassword = !hidePassword }) { Icon( @@ -274,7 +274,7 @@ object SettingsTrackingScreen : SearchableSettings { }, ) { val id = if (processing) MR.strings.loading else MR.strings.login - Text(text = localize(id)) + Text(text = stringResource(id)) } }, ) @@ -307,7 +307,7 @@ object SettingsTrackingScreen : SearchableSettings { onDismissRequest = onDismissRequest, title = { Text( - text = localize(MR.strings.logout_title, tracker.name), + text = stringResource(MR.strings.logout_title, tracker.name), textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth(), ) @@ -318,7 +318,7 @@ object SettingsTrackingScreen : SearchableSettings { modifier = Modifier.weight(1f), onClick = onDismissRequest, ) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } Button( modifier = Modifier.weight(1f), @@ -332,7 +332,7 @@ object SettingsTrackingScreen : SearchableSettings { contentColor = MaterialTheme.colorScheme.onError, ), ) { - Text(text = localize(MR.strings.logout)) + Text(text = stringResource(MR.strings.logout)) } } }, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLibraryLicenseScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLibraryLicenseScreen.kt index 27f7185bb..725ed6407 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLibraryLicenseScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLibraryLicenseScreen.kt @@ -21,7 +21,7 @@ import eu.kanade.presentation.util.Screen import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource class OpenSourceLibraryLicenseScreen( private val name: String, @@ -44,7 +44,7 @@ class OpenSourceLibraryLicenseScreen( AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.website), + title = stringResource(MR.strings.website), icon = Icons.Default.Public, onClick = { uriHandler.openUri(website) }, ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLicensesScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLicensesScreen.kt index 12f4b6290..7d072e401 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLicensesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLicensesScreen.kt @@ -13,7 +13,7 @@ import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.util.Screen import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource class OpenSourceLicensesScreen : Screen() { @@ -23,7 +23,7 @@ class OpenSourceLicensesScreen : Screen() { Scaffold( topBar = { scrollBehavior -> AppBar( - title = localize(MR.strings.licenses), + title = stringResource(MR.strings.licenses), navigateUp = navigator::pop, scrollBehavior = scrollBehavior, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/BackupSchemaScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/BackupSchemaScreen.kt index 41cfbc9c6..d5652b16a 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/BackupSchemaScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/BackupSchemaScreen.kt @@ -23,7 +23,7 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.serialization.protobuf.schema.ProtoBufSchemaGenerator import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource class BackupSchemaScreen : Screen() { @@ -47,7 +47,7 @@ class BackupSchemaScreen : Screen() { AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.action_copy_to_clipboard), + title = stringResource(MR.strings.action_copy_to_clipboard), icon = Icons.Default.ContentCopy, onClick = { context.copyToClipboard(title, schema) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt index 08925e01c..2c891e271 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt @@ -37,7 +37,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.plus class WorkerInfoScreen : Screen() { @@ -65,7 +65,7 @@ class WorkerInfoScreen : Screen() { AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.action_copy_to_clipboard), + title = stringResource(MR.strings.action_copy_to_clipboard), icon = Icons.Default.ContentCopy, onClick = { context.copyToClipboard(title, enqueued + finished + running) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt index b69550d55..5b7599722 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt @@ -46,7 +46,7 @@ import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.isDynamicColorAvailable import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable @@ -104,7 +104,7 @@ private fun AppThemesList( Spacer(modifier = Modifier.height(8.dp)) Text( - text = localize(appTheme.titleRes!!), + text = stringResource(appTheme.titleRes!!), modifier = Modifier .fillMaxWidth() .secondaryItemAlpha(), @@ -167,7 +167,7 @@ fun AppThemePreviewItem( if (selected) { Icon( imageVector = Icons.Filled.CheckCircle, - contentDescription = localize(MR.strings.selected), + contentDescription = stringResource(MR.strings.selected), tint = MaterialTheme.colorScheme.primary, ) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/EditTextPreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/EditTextPreferenceWidget.kt index 95141bdb8..00d8f16d4 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/EditTextPreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/EditTextPreferenceWidget.kt @@ -23,7 +23,7 @@ import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.window.DialogProperties import kotlinx.coroutines.launch import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun EditTextPreferenceWidget( @@ -83,12 +83,12 @@ fun EditTextPreferenceWidget( } }, ) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/InfoWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/InfoWidget.kt index f77b1db5e..5d9d8db85 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/InfoWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/InfoWidget.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable @@ -45,7 +45,7 @@ internal fun InfoWidget(text: String) { private fun InfoWidgetPreview() { TachiyomiTheme { Surface { - InfoWidget(text = localize(MR.strings.download_ahead_info)) + InfoWidget(text = stringResource(MR.strings.download_ahead_info)) } } } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/ListPreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/ListPreferenceWidget.kt index 44e13aeab..c8e757491 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/ListPreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/ListPreferenceWidget.kt @@ -25,7 +25,7 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.unit.dp import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrolledToStart @@ -75,7 +75,7 @@ fun ListPreferenceWidget( }, confirmButton = { TextButton(onClick = { isDialogShown = false }) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/MultiSelectListPreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/MultiSelectListPreferenceWidget.kt index be4fbe9a0..c9ac35184 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/MultiSelectListPreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/MultiSelectListPreferenceWidget.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.window.DialogProperties import eu.kanade.presentation.more.settings.Preference import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun MultiSelectListPreferenceWidget( @@ -70,12 +70,12 @@ fun MultiSelectListPreferenceWidget( isDialogShown = false }, ) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = { isDialogShown = false }) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/TrackingPreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/TrackingPreferenceWidget.kt index 02e9de53f..81362b66c 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/TrackingPreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/TrackingPreferenceWidget.kt @@ -20,7 +20,7 @@ import eu.kanade.presentation.more.settings.LocalPreferenceHighlighted import eu.kanade.presentation.track.components.TrackLogoIcon import eu.kanade.tachiyomi.data.track.Tracker import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun TrackingPreferenceWidget( @@ -55,7 +55,7 @@ fun TrackingPreferenceWidget( .padding(4.dp) .size(32.dp), tint = Color(0xFF4CAF50), - contentDescription = localize(MR.strings.login_success), + contentDescription = stringResource(MR.strings.login_success), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/TriStateListDialog.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/TriStateListDialog.kt index 0014f5dc5..f6e195e4d 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/TriStateListDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/TriStateListDialog.kt @@ -29,7 +29,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrolledToStart @@ -102,7 +102,7 @@ fun TriStateListDialog( } else { MaterialTheme.colorScheme.primary }, - contentDescription = localize( + contentDescription = stringResource( when (state) { State.UNCHECKED -> MR.strings.not_selected State.CHECKED -> MR.strings.selected @@ -130,7 +130,7 @@ fun TriStateListDialog( }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -145,7 +145,7 @@ fun TriStateListDialog( onValueChanged(included, excluded) }, ) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/stats/StatsScreenContent.kt b/app/src/main/java/eu/kanade/presentation/more/stats/StatsScreenContent.kt index 71bbb73b9..f35336d50 100644 --- a/app/src/main/java/eu/kanade/presentation/more/stats/StatsScreenContent.kt +++ b/app/src/main/java/eu/kanade/presentation/more/stats/StatsScreenContent.kt @@ -20,7 +20,7 @@ import eu.kanade.presentation.more.stats.data.StatsData import eu.kanade.presentation.util.toDurationString import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import java.util.Locale import kotlin.time.DurationUnit import kotlin.time.toDuration @@ -55,7 +55,7 @@ fun StatsScreenContent( private fun OverviewSection( data: StatsData.Overview, ) { - val none = localize(MR.strings.none) + val none = stringResource(MR.strings.none) val context = LocalContext.current val readDurationString = remember(data.totalReadDuration) { data.totalReadDuration @@ -66,17 +66,17 @@ private fun OverviewSection( Row { StatsOverviewItem( title = data.libraryMangaCount.toString(), - subtitle = localize(MR.strings.in_library), + subtitle = stringResource(MR.strings.in_library), icon = Icons.Outlined.CollectionsBookmark, ) StatsOverviewItem( title = data.completedMangaCount.toString(), - subtitle = localize(MR.strings.label_completed_titles), + subtitle = stringResource(MR.strings.label_completed_titles), icon = Icons.Outlined.LocalLibrary, ) StatsOverviewItem( title = readDurationString, - subtitle = localize(MR.strings.label_read_duration), + subtitle = stringResource(MR.strings.label_read_duration), icon = Icons.Outlined.Schedule, ) } @@ -91,15 +91,15 @@ private fun TitlesStats( Row { StatsItem( data.globalUpdateItemCount.toString(), - localize(MR.strings.label_titles_in_global_update), + stringResource(MR.strings.label_titles_in_global_update), ) StatsItem( data.startedMangaCount.toString(), - localize(MR.strings.label_started), + stringResource(MR.strings.label_started), ) StatsItem( data.localMangaCount.toString(), - localize(MR.strings.label_local), + stringResource(MR.strings.label_local), ) } } @@ -113,15 +113,15 @@ private fun ChapterStats( Row { StatsItem( data.totalChapterCount.toString(), - localize(MR.strings.label_total_chapters), + stringResource(MR.strings.label_total_chapters), ) StatsItem( data.readChapterCount.toString(), - localize(MR.strings.label_read_chapters), + stringResource(MR.strings.label_read_chapters), ) StatsItem( data.downloadCount.toString(), - localize(MR.strings.label_downloaded), + stringResource(MR.strings.label_downloaded), ) } } @@ -131,7 +131,7 @@ private fun ChapterStats( private fun TrackerStats( data: StatsData.Trackers, ) { - val notApplicable = localize(MR.strings.not_applicable) + val notApplicable = stringResource(MR.strings.not_applicable) val meanScoreStr = remember(data.trackedTitleCount, data.meanScore) { if (data.trackedTitleCount > 0 && !data.meanScore.isNaN()) { // All other numbers are localized in English @@ -144,15 +144,15 @@ private fun TrackerStats( Row { StatsItem( data.trackedTitleCount.toString(), - localize(MR.strings.label_tracked_titles), + stringResource(MR.strings.label_tracked_titles), ) StatsItem( meanScoreStr, - localize(MR.strings.label_mean_score), + stringResource(MR.strings.label_mean_score), ) StatsItem( data.trackerCount.toString(), - localize(MR.strings.label_used), + stringResource(MR.strings.label_used), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/more/stats/components/StatsSection.kt b/app/src/main/java/eu/kanade/presentation/more/stats/components/StatsSection.kt index cb4596bfd..d5795fab2 100644 --- a/app/src/main/java/eu/kanade/presentation/more/stats/components/StatsSection.kt +++ b/app/src/main/java/eu/kanade/presentation/more/stats/components/StatsSection.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import dev.icerock.moko.resources.StringResource import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun StatsSection( @@ -19,7 +19,7 @@ fun StatsSection( ) { Text( modifier = Modifier.padding(horizontal = MaterialTheme.padding.extraLarge), - text = localize(titleRes), + text = stringResource(titleRes), style = MaterialTheme.typography.titleSmall, ) ElevatedCard( diff --git a/app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt b/app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt index 4f94b3e3d..422192383 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt @@ -41,8 +41,8 @@ import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import tachiyomi.domain.chapter.service.calculateChapterGap import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize -import tachiyomi.presentation.core.i18n.localizePlural +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable @@ -58,25 +58,25 @@ fun ChapterTransition( when (transition) { is ChapterTransition.Prev -> { TransitionText( - topLabel = localize(MR.strings.transition_previous), + topLabel = stringResource(MR.strings.transition_previous), topChapter = goingToChapter, topChapterDownloaded = goingToChapterDownloaded, - bottomLabel = localize(MR.strings.transition_current), + bottomLabel = stringResource(MR.strings.transition_current), bottomChapter = currChapter, bottomChapterDownloaded = currChapterDownloaded, - fallbackLabel = localize(MR.strings.transition_no_previous), + fallbackLabel = stringResource(MR.strings.transition_no_previous), chapterGap = calculateChapterGap(currChapter.toDomainChapter(), goingToChapter?.toDomainChapter()), ) } is ChapterTransition.Next -> { TransitionText( - topLabel = localize(MR.strings.transition_finished), + topLabel = stringResource(MR.strings.transition_finished), topChapter = currChapter, topChapterDownloaded = currChapterDownloaded, - bottomLabel = localize(MR.strings.transition_next), + bottomLabel = stringResource(MR.strings.transition_next), bottomChapter = goingToChapter, bottomChapterDownloaded = goingToChapterDownloaded, - fallbackLabel = localize(MR.strings.transition_no_next), + fallbackLabel = stringResource(MR.strings.transition_no_next), chapterGap = calculateChapterGap(goingToChapter?.toDomainChapter(), currChapter.toDomainChapter()), ) } @@ -191,7 +191,7 @@ private fun ChapterGapWarning( ) Text( - text = localizePlural(MR.plurals.missing_chapters_warning, count = gapCount, gapCount), + text = pluralStringResource(MR.plurals.missing_chapters_warning, count = gapCount, gapCount), style = MaterialTheme.typography.bodyMedium, ) } @@ -245,7 +245,7 @@ private fun ChapterText( ) { Icon( imageVector = Icons.Filled.CheckCircle, - contentDescription = localize(MR.strings.label_downloaded), + contentDescription = stringResource(MR.strings.label_downloaded), ) }, ), diff --git a/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt index 27f4173c9..ea6f3d58f 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt @@ -24,7 +24,7 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsIconGrid import tachiyomi.presentation.core.components.material.IconToggleButton -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource private val ReaderOrientationsWithoutDefault = ReaderOrientation.entries - ReaderOrientation.DEFAULT @@ -73,7 +73,7 @@ private fun DialogContent( }, modifier = Modifier.fillMaxWidth(), imageVector = ImageVector.vectorResource(mode.iconRes), - title = localize(mode.stringRes), + title = stringResource(mode.stringRes), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt index 3590f4601..25c0893c6 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt @@ -24,7 +24,7 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsIconGrid import tachiyomi.presentation.core.components.material.IconToggleButton -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource private val ReadingModesWithoutDefault = ReadingMode.entries - ReadingMode.DEFAULT @@ -69,7 +69,7 @@ private fun DialogContent( }, modifier = Modifier.fillMaxWidth(), imageVector = ImageVector.vectorResource(mode.iconRes), - title = localize(mode.stringRes), + title = stringResource(mode.stringRes), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/reader/components/ModeSelectionDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/components/ModeSelectionDialog.kt index d519e3177..14635e50f 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/components/ModeSelectionDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/components/ModeSelectionDialog.kt @@ -21,7 +21,7 @@ import androidx.compose.ui.unit.dp import eu.kanade.presentation.theme.TachiyomiTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsItemsPaddings -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun ModeSelectionDialog( @@ -40,7 +40,7 @@ fun ModeSelectionDialog( ) { onUseDefault?.let { OutlinedButton(onClick = it) { - Text(text = localize(MR.strings.action_revert_to_default)) + Text(text = stringResource(MR.strings.action_revert_to_default)) } } @@ -57,7 +57,7 @@ fun ModeSelectionDialog( imageVector = Icons.Outlined.Check, contentDescription = null, ) - Text(text = localize(MR.strings.action_apply)) + Text(text = stringResource(MR.strings.action_apply)) } } } diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt index 3b8d39b78..1e7324956 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt @@ -16,7 +16,7 @@ import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @Composable @@ -38,11 +38,11 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) ), ) } - }.map { localize(it) } + }.map { stringResource(it) } val customBrightness by screenModel.preferences.customBrightness().collectAsState() CheckboxItem( - label = localize(MR.strings.pref_custom_brightness), + label = stringResource(MR.strings.pref_custom_brightness), pref = screenModel.preferences.customBrightness(), ) @@ -55,7 +55,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) if (customBrightness) { val customBrightnessValue by screenModel.preferences.customBrightnessValue().collectAsState() SliderItem( - label = localize(MR.strings.pref_custom_brightness), + label = stringResource(MR.strings.pref_custom_brightness), min = -75, max = 100, value = customBrightnessValue, @@ -66,13 +66,13 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) val colorFilter by screenModel.preferences.colorFilter().collectAsState() CheckboxItem( - label = localize(MR.strings.pref_custom_color_filter), + label = stringResource(MR.strings.pref_custom_color_filter), pref = screenModel.preferences.colorFilter(), ) if (colorFilter) { val colorFilterValue by screenModel.preferences.colorFilterValue().collectAsState() SliderItem( - label = localize(MR.strings.color_filter_r_value), + label = stringResource(MR.strings.color_filter_r_value), max = 255, value = colorFilterValue.red, valueText = colorFilterValue.red.toString(), @@ -83,7 +83,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) }, ) SliderItem( - label = localize(MR.strings.color_filter_g_value), + label = stringResource(MR.strings.color_filter_g_value), max = 255, value = colorFilterValue.green, valueText = colorFilterValue.green.toString(), @@ -94,7 +94,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) }, ) SliderItem( - label = localize(MR.strings.color_filter_b_value), + label = stringResource(MR.strings.color_filter_b_value), max = 255, value = colorFilterValue.blue, valueText = colorFilterValue.blue.toString(), @@ -105,7 +105,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) }, ) SliderItem( - label = localize(MR.strings.color_filter_a_value), + label = stringResource(MR.strings.color_filter_a_value), max = 255, value = colorFilterValue.alpha, valueText = colorFilterValue.alpha.toString(), @@ -129,11 +129,11 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) } CheckboxItem( - label = localize(MR.strings.pref_grayscale), + label = stringResource(MR.strings.pref_grayscale), pref = screenModel.preferences.grayscale(), ) CheckboxItem( - label = localize(MR.strings.pref_inverted_colors), + label = stringResource(MR.strings.pref_inverted_colors), pref = screenModel.preferences.invertedColors(), ) } diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ReaderSettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ReaderSettingsDialog.kt index 7360a1c0a..a15c9e541 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/settings/ReaderSettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ReaderSettingsDialog.kt @@ -17,7 +17,7 @@ import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun ReaderSettingsDialog( @@ -27,9 +27,9 @@ fun ReaderSettingsDialog( screenModel: ReaderSettingsScreenModel, ) { val tabTitles = persistentListOf( - localize(MR.strings.pref_category_reading_mode), - localize(MR.strings.pref_category_general), - localize(MR.strings.custom_filter), + stringResource(MR.strings.pref_category_reading_mode), + stringResource(MR.strings.pref_category_general), + stringResource(MR.strings.custom_filter), ) val pagerState = rememberPagerState { tabTitles.size } diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt index 1bce05b97..a991377b6 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt @@ -19,7 +19,7 @@ import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.HeadingItem import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import java.text.NumberFormat @@ -34,7 +34,7 @@ internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) FilterChip( selected = it == readingMode, onClick = { screenModel.onChangeReadingMode(it) }, - label = { Text(localize(it.stringRes)) }, + label = { Text(stringResource(it.stringRes)) }, ) } } @@ -45,7 +45,7 @@ internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) FilterChip( selected = it == orientation, onClick = { screenModel.onChangeOrientation(it) }, - label = { Text(localize(it.stringRes)) }, + label = { Text(stringResource(it.stringRes)) }, ) } } @@ -80,7 +80,7 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod FilterChip( selected = imageScaleType == index + 1, onClick = { screenModel.preferences.imageScaleType().set(index + 1) }, - label = { Text(localize(it)) }, + label = { Text(stringResource(it)) }, ) } } @@ -91,7 +91,7 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod FilterChip( selected = zoomStart == index + 1, onClick = { screenModel.preferences.zoomStart().set(index + 1) }, - label = { Text(localize(it)) }, + label = { Text(stringResource(it)) }, ) } } @@ -110,42 +110,42 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod // SY <-- CheckboxItem( - label = localize(MR.strings.pref_crop_borders), + label = stringResource(MR.strings.pref_crop_borders), pref = screenModel.preferences.cropBorders(), ) CheckboxItem( - label = localize(MR.strings.pref_landscape_zoom), + label = stringResource(MR.strings.pref_landscape_zoom), pref = screenModel.preferences.landscapeZoom(), ) CheckboxItem( - label = localize(MR.strings.pref_navigate_pan), + label = stringResource(MR.strings.pref_navigate_pan), pref = screenModel.preferences.navigateToPan(), ) val dualPageSplitPaged by screenModel.preferences.dualPageSplitPaged().collectAsState() CheckboxItem( - label = localize(MR.strings.pref_dual_page_split), + label = stringResource(MR.strings.pref_dual_page_split), pref = screenModel.preferences.dualPageSplitPaged(), ) if (dualPageSplitPaged) { CheckboxItem( - label = localize(MR.strings.pref_dual_page_invert), + label = stringResource(MR.strings.pref_dual_page_invert), pref = screenModel.preferences.dualPageInvertPaged(), ) } val dualPageRotateToFit by screenModel.preferences.dualPageRotateToFit().collectAsState() CheckboxItem( - label = localize(MR.strings.pref_page_rotate), + label = stringResource(MR.strings.pref_page_rotate), pref = screenModel.preferences.dualPageRotateToFit(), ) if (dualPageRotateToFit) { CheckboxItem( - label = localize(MR.strings.pref_page_rotate_invert), + label = stringResource(MR.strings.pref_page_rotate_invert), pref = screenModel.preferences.dualPageRotateToFitInvert(), ) } @@ -191,7 +191,7 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM val webtoonSidePadding by screenModel.preferences.webtoonSidePadding().collectAsState() SliderItem( - label = localize(MR.strings.pref_webtoon_side_padding), + label = stringResource(MR.strings.pref_webtoon_side_padding), min = ReaderPreferences.WEBTOON_PADDING_MIN, max = ReaderPreferences.WEBTOON_PADDING_MAX, value = webtoonSidePadding, @@ -202,7 +202,7 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM ) CheckboxItem( - label = localize(MR.strings.pref_crop_borders), + label = stringResource(MR.strings.pref_crop_borders), pref = screenModel.preferences.cropBordersWebtoon(), ) @@ -225,19 +225,19 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon().collectAsState() CheckboxItem( - label = localize(MR.strings.pref_dual_page_split), + label = stringResource(MR.strings.pref_dual_page_split), pref = screenModel.preferences.dualPageSplitWebtoon(), ) if (dualPageSplitWebtoon) { CheckboxItem( - label = localize(MR.strings.pref_dual_page_invert), + label = stringResource(MR.strings.pref_dual_page_invert), pref = screenModel.preferences.dualPageInvertWebtoon(), ) } CheckboxItem( - label = localize(MR.strings.pref_double_tap_zoom), + label = stringResource(MR.strings.pref_double_tap_zoom), pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(), ) } @@ -266,7 +266,7 @@ private fun ColumnScope.TapZonesItems( FilterChip( selected = selected == index, onClick = { onSelect(index) }, - label = { Text(localize(it)) }, + label = { Text(stringResource(it)) }, ) } } @@ -277,7 +277,7 @@ private fun ColumnScope.TapZonesItems( FilterChip( selected = it == invertMode, onClick = { onSelectInvertMode(it) }, - label = { Text(localize(it.titleRes)) }, + label = { Text(stringResource(it.titleRes)) }, ) } } diff --git a/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogHome.kt b/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogHome.kt index 3a05bc31c..78b8fc953 100644 --- a/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogHome.kt +++ b/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogHome.kt @@ -55,7 +55,7 @@ import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.ui.manga.track.TrackItem import eu.kanade.tachiyomi.util.system.copyToClipboard import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import java.text.DateFormat private const val UnsetStatusTextAlpha = 0.5F @@ -194,7 +194,7 @@ private fun TrackInfoItem( Row(modifier = Modifier.height(IntrinsicSize.Min)) { TrackDetailsItem( modifier = Modifier.weight(1f), - text = status?.let { localize(it) } ?: "", + text = status?.let { stringResource(it) } ?: "", onClick = onStatusClick, ) VerticalDivider() @@ -209,7 +209,7 @@ private fun TrackInfoItem( modifier = Modifier .weight(1f) .alpha(if (score == null) UnsetStatusTextAlpha else 1f), - text = score ?: localize(MR.strings.score), + text = score ?: stringResource(MR.strings.score), onClick = onScoreClick, ) } @@ -221,14 +221,14 @@ private fun TrackInfoItem( TrackDetailsItem( modifier = Modifier.weight(1F), text = startDate, - placeholder = localize(MR.strings.track_started_reading_date), + placeholder = stringResource(MR.strings.track_started_reading_date), onClick = onStartDateClick, ) VerticalDivider() TrackDetailsItem( modifier = Modifier.weight(1F), text = endDate, - placeholder = localize(MR.strings.track_finished_reading_date), + placeholder = stringResource(MR.strings.track_finished_reading_date), onClick = onEndDateClick, ) } @@ -279,7 +279,7 @@ private fun TrackInfoItemEmpty( .padding(start = 16.dp) .weight(1f), ) { - Text(text = localize(MR.strings.add_tracking)) + Text(text = stringResource(MR.strings.add_tracking)) } } } @@ -294,7 +294,7 @@ private fun TrackInfoItemMenu( IconButton(onClick = { expanded = true }) { Icon( imageVector = Icons.Default.MoreVert, - contentDescription = localize(MR.strings.label_more), + contentDescription = stringResource(MR.strings.label_more), ) } DropdownMenu( @@ -302,14 +302,14 @@ private fun TrackInfoItemMenu( onDismissRequest = { expanded = false }, ) { DropdownMenuItem( - text = { Text(localize(MR.strings.action_open_in_browser)) }, + text = { Text(stringResource(MR.strings.action_open_in_browser)) }, onClick = { onOpenInBrowser() expanded = false }, ) DropdownMenuItem( - text = { Text(localize(MR.strings.action_remove)) }, + text = { Text(stringResource(MR.strings.action_remove)) }, onClick = { onRemoved() expanded = false diff --git a/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt b/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt index 38488d9f6..c7675fbe7 100644 --- a/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt +++ b/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt @@ -41,7 +41,7 @@ import tachiyomi.presentation.core.components.WheelNumberPicker import tachiyomi.presentation.core.components.WheelTextPicker import tachiyomi.presentation.core.components.material.AlertDialogContent import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrolledToStart @@ -54,7 +54,7 @@ fun TrackStatusSelector( onDismissRequest: () -> Unit, ) { BaseSelector( - title = localize(MR.strings.status), + title = stringResource(MR.strings.status), content = { val state = rememberLazyListState() ScrollbarLazyColumn(state = state) { @@ -77,7 +77,7 @@ fun TrackStatusSelector( onClick = null, ) Text( - text = value?.let { localize(it) } ?: "", + text = value?.let { stringResource(it) } ?: "", style = MaterialTheme.typography.bodyLarge.merge(), modifier = Modifier.padding(start = 24.dp), ) @@ -102,7 +102,7 @@ fun TrackChapterSelector( onDismissRequest: () -> Unit, ) { BaseSelector( - title = localize(MR.strings.chapters), + title = stringResource(MR.strings.chapters), content = { WheelNumberPicker( items = range.toImmutableList(), @@ -125,7 +125,7 @@ fun TrackScoreSelector( onDismissRequest: () -> Unit, ) { BaseSelector( - title = localize(MR.strings.score), + title = stringResource(MR.strings.score), content = { WheelTextPicker( items = selections, @@ -172,15 +172,15 @@ fun TrackDateSelector( ) { if (onRemove != null) { TextButton(onClick = onRemove) { - Text(text = localize(MR.strings.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) } Spacer(modifier = Modifier.weight(1f)) } TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } TextButton(onClick = { onConfirm(pickerState.selectedDateMillis!!) }) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } } } @@ -215,10 +215,10 @@ private fun BaseSelector( Spacer(modifier = Modifier.weight(1f)) } TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } TextButton(onClick = onConfirm) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } } }, diff --git a/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt b/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt index f26af7c10..f2aa4fb16 100644 --- a/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt +++ b/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt @@ -65,7 +65,7 @@ import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.util.plus @@ -120,7 +120,7 @@ fun TrackerSearch( decorationBox = { if (query.text.isEmpty()) { Text( - text = localize(MR.strings.action_search_hint), + text = stringResource(MR.strings.action_search_hint), color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyLarge, ) @@ -163,7 +163,7 @@ fun TrackerSearch( .fillMaxWidth(), elevation = ButtonDefaults.elevatedButtonElevation(), ) { - Text(text = localize(MR.strings.action_track)) + Text(text = stringResource(MR.strings.action_track)) } } }, @@ -204,7 +204,7 @@ fun TrackerSearch( EmptyScreen( modifier = Modifier.padding(innerPadding), message = queryResult.exceptionOrNull()?.message - ?: localize(MR.strings.unknown_error), + ?: stringResource(MR.strings.unknown_error), ) } } @@ -263,19 +263,19 @@ private fun SearchResultItem( ) if (type.isNotBlank()) { SearchResultItemDetails( - title = localize(MR.strings.track_type), + title = stringResource(MR.strings.track_type), text = type, ) } if (startDate.isNotBlank()) { SearchResultItemDetails( - title = localize(MR.strings.label_started), + title = stringResource(MR.strings.label_started), text = startDate, ) } if (status.isNotBlank()) { SearchResultItemDetails( - title = localize(MR.strings.track_status), + title = stringResource(MR.strings.track_status), text = status, ) } diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesDialog.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesDialog.kt index 4c2c24acc..cd597aced 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesDialog.kt @@ -5,7 +5,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun UpdatesDeleteConfirmationDialog( @@ -14,7 +14,7 @@ fun UpdatesDeleteConfirmationDialog( ) { AlertDialog( text = { - Text(text = localize(MR.strings.confirm_delete_chapters)) + Text(text = stringResource(MR.strings.confirm_delete_chapters)) }, onDismissRequest = onDismissRequest, confirmButton = { @@ -22,12 +22,12 @@ fun UpdatesDeleteConfirmationDialog( onConfirm() onDismissRequest() }) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt index ce7ae7d11..db1139f18 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt @@ -34,7 +34,7 @@ import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.PullRefresh import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import kotlin.time.Duration.Companion.seconds @@ -146,12 +146,12 @@ private fun UpdatesAppBar( ) { AppBar( modifier = modifier, - title = localize(MR.strings.label_recent_updates), + title = stringResource(MR.strings.label_recent_updates), actions = { AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.action_update_library), + title = stringResource(MR.strings.action_update_library), icon = Icons.Outlined.Refresh, onClick = onUpdateLibrary, ), @@ -164,12 +164,12 @@ private fun UpdatesAppBar( AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = onSelectAll, ), AppBar.Action( - title = localize(MR.strings.action_select_inverse), + title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = onInvertSelection, ), diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt index 232fff59f..6cb38f003 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt @@ -44,7 +44,7 @@ import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ListGroupHeader import tachiyomi.presentation.core.components.material.ReadItemAlpha import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground internal fun LazyListScope.updatesLastUpdatedItem( @@ -56,7 +56,7 @@ internal fun LazyListScope.updatesLastUpdatedItem( .padding(horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small), ) { Text( - text = localize(MR.strings.updates_last_update_info, relativeTimeSpanString(lastUpdated)), + text = stringResource(MR.strings.updates_last_update_info, relativeTimeSpanString(lastUpdated)), fontStyle = FontStyle.Italic, ) } @@ -107,7 +107,7 @@ internal fun LazyListScope.updatesUiItems( )/* SY <-- */ && it > 0L } ?.let { - localize( + stringResource( MR.strings.chapter_progress, it + 1, ) @@ -190,7 +190,7 @@ private fun UpdatesUiItem( if (!update.read) { Icon( imageVector = Icons.Filled.Circle, - contentDescription = localize(MR.strings.unread), + contentDescription = stringResource(MR.strings.unread), modifier = Modifier .height(8.dp) .padding(end = 4.dp), @@ -200,7 +200,7 @@ private fun UpdatesUiItem( if (update.bookmark) { Icon( imageVector = Icons.Filled.Bookmark, - contentDescription = localize(MR.strings.action_filter_bookmarked), + contentDescription = stringResource(MR.strings.action_filter_bookmarked), modifier = Modifier .sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }), tint = MaterialTheme.colorScheme.primary, diff --git a/app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt b/app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt index 4b9134796..a76a225b9 100644 --- a/app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt +++ b/app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt @@ -4,7 +4,7 @@ import android.content.Context import eu.kanade.tachiyomi.network.HttpException import eu.kanade.tachiyomi.source.online.LicensedMangaChaptersException import eu.kanade.tachiyomi.util.system.isOnline -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.data.source.NoResultsException import tachiyomi.domain.source.model.SourceNotInstalledException import tachiyomi.i18n.MR @@ -14,18 +14,18 @@ context(Context) val Throwable.formattedMessage: String get() { when (this) { - is HttpException -> return localize(MR.strings.exception_http, code) + is HttpException -> return stringResource(MR.strings.exception_http, code) is UnknownHostException -> { return if (!isOnline()) { - localize(MR.strings.exception_offline) + stringResource(MR.strings.exception_offline) } else { - localize(MR.strings.exception_unknown_host, message ?: "") + stringResource(MR.strings.exception_unknown_host, message ?: "") } } - is NoResultsException -> return localize(MR.strings.no_results_found) - is SourceNotInstalledException -> return localize(MR.strings.loader_not_implemented_error) - is LicensedMangaChaptersException -> return localize(MR.strings.licensed_manga_chapters_error) + is NoResultsException -> return stringResource(MR.strings.no_results_found) + is SourceNotInstalledException -> return stringResource(MR.strings.loader_not_implemented_error) + is LicensedMangaChaptersException -> return stringResource(MR.strings.licensed_manga_chapters_error) } return when (val className = this::class.simpleName) { "Exception", "IOException" -> message ?: className diff --git a/app/src/main/java/eu/kanade/presentation/util/TimeUtils.kt b/app/src/main/java/eu/kanade/presentation/util/TimeUtils.kt index 8eaff72a9..b8dc09693 100644 --- a/app/src/main/java/eu/kanade/presentation/util/TimeUtils.kt +++ b/app/src/main/java/eu/kanade/presentation/util/TimeUtils.kt @@ -4,9 +4,9 @@ import android.content.Context import android.text.format.DateUtils import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import java.util.Date import kotlin.time.Duration import kotlin.time.Duration.Companion.minutes @@ -14,10 +14,14 @@ import kotlin.time.Duration.Companion.minutes fun Duration.toDurationString(context: Context, fallback: String): String { return toComponents { days, hours, minutes, seconds, _ -> buildList(4) { - if (days != 0L) add(context.localize(MR.strings.day_short, days)) - if (hours != 0) add(context.localize(MR.strings.hour_short, hours)) - if (minutes != 0 && (days == 0L || hours == 0)) add(context.localize(MR.strings.minute_short, minutes)) - if (seconds != 0 && days == 0L && hours == 0) add(context.localize(MR.strings.seconds_short, seconds)) + if (days != 0L) add(context.stringResource(MR.strings.day_short, days)) + if (hours != 0) add(context.stringResource(MR.strings.hour_short, hours)) + if (minutes != 0 && (days == 0L || hours == 0)) { + add( + context.stringResource(MR.strings.minute_short, minutes), + ) + } + if (seconds != 0 && days == 0L && hours == 0) add(context.stringResource(MR.strings.seconds_short, seconds)) }.joinToString(" ").ifBlank { fallback } } } @@ -27,8 +31,10 @@ fun Duration.toDurationString(context: Context, fallback: String): String { fun relativeTimeSpanString(epochMillis: Long): String { val now = Date().time return when { - epochMillis <= 0L -> localize(MR.strings.relative_time_span_never) - now - epochMillis < 1.minutes.inWholeMilliseconds -> localize(MR.strings.updates_last_update_info_just_now) + epochMillis <= 0L -> stringResource(MR.strings.relative_time_span_never) + now - epochMillis < 1.minutes.inWholeMilliseconds -> stringResource( + MR.strings.updates_last_update_info_just_now, + ) else -> DateUtils.getRelativeTimeSpanString(epochMillis, now, DateUtils.MINUTE_IN_MILLIS).toString() } } diff --git a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt index f994b75d4..dcfb83534 100644 --- a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt +++ b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt @@ -43,7 +43,7 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun WebViewScreenContent( @@ -125,7 +125,7 @@ fun WebViewScreenContent( AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.action_webview_back), + title = stringResource(MR.strings.action_webview_back), icon = Icons.AutoMirrored.Outlined.ArrowBack, onClick = { if (navigator.canGoBack) { @@ -135,7 +135,7 @@ fun WebViewScreenContent( enabled = navigator.canGoBack, ), AppBar.Action( - title = localize(MR.strings.action_webview_forward), + title = stringResource(MR.strings.action_webview_forward), icon = Icons.AutoMirrored.Outlined.ArrowForward, onClick = { if (navigator.canGoForward) { @@ -145,19 +145,19 @@ fun WebViewScreenContent( enabled = navigator.canGoForward, ), AppBar.OverflowAction( - title = localize(MR.strings.action_webview_refresh), + title = stringResource(MR.strings.action_webview_refresh), onClick = { navigator.reload() }, ), AppBar.OverflowAction( - title = localize(MR.strings.action_share), + title = stringResource(MR.strings.action_share), onClick = { onShare(currentUrl) }, ), AppBar.OverflowAction( - title = localize(MR.strings.action_open_in_browser), + title = stringResource(MR.strings.action_open_in_browser), onClick = { onOpenInBrowser(currentUrl) }, ), AppBar.OverflowAction( - title = localize(MR.strings.pref_clear_cookies), + title = stringResource(MR.strings.pref_clear_cookies), onClick = { onClearCookies(currentUrl) }, ), ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index 4d9ad01cb..947badcc4 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -68,7 +68,7 @@ import kotlinx.coroutines.flow.onEach import logcat.LogPriority import logcat.LogcatLogger import org.conscrypt.Conscrypt -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat import tachiyomi.i18n.MR import tachiyomi.presentation.widget.WidgetManager @@ -129,8 +129,8 @@ class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory { Notifications.ID_INCOGNITO_MODE, Notifications.CHANNEL_INCOGNITO_MODE, ) { - setContentTitle(localize(MR.strings.pref_incognito_mode)) - setContentText(localize(MR.strings.notification_incognito_text)) + setContentTitle(stringResource(MR.strings.pref_incognito_mode)) + setContentText(stringResource(MR.strings.notification_incognito_text)) setSmallIcon(R.drawable.ic_glasses_24dp) setOngoing(true) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt index 999d9fb62..13d4c0191 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt @@ -46,7 +46,7 @@ import logcat.LogPriority import okio.buffer import okio.gzip import okio.sink -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.preference.Preference import tachiyomi.core.preference.PreferenceStore import tachiyomi.core.util.system.logcat @@ -95,7 +95,7 @@ class BackupCreator( */ suspend fun createBackup(uri: Uri, flags: Int, isAutoBackup: Boolean): String { if (!context.hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - throw IllegalStateException(context.localize(MR.strings.missing_storage_permission)) + throw IllegalStateException(context.stringResource(MR.strings.missing_storage_permission)) } val databaseManga = getFavorites.await() /* SY --> */ + @@ -138,7 +138,7 @@ class BackupCreator( UniFile.fromUri(context, uri) } ) - ?: throw Exception(context.localize(MR.strings.create_backup_file_error)) + ?: throw Exception(context.stringResource(MR.strings.create_backup_file_error)) if (!file.isFile) { throw IllegalStateException("Failed to get handle on a backup file") @@ -146,7 +146,7 @@ class BackupCreator( val byteArray = parser.encodeToByteArray(BackupSerializer, backup) if (byteArray.isEmpty()) { - throw IllegalStateException(context.localize(MR.strings.empty_backup_error)) + throw IllegalStateException(context.stringResource(MR.strings.empty_backup_error)) } file.openOutputStream().also { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt index e883360e0..fdf3d68d9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt @@ -4,7 +4,7 @@ import android.content.Context import android.net.Uri import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.util.BackupUtil -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt @@ -29,7 +29,7 @@ class BackupFileValidator( } if (backup.backupManga.isEmpty()) { - throw IllegalStateException(context.localize(MR.strings.invalid_backup_file_missing_manga)) + throw IllegalStateException(context.stringResource(MR.strings.invalid_backup_file_missing_manga)) } val sources = backup.backupSources.associate { it.sourceId to it.name } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt index a3020c3b3..835796898 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt @@ -12,8 +12,8 @@ import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify -import tachiyomi.core.i18n.localize -import tachiyomi.core.i18n.localizePlural +import tachiyomi.core.i18n.pluralStringResource +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.io.File @@ -47,7 +47,7 @@ class BackupNotifier(private val context: Context) { fun showBackupProgress(): NotificationCompat.Builder { val builder = with(progressNotificationBuilder) { - setContentTitle(context.localize(MR.strings.creating_backup)) + setContentTitle(context.stringResource(MR.strings.creating_backup)) setProgress(0, 0, true) } @@ -61,7 +61,7 @@ class BackupNotifier(private val context: Context) { context.cancelNotification(Notifications.ID_BACKUP_PROGRESS) with(completeNotificationBuilder) { - setContentTitle(context.localize(MR.strings.creating_backup_error)) + setContentTitle(context.stringResource(MR.strings.creating_backup_error)) setContentText(error) show(Notifications.ID_BACKUP_COMPLETE) @@ -72,13 +72,13 @@ class BackupNotifier(private val context: Context) { context.cancelNotification(Notifications.ID_BACKUP_PROGRESS) with(completeNotificationBuilder) { - setContentTitle(context.localize(MR.strings.backup_created)) + setContentTitle(context.stringResource(MR.strings.backup_created)) setContentText(unifile.filePath ?: unifile.name) clearActions() addAction( R.drawable.ic_share_24dp, - context.localize(MR.strings.action_share), + context.stringResource(MR.strings.action_share), NotificationReceiver.shareBackupPendingBroadcast( context, unifile.uri, @@ -92,7 +92,7 @@ class BackupNotifier(private val context: Context) { fun showRestoreProgress( content: String = "", - contentTitle: String = context.localize( + contentTitle: String = context.stringResource( MR.strings.restoring_backup, ), progress: Int = 0, @@ -111,7 +111,7 @@ class BackupNotifier(private val context: Context) { clearActions() addAction( R.drawable.ic_close_24dp, - context.localize(MR.strings.action_cancel), + context.stringResource(MR.strings.action_cancel), NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE_PROGRESS), ) } @@ -125,7 +125,7 @@ class BackupNotifier(private val context: Context) { context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) with(completeNotificationBuilder) { - setContentTitle(context.localize(MR.strings.restoring_backup_error)) + setContentTitle(context.stringResource(MR.strings.restoring_backup_error)) setContentText(error) show(Notifications.ID_RESTORE_COMPLETE) @@ -137,13 +137,13 @@ class BackupNotifier(private val context: Context) { errorCount: Int, path: String?, file: String?, - contentTitle: String = context.localize( + contentTitle: String = context.stringResource( MR.strings.restore_completed, ), ) { context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) - val timeString = context.localize( + val timeString = context.stringResource( MR.strings.restore_duration, TimeUnit.MILLISECONDS.toMinutes(time), TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds( @@ -154,7 +154,7 @@ class BackupNotifier(private val context: Context) { with(completeNotificationBuilder) { setContentTitle(contentTitle) setContentText( - context.localizePlural( + context.pluralStringResource( MR.plurals.restore_completed_message, errorCount, timeString, @@ -171,7 +171,7 @@ class BackupNotifier(private val context: Context) { setContentIntent(errorLogIntent) addAction( R.drawable.ic_folder_24dp, - context.localize(MR.strings.action_show_errors), + context.stringResource(MR.strings.action_show_errors), errorLogIntent, ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt index b05bbb689..f9b41c330 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt @@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.util.system.isRunning import eu.kanade.tachiyomi.util.system.workManager import kotlinx.coroutines.CancellationException import logcat.LogPriority -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat import tachiyomi.i18n.MR @@ -41,7 +41,7 @@ class BackupRestoreJob(private val context: Context, workerParams: WorkerParamet Result.success() } catch (e: Exception) { if (e is CancellationException) { - notifier.showRestoreError(context.localize(MR.strings.restoring_backup_canceled)) + notifier.showRestoreError(context.stringResource(MR.strings.restoring_backup_canceled)) Result.success() } else { logcat(LogPriority.ERROR, e) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt index d0b83e5e6..865b82126 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt @@ -28,7 +28,7 @@ import exh.source.MERGED_SOURCE_ID import exh.util.nullIfBlank import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.isActive -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.preference.AndroidPreferenceStore import tachiyomi.core.preference.PreferenceStore import tachiyomi.data.DatabaseHandler @@ -112,7 +112,7 @@ class BackupRestorer( errors.size, logFile.parent, logFile.name, - contentTitle = context.localize(MR.strings.library_sync_complete), + contentTitle = context.stringResource(MR.strings.library_sync_complete), ) } else { notifier.showRestoreComplete(time, errors.size, logFile.parent, logFile.name) @@ -218,8 +218,8 @@ class BackupRestorer( showRestoreProgress( restoreProgress, restoreAmount, - context.localize(MR.strings.categories), - context.localize(MR.strings.restoring_backup), + context.stringResource(MR.strings.categories), + context.stringResource(MR.strings.restoring_backup), ) } @@ -314,14 +314,14 @@ class BackupRestorer( restoreProgress, restoreAmount, manga.title, - context.localize(MR.strings.syncing_library), + context.stringResource(MR.strings.syncing_library), ) } else { showRestoreProgress( restoreProgress, restoreAmount, manga.title, - context.localize(MR.strings.restoring_backup), + context.stringResource(MR.strings.restoring_backup), ) } } @@ -822,8 +822,8 @@ class BackupRestorer( showRestoreProgress( restoreProgress, restoreAmount, - context.localize(MR.strings.app_settings), - context.localize(MR.strings.restoring_backup), + context.stringResource(MR.strings.app_settings), + context.stringResource(MR.strings.restoring_backup), ) } @@ -837,8 +837,8 @@ class BackupRestorer( showRestoreProgress( restoreProgress, restoreAmount, - context.localize(MR.strings.source_settings), - context.localize(MR.strings.restoring_backup), + context.stringResource(MR.strings.source_settings), + context.stringResource(MR.strings.restoring_backup), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt index aac539e07..0d9f6152a 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt @@ -14,7 +14,7 @@ import eu.kanade.tachiyomi.util.lang.chop import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.util.regex.Pattern @@ -80,12 +80,12 @@ internal class DownloadNotifier(private val context: Context) { // Pause action addAction( R.drawable.ic_pause_24dp, - context.localize(MR.strings.action_pause), + context.stringResource(MR.strings.action_pause), NotificationReceiver.pauseDownloadsPendingBroadcast(context), ) } - val downloadingProgressText = context.localize( + val downloadingProgressText = context.stringResource( MR.strings.chapter_downloading_progress, download.downloadedImages, download.pages!!.size, @@ -117,8 +117,8 @@ internal class DownloadNotifier(private val context: Context) { */ fun onPaused() { with(progressNotificationBuilder) { - setContentTitle(context.localize(MR.strings.chapter_paused)) - setContentText(context.localize(MR.strings.download_notifier_download_paused)) + setContentTitle(context.stringResource(MR.strings.chapter_paused)) + setContentText(context.stringResource(MR.strings.download_notifier_download_paused)) setSmallIcon(R.drawable.ic_pause_24dp) setProgress(0, 0, false) setOngoing(false) @@ -128,13 +128,13 @@ internal class DownloadNotifier(private val context: Context) { // Resume action addAction( R.drawable.ic_play_arrow_24dp, - context.localize(MR.strings.action_resume), + context.stringResource(MR.strings.action_resume), NotificationReceiver.resumeDownloadsPendingBroadcast(context), ) // Clear action addAction( R.drawable.ic_close_24dp, - context.localize(MR.strings.action_cancel_all), + context.stringResource(MR.strings.action_cancel_all), NotificationReceiver.clearDownloadsPendingBroadcast(context), ) @@ -164,7 +164,7 @@ internal class DownloadNotifier(private val context: Context) { */ fun onWarning(reason: String, timeout: Long? = null, contentIntent: PendingIntent? = null) { with(errorNotificationBuilder) { - setContentTitle(context.localize(MR.strings.download_notifier_downloader_title)) + setContentTitle(context.stringResource(MR.strings.download_notifier_downloader_title)) setStyle(NotificationCompat.BigTextStyle().bigText(reason)) setSmallIcon(R.drawable.ic_warning_white_24dp) setAutoCancel(true) @@ -192,9 +192,9 @@ internal class DownloadNotifier(private val context: Context) { // Create notification with(errorNotificationBuilder) { setContentTitle( - mangaTitle?.plus(": $chapter") ?: context.localize(MR.strings.download_notifier_downloader_title), + mangaTitle?.plus(": $chapter") ?: context.stringResource(MR.strings.download_notifier_downloader_title), ) - setContentText(error ?: context.localize(MR.strings.download_notifier_unknown_error)) + setContentText(error ?: context.stringResource(MR.strings.download_notifier_unknown_error)) setSmallIcon(R.drawable.ic_warning_white_24dp) clearActions() setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt index 7bf12a10f..915ef909d 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.MainScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import logcat.LogPriority -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.download.service.DownloadPreferences @@ -59,7 +59,7 @@ class DownloadProvider( .createDirectory(getMangaDirName(mangaTitle)) } catch (e: Throwable) { logcat(LogPriority.ERROR, e) { "Invalid download directory" } - throw Exception(context.localize(MR.strings.invalid_location, downloadsDir)) + throw Exception(context.stringResource(MR.strings.invalid_location, downloadsDir)) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt index 315a51cdf..9ce5c5b2a 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadService.kt @@ -26,7 +26,7 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import logcat.LogPriority import ru.beryukhov.reactivenetwork.ReactiveNetwork -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.download.service.DownloadPreferences @@ -113,7 +113,7 @@ class DownloadService : Service() { } private fun downloaderStop(string: StringResource) { - downloadManager.downloaderStop(localize(string)) + downloadManager.downloaderStop(stringResource(string)) } private fun listenNetworkChanges() { @@ -145,7 +145,7 @@ class DownloadService : Service() { private fun getPlaceholderNotification(): Notification { return notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) { - setContentTitle(localize(MR.strings.download_notifier_downloader_title)) + setContentTitle(stringResource(MR.strings.download_notifier_downloader_title)) }.build() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt b/app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt index a2a5d49c4..3a76b045d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt @@ -7,7 +7,7 @@ import androidx.core.app.NotificationManagerCompat.IMPORTANCE_HIGH import androidx.core.app.NotificationManagerCompat.IMPORTANCE_LOW import eu.kanade.tachiyomi.util.system.buildNotificationChannel import eu.kanade.tachiyomi.util.system.buildNotificationChannelGroup -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR /** @@ -103,16 +103,16 @@ object Notifications { notificationManager.createNotificationChannelGroupsCompat( listOf( buildNotificationChannelGroup(GROUP_BACKUP_RESTORE) { - setName(context.localize(MR.strings.label_backup)) + setName(context.stringResource(MR.strings.label_backup)) }, buildNotificationChannelGroup(GROUP_DOWNLOADER) { - setName(context.localize(MR.strings.download_notifier_downloader_title)) + setName(context.stringResource(MR.strings.download_notifier_downloader_title)) }, buildNotificationChannelGroup(GROUP_LIBRARY) { - setName(context.localize(MR.strings.label_library)) + setName(context.stringResource(MR.strings.label_library)) }, buildNotificationChannelGroup(GROUP_APK_UPDATES) { - setName(context.localize(MR.strings.label_recent_updates)) + setName(context.stringResource(MR.strings.label_recent_updates)) }, ), ) @@ -120,57 +120,57 @@ object Notifications { notificationManager.createNotificationChannelsCompat( listOf( buildNotificationChannel(CHANNEL_COMMON, IMPORTANCE_LOW) { - setName(context.localize(MR.strings.channel_common)) + setName(context.stringResource(MR.strings.channel_common)) }, buildNotificationChannel(CHANNEL_LIBRARY_PROGRESS, IMPORTANCE_LOW) { - setName(context.localize(MR.strings.channel_progress)) + setName(context.stringResource(MR.strings.channel_progress)) setGroup(GROUP_LIBRARY) setShowBadge(false) }, buildNotificationChannel(CHANNEL_LIBRARY_ERROR, IMPORTANCE_LOW) { - setName(context.localize(MR.strings.channel_errors)) + setName(context.stringResource(MR.strings.channel_errors)) setGroup(GROUP_LIBRARY) setShowBadge(false) }, buildNotificationChannel(CHANNEL_LIBRARY_SKIPPED, IMPORTANCE_LOW) { - setName(context.localize(MR.strings.channel_skipped)) + setName(context.stringResource(MR.strings.channel_skipped)) setGroup(GROUP_LIBRARY) setShowBadge(false) }, buildNotificationChannel(CHANNEL_NEW_CHAPTERS, IMPORTANCE_DEFAULT) { - setName(context.localize(MR.strings.channel_new_chapters)) + setName(context.stringResource(MR.strings.channel_new_chapters)) }, buildNotificationChannel(CHANNEL_DOWNLOADER_PROGRESS, IMPORTANCE_LOW) { - setName(context.localize(MR.strings.channel_progress)) + setName(context.stringResource(MR.strings.channel_progress)) setGroup(GROUP_DOWNLOADER) setShowBadge(false) }, buildNotificationChannel(CHANNEL_DOWNLOADER_ERROR, IMPORTANCE_LOW) { - setName(context.localize(MR.strings.channel_errors)) + setName(context.stringResource(MR.strings.channel_errors)) setGroup(GROUP_DOWNLOADER) setShowBadge(false) }, buildNotificationChannel(CHANNEL_BACKUP_RESTORE_PROGRESS, IMPORTANCE_LOW) { - setName(context.localize(MR.strings.channel_progress)) + setName(context.stringResource(MR.strings.channel_progress)) setGroup(GROUP_BACKUP_RESTORE) setShowBadge(false) }, buildNotificationChannel(CHANNEL_BACKUP_RESTORE_COMPLETE, IMPORTANCE_HIGH) { - setName(context.localize(MR.strings.channel_complete)) + setName(context.stringResource(MR.strings.channel_complete)) setGroup(GROUP_BACKUP_RESTORE) setShowBadge(false) setSound(null, null) }, buildNotificationChannel(CHANNEL_INCOGNITO_MODE, IMPORTANCE_LOW) { - setName(context.localize(MR.strings.pref_incognito_mode)) + setName(context.stringResource(MR.strings.pref_incognito_mode)) }, buildNotificationChannel(CHANNEL_APP_UPDATE, IMPORTANCE_DEFAULT) { setGroup(GROUP_APK_UPDATES) - setName(context.localize(MR.strings.channel_app_updates)) + setName(context.stringResource(MR.strings.channel_app_updates)) }, buildNotificationChannel(CHANNEL_EXTENSIONS_UPDATE, IMPORTANCE_DEFAULT) { setGroup(GROUP_APK_UPDATES) - setName(context.localize(MR.strings.channel_ext_updates)) + setName(context.stringResource(MR.strings.channel_ext_updates)) }, ), ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/saver/ImageSaver.kt b/app/src/main/java/eu/kanade/tachiyomi/data/saver/ImageSaver.kt index 2da5ccfd1..85afc0b23 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/saver/ImageSaver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/saver/ImageSaver.kt @@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.util.storage.cacheImageDir import eu.kanade.tachiyomi.util.storage.getUriCompat import logcat.LogPriority import okio.IOException -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.ImageUtil import tachiyomi.core.util.system.logcat import tachiyomi.i18n.MR @@ -71,7 +71,7 @@ class ImageSaver( val imageLocation = (image.location as Location.Pictures).relativePath val relativePath = listOf( Environment.DIRECTORY_PICTURES, - context.localize(MR.strings.app_name), + context.stringResource(MR.strings.app_name), imageLocation, ).joinToString(File.separator) @@ -86,7 +86,7 @@ class ImageSaver( context.contentResolver.insert( pictureDir, contentValues, - ) ?: throw IOException(context.localize(MR.strings.error_saving_picture)) + ) ?: throw IOException(context.stringResource(MR.strings.error_saving_picture)) } try { @@ -97,7 +97,7 @@ class ImageSaver( } } catch (e: Exception) { logcat(LogPriority.ERROR, e) - throw IOException(context.localize(MR.strings.error_saving_picture)) + throw IOException(context.stringResource(MR.strings.error_saving_picture)) } DiskUtil.scanMedia(context, picture) @@ -185,7 +185,7 @@ sealed interface Location { is Pictures -> { val file = File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), - context.localize(MR.strings.app_name), + context.stringResource(MR.strings.app_name), ) if (relativePath.isNotEmpty()) { return File( diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt index 5c54e38c0..581f15a12 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt @@ -21,7 +21,7 @@ import eu.kanade.tachiyomi.util.system.workManager import logcat.LogPriority import okhttp3.internal.http2.ErrorCode import okhttp3.internal.http2.StreamResetException -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.system.logcat import tachiyomi.i18n.MR @@ -37,7 +37,7 @@ class AppUpdateDownloadJob(private val context: Context, workerParams: WorkerPar override suspend fun doWork(): Result { val url = inputData.getString(EXTRA_DOWNLOAD_URL) - val title = inputData.getString(EXTRA_DOWNLOAD_TITLE) ?: context.localize(MR.strings.app_name) + val title = inputData.getString(EXTRA_DOWNLOAD_TITLE) ?: context.stringResource(MR.strings.app_name) if (url.isNullOrEmpty()) { return Result.failure() diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt index 234532afd..dd7b8a68b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt @@ -13,7 +13,7 @@ import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.release.model.Release import tachiyomi.i18n.MR @@ -53,7 +53,7 @@ internal class AppUpdateNotifier(private val context: Context) { } with(notificationBuilder) { - setContentTitle(context.localize(MR.strings.update_check_notification_update_available)) + setContentTitle(context.stringResource(MR.strings.update_check_notification_update_available)) setContentText(release.version) setSmallIcon(android.R.drawable.stat_sys_download_done) setContentIntent(updateIntent) @@ -61,12 +61,12 @@ internal class AppUpdateNotifier(private val context: Context) { clearActions() addAction( android.R.drawable.stat_sys_download_done, - context.localize(MR.strings.action_download), + context.stringResource(MR.strings.action_download), updateIntent, ) addAction( R.drawable.ic_info_24dp, - context.localize(MR.strings.whats_new), + context.stringResource(MR.strings.whats_new), releaseIntent, ) } @@ -81,14 +81,14 @@ internal class AppUpdateNotifier(private val context: Context) { fun onDownloadStarted(title: String? = null): NotificationCompat.Builder { with(notificationBuilder) { title?.let { setContentTitle(title) } - setContentText(context.localize(MR.strings.update_check_notification_download_in_progress)) + setContentText(context.stringResource(MR.strings.update_check_notification_download_in_progress)) setSmallIcon(android.R.drawable.stat_sys_download) setOngoing(true) clearActions() addAction( R.drawable.ic_close_24dp, - context.localize(MR.strings.action_cancel), + context.stringResource(MR.strings.action_cancel), NotificationReceiver.cancelDownloadAppUpdatePendingBroadcast(context), ) } @@ -117,7 +117,7 @@ internal class AppUpdateNotifier(private val context: Context) { fun promptInstall(uri: Uri) { val installIntent = NotificationHandler.installApkPendingActivity(context, uri) with(notificationBuilder) { - setContentText(context.localize(MR.strings.update_check_notification_download_complete)) + setContentText(context.stringResource(MR.strings.update_check_notification_download_complete)) setSmallIcon(android.R.drawable.stat_sys_download_done) setOnlyAlertOnce(false) setProgress(0, 0, false) @@ -127,12 +127,12 @@ internal class AppUpdateNotifier(private val context: Context) { clearActions() addAction( R.drawable.ic_system_update_alt_white_24dp, - context.localize(MR.strings.action_install), + context.stringResource(MR.strings.action_install), installIntent, ) addAction( R.drawable.ic_close_24dp, - context.localize(MR.strings.action_cancel), + context.stringResource(MR.strings.action_cancel), NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATE_PROMPT), ) } @@ -147,8 +147,8 @@ internal class AppUpdateNotifier(private val context: Context) { */ fun promptFdroidUpdate() { with(notificationBuilder) { - setContentTitle(context.localize(MR.strings.update_check_notification_update_available)) - setContentText(context.localize(MR.strings.update_check_fdroid_migration_info)) + setContentTitle(context.stringResource(MR.strings.update_check_notification_update_available)) + setContentText(context.stringResource(MR.strings.update_check_fdroid_migration_info)) setSmallIcon(R.drawable.ic_tachi) setContentIntent( NotificationHandler.openUrl( @@ -167,7 +167,7 @@ internal class AppUpdateNotifier(private val context: Context) { */ fun onDownloadError(url: String) { with(notificationBuilder) { - setContentText(context.localize(MR.strings.update_check_notification_download_error)) + setContentText(context.stringResource(MR.strings.update_check_notification_download_error)) setSmallIcon(R.drawable.ic_warning_white_24dp) setOnlyAlertOnce(false) setProgress(0, 0, false) @@ -175,12 +175,12 @@ internal class AppUpdateNotifier(private val context: Context) { clearActions() addAction( R.drawable.ic_refresh_24dp, - context.localize(MR.strings.action_retry), + context.stringResource(MR.strings.action_retry), NotificationReceiver.downloadAppUpdatePendingBroadcast(context, url), ) addAction( R.drawable.ic_close_24dp, - context.localize(MR.strings.action_cancel), + context.stringResource(MR.strings.action_cancel), NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATER), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt index de9739dde..602ce80f9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt @@ -7,7 +7,7 @@ import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notify -import tachiyomi.core.i18n.localizePlural +import tachiyomi.core.i18n.pluralStringResource import tachiyomi.i18n.MR class ExtensionUpdateNotifier(private val context: Context) { @@ -18,7 +18,7 @@ class ExtensionUpdateNotifier(private val context: Context) { Notifications.CHANNEL_EXTENSIONS_UPDATE, ) { setContentTitle( - context.localizePlural( + context.pluralStringResource( MR.plurals.update_check_notification_ext_updates, names.size, names.size, diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallService.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallService.kt index f75c9e951..826db44cd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallService.kt @@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.extension.util.ExtensionInstaller.Companion.EXTRA_DOW import eu.kanade.tachiyomi.util.system.getSerializableExtraCompat import eu.kanade.tachiyomi.util.system.notificationBuilder import logcat.LogPriority -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat import tachiyomi.i18n.MR @@ -29,7 +29,7 @@ class ExtensionInstallService : Service() { setAutoCancel(false) setOngoing(true) setShowWhen(false) - setContentTitle(localize(MR.strings.ext_install_service_notif)) + setContentTitle(stringResource(MR.strings.ext_install_service_notif)) setProgress(100, 100, true) }.build() startForeground(Notifications.ID_EXTENSION_INSTALLER, notification) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterScreen.kt index f332424da..9fd5df0fd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterScreen.kt @@ -11,7 +11,7 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.ExtensionFilterScreen import eu.kanade.presentation.util.Screen import kotlinx.coroutines.flow.collectLatest -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen @@ -41,7 +41,7 @@ class ExtensionFilterScreen : Screen() { screenModel.events.collectLatest { when (it) { ExtensionFilterEvent.FailedFetchingLanguages -> { - context.localize(MR.strings.internal_error) + context.stringResource(MR.strings.internal_error) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsTab.kt index 94726ac34..cb72b5f66 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsTab.kt @@ -14,7 +14,7 @@ import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun extensionsTab( @@ -29,7 +29,7 @@ fun extensionsTab( searchEnabled = true, actions = persistentListOf( AppBar.Action( - title = localize(MR.strings.action_filter), + title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.Translate, onClick = { navigator.push(ExtensionFilterScreen()) }, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreen.kt index c4b166cb7..bd67cae6a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreen.kt @@ -16,7 +16,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.reader.ReaderActivity import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen class DeepLinkScreen( @@ -35,7 +35,7 @@ class DeepLinkScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = localize(MR.strings.action_search_hint), + title = stringResource(MR.strings.action_search_hint), navigateUp = navigator::pop, scrollBehavior = scrollBehavior, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreen.kt index 938b49e88..f8470ef7b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreen.kt @@ -58,7 +58,7 @@ import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Pill import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import kotlin.math.roundToInt @@ -104,7 +104,7 @@ object DownloadQueueScreen : Screen() { titleContent = { Row(verticalAlignment = Alignment.CenterVertically) { Text( - text = localize(MR.strings.label_download_queue), + text = stringResource(MR.strings.label_download_queue), maxLines = 1, modifier = Modifier.weight(1f, false), overflow = TextOverflow.Ellipsis, @@ -131,10 +131,10 @@ object DownloadQueueScreen : Screen() { onDismissRequest = onDismissRequest, ) { NestedMenuItem( - text = { Text(text = localize(MR.strings.action_order_by_upload_date)) }, + text = { Text(text = stringResource(MR.strings.action_order_by_upload_date)) }, children = { closeMenu -> DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_newest)) }, + text = { Text(text = stringResource(MR.strings.action_newest)) }, onClick = { screenModel.reorderQueue( { it.download.chapter.dateUpload }, @@ -144,7 +144,7 @@ object DownloadQueueScreen : Screen() { }, ) DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_oldest)) }, + text = { Text(text = stringResource(MR.strings.action_oldest)) }, onClick = { screenModel.reorderQueue( { it.download.chapter.dateUpload }, @@ -156,10 +156,10 @@ object DownloadQueueScreen : Screen() { }, ) NestedMenuItem( - text = { Text(text = localize(MR.strings.action_order_by_chapter_number)) }, + text = { Text(text = stringResource(MR.strings.action_order_by_chapter_number)) }, children = { closeMenu -> DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_asc)) }, + text = { Text(text = stringResource(MR.strings.action_asc)) }, onClick = { screenModel.reorderQueue( { it.download.chapter.chapterNumber }, @@ -169,7 +169,7 @@ object DownloadQueueScreen : Screen() { }, ) DropdownMenuItem( - text = { Text(text = localize(MR.strings.action_desc)) }, + text = { Text(text = stringResource(MR.strings.action_desc)) }, onClick = { screenModel.reorderQueue( { it.download.chapter.chapterNumber }, @@ -185,12 +185,12 @@ object DownloadQueueScreen : Screen() { AppBarActions( persistentListOf( AppBar.Action( - title = localize(MR.strings.action_sort), + title = stringResource(MR.strings.action_sort), icon = Icons.AutoMirrored.Outlined.Sort, onClick = { sortExpanded = true }, ), AppBar.OverflowAction( - title = localize(MR.strings.action_cancel_all), + title = stringResource(MR.strings.action_cancel_all), onClick = { screenModel.clearQueue() }, ), ), @@ -214,7 +214,7 @@ object DownloadQueueScreen : Screen() { } else { MR.strings.action_resume } - Text(text = localize(id)) + Text(text = stringResource(id)) }, icon = { val icon = if (isRunning) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt index 7f470b394..65689c57c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt @@ -59,7 +59,7 @@ import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.NavigationBar import tachiyomi.presentation.core.components.material.NavigationRail import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localizePlural +import tachiyomi.presentation.core.i18n.pluralStringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -262,7 +262,7 @@ object HomeScreen : Screen() { } if (count > 0) { Badge { - val desc = localizePlural( + val desc = pluralStringResource( MR.plurals.notification_chapters_generic, count = count, count, @@ -281,7 +281,7 @@ object HomeScreen : Screen() { } if (count > 0) { Badge { - val desc = localizePlural( + val desc = pluralStringResource( MR.plurals.update_check_notification_ext_updates, count = count, count, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt index eb7f1d5f9..d9c339dd7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt @@ -55,7 +55,7 @@ import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.launch -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.domain.UnsortedPreferences import tachiyomi.domain.category.model.Category @@ -64,7 +64,7 @@ import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction import tachiyomi.presentation.core.screens.LoadingScreen @@ -81,7 +81,7 @@ object LibraryTab : Tab { val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_library_enter) return TabOptions( index = 0u, - title = localize(MR.strings.label_library), + title = stringResource(MR.strings.label_library), icon = rememberAnimatedVectorPainter(image, isSelected), ) } @@ -123,7 +123,7 @@ object LibraryTab : Tab { category != null -> MR.strings.updating_category else -> MR.strings.updating_library } - snackbarHostState.showSnackbar(context.localize(msgRes)) + snackbarHostState.showSnackbar(context.stringResource(msgRes)) } started } @@ -131,8 +131,8 @@ object LibraryTab : Tab { Scaffold( topBar = { scrollBehavior -> val title = state.getToolbarTitle( - defaultTitle = localize(MR.strings.label_library), - defaultCategoryTitle = localize(MR.strings.label_default), + defaultTitle = stringResource(MR.strings.label_library), + defaultCategoryTitle = stringResource(MR.strings.label_default), page = screenModel.activeCategoryIndex, ) val tabVisible = state.showCategoryTabs && state.categories.size > 1 @@ -155,7 +155,7 @@ object LibraryTab : Tab { navigator.push(MangaScreen(randomItem.libraryManga.manga.id)) } else { snackbarHostState.showSnackbar( - context.localize(MR.strings.information_no_entries_found), + context.stringResource(MR.strings.information_no_entries_found), ) } } @@ -235,7 +235,7 @@ object LibraryTab : Tab { ReaderActivity.newIntent(context, chapter.mangaId, chapter.id), ) } else { - snackbarHostState.showSnackbar(context.localize(MR.strings.no_next_chapter)) + snackbarHostState.showSnackbar(context.stringResource(MR.strings.no_next_chapter)) } } Unit diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaCoverScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaCoverScreenModel.kt index 1bf373866..6a4d968a4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaCoverScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaCoverScreenModel.kt @@ -19,7 +19,7 @@ import eu.kanade.tachiyomi.util.system.toShareIntent import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withUIContext @@ -52,13 +52,13 @@ class MangaCoverScreenModel( try { saveCoverInternal(context, temp = false) snackbarHostState.showSnackbar( - context.localize(MR.strings.cover_saved), + context.stringResource(MR.strings.cover_saved), withDismissAction = true, ) } catch (e: Throwable) { logcat(LogPriority.ERROR, e) snackbarHostState.showSnackbar( - context.localize(MR.strings.error_saving_cover), + context.stringResource(MR.strings.error_saving_cover), withDismissAction = true, ) } @@ -75,7 +75,7 @@ class MangaCoverScreenModel( } catch (e: Throwable) { logcat(LogPriority.ERROR, e) snackbarHostState.showSnackbar( - context.localize(MR.strings.error_sharing_cover), + context.stringResource(MR.strings.error_sharing_cover), withDismissAction = true, ) } @@ -146,7 +146,7 @@ class MangaCoverScreenModel( private fun notifyCoverUpdated(context: Context) { screenModelScope.launch { snackbarHostState.showSnackbar( - context.localize(MR.strings.cover_updated), + context.stringResource(MR.strings.cover_updated), withDismissAction = true, ) } @@ -155,7 +155,7 @@ class MangaCoverScreenModel( private fun notifyFailedCoverUpdate(context: Context, e: Throwable) { screenModelScope.launch { snackbarHostState.showSnackbar( - context.localize(MR.strings.notification_cover_update_failed), + context.stringResource(MR.strings.notification_cover_update_failed), withDismissAction = true, ) logcat(LogPriority.ERROR, e) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackInfoDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackInfoDialog.kt index 64d281f7c..ce6f27686 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackInfoDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackInfoDialog.kt @@ -65,7 +65,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchNonCancellable import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withUIContext @@ -79,7 +79,7 @@ import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.material.AlertDialogContent import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant @@ -229,7 +229,7 @@ data class TrackInfoDialogHomeScreen( } withUIContext { context.toast( - context.localize( + context.stringResource( MR.strings.track_error, track!!.name, e.message ?: "", @@ -502,9 +502,9 @@ private data class TrackDateSelectorScreen( } TrackDateSelector( title = if (start) { - localize(MR.strings.track_started_reading_date) + stringResource(MR.strings.track_started_reading_date) } else { - localize(MR.strings.track_finished_reading_date) + stringResource(MR.strings.track_finished_reading_date) }, initialSelectedDateMillis = screenModel.initialSelection, selectableDates = selectableDates, @@ -577,7 +577,7 @@ private data class TrackDateRemoverScreen( }, title = { Text( - text = localize(MR.strings.track_remove_date_conf_title), + text = stringResource(MR.strings.track_remove_date_conf_title), textAlign = TextAlign.Center, ) }, @@ -585,9 +585,9 @@ private data class TrackDateRemoverScreen( val serviceName = screenModel.getServiceName() Text( text = if (start) { - localize(MR.strings.track_remove_start_date_conf_text, serviceName) + stringResource(MR.strings.track_remove_start_date_conf_text, serviceName) } else { - localize(MR.strings.track_remove_finish_date_conf_text, serviceName) + stringResource(MR.strings.track_remove_finish_date_conf_text, serviceName) }, ) }, @@ -597,7 +597,7 @@ private data class TrackDateRemoverScreen( horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small, Alignment.End), ) { TextButton(onClick = navigator::pop) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } FilledTonalButton( onClick = { @@ -609,7 +609,7 @@ private data class TrackDateRemoverScreen( contentColor = MaterialTheme.colorScheme.onErrorContainer, ), ) { - Text(text = localize(MR.strings.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) } } }, @@ -753,7 +753,7 @@ private data class TrackerRemoveScreen( }, title = { Text( - text = localize(MR.strings.track_delete_title, serviceName), + text = stringResource(MR.strings.track_delete_title, serviceName), textAlign = TextAlign.Center, ) }, @@ -762,12 +762,12 @@ private data class TrackerRemoveScreen( verticalArrangement = Arrangement.spacedBy(8.dp), ) { Text( - text = localize(MR.strings.track_delete_text, serviceName), + text = stringResource(MR.strings.track_delete_text, serviceName), ) if (screenModel.isDeletable()) { LabeledCheckbox( - label = localize(MR.strings.track_delete_remote_text, serviceName), + label = stringResource(MR.strings.track_delete_remote_text, serviceName), checked = removeRemoteTrack, onCheckedChange = { removeRemoteTrack = it }, ) @@ -783,7 +783,7 @@ private data class TrackerRemoveScreen( ), ) { TextButton(onClick = navigator::pop) { - Text(text = localize(MR.strings.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } FilledTonalButton( onClick = { @@ -796,7 +796,7 @@ private data class TrackerRemoveScreen( contentColor = MaterialTheme.colorScheme.onErrorContainer, ), ) { - Text(text = localize(MR.strings.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } } }, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt index fe501644f..7a9665576 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt @@ -38,7 +38,7 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import tachiyomi.core.util.lang.launchIO import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -51,7 +51,7 @@ object MoreTab : Tab { val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_more_enter) return TabOptions( index = 4u, - title = localize(MR.strings.label_more), + title = stringResource(MR.strings.label_more), icon = rememberAnimatedVectorPainter(image, isSelected), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderNavigationOverlayView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderNavigationOverlayView.kt index af121a27c..70aa7bfb0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderNavigationOverlayView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderNavigationOverlayView.kt @@ -13,7 +13,7 @@ import androidx.core.graphics.withTranslation import androidx.core.view.isVisible import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import kotlin.math.abs class ReaderNavigationOverlayView(context: Context, attributeSet: AttributeSet) : View(context, attributeSet) { @@ -80,8 +80,8 @@ class ReaderNavigationOverlayView(context: Context, attributeSet: AttributeSet) // Calculate center of rect height on screen val y = height * (abs(rect.top - rect.bottom) / 2) - drawText(context.localize(region.type.nameRes), x, y, textBorderPaint) - drawText(context.localize(region.type.nameRes), x, y, textPaint) + drawText(context.stringResource(region.type.nameRes), x, y, textBorderPaint) + drawText(context.stringResource(region.type.nameRes), x, y, textPaint) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt index 2ea8b319f..56813b714 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt @@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.getBitmapOrNull import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR /** @@ -58,8 +58,8 @@ class SaveImageNotifier(private val context: Context) { fun onError(error: String?) { // Create notification with(notificationBuilder) { - setContentTitle(context.localize(MR.strings.download_notifier_title_error)) - setContentText(error ?: context.localize(MR.strings.unknown_error)) + setContentTitle(context.stringResource(MR.strings.download_notifier_title_error)) + setContentText(error ?: context.stringResource(MR.strings.unknown_error)) setSmallIcon(android.R.drawable.ic_menu_report_image) } updateNotification() @@ -67,7 +67,7 @@ class SaveImageNotifier(private val context: Context) { private fun showCompleteNotification(uri: Uri, image: Bitmap?) { with(notificationBuilder) { - setContentTitle(context.localize(MR.strings.picture_saved)) + setContentTitle(context.stringResource(MR.strings.picture_saved)) setSmallIcon(R.drawable.ic_photo_24dp) image?.let { setStyle(NotificationCompat.BigPictureStyle().bigPicture(it)) } setLargeIcon(image) @@ -80,13 +80,13 @@ class SaveImageNotifier(private val context: Context) { // Share action addAction( R.drawable.ic_share_24dp, - context.localize(MR.strings.action_share), + context.stringResource(MR.strings.action_share), NotificationReceiver.shareImagePendingBroadcast(context, uri.path!!, notificationId), ) // Delete action addAction( R.drawable.ic_delete_24dp, - context.localize(MR.strings.action_delete), + context.stringResource(MR.strings.action_delete), NotificationReceiver.deleteImagePendingBroadcast(context, uri.path!!, notificationId), ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt index f4a406056..6adb5fcef 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt @@ -20,7 +20,7 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.MainScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR /** @@ -105,7 +105,7 @@ class PagerTransitionHolder( val textView = AppCompatTextView(context).apply { wrapContent() - text = context.localize(MR.strings.transition_pages_loading) + text = context.stringResource(MR.strings.transition_pages_loading) } pagesContainer.addView(progress) @@ -118,13 +118,13 @@ class PagerTransitionHolder( private fun setError(error: Throwable) { val textView = AppCompatTextView(context).apply { wrapContent() - text = context.localize(MR.strings.transition_pages_error, error.message ?: "") + text = context.stringResource(MR.strings.transition_pages_error, error.message ?: "") } val retryBtn = ReaderButton(context).apply { viewer = this@PagerTransitionHolder.viewer wrapContent() - text = context.localize(MR.strings.action_retry) + text = context.stringResource(MR.strings.action_retry) setOnClickListener { val toChapter = transition.to if (toChapter != null) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt index e9b62a93b..65629799e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt @@ -17,7 +17,7 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.MainScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR /** @@ -107,7 +107,7 @@ class WebtoonTransitionHolder( val textView = AppCompatTextView(context).apply { wrapContent() - text = context.localize(MR.strings.transition_pages_loading) + text = context.stringResource(MR.strings.transition_pages_loading) } pagesContainer.addView(progress) @@ -120,12 +120,12 @@ class WebtoonTransitionHolder( private fun setError(error: Throwable, transition: ChapterTransition) { val textView = AppCompatTextView(context).apply { wrapContent() - text = context.localize(MR.strings.transition_pages_error, error.message ?: "") + text = context.stringResource(MR.strings.transition_pages_error, error.message ?: "") } val retryBtn = AppCompatButton(context).apply { wrapContent() - text = context.localize(MR.strings.action_retry) + text = context.stringResource(MR.strings.action_retry) setOnClickListener { val toChapter = transition.to if (toChapter != null) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/security/UnlockActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/security/UnlockActivity.kt index 1fb2f4747..557da5bdd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/security/UnlockActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/security/UnlockActivity.kt @@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate import eu.kanade.tachiyomi.util.system.AuthenticatorUtil import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.startAuthentication import logcat.LogPriority -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat import tachiyomi.i18n.MR @@ -20,7 +20,7 @@ class UnlockActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) startAuthentication( - localize(MR.strings.unlock_app_title, localize(MR.strings.app_name)), + stringResource(MR.strings.unlock_app_title, stringResource(MR.strings.app_name)), confirmationRequired = false, callback = object : AuthenticatorUtil.AuthenticationCallback() { override fun onAuthenticationError( diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/lang/DateExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/lang/DateExtensions.kt index 012255f6f..25f34ede0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/lang/DateExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/lang/DateExtensions.kt @@ -1,8 +1,8 @@ package eu.kanade.tachiyomi.util.lang import android.content.Context -import tachiyomi.core.i18n.localize -import tachiyomi.core.i18n.localizePlural +import tachiyomi.core.i18n.pluralStringResource +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import java.text.DateFormat import java.time.Instant @@ -62,8 +62,8 @@ fun Date.toRelativeString( val days = difference.floorDiv(MILLISECONDS_IN_DAY).toInt() return when { difference < 0 -> dateFormat.format(this) - difference < MILLISECONDS_IN_DAY -> context.localize(MR.strings.relative_time_today) - difference < MILLISECONDS_IN_DAY.times(7) -> context.localizePlural( + difference < MILLISECONDS_IN_DAY -> context.stringResource(MR.strings.relative_time_today) + difference < MILLISECONDS_IN_DAY.times(7) -> context.pluralStringResource( MR.plurals.relative_time, days, days, diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/AuthenticatorUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/AuthenticatorUtil.kt index 6de909fad..ce3a09141 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/AuthenticatorUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/AuthenticatorUtil.kt @@ -11,7 +11,7 @@ import androidx.biometric.auth.startClass2BiometricOrCredentialAuthentication import androidx.core.content.ContextCompat import androidx.fragment.app.FragmentActivity import kotlinx.coroutines.suspendCancellableCoroutine -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import kotlin.coroutines.resume @@ -49,7 +49,7 @@ object AuthenticatorUtil { suspend fun FragmentActivity.authenticate( title: String, - subtitle: String? = localize(MR.strings.confirm_lock_change), + subtitle: String? = stringResource(MR.strings.confirm_lock_change), ): Boolean = suspendCancellableCoroutine { cont -> if (!isAuthenticationSupported()) { cont.resume(true) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt index 644c7f102..14f637366 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt @@ -24,7 +24,7 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.util.lang.truncateCenter import logcat.LogPriority import rikka.sui.Sui -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt @@ -47,7 +47,7 @@ fun Context.copyToClipboard(label: String, content: String) { // Android 13 and higher shows a visual confirmation of copied contents // https://developer.android.com/about/versions/13/features/copy-paste if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) { - toast(localize(MR.strings.copied_to_clipboard, content.truncateCenter(50))) + toast(stringResource(MR.strings.copied_to_clipboard, content.truncateCenter(50))) } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/IntentExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/IntentExtensions.kt index 0388392d7..ed4ce04f5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/IntentExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/IntentExtensions.kt @@ -6,7 +6,7 @@ import android.content.Intent import android.net.Uri import android.os.Build import androidx.core.content.IntentCompat -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import java.io.Serializable @@ -28,7 +28,7 @@ fun Uri.toShareIntent(context: Context, type: String = "image/*", message: Strin flags = Intent.FLAG_GRANT_READ_URI_PERMISSION } - return Intent.createChooser(shareIntent, context.localize(MR.strings.action_share)).apply { + return Intent.createChooser(shareIntent, context.stringResource(MR.strings.action_share)).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt index 72616fcda..d3017f422 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt @@ -3,7 +3,7 @@ package eu.kanade.tachiyomi.util.system import android.content.Context import androidx.core.os.LocaleListCompat import eu.kanade.tachiyomi.ui.browse.source.SourcesScreenModel -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import java.util.Locale @@ -35,10 +35,10 @@ object LocaleHelper { } // SY <-- return when (lang) { - SourcesScreenModel.LAST_USED_KEY -> context.localize(MR.strings.last_used_source) - SourcesScreenModel.PINNED_KEY -> context.localize(MR.strings.pinned_sources) - "other" -> context.localize(MR.strings.other_source) - "all" -> context.localize(MR.strings.multi_lang) + SourcesScreenModel.LAST_USED_KEY -> context.stringResource(MR.strings.last_used_source) + SourcesScreenModel.PINNED_KEY -> context.stringResource(MR.strings.pinned_sources) + "other" -> context.stringResource(MR.strings.other_source) + "all" -> context.stringResource(MR.strings.multi_lang) else -> getDisplayName(lang) } } diff --git a/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt b/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt index 989621375..12a8f0ce0 100755 --- a/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt +++ b/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt @@ -14,7 +14,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Interceptor import okhttp3.Request import okhttp3.Response -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import java.io.IOException import java.util.concurrent.CountDownLatch @@ -49,7 +49,7 @@ class CloudflareInterceptor( // Because OkHttp's enqueue only handles IOExceptions, wrap the exception so that // we don't crash the entire app catch (e: CloudflareBypassException) { - throw IOException(context.localize(MR.strings.information_cloudflare_bypass_failure), e) + throw IOException(context.stringResource(MR.strings.information_cloudflare_bypass_failure), e) } catch (e: Exception) { throw IOException(e) } diff --git a/core/src/main/java/eu/kanade/tachiyomi/util/system/ToastExtensions.kt b/core/src/main/java/eu/kanade/tachiyomi/util/system/ToastExtensions.kt index 48dca9a96..0f4aba9bf 100644 --- a/core/src/main/java/eu/kanade/tachiyomi/util/system/ToastExtensions.kt +++ b/core/src/main/java/eu/kanade/tachiyomi/util/system/ToastExtensions.kt @@ -3,7 +3,7 @@ package eu.kanade.tachiyomi.util.system import android.content.Context import android.widget.Toast import dev.icerock.moko.resources.StringResource -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource /** * Display a toast in this context. @@ -16,7 +16,7 @@ fun Context.toast( duration: Int = Toast.LENGTH_SHORT, block: (Toast) -> Unit = {}, ): Toast { - return toast(localize(resource), duration, block) + return toast(stringResource(resource), duration, block) } /** diff --git a/core/src/main/java/tachiyomi/core/i18n/Localize.kt b/core/src/main/java/tachiyomi/core/i18n/Localize.kt index 07e2878dd..3c0c7e216 100644 --- a/core/src/main/java/tachiyomi/core/i18n/Localize.kt +++ b/core/src/main/java/tachiyomi/core/i18n/Localize.kt @@ -9,18 +9,18 @@ import dev.icerock.moko.resources.desc.Resource import dev.icerock.moko.resources.desc.ResourceFormatted import dev.icerock.moko.resources.desc.StringDesc -fun Context.localize(resource: StringResource): String { +fun Context.stringResource(resource: StringResource): String { return StringDesc.Resource(resource).toString(this) } -fun Context.localize(resource: StringResource, vararg args: Any): String { +fun Context.stringResource(resource: StringResource, vararg args: Any): String { return StringDesc.ResourceFormatted(resource, *args).toString(this) } -fun Context.localizePlural(resource: PluralsResource, count: Int): String { +fun Context.pluralStringResource(resource: PluralsResource, count: Int): String { return StringDesc.Plural(resource, count).toString(this) } -fun Context.localizePlural(resource: PluralsResource, count: Int, vararg args: Any): String { +fun Context.pluralStringResource(resource: PluralsResource, count: Int, vararg args: Any): String { return StringDesc.PluralFormatted(resource, count, *args).toString(this) } diff --git a/core/src/main/java/tachiyomi/core/provider/AndroidBackupFolderProvider.kt b/core/src/main/java/tachiyomi/core/provider/AndroidBackupFolderProvider.kt index 7e7d22385..afed0d95c 100644 --- a/core/src/main/java/tachiyomi/core/provider/AndroidBackupFolderProvider.kt +++ b/core/src/main/java/tachiyomi/core/provider/AndroidBackupFolderProvider.kt @@ -3,7 +3,7 @@ package tachiyomi.core.provider import android.content.Context import android.os.Environment import androidx.core.net.toUri -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import java.io.File @@ -14,7 +14,7 @@ class AndroidBackupFolderProvider( override fun directory(): File { return File( Environment.getExternalStorageDirectory().absolutePath + File.separator + - context.localize(MR.strings.app_name), + context.stringResource(MR.strings.app_name), "backup", ) } diff --git a/core/src/main/java/tachiyomi/core/provider/AndroidDownloadFolderProvider.kt b/core/src/main/java/tachiyomi/core/provider/AndroidDownloadFolderProvider.kt index 899c826cf..f42fcfbcf 100644 --- a/core/src/main/java/tachiyomi/core/provider/AndroidDownloadFolderProvider.kt +++ b/core/src/main/java/tachiyomi/core/provider/AndroidDownloadFolderProvider.kt @@ -3,7 +3,7 @@ package tachiyomi.core.provider import android.content.Context import android.os.Environment import androidx.core.net.toUri -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import java.io.File @@ -14,7 +14,7 @@ class AndroidDownloadFolderProvider( override fun directory(): File { return File( Environment.getExternalStorageDirectory().absolutePath + File.separator + - context.localize(MR.strings.app_name), + context.stringResource(MR.strings.app_name), "downloads", ) } diff --git a/i18n/src/commonMain/resources/MR/base/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml index 9077e92ca..5a01a708f 100755 --- a/i18n/src/commonMain/resources/MR/base/strings.xml +++ b/i18n/src/commonMain/resources/MR/base/strings.xml @@ -5,6 +5,10 @@ On Off + Selected + Not selected + More options + Navigate up Name @@ -39,9 +43,6 @@ Local Downloaded - Selected - Not selected - Unlock %s Authenticate to confirm change diff --git a/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt b/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt index 0ac2c970c..3ebae3512 100644 --- a/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt +++ b/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt @@ -48,7 +48,7 @@ import tachiyomi.core.preference.Preference import tachiyomi.core.preference.TriState import tachiyomi.core.preference.toggle import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.header import tachiyomi.presentation.core.util.collectAsState @@ -59,7 +59,7 @@ object SettingsItemsPaddings { @Composable fun HeadingItem(labelRes: StringResource) { - HeadingItem(localize(labelRes)) + HeadingItem(stringResource(labelRes)) } @Composable diff --git a/presentation-core/src/main/java/tachiyomi/presentation/core/i18n/Localize.kt b/presentation-core/src/main/java/tachiyomi/presentation/core/i18n/Localize.kt index cb85f9aa3..081281f7f 100644 --- a/presentation-core/src/main/java/tachiyomi/presentation/core/i18n/Localize.kt +++ b/presentation-core/src/main/java/tachiyomi/presentation/core/i18n/Localize.kt @@ -5,29 +5,29 @@ import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.platform.LocalContext import dev.icerock.moko.resources.PluralsResource import dev.icerock.moko.resources.StringResource -import tachiyomi.core.i18n.localize -import tachiyomi.core.i18n.localizePlural +import tachiyomi.core.i18n.pluralStringResource +import tachiyomi.core.i18n.stringResource @Composable @ReadOnlyComposable -fun localize(resource: StringResource): String { - return LocalContext.current.localize(resource) +fun stringResource(resource: StringResource): String { + return LocalContext.current.stringResource(resource) } @Composable @ReadOnlyComposable -fun localize(resource: StringResource, vararg args: Any): String { - return LocalContext.current.localize(resource, *args) +fun stringResource(resource: StringResource, vararg args: Any): String { + return LocalContext.current.stringResource(resource, *args) } @Composable @ReadOnlyComposable -fun localizePlural(resource: PluralsResource, count: Int): String { - return LocalContext.current.localizePlural(resource, count) +fun pluralStringResource(resource: PluralsResource, count: Int): String { + return LocalContext.current.pluralStringResource(resource, count) } @Composable @ReadOnlyComposable -fun localizePlural(resource: PluralsResource, count: Int, vararg args: Any): String { - return LocalContext.current.localizePlural(resource, count, *args) +fun pluralStringResource(resource: PluralsResource, count: Int, vararg args: Any): String { + return LocalContext.current.pluralStringResource(resource, count, *args) } diff --git a/presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt b/presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt index b858f3f14..0922f925c 100644 --- a/presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt +++ b/presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt @@ -25,7 +25,7 @@ import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.ImmutableList import tachiyomi.presentation.core.components.ActionButton import tachiyomi.presentation.core.components.material.padding -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha import kotlin.random.Random @@ -42,7 +42,7 @@ fun EmptyScreen( actions: ImmutableList? = null, ) { EmptyScreen( - message = localize(stringRes), + message = stringResource(stringRes), modifier = modifier, actions = actions, ) @@ -89,7 +89,7 @@ fun EmptyScreen( actions.fastForEach { ActionButton( modifier = Modifier.weight(1f), - title = localize(it.stringRes), + title = stringResource(it.stringRes), icon = it.icon, onClick = it.onClick, ) diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/LockedWidget.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/LockedWidget.kt index ce41fe7c6..20096ccbf 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/LockedWidget.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/LockedWidget.kt @@ -17,7 +17,7 @@ import androidx.glance.text.TextStyle import androidx.glance.unit.ColorProvider import tachiyomi.core.Constants import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource @Composable fun LockedWidget( @@ -34,7 +34,7 @@ fun LockedWidget( contentAlignment = Alignment.Center, ) { Text( - text = localize(MR.strings.appwidget_unavailable_locked), + text = stringResource(MR.strings.appwidget_unavailable_locked), style = TextStyle( color = foreground, fontSize = 12.sp, diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/UpdatesWidget.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/UpdatesWidget.kt index 460d209f5..d31528170 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/UpdatesWidget.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/UpdatesWidget.kt @@ -24,7 +24,7 @@ import androidx.glance.unit.ColorProvider import kotlinx.collections.immutable.ImmutableList import tachiyomi.core.Constants import tachiyomi.i18n.MR -import tachiyomi.presentation.core.i18n.localize +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.widget.util.calculateRowAndColumnCount @Composable @@ -43,7 +43,7 @@ fun UpdatesWidget( CircularProgressIndicator(color = contentColor) } else if (data.isEmpty()) { Text( - text = localize(MR.strings.information_no_recent), + text = stringResource(MR.strings.information_no_recent), style = TextStyle(color = contentColor), ) } else { diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt index 2eab2f03f..261bf5f8a 100755 --- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt +++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt @@ -20,7 +20,7 @@ import net.lingala.zip4j.ZipFile import net.lingala.zip4j.model.ZipParameters import nl.adaptivity.xmlutil.AndroidXmlReader import nl.adaptivity.xmlutil.serialization.XML -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.core.metadata.comicinfo.COMIC_INFO_FILE import tachiyomi.core.metadata.comicinfo.ComicInfo import tachiyomi.core.metadata.comicinfo.copyFromComicInfo @@ -63,7 +63,7 @@ actual class LocalSource( private val POPULAR_FILTERS = FilterList(OrderBy.Popular(context)) private val LATEST_FILTERS = FilterList(OrderBy.Latest(context)) - override val name: String = context.localize(MR.strings.local_source) + override val name: String = context.stringResource(MR.strings.local_source) override val id: Long = ID @@ -391,9 +391,9 @@ actual class LocalSource( .map { dir -> File(dir, chapter.url) } .find { it.exists() } ?.let(Format.Companion::valueOf) - ?: throw Exception(context.localize(MR.strings.chapter_not_found)) + ?: throw Exception(context.stringResource(MR.strings.chapter_not_found)) } catch (e: Format.UnknownFormatException) { - throw Exception(context.localize(MR.strings.local_invalid_format)) + throw Exception(context.stringResource(MR.strings.local_invalid_format)) } catch (e: Exception) { throw e } diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/OrderBy.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/OrderBy.kt index 58f039f87..9be063b9a 100644 --- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/OrderBy.kt +++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/OrderBy.kt @@ -2,12 +2,12 @@ package tachiyomi.source.local.filter import android.content.Context import eu.kanade.tachiyomi.source.model.Filter -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR sealed class OrderBy(context: Context, selection: Selection) : Filter.Sort( - context.localize(MR.strings.local_filter_order_by), - arrayOf(context.localize(MR.strings.title), context.localize(MR.strings.date)), + context.stringResource(MR.strings.local_filter_order_by), + arrayOf(context.stringResource(MR.strings.title), context.stringResource(MR.strings.date)), selection, ) { class Popular(context: Context) : OrderBy(context, Selection(0, true)) diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/io/LocalSourceFileSystem.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/io/LocalSourceFileSystem.kt index 617ed5f3d..f645f8b75 100644 --- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/io/LocalSourceFileSystem.kt +++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/io/LocalSourceFileSystem.kt @@ -2,7 +2,7 @@ package tachiyomi.source.local.io import android.content.Context import eu.kanade.tachiyomi.util.storage.DiskUtil -import tachiyomi.core.i18n.localize +import tachiyomi.core.i18n.stringResource import tachiyomi.i18n.MR import java.io.File @@ -10,7 +10,7 @@ actual class LocalSourceFileSystem( private val context: Context, ) { - private val baseFolderLocation = "${context.localize(MR.strings.app_name)}${File.separator}local" + private val baseFolderLocation = "${context.stringResource(MR.strings.app_name)}${File.separator}local" actual fun getBaseDirectories(): Sequence { return DiskUtil.getExternalStorages(context)