This commit is contained in:
Vitor Pamplona 2025-01-13 10:38:53 -05:00
commit 0d4936cf4b
13 changed files with 414 additions and 350 deletions

View File

@ -0,0 +1,357 @@
/**
* Copyright (c) 2024 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.amethyst.ui.actions
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.actions.uploads.SelectSingleFromGallery
import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton
import com.vitorpamplona.amethyst.ui.screen.loggedIn.SaveButton
import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.MinHorzSpacer
import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer
import com.vitorpamplona.amethyst.ui.theme.placeholderText
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun NewUserMetadataScreen(
nav: INav,
accountViewModel: AccountViewModel,
) {
val postViewModel: NewUserMetadataViewModel = viewModel()
val context = LocalContext.current
LaunchedEffect(Unit) {
postViewModel.load(accountViewModel.account)
}
DisposableEffect(Unit) {
onDispose {
postViewModel.clear()
}
}
Scaffold(
topBar = {
TopAppBar(
title = {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
Spacer(modifier = MinHorzSpacer)
Text(
text = stringRes(R.string.profile),
modifier = Modifier.weight(1f),
textAlign = TextAlign.Center,
style = MaterialTheme.typography.titleLarge,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
)
SaveButton(
onPost = {
postViewModel.create()
nav.popBack()
},
true,
)
}
},
navigationIcon = {
Row {
Spacer(modifier = StdHorzSpacer)
CloseButton(
onPress = {
postViewModel.clear()
nav.popBack()
},
)
}
},
colors =
TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.surface,
),
)
},
) { pad ->
Column(
modifier =
Modifier
.padding(
start = 10.dp,
end = 10.dp,
top = pad.calculateTopPadding(),
bottom = pad.calculateBottomPadding(),
).consumeWindowInsets(pad)
.imePadding(),
) {
Column(
modifier = Modifier.padding(10.dp).verticalScroll(rememberScrollState()),
) {
OutlinedTextField(
label = { Text(text = stringRes(R.string.display_name)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.displayName.value,
onValueChange = { postViewModel.displayName.value = it },
placeholder = {
Text(
text = stringRes(R.string.my_display_name),
color = MaterialTheme.colorScheme.placeholderText,
)
},
keyboardOptions =
KeyboardOptions.Default.copy(
capitalization = KeyboardCapitalization.Sentences,
),
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.about_me)) },
modifier = Modifier.fillMaxWidth().height(100.dp),
value = postViewModel.about.value,
onValueChange = { postViewModel.about.value = it },
placeholder = {
Text(
text = stringRes(id = R.string.about_me),
color = MaterialTheme.colorScheme.placeholderText,
)
},
keyboardOptions =
KeyboardOptions.Default.copy(
capitalization = KeyboardCapitalization.Sentences,
),
maxLines = 10,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.avatar_url)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.picture.value,
onValueChange = { postViewModel.picture.value = it },
placeholder = {
Text(
text = "https://mywebsite.com/me.jpg",
color = MaterialTheme.colorScheme.placeholderText,
)
},
leadingIcon = {
SelectSingleFromGallery(
isUploading = postViewModel.isUploadingImageForPicture,
tint = MaterialTheme.colorScheme.placeholderText,
modifier = Modifier.padding(start = 5.dp),
) {
postViewModel.uploadForPicture(it, context, onError = accountViewModel::toast)
}
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.banner_url)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.banner.value,
onValueChange = { postViewModel.banner.value = it },
placeholder = {
Text(
text = "https://mywebsite.com/mybanner.jpg",
color = MaterialTheme.colorScheme.placeholderText,
)
},
leadingIcon = {
SelectSingleFromGallery(
isUploading = postViewModel.isUploadingImageForBanner,
tint = MaterialTheme.colorScheme.placeholderText,
modifier = Modifier.padding(start = 5.dp),
) {
postViewModel.uploadForBanner(it, context, onError = accountViewModel::toast)
}
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.pronouns)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.pronouns.value,
onValueChange = { postViewModel.pronouns.value = it },
placeholder = {
Text(
text = "they/them, ...",
color = MaterialTheme.colorScheme.placeholderText,
)
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.website_url)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.website.value,
onValueChange = { postViewModel.website.value = it },
placeholder = {
Text(
text = "https://mywebsite.com",
color = MaterialTheme.colorScheme.placeholderText,
)
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.nip_05)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.nip05.value,
onValueChange = { postViewModel.nip05.value = it },
placeholder = {
Text(
text = "_@mywebsite.com",
color = MaterialTheme.colorScheme.placeholderText,
)
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.ln_address)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.lnAddress.value,
onValueChange = { postViewModel.lnAddress.value = it },
placeholder = {
Text(
text = "me@mylightningnode.com",
color = MaterialTheme.colorScheme.placeholderText,
)
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.ln_url_outdated)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.lnURL.value,
onValueChange = { postViewModel.lnURL.value = it },
placeholder = {
Text(
text = stringRes(R.string.lnurl),
color = MaterialTheme.colorScheme.placeholderText,
)
},
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.twitter)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.twitter.value,
onValueChange = { postViewModel.twitter.value = it },
placeholder = {
Text(
text = stringRes(R.string.twitter_proof_url_template),
color = MaterialTheme.colorScheme.placeholderText,
)
},
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.mastodon)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.mastodon.value,
onValueChange = { postViewModel.mastodon.value = it },
placeholder = {
Text(
text = stringRes(R.string.mastodon_proof_url_template),
color = MaterialTheme.colorScheme.placeholderText,
)
},
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.github)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.github.value,
onValueChange = { postViewModel.github.value = it },
placeholder = {
Text(
text = stringRes(R.string.github_proof_url_template),
color = MaterialTheme.colorScheme.placeholderText,
)
},
)
}
}
}
}

View File

@ -1,317 +0,0 @@
/**
* Copyright (c) 2024 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.amethyst.ui.actions
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import androidx.lifecycle.viewmodel.compose.viewModel
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.actions.uploads.SelectSingleFromGallery
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton
import com.vitorpamplona.amethyst.ui.screen.loggedIn.SaveButton
import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.placeholderText
@Composable
fun NewUserMetadataView(
onClose: () -> Unit,
accountViewModel: AccountViewModel,
) {
val postViewModel: NewUserMetadataViewModel = viewModel()
val context = LocalContext.current
LaunchedEffect(Unit) {
postViewModel.load(accountViewModel.account)
}
Dialog(
onDismissRequest = { onClose() },
properties =
DialogProperties(
usePlatformDefaultWidth = false,
dismissOnClickOutside = false,
),
) {
Surface {
Column(
modifier = Modifier.padding(10.dp),
) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
CloseButton(
onPress = {
postViewModel.clear()
onClose()
},
)
SaveButton(
onPost = {
postViewModel.create()
onClose()
},
true,
)
}
Column(
modifier = Modifier.padding(10.dp).verticalScroll(rememberScrollState()),
) {
OutlinedTextField(
label = { Text(text = stringRes(R.string.display_name)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.displayName.value,
onValueChange = { postViewModel.displayName.value = it },
placeholder = {
Text(
text = stringRes(R.string.my_display_name),
color = MaterialTheme.colorScheme.placeholderText,
)
},
keyboardOptions =
KeyboardOptions.Default.copy(
capitalization = KeyboardCapitalization.Sentences,
),
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.about_me)) },
modifier = Modifier.fillMaxWidth().height(100.dp),
value = postViewModel.about.value,
onValueChange = { postViewModel.about.value = it },
placeholder = {
Text(
text = stringRes(id = R.string.about_me),
color = MaterialTheme.colorScheme.placeholderText,
)
},
keyboardOptions =
KeyboardOptions.Default.copy(
capitalization = KeyboardCapitalization.Sentences,
),
maxLines = 10,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.avatar_url)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.picture.value,
onValueChange = { postViewModel.picture.value = it },
placeholder = {
Text(
text = "https://mywebsite.com/me.jpg",
color = MaterialTheme.colorScheme.placeholderText,
)
},
leadingIcon = {
SelectSingleFromGallery(
isUploading = postViewModel.isUploadingImageForPicture,
tint = MaterialTheme.colorScheme.placeholderText,
modifier = Modifier.padding(start = 5.dp),
) {
postViewModel.uploadForPicture(it, context, onError = accountViewModel::toast)
}
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.banner_url)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.banner.value,
onValueChange = { postViewModel.banner.value = it },
placeholder = {
Text(
text = "https://mywebsite.com/mybanner.jpg",
color = MaterialTheme.colorScheme.placeholderText,
)
},
leadingIcon = {
SelectSingleFromGallery(
isUploading = postViewModel.isUploadingImageForBanner,
tint = MaterialTheme.colorScheme.placeholderText,
modifier = Modifier.padding(start = 5.dp),
) {
postViewModel.uploadForBanner(it, context, onError = accountViewModel::toast)
}
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.pronouns)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.pronouns.value,
onValueChange = { postViewModel.pronouns.value = it },
placeholder = {
Text(
text = "they/them, ...",
color = MaterialTheme.colorScheme.placeholderText,
)
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.website_url)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.website.value,
onValueChange = { postViewModel.website.value = it },
placeholder = {
Text(
text = "https://mywebsite.com",
color = MaterialTheme.colorScheme.placeholderText,
)
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.nip_05)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.nip05.value,
onValueChange = { postViewModel.nip05.value = it },
placeholder = {
Text(
text = "_@mywebsite.com",
color = MaterialTheme.colorScheme.placeholderText,
)
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.ln_address)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.lnAddress.value,
onValueChange = { postViewModel.lnAddress.value = it },
placeholder = {
Text(
text = "me@mylightningnode.com",
color = MaterialTheme.colorScheme.placeholderText,
)
},
singleLine = true,
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.ln_url_outdated)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.lnURL.value,
onValueChange = { postViewModel.lnURL.value = it },
placeholder = {
Text(
text = stringRes(R.string.lnurl),
color = MaterialTheme.colorScheme.placeholderText,
)
},
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.twitter)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.twitter.value,
onValueChange = { postViewModel.twitter.value = it },
placeholder = {
Text(
text = stringRes(R.string.twitter_proof_url_template),
color = MaterialTheme.colorScheme.placeholderText,
)
},
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.mastodon)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.mastodon.value,
onValueChange = { postViewModel.mastodon.value = it },
placeholder = {
Text(
text = stringRes(R.string.mastodon_proof_url_template),
color = MaterialTheme.colorScheme.placeholderText,
)
},
)
Spacer(modifier = Modifier.height(10.dp))
OutlinedTextField(
label = { Text(text = stringRes(R.string.github)) },
modifier = Modifier.fillMaxWidth(),
value = postViewModel.github.value,
onValueChange = { postViewModel.github.value = it },
placeholder = {
Text(
text = stringRes(R.string.github_proof_url_template),
color = MaterialTheme.colorScheme.placeholderText,
)
},
)
}
}
}
}
}

View File

@ -49,6 +49,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.MainActivity
import com.vitorpamplona.amethyst.ui.actions.NewUserMetadataScreen
import com.vitorpamplona.amethyst.ui.actions.relays.AllRelayListView
import com.vitorpamplona.amethyst.ui.components.DisplayErrorMessages
import com.vitorpamplona.amethyst.ui.components.DisplayNotifyMessages
@ -113,6 +114,7 @@ fun AppNavigation(
composable(Route.Video.route) { VideoScreen(accountViewModel, nav) }
composable(Route.Discover.route) { DiscoverScreen(accountViewModel, nav) }
composable(Route.Notification.route) { NotificationScreen(sharedPreferencesViewModel, accountViewModel, nav) }
composable(Route.EditProfile.route) { NewUserMetadataScreen(nav, accountViewModel) }
composable(Route.Search.route) { SearchScreen(accountViewModel, nav) }

View File

@ -209,6 +209,12 @@ sealed class Route(
icon = R.drawable.ic_settings,
)
object EditProfile :
Route(
route = "EditProfile",
icon = R.drawable.ic_settings,
)
object EditRelays :
Route(
route = "EditRelays?toAdd={toAdd}",

View File

@ -125,7 +125,6 @@ import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.service.NostrUserProfileDataSource
import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled
import com.vitorpamplona.amethyst.ui.actions.InformationDialog
import com.vitorpamplona.amethyst.ui.actions.NewUserMetadataView
import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji
import com.vitorpamplona.amethyst.ui.components.DisplayNip05ProfileStatus
import com.vitorpamplona.amethyst.ui.components.InvoiceRequestCard
@ -137,6 +136,7 @@ import com.vitorpamplona.amethyst.ui.dal.UserProfileReportsFeedFilter
import com.vitorpamplona.amethyst.ui.feeds.FeedState
import com.vitorpamplona.amethyst.ui.feeds.ScrollStateKeys
import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.navigation.Route
import com.vitorpamplona.amethyst.ui.navigation.routeToMessage
import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture
import com.vitorpamplona.amethyst.ui.note.DrawPlayName
@ -862,7 +862,7 @@ private fun ProfileHeader(
) {
MessageButton(baseUser, accountViewModel, nav)
ProfileActions(baseUser, accountViewModel)
ProfileActions(baseUser, accountViewModel, nav)
}
}
@ -886,12 +886,13 @@ private fun ProfileHeader(
private fun ProfileActions(
baseUser: User,
accountViewModel: AccountViewModel,
nav: INav,
) {
val isMe by
remember(accountViewModel) { derivedStateOf { accountViewModel.userProfile() == baseUser } }
if (isMe) {
EditButton(accountViewModel)
EditButton(nav)
}
WatchIsHiddenUser(baseUser, accountViewModel) { isHidden ->
@ -1847,14 +1848,8 @@ private fun MessageButton(
}
@Composable
private fun EditButton(accountViewModel: AccountViewModel) {
var wantsToEdit by remember { mutableStateOf(false) }
if (wantsToEdit) {
NewUserMetadataView({ wantsToEdit = false }, accountViewModel)
}
InnerEditButton { wantsToEdit = true }
private fun EditButton(nav: INav) {
InnerEditButton { nav.nav(Route.EditProfile.route) }
}
@Preview

View File

@ -18,6 +18,7 @@
<string name="spam">محتوى عشوائي</string>
<string name="impersonation">التمثيل</string>
<string name="illegal_behavior">تصرف غير قانوني</string>
<string name="other">أخرى</string>
<string name="unknown">غير معروف</string>
<string name="relay_icon">أيقونة الخادم</string>
<string name="unknown_author">كاتب غير معروف</string>
@ -45,6 +46,7 @@
<string name="boost">تعزيز</string>
<string name="boosted">معزز</string>
<string name="edited">تم تعديلها</string>
<string name="edited_number">تعديل #%1$s</string>
<string name="original">الأصلية</string>
<string name="quote">إقتباس</string>
<string name="new_amount_in_sats">مبلغ جديد في Sats</string>

View File

@ -184,7 +184,7 @@
<string name="translations_show_in_lang_first">প্রথমে %1$s ভাষায় দেখান</string>
<string name="translations_always_translate_to_lang">সবসময় %1$s ভাষায় অনুবাদ করুন</string>
<string name="translations_never_translate_from_lang">কখনোই %1$s ভাষা থেকে অনুবাদ করবেন না</string>
<string name="nip_05">নস্টার ঠিকানা</string>
<string name="nip_05">Nostr Address</string>
<string name="never">কখনো না</string>
<string name="now">এখন</string>
<string name="h">h</string>
@ -323,6 +323,7 @@
<string name="file_server">ফাইল সার্ভার</string>
<string name="zap_forward_lnAddress">বিজলি-ঠিকানা বা @ব্যবহারকারী</string>
<string name="use_default_servers">ডিফল্ট তালিকা ব্যবহার করুন</string>
<string name="uploading_state_ready">শুরু হয়নি</string>
<string name="upload_server_relays_nip95">আপনার রিলেগুলি (NIP-95)</string>
<string name="upload_server_relays_nip95_explainer">ফাইলগুলো আপনার রিলে দ্বারা গৃহীত হয়। নতুন NIP: তারা এটি সমর্থন করে কিনা দেখে নিন</string>
<string name="connect_via_tor_short">Tor/Orbot সেটআপ করুন</string>
@ -344,6 +345,7 @@
\n৬. Orbot কে প্রক্সি হিসেবে ব্যবহার করতে Activate বোতামটি চাপুন
</string>
<string name="orbot_socks_port">Orbot এর Socks পোর্ট</string>
<string name="tor_custom">পছন্দমতন</string>
<string name="invalid_port_number">পোর্ট নম্বরটি অকার্যকর</string>
<string name="use_orbot">Orbot ব্যবহার করুন</string>
<string name="disconnect_from_your_orbot_setup">Tor/Orbot থেকে সংযোগ বিচ্ছিন্ন করুন</string>
@ -534,6 +536,7 @@
<string name="route_search">অনুসন্ধান করুন</string>
<string name="route_discover">আবিস্কার</string>
<string name="route_messages">বার্তা</string>
<string name="route_notifications">অবহিতকরন</string>
<string name="route_security_filters">নিরাপত্তা-ফিল্টার</string>
<string name="new_post">নতুন পোস্ট</string>
<string name="reply_description">উত্তর</string>
@ -544,6 +547,7 @@
<string name="poll">ভোট</string>
<string name="disable_poll">পোল নিষ্ক্রিয় করুন</string>
<string name="add_location">অবস্থান</string>
<string name="remove_location">অবস্থান সরান</string>
<string name="invalid_nip19_uri">ঠিকানা সঠিক নয়</string>
<string name="zap_the_devs_description">আপনার অনুদান আমাদের পার্থক্য গড়তে সাহায্য করে। প্রতিটি ইঞ্চি গুরুত্বপূর্ণ!</string>
<string name="donate_now">এখনই দান করুন</string>

View File

@ -347,6 +347,7 @@
<string name="add_content">Ajouter au Message</string>
<string name="add_caption">Ajouter une légende</string>
<string name="add_caption_example">Mon adorable ami</string>
<string name="use_direct_url">Utiliser l\'URL directe</string>
<string name="content_description">Description des contenus</string>
<string name="content_description_example">Un bateau bleu sur une plage de sable blanc au coucher du soleil</string>
<string name="zap_type">Type de Zap</string>
@ -810,6 +811,7 @@
<string name="search_relays_not_found_description">La création d\'une liste de relais spécialement conçue pour la recherche et l\'étiquetage utilisateur améliorera ces résultats.</string>
<string name="search_relays_not_found_editing">Insérez de 1 à 3 relais à utiliser lors de la recherche de contenu ou de l\'étiquetage utilisateur. Assurez-vous que les relais que vous avez choisis implémentent le NIP-50</string>
<string name="search_relays_not_found_examples">De bonnes options sont:\n - nostr.wine\n - relay.nostr.band\n - relay.noswhere.com</string>
<string name="dm_upload">Téléversement de MP</string>
<string name="relay_settings">Paramètres du relais</string>
<string name="public_home_section">Relais publics d\'accueil</string>
<string name="public_home_section_explainer">Ce type de relais stocke tout votre contenu. Amethyst enverra vos messages ici et d\'autres utiliseront ces relais pour trouver votre contenu. Insérez entre 1 et 3 relais : il peut s\'agir de relais personnels, de relais payants ou de relais publics.</string>

View File

@ -347,6 +347,7 @@
<string name="add_content">संदेश में जोड दें</string>
<string name="add_caption">शीर्षक जोडें</string>
<string name="add_caption_example">मेरे प्रिय मित्र</string>
<string name="use_direct_url">सीधे जालपता का उपयोग करें</string>
<string name="content_description">विषयवस्तु का विवरण</string>
<string name="content_description_example">एक नीला नाव श्वेत रेतीला तट पर सूर्यास्त पर</string>
<string name="zap_type">ज्साप प्रकार</string>

View File

@ -13,7 +13,7 @@
<string name="channel_image">Csatornakép</string>
<string name="referenced_event_not_found">A hivatkozott esemény nem található</string>
<string name="could_not_decrypt_the_message">Nem sikerült visszafejteni az üzenetet</string>
<string name="group_picture">Csoportkép</string>
<string name="group_picture">Csoport profilképe</string>
<string name="explicit_content">Szókimondó tartalom</string>
<string name="spam">Kéretlen tartalom</string>
<string name="spam_description">Az erről az átjátszóról érkező kéretlen tartalmú események száma</string>
@ -347,6 +347,7 @@
<string name="add_content">Hozzáadás az üzenethez</string>
<string name="add_caption">Képaláírás hozzáadása</string>
<string name="add_caption_example">Kedves barátom</string>
<string name="use_direct_url">Közvetlen webcím használata</string>
<string name="content_description">Tartalmi leírás</string>
<string name="content_description_example">Egy kék csónak a fehér homokos tengerparton naplementekor</string>
<string name="zap_type">Zap-típus</string>
@ -669,7 +670,7 @@
<string name="the_receiver_s_lightning_service_at_is_not_available_it_was_calculated_from_the_lightning_address_error_check_if_the_server_is_up_and_if_the_lightning_address_is_correct">A kedvezményezett lightning-szolgáltatása ennél: %1$s nem érhető el. A(z) „%2$s” lightning-cím lett kiszámítva. Hiba: %3$s. Ellenőrizze, hogy a kiszolgáló működik-e, és hogy a lightning-cím helyes-e</string>
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct">Nem sikerült megoldani a következőt: %1$s. Ellenőrizze, hogy kapcsolódik-e, vagy működik-e a kiszolgáló, és hogy a(z) %2$s lightning-cím helyes-e</string>
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct_exception">Nem sikerült megoldani a következőt: %1$s. Ellenőrizze, hogy kapcsolódik-e, vagy működik-e a kiszolgáló, és hogy a(z) %2$s lightning-cím helyes-e.\n\nKivéve: %3$s</string>
<string name="could_not_fetch_invoice_from">Nem sikerült a számlát a következőtől lekérni: %1$s</string>
<string name="could_not_fetch_invoice_from">Nem sikerült lekérni a számlát a következőtől: %1$s</string>
<string name="could_not_fetch_invoice_from_details">Nem sikerült lekérni a számlát a következőtől: %1$s: %2$s</string>
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup">Hiba a Lightning-címből származó JSON elemzésekor. Ellenőrizze a felhasználó Lightning-beállítását</string>
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup_with_user">Hiba történt a(z) %1$s JSON elemzésekor. Ellenőrizze a felhasználó Lightning-beállítását</string>

View File

@ -347,6 +347,7 @@
<string name="add_content">Voeg toe aan bericht</string>
<string name="add_caption">Onderschrift toevoegen</string>
<string name="add_caption_example">Mijn goede vriend</string>
<string name="use_direct_url">Directe URL gebruiken</string>
<string name="content_description">Beschrijving van de inhoud</string>
<string name="content_description_example">Een blauwe boot in een wit zandstrand bij zonsondergang</string>
<string name="zap_type">Zap type</string>

View File

@ -52,8 +52,8 @@
<string name="login_with_a_private_key_to_be_able_to_show_word">Używasz klucza publicznego, a klucze publiczne są tylko do odczytu. Zaloguj się za pomocą klucza prywatnego, aby móc pokazać słowo lub zdanie</string>
<string name="zaps">Zapy</string>
<string name="view_count">Liczba wyświetleń</string>
<string name="boost">Repost</string>
<string name="boosted">reposted</string>
<string name="boost">Promuj</string>
<string name="boosted">promowany</string>
<string name="edited">edytowano</string>
<string name="edited_number">edytuj #%1$s</string>
<string name="original">oryginalny</string>
@ -76,8 +76,8 @@
<string name="show_more">Pokaż Więcej</string>
<string name="lightning_invoice">Faktura LN</string>
<string name="pay">Zapłać</string>
<string name="lightning_tips">Lightning-wskazówki</string>
<string name="note_to_receiver">Notatka dla odbiorcy</string>
<string name="lightning_tips">Lightning transfer</string>
<string name="note_to_receiver">Wiadomość dla odbiorcy</string>
<string name="thank_you_so_much">Dziękuję bardzo!</string>
<string name="amount_in_sats">Kwota w Satsach</string>
<string name="send_sats">Wyślij Satsy</string>
@ -121,6 +121,8 @@
<string name="ln_url_outdated">Adres URL LN (nieaktualny)</string>
<string name="save_to_gallery">Zapisz w galerii</string>
<string name="image_saved_to_the_gallery">Zdjęcie zostało zapisane w galerii</string>
<string name="video_download_has_started_toast">Rozpoczęto pobieranie wideo…</string>
<string name="media_download_has_started_toast">Rozpoczęto pobieranie plików…</string>
<string name="failed_to_save_the_image">Nie udało się zapisać zdjęcia</string>
<string name="video_saved_to_the_gallery">Film zapisany w galerii filmów</string>
<string name="failed_to_save_the_video">Nie udało się zapisać filmu</string>
@ -205,11 +207,11 @@
<string name="translations_auto">Automatycznie</string>
<string name="translations_translated_from">przetłumaczono z</string>
<string name="translations_to">do</string>
<string name="translations_show_in_lang_first">Najpierw pokaż w %1$s</string>
<string name="translations_show_in_lang_first">Najpierw wyświetl język %1$s</string>
<string name="chat_about_topic">Temat czatu: %1$s</string>
<string name="community_about_topic">Temat dyskusji %1$s</string>
<string name="translations_always_translate_to_lang">Zawsze tłumacz na %1$s</string>
<string name="translations_never_translate_from_lang">Nigdy nie tłumacz z %1$s</string>
<string name="translations_never_translate_from_lang">Język %1$s pokaż nietłumaczony</string>
<string name="nip_05">Adres Nostr</string>
<string name="never">nigdy</string>
<string name="now">teraz</string>
@ -218,7 +220,7 @@
<string name="d">d</string>
<string name="nudity">Nagość</string>
<string name="profanity_hateful_speech">Wulgaryzmy / Mowa nienawiści</string>
<string name="report_hateful_speech">Zgłoś nienawistną mowę</string>
<string name="report_hateful_speech">Zgłoś mowę nienawiści</string>
<string name="report_nudity_porn">Zgłoś Nagość / Pornografię</string>
<string name="others">inne</string>
<string name="mark_all_known_as_read">Oznacz wszystkie popularne jako przeczytane</string>
@ -342,9 +344,10 @@
<string name="content_description_add_image">Dodaj zdjęcie</string>
<string name="content_description_add_video">Dodaj wideo</string>
<string name="content_description_add_document">Dodaj dokument</string>
<string name="add_content">Dodaj do wiadomości</string>
<string name="add_content">Załącz</string>
<string name="add_caption">Dodaj nagłówek</string>
<string name="add_caption_example">Mój przyjacielu</string>
<string name="use_direct_url">Użyj bezpośredniego adresu URL</string>
<string name="content_description">Opis zawartości</string>
<string name="content_description_example">Błękitna łódź na białej piaszczystej plaży o zachodzie słońca</string>
<string name="zap_type">Typ Zap-a</string>
@ -535,7 +538,7 @@
<string name="connectivity_type_never">Nigdy</string>
<string name="ui_feature_set_type_complete">Kompletny</string>
<string name="ui_feature_set_type_simplified">Uproszczony</string>
<string name="ui_feature_set_type_performance">Wydajność</string>
<string name="ui_feature_set_type_performance">Dynamiczny</string>
<string name="system">Automatyczny</string>
<string name="light">Jasny</string>
<string name="dark">Ciemny</string>
@ -597,7 +600,9 @@
<string name="share_or_save">Udostępnij lub Zapisz</string>
<string name="copy_url_to_clipboard">Kopiuj adres URL do schowka</string>
<string name="copy_the_note_id_to_the_clipboard">Kopiuj ID wpisu do schowka</string>
<string name="add_media_to_gallery">Dodaj media do Galerii</string>
<string name="add_media_to_gallery">Dodaj pliki do Galerii</string>
<string name="media_added">Dodano pliki</string>
<string name="media_added_to_profile_gallery">Pliki dodane do Twojej galerii profilu</string>
<string name="created_at">Utworzono</string>
<string name="rules">Zasady</string>
<string name="login_with_external_signer">Zaloguj się za pomocą Amber</string>
@ -606,6 +611,7 @@
<string name="poll_zap_value_min_max_explainer">Głosy są oceniane na podstawie ilości zapperów. Możesz ustawić minimalną kwotę, aby uniknąć spamerów i maksymalną kwotę, aby uniknąć przejęcia ankiety przez dużych zapperów. Użyj tej samej kwoty w obu polach, aby upewnić się, że każdy głos ma taką samą wartość. Pozostaw to pole puste, aby zaakceptować dowolną kwotę.</string>
<string name="error_dialog_zap_error">Nie można wysłać zapa</string>
<string name="error_dialog_talk_to_user">Wyślij wiadomość użytkownikowi</string>
<string name="error_dialog_talk_to_user_name">Wiadomość %1$s</string>
<string name="error_dialog_button_ok">OK</string>
<string name="relay_information_document_error_assemble_url">Nieudane połączenie z %1$s: %2$s</string>
<string name="relay_information_document_error_failed_to_assemble_url">Nie udało się skompilować adresu URL NIP-11 dla %1$s: %2$s</string>
@ -665,6 +671,7 @@
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct">Nie można rozwiązać %1$s. Sprawdź, czy jesteś połączony, czy serwer jest gotowy i czy lightning adres %2$s jest poprawny</string>
<string name="could_not_resolve_check_if_you_are_connected_if_the_server_is_up_and_if_the_lightning_address_is_correct_exception">Nie można rozwiązać %1$s. Sprawdź, czy jesteś połączony, czy serwer jest gotowy i czy lightning adres %2$s jest poprawny.\n\nWyjątkiem było: %3$s</string>
<string name="could_not_fetch_invoice_from">Nie można pobrać faktury z %1$s</string>
<string name="could_not_fetch_invoice_from_details">Nie można pobrać faktury od %1$s: %2$s</string>
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup">Błąd przetwarzania JSON z adresu lightning. Sprawdź konfigurację lightning użytkownika</string>
<string name="error_parsing_json_from_lightning_address_check_the_user_s_lightning_setup_with_user">Błąd przetwarzania JSON z %1$s. Sprawdź konfigurację lightning użytkownika</string>
<string name="callback_url_not_found_in_the_user_s_lightning_address_server_configuration">Adres zwrotny nie został znaleziony w konfiguracji serwera adresu lightning użytkownika</string>
@ -737,7 +744,7 @@
<string name="failed_to_upload_to_server_with_message">Nie udało się wgrać pliku do %1$s: %2$s</string>
<string name="failed_to_upload_with_message">Nie udało się przesłać: %1$s</string>
<string name="failed_to_delete_with_message">Nie udało się usunąć: %1$s</string>
<string name="media_too_big_for_nip95">Media są zbyt duże dla NIP-95</string>
<string name="media_too_big_for_nip95">Pliki są zbyt duże dla NIP-95</string>
<string name="unable_to_load_thumbnail">Nie można załadować miniatury</string>
<string name="could_not_prepare_header">Nie można przygotować informacji nagłówkowych: %1$s</string>
<string name="compression_cancelled">Kompresja anulowana</string>
@ -804,6 +811,7 @@
<string name="search_relays_not_found_description">Stworzenie listy transmiterów specjalnie przeznaczonych do wyszukiwania i tagowania użytkowników poprawi te wyniki.</string>
<string name="search_relays_not_found_editing">Wstaw od 1 do 3 transmiterów, które będą używane podczas wyszukiwania treści lub tagowania użytkowników. Upewnij się, że zaimplementowano NIP-50</string>
<string name="search_relays_not_found_examples">Dobre opcje to:\n - nostr.wine\n - relay.nostr.band\n - relay.noswhere.com</string>
<string name="dm_upload">Wgrywanie DM</string>
<string name="relay_settings">Ustawienia Transmiterów</string>
<string name="public_home_section">Publiczne transmitery domowe</string>
<string name="public_home_section_explainer">Ten typ transmitera przechowuje całą zawartość. Amethyst będzie wysyłać Twoje posty tutaj, a inni będą korzystać z tych transmiterów, aby znaleźć Twoje treści. Wstaw od 1 do 3 transmiterów. Mogą to być transmitery prywatne, płatne lub publiczne.</string>
@ -854,7 +862,7 @@
<string name="accessibility_scan_qr_code">Zeskanuj QR kod</string>
<string name="accessibility_navigate_to_alby">Przejdź do Alby zewnętrznego dostawcy portfela</string>
<string name="it_s_not_possible_to_reply_to_a_draft_note">Nie jest możliwa odpowiedź na szkic wpisu</string>
<string name="it_s_not_possible_to_quote_to_a_draft_note">Nie jest możliwe zacytowanie szkicu notatki</string>
<string name="it_s_not_possible_to_quote_to_a_draft_note">Nie jest możliwe zacytowanie szkicu wpisu</string>
<string name="it_s_not_possible_to_react_to_a_draft_note">Nie jest możliwe reagowanie na szkic wpisu</string>
<string name="it_s_not_possible_to_zap_to_a_draft_note">Nie jest możliwy zap dla szkicu wpisu</string>
<string name="draft_note">Szkic wpisu</string>

View File

@ -150,7 +150,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="notes">Zapiski</string>
<string name="replies">Pogovori</string>
<string name="gallery">Galerija</string>
<string name="follows">"Sledim"</string>
<string name="follows">"Sledi"</string>
<string name="reports">"Reportaže"</string>
<string name="more_options">Več možnosti</string>
<string name="relays">" Releji"</string>
@ -355,6 +355,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="add_content">Dodaj v sporočilo</string>
<string name="add_caption">Dodaj napis</string>
<string name="add_caption_example">Moja draga družba</string>
<string name="use_direct_url">Uporabi direktni URL</string>
<string name="content_description">Opis vsebine</string>
<string name="content_description_example">Modra jadrnica pri beli peščeni plaži ob sončnem zahodu</string>
<string name="zap_type">Vrsta Zap-a</string>
@ -615,7 +616,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="login_with_external_signer">Prijavi se z Amber</string>
<string name="status_update">Posodobi svoj status</string>
<string name="lightning_wallets_not_found">Napaka pri razčlembi sporočila o napaki</string>
<string name="poll_zap_value_min_max_explainer">Glasovi so ovrednoteni glede na količino Zapov. Lahko nastavite minimalni znesek, da se izognete neželeni pošti, in največji znesek, da preprečite, da bi bogatejši volilci prevzeli glasovanje. V obeh poljih uporabite enak znesek, da zagotovite, da je vsak glas enako ovrednoten. Pustite prazno, če želite sprejeti poljubno količino.</string>
<string name="poll_zap_value_min_max_explainer">Glasovi so ovrednoteni glede na količino Zapov. Lahko nastavite minimalni znesek, da se izognete nezaželjenim glasovom, in največji znesek, da preprečite, da bi bogatejši volilci prevzeli glasovanje. V obeh poljih uporabite enak znesek, da zagotovite, da je vsak glas enako ovrednoten. Pustite prazno, če želite sprejeti poljubno količino.</string>
<string name="error_dialog_zap_error">Zap ni uspel</string>
<string name="error_dialog_talk_to_user">Pošlji sporočilo uporabniku</string>
<string name="error_dialog_talk_to_user_name">Sporočilo %1$s</string>
@ -686,10 +687,10 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup">Napaka pri razčlenjevanju JSON med pridobivanjem fakture iz \"lightning\" naslova. Preverite uporabnikove nastavitve za \"Lightning\"</string>
<string name="error_parsing_json_from_lightning_address_s_invoice_fetch_check_the_user_s_lightning_setup_with_user">Napaka pri razčlenjevanju JSON med pridobivanjem fakture iz %1$s. Preverite uporabnikove nastavitve za \"Lightning\"</string>
<string name="incorrect_invoice_amount_sats_from_it_should_have_been">Napačen znesek fakture (%1$s sat) od %2$s. Moral bi biti %3$s</string>
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error">Ni mogoče ustvariti lightning računa pred Zap-anjem. Lightning denarnica prejemnika je poslala naslednjo napako: %1$s</string>
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error_with_user">Ni mogoče ustvariti lightning računa. Sporočilo od %1$s: %2$s.</string>
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json">Ni mogoče ustvariti lightning računa pred Zap-anjem. Element \'pr\' ni bil najden v JSON-u.</string>
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json_with_user">Ni mogoče ustvariti lightning računa od %1$s: Element \'pr\' ni bil najden v JSON-u.</string>
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error">Ni mogoče ustvariti lightning fakture pred plačilom. Lightning denarnica prejemnika je poslala naslednjo napako: %1$s</string>
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_the_receiver_s_lightning_wallet_sent_the_following_error_with_user">Ni mogoče ustvariti lightning fakture. Sporočilo od %1$s: %2$s</string>
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json">Ni mogoče ustvariti lightning fakture pred plačilom. Element \'pr\' ni bil najden v JSON-u.</string>
<string name="unable_to_create_a_lightning_invoice_before_sending_the_zap_element_pr_not_found_in_the_resulting_json_with_user">Ni mogoče ustvariti lightning fakture od %1$s: Element \'pr\' ni bil najden v JSON-u.</string>
<string name="read_only_user">Uporabnik samo za branje</string>
<string name="no_reactions_setup">Ni nastavitev za reakcije</string>
<string name="select_push_server">Izberi \"UnifiedPush\" aplikacijo</string>
@ -803,7 +804,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="remove_content_warning">Odstrani opozorilo o vsebini</string>
<string name="show_npub_as_a_qr_code">Prikaži npub kot QR kodo</string>
<string name="invalid_nip19_uri">Neveljaven naslov</string>
<string name="invalid_nip19_uri_description">Amethyst je prejel zahtevo za odprtje URI-ja, vendar je bil ta URI neveljaven: %1$s</string>
<string name="invalid_nip19_uri_description">Amethyst je prejel zahtevo da odpre URI, vendar je bil ta URI neveljaven: %1$s</string>
<string name="dm_relays_title">Releji predala zasebnih sporočil</string>
<string name="dm_relays_through">Releji: %1$s</string>
<string name="dm_relays_regular">Uporaba običajnih relejev</string>
@ -819,6 +820,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="search_relays_not_found_description">Ustvarjanje seznama relejev, posebej zasnovanega za iskanje in označevanje uporabnikov, bo izboljšalo te rezultate.</string>
<string name="search_relays_not_found_editing">Vnesite 13 releje za iskanje vsebine ali označevanje uporabnikov. Prepričajte se, da vaši izbrani releji podpirajo NIP-50</string>
<string name="search_relays_not_found_examples">Dobre možnosti so\n - nostr.wine\n - relay.nostr.band\n - relay.noswhere.com</string>
<string name="dm_upload">Naloži ZS</string>
<string name="relay_settings">Nastavitve relejev</string>
<string name="public_home_section">Javni za odhajajočo pošto/domači releji</string>
<string name="public_home_section_explainer">Ta tip releja shranjuje vse vaše vsebine. Amethyst bo sem pošiljal vaše objave, ostali uporabniki pa bodo te releje uporabljali za iskanje vaših vsebin. Vstavite 13 releje. To so lahko osebni releji, plačljivi releji ali javni releji.</string>