fix: 简繁体转换

This commit is contained in:
HapeLee
2026-06-11 15:42:31 +08:00
parent a94dc88a57
commit dbe5863aa4
4 changed files with 25 additions and 70 deletions
@@ -1543,7 +1543,7 @@ private fun MenuBottomBar(
pageButtons.chunked(itemsPerRow).forEach { rowButtons ->
Row(
horizontalArrangement = when {
rowButtons.size > 3 -> Arrangement.SpaceBetween
rowButtons.size > 1 -> Arrangement.SpaceBetween
else -> Arrangement.spacedBy(32.dp, Alignment.CenterHorizontally)
},
modifier = Modifier
@@ -1,35 +1,24 @@
package io.legado.app.ui.book.read.sheet
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringArrayResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import io.legado.app.R
import io.legado.app.data.entities.ReplaceRule
import io.legado.app.data.repository.ReadSettingsRepository
import io.legado.app.model.ReadBook
import io.legado.app.ui.theme.LegadoTheme
import io.legado.app.ui.widget.components.modalBottomSheet.AppModalBottomSheet
import kotlinx.coroutines.launch
import org.koin.compose.koinInject
@Composable
fun EffectiveReplacesSheet(
@@ -41,19 +30,8 @@ fun EffectiveReplacesSheet(
val effectiveRules = remember {
ReadBook.curTextChapter?.effectiveReplaceRules ?: emptyList()
}
val scope = rememberCoroutineScope()
val readSettingsRepository: ReadSettingsRepository = koinInject()
val preferences by readSettingsRepository.preferences.collectAsStateWithLifecycle(
initialValue = io.legado.app.data.repository.ReadPreferences()
)
val showChineseConvert = preferences.chineseConverterType > 0
val chineseConvert = remember { ReplaceRule(0, "繁简转换") }
val items = remember(effectiveRules, showChineseConvert) {
if (showChineseConvert) effectiveRules + chineseConvert else effectiveRules
}
var isEdited by remember { mutableStateOf(false) }
var showChineseConvertDialog by remember { mutableStateOf(false) }
AppModalBottomSheet(
show = show,
@@ -66,18 +44,14 @@ fun EffectiveReplacesSheet(
LazyColumn(
modifier = Modifier.fillMaxWidth(),
) {
items(items, key = { it.id }) { rule ->
items(effectiveRules, key = { it.id }) { rule ->
Text(
text = rule.name,
style = MaterialTheme.typography.bodyLarge,
modifier = Modifier
.fillMaxWidth()
.clickable {
if (rule == chineseConvert) {
showChineseConvertDialog = true
} else {
onOpenReplaceEditor(rule.id, rule.pattern)
}
onOpenReplaceEditor(rule.id, rule.pattern)
}
.padding(vertical = 12.dp),
)
@@ -85,41 +59,4 @@ fun EffectiveReplacesSheet(
}
}
}
if (showChineseConvertDialog) {
val modes = stringArrayResource(R.array.chinese_mode)
AlertDialog(
onDismissRequest = { showChineseConvertDialog = false },
containerColor = LegadoTheme.colorScheme.surfaceContainer,
title = { Text(stringResource(R.string.chinese_converter)) },
text = {
Column {
modes.forEachIndexed { index, mode ->
Text(
text = mode,
style = MaterialTheme.typography.bodyLarge,
modifier = Modifier
.fillMaxWidth()
.clickable {
if (preferences.chineseConverterType != index) {
scope.launch {
readSettingsRepository.setChineseConverterType(index)
}
isEdited = true
}
showChineseConvertDialog = false
}
.padding(vertical = 12.dp),
)
}
}
},
confirmButton = {},
dismissButton = {
TextButton(onClick = { showChineseConvertDialog = false }) {
Text(stringResource(R.string.cancel))
}
},
)
}
}
@@ -30,24 +30,24 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringArrayResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import io.legado.app.R
import io.legado.app.help.config.ReadBookConfig
import io.legado.app.ui.book.read.ConfigUpdate
import io.legado.app.ui.book.read.ReadBookIntent
import io.legado.app.help.config.ReadBookConfig
import io.legado.app.ui.config.readConfig.ReadConfig
import io.legado.app.ui.widget.components.dialog.ColorPickerSheet
import io.legado.app.ui.widget.components.modalBottomSheet.AppModalBottomSheet
import io.legado.app.ui.widget.components.settingItem.TinyClickableSettingItem
import io.legado.app.ui.widget.components.settingItem.TinyColorSettingItem
import io.legado.app.ui.widget.components.settingItem.TinyDropdownSettingItem
import io.legado.app.ui.widget.components.settingItem.TinySliderSettingItem
import io.legado.app.ui.widget.components.settingItem.TinySwitchSettingItem
import io.legado.app.ui.widget.components.tabRow.CardTabRow
import io.legado.app.ui.widget.components.modalBottomSheet.AppModalBottomSheet
import kotlinx.coroutines.launch
// Color picker IDs
@@ -304,6 +304,19 @@ internal fun TextEffectsPage(
imageVector = Icons.Default.TextFields,
onClick = onOpenFontSelect,
)
val chineseConvertEntries = stringArrayResource(R.array.chinese_mode)
val chineseConvertValues = remember { arrayOf("0", "1", "2") }
TinyDropdownSettingItem(
title = stringResource(R.string.chinese_converter),
selectedValue = ReadConfig.chineseConverterType.toString(),
displayEntries = chineseConvertEntries,
entryValues = chineseConvertValues,
onValueChange = {
onIntent(ReadBookIntent.UpdateConfig(ConfigUpdate.ChineseConverterType(it.toInt())))
},
)
Spacer(Modifier.height(8.dp))
// Colors
@@ -246,4 +246,9 @@ object ReadConfig {
PreferKey.ttsEngine,
null
)
var chineseConverterType by prefDelegate(
PreferKey.chineseConverterType,
0
)
}