411 lines
24 KiB
Kotlin
411 lines
24 KiB
Kotlin
package com.bitcointxoko.gudariwallet.i18n
|
||
|
||
import cafe.adriel.lyricist.LyricistStrings
|
||
import kotlin.String
|
||
|
||
@LyricistStrings(languageTag = "en", default = true)
|
||
val EnHomeStrings = AppStrings(
|
||
// ── WalletScreen ──────────────────────────────────────────────────────────
|
||
tabReceive = "Receive",
|
||
tabSend = "Send",
|
||
scanContentDescription = "Scan",
|
||
dismissContentDescription = "Dismiss",
|
||
clipboardInvoiceDetected = "Invoice detected in clipboard",
|
||
clipboardLnurlDetected = "LNURL detected in clipboard",
|
||
clipboardAddressDetected = "Lightning Address detected in clipboard",
|
||
clipboardPaymentDetected = "Payment detected in clipboard",
|
||
clipboardTapToOpen = "Tap to open",
|
||
clipboardTapToPay = "Tap to pay",
|
||
nfcInvoiceDetected = "Invoice detected via NFC",
|
||
nfcLnurlDetected = "LNURL detected via NFC",
|
||
nfcAddressDetected = "Lightning Address detected via NFC",
|
||
nfcPaymentDetected = "Payment detected via NFC",
|
||
nfcTapToOpen = "Tap to open",
|
||
nfcTapToPay = "Tap to pay",
|
||
|
||
// ── HomeTab ───────────────────────────────────────────────────────────────
|
||
loadingBalance = "Loading balance…",
|
||
sats = "sats",
|
||
hideBalance = "Hide balance",
|
||
revealBalance = "Reveal balance",
|
||
changeCurrency = "Change currency",
|
||
showFiat = "+ Show fiat",
|
||
updatedAt = { label -> "Updated $label" },
|
||
justNow = "just now",
|
||
minAgo = {min -> "$min min ago"},
|
||
atTime = {time -> "at $time"},
|
||
viewHistory = "Activity",
|
||
selectCurrency = "Select currency",
|
||
currencyNone = "None",
|
||
hideFiatEquivalent = "Hide fiat equivalent",
|
||
selected = "Selected",
|
||
search = "Search…",
|
||
noCurrenciesAvailable = "No currencies available",
|
||
noCurrenciesMatch = { query -> "No currencies match \"$query\"" },
|
||
couldNotRefresh = "Could not refresh — pull down to try again",
|
||
couldNotLoadBalance = "Could not load balance — pull down to try again",
|
||
|
||
// ── Shared ────────────────────────────────────────────────────────────────
|
||
cancel = "Cancel",
|
||
tryAgain = "Try Again",
|
||
amount = "Amount",
|
||
next = "Next",
|
||
back = "← Back",
|
||
done = "Done",
|
||
details = "Details",
|
||
enterValidAmount = "Enter a valid amount",
|
||
satsUnit = { sats -> "$sats sats" },
|
||
|
||
// ── ReceiveScreen — general ───────────────────────────────────────────────
|
||
receive = "Receive",
|
||
|
||
// ── ReceiveScreen — error ─────────────────────────────────────────────────
|
||
receiveError = "Error",
|
||
|
||
// ── ReceiveScreen — QR / share ────────────────────────────────────────────
|
||
lightningAddressQrCode = "Lightning address QR code",
|
||
lightningAddressLabel = "Lightning Address",
|
||
shareLightningAddress = "Share Lightning Address",
|
||
lightningInvoiceQrCode = "Lightning invoice QR code",
|
||
invoiceLabel = "Invoice",
|
||
shareInvoice = "Share Invoice",
|
||
|
||
// ── ReceiveScreen — amount step ───────────────────────────────────────────
|
||
amountInSats = "Amount (sats)",
|
||
satsRange = { min, max -> "$min – $max sats" },
|
||
|
||
// ── ReceiveScreen — memo step ─────────────────────────────────────────────
|
||
memoOptional = "Memo (optional)",
|
||
memoPlaceholder = "What's this for?",
|
||
creatingInvoice = "Creating invoice…",
|
||
createInvoice = "Create Invoice",
|
||
|
||
// ── ReceiveScreen — invoice ready ─────────────────────────────────────────
|
||
waiting = "Waiting…",
|
||
invoiceExpired = "Invoice expired",
|
||
newInvoice = "New Invoice",
|
||
|
||
// ── ReceiveScreen — lnurl withdraw ────────────────────────────────────────
|
||
withdrawFrom = "Withdraw from",
|
||
minimumSats = { min -> "Minimum is $min sats" },
|
||
maximumSats = { max -> "Maximum is $max sats" },
|
||
withdrawButton = "Withdraw",
|
||
withdrawButtonAmount = { amount -> "Withdraw $amount sats" },
|
||
|
||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||
paymentReceived = "Payment Received!",
|
||
|
||
// ── 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",
|
||
openInApp = "Open in app",
|
||
noAppFound = "No compatible app found",
|
||
|
||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||
receiveVmFailedToCreateInvoice = "Failed to create invoice",
|
||
receiveVmWithdrawRejected = "Withdraw service rejected the invoice",
|
||
receiveVmWithdrawFailed = "Withdraw failed",
|
||
|
||
// ── SendScreen — general ──────────────────────────────────────────────────
|
||
send = "Send",
|
||
paste = "Paste",
|
||
continueButton = "Continue",
|
||
clear = "Clear",
|
||
sendAnother = "Send Another",
|
||
|
||
// ── SendScreen — input field ──────────────────────────────────────────────
|
||
sendInputLabel = "Invoice, LNURL, or Lightning Address",
|
||
sendInputPlaceholder = "lnbc… / lnurl1… / user@domain.com",
|
||
tapNfcHint = "Tap NFC device to receive invoice",
|
||
|
||
// ── SendScreen — states ───────────────────────────────────────────────────
|
||
resolving = "Resolving…",
|
||
sendingPayment = "Sending payment…",
|
||
|
||
// ── SendScreen — paying ───────────────────────────────────────────────────
|
||
paymentTakingLong = "This is taking longer than usual",
|
||
paymentTakingLongDetail = "Your payment is still on its way. This may be a hold invoice that settles when the recipient is ready. You'll get a notification when it completes — you can safely leave this screen.",
|
||
dismissPayment = "Dismiss",
|
||
|
||
// ── SendScreen — payment sent ─────────────────────────────────────────────
|
||
paymentSent = "Payment sent!",
|
||
amountSats = { sats -> "$sats sats" },
|
||
fiatEquivalent = { fiatStr -> "≈ $fiatStr" },
|
||
noFees = "No fees",
|
||
routingFee = { sats, ppmSuffix -> "Routing fee: $sats sat${if (sats == 1L) "" else "s"}$ppmSuffix" },
|
||
|
||
// ── ConfirmCard ───────────────────────────────────────────────────────────
|
||
invoiceDetails = "Invoice Details",
|
||
payingTo = { label -> "Paying to $label" },
|
||
confirmAmount = { sats -> "$sats sats" },
|
||
confirmAmountWithFiat = { sats, fiat -> "$sats sats · $fiat" },
|
||
memo = "Memo",
|
||
destination = "Destination",
|
||
created = "Created",
|
||
expiresIn = "Expires in",
|
||
hash = "Hash",
|
||
invoice = "Invoice",
|
||
expiryExpired = "Expired",
|
||
expirySeconds = { s -> "${s}s" },
|
||
expiryMinutes = { m, s -> "${m}m ${s}s" },
|
||
expiryHours = { h, m -> "${h}h ${m}m" },
|
||
createdToday = { time -> "Today, $time" },
|
||
createdYesterday = { time -> "Yesterday, $time" },
|
||
payButton = { sats -> "Pay $sats sats" },
|
||
payButtonWithFiat = { sats, fiat -> "Pay $sats sats · $fiat" },
|
||
sendBiometricPrompt = { sats -> "Send $sats sats" },
|
||
sendBiometricPromptTo = { sats, label -> "Send $sats sats to $label" },
|
||
|
||
// ── LnurlPayForm ─────────────────────────────────────────────────────────
|
||
lnurlAmountError = { min, max -> "Enter an amount between $min and $max sats" },
|
||
lnurlFiatRange = { minFiat, maxFiat -> "$minFiat – $maxFiat" },
|
||
lnurlSatsAndFiatRange = { min, max, minFiat, maxFiat -> "$min – $max sats · $minFiat – $maxFiat" },
|
||
commentOptional = { max -> "Comment (optional, max $max chars)" },
|
||
commentCounter = { current, max -> "$current/$max" },
|
||
lnurlPayButton = { sats -> "Pay $sats sats" },
|
||
lnurlPayButtonWithFiat = { sats, fiat -> "Pay $sats sats · $fiat" },
|
||
|
||
// ── RouteHintWarning ──────────────────────────────────────────────────────
|
||
routeHintHighFees = "High routing fees in invoice",
|
||
routeHintElevatedFees = "Elevated routing fees in invoice",
|
||
routeHintForcedChannel = { node -> "This invoice forces payment through a private channel operated by $node." },
|
||
routeHintFeeRate = { effectivePpm, worstPpm -> "Effective fee rate: $effectivePpm ppm ($worstPpm ppm)" },
|
||
routeHintFeeRateBase = { effectivePpm, worstPpm, baseLabel -> "Effective fee rate: $effectivePpm ppm ($worstPpm ppm + $baseLabel base)" },
|
||
routeHintEstimatedFee = { sats -> "Estimated extra fee on this payment: ~$sats sat${if (sats == 1L) "" else "s"}" },
|
||
routeHintShowDetails = "See details ▾",
|
||
routeHintHideDetails = "Hide details ▴",
|
||
routeHintHopsHeader = "Private route hint hops",
|
||
routeHintHopFees = { ppm, baseLabel -> "$ppm ppm · $baseLabel base" },
|
||
|
||
// ── SendViewModel ─────────────────────────────────────────────────────────
|
||
sendVmLnurlAuthNotSupported = "Lightning Login (LNURL-auth) is not yet supported",
|
||
sendVmUnrecognisedInput = "Unrecognised input — paste a BOLT-11 invoice, LNURL, or Lightning Address",
|
||
sendVmPaymentFailed = "Payment failed",
|
||
sendVmCouldNotFetchInvoice = "Could not fetch invoice from recipient",
|
||
sendVmCouldNotDecodeInvoice = "Could not decode invoice",
|
||
sendVmAuthFailed = { msg -> "Authentication failed: $msg" },
|
||
sendVmOnChainNotSupported = "On-chain Bitcoin payments are not supported — share a BIP-21 URI with a lightning= parameter",
|
||
sendVmChannelRequestNotSupported = "Channel requests (lnurlc) are not supported",
|
||
sendVmCouldNotResolveAddress = "Could not resolve address",
|
||
sendVmEmptyResponse = "Empty response from server",
|
||
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",
|
||
|
||
onboarding = OnboardingStrings(
|
||
back = "Back",
|
||
next = "Next",
|
||
done = "Done",
|
||
title = "Connect to LNbits",
|
||
subtitle = "Enter your LNbits server URL and API keys.",
|
||
serverUrl = "Server URL",
|
||
serverUrlHint = "https://bitcointxoko.org",
|
||
invoiceKey = "Invoice Key (read-only)",
|
||
invoiceKeySubtitle = "Used to generate payment requests.",
|
||
pasteInvoiceKey = "Paste invoice key",
|
||
adminKey = "Admin Key (for sending)",
|
||
adminKeySubtitle = "Required to send payments.",
|
||
pasteAdminKey = "Paste admin key",
|
||
hideAdminKey = "Hide",
|
||
showAdminKey = "Show",
|
||
fieldsRequired = "All fields are required.",
|
||
connect = "Connect",
|
||
notificationsTitle = "Stay in the loop",
|
||
notificationsSubtitle = "Get notified instantly when you receive a payment.",
|
||
notificationsAlreadyGranted = "You're all set - permissions have been granted.",
|
||
allowNotifications = "Allow Notifications",
|
||
notificationsNote = "You can change this later in system Settings.",
|
||
notificationsAutoGranted = "Notifications are enabled automatically on your device.",
|
||
batteryTitle = "Background activity",
|
||
batterySubtitle = "Allow Gudari Wallet to run unrestricted so notifications arrive even when the app is closed.",
|
||
openSettings = "Open Settings",
|
||
batteryNote = "Tap 'Battery' → 'Unrestricted'. You can skip this and change it later.",
|
||
batteryAlreadyUnrestricted = "You're all set — no restrictions detected.",
|
||
paymentHistory = "Payment history",
|
||
paymentHistorySubtitle = "Download your past payments so they're available offline.",
|
||
syncNow = "Sync now",
|
||
skipForNow = "Skip for now",
|
||
syncScheduled = "Sync scheduled — will run when your device is online. You will get a notification when the sync is done. You can already start using the app.",
|
||
continueToApp = "Continue to app →",
|
||
connecting = "Connecting...",
|
||
paymentsFetchedTotal = { fetched, total -> "$fetched / $total payments" },
|
||
paymentsSynced = { total -> "✓ $total payments synced"},
|
||
syncComplete = "✓ Sync complete",
|
||
syncFailed = "Sync failed. You can retry from Settings.",
|
||
scheduleForLater = "Schedule for later",
|
||
scheduleSync = "Schedule sync",
|
||
schedule = "Schedule",
|
||
cancel = "Cancel"
|
||
),
|
||
|
||
nwc = NwcStrings(
|
||
back = "Back",
|
||
next = "Next",
|
||
done = "Done",
|
||
cancel = "Cancel",
|
||
schedule = "Schedule",
|
||
|
||
// ── Connection detail ─────────────────────────────────────────────────────
|
||
connectionDetailTitle = "Connection",
|
||
connectionUnknownWallet = "Unknown app",
|
||
connectionSectionDetails = "Details",
|
||
connectionRowCreated = "Connected",
|
||
connectionRowLastUsed = "Last used",
|
||
connectionRowExpires = "Expires",
|
||
connectionRowPubkey = "Public key",
|
||
connectionNeverUsed = "Never",
|
||
connectionNoExpiry = "Never",
|
||
connectionExpired = { date -> "Expired · $date" },
|
||
connectionSectionPermissions = "Permissions",
|
||
connectionSectionBudgets = "Spending budgets",
|
||
connectionBudgetTitle = { window -> "$window budget" },
|
||
connectionBudgetUsed = { sats -> "Used: $sats sats" },
|
||
connectionBudgetTotal = { sats -> "of $sats sats" },
|
||
connectionRevoke = "Revoke connection",
|
||
connectionStatusActive = "Active",
|
||
connectionStatusExpired = "Expired",
|
||
|
||
// ── NWC permissions ───────────────────────────────────────────────────────
|
||
permPayInvoice = "Pay invoices",
|
||
permGetBalance = "Read balance",
|
||
permGetInfo = "Read wallet info",
|
||
permMakeInvoice = "Create invoices",
|
||
permLookupInvoice = "Look up invoices",
|
||
permListTransactions = "View transaction history",
|
||
permSignMessage = "Sign messages",
|
||
permPay = "Send payments",
|
||
permInvoice = "Create invoices",
|
||
permLookupHistory = "Lookup status & transaction history",
|
||
permBalanceInfo = "Read balance & account info",
|
||
permSendPayments = "Send payments",
|
||
permCreateInvoices = "Create invoices",
|
||
permLookupInvoiceStatus = "Lookup status of invoice",
|
||
permReadTransactionHistory = "Read transaction history",
|
||
permReadWalletBalance = "Read wallet balance",
|
||
permReadAccountInfo = "Read account info",
|
||
revokeDialogTitle = "Revoke connection?",
|
||
revokeDialogBody = "This will permanently revoke this Nostr Wallet Connect key. Any app using it will lose access.",
|
||
revokeDialogConfirm = "Revoke",
|
||
revokeDialogDismiss = "Cancel",
|
||
)
|
||
)
|
||
|