refactor: use string resources for text and content descriptions
This commit is contained in:
@@ -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>
|
||||||
+4
-1
@@ -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
|
||||||
|
|||||||
+4
-1
@@ -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),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-5
@@ -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))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user