kopia lustrzana https://github.com/vitorpamplona/amethyst
Porównaj commity
15 Commity
3be246c9cc
...
1b6aa621cd
Autor | SHA1 | Data |
---|---|---|
Vitor Pamplona | 1b6aa621cd | |
Crowdin Bot | b7f73c6eab | |
Vitor Pamplona | e35fb88ff1 | |
Vitor Pamplona | 6ecb3c8e1f | |
Vitor Pamplona | ff20f0a266 | |
Vitor Pamplona | a4cc6337f9 | |
Vitor Pamplona | 202b897029 | |
Vitor Pamplona | 79c174b92e | |
Crowdin Bot | bdd3f19b2c | |
Vitor Pamplona | afcc775d1b | |
Vitor Pamplona | 8bbf308619 | |
Vitor Pamplona | df378937fe | |
Vitor Pamplona | 02ab7a3f3f | |
Crowdin Bot | 68ba9b3b91 | |
Vitor Pamplona | f62833d1be |
|
@ -709,6 +709,7 @@ class Account(
|
|||
fun sendZapPaymentRequestFor(
|
||||
bolt11: String,
|
||||
zappedNote: Note?,
|
||||
onSent: () -> Unit,
|
||||
onResponse: (Response?) -> Unit,
|
||||
) {
|
||||
if (!isWriteable()) return
|
||||
|
@ -730,6 +731,8 @@ class Account(
|
|||
LocalCache.consume(event, zappedNote) { it.response(signer) { onResponse(it) } }
|
||||
|
||||
Client.send(event, nip47.relayUri, wcListener.feedTypes) { wcListener.destroy() }
|
||||
|
||||
onSent()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
package com.vitorpamplona.amethyst.service
|
||||
|
||||
import com.vitorpamplona.amethyst.model.User
|
||||
import com.vitorpamplona.amethyst.service.relays.COMMON_FEED_TYPES
|
||||
import com.vitorpamplona.amethyst.service.relays.EOSETime
|
||||
import com.vitorpamplona.amethyst.service.relays.EVENT_FINDER_TYPES
|
||||
import com.vitorpamplona.amethyst.service.relays.JsonFilter
|
||||
|
@ -42,7 +41,7 @@ object NostrSingleUserDataSource : NostrDataSource("SingleUserFeed") {
|
|||
|
||||
return listOf(
|
||||
TypedFilter(
|
||||
types = COMMON_FEED_TYPES,
|
||||
types = EVENT_FINDER_TYPES,
|
||||
filter =
|
||||
JsonFilter(
|
||||
kinds = listOf(MetadataEvent.KIND),
|
||||
|
|
|
@ -28,6 +28,7 @@ import com.vitorpamplona.amethyst.model.LocalCache
|
|||
import com.vitorpamplona.amethyst.model.Note
|
||||
import com.vitorpamplona.amethyst.model.User
|
||||
import com.vitorpamplona.amethyst.service.lnurl.LightningAddressResolver
|
||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.collectSuccessfulSigningOperations
|
||||
import com.vitorpamplona.quartz.events.LiveActivitiesEvent
|
||||
import com.vitorpamplona.quartz.events.LnZapEvent
|
||||
import com.vitorpamplona.quartz.events.PayInvoiceErrorResponse
|
||||
|
@ -35,7 +36,6 @@ import com.vitorpamplona.quartz.events.ZapSplitSetup
|
|||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlin.math.round
|
||||
|
||||
|
@ -59,9 +59,8 @@ class ZapPaymentHandler(val account: Account) {
|
|||
onPayViaIntent: (ImmutableList<Payable>) -> Unit,
|
||||
zapType: LnZapEvent.ZapType,
|
||||
) = withContext(Dispatchers.IO) {
|
||||
val zapSplitSetup = note.event?.zapSplitSetup()
|
||||
|
||||
val noteEvent = note.event
|
||||
val zapSplitSetup = noteEvent?.zapSplitSetup()
|
||||
|
||||
val zapsToSend =
|
||||
if (!zapSplitSetup.isNullOrEmpty()) {
|
||||
|
@ -69,7 +68,7 @@ class ZapPaymentHandler(val account: Account) {
|
|||
} else if (noteEvent is LiveActivitiesEvent && noteEvent.hasHost()) {
|
||||
noteEvent.hosts().map { ZapSplitSetup(it, null, weight = 1.0, false) }
|
||||
} else {
|
||||
val lud16 = note.author?.info?.lud16?.trim() ?: note.author?.info?.lud06?.trim()
|
||||
val lud16 = note.author?.info?.lnAddress()
|
||||
|
||||
if (lud16.isNullOrBlank()) {
|
||||
onError(
|
||||
|
@ -84,101 +83,216 @@ class ZapPaymentHandler(val account: Account) {
|
|||
listOf(ZapSplitSetup(lud16, null, weight = 1.0, true))
|
||||
}
|
||||
|
||||
val totalWeight = zapsToSend.sumOf { it.weight }
|
||||
|
||||
val invoicesToPayOnIntent = mutableListOf<Payable>()
|
||||
|
||||
zapsToSend.forEachIndexed { index, value ->
|
||||
val outerProgressMin = index / zapsToSend.size.toFloat()
|
||||
val outerProgressMax = (index + 1) / zapsToSend.size.toFloat()
|
||||
|
||||
val zapValue = round((amountMilliSats * value.weight / totalWeight) / 1000f).toLong() * 1000
|
||||
|
||||
if (value.isLnAddress) {
|
||||
innerZap(
|
||||
lud16 = value.lnAddressOrPubKeyHex,
|
||||
note = note,
|
||||
amount = zapValue,
|
||||
pollOption = pollOption,
|
||||
message = message,
|
||||
context = context,
|
||||
onError = onError,
|
||||
onProgress = {
|
||||
onProgress((it * (outerProgressMax - outerProgressMin)) + outerProgressMin)
|
||||
},
|
||||
zapType = zapType,
|
||||
onPayInvoiceThroughIntent = {
|
||||
invoicesToPayOnIntent.add(
|
||||
Payable(
|
||||
info = value,
|
||||
user = null,
|
||||
amountMilliSats = zapValue,
|
||||
invoice = it,
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
onProgress(0.02f)
|
||||
signAllZapRequests(note, pollOption, message, zapType, zapsToSend) { splitZapRequestPairs ->
|
||||
if (splitZapRequestPairs.isEmpty()) {
|
||||
onProgress(0.00f)
|
||||
return@signAllZapRequests
|
||||
} else {
|
||||
val user = LocalCache.getUserIfExists(value.lnAddressOrPubKeyHex)
|
||||
val lud16 = user?.info?.lnAddress()
|
||||
onProgress(0.05f)
|
||||
}
|
||||
|
||||
if (lud16 != null) {
|
||||
innerZap(
|
||||
lud16 = lud16,
|
||||
note = note,
|
||||
amount = zapValue,
|
||||
pollOption = pollOption,
|
||||
message = message,
|
||||
context = context,
|
||||
onError = onError,
|
||||
onProgress = {
|
||||
onProgress((it * (outerProgressMax - outerProgressMin)) + outerProgressMin)
|
||||
},
|
||||
zapType = zapType,
|
||||
overrideUser = user,
|
||||
onPayInvoiceThroughIntent = {
|
||||
invoicesToPayOnIntent.add(
|
||||
Payable(
|
||||
info = value,
|
||||
user = user,
|
||||
amountMilliSats = zapValue,
|
||||
invoice = it,
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
assembleAllInvoices(splitZapRequestPairs.toList(), amountMilliSats, message, onError, onProgress = {
|
||||
onProgress(it * 0.7f + 0.05f) // keeps within range.
|
||||
}, context) {
|
||||
if (it.isEmpty()) {
|
||||
onProgress(0.00f)
|
||||
return@assembleAllInvoices
|
||||
} else {
|
||||
onError(
|
||||
context.getString(
|
||||
R.string.missing_lud16,
|
||||
),
|
||||
context.getString(
|
||||
R.string.user_x_does_not_have_a_lightning_address_setup_to_receive_sats,
|
||||
user?.toBestDisplayName() ?: value.lnAddressOrPubKeyHex,
|
||||
),
|
||||
onProgress(0.75f)
|
||||
}
|
||||
|
||||
if (account.hasWalletConnectSetup()) {
|
||||
payViaNWC(it.values.map { it.second }, note, onError, onProgress = {
|
||||
onProgress(it * 0.25f + 0.75f) // keeps within range.
|
||||
}, context) {
|
||||
// onProgress(1f)
|
||||
}
|
||||
} else {
|
||||
onPayViaIntent(
|
||||
it.map {
|
||||
Payable(
|
||||
info = it.key.first,
|
||||
user = null,
|
||||
amountMilliSats = it.value.first,
|
||||
invoice = it.value.second,
|
||||
)
|
||||
}.toImmutableList(),
|
||||
)
|
||||
|
||||
onProgress(0f)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (invoicesToPayOnIntent.isNotEmpty()) {
|
||||
onPayViaIntent(invoicesToPayOnIntent.toImmutableList())
|
||||
onProgress(1f)
|
||||
} else {
|
||||
launch(Dispatchers.IO) {
|
||||
// Awaits for the event to come back to LocalCache.
|
||||
var count = 0
|
||||
while (invoicesToPayOnIntent.size < zapsToSend.size || count < 4) {
|
||||
count++
|
||||
Thread.sleep(5000)
|
||||
}
|
||||
if (invoicesToPayOnIntent.isNotEmpty()) {
|
||||
onPayViaIntent(invoicesToPayOnIntent.toImmutableList())
|
||||
onProgress(1f)
|
||||
private fun calculateZapValue(
|
||||
amountMilliSats: Long,
|
||||
weight: Double,
|
||||
totalWeight: Double,
|
||||
): Long {
|
||||
val shareValue = amountMilliSats * (weight / totalWeight)
|
||||
val roundedZapValue = round(shareValue / 1000f).toLong() * 1000
|
||||
return roundedZapValue
|
||||
}
|
||||
|
||||
suspend fun signAllZapRequests(
|
||||
note: Note,
|
||||
pollOption: Int?,
|
||||
message: String,
|
||||
zapType: LnZapEvent.ZapType,
|
||||
zapsToSend: List<ZapSplitSetup>,
|
||||
onAllDone: suspend (MutableMap<ZapSplitSetup, String>) -> Unit,
|
||||
) {
|
||||
collectSuccessfulSigningOperations<ZapSplitSetup, String>(
|
||||
operationsInput = zapsToSend,
|
||||
runRequestFor = { next: ZapSplitSetup, onReady ->
|
||||
if (next.isLnAddress) {
|
||||
prepareZapRequestIfNeeded(note, pollOption, message, zapType) { zapRequestJson ->
|
||||
if (zapRequestJson != null) {
|
||||
onReady(zapRequestJson)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
onProgress(1f)
|
||||
val user = LocalCache.getUserIfExists(next.lnAddressOrPubKeyHex)
|
||||
prepareZapRequestIfNeeded(note, pollOption, message, zapType, user) { zapRequestJson ->
|
||||
if (zapRequestJson != null) {
|
||||
onReady(zapRequestJson)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onReady = onAllDone,
|
||||
)
|
||||
}
|
||||
|
||||
suspend fun assembleAllInvoices(
|
||||
invoices: List<Pair<ZapSplitSetup, String>>,
|
||||
totalAmountMilliSats: Long,
|
||||
message: String,
|
||||
onError: (String, String) -> Unit,
|
||||
onProgress: (percent: Float) -> Unit,
|
||||
context: Context,
|
||||
onAllDone: suspend (MutableMap<Pair<ZapSplitSetup, String>, Pair<Long, String>>) -> Unit,
|
||||
) {
|
||||
var progressAllPayments = 0.00f
|
||||
val totalWeight = invoices.sumOf { it.first.weight }
|
||||
|
||||
collectSuccessfulSigningOperations<Pair<ZapSplitSetup, String>, Pair<Long, String>>(
|
||||
operationsInput = invoices,
|
||||
runRequestFor = { splitZapRequestPair: Pair<ZapSplitSetup, String>, onReady ->
|
||||
assembleInvoice(
|
||||
splitSetup = splitZapRequestPair.first,
|
||||
nostrZapRequest = splitZapRequestPair.second,
|
||||
zapValue = calculateZapValue(totalAmountMilliSats, splitZapRequestPair.first.weight, totalWeight),
|
||||
message = message,
|
||||
onError = onError,
|
||||
onProgressStep = { percentStepForThisPayment ->
|
||||
progressAllPayments += percentStepForThisPayment / invoices.size
|
||||
onProgress(progressAllPayments)
|
||||
},
|
||||
context = context,
|
||||
onReady = onReady,
|
||||
)
|
||||
},
|
||||
onReady = onAllDone,
|
||||
)
|
||||
}
|
||||
|
||||
suspend fun payViaNWC(
|
||||
invoices: List<String>,
|
||||
note: Note,
|
||||
onError: (String, String) -> Unit,
|
||||
onProgress: (percent: Float) -> Unit,
|
||||
context: Context,
|
||||
onAllDone: suspend (MutableMap<String, Boolean>) -> Unit,
|
||||
) {
|
||||
var progressAllPayments = 0.00f
|
||||
|
||||
collectSuccessfulSigningOperations<String, Boolean>(
|
||||
operationsInput = invoices,
|
||||
runRequestFor = { invoice: String, onReady ->
|
||||
account.sendZapPaymentRequestFor(
|
||||
bolt11 = invoice,
|
||||
zappedNote = note,
|
||||
onSent = {
|
||||
progressAllPayments += 0.5f / invoices.size
|
||||
onProgress(progressAllPayments)
|
||||
onReady(true)
|
||||
},
|
||||
onResponse = { response ->
|
||||
if (response is PayInvoiceErrorResponse) {
|
||||
progressAllPayments += 0.5f / invoices.size
|
||||
onProgress(progressAllPayments)
|
||||
onError(
|
||||
context.getString(R.string.error_dialog_pay_invoice_error),
|
||||
context.getString(
|
||||
R.string.wallet_connect_pay_invoice_error_error,
|
||||
response.error?.message
|
||||
?: response.error?.code?.toString() ?: "Error parsing error message",
|
||||
),
|
||||
)
|
||||
} else {
|
||||
progressAllPayments += 0.5f / invoices.size
|
||||
onProgress(progressAllPayments)
|
||||
}
|
||||
},
|
||||
)
|
||||
},
|
||||
onReady = onAllDone,
|
||||
)
|
||||
}
|
||||
|
||||
private fun assembleInvoice(
|
||||
splitSetup: ZapSplitSetup,
|
||||
nostrZapRequest: String,
|
||||
zapValue: Long,
|
||||
message: String,
|
||||
onError: (String, String) -> Unit,
|
||||
onProgressStep: (percent: Float) -> Unit,
|
||||
context: Context,
|
||||
onReady: (Pair<Long, String>) -> Unit,
|
||||
) {
|
||||
var progressThisPayment = 0.00f
|
||||
|
||||
var user: User? = null
|
||||
val lud16 =
|
||||
if (splitSetup.isLnAddress) {
|
||||
splitSetup.lnAddressOrPubKeyHex
|
||||
} else {
|
||||
user = LocalCache.getUserIfExists(splitSetup.lnAddressOrPubKeyHex)
|
||||
user?.info?.lnAddress()
|
||||
}
|
||||
|
||||
if (lud16 != null) {
|
||||
LightningAddressResolver()
|
||||
.lnAddressInvoice(
|
||||
lnaddress = lud16,
|
||||
milliSats = zapValue,
|
||||
message = message,
|
||||
nostrRequest = nostrZapRequest,
|
||||
onError = onError,
|
||||
onProgress = {
|
||||
val step = it - progressThisPayment
|
||||
progressThisPayment = it
|
||||
onProgressStep(step)
|
||||
},
|
||||
context = context,
|
||||
onSuccess = {
|
||||
onProgressStep(1 - progressThisPayment)
|
||||
onReady(Pair(zapValue, it))
|
||||
},
|
||||
)
|
||||
} else {
|
||||
onError(
|
||||
context.getString(
|
||||
R.string.missing_lud16,
|
||||
),
|
||||
context.getString(
|
||||
R.string.user_x_does_not_have_a_lightning_address_setup_to_receive_sats,
|
||||
user?.toBestDisplayName() ?: splitSetup.lnAddressOrPubKeyHex,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -198,63 +312,4 @@ class ZapPaymentHandler(val account: Account) {
|
|||
onReady(null)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun innerZap(
|
||||
lud16: String,
|
||||
note: Note,
|
||||
amount: Long,
|
||||
pollOption: Int?,
|
||||
message: String,
|
||||
context: Context,
|
||||
onError: (String, String) -> Unit,
|
||||
onProgress: (percent: Float) -> Unit,
|
||||
onPayInvoiceThroughIntent: (String) -> Unit,
|
||||
zapType: LnZapEvent.ZapType,
|
||||
overrideUser: User? = null,
|
||||
) {
|
||||
onProgress(0.05f)
|
||||
|
||||
prepareZapRequestIfNeeded(note, pollOption, message, zapType, overrideUser) { zapRequestJson ->
|
||||
onProgress(0.10f)
|
||||
|
||||
LightningAddressResolver()
|
||||
.lnAddressInvoice(
|
||||
lud16,
|
||||
amount,
|
||||
message,
|
||||
zapRequestJson,
|
||||
onSuccess = {
|
||||
onProgress(0.7f)
|
||||
if (account.hasWalletConnectSetup()) {
|
||||
account.sendZapPaymentRequestFor(
|
||||
bolt11 = it,
|
||||
note,
|
||||
onResponse = { response ->
|
||||
if (response is PayInvoiceErrorResponse) {
|
||||
onProgress(0.0f)
|
||||
onError(
|
||||
context.getString(R.string.error_dialog_pay_invoice_error),
|
||||
context.getString(
|
||||
R.string.wallet_connect_pay_invoice_error_error,
|
||||
response.error?.message
|
||||
?: response.error?.code?.toString() ?: "Error parsing error message",
|
||||
),
|
||||
)
|
||||
} else {
|
||||
onProgress(1f)
|
||||
}
|
||||
},
|
||||
)
|
||||
onProgress(0.8f)
|
||||
} else {
|
||||
onPayInvoiceThroughIntent(it)
|
||||
onProgress(0f)
|
||||
}
|
||||
},
|
||||
onError = onError,
|
||||
onProgress = onProgress,
|
||||
context = context,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,6 @@ import com.vitorpamplona.quartz.events.EventInterface
|
|||
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.UUID
|
||||
|
||||
|
@ -125,47 +124,8 @@ object Client : RelayPool.Listener {
|
|||
} else if (relay == null) {
|
||||
RelayPool.send(signedEvent)
|
||||
} else {
|
||||
val useConnectedRelayIfPresent = RelayPool.getRelays(relay)
|
||||
|
||||
if (useConnectedRelayIfPresent.isNotEmpty()) {
|
||||
useConnectedRelayIfPresent.forEach { it.send(signedEvent) }
|
||||
} else {
|
||||
/** temporary connection */
|
||||
newSporadicRelay(
|
||||
relay,
|
||||
feedTypes,
|
||||
onConnected = { myRelay -> myRelay.send(signedEvent) },
|
||||
onDone = onDone,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(DelicateCoroutinesApi::class)
|
||||
private fun newSporadicRelay(
|
||||
url: String,
|
||||
feedTypes: Set<FeedType>?,
|
||||
onConnected: (Relay) -> Unit,
|
||||
onDone: (() -> Unit)?,
|
||||
) {
|
||||
val relay = Relay(url, true, true, feedTypes ?: emptySet())
|
||||
RelayPool.addRelay(relay)
|
||||
|
||||
relay.connectAndRun {
|
||||
allSubscriptions().forEach {
|
||||
relay.sendFilter(it.key, it.value)
|
||||
}
|
||||
|
||||
onConnected(relay)
|
||||
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
delay(60000) // waits for a reply
|
||||
relay.disconnect()
|
||||
RelayPool.removeRelay(relay)
|
||||
|
||||
if (onDone != null) {
|
||||
onDone()
|
||||
}
|
||||
RelayPool.getOrCreateRelay(relay, feedTypes, onDone) {
|
||||
it.send(signedEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,6 +90,7 @@ class Relay(
|
|||
var afterEOSEPerSubscription = mutableMapOf<String, Boolean>()
|
||||
|
||||
val authResponse = mutableMapOf<HexKey, Boolean>()
|
||||
val sendWhenReady = mutableListOf<EventInterface>()
|
||||
|
||||
fun register(listener: Listener) {
|
||||
listeners = listeners.plus(listener)
|
||||
|
@ -167,6 +168,13 @@ class Relay(
|
|||
// Log.w("Relay", "Relay OnOpen, Loading All subscriptions $url")
|
||||
onConnected(this@Relay)
|
||||
|
||||
synchronized(sendWhenReady) {
|
||||
sendWhenReady.forEach {
|
||||
send(it)
|
||||
}
|
||||
sendWhenReady.clear()
|
||||
}
|
||||
|
||||
listeners.forEach { it.onRelayStateChange(this@Relay, StateType.CONNECT, null) }
|
||||
}
|
||||
|
||||
|
@ -272,6 +280,7 @@ class Relay(
|
|||
val event = Event.fromJson(msgArray.get(2))
|
||||
|
||||
// Log.w("Relay", "Relay onEVENT ${event.kind} $url, $subscriptionId ${msgArray.get(2)}")
|
||||
|
||||
listeners.forEach {
|
||||
it.onEvent(
|
||||
this@Relay,
|
||||
|
@ -456,6 +465,10 @@ class Relay(
|
|||
if (isReady) {
|
||||
socket?.send(event)
|
||||
eventUploadCounterInBytes += event.bytesUsedInMemory()
|
||||
} else {
|
||||
synchronized(sendWhenReady) {
|
||||
sendWhenReady.add(signedEvent)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// sends all filters after connection is successful.
|
||||
|
|
|
@ -24,10 +24,15 @@ import androidx.compose.runtime.Immutable
|
|||
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
||||
import com.vitorpamplona.quartz.events.Event
|
||||
import com.vitorpamplona.quartz.events.EventInterface
|
||||
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.channels.BufferOverflow
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.SharedFlow
|
||||
import kotlinx.coroutines.flow.asSharedFlow
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
/**
|
||||
* RelayPool manages the connection to multiple Relays and lets consumers deal with simple events.
|
||||
|
@ -58,6 +63,57 @@ object RelayPool : Relay.Listener {
|
|||
return relays.filter { it.url == url }
|
||||
}
|
||||
|
||||
fun getOrCreateRelay(
|
||||
url: String,
|
||||
feedTypes: Set<FeedType>? = null,
|
||||
onDone: (() -> Unit)? = null,
|
||||
whenConnected: (Relay) -> Unit,
|
||||
) {
|
||||
synchronized(this) {
|
||||
val matching = getRelays(url)
|
||||
if (matching.isNotEmpty()) {
|
||||
matching.forEach { whenConnected(it) }
|
||||
} else {
|
||||
/** temporary connection */
|
||||
newSporadicRelay(
|
||||
url,
|
||||
feedTypes,
|
||||
onConnected = whenConnected,
|
||||
onDone = onDone,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(DelicateCoroutinesApi::class)
|
||||
fun newSporadicRelay(
|
||||
url: String,
|
||||
feedTypes: Set<FeedType>?,
|
||||
onConnected: (Relay) -> Unit,
|
||||
onDone: (() -> Unit)?,
|
||||
) {
|
||||
val relay = Relay(url, true, true, feedTypes ?: emptySet())
|
||||
addRelay(relay)
|
||||
|
||||
relay.connectAndRun {
|
||||
Client.allSubscriptions().forEach {
|
||||
relay.sendFilter(it.key, it.value)
|
||||
}
|
||||
|
||||
onConnected(relay)
|
||||
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
delay(60000) // waits for a reply
|
||||
relay.disconnect()
|
||||
removeRelay(relay)
|
||||
|
||||
if (onDone != null) {
|
||||
onDone()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun loadRelays(relayList: List<Relay>) {
|
||||
if (!relayList.isNullOrEmpty()) {
|
||||
relayList.forEach { addRelay(it) }
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.ui
|
||||
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
|
||||
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.google.accompanist.adaptive.calculateDisplayFeatures
|
||||
import com.vitorpamplona.amethyst.ServiceManager
|
||||
import com.vitorpamplona.amethyst.ui.screen.AccountScreen
|
||||
import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel
|
||||
import com.vitorpamplona.amethyst.ui.screen.SharedPreferencesViewModel
|
||||
import com.vitorpamplona.amethyst.ui.theme.AmethystTheme
|
||||
|
||||
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
|
||||
@Composable
|
||||
fun prepareSharedViewModel(act: MainActivity): SharedPreferencesViewModel {
|
||||
val sharedPreferencesViewModel: SharedPreferencesViewModel = viewModel()
|
||||
|
||||
val displayFeatures = calculateDisplayFeatures(act)
|
||||
val windowSizeClass = calculateWindowSizeClass(act)
|
||||
|
||||
LaunchedEffect(key1 = sharedPreferencesViewModel) {
|
||||
sharedPreferencesViewModel.init()
|
||||
sharedPreferencesViewModel.updateDisplaySettings(windowSizeClass, displayFeatures)
|
||||
}
|
||||
|
||||
LaunchedEffect(act.isOnMobileDataState) {
|
||||
sharedPreferencesViewModel.updateConnectivityStatusState(act.isOnMobileDataState)
|
||||
}
|
||||
|
||||
return sharedPreferencesViewModel
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun AppScreen(
|
||||
sharedPreferencesViewModel: SharedPreferencesViewModel,
|
||||
serviceManager: ServiceManager,
|
||||
) {
|
||||
AmethystTheme(sharedPreferencesViewModel) {
|
||||
// A surface container using the 'background' color from the theme
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
color = MaterialTheme.colorScheme.background,
|
||||
) {
|
||||
val accountStateViewModel: AccountStateViewModel = viewModel()
|
||||
accountStateViewModel.serviceManager = serviceManager
|
||||
|
||||
LaunchedEffect(key1 = Unit) {
|
||||
accountStateViewModel.tryLoginExistingAccountAsync()
|
||||
}
|
||||
|
||||
AccountScreen(accountStateViewModel, sharedPreferencesViewModel)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -33,16 +33,7 @@ import androidx.activity.compose.setContent
|
|||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
|
||||
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.google.accompanist.adaptive.calculateDisplayFeatures
|
||||
import com.vitorpamplona.amethyst.LocalPreferences
|
||||
import com.vitorpamplona.amethyst.ServiceManager
|
||||
import com.vitorpamplona.amethyst.model.LocalCache
|
||||
|
@ -53,10 +44,6 @@ import com.vitorpamplona.amethyst.ui.components.DEFAULT_MUTED_SETTING
|
|||
import com.vitorpamplona.amethyst.ui.components.keepPlayingMutex
|
||||
import com.vitorpamplona.amethyst.ui.navigation.Route
|
||||
import com.vitorpamplona.amethyst.ui.navigation.debugState
|
||||
import com.vitorpamplona.amethyst.ui.screen.AccountScreen
|
||||
import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel
|
||||
import com.vitorpamplona.amethyst.ui.screen.SharedPreferencesViewModel
|
||||
import com.vitorpamplona.amethyst.ui.theme.AmethystTheme
|
||||
import com.vitorpamplona.quartz.encoders.Nip19Bech32
|
||||
import com.vitorpamplona.quartz.encoders.Nip47WalletConnect
|
||||
import com.vitorpamplona.quartz.events.ChannelCreateEvent
|
||||
|
@ -76,14 +63,13 @@ import java.util.Timer
|
|||
import kotlin.concurrent.schedule
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
private val isOnMobileDataState = mutableStateOf(false)
|
||||
val isOnMobileDataState = mutableStateOf(false)
|
||||
private val isOnWifiDataState = mutableStateOf(false)
|
||||
|
||||
// Service Manager is only active when the activity is active.
|
||||
val serviceManager = ServiceManager()
|
||||
private var shouldPauseService = true
|
||||
|
||||
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
@ -91,36 +77,8 @@ class MainActivity : AppCompatActivity() {
|
|||
Log.d("Lifetime Event", "MainActivity.onCreate")
|
||||
|
||||
setContent {
|
||||
val sharedPreferencesViewModel: SharedPreferencesViewModel = viewModel()
|
||||
|
||||
val displayFeatures = calculateDisplayFeatures(this)
|
||||
val windowSizeClass = calculateWindowSizeClass(this)
|
||||
|
||||
LaunchedEffect(key1 = sharedPreferencesViewModel) {
|
||||
sharedPreferencesViewModel.init()
|
||||
sharedPreferencesViewModel.updateDisplaySettings(windowSizeClass, displayFeatures)
|
||||
}
|
||||
|
||||
LaunchedEffect(isOnMobileDataState) {
|
||||
sharedPreferencesViewModel.updateConnectivityStatusState(isOnMobileDataState)
|
||||
}
|
||||
|
||||
AmethystTheme(sharedPreferencesViewModel) {
|
||||
// A surface container using the 'background' color from the theme
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
color = MaterialTheme.colorScheme.background,
|
||||
) {
|
||||
val accountStateViewModel: AccountStateViewModel = viewModel()
|
||||
accountStateViewModel.serviceManager = serviceManager
|
||||
|
||||
LaunchedEffect(key1 = Unit) {
|
||||
accountStateViewModel.tryLoginExistingAccountAsync()
|
||||
}
|
||||
|
||||
AccountScreen(accountStateViewModel, sharedPreferencesViewModel)
|
||||
}
|
||||
}
|
||||
val sharedPreferencesViewModel = prepareSharedViewModel(act = this)
|
||||
AppScreen(sharedPreferencesViewModel = sharedPreferencesViewModel, serviceManager = serviceManager)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
package com.vitorpamplona.amethyst.ui.components
|
||||
|
||||
import androidx.compose.animation.Crossfade
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
|
@ -132,6 +133,29 @@ fun RichTextViewer(
|
|||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun RenderStrangeNamePreview() {
|
||||
val nav: (String) -> Unit = {}
|
||||
|
||||
Column(modifier = Modifier.padding(10.dp)) {
|
||||
RenderRegular(
|
||||
"If you want to stream or download the music from nostr:npub1sctag667a7np6p6ety2up94pnwwxhd2ep8n8afr2gtr47cwd4ewsvdmmjm can you here",
|
||||
EmptyTagList,
|
||||
) { word, state ->
|
||||
when (word) {
|
||||
is BechSegment -> {
|
||||
Text(
|
||||
"FreeFrom Official \uD80C\uDD66",
|
||||
modifier = Modifier.border(1.dp, Color.Red),
|
||||
)
|
||||
}
|
||||
is RegularTextSegment -> Text(word.segmentText)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun RenderRegularPreview() {
|
||||
|
|
|
@ -182,7 +182,6 @@ fun LoggedInPage(
|
|||
contentResolver = { Amethyst.instance.contentResolver },
|
||||
)
|
||||
onDispose {
|
||||
Log.d("onDispose", "Called onDispose")
|
||||
accountViewModel.account.signer.launcher.clearLauncher()
|
||||
lifeCycleOwner.lifecycle.removeObserver(observer)
|
||||
}
|
||||
|
|
|
@ -93,9 +93,12 @@ import kotlinx.collections.immutable.toImmutableSet
|
|||
import kotlinx.coroutines.CancellationException
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.channels.BufferOverflow
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.joinAll
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import kotlinx.coroutines.withContext
|
||||
|
@ -291,26 +294,27 @@ class AccountViewModel(val account: Account, val settings: SettingsState) : View
|
|||
onNewState: (ImmutableList<ZapAmountCommentNotification>) -> Unit,
|
||||
) {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
val myList = zaps.toList()
|
||||
|
||||
val initialResults =
|
||||
myList
|
||||
.associate {
|
||||
it.request to
|
||||
ZapAmountCommentNotification(
|
||||
it.request.author,
|
||||
it.request.event?.content()?.ifBlank { null },
|
||||
showAmountAxis((it.response?.event as? LnZapEvent)?.amount),
|
||||
)
|
||||
}
|
||||
zaps.associate {
|
||||
it.request to
|
||||
ZapAmountCommentNotification(
|
||||
it.request.author,
|
||||
it.request.event?.content()?.ifBlank { null },
|
||||
showAmountAxis((it.response.event as? LnZapEvent)?.amount),
|
||||
)
|
||||
}
|
||||
.toMutableMap()
|
||||
|
||||
collectSuccessfulSigningOperations<CombinedZap, ZapAmountCommentNotification>(
|
||||
operationsInput = myList,
|
||||
operationsInput = zaps.filter { (it.request.event as? LnZapRequestEvent)?.isPrivateZap() == true },
|
||||
runRequestFor = { next, onReady ->
|
||||
checkNotInMainThread()
|
||||
|
||||
innerDecryptAmountMessage(next.request, next.response, onReady)
|
||||
},
|
||||
) {
|
||||
checkNotInMainThread()
|
||||
|
||||
it.forEach { decrypted -> initialResults[decrypted.key.request] = decrypted.value }
|
||||
|
||||
onNewState(initialResults.values.toImmutableList())
|
||||
|
@ -477,7 +481,9 @@ class AccountViewModel(val account: Account, val settings: SettingsState) : View
|
|||
message,
|
||||
context,
|
||||
onError,
|
||||
onProgress,
|
||||
onProgress = {
|
||||
onProgress(it)
|
||||
},
|
||||
onPayViaIntent,
|
||||
zapType,
|
||||
)
|
||||
|
@ -1392,48 +1398,41 @@ class HasNotificationDot(bottomNavigationItems: ImmutableList<Route>) {
|
|||
|
||||
@Immutable data class LoadedBechLink(val baseNote: Note?, val nip19: Nip19Bech32.ParseReturn)
|
||||
|
||||
public fun <T, K> allOrNothingSigningOperations(
|
||||
remainingTos: List<T>,
|
||||
runRequestFor: (T, (K) -> Unit) -> Unit,
|
||||
output: MutableList<K> = mutableListOf(),
|
||||
onReady: (List<K>) -> Unit,
|
||||
) {
|
||||
if (remainingTos.isEmpty()) {
|
||||
onReady(output)
|
||||
return
|
||||
}
|
||||
|
||||
val next = remainingTos.first()
|
||||
|
||||
runRequestFor(next) { result: K ->
|
||||
output.add(result)
|
||||
allOrNothingSigningOperations(remainingTos.minus(next), runRequestFor, output, onReady)
|
||||
}
|
||||
}
|
||||
|
||||
public suspend fun <T, K> collectSuccessfulSigningOperations(
|
||||
operationsInput: List<T>,
|
||||
runRequestFor: (T, (K) -> Unit) -> Unit,
|
||||
output: MutableMap<T, K> = mutableMapOf(),
|
||||
onReady: (MutableMap<T, K>) -> Unit,
|
||||
onReady: suspend (MutableMap<T, K>) -> Unit,
|
||||
) {
|
||||
if (operationsInput.isEmpty()) {
|
||||
onReady(output)
|
||||
return
|
||||
}
|
||||
|
||||
for (input in operationsInput) {
|
||||
// runs in sequence to avoid overcrowding Amber.
|
||||
val result =
|
||||
withTimeoutOrNull(100) {
|
||||
suspendCancellableCoroutine { continuation ->
|
||||
runRequestFor(input) { result: K -> continuation.resume(result) }
|
||||
val (value, elapsed) =
|
||||
measureTimedValue {
|
||||
coroutineScope {
|
||||
val jobs =
|
||||
operationsInput.map {
|
||||
async {
|
||||
val result =
|
||||
withTimeoutOrNull(10000) {
|
||||
suspendCancellableCoroutine { continuation ->
|
||||
runRequestFor(it) { result: K -> continuation.resume(result) }
|
||||
}
|
||||
}
|
||||
if (result != null) {
|
||||
output[it] = result
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// runs in parallel to avoid overcrowding Amber.
|
||||
withTimeoutOrNull(15000) {
|
||||
jobs.joinAll()
|
||||
}
|
||||
}
|
||||
if (result != null) {
|
||||
output[input] = result
|
||||
}
|
||||
}
|
||||
|
||||
onReady(output)
|
||||
}
|
||||
|
|
|
@ -1182,7 +1182,7 @@ fun DisplayLNAddress(
|
|||
zapExpanded = false
|
||||
// pay directly
|
||||
if (accountViewModel.account.hasWalletConnectSetup()) {
|
||||
accountViewModel.account.sendZapPaymentRequestFor(it, null) { response ->
|
||||
accountViewModel.account.sendZapPaymentRequestFor(it, null, onSent = {}) { response ->
|
||||
if (response is PayInvoiceSuccessResponse) {
|
||||
showInfoMessageDialog = context.getString(R.string.payment_successful)
|
||||
} else if (response is PayInvoiceErrorResponse) {
|
||||
|
|
|
@ -559,11 +559,16 @@
|
|||
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct_exception">Nepodařilo se vyřešit %1$s. Zkontrolujte, zda jste připojeni, zda je server aktivní a zda je adresa %2$s správná.\n\nVýjimka byla: %3$s</string>
|
||||
<string name="could_not_fetch_invoice_from">Nepodařilo se načíst fakturu z %1$s</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup">Chyba při analýze JSON z Lightning adresy. Zkontrolujte uživatelovo bleskové nastavení</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup_with_user">Chyba při analýze JSON z %1$s. Zkontrolujte uživatelské bleskové nastavení</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration">URL adresa zpětného volání nebyla nalezena v konfiguraci serveru pro bleskovou adresu uživatele</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration_with_user">Adresa URL zpětného volání nebyla nalezena v odpovědi %1$s</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup">Chyba při analýze JSON z načtení faktur v Lightning adrese. Zkontrolujte uživatelské nastavení</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup_with_user">Chyba při analýze JSON z načtení faktury %1$s. Zkontrolujte uživatelské bleskové nastavení</string>
|
||||
<string name="incorrect_invoice_amount_sats_from_it_should_have_been">Nesprávná částka faktury (%1$s sats) od %2$s. Měla by být %3$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error">Nepodařilo se vytvořit bleskovou fakturu před odesláním zap. Blesková peněženka příjemce odeslala následující chybu: %1$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error_with_user">Nelze vytvořit bleskovou fakturu. Zpráva od %1$s: %2$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json">Nepodařilo se vytvořit bleskovou fakturu před odesláním zap. Prvek pr nebyl nalezen v výsledném JSON.</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json_with_user">Nelze vytvořit bleskovou fakturu z %1$s: Prvek pr nebyl nalezen ve výsledném JSON.</string>
|
||||
<string name="read_only_user">Uživatel pouze pro čtení</string>
|
||||
<string name="no_reactions_setup">Žádné nastavení reakcí</string>
|
||||
<string name="select_push_server">Vyberte distributor push oznámení</string>
|
||||
|
|
|
@ -564,11 +564,16 @@ anz der Bedingungen ist erforderlich</string>
|
|||
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct_exception">Konnte %1$s nicht auflösen. Überprüfen Sie, ob Sie verbunden sind, ob der Server online ist und ob die Lightning-Adresse %2$s korrekt ist.\n\nAusnahme war: %3$s</string>
|
||||
<string name="could_not_fetch_invoice_from">Konnte Rechnung nicht von %1$s abholen</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup">Fehler beim analysieren von JSON aus der Lightning-Adresse. Überprüfen Sie die Lightning-Konfiguration des Benutzers</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup_with_user">Fehler beim Parsen von JSON von %1$s. Überprüfen Sie die Blitzeinrichtung des Benutzers</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration">Callback-URL nicht in der Serverkonfiguration der Lightning-Adresse des Benutzers gefunden</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration_with_user">Callback-URL aus %1$s Antwort nicht gefunden</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup">Fehler beim Parsen von JSON aus der Rechnungsabruf der Lightning-Adresse. Überprüfen Sie die Lightning-Konfiguration des Benutzers</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup_with_user">Fehler beim Parsen von JSON von %1$s. Überprüfen Sie die Blitzeinrichtung des Benutzers</string>
|
||||
<string name="incorrect_invoice_amount_sats_from_it_should_have_been">Falscher Rechnungsbetrag (%1$s Sats) von %2$s. Er hätte %3$s sein sollen</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error">Konnte keine Lightning-Rechnung erstellen, bevor der Zap gesendet wurde. Die Lightning-Wallet des Empfängers hat folgenden Fehler gesendet: %1$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error_with_user">Blitzrechnung konnte nicht erstellt werden. Nachricht von %1$s: %2$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json">Konnte keine Lightning-Rechnung erstellen, bevor der Zap gesendet wurde. Element pr wurde nicht in der resultierenden JSON gefunden.</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json_with_user">Kann keine Blitzrechnung von %1$s erstellen: Element pr nicht im resultierenden JSON gefunden.</string>
|
||||
<string name="read_only_user">Nur-Lese-Benutzer</string>
|
||||
<string name="no_reactions_setup">Keine Reaktionen eingerichtet</string>
|
||||
<string name="select_push_server">Einen Push-Benachrichtigungsanbieter auswählen</string>
|
||||
|
|
|
@ -561,11 +561,16 @@
|
|||
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct_exception">Impossible de résoudre %1$s. Vérifiez si vous êtes connecté, si le serveur est actif et si l\'adresse Lightning %2$s est correcte.\n\nL\'erreur était : %3$s</string>
|
||||
<string name="could_not_fetch_invoice_from">Impossible de récupérer la facture depuis %1$s</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup">Erreur lors de l\'analyse du JSON à partir de l\'Adresse Lightning. Vérifiez la configuration lightning de l\'utilisateur</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup_with_user">Erreur lors de l\'analyse du JSON de %1$s. Vérifiez la configuration lightning de l\'utilisateur</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration">URL de callback introuvable dans la configuration serveur de l\'adresse lightning de l\'utilisateur</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration_with_user">URL de callback introuvable dans la réponse de %1$s</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup">Erreur lors de l\'analyse du JSON à partir de la récupération de la facture de l\'Adresse Lightning. Vérifiez la configuration Lightning de l\'utilisateur</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup_with_user">Erreur lors de l\'analyse du JSON de la facture de %1$s. Vérifiez la configuration lightning de l\'utilisateur</string>
|
||||
<string name="incorrect_invoice_amount_sats_from_it_should_have_been">Montant de la facture (%1$s sats) incorrect de %2$s. Il aurait dû être %3$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error">Impossible de créer une facture lightning avant d\'envoyer le zap. Le portefeuille lightning du destinataire a envoyé l\'erreur suivante : %1$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error_with_user">Impossible de créer une facture lightning. Message de %1$s: %2$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json">Impossible de créer une facture lightning avant d\'envoyer le zap. Élément pr introuvable dans le JSON résultant.</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json_with_user">Impossible de créer une facture lightning avec %1$s. Élément pr introuvable dans le JSON résultant.</string>
|
||||
<string name="read_only_user">Utilisateur en lecture seule</string>
|
||||
<string name="no_reactions_setup">Aucune réaction configurée</string>
|
||||
<string name="select_push_server">Sélectionnez une application UnifiedPush</string>
|
||||
|
@ -700,4 +705,5 @@
|
|||
<string name="it_s_not_possible_to_react_to_a_draft_note">Il n\'est pas possible de réagir à un brouillon</string>
|
||||
<string name="it_s_not_possible_to_zap_to_a_draft_note">Il n\'est pas possible de zapper un brouillon</string>
|
||||
<string name="draft_note">Brouillon</string>
|
||||
<string name="load_from_text">Depuis message</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,20 +2,20 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="point_to_the_qr_code">क्यूआर क्रमचित्र के अभिमुख करें</string>
|
||||
<string name="show_qr">क्यूआर क्रमचित्र दिखाएँ</string>
|
||||
<string name="profile_image">स्व चित्र</string>
|
||||
<string name="your_profile_image">आपका चित्र</string>
|
||||
<string name="scan_qr">क्यूआर क्रमचित्र का जाँच करें</string>
|
||||
<string name="profile_image">परिचय चित्र</string>
|
||||
<string name="your_profile_image">आपका परिचय चित्र</string>
|
||||
<string name="scan_qr">क्यूआर क्रमचित्र को परखें</string>
|
||||
<string name="show_anyway">फिर भी दिखाएँ</string>
|
||||
<string name="post_was_hidden">इस लेख को छिपाया गया क्योंकि इसमें आपके आच्छाद्य उपयोगकर्ता अथवा शब्द उल्लेखित हैं</string>
|
||||
<string name="post_was_flagged_as_inappropriate_by">लेख को शान्त किया गया अथवा आपत्ति उठाया गया इनके द्वारा</string>
|
||||
<string name="post_not_found">घटना उपलब्ध किया जा रहा है अथवा आपके पुनःप्रसारक सूची द्वारा प्राप्य नही</string>
|
||||
<string name="post_was_hidden">इस प्रकाशित पत्र को छिपाया गया क्योंकि इसमें आपके आच्छाद्य उपयोगकर्ता अथवा शब्द उल्लेखित हैं</string>
|
||||
<string name="post_was_flagged_as_inappropriate_by">प्रकाशित पत्र को मौन किया गया अथवा आपत्ति उठाया गया इनके द्वारा</string>
|
||||
<string name="post_not_found">घटना उपलब्ध किया जा रहा है अथवा आपके पुनःप्रसारक सूची द्वारा प्राप्य नहीं</string>
|
||||
<string name="channel_image">प्रणाली चित्र</string>
|
||||
<string name="referenced_event_not_found">उद्धृत घटना अप्राप्त</string>
|
||||
<string name="could_not_decrypt_the_message">सन्देश का अरहस्यकरण असफल</string>
|
||||
<string name="could_not_decrypt_the_message">सन्देश का अरहस्यीकरण असफल</string>
|
||||
<string name="group_picture">समूह चित्र</string>
|
||||
<string name="explicit_content">अभद्र विषयवस्तु</string>
|
||||
<string name="spam">कचरा</string>
|
||||
<string name="impersonation">ढोंग</string>
|
||||
<string name="impersonation">पररूपण</string>
|
||||
<string name="illegal_behavior">अवैध बरताव</string>
|
||||
<string name="other">अन्य</string>
|
||||
<string name="unknown">अज्ञात</string>
|
||||
|
@ -29,16 +29,16 @@
|
|||
<string name="timestamp_pending">समयांकन : शेष पुष्टिकरण</string>
|
||||
<string name="timestamp_pending_short">समयांकन : शेष</string>
|
||||
<string name="request_deletion">हटाने की याचना</string>
|
||||
<string name="block_report">अवरोधित करें / सूचना दें</string>
|
||||
<string name="block_hide_user"><![CDATA[अवरोधित करें तथा उपयोगकर्ता को छिपाएँ]]></string>
|
||||
<string name="block_report">बाधित करें / सूचना दें</string>
|
||||
<string name="block_hide_user"><![CDATA[बाधित करें तथा उपयोगकर्ता को छिपाएँ]]></string>
|
||||
<string name="report_spam_scam">कचरा / घोटाला की सूचना दें</string>
|
||||
<string name="report_impersonation">ढोंग की सूचना दें</string>
|
||||
<string name="report_impersonation">पररूपण की सूचना दें</string>
|
||||
<string name="report_explicit_content">अभद्र विषयवस्तु की सूचना दें</string>
|
||||
<string name="report_illegal_behaviour">अवैध बरताव की सूचना दें</string>
|
||||
<string name="login_with_a_private_key_to_be_able_to_reply">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। प्रत्युत्तर देने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
|
||||
<string name="login_with_a_private_key_to_be_able_to_boost_posts">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। टीकाओं को उद्धृत करने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
|
||||
<string name="login_with_a_private_key_to_like_posts">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। टीकाओं को चाहने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
|
||||
<string name="no_zap_amount_setup_long_press_to_change">ज्साप संख्या स्थापित नही किया गया। दीर्घतः दबाएँ परिवर्तित करने के लिए</string>
|
||||
<string name="login_with_a_private_key_to_be_able_to_reply">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। उत्तर देने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
|
||||
<string name="login_with_a_private_key_to_be_able_to_boost_posts">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। प्रकाशित पत्रों को उद्धृत करने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
|
||||
<string name="login_with_a_private_key_to_like_posts">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। प्रसारणों को चाहने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
|
||||
<string name="no_zap_amount_setup_long_press_to_change">ज्साप मात्रा स्थापित नहीं किया गया। दीर्घतः दबाएँ परिवर्तित करने के लिए</string>
|
||||
<string name="login_with_a_private_key_to_be_able_to_send_zaps">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। ज्साप भेजने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
|
||||
<string name="login_with_a_private_key_to_be_able_to_follow">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। अनुचरण करने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
|
||||
<string name="login_with_a_private_key_to_be_able_to_unfollow">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। अनुचरण रोकने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
|
||||
|
@ -54,26 +54,26 @@
|
|||
<string name="quote">वचन</string>
|
||||
<string name="fork">पथभेद</string>
|
||||
<string name="propose_an_edit">सम्पादन सुझाव दें</string>
|
||||
<string name="new_amount_in_sats">साट्स में नया संख्या</string>
|
||||
<string name="new_amount_in_sats">साट्स में नयी मात्रा</string>
|
||||
<string name="add">जोडें</string>
|
||||
<string name="replying_to">"उत्तर दें इनको "</string>
|
||||
<string name="and">" तथा "</string>
|
||||
<string name="in_channel">"प्रणाली अभ्यन्तर "</string>
|
||||
<string name="profile_banner">परिचय पृष्ठ चित्र</string>
|
||||
<string name="profile_banner">परिचय पृष्ठ चौडाचित्र</string>
|
||||
<string name="payment_successful">भुगतान सफल</string>
|
||||
<string name="error_parsing_error_message">अपक्रम संदेश परखने में अपक्रम</string>
|
||||
<string name="following">" अनुचरण"</string>
|
||||
<string name="following">" अनुचरण चालू"</string>
|
||||
<string name="followers">" अनुचर"</string>
|
||||
<string name="profile">परिचय</string>
|
||||
<string name="security_filters">सुरक्षा छलनी</string>
|
||||
<string name="security_filters">सुरक्षा छलनियाँ</string>
|
||||
<string name="log_out">निर्गमनांकन</string>
|
||||
<string name="show_more">अधिक दिखाएँ</string>
|
||||
<string name="lightning_invoice">लैटनिंग चालान</string>
|
||||
<string name="pay">भुगतान दें</string>
|
||||
<string name="pay">भुगतान करें</string>
|
||||
<string name="lightning_tips">लैटनिंग दान</string>
|
||||
<string name="note_to_receiver">ग्राहक के लिए सूचना</string>
|
||||
<string name="thank_you_so_much">बहुत धन्यवाद!</string>
|
||||
<string name="amount_in_sats">संख्या साट्स में</string>
|
||||
<string name="amount_in_sats">मात्रा साट्स में</string>
|
||||
<string name="send_sats">साट्स भेजें</string>
|
||||
<string name="error_parsing_preview_for">"%1$s का पूर्वीक्षण परखने में अपक्रम : %2$s"</string>
|
||||
<string name="preview_card_image_for">"%1$s के लिए पूर्वीक्षण पत्ता चित्र"</string>
|
||||
|
@ -84,13 +84,13 @@
|
|||
<string name="description">विवरण</string>
|
||||
<string name="about_us">"हमारा परिचय.. "</string>
|
||||
<string name="what_s_on_your_mind">आपके मन में क्या है।</string>
|
||||
<string name="post">टीका</string>
|
||||
<string name="post">पत्र प्रकाशन</string>
|
||||
<string name="save">अभिलेखित करें</string>
|
||||
<string name="create">बनाएँ</string>
|
||||
<string name="cancel">रोक दें</string>
|
||||
<string name="cancel">निरस्त करें</string>
|
||||
<string name="failed_to_upload_the_image">चित्र आरोहण असफल</string>
|
||||
<string name="relay_address">पुनःप्रसारक पता</string>
|
||||
<string name="posts">टीकाएँ</string>
|
||||
<string name="posts">पत्र</string>
|
||||
<string name="bytes">अष्टक</string>
|
||||
<string name="errors">अपक्रम</string>
|
||||
<string name="home_feed">मुख्य सूचनावली</string>
|
||||
|
@ -109,50 +109,450 @@
|
|||
<string name="avatar_url">अवतारचित्र जालपता</string>
|
||||
<string name="banner_url">चौडाचित्र जालपता</string>
|
||||
<string name="website_url">जालस्थान पता</string>
|
||||
<string name="ln_address">लै॰ने॰ पता</string>
|
||||
<string name="ln_url_outdated">लै॰ने॰ पता (पुराना)</string>
|
||||
<string name="image_saved_to_the_gallery">चित्र को चित्रालय में जोड दिया गया</string>
|
||||
<string name="ln_address">लै॰जाल पता</string>
|
||||
<string name="ln_url_outdated">लै॰जाल पता (पुराना)</string>
|
||||
<string name="image_saved_to_the_gallery">चित्र को चित्रालय क्रमक में जोड दिया गया</string>
|
||||
<string name="failed_to_save_the_image">चित्र को अभिलेखित करने में असफल</string>
|
||||
<string name="upload_image">चित्र आरोहण</string>
|
||||
<string name="uploading">आरोहण चल रहा है…</string>
|
||||
<string name="user_does_not_have_a_lightning_address_setup_to_receive_sats">उपयोगकर्ता का कोई लैटनिंग पता स्थापित नही जिसपर साट्स प्राप्त कर सके</string>
|
||||
<string name="user_does_not_have_a_lightning_address_setup_to_receive_sats">उपयोगकर्ता का कोई लैटनिंग पता स्थापित नहीं जिसपर साट्स प्राप्त कर सके</string>
|
||||
<string name="reply_here">"उत्तर यहाँ दें.. "</string>
|
||||
<string name="copies_the_note_id_to_the_clipboard_for_sharing">नोस्ट्र में बाँटने के लिए टीका विभेदक का प्रतिलिपि करता है योज्यफलक में</string>
|
||||
<string name="copy_channel_id_note_to_the_clipboard">प्रणाली विभेदक (टीका) का प्रतिलिपि करें योज्यफलक में</string>
|
||||
<string name="copies_the_note_id_to_the_clipboard_for_sharing">नोस्ट्र में बाँटने के लिए टीका विभेदक का प्रतिलिपि करता है टाँकाफलक में</string>
|
||||
<string name="copy_channel_id_note_to_the_clipboard">प्रणाली विभेदक (टीका) का प्रतिलिपि करें टाँकाफलक में</string>
|
||||
<string name="edits_the_channel_metadata">प्रणाली उपतथ्य का सम्पादन करता है</string>
|
||||
<string name="join">जुडें</string>
|
||||
<string name="known">ज्ञात</string>
|
||||
<string name="new_requests">नये अनुरोध</string>
|
||||
<string name="blocked_users">अवरोधित उपयोगकर्ता</string>
|
||||
<string name="blocked_users">बाधित उपयोगकर्ता</string>
|
||||
<string name="new_threads">नये सूत्र</string>
|
||||
<string name="conversations">संवाद</string>
|
||||
<string name="notes">टीकाएँ</string>
|
||||
<string name="replies">उत्तर</string>
|
||||
<string name="follows">"अनुचर"</string>
|
||||
<string name="replies">उत्तरें</string>
|
||||
<string name="follows">"अनुचरण कर्ता है"</string>
|
||||
<string name="reports">"सूचनाएँ"</string>
|
||||
<string name="more_options">अधिक विकल्प</string>
|
||||
<string name="relays">" पुनःप्रसारक"</string>
|
||||
<string name="website">जालस्थान</string>
|
||||
<string name="lightning_address">लैटनिंग पता</string>
|
||||
<string name="copies_the_nsec_id_your_password_to_the_clipboard_for_backup">NSEC विभेदक (आपका गुप्त पारणशब्द) का प्रतिलिपि करता है योज्यफलक में सुरक्षा के लिए</string>
|
||||
<string name="copy_private_key_to_the_clipboard">गुप्त कुंचिका का प्रतिलिपि करें योज्यफलक में</string>
|
||||
<string name="copies_the_public_key_to_the_clipboard_for_sharing">ख्याप्य कुंचिका का प्रतिलिपि करता है योज्यफलक में बाँटने के लिए</string>
|
||||
<string name="copy_public_key_npub_to_the_clipboard">ख्याप्य कुंचिका (NPub) का प्रतिलिपि करें योज्यफलक में</string>
|
||||
<string name="copies_the_nsec_id_your_password_to_the_clipboard_for_backup">NSEC विभेदक (आपका गुप्त पारणशब्द) का प्रतिलिपि करता है टाँकाफलक में सुरक्षा के लिए</string>
|
||||
<string name="copy_private_key_to_the_clipboard">गुप्त कुंचिका का प्रतिलिपि करें टाँकाफलक में</string>
|
||||
<string name="copies_the_public_key_to_the_clipboard_for_sharing">ख्याप्य कुंचिका का प्रतिलिपि करता है टाँकाफलक में बाँटने के लिए</string>
|
||||
<string name="copy_public_key_npub_to_the_clipboard">ख्याप्य कुंचिका (NPub) का प्रतिलिपि करें टाँकाफलक में</string>
|
||||
<string name="send_a_direct_message">सीधा संदेश भेजें</string>
|
||||
<string name="edits_the_user_s_metadata">उपयोगकर्ता के उपतथ्य का सम्पादन करता है</string>
|
||||
<string name="follow">अनुसरण करें</string>
|
||||
<string name="follow_back">प्रति अनुसरण करें</string>
|
||||
<string name="unblock">अवरोध हटाएँ</string>
|
||||
<string name="follow">अनुचरण करें</string>
|
||||
<string name="follow_back">प्रति अनुचरण करें</string>
|
||||
<string name="unblock">बाधा हटाएँ</string>
|
||||
<string name="copy_user_id">उपयोगकर्ता विभेदक का प्रतिलिपि करें</string>
|
||||
<string name="unblock_user">उपयोगकर्ता अवरोध हटाएँ</string>
|
||||
<string name="unblock_user">उपयोगकर्ता बाधा हटाएँ</string>
|
||||
<string name="npub_hex_username">"npub, उपयोगकर्ता नाम, लेख"</string>
|
||||
<string name="clear">मार्जित करें</string>
|
||||
<string name="clear">रिक्त करें</string>
|
||||
<string name="app_logo">क्रमक चिह्न</string>
|
||||
<string name="nsec_npub_hex_private_key">nsec.. अथवा npub..</string>
|
||||
<string name="ncryptsec_password">पारणशब्द कुंचिका को खोलने के लिए</string>
|
||||
<string name="ncryptsec_password">कुंचिका को खोलने के लिए पारणशब्द</string>
|
||||
<string name="show_password">पारणशब्द दिखाएँ</string>
|
||||
<string name="hide_password">पारणशब्द छिपाएँ</string>
|
||||
<string name="invalid_key">अमान्य कुंचिका</string>
|
||||
<string name="invalid_key_with_message">अमान्य कुंचिका : %1$s</string>
|
||||
<string name="i_accept_the">"मैं स्वीकार कर्ता हूँ "</string>
|
||||
<string name="terms_of_use">प्रयोग के नियम</string>
|
||||
<string name="acceptance_of_terms_is_required">नियमों को स्वीकृत करना अनिवार्य</string>
|
||||
<string name="password_is_required">पारणशब्द अनिवार्य</string>
|
||||
<string name="key_is_required">कुंचिका अनिवार्य</string>
|
||||
<string name="name_is_required">नाम अनिवार्य</string>
|
||||
<string name="login">प्रवेशांकन</string>
|
||||
<string name="sign_up">सदस्यता लें</string>
|
||||
<string name="create_account">लेखा बनाएँ</string>
|
||||
<string name="how_should_we_call_you">आपको कैसे सम्बोधित करें</string>
|
||||
<string name="don_t_have_an_account">क्या नोस्ट्र लेखा नहीं है?</string>
|
||||
<string name="already_have_an_account">क्या नोस्ट्र लेखा पहले से है?</string>
|
||||
<string name="create_a_new_account">नया लेखा बनाएँ</string>
|
||||
<string name="generate_a_new_key">नयी कुंचिका बनाएँ</string>
|
||||
<string name="loading_feed">सूचनावली प्राप्त किया जा रहा है</string>
|
||||
<string name="loading_account">लेखा प्राप्त किया जा रहा है</string>
|
||||
<string name="error_loading_replies">"उत्तरों को प्राप्त करने में अपक्रम "</string>
|
||||
<string name="try_again">पुनः प्रयास करें</string>
|
||||
<string name="feed_is_empty">सूचनावली रिक्त है।</string>
|
||||
<string name="refresh">नवीकरण</string>
|
||||
<string name="created">बनाया गया</string>
|
||||
<string name="with_description_of">इसके विवरण सहित</string>
|
||||
<string name="and_picture">तथा चित्र</string>
|
||||
<string name="changed_chat_name_to">चर्चा नाम यह बना दिया गया</string>
|
||||
<string name="description_to">इसका विवरण</string>
|
||||
<string name="and_picture_to">तथा इसका चित्र</string>
|
||||
<string name="leave">निर्गमन</string>
|
||||
<string name="unfollow">अनुचरण ना करें</string>
|
||||
<string name="channel_created">प्रणाली बनायी गयी</string>
|
||||
<string name="channel_information_changed_to">"प्रणाली सूचना परिवर्तित किया गया यथा"</string>
|
||||
<string name="public_chat">सार्वजनिक चर्चा</string>
|
||||
<string name="posts_received">पत्र प्राप्त</string>
|
||||
<string name="remove">हटाएँ</string>
|
||||
<string name="translations_auto">स्वचालित</string>
|
||||
<string name="translations_translated_from">इससे अनुवादित</string>
|
||||
<string name="translations_to">इस तक</string>
|
||||
<string name="translations_show_in_lang_first">प्रथम %1$s में दिखाएँ</string>
|
||||
<string name="translations_always_translate_to_lang">सर्वदा अनुवाद करें %1$s में</string>
|
||||
<string name="translations_never_translate_from_lang">कभी भी अनुवाद ना करें %1$s से</string>
|
||||
<string name="nip_05">नोस्ट्र पता</string>
|
||||
<string name="never">कभी नहीं</string>
|
||||
<string name="now">अभी</string>
|
||||
<string name="h">ह</string>
|
||||
<string name="m">म</string>
|
||||
<string name="d">ड</string>
|
||||
<string name="nudity">नग्नता</string>
|
||||
<string name="profanity_hateful_speech">अपशब्द / द्वेषपूर्ण भाषण</string>
|
||||
<string name="report_hateful_speech">द्वेषपूर्ण भाषण की सूचना दें</string>
|
||||
<string name="report_nudity_porn">नग्नता / अश्लील चित्र की सूचना दें</string>
|
||||
<string name="others">अन्य</string>
|
||||
<string name="mark_all_known_as_read">सब ज्ञात को पढ लिया चिह्नित करें</string>
|
||||
<string name="mark_all_new_as_read">सब नये को पढ लिया चिह्नित करें</string>
|
||||
<string name="mark_all_as_read">सब पढ लिया चिह्नित करें</string>
|
||||
<string name="backup_keys">कुंचिका सुरक्षित करें</string>
|
||||
<string name="account_backup_tips2_md" tools:ignore="Typos">## कुंचिका सुरक्षार्थ प्रतिलिपि तथा सुरक्षा सुझाव
|
||||
\n\nआपकी लेखा एक गुप्त कुंचिका से सुरक्षित किया गया है। कुंचिका अक्षरों की एक लम्बी श्रृंखला है जो **nsec1** से आरम्भ होता है। जिस किसी के पास यह कुंचिका है वह पत्र प्रकाशन कर सकेगा तथा आपका परिचय परिवर्तित कर सकेगा।
|
||||
\n\n- आपकी गुप्त कुंचिका किसी भी जालस्थान अथवा क्रमक में **ना** डालें जिसपर आपका विश्वास ना हो।
|
||||
\n- अमेथिस्ट क्रमलेख विकासकर्ता आपकी गुप्त कुंचिका **कभी नहीं** पूछेंगे।
|
||||
\n- आपकी गुप्त कुंचिका की एक सुरक्षित प्रतिलिपि **अवश्य** रखें अपनी लेखा पुनः प्राप्त करने के लिए। पारणशब्ध प्रबंधन क्रमक की पुनःशंसा करते हैं।
|
||||
</string>
|
||||
<string name="account_backup_tips3_md" tools:ignore="Typos"> अधिक सुरक्षा के लिए आप अपनी कुंचिका का रहस्यीकरण कर सकते हैं एक पारणशब्द के साथ। यह कुंचिका आरम्भ होगी **ncryptsec1** से तथा पारणशब्द के बिना प्रयोग साध्य नहीं।
|
||||
\n\n यदि आप अपना पारणशब्द खो देते हैं, तो आप अपनी कुंचिका को पुनः प्राप्त नहीं कर सकते।
|
||||
</string>
|
||||
<string name="failed_to_encrypt_key">आपकी निजी कुंचिका का रहस्यीकरण असफल</string>
|
||||
<string name="secret_key_copied_to_clipboard">गुप्त कुंचिका (nsec) की प्रतिलिपि टाँकाफलक में डाला गया।</string>
|
||||
<string name="copy_my_secret_key">मेरी गुप्त कुंचिका की प्रतिलिपि बनाएँ</string>
|
||||
<string name="encrypt_and_copy_my_secret_key">मेरी गुप्त कुंचिका का रहस्यीकरण करें तथा प्रतिलिपि बनाएँ</string>
|
||||
<string name="biometric_authentication_failed">प्रमाणीकरण असफल</string>
|
||||
<string name="biometric_authentication_failed_explainer">जैविकमात्राएँ द्वारा इस संचारयन्त्र के अधिपति का प्रमाणीकरण असफल</string>
|
||||
<string name="biometric_authentication_failed_explainer_with_error">जैविकमात्राएँ द्वारा इस संचारयन्त्र के अधिपति का प्रमाणीकरण असफल। अपक्रम : %1$s</string>
|
||||
<string name="biometric_error">अपक्रम</string>
|
||||
<string name="badge_created_by">"%1$s के द्वारा बनाया गया"</string>
|
||||
<string name="badge_award_image_for">"पदक पुरस्कार चित्र %1$s के लिए"</string>
|
||||
<string name="new_badge_award_notif">आपको नया पदक पुरस्कार प्राप्त हुआ</string>
|
||||
<string name="award_granted_to">पदक पुरस्कार इनको दिया गया</string>
|
||||
<string name="copied_note_text_to_clipboard">टीका लेख की प्रतिलिपि किया गया टाँकाफलक में</string>
|
||||
<string name="copied_user_id_to_clipboard" tools:ignore="Typos">लेखक का @npub की प्रतिलिपि किया गया टाँकाफलक में</string>
|
||||
<string name="copied_note_id_to_clipboard" tools:ignore="Typos">टीका विभेदक (@note1) की प्रतिलिपि किया गया टाँकाफलक में</string>
|
||||
<string name="select_text_dialog_top">लेख चुनें</string>
|
||||
<string name="private_conversation_notification">"<निजी संदेश का अरहस्यीकरण असफल>\n\nआप का उल्लेख किया गया एक निजी / रहस्यीकृत संवाद में %1$s तथा %2$s के बीच."</string>
|
||||
<string name="account_switch_add_account_dialog_title">लेखा</string>
|
||||
<string name="drawer_accounts">लेखाएँ</string>
|
||||
<string name="account_switch_select_account">लेखा चुनें</string>
|
||||
<string name="account_switch_add_account_btn">नया लेखा जोडें</string>
|
||||
<string name="account_switch_active_account">सक्रिय लेखा</string>
|
||||
<string name="account_switch_has_private_key">निजी कुंचिका उपलब्ध</string>
|
||||
<string name="account_switch_pubkey_only">केवल पढ सकते हैं, निजी कुंचिका नहीं</string>
|
||||
<string name="back">पीछे चलें</string>
|
||||
<string name="quick_action_select">चयन करें</string>
|
||||
<string name="quick_action_share_browser_link">जालसंचारक पता बाँटें</string>
|
||||
<string name="quick_action_share">बाँटें</string>
|
||||
<string name="quick_action_copy_user_id">लेखक विभेदक</string>
|
||||
<string name="quick_action_copy_note_id">टीका विभेदक</string>
|
||||
<string name="quick_action_copy_text">लेख की प्रतिलिपि करें</string>
|
||||
<string name="quick_action_delete">मिटाएँ</string>
|
||||
<string name="quick_action_unfollow">अनुचरण ना करें</string>
|
||||
<string name="quick_action_follow">अनुचरण करें</string>
|
||||
<string name="quick_action_request_deletion_alert_title">हटाने की याचना</string>
|
||||
<string name="quick_action_request_deletion_alert_body">अमेथिस्ट अनुरोध करेगा कि आपका टीका मिटा दिया जाए उन पुनःप्रसारकों से जिनके साथ आप अब जुडे हुए हैं। कोई आश्वासन नहीं कि आपका टीका सर्वदा के लिए मिटा दिया जाएगा उन पुनःप्रसारकों से, अथवा अन्य पुनःप्रसारकों में से जहाँ यह रखा गया हो।</string>
|
||||
<string name="quick_action_block_dialog_btn">बाधित करें</string>
|
||||
<string name="quick_action_delete_dialog_btn">मिटाएँ</string>
|
||||
<string name="quick_action_block">अवरोधित करें</string>
|
||||
<string name="quick_action_report">सूचना</string>
|
||||
<string name="quick_action_delete_button">मिटाएँ</string>
|
||||
<string name="quick_action_dont_show_again_button">फिर से ना दिखाएँ</string>
|
||||
<string name="report_dialog_spam">कचरा अथवा घोटाला</string>
|
||||
<string name="report_dialog_profanity">अपशब्द अथवा द्वेषपूर्ण बरताव</string>
|
||||
<string name="report_dialog_impersonation">दुर्भावनापूर्ण पररूपण</string>
|
||||
<string name="report_dialog_nudity">नग्नता अथवा आपत्तिजनक विषयवस्तु</string>
|
||||
<string name="report_dialog_illegal">अवैध बरताव</string>
|
||||
<string name="report_dialog_blocking_a_user">उपयोगकर्ता को बाधित करने से उनका विषयवस्तु आपके लिए छिपाया जाएगा क्रमक में। आपके टीकाएँ सार्वजनिक रूप से दृश्य रहेंगे, उन जनों के लिए भी जिनहे आपने बाधित किया। बाधित उपयोगकर्ता सूचित हैं सुरक्षा छलनियाँ पटल पर।</string>
|
||||
<string name="report_dialog_block_hide_user_btn"><![CDATA[उपयोगकर्ता को बाधित करें तथा छिपाएँ]]></string>
|
||||
<string name="report_dialog_report_btn">दुर्व्यवहार की सूचना दें</string>
|
||||
<string name="report_dialog_reminder_public">सभी प्रकाशित सूचनाएँ सार्वजनिक रूप से दृश्य होंगे।</string>
|
||||
<string name="report_dialog_additional_reason_placeholder">विकल्पतः अधिक प्रसंग उपलब्ध करवाएँ आपकी सूचना के विषय में…</string>
|
||||
<string name="report_dialog_additional_reason_label">अधिक प्रसंग</string>
|
||||
<string name="report_dialog_select_reason_label">कारण</string>
|
||||
<string name="report_dialog_select_reason_placeholder">एक कारण का चयन करें…</string>
|
||||
<string name="report_dialog_post_report_btn">सूचना प्रकाशित करें</string>
|
||||
<string name="report_dialog_title">बाधित करें तथा सूचना दें</string>
|
||||
<string name="block_only">बाधित करें</string>
|
||||
<string name="bookmarks">स्मारकचिह्न</string>
|
||||
<string name="drafts">पाण्डुलिपियाँ</string>
|
||||
<string name="private_bookmarks">निजी स्मारकचिह्नित वस्तु</string>
|
||||
<string name="public_bookmarks">सार्वजनिक स्मारकचिह्नित वस्तु</string>
|
||||
<string name="add_to_private_bookmarks">निजी स्मारकचिह्नित वस्तु सूची में जोडें</string>
|
||||
<string name="add_to_public_bookmarks">सार्वजनिक स्मारकचिह्नित वस्तु सूची में जोडें</string>
|
||||
<string name="remove_from_private_bookmarks">निजी स्मारकचिह्नित वस्तु सूची से हटाएँ</string>
|
||||
<string name="remove_from_public_bookmarks">सार्वजनिक स्मारकचिह्नित वस्तु सूची से हटाएँ</string>
|
||||
<string name="wallet_connect_service">धनकोष संयोजन सेवा</string>
|
||||
<string name="wallet_connect_service_explainer">एक नोस्ट्र रहस्य को अधिकृत करता है ज्साप भुगतान करने के लिए क्रमक से बाहर चले बिना। रहस्य को सुरक्षित रखें तथा एक निजी पुनःप्रसारक का प्रयोग करें हो सके तो।</string>
|
||||
<string name="wallet_connect_service_pubkey">धनकोष संयोजन ख्याप्यकुंचिका</string>
|
||||
<string name="wallet_connect_service_relay">धनकोष संयोजन पुनःप्रसारक</string>
|
||||
<string name="wallet_connect_service_secret">धनकोष संयोजन रहस्य</string>
|
||||
<string name="wallet_connect_service_show_secret">गुप्त कुंचिका दिखाएँ</string>
|
||||
<string name="wallet_connect_service_secret_placeholder">nsec / षोडशांकरूप निजी कुंचिका</string>
|
||||
<string name="pledge_amount_in_sats">देय मात्रा साट्स में</string>
|
||||
<string name="post_poll">मतदान पत्र प्रकाशित करें</string>
|
||||
<string name="poll_heading_required">अनिवार्य प्रपत्रस्थान :</string>
|
||||
<string name="poll_zap_recipients">ज्साप के ग्राहक</string>
|
||||
<string name="poll_primary_description">प्रमुख मतदान विवरण…</string>
|
||||
<string name="poll_option_index">विकल्प %s</string>
|
||||
<string name="poll_option_description">मतदान विकल्प विवरण</string>
|
||||
<string name="poll_heading_optional">प्रपत्रस्थान जो अनिवार्य नहीं :</string>
|
||||
<string name="poll_zap_value_min">ज्साप न्यूनतम</string>
|
||||
<string name="poll_zap_value_max">ज्साप अधिकतम</string>
|
||||
<string name="poll_consensus_threshold">सर्वसम्मति</string>
|
||||
<string name="poll_consensus_threshold_percent">(० से १००) प्रतिशत</string>
|
||||
<string name="poll_closing_time">के पश्चात समाप्त करें</string>
|
||||
<string name="poll_closing_time_days">दिन</string>
|
||||
<string name="poll_unable_to_vote">मतदान देनें में असफल</string>
|
||||
<string name="poll_is_closed_explainer">मतदान समाप्त हो गया</string>
|
||||
<string name="poll_zap_amount">ज्साप मात्रा</string>
|
||||
<string name="one_vote_per_user_on_atomic_votes">प्रत्येक उपयोगकर्ता को केवल एक मत देने की अनुमति है इस प्रकार के मतदान में।</string>
|
||||
<string name="looking_for_event">"घटना %1$s के लिए खोज चल रहा है"</string>
|
||||
<string name="custom_zaps_add_a_message">सार्वजनिक संदेश जोडें</string>
|
||||
<string name="custom_zaps_add_a_message_private">निजी संदेश जोडें</string>
|
||||
<string name="custom_zaps_add_a_message_nonzap">चालान संदेश जोडें</string>
|
||||
<string name="custom_zaps_add_a_message_example">आपके परिश्रम के लिए धन्यवाद!</string>
|
||||
<string name="lightning_create_and_add_invoice">बनाएँ तथा जोडें</string>
|
||||
<string name="poll_author_no_vote">मतदानकर्ता अपने ही मतदान में मत नहीं दे सकते।</string>
|
||||
<string name="hash_verification_info_title">इसका अर्थ क्या है?</string>
|
||||
<string name="hash_verification_passed">यह विषयवस्तु वैसे ही है जैसे पत्र प्रकाशन पर</string>
|
||||
<string name="hash_verification_failed">यह विषयवस्तु परिवर्तित हुआ है। हो सकता है लेखक ने परिवर्तन देखा नहीं अथवा अनुमति दिया नहीं।</string>
|
||||
<string name="content_description_add_image">चित्र जोडें</string>
|
||||
<string name="content_description_add_video">चलचित्र जोडें</string>
|
||||
<string name="content_description_add_document">पत्र जोडें</string>
|
||||
<string name="add_content">संदेश मे जोड दें</string>
|
||||
<string name="content_description">विषयवस्तु का विवरण</string>
|
||||
<string name="content_description_example">एक नीला नाव श्वेत रेतीला तट पर सूर्यास्त पर</string>
|
||||
<string name="zap_type">ज्साप प्रकार</string>
|
||||
<string name="zap_type_explainer">ज्साप प्रकार सभी विकल्पों के लिए</string>
|
||||
<string name="zap_type_public">सार्वजनिक</string>
|
||||
<string name="zap_type_public_explainer">सब देख सकते हैं व्यापार तथा संदेश</string>
|
||||
<string name="zap_type_private">निजी</string>
|
||||
<string name="zap_type_private_explainer">भेजनेवाला तथा ग्राहक एक दूसरे को देख सकते हैं तथा संदेश पढ सकते हैं</string>
|
||||
<string name="zap_type_anonymous">नामरहित</string>
|
||||
<string name="zap_type_anonymous_explainer">ग्राहक तथा जनता को पता नहीं किसने भुगतान भेजा</string>
|
||||
<string name="zap_type_nonzap">ज्साप अतिरिक्त</string>
|
||||
<string name="zap_type_nonzap_explainer">नोस्ट्र में कोई पदचिह्न नहीं, केवल लैटनिंग पर</string>
|
||||
<string name="file_server">अभिलेख सेवाकर्ता</string>
|
||||
<string name="zap_forward_lnAddress">लै॰जाल पता अथवा @उपयोगकर्ता</string>
|
||||
<string name="upload_server_relays_nip95">आपके पुनःप्रसारक (NIP-95)</string>
|
||||
<string name="upload_server_relays_nip95_explainer">अभिलेख आपके पुनःप्रसारक द्वारा रखे जाते हैं। नया NIP: जाँच करें यदि वे सक्षम हैं</string>
|
||||
<string name="connect_via_tor_short">टोर / ओर्बोट स्थापन</string>
|
||||
<string name="connect_via_tor">आपकी ओर्बोट स्थापना द्वारा संयोजन करें</string>
|
||||
<string name="do_you_really_want_to_disable_tor_title">क्या आपके ओर्बोट / टोर से संयोजन काटें</string>
|
||||
<string name="do_you_really_want_to_disable_tor_text">आपके तथ्य तत्क्षणतः सामान्य जाल से चलने लगेंगे</string>
|
||||
<string name="yes">हाँ</string>
|
||||
<string name="no">नहीं</string>
|
||||
<string name="follow_list_selection">अनुचरण सूची</string>
|
||||
<string name="follow_list_kind3follows">सभी अनुचरण</string>
|
||||
<string name="follow_list_global">वैश्विक</string>
|
||||
<string name="follow_list_mute_list">मौन सूची</string>
|
||||
<string name="connect_through_your_orbot_setup_markdown"> ## टोर द्वारा संयोजन करें ओर्बोट के साथ
|
||||
\n\n१. स्थापित करें [ओर्बोट](https://play.google.com/store/apps/details?id=org.torproject.android)
|
||||
\n२. ओर्बोट आरम्भ करें
|
||||
\n३. ओर्बोट में, सोक्स॰ द्वार का जाँच करें। मूलविकल्पतः ९०५० का प्रयोग कर्ता है।
|
||||
\n४. यदि आवश्यक हो तो ओर्बोट में द्वार परिवर्तित करें
|
||||
\n५. सोक्स॰ द्वार की समाकृति स्थापित करें इस पटल पर
|
||||
\n६. सक्रिय करें घुण्डी दबाएँ ओर्बोट को घटक के रूप में प्रयोग करने के लिए
|
||||
</string>
|
||||
<string name="orbot_socks_port">ओर्बोट सोक्स॰ द्वार</string>
|
||||
<string name="invalid_port_number">द्वार अंक अमान्य</string>
|
||||
<string name="use_orbot">ओर्बोट का प्रयोग करें</string>
|
||||
<string name="disconnect_from_your_orbot_setup">टोर / ओर्बोट संयोजन काट दें</string>
|
||||
<string name="app_notification_dms_channel_name">निजी संदेश</string>
|
||||
<string name="app_notification_dms_channel_description">आपको सूचित करेगा जब एक निजी संदेश आता है</string>
|
||||
<string name="app_notification_zaps_channel_name">ज्साप प्राप्त</string>
|
||||
<string name="app_notification_zaps_channel_description">सूचित करेगा जब किसी ने आपको ज्साप किया</string>
|
||||
<string name="app_notification_zaps_channel_message">%1$s साट्स</string>
|
||||
<string name="app_notification_zaps_channel_message_from">%1$s से</string>
|
||||
<string name="app_notification_zaps_channel_message_for">%1$s के लिए</string>
|
||||
<string name="reply_notify">सूचित करें : </string>
|
||||
<string name="channel_list_join_conversation">संवाद में जुड जाएँ</string>
|
||||
<string name="channel_list_user_or_group_id">उपयोगकर्ता अथवा समूह विभेदक</string>
|
||||
<string name="channel_list_user_or_group_id_demo">npub, nevent अथवा षोडशांकरूप</string>
|
||||
<string name="channel_list_create_channel">बनाएँ</string>
|
||||
<string name="channel_list_join_channel">जुडें</string>
|
||||
<string name="today">आज</string>
|
||||
<string name="content_warning">विषयवस्तु चेतावनी</string>
|
||||
<string name="content_warning_explanation">इस पत्र में संवेदनशील विषयवस्तु समावेशित है जो कुछ लोगों के लिए आपत्तिजनक अथवा व्याकुल करनेवाला लग सकता है</string>
|
||||
<string name="content_warning_hide_all_sensitive_content">संवेदनशील विषयवस्तु सर्वदा छिपाएँ</string>
|
||||
<string name="content_warning_show_all_sensitive_content">संवेदनशील विषयवस्तु सर्वदा दिखाएँ</string>
|
||||
<string name="content_warning_see_warnings">विषयवस्तु चेतावनीयाँ सर्वदा दिखाएँ</string>
|
||||
<string name="recommended_apps">प्रशंसित : </string>
|
||||
<string name="filter_spam_from_strangers">अपरिचित जन के भेजे गये कचरा संदेश छलनी द्वारा हटाएँ</string>
|
||||
<string name="warn_when_posts_have_reports_from_your_follows">चेतावनी दें जब पत्र सूचित किये गये हों आपके अनुचरों द्वारा</string>
|
||||
<string name="new_reaction_symbol">नया प्रतिक्रिया चिह्न</string>
|
||||
<string name="no_reaction_type_setup_long_press_to_change">इस उपयोगकर्ता के लिए कोई प्रतिक्रिया प्रकार पूर्व चयनित नहीं। हृदयचिह्न घुण्डी पर दीर्घतः दबाएँ परिवर्तन करने के लिए</string>
|
||||
<string name="zapraiser">ज्सापोपार्जन योजना</string>
|
||||
<string name="zapraiser_explainer">इस प्रसारण के साथ साट्स मात्रा का उपार्जन लक्ष्य जोडता है। सक्षम ग्राहक दान का प्रोत्साहन हेतु एक प्रगतिमान डण्डा के रूप में इसे दिखा सकते हैं</string>
|
||||
<string name="zapraiser_target_amount_in_sats">लक्ष्य मात्रा साट्स में</string>
|
||||
<string name="sats_to_complete">ज्सापोपार्जन योजना %1$s पर। %2$s साट्स का लक्ष्य</string>
|
||||
<string name="read_from_relay">पुनःप्रसारक से पढें</string>
|
||||
<string name="write_to_relay">पुनःप्रसारक को लिखकर भेजें</string>
|
||||
<string name="an_error_occurred_trying_to_get_relay_information">%1$s से पुनःप्रसारक जानकारी प्राप्त करने के प्रयास में अपक्रम हुआ</string>
|
||||
<string name="owner">अधिपति</string>
|
||||
<string name="version">संस्करण</string>
|
||||
<string name="software">क्रमक</string>
|
||||
<string name="contact">सम्पर्क</string>
|
||||
<string name="supports">सक्षम NIPs</string>
|
||||
<string name="admission_fees">प्रवेश शुल्क</string>
|
||||
<string name="payments_url">भुगतान जालपता</string>
|
||||
<string name="limitations">परिसीमाएँ</string>
|
||||
<string name="countries">देश</string>
|
||||
<string name="languages">भाषाएँ</string>
|
||||
<string name="tags">लक्षणसूचक</string>
|
||||
<string name="posting_policy">पत्र प्रकाशन नीति</string>
|
||||
<string name="message_length">संदेश लम्बाई</string>
|
||||
<string name="subscriptions">ग्राहकताएँ</string>
|
||||
<string name="filters">छलनियाँ</string>
|
||||
<string name="subscription_id_length">ग्राहकता विभेदक की लम्बाई</string>
|
||||
<string name="minimum_prefix">न्यूनतम उपसर्ग</string>
|
||||
<string name="maximum_event_tags">अधिकतम घटना लक्षणसूचक</string>
|
||||
<string name="content_length">विषयवस्तु लम्बाई</string>
|
||||
<string name="minimum_pow">न्यूनतम PoW</string>
|
||||
<string name="auth">प्रमाणीकरण</string>
|
||||
<string name="payment">भुगतान</string>
|
||||
<string name="cashu">काश्यु लिपिखण्ड</string>
|
||||
<string name="cashu_redeem">चुकाएँ</string>
|
||||
<string name="cashu_redeem_to_zap">ज्साप धनकोष को भेजें</string>
|
||||
<string name="cashu_redeem_to_cashu">काश्यु धनकोष में खोलें</string>
|
||||
<string name="cashu_copy_token">लिपिखण्ड की प्रतिलिपि करें</string>
|
||||
<string name="no_lightning_address_set">लैटनिंग पता स्थापित नहीं</string>
|
||||
<string name="copied_token_to_clipboard">लिपिखण्ड की प्रतिलिपि किया गया टाँकाफलक में</string>
|
||||
<string name="live_stream_live_tag">तत्क्षणप्रसार</string>
|
||||
<string name="live_stream_offline_tag">जालरहित</string>
|
||||
<string name="live_stream_ended_tag">समाप्त</string>
|
||||
<string name="live_stream_planned_tag">समय निर्धारित</string>
|
||||
<string name="live_stream_is_offline">तत्क्षणप्रसार कट गया</string>
|
||||
<string name="live_stream_has_ended">तत्क्षणप्रसार समाप्त</string>
|
||||
<string name="are_you_sure_you_want_to_log_out">निर्गमनांकन करने पर आपकी सारी स्थानीय जानकारी मिट जाएगी। सुनिश्चित करें कि आपके निजी कुंचिकाएँ सुरक्षित रखें हैं अपनी लेखा नहीं खोना चाहते हैं तो। क्या आप आगे बढना चाहते हैं?</string>
|
||||
<string name="followed_tags">अनुचरण किये हुए विषयसूचक</string>
|
||||
<string name="relay_setup">पुनःप्रसारक</string>
|
||||
<string name="discover_marketplace">पण्यक्षेत्र</string>
|
||||
<string name="discover_live">तत्क्षणप्रसार</string>
|
||||
<string name="discover_community">समुदाय</string>
|
||||
<string name="discover_chat">चर्चाएँ</string>
|
||||
<string name="community_approved_posts">अनुमति प्राप्त पत्र</string>
|
||||
<string name="groups_no_descriptor">इस झुण्ड का कोई विवरण नहीं नियम नहीं। इसके अधिपति से बात करें इनहे जोडने के लिए</string>
|
||||
<string name="community_no_descriptor">इस समुदाय का कोई विवरण नहीं। इसके अधिपति से बात करें इसे जोडने के लिए</string>
|
||||
<string name="add_sensitive_content_label">संवेदनशील विषयवस्तु</string>
|
||||
<string name="add_sensitive_content_description">इसे दिखाने से पूर्व संवेदनशील विषयवस्तु चेतावनी जोडता है</string>
|
||||
<string name="settings">स्थापना विकल्प</string>
|
||||
<string name="connectivity_type_always">सर्वदा</string>
|
||||
<string name="connectivity_type_wifi_only">केवल वैफै</string>
|
||||
<string name="connectivity_type_never">कभी नहीं</string>
|
||||
<string name="ui_feature_set_type_complete">सम्पन्न</string>
|
||||
<string name="ui_feature_set_type_simplified">सरलीकृत</string>
|
||||
<string name="system">यन्त्रव्यवस्था</string>
|
||||
<string name="light">प्रकाशवान</string>
|
||||
<string name="dark">अन्धकारमय</string>
|
||||
<string name="application_preferences">क्रमक आद्यताएँ</string>
|
||||
<string name="language">भाषा</string>
|
||||
<string name="theme">प्रदर्शनशैली</string>
|
||||
<string name="automatically_load_images_gifs">चित्र पूर्वीक्षण</string>
|
||||
<string name="automatically_play_videos">चलचित्र का चालन</string>
|
||||
<string name="automatically_show_url_preview">जालपता पूर्वीक्षण</string>
|
||||
<string name="automatically_hide_nav_bars">निमग्न पृष्ठघुमाव</string>
|
||||
<string name="automatically_hide_nav_bars_description">मार्गदर्शनपट्टों को छिपाएँ पृष्ठघुमाव करने पर</string>
|
||||
<string name="ui_style">प्रयोगमाध्यम ढंग</string>
|
||||
<string name="ui_style_description">पत्र शैली का चयन करें</string>
|
||||
<string name="load_image">चित्र प्राप्त करें</string>
|
||||
<string name="spamming_users">कचराकार</string>
|
||||
<string name="muted_button">मौन किया गया। सुनने के लिए टाँकें</string>
|
||||
<string name="mute_button">ध्वनि सक्रिय। मौन करने के लिए टाँकें</string>
|
||||
<string name="search_button">स्थानीय तथा दूरस्थ अभिलेखों को खोजें</string>
|
||||
<string name="nip05_verified">नोस्ट्र पता का सत्यापन सफल</string>
|
||||
<string name="nip05_failed">नोस्ट्र पता का सत्यातन असफल</string>
|
||||
<string name="nip05_checking">नोस्ट्र पता का जाँच चल रहा है</string>
|
||||
<string name="select_deselect_all">सब का चयन / अचयन करें</string>
|
||||
<string name="default_relays">मूलविकल्प</string>
|
||||
<string name="select_a_relay_to_continue">पुनःप्रसारक चुनें आगे बढने के लिए</string>
|
||||
<string name="zap_forward_title">ज्साप आगे भेजें इनको :</string>
|
||||
<string name="zap_forward_explainer">सक्षम ग्राहक ज्सापों को आगे भेजेंगे इस लै॰जाल पता को अथवा उपयोगकर्ता परिचय जो नीचे है तथा आपके पते को नहीं</string>
|
||||
<string name="geohash_title">स्थान अनावृत करें इस प्रकार </string>
|
||||
<string name="geohash_explainer">आपका भूगोलिक स्थान विभेदक जोडता है प्रसारण में। जनता जान जाएँगे आप वर्तमान स्थान से ५ कि॰मे॰ (३ मी॰) की दूरी के अन्दर हैं</string>
|
||||
<string name="add_sensitive_content_explainer">आपके विषयवस्तु दिखाने से पूर्व संवेदनशील विषयवस्तु चेतावनी जोडता है। यह आदर्श है किसी कार्यालय अनुचित विषयवस्तु के लिए अथवा जिससे कुछ लोगों को आपत्तिजनक अथवा व्याकुल करनेवाला लग सकता है</string>
|
||||
<string name="new_feature_nip24_might_not_be_available_title">नयी सुविधा</string>
|
||||
<string name="new_feature_nip24_might_not_be_available_description">इस कार्यशैली सक्षम करने के लिए अमेथिस्ट के द्वारा NIP-24 संदेश (उपहारकोषयुक्त, आच्छादित सीधा तथा झुण्ड संदेश) भेजना पडेगा। यह NIP-24 नया है तथा अनेक ग्राहक इसे कार्यान्वित किया नहीं अब तक। सुनिश्चित करें कि प्राप्तकर्ता एक अनुकूल ग्राहक का प्रयोग कर रहे हैं।</string>
|
||||
<string name="new_feature_nip24_activate">सक्रिय करें</string>
|
||||
<string name="messages_create_public_chat">सार्वजनिक</string>
|
||||
<string name="messages_create_public_private_chat_desription">नया निजी अथवा सार्वजनिक झुण्ड</string>
|
||||
<string name="messages_new_message">निजी</string>
|
||||
<string name="messages_new_message_to">के लिए</string>
|
||||
<string name="messages_new_message_subject">विषय</string>
|
||||
<string name="messages_new_message_subject_caption">संवाद का विषय</string>
|
||||
<string name="messages_new_message_to_caption">"\@User1, @User2, @User3"</string>
|
||||
<string name="messages_group_descriptor">इस झुण्ड के सदस्य</string>
|
||||
<string name="messages_new_subject_message">सदस्यों के लिए व्याख्यान</string>
|
||||
<string name="messages_new_subject_message_placeholder">नये लक्ष्य के लिए नाम का परिवर्तन</string>
|
||||
<string name="paste_from_clipboard">टाँकाफलक से चिपकाएँ</string>
|
||||
<string name="language_description">क्रमक के प्रयोगमाध्यम के लिए</string>
|
||||
<string name="theme_description">अन्धकारमय, प्रकाशवान अथवा यन्त्रव्यवस्था प्रदर्शनशैली</string>
|
||||
<string name="automatically_load_images_gifs_description">स्वचालित रूप से चित्र तथा GIFs का अवरोहण करें</string>
|
||||
<string name="automatically_play_videos_description">स्वचालित रूप से चलचित्र तथा GIFs चलाता है</string>
|
||||
<string name="automatically_show_url_preview_description">जालपता के पूर्विक्षण दिखाएँ</string>
|
||||
<string name="load_image_description">चित्रों का अवरोहण कब करें</string>
|
||||
<string name="copy_to_clipboard">टाँकाफलक पर प्रतिलिपि लगाएँ</string>
|
||||
<string name="copy_npub_to_clipboard">टाँकाफलक पर npub की प्रतिलिपि लगाएँ</string>
|
||||
<string name="copy_url_to_clipboard">टाँकाफलक पर जालपता की प्रतिलिपि लगाएँ</string>
|
||||
<string name="copy_the_note_id_to_the_clipboard">टाँकाफलक पर टीका विभेदक की प्रतिलिपि लगाएँ</string>
|
||||
<string name="created_at">पर बनाया गया</string>
|
||||
<string name="rules">नियमावली</string>
|
||||
<string name="login_with_external_signer">आम्बेर के साथ प्रवेशांकन करें</string>
|
||||
<string name="status_update">आपकी स्थिति का नवीकरण करें</string>
|
||||
<string name="lightning_wallets_not_found">अपक्रम संदेश परखने में अपक्रम</string>
|
||||
<string name="poll_zap_value_min_max_explainer">निर्वाचन का भार ज्साप मात्रा के अनुसार माना जाता है। आप एक न्यूनतम मात्रा स्थापित कर सकते हैं कचरालेखकर्ताओं से बचने के लिए तथा एक अधिकतम मात्रा बडे ज्सापकर्ताओं के द्वारा मतदान का अधिग्रहण होने से बचने के लिए। दोनों स्थानों में एक ही मात्रा का प्रयोग करें प्रत्येक निर्वाचन का मूल्य समान मानने को सुनिश्चित करने के लिए। रिक्त रख दें कुछ भी मात्रा स्वीकार करने के लिए।</string>
|
||||
<string name="error_dialog_zap_error">ज्साप भेजने में असफल</string>
|
||||
<string name="error_dialog_talk_to_user">उपयोगकर्ता को संदेश भेजें</string>
|
||||
<string name="error_dialog_button_ok">ठीक है</string>
|
||||
<string name="relay_information_document_error_assemble_url">%1$s तक जा नहीं पाए : %2$s</string>
|
||||
<string name="relay_information_document_error_reach_server">%1$s तक जा नहीं पाए : %2$s</string>
|
||||
<string name="relay_information_document_error_parse_result">%1$s से परिणाम परख नहीं पाए : %2$s</string>
|
||||
<string name="relay_information_document_error_http_status">%1$s असफल हुआ इस संकेतक के साथ : %2$s</string>
|
||||
<string name="active_for">के लिए सक्रिय : </string>
|
||||
<string name="active_for_home">मुखपृष्ठ</string>
|
||||
<string name="active_for_msg">सीधे संदेश</string>
|
||||
<string name="active_for_chats">चर्चाएँ</string>
|
||||
<string name="active_for_global">वैश्विक</string>
|
||||
<string name="active_for_search">खोज</string>
|
||||
<string name="zap_split_title">ज्साप विभाजन करें तथा आगे भेजें</string>
|
||||
<string name="zap_split_explainer">सक्षम ग्राहक ज्सापों का विभाजन करेंगे तथा यहाँ जोडे गये उपयोगकर्ताओं को आगे भेजेंगे आपके स्थान पर</string>
|
||||
<string name="zap_split_search_and_add_user">खोजें तथा उपयोगकर्ता जोडें</string>
|
||||
<string name="zap_split_search_and_add_user_placeholder">उपयोगकर्ता नाम अथवा प्रदर्शन नाम</string>
|
||||
<string name="missing_lud16">लैटनिंग स्थापना अनुपलब्ध</string>
|
||||
<string name="user_x_does_not_have_a_lightning_address_setup_to_receive_sats">उपयोगकर्ता %1$s का कोई लैटनिंग पता स्थापित नही साट्स प्राप्त करने के लिए</string>
|
||||
<string name="zap_split_weight">प्रतिशत</string>
|
||||
<string name="zap_split_weight_placeholder">२५</string>
|
||||
<string name="splitting_zaps_with">ज्साप का विभाजन इसके साथ</string>
|
||||
<string name="forwarding_zaps_to">ज्साप आगे भेजा जा रहा है इनको</string>
|
||||
<string name="lightning_wallets_not_found2">लैटनिंग धनकोष ढूँढने में असफल</string>
|
||||
<string name="paid">भुगतान किया गया</string>
|
||||
<string name="wallet_number">धनकोष %1$s</string>
|
||||
<string name="error_opening_external_signer">हस्ताक्षर क्रमक खोलने में अपक्रम</string>
|
||||
<string name="error_opening_external_signer_description">हस्ताक्षर क्रमक ढूँढने में असफल। जाँच करें यदि क्रमक को अस्थापित नहीं किया गया हो</string>
|
||||
<string name="sign_request_rejected">हस्ताक्षर याचना अस्वीकृत</string>
|
||||
<string name="sign_request_rejected_description">सुनिश्चित करें हस्ताक्षर क्रमक ने इस व्यापार को अनुमति दिया</string>
|
||||
<string name="no_wallet_found_with_error">कोई धनकोष प्राप्त नहीं लैटनिंग चालान चुकाने के लिए (अपक्रम : %1$s)। कृपया एक लैटनिंग धनकोष की स्थापना करें ज्सापों का प्रयोग करने के लिए</string>
|
||||
<string name="no_wallet_found">कोई धनकोष प्राप्त नहीं लैटनिंग चालान चुकाने के लिए। कृपया एक लैटनिंग धनकोष की स्थापना करें ज्सापों का प्रयोग करने के लिए</string>
|
||||
<string name="hidden_words">छिपाए गये शब्द</string>
|
||||
<string name="hide_new_word_label">नया शब्द अथवा वाक्य छिपाएँ</string>
|
||||
<string name="automatically_show_profile_picture">परिचय चित्र</string>
|
||||
<string name="automatically_show_profile_picture_description">परिचय चित्र दिखाएँ</string>
|
||||
<string name="select_an_option">विकल्प का चयन करें</string>
|
||||
<string name="error_dialog_pay_invoice_error">चालान का भुगतान नहीं कर पाए</string>
|
||||
<string name="error_dialog_pay_withdraw_error">निकाल नहीं पाए</string>
|
||||
<string name="error_parsing_nip47_title">धनकोष संयोजन स्थापित नहीं कर पाए</string>
|
||||
<string name="error_parsing_nip47">NIP-47 संयोजन सूत्र परखने में अपक्रम। जाँच करें यदि यह सम्यक है अपने धनकोष सेवा प्रदाता के साथ : %1$s। अपक्रम : %2$s</string>
|
||||
<string name="error_parsing_nip47_no_error">NIP-47 संयोजन सूत्र परखने में अपक्रम। जाँच करें यदि यह सम्यक है अपने धनकोष सेवा प्रदाता के साथ : %1$s।</string>
|
||||
<string name="cashu_failed_redemption">काश्यु नहीं चुका पाए</string>
|
||||
<string name="cashu_failed_redemption_explainer_error_msg">टकसाल ने यह अपक्रम संदेश उपलब्ध किया : %1$s</string>
|
||||
<string name="cashu_failed_redemption_explainer_already_spent">काश्यु लिपिखण्ड का व्यय हो चुका।</string>
|
||||
<string name="cashu_successful_redemption">काश्यु प्राप्त</string>
|
||||
<string name="cashu_successful_redemption_explainer">%1$s साट्स भेजे गये आपके धनकोष में। (शुल्क : %2$s साट्स)</string>
|
||||
<string name="cashu_no_wallet_found">कोई अनुकूल काश्यु धनकोष उपलब्ध नहीं यन्त्र में</string>
|
||||
<string name="error_unable_to_fetch_invoice">प्राप्तकर्ता के सेवा संगणक से चालान नहीं लाया जा सका</string>
|
||||
<string name="wallet_connect_pay_invoice_error_error">आपका धनकोष संयोजन प्रदाता ने यह अपक्रम लौटाया : %1$s</string>
|
||||
<string name="could_not_connect_to_tor">टोर से जुड नहीं पाए</string>
|
||||
<string name="unable_to_download_relay_document">पुनःप्रसारक पत्र का अवरोहण अनुपलब्ध</string>
|
||||
</resources>
|
||||
|
|
|
@ -559,11 +559,16 @@
|
|||
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct_exception">Não foi possível resolver %1$s. Verifique se você está conectado, se o servidor está funcionando e se o endereço Lightning %2$s está correto.\n\nExceção foi: %3$s</string>
|
||||
<string name="could_not_fetch_invoice_from">Não foi possível obter a fatura de %1$s</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup">Erro ao analisar JSON do Endereço Lightning. Verifique a configuração de Lightning do usuário</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup_with_user">Erro ao analisar JSON do %1$s. Verifique a configuração lightning do usuário</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration">URL de retorno não encontrada na configuração do servidor de endereço Lightning do usuário</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration_with_user">URL de retorno de chamada não encontrado da resposta %1$s</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup">Erro ao analisar o pedido de fatura do endereço Lightning. Verifique a configuração de Lightning do usuário</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup_with_user">Erro ao analisar JSON da busca de fatura %1$s. Verifique a configuração de iluminação do usuário</string>
|
||||
<string name="incorrect_invoice_amount_sats_from_it_should_have_been">Quantidade incorreta na fatura (%1$s sats) de %2$s. Deveria ser %3$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error">Não foi possível criar uma fatura Lightning antes de enviar o zap. A carteira Lightning do destinatário enviou o seguinte erro: %1$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error_with_user">Não foi possível criar uma fatura com raios. Mensagem do %1$s: %2$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json">Não foi possível criar uma fatura Lightning antes de enviar o zap. O elemento pr não foi encontrado no JSON resultante.</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json_with_user">Não foi possível criar uma fatura lightning a partir de %1$s: Elemento pr não encontrado no JSON resultante.</string>
|
||||
<string name="read_only_user">Usuário somente leitura</string>
|
||||
<string name="no_reactions_setup">Nenhuma configuração de reações</string>
|
||||
<string name="select_push_server">Selecione um Distribuidor de Notificações Push</string>
|
||||
|
|
|
@ -558,11 +558,16 @@
|
|||
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct_exception">Kunde inte lösa %1$s. Kontrollera om du är ansluten, om servern är uppe och om Lightning Addressen %2$s är korrekt.\n\nUndantag var: %3$s</string>
|
||||
<string name="could_not_fetch_invoice_from">Kunde inte hämta fakturan från %1$s</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup">Fel vid tolkning av JSON från Lightning Address. Kontrollera användarens Lightning-konfiguration</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup_with_user">Fel vid tolkning av JSON från %1$s. Kontrollera användarens blixtkonfiguration</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration">Återuppringnings-URL hittades inte i användarens konfiguration för Lightning Address-servern</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration_with_user">Callback URL hittades inte från %1$s\'s svar</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup">Fel vid tolkning av JSON från Lightning Address fakturahämtning. Kontrollera användarens Lightning-konfiguration</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup_with_user">Fel vid tolkning av JSON från %1$ss fakturahämtning. Kontrollera användarens blixtkonfiguration</string>
|
||||
<string name="incorrect_invoice_amount_sats_from_it_should_have_been">Felaktig fakturabelopp (%1$s sats) från %2$s. Det borde ha varit %3$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error">Kunde inte skapa en Lightning-faktura innan Zap skickades. Mottagarens Lightning-plånbok skickade följande fel: %1$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error_with_user">Det gick inte att skapa en blixt faktura. Meddelande från %1$s: %2$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json">Kunde inte skapa en Lightning-faktura innan Zap skickades. Elementet pr hittades inte i den resulterande JSON.</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json_with_user">Det gick inte att skapa en blixtfaktura från %1$s: Elementet pr hittades inte i den resulterande JSON.</string>
|
||||
<string name="read_only_user">Skrivskyddad användare</string>
|
||||
<string name="no_reactions_setup">Inga reaktioner konfigurerade</string>
|
||||
<string name="select_push_server">Välj en Push-meddelandetjänst</string>
|
||||
|
|
|
@ -275,6 +275,7 @@
|
|||
<string name="report_dialog_title">阻止与举报</string>
|
||||
<string name="block_only">仅阻止</string>
|
||||
<string name="bookmarks">书签</string>
|
||||
<string name="drafts">草稿</string>
|
||||
<string name="private_bookmarks">私人书签</string>
|
||||
<string name="public_bookmarks">公开书签</string>
|
||||
<string name="add_to_private_bookmarks">添加到私人书签</string>
|
||||
|
@ -559,11 +560,16 @@
|
|||
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct_exception">无法解析 %1$s。请检查你是否已连接,服务器是否启动,以及闪电地址 %2$s 是否正确。\n\n异常为:%3$s</string>
|
||||
<string name="could_not_fetch_invoice_from">无法从 %1$s 获取发票</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup">从闪电地址解析JSON出错。请检查用户的打闪设置</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup_with_user">从 %1$s 解析 JSON 发生错误。请检查用户的闪电设置</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration">在用户闪电地址服务器配置中找不到回调URL</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration_with_user">从 %1$s 的响应中找不到回调 URL</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup">从闪电地址的发票获取解析JSON 发生错误。请检查用户的闪电设置</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup_with_user">从 %1$s 的闪电发票获取解析JSON 发生错误。请检查用户的闪电设置</string>
|
||||
<string name="incorrect_invoice_amount_sats_from_it_should_have_been">来自 %2$s 的错误的发票金额(%1$s 聪)。它本应该是 %3$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error">无法在发送打闪前创建闪电发票。接收者闪电钱包发送了以下错误: %1$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error_with_user">无法创建闪电发票。来自 %1$s 的消息:%2$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json">无法在发送打闪前创建闪电发票。在生成的 JSON 中找不到 Element pr。</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json_with_user">无法从 %1$s 创建闪电发票:在生成的 JSON 中找不到付款要求元素。</string>
|
||||
<string name="read_only_user">仅读用户</string>
|
||||
<string name="no_reactions_setup">没有设置回应</string>
|
||||
<string name="select_push_server">选择一个统一推送应用</string>
|
||||
|
@ -621,6 +627,7 @@
|
|||
<string name="server_did_not_provide_a_url_after_uploading">上传后服务器没有提供 URL</string>
|
||||
<string name="could_not_download_from_the_server">无法从服务器下载上传的媒体</string>
|
||||
<string name="could_not_prepare_local_file_to_upload">无法准备要上传的本地文件:%1$s</string>
|
||||
<string name="edit_draft">编辑草稿</string>
|
||||
<string name="login_with_qr_code">使用二维码登录</string>
|
||||
<string name="route">路径</string>
|
||||
<string name="route_home">主页</string>
|
||||
|
@ -664,6 +671,8 @@
|
|||
<string name="zap_the_devs_title">打闪开发人员!</string>
|
||||
<string name="zap_the_devs_description">你的捐赠帮助我们做出不同的贡献。每个聪都很重要!</string>
|
||||
<string name="donate_now">立即捐款</string>
|
||||
<string name="brought_to_you_by">赞助方:</string>
|
||||
<string name="this_version_brought_to_you_by">此版本赞助商:</string>
|
||||
<string name="version_name">版本 %1$s</string>
|
||||
<string name="thank_you">谢谢!</string>
|
||||
<string name="max_limit">最大上限</string>
|
||||
|
@ -686,4 +695,10 @@
|
|||
<string name="accessibility_play_username">作为音频播放用户名</string>
|
||||
<string name="accessibility_scan_qr_code">扫描二维码</string>
|
||||
<string name="accessibility_navigate_to_alby">导航到第三方钱包提供商 Alby</string>
|
||||
<string name="it_s_not_possible_to_reply_to_a_draft_note">无法回复笔记草稿</string>
|
||||
<string name="it_s_not_possible_to_quote_to_a_draft_note">无法引用笔记草稿</string>
|
||||
<string name="it_s_not_possible_to_react_to_a_draft_note">无法回应笔记草稿</string>
|
||||
<string name="it_s_not_possible_to_zap_to_a_draft_note">无法打闪笔记草稿</string>
|
||||
<string name="draft_note">笔记草稿</string>
|
||||
<string name="load_from_text">来自消息</string>
|
||||
</resources>
|
||||
|
|
|
@ -275,6 +275,7 @@
|
|||
<string name="report_dialog_title">屏蔽並舉報</string>
|
||||
<string name="block_only">屏蔽</string>
|
||||
<string name="bookmarks">書籤</string>
|
||||
<string name="drafts">草稿</string>
|
||||
<string name="private_bookmarks">私人書籤</string>
|
||||
<string name="public_bookmarks">公開書籤</string>
|
||||
<string name="add_to_private_bookmarks">添加到私人書籤</string>
|
||||
|
@ -559,11 +560,16 @@
|
|||
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct_exception">無法解析 %1$s。請檢查你是否已連接,服務器是否啓動,以及閃電地址 %2$s 是否正確。\n\n異常爲:%3$s</string>
|
||||
<string name="could_not_fetch_invoice_from">無法從 %1$s 獲取發票</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup">從閃電地址解析 JSON 發生錯誤。請檢查用戶的閃電設置</string>
|
||||
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup_with_user">從 %1$s 解析 JSON 發生錯誤。請檢查用戶的閃電設置</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration">在用戶閃電地址伺服器配置中找不到回調 URL</string>
|
||||
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration_with_user">從 %1$s 的響應中找不到回調 URL</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup">從閃電地址的發票獲取解析 JSON 發生錯誤。請檢查用戶的閃電設置</string>
|
||||
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup_with_user">從 %1$s 的閃電發票獲取解析 JSON 發生錯誤。請檢查用戶的閃電設置</string>
|
||||
<string name="incorrect_invoice_amount_sats_from_it_should_have_been">來自 %2$s 的錯誤的發票金額(%1$s 聰)。應該是 %3$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error">無法在發送打閃前創建閃電發票。接收者閃電錢包發送了以下錯誤:%1$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error_with_user">無法創建閃電發票。來自 %1$s 的消息:%2$s</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json">無法在發送打閃前創建閃電發票。在生成的 JSON 中找不到 Element pr。</string>
|
||||
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json_with_user">無法從 %1$s 創建閃電發票:在生成的 JSON 中找不到付款要求元素。</string>
|
||||
<string name="read_only_user">只讀用戶</string>
|
||||
<string name="no_reactions_setup">沒有設置回應</string>
|
||||
<string name="select_push_server">選擇一個統一推送應用</string>
|
||||
|
@ -621,6 +627,7 @@
|
|||
<string name="server_did_not_provide_a_url_after_uploading">上傳後伺服器沒有提供 URL</string>
|
||||
<string name="could_not_download_from_the_server">無法從伺服器下載上傳的媒體</string>
|
||||
<string name="could_not_prepare_local_file_to_upload">無法準備要上傳的本地文件:%1$s</string>
|
||||
<string name="edit_draft">編輯草稿</string>
|
||||
<string name="login_with_qr_code">使用二維碼登錄</string>
|
||||
<string name="route">路徑</string>
|
||||
<string name="route_home">主頁</string>
|
||||
|
@ -664,6 +671,8 @@
|
|||
<string name="zap_the_devs_title">打閃開發人員</string>
|
||||
<string name="zap_the_devs_description">你的捐贈幫助我們做出不同的貢獻。 每個聰都很重要!</string>
|
||||
<string name="donate_now">立即捐款</string>
|
||||
<string name="brought_to_you_by">贊助方:</string>
|
||||
<string name="this_version_brought_to_you_by">此版本贊助方:</string>
|
||||
<string name="version_name">版本 %1$s</string>
|
||||
<string name="thank_you">謝謝!</string>
|
||||
<string name="max_limit">最大上限</string>
|
||||
|
@ -685,4 +694,10 @@
|
|||
<string name="accessibility_play_username">作爲音頻播放用戶名</string>
|
||||
<string name="accessibility_scan_qr_code">掃描二維碼</string>
|
||||
<string name="accessibility_navigate_to_alby">導航到第三方錢包提供商 Alby</string>
|
||||
<string name="it_s_not_possible_to_reply_to_a_draft_note">無法回覆筆記草稿</string>
|
||||
<string name="it_s_not_possible_to_quote_to_a_draft_note">無法引用筆記草稿</string>
|
||||
<string name="it_s_not_possible_to_react_to_a_draft_note">無法回應筆記草稿</string>
|
||||
<string name="it_s_not_possible_to_zap_to_a_draft_note">無法打閃筆記草稿</string>
|
||||
<string name="draft_note">筆記草稿</string>
|
||||
<string name="load_from_text">來自消息</string>
|
||||
</resources>
|
||||
|
|
|
@ -15,7 +15,7 @@ coil = "2.6.0"
|
|||
composeBom = "2024.04.00"
|
||||
coreKtx = "1.12.0"
|
||||
espressoCore = "3.5.1"
|
||||
firebaseBom = "32.8.0"
|
||||
firebaseBom = "32.8.1"
|
||||
fragmentKtx = "1.6.2"
|
||||
gms = "4.4.1"
|
||||
jacksonModuleKotlin = "2.17.0"
|
||||
|
@ -27,7 +27,7 @@ languageId = "17.0.5"
|
|||
lazysodiumAndroid = "5.1.0"
|
||||
lightcompressor = "1.3.2"
|
||||
markdown = "077a2cde64"
|
||||
media3 = "1.3.0"
|
||||
media3 = "1.3.1"
|
||||
mockk = "1.13.10"
|
||||
navigationCompose = "2.7.7"
|
||||
okhttp = "5.0.0-alpha.12"
|
||||
|
|
Ładowanie…
Reference in New Issue