diff options
| author | Adam Soltys <[email protected]> | 2026-09-27 15:07:30 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-09-27 15:07:30 -0700 |
| commit | e6035849f9b88bdd8cd665b868bbe121fa77e538 (patch) | |
| tree | b575589cf8757cfd61e25db2cdd24b106a8befff /src/i18n.js | |
| parent | 3da7f9d52dee6a535190cd5e0db152a3689c7e8e (diff) | |
| download | coinosv3-e6035849f9b88bdd8cd665b868bbe121fa77e538.tar.gz coinosv3-e6035849f9b88bdd8cd665b868bbe121fa77e538.zip | |
Copy: no more em dashes, anywhere people read.
Every English string, the translations, the README and the messages the code
shows people now break with a full stop, a colon or a comma instead. Only
console logs and the "—" placeholder for an empty cell keep the dash.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VhUKyXKtsJ67QAFfb7QR9D
Diffstat (limited to 'src/i18n.js')
| -rw-r--r-- | src/i18n.js | 228 |
1 files changed, 114 insertions, 114 deletions
diff --git a/src/i18n.js b/src/i18n.js index 165dc6c..9a2b4bc 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -44,9 +44,9 @@ const STR = { accounts: 'Accounts', addWallet: 'Add account', signInAnother: 'Sign into another account', - signInAnotherNote: 'Add a different identity (Nostr, passkey or Google) without signing out — switch between them here anytime.', + signInAnotherNote: 'Add a different identity (Nostr, passkey or Google) without signing out. Switch between them here anytime.', switchIdentityTitle: 'Switch account', - switchIdentityDesc: 'Accounts already signed in on this device. Tap one to switch — nothing is logged out.', + switchIdentityDesc: 'Accounts already signed in on this device. Tap one to switch. Nothing is logged out.', signInNew: 'Sign into a new account', identityNoKey: 'Not opened on this device yet', clearAll: 'Delete all', @@ -54,16 +54,16 @@ const STR = { entropyToggle: 'Entropy', entropySubmit: 'Submit', entropyHint: 'The seed comes from exactly what you type. Entering the same text again recreates the same wallet, on any device.', - entropyWarn: '⚠ Anyone who can guess this text can take your money. Use plenty of real-world randomness — 100+ dice rolls, or the order of a fully shuffled deck of cards.', + entropyWarn: '⚠ Anyone who can guess this text can take your money. Use plenty of real-world randomness: 100+ dice rolls, or the order of a fully shuffled deck of cards.', entropyPlaceholder: '4 2 6 6 1 3 5 2 …', logoutPopBlurb: 'Your accounts stay saved on this device.', logoutOne: 'Log out of {name}', - logoutOneBlurbLogin: 'Only this account leaves — the others stay signed in. You can sign back in with the same key anytime.', - logoutOneBlurbSeed: 'Only this account leaves — the others stay signed in. It is removed from this device, so make sure you have its recovery phrase.', + logoutOneBlurbLogin: 'Only this account leaves. The others stay signed in. You can sign back in with the same key anytime.', + logoutOneBlurbSeed: 'Only this account leaves. The others stay signed in. It is removed from this device, so make sure you have its recovery phrase.', logoutAll: 'Log out of all accounts', clearAllWarn: '⚠ This removes every account from this device. Any account whose recovery phrase or key you have not backed up will be lost for good.', removeWalletTitle: 'Remove account', - removeWalletWarn: '⚠ Remove “{name}” from this device? It will be gone from this browser — make sure you have its recovery phrase. Other accounts aren’t affected.', + removeWalletWarn: '⚠ Remove “{name}” from this device? It will be gone from this browser. Make sure you have its recovery phrase. Other accounts aren’t affected.', rename: 'Rename', remove: 'Remove', watchOnly: 'Watch-only', @@ -72,14 +72,14 @@ const STR = { watchOnlyDesc: 'Watch any wallet from its account public key. You can receive and view balance and history, but not send.', watchOnlyNote: 'This is a watch-only wallet. You can receive and view, but you cannot send.', loadSeedTitle: 'Load recovery phrase', - loadSeedDesc: "Enter this wallet's recovery phrase (or private key) to spend from it — it must match this wallet.", + loadSeedDesc: "Enter this wallet's recovery phrase (or private key) to spend from it. It must match this wallet.", loadSeedBtn: 'Load recovery phrase', seedPlaceholder: 'Recovery phrase or xprv', bip39PassphraseOpt: 'BIP39 passphrase (optional)', alsoSaveDevice: 'Also save to this device', enterSeedToSpend: 'Enter your recovery phrase.', seedMismatch: "That recovery phrase doesn't match this wallet.", - seedNeedsPrivate: "That's a public key — enter the recovery phrase or private key to spend.", + seedNeedsPrivate: "That's a public key. Enter the recovery phrase or private key to spend.", seedInvalid: 'Not a valid recovery phrase or key.', watchOnlySendTitle: 'Load your seed to send', watchOnlySendDesc: "You're viewing this wallet without its seed, so you can't spend yet. Load your recovery phrase to send.", @@ -91,7 +91,7 @@ const STR = { forgetDevice: 'Saved · forget', savedTag: 'saved', setPassword: 'Set a password (optional)', - setPasswordDesc: 'Encrypts this account on this device — leave it blank to save without a password. You will need it to unlock saved accounts later.', + setPasswordDesc: 'Encrypts this account on this device. Leave it blank to save without a password. You will need it to unlock saved accounts later.', passwordOptional: 'Password (optional)', changePassword: 'Change password', changePasswordDesc: 'Re-encrypt your saved-to-device accounts with a new password. Leave the new password blank to remove it.', @@ -146,10 +146,10 @@ const STR = { seedPlaceholder: 'enter your seed words separated by spaces', passphrase: 'Passphrase', passWhatsThis: 'What’s this?', - passInfo: 'An optional 13th word: if someone gets hold of your 12 seed words, they still can’t open your wallet without this one. It’s not a login password and it doesn’t encrypt anything — each passphrase opens its own separate wallet, so to recover your funds you’ll need your seed words and this passphrase, exactly as written.', + passInfo: 'An optional 13th word: if someone gets hold of your 12 seed words, they still can’t open your wallet without this one. It’s not a login password and it doesn’t encrypt anything: each passphrase opens its own separate wallet, so to recover your funds you’ll need your seed words and this passphrase, exactly as written.', show: 'Show', hide: 'Hide', - invalidSeed: 'Invalid seed phrase — check the spelling and word order.', + invalidSeed: 'Invalid seed phrase. Check the spelling and word order.', importLabel: 'Recovery phrase or key', importPlaceholder: 'Your seed words, or an xpub / xprv', invalidImport: 'That is not a valid recovery phrase, xpub, or xprv.', @@ -159,15 +159,15 @@ const STR = { howItWorks: 'How it works', installApp: 'Install app', hiwBasicsTitle: 'The basics', - hiwBasics1: 'When you make a wallet, the page generates twelve random words — the keys to your coins. Anyone who has them can spend; if you lose them, the coins are gone for good. Write them down on paper before you put money in.', - hiwBasics2: 'Your keys never leave your device. Coinos runs servers that ferry payments and messages, but they can’t touch your money. The app itself is one page — you can save it and open it offline.', + hiwBasics1: 'When you make a wallet, the page generates twelve random words: the keys to your coins. Anyone who has them can spend; if you lose them, the coins are gone for good. Write them down on paper before you put money in.', + hiwBasics2: 'Your keys never leave your device. Coinos runs servers that ferry payments and messages, but they can’t touch your money. The app itself is one page. You can save it and open it offline.', hiwBasics3: 'It uses standard Bitcoin formats: the same twelve words restore your Savings in Sparrow, Electrum, or any other standard wallet, even if this site disappears.', hiwLnTitle: 'Spending and Savings', - hiwLn1: 'Your money can sit in two accounts. Savings is ordinary Bitcoin on the blockchain — safest for money you’re keeping, but each move costs a mining fee and waits for a confirmation. Spending sends and arrives instantly, free or nearly free, and is still only yours: it runs on Ark, a newer layer on top of Bitcoin where every coin stays locked to your key, and it speaks Lightning, so you can pay and be paid by any bitcoin app or shop.', + hiwLn1: 'Your money can sit in two accounts. Savings is ordinary Bitcoin on the blockchain: safest for money you’re keeping, but each move costs a mining fee and waits for a confirmation. Spending sends and arrives instantly, free or nearly free, and is still only yours: it runs on Ark, a newer layer on top of Bitcoin where every coin stays locked to your key, and it speaks Lightning, so you can pay and be paid by any bitcoin app or shop.', hiwGiftsTitle: 'Gifts', - hiwGifts1: 'You can gift bitcoin with a link: whoever opens it claims the coins into their own wallet — no app, no signup, works even for someone brand new to bitcoin. Until a gift is claimed, you can cancel it and take the coins back.', + hiwGifts1: 'You can gift bitcoin with a link: whoever opens it claims the coins into their own wallet, with no app and no signup, and it works even for someone brand new to bitcoin. Until a gift is claimed, you can cancel it and take the coins back.', hiwStandaloneTitle: 'Keep a copy', - hiwStandalone1: 'The whole wallet fits in one file. Download it, keep it on a hard drive or USB stick, and open it in any browser — it runs from there with no server and no install, and your twelve words bring your money with you.', + hiwStandalone1: 'The whole wallet fits in one file. Download it, keep it on a hard drive or USB stick, and open it in any browser. It runs from there with no server and no install, and your twelve words bring your money with you.', hiwStandaloneLink: 'Download the standalone wallet', moveMoney: 'Move money', moveToSpending: 'Into Spending', @@ -187,7 +187,7 @@ const STR = { tabSettings: 'Settings', tabMessages: 'Chat', msgSend: 'Send', - msgEmpty: 'No messages yet — say hi!', + msgEmpty: 'No messages yet. Say hi!', msgPlaceholder: 'Message #{channel}', msgPlaceholderPlain: 'Message…', msgMembers: '{n} members', @@ -198,7 +198,7 @@ const STR = { msgAttachFailed: 'Attachment unavailable', msgAttach: 'Attach a picture', msgAttachTooBig: 'That file is too big (20 MB max)', - msgUploadFailed: 'Upload failed — try again', + msgUploadFailed: 'Upload failed. Try again', msgPhoto: 'Photo', searchPeopleFor: 'Search people for {q}', msgEmojiSearch: 'Search emoji…', @@ -251,7 +251,7 @@ const STR = { posDesc: 'Charge a customer a set amount, with an optional tip prompt. Bills and tips are counted separately.', posOpen: 'Open', posEnterAmount: 'Enter an amount first', - posNeedsSpending: 'Point of sale takes Lightning into Spending — connect first', + posNeedsSpending: 'Point of sale takes Lightning into Spending. Connect first', posNoteHint: 'Note (optional)', posCharge: 'Charge', posAskTip: 'Ask the customer for a tip', @@ -287,7 +287,7 @@ const STR = { linkHandlerDesc: 'Make this app the one your browser opens for nostr links (what njump calls "Your default web app") and bitcoin: links.', linkHandlerNostr: 'nostr links', linkHandlerBitcoin: 'bitcoin: links', - linkHandlerAsked: 'Your browser is asking — allow it to finish', + linkHandlerAsked: 'Your browser is asking. Allow it to finish', linkHandlerRefused: 'Your browser would not register this here', feedAddPack: 'Search packs, or paste a following.space link…', feedPacksHelp: 'A pack is a list someone curates. Its members are read live, so the feed follows the list as it changes.', @@ -338,7 +338,7 @@ const STR = { postMore: 'More', postMute: 'Mute', postUnmute: 'Unmute', - postMuted: 'Muted — their posts are hidden', + postMuted: 'Muted. Their posts are hidden', postUnmuted: 'Unmuted', postBlock: 'Block and unfollow', postMuteThread: 'Mute this thread', @@ -358,7 +358,7 @@ const STR = { foldReportedN: 'Reported by {n} people you follow', foldShow: 'Show', quoteHidden: 'Hidden post', - profMutedBanner: 'Muted — their posts are hidden everywhere else', + profMutedBanner: 'Muted. Their posts are hidden everywhere else', modTitle: 'Muted and hidden', modDesc: 'Your mute list (NIP-51) follows you to other nostr apps, and theirs applies here.', modPeople: 'Muted people', @@ -380,12 +380,12 @@ const STR = { profPostBtn: 'Post', profPosted: 'Posted', publicChatTitle: '{name} community', - publicChatDesc: 'Live chat — read along, sign in to join the conversation', + publicChatDesc: 'Live chat: read along, sign in to join the conversation', publicChatSignIn: 'Sign in to chat', publicChatOpenApp: 'Open coinos', publicChatLoading: 'Loading messages…', msgDelete: 'Delete message', - msgNoIdentity: "Your nostr signer isn't connected — reconnect it to send as yourself", + msgNoIdentity: "Your nostr signer isn't connected. Reconnect it to send as yourself", msgSendFailed: 'No relay accepted the message', msgLockedChat: 'Your wallet is locked, so it can’t sign messages.', noteRefLink: 'view note', @@ -399,33 +399,33 @@ const STR = { msgNoDms: 'No conversations yet.', msgShowAllDms: 'Show all {n} conversations', msgShowFewerDms: 'Show fewer', - msgNoDmsYet: 'No messages yet — say hi!', + msgNoDmsYet: 'No messages yet. Say hi!', msgDmPlaceholder: 'Message', msgDmEncrypted: 'Private message · end-to-end encrypted', msgYouPrefix: 'You:', msgOpen: 'Open', msgNpubPlaceholder: 'npub…', msgSearchPlaceholder: 'Name or npub…', - zapNoBalance: "There's not enough in Spending to send a zap — move some money into Spending first.", + zapNoBalance: "There's not enough in Spending to send a zap. Move some money into Spending first.", zapBoardBtn: 'Move sats into Spending', onbBoardTitle: 'Top up Spending', - onbBoardBody: 'Move some sats from Savings into Spending — payments there are instant, with no mining fees.', + onbBoardBody: 'Move some sats from Savings into Spending. Payments there are instant, with no mining fees.', topUpFromSavings: 'Top up from Savings', arkRenewedHistory: 'Renewed', arkDepthNotice: 'Unilateral exit costs about {fee} sats.', arkDepthFree: 'free', arkDepthBtn: 'Manage', - arkExpiredNotice: '{amount} has passed its expiry. The server can still renew it — until then it can\u2019t be spent or exited.', + arkExpiredNotice: '{amount} has passed its expiry. The server can still renew it. Until then it can\u2019t be spent or exited.', arkDepthRenewed: 'Renewal requested', arkDepthRenewBtn: 'Renew now', arkCoinsTitle: 'Spending coins', - arkCoinsIntro: 'Your Spending balance lives in {n} coins totalling {total}. Each can be pulled on-chain without the server’s help — at a cost that grows with the coin’s history.', - arkCoinsIntroOne: 'Your Spending balance lives in a single coin of {total}. It can be pulled on-chain without the server’s help — at a cost that grows with the coin’s history.', + arkCoinsIntro: 'Your Spending balance lives in {n} coins totalling {total}. Each can be pulled on-chain without the server’s help, at a cost that grows with the coin’s history.', + arkCoinsIntroOne: 'Your Spending balance lives in a single coin of {total}. It can be pulled on-chain without the server’s help, at a cost that grows with the coin’s history.', arkCoinsColAmount: 'Amount', arkCoinsColExpiry: 'Expiry', arkCoinsColExit: 'Exit cost', arkCoinsColRenew: 'Renewal', - arkCoinsChipRenewTitle: 'This coin’s share of the renewal fee — the fee is priced on all the coins together and rounded up once, so tiny shares add almost nothing', + arkCoinsChipRenewTitle: 'This coin’s share of the renewal fee. The fee is priced on all the coins together and rounded up once, so tiny shares add almost nothing', arkCoinsChipRenewTiny: '< 1 sat', arkCoinsChipExpTitle: 'Time until this coin needs renewal', arkCoinsChipExitTitle: 'What pulling this coin on-chain by itself would cost', @@ -433,11 +433,11 @@ const STR = { arkFeeService: 'Service fee', arkCoinsExpired: 'expired', arkCoinsRenewing: 'renewing', - arkCoinsIntroRenewing: 'Your Spending balance of {total} is being renewed: the coins below are in a round and come back as one fresh coin. Each can be pulled on-chain without the server’s help — at a cost that grows with the coin’s history.', + arkCoinsIntroRenewing: 'Your Spending balance of {total} is being renewed: the coins below are in a round and come back as one fresh coin. Each can be pulled on-chain without the server’s help, at a cost that grows with the coin’s history.', arkRenewingTitle: 'Renewal in progress', arkRenewingLine: '{amount} sats → one fresh coin{fee}', arkRenewingFee: ', fee {fee} sats', - arkRenewStageQueued: 'Joining the next round — the wallet submits it on its next sync.', + arkRenewStageQueued: 'Joining the next round. The wallet submits it on its next sync.', arkRenewStageRound: 'In a round. The fresh coin arrives once the round’s transaction has a confirmation, about a block from now, the next time this wallet syncs.', arkRenewStageFinishing: 'Finishing: signing the fresh coin.', arkRenewStageRetry: 'The last check with the server didn’t go through; the wallet keeps trying.', @@ -446,16 +446,16 @@ const STR = { arkCoinsExitTitle: 'Unilateral exit', arkCoinsExitBtn: 'Exit now', arkExitConfirmTitle: 'Start a unilateral exit?', - arkExitConfirmBody: 'This brings your Spending coins to Savings on-chain without the server, by publishing each coin’s transaction history. Nothing needs the server’s cooperation — that is the point — but it is slow and it costs mining fees.', + arkExitConfirmBody: 'This brings your Spending coins to Savings on-chain without the server, by publishing each coin’s transaction history. Nothing needs the server’s cooperation (that is the point), but it is slow and it costs mining fees.', arkExitConfirmCoins: 'Coins', arkExitConfirmAmount: 'Amount', arkExitConfirmFee: 'Mining fees (about, paid from Savings)', arkExitConfirmSavings: 'Savings available for fees', - arkExitConfirmWait: 'The funds arrive in Savings only once each coin’s timelock has run out — hours to days. An exit can’t be stopped once it has started.', + arkExitConfirmWait: 'The funds arrive in Savings only once each coin’s timelock has run out, hours to days. An exit can’t be stopped once it has started.', arkExitConfirmGo: 'Start the exit', arkCoinsExitDesc: 'If the server vanished today, publishing every transaction in each coin’s history would cost about {fee} sats in mining fees. After a renewal it would be one fresh coin, one hop: about {after} sats.', arkCoinsRenewTitle: 'Renewal', - arkCoinsRenewDesc: 'Your wallet renews coins automatically once they are close to expiring and renewal is free. Renewing early is an option if you would rather pay a small fee now to keep your exit cost low should the coinos server ever stop responding when you want to bring your funds on-chain. A renewal replaces your coins with a single fresh one in the next round ({every}), which flattens their history. The fee depends on how close the coin is to expiry — the closer, the cheaper:', + arkCoinsRenewDesc: 'Your wallet renews coins automatically once they are close to expiring and renewal is free. Renewing early is an option if you would rather pay a small fee now to keep your exit cost low should the coinos server ever stop responding when you want to bring your funds on-chain. A renewal replaces your coins with a single fresh one in the next round ({every}), which flattens their history. The fee depends on how close the coin is to expiry. The closer, the cheaper:', arkCoinsRoundEvery: 'rounds run every {n} minutes', arkCoinsRoundEveryOne: 'rounds run every minute', arkCoinsRenewNowFee: 'Renew now for {fee}', @@ -469,15 +469,15 @@ const STR = { arkCoinsSchedOver: 'more than {span} left', arkCoinsSchedBetween: '{a} to {b} left', arkCoinsSchedFinal: 'less than {span} left', - arkUniUneconomical: 'A trustless on-chain exit would cost about {fee} sats in mining fees — more than the {n} sats it would move, so it isn’t offered. For a balance this size, send it out over Lightning instead: no mining fees at all.', - arkUniFallbackBody: 'The server didn’t cooperate, but your money can still move without it: your whole Spending balance exits to Savings on-chain. It takes about a day, and roughly {fee} sats of mining fees will be paid from Savings. Funds land in Savings — send them on from there once it completes.', - arkUniFallbackShort: 'Savings holds {have} sats — about {need} sats are needed for the mining fees. Top up Savings first.', + arkUniUneconomical: 'A trustless on-chain exit would cost about {fee} sats in mining fees, more than the {n} sats it would move, so it isn’t offered. For a balance this size, send it out over Lightning instead: no mining fees at all.', + arkUniFallbackBody: 'The server didn’t cooperate, but your money can still move without it: your whole Spending balance exits to Savings on-chain. It takes about a day, and roughly {fee} sats of mining fees will be paid from Savings. Funds land in Savings. Send them on from there once it completes.', + arkUniFallbackShort: 'Savings holds {have} sats. About {need} sats are needed for the mining fees. Top up Savings first.', arkUniFallbackBtn: 'Exit to Savings ({fee} sats in fees)', msgPushOffer: 'Get notified when you receive payments and messages, even with coinos closed.', msgPushEnable: 'Enable notifications', msgPushOn: 'Notifications on', - msgNotifyOn: 'Notifications on for this community — tap to mute', - msgNotifyOff: 'Muted — tap to be notified about this community', + msgNotifyOn: 'Notifications on for this community. Tap to mute', + msgNotifyOff: 'Muted. Tap to be notified about this community', msgOnline: 'online', msgNOnline: '{n} online', msgSeenJustNow: 'last seen just now', @@ -531,7 +531,7 @@ const STR = { msgSearching: 'Searching…', msgNoMatches: 'No matches', msgBadNpub: 'Not a valid npub', - msgSignerNoDm: 'This signer cannot encrypt DMs — log in again', + msgSignerNoDm: 'This signer cannot encrypt DMs. Log in again', msgJoin: 'Join', msgCreate: 'Create', msgInvitePlaceholder: 'Paste an invite link, or search', @@ -545,7 +545,7 @@ const STR = { msgInviteLoading: 'Fetching invite…', msgInviteNotFound: 'Invite not found on its relays', syncStorageTitle: 'Sync storage', - syncStorageHow: 'Wallet state too large for a relay event is encrypted and stored as a blob on these Blossom servers (one per line). Any Blossom server works — run your own or use another provider.', + syncStorageHow: 'Wallet state too large for a relay event is encrypted and stored as a blob on these Blossom servers (one per line). Any Blossom server works. Run your own or use another provider.', syncStorageSave: 'Save servers', syncStorageReset: 'Use default', syncStorageSaved: 'Sync storage servers saved', @@ -570,11 +570,11 @@ const STR = { settingsNetwork: 'Network', advancedSettings: 'Advanced', recoveryDesc: 'The twelve words that back up this wallet. Anyone who sees them can steal your funds.', - receiveOfflineSpending: "You're offline — your payment address needs the network. You can still receive to Savings with an on-chain address.", + receiveOfflineSpending: "You're offline. Your payment address needs the network. You can still receive to Savings with an on-chain address.", receiveUseSavings: 'Switch to Savings', arkOffboardAmtPlaceholder: 'Amount', - arkSplitting: 'Carving out that exact amount — this can take a minute…', - arkSplitTimeout: 'The split is taking longer than expected — your balance is intact; try again shortly.', + arkSplitting: 'Carving out that exact amount. This can take a minute…', + arkSplitTimeout: 'The split is taking longer than expected. Your balance is intact, so try again shortly.', copyAddress: 'Copy address', paymentReceived: 'Payment received!', tapToProceed: 'Tap anywhere to proceed', @@ -616,9 +616,9 @@ const STR = { bumpConfirm: 'Replace with a higher fee?', replaceTx: 'Replace', bumpInsufficient: 'Not enough funds to bump at this rate. Try a lower rate.', - scanOffline: 'You’re offline — reconnect to broadcast this transaction.', + scanOffline: 'You’re offline. Reconnect to broadcast this transaction.', broadcastFailed: 'Broadcast failed: {msg}', - broadcastTimeout: 'Timed out reaching the network. The payment was not sent — try again.', + broadcastTimeout: 'Timed out reaching the network. The payment was not sent. Try again.', signingFailed: 'Signing failed: {msg}', done: 'Done', txSignedNote: 'Signed, but not sent yet. To actually send it, broadcast the code below from any online device (e.g. mempool.space → Broadcast). It will not send on its own.', @@ -636,7 +636,7 @@ const STR = { sent: 'Sent', pendingTag: '⏳ pending', stuckTag: '⚠ stuck', - stuckNote: 'Fee too low — may not confirm', + stuckNote: 'Fee too low, may not confirm', stuckIncomingNote: '⚠ This payment’s fee is below the current network floor, so it may not confirm. Only the sender can speed it up (bump or re-send).', stuckOutgoingNote: '⚠ This transaction’s fee is below the current network floor, so it may not confirm on its own. Bump the fee below to rebroadcast it at a higher rate.', awaitingConfirmation: 'awaiting confirmation', @@ -661,14 +661,14 @@ const STR = { giftMinNote: 'Minimum {n}.', giftAllNote: 'Gifts your whole balance; the recipient pays the claim fee.', giftExceedsBalance: 'That’s more than your balance.', - giftSettling: '{n} of your balance is still settling — try again in a moment.', + giftSettling: '{n} of your balance is still settling. Try again in a moment.', giftNeedsHeadroom: 'Gift up to {n}, or tap Max to gift your whole balance.', giftAnother: 'Create another', giftForYou: 'A gift for you', claimGift: 'Claim', dismiss: 'Dismiss', giftCopyCode: 'Copy claim code', - giftQrTooLong: 'Too large for a QR code — share the link below instead.', + giftQrTooLong: 'Too large for a QR code. Share the link below instead.', giftConsolidateExplain: 'This gift would bundle {count} coins, making it costly for the recipient to claim. Splitting one coin first (~{fee}) gives them a clean single-input gift.', giftConsolidateFirst: 'Split into one coin first', giftUseManyCoins: 'Use {count} coins anyway', @@ -748,7 +748,7 @@ const STR = { walletSettings: 'Account settings', walletSettingsDesc: 'Name, recovery phrase, public key, and auto-logout for this account.', autolockTitle: 'Log out automatically', - autolockDesc: "After the app has been in the background this long, log this wallet out — it's removed from this device (including from Save to device), so keep its recovery phrase. Other accounts aren't affected. The timer never runs while the app is open and focused.", + autolockDesc: "After the app has been in the background this long, log this wallet out. It's removed from this device (including from Save to device), so keep its recovery phrase. Other accounts aren't affected. The timer never runs while the app is open and focused.", autolockNever: 'Never', autolock1m: 'After 1 minute', autolock5m: 'After 5 minutes', @@ -766,27 +766,27 @@ const STR = { electrumUrlHint: 'A WebSocket Electrum server, e.g. wss://your-node:50004', sourceUrl: 'Server URL', sourceUrlHint: 'wss:// for an Electrum server, or an Esplora REST base (https://…/api). The type is detected from the URL.', - detectedElectrum: 'Electrum — data + instant payment notifications.', - detectedEsplora: 'Block explorer (Esplora) — data only; polls for payments.', + detectedElectrum: 'Electrum: data + instant payment notifications.', + detectedEsplora: 'Block explorer (Esplora): data only; polls for payments.', silentPaymentNote: 'Silent payment', receiveAddressTab: 'Savings', receiveLnTab: 'Lightning', - arkReceiveIntro: 'Receive instantly and free — straight into Spending.', + arkReceiveIntro: 'Receive instantly and free, straight into Spending.', arkTitle: 'Spending balance', - arkDesc: 'Your Spending balance sends and receives instantly with no mining fees, and stays yours — you can move it back to Savings whenever you like.', + arkDesc: 'Your Spending balance sends and receives instantly with no mining fees, and stays yours. You can move it back to Savings whenever you like.', arkServerUrl: 'Server URL', arkEsploraUrl: 'Esplora URL (chain source)', - arkWatchOnly: 'Spending needs the wallet keys — load the seed to use it.', + arkWatchOnly: 'Spending needs the wallet keys. Load the seed to use it.', arkConnecting: 'Connecting…', arkConnectBtn: 'Connect', - arkNotConnected: 'Not connected — pick a server in Settings.', + arkNotConnected: 'Not connected. Pick a server in Settings.', arkBalance: 'Spending', arkBoarding: 'Moving…', arkBoardHistory: 'Moved to Spending', arkVtxos: 'Coins (VTXOs)', arkPendingActions: '{n} operation(s) in progress', arkBoardBtn: 'Move to Spending', - arkBoardFeeNote: 'Fee {fee} sats — {net} sats will arrive in Spending.', + arkBoardFeeNote: 'Fee {fee} sats. {net} sats will arrive in Spending.', arkBoardFeeLabel: 'Fee', arkBoardedTitle: 'On its way!', arkBoardedNote: 'Ready to spend after {n} confirmations.', @@ -798,8 +798,8 @@ const STR = { arkOffboardBtn: 'Move {n} to Savings', giftSourceChain: 'On-chain', giftSourceArk: 'Spending', - giftArkNote: 'Sent from Spending — the link claims instantly, with no fee.', - arkRenewWarn: 'Your Spending balance ({amount}) is too small to renew itself and will expire around {date}. Receiving any amount — or spending it — keeps it alive.', + giftArkNote: 'Sent from Spending. The link claims instantly, with no fee.', + arkRenewWarn: 'Your Spending balance ({amount}) is too small to renew itself and will expire around {date}. Receiving any amount, or spending it, keeps it alive.', arkRenewForecast: 'Coins renew in ~{when} for {fee}.', arkRenewForecastNow: 'Coins renew shortly for {fee}.', arkBoardStuck: 'Moving money hit a snag and will keep retrying: {error}', @@ -807,21 +807,21 @@ const STR = { giftArkOutstanding: '{n} unclaimed instant gift(s)', giftArkRevoked: 'Gift swept back into Spending.', claimArkFree: 'instant, no fee', - arkGiftWrongNet: 'This gift lives on {net} — switch the network in Settings, then open the link again.', + arkGiftWrongNet: 'This gift lives on {net}. Switch the network in Settings, then open the link again.', arkOffboardedTitle: 'On its way!', arkOffboardedNote: 'Arrives in Savings after 1 confirmation.', arkOffboarded: 'Moved to Savings', arkOffboardHistory: 'Moved to Savings', arkExitBtn: 'Move to Savings without the server', - arkExitStarted: 'Unilateral exit started for {n} coin(s) — broadcasting the exit chain.', + arkExitStarted: 'Unilateral exit started for {n} coin(s). Broadcasting the exit chain.', arkExitNoFeeCoin: 'Paused: the next step needs about {need} sats in Savings for its mining fee. Top up Savings and it resumes by itself.', arkExitFeeShort: 'Savings can’t cover the exit’s mining fees (about {need} sats needed, {have} available). Top up Savings first.', preimageLabel: 'Preimage', copyPreimage: 'Copy preimage', - arkExitSummary: 'Moving {n} sats to Savings on-chain — about {eta} until it lands.', + arkExitSummary: 'Moving {n} sats to Savings on-chain, about {eta} until it lands.', arkExitViewTx: 'View on block explorer', arkExitSoon: 'soon', - arkExitRetrying: 'hit a snag — retrying automatically', + arkExitRetrying: 'hit a snag, retrying automatically', arkExitCancel: 'Cancel this exit', arkExitLink: 'Move to Savings', arkExitPageTitle: 'Move money to Savings', @@ -833,12 +833,12 @@ const STR = { arkExitNoBalance: 'Nothing in Spending to move.', arkExitingHistory: 'Moving to Savings', arkExitPendingTag: 'in progress', - arkNoSpendableMidExit: 'No spendable balance — your coins are on their way to Savings in an on-chain exit.', - arkExitInFlightLink: 'Exit in progress ({n} sats) — view details', + arkNoSpendableMidExit: 'No spendable balance. Your coins are on their way to Savings in an on-chain exit.', + arkExitInFlightLink: 'Exit in progress ({n} sats). View details', arkExitCoopHeld: 'Your balance is in the unilateral exit below. While that exit hasn’t touched the chain yet, cancelling it frees the coins for a cooperative move.', arkZapTitle: 'Send a zap', awTitle: 'Auto-withdraw', - awDesc: 'When Spending goes over an amount you choose, send it onward automatically — to an address, a payment name, a lightning address, or an npub.', + awDesc: 'When Spending goes over an amount you choose, send it onward automatically: to an address, a payment name, a lightning address, or an npub.', awDest: 'Send to', awDestPh: 'name@domain, npub, bc1…, ark1…', awThreshold: 'When Spending reaches (sats)', @@ -857,19 +857,19 @@ const STR = { zapTitle: 'Send a zap', zapFinding: 'Finding the best way to pay them…', arkZapLookup: 'Looking them up…', - arkZapNoArk: 'No way to pay this account was found — no Ark address, Lightning address, or payment record.', + arkZapNoArk: 'No way to pay this account was found: no Ark address, Lightning address, or payment record.', arkZapHint: 'Instant and free, with a zap receipt on nostr.', arkZapCommentPh: 'Comment (optional)', arkZapBtn: 'Zap', arkZapSentTitle: 'Zapped!', - arkZapNoArkGift: 'They haven’t set up an Ark address yet — send the zap as an Ark gift locked to their nostr key instead. They’ll get a DM with the claim link, and only they can open it.', + arkZapNoArkGift: 'They haven’t set up an Ark address yet. Send the zap as an Ark gift locked to their nostr key instead. They’ll get a DM with the claim link, and only they can open it.', arkZapGiftBtn: 'Send locked gift', arkZapGiftHint: 'Instant Ark gift only their nostr key can claim. You can revoke it from the gift card while unclaimed.', arkZapGiftSentTitle: 'Gift sent!', giftDmText: '🎁 Someone sent you {amount} on coinos! Claim it here: {link}\nIf you’re asked for a claim code, use: {code}', giftDmSending: 'Sending them the claim link by DM…', giftDmSent: 'Claim link sent to them by DM ✓', - giftDmFailed: 'Couldn’t reach them by DM — copy the link and claim code and pass them along yourself.', + giftDmFailed: 'Couldn’t reach them by DM. Copy the link and claim code and pass them along yourself.', giftLockedTo: 'Locked to', giftCodeHint: 'Enter the claim code from your DM to unlock this gift.', claimCodePlaceholder: 'Claim code', @@ -887,11 +887,11 @@ const STR = { arkOpsLnRecv: '{n} Lightning invoice(s) outstanding', arkLnPayVia: 'Instant, from your Spending balance', arkServerTitle: 'Ark server', - arkServerDesc: 'Spending runs on an Ark server. coinos runs one; Second runs another; or point at your own. Coins are held per server — switch back any time to reach what a server holds.', + arkServerDesc: 'Spending runs on an Ark server. coinos runs one; Second runs another; or point at your own. Coins are held per server. Switch back any time to reach what a server holds.', arkServerCustomUrl: 'Ark server URL (https://…)', arkServerCustomEsplora: 'Esplora API URL for that server', arkServerCustomNeeded: 'Enter both the Ark server and its Esplora URL first', - arkServerSwitchWarn: '{amount} sats are held with the current server. They stay there — switch back to reach them — but they can’t be spent from the new one. To move them, send or exit them first.', + arkServerSwitchWarn: '{amount} sats are held with the current server. They stay there (switch back to reach them) but can’t be spent from the new one. To move them, send or exit them first.', arkServerSwitchGo: 'Switch server', arkCmpShow: 'Compare the servers', arkCmpHide: 'Hide the comparison', @@ -915,18 +915,18 @@ const STR = { arkCmpNote: 'Fees graded by expiry cost more the earlier a coin is renewed or exited. Figures come from each server’s own published info, read just now. Either server pays Lightning invoices and takes Lightning payments to your coinos name.', arkServerSwitched: 'Ark server switched', arkOtherServerReceipt: '{amount} sats arrived with {server}. Switch to that server in Settings → Advanced to spend them.', - arkForeignBip21: 'Their Ark address is on a different Ark server — paying the on-chain address instead.', - arkForeignServer: 'That Ark address belongs to a different Ark server, so it can’t be paid from here directly. Ask for a Lightning invoice, or pay their coinos name or npub — those fall back to Lightning by themselves.', + arkForeignBip21: 'Their Ark address is on a different Ark server, so the on-chain address is paid instead.', + arkForeignServer: 'That Ark address belongs to a different Ark server, so it can’t be paid from here directly. Ask for a Lightning invoice, or pay their coinos name or npub. Those fall back to Lightning by themselves.', arkLnFromSavingsTitle: 'Lightning pays from Spending', arkLnFromSavingsBody: 'Lightning payments leave your Spending balance, not Savings. Spending holds {have}.', - arkLnFromSavingsShort: 'Spending can’t cover this one. Move funds over from Savings first — that takes an on-chain confirmation, so ask for a fresh invoice afterwards.', + arkLnFromSavingsShort: 'Spending can’t cover this one. Move funds over from Savings first. That takes an on-chain confirmation, so ask for a fresh invoice afterwards.', arkLnUseSpending: 'Switch to Spending and continue', arkLnMoveFirst: 'Move Savings into Spending first', arkLnFee: 'Fee', arkLnPaying: 'Paying invoice…', - arkLnRetrying: 'Route failed — retrying with a bigger fee budget ({n}/{of})…', + arkLnRetrying: 'Route failed. Retrying with a bigger fee budget ({n}/{of})…', arkLnPayFailed: 'Payment failed', - arkLnRefunded: 'Payment failed — your money is back in Spending.', + arkLnRefunded: 'Payment failed. Your money is back in Spending.', arkLnPaidTitle: 'Paid!', or: 'or', nlSignIn: 'Sign in', @@ -939,7 +939,7 @@ const STR = { composePreviewTag: 'Preview', composePreviewEmpty: 'Nothing to preview yet.', onbWelcomeTitle: 'Welcome to coinos', - onbWelcomeBody: 'Bitcoin you actually hold. Your wallet is twelve words — nobody else ever has them, and they work in any wallet, anywhere.', + onbWelcomeBody: 'Bitcoin you actually hold. Your wallet is twelve words. Nobody else ever has them, and they work in any wallet, anywhere.', onbStart: 'Create a new wallet', onbStartHint: "Takes a minute: write down twelve words and it's yours", onbOrSignIn: 'or', @@ -947,7 +947,7 @@ const STR = { nlGooglePrev: 'Signed in with Google here before? Use the previous sign-in server', onbCreateInstead: 'Create a new wallet instead', onbBackupTitle: 'Write down your recovery phrase', - onbBackupBody: "Signing in was the easy part — but the sign-in isn't your wallet. These twelve words are. They're the only way back in if you lose access to that account, and nobody can reissue them for you.", + onbBackupBody: "Signing in was the easy part, but the sign-in isn't your wallet. These twelve words are. They're the only way back in if you lose access to that account, and nobody can reissue them for you.", onbBackupDone: "I've written it down", onbBackupLater: 'Later', backupReminder: 'Your recovery phrase is still unwritten.', @@ -955,27 +955,27 @@ const STR = { onbSeedTitle: 'Set up your wallet', onbSigninTitle: 'Sign in', onbLegacyTitle: 'Move your coinos.io account', - onbLegacyBody: 'The original coinos. We can move your balance over and point your username here — your old account keeps working, it just stops receiving payments.', + onbLegacyBody: 'The original coinos. We can move your balance over and point your username here. Your old account keeps working, it just stops receiving payments.', onbLegacyGo: 'Move my coinos.io account', - onbLegacyNoAddr: "Your payment address isn't ready yet — try again in a moment.", - onbLegacyDone: "I'm done — continue", + onbLegacyNoAddr: "Your payment address isn't ready yet. Try again in a moment.", + onbLegacyDone: "I'm done, continue", onbHaveCoinos: 'Migrate an existing coinos account', - migrateClaimed: 'Welcome back — {name} is yours here now.', + migrateClaimed: 'Welcome back. {name} is yours here now.', migrateClaimFailed: "Your balance moved, but {name} isn't free yet. Try claiming it in a minute.", migrateWorking: 'Claiming {name}…', onbSpendTitle: 'Set up a spending account', - onbSpendBody: 'Claim a username and get your own payment address — people can send you bitcoin instantly, with just your name.', + onbSpendBody: 'Claim a username and get your own payment address. People can send you bitcoin instantly, with just your name.', onbNameWait: 'Getting things ready…', onbNotNow: 'Not now', onbAvatarTitle: 'Choose your look', onbAvatarBody: 'Pick a punk or upload your own picture. You can change it anytime.', onbUpload: 'Upload a photo', - onbUploadFailed: 'Upload failed — try a punk for now', - onbProfileSkipped: 'Couldn’t publish your profile — set it later from Edit profile', + onbUploadFailed: 'Upload failed. Try a punk for now', + onbProfileSkipped: 'Couldn’t publish your profile. Set it later from Edit profile', onbContinue: 'Continue', onbSkipAvatar: 'Continue with my default', onbDoneTitle: "You're all set!", - onbDoneBody: 'Your spending account is set up — your address is live and the coinos community chat is waiting for you.', + onbDoneBody: 'Your spending account is set up. Your address is live and the coinos community chat is waiting for you.', onbEnter: 'Enter coinos', spendSetup: 'Set up a spending account', nlConnectApp: '📱 Connect a signer app', @@ -983,7 +983,7 @@ const STR = { nlWaitingSigner: 'Waiting for your signer to connect…', nlTitle: 'Log in with Nostr', nlSignInNostr: 'Sign in with Nostr', - nlDesc: 'Use your Nostr account to open your wallet — on any device, with the same account.', + nlDesc: 'Use your Nostr account to open your wallet, on any device, with the same account.', nlExtension: 'Use browser extension', nlAmber: 'Sign in with Amber (Android)', nlAmberWait: 'Waiting for your signer app… approve there, then come back here.', @@ -1000,20 +1000,20 @@ const STR = { nlUnrecognized: 'That doesn’t look like a private key or a bunker:// address.', nlNewTitle: 'Create a wallet for this account', nlNewDesc: 'This Nostr account has no wallet yet. We’ll make one and save it, encrypted to your account, so you can open it anywhere you use this account.', - nlBackupWarning: 'Your wallet will be recoverable by anyone who controls this Nostr account — treat that account like a key to your money.', + nlBackupWarning: 'Your wallet will be recoverable by anyone who controls this Nostr account. Treat that account like a key to your money.', nlCreateBtn: 'Create my wallet', nlLinkTitle: 'Nostr account', - nlLinkDesc: 'Log in with your own Nostr account instead — chat and your payment address will use its identity, and logging in with it on another device opens this wallet.', - nlBuiltinDesc: 'This wallet has a built-in Nostr account, derived from its seed. Chat and your payment address already use it — you don’t need to link anything.', + nlLinkDesc: 'Log in with your own Nostr account instead. Chat and your payment address will use its identity, and logging in with it on another device opens this wallet.', + nlBuiltinDesc: 'This wallet has a built-in Nostr account, derived from its seed. Chat and your payment address already use it. You don’t need to link anything.', nlExportBtn: 'Export Nostr key', - nlExportWarn: 'This key opens this wallet. Anyone who has it can spend your money, read your chats, and change your payment address — guard it like your recovery phrase.', + nlExportWarn: 'This key opens this wallet. Anyone who has it can spend your money, read your chats, and change your payment address. Guard it like your recovery phrase.', nlExportReveal: 'Show the key', nlExportedNote: 'Logging in with Nostr using this key opens this wallet.', nlChangeBtn: 'Use a different Nostr account', nlLinkedDesc: 'This wallet opens when you log in with this Nostr account.', nlConnected: 'connected', nlDisconnected: 'not connected', - nlReconnectDesc: "Your signer isn't connected, so this app can't sign as you. Reconnect it to post and update your profile — your wallet and balance aren't affected.", + nlReconnectDesc: "Your signer isn't connected, so this app can't sign as you. Reconnect it to post and update your profile. Your wallet and balance aren't affected.", nlReconnectTitle: 'Reconnect your signer', nlReconnectBody: 'Your Nostr signer isn’t connected on this device. Reconnect to keep acting as {npub}…', nlWrongAccount: 'That signer is a different Nostr account. Reconnect with {npub}.', @@ -1038,7 +1038,7 @@ const STR = { namesPosLinkHow: 'What the terminal broadcasts over NFC. Any lightning wallet that scans it pays the sale the terminal just rang up, or asks for an amount. Print it as a sticker if you like.', namesPosCopyLnurl: 'Copy LNURL', namesPosCopyLink: 'Copy link', - namesDesc: 'Claim your payment address — like [email protected]. People can pay you just by typing it, no codes to copy or QR to scan.', + namesDesc: 'Claim your payment address, like [email protected]. People can pay you just by typing it, no codes to copy or QR to scan.', namesPlaceholder: 'username', namesResolving: 'Looking up {name}…', namesSendTo: 'Send to {name}', @@ -1050,7 +1050,7 @@ const STR = { namesMoreBolt11: 'Lightning invoice (BOLT 11)', namesMoreBolt11How: 'A one-time invoice for a specific amount', namesMoreBolt12: 'Lightning offer (BOLT 12)', - namesMoreBolt12How: 'A reusable offer — mining pools like Ocean pay to one', + namesMoreBolt12How: 'A reusable offer. Mining pools like Ocean pay to one', namesMoreArk: 'Ark address', namesMoreArkHow: 'Get paid directly from any Ark wallet', namesMoreClink: 'Nostr offer (CLINK)', @@ -1068,7 +1068,7 @@ const STR = { namesOfferQr: 'QR', namesRelease: 'Release', namesReleased: 'Name released', - namesNeedArk: 'Your wallet is still connecting — try again in a moment', + namesNeedArk: 'Your wallet is still connecting. Try again in a moment', namesNotFound: 'No payment record found for {name}', namesNoUsableInstruction: 'That address exists, but this wallet has no way to pay it', namesZapCode: 'Get zapped on Nostr', @@ -1078,27 +1078,27 @@ const STR = { namesOwnDomainHow: 'Have your own domain? Add this line to its DNS records (DNSSEC must be enabled) and your address works there too:', msgMarkAllRead: 'Mark all read', namesOwnNode: 'Deliver to your own node', - namesOwnNodeMenuHow: 'Run a Lightning node? Point your address at it — payments land there instead of in this wallet.', - namesOwnNodeHow: 'Run your own Lightning node? Paste the CLINK offer code (noffer1…) from a service beside it — Lightning payments to your address will be delivered straight to your node instead of into this wallet.', + namesOwnNodeMenuHow: 'Run a Lightning node? Point your address at it. Payments land there instead of in this wallet.', + namesOwnNodeHow: 'Run your own Lightning node? Paste the CLINK offer code (noffer1…) from a service beside it. Lightning payments to your address will be delivered straight to your node instead of into this wallet.', namesOwnNodeActive: 'Lightning payments to your address are delivered to your own node:', namesOwnNodeClear: 'Deliver to this wallet again', - namesOwnNodeSet: 'Delivery updated — payments go to your node', + namesOwnNodeSet: 'Delivery updated. Payments go to your node', namesOwnNodeCleared: 'Payments land in this wallet again', namesOwnNodeNoRelay: 'That offer code names no relay', - namesOwnLnoHow: 'Or paste your node’s BOLT12 offer (lno1…) — it goes into your address’s DNS record, so senders fetch invoices straight from your node.', + namesOwnLnoHow: 'Or paste your node’s BOLT12 offer (lno1…). It goes into your address’s DNS record, so senders fetch invoices straight from your node.', namesOwnLnoActive: 'Your address’s DNS record carries your own node’s offer:', namesOwnLnoBad: 'That doesn’t look like a BOLT12 offer', bolt12Currency: 'This offer is priced in {currency}, which this wallet can’t pay', clinkBadInvoice: 'The recipient’s service returned an invoice that doesn’t match', clinkFixedAmount: 'This offer has a fixed price', nwcTitle: 'Nostr Wallet Connect', - nwcDesc: 'Let another app pay from this wallet over nostr — it never sees your keys, only spends within the limits you set, and you can cut it off at any time.', - nwcTabWarning: 'Works while Coinos is open — turn on background answering below to keep working when it isn’t.', + nwcDesc: 'Let another app pay from this wallet over nostr. It never sees your keys, only spends within the limits you set, and you can cut it off at any time.', + nwcTabWarning: 'Works while Coinos is open. Turn on background answering below to keep working when it isn’t.', nwcAdd: 'Add a connection', nwcBackground: 'Answer while closed', nwcNoPushHere: 'This browser can\u2019t receive push messages.', nwcNoPermission: 'Notifications weren\u2019t allowed.', - upNoDistributor: 'To be reached while this app is closed you need a push app installed alongside it — ntfy is the usual one (F\u2011Droid or the Play Store). Install it, open it once, then reopen coinos. Until then, payments and messages arrive whenever coinos is open.', + upNoDistributor: 'To be reached while this app is closed you need a push app installed alongside it: ntfy is the usual one (F\u2011Droid or the Play Store). Install it, open it once, then reopen coinos. Until then, payments and messages arrive whenever coinos is open.', upWaiting: 'Waiting for {app} to hand over a push address \u2014 reopen coinos in a moment and it should be here.', nwcNoPushService: 'This browser has no push service, so it can\u2019t be woken while closed. On Android that\u2019s usually a phone without Google Play Services \u2014 Firefox brings its own push and works there. Zaps are still answered whenever coinos is open.', nwcOn: 'On', @@ -1129,7 +1129,7 @@ const STR = { unlockForever: 'Until I lock it', viewWithoutPassword: 'View without password', arkExitSendTitle: 'Send on-chain', - arkExitSendNote: 'Leaves your Spending balance and arrives on-chain — network fees come off what arrives.', + arkExitSendNote: 'Leaves your Spending balance and arrives on-chain. Network fees come off what arrives.', savingsName: 'Savings', renameWallet: 'Rename', addWalletSeed: 'Seed phrase', @@ -1139,9 +1139,9 @@ const STR = { addWalletGo: 'Continue', zapSentShort: 'Zapped {n}', zapSetupTitle: 'Set your zap amount', - zapSetupDesc: 'One tap on ⚡ sends this amount instantly — no form, no confirmation. Change it any time by holding ⚡, or in Settings → Payments.', + zapSetupDesc: 'One tap on ⚡ sends this amount instantly: no form, no confirmation. Change it any time by holding ⚡, or in Settings → Payments.', zapSetupSave: 'Save and zap', - zapSettingsDesc: 'This is what one tap on ⚡ sends — no form, no confirmation. Tap again while one is still on its way to send another.', + zapSettingsDesc: 'This is what one tap on ⚡ sends: no form, no confirmation. Tap again while one is still on its way to send another.', zapAmountSaved: 'One tap now zaps {n} sats', zapSoundToggle: 'Play a sound when you zap', zapDefaultLabel: 'One-tap zap amount', @@ -1161,10 +1161,10 @@ const STR = { notifPayRecv: 'Payments received', notifDm: 'Direct messages', notifMention: 'Replies and mentions on nostr', - notifChatHint: 'Community chat is opt-in per room — turn it on from a room’s menu.', + notifChatHint: 'Community chat is opt-in per room. Turn it on from a room’s menu.', notifPaySent: 'Payments sent by connected apps', - notifPaySentHint: 'A heads-up when a connected app — a nostr client zapping, for example — spends from this wallet while it’s closed.', - nwcNotifHint: 'You’ll be asked to allow notifications — the connection uses them to answer when Coinos is closed.', + notifPaySentHint: 'A heads-up when a connected app (a nostr client zapping, for example) spends from this wallet while it’s closed.', + nwcNotifHint: 'You’ll be asked to allow notifications. The connection uses them to answer when Coinos is closed.', nwcNotifNeeded: 'Without notifications the connection couldn’t answer when Coinos is closed, so it wasn’t added. Allow notifications and try again.', nwcNotifBlocked: 'Notifications are blocked for this site. Allow them in your browser settings, then add the connection again.', nwcNoPush: 'This browser can’t receive push notifications, so a connection wouldn’t work while Coinos is closed.', @@ -1177,7 +1177,7 @@ const STR = { nwcRevoke: 'Revoke', nwcRevoked: 'Revoked {name}', nwcLimits: 'Max {max}/payment · {day}/day · {spent} spent today', - arkLnFundsPending: 'Your money is settling from a previous payment — retrying…', + arkLnFundsPending: 'Your money is settling from a previous payment. Retrying…', lnZapOffer: 'Zap {addr}', arkLnInvoiceIntro: 'Or take a Lightning payment, straight into Spending.', arkLnPaidHistory: 'Sent', @@ -1200,7 +1200,7 @@ const STR = { detailsLabel: 'Details', arkVtxoId: 'Coin (VTXO)', arkVtxoInputs: 'Coins spent', - lnReceiveIntro: 'Receive over Lightning — paid into this wallet on-chain, non-custodial.', + lnReceiveIntro: 'Receive over Lightning, paid into this wallet on-chain, non-custodial.', lnReceiveAwaiting: 'Share this invoice. When it’s paid, the sats land here automatically.', lnReceiveWatching: 'Waiting for payment…', lnReceived: 'Received!', @@ -1230,12 +1230,12 @@ const STR = { lnZapRange: 'Enter {min}–{max} sats', lnZapHintNostr: 'Sent over Lightning, with a public zap receipt on nostr.', lnZapHintPlain: 'Sent over Lightning (this address doesn’t support zap receipts).', - lnZapSentBody: 'Your zap is on its way — the swap provider pays it once the on-chain lockup confirms.', + lnZapSentBody: 'Your zap is on its way. The swap provider pays it once the on-chain lockup confirms.', lnZapFailed: 'Couldn’t complete the zap.', language: 'Language', darkMode: 'Dark mode', lightMode: 'Light mode', - offlineBanner: "Can't reach the network — working offline. Import a snapshot in Settings (under Advanced) to load coins.", + offlineBanner: "Can't reach the network, working offline. Import a snapshot in Settings (under Advanced) to load coins.", retry: 'Retry', copied: 'Copied to clipboard', snapshotExported: 'Snapshot exported', |
