Merge branch 'vitorpamplona:main' into profiles-list-management

This commit is contained in:
KotlinGeekDev
2025-08-07 19:52:15 +00:00
committed by GitHub
28 changed files with 495 additions and 73 deletions
+4 -4
View File
@@ -39,7 +39,7 @@ jobs:
keyPassword: ${{ secrets.KEY_PASSWORD }}
env:
# override default build-tools version (29.0.3) -- optional
BUILD_TOOLS_VERSION: "34.0.0"
BUILD_TOOLS_VERSION: "36.0.0"
- name: Sign AAB (F-Droid)
uses: r0adkll/sign-android-release@v1
@@ -51,7 +51,7 @@ jobs:
keyPassword: ${{ secrets.KEY_PASSWORD }}
env:
# override default build-tools version (29.0.3) -- optional
BUILD_TOOLS_VERSION: "34.0.0"
BUILD_TOOLS_VERSION: "36.0.0"
- name: Build APK
run: ./gradlew assembleRelease --stacktrace
@@ -66,7 +66,7 @@ jobs:
keyPassword: ${{ secrets.KEY_PASSWORD }}
env:
# override default build-tools version (29.0.3) -- optional
BUILD_TOOLS_VERSION: "34.0.0"
BUILD_TOOLS_VERSION: "36.0.0"
- name: Sign APK (F-Droid)
uses: r0adkll/sign-android-release@v1
@@ -78,7 +78,7 @@ jobs:
keyPassword: ${{ secrets.KEY_PASSWORD }}
env:
# override default build-tools version (29.0.3) -- optional
BUILD_TOOLS_VERSION: "34.0.0"
BUILD_TOOLS_VERSION: "36.0.0"
- name: Create Release
id: create_release
@@ -1375,7 +1375,7 @@ object LocalCache : ILocalCache {
repliesTo.forEach { it.addBoost(note) }
event.containedPost()?.let {
justConsumeAndUpdateIndexes(it, relay, false)
checkDeletionAndConsume(it, relay, false)
}
refreshNewNoteObservers(note)
@@ -1405,7 +1405,7 @@ object LocalCache : ILocalCache {
repliesTo.forEach { it.addBoost(note) }
event.containedPost()?.let {
justConsumeAndUpdateIndexes(it, relay, false)
checkDeletionAndConsume(it, relay, false)
}
refreshNewNoteObservers(note)
@@ -1440,7 +1440,7 @@ object LocalCache : ILocalCache {
repliesTo.forEach { it.addBoost(note) }
event.containedPost()?.let {
justConsumeAndUpdateIndexes(it, relay, false)
checkDeletionAndConsume(it, relay, false)
}
refreshNewNoteObservers(note)
@@ -1683,7 +1683,7 @@ object LocalCache : ILocalCache {
if (existingZapRequest == null || existingZapRequest.event == null) {
// tries to add it
event.zapRequest?.let {
justConsumeAndUpdateIndexes(it, relay, false)
checkDeletionAndConsume(it, relay, false)
}
}
@@ -2552,21 +2552,7 @@ object LocalCache : ILocalCache {
event: DraftEvent,
relay: NormalizedRelayUrl?,
wasVerified: Boolean,
): Boolean {
if (!event.isDeleted()) {
if (consumeBaseReplaceable(event, relay, wasVerified)) {
return true
}
} else {
// passes to the AccountViewModel for further delete.
val note = Note(event.id)
note.loadEvent(event, getOrCreateUser(event.pubKey), emptyList())
relay?.let { note.addRelay(it) }
refreshNewNoteObservers(note)
}
return false
}
): Boolean = !event.isDeleted() && consumeBaseReplaceable(event, relay, wasVerified)
fun consume(nip19: Entity) {
when (nip19) {
@@ -2647,6 +2633,17 @@ object LocalCache : ILocalCache {
return justConsumeAndUpdateIndexes(event, relay?.url, wasVerified)
}
private fun checkDeletionAndConsume(
event: Event,
relay: NormalizedRelayUrl?,
wasVerified: Boolean,
): Boolean =
if (!deletionIndex.hasBeenDeleted(event)) {
justConsumeAndUpdateIndexes(event, relay, wasVerified)
} else {
false
}
private fun justConsumeAndUpdateIndexes(
event: Event,
relay: NormalizedRelayUrl?,
@@ -179,8 +179,9 @@ fun AppNavigation(
composableFromBottomArgs<Route.NewPublicMessage> {
NewPublicMessageScreen(
to = it.toKey(),
accountViewModel,
nav,
reply = it.replyId?.let { hex -> accountViewModel.getNoteIfExists(hex) },
accountViewModel = accountViewModel,
nav = nav,
)
}
@@ -201,7 +201,11 @@ fun routeReplyTo(
): Route? {
val noteEvent = note.event
return when (noteEvent) {
is PublicMessageEvent -> Route.NewPublicMessage(noteEvent.groupKeySet() - account.userProfile().pubkeyHex)
is PublicMessageEvent ->
Route.NewPublicMessage(
users = noteEvent.groupKeySet() - account.userProfile().pubkeyHex,
parentId = noteEvent.id,
)
is TextNoteEvent -> Route.NewPost(baseReplyTo = note.idHex)
is PrivateDmEvent ->
routeToMessage(
@@ -142,9 +142,11 @@ sealed class Route {
@Serializable data class NewPublicMessage(
val to: String,
val replyId: HexKey? = null,
) : Route() {
constructor(users: Set<HexKey>) : this(
constructor(users: Set<HexKey>, parentId: HexKey) : this(
to = users.joinToString(","),
replyId = parentId,
)
fun toKey(): Set<HexKey> = to.split(",").toSet()
@@ -253,6 +255,7 @@ fun getRouteWithArguments(navController: NavHostController): Route? {
dest.hasRoute<Route.GeoPost>() -> entry.toRoute<Route.GeoPost>()
dest.hasRoute<Route.HashtagPost>() -> entry.toRoute<Route.HashtagPost>()
dest.hasRoute<Route.GenericCommentPost>() -> entry.toRoute<Route.GenericCommentPost>()
dest.hasRoute<Route.NewPublicMessage>() -> entry.toRoute<Route.NewPublicMessage>()
else -> {
null
@@ -399,17 +399,17 @@ fun calculateBackgroundColor(
newItemColor.compositeOver(defaultBackgroundColor)
}
} else {
parentBackgroundColor?.value ?: Color.Transparent
parentBackgroundColor?.value ?: defaultBackgroundColor.copy(alpha = 0f)
}
} else {
parentBackgroundColor?.value ?: Color.Transparent
parentBackgroundColor?.value ?: defaultBackgroundColor.copy(alpha = 0f)
},
)
}
LaunchedEffect(createdAt) {
delay(5000)
bgColor.value = parentBackgroundColor?.value ?: Color.Transparent
bgColor.value = parentBackgroundColor?.value ?: defaultBackgroundColor.copy(alpha = 0f)
}
return bgColor
@@ -29,6 +29,7 @@ import androidx.compose.runtime.produceState
import com.vitorpamplona.amethyst.commons.richtext.HashTagSegment
import com.vitorpamplona.amethyst.service.CachedRichTextParser
import com.vitorpamplona.amethyst.ui.components.ClickableTextColor
import com.vitorpamplona.amethyst.ui.navigation.navs.EmptyNav.nav
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.navigation.routes.Route
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
@@ -37,8 +38,6 @@ import com.vitorpamplona.amethyst.ui.theme.lessImportantLink
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.tags.hashtags.hashtags
import com.vitorpamplona.quartz.nip02FollowList.toImmutableListOfLists
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@Composable
fun DisplayUncitedHashtags(
@@ -59,37 +58,34 @@ fun DisplayUncitedHashtags(
accountViewModel: AccountViewModel,
nav: INav,
) {
@Suppress("ProduceStateDoesNotAssignValue")
val unusedHashtags by
produceState(initialValue = emptyList<String>()) {
val tagsInEvent = event.hashtags()
if (tagsInEvent.isNotEmpty()) {
launch(Dispatchers.Default) {
val state = CachedRichTextParser.parseText(content, event.tags.toImmutableListOfLists(), callbackUri)
val state = CachedRichTextParser.parseText(content, event.tags.toImmutableListOfLists(), callbackUri)
val tagsInContent =
state
.paragraphs
.map {
it.words.mapNotNull {
if (it is HashTagSegment) {
it.hashtag
} else {
null
}
val tagsInContent =
state
.paragraphs
.map {
it.words.mapNotNull {
if (it is HashTagSegment) {
it.hashtag
} else {
null
}
}.flatten()
val unusedHashtags =
tagsInEvent.filterNot { eventTag ->
tagsInContent.any { contentTag ->
eventTag.equals(contentTag, true)
}
}
}.flatten()
if (unusedHashtags.isNotEmpty()) {
value = unusedHashtags
val unusedHashtags =
tagsInEvent.filterNot { eventTag ->
tagsInContent.any { contentTag ->
eventTag.equals(contentTag, true)
}
}
if (unusedHashtags.isNotEmpty()) {
value = unusedHashtags
}
}
}
@@ -20,22 +20,29 @@
*/
package com.vitorpamplona.amethyst.ui.note.types
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.produceState
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextOverflow
import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.ui.components.RenderUserAsClickableText
import com.vitorpamplona.amethyst.ui.components.SensitivityWarning
import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer
import com.vitorpamplona.amethyst.ui.navigation.navs.EmptyNav.nav
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.note.elements.DisplayUncitedHashtags
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.theme.HalfHalfTopPadding
import com.vitorpamplona.amethyst.ui.theme.placeholderText
import com.vitorpamplona.quartz.experimental.publicMessages.PublicMessageEvent
import com.vitorpamplona.quartz.nip01Core.tags.hashtags.hasHashtags
@@ -52,10 +59,11 @@ fun RenderPublicMessage(
nav: INav,
) {
val noteEvent = note.event as? PublicMessageEvent ?: return
val content = remember(noteEvent) { noteEvent.peopleAndContent() }
if (makeItShort && accountViewModel.isLoggedUser(note.author)) {
Text(
text = noteEvent.content,
text = content,
color = MaterialTheme.colorScheme.placeholderText,
maxLines = 2,
overflow = TextOverflow.Ellipsis,
@@ -68,7 +76,7 @@ fun RenderPublicMessage(
accountViewModel = accountViewModel,
) {
TranslatableRichTextViewer(
content = noteEvent.content,
content = content,
canPreview = canPreview && !makeItShort,
quotesLeft = quotesLeft,
modifier = Modifier.fillMaxWidth(),
@@ -86,3 +94,31 @@ fun RenderPublicMessage(
}
}
}
@OptIn(ExperimentalLayoutApi::class)
@Composable
fun DisplayUncitedUsers(
event: PublicMessageEvent,
accountViewModel: AccountViewModel,
nav: INav,
) {
@Suppress("ProduceStateDoesNotAssignValue")
val uncitedUsers by produceState(initialValue = emptyList<User>()) {
val users = event.groupKeySetWithoutOwner() - event.citedUsers()
if (users.isNotEmpty()) {
val newUsers = accountViewModel.loadUsersSync(users.toList())
if (newUsers.isNotEmpty()) {
value = newUsers
}
}
}
if (uncitedUsers.isNotEmpty()) {
FlowRow(HalfHalfTopPadding) {
uncitedUsers.forEach { user ->
RenderUserAsClickableText(user, "", accountViewModel, nav)
}
}
}
}
@@ -53,6 +53,7 @@ import com.vitorpamplona.quartz.nip10Notes.BaseThreadedEvent
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import com.vitorpamplona.quartz.nip14Subject.subject
import com.vitorpamplona.quartz.nip72ModCommunities.definition.CommunityDefinitionEvent
import org.apache.commons.lang3.StringUtils.startsWith
@Composable
fun RenderTextEvent(
@@ -118,7 +119,7 @@ fun RenderTextEvent(
}
val eventContent =
if (!subject.isNullOrBlank() && !newBody.split("\n")[0].startsWith(subject)) {
if (!subject.isNullOrBlank() && !newBody.startsWith(subject)) {
"### $subject\n$newBody"
} else {
newBody
@@ -1249,7 +1249,7 @@ class AccountViewModel(
if (isDebug) {
Log.d(
"Rendering Metrics",
"Update feeds ${this@AccountViewModel} for ${account.userProfile().toBestDisplayName()} with ${newNotes.size} new notes",
"Delete feeds ${this@AccountViewModel} for ${account.userProfile().toBestDisplayName()} with ${newNotes.size} new notes",
)
}
logTime("AccountViewModel deletedEventBundle Update with ${newNotes.size} new notes") {
@@ -91,11 +91,7 @@ fun ChatroomView(
if (room.users.size == 1) {
// Activates NIP-17 if the user has DM relays
ObserveRelayListForDMs(pubkey = room.users.first(), accountViewModel = accountViewModel) {
if (it?.relays().isNullOrEmpty()) {
newPostModel.nip17 = false
} else {
newPostModel.nip17 = true
}
newPostModel.nip17 = !it?.relays().isNullOrEmpty()
}
}
@@ -315,6 +315,7 @@ fun GroupDMScreenContent(
fun MessageFieldRow(
postViewModel: IMessageField,
accountViewModel: AccountViewModel,
requestFocus: Boolean = false,
) {
Row {
BaseUserPicture(
@@ -322,7 +323,7 @@ fun MessageFieldRow(
Size35dp,
accountViewModel,
)
MessageField(R.string.write_a_message, postViewModel, false)
MessageField(R.string.write_a_message, postViewModel, requestFocus)
}
}
@@ -28,6 +28,7 @@ import com.vitorpamplona.amethyst.model.topNavFeeds.noteBased.muted.MutedAuthors
import com.vitorpamplona.amethyst.ui.dal.AdditiveFeedFilter
import com.vitorpamplona.amethyst.ui.dal.DefaultFeedOrder
import com.vitorpamplona.amethyst.ui.dal.FilterByListParams
import com.vitorpamplona.quartz.experimental.publicMessages.PublicMessageEvent
import com.vitorpamplona.quartz.experimental.zapPolls.PollNoteEvent
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
@@ -81,6 +82,7 @@ class HomeConversationsFeedFilter(
event is ChannelMessageEvent ||
event is CommentEvent ||
event is VoiceReplyEvent ||
event is PublicMessageEvent ||
event is LiveActivitiesChatMessageEvent
) &&
filterParams.match(event)
@@ -31,7 +31,6 @@ import com.vitorpamplona.amethyst.ui.dal.FilterByListParams
import com.vitorpamplona.quartz.experimental.audio.header.AudioHeaderEvent
import com.vitorpamplona.quartz.experimental.audio.track.AudioTrackEvent
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent
import com.vitorpamplona.quartz.experimental.publicMessages.PublicMessageEvent
import com.vitorpamplona.quartz.experimental.zapPolls.PollNoteEvent
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import com.vitorpamplona.quartz.nip18Reposts.GenericRepostEvent
@@ -99,7 +98,6 @@ class HomeNewThreadFeedFilter(
(noteEvent is WikiNoteEvent && noteEvent.content.isNotEmpty()) ||
noteEvent is PollNoteEvent ||
noteEvent is HighlightEvent ||
(noteEvent is PublicMessageEvent && noteEvent.content.isNotEmpty() && noteEvent.isIncluded(account.signer.pubKey)) ||
noteEvent is InteractiveStoryPrologueEvent ||
noteEvent is CommentEvent ||
noteEvent is AudioTrackEvent ||
@@ -56,6 +56,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.actions.UrlUserTagTransformation
import com.vitorpamplona.amethyst.ui.actions.mediaServers.ServerType
import com.vitorpamplona.amethyst.ui.actions.uploads.SelectFromGallery
@@ -64,6 +65,7 @@ import com.vitorpamplona.amethyst.ui.components.ThinPaddingTextField
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.navigation.navs.Nav
import com.vitorpamplona.amethyst.ui.navigation.topbars.PostingTopBar
import com.vitorpamplona.amethyst.ui.note.NoteCompose
import com.vitorpamplona.amethyst.ui.note.creators.contentWarning.ContentSensitivityExplainer
import com.vitorpamplona.amethyst.ui.note.creators.contentWarning.MarkAsSensitiveButton
import com.vitorpamplona.amethyst.ui.note.creators.emojiSuggestions.ShowEmojiSuggestionList
@@ -89,6 +91,7 @@ import com.vitorpamplona.amethyst.ui.theme.DividerThickness
import com.vitorpamplona.amethyst.ui.theme.Font14SP
import com.vitorpamplona.amethyst.ui.theme.Size10dp
import com.vitorpamplona.amethyst.ui.theme.Size5dp
import com.vitorpamplona.amethyst.ui.theme.imageModifier
import com.vitorpamplona.amethyst.ui.theme.placeholderText
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlinx.coroutines.Dispatchers
@@ -101,6 +104,7 @@ import kotlinx.coroutines.withContext
@Composable
fun NewPublicMessageScreen(
to: Set<HexKey>? = null,
reply: Note? = null,
accountViewModel: AccountViewModel,
nav: Nav,
) {
@@ -112,6 +116,9 @@ fun NewPublicMessageScreen(
to?.let {
postViewModel.load(it)
}
reply?.let {
postViewModel.reply(it)
}
}
}
@@ -171,9 +178,26 @@ fun PublicMessageScreenContent(
Modifier.fillMaxWidth().verticalScroll(scrollState),
verticalArrangement = spacedBy(Size10dp),
) {
SendDirectMessageTo(postViewModel, accountViewModel)
val replyTo = postViewModel.replyingTo
MessageFieldRow(postViewModel, accountViewModel)
if (replyTo == null) {
SendDirectMessageTo(postViewModel, accountViewModel)
} else {
Row {
NoteCompose(
baseNote = replyTo,
modifier = MaterialTheme.colorScheme.imageModifier,
isQuotedNote = true,
unPackReply = false,
makeItShort = true,
quotesLeft = 1,
accountViewModel = accountViewModel,
nav = nav,
)
}
}
MessageFieldRow(postViewModel, accountViewModel, postViewModel.toUsers.text.isNotBlank())
DisplayPreviews(postViewModel.urlPreviews, accountViewModel, nav)
@@ -327,9 +351,11 @@ fun SendDirectMessageTo(
val keyboardController = LocalSoftwareKeyboardController.current
LaunchedEffect(Unit) {
launch {
delay(200)
focusRequester.requestFocus()
if (postViewModel.toUsers.text.isBlank()) {
launch {
delay(200)
focusRequester.requestFocus()
}
}
}
@@ -133,6 +133,8 @@ class NewPublicMessageViewModel :
}
}
var replyingTo: Note? by mutableStateOf(null)
val iMetaAttachments = IMetaAttachments()
var nip95attachments by mutableStateOf<List<Pair<FileStorageEvent, FileStorageHeaderEvent>>>(emptyList())
@@ -203,6 +205,10 @@ class NewPublicMessageViewModel :
)
}
fun reply(post: Note) {
this.replyingTo = post
}
fun quote(quote: Note) {
message = TextFieldValue(message.text + "\nnostr:${quote.toNEvent()}")
urlPreviews.update(message)
@@ -332,7 +338,7 @@ class NewPublicMessageViewModel :
}
}
private suspend fun createTemplate(): EventTemplate<out Event>? {
private suspend fun createTemplate(): EventTemplate<PublicMessageEvent>? {
val toUsersTagger = NewMessageTagger(this@NewPublicMessageViewModel.toUsers.text, null, null, accountViewModel)
toUsersTagger.run()
@@ -26,6 +26,7 @@ import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.ui.dal.AdditiveFeedFilter
import com.vitorpamplona.amethyst.ui.dal.DefaultFeedOrder
import com.vitorpamplona.quartz.experimental.publicMessages.PublicMessageEvent
import com.vitorpamplona.quartz.experimental.zapPolls.PollNoteEvent
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import com.vitorpamplona.quartz.nip22Comments.CommentEvent
@@ -67,6 +68,7 @@ class UserProfileConversationsFeedFilter(
it.event is LiveActivitiesChatMessageEvent ||
it.event is CommentEvent ||
it.event is VoiceReplyEvent ||
it.event is PublicMessageEvent ||
it.event is TorrentCommentEvent
) &&
!it.isNewThread() &&
@@ -23,6 +23,7 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.profile.datasource
import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent
import com.vitorpamplona.quartz.experimental.publicMessages.PublicMessageEvent
import com.vitorpamplona.quartz.experimental.zapPolls.PollNoteEvent
import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter
import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter
@@ -50,6 +51,7 @@ val UserProfilePostKinds1 =
HighlightEvent.KIND,
WikiNoteEvent.KIND,
VoiceEvent.KIND,
PublicMessageEvent.KIND,
)
val UserProfilePostKinds2 =
@@ -30,6 +30,7 @@ import com.vitorpamplona.amethyst.ui.dal.DefaultFeedOrder
import com.vitorpamplona.quartz.experimental.audio.header.AudioHeaderEvent
import com.vitorpamplona.quartz.experimental.audio.track.AudioTrackEvent
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent
import com.vitorpamplona.quartz.experimental.publicMessages.PublicMessageEvent
import com.vitorpamplona.quartz.experimental.zapPolls.PollNoteEvent
import com.vitorpamplona.quartz.nip01Core.core.AddressableEvent
import com.vitorpamplona.quartz.nip01Core.tags.people.isTaggedUser
@@ -80,6 +81,7 @@ class UserProfileMutualFeedFilter(
it.event is InteractiveStoryPrologueEvent ||
it.event is AudioTrackEvent ||
it.event is AudioHeaderEvent ||
it.event is PublicMessageEvent ||
it.event is TorrentEvent
) &&
it.event?.isTaggedUser(user.pubkeyHex) == true
@@ -107,7 +107,7 @@ open class StringFeedViewModel(
}
viewModelScope.launch(Dispatchers.Default) {
LocalCache.live.deletedEventBundles.collect { newNotes ->
Log.d("Rendering Metrics", "Update feeds: ${this@StringFeedViewModel.javaClass.simpleName} with ${newNotes.size}")
Log.d("Rendering Metrics", "Delete feeds: ${this@StringFeedViewModel.javaClass.simpleName} with ${newNotes.size}")
invalidateData()
}
}
@@ -122,6 +122,7 @@ val HalfStartPadding = Modifier.padding(start = 5.dp)
val StdStartPadding = Modifier.padding(start = 10.dp)
val StdTopPadding = Modifier.padding(top = 10.dp)
val HalfTopPadding = Modifier.padding(top = 5.dp)
val HalfHalfTopPadding = Modifier.padding(top = 3.dp)
val HalfHalfVertPadding = Modifier.padding(vertical = 3.dp)
val HalfHalfHorzModifier = Modifier.padding(horizontal = 3.dp)
@@ -51,6 +51,13 @@
<string name="login_with_a_private_key_to_be_able_to_unfollow">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder dejar de seguir a otros usuarios.</string>
<string name="login_with_a_private_key_to_be_able_to_hide_word">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder ocultar una palabra o frase.</string>
<string name="login_with_a_private_key_to_be_able_to_show_word">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder mostrar una palabra o frase.</string>
<string name="login_with_a_private_key_to_be_able_to_change_settings">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder cambiar la configuración.</string>
<string name="login_with_a_private_key_to_be_able_to_upload">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder subir contenido.</string>
<string name="login_with_a_private_key_to_be_able_to_sign_events">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder firmar eventos.</string>
<string name="unauthorized_exception">Descifrado no autorizado</string>
<string name="unauthorized_exception_description">El firmante no autorizó un descifrado necesario para realizar esta operación. Activa el descifrado NIP-44 en tu aplicación de firmante e inténtalo de nuevo</string>
<string name="signer_not_found_exception">No se ha encontrado el firmante.</string>
<string name="signer_not_found_exception_description">¿Se ha desinstalado la app del firmante? Comprueba si el firmante está instalado y tiene esta cuenta. Cierra sesión y vuelve a iniciar sesión en la app del firmante si ha cambiado.</string>
<string name="zaps">Zaps</string>
<string name="view_count">Total de visualizaciones</string>
<string name="boost">Impulsar</string>
@@ -71,6 +78,8 @@
<string name="error_parsing_error_message">Error al analizar el mensaje de error</string>
<string name="following">" Siguiendo"</string>
<string name="followers">" Seguidores"</string>
<string name="number_following">"%1$s siguiendo"</string>
<string name="number_followers">"%1$s seguidores"</string>
<string name="profile">Perfil</string>
<string name="security_filters">Filtros de seguridad</string>
<string name="log_out">Cerrar sesión</string>
@@ -96,6 +105,7 @@
<string name="my_awesome_group">Mi grupo genial</string>
<string name="picture_url">URL de imagen</string>
<string name="description">Descripción</string>
<string name="no_description">No se ha encontrado la descripción</string>
<string name="about_us">"Sobre nosotros…"</string>
<string name="what_s_on_your_mind">¿Qué tienes en mente?</string>
<string name="write_a_message">Escribir un mensaje…</string>
@@ -137,6 +147,10 @@
<string name="video_saved_to_the_gallery">Video guardado en la galería de videos del teléfono</string>
<string name="failed_to_save_the_video">Error al guardar el video</string>
<string name="upload_image">Cargar imagen</string>
<string name="take_a_picture">Hacer una foto</string>
<string name="record_a_message">Grabar un mensaje</string>
<string name="record_a_message_title">Grabar un mensaje</string>
<string name="record_a_message_description">Haz clic y mantén pulsado para grabar un mensaje</string>
<string name="uploading">Cargando…</string>
<string name="user_does_not_have_a_lightning_address_setup_to_receive_sats">El usuario no tiene una configuración de dirección Lightning para recibir sats</string>
<string name="reply_here">"responde aquí… "</string>
@@ -155,6 +169,7 @@
<string name="gallery">Galería</string>
<string name="follows">"Siguiendo"</string>
<string name="reports">"Reportes"</string>
<string name="number_reports">"%1$s informes"</string>
<string name="more_options">Más opciones</string>
<string name="relays">" Retransmisores"</string>
<string name="website">Sitio web</string>
@@ -213,6 +228,13 @@
<string name="unfollow">Dejar de seguir</string>
<string name="channel_created">Canal creado</string>
<string name="channel_information_changed_to">"La información del canal cambió a"</string>
<string name="ephemeral_relay_chat">Chat temporal</string>
<string name="relay_chat">Chat en relé</string>
<string name="relay_chat_title">Chats en relé</string>
<string name="relay_chat_explainer">Los chats en relé son grupos de chat controlados por su relé de origen.
Son visibles para todos los usuarios de Nostr y cualquiera puede participar en ellos.
Son ideales para comunidades abiertas en torno a temas específicos. Algunos de estos grupos son efímeros
y, por lo tanto, los mensajes del chat desaparecen con el tiempo</string>
<string name="public_chat">Chat público</string>
<string name="public_chat_title">Metadatos públicos del chat</string>
<string name="public_chat_explainer">Los chats públicos son visibles para todos en Nostr y cualquiera
@@ -221,6 +243,8 @@
<string name="public_chat_relays_title">Relés</string>
<string name="public_chat_relays_explainer">Inserta entre 1 y 3 relés que alojan este grupo.
Los clientes de Nostr utilizan esta configuración para saber de dónde descargar y adónde enviar los mensajes.</string>
<string name="paid_relay">Relé de pago</string>
<string name="tor_relay">Fuerza Tor al conectar</string>
<string name="posts_received">publicaciones recibidas</string>
<string name="remove">Eliminar</string>
<string name="translations_auto">Automático</string>
@@ -265,6 +289,7 @@
<string name="biometric_error">Error</string>
<string name="badge_created_by">"Credo por %1$s"</string>
<string name="badge_award_image_for">"Imagen del Badge para %1$s"</string>
<string name="badge_award_image">\"Imagen de premio de insignia</string>
<string name="new_badge_award_notif">Has recibido un nuevo Badge</string>
<string name="award_granted_to">Badge otorgado a</string>
<string name="copied_note_text_to_clipboard">Texto de nota copiado al portapapeles</string>
@@ -290,6 +315,7 @@
<string name="quick_action_unfollow">Dejar de seguir</string>
<string name="quick_action_follow">Seguir</string>
<string name="quick_action_request_deletion_gallery_title">Eliminar de la galería</string>
<string name="quick_action_request_deletion_gallery_alert_body_v2">Elimina este contenido multimedia de la galería.</string>
<string name="quick_action_request_deletion_alert_title">Solicitar eliminación</string>
<string name="quick_action_request_deletion_alert_body">Amethyst solicitará que se elimine su nota de los relays a los que está conectado actualmente. No hay garantía de que su nota se elimine permanentemente de esos relays, o de otros relays donde pueda almacenarse.</string>
<string name="quick_action_block_dialog_btn">Bloquear</string>
@@ -411,6 +437,7 @@
<string name="no">No</string>
<string name="follow_list_selection">Lista de seguidos</string>
<string name="follow_list_kind3follows">Todos los seguidos</string>
<string name="follow_list_kind3follows_proxy">Siguiendo a través de proxy</string>
<string name="follow_list_aroundme">A mi alrededor</string>
<string name="follow_list_global">Global</string>
<string name="follow_list_mute_list">Lista de silenciados</string>
@@ -485,9 +512,18 @@
<string name="content_warning_hide_all_sensitive_content">Ocultar siempre el contenido delicado</string>
<string name="content_warning_show_all_sensitive_content">Mostrar siempre el contenido delicado</string>
<string name="content_warning_see_warnings">Mostrar siempre advertencias sobre contenido</string>
<string name="content_warning_hide_all_sensitive_content_option">Ocultar</string>
<string name="content_warning_show_all_sensitive_content_option">Mostrar</string>
<string name="content_warning_see_warnings_option">Advertir</string>
<string name="recommended_apps">Recomendaciones:</string>
<string name="filter_spam_from_strangers">Filtrar el spam de desconocidos</string>
<string name="warn_when_posts_have_reports_from_your_follows">Avisar cuando las publicaciones tengan reportes de tus seguidos</string>
<string name="filter_spam_from_strangers_title">Filtrar spam</string>
<string name="filter_spam_from_strangers_explainer">Oculta las publicaciones de desconocidos que sean exactamente iguales 5 o más veces.</string>
<string name="warn_when_posts_have_reports_from_your_follows_title">Advertir sobre reportes</string>
<string name="warn_when_posts_have_reports_from_your_follows_explainer">Muestra un mensaje de advertencia cuando los mensajes tienen 5 o más reportes de los usuarios que sigues.</string>
<string name="show_sensitive_content_title">Mostrar contenido delicado</string>
<string name="show_sensitive_content_explainer">Muestra un mensaje de advertencia cuando el autor de la publicación la marca como contenido delicado.</string>
<string name="new_reaction_symbol">Nuevo símbolo de reacción</string>
<string name="no_reaction_type_setup_long_press_to_change">No hay tipos de reacción preseleccionados para este usuario. Deja presionado el botón de corazón para cambiarlos.</string>
<string name="zapraiser">Recaudación de zaps</string>
@@ -539,7 +575,12 @@
<string name="are_you_sure_you_want_to_log_out">Al cerrar la sesión se borra toda tu información local. Asegúrate de tener una copia de seguridad de tus claves privadas para que no pierdas la cuenta. ¿Quieres continuar?</string>
<string name="followed_tags">Etiquetas seguidas</string>
<string name="relay_setup">Relés</string>
<string name="discover_follows">Paquetes de seguimiento</string>
<string name="discover_reads">Lecturas</string>
<string name="discover_content_v2">Algoritmos del feed</string>
<string name="discover_marketplace">Mercado</string>
<string name="discover_live_v2">Transmisiones en vivo</string>
<string name="discover_community_v2">Comunidades</string>
<string name="discover_chat">Chats</string>
<string name="community_approved_posts">Publicaciones aprobadas</string>
<string name="groups_no_descriptor">Este grupo no tiene descripción ni reglas. Habla con el propietario para agregar una.</string>
@@ -547,6 +588,7 @@
<string name="add_sensitive_content_label">Contenido delicado</string>
<string name="add_sensitive_content_description">Agrega una advertencia de contenido sensible antes de mostrarlo</string>
<string name="preferences">Preferencias de la app</string>
<string name="user_preferences">Preferencias de usuario</string>
<string name="settings">Configuración</string>
<string name="connectivity_type_always">Siempre</string>
<string name="connectivity_type_wifi_only">Solo Wi-Fi</string>
@@ -591,6 +633,8 @@
<string name="geohash_explainer">Agrega un Geohash de tu ubicación al mensaje. El público sabrá que te encuentras a menos de 5 km (3 mi) de la ubicación actual.</string>
<string name="geohash_exclusive">Publicación con ubicación exclusiva</string>
<string name="geohash_exclusive_explainer">Solo los seguidores de la ubicación la verán. Tus seguidores generales no la verán.</string>
<string name="hashtag_exclusive">Publicación exclusiva de hashtag</string>
<string name="hashtag_exclusive_explainer">Solo los seguidores del hashtag la verán. Tus seguidores generales no la verán.</string>
<string name="loading_location">Cargando ubicación</string>
<string name="lack_location_permissions">Sin permisos de ubicación</string>
<string name="add_sensitive_content_explainer">Agrega una advertencia de contenido delicado antes de mostrarlo. Esto es ideal para cualquier contenido NSFW o que a algunas personas les pueda resultar ofensivo o perturbador.</string>
@@ -599,6 +643,7 @@
<string name="new_feature_nip17_activate">Activar</string>
<string name="messages_create_public_chat">Público</string>
<string name="messages_create_public_private_chat_description">Nuevo grupo público o privado</string>
<string name="messages_relay_based">Relé</string>
<string name="messages_new_message">Privado</string>
<string name="messages_new_message_to">Para</string>
<string name="messages_new_message_subject">Asunto</string>
@@ -664,6 +709,7 @@
<string name="wallet_number">Monedero %1$s</string>
<string name="error_opening_external_signer">Error al abrir la aplicación firmante</string>
<string name="error_opening_external_signer_description">No se pudo encontrar la aplicación firmante. Comprueba si no se desinstaló la aplicación.</string>
<string name="sign_request_rejected2">Solicitud de firma rechazada</string>
<string name="sign_request_rejected">Solicitud de firma rechazada</string>
<string name="sign_request_rejected_description">Asegúrate de que la aplicación firmante haya autorizado esta transacción.</string>
<string name="no_wallet_found_with_error">No se encontraron monederos para pagar una factura de Lightning (error: %1$s). Instala un monedero de Lightning para usar zaps.</string>
@@ -791,6 +837,8 @@
<string name="new_post">Nueva publicación</string>
<string name="new_short">Nuevos cortos: imágenes o vídeos</string>
<string name="new_community_note">Nueva nota comunitaria</string>
<string name="new_product">Nuevo producto</string>
<string name="new_exclusive_geo_note">Nueva publicación geoexclusiva</string>
<string name="open_all_reactions_to_this_post">Abrir todas las reacciones a esta publicación</string>
<string name="close_all_reactions_to_this_post">Cerrar todas las reacciones a esta publicación</string>
<string name="reply_description">Responder</string>
@@ -845,12 +893,29 @@
<string name="private_outbox_section_explainer">Inserta entre 1 y 3 relés para almacenar eventos que nadie más pueda ver, como los borradores o la configuración de la app. Lo ideal es que estos relés sean locales o requieran autenticación antes de descargar el contenido de cada usuario.</string>
<string name="kind_3_section">Relés generales</string>
<string name="kind_3_section_description">Amethyst usa estos relés para descargar publicaciones por ti.</string>
<string name="connected_section">Relés conectados</string>
<string name="connected_section_description">Lista actual de relés en uso</string>
<string name="kind_3_recommended_section">Relés recomendados</string>
<string name="kind_3_recommended_section_description">Agrega los siguientes relés a la lista de relés generales para recibir publicaciones de los usuarios de la lista.</string>
<string name="search_section">Relés de búsqueda</string>
<string name="search_section_explainer">Lista de relés que se usarán al buscar contenido o usuarios. El etiquetado y la búsqueda no funcionarán si no hay opciones disponibles. Asegúrate de que implementen NIP-50.</string>
<string name="local_section">Relés locales</string>
<string name="local_section_explainer">Lista de relés que se utilizan en este dispositivo.</string>
<string name="trusted_relays_title">Relés de confianza</string>
<string name="trusted_section">Relés de confianza</string>
<string name="trusted_section_explainer">Relés en que confías para no necesitar una conexión Tor para</string>
<string name="proxy_relays_title">Relés de proxy</string>
<string name="proxy_section">Relés de proxy</string>
<string name="proxy_section_explainer">Relés recopiladores que la app debe usar para descargar tus feeds, como filter.nostr.wine. Esto reemplaza el modelo de bandeja de salida y hará que la app se conecte solo a los relés de tus listas.</string>
<string name="broadcast_relays_title">Relés de transmisión</string>
<string name="broadcast_section">Relés de transmisión</string>
<string name="broadcast_section_explainer">Relés que se especializan en enviar tus notas a todos los demás relés, como sendit.nosflare.com. Amethyst agregará este relé a todos los eventos nuevos que crees.</string>
<string name="indexer_relays_title">Relés de indexador</string>
<string name="indexer_section">Relés de indexador</string>
<string name="indexer_section_explainer">Relés que se especializan en alojar los metadatos y las listas de retransmisión de todos, como purplepag.es. Amethyst usará estos relés para encontrar usuarios que no estén en tus listas.</string>
<string name="blocked_relays_title">Relés bloqueados</string>
<string name="blocked_section">Relés bloqueados</string>
<string name="blocked_section_explainer">Amethyst nunca se conectará a estos relés</string>
<string name="zap_the_devs_title">¡Zapea a los desarrolladores!</string>
<string name="zap_the_devs_description">Tu donación nos ayuda a marcar la diferencia. ¡Cada sat cuenta!</string>
<string name="donate_now">Donar ahora</string>
@@ -940,4 +1005,11 @@
<string name="select_list_to_filter">Selecciona una lista para filtrar el tablón</string>
<string name="temporary_account">Cerrar sesión al bloquear dispositivo</string>
<string name="private_message">Mensaje privado</string>
<string name="public_message">Mensaje público</string>
<string name="group_relay">Relé de chat</string>
<string name="group_relay_explanation">Relé al que todos los usuarios de este chat se conectan</string>
<string name="share_image">Compartir imagen…</string>
<string name="search_by_hashtag">Buscar hashtag: #%1$s</string>
<string name="dont_translate_from">No traducir del</string>
<string name="dont_translate_from_description">Los idiomas que se muestran aquí no se traducirán. Selecciona un idioma para eliminarlo y traducirlo de nuevo.</string>
</resources>
@@ -51,6 +51,12 @@
<string name="login_with_a_private_key_to_be_able_to_unfollow">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder dejar de seguir a otros usuarios.</string>
<string name="login_with_a_private_key_to_be_able_to_hide_word">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder ocultar una palabra o frase.</string>
<string name="login_with_a_private_key_to_be_able_to_show_word">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder mostrar una palabra o frase.</string>
<string name="login_with_a_private_key_to_be_able_to_upload">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder subir contenido.</string>
<string name="login_with_a_private_key_to_be_able_to_sign_events">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder firmar eventos.</string>
<string name="unauthorized_exception">Descifrado no autorizado</string>
<string name="unauthorized_exception_description">El firmante no autorizó un descifrado necesario para realizar esta operación. Activa el descifrado NIP-44 en tu aplicación de firmante e inténtalo de nuevo</string>
<string name="signer_not_found_exception">No se ha encontrado el firmante.</string>
<string name="signer_not_found_exception_description">¿Se desinstaló la app del firmante? Comprueba si el firmante está instalado y tiene esta cuenta. Cierra sesión y vuelve a iniciar sesión en la app del firmante si cambió.</string>
<string name="zaps">Zaps</string>
<string name="view_count">Total de visualizaciones</string>
<string name="boost">Impulsar</string>
@@ -71,6 +77,8 @@
<string name="error_parsing_error_message">Error al analizar el mensaje de error</string>
<string name="following">" Siguiendo"</string>
<string name="followers">" Seguidores"</string>
<string name="number_following">"%1$s siguiendo"</string>
<string name="number_followers">"%1$s seguidores"</string>
<string name="profile">Perfil</string>
<string name="security_filters">Filtros de seguridad</string>
<string name="log_out">Cerrar sesión</string>
@@ -96,6 +104,7 @@
<string name="my_awesome_group">Mi grupo genial</string>
<string name="picture_url">URL de imagen</string>
<string name="description">Descripción</string>
<string name="no_description">No se encontró la descripción</string>
<string name="about_us">"Quiénes somos…"</string>
<string name="what_s_on_your_mind">¿Qué estás pensando?</string>
<string name="write_a_message">Escribir un mensaje…</string>
@@ -137,6 +146,10 @@
<string name="video_saved_to_the_gallery">Video guardado en la galería de videos del teléfono</string>
<string name="failed_to_save_the_video">Error al guardar el video</string>
<string name="upload_image">Subir imagen</string>
<string name="take_a_picture">Tomar una foto</string>
<string name="record_a_message">Grabar un mensaje</string>
<string name="record_a_message_title">Grabar un mensaje</string>
<string name="record_a_message_description">Haz clic y mantén presionado para grabar un mensaje</string>
<string name="uploading">Subiendo…</string>
<string name="user_does_not_have_a_lightning_address_setup_to_receive_sats">El usuario no tiene configurada una dirección de Lightning para recibir sats</string>
<string name="reply_here">"responde aquí… "</string>
@@ -155,6 +168,7 @@
<string name="gallery">Galería</string>
<string name="follows">"Seguidos"</string>
<string name="reports">"Reportes"</string>
<string name="number_reports">"%1$s informes"</string>
<string name="more_options">Más opciones</string>
<string name="relays">" Relés"</string>
<string name="website">Sitio web</string>
@@ -213,6 +227,13 @@
<string name="unfollow">Dejar de seguir</string>
<string name="channel_created">Canal creado</string>
<string name="channel_information_changed_to">"La información del canal cambió a"</string>
<string name="ephemeral_relay_chat">Chat temporal</string>
<string name="relay_chat">Chat en relé</string>
<string name="relay_chat_title">Chats en relé</string>
<string name="relay_chat_explainer">Los chats en relé son grupos de chat controlados por su relé de origen.
Son visibles para todos los usuarios de Nostr y cualquiera puede participar en ellos.
Son ideales para comunidades abiertas en torno a temas específicos. Algunos de estos grupos son efímeros
y, por lo tanto, los mensajes del chat desaparecen con el tiempo</string>
<string name="public_chat">Chat público</string>
<string name="public_chat_title">Metadatos públicos del chat</string>
<string name="public_chat_explainer">Los chats públicos son visibles para todos en Nostr y cualquiera
@@ -221,6 +242,8 @@
<string name="public_chat_relays_title">Relés</string>
<string name="public_chat_relays_explainer">Inserta entre 1 y 3 relés que alojan este grupo.
Los clientes de Nostr utilizan esta configuración para saber de dónde descargar y adónde enviar los mensajes.</string>
<string name="paid_relay">Relé de pago</string>
<string name="tor_relay">Fuerza Tor al conectarse</string>
<string name="posts_received">publicaciones recibidas</string>
<string name="remove">Eliminar</string>
<string name="translations_auto">Automático</string>
@@ -265,6 +288,7 @@
<string name="biometric_error">Error</string>
<string name="badge_created_by">"Creado por %1$s"</string>
<string name="badge_award_image_for">"Imagen de premio de insignia por %1$s"</string>
<string name="badge_award_image">\"Imagen de premio de insignia</string>
<string name="new_badge_award_notif">Recibiste un nuevo premio de insignia</string>
<string name="award_granted_to">Premio de insignia otorgado a</string>
<string name="copied_note_text_to_clipboard">Texto de la nota copiado al portapapeles</string>
@@ -290,6 +314,7 @@
<string name="quick_action_unfollow">Dejar de seguir</string>
<string name="quick_action_follow">Seguir</string>
<string name="quick_action_request_deletion_gallery_title">Eliminar de la galería</string>
<string name="quick_action_request_deletion_gallery_alert_body_v2">Elimina este contenido multimedia de la galería.</string>
<string name="quick_action_request_deletion_alert_title">Solicitar eliminación</string>
<string name="quick_action_request_deletion_alert_body">Amethyst solicitará que se elimine la nota de los relés con los que tienes conexión actualmente. No hay garantía de que la nota se elimine permanentemente de esos relés o de otros donde pueda estar guardada.</string>
<string name="quick_action_block_dialog_btn">Bloquear</string>
@@ -411,6 +436,7 @@
<string name="no">No</string>
<string name="follow_list_selection">Lista de seguidos</string>
<string name="follow_list_kind3follows">Todos los seguidos</string>
<string name="follow_list_kind3follows_proxy">Siguiendo a través de proxy</string>
<string name="follow_list_aroundme">A mi alrededor</string>
<string name="follow_list_global">Global</string>
<string name="follow_list_mute_list">Lista de silenciados</string>
@@ -485,9 +511,18 @@
<string name="content_warning_hide_all_sensitive_content">Ocultar siempre el contenido delicado</string>
<string name="content_warning_show_all_sensitive_content">Mostrar siempre el contenido delicado</string>
<string name="content_warning_see_warnings">Mostrar siempre advertencias sobre contenido</string>
<string name="content_warning_hide_all_sensitive_content_option">Ocultar</string>
<string name="content_warning_show_all_sensitive_content_option">Mostrar</string>
<string name="content_warning_see_warnings_option">Advertir</string>
<string name="recommended_apps">Recomendaciones:</string>
<string name="filter_spam_from_strangers">Filtrar el spam de desconocidos</string>
<string name="warn_when_posts_have_reports_from_your_follows">Avisar cuando las publicaciones tengan reportes de tus seguidos</string>
<string name="filter_spam_from_strangers_title">Filtrar spam</string>
<string name="filter_spam_from_strangers_explainer">Oculta las publicaciones de desconocidos que sean exactamente iguales 5 o más veces.</string>
<string name="warn_when_posts_have_reports_from_your_follows_title">Advertir sobre reportes</string>
<string name="warn_when_posts_have_reports_from_your_follows_explainer">Muestra un mensaje de advertencia cuando los mensajes tienen 5 o más reportes de los usuarios que sigues.</string>
<string name="show_sensitive_content_title">Mostrar contenido delicado</string>
<string name="show_sensitive_content_explainer">Muestra un mensaje de advertencia cuando el autor de la publicación la marca como contenido delicado.</string>
<string name="new_reaction_symbol">Nuevo símbolo de reacción</string>
<string name="no_reaction_type_setup_long_press_to_change">No hay tipos de reacción preseleccionados para este usuario. Deja presionado el botón de corazón para cambiarlos.</string>
<string name="zapraiser">Recaudación de zaps</string>
@@ -539,7 +574,12 @@
<string name="are_you_sure_you_want_to_log_out">Al cerrar la sesión se borra toda tu información local. Asegúrate de tener una copia de seguridad de tus claves privadas para que no pierdas la cuenta. ¿Quieres continuar?</string>
<string name="followed_tags">Etiquetas seguidas</string>
<string name="relay_setup">Relés</string>
<string name="discover_follows">Paquetes de seguimiento</string>
<string name="discover_reads">Lecturas</string>
<string name="discover_content_v2">Algoritmos del feed</string>
<string name="discover_marketplace">Mercado</string>
<string name="discover_live_v2">Transmisiones en vivo</string>
<string name="discover_community_v2">Comunidades</string>
<string name="discover_chat">Chats</string>
<string name="community_approved_posts">Publicaciones aprobadas</string>
<string name="groups_no_descriptor">Este grupo no tiene descripción ni reglas. Habla con el propietario para agregar una.</string>
@@ -547,6 +587,7 @@
<string name="add_sensitive_content_label">Contenido delicado</string>
<string name="add_sensitive_content_description">Agrega una advertencia de contenido sensible antes de mostrarlo</string>
<string name="preferences">Preferencias de la app</string>
<string name="user_preferences">Preferencias de usuario</string>
<string name="settings">Configuración</string>
<string name="connectivity_type_always">Siempre</string>
<string name="connectivity_type_wifi_only">Solo Wi-Fi</string>
@@ -591,6 +632,8 @@
<string name="geohash_explainer">Agrega un Geohash de tu ubicación al mensaje. El público sabrá que te encuentras a menos de 5 km (3 mi) de la ubicación actual.</string>
<string name="geohash_exclusive">Publicación con ubicación exclusiva</string>
<string name="geohash_exclusive_explainer">Solo los seguidores de la ubicación la verán. Tus seguidores generales no la verán.</string>
<string name="hashtag_exclusive">Publicación exclusiva de hashtag</string>
<string name="hashtag_exclusive_explainer">Solo los seguidores del hashtag la verán. Tus seguidores generales no la verán.</string>
<string name="loading_location">Cargando ubicación</string>
<string name="lack_location_permissions">Sin permisos de ubicación</string>
<string name="add_sensitive_content_explainer">Agrega una advertencia de contenido delicado antes de mostrarlo. Esto es ideal para cualquier contenido NSFW o que a algunas personas les pueda resultar ofensivo o perturbador.</string>
@@ -599,6 +642,7 @@
<string name="new_feature_nip17_activate">Activar</string>
<string name="messages_create_public_chat">Público</string>
<string name="messages_create_public_private_chat_description">Nuevo grupo público o privado</string>
<string name="messages_relay_based">Relé</string>
<string name="messages_new_message">Privado</string>
<string name="messages_new_message_to">Para</string>
<string name="messages_new_message_subject">Asunto</string>
@@ -664,6 +708,7 @@
<string name="wallet_number">Billetera %1$s</string>
<string name="error_opening_external_signer">Error al abrir la aplicación firmante</string>
<string name="error_opening_external_signer_description">No se pudo encontrar la aplicación firmante. Comprueba si no se desinstaló la aplicación.</string>
<string name="sign_request_rejected2">Solicitud de firma rechazada</string>
<string name="sign_request_rejected">Solicitud de firma rechazada</string>
<string name="sign_request_rejected_description">Asegúrate de que la aplicación firmante haya autorizado esta transacción.</string>
<string name="no_wallet_found_with_error">No se encontraron billeteras para pagar una factura de Lightning (error: %1$s). Instala una billetera de Lightning para usar zaps.</string>
@@ -791,6 +836,8 @@
<string name="new_post">Nueva publicación</string>
<string name="new_short">Nuevos cortos: imágenes o videos</string>
<string name="new_community_note">Nueva nota comunitaria</string>
<string name="new_product">Nuevo producto</string>
<string name="new_exclusive_geo_note">Nueva publicación geoexclusiva</string>
<string name="open_all_reactions_to_this_post">Abrir todas las reacciones a esta publicación</string>
<string name="close_all_reactions_to_this_post">Cerrar todas las reacciones a esta publicación</string>
<string name="reply_description">Responder</string>
@@ -845,12 +892,29 @@
<string name="private_outbox_section_explainer">Inserta entre 1 y 3 relés para almacenar eventos que nadie más pueda ver, como los borradores o la configuración de la app. Lo ideal es que estos relés sean locales o requieran autenticación antes de descargar el contenido de cada usuario.</string>
<string name="kind_3_section">Relés generales</string>
<string name="kind_3_section_description">Amethyst usa estos relés para descargar publicaciones por ti.</string>
<string name="connected_section">Relés conectados</string>
<string name="connected_section_description">Lista actual de relés en uso</string>
<string name="kind_3_recommended_section">Relés recomendados</string>
<string name="kind_3_recommended_section_description">Agrega los siguientes relés a la lista de relés generales para recibir publicaciones de los usuarios de la lista.</string>
<string name="search_section">Relés de búsqueda</string>
<string name="search_section_explainer">Lista de relés que se usarán al buscar contenido o usuarios. El etiquetado y la búsqueda no funcionarán si no hay opciones disponibles. Asegúrate de que implementen NIP-50.</string>
<string name="local_section">Relés locales</string>
<string name="local_section_explainer">Lista de relés que se utilizan en este dispositivo.</string>
<string name="trusted_relays_title">Relés de confianza</string>
<string name="trusted_section">Relés de confianza</string>
<string name="trusted_section_explainer">Relés en que confías para no necesitar una conexión Tor para</string>
<string name="proxy_relays_title">Relés de proxy</string>
<string name="proxy_section">Relés de proxy</string>
<string name="proxy_section_explainer">Relés recopiladores que la app debe usar para descargar tus feeds, como filter.nostr.wine. Esto reemplaza el modelo de bandeja de salida y hará que la app se conecte solo a los relés de tus listas.</string>
<string name="broadcast_relays_title">Relés de transmisión</string>
<string name="broadcast_section">Relés de transmisión</string>
<string name="broadcast_section_explainer">Relés que se especializan en enviar tus notas a todos los demás relés, como sendit.nosflare.com. Amethyst agregará este relé a todos los eventos nuevos que crees.</string>
<string name="indexer_relays_title">Relés de indexador</string>
<string name="indexer_section">Relés de indexador</string>
<string name="indexer_section_explainer">Relés que se especializan en alojar los metadatos y las listas de retransmisión de todos, como purplepag.es. Amethyst usará estos relés para encontrar usuarios que no estén en tus listas.</string>
<string name="blocked_relays_title">Relés bloqueados</string>
<string name="blocked_section">Relés bloqueados</string>
<string name="blocked_section_explainer">Amethyst nunca se conectará a estos relés</string>
<string name="zap_the_devs_title">¡Zapea a los desarrolladores!</string>
<string name="zap_the_devs_description">Tu donación nos ayuda a marcar la diferencia. ¡Cada sat cuenta!</string>
<string name="donate_now">Donar ahora</string>
@@ -940,4 +1004,11 @@
<string name="select_list_to_filter">Selecciona una lista para filtrar el feed</string>
<string name="temporary_account">Cerrar sesión al bloquear dispositivo</string>
<string name="private_message">Mensaje privado</string>
<string name="public_message">Mensaje público</string>
<string name="group_relay">Relé de chat</string>
<string name="group_relay_explanation">Relé al que todos los usuarios de este chat se conectan</string>
<string name="share_image">Compartir imagen…</string>
<string name="search_by_hashtag">Buscar hashtag: #%1$s</string>
<string name="dont_translate_from">No traducir del</string>
<string name="dont_translate_from_description">Los idiomas que se muestran aquí no se traducirán. Selecciona un idioma para eliminarlo y traducirlo de nuevo.</string>
</resources>
@@ -51,6 +51,12 @@
<string name="login_with_a_private_key_to_be_able_to_unfollow">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder dejar de seguir a otros usuarios.</string>
<string name="login_with_a_private_key_to_be_able_to_hide_word">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder ocultar una palabra o frase.</string>
<string name="login_with_a_private_key_to_be_able_to_show_word">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder mostrar una palabra o frase.</string>
<string name="login_with_a_private_key_to_be_able_to_upload">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder subir contenido.</string>
<string name="login_with_a_private_key_to_be_able_to_sign_events">Estás usando una clave pública, que es solo de lectura. Inicia sesión con una clave privada para poder firmar eventos.</string>
<string name="unauthorized_exception">Descifrado no autorizado</string>
<string name="unauthorized_exception_description">El firmante no autorizó un descifrado necesario para realizar esta operación. Activa el descifrado NIP-44 en tu aplicación de firmante e inténtalo de nuevo</string>
<string name="signer_not_found_exception">No se ha encontrado el firmante.</string>
<string name="signer_not_found_exception_description">¿Se desinstaló la app del firmante? Comprueba si el firmante está instalado y tiene esta cuenta. Cierra sesión y vuelve a iniciar sesión en la app del firmante si cambió.</string>
<string name="zaps">Zaps</string>
<string name="view_count">Total vistas</string>
<string name="boost">Impulsar</string>
@@ -71,6 +77,8 @@
<string name="error_parsing_error_message">Error al analizar el mensaje de error</string>
<string name="following">" Siguiendo"</string>
<string name="followers">" Seguidores"</string>
<string name="number_following">"%1$s siguiendo"</string>
<string name="number_followers">"%1$s seguidores"</string>
<string name="profile">Perfil</string>
<string name="security_filters">Filtros de seguridad</string>
<string name="log_out">Cerrar sesión</string>
@@ -96,6 +104,7 @@
<string name="my_awesome_group">Mi grupo genial</string>
<string name="picture_url">URL de imagen</string>
<string name="description">Descripción</string>
<string name="no_description">No se encontró la descripción</string>
<string name="about_us">"Quiénes somos…"</string>
<string name="what_s_on_your_mind">¿Qué estás pensando?</string>
<string name="write_a_message">Escribir un mensaje…</string>
@@ -137,6 +146,10 @@
<string name="video_saved_to_the_gallery">Video guardado en la galería de videos del teléfono</string>
<string name="failed_to_save_the_video">Error al guardar el video</string>
<string name="upload_image">Subir imagen</string>
<string name="take_a_picture">Tomar una foto</string>
<string name="record_a_message">Grabar un mensaje</string>
<string name="record_a_message_title">Grabar un mensaje</string>
<string name="record_a_message_description">Haz clic y mantén presionado para grabar un mensaje</string>
<string name="uploading">Subiendo…</string>
<string name="user_does_not_have_a_lightning_address_setup_to_receive_sats">El usuario no tiene configurada una dirección de Lightning para recibir sats</string>
<string name="reply_here">"responde aquí… "</string>
@@ -155,6 +168,7 @@
<string name="gallery">Galería</string>
<string name="follows">"Seguidos"</string>
<string name="reports">"Reportes"</string>
<string name="number_reports">"%1$s informes"</string>
<string name="more_options">Más opciones</string>
<string name="relays">" Relés"</string>
<string name="website">Sitio web</string>
@@ -213,6 +227,13 @@
<string name="unfollow">Dejar de seguir</string>
<string name="channel_created">Canal creado</string>
<string name="channel_information_changed_to">"La información del canal cambió a"</string>
<string name="ephemeral_relay_chat">Chat temporal</string>
<string name="relay_chat">Chat en relé</string>
<string name="relay_chat_title">Chats en relé</string>
<string name="relay_chat_explainer">Los chats en relé son grupos de chat controlados por su relé de origen.
Son visibles para todos los usuarios de Nostr y cualquiera puede participar en ellos.
Son ideales para comunidades abiertas en torno a temas específicos. Algunos de estos grupos son efímeros
y, por lo tanto, los mensajes del chat desaparecen con el tiempo</string>
<string name="public_chat">Chat público</string>
<string name="public_chat_title">Metadatos públicos del chat</string>
<string name="public_chat_explainer">Los chats públicos son visibles para todos en Nostr y cualquiera
@@ -221,6 +242,8 @@
<string name="public_chat_relays_title">Relés</string>
<string name="public_chat_relays_explainer">Inserta entre 1 y 3 relés que alojan este grupo.
Los clientes de Nostr utilizan esta configuración para saber de dónde descargar y adónde enviar los mensajes.</string>
<string name="paid_relay">Relé de pago</string>
<string name="tor_relay">Fuerza Tor al conectarse</string>
<string name="posts_received">publicaciones recibidas</string>
<string name="remove">Eliminar</string>
<string name="translations_auto">Automático</string>
@@ -265,6 +288,7 @@
<string name="biometric_error">Error</string>
<string name="badge_created_by">"Creado por %1$s"</string>
<string name="badge_award_image_for">"Imagen de premio de insignia por %1$s"</string>
<string name="badge_award_image">\"Imagen de premio de insignia</string>
<string name="new_badge_award_notif">Recibiste un nuevo premio de insignia</string>
<string name="award_granted_to">Premio de insignia otorgado a</string>
<string name="copied_note_text_to_clipboard">Texto de la nota copiado al portapapeles</string>
@@ -290,6 +314,7 @@
<string name="quick_action_unfollow">Dejar de seguir</string>
<string name="quick_action_follow">Seguir</string>
<string name="quick_action_request_deletion_gallery_title">Eliminar de la galería</string>
<string name="quick_action_request_deletion_gallery_alert_body_v2">Elimina este contenido multimedia de la galería.</string>
<string name="quick_action_request_deletion_alert_title">Solicitar eliminación</string>
<string name="quick_action_request_deletion_alert_body">Amethyst solicitará que se elimine la nota de los relés con los que tienes conexión actualmente. No hay garantía de que la nota se elimine permanentemente de esos relés o de otros donde pueda estar guardada.</string>
<string name="quick_action_block_dialog_btn">Bloquear</string>
@@ -411,6 +436,7 @@
<string name="no">No</string>
<string name="follow_list_selection">Lista de seguidos</string>
<string name="follow_list_kind3follows">Todos los seguidos</string>
<string name="follow_list_kind3follows_proxy">Siguiendo a través de proxy</string>
<string name="follow_list_aroundme">A mi alrededor</string>
<string name="follow_list_global">Global</string>
<string name="follow_list_mute_list">Lista de silenciados</string>
@@ -485,9 +511,18 @@
<string name="content_warning_hide_all_sensitive_content">Ocultar siempre el contenido delicado</string>
<string name="content_warning_show_all_sensitive_content">Mostrar siempre el contenido delicado</string>
<string name="content_warning_see_warnings">Mostrar siempre advertencias sobre contenido</string>
<string name="content_warning_hide_all_sensitive_content_option">Ocultar</string>
<string name="content_warning_show_all_sensitive_content_option">Mostrar</string>
<string name="content_warning_see_warnings_option">Advertir</string>
<string name="recommended_apps">Recomendaciones:</string>
<string name="filter_spam_from_strangers">Filtrar el spam de desconocidos</string>
<string name="warn_when_posts_have_reports_from_your_follows">Avisar cuando las publicaciones tengan reportes de tus seguidos</string>
<string name="filter_spam_from_strangers_title">Filtrar spam</string>
<string name="filter_spam_from_strangers_explainer">Oculta las publicaciones de desconocidos que sean exactamente iguales 5 o más veces.</string>
<string name="warn_when_posts_have_reports_from_your_follows_title">Advertir sobre reportes</string>
<string name="warn_when_posts_have_reports_from_your_follows_explainer">Muestra un mensaje de advertencia cuando los mensajes tienen 5 o más reportes de los usuarios que sigues.</string>
<string name="show_sensitive_content_title">Mostrar contenido delicado</string>
<string name="show_sensitive_content_explainer">Muestra un mensaje de advertencia cuando el autor de la publicación la marca como contenido delicado.</string>
<string name="new_reaction_symbol">Nuevo símbolo de reacción</string>
<string name="no_reaction_type_setup_long_press_to_change">No hay tipos de reacción preseleccionados para este usuario. Deja presionado el botón de corazón para cambiarlos.</string>
<string name="zapraiser">Recaudación de zaps</string>
@@ -539,7 +574,12 @@
<string name="are_you_sure_you_want_to_log_out">Al cerrar la sesión se borra toda tu información local. Asegúrate de tener una copia de seguridad de tus claves privadas para que no pierdas la cuenta. ¿Quieres continuar?</string>
<string name="followed_tags">Etiquetas seguidas</string>
<string name="relay_setup">Relés</string>
<string name="discover_follows">Paquetes de seguimiento</string>
<string name="discover_reads">Lecturas</string>
<string name="discover_content_v2">Algoritmos del feed</string>
<string name="discover_marketplace">Mercado</string>
<string name="discover_live_v2">Transmisiones en vivo</string>
<string name="discover_community_v2">Comunidades</string>
<string name="discover_chat">Chats</string>
<string name="community_approved_posts">Publicaciones aprobadas</string>
<string name="groups_no_descriptor">Este grupo no tiene descripción ni reglas. Habla con el propietario para agregar una.</string>
@@ -547,6 +587,7 @@
<string name="add_sensitive_content_label">Contenido delicado</string>
<string name="add_sensitive_content_description">Agrega una advertencia de contenido sensible antes de mostrarlo</string>
<string name="preferences">Preferencias de la app</string>
<string name="user_preferences">Preferencias de usuario</string>
<string name="settings">Configuración</string>
<string name="connectivity_type_always">Siempre</string>
<string name="connectivity_type_wifi_only">Solo Wi-Fi</string>
@@ -591,6 +632,8 @@
<string name="geohash_explainer">Agrega un Geohash de tu ubicación al mensaje. El público sabrá que te encuentras a menos de 5 km (3 mi) de la ubicación actual.</string>
<string name="geohash_exclusive">Publicación con ubicación exclusiva</string>
<string name="geohash_exclusive_explainer">Solo los seguidores de la ubicación la verán. Tus seguidores generales no la verán.</string>
<string name="hashtag_exclusive">Publicación exclusiva de hashtag</string>
<string name="hashtag_exclusive_explainer">Solo los seguidores del hashtag la verán. Tus seguidores generales no la verán.</string>
<string name="loading_location">Cargando ubicación</string>
<string name="lack_location_permissions">Sin permisos de ubicación</string>
<string name="add_sensitive_content_explainer">Agrega una advertencia de contenido delicado antes de mostrarlo. Esto es ideal para cualquier contenido NSFW o que a algunas personas les pueda resultar ofensivo o perturbador.</string>
@@ -599,6 +642,7 @@
<string name="new_feature_nip17_activate">Activar</string>
<string name="messages_create_public_chat">Público</string>
<string name="messages_create_public_private_chat_description">Nuevo grupo público o privado</string>
<string name="messages_relay_based">Relé</string>
<string name="messages_new_message">Privado</string>
<string name="messages_new_message_to">Para</string>
<string name="messages_new_message_subject">Asunto</string>
@@ -664,6 +708,7 @@
<string name="wallet_number">Billetera %1$s</string>
<string name="error_opening_external_signer">Error al abrir la aplicación firmante</string>
<string name="error_opening_external_signer_description">No se pudo encontrar la aplicación firmante. Comprueba si no se desinstaló la aplicación.</string>
<string name="sign_request_rejected2">Solicitud de firma rechazada</string>
<string name="sign_request_rejected">Solicitud de firma rechazada</string>
<string name="sign_request_rejected_description">Asegúrate de que la aplicación firmante haya autorizado esta transacción.</string>
<string name="no_wallet_found_with_error">No se encontraron billeteras para pagar una factura de Lightning (error: %1$s). Instala una billetera de Lightning para usar zaps.</string>
@@ -791,6 +836,8 @@
<string name="new_post">Nueva publicación</string>
<string name="new_short">Nuevos cortos: imágenes o videos</string>
<string name="new_community_note">Nueva nota comunitaria</string>
<string name="new_product">Nuevo producto</string>
<string name="new_exclusive_geo_note">Nueva publicación geoexclusiva</string>
<string name="open_all_reactions_to_this_post">Abrir todas las reacciones a esta publicación</string>
<string name="close_all_reactions_to_this_post">Cerrar todas las reacciones a esta publicación</string>
<string name="reply_description">Responder</string>
@@ -845,12 +892,29 @@
<string name="private_outbox_section_explainer">Inserta entre 1 y 3 relés para almacenar eventos que nadie más pueda ver, como los borradores o la configuración de la app. Lo ideal es que estos relés sean locales o requieran autenticación antes de descargar el contenido de cada usuario.</string>
<string name="kind_3_section">Relés generales</string>
<string name="kind_3_section_description">Amethyst usa estos relés para descargar publicaciones por ti.</string>
<string name="connected_section">Relés conectados</string>
<string name="connected_section_description">Lista actual de relés en uso</string>
<string name="kind_3_recommended_section">Relés recomendados</string>
<string name="kind_3_recommended_section_description">Agrega los siguientes relés a la lista de relés generales para recibir publicaciones de los usuarios de la lista.</string>
<string name="search_section">Relés de búsqueda</string>
<string name="search_section_explainer">Lista de relés que se usarán al buscar contenido o usuarios. El etiquetado y la búsqueda no funcionarán si no hay opciones disponibles. Asegúrate de que implementen NIP-50.</string>
<string name="local_section">Relés locales</string>
<string name="local_section_explainer">Lista de relés que se utilizan en este dispositivo.</string>
<string name="trusted_relays_title">Relés de confianza</string>
<string name="trusted_section">Relés de confianza</string>
<string name="trusted_section_explainer">Relés en que confías para no necesitar una conexión Tor para</string>
<string name="proxy_relays_title">Relés de proxy</string>
<string name="proxy_section">Relés de proxy</string>
<string name="proxy_section_explainer">Relés recopiladores que la app debe usar para descargar tus feeds, como filter.nostr.wine. Esto reemplaza el modelo de bandeja de salida y hará que la app se conecte solo a los relés de tus listas.</string>
<string name="broadcast_relays_title">Relés de transmisión</string>
<string name="broadcast_section">Relés de transmisión</string>
<string name="broadcast_section_explainer">Relés que se especializan en enviar tus notas a todos los demás relés, como sendit.nosflare.com. Amethyst agregará este relé a todos los eventos nuevos que crees.</string>
<string name="indexer_relays_title">Relés de indexador</string>
<string name="indexer_section">Relés de indexador</string>
<string name="indexer_section_explainer">Relés que se especializan en alojar los metadatos y las listas de retransmisión de todos, como purplepag.es. Amethyst usará estos relés para encontrar usuarios que no estén en tus listas.</string>
<string name="blocked_relays_title">Relés bloqueados</string>
<string name="blocked_section">Relés bloqueados</string>
<string name="blocked_section_explainer">Amethyst nunca se conectará a estos relés</string>
<string name="zap_the_devs_title">¡Zapea a los desarrolladores!</string>
<string name="zap_the_devs_description">Tu donación nos ayuda a marcar la diferencia. ¡Cada sat cuenta!</string>
<string name="donate_now">Donar ahora</string>
@@ -940,4 +1004,11 @@
<string name="select_list_to_filter">Selecciona una lista para filtrar el feed</string>
<string name="temporary_account">Cerrar sesión al bloquear dispositivo</string>
<string name="private_message">Mensaje privado</string>
<string name="public_message">Mensaje público</string>
<string name="group_relay">Relé de chat</string>
<string name="group_relay_explanation">Relé al que todos los usuarios de este chat se conectan</string>
<string name="share_image">Compartir imagen…</string>
<string name="search_by_hashtag">Buscar hashtag: #%1$s</string>
<string name="dont_translate_from">No traducir del</string>
<string name="dont_translate_from_description">Los idiomas que se muestran aquí no se traducirán. Selecciona un idioma para eliminarlo y traducirlo de nuevo.</string>
</resources>
@@ -51,6 +51,13 @@
<string name="login_with_a_private_key_to_be_able_to_unfollow">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। अनुचरण रोकने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
<string name="login_with_a_private_key_to_be_able_to_hide_word">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। शब्द अथवा वाक्य छिपाने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
<string name="login_with_a_private_key_to_be_able_to_show_word">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। शब्द अथवा वाक्य आच्छादन हटाने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
<string name="login_with_a_private_key_to_be_able_to_change_settings">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। स्थापना विकल्पों का परिवर्तन करने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
<string name="login_with_a_private_key_to_be_able_to_upload">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। आरोहण करने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
<string name="login_with_a_private_key_to_be_able_to_sign_events">आप ख्याप्य कुंचिका का प्रयोग कर रहे हैं जिससे केवल पढ सकते हैं। घटनाओं पर हस्ताक्षर करने के लिए गुप्त कुंचिका के साथ प्रवेशांकन करें</string>
<string name="unauthorized_exception">अनधिकृत अपरहस्यीकरण</string>
<string name="unauthorized_exception_description">हस्ताक्षरकर्ता ने इस कार्य करने के लिए अपरहस्यीकरण का अधिकार नहीं दिया। आपके हस्ताक्षर क्रमक में निप॰-४४ अपरहस्यीकरण सक्रिय करें तथा पुनः प्रयास करें</string>
<string name="signer_not_found_exception">हस्ताक्षरकर्ता अप्राप्त</string>
<string name="signer_not_found_exception_description">क्या हस्ताक्षर क्रमक अस्थापित किया गया। जाँच करें कि यदि हस्ताक्षरकर्ता स्थापित है तथा यह लेखा वहाँ है। यदि हस्ताक्षर क्रमक में परिवर्तन है तो निर्गमनांकन तथा प्रवेशांकन पुनः करें।</string>
<string name="zaps">ज्साप</string>
<string name="view_count">दृष्ट संख्या</string>
<string name="boost">उद्धृत करें</string>
@@ -98,6 +105,7 @@
<string name="my_awesome_group">मेरा बढिया झुण्ड</string>
<string name="picture_url">चित्र जालपता</string>
<string name="description">विवरण</string>
<string name="no_description">विवरण अप्राप्त</string>
<string name="about_us">"हमारा परिचय…"</string>
<string name="what_s_on_your_mind">आपके मन में क्या है?</string>
<string name="write_a_message">सन्देश लिखें …</string>
@@ -139,6 +147,10 @@
<string name="video_saved_to_the_gallery">चलचित्र को संचारयन्त्र के चलचित्रालय में सुरक्षित रखा गया</string>
<string name="failed_to_save_the_video">चलचित्र को सुरक्षित रखने में असफल</string>
<string name="upload_image">चित्र आरोहण</string>
<string name="take_a_picture">एक चित्र लें</string>
<string name="record_a_message">ऐक संदेश का अभिलेखन करें</string>
<string name="record_a_message_title">ऐक संदेश का अभिलेखन करें</string>
<string name="record_a_message_description">टाँकें तथा दबाए रखें संदेश का अभिलेखन करने के लिए</string>
<string name="uploading">आरोहण चल रहा है…</string>
<string name="user_does_not_have_a_lightning_address_setup_to_receive_sats">उपयोगकर्ता का कोई लैटनिंग पता स्थापित नहीं जिसपर साट्स प्राप्त कर सके</string>
<string name="reply_here">"उत्तर यहाँ दें.. "</string>
@@ -231,6 +243,8 @@
<string name="public_chat_relays_title">पुनःप्रसारक</string>
<string name="public_chat_relays_explainer">इस समुदाय के निवास के लिए १ - ३ पुनःप्रसारकों को जोडें।
नोस्टर ग्राहक इस स्थापना विकल्प का प्रयोग करेंगे यह जानने के लिए कि कहाँ से सन्देशों का अवरोहण करना है तथा कहाँ आपके सन्देश भेजने हैं।</string>
<string name="paid_relay">सशुल्क पुनःप्रसारक</string>
<string name="tor_relay">संयोजन के समय टोर का प्रयोग अवश्य करें</string>
<string name="posts_received">पत्र प्राप्त</string>
<string name="remove">हटाएँ</string>
<string name="translations_auto">स्वचालित</string>
@@ -275,6 +289,7 @@
<string name="biometric_error">अपक्रम</string>
<string name="badge_created_by">"%1$s के द्वारा बनाया गया"</string>
<string name="badge_award_image_for">"पदक पुरस्कार चित्र %1$s के लिए"</string>
<string name="badge_award_image">\"पदक पुरस्कार चित्र</string>
<string name="new_badge_award_notif">आपको नया पदक पुरस्कार प्राप्त हुआ</string>
<string name="award_granted_to">पदक पुरस्कार इनको दिया गया</string>
<string name="copied_note_text_to_clipboard">टीका लेख की अनुकृति किया गया टाँकाफलक में</string>
@@ -422,6 +437,7 @@
<string name="no">नहीं</string>
<string name="follow_list_selection">अनुचरण सूची</string>
<string name="follow_list_kind3follows">सभी अनुचरित</string>
<string name="follow_list_kind3follows_proxy">प्रतिनिधि द्वारा अनुचरित</string>
<string name="follow_list_aroundme">मेरे आसपास</string>
<string name="follow_list_global">वैश्विक</string>
<string name="follow_list_mute_list">मौन सूची</string>
@@ -693,6 +709,7 @@
<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_rejected2">हस्ताक्षर अनुरोध अस्वीकृत</string>
<string name="sign_request_rejected">हस्ताक्षर क्रमक अस्वीकार किया</string>
<string name="sign_request_rejected_description">सुनिश्चित करें हस्ताक्षर क्रमक ने इस व्यापार को अनुमति दिया</string>
<string name="no_wallet_found_with_error">कोई धनकोष प्राप्त नहीं लैटनिंग चालान चुकाने के लिए (अपक्रम : %1$s)। कृपया एक लैटनिंग धनकोष की स्थापना करें ज्सापों का प्रयोग करने के लिए</string>
@@ -876,12 +893,29 @@
<string name="private_outbox_section_explainer">१ - ३ पुनःप्रसारकों को जोडें उन घटनाओं को रखने के लिए जो कोई अन्य नहीं देख सकता जैसे कि पाण्डुलिपियाँ अथवा क्रमक के स्थापना विकल्प। आदर्शतः ये पुनःप्रसारक स्थानीय होने चाहिए अथवा प्रत्येक उपयोगकर्ता के विषयवस्तु अवरोहण के पूर्व परिचय प्रमाणीकरण अनिवार्य होना चाहिए।</string>
<string name="kind_3_section">सामान्य पुनःप्रसारक</string>
<string name="kind_3_section_description">अमेथिस्ट इन पुनःप्रसारकों का प्रयोग करता है आपके पत्रों का अवरोहण करने के लिए।</string>
<string name="connected_section">संयोजित पुनःप्रसारक</string>
<string name="connected_section_description">वर्तमान उपयुक्त पुनःप्रसारकों की सूची</string>
<string name="kind_3_recommended_section">अनुशंसित पुनःप्रसारक</string>
<string name="kind_3_recommended_section_description">सूचित उपयोगकर्ताओं के पत्र प्राप्त करने के लिए निम्नलिखित पुनःप्रसारकों को अपने सामान्य पुनःप्रसारक सूची में जोडें।</string>
<string name="search_section">खोज पुनःप्रसारक</string>
<string name="search_section_explainer">पुनःप्रसारकों की सूची जिनको किसी विषयवस्तु अथवा उपयोगकर्ताओं को खोजने में प्रयोग करना चाहिए। कोई विकल्प नहीं तो उपयोगकर्ता सूचक जोडना तथा खोज निष्क्रिय होंगे। सुनिश्चित करें कि वे निप॰-५० को कार्यान्वित किये हैं।</string>
<string name="local_section">स्थानीय पुनःप्रसारक</string>
<string name="local_section_explainer">पुनःप्रसारकों की सूची जो इस यन्त्र पर चल रहे हैं।</string>
<string name="trusted_relays_title">विश्वसनीय पुनःप्रसारक</string>
<string name="trusted_section">विश्वसनीय पुनःप्रसारक</string>
<string name="trusted_section_explainer">विश्वसनीय पुनःप्रसारक जिनके लिए टोर संयोजन आवश्यक नहीं</string>
<string name="proxy_relays_title">प्रतिनिधि पुनःप्रसारक</string>
<string name="proxy_section">प्रतिनिधि पुनःप्रसारक</string>
<string name="proxy_section_explainer">संग्रहकर्ता पुनःप्रसारक जो क्रमक द्वारा उपयुक्त होना चाहिए आपके सूचनावलियों का अवरोहण करने के लिए। जैसे कि filter.nostr.wine । यह निर्गतपेटिका प्रतिरूप को प्रतिस्थापित करेगा तथा क्रमक आपके सूचियों में पुनःप्रसारकों के साथ ही जुडेगा।</string>
<string name="broadcast_relays_title">प्रसारण पुनःप्रसारक</string>
<string name="broadcast_section">प्रसारण पुनःप्रसारक</string>
<string name="broadcast_section_explainer">पुनःप्रसारक जो आपके पत्रों को अन्य सभी पुनःप्रसारकों को भेजने का विशेष कार्य करते हैं। जैसे कि sendit.nosflare.com । अमेथिस्ट इस पुनःप्रसारक को जोडेगा आपके द्वारा कृत सभी नए घटनाओं के लिए</string>
<string name="indexer_relays_title">अनुक्रमणीकार पुनःप्रसारक</string>
<string name="indexer_section">अनुक्रमणीकार पुनःप्रसारक</string>
<string name="indexer_section_explainer">पुनःप्रसारक जो सभी के उपतथ्य तथा पुनःप्रसारक सूचियों की जानकारी रखने का विशेष कार्य करते हैं। जैसे कि purplepag.es । अमेथिस्ट इन पुनःप्रसारकों का उपयोग करेगा उन प्रयोक्ताओं को ढूँढने के लिए जो आपके सूचियों में नहीं हैं।</string>
<string name="blocked_relays_title">बाधित पुनःप्रसारक</string>
<string name="blocked_section">बाधित पुनःप्रसारक</string>
<string name="blocked_section_explainer">अमेथिस्ट इन पुनःप्रसारकों से कभी नहीं जुडेगा</string>
<string name="zap_the_devs_title">क्रमलेखकों को ज्साप करें!</string>
<string name="zap_the_devs_description">आपका दान हमारा सहायक है परिवर्तन लाने में। प्रत्येक साट गणनीय है!</string>
<string name="donate_now">दान करें अभी</string>
@@ -971,6 +1005,7 @@
<string name="select_list_to_filter">सूचनावली छानने के लिए सूची चुनें</string>
<string name="temporary_account">यन्त्र ताला लगने पर निर्गमनांकन करें</string>
<string name="private_message">निजी सन्देश</string>
<string name="public_message">सार्वजनिक संदेश</string>
<string name="group_relay">चर्चा पुनःप्रसारक</string>
<string name="group_relay_explanation">वह पुनःप्रसारक जिससे इस चर्चा के सभी उपयोगकर्ता जुडते हैं</string>
<string name="share_image">चित्र बाँटें…</string>
@@ -51,6 +51,13 @@
<string name="login_with_a_private_key_to_be_able_to_unfollow">Je gebruikt een publieke sleutel en publieke sleutels zijn alleen-lezen. Login met een geheime sleutel om te ontvolgen</string>
<string name="login_with_a_private_key_to_be_able_to_hide_word">Je gebruikt een publieke sleutel en publieke sleutels zijn alleen-lezen. Login met een geheime sleutel om woorden en zinnen te verbergen</string>
<string name="login_with_a_private_key_to_be_able_to_show_word">Je gebruikt een publieke sleutel en publieke sleutels zijn alleen-lezen. Login met een geheime sleutel om woorden of zinnen te tonen</string>
<string name="login_with_a_private_key_to_be_able_to_change_settings">Je gebruikt een publieke sleutel en publieke sleutels zijn alleen-lezen. Login met een geheime sleutel om instellingen aan te passen</string>
<string name="login_with_a_private_key_to_be_able_to_upload">Je gebruikt een publieke sleutel en publieke sleutels zijn alleen-lezen. Login met een geheime sleutel om te uploaden</string>
<string name="login_with_a_private_key_to_be_able_to_sign_events">Je gebruikt een publieke sleutel en publieke sleutels zijn alleen-lezen. Login met een geheime sleutel om events te tekenen</string>
<string name="unauthorized_exception">Ongeautoriseerde decodering</string>
<string name="unauthorized_exception_description">De ondertekenaar heeft geen decodering toegestaan die nodig is om dit in werking te stellen. Activeer NIP-44 decodering in uw signer app en probeer het opnieuw</string>
<string name="signer_not_found_exception">Signer niet gevonden</string>
<string name="signer_not_found_exception_description">Is de signer app gedeïnstalleerd? Controleer of de ondertekenaar is geïnstalleerd en dit account heeft. Log opnieuw in want de signer app is gewijzigd.</string>
<string name="zaps">Zaps</string>
<string name="view_count">Aantal keer bekeken</string>
<string name="boost">Boost</string>
@@ -71,6 +78,8 @@
<string name="error_parsing_error_message">Fout bij het parsen van foutberichten</string>
<string name="following">" Volgend"</string>
<string name="followers">" Volgers"</string>
<string name="number_following">"%1$s volgend"</string>
<string name="number_followers">"%1$s volgers"</string>
<string name="profile">Profiel</string>
<string name="security_filters">Veiligheidsfilter</string>
<string name="log_out">Uitloggen</string>
@@ -96,6 +105,7 @@
<string name="my_awesome_group">Mijn geweldige groep</string>
<string name="picture_url">Afbeelding URL</string>
<string name="description">Omschrijving</string>
<string name="no_description">Beschrijving niet gevonden</string>
<string name="about_us">"Over ons…"</string>
<string name="what_s_on_your_mind">Waar denk je aan?</string>
<string name="write_a_message">Schrijf een bericht…</string>
@@ -137,6 +147,10 @@
<string name="video_saved_to_the_gallery">Video\'s opgeslagen in galerij</string>
<string name="failed_to_save_the_video">De video is niet opgeslagen</string>
<string name="upload_image">Afbeelding uploaden</string>
<string name="take_a_picture">Neem een foto</string>
<string name="record_a_message">Neem een bericht op</string>
<string name="record_a_message_title">Neem een bericht op</string>
<string name="record_a_message_description">Klik en houd vast om een bericht te opnemen</string>
<string name="uploading">Uploaden…</string>
<string name="user_does_not_have_a_lightning_address_setup_to_receive_sats">Gebruiker heeft geen Lightning Adress ingesteld om sats te ontvangen</string>
<string name="reply_here">"hier reageren.. "</string>
@@ -155,6 +169,7 @@
<string name="gallery">Galerij</string>
<string name="follows">"Volgend"</string>
<string name="reports">"Rapporten"</string>
<string name="number_reports">"%1$s rapporten"</string>
<string name="more_options">Meer opties</string>
<string name="relays">"Relays"</string>
<string name="website">Website</string>
@@ -213,6 +228,13 @@
<string name="unfollow">Ontvolgen</string>
<string name="channel_created">Kanaal gemaakt</string>
<string name="channel_information_changed_to">"Kanaalinformatie veranderd naar"</string>
<string name="ephemeral_relay_chat">Verdwijnende chat</string>
<string name="relay_chat">Relay chat</string>
<string name="relay_chat_title">Relay chats</string>
<string name="relay_chat_explainer">Relay chats zijn chatgroepen die beheerd worden door hun thuisrelay.
Ze zijn zichtbaar voor iedereen op Nostr en iedereen kan eraan deelnemen.
Ze zijn geschikt voor open communities rond specifieke onderwerpen. Sommige van deze groepen zijn tijdelijk
en daardoor verdwijnen berichten na verloop van tijd</string>
<string name="public_chat">Publieke chat</string>
<string name="public_chat_title">Publieke chat metadata</string>
<string name="public_chat_explainer">Publieke chats zijn zichtbaar voor iedereen op Nostr en iedereen
@@ -221,6 +243,8 @@
<string name="public_chat_relays_title">Relays</string>
<string name="public_chat_relays_explainer">Voeg een 13 relays toe die deze groep hosten.
Nostr clients gebruiken deze instelling om te weten waar berichten van moeten worden gedownload en waarnaar uw berichten worden verzonden.</string>
<string name="paid_relay">Betaald relays</string>
<string name="tor_relay">Forceert Tor tijdens verbinden</string>
<string name="posts_received">berichten ontvangen</string>
<string name="remove">verwijderen</string>
<string name="translations_auto">Automatisch</string>
@@ -265,6 +289,7 @@
<string name="biometric_error">Fout</string>
<string name="badge_created_by">"Gemaakt door %1$s"</string>
<string name="badge_award_image_for">"Badge award afbeelding voor %1$s"</string>
<string name="badge_award_image">\"Badge award afbeelding</string>
<string name="new_badge_award_notif">Je hebt een nieuwe Badge award ontvangen</string>
<string name="award_granted_to">Badge award gegeven aan</string>
<string name="copied_note_text_to_clipboard">Note tekst gekopieerd naar klembord</string>
@@ -290,6 +315,7 @@
<string name="quick_action_unfollow">Ontvolgen</string>
<string name="quick_action_follow">Volgen</string>
<string name="quick_action_request_deletion_gallery_title">Verwijderen uit galerij</string>
<string name="quick_action_request_deletion_gallery_alert_body_v2">Verwijder deze media uit je galerij.</string>
<string name="quick_action_request_deletion_alert_title">Verzoek om te verwijderen</string>
<string name="quick_action_request_deletion_alert_body">Amethyst zal vragen om uw note te verwijderen van de relays waarmee u momenteel verbonden bent. Er is geen garantie dat uw note permanent wordt verwijderd van deze relays, of van andere relays waar het kan worden opgeslagen.</string>
<string name="quick_action_block_dialog_btn">Blokkeren</string>
@@ -411,6 +437,7 @@
<string name="no">Nee</string>
<string name="follow_list_selection">Volgerslijst</string>
<string name="follow_list_kind3follows">Iedereen</string>
<string name="follow_list_kind3follows_proxy">Volgt via proxy</string>
<string name="follow_list_aroundme">In de buurt</string>
<string name="follow_list_global">Globaal</string>
<string name="follow_list_mute_list">Mute-lijst</string>
@@ -485,9 +512,18 @@
<string name="content_warning_hide_all_sensitive_content">Verberg altijd gevoelige inhoud</string>
<string name="content_warning_show_all_sensitive_content">Toon altijd gevoelige inhoud</string>
<string name="content_warning_see_warnings">Toon altijd content waarshuwingen</string>
<string name="content_warning_hide_all_sensitive_content_option">Verberg</string>
<string name="content_warning_show_all_sensitive_content_option">Tonen</string>
<string name="content_warning_see_warnings_option">Waarschuwen</string>
<string name="recommended_apps">Raadt aan: </string>
<string name="filter_spam_from_strangers">Filter spam van onbekenden</string>
<string name="warn_when_posts_have_reports_from_your_follows">Waarschuw wanneer berichten meldingen hebben van je volgers</string>
<string name="filter_spam_from_strangers_title">Spam filteren</string>
<string name="filter_spam_from_strangers_explainer">Verbergt posts van onbekenden die 5 of meer keer precies hetzelfde waren</string>
<string name="warn_when_posts_have_reports_from_your_follows_title">Waarschuwen bij meldingen</string>
<string name="warn_when_posts_have_reports_from_your_follows_explainer">Toont een waarschuwingsbericht wanneer berichten 5 of meer meldingen heeft van je volgers</string>
<string name="show_sensitive_content_title">Toon gevoelige inhoud</string>
<string name="show_sensitive_content_explainer">Toont een waarschuwingsbericht wanneer de auteur van het bericht als gevoelig gemarkeerd heeft</string>
<string name="new_reaction_symbol">Nieuwe reactie symbool</string>
<string name="no_reaction_type_setup_long_press_to_change">Geen reactietypes geselecteerd. Lang indrukken om te wijzigen</string>
<string name="zapraiser">Zapraiser</string>
@@ -539,7 +575,12 @@
<string name="are_you_sure_you_want_to_log_out">Uitloggen verwijdert al je lokale informatie. Zorg ervoor dat je een back-up hebt van je geheime sleutels om te voorkomen dat je je account kwijtraakt. Wilt u doorgaan?</string>
<string name="followed_tags">Gevolgde tags</string>
<string name="relay_setup">Relays</string>
<string name="discover_follows">Volg pakketten</string>
<string name="discover_reads">Gelezen</string>
<string name="discover_content_v2">Feed algoritmes</string>
<string name="discover_marketplace">Marktplaats</string>
<string name="discover_live_v2">Livestream</string>
<string name="discover_community_v2">Communities</string>
<string name="discover_chat">Chats</string>
<string name="community_approved_posts">Goedgekeurde berichten</string>
<string name="groups_no_descriptor">Deze groep heeft geen beschrijving of regels. Praat met de eigenaar om er een toe te voegen</string>
@@ -547,6 +588,7 @@
<string name="add_sensitive_content_label">Gevoelige content</string>
<string name="add_sensitive_content_description">Voegt waarschuwing voor gevoelige content toe voordat deze content wordt weergegeven</string>
<string name="preferences">App-voorkeuren</string>
<string name="user_preferences">Gebruikersvoorkeuren</string>
<string name="settings">Instellingen</string>
<string name="connectivity_type_always">Altijd</string>
<string name="connectivity_type_wifi_only">Alleen wifi</string>
@@ -591,6 +633,8 @@
<string name="geohash_explainer">Voegt een Geohash van je locatie toe aan het bericht. Het publiek weet dat je binnen 5 km (3mi) van de huidige locatie bent.</string>
<string name="geohash_exclusive">Locatie-exclusief bericht</string>
<string name="geohash_exclusive_explainer">Alleen volgers van de locatie zien het. Je volgers zien het niet.</string>
<string name="hashtag_exclusive">Hastag exclusieve post</string>
<string name="hashtag_exclusive_explainer">Alleen volgers van de hashtag zullen het zien. Je normale volgers zien het niet.</string>
<string name="loading_location">Locatie laden</string>
<string name="lack_location_permissions">Geen locatiemachtigingen</string>
<string name="add_sensitive_content_explainer">Voegt een waarschuwing voor gevoelige inhoud toe voordat je inhoud wordt weergegeven. Dit is ideaal voor NSFW-inhoud of inhoud die sommige mensen beledigend of verontrustend vinden.</string>
@@ -599,6 +643,7 @@
<string name="new_feature_nip17_activate">Activeren</string>
<string name="messages_create_public_chat">Publiek</string>
<string name="messages_create_public_private_chat_description">Nieuwe openbare of besloten groep</string>
<string name="messages_relay_based">Relay</string>
<string name="messages_new_message">Privé</string>
<string name="messages_new_message_to">Aan</string>
<string name="messages_new_message_subject">Onderwerp</string>
@@ -664,6 +709,7 @@
<string name="wallet_number">Wallet %1$s</string>
<string name="error_opening_external_signer">Fout bij openen ondertekenapp</string>
<string name="error_opening_external_signer_description">De teken-app kan niet worden gevonden. Controleer of de app niet is verwijderd</string>
<string name="sign_request_rejected2">Ondertekenverzoek afgewezen</string>
<string name="sign_request_rejected">Ondertekenverzoek afgewezen</string>
<string name="sign_request_rejected_description">Zorg ervoor dat de teken-app deze transactie heeft geautoriseerd</string>
<string name="no_wallet_found_with_error">Geen wallets gevonden om een Lightning Invoice te betalen (Error: %1$s). Installeer een Lightning wallet om zaps te gebruiken</string>
@@ -791,6 +837,8 @@
<string name="new_post">Nieuw bericht</string>
<string name="new_short">Nieuwe shorts: afbeeldingen of video\'s</string>
<string name="new_community_note">Nieuwe community note</string>
<string name="new_product">Nieuw product</string>
<string name="new_exclusive_geo_note">Nieuw Geo-exclusieve post</string>
<string name="open_all_reactions_to_this_post">Open alle reacties op dit bericht</string>
<string name="close_all_reactions_to_this_post">Sluit alle reacties op dit bericht</string>
<string name="reply_description">Antwoorden</string>
@@ -845,12 +893,29 @@
<string name="private_outbox_section_explainer">Plaats tussen de 1 tot 3 relays om gebeurtenissen op te slaan die niemand anders kan zien, zoals uw Concepten en/of app instellingen. Idealiter zijn deze relays lokaal of vereist authenticatie voordat de inhoud van elke gebruiker wordt gedownload.</string>
<string name="kind_3_section">Algemene relays</string>
<string name="kind_3_section_description">Amethyst gebruikt deze relays om berichten voor jou te downloaden.</string>
<string name="connected_section">Verbonden relays</string>
<string name="connected_section_description">Huidige lijst van relays die worden gebruikt</string>
<string name="kind_3_recommended_section">Aanbevolen relays</string>
<string name="kind_3_recommended_section_description">Voeg de volgende relays toe aan je algemene relay-lijst om berichten van de vermelde gebruikers te ontvangen.</string>
<string name="search_section">Relays zoeken</string>
<string name="search_section_explainer">Lijst van relays om te gebruiken bij het zoeken naar inhoud of gebruikers. Taggen en zoeken werkt niet als er geen opties beschikbaar zijn. Zorg ervoor dat ze NIP-50 implementeren.</string>
<string name="local_section">Lokale relays</string>
<string name="local_section_explainer">Lijst van relays die worden uitgevoerd op dit apparaat.</string>
<string name="trusted_relays_title">Vertrouwde relays</string>
<string name="trusted_section">Vertrouwde relays</string>
<string name="trusted_section_explainer">Relays die je vertrouwd om geen Tor te gebruiken</string>
<string name="proxy_relays_title">Proxy relays</string>
<string name="proxy_section">Proxy relays</string>
<string name="proxy_section_explainer">Aggregator relays die de app moet gebruiken om je feeds te downloaden, zoals filter.nostr.wine. Dit vervangt het outbox-model en zorgt ervoor dat de app alleen verbinding maakt met de relays in jouw lijsten.</string>
<string name="broadcast_relays_title">Verzend relays</string>
<string name="broadcast_section">Verzend relays</string>
<string name="broadcast_section_explainer">Relays die gespecialiseerd zijn in het doorsturen van jouw notities naar alle andere relays, zoals sendit.nosflare.com. Amethyst zal dit relays toevoegen aan alle nieuwe evenementen die door jou worden gemaakt</string>
<string name="indexer_relays_title">Indexeer relays</string>
<string name="indexer_section">Indexeer relays</string>
<string name="indexer_section_explainer">Relays die gespecialiseerd zijn in het hosten van ieders metadata en relaylijsten, zoals purplepag.es. Amethyst zal deze relays gebruiken om gebruikers te vinden die niet in jouw lijsten staan.</string>
<string name="blocked_relays_title">Geblokkeerde relays</string>
<string name="blocked_section">Geblokkeerde relays</string>
<string name="blocked_section_explainer">Amethyst zal nooit verbinding maken met deze relays</string>
<string name="zap_the_devs_title">Zap de devs!</string>
<string name="zap_the_devs_description">Jouw donatie helpt ons om een verschil te maken. Elke sat telt!</string>
<string name="donate_now">Nu doneren</string>
@@ -940,4 +1005,11 @@
<string name="select_list_to_filter">Selecteer een lijst om de feed te filteren</string>
<string name="temporary_account">Afmelden bij apparaatvergrendeling</string>
<string name="private_message">Privébericht</string>
<string name="public_message">Openbaar bericht</string>
<string name="group_relay">Chat relay</string>
<string name="group_relay_explanation">De relay die alle gebruikers van deze chat gebruiken om verbinding te maken</string>
<string name="share_image">Afbeelding delen…</string>
<string name="search_by_hashtag">Zoek hashtag: #%1$s</string>
<string name="dont_translate_from">Niet vertalen van</string>
<string name="dont_translate_from_description">Talen die hier getoond worden worden worden niet vertaald. Selecteer een taal om te verwijderen en het opnieuw te laten vertalen.</string>
</resources>
@@ -28,6 +28,7 @@ import com.vitorpamplona.quartz.nip01Core.core.any
import com.vitorpamplona.quartz.nip01Core.hints.PubKeyHintProvider
import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate
import com.vitorpamplona.quartz.nip10Notes.BaseNoteEvent
import com.vitorpamplona.quartz.nip19Bech32.entities.NProfile
import com.vitorpamplona.quartz.nip19Bech32.pubKeyHints
import com.vitorpamplona.quartz.nip19Bech32.pubKeys
import com.vitorpamplona.quartz.nip31Alts.alt
@@ -59,6 +60,19 @@ class PublicMessageEvent(
fun groupKeySet() = tags.mapNotNullTo(mutableSetOf(this.pubKey), ReceiverTag::parseKey)
fun groupKeySetWithoutOwner() = tags.mapNotNullTo(mutableSetOf(), ReceiverTag::parseKey) - this.pubKey
fun groupAsNProfileList() =
tags
.mapNotNull(ReceiverTag::parse)
.joinToString {
"nostr:" + NProfile.create(it.pubKey, it.relayHint)
}
fun chatroomKey(user: HexKey) = groupKeySet() - user
fun peopleAndContent() = groupAsNProfileList() + " " + content
companion object {
const val KIND = 24
const val ALT_DESCRIPTION = "Public Message"
@@ -51,6 +51,19 @@ data class NProfile(
return NProfile(hex, relay.mapNotNull { RelayUrlNormalizer.normalizeOrNull(it) })
}
fun create(
authorPubKeyHex: String,
relay: NormalizedRelayUrl?,
): String =
TlvBuilder()
.apply {
addHex(TlvTypes.SPECIAL, authorPubKeyHex)
if (relay != null) {
addStringIfNotNull(TlvTypes.RELAY, relay.url)
}
}.build()
.toNProfile()
fun create(
authorPubKeyHex: String,
relays: List<NormalizedRelayUrl>,