This commit is contained in:
2026-06-06 22:45:31 +02:00
parent 54f291033c
commit 644119377d
8 changed files with 65 additions and 28 deletions
@@ -1,6 +1,7 @@
package com.bitcointxoko.gudariwallet.i18n
import cafe.adriel.lyricist.LyricistStrings
import kotlin.String
@LyricistStrings(languageTag = "en", default = true)
val EnHomeStrings = AppStrings(
@@ -31,9 +32,9 @@ val EnHomeStrings = AppStrings(
showFiat = "+ Show fiat",
updatedAt = { label -> "Updated $label" },
justNow = "just now",
minAgo = {min -> "$min ago"},
minAgo = {min -> "$min min ago"},
atTime = {time -> "at $time"},
viewHistory = "View History",
viewHistory = "Activity",
selectCurrency = "Select currency",
currencyNone = "None",
hideFiatEquivalent = "Hide fiat equivalent",
@@ -196,7 +197,7 @@ val EnHomeStrings = AppStrings(
sendVmPaymentFailedRescan = "Payment failed — could not re-fetch address",
// ── HistoryScreen ─────────────────────────────────────────────────────────
historyTitle = "History",
historyTitle = "Activity",
historyClose = "Close",
historySearchPayments = "Search payments",
historyFilterPayments = "Filter payments",
@@ -272,6 +273,10 @@ val EnHomeStrings = AppStrings(
"partial matches work too.",
// ── PaymentDetailScreen ───────────────────────────────────────────────────
statusSuccess = "Success", // e.g. "Success"
statusPending = "Pending", // e.g. "Pending"
statusFailed = "Failed", // e.g. "Failed"
statusUnknown = "Unknown", // e.g. "Unknown"
detailOutgoingTitle = "Outgoing payment",
detailIncomingTitle = "Incoming payment",
detailBack = "Back",
@@ -33,7 +33,7 @@ val EsHomeStrings = AppStrings(
justNow = "justo ahora",
minAgo = {min -> "hace $min min"},
atTime = {time -> "a las $time"},
viewHistory = "Ver historial",
viewHistory = "Historial",
selectCurrency = "Seleccionar moneda",
currencyNone = "Ninguna",
hideFiatEquivalent = "Ocultar equivalente fiat",
@@ -272,6 +272,10 @@ val EsHomeStrings = AppStrings(
"las coincidencias parciales también funcionan.",
// ── PaymentDetailScreen ───────────────────────────────────────────────────
statusSuccess = "Completado",
statusPending = "Pendiente",
statusFailed = "Fallido",
statusUnknown = "Desconocido",
detailOutgoingTitle = "Pago saliente",
detailIncomingTitle = "Pago entrante",
detailBack = "Atrás",
@@ -33,7 +33,7 @@ val EuStrings = AppStrings(
justNow = "orain bertan",
minAgo = { min -> "duela $min minutu" },
atTime = { time -> "$time-etan" },
viewHistory = "Ikusi historia",
viewHistory = "Historia",
selectCurrency = "Hautatu moneta",
currencyNone = "Bat ere ez",
hideFiatEquivalent = "Ezkutatu fiat baliokidea",
@@ -272,6 +272,10 @@ val EuStrings = AppStrings(
"zati-bat datozenak ere funtzionatzen dute.",
// ── PaymentDetailScreen ───────────────────────────────────────────────────
statusSuccess = "Osatuta",
statusPending = "Zain",
statusFailed = "Huts eginda",
statusUnknown = "Ezezaguna",
detailOutgoingTitle = "Irteerako ordainketa",
detailIncomingTitle = "Sarrerako ordainketa",
detailBack = "Atzera",
@@ -271,6 +271,10 @@ data class AppStrings(
val searchInfoFooter : String,
// ── PaymentDetailScreen ───────────────────────────────────────────────────
val statusSuccess : String, // e.g. "Success"
val statusPending : String, // e.g. "Pending"
val statusFailed : String, // e.g. "Failed"
val statusUnknown : String, // e.g. "Unknown"
val detailOutgoingTitle : String,
val detailIncomingTitle : String,
val detailBack : String,
@@ -0,0 +1,8 @@
package com.bitcointxoko.gudariwallet.i18n
fun AppStrings.paymentStatusLabel(status: String): String = when (status.lowercase()) {
"success" -> statusSuccess
"pending" -> statusPending
"failed" -> statusFailed
else -> statusUnknown
}
@@ -45,8 +45,8 @@ fun HomeTab(
val balanceState by vm.balanceState.collectAsState()
val balanceHidden by vm.balanceHidden.collectAsState()
// ── NEW: language switcher state ──────────────────────────────────────────
val supportedTags = remember { listOf("en", "es", "eu") } // add more as you add locale files
// ── Language switcher state ──────────────────────────────────────────
// val supportedTags = remember { listOf("en", "es", "eu") } // add more as you add locale files
val isRefreshing = balanceState is BalanceState.Loading
|| (balanceState as? BalanceState.Success)?.isRefreshing == true
@@ -222,12 +222,12 @@ fun HomeTab(
}
// ── NEW: Language switcher ─────────────────────────────────
Spacer(Modifier.height(8.dp))
LanguageSwitcherButton(
currentTag = lyricist.languageTag,
supportedTags = supportedTags,
onSelect = { tag -> lyricist.languageTag = tag }
)
// Spacer(Modifier.height(8.dp))
// LanguageSwitcherButton(
// currentTag = lyricist.languageTag,
// supportedTags = supportedTags,
// onSelect = { tag -> lyricist.languageTag = tag }
// )
// ──────────────────────────────────────────────────────────
if (showCurrencyPicker) {
@@ -27,6 +27,7 @@ import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.bitcointxoko.gudariwallet.LocalAppStrings
import com.bitcointxoko.gudariwallet.ui.theme.semanticColors
// ── Amount + fiat column ─────────────────────────────────────────────────────
@@ -63,31 +64,45 @@ internal fun AmountWithFiatColumn(
@Composable
internal fun StatusChip(status: String) {
val semantic = semanticColors()
val strings = LocalAppStrings.current // or however you access Lyricist strings
val (containerColor, contentColor) = when (status.lowercase()) {
"success", "complete", "paid" ->
semantic.successContainer to semantic.onSuccessContainer
"pending", "in_flight", "inflight" ->
semantic.warningContainer to semantic.onWarningContainer
"failed", "error", "expired" ->
semantic.errorContainer to semantic.onErrorContainer
else ->
MaterialTheme.colorScheme.surfaceVariant to MaterialTheme.colorScheme.onSurfaceVariant
data class ChipStyle(
val containerColor: Color,
val contentColor: Color,
val label: String,
)
val style = when (status.lowercase()) {
"success", "complete", "paid" -> ChipStyle(
semantic.successContainer, semantic.onSuccessContainer, strings.statusSuccess
)
"pending", "in_flight", "inflight" -> ChipStyle(
semantic.warningContainer, semantic.onWarningContainer, strings.statusPending
)
"failed", "error", "expired" -> ChipStyle(
semantic.errorContainer, semantic.onErrorContainer, strings.statusFailed
)
else -> ChipStyle(
MaterialTheme.colorScheme.surfaceVariant,
MaterialTheme.colorScheme.onSurfaceVariant,
strings.statusUnknown,
)
}
Surface(
shape = MaterialTheme.shapes.small,
color = containerColor,
contentColor = contentColor
color = style.containerColor,
contentColor = style.contentColor,
) {
Text(
text = status.replaceFirstChar { it.uppercase() },
text = style.label,
style = MaterialTheme.typography.labelSmall,
modifier = Modifier.padding(horizontal = 10.dp, vertical = 4.dp)
)
}
}
// ── Section card wrapper ─────────────────────────────────────────────────────
@Composable
@@ -232,9 +232,6 @@ fun SendScreen(
Spacer(Modifier.height(8.dp))
Text(
text = strings.paymentTakingLongDetail,
// "Your payment is still on its way. This may be a hold invoice
// that settles when the recipient is ready. You'll get a
// notification when it completes — you can safely leave this screen."
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center