From 796056a5820d2bca6447f6e2cd533198202be5e5 Mon Sep 17 00:00:00 2001 From: TianhengZhuang <39034691+TianHengZhuang@users.noreply.github.com> Date: Wed, 2 Sep 2026 16:08:37 +0800 Subject: [PATCH] Extracted hardcoded UI strings to resources (en/zh) (#247) --- .../java/com/rtbishop/look4sat/MainScreen.kt | 2 +- .../src/main/res/values-zh/strings.xml | 27 +++++++++++++++++++ .../src/main/res/values/strings.xml | 27 +++++++++++++++++++ .../look4sat/feature/radar/SstvPage.kt | 13 ++++----- .../feature/radar/TransceiversPage.kt | 12 ++++----- .../feature/settings/SettingsDialog.kt | 4 +-- .../feature/settings/SettingsScreen.kt | 6 ++--- 7 files changed, 73 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/rtbishop/look4sat/MainScreen.kt b/app/src/main/java/com/rtbishop/look4sat/MainScreen.kt index 48e36371..8ed09a78 100644 --- a/app/src/main/java/com/rtbishop/look4sat/MainScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/MainScreen.kt @@ -252,7 +252,7 @@ private fun TrackingBanner(state: RadioTrackingState, onClick: () -> Unit) { ) Spacer(modifier = Modifier.width(8.dp)) Text( - text = "Tracking: ${state.currentPass?.name ?: ""}", + text = stringResource(R.string.tracking_format, state.currentPass?.name ?: ""), fontSize = 13.sp, fontWeight = FontWeight.Medium, color = MaterialTheme.colorScheme.onPrimaryContainer, diff --git a/core/presentation/src/main/res/values-zh/strings.xml b/core/presentation/src/main/res/values-zh/strings.xml index bc7536e3..0bafcc45 100644 --- a/core/presentation/src/main/res/values-zh/strings.xml +++ b/core/presentation/src/main/res/values-zh/strings.xml @@ -83,6 +83,24 @@ 输入下行频率 (MHz) 偏移 (kHz) + + 连接 + 断开连接 + 关 + 停止 + 跟踪 + TX 基频: + + + 授予权限 + 正在监听… + 需要麦克风权限 + 模式:%s + SSTV 模式 + 无信号 + 未选择收发器 + RX:%s Hz + 上一个 下一个 @@ -103,6 +121,12 @@ 支持 隐私政策 + 已配对的蓝牙设备: + 分频模式(仅 IC-705) + 纬度:%s° + 经度:%s° + QTH:%s + 更新:%s yyyy MMM d - HH:mm:ss @@ -195,4 +219,7 @@ \n• Libre Space Foundation (SatNOGS) 该应用程序不提供任何保修. + + 跟踪:%s + diff --git a/core/presentation/src/main/res/values/strings.xml b/core/presentation/src/main/res/values/strings.xml index 24d1ca25..12d170c0 100644 --- a/core/presentation/src/main/res/values/strings.xml +++ b/core/presentation/src/main/res/values/strings.xml @@ -113,6 +113,24 @@ Enter RX freq (MHz) Offset (kHz) + + Connect + Disconnect + Off + Stop + Track + TX Base: + + + Grant permission + Listening… + Microphone access needed + Mode: %s + SSTV Mode + No signal + No transceiver selected + RX: %s Hz + Prev Next @@ -145,6 +163,12 @@ Privacy Policy https://sites.google.com/view/look4sat-privacy-policy/home + Paired Bluetooth Devices: + Split mode (IC-705 only) + Lat: %s° + Lon: %s° + Qth: %s + Updated: %s d MMM yyyy - HH:mm:ss @@ -239,4 +263,7 @@ The app comes with no warranty + + Tracking: %s + diff --git a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/SstvPage.kt b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/SstvPage.kt index 0144c504..6e0bf2c7 100644 --- a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/SstvPage.kt +++ b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/SstvPage.kt @@ -49,6 +49,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -78,12 +79,12 @@ internal fun SstvPage( ) { Text(text = "🎙️", fontSize = 48.sp) Text( - text = "Microphone access needed", + text = stringResource(R.string.sstv_mic_permission), fontSize = 16.sp, color = MaterialTheme.colorScheme.onSurface ) Button(onClick = requestMicPermission) { - Text("Grant permission") + Text(stringResource(R.string.sstv_grant_permission)) } } } @@ -97,7 +98,7 @@ internal fun SstvPage( val allModes = remember(sstv.supportedModes) { listOf("Auto") + sstv.supportedModes } val dismiss = { showModeDialog.value = false } ConfirmDialog( - title = "SSTV Mode", + title = stringResource(R.string.sstv_mode_title), onAccept = dismiss, onCancel = dismiss ) { @@ -167,7 +168,7 @@ internal fun SstvPage( ) } else { Text( - text = if (sstv.status == SstvStatus.Recording) "Listening…" else "No signal", + text = if (sstv.status == SstvStatus.Recording) stringResource(R.string.sstv_listening) else stringResource(R.string.sstv_no_signal), color = MaterialTheme.colorScheme.onSurface, fontSize = 16.sp, modifier = Modifier.align(Alignment.Center) @@ -196,7 +197,7 @@ internal fun SstvPage( ) { // Doppler-corrected downlink frequency hint OutlinedText( - text = dopplerFrequency?.let { "RX: $it Hz" } ?: "No transceiver selected", + text = dopplerFrequency?.let { stringResource(R.string.sstv_rx_format, it) } ?: stringResource(R.string.sstv_no_transceiver), fontSize = 18.sp, fontWeight = FontWeight.Bold, fillColor = MaterialTheme.colorScheme.primary, @@ -227,7 +228,7 @@ internal fun SstvPage( ) { Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Text( - text = "Mode: ${sstv.selectedMode}", + text = stringResource(R.string.sstv_mode_format, sstv.selectedMode), fontSize = 14.sp, maxLines = 1, color = MaterialTheme.colorScheme.onSurface, diff --git a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/TransceiversPage.kt b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/TransceiversPage.kt index 81969568..78af38a4 100644 --- a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/TransceiversPage.kt +++ b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/TransceiversPage.kt @@ -403,7 +403,7 @@ private fun ExpandedRadioControl( modifier = Modifier.fillMaxWidth() ) { Text( - text = "TX Base: ", + text = stringResource(R.string.radar_tx_base), fontSize = 14.sp, color = MaterialTheme.colorScheme.onSurfaceVariant ) @@ -460,7 +460,7 @@ private fun ExpandedRadioControl( onClick = { onAction(RadarAction.SetCtcssTone(null)) }, label = { Text( - text = "Off", + text = stringResource(R.string.radar_off), fontSize = 12.sp, textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth() @@ -492,19 +492,19 @@ private fun ExpandedRadioControl( if (!radioControl.txPanel.isConnected && !radioControl.rxPanel.isConnected) { CardButton( onClick = { onAction(RadarAction.ConnectRadios) }, - text = "Connect", + text = stringResource(R.string.radar_connect), modifier = Modifier.weight(1f) ) } else { CardButton( onClick = { onAction(RadarAction.DisconnectRadios) }, - text = "Disconnect", + text = stringResource(R.string.radar_disconnect), modifier = Modifier.weight(1f) ) } CardButton( onClick = { onAction(RadarAction.ToggleTracking) }, - text = if (radioControl.isTracking) "Stop" else "Track", + text = if (radioControl.isTracking) stringResource(R.string.radar_stop) else stringResource(R.string.radar_track), modifier = Modifier.weight(1f) ) } @@ -726,7 +726,7 @@ private fun DopplerFrequencyCalculator( decorationBox = { innerTextField -> if (offsetKHz.isEmpty()) { Text( - text = "Offset (kHz)", + text = stringResource(R.string.radar_doppler_offset_hint), fontSize = 16.sp, color = MaterialTheme.colorScheme.onSurfaceVariant ) diff --git a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt index 1d5de355..68b9e7ae 100644 --- a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt +++ b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt @@ -980,7 +980,7 @@ fun RadioControlDialog( modifier = Modifier.fillMaxWidth() ) { Text( - text = "Split mode (IC-705 only)", + text = stringResource(R.string.settings_split_mode), fontWeight = FontWeight.Medium, color = splitModeLabelColor ) @@ -1020,7 +1020,7 @@ fun RadioControlDialog( if (selectingFor.value.isNotBlank()) { Text( - text = "Paired Bluetooth Devices:", + text = stringResource(R.string.settings_paired_devices), fontWeight = FontWeight.Medium, color = MaterialTheme.colorScheme.primary ) diff --git a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt index e0fccc7b..f1569bd6 100644 --- a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt +++ b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt @@ -342,9 +342,9 @@ private fun LocationCard( Text(text = formatUpdateTime(updateTime = settings.stationPos.timestamp)) Spacer(modifier = Modifier.height(2.dp)) Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) { - Text(text = "Lat: ${settings.stationPos.latitude}°") - Text(text = "Lon: ${settings.stationPos.longitude}°") - Text(text = "Qth: ${settings.stationPos.qthLocator}") + Text(text = stringResource(R.string.prefs_lat_prefix, settings.stationPos.latitude)) + Text(text = stringResource(R.string.prefs_lon_prefix, settings.stationPos.longitude)) + Text(text = stringResource(R.string.prefs_qth_prefix, settings.stationPos.qthLocator)) } Spacer(modifier = Modifier.height(1.dp)) Row(horizontalArrangement = Arrangement.SpaceEvenly) {