mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Extracted hardcoded UI strings to resources (en/zh) (#247)
This commit is contained in:
1 parent
9cac33dae7
commit
796056a582
7 files changed
+73
-18
No files matched your search
@@ -252,7 +252,7 @@ private fun TrackingBanner(state: RadioTrackingState, onClick: () -> Unit) {
|
|||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.width(8.dp))
|
Spacer(modifier = Modifier.width(8.dp))
|
||||||
Text(
|
Text(
|
||||||
text = "Tracking: ${state.currentPass?.name ?: ""}",
|
text = stringResource(R.string.tracking_format, state.currentPass?.name ?: ""),
|
||||||
fontSize = 13.sp,
|
fontSize = 13.sp,
|
||||||
fontWeight = FontWeight.Medium,
|
fontWeight = FontWeight.Medium,
|
||||||
color = MaterialTheme.colorScheme.onPrimaryContainer,
|
color = MaterialTheme.colorScheme.onPrimaryContainer,
|
||||||
|
|||||||
@@ -83,6 +83,24 @@
|
|||||||
<string name="radar_doppler_rx_hint">输入下行频率 (MHz)</string>
|
<string name="radar_doppler_rx_hint">输入下行频率 (MHz)</string>
|
||||||
<string name="radar_doppler_offset_hint">偏移 (kHz)</string>
|
<string name="radar_doppler_offset_hint">偏移 (kHz)</string>
|
||||||
|
|
||||||
|
<!-- Radar screen (CAT control / SSTV) -->
|
||||||
|
<string name="radar_connect">连接</string>
|
||||||
|
<string name="radar_disconnect">断开连接</string>
|
||||||
|
<string name="radar_off">关</string>
|
||||||
|
<string name="radar_stop">停止</string>
|
||||||
|
<string name="radar_track">跟踪</string>
|
||||||
|
<string name="radar_tx_base">TX 基频:</string>
|
||||||
|
|
||||||
|
<!-- SSTV screen -->
|
||||||
|
<string name="sstv_grant_permission">授予权限</string>
|
||||||
|
<string name="sstv_listening">正在监听…</string>
|
||||||
|
<string name="sstv_mic_permission">需要麦克风权限</string>
|
||||||
|
<string name="sstv_mode_format">模式:%s</string>
|
||||||
|
<string name="sstv_mode_title">SSTV 模式</string>
|
||||||
|
<string name="sstv_no_signal">无信号</string>
|
||||||
|
<string name="sstv_no_transceiver">未选择收发器</string>
|
||||||
|
<string name="sstv_rx_format">RX:%s Hz</string>
|
||||||
|
|
||||||
<!-- Map screen -->
|
<!-- Map screen -->
|
||||||
<string name="map_prev">上一个</string>
|
<string name="map_prev">上一个</string>
|
||||||
<string name="map_next">下一个</string>
|
<string name="map_next">下一个</string>
|
||||||
@@ -103,6 +121,12 @@
|
|||||||
<string name="prefs_donate_title">支持</string>
|
<string name="prefs_donate_title">支持</string>
|
||||||
<string name="prefs_privacy_title">隐私政策</string>
|
<string name="prefs_privacy_title">隐私政策</string>
|
||||||
|
|
||||||
|
<string name="settings_paired_devices">已配对的蓝牙设备:</string>
|
||||||
|
<string name="settings_split_mode">分频模式(仅 IC-705)</string>
|
||||||
|
<string name="prefs_lat_prefix">纬度:%s°</string>
|
||||||
|
<string name="prefs_lon_prefix">经度:%s°</string>
|
||||||
|
<string name="prefs_qth_prefix">QTH:%s</string>
|
||||||
|
|
||||||
<string name="prefs_updated_title">更新:%s</string>
|
<string name="prefs_updated_title">更新:%s</string>
|
||||||
<string name="prefs_updated_time">yyyy MMM d - HH:mm:ss</string>
|
<string name="prefs_updated_time">yyyy MMM d - HH:mm:ss</string>
|
||||||
|
|
||||||
@@ -195,4 +219,7 @@
|
|||||||
\n• Libre Space Foundation (SatNOGS)</string>
|
\n• Libre Space Foundation (SatNOGS)</string>
|
||||||
<string name="prefs_outro_license">该应用程序不提供任何保修.</string>
|
<string name="prefs_outro_license">该应用程序不提供任何保修.</string>
|
||||||
|
|
||||||
|
<!-- Main screen -->
|
||||||
|
<string name="tracking_format">跟踪:%s</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -113,6 +113,24 @@
|
|||||||
<string name="radar_doppler_rx_hint">Enter RX freq (MHz)</string>
|
<string name="radar_doppler_rx_hint">Enter RX freq (MHz)</string>
|
||||||
<string name="radar_doppler_offset_hint">Offset (kHz)</string>
|
<string name="radar_doppler_offset_hint">Offset (kHz)</string>
|
||||||
|
|
||||||
|
<!-- Radar screen (CAT control / SSTV) -->
|
||||||
|
<string name="radar_connect">Connect</string>
|
||||||
|
<string name="radar_disconnect">Disconnect</string>
|
||||||
|
<string name="radar_off">Off</string>
|
||||||
|
<string name="radar_stop">Stop</string>
|
||||||
|
<string name="radar_track">Track</string>
|
||||||
|
<string name="radar_tx_base">TX Base: </string>
|
||||||
|
|
||||||
|
<!-- SSTV screen -->
|
||||||
|
<string name="sstv_grant_permission">Grant permission</string>
|
||||||
|
<string name="sstv_listening">Listening…</string>
|
||||||
|
<string name="sstv_mic_permission">Microphone access needed</string>
|
||||||
|
<string name="sstv_mode_format">Mode: %s</string>
|
||||||
|
<string name="sstv_mode_title">SSTV Mode</string>
|
||||||
|
<string name="sstv_no_signal">No signal</string>
|
||||||
|
<string name="sstv_no_transceiver">No transceiver selected</string>
|
||||||
|
<string name="sstv_rx_format">RX: %s Hz</string>
|
||||||
|
|
||||||
<!-- Map screen -->
|
<!-- Map screen -->
|
||||||
<string name="map_prev">Prev</string>
|
<string name="map_prev">Prev</string>
|
||||||
<string name="map_next">Next</string>
|
<string name="map_next">Next</string>
|
||||||
@@ -145,6 +163,12 @@
|
|||||||
<string name="prefs_privacy_title">Privacy Policy</string>
|
<string name="prefs_privacy_title">Privacy Policy</string>
|
||||||
<string name="prefs_privacy_url" translatable="false">https://sites.google.com/view/look4sat-privacy-policy/home</string>
|
<string name="prefs_privacy_url" translatable="false">https://sites.google.com/view/look4sat-privacy-policy/home</string>
|
||||||
|
|
||||||
|
<string name="settings_paired_devices">Paired Bluetooth Devices:</string>
|
||||||
|
<string name="settings_split_mode">Split mode (IC-705 only)</string>
|
||||||
|
<string name="prefs_lat_prefix">Lat: %s°</string>
|
||||||
|
<string name="prefs_lon_prefix">Lon: %s°</string>
|
||||||
|
<string name="prefs_qth_prefix">Qth: %s</string>
|
||||||
|
|
||||||
<string name="prefs_updated_title">Updated: %s</string>
|
<string name="prefs_updated_title">Updated: %s</string>
|
||||||
<string name="prefs_updated_time">d MMM yyyy - HH:mm:ss</string>
|
<string name="prefs_updated_time">d MMM yyyy - HH:mm:ss</string>
|
||||||
|
|
||||||
@@ -239,4 +263,7 @@
|
|||||||
</string>
|
</string>
|
||||||
<string name="prefs_outro_license">The app comes with no warranty</string>
|
<string name="prefs_outro_license">The app comes with no warranty</string>
|
||||||
|
|
||||||
|
<!-- Main screen -->
|
||||||
|
<string name="tracking_format">Tracking: %s</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -49,6 +49,7 @@ import androidx.compose.ui.graphics.Color
|
|||||||
import androidx.compose.ui.graphics.asImageBitmap
|
import androidx.compose.ui.graphics.asImageBitmap
|
||||||
import androidx.compose.ui.layout.ContentScale
|
import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
@@ -78,12 +79,12 @@ internal fun SstvPage(
|
|||||||
) {
|
) {
|
||||||
Text(text = "🎙️", fontSize = 48.sp)
|
Text(text = "🎙️", fontSize = 48.sp)
|
||||||
Text(
|
Text(
|
||||||
text = "Microphone access needed",
|
text = stringResource(R.string.sstv_mic_permission),
|
||||||
fontSize = 16.sp,
|
fontSize = 16.sp,
|
||||||
color = MaterialTheme.colorScheme.onSurface
|
color = MaterialTheme.colorScheme.onSurface
|
||||||
)
|
)
|
||||||
Button(onClick = requestMicPermission) {
|
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 allModes = remember(sstv.supportedModes) { listOf("Auto") + sstv.supportedModes }
|
||||||
val dismiss = { showModeDialog.value = false }
|
val dismiss = { showModeDialog.value = false }
|
||||||
ConfirmDialog(
|
ConfirmDialog(
|
||||||
title = "SSTV Mode",
|
title = stringResource(R.string.sstv_mode_title),
|
||||||
onAccept = dismiss,
|
onAccept = dismiss,
|
||||||
onCancel = dismiss
|
onCancel = dismiss
|
||||||
) {
|
) {
|
||||||
@@ -167,7 +168,7 @@ internal fun SstvPage(
|
|||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
Text(
|
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,
|
color = MaterialTheme.colorScheme.onSurface,
|
||||||
fontSize = 16.sp,
|
fontSize = 16.sp,
|
||||||
modifier = Modifier.align(Alignment.Center)
|
modifier = Modifier.align(Alignment.Center)
|
||||||
@@ -196,7 +197,7 @@ internal fun SstvPage(
|
|||||||
) {
|
) {
|
||||||
// Doppler-corrected downlink frequency hint
|
// Doppler-corrected downlink frequency hint
|
||||||
OutlinedText(
|
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,
|
fontSize = 18.sp,
|
||||||
fontWeight = FontWeight.Bold,
|
fontWeight = FontWeight.Bold,
|
||||||
fillColor = MaterialTheme.colorScheme.primary,
|
fillColor = MaterialTheme.colorScheme.primary,
|
||||||
@@ -227,7 +228,7 @@ internal fun SstvPage(
|
|||||||
) {
|
) {
|
||||||
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
|
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
|
||||||
Text(
|
Text(
|
||||||
text = "Mode: ${sstv.selectedMode}",
|
text = stringResource(R.string.sstv_mode_format, sstv.selectedMode),
|
||||||
fontSize = 14.sp,
|
fontSize = 14.sp,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
color = MaterialTheme.colorScheme.onSurface,
|
color = MaterialTheme.colorScheme.onSurface,
|
||||||
|
|||||||
@@ -403,7 +403,7 @@ private fun ExpandedRadioControl(
|
|||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = "TX Base: ",
|
text = stringResource(R.string.radar_tx_base),
|
||||||
fontSize = 14.sp,
|
fontSize = 14.sp,
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
)
|
)
|
||||||
@@ -460,7 +460,7 @@ private fun ExpandedRadioControl(
|
|||||||
onClick = { onAction(RadarAction.SetCtcssTone(null)) },
|
onClick = { onAction(RadarAction.SetCtcssTone(null)) },
|
||||||
label = {
|
label = {
|
||||||
Text(
|
Text(
|
||||||
text = "Off",
|
text = stringResource(R.string.radar_off),
|
||||||
fontSize = 12.sp,
|
fontSize = 12.sp,
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
@@ -492,19 +492,19 @@ private fun ExpandedRadioControl(
|
|||||||
if (!radioControl.txPanel.isConnected && !radioControl.rxPanel.isConnected) {
|
if (!radioControl.txPanel.isConnected && !radioControl.rxPanel.isConnected) {
|
||||||
CardButton(
|
CardButton(
|
||||||
onClick = { onAction(RadarAction.ConnectRadios) },
|
onClick = { onAction(RadarAction.ConnectRadios) },
|
||||||
text = "Connect",
|
text = stringResource(R.string.radar_connect),
|
||||||
modifier = Modifier.weight(1f)
|
modifier = Modifier.weight(1f)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
CardButton(
|
CardButton(
|
||||||
onClick = { onAction(RadarAction.DisconnectRadios) },
|
onClick = { onAction(RadarAction.DisconnectRadios) },
|
||||||
text = "Disconnect",
|
text = stringResource(R.string.radar_disconnect),
|
||||||
modifier = Modifier.weight(1f)
|
modifier = Modifier.weight(1f)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
CardButton(
|
CardButton(
|
||||||
onClick = { onAction(RadarAction.ToggleTracking) },
|
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)
|
modifier = Modifier.weight(1f)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -726,7 +726,7 @@ private fun DopplerFrequencyCalculator(
|
|||||||
decorationBox = { innerTextField ->
|
decorationBox = { innerTextField ->
|
||||||
if (offsetKHz.isEmpty()) {
|
if (offsetKHz.isEmpty()) {
|
||||||
Text(
|
Text(
|
||||||
text = "Offset (kHz)",
|
text = stringResource(R.string.radar_doppler_offset_hint),
|
||||||
fontSize = 16.sp,
|
fontSize = 16.sp,
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-2
@@ -980,7 +980,7 @@ fun RadioControlDialog(
|
|||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = "Split mode (IC-705 only)",
|
text = stringResource(R.string.settings_split_mode),
|
||||||
fontWeight = FontWeight.Medium,
|
fontWeight = FontWeight.Medium,
|
||||||
color = splitModeLabelColor
|
color = splitModeLabelColor
|
||||||
)
|
)
|
||||||
@@ -1020,7 +1020,7 @@ fun RadioControlDialog(
|
|||||||
|
|
||||||
if (selectingFor.value.isNotBlank()) {
|
if (selectingFor.value.isNotBlank()) {
|
||||||
Text(
|
Text(
|
||||||
text = "Paired Bluetooth Devices:",
|
text = stringResource(R.string.settings_paired_devices),
|
||||||
fontWeight = FontWeight.Medium,
|
fontWeight = FontWeight.Medium,
|
||||||
color = MaterialTheme.colorScheme.primary
|
color = MaterialTheme.colorScheme.primary
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-3
@@ -342,9 +342,9 @@ private fun LocationCard(
|
|||||||
Text(text = formatUpdateTime(updateTime = settings.stationPos.timestamp))
|
Text(text = formatUpdateTime(updateTime = settings.stationPos.timestamp))
|
||||||
Spacer(modifier = Modifier.height(2.dp))
|
Spacer(modifier = Modifier.height(2.dp))
|
||||||
Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) {
|
Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) {
|
||||||
Text(text = "Lat: ${settings.stationPos.latitude}°")
|
Text(text = stringResource(R.string.prefs_lat_prefix, settings.stationPos.latitude))
|
||||||
Text(text = "Lon: ${settings.stationPos.longitude}°")
|
Text(text = stringResource(R.string.prefs_lon_prefix, settings.stationPos.longitude))
|
||||||
Text(text = "Qth: ${settings.stationPos.qthLocator}")
|
Text(text = stringResource(R.string.prefs_qth_prefix, settings.stationPos.qthLocator))
|
||||||
}
|
}
|
||||||
Spacer(modifier = Modifier.height(1.dp))
|
Spacer(modifier = Modifier.height(1.dp))
|
||||||
Row(horizontalArrangement = Arrangement.SpaceEvenly) {
|
Row(horizontalArrangement = Arrangement.SpaceEvenly) {
|
||||||
|
|||||||
Reference in new issue
Block a user