feat: localisation with lyricist
This commit is contained in:
@@ -94,7 +94,23 @@ val EnHomeStrings = AppStrings(
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
paymentReceived = "Payment Received!",
|
||||
|
||||
// ── SendScreen — general ──────────────────────────────────────────────────
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
amountDisplaySats = { amount -> "$amount ${if (amount == 1L) "sat" else "sats"}" },
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
brightnessReduce = "Reduce brightness",
|
||||
brightnessBoost = "Boost brightness",
|
||||
qrShare = "Share",
|
||||
qrCopy = "Copy",
|
||||
qrNfcStop = "Stop NFC sharing",
|
||||
qrNfcStart = "Share via NFC",
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
receiveVmFailedToCreateInvoice = "Failed to create invoice",
|
||||
receiveVmWithdrawRejected = "Withdraw service rejected the invoice",
|
||||
receiveVmWithdrawFailed = "Withdraw failed",
|
||||
|
||||
// ── SendScreen — general ──────────────────────────────────────────────────
|
||||
send = "Send",
|
||||
paste = "Paste",
|
||||
continueButton = "Continue",
|
||||
@@ -159,4 +175,124 @@ val EnHomeStrings = AppStrings(
|
||||
routeHintHideDetails = "Hide details ▴",
|
||||
routeHintHopsHeader = "Private route hint hops",
|
||||
routeHintHopFees = { ppm, baseLabel -> "$ppm ppm · $baseLabel base" },
|
||||
|
||||
// ── HistoryScreen ─────────────────────────────────────────────────────────
|
||||
historyTitle = "History",
|
||||
historyClose = "Close",
|
||||
historySearchPayments = "Search payments",
|
||||
historyFilterPayments = "Filter payments",
|
||||
historyRetry = "Retry",
|
||||
historyNoPayments = "No payments yet.",
|
||||
historySearchPlaceholder = "Search transactions",
|
||||
historySearchHelp = "Search help",
|
||||
historySearchPaste = "Paste",
|
||||
historySearchClear = "Clear search",
|
||||
historySearchChip = { tail -> "search: …$tail" },
|
||||
historyClearSearch = "Clear search",
|
||||
filterDirectionOutgoing = "Outgoing",
|
||||
filterDirectionIncoming = "Incoming",
|
||||
filterClearDirection = "Clear direction filter",
|
||||
filterStatusCompleted = "Completed",
|
||||
filterStatusPending = "Pending",
|
||||
filterStatusFailed = "Failed",
|
||||
filterRemoveStatus = "Remove status filter",
|
||||
filterRemoveType = "Remove type filter",
|
||||
filterAmountRange = { min, max -> "$min–$max sats" },
|
||||
filterAmountMin = { min -> "≥ $min sats" },
|
||||
filterAmountMax = { max -> "≤ $max sats" },
|
||||
filterClearAmount = "Clear amount filter",
|
||||
filterDateThisWeek = "This week",
|
||||
filterDateThisMonth = "This month",
|
||||
filterDateThisYear = "This year",
|
||||
filterDateRange = { from, to -> "$from–$to" },
|
||||
filterDateFrom = { from -> "From $from" },
|
||||
filterDateUntil = { until -> "Until $until" },
|
||||
filterClearDate = "Clear date filter",
|
||||
|
||||
// ── FilterBottomSheet ─────────────────────────────────────────────────────
|
||||
filterSheetTitle = "Filter payments",
|
||||
filterSectionDirection = "Direction",
|
||||
filterDirectionAll = "All",
|
||||
filterSectionStatus = "Status",
|
||||
filterSectionType = "Type",
|
||||
filterSectionAmount = "Amount (sats)",
|
||||
filterAmountMin_label = "Min",
|
||||
filterAmountMax_label = "Max",
|
||||
filterAmountSuffix = "sats",
|
||||
filterSectionDate = "Date",
|
||||
filterDateFrom_label = "From",
|
||||
filterDateTo_label = "To",
|
||||
filterDialogOk = "OK",
|
||||
filterDialogCancel = "Cancel",
|
||||
|
||||
// ── SearchInfoSheet ───────────────────────────────────────────────────────
|
||||
searchInfoTitle = "What can I search for?",
|
||||
searchInfoSubtitle = "Type any part of the following to find a payment:",
|
||||
searchInfoMemoTitle = "Memo",
|
||||
searchInfoMemoDesc = "The message or description attached to a payment. " +
|
||||
"For example, \"coffee\" or \"rent March\".",
|
||||
searchInfoInvoiceTitle = "Invoice",
|
||||
searchInfoInvoiceDesc = "The payment request you scanned or pasted to send a payment. " +
|
||||
"It usually starts with \"lnbc…\". " +
|
||||
"You can paste just the first or last few characters.",
|
||||
searchInfoHashTitle = "Hash",
|
||||
searchInfoHashDesc = "A unique code that identifies this payment on the " +
|
||||
"Lightning Network. Useful if someone asks you to " +
|
||||
"confirm a specific transaction.",
|
||||
searchInfoPreimageTitle = "Preimage",
|
||||
searchInfoPreimageDesc = "A secret code that proves a payment was received. " +
|
||||
"Only available after a payment completes successfully.",
|
||||
searchInfoNodeAliasTitle = "Node alias",
|
||||
searchInfoNodeAliasDesc = "The name of the Lightning node you sent a payment to. " +
|
||||
"For example, \"ACINQ\" or \"Wallet of Satoshi\". " +
|
||||
"Aliases are resolved automatically for outgoing payments.",
|
||||
searchInfoNodeIdTitle = "Node ID (pubkey)",
|
||||
searchInfoNodeIdDesc = "The public key of the destination node. " +
|
||||
"A 66-character hex string — you can paste just the first few characters.",
|
||||
searchInfoFooter = "You can paste a full value or search with just a few characters — " +
|
||||
"partial matches work too.",
|
||||
|
||||
// ── PaymentDetailScreen ───────────────────────────────────────────────────
|
||||
detailOutgoingTitle = "Outgoing payment",
|
||||
detailIncomingTitle = "Incoming payment",
|
||||
detailBack = "Back",
|
||||
detailCouldNotLoad = "Could not load full details",
|
||||
detailFeeLabel = { feeSat, fiatPart, ppmPart ->
|
||||
"Fee: $feeSat sats$fiatPart$ppmPart"
|
||||
},
|
||||
detailSectionDetails = "Details",
|
||||
detailRowDate = "Date",
|
||||
detailRowMemo = "Memo",
|
||||
detailRowMemoEmpty = "—",
|
||||
detailRowType = "Type",
|
||||
detailRowComment = "Comment",
|
||||
detailSectionSuccessAction = "Success Action",
|
||||
detailSuccessMessage = "Message",
|
||||
detailSuccessUrl = "URL",
|
||||
detailSuccessDescription = "Description",
|
||||
detailSectionTechnical = "Technical",
|
||||
detailRowPaymentHash = "Hash",
|
||||
detailRowPreimage = "Preimage",
|
||||
detailRowDestination = "Destination",
|
||||
detailCopyNodeId = "Copy node ID",
|
||||
detailRowBolt11 = "BOLT11",
|
||||
|
||||
// ── PaymentRow ────────────────────────────────────────────────────────────
|
||||
paymentRowSentCD = "Sent",
|
||||
paymentRowReceivedCD = "Received",
|
||||
paymentRowNoMemo = "No memo",
|
||||
paymentRowPending = "Pending",
|
||||
|
||||
// ── OnboardingScreen ──────────────────────────────────────────────────────
|
||||
onboardingTitle = "Connect to LNbits",
|
||||
onboardingSubtitle = "Enter your LNbits server URL and API keys.",
|
||||
onboardingServerUrl = "Server URL",
|
||||
onboardingServerUrlHint = "https://bitcointxoko.org",
|
||||
onboardingInvoiceKey = "Invoice Key (read-only)",
|
||||
onboardingAdminKey = "Admin Key (for sending)",
|
||||
onboardingHideAdminKey = "Hide",
|
||||
onboardingShowAdminKey = "Show",
|
||||
onboardingFieldsRequired = "All fields are required.",
|
||||
onboardingConnect = "Connect",
|
||||
)
|
||||
|
||||
|
||||
@@ -94,7 +94,23 @@ val EsHomeStrings = AppStrings(
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
paymentReceived = "¡Pago recibido!",
|
||||
|
||||
// ── SendScreen — general ──────────────────────────────────────────────────
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
amountDisplaySats = { amount -> "$amount ${if (amount == 1L) "sat" else "sats"}" },
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
brightnessReduce = "Reducir brillo",
|
||||
brightnessBoost = "Aumentar brillo",
|
||||
qrShare = "Compartir",
|
||||
qrCopy = "Copiar",
|
||||
qrNfcStop = "Detener NFC",
|
||||
qrNfcStart = "Compartir por NFC",
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
receiveVmFailedToCreateInvoice = "No se pudo crear la factura",
|
||||
receiveVmWithdrawRejected = "El servicio de retiro rechazó la factura",
|
||||
receiveVmWithdrawFailed = "Error al retirar",
|
||||
|
||||
// ── SendScreen — general ──────────────────────────────────────────────────
|
||||
send = "Enviar",
|
||||
paste = "Pegar",
|
||||
continueButton = "Continuar",
|
||||
@@ -159,4 +175,123 @@ val EsHomeStrings = AppStrings(
|
||||
routeHintHideDetails = "Ocultar detalles ▴",
|
||||
routeHintHopsHeader = "Saltos de ruta privada",
|
||||
routeHintHopFees = { ppm, baseLabel -> "$ppm ppm · $baseLabel base" },
|
||||
|
||||
// ── HistoryScreen ─────────────────────────────────────────────────────────
|
||||
historyTitle = "Historial",
|
||||
historyClose = "Cerrar",
|
||||
historySearchPayments = "Buscar pagos",
|
||||
historyFilterPayments = "Filtrar pagos",
|
||||
historyRetry = "Reintentar",
|
||||
historyNoPayments = "Aún no hay pagos.",
|
||||
historySearchPlaceholder = "Buscar transacciones",
|
||||
historySearchHelp = "Ayuda de búsqueda",
|
||||
historySearchPaste = "Pegar",
|
||||
historySearchClear = "Limpiar búsqueda",
|
||||
historySearchChip = { tail -> "búsqueda: …$tail" },
|
||||
historyClearSearch = "Limpiar búsqueda",
|
||||
filterDirectionOutgoing = "Salientes",
|
||||
filterDirectionIncoming = "Entrantes",
|
||||
filterClearDirection = "Quitar filtro de dirección",
|
||||
filterStatusCompleted = "Completado",
|
||||
filterStatusPending = "Pendiente",
|
||||
filterStatusFailed = "Fallido",
|
||||
filterRemoveStatus = "Quitar filtro de estado",
|
||||
filterRemoveType = "Quitar filtro de tipo",
|
||||
filterAmountRange = { min, max -> "$min–$max sats" },
|
||||
filterAmountMin = { min -> "≥ $min sats" },
|
||||
filterAmountMax = { max -> "≤ $max sats" },
|
||||
filterClearAmount = "Quitar filtro de cantidad",
|
||||
filterDateThisWeek = "Esta semana",
|
||||
filterDateThisMonth = "Este mes",
|
||||
filterDateThisYear = "Este año",
|
||||
filterDateRange = { from, to -> "$from–$to" },
|
||||
filterDateFrom = { from -> "Desde $from" },
|
||||
filterDateUntil = { until -> "Hasta $until" },
|
||||
filterClearDate = "Quitar filtro de fecha",
|
||||
|
||||
// ── FilterBottomSheet ─────────────────────────────────────────────────────
|
||||
filterSheetTitle = "Filtrar pagos",
|
||||
filterSectionDirection = "Dirección",
|
||||
filterDirectionAll = "Todos",
|
||||
filterSectionStatus = "Estado",
|
||||
filterSectionType = "Tipo",
|
||||
filterSectionAmount = "Cantidad (sats)",
|
||||
filterAmountMin_label = "Mín.",
|
||||
filterAmountMax_label = "Máx.",
|
||||
filterAmountSuffix = "sats",
|
||||
filterSectionDate = "Fecha",
|
||||
filterDateFrom_label = "Desde",
|
||||
filterDateTo_label = "Hasta",
|
||||
filterDialogOk = "Aceptar",
|
||||
filterDialogCancel = "Cancelar",
|
||||
|
||||
// ── SearchInfoSheet ───────────────────────────────────────────────────────
|
||||
searchInfoTitle = "¿Qué puedo buscar?",
|
||||
searchInfoSubtitle = "Escribe cualquier parte de lo siguiente para encontrar un pago:",
|
||||
searchInfoMemoTitle = "Nota",
|
||||
searchInfoMemoDesc = "El mensaje o descripción adjunto a un pago. " +
|
||||
"Por ejemplo, \"café\" o \"alquiler marzo\".",
|
||||
searchInfoInvoiceTitle = "Factura",
|
||||
searchInfoInvoiceDesc = "La solicitud de pago que escaneaste o pegaste para enviar un pago. " +
|
||||
"Normalmente empieza por \"lnbc…\". " +
|
||||
"Puedes pegar solo los primeros o últimos caracteres.",
|
||||
searchInfoHashTitle = "Hash",
|
||||
searchInfoHashDesc = "Un código único que identifica este pago en la " +
|
||||
"red Lightning. Útil si alguien te pide que " +
|
||||
"confirmes una transacción específica.",
|
||||
searchInfoPreimageTitle = "Preimagen",
|
||||
searchInfoPreimageDesc = "Un código secreto que demuestra que se recibió un pago. " +
|
||||
"Solo disponible después de que un pago se complete correctamente.",
|
||||
searchInfoNodeAliasTitle = "Alias del nodo",
|
||||
searchInfoNodeAliasDesc = "El nombre del nodo Lightning al que enviaste un pago. " +
|
||||
"Por ejemplo, \"ACINQ\" o \"Wallet of Satoshi\". " +
|
||||
"Los alias se resuelven automáticamente para pagos salientes.",
|
||||
searchInfoNodeIdTitle = "ID del nodo (clave pública)",
|
||||
searchInfoNodeIdDesc = "La clave pública del nodo de destino. " +
|
||||
"Una cadena hexadecimal de 66 caracteres — puedes pegar solo los primeros.",
|
||||
searchInfoFooter = "Puedes pegar un valor completo o buscar con solo unos pocos caracteres — " +
|
||||
"las coincidencias parciales también funcionan.",
|
||||
|
||||
// ── PaymentDetailScreen ───────────────────────────────────────────────────
|
||||
detailOutgoingTitle = "Pago saliente",
|
||||
detailIncomingTitle = "Pago entrante",
|
||||
detailBack = "Atrás",
|
||||
detailCouldNotLoad = "No se pudieron cargar los detalles completos",
|
||||
detailFeeLabel = { feeSat, fiatPart, ppmPart ->
|
||||
"Comisión: $feeSat sats$fiatPart$ppmPart"
|
||||
},
|
||||
detailSectionDetails = "Detalles",
|
||||
detailRowDate = "Fecha",
|
||||
detailRowMemo = "Nota",
|
||||
detailRowMemoEmpty = "—",
|
||||
detailRowType = "Tipo",
|
||||
detailRowComment = "Comentario",
|
||||
detailSectionSuccessAction = "Acción de éxito",
|
||||
detailSuccessMessage = "Mensaje",
|
||||
detailSuccessUrl = "URL",
|
||||
detailSuccessDescription = "Descripción",
|
||||
detailSectionTechnical = "Técnico",
|
||||
detailRowPaymentHash = "Hash",
|
||||
detailRowPreimage = "Preimagen",
|
||||
detailRowDestination = "Destino",
|
||||
detailCopyNodeId = "Copiar ID del nodo",
|
||||
detailRowBolt11 = "BOLT11",
|
||||
|
||||
// ── PaymentRow ────────────────────────────────────────────────────────────
|
||||
paymentRowSentCD = "Enviado",
|
||||
paymentRowReceivedCD = "Recibido",
|
||||
paymentRowNoMemo = "Sin nota",
|
||||
paymentRowPending = "Pendiente",
|
||||
|
||||
// ── OnboardingScreen ──────────────────────────────────────────────────────
|
||||
onboardingTitle = "Conectar a LNbits",
|
||||
onboardingSubtitle = "Introduce la URL de tu servidor LNbits y las claves API.",
|
||||
onboardingServerUrl = "URL del servidor",
|
||||
onboardingServerUrlHint = "https://bitcointxoko.org",
|
||||
onboardingInvoiceKey = "Clave de factura (solo lectura)",
|
||||
onboardingAdminKey = "Clave de administrador (para enviar)",
|
||||
onboardingHideAdminKey = "Ocultar",
|
||||
onboardingShowAdminKey = "Mostrar",
|
||||
onboardingFieldsRequired = "Todos los campos son obligatorios.",
|
||||
onboardingConnect = "Conectar",
|
||||
)
|
||||
|
||||
@@ -103,6 +103,22 @@ data class AppStrings(
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
val paymentReceived : String,
|
||||
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
val amountDisplaySats : (amount: Long) -> String,
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
val brightnessReduce : String,
|
||||
val brightnessBoost : String,
|
||||
val qrShare : String,
|
||||
val qrCopy : String,
|
||||
val qrNfcStop : String,
|
||||
val qrNfcStart : String,
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
val receiveVmFailedToCreateInvoice : String,
|
||||
val receiveVmWithdrawRejected : String,
|
||||
val receiveVmWithdrawFailed : String,
|
||||
|
||||
// ── SendScreen — general ──────────────────────────────────────────────────
|
||||
val send : String,
|
||||
val paste : String,
|
||||
@@ -168,4 +184,111 @@ data class AppStrings(
|
||||
val routeHintHideDetails : String,
|
||||
val routeHintHopsHeader : String,
|
||||
val routeHintHopFees : (ppm: Long, baseLabel: String) -> String,
|
||||
|
||||
// ── HistoryScreen ─────────────────────────────────────────────────────────
|
||||
val historyTitle : String,
|
||||
val historyClose : String,
|
||||
val historySearchPayments : String,
|
||||
val historyFilterPayments : String,
|
||||
val historyRetry : String,
|
||||
val historyNoPayments : String,
|
||||
val historySearchPlaceholder : String,
|
||||
val historySearchHelp : String,
|
||||
val historySearchPaste : String,
|
||||
val historySearchClear : String,
|
||||
val historySearchChip : (tail: String) -> String,
|
||||
val historyClearSearch : String,
|
||||
val filterDirectionOutgoing : String,
|
||||
val filterDirectionIncoming : String,
|
||||
val filterClearDirection : String,
|
||||
val filterStatusCompleted : String,
|
||||
val filterStatusPending : String,
|
||||
val filterStatusFailed : String,
|
||||
val filterRemoveStatus : String,
|
||||
val filterRemoveType : String,
|
||||
val filterAmountRange : (min: Long, max: Long) -> String,
|
||||
val filterAmountMin : (min: Long) -> String,
|
||||
val filterAmountMax : (max: Long) -> String,
|
||||
val filterClearAmount : String,
|
||||
val filterDateThisWeek : String,
|
||||
val filterDateThisMonth : String,
|
||||
val filterDateThisYear : String,
|
||||
val filterDateRange : (from: String, to: String) -> String,
|
||||
val filterDateFrom : (from: String) -> String,
|
||||
val filterDateUntil : (until: String) -> String,
|
||||
val filterClearDate : String,
|
||||
|
||||
// ── FilterBottomSheet ─────────────────────────────────────────────────────
|
||||
val filterSheetTitle : String,
|
||||
val filterSectionDirection : String,
|
||||
val filterDirectionAll : String,
|
||||
val filterSectionStatus : String,
|
||||
val filterSectionType : String,
|
||||
val filterSectionAmount : String,
|
||||
val filterAmountMin_label : String,
|
||||
val filterAmountMax_label : String,
|
||||
val filterAmountSuffix : String,
|
||||
val filterSectionDate : String,
|
||||
val filterDateFrom_label : String,
|
||||
val filterDateTo_label : String,
|
||||
val filterDialogOk : String,
|
||||
val filterDialogCancel : String,
|
||||
|
||||
// ── SearchInfoSheet ───────────────────────────────────────────────────────
|
||||
val searchInfoTitle : String,
|
||||
val searchInfoSubtitle : String,
|
||||
val searchInfoMemoTitle : String,
|
||||
val searchInfoMemoDesc : String,
|
||||
val searchInfoInvoiceTitle : String,
|
||||
val searchInfoInvoiceDesc : String,
|
||||
val searchInfoHashTitle : String,
|
||||
val searchInfoHashDesc : String,
|
||||
val searchInfoPreimageTitle : String,
|
||||
val searchInfoPreimageDesc : String,
|
||||
val searchInfoNodeAliasTitle : String,
|
||||
val searchInfoNodeAliasDesc : String,
|
||||
val searchInfoNodeIdTitle : String,
|
||||
val searchInfoNodeIdDesc : String,
|
||||
val searchInfoFooter : String,
|
||||
|
||||
// ── PaymentDetailScreen ───────────────────────────────────────────────────
|
||||
val detailOutgoingTitle : String,
|
||||
val detailIncomingTitle : String,
|
||||
val detailBack : String,
|
||||
val detailCouldNotLoad : String,
|
||||
val detailFeeLabel : (feeSat: Long, fiatPart: String, ppmPart: String) -> String,
|
||||
val detailSectionDetails : String,
|
||||
val detailRowDate : String,
|
||||
val detailRowMemo : String,
|
||||
val detailRowMemoEmpty : String,
|
||||
val detailRowType : String,
|
||||
val detailRowComment : String,
|
||||
val detailSectionSuccessAction: String,
|
||||
val detailSuccessMessage : String,
|
||||
val detailSuccessUrl : String,
|
||||
val detailSuccessDescription : String,
|
||||
val detailSectionTechnical : String,
|
||||
val detailRowPaymentHash : String,
|
||||
val detailRowPreimage : String,
|
||||
val detailRowDestination : String,
|
||||
val detailCopyNodeId : String,
|
||||
val detailRowBolt11 : String,
|
||||
|
||||
// ── PaymentRow ────────────────────────────────────────────────────────────
|
||||
val paymentRowSentCD : String,
|
||||
val paymentRowReceivedCD : String,
|
||||
val paymentRowNoMemo : String,
|
||||
val paymentRowPending : String,
|
||||
|
||||
// ── OnboardingScreen ──────────────────────────────────────────────────────
|
||||
val onboardingTitle : String,
|
||||
val onboardingSubtitle : String,
|
||||
val onboardingServerUrl : String,
|
||||
val onboardingServerUrlHint : String,
|
||||
val onboardingInvoiceKey : String,
|
||||
val onboardingAdminKey : String,
|
||||
val onboardingHideAdminKey : String,
|
||||
val onboardingShowAdminKey : String,
|
||||
val onboardingFieldsRequired : String,
|
||||
val onboardingConnect : String,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user