diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 989bd9c7..ad8bf666 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -21,7 +21,7 @@ android { minSdk = 24 targetSdk = 34 // 版本号为x.y.z则versionCode为x*1000000+y*10000+z*100+debug版本号(开发需要时迭代, 两位数) - versionCode = 1_00_00_022 + versionCode = 1_00_00_023 versionName = "1.0.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/update/UpdateCheckRepository.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/update/UpdateCheckRepository.kt index aa3f261c..0a3fa0f1 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/update/UpdateCheckRepository.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/update/UpdateCheckRepository.kt @@ -70,7 +70,7 @@ class UpdateCheckRepository @Inject constructor( private val githubProxyUrl = StringUserData(UserDataPath.Settings.App.ProxyUrl.path, userDataDao) companion object { - private val _updatePhase = MutableStateFlow("未检查") + private val _updatePhase = MutableStateFlow("Not checked") val updatePhase: StateFlow get() = _updatePhase val proxyUrlRegex = Regex("(https?://)+[a-zA-Z0-9.-]+(\\.[a-zA-Z]{2,})(/)") } diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/exploration/filter/SingleChoiceFilter.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/exploration/filter/SingleChoiceFilter.kt index 81c43eaf..fada236c 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/exploration/filter/SingleChoiceFilter.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/exploration/filter/SingleChoiceFilter.kt @@ -2,8 +2,8 @@ package indi.dmzz_yyhyy.lightnovelreader.data.web.exploration.filter open class SingleChoiceFilter( private val title: String, - val dialogTitle: String, - val description: String, + val dialogTitleId: Int, + val descriptionId: Int, private val choices: List, private val defaultChoice: String, private var onChange: (String) -> Unit diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/Wenku8Api.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/Wenku8Api.kt index d55a3324..d202942a 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/Wenku8Api.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/Wenku8Api.kt @@ -1,6 +1,7 @@ package indi.dmzz_yyhyy.lightnovelreader.data.web.wenku8 +import indi.dmzz_yyhyy.lightnovelreader.R import indi.dmzz_yyhyy.lightnovelreader.data.book.BookInformation import indi.dmzz_yyhyy.lightnovelreader.data.book.BookVolumes import indi.dmzz_yyhyy.lightnovelreader.data.book.ChapterContent @@ -380,8 +381,8 @@ object Wenku8Api: WebBookDataSource { IsCompletedSwitchFilter { this.refresh() }, SingleChoiceFilter( title = "排序", - dialogTitle = "排序顺序", - description = "书本排序的依据。", + dialogTitleId = R.string.key_pub_filter_title, + descriptionId = R.string.key_pub_filter_desc, choices = listOf("默认", "按更新时间排序", "按热度排序", "仅动画化"), defaultChoice = "默认" ) { diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/exploration/expanedpage/filter/FirstLetterSingleChoiceFilter.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/exploration/expanedpage/filter/FirstLetterSingleChoiceFilter.kt index 9053ae2c..942dcbe0 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/exploration/expanedpage/filter/FirstLetterSingleChoiceFilter.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/exploration/expanedpage/filter/FirstLetterSingleChoiceFilter.kt @@ -1,11 +1,12 @@ package indi.dmzz_yyhyy.lightnovelreader.data.web.wenku8.exploration.expanedpage.filter +import indi.dmzz_yyhyy.lightnovelreader.R import indi.dmzz_yyhyy.lightnovelreader.data.web.exploration.filter.SingleChoiceFilter class FirstLetterSingleChoiceFilter(onChange: (String) -> Unit): SingleChoiceFilter( title = "首字母", - dialogTitle = "首字母筛选", - description = "根据小说标题的拼音首字母筛选。", + dialogTitleId = R.string.key_letter_filter_title, + descriptionId = R.string.key_letter_filter_desc, choices = listOf("任意", "0~9", " A ", " B ", " C ", " D ", " E ", " F ", " G ", " H ", " I ", " J ", " K ", " L ", " M ", " N ", " O ", " P ", " Q ", " R ", " S ", " T ", " U ", " V ", " W ", " X ", " Y ", " Z "), defaultChoice = "任意", onChange = onChange diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/exploration/expanedpage/filter/PublishingHouseSingleChoiceFilter.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/exploration/expanedpage/filter/PublishingHouseSingleChoiceFilter.kt index f06ef4bd..3560f2b2 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/exploration/expanedpage/filter/PublishingHouseSingleChoiceFilter.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/web/wenku8/exploration/expanedpage/filter/PublishingHouseSingleChoiceFilter.kt @@ -1,13 +1,14 @@ package indi.dmzz_yyhyy.lightnovelreader.data.web.wenku8.exploration.expanedpage.filter +import indi.dmzz_yyhyy.lightnovelreader.R import indi.dmzz_yyhyy.lightnovelreader.data.book.BookInformation import indi.dmzz_yyhyy.lightnovelreader.data.web.exploration.filter.LocalFilter import indi.dmzz_yyhyy.lightnovelreader.data.web.exploration.filter.SingleChoiceFilter class PublishingHouseSingleChoiceFilter(onChange: (String) -> Unit) : SingleChoiceFilter( title = "文库", - dialogTitle = "文库筛选", - description = "根据小说的文库筛选", + dialogTitleId = R.string.key_pub_filter_title, + descriptionId = R.string.key_pub_filter_desc, choices = listOf("全部轻小说", "电击文库", "富士见文库", "角川文库", "MF文库J", "Fami通文库", "GA文库", "HJ文库", "一迅社", "集英社", "小学馆", "讲谈社", "少女文库", "其他文库", "游戏剧本"), defaultChoice = "全部轻小说", onChange = onChange diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/ContentSettingsScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/ContentSettingsScreen.kt index f796ed96..00ecb86b 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/ContentSettingsScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/ContentSettingsScreen.kt @@ -54,6 +54,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp @@ -134,7 +135,7 @@ fun SettingsBottomSheet( ) Text( modifier = Modifier.padding(start = 8.dp), - text = "设置预览", + text = stringResource(R.string.settings_preview), style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.Bold ) @@ -220,7 +221,7 @@ fun SettingsBottomSheet( Text( modifier = Modifier.padding(horizontal = 16.dp), style = MaterialTheme.typography.titleLarge, - text = "阅读器设置" + text = stringResource(R.string.reader_settings) ) } @@ -314,7 +315,7 @@ fun ContentSettings( fun LazyListScope.AppearancePage(settingState: SettingState) { item { SettingsSliderEntry( - title = "阅读器字体大小", + title = stringResource(R.string.settings_reader_font_size), unit = "sp", valueRange = 8f..64f, value = settingState.fontSize, @@ -323,7 +324,7 @@ fun LazyListScope.AppearancePage(settingState: SettingState) { } item { SettingsSliderEntry( - title = "阅读器行距大小", + title = stringResource(R.string.settings_reader_line_spacing), unit = "sp", valueRange = 0f..32f, value = settingState.fontLineHeight, @@ -332,40 +333,40 @@ fun LazyListScope.AppearancePage(settingState: SettingState) { } item { SettingsSwitchEntry( - title = "屏幕常亮", - description = "在阅读页时,总是保持屏幕开启。这将导致耗电量增加", + title = stringResource(R.string.settings_reader_keep_screen_on), + description = stringResource(R.string.settings_reader_keep_screen_on_desc), checked = settingState.keepScreenOn, booleanUserData = settingState.keepScreenOnUserData, ) } item { SettingsSwitchEntry( - title = "电量指示器", - description = "在页面左下角显示当前电量。", + title = stringResource(R.string.settings_reader_battery_indicator), + description = stringResource(R.string.settings_reader_battery_indicator_desc), checked = settingState.enableBatteryIndicator, booleanUserData = settingState.enableBatteryIndicatorUserData, ) } item { SettingsSwitchEntry( - title = "时间指示器", - description = "在页面左下角显示当前时间。", + title = stringResource(R.string.settings_reader_time_indicator), + description = stringResource(R.string.settings_reader_time_indicator_desc), checked = settingState.enableTimeIndicator, booleanUserData = settingState.enableTimeIndicatorUserData, ) } item { SettingsSwitchEntry( - title = "名称指示器", - description = "在页面右下角显示当前阅读章节名称。", + title = stringResource(R.string.settings_reader_chapter_indicator), + description = stringResource(R.string.settings_reader_chapter_indicator_desc), checked = settingState.enableChapterTitleIndicator, booleanUserData = settingState.enableChapterTitleIndicatorUserData, ) } item { SettingsSwitchEntry( - title = "进度指示器", - description = "在页面右下角显示当前阅读进度。", + title = stringResource(R.string.settings_reader_progress_indicator), + description = stringResource(R.string.settings_reader_progress_indicator_desc), checked = settingState.enableReadingChapterProgressIndicator, booleanUserData = settingState.enableReadingChapterProgressIndicatorUserData, ) @@ -375,8 +376,8 @@ fun LazyListScope.AppearancePage(settingState: SettingState) { fun LazyListScope.ActionPage(settingState: SettingState) { item { SettingsSwitchEntry( - title = "翻页模式", - description = "切换滚动模式为翻页模式", + title = stringResource(R.string.settings_reader_page_mode), + description = stringResource(R.string.settings_reader_page_mode_desc), checked = settingState.isUsingFlipPage, booleanUserData = settingState.isUsingFlipPageUserData, ) @@ -385,8 +386,8 @@ fun LazyListScope.ActionPage(settingState: SettingState) { item { SettingsSwitchEntry( modifier = Modifier.animateItem(), - title = "音量键控制", - description = "使用音量+键切换至上一页,使用音量-键切换至下一页。", + title = stringResource(R.string.settings_reader_volume_key_control), + description = stringResource(R.string.settings_reader_volume_key_control_desc), checked = settingState.isUsingVolumeKeyFlip, booleanUserData = settingState.isUsingVolumeKeyFlipUserData, ) @@ -396,8 +397,8 @@ fun LazyListScope.ActionPage(settingState: SettingState) { item { SettingsSwitchEntry( modifier = Modifier.animateItem(), - title = "点击翻页", - description = "使用点击控制翻页,并将呼出菜单变为上下滑动。", + title = stringResource(R.string.settings_reader_t2tp), + description = stringResource(R.string.settings_reader_t2tp_desc), checked = settingState.isUsingClickFlipPage, booleanUserData = settingState.isUsingClickFlipPageUserData, ) @@ -407,9 +408,9 @@ fun LazyListScope.ActionPage(settingState: SettingState) { item { SettingsMenuEntry( modifier = Modifier.animateItem(), - title = "翻页动画", - description = "设置翻页时的动画,当为无时允许你快速翻页。", - options = MenuOptions.FlipAnimeOptions, + title = stringResource(R.string.settings_reader_page_turn_anim), + description = stringResource(R.string.settings_reader_page_turn_anim_desc), + options = MenuOptions.FlipAnimationOptions, selectedOptionKey = settingState.flipAnime, stringUserData = settingState.flipAnimeUserData ) @@ -419,8 +420,8 @@ fun LazyListScope.ActionPage(settingState: SettingState) { item { SettingsSwitchEntry( modifier = Modifier.animateItem(), - title = "快速切换章节", - description = "开启后,当你在每章尾页或首页翻页时,会自动切换到上一章或下一章。", + title = stringResource(R.string.settings_reader_quick_chapter_switch), + description = stringResource(R.string.settings_reader_quick_chapter_switch_desc), checked = settingState.fastChapterChange, booleanUserData = settingState.fastChapterChangeUserData, ) @@ -431,8 +432,8 @@ fun LazyListScope.ActionPage(settingState: SettingState) { fun LazyListScope.PaddingPage(settingState: SettingState) { item { SettingsSwitchEntry( - title = "自动获取边距", - description = "自动识别手机屏幕的边距,并进行显示适配,如关闭需要手动进行设置。", + title = stringResource(R.string.settings_reader_auto_margin), + description = stringResource(R.string.settings_reader_auto_margin_desc), checked = settingState.autoPadding, booleanUserData = settingState.autoPaddingUserData, ) @@ -440,7 +441,7 @@ fun LazyListScope.PaddingPage(settingState: SettingState) { if (!settingState.autoPadding) { item { SettingsSliderEntry( - title = "上边距", + title = stringResource(R.string.settings_reader_top_margin), unit = "dp", valueRange = 0f..128f, value = settingState.topPadding, @@ -451,7 +452,7 @@ fun LazyListScope.PaddingPage(settingState: SettingState) { if (!settingState.autoPadding) { item { SettingsSliderEntry( - title = "下边距", + title = stringResource(R.string.settings_reader_bottom_margin), unit = "dp", valueRange = 0f..128f, value = settingState.bottomPadding, @@ -462,7 +463,7 @@ fun LazyListScope.PaddingPage(settingState: SettingState) { if (!settingState.autoPadding) { item { SettingsSliderEntry( - title = "左边距", + title = stringResource(R.string.settings_reader_left_margin), unit = "dp", valueRange = 0f..128f, value = settingState.leftPadding, @@ -473,7 +474,7 @@ fun LazyListScope.PaddingPage(settingState: SettingState) { if (!settingState.autoPadding) { item { SettingsSliderEntry( - title = "右边距", + title = stringResource(R.string.settings_reader_right_margin), unit = "dp", valueRange = 0f..128f, value = settingState.rightPadding, diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/SettingState.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/SettingState.kt index d2b01013..e08bc5c4 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/SettingState.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/SettingState.kt @@ -37,7 +37,7 @@ class SettingState( val isUsingFlipPage by isUsingFlipPageUserData.safeAsState(false) val isUsingClickFlipPage by isUsingClickFlipPageUserData.safeAsState(false) val isUsingVolumeKeyFlip by isUsingVolumeKeyFlipUserData.safeAsState(false) - val flipAnime by flipAnimeUserData.safeAsState(MenuOptions.FlipAnimeOptions.ScrollWithoutShadow) + val flipAnime by flipAnimeUserData.safeAsState(MenuOptions.FlipAnimationOptions.ScrollWithoutShadow) val fastChapterChange by fastChapterChangeUserData.safeAsState(false) val enableBatteryIndicator by enableBatteryIndicatorUserData.safeAsState(true) val enableTimeIndicator by enableTimeIndicatorUserData.safeAsState(true) diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/TextComponent.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/TextComponent.kt index 5d9c89bc..82b68e02 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/TextComponent.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/content/TextComponent.kt @@ -124,7 +124,7 @@ fun ContentText( readingProgress = readingProgress, isUsingClickFlip = isUsingClickFlip, isUsingVolumeKeyFlip = isUsingVolumeKeyFlip, - flipAnime = flipAnime, + flipAnimation = flipAnime, fastChapterChange = fastChapterChange, onChapterReadingProgressChange = onChapterReadingProgressChange, changeIsImmersive = changeIsImmersive, @@ -193,7 +193,7 @@ fun SimpleFlipPageTextComponent( readingProgress: Float, isUsingClickFlip: Boolean, isUsingVolumeKeyFlip: Boolean, - flipAnime: String, + flipAnimation: String, fastChapterChange: Boolean, onChapterReadingProgressChange: (Float) -> Unit, changeIsImmersive: () -> Unit, @@ -214,7 +214,7 @@ fun SimpleFlipPageTextComponent( fun lastPage() { if (pagerState.currentPage != 0) scope.launch { - if (flipAnime != MenuOptions.FlipAnimeOptions.None) + if (flipAnimation != MenuOptions.FlipAnimationOptions.None) pagerState.animateScrollToPage(pagerState.currentPage - 1) else pagerState.scrollToPage(pagerState.currentPage - 1) @@ -225,7 +225,7 @@ fun SimpleFlipPageTextComponent( fun nextPage() { if (pagerState.currentPage + 1 < pagerState.pageCount) scope.launch { - if (flipAnime != MenuOptions.FlipAnimeOptions.None) + if (flipAnimation != MenuOptions.FlipAnimationOptions.None) pagerState.animateScrollToPage(pagerState.currentPage + 1) else pagerState.scrollToPage(pagerState.currentPage + 1) @@ -266,7 +266,7 @@ fun SimpleFlipPageTextComponent( onChapterReadingProgressChange(pagerState.currentPage.toFloat() / (pagerState.pageCount - 1)) else onChapterReadingProgressChange(1F) } - DisposableEffect(isUsingVolumeKeyFlip, flipAnime, fastChapterChange) { + DisposableEffect(isUsingVolumeKeyFlip, flipAnimation, fastChapterChange) { val localBroadcastManager = LocalBroadcastManager.getInstance(current) val keycodeVolumeUpReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { @@ -320,7 +320,7 @@ fun SimpleFlipPageTextComponent( if (it.absoluteValue > 60) changeIsImmersive.invoke() } ) - .pointerInput(isUsingClickFlip, flipAnime, fastChapterChange) { + .pointerInput(isUsingClickFlip, flipAnimation, fastChapterChange) { detectTapGestures( onTap = { if (isUsingClickFlip) diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt index fbd67d1f..072b85a3 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt @@ -42,7 +42,6 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope @@ -277,7 +276,7 @@ private fun TopBar( LazyRow { item { Text( - text = "详情", + text = stringResource(R.string.detail_title), style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.W400, color = MaterialTheme.colorScheme.onSurface, @@ -353,7 +352,9 @@ private fun BookCardBlock(bookInformation: BookInformation) { ) { BookStatusIcon(bookInformation) Text( - text = if (bookInformation.isComplete) "已完结" else stringResource( + text = if (bookInformation.isComplete) + stringResource(R.string.book_completed) + else stringResource( R.string.book_info_update_date, bookInformation.lastUpdated.year, bookInformation.lastUpdated.monthValue, @@ -378,7 +379,7 @@ private fun BookCardBlock(bookInformation: BookInformation) { tint = MaterialTheme.colorScheme.outline ) Text( - text = "${bookInformation.wordCount / 1000}K 字", + text = stringResource(R.string.book_info_word_count_kilo, bookInformation.wordCount / 1000), maxLines = 1, fontSize = 14.sp, lineHeight = 17.sp, @@ -466,7 +467,7 @@ private fun QuickOperationsBlock( ) { QuickOperationButton( icon = painterResource(R.drawable.bookmark_add_24px), - title = "添加至书架", + title = stringResource(R.string.add_to_bookshelf), onClick = onClickAddToBookShelf ) } @@ -477,7 +478,7 @@ private fun QuickOperationsBlock( ) { QuickOperationButton( icon = painterResource(R.drawable.cloud_download_24px), - title = "缓存至本地", + title = stringResource(R.string.action_cache), onClick = onClickCache ) } @@ -523,7 +524,7 @@ private fun IntroBlock(description: String) { tint = MaterialTheme.colorScheme.primary ) Text( - text = if (expanded) "收起" else "展开", + text = if (expanded) stringResource(R.string.collapse) else stringResource(R.string.expand), color = MaterialTheme.colorScheme.primary, ) } @@ -566,7 +567,8 @@ private fun VolumeItem( color = if (isFullyRead) MaterialTheme.colorScheme.secondary else MaterialTheme.colorScheme.onSurface ) Text( - text = if (isFullyRead) "已读完" else "已读 $readCount/$totalCount", + text = if (isFullyRead) stringResource(R.string.info_reading_finished) + else stringResource(R.string.info_reading_progress, readCount, totalCount), fontSize = 14.sp, color = MaterialTheme.colorScheme.secondary ) diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/Dialog.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/Dialog.kt index ab3724eb..c3302598 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/Dialog.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/Dialog.kt @@ -184,7 +184,7 @@ fun UpdatesAvailableDialog( AlertDialog( title = { Text( - text = "更新可用", + text = stringResource(R.string.dialog_updates_available), color = MaterialTheme.colorScheme.onSurface, ) }, @@ -262,12 +262,12 @@ fun AddBookToBookshelfDialog( val scrollState = rememberScrollState() BaseDialog( icon = painterResource(R.drawable.filled_bookmark_24px), - title = "添加至书架", - description = "将这本小说添加到以下分组", + title = stringResource(R.string.add_to_bookshelf), + description = stringResource(R.string.dialog_add_to_bookshelf_text), onDismissRequest = onDismissRequest, onConfirmation = onConfirmation, - dismissText = "取消", - confirmationText = "添加至选定分组", + dismissText = stringResource(R.string.cancel), + confirmationText = stringResource(R.string.add_to_bookshelf), ) { Column(Modifier.width(IntrinsicSize.Max).sizeIn(maxHeight = 350.dp).verticalScroll(scrollState)) { allBookshelf.forEachIndexed { index, bookshelf -> @@ -277,7 +277,7 @@ fun AddBookToBookshelfDialog( .fillMaxWidth() .padding(horizontal = 14.dp), title = bookshelf.name, - supportingText = "共 ${bookshelf.allBookIds.size} 本", + supportingText = stringResource(R.string.bookshelf_book_count, bookshelf.allBookIds.size), checked = selectedBookshelfIds.contains(bookshelf.id), onCheckedChange = { if (it) onSelectBookshelf(bookshelf.id) else onDeselectBookshelf( @@ -383,39 +383,39 @@ fun ExportUserDataDialog( .padding(horizontal = 14.dp) BaseDialog( icon = painterResource(R.drawable.output_24px), - title = "导出数据", - description = "选择需要导出的数据。", + title = stringResource(R.string.settings_snap_data), + description = stringResource(R.string.dialog_snap_user_data_text), onDismissRequest = onDismissRequest, ) { Column(Modifier.width(IntrinsicSize.Max).sizeIn(maxHeight = 350.dp)) { CheckBoxListItem( modifier = listItemModifier, - title = "书架", - supportingText = "包括书架及书本信息", + title = stringResource(R.string.dialog_snap_bookshelf), + supportingText = stringResource(R.string.dialog_snap_bookshelf_text), checked = mutableExportContext.bookshelf, onCheckedChange = { mutableExportContext.bookshelf = it } ) HorizontalDivider(Modifier.padding(horizontal = 14.dp)) CheckBoxListItem( modifier = listItemModifier, - title = "阅读信息", - supportingText = "包括阅读历史、进度和时长等信息", + title = stringResource(R.string.dialog_snap_reading_data), + supportingText = stringResource(R.string.dialog_snap_reading_data_text), checked = mutableExportContext.readingData, onCheckedChange = { mutableExportContext.readingData = it } ) HorizontalDivider(Modifier.padding(horizontal = 14.dp)) CheckBoxListItem( modifier = listItemModifier, - title = "设置项", - supportingText = "包括应用设置和阅读器设置", + title = stringResource(R.string.dialog_snap_settings), + supportingText = stringResource(R.string.dialog_snap_settings_text), checked = mutableExportContext.settings, onCheckedChange = { mutableExportContext.settings = it } ) HorizontalDivider(Modifier.padding(horizontal = 14.dp)) CheckBoxListItem( modifier = listItemModifier, - title = "书签", - supportingText = "包括全部书本的书签信息", + title = stringResource(R.string.dialog_snap_bookmarks), + supportingText = stringResource(R.string.dialog_snap_bookmarks_text), checked = mutableExportContext.bookmark, onCheckedChange = { mutableExportContext.bookmark = it } ) @@ -431,7 +431,7 @@ fun ExportUserDataDialog( onClick = onDismissRequest ) { Text( - text = "取消", + text = stringResource(R.string.cancel), style = MaterialTheme.typography.labelLarge, color = MaterialTheme.colorScheme.primary, ) @@ -440,7 +440,7 @@ fun ExportUserDataDialog( onClick = { onClickSaveAndSend(mutableExportContext) } ) { Text( - text = "导出并分享", + text = stringResource(R.string.export_and_share), style = MaterialTheme.typography.labelLarge, color = MaterialTheme.colorScheme.primary, ) @@ -449,7 +449,7 @@ fun ExportUserDataDialog( onClick = { onClickSaveToFile(mutableExportContext) } ) { Text( - text = "导出至文件", + text = stringResource(R.string.export_to_file), style = MaterialTheme.typography.labelLarge, color = MaterialTheme.colorScheme.primary, ) @@ -486,12 +486,12 @@ fun SourceChangeDialog( ) { BaseDialog( icon = painterResource(R.drawable.public_24px), - title = "切换数据源", - description = "选择使用的数据源,切换软件的网络数据提供源,但这会导致你的用户数据被暂存,将在下次切换到此数据源后恢复。但是你的缓存数据会被永久删除,并且需要重启应用。", + title = stringResource(R.string.settings_select_data_source), + description = stringResource(R.string.dialog_select_data_source_text), onDismissRequest = onDismissRequest, onConfirmation = onConfirmation, - dismissText = "取消", - confirmationText = "切换并重启" + dismissText = stringResource(R.string.cancel), + confirmationText = stringResource(R.string.switch_and_restart) ) { webDataSourceItems.forEachIndexed { index, webDataSourceItem -> RadioButtonListItem( @@ -500,7 +500,7 @@ fun SourceChangeDialog( .fillMaxWidth() .padding(horizontal = 14.dp), title = webDataSourceItem.name, - supportingText = "提供者: ${webDataSourceItem.provider}", + supportingText = stringResource(R.string.data_source_provider, webDataSourceItem.provider), selected = selectedWebDataSourceId == webDataSourceItem.id, onClick = { onClickItem(webDataSourceItem.id) } ) @@ -529,19 +529,19 @@ fun SettingsGitHubProxyDialog( AlertDialog ( onDismissRequest = onDismissRequest, - title = { Text("设置 GitHub 代理") }, + title = { Text(stringResource(R.string.settings_github_proxy)) }, text = { Column { ObjectOptions.GitHubProxyUrlOptions.optionsList.forEach { option -> RadioButtonListItem( - title = option.name, + title = stringResource(option.name), selected = selectedOption.key == option.key, - supportingText = option.description, + supportingText = stringResource(option.description), onClick = { selectedOption = option }, ) } Spacer(modifier = Modifier.height(8.dp)) - Text("请注意: 由于代理普遍不支持加速 GitHub API, 所以我们无法在检查环节使用代理。") + Text(stringResource(R.string.dialog_github_proxy_notice)) if (selectedOption.key == "custom") { Spacer(modifier = Modifier.height(12.dp)) TextField( @@ -549,7 +549,7 @@ fun SettingsGitHubProxyDialog( value = input, supportingText = { Text( - "注意: 协议和结尾的\"/\"不可省略", + stringResource(R.string.dialog_github_proxy_supporting_text), fontFamily = FontFamily.Monospace ) }, @@ -558,14 +558,14 @@ fun SettingsGitHubProxyDialog( input = it }, label = { - Text("自定义站点") + Text(stringResource(R.string.dialog_github_proxy_custom_url)) }, modifier = Modifier.fillMaxWidth() ) if (!isValid) { Text( modifier = Modifier.padding(8.dp), - text = "正确格式示范: \n" + + text = stringResource(R.string.dialog_github_proxy_custom_url_hint) + "https://example.com/\n" + "https://nth.3rd.example.com/", fontFamily = FontFamily.Monospace, @@ -674,20 +674,20 @@ fun SettingsAboutInfoDialog( val contentColor = MaterialTheme.colorScheme.secondary Column { Text( - "版本", color = titleColor + stringResource(R.string.dialog_about_version), color = titleColor ) Text( "${BuildConfig.VERSION_NAME} [${BuildConfig.VERSION_CODE}]", color = contentColor ) Spacer(modifier = Modifier.height(6.dp)) Text( - "构建时间", color = titleColor + stringResource(R.string.dialog_about_build_time), color = titleColor ) Text( stringResource(R.string.info_build_date), color = contentColor ) Spacer(modifier = Modifier.height(6.dp)) - Text("编译主机", color = titleColor) + Text(stringResource(R.string.dialog_about_build_host), color = titleColor) Text( stringResource(R.string.info_build_host), color = contentColor ) @@ -709,10 +709,9 @@ fun ExportToEpubDialog( ) { AlertDialog ( onDismissRequest = onDismissRequest, - title = { Text("导出为 EPUB") }, + title = { Text(stringResource(R.string.dialog_export_to_epub)) }, text = { - Text("EPUB (Electronic Publication) 是一种开放的电子书标准,格式为 .epub。\n\n"+ - "要将这本书导出为 EPUB 吗?") + Text(stringResource(R.string.dialog_export_to_epub_text)) }, confirmButton = { TextButton( diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/Filter.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/Filter.kt index b9c77161..66d7aeb8 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/Filter.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/Filter.kt @@ -64,8 +64,8 @@ fun Filter.Component(dialog: (@Composable () -> Unit) -> Unit) { FilterChipsDialog( enable = displayDialog, selected = selected, - title = this@Component.dialogTitle, - description = this@Component.description, + title = stringResource(this@Component.dialogTitleId), + description = stringResource(this@Component.descriptionId), onSelectedChange = { selected = it enabled = it != this@Component.getDefaultChoice() diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt index d9d0752f..ac100ac4 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt @@ -42,6 +42,7 @@ import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.pointer.pointerInteropFilter import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp @@ -340,7 +341,7 @@ fun SettingsMenuEntry( ) } AnimatedTextLine( - text = options.get(selectedOptionKey).name, + text = stringResource(options.get(selectedOptionKey).nameId), fontSize = 14.sp, lineHeight = 18.sp, color = MaterialTheme.colorScheme.primary @@ -360,7 +361,7 @@ fun SettingsMenuEntry( onOptionChange(option.key) expanded = false }, - text = { Text(option.name, fontSize = 14.sp) }, + text = { Text(stringResource(option.nameId), fontSize = 14.sp) }, ) } } diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/edit/EditBookshelfScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/edit/EditBookshelfScreen.kt index db6a970e..afc99369 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/edit/EditBookshelfScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/edit/EditBookshelfScreen.kt @@ -32,6 +32,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -68,7 +69,7 @@ fun EditBookshelfScreen( } dialog { if (dialogVisible) - DeleteDialog( + DeleteBookshelfDialog( onDismissRequest = { dialogVisible = false }, onConfirmation = { dialogVisible = false @@ -86,9 +87,9 @@ fun EditBookshelfScreen( .padding(20.dp), value = bookshelf.name, onValueChange = onNameChange, - label = { Text("名称") }, - placeholder = { Text("输入书本名称") }, - supportingText = { Text("为书架命名,建议长度在6个汉字以内") }, + label = { Text(stringResource(R.string.name)) }, + placeholder = { Text(stringResource(R.string.bookshelf_name_placeholder)) }, + supportingText = { Text(stringResource(R.string.bookshelf_name_placeholder)) }, maxLines = 1, interactionSource = interactionSource, trailingIcon = { @@ -105,7 +106,7 @@ fun EditBookshelfScreen( ) Text( modifier = Modifier.padding(16.dp, 10.dp), - text = "书架设置", + text = stringResource(R.string.bookshelf_settings), style = MaterialTheme.typography.displayLarge, fontWeight = FontWeight.W700, fontSize = 17.sp, @@ -115,15 +116,15 @@ fun EditBookshelfScreen( ) SwitchSettingItem( iconRes = R.drawable.cloud_download_24px, - title = "自动缓存", - description = "自动缓存新加入的书本完整内容", + title = stringResource(R.string.settings_auto_cache), + description = stringResource(R.string.settings_auto_cache_desc), value = bookshelf.autoCache, onValueChange = onAutoCacheChange ) SwitchSettingItem( iconRes = R.drawable.outline_schedule_24px, - title = "更新通知提醒", - description = "在后台时,检查并通知书本更新", + title = stringResource(R.string.settings_book_update_reminder), + description = stringResource(R.string.settings_book_update_reminder_desc), value = bookshelf.systemUpdateReminder, onValueChange = onSystemUpdateReminderChange ) @@ -139,8 +140,17 @@ fun EditBookshelfScreen( contentDescription = "Localized description", ) }, - headlineContent = { Text(text = "删除此书架", fontSize = 16.sp, modifier = Modifier.padding(bottom = 2.dp)) }, - supportingContent = { Text(text = "将此书架永久移除", fontSize = 14.sp, lineHeight = 15.sp) }, + headlineContent = { Text( + text = stringResource(R.string.settings_delete_bookshelf), + fontSize = 16.sp, + modifier = Modifier.padding(bottom = 2.dp) + ) }, + supportingContent = { + Text( + text = stringResource(R.string.settings_delete_bookshelf_desc), + fontSize = 14.sp, + lineHeight = 15.sp + ) }, ) } } @@ -216,13 +226,13 @@ fun SwitchSettingItem( } @Composable -private fun DeleteDialog( +private fun DeleteBookshelfDialog( onDismissRequest: () -> Unit, onConfirmation: () -> Unit) { AlertDialog( title = { Text( - text = "删除书架", + text = stringResource(R.string.dialog_delete_bookshelf), style = MaterialTheme.typography.headlineSmall.copy( fontWeight = FontWeight.W400 ), @@ -231,7 +241,7 @@ private fun DeleteDialog( }, text = { Text( - text = "确定要删除这个书架吗?它将会永久失去!(真的很久!)", + text = stringResource(R.string.dialog_delete_bookshelf_text), style = MaterialTheme.typography.bodyMedium.copy( fontWeight = FontWeight.W400 ), @@ -244,7 +254,7 @@ private fun DeleteDialog( onClick = onConfirmation ) { Text( - text = "确定", + text = stringResource(android.R.string.ok), style = MaterialTheme.typography.labelLarge.copy( fontWeight = FontWeight.W500 ), @@ -257,7 +267,7 @@ private fun DeleteDialog( onClick = onDismissRequest ) { Text( - text = "取消", + text = stringResource(R.string.cancel), style = MaterialTheme.typography.labelLarge.copy( fontWeight = FontWeight.W500 ), diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt index 421fb6cb..73c8d3fa 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt @@ -288,7 +288,7 @@ fun BookshelfHomeScreen( CollapseGroupTitle( modifier = Modifier.animateItem(), icon = painterResource(R.drawable.keep_24px), - title = "已更新 (${uiState.selectedBookshelf.updatedBookIds.size})", + title = stringResource(R.string.bookshelf_group_title_updated, uiState.selectedBookshelf.updatedBookIds.size), expanded = updatedBooksExpanded, onClickExpand = { updatedBooksExpanded = !updatedBooksExpanded } ) @@ -316,7 +316,7 @@ fun BookshelfHomeScreen( CollapseGroupTitle( modifier = Modifier.animateItem(), icon = painterResource(R.drawable.keep_24px), - title = "已固定 (${uiState.selectedBookshelf.pinnedBookIds.size})", + title = stringResource(R.string.bookshelf_group_title_pinned, uiState.selectedBookshelf.pinnedBookIds.size), expanded = pinnedBooksExpanded, onClickExpand = { pinnedBooksExpanded = !pinnedBooksExpanded } ) @@ -343,7 +343,7 @@ fun BookshelfHomeScreen( CollapseGroupTitle( modifier = Modifier.animateItem(), icon = painterResource(R.drawable.outline_bookmark_24px), - title = "全部 (${uiState.selectedBookshelf.allBookIds.size})", + title = stringResource(R.string.bookshelf_group_title_all, uiState.selectedBookshelf.allBookIds.size), expanded = allBooksExpanded, onClickExpand = { allBooksExpanded = !allBooksExpanded } ) @@ -457,7 +457,7 @@ fun TopBar( DropdownMenuItem( text = { Text( - text = "新建书架", + text = stringResource(R.string.bookshelf_create_title), style = MaterialTheme.typography.bodyLarge, ) }, @@ -466,7 +466,7 @@ fun TopBar( DropdownMenuItem( text = { Text( - text = "编辑此书架", + text = stringResource(R.string.bookshelf_settings), style = MaterialTheme.typography.bodyLarge, ) }, @@ -475,7 +475,7 @@ fun TopBar( DropdownMenuItem( text = { Text( - text = "分享此书架", + text = stringResource(R.string.share_bookshelf), style = MaterialTheme.typography.bodyLarge, ) }, @@ -484,7 +484,7 @@ fun TopBar( DropdownMenuItem( text = { Text( - text = "导入和导出...", + text = stringResource(R.string.import_and_export), style = MaterialTheme.typography.bodyLarge, ) }, @@ -517,7 +517,7 @@ fun TopBar( onDismissRequest = { exportImportMenuExpended = false } ) { DropdownMenuItem( - text = { Text("导出为 .lnr", style = MaterialTheme.typography.bodyLarge) }, + text = { Text(stringResource(R.string.export_to_lnr_file)) }, onClick = { onClickSaveThisBookshelf() exportImportMenuExpended = false @@ -525,7 +525,7 @@ fun TopBar( } ) DropdownMenuItem( - text = { Text("导出全部为 .lnr", style = MaterialTheme.typography.bodyLarge) }, + text = { Text(stringResource(R.string.export_all_to_lnr_file)) }, onClick = { onClickSaveAllBookshelf() exportImportMenuExpended = false @@ -533,7 +533,7 @@ fun TopBar( } ) DropdownMenuItem( - text = { Text("从文件导入", style = MaterialTheme.typography.bodyLarge) }, + text = { Text(stringResource(R.string.import_from_file)) }, onClick = { onClickImportBookshelf() exportImportMenuExpended = false diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/Exploration.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/Exploration.kt index e9a90a0a..0bb97aeb 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/Exploration.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/Exploration.kt @@ -44,7 +44,7 @@ import kotlinx.coroutines.launch val ExplorationScreenInfo = NavItem ( route = Screen.Home.Exploration.route, drawable = R.drawable.animated_exploration, - label = R.string.nav_exploration + label = R.string.nav_explore ) @OptIn(ExperimentalMaterial3Api::class) @@ -68,7 +68,7 @@ fun Exploration( TopAppBar( title = { Text( - text = stringResource(R.string.nav_exploration), + text = stringResource(R.string.nav_explore), style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.W600, color = MaterialTheme.colorScheme.onSurface diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/expanded/ExpandedPageScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/expanded/ExpandedPageScreen.kt index 942c57e1..c907228f 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/expanded/ExpandedPageScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/expanded/ExpandedPageScreen.kt @@ -138,7 +138,7 @@ fun TopBar( MediumTopAppBar( title = { Text( - text = stringResource(id = R.string.nav_exploration_child, title), + text = stringResource(id = R.string.nav_explore_child, title), style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.W600, color = MaterialTheme.colorScheme.onSurface, diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/home/ExplorationHomeScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/home/ExplorationHomeScreen.kt index 3f40be15..e94878a6 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/home/ExplorationHomeScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/home/ExplorationHomeScreen.kt @@ -128,7 +128,7 @@ fun TopBar( MediumTopAppBar( title = { Text( - text = stringResource(id = R.string.nav_exploration), + text = stringResource(id = R.string.nav_explore), style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.W600, color = MaterialTheme.colorScheme.onSurface, diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/reading/ReadingScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/reading/ReadingScreen.kt index 72c31af0..bdaffbf3 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/reading/ReadingScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/reading/ReadingScreen.kt @@ -20,12 +20,9 @@ import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material3.Button import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -90,7 +87,7 @@ fun ReadingScreen( ) { Text( modifier = Modifier.padding(vertical = 4.dp), - text = "继续阅读", + text = stringResource(R.string.continue_reading), maxLines = 1, fontWeight = FontWeight.Bold, ) @@ -154,7 +151,7 @@ fun ReadingScreen( onClick = onClickJumpToExploration ) { Text( - text = stringResource(id = R.string.navigate_to_exploration), + text = stringResource(id = R.string.navigate_to_explore), style = MaterialTheme.typography.labelLarge, fontWeight = FontWeight.W500, color = MaterialTheme.colorScheme.onPrimary @@ -188,14 +185,14 @@ private fun TopBar( overflow = TextOverflow.Ellipsis ) }, - actions = { + /*actions = { IconButton(onClick = { }) { Icon( imageVector = Icons.Default.MoreVert, contentDescription = stringResource(R.string.more) ) } - }, + },*/ scrollBehavior = scrollBehavior ) } @@ -283,10 +280,10 @@ private fun ReadingBookCard( Text( fontSize = 13.sp, lineHeight = 14.sp, - text = "• 已读 ${(book.readingProgress * 100).toInt()}%" + text = stringResource(R.string.read_progress, (book.readingProgress * 100).toInt().toString() + "%") ) Text( - text = "• ${(book.totalReadTime) / 60} 分钟", + text = stringResource(R.string.read_minutes, (book.totalReadTime) / 60), modifier = Modifier.align(Alignment.CenterVertically), fontSize = 13.sp, lineHeight = 14.sp @@ -336,7 +333,7 @@ private fun ReadingHeaderCard( tint = MaterialTheme.colorScheme.secondary ) Text( - text = "上次阅读 | ${formTime(book.lastReadTime)}", + text = stringResource(R.string.last_read_info, formTime(book.lastReadTime)), color = MaterialTheme.colorScheme.secondary, fontSize = 14.sp, ) @@ -371,7 +368,7 @@ private fun ReadingHeaderCard( modifier = Modifier.fillMaxWidth(), onClick = { onClickContinueReading(book.id, book.lastReadChapterId) }) { Text( - text = "继续上次阅读", + text = stringResource(R.string.resume_last_reading), fontWeight = FontWeight.Bold, maxLines = 1, overflow = TextOverflow.Ellipsis diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsScreen.kt index 63f22ca7..778c0142 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsScreen.kt @@ -106,7 +106,7 @@ fun SettingsScreen( ) } )*/ SettingsCategory( - title = "数据", + title = stringResource(R.string.data_settings), icon = ImageVector.vectorResource(R.drawable.hard_disk_24px) ) { DataSettingsList( diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/data/MenuOptions.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/data/MenuOptions.kt index 2730115c..99f32ea9 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/data/MenuOptions.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/data/MenuOptions.kt @@ -1,15 +1,17 @@ package indi.dmzz_yyhyy.lightnovelreader.ui.home.settings.data +import indi.dmzz_yyhyy.lightnovelreader.R + sealed class MenuOptions(vararg options: Option) { private val _optionList: MutableList