diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EnStrings.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EnStrings.kt index b68c46a..56ac539 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EnStrings.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EnStrings.kt @@ -141,117 +141,117 @@ val EnHomeStrings = AppStrings( sendVmUnsupportedType = { tag -> "Unsupported type: $tag" }, sendVmPaymentFailedRescan = "Payment failed — could not re-fetch address", - // ── HistoryScreen ───────────────────────────────────────────────────────── - historyTitle = "Activity", - 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 ─────────────────────────────────────────────────── - 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", - 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", - paymentRowFailed = "Failed", +// // ── HistoryScreen ───────────────────────────────────────────────────────── +// historyTitle = "Activity", +// 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 ─────────────────────────────────────────────────── +// 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", +// 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", +// paymentRowFailed = "Failed", onboarding = OnboardingStrings( back = "Back", @@ -359,6 +359,120 @@ val EnHomeStrings = AppStrings( receiveVmWithdrawFailed = "Withdraw failed", ), + history = HistoryStrings( + // ── HistoryScreen ───────────────────────────────────────────────────────── + historyTitle = "Activity", + 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 ─────────────────────────────────────────────────── + 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", + 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", + paymentRowFailed = "Failed", + ), + nwc = NwcStrings( back = "Back", next = "Next", diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EsStrings.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EsStrings.kt index 2f82b4f..4f8886a 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EsStrings.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EsStrings.kt @@ -141,117 +141,117 @@ val EsHomeStrings = AppStrings( sendVmUnsupportedType = { tag -> "Tipo no compatible: $tag" }, sendVmPaymentFailedRescan = "Pago fallido — no se pudo volver a obtener la dirección", -// ── 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 ─────────────────────────────────────────────────── - statusSuccess = "Completado", - statusPending = "Pendiente", - statusFailed = "Fallido", - statusUnknown = "Desconocido", - 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", - paymentRowFailed = "Fallido", +//// ── 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 ─────────────────────────────────────────────────── +// statusSuccess = "Completado", +// statusPending = "Pendiente", +// statusFailed = "Fallido", +// statusUnknown = "Desconocido", +// 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", +// paymentRowFailed = "Fallido", onboarding = OnboardingStrings( @@ -360,6 +360,120 @@ val EsHomeStrings = AppStrings( receiveVmWithdrawFailed = "Error al retirar", ), + history = HistoryStrings( + // ── 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 ─────────────────────────────────────────────────── + statusSuccess = "Completado", + statusPending = "Pendiente", + statusFailed = "Fallido", + statusUnknown = "Desconocido", + 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", + paymentRowFailed = "Fallido", + ), + nwc = NwcStrings( // ── Shared ──────────────────────────────────────────────────────────────── back = "Atrás", diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EuStrings.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EuStrings.kt index a4aed9e..9044ab8 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EuStrings.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EuStrings.kt @@ -141,116 +141,116 @@ val EuStrings = AppStrings( sendVmUnsupportedType = { tag -> "Mota onartzen ez dena: $tag" }, sendVmPaymentFailedRescan = "Ordainketak huts egin du — ezin izan da helbidea berriro eskuratu", - // ── HistoryScreen ───────────────────────────────────────────────────────── - historyTitle = "Historia", - historyClose = "Itxi", - historySearchPayments = "Bilatu ordainketak", - historyFilterPayments = "Iragazi ordainketak", - historyRetry = "Saiatu berriro", - historyNoPayments = "Oraindik ez dago ordainketarik.", - historySearchPlaceholder = "Bilatu transakzioak", - historySearchHelp = "Bilaketa-laguntza", - historySearchPaste = "Itsatsi", - historySearchClear = "Garbitu bilaketa", - historySearchChip = { tail -> "bilaketa: …$tail" }, - historyClearSearch = "Garbitu bilaketa", - filterDirectionOutgoing = "Irteerako", - filterDirectionIncoming = "Sarrerako", - filterClearDirection = "Garbitu norabide-iragazkia", - filterStatusCompleted = "Osatuta", - filterStatusPending = "Zain", - filterStatusFailed = "Huts eginda", - filterRemoveStatus = "Kendu egoera-iragazkia", - filterRemoveType = "Kendu mota-iragazkia", - filterAmountRange = { min, max -> "$min–$max sat" }, - filterAmountMin = { min -> "≥ $min sat" }, - filterAmountMax = { max -> "≤ $max sat" }, - filterClearAmount = "Garbitu zenbateko-iragazkia", - filterDateThisWeek = "Aste honetan", - filterDateThisMonth = "Hilabete honetan", - filterDateThisYear = "Urte honetan", - filterDateRange = { from, to -> "$from–$to" }, - filterDateFrom = { from -> "$from-tik" }, - filterDateUntil = { until -> "$until arte" }, - filterClearDate = "Garbitu data-iragazkia", - - // ── FilterBottomSheet ───────────────────────────────────────────────────── - filterSheetTitle = "Iragazi ordainketak", - filterSectionDirection = "Norabidea", - filterDirectionAll = "Guztiak", - filterSectionStatus = "Egoera", - filterSectionType = "Mota", - filterSectionAmount = "Zenbatekoa (sat)", - filterAmountMin_label = "Gutxienekoa", - filterAmountMax_label = "Gehienekoa", - filterAmountSuffix = "sat", - filterSectionDate = "Data", - filterDateFrom_label = "Nondik", - filterDateTo_label = "Nora arte", - filterDialogOk = "Ados", - filterDialogCancel = "Utzi", - - // ── SearchInfoSheet ─────────────────────────────────────────────────────── - searchInfoTitle = "Zer bila dezaket?", - searchInfoSubtitle = "Idatzi hurrengoetako edozein zati ordainketa bat aurkitzeko:", - searchInfoMemoTitle = "Oharra", - searchInfoMemoDesc = "Ordainketa bati erantsitako mezua edo deskribapena. " + - "Adibidez, \"kafea\" edo \"martxoko alokairua\".", - searchInfoInvoiceTitle = "Faktura", - searchInfoInvoiceDesc = "Ordainketa bat bidaltzeko eskaneatu edo itsatsi zenuen ordainketa-eskaera. " + - "Normalean \"lnbc…\" hasierarekin dator. " + - "Lehen edo azken karaktere batzuk bakarrik itsats ditzakezu.", - searchInfoHashTitle = "Hash", - searchInfoHashDesc = "Ordainketa hau Lightning Sarean identifikatzen duen kode bakarra. " + - "Erabilgarria norbaitek transakzio zehatz bat berresteko eskatzen dizunean.", - searchInfoPreimageTitle = "Aurre-irudia", - searchInfoPreimageDesc = "Ordainketa bat jaso dela frogatzen duen kode sekretua. " + - "Ordainketa arrakastaz osatu ondoren bakarrik dago erabilgarri.", - searchInfoNodeAliasTitle = "Nodo-izengoitia", - searchInfoNodeAliasDesc = "Ordainketa bidali zenion Lightning nodoaren izena. " + - "Adibidez, \"ACINQ\" edo \"Wallet of Satoshi\". " + - "Izengoitiak automatikoki ebazten dira irteerako ordainketetan.", - searchInfoNodeIdTitle = "Nodo IDa (gako publikoa)", - searchInfoNodeIdDesc = "Helmuga-nodoaren gako publikoa. " + - "66 karaktereko hex katea — lehen karaktere batzuk bakarrik itsats ditzakezu.", - searchInfoFooter = "Balio osoa itsatsi dezakezu edo karaktere gutxi batzuekin bilatu — " + - "zati-bat datozenak ere funtzionatzen dute.", - - // ── PaymentDetailScreen ─────────────────────────────────────────────────── - statusSuccess = "Osatuta", - statusPending = "Zain", - statusFailed = "Huts eginda", - statusUnknown = "Ezezaguna", - detailOutgoingTitle = "Irteerako ordainketa", - detailIncomingTitle = "Sarrerako ordainketa", - detailBack = "Atzera", - detailCouldNotLoad = "Ezin izan dira xehetasun osoak kargatu", - detailFeeLabel = { feeSat, fiatPart, ppmPart -> - "Komisioa: $feeSat sat$fiatPart$ppmPart" - }, - detailSectionDetails = "Xehetasunak", - detailRowDate = "Data", - detailRowMemo = "Oharra", - detailRowMemoEmpty = "—", - detailRowType = "Mota", - detailRowComment = "Iruzkina", - detailSectionSuccessAction = "Arrakasta-ekintza", - detailSuccessMessage = "Mezua", - detailSuccessUrl = "URLa", - detailSuccessDescription = "Deskribapena", - detailSectionTechnical = "Teknikoa", - detailRowPaymentHash = "Hash", - detailRowPreimage = "Aurre-irudia", - detailRowDestination = "Helmuga", - detailCopyNodeId = "Kopiatu nodo IDa", - detailRowBolt11 = "BOLT11", - - // ── PaymentRow ──────────────────────────────────────────────────────────── - paymentRowSentCD = "Bidalita", - paymentRowReceivedCD = "Jasota", - paymentRowNoMemo = "Oharrik gabe", - paymentRowPending = "Zain", - paymentRowFailed = "Huts eginda", +// // ── HistoryScreen ───────────────────────────────────────────────────────── +// historyTitle = "Historia", +// historyClose = "Itxi", +// historySearchPayments = "Bilatu ordainketak", +// historyFilterPayments = "Iragazi ordainketak", +// historyRetry = "Saiatu berriro", +// historyNoPayments = "Oraindik ez dago ordainketarik.", +// historySearchPlaceholder = "Bilatu transakzioak", +// historySearchHelp = "Bilaketa-laguntza", +// historySearchPaste = "Itsatsi", +// historySearchClear = "Garbitu bilaketa", +// historySearchChip = { tail -> "bilaketa: …$tail" }, +// historyClearSearch = "Garbitu bilaketa", +// filterDirectionOutgoing = "Irteerako", +// filterDirectionIncoming = "Sarrerako", +// filterClearDirection = "Garbitu norabide-iragazkia", +// filterStatusCompleted = "Osatuta", +// filterStatusPending = "Zain", +// filterStatusFailed = "Huts eginda", +// filterRemoveStatus = "Kendu egoera-iragazkia", +// filterRemoveType = "Kendu mota-iragazkia", +// filterAmountRange = { min, max -> "$min–$max sat" }, +// filterAmountMin = { min -> "≥ $min sat" }, +// filterAmountMax = { max -> "≤ $max sat" }, +// filterClearAmount = "Garbitu zenbateko-iragazkia", +// filterDateThisWeek = "Aste honetan", +// filterDateThisMonth = "Hilabete honetan", +// filterDateThisYear = "Urte honetan", +// filterDateRange = { from, to -> "$from–$to" }, +// filterDateFrom = { from -> "$from-tik" }, +// filterDateUntil = { until -> "$until arte" }, +// filterClearDate = "Garbitu data-iragazkia", +// +// // ── FilterBottomSheet ───────────────────────────────────────────────────── +// filterSheetTitle = "Iragazi ordainketak", +// filterSectionDirection = "Norabidea", +// filterDirectionAll = "Guztiak", +// filterSectionStatus = "Egoera", +// filterSectionType = "Mota", +// filterSectionAmount = "Zenbatekoa (sat)", +// filterAmountMin_label = "Gutxienekoa", +// filterAmountMax_label = "Gehienekoa", +// filterAmountSuffix = "sat", +// filterSectionDate = "Data", +// filterDateFrom_label = "Nondik", +// filterDateTo_label = "Nora arte", +// filterDialogOk = "Ados", +// filterDialogCancel = "Utzi", +// +// // ── SearchInfoSheet ─────────────────────────────────────────────────────── +// searchInfoTitle = "Zer bila dezaket?", +// searchInfoSubtitle = "Idatzi hurrengoetako edozein zati ordainketa bat aurkitzeko:", +// searchInfoMemoTitle = "Oharra", +// searchInfoMemoDesc = "Ordainketa bati erantsitako mezua edo deskribapena. " + +// "Adibidez, \"kafea\" edo \"martxoko alokairua\".", +// searchInfoInvoiceTitle = "Faktura", +// searchInfoInvoiceDesc = "Ordainketa bat bidaltzeko eskaneatu edo itsatsi zenuen ordainketa-eskaera. " + +// "Normalean \"lnbc…\" hasierarekin dator. " + +// "Lehen edo azken karaktere batzuk bakarrik itsats ditzakezu.", +// searchInfoHashTitle = "Hash", +// searchInfoHashDesc = "Ordainketa hau Lightning Sarean identifikatzen duen kode bakarra. " + +// "Erabilgarria norbaitek transakzio zehatz bat berresteko eskatzen dizunean.", +// searchInfoPreimageTitle = "Aurre-irudia", +// searchInfoPreimageDesc = "Ordainketa bat jaso dela frogatzen duen kode sekretua. " + +// "Ordainketa arrakastaz osatu ondoren bakarrik dago erabilgarri.", +// searchInfoNodeAliasTitle = "Nodo-izengoitia", +// searchInfoNodeAliasDesc = "Ordainketa bidali zenion Lightning nodoaren izena. " + +// "Adibidez, \"ACINQ\" edo \"Wallet of Satoshi\". " + +// "Izengoitiak automatikoki ebazten dira irteerako ordainketetan.", +// searchInfoNodeIdTitle = "Nodo IDa (gako publikoa)", +// searchInfoNodeIdDesc = "Helmuga-nodoaren gako publikoa. " + +// "66 karaktereko hex katea — lehen karaktere batzuk bakarrik itsats ditzakezu.", +// searchInfoFooter = "Balio osoa itsatsi dezakezu edo karaktere gutxi batzuekin bilatu — " + +// "zati-bat datozenak ere funtzionatzen dute.", +// +// // ── PaymentDetailScreen ─────────────────────────────────────────────────── +// statusSuccess = "Osatuta", +// statusPending = "Zain", +// statusFailed = "Huts eginda", +// statusUnknown = "Ezezaguna", +// detailOutgoingTitle = "Irteerako ordainketa", +// detailIncomingTitle = "Sarrerako ordainketa", +// detailBack = "Atzera", +// detailCouldNotLoad = "Ezin izan dira xehetasun osoak kargatu", +// detailFeeLabel = { feeSat, fiatPart, ppmPart -> +// "Komisioa: $feeSat sat$fiatPart$ppmPart" +// }, +// detailSectionDetails = "Xehetasunak", +// detailRowDate = "Data", +// detailRowMemo = "Oharra", +// detailRowMemoEmpty = "—", +// detailRowType = "Mota", +// detailRowComment = "Iruzkina", +// detailSectionSuccessAction = "Arrakasta-ekintza", +// detailSuccessMessage = "Mezua", +// detailSuccessUrl = "URLa", +// detailSuccessDescription = "Deskribapena", +// detailSectionTechnical = "Teknikoa", +// detailRowPaymentHash = "Hash", +// detailRowPreimage = "Aurre-irudia", +// detailRowDestination = "Helmuga", +// detailCopyNodeId = "Kopiatu nodo IDa", +// detailRowBolt11 = "BOLT11", +// +// // ── PaymentRow ──────────────────────────────────────────────────────────── +// paymentRowSentCD = "Bidalita", +// paymentRowReceivedCD = "Jasota", +// paymentRowNoMemo = "Oharrik gabe", +// paymentRowPending = "Zain", +// paymentRowFailed = "Huts eginda", onboarding = OnboardingStrings( @@ -358,6 +358,120 @@ val EuStrings = AppStrings( receiveVmWithdrawRejected = "Ateratzeko zerbitzuak faktura baztertu du", receiveVmWithdrawFailed = "Ateratzeak huts egin du", ), + + history = HistoryStrings( + // ── HistoryScreen ───────────────────────────────────────────────────────── + historyTitle = "Historia", + historyClose = "Itxi", + historySearchPayments = "Bilatu ordainketak", + historyFilterPayments = "Iragazi ordainketak", + historyRetry = "Saiatu berriro", + historyNoPayments = "Oraindik ez dago ordainketarik.", + historySearchPlaceholder = "Bilatu transakzioak", + historySearchHelp = "Bilaketa-laguntza", + historySearchPaste = "Itsatsi", + historySearchClear = "Garbitu bilaketa", + historySearchChip = { tail -> "bilaketa: …$tail" }, + historyClearSearch = "Garbitu bilaketa", + filterDirectionOutgoing = "Irteerako", + filterDirectionIncoming = "Sarrerako", + filterClearDirection = "Garbitu norabide-iragazkia", + filterStatusCompleted = "Osatuta", + filterStatusPending = "Zain", + filterStatusFailed = "Huts eginda", + filterRemoveStatus = "Kendu egoera-iragazkia", + filterRemoveType = "Kendu mota-iragazkia", + filterAmountRange = { min, max -> "$min–$max sat" }, + filterAmountMin = { min -> "≥ $min sat" }, + filterAmountMax = { max -> "≤ $max sat" }, + filterClearAmount = "Garbitu zenbateko-iragazkia", + filterDateThisWeek = "Aste honetan", + filterDateThisMonth = "Hilabete honetan", + filterDateThisYear = "Urte honetan", + filterDateRange = { from, to -> "$from–$to" }, + filterDateFrom = { from -> "$from-tik" }, + filterDateUntil = { until -> "$until arte" }, + filterClearDate = "Garbitu data-iragazkia", + + // ── FilterBottomSheet ───────────────────────────────────────────────────── + filterSheetTitle = "Iragazi ordainketak", + filterSectionDirection = "Norabidea", + filterDirectionAll = "Guztiak", + filterSectionStatus = "Egoera", + filterSectionType = "Mota", + filterSectionAmount = "Zenbatekoa (sat)", + filterAmountMin_label = "Gutxienekoa", + filterAmountMax_label = "Gehienekoa", + filterAmountSuffix = "sat", + filterSectionDate = "Data", + filterDateFrom_label = "Nondik", + filterDateTo_label = "Nora arte", + filterDialogOk = "Ados", + filterDialogCancel = "Utzi", + + // ── SearchInfoSheet ─────────────────────────────────────────────────────── + searchInfoTitle = "Zer bila dezaket?", + searchInfoSubtitle = "Idatzi hurrengoetako edozein zati ordainketa bat aurkitzeko:", + searchInfoMemoTitle = "Oharra", + searchInfoMemoDesc = "Ordainketa bati erantsitako mezua edo deskribapena. " + + "Adibidez, \"kafea\" edo \"martxoko alokairua\".", + searchInfoInvoiceTitle = "Faktura", + searchInfoInvoiceDesc = "Ordainketa bat bidaltzeko eskaneatu edo itsatsi zenuen ordainketa-eskaera. " + + "Normalean \"lnbc…\" hasierarekin dator. " + + "Lehen edo azken karaktere batzuk bakarrik itsats ditzakezu.", + searchInfoHashTitle = "Hash", + searchInfoHashDesc = "Ordainketa hau Lightning Sarean identifikatzen duen kode bakarra. " + + "Erabilgarria norbaitek transakzio zehatz bat berresteko eskatzen dizunean.", + searchInfoPreimageTitle = "Aurre-irudia", + searchInfoPreimageDesc = "Ordainketa bat jaso dela frogatzen duen kode sekretua. " + + "Ordainketa arrakastaz osatu ondoren bakarrik dago erabilgarri.", + searchInfoNodeAliasTitle = "Nodo-izengoitia", + searchInfoNodeAliasDesc = "Ordainketa bidali zenion Lightning nodoaren izena. " + + "Adibidez, \"ACINQ\" edo \"Wallet of Satoshi\". " + + "Izengoitiak automatikoki ebazten dira irteerako ordainketetan.", + searchInfoNodeIdTitle = "Nodo IDa (gako publikoa)", + searchInfoNodeIdDesc = "Helmuga-nodoaren gako publikoa. " + + "66 karaktereko hex katea — lehen karaktere batzuk bakarrik itsats ditzakezu.", + searchInfoFooter = "Balio osoa itsatsi dezakezu edo karaktere gutxi batzuekin bilatu — " + + "zati-bat datozenak ere funtzionatzen dute.", + + // ── PaymentDetailScreen ─────────────────────────────────────────────────── + statusSuccess = "Osatuta", + statusPending = "Zain", + statusFailed = "Huts eginda", + statusUnknown = "Ezezaguna", + detailOutgoingTitle = "Irteerako ordainketa", + detailIncomingTitle = "Sarrerako ordainketa", + detailBack = "Atzera", + detailCouldNotLoad = "Ezin izan dira xehetasun osoak kargatu", + detailFeeLabel = { feeSat, fiatPart, ppmPart -> + "Komisioa: $feeSat sat$fiatPart$ppmPart" + }, + detailSectionDetails = "Xehetasunak", + detailRowDate = "Data", + detailRowMemo = "Oharra", + detailRowMemoEmpty = "—", + detailRowType = "Mota", + detailRowComment = "Iruzkina", + detailSectionSuccessAction = "Arrakasta-ekintza", + detailSuccessMessage = "Mezua", + detailSuccessUrl = "URLa", + detailSuccessDescription = "Deskribapena", + detailSectionTechnical = "Teknikoa", + detailRowPaymentHash = "Hash", + detailRowPreimage = "Aurre-irudia", + detailRowDestination = "Helmuga", + detailCopyNodeId = "Kopiatu nodo IDa", + detailRowBolt11 = "BOLT11", + + // ── PaymentRow ──────────────────────────────────────────────────────────── + paymentRowSentCD = "Bidalita", + paymentRowReceivedCD = "Jasota", + paymentRowNoMemo = "Oharrik gabe", + paymentRowPending = "Zain", + paymentRowFailed = "Huts eginda", + ), + nwc = NwcStrings( // ── Shared ──────────────────────────────────────────────────────────────── back = "Atzera", diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/Strings.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/Strings.kt index 39fe99d..75ab810 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/Strings.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/Strings.kt @@ -149,108 +149,109 @@ data class AppStrings( val sendVmUnsupportedType : (tag: String) -> String, val sendVmPaymentFailedRescan : 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 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, - 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, - val paymentRowFailed : 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 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, +// 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, +// val paymentRowFailed : String, val onboarding: OnboardingStrings, val receive: ReceiveStrings, + val history: HistoryStrings, val nwc: NwcStrings ) @@ -360,6 +361,108 @@ data class ReceiveStrings( val receiveVmWithdrawFailed : String, ) +data class HistoryStrings( + // ── 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 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, + 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, + val paymentRowFailed : String, +) + data class NwcStrings( // ── Shared / navigation ─────────────────────────────────────────────────── diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/StringsExt.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/StringsExt.kt index 89ae87d..4313753 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/StringsExt.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/StringsExt.kt @@ -1,8 +1,8 @@ package com.bitcointxoko.gudariwallet.i18n fun AppStrings.paymentStatusLabel(status: String): String = when (status.lowercase()) { - "success" -> statusSuccess - "pending" -> statusPending - "failed" -> statusFailed - else -> statusUnknown + "success" -> history.statusSuccess + "pending" -> history.statusPending + "failed" -> history.statusFailed + else -> history.statusUnknown } \ No newline at end of file diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/common/StatusChip.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/common/StatusChip.kt index baf7cc3..828c21f 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/common/StatusChip.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/common/StatusChip.kt @@ -24,18 +24,18 @@ internal fun StatusChip(status: String) { val style = when (status.lowercase()) { "success", "complete", "paid" -> ChipStyle( - semantic.successContainer, semantic.onSuccessContainer, strings.statusSuccess + semantic.successContainer, semantic.onSuccessContainer, strings.history.statusSuccess ) "pending", "in_flight", "inflight" -> ChipStyle( - semantic.warningContainer, semantic.onWarningContainer, strings.statusPending + semantic.warningContainer, semantic.onWarningContainer, strings.history.statusPending ) "failed", "error", "expired" -> ChipStyle( - semantic.errorContainer, semantic.onErrorContainer, strings.statusFailed + semantic.errorContainer, semantic.onErrorContainer, strings.history.statusFailed ) else -> ChipStyle( MaterialTheme.colorScheme.surfaceVariant, MaterialTheme.colorScheme.onSurfaceVariant, - strings.statusUnknown, + strings.history.statusUnknown, ) } diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/FilterBottomSheet.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/FilterBottomSheet.kt index 48cd53f..8301cb7 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/FilterBottomSheet.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/FilterBottomSheet.kt @@ -62,14 +62,14 @@ internal fun FilterBottomSheet( ) { // ── Sheet title ─────────────────────────────────────────────────── Text( - text = strings.filterSheetTitle, // ← "Filter payments" + text = strings.history.filterSheetTitle, // ← "Filter payments" style = MaterialTheme.typography.titleMedium ) Spacer(Modifier.height(20.dp)) // ── Direction ───────────────────────────────────────────────────── Text( - text = strings.filterSectionDirection, // ← "Direction" + text = strings.history.filterSectionDirection, // ← "Direction" style = MaterialTheme.typography.labelMedium, color = MaterialTheme.colorScheme.onSurfaceVariant ) @@ -77,9 +77,9 @@ internal fun FilterBottomSheet( Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { DirectionFilter.entries.forEach { option -> val label = when (option) { - DirectionFilter.ALL -> strings.filterDirectionAll // ← "All" - DirectionFilter.OUTGOING -> strings.filterDirectionOutgoing // ← "Outgoing" - DirectionFilter.INCOMING -> strings.filterDirectionIncoming // ← "Incoming" + DirectionFilter.ALL -> strings.history.filterDirectionAll // ← "All" + DirectionFilter.OUTGOING -> strings.history.filterDirectionOutgoing // ← "Outgoing" + DirectionFilter.INCOMING -> strings.history.filterDirectionIncoming // ← "Incoming" } FilterChip( selected = currentFilter.direction == option, @@ -92,7 +92,7 @@ internal fun FilterBottomSheet( // ── Status ──────────────────────────────────────────────────────── Text( - text = strings.filterSectionStatus, // ← "Status" + text = strings.history.filterSectionStatus, // ← "Status" style = MaterialTheme.typography.labelMedium, color = MaterialTheme.colorScheme.onSurfaceVariant ) @@ -105,9 +105,9 @@ internal fun FilterBottomSheet( label = { Text( when (option) { - StatusFilter.COMPLETED -> strings.filterStatusCompleted // ← "Completed" - StatusFilter.PENDING -> strings.filterStatusPending // ← "Pending" - StatusFilter.FAILED -> strings.filterStatusFailed // ← "Failed" + StatusFilter.COMPLETED -> strings.history.filterStatusCompleted // ← "Completed" + StatusFilter.PENDING -> strings.history.filterStatusPending // ← "Pending" + StatusFilter.FAILED -> strings.history.filterStatusFailed // ← "Failed" } ) } @@ -119,7 +119,7 @@ internal fun FilterBottomSheet( if (availableTypes.isNotEmpty()) { Spacer(Modifier.height(20.dp)) Text( - text = strings.filterSectionType, // ← "Type" + text = strings.history.filterSectionType, // ← "Type" style = MaterialTheme.typography.labelMedium, color = MaterialTheme.colorScheme.onSurfaceVariant ) @@ -138,7 +138,7 @@ internal fun FilterBottomSheet( // ── Amount (sats) ───────────────────────────────────────────────── Text( - text = strings.filterSectionAmount, // ← "Amount (sats)" + text = strings.history.filterSectionAmount, // ← "Amount (sats)" style = MaterialTheme.typography.labelMedium, color = MaterialTheme.colorScheme.onSurfaceVariant ) @@ -159,8 +159,8 @@ internal fun FilterBottomSheet( OutlinedTextField( value = minText, onValueChange = { minText = it.filter(Char::isDigit); commitAmount() }, - label = { Text(strings.filterAmountMin_label) }, // ← "Min" - suffix = { Text(strings.filterAmountSuffix) }, // ← "sats" + label = { Text(strings.history.filterAmountMin_label) }, // ← "Min" + suffix = { Text(strings.history.filterAmountSuffix) }, // ← "sats" singleLine = true, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), modifier = Modifier.weight(1f) @@ -169,8 +169,8 @@ internal fun FilterBottomSheet( OutlinedTextField( value = maxText, onValueChange = { maxText = it.filter(Char::isDigit); commitAmount() }, - label = { Text(strings.filterAmountMax_label) }, // ← "Max" - suffix = { Text(strings.filterAmountSuffix) }, // ← "sats" + label = { Text(strings.history.filterAmountMax_label) }, // ← "Max" + suffix = { Text(strings.history.filterAmountSuffix) }, // ← "sats" singleLine = true, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), modifier = Modifier.weight(1f) @@ -180,7 +180,7 @@ internal fun FilterBottomSheet( // ── Date ────────────────────────────────────────────────────────── Text( - text = strings.filterSectionDate, // ← "Date" + text = strings.history.filterSectionDate, // ← "Date" style = MaterialTheme.typography.labelMedium, color = MaterialTheme.colorScheme.onSurfaceVariant ) @@ -190,9 +190,9 @@ internal fun FilterBottomSheet( Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { DatePreset.entries.forEach { preset -> val label = when (preset) { - DatePreset.THIS_WEEK -> strings.filterDateThisWeek // ← "This week" - DatePreset.THIS_MONTH -> strings.filterDateThisMonth // ← "This month" - DatePreset.THIS_YEAR -> strings.filterDateThisYear // ← "This year" + DatePreset.THIS_WEEK -> strings.history.filterDateThisWeek // ← "This week" + DatePreset.THIS_MONTH -> strings.history.filterDateThisMonth // ← "This month" + DatePreset.THIS_YEAR -> strings.history.filterDateThisYear // ← "This year" } FilterChip( selected = currentFilter.datePreset == preset, @@ -221,7 +221,7 @@ internal fun FilterBottomSheet( Text( currentFilter.minCreatedAt ?.let { formatEpochShort(it) } - ?: strings.filterDateFrom_label // ← "From" + ?: strings.history.filterDateFrom_label // ← "From" ) } Text("–", style = MaterialTheme.typography.bodyLarge) @@ -232,7 +232,7 @@ internal fun FilterBottomSheet( Text( currentFilter.maxCreatedAt ?.let { formatEpochShort(it) } - ?: strings.filterDateTo_label // ← "To" + ?: strings.history.filterDateTo_label // ← "To" ) } } @@ -248,11 +248,11 @@ internal fun FilterBottomSheet( val epochSec = pickerState.selectedDateMillis?.div(1000) onDateFilterSet(epochSec, currentFilter.maxCreatedAt) showFromPicker = false - }) { Text(strings.filterDialogOk) } // ← "OK" + }) { Text(strings.history.filterDialogOk) } // ← "OK" }, dismissButton = { TextButton(onClick = { showFromPicker = false }) { - Text(strings.filterDialogCancel) // ← "Cancel" + Text(strings.history.filterDialogCancel) // ← "Cancel" } } ) { DatePicker(state = pickerState) } @@ -270,11 +270,11 @@ internal fun FilterBottomSheet( val epochSec = pickerState.selectedDateMillis?.div(1000)?.let { it + 86399L } onDateFilterSet(currentFilter.minCreatedAt, epochSec) showToPicker = false - }) { Text(strings.filterDialogOk) } // ← "OK" + }) { Text(strings.history.filterDialogOk) } // ← "OK" }, dismissButton = { TextButton(onClick = { showToPicker = false }) { - Text(strings.filterDialogCancel) // ← "Cancel" + Text(strings.history.filterDialogCancel) // ← "Cancel" } } ) { DatePicker(state = pickerState) } diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/HistoryScreen.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/HistoryScreen.kt index 64ec165..14d6650 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/HistoryScreen.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/HistoryScreen.kt @@ -89,12 +89,12 @@ fun HistoryScreen( Scaffold( topBar = { TopAppBar( - title = { Text(strings.historyTitle) }, // ← "History" + title = { Text(strings.history.historyTitle) }, // ← "History" navigationIcon = { IconButton(onClick = onClose) { Icon( imageVector = Icons.Default.Close, - contentDescription = strings.historyClose // ← "Close" + contentDescription = strings.history.historyClose // ← "Close" ) } }, @@ -108,7 +108,7 @@ fun HistoryScreen( }) { Icon( imageVector = Icons.Default.Search, - contentDescription = strings.historySearchPayments // ← "Search payments" + contentDescription = strings.history.historySearchPayments // ← "Search payments" ) } } @@ -118,7 +118,7 @@ fun HistoryScreen( IconButton(onClick = { filterSheetVisible = true }) { Icon( imageVector = Icons.Default.FilterList, - contentDescription = strings.historyFilterPayments // ← "Filter payments" + contentDescription = strings.history.historyFilterPayments // ← "Filter payments" ) } } @@ -191,7 +191,7 @@ fun HistoryScreen( ) Spacer(Modifier.height(12.dp)) Button(onClick = { vm.refresh() }) { - Text(strings.historyRetry) // ← "Retry" + Text(strings.history.historyRetry) // ← "Retry" } } } @@ -210,7 +210,7 @@ fun HistoryScreen( if (s.payments.isEmpty()) { Text( - text = strings.historyNoPayments, // ← "No payments yet." + text = strings.history.historyNoPayments, // ← "No payments yet." modifier = Modifier.align(Alignment.Center), style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant @@ -310,13 +310,13 @@ private fun SearchBar( IconButton(onClick = onInfoClick) { Icon( imageVector = Icons.Default.Info, - contentDescription = strings.historySearchHelp // ← "Search help" + contentDescription = strings.history.historySearchHelp // ← "Search help" ) } TextField( value = query, onValueChange = onQueryChange, - placeholder = { Text(strings.historySearchPlaceholder) }, // ← "Search transactions" + placeholder = { Text(strings.history.historySearchPlaceholder) }, // ← "Search transactions" singleLine = true, colors = TextFieldDefaults.colors( focusedContainerColor = Color.Transparent, @@ -337,7 +337,7 @@ private fun SearchBar( }) { Icon( imageVector = Icons.Default.ContentPaste, - contentDescription = strings.historySearchPaste // ← "Paste" + contentDescription = strings.history.historySearchPaste // ← "Paste" ) } IconButton( @@ -346,7 +346,7 @@ private fun SearchBar( ) { Icon( imageVector = Icons.Default.Close, - contentDescription = strings.historySearchClear, // ← "Clear search" + contentDescription = strings.history.historySearchClear, // ← "Clear search" tint = if (query.isNotEmpty()) LocalContentColor.current else MaterialTheme.colorScheme.onSurface.copy(alpha = 0.38f) ) @@ -382,15 +382,15 @@ private fun ActiveFilterChips( label = { Text( when (filter.direction) { - DirectionFilter.OUTGOING -> strings.filterDirectionOutgoing // ← "Outgoing" - else -> strings.filterDirectionIncoming // ← "Incoming" + DirectionFilter.OUTGOING -> strings.history.filterDirectionOutgoing // ← "Outgoing" + else -> strings.history.filterDirectionIncoming // ← "Incoming" } ) }, trailingIcon = { Icon( imageVector = Icons.Default.Close, - contentDescription = strings.filterClearDirection, // ← "Clear direction filter" + contentDescription = strings.history.filterClearDirection, // ← "Clear direction filter" modifier = Modifier.size(16.dp) ) } @@ -403,16 +403,16 @@ private fun ActiveFilterChips( label = { Text( when (s) { - StatusFilter.COMPLETED -> strings.filterStatusCompleted // ← "Completed" - StatusFilter.PENDING -> strings.filterStatusPending // ← "Pending" - StatusFilter.FAILED -> strings.filterStatusFailed // ← "Failed" + StatusFilter.COMPLETED -> strings.history.filterStatusCompleted // ← "Completed" + StatusFilter.PENDING -> strings.history.filterStatusPending // ← "Pending" + StatusFilter.FAILED -> strings.history.filterStatusFailed // ← "Failed" } ) }, trailingIcon = { Icon( imageVector = Icons.Default.Close, - contentDescription = strings.filterRemoveStatus, // ← "Remove status filter" + contentDescription = strings.history.filterRemoveStatus, // ← "Remove status filter" modifier = Modifier.size(16.dp) ) } @@ -426,7 +426,7 @@ private fun ActiveFilterChips( trailingIcon = { Icon( imageVector = Icons.Default.Close, - contentDescription = strings.filterRemoveType, // ← "Remove type filter" + contentDescription = strings.history.filterRemoveType, // ← "Remove type filter" modifier = Modifier.size(16.dp) ) } @@ -435,11 +435,11 @@ private fun ActiveFilterChips( if (filter.minAmountSat != null || filter.maxAmountSat != null) { val label = when { filter.minAmountSat != null && filter.maxAmountSat != null -> - strings.filterAmountRange(filter.minAmountSat, filter.maxAmountSat) // ← "X–Y sats" + strings.history.filterAmountRange(filter.minAmountSat, filter.maxAmountSat) // ← "X–Y sats" filter.minAmountSat != null -> - strings.filterAmountMin(filter.minAmountSat) // ← "≥ X sats" + strings.history.filterAmountMin(filter.minAmountSat) // ← "≥ X sats" else -> - strings.filterAmountMax(filter.maxAmountSat!!) // ← "≤ X sats" + strings.history.filterAmountMax(filter.maxAmountSat!!) // ← "≤ X sats" } InputChip( selected = true, @@ -448,7 +448,7 @@ private fun ActiveFilterChips( trailingIcon = { Icon( imageVector = Icons.Default.Close, - contentDescription = strings.filterClearAmount, // ← "Clear amount filter" + contentDescription = strings.history.filterClearAmount, // ← "Clear amount filter" modifier = Modifier.size(16.dp) ) } @@ -458,19 +458,19 @@ private fun ActiveFilterChips( val maxCreatedAt = filter.maxCreatedAt if (minCreatedAt != null || maxCreatedAt != null) { val label = when (filter.datePreset) { - DatePreset.THIS_WEEK -> strings.filterDateThisWeek // ← "This week" - DatePreset.THIS_MONTH -> strings.filterDateThisMonth // ← "This month" - DatePreset.THIS_YEAR -> strings.filterDateThisYear // ← "This year" + DatePreset.THIS_WEEK -> strings.history.filterDateThisWeek // ← "This week" + DatePreset.THIS_MONTH -> strings.history.filterDateThisMonth // ← "This month" + DatePreset.THIS_YEAR -> strings.history.filterDateThisYear // ← "This year" null -> when { minCreatedAt != null && maxCreatedAt != null -> - strings.filterDateRange( // ← "X–Y" + strings.history.filterDateRange( // ← "X–Y" formatEpochShort(minCreatedAt), formatEpochShort(maxCreatedAt) ) minCreatedAt != null -> - strings.filterDateFrom(formatEpochShort(minCreatedAt)) // ← "From X" + strings.history.filterDateFrom(formatEpochShort(minCreatedAt)) // ← "From X" else -> - strings.filterDateUntil(formatEpochShort(maxCreatedAt!!)) // ← "Until X" + strings.history.filterDateUntil(formatEpochShort(maxCreatedAt!!)) // ← "Until X" } } InputChip( @@ -480,7 +480,7 @@ private fun ActiveFilterChips( trailingIcon = { Icon( imageVector = Icons.Default.Close, - contentDescription = strings.filterClearDate, // ← "Clear date filter" + contentDescription = strings.history.filterClearDate, // ← "Clear date filter" modifier = Modifier.size(16.dp) ) } @@ -490,11 +490,11 @@ private fun ActiveFilterChips( InputChip( selected = true, onClick = onClearSearch, - label = { Text(strings.historySearchChip(filter.searchQuery.takeLast(8))) }, // ← "search: …XXXXXXXX" + label = { Text(strings.history.historySearchChip(filter.searchQuery.takeLast(8))) }, // ← "search: …XXXXXXXX" trailingIcon = { Icon( imageVector = Icons.Default.Close, - contentDescription = strings.historyClearSearch, // ← "Clear search" + contentDescription = strings.history.historyClearSearch, // ← "Clear search" modifier = Modifier.size(16.dp) ) } diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentDetailScreen.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentDetailScreen.kt index d56e06c..64b36a3 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentDetailScreen.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentDetailScreen.kt @@ -92,15 +92,15 @@ fun PaymentDetailScreen( TopAppBar( title = { Text( - if (payment.isOutgoing) strings.detailOutgoingTitle // ← "Outgoing payment" - else strings.detailIncomingTitle // ← "Incoming payment" + if (payment.isOutgoing) strings.history.detailOutgoingTitle // ← "Outgoing payment" + else strings.history.detailIncomingTitle // ← "Incoming payment" ) }, navigationIcon = { IconButton(onClick = onBack) { Icon( imageVector = Icons.AutoMirrored.Filled.ArrowBack, - contentDescription = strings.detailBack // ← "Back" + contentDescription = strings.history.detailBack // ← "Back" ) } } @@ -122,7 +122,7 @@ fun PaymentDetailScreen( modifier = Modifier.fillMaxWidth() ) { Text( - text = strings.detailCouldNotLoad, // ← "Could not load full details" + text = strings.history.detailCouldNotLoad, // ← "Could not load full details" color = MaterialTheme.colorScheme.onErrorContainer, style = MaterialTheme.typography.bodySmall, modifier = Modifier.padding(12.dp) @@ -215,7 +215,7 @@ private fun PaymentDetailContent( // Build the optional parts separately so the lambda stays clean val fiatPart = if (feeFiat != null) " ($feeFiat)" else "" val ppmPart = if (ppm != null) " · $ppm ppm" else "" - val feeLabel = strings.detailFeeLabel( // ← "Fee: X sats (fiat) · Y ppm" + val feeLabel = strings.history.detailFeeLabel( // ← "Fee: X sats (fiat) · Y ppm" payment.feeSat, fiatPart, ppmPart ) Spacer(Modifier.height(4.dp)) @@ -233,17 +233,17 @@ private fun PaymentDetailContent( // ── Basic info ─────────────────────────────────────────────────────── item { - DetailSection(title = strings.detailSectionDetails) { // ← "Details" - DetailRow(strings.detailRowDate, formatTimestamp(payment.createdAt, payment.time)) // ← "Date" + DetailSection(title = strings.history.detailSectionDetails) { // ← "Details" + DetailRow(strings.history.detailRowDate, formatTimestamp(payment.createdAt, payment.time)) // ← "Date" DetailRow( - strings.detailRowMemo, // ← "Memo" - payment.memo?.takeIf { it.isNotBlank() } ?: strings.detailRowMemoEmpty // ← "—" + strings.history.detailRowMemo, // ← "Memo" + payment.memo?.takeIf { it.isNotBlank() } ?: strings.history.detailRowMemoEmpty // ← "—" ) if (payment.extra?.tag != null) { - DetailRow(strings.detailRowType, payment.extra.tag) // ← "Type" + DetailRow(strings.history.detailRowType, payment.extra.tag) // ← "Type" } if (payment.extra?.comment?.isNotBlank() == true) { - DetailRow(strings.detailRowComment, payment.extra.comment) // ← "Comment" + DetailRow(strings.history.detailRowComment, payment.extra.comment) // ← "Comment" } } } @@ -251,19 +251,19 @@ private fun PaymentDetailContent( // ── Success action (LNURL) ─────────────────────────────────────────── payment.extra?.successAction?.let { action -> item { - DetailSection(title = strings.detailSectionSuccessAction) { // ← "Success Action" - action.message?.let { DetailRow(strings.detailSuccessMessage, it) } // ← "Message" - action.url?.let { DetailRow(strings.detailSuccessUrl, it) } // ← "URL" - action.description?.let { DetailRow(strings.detailSuccessDescription, it) } // ← "Description" + DetailSection(title = strings.history.detailSectionSuccessAction) { // ← "Success Action" + action.message?.let { DetailRow(strings.history.detailSuccessMessage, it) } // ← "Message" + action.url?.let { DetailRow(strings.history.detailSuccessUrl, it) } // ← "URL" + action.description?.let { DetailRow(strings.history.detailSuccessDescription, it) } // ← "Description" } } } // ── Technical ──────────────────────────────────────────────────────── item { - DetailSection(title = strings.detailSectionTechnical) { // ← "Technical" + DetailSection(title = strings.history.detailSectionTechnical) { // ← "Technical" DetailRow( - label = strings.detailRowPaymentHash, // ← "Payment Hash" + label = strings.history.detailRowPaymentHash, // ← "Payment Hash" value = payment.paymentHash, monospace = true, copyable = true, @@ -277,7 +277,7 @@ private fun PaymentDetailContent( ) if (!payment.preimage.isNullOrBlank() && payment.preimage != "0".repeat(64)) { DetailRow( - label = strings.detailRowPreimage, // ← "Preimage" + label = strings.history.detailRowPreimage, // ← "Preimage" value = payment.preimage, monospace = true, copyable = true, @@ -294,7 +294,7 @@ private fun PaymentDetailContent( val ambossUrl = "https://amboss.space/node/$pubkey" val label = alias ?: "${pubkey.take(8)}…${pubkey.takeLast(8)}" DetailRow( - label = strings.detailRowDestination, // ← "Destination" + label = strings.history.detailRowDestination, // ← "Destination" value = label, valueColor = MaterialTheme.colorScheme.primary, textDecoration = androidx.compose.ui.text.style.TextDecoration.Underline, @@ -308,7 +308,7 @@ private fun PaymentDetailContent( } if (!payment.bolt11.isNullOrBlank()) { DetailRow( - label = strings.detailRowBolt11, // ← "BOLT11" + label = strings.history.detailRowBolt11, // ← "BOLT11" value = payment.bolt11, monospace = true, copyable = true, diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentRow.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentRow.kt index 5ba5456..fbcbd29 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentRow.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentRow.kt @@ -61,8 +61,8 @@ internal fun PaymentRow( ) { Icon( imageVector = icon, - contentDescription = if (payment.isOutgoing) strings.paymentRowSentCD // ← "Sent" - else strings.paymentRowReceivedCD, // ← "Received" + contentDescription = if (payment.isOutgoing) strings.history.paymentRowSentCD // ← "Sent" + else strings.history.paymentRowReceivedCD, // ← "Received" tint = amountColor, modifier = Modifier.size(20.dp) ) @@ -71,7 +71,7 @@ internal fun PaymentRow( Column(modifier = Modifier.weight(1f)) { Text( text = payment.memo?.takeIf { it.isNotBlank() } - ?: strings.paymentRowNoMemo, // ← "No memo" + ?: strings.history.paymentRowNoMemo, // ← "No memo" style = MaterialTheme.typography.bodyMedium, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -86,8 +86,8 @@ internal fun PaymentRow( color = MaterialTheme.colorScheme.onSurfaceVariant ) val statusLabel = when { - isPending -> strings.paymentRowPending - isFailed -> strings.paymentRowFailed + isPending -> strings.history.paymentRowPending + isFailed -> strings.history.paymentRowFailed else -> null } val statusColor = when { diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/SearchInfoSheet.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/SearchInfoSheet.kt index 7e7daca..c4b41f8 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/SearchInfoSheet.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/SearchInfoSheet.kt @@ -33,45 +33,45 @@ internal fun SearchInfoSheet(visible: Boolean, onDismiss: () -> Unit) { .padding(start = 24.dp, end = 24.dp, bottom = 40.dp) ) { Text( - text = strings.searchInfoTitle, // ← "What can I search for?" + text = strings.history.searchInfoTitle, // ← "What can I search for?" style = MaterialTheme.typography.titleMedium ) Spacer(Modifier.height(8.dp)) Text( - text = strings.searchInfoSubtitle, // ← "Type any part of the following…" + text = strings.history.searchInfoSubtitle, // ← "Type any part of the following…" style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant ) Spacer(Modifier.height(20.dp)) SearchInfoItem( - title = strings.searchInfoMemoTitle, // ← "Memo" - description = strings.searchInfoMemoDesc + title = strings.history.searchInfoMemoTitle, // ← "Memo" + description = strings.history.searchInfoMemoDesc ) SearchInfoItem( - title = strings.searchInfoInvoiceTitle, // ← "Invoice" - description = strings.searchInfoInvoiceDesc + title = strings.history.searchInfoInvoiceTitle, // ← "Invoice" + description = strings.history.searchInfoInvoiceDesc ) SearchInfoItem( - title = strings.searchInfoHashTitle, // ← "Hash" - description = strings.searchInfoHashDesc + title = strings.history.searchInfoHashTitle, // ← "Hash" + description = strings.history.searchInfoHashDesc ) SearchInfoItem( - title = strings.searchInfoPreimageTitle, // ← "Preimage" - description = strings.searchInfoPreimageDesc + title = strings.history.searchInfoPreimageTitle, // ← "Preimage" + description = strings.history.searchInfoPreimageDesc ) SearchInfoItem( - title = strings.searchInfoNodeAliasTitle, // ← "Node alias" - description = strings.searchInfoNodeAliasDesc + title = strings.history.searchInfoNodeAliasTitle, // ← "Node alias" + description = strings.history.searchInfoNodeAliasDesc ) SearchInfoItem( - title = strings.searchInfoNodeIdTitle, // ← "Node ID (pubkey)" - description = strings.searchInfoNodeIdDesc + title = strings.history.searchInfoNodeIdTitle, // ← "Node ID (pubkey)" + description = strings.history.searchInfoNodeIdDesc ) Spacer(Modifier.height(16.dp)) Text( - text = strings.searchInfoFooter, // ← "You can paste a full value…" + text = strings.history.searchInfoFooter, // ← "You can paste a full value…" style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant )