refactor: use string resources for text and content descriptions

This commit is contained in:
2026-07-03 16:21:08 +02:00
parent bf059d5519
commit f3ade9483d
9 changed files with 82 additions and 17 deletions
@@ -18,7 +18,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import fr.ajaury.gwenedeg.preferences.model.PlaybackPreferences
import fr.ajaury.gwenedeg.resources.generated.resources.Res
import fr.ajaury.gwenedeg.resources.generated.resources.playback_speed_title
import fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
import kotlin.math.roundToInt
/**
@@ -67,7 +70,7 @@ private fun PlaybackSpeedContent(
verticalAlignment = Alignment.CenterVertically,
) {
Text(
text = "Vitesse de lecture",
text = stringResource(Res.string.playback_speed_title),
style = MaterialTheme.typography.titleMedium,
)
Text(
@@ -35,8 +35,12 @@ import fr.ajaury.gwenedeg.player.model.PlayerState
import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerUiState
import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerViewModel
import fr.ajaury.gwenedeg.preferences.ui.SubtitlePreferencesBottomSheet
import fr.ajaury.gwenedeg.resources.generated.resources.Res
import fr.ajaury.gwenedeg.resources.generated.resources.player_back
import fr.ajaury.gwenedeg.resources.generated.resources.subtitle_preferences_action
import fr.ajaury.gwenedeg.subtitle.model.SubtitleLine
import fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.viewmodel.koinViewModel
import org.koin.core.parameter.parametersOf
import kotlin.time.Duration
@@ -126,7 +130,7 @@ fun PlayerScreen(
IconButton(onClick = onBackClicked) {
Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = "Back",
contentDescription = stringResource(Res.string.player_back),
)
}
},
@@ -134,7 +138,7 @@ fun PlayerScreen(
IconButton(onClick = { showPreferences = true }) {
Icon(
imageVector = Icons.Filled.Subtitles,
contentDescription = "Préférences de sous-titrage",
contentDescription = stringResource(Res.string.subtitle_preferences_action),
)
}
},
@@ -9,7 +9,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import fr.ajaury.gwenedeg.resources.generated.resources.Res
import fr.ajaury.gwenedeg.resources.generated.resources.player_next_sentence
import fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
@Composable
fun NextButton(
@@ -23,7 +26,7 @@ fun NextButton(
) {
Icon(
imageVector = Icons.Default.SkipNext,
contentDescription = "Next sentence",
contentDescription = stringResource(Res.string.player_next_sentence),
)
}
}
@@ -14,7 +14,12 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import fr.ajaury.gwenedeg.player.model.PlaybackState
import fr.ajaury.gwenedeg.resources.generated.resources.Res
import fr.ajaury.gwenedeg.resources.generated.resources.player_pause
import fr.ajaury.gwenedeg.resources.generated.resources.player_play
import fr.ajaury.gwenedeg.resources.generated.resources.player_replay
import fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
@Composable
fun PlayButton(
@@ -40,11 +45,12 @@ private fun PlaybackState.toActionIcon(): ImageVector =
PlaybackState.PAUSED, PlaybackState.IDLE -> Icons.Default.PlayArrow
}
@Composable
private fun PlaybackState.toActionContentDescription(): String =
when (this) {
PlaybackState.PLAYING -> "Pause"
PlaybackState.ENDED -> "Replay"
PlaybackState.PAUSED, PlaybackState.IDLE -> "Play"
PlaybackState.PLAYING -> stringResource(Res.string.player_pause)
PlaybackState.ENDED -> stringResource(Res.string.player_replay)
PlaybackState.PAUSED, PlaybackState.IDLE -> stringResource(Res.string.player_play)
}
@Preview
@@ -9,7 +9,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import fr.ajaury.gwenedeg.resources.generated.resources.Res
import fr.ajaury.gwenedeg.resources.generated.resources.player_previous_sentence
import fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
@Composable
fun PreviousButton(
@@ -23,7 +26,7 @@ fun PreviousButton(
) {
Icon(
imageVector = Icons.Default.SkipPrevious,
contentDescription = "Previous sentence",
contentDescription = stringResource(Res.string.player_previous_sentence),
)
}
}
@@ -15,7 +15,14 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import fr.ajaury.gwenedeg.preferences.model.SubtitlePreferences
import fr.ajaury.gwenedeg.resources.generated.resources.Res
import fr.ajaury.gwenedeg.resources.generated.resources.subtitle_preferences_title
import fr.ajaury.gwenedeg.resources.generated.resources.subtitle_transcription_description
import fr.ajaury.gwenedeg.resources.generated.resources.subtitle_transcription_label
import fr.ajaury.gwenedeg.resources.generated.resources.subtitle_translation_description
import fr.ajaury.gwenedeg.resources.generated.resources.subtitle_translation_label
import fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
/**
* Bottom sheet letting the user toggle the display of the Breton transcription (BZH) and the
@@ -56,18 +63,18 @@ private fun SubtitlePreferencesContent(
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
Text(
text = "Sous-titres",
text = stringResource(Res.string.subtitle_preferences_title),
style = MaterialTheme.typography.titleMedium,
)
PreferenceToggle(
title = "Transcription (BZH)",
subtitle = "Afficher la transcription bretonne",
title = stringResource(Res.string.subtitle_transcription_label),
subtitle = stringResource(Res.string.subtitle_transcription_description),
checked = subtitlePreferences.showTranscription,
onCheckedChange = onShowTranscriptionChange,
)
PreferenceToggle(
title = "Traduction (FR)",
subtitle = "Afficher la traduction française",
title = stringResource(Res.string.subtitle_translation_label),
subtitle = stringResource(Res.string.subtitle_translation_description),
checked = subtitlePreferences.showTranslation,
onCheckedChange = onShowTranslationChange,
)
@@ -26,13 +26,12 @@ import fr.ajaury.gwenedeg.records.model.Record
import fr.ajaury.gwenedeg.records.ui.viewmodel.RecordsViewModel
import fr.ajaury.gwenedeg.resources.generated.resources.Res
import fr.ajaury.gwenedeg.resources.generated.resources.app_icon
import fr.ajaury.gwenedeg.resources.generated.resources.app_name
import fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.viewmodel.koinViewModel
/** Display name of the application, shown as the title of the records screen. */
const val APP_NAME = "Chom bev"
@Composable
fun RecordsScreen(
viewModel: RecordsViewModel = koinViewModel(),
@@ -65,7 +64,7 @@ fun RecordsScreen(
contentDescription = null,
modifier = Modifier.size(32.dp),
)
Text(text = APP_NAME)
Text(text = stringResource(Res.string.app_name))
}
},
)