Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst: fix: preserve search screen scroll position across navigation feat: add audio and PDF file upload support to ShortNotePostScreen New Crowdin translations by GitHub Action
This commit is contained in:
+129
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (c) 2025 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.uploads
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.AttachFile
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.SideEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.R
|
||||
import com.vitorpamplona.amethyst.ui.components.LoadingAnimation
|
||||
import com.vitorpamplona.amethyst.ui.stringRes
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
|
||||
@Composable
|
||||
fun SelectFromFiles(
|
||||
isUploading: Boolean,
|
||||
tint: Color,
|
||||
modifier: Modifier,
|
||||
onFilesChosen: (ImmutableList<SelectedMedia>) -> Unit,
|
||||
) {
|
||||
var showFileSelect by remember { mutableStateOf(false) }
|
||||
if (showFileSelect) {
|
||||
FileSelect(
|
||||
onFilesSelected = { files ->
|
||||
showFileSelect = false
|
||||
if (files.isNotEmpty()) {
|
||||
onFilesChosen(files)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
FileSelectButton(isUploading, tint, modifier) { showFileSelect = true }
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun FileSelectButton(
|
||||
isUploading: Boolean,
|
||||
tint: Color,
|
||||
modifier: Modifier,
|
||||
onClick: () -> Unit,
|
||||
) {
|
||||
IconButton(
|
||||
modifier = modifier,
|
||||
enabled = !isUploading,
|
||||
onClick = { onClick() },
|
||||
) {
|
||||
if (!isUploading) {
|
||||
Icon(
|
||||
imageVector = Icons.Default.AttachFile,
|
||||
contentDescription = stringRes(id = R.string.upload_file),
|
||||
modifier = Modifier.height(25.dp),
|
||||
tint = tint,
|
||||
)
|
||||
} else {
|
||||
LoadingAnimation()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun FileSelect(onFilesSelected: (ImmutableList<SelectedMedia>) -> Unit = {}) {
|
||||
val hasLaunched by remember { mutableStateOf(AtomicBoolean(false)) }
|
||||
val resolver = LocalContext.current.contentResolver
|
||||
|
||||
val launcher =
|
||||
rememberLauncherForActivityResult(
|
||||
contract = ActivityResultContracts.OpenMultipleDocuments(),
|
||||
onResult = { uris: List<Uri> ->
|
||||
onFilesSelected(
|
||||
uris
|
||||
.map {
|
||||
SelectedMedia(it, resolver.getType(it))
|
||||
}.toImmutableList(),
|
||||
)
|
||||
hasLaunched.set(false)
|
||||
},
|
||||
)
|
||||
|
||||
@Composable
|
||||
fun LaunchFilePicker() {
|
||||
SideEffect {
|
||||
if (!hasLaunched.getAndSet(true)) {
|
||||
launcher.launch(
|
||||
arrayOf(
|
||||
"audio/*",
|
||||
"application/pdf",
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LaunchFilePicker()
|
||||
}
|
||||
+4
@@ -55,6 +55,10 @@ class SelectedMedia(
|
||||
fun isImage() = mimeType?.startsWith("image")
|
||||
|
||||
fun isVideo() = mimeType?.startsWith("video")
|
||||
|
||||
fun isAudio() = mimeType?.startsWith("audio")
|
||||
|
||||
fun isDocument() = mimeType == "application/pdf"
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
||||
+50
@@ -28,14 +28,21 @@ import android.os.Build
|
||||
import androidx.compose.animation.core.animateFloatAsState
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.AudioFile
|
||||
import androidx.compose.material.icons.filled.PictureAsPdf
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.ProgressIndicatorDefaults
|
||||
@@ -117,6 +124,16 @@ fun ShowImageGallery(
|
||||
.fillMaxWidth()
|
||||
.windowInsetsPadding(WindowInsets(0.dp, 0.dp, 0.dp, 0.dp)),
|
||||
)
|
||||
} else if (media.isAudio() == true) {
|
||||
FilePreviewPlaceholder(
|
||||
icon = Icons.Default.AudioFile,
|
||||
label = media.mimeType ?: "audio/*",
|
||||
)
|
||||
} else if (media.isDocument() == true) {
|
||||
FilePreviewPlaceholder(
|
||||
icon = Icons.Default.PictureAsPdf,
|
||||
label = media.mimeType ?: "application/pdf",
|
||||
)
|
||||
} else if (media.isVideo() == true && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
var bitmap by remember { mutableStateOf<Bitmap?>(null) }
|
||||
val context = LocalContext.current
|
||||
@@ -254,3 +271,36 @@ fun UploadingState(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun FilePreviewPlaceholder(
|
||||
icon: androidx.compose.ui.graphics.vector.ImageVector,
|
||||
label: String,
|
||||
) {
|
||||
Box(
|
||||
modifier =
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.background(MaterialTheme.colorScheme.surfaceVariant),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.Center,
|
||||
modifier = Modifier.padding(8.dp),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = icon,
|
||||
contentDescription = label,
|
||||
modifier = Modifier.size(40.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
Text(
|
||||
text = label,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
fontSize = 10.sp,
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,8 @@ object ScrollStateKeys {
|
||||
const val DISCOVER_LIVE = "DiscoverLiveFeed"
|
||||
const val DISCOVER_COMMUNITY = "DiscoverCommunitiesFeed"
|
||||
const val DISCOVER_CHATS = "DiscoverChatsFeed"
|
||||
|
||||
const val SEARCH_SCREEN = "SearchFeed"
|
||||
}
|
||||
|
||||
object PagerStateKeys {
|
||||
|
||||
+9
@@ -63,6 +63,7 @@ import com.vitorpamplona.amethyst.model.Note
|
||||
import com.vitorpamplona.amethyst.ui.actions.mediaServers.FileServerSelectionRow
|
||||
import com.vitorpamplona.amethyst.ui.actions.uploads.MAX_VOICE_RECORD_SECONDS
|
||||
import com.vitorpamplona.amethyst.ui.actions.uploads.RecordVoiceButton
|
||||
import com.vitorpamplona.amethyst.ui.actions.uploads.SelectFromFiles
|
||||
import com.vitorpamplona.amethyst.ui.actions.uploads.SelectFromGallery
|
||||
import com.vitorpamplona.amethyst.ui.actions.uploads.SelectedMedia
|
||||
import com.vitorpamplona.amethyst.ui.actions.uploads.TakePictureButton
|
||||
@@ -504,6 +505,14 @@ private fun BottomRowActions(postViewModel: ShortNotePostViewModel) {
|
||||
maxDurationSeconds = MAX_VOICE_RECORD_SECONDS,
|
||||
)
|
||||
|
||||
SelectFromFiles(
|
||||
isUploading = postViewModel.isUploadingImage,
|
||||
tint = MaterialTheme.colorScheme.onBackground,
|
||||
modifier = Modifier,
|
||||
) {
|
||||
postViewModel.selectImage(it)
|
||||
}
|
||||
|
||||
if (postViewModel.canUsePoll) {
|
||||
// These should be hashtag recommendations the user selects in the future.
|
||||
// val hashtag = stringRes(R.string.poll_hashtag)
|
||||
|
||||
+3
-2
@@ -33,7 +33,6 @@ import androidx.compose.foundation.layout.statusBarsPadding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.LazyListState
|
||||
import androidx.compose.foundation.lazy.itemsIndexed
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
@@ -59,7 +58,9 @@ import com.vitorpamplona.amethyst.R
|
||||
import com.vitorpamplona.amethyst.model.LocalCache
|
||||
import com.vitorpamplona.amethyst.model.nip11RelayInfo.loadRelayInfo
|
||||
import com.vitorpamplona.amethyst.service.relayClient.searchCommand.TextSearchDataSourceSubscription
|
||||
import com.vitorpamplona.amethyst.ui.feeds.ScrollStateKeys
|
||||
import com.vitorpamplona.amethyst.ui.feeds.WatchLifecycleAndUpdateModel
|
||||
import com.vitorpamplona.amethyst.ui.feeds.rememberForeverLazyListState
|
||||
import com.vitorpamplona.amethyst.ui.layouts.DisappearingScaffold
|
||||
import com.vitorpamplona.amethyst.ui.navigation.bottombars.AppBottomBar
|
||||
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
|
||||
@@ -107,7 +108,7 @@ fun SearchScreen(
|
||||
) {
|
||||
WatchLifecycleAndUpdateModel(searchBarViewModel)
|
||||
|
||||
val listState = rememberLazyListState()
|
||||
val listState = rememberForeverLazyListState(ScrollStateKeys.SEARCH_SCREEN)
|
||||
|
||||
LaunchedEffect(searchBarViewModel.focusRequester) {
|
||||
searchBarViewModel.focusRequester.requestFocus()
|
||||
|
||||
@@ -419,6 +419,15 @@
|
||||
<string name="wallet_connect_service_secret">Tajemství Wallet Connect</string>
|
||||
<string name="wallet_connect_service_show_secret">Zobrazit tajný klíč</string>
|
||||
<string name="wallet_connect_service_secret_placeholder">nsec / hex soukromý klíč</string>
|
||||
<string name="wallet_connect_status_connected">Připojeno</string>
|
||||
<string name="wallet_connect_status_not_connected">Nepřipojeno</string>
|
||||
<string name="wallet_connect_manual_config">Pokročilé: zadejte podrobnosti připojení ručně</string>
|
||||
<string name="quick_zap_amounts">Rychlé částky Zap</string>
|
||||
<string name="quick_zap_amounts_explainer">Zobrazí se při stisknutí tlačítka zap. Klepnutím na částku ji odeberete. Pokud ponecháte prázdné, otevře se pokaždé dialog pro zadání částky.</string>
|
||||
<string name="zap_privacy_section">Soukromí Zap</string>
|
||||
<string name="zap_type_section_explainer">Určuje, jak je zobrazena vaše identita při odesílání zapsu.</string>
|
||||
<string name="wallet_connect_connect_app">Připojit peněženku</string>
|
||||
<string name="see_relay_feed">Zobrazit kanál relé</string>
|
||||
<string name="pledge_amount_in_sats">Částka záruky v sats</string>
|
||||
<string name="post_poll">Zveřejnit hlasování</string>
|
||||
<string name="poll_heading_required">Povinná pole:</string>
|
||||
@@ -658,6 +667,7 @@
|
||||
<string name="read_from_relay_description">Množství bajtů, které bylo přijato z tohoto relé, včetně filtrů a událostí</string>
|
||||
<string name="an_error_occurred_trying_to_get_relay_information">Při pokusu o získání informací z Relay se vyskytla chyba z %1$s</string>
|
||||
<string name="owner">Vlastník</string>
|
||||
<string name="used_by">Používáno</string>
|
||||
<string name="self">Servisní klíč</string>
|
||||
<string name="running_software">Spuštěno %1$s</string>
|
||||
<string name="running_software_version">Spuštěno %1$s (%2$s)</string>
|
||||
@@ -853,6 +863,7 @@
|
||||
<string name="load_image_description">Kdy načíst obrázek</string>
|
||||
<string name="copy_stack_to_clipboard">Kopírovat zásobník</string>
|
||||
<string name="copy_to_clipboard">Kopírovat do schránky</string>
|
||||
<string name="copy_nprofile_to_clipboard">Zkopírovat nprofile do schránky</string>
|
||||
<string name="copy_npub_to_clipboard">Kopírovat npub do schránky</string>
|
||||
<string name="share_or_save">Sdílet nebo Uložit</string>
|
||||
<string name="copy_url_to_clipboard">Kopírovat URL do schránky</string>
|
||||
@@ -1076,6 +1087,7 @@
|
||||
<string name="add_content_warning">Přidat upozornění na obsah</string>
|
||||
<string name="remove_content_warning">Odstranit upozornění na obsah</string>
|
||||
<string name="show_npub_as_a_qr_code">Zobrazit npub jako QR kód</string>
|
||||
<string name="show_nprofile_as_a_qr_code">Zobrazit nprofile jako QR kód</string>
|
||||
<string name="invalid_nip19_uri">Neplatná adresa</string>
|
||||
<string name="invalid_nip19_uri_description">Amethyst obdržel URI k otevření, ale tento URI byl neplatný: %1$s</string>
|
||||
<string name="dm_relays_title">Relé DM Schránky</string>
|
||||
@@ -1458,16 +1470,4 @@
|
||||
<string name="kind_voice_msg">Hlasová zpráva</string>
|
||||
<string name="kind_voice_reply">Hlasová odpověď</string>
|
||||
<string name="kind_wiki">Wiki</string>
|
||||
<string name="see_relay_feed">Zobrazit kanál relé</string>
|
||||
<string name="used_by">Používáno</string>
|
||||
<string name="copy_nprofile_to_clipboard">Zkopírovat nprofile do schránky</string>
|
||||
<string name="show_nprofile_as_a_qr_code">Zobrazit nprofile jako QR kód</string>
|
||||
<string name="quick_zap_amounts_explainer">Zobrazí se při stisknutí tlačítka zap. Klepnutím na částku ji odeberete. Pokud ponecháte prázdné, otevře se pokaždé dialog pro zadání částky.</string>
|
||||
<string name="wallet_connect_status_connected">Připojeno</string>
|
||||
<string name="wallet_connect_status_not_connected">Nepřipojeno</string>
|
||||
<string name="wallet_connect_manual_config">Pokročilé: zadejte podrobnosti připojení ručně</string>
|
||||
<string name="quick_zap_amounts">Rychlé částky Zap</string>
|
||||
<string name="zap_privacy_section">Soukromí Zap</string>
|
||||
<string name="zap_type_section_explainer">Určuje, jak je zobrazena vaše identita při odesílání zapsu.</string>
|
||||
<string name="wallet_connect_connect_app">Připojit peněženku</string>
|
||||
</resources>
|
||||
|
||||
@@ -425,6 +425,15 @@ anz der Bedingungen ist erforderlich</string>
|
||||
<string name="wallet_connect_service_secret">Wallet-Verbindungs-Geheimnis</string>
|
||||
<string name="wallet_connect_service_show_secret">Geheimen Schlüssel anzeigen</string>
|
||||
<string name="wallet_connect_service_secret_placeholder">nsec / hexadezimaler privater Schlüssel</string>
|
||||
<string name="wallet_connect_status_connected">Verbunden</string>
|
||||
<string name="wallet_connect_status_not_connected">Nicht verbunden</string>
|
||||
<string name="wallet_connect_manual_config">Erweitert: Verbindungsdetails manuell eingeben</string>
|
||||
<string name="quick_zap_amounts">Schnelle Zap-Beträge</string>
|
||||
<string name="quick_zap_amounts_explainer">Wird beim Drücken der Zap-Schaltfläche angezeigt. Tippe auf einen Betrag, um ihn zu entfernen. Wenn du es leer lässt, wird jedes Mal ein Dialog zur Eingabe eines Betrags geöffnet.</string>
|
||||
<string name="zap_privacy_section">Zap-Datenschutz</string>
|
||||
<string name="zap_type_section_explainer">Legt fest, wie deine Identität beim Senden eines Zaps angezeigt wird.</string>
|
||||
<string name="wallet_connect_connect_app">Wallet verbinden</string>
|
||||
<string name="see_relay_feed">Relay-Feed anzeigen</string>
|
||||
<string name="pledge_amount_in_sats">Spendenbetrag in Sats</string>
|
||||
<string name="post_poll">Umfrage veröffentlichen</string>
|
||||
<string name="poll_heading_required">Erforderliche Felder:</string>
|
||||
@@ -663,6 +672,7 @@ anz der Bedingungen ist erforderlich</string>
|
||||
<string name="read_from_relay_description">Die Menge in Bytes, die von diesem Relais empfangen wurde, einschließlich Filter und Ereignisse</string>
|
||||
<string name="an_error_occurred_trying_to_get_relay_information">Ein Fehler ist beim Abrufen von Relay-Informationen von %1$s aufgetreten</string>
|
||||
<string name="owner">Inhaber</string>
|
||||
<string name="used_by">Verwendet von</string>
|
||||
<string name="self">Service-Schlüssel</string>
|
||||
<string name="running_software">%1$s wird ausgeführt</string>
|
||||
<string name="running_software_version">%1$s wird ausgeführt (%2$s)</string>
|
||||
@@ -858,6 +868,7 @@ anz der Bedingungen ist erforderlich</string>
|
||||
<string name="load_image_description">Wann Bilder geladen werden sollen</string>
|
||||
<string name="copy_stack_to_clipboard">Stapel kopieren</string>
|
||||
<string name="copy_to_clipboard">In Zwischenablage kopieren</string>
|
||||
<string name="copy_nprofile_to_clipboard">nprofile in die Zwischenablage kopieren</string>
|
||||
<string name="copy_npub_to_clipboard">Npub in Zwischenablage kopieren</string>
|
||||
<string name="share_or_save">Teilen oder Speichern</string>
|
||||
<string name="copy_url_to_clipboard">URL in die Zwischenablage kopieren</string>
|
||||
@@ -1081,6 +1092,7 @@ anz der Bedingungen ist erforderlich</string>
|
||||
<string name="add_content_warning">Inhaltswarnung hinzufügen</string>
|
||||
<string name="remove_content_warning">Inhaltswarnung entfernen</string>
|
||||
<string name="show_npub_as_a_qr_code">Npub als QR-Code anzeigen</string>
|
||||
<string name="show_nprofile_as_a_qr_code">nprofile als QR-Code anzeigen</string>
|
||||
<string name="invalid_nip19_uri">Ungültige Adresse</string>
|
||||
<string name="invalid_nip19_uri_description">Amethyst hat eine URI zum Öffnen erhalten, aber diese URI war ungültig: %1$s</string>
|
||||
<string name="dm_relays_title">DM Posteingangs-Relais</string>
|
||||
@@ -1463,16 +1475,4 @@ anz der Bedingungen ist erforderlich</string>
|
||||
<string name="kind_voice_msg">Sprachnachricht</string>
|
||||
<string name="kind_voice_reply">Sprachantwort</string>
|
||||
<string name="kind_wiki">Wiki</string>
|
||||
<string name="see_relay_feed">Relay-Feed anzeigen</string>
|
||||
<string name="used_by">Verwendet von</string>
|
||||
<string name="copy_nprofile_to_clipboard">nprofile in die Zwischenablage kopieren</string>
|
||||
<string name="show_nprofile_as_a_qr_code">nprofile als QR-Code anzeigen</string>
|
||||
<string name="quick_zap_amounts_explainer">Wird beim Drücken der Zap-Schaltfläche angezeigt. Tippe auf einen Betrag, um ihn zu entfernen. Wenn du es leer lässt, wird jedes Mal ein Dialog zur Eingabe eines Betrags geöffnet.</string>
|
||||
<string name="wallet_connect_status_connected">Verbunden</string>
|
||||
<string name="wallet_connect_status_not_connected">Nicht verbunden</string>
|
||||
<string name="wallet_connect_manual_config">Erweitert: Verbindungsdetails manuell eingeben</string>
|
||||
<string name="quick_zap_amounts">Schnelle Zap-Beträge</string>
|
||||
<string name="zap_privacy_section">Zap-Datenschutz</string>
|
||||
<string name="zap_type_section_explainer">Legt fest, wie deine Identität beim Senden eines Zaps angezeigt wird.</string>
|
||||
<string name="wallet_connect_connect_app">Wallet verbinden</string>
|
||||
</resources>
|
||||
|
||||
@@ -867,6 +867,7 @@
|
||||
<string name="load_image_description">Mikor töltse be a képeket</string>
|
||||
<string name="copy_stack_to_clipboard">Köteg másolása</string>
|
||||
<string name="copy_to_clipboard">Másolás a vágólapra</string>
|
||||
<string name="copy_nprofile_to_clipboard">nprofile-kulcs vágólapra másolása</string>
|
||||
<string name="copy_npub_to_clipboard">Npub másolása a vágólapra</string>
|
||||
<string name="share_or_save">Megosztás vagy mentés</string>
|
||||
<string name="copy_url_to_clipboard">Webcím másolása a vágólapra</string>
|
||||
@@ -1056,6 +1057,19 @@
|
||||
<string name="like_description">Tetszik</string>
|
||||
<string name="zap_description">Zap</string>
|
||||
<string name="change_reaction">Gyors reakciók megváltoztatása</string>
|
||||
<string name="reactions_settings">Reakciósor</string>
|
||||
<string name="reactions_settings_description">Állítsa be, hogy mely reakciógombok jelenjenek meg, azok sorrendjét, valamint a számlálók megjelenítését.</string>
|
||||
<string name="reactions_settings_enabled">Engedélyezve</string>
|
||||
<string name="reactions_settings_show_counter">Számláló megjelenítése</string>
|
||||
<string name="reactions_settings_reorder">Újrarendezés</string>
|
||||
<string name="reactions_settings_reply">Válasz</string>
|
||||
<string name="reactions_settings_reply_description">Válasz erre a bejegyzésre</string>
|
||||
<string name="reactions_settings_boost">Megtolás</string>
|
||||
<string name="reactions_settings_like_description">Reagálás erre a bejegyzésre egy hangulatjellel</string>
|
||||
<string name="reactions_settings_zap">Zap</string>
|
||||
<string name="reactions_settings_zap_description">Lightning fizetés küldése a szerzőnek</string>
|
||||
<string name="reactions_settings_share">Megosztás</string>
|
||||
<string name="reactions_settings_share_description">Ennek a bejegyzésnek a megosztása külső alkalmazásban</string>
|
||||
<string name="profile_image_of_user">%1$s profilképe</string>
|
||||
<string name="relay_info">%1$s átjátszó</string>
|
||||
<string name="expand_relay_list">Átjátszólista kibontása</string>
|
||||
@@ -1075,6 +1089,7 @@
|
||||
<string name="add_content_warning">Tartalmi figyelmeztetés hozzáadása</string>
|
||||
<string name="remove_content_warning">Tartalmi figyelmeztetés eltávolítása</string>
|
||||
<string name="show_npub_as_a_qr_code">Az npub-kulcs megjelenítése QR-kódként</string>
|
||||
<string name="show_nprofile_as_a_qr_code">nprofile-kulcs megjelenítése QR-kódként</string>
|
||||
<string name="invalid_nip19_uri">Érvénytelen cím</string>
|
||||
<string name="invalid_nip19_uri_description">Az Amethyst kapott egy URI-t a megnyitáshoz, de az érvénytelen volt: %1$s</string>
|
||||
<string name="dm_relays_title">Bejövő átjátszók a privát üzenetekhez</string>
|
||||
@@ -1127,6 +1142,9 @@
|
||||
<string name="trusted_relays_title">Megbízható átjátszók</string>
|
||||
<string name="trusted_section">Megbízható átjátszók</string>
|
||||
<string name="trusted_section_explainer">Az átjátszóknak, amelyekben megbízik, nincs szükségük Tor kapcsolatra a következőhöz:</string>
|
||||
<string name="favorite_relays_title">Kedvenc átjátszó-hírforrások</string>
|
||||
<string name="favorite_section">Kedvenc átjátszó-hírforrások</string>
|
||||
<string name="favorite_section_explainer">Átjátszók, amelyeket gyakran felkeres a globális hírfolyamuk megtekintéséhez</string>
|
||||
<string name="proxy_relays_title">Proxyzott átjátszók</string>
|
||||
<string name="proxy_section">Proxyzott átjátszók</string>
|
||||
<string name="proxy_section_explainer">Összesítő átjátszók, amelyeket az alkalmazásnak használnia kell a hírfolyamok letöltéséhez, például filter.nostr.wine. Ez helyettesíti a kimeneti modellt, és az alkalmazás csak a listákban szereplő átjátszókhoz fog csatlakozni.</string>
|
||||
@@ -1172,6 +1190,7 @@
|
||||
<string name="accessibility_pushpin">Kapcsolatrögzítő (Pushpin)</string>
|
||||
<string name="accessibility_scan_qr_code">QR-kód beolvasása</string>
|
||||
<string name="accessibility_navigate_to_alby">Harmadik féltől származó pénztárca-szolgáltató felkeresése: Alby</string>
|
||||
<string name="accessibility_select_date">Dátum kiválasztása</string>
|
||||
<string name="it_s_not_possible_to_reply_to_a_draft_note">A piszkozatokra nem lehet válaszolni</string>
|
||||
<string name="it_s_not_possible_to_quote_to_a_draft_note">A piszkozatokat nem lehet idézni</string>
|
||||
<string name="it_s_not_possible_to_react_to_a_draft_note">A piszkozatokra nem lehet reagálni</string>
|
||||
@@ -1308,5 +1327,36 @@
|
||||
<string name="confirm">Megerősítés</string>
|
||||
<string name="next">Következő</string>
|
||||
<string name="add_poll_option_button">Szavazati lehetőség hozzáadása</string>
|
||||
<string name="go_back">Vissza</string>
|
||||
<string name="approve">Elfogadás</string>
|
||||
<string name="connected">Kapcsolódva</string>
|
||||
<string name="social_proof">Közösségi megerősítés</string>
|
||||
<string name="poll_submit">Beküldés</string>
|
||||
<string name="restart">Újraindítás</string>
|
||||
<string name="chess_accept">Elfogadás</string>
|
||||
<string name="chess_decline">Elutasítás</string>
|
||||
<string name="chess_new_game">Új játék</string>
|
||||
<string name="new_chess_game">Új sakkjáték</string>
|
||||
<string name="chess_loading_game">Játék betöltése\u2026</string>
|
||||
<string name="chess_game_not_found">Nem található játék</string>
|
||||
<string name="chess_game_waiting">Ez a játék már véget ért, vagy ellenfelet vár.</string>
|
||||
<string name="chess_game_id">Játékazonosító: %1$s\u2026</string>
|
||||
<string name="badge_and_n_others"> és %1$d további</string>
|
||||
<string name="remove_language">%1$s eltávolítása</string>
|
||||
<!-- Kind display names for relay subscription filter chips -->
|
||||
<string name="kind_outbox_relays">Kimenő átjátszók</string>
|
||||
<string name="kind_apps">Alkalmazások</string>
|
||||
<string name="kind_app_recommendations">Ajánlott alkalmazások </string>
|
||||
<string name="kind_user_settings">Felhasználói beállítások</string>
|
||||
<string name="kind_audio_header">Audio-fejléc</string>
|
||||
<string name="kind_audio_track">Hangsáv</string>
|
||||
<string name="kind_badge_awards">Jelvénydíjak</string>
|
||||
<string name="kind_badge_definitions">Jelvények meghatározása</string>
|
||||
<string name="kind_profile_badges">Profiljelvények</string>
|
||||
<string name="kind_blocked_relays">Letiltott átjátszók</string>
|
||||
<string name="kind_blossom_servers">Blossom kiszolgálók</string>
|
||||
<string name="kind_blossom_auth">Blossom-hitelesítés</string>
|
||||
<string name="kind_broadcast_relays">Közvetítési átjátszók</string>
|
||||
<string name="kind_bookmark_list">Könyvjelzőlista</string>
|
||||
<string name="kind_day_appointment">Napi bejegyzés</string>
|
||||
</resources>
|
||||
|
||||
@@ -419,6 +419,15 @@
|
||||
<string name="wallet_connect_service_secret">Segredo do Wallet Connect</string>
|
||||
<string name="wallet_connect_service_show_secret">Mostrar chave secreta</string>
|
||||
<string name="wallet_connect_service_secret_placeholder">chave privada nsec / hex</string>
|
||||
<string name="wallet_connect_status_connected">Conectado</string>
|
||||
<string name="wallet_connect_status_not_connected">Não conectado</string>
|
||||
<string name="wallet_connect_manual_config">Avançado: inserir detalhes de conexão manualmente</string>
|
||||
<string name="quick_zap_amounts">Valores Rápidos de Zap</string>
|
||||
<string name="quick_zap_amounts_explainer">Exibido ao pressionar o botão de zap. Toque em um valor para removê-lo. Se deixar vazio, abrirá o diálogo para inserir um valor todas as vezes.</string>
|
||||
<string name="zap_privacy_section">Privacidade do Zap</string>
|
||||
<string name="zap_type_section_explainer">Controla como sua identidade é exibida ao enviar um Zap.</string>
|
||||
<string name="wallet_connect_connect_app">Conectar Carteira</string>
|
||||
<string name="see_relay_feed">Ver feed do Relay</string>
|
||||
<string name="pledge_amount_in_sats">Valor em Sats</string>
|
||||
<string name="post_poll">Postar enquete</string>
|
||||
<string name="poll_heading_required">Campos obrigatórios:</string>
|
||||
@@ -658,6 +667,7 @@
|
||||
<string name="read_from_relay_description">A quantidade em bytes que foi recebida deste relé, incluindo filtros e eventos</string>
|
||||
<string name="an_error_occurred_trying_to_get_relay_information">Ocorreu um erro ao tentar obter informações do relay de %1$s</string>
|
||||
<string name="owner">Proprietário</string>
|
||||
<string name="used_by">Usado por</string>
|
||||
<string name="self">Chave de serviço</string>
|
||||
<string name="running_software">Executando %1$s</string>
|
||||
<string name="running_software_version">Executando %1$s (%2$s)</string>
|
||||
@@ -853,6 +863,7 @@
|
||||
<string name="load_image_description">Quando carregar imagens</string>
|
||||
<string name="copy_stack_to_clipboard">Copiar a Pilha</string>
|
||||
<string name="copy_to_clipboard">Copiar para a Área de Transferência</string>
|
||||
<string name="copy_nprofile_to_clipboard">Copiar nprofile para a área de transferência</string>
|
||||
<string name="copy_npub_to_clipboard">Copiar npub para a área de transferência</string>
|
||||
<string name="share_or_save">Compartilhar ou Salvar</string>
|
||||
<string name="copy_url_to_clipboard">Copiar URL para a área de transferência</string>
|
||||
@@ -1076,6 +1087,7 @@
|
||||
<string name="add_content_warning">Adicionar aviso de conteúdo</string>
|
||||
<string name="remove_content_warning">Remover aviso de conteúdo</string>
|
||||
<string name="show_npub_as_a_qr_code">Mostrar npub como um código QR</string>
|
||||
<string name="show_nprofile_as_a_qr_code">Mostrar nprofile como QR code</string>
|
||||
<string name="invalid_nip19_uri">Endereço inválido</string>
|
||||
<string name="invalid_nip19_uri_description">O Amethyst recebeu um URI para abrir, mas esse URI era inválido: %1$s</string>
|
||||
<string name="dm_relays_title">Relés da Caixa de Entrada de DM</string>
|
||||
@@ -1458,16 +1470,4 @@
|
||||
<string name="kind_voice_msg">Mensagem de voz</string>
|
||||
<string name="kind_voice_reply">Resposta de voz</string>
|
||||
<string name="kind_wiki">Wiki</string>
|
||||
<string name="see_relay_feed">Ver feed do Relay</string>
|
||||
<string name="used_by">Usado por</string>
|
||||
<string name="copy_nprofile_to_clipboard">Copiar nprofile para a área de transferência</string>
|
||||
<string name="show_nprofile_as_a_qr_code">Mostrar nprofile como QR code</string>
|
||||
<string name="quick_zap_amounts_explainer">Exibido ao pressionar o botão de zap. Toque em um valor para removê-lo. Se deixar vazio, abrirá o diálogo para inserir um valor todas as vezes.</string>
|
||||
<string name="wallet_connect_status_connected">Conectado</string>
|
||||
<string name="wallet_connect_status_not_connected">Não conectado</string>
|
||||
<string name="wallet_connect_manual_config">Avançado: inserir detalhes de conexão manualmente</string>
|
||||
<string name="quick_zap_amounts">Valores Rápidos de Zap</string>
|
||||
<string name="zap_privacy_section">Privacidade do Zap</string>
|
||||
<string name="zap_type_section_explainer">Controla como sua identidade é exibida ao enviar um Zap.</string>
|
||||
<string name="wallet_connect_connect_app">Conectar Carteira</string>
|
||||
</resources>
|
||||
|
||||
@@ -419,6 +419,15 @@
|
||||
<string name="wallet_connect_service_secret">Wallet Connect hemlighet</string>
|
||||
<string name="wallet_connect_service_show_secret">Visa secret key</string>
|
||||
<string name="wallet_connect_service_secret_placeholder">nsec / hex privat nyckel</string>
|
||||
<string name="wallet_connect_status_connected">Ansluten</string>
|
||||
<string name="wallet_connect_status_not_connected">Inte ansluten</string>
|
||||
<string name="wallet_connect_manual_config">Avancerat: ange anslutningsinformation manuellt</string>
|
||||
<string name="quick_zap_amounts">Snabba Zap-belopp</string>
|
||||
<string name="quick_zap_amounts_explainer">Visas när du trycker på Zap-knappen. Tryck på ett belopp för att ta bort det. Om du lämnar det tomt öppnas en dialog för att ange ett belopp varje gång.</string>
|
||||
<string name="zap_privacy_section">Zap-sekretess</string>
|
||||
<string name="zap_type_section_explainer">Styr hur din identitet visas när du skickar ett Zap.</string>
|
||||
<string name="wallet_connect_connect_app">Anslut plånbok</string>
|
||||
<string name="see_relay_feed">Visa relä-flöde</string>
|
||||
<string name="pledge_amount_in_sats">Pantbelopp i Sats</string>
|
||||
<string name="post_poll">Dela Poll</string>
|
||||
<string name="poll_heading_required">Obligatoriska fält:</string>
|
||||
@@ -657,6 +666,7 @@
|
||||
<string name="read_from_relay_description">Mängden data i byte som mottogs från detta relä, inklusive filter och händelser</string>
|
||||
<string name="an_error_occurred_trying_to_get_relay_information">Ett fel inträffade vid försök att hämta information från Relay %1$s</string>
|
||||
<string name="owner">Ägare</string>
|
||||
<string name="used_by">Används av</string>
|
||||
<string name="self">Service-nyckel</string>
|
||||
<string name="running_software">Kör %1$s</string>
|
||||
<string name="running_software_version">Kör %1$s (%2$s)</string>
|
||||
@@ -852,6 +862,7 @@
|
||||
<string name="load_image_description">När bilder ska laddas</string>
|
||||
<string name="copy_stack_to_clipboard">Kopiera stacken</string>
|
||||
<string name="copy_to_clipboard">Kopiera till Urklipp</string>
|
||||
<string name="copy_nprofile_to_clipboard">Kopiera nprofile till urklipp</string>
|
||||
<string name="copy_npub_to_clipboard">Kopiera npub till urklipp</string>
|
||||
<string name="share_or_save">Dela eller Spara</string>
|
||||
<string name="copy_url_to_clipboard">Kopiera URL till urklipp</string>
|
||||
@@ -1075,6 +1086,7 @@
|
||||
<string name="add_content_warning">Lägg till varning för innehåll</string>
|
||||
<string name="remove_content_warning">Ta bort varning för innehåll</string>
|
||||
<string name="show_npub_as_a_qr_code">Visa npub som en QR-kod</string>
|
||||
<string name="show_nprofile_as_a_qr_code">Visa nprofile som QR-kod</string>
|
||||
<string name="invalid_nip19_uri">Ogiltig adress</string>
|
||||
<string name="invalid_nip19_uri_description">Amethyst fick en URI att öppna men den URI var ogiltig: %1$s</string>
|
||||
<string name="dm_relays_title">DM Inkorg Reläer</string>
|
||||
@@ -1457,16 +1469,4 @@
|
||||
<string name="kind_voice_msg">Röstmeddelande</string>
|
||||
<string name="kind_voice_reply">Röstsvar</string>
|
||||
<string name="kind_wiki">Wiki</string>
|
||||
<string name="see_relay_feed">Visa relä-flöde</string>
|
||||
<string name="used_by">Används av</string>
|
||||
<string name="copy_nprofile_to_clipboard">Kopiera nprofile till urklipp</string>
|
||||
<string name="show_nprofile_as_a_qr_code">Visa nprofile som QR-kod</string>
|
||||
<string name="quick_zap_amounts_explainer">Visas när du trycker på Zap-knappen. Tryck på ett belopp för att ta bort det. Om du lämnar det tomt öppnas en dialog för att ange ett belopp varje gång.</string>
|
||||
<string name="wallet_connect_status_connected">Ansluten</string>
|
||||
<string name="wallet_connect_status_not_connected">Inte ansluten</string>
|
||||
<string name="wallet_connect_manual_config">Avancerat: ange anslutningsinformation manuellt</string>
|
||||
<string name="quick_zap_amounts">Snabba Zap-belopp</string>
|
||||
<string name="zap_privacy_section">Zap-sekretess</string>
|
||||
<string name="zap_type_section_explainer">Styr hur din identitet visas när du skickar ett Zap.</string>
|
||||
<string name="wallet_connect_connect_app">Anslut plånbok</string>
|
||||
</resources>
|
||||
|
||||
@@ -170,6 +170,7 @@
|
||||
<string name="video_saved_to_the_gallery">Video saved to the phone\'s video gallery</string>
|
||||
<string name="failed_to_save_the_video">Failed to save the video</string>
|
||||
<string name="upload_image">Upload Image</string>
|
||||
<string name="upload_file">Upload File</string>
|
||||
<string name="take_a_picture">Take a picture</string>
|
||||
<string name="record_a_video">Record a video</string>
|
||||
<string name="record_a_message">Record a message</string>
|
||||
|
||||
Reference in New Issue
Block a user