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
@@ -0,0 +1,20 @@
<resources>
<!-- Breton (br) -->
<string name="app_name">Chom bev</string>
<string name="subtitle_preferences_title">Istitloù</string>
<string name="subtitle_preferences_action">Gwellvezioù istitloù</string>
<string name="subtitle_transcription_label">Treuzskrivañ (BZH)</string>
<string name="subtitle_transcription_description">Diskouez an treuzskrivadur brezhonek</string>
<string name="subtitle_translation_label">Troidigezh (FR)</string>
<string name="subtitle_translation_description">Diskouez an droidigezh c\'hallek</string>
<string name="playback_speed_title">Tizh al lenn</string>
<string name="player_back">Distreiñ</string>
<string name="player_previous_sentence">Frazenn a-raok</string>
<string name="player_next_sentence">Frazenn war-lerc\'h</string>
<string name="player_play">Lenn</string>
<string name="player_pause">Ehan</string>
<string name="player_replay">Adlenn</string>
</resources>
@@ -0,0 +1,20 @@
<resources>
<!-- Default locale: French -->
<string name="app_name">Chom bev</string>
<string name="subtitle_preferences_title">Sous-titres</string>
<string name="subtitle_preferences_action">Préférences de sous-titrage</string>
<string name="subtitle_transcription_label">Transcription (BZH)</string>
<string name="subtitle_transcription_description">Afficher la transcription bretonne</string>
<string name="subtitle_translation_label">Traduction (FR)</string>
<string name="subtitle_translation_description">Afficher la traduction française</string>
<string name="playback_speed_title">Vitesse de lecture</string>
<string name="player_back">Retour</string>
<string name="player_previous_sentence">Phrase précédente</string>
<string name="player_next_sentence">Phrase suivante</string>
<string name="player_play">Lire</string>
<string name="player_pause">Pause</string>
<string name="player_replay">Rejouer</string>
</resources>
@@ -18,7 +18,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import fr.ajaury.gwenedeg.preferences.model.PlaybackPreferences 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 fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
import kotlin.math.roundToInt import kotlin.math.roundToInt
/** /**
@@ -67,7 +70,7 @@ private fun PlaybackSpeedContent(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Text( Text(
text = "Vitesse de lecture", text = stringResource(Res.string.playback_speed_title),
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
) )
Text( 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.PlayerUiState
import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerViewModel import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerViewModel
import fr.ajaury.gwenedeg.preferences.ui.SubtitlePreferencesBottomSheet 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.subtitle.model.SubtitleLine
import fr.ajaury.gwenedeg.theme.ChomBevTheme import fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.viewmodel.koinViewModel import org.koin.compose.viewmodel.koinViewModel
import org.koin.core.parameter.parametersOf import org.koin.core.parameter.parametersOf
import kotlin.time.Duration import kotlin.time.Duration
@@ -126,7 +130,7 @@ fun PlayerScreen(
IconButton(onClick = onBackClicked) { IconButton(onClick = onBackClicked) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = "Back", contentDescription = stringResource(Res.string.player_back),
) )
} }
}, },
@@ -134,7 +138,7 @@ fun PlayerScreen(
IconButton(onClick = { showPreferences = true }) { IconButton(onClick = { showPreferences = true }) {
Icon( Icon(
imageVector = Icons.Filled.Subtitles, 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.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp 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 fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
@Composable @Composable
fun NextButton( fun NextButton(
@@ -23,7 +26,7 @@ fun NextButton(
) { ) {
Icon( Icon(
imageVector = Icons.Default.SkipNext, 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.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import fr.ajaury.gwenedeg.player.model.PlaybackState 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 fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
@Composable @Composable
fun PlayButton( fun PlayButton(
@@ -40,11 +45,12 @@ private fun PlaybackState.toActionIcon(): ImageVector =
PlaybackState.PAUSED, PlaybackState.IDLE -> Icons.Default.PlayArrow PlaybackState.PAUSED, PlaybackState.IDLE -> Icons.Default.PlayArrow
} }
@Composable
private fun PlaybackState.toActionContentDescription(): String = private fun PlaybackState.toActionContentDescription(): String =
when (this) { when (this) {
PlaybackState.PLAYING -> "Pause" PlaybackState.PLAYING -> stringResource(Res.string.player_pause)
PlaybackState.ENDED -> "Replay" PlaybackState.ENDED -> stringResource(Res.string.player_replay)
PlaybackState.PAUSED, PlaybackState.IDLE -> "Play" PlaybackState.PAUSED, PlaybackState.IDLE -> stringResource(Res.string.player_play)
} }
@Preview @Preview
@@ -9,7 +9,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp 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 fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.stringResource
@Composable @Composable
fun PreviousButton( fun PreviousButton(
@@ -23,7 +26,7 @@ fun PreviousButton(
) { ) {
Icon( Icon(
imageVector = Icons.Default.SkipPrevious, 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.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import fr.ajaury.gwenedeg.preferences.model.SubtitlePreferences 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 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 * 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), verticalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
Text( Text(
text = "Sous-titres", text = stringResource(Res.string.subtitle_preferences_title),
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
) )
PreferenceToggle( PreferenceToggle(
title = "Transcription (BZH)", title = stringResource(Res.string.subtitle_transcription_label),
subtitle = "Afficher la transcription bretonne", subtitle = stringResource(Res.string.subtitle_transcription_description),
checked = subtitlePreferences.showTranscription, checked = subtitlePreferences.showTranscription,
onCheckedChange = onShowTranscriptionChange, onCheckedChange = onShowTranscriptionChange,
) )
PreferenceToggle( PreferenceToggle(
title = "Traduction (FR)", title = stringResource(Res.string.subtitle_translation_label),
subtitle = "Afficher la traduction française", subtitle = stringResource(Res.string.subtitle_translation_description),
checked = subtitlePreferences.showTranslation, checked = subtitlePreferences.showTranslation,
onCheckedChange = onShowTranslationChange, 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.records.ui.viewmodel.RecordsViewModel
import fr.ajaury.gwenedeg.resources.generated.resources.Res 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_icon
import fr.ajaury.gwenedeg.resources.generated.resources.app_name
import fr.ajaury.gwenedeg.theme.ChomBevTheme import fr.ajaury.gwenedeg.theme.ChomBevTheme
import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.viewmodel.koinViewModel 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 @Composable
fun RecordsScreen( fun RecordsScreen(
viewModel: RecordsViewModel = koinViewModel(), viewModel: RecordsViewModel = koinViewModel(),
@@ -65,7 +64,7 @@ fun RecordsScreen(
contentDescription = null, contentDescription = null,
modifier = Modifier.size(32.dp), modifier = Modifier.size(32.dp),
) )
Text(text = APP_NAME) Text(text = stringResource(Res.string.app_name))
} }
}, },
) )