diff --git a/README.md b/README.md index bab0a73aa..27e371412 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Join the social network you control. [![JitPack version](https://jitpack.io/v/vitorpamplona/amethyst.svg)](https://jitpack.io/#vitorpamplona/amethyst) [![CI](https://img.shields.io/github/actions/workflow/status/vitorpamplona/amethyst/build.yml?labelColor=27303D)](https://github.com/vitorpamplona/amethyst/actions/workflows/build.yml) [![License: Apache-2.0](https://img.shields.io/github/license/vitorpamplona/amethyst?labelColor=27303D&color=0877d2)](/LICENSE) +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/vitorpamplona/amethyst) ## Download and Install diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AccountSyncedSettings.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AccountSyncedSettings.kt index c6a6bb951..8ee4e293f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AccountSyncedSettings.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AccountSyncedSettings.kt @@ -113,6 +113,10 @@ class AccountSyncedSettings( security.warnAboutPostsWithReports = syncedSettingsInternal.security.warnAboutPostsWithReports } } + + fun dontTranslateFromFilteredBySpokenLanguages(): Set { + return languages.dontTranslateFrom - getLanguagesSpokenByUser() + } } @Stable diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/MediaSaverToDisk.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/MediaSaverToDisk.kt index 00f35edb7..d3e3e3b8b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/MediaSaverToDisk.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/MediaSaverToDisk.kt @@ -201,10 +201,11 @@ object MediaSaverToDisk { contentSource: BufferedSource, contentResolver: ContentResolver, ) { + val cleanMimeType = contentType.substringBefore(";").trim() val contentValues = ContentValues().apply { put(MediaStore.MediaColumns.DISPLAY_NAME, displayName) - put(MediaStore.MediaColumns.MIME_TYPE, contentType) + put(MediaStore.MediaColumns.MIME_TYPE, cleanMimeType) put( MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + File.separatorChar + PICTURES_SUBDIRECTORY, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt index 37cf32550..53d3312a7 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt @@ -84,6 +84,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.search.SearchScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.NIP47SetupScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.SecurityFiltersScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.SettingsScreen +import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.UserSettingsScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.threadview.ThreadScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.video.VideoScreen import com.vitorpamplona.amethyst.ui.screen.loggedOff.AddAccountDialog @@ -124,6 +125,7 @@ fun AppNavigation( composableFromEnd { BookmarkListScreen(accountViewModel, nav) } composableFromEnd { DraftListScreen(accountViewModel, nav) } composableFromEnd { SettingsScreen(sharedPreferencesViewModel, accountViewModel, nav) } + composableFromEnd { UserSettingsScreen(accountViewModel, nav) } composableFromBottomArgs { NIP47SetupScreen(accountViewModel, nav, it.nip47) } composableFromEndArgs { AllRelayListScreen(it.toAdd, accountViewModel, nav) } @@ -256,9 +258,6 @@ private fun NavigateIfIntentRequested( } nav.newStack(Route.NewPost(message = message, attachment = media.toString())) - - media = null - message = null } else { var newAccount by remember { mutableStateOf(null) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt index d7eb4f753..4a87c1970 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt @@ -51,6 +51,7 @@ import androidx.compose.material.icons.outlined.CloudUpload import androidx.compose.material.icons.outlined.Drafts import androidx.compose.material.icons.outlined.GroupAdd import androidx.compose.material.icons.outlined.Key +import androidx.compose.material.icons.outlined.Person import androidx.compose.material.icons.outlined.Security import androidx.compose.material.icons.outlined.Settings import androidx.compose.material3.HorizontalDivider @@ -66,7 +67,6 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -74,7 +74,6 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.text.LinkAnnotation import androidx.compose.ui.text.SpanStyle @@ -427,8 +426,6 @@ fun ListContent( var backupDialogOpen by remember { mutableStateOf(false) } - val context = LocalContext.current - Column(modifier) { NavigationRow( title = R.string.profile, @@ -508,6 +505,14 @@ fun ListContent( route = Route.Settings, ) + NavigationRow( + title = R.string.user_preferences, + icons = listOf(Icons.Outlined.Person, Icons.Outlined.Settings), + tint = MaterialTheme.colorScheme.onBackground, + nav = nav, + route = Route.UserSettings, + ) + Spacer(modifier = Modifier.weight(1f)) IconRow( @@ -584,11 +589,28 @@ fun NavigationRow( tint: Color, nav: INav, route: Route, +) { + NavigationRow( + title = title, + icons = listOf(icon), + tint = tint, + nav = nav, + route = route, + ) +} + +@Composable +fun NavigationRow( + title: Int, + icons: List, + tint: Color, + nav: INav, + route: Route, ) { IconRow( - title, - icon, - tint, + title = title, + icons = icons, + tint = tint, onClick = { nav.closeDrawer() nav.nav(route) @@ -636,6 +658,21 @@ fun IconRow( icon: ImageVector, tint: Color, onClick: () -> Unit, +) { + IconRow( + title = title, + icons = listOf(icon), + tint = tint, + onClick = onClick, + ) +} + +@Composable +fun IconRow( + title: Int, + icons: List, + tint: Color, + onClick: () -> Unit, ) { Row( modifier = @@ -650,12 +687,15 @@ fun IconRow( modifier = IconRowModifier, verticalAlignment = Alignment.CenterVertically, ) { - Icon( - imageVector = icon, - contentDescription = stringRes(title), - modifier = Size22Modifier, - tint = tint, - ) + icons.forEach { icon -> + Icon( + imageVector = icon, + contentDescription = stringRes(title), + modifier = Size22Modifier.padding(end = 4.dp), + tint = tint, + ) + } + Text( modifier = IconRowTextModifier, text = stringRes(title), @@ -709,8 +749,6 @@ fun BottomContent( accountViewModel: AccountViewModel, nav: INav, ) { - val coroutineScope = rememberCoroutineScope() - // store the dialog open or close state var dialogOpen by remember { mutableStateOf(false) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt index 06d222e80..6f904d675 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt @@ -49,6 +49,8 @@ sealed class Route { @Serializable object Settings : Route() + @Serializable object UserSettings : Route() + @Serializable object EditProfile : Route() @Serializable data class EditRelays( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt index b823834fe..0810a02ea 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt @@ -882,6 +882,10 @@ class AccountViewModel( fun dontTranslateFrom() = account.settings.syncedSettings.languages.dontTranslateFrom + fun dontTranslateFromFilteredBySpokenLanguages() = account.settings.syncedSettings.dontTranslateFromFilteredBySpokenLanguages() + + fun toggleDontTranslateFrom(languageCode: String) = account.toggleDontTranslateFrom(languageCode) + fun translateTo() = account.settings.syncedSettings.languages.translateTo fun defaultZapType() = account.settings.syncedSettings.zaps.defaultZapType.value diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/PrecacheNewNotesProcessor.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/PrecacheNewNotesProcessor.kt index b3a15cb0e..1418caa61 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/PrecacheNewNotesProcessor.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/PrecacheNewNotesProcessor.kt @@ -24,7 +24,6 @@ import android.util.Log import com.vitorpamplona.amethyst.Amethyst import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache -import com.vitorpamplona.amethyst.model.LocalCache.indexDraftAsRealEvent import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.quartz.experimental.edits.PrivateOutboxRelayListEvent import com.vitorpamplona.quartz.nip01Core.core.Event diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/DiscoverScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/DiscoverScreen.kt index 896e468a1..b037e6d3b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/DiscoverScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/DiscoverScreen.kt @@ -142,21 +142,21 @@ fun DiscoverScreen( LongTextNoteEvent.KIND, ), TabItem( - R.string.discover_content, + R.string.discover_content_v2, discoveryContentNIP89FeedContentState, "DiscoverDiscoverContent", ScrollStateKeys.DISCOVER_CONTENT, AppDefinitionEvent.KIND, ), TabItem( - R.string.discover_live, + R.string.discover_live_v2, discoveryLiveFeedContentState, "DiscoverLive", ScrollStateKeys.DISCOVER_LIVE, LiveActivitiesEvent.KIND, ), TabItem( - R.string.discover_community, + R.string.discover_community_v2, discoveryCommunityFeedContentState, "DiscoverCommunity", ScrollStateKeys.DISCOVER_COMMUNITY, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/geohash/GeoHashPostScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/geohash/GeoHashPostScreen.kt index 14bd8d82b..9d56277f2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/geohash/GeoHashPostScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/geohash/GeoHashPostScreen.kt @@ -23,7 +23,6 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.geohash import android.net.Uri import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.input.TextFieldValue import androidx.lifecycle.viewmodel.compose.viewModel diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/hashtag/HashtagPostScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/hashtag/HashtagPostScreen.kt index 0a828d70c..fd0934ac3 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/hashtag/HashtagPostScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/hashtag/HashtagPostScreen.kt @@ -23,7 +23,6 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.hashtag import android.net.Uri import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.input.TextFieldValue import androidx.lifecycle.viewmodel.compose.viewModel diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/gallery/QuickActionGallery.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/gallery/QuickActionGallery.kt index ad1c969fa..d32bf9456 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/gallery/QuickActionGallery.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/gallery/QuickActionGallery.kt @@ -60,7 +60,7 @@ fun DeleteFromGalleryDialog( ) { QuickActionAlertDialogOneButton( title = stringRes(R.string.quick_action_request_deletion_gallery_title), - textContent = stringRes(R.string.quick_action_request_deletion_gallery_alert_body), + textContent = stringRes(R.string.quick_action_request_deletion_gallery_alert_body_v2), buttonIcon = Icons.Default.Delete, buttonText = stringRes(R.string.quick_action_delete_dialog_btn), onClickDoOnce = { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/AppSettingsScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/AppSettingsScreen.kt index 131d971bd..5eb38c0aa 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/AppSettingsScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/AppSettingsScreen.kt @@ -119,12 +119,13 @@ fun getLanguageIndex( sharedPreferencesViewModel: SharedPreferencesViewModel, ): Int { val language = sharedPreferencesViewModel.sharedPrefs.language - var languageIndex = -1 - if (language != null) { - languageIndex = languageEntries.values.toTypedArray().indexOf(language) - } else { - languageIndex = languageEntries.values.toTypedArray().indexOf(Locale.current.toLanguageTag()) - } + var languageIndex: Int + languageIndex = + if (language != null) { + languageEntries.values.toTypedArray().indexOf(language) + } else { + languageEntries.values.toTypedArray().indexOf(Locale.current.toLanguageTag()) + } if (languageIndex == -1) { languageIndex = languageEntries.values.toTypedArray().indexOf(Locale.current.language) } @@ -365,7 +366,7 @@ fun SettingsRow( text = stringRes(description), style = MaterialTheme.typography.bodySmall, color = Color.Gray, - maxLines = 2, + maxLines = 3, overflow = TextOverflow.Ellipsis, ) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/UserSettingsScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/UserSettingsScreen.kt new file mode 100644 index 000000000..9f57b1af5 --- /dev/null +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/UserSettingsScreen.kt @@ -0,0 +1,154 @@ +/** + * 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.screen.loggedIn.settings + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Close +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuBox +import androidx.compose.material3.ExposedDropdownMenuDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.MenuAnchorType +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewModelScope +import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.ui.layouts.DisappearingScaffold +import com.vitorpamplona.amethyst.ui.navigation.EmptyNav +import com.vitorpamplona.amethyst.ui.navigation.INav +import com.vitorpamplona.amethyst.ui.navigation.TopBarWithBackButton +import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel +import com.vitorpamplona.amethyst.ui.screen.loggedIn.mockAccountViewModel +import com.vitorpamplona.amethyst.ui.stringRes +import com.vitorpamplona.amethyst.ui.theme.Size10dp +import com.vitorpamplona.amethyst.ui.theme.Size20dp +import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonRow +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import java.util.Locale as JavaLocale + +@Preview(device = "spec:width=2160px,height=2340px,dpi=440") +@Composable +fun UserSettingsScreenPreview() { + val accountViewModel = mockAccountViewModel() + val nav = EmptyNav + ThemeComparisonRow { + UserSettingsScreen(accountViewModel, nav) + } +} + +@Composable +fun UserSettingsScreen( + accountViewModel: AccountViewModel, + nav: INav, +) { + DisappearingScaffold( + isInvertedLayout = false, + topBar = { + TopBarWithBackButton(stringRes(id = R.string.user_preferences), nav::popBack) + }, + accountViewModel = accountViewModel, + ) { + Column(Modifier.padding(it)) { + Column( + Modifier + .fillMaxSize() + .padding(top = Size10dp, start = Size20dp, end = Size20dp) + .verticalScroll(rememberScrollState()), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + DontTranslateFromSetting(accountViewModel) + } + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun DontTranslateFromSetting(accountViewModel: AccountViewModel) { + var expanded by remember { mutableStateOf(false) } + val selectedLanguages = accountViewModel.dontTranslateFromFilteredBySpokenLanguages().toMutableSet() + + Column { + SettingsRow( + name = R.string.dont_translate_from, + description = R.string.dont_translate_from_description, + ) { + ExposedDropdownMenuBox( + expanded = expanded, + onExpandedChange = { expanded = !expanded }, + ) { + OutlinedTextField( + value = stringRes(R.string.quick_action_select), + onValueChange = {}, + readOnly = true, + trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) }, + modifier = Modifier.menuAnchor(MenuAnchorType.PrimaryEditable), + ) + + ExposedDropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + ) { + selectedLanguages.forEach { languageCode -> + DropdownMenuItem( + text = { Text(text = JavaLocale.forLanguageTag(languageCode).displayName) }, + onClick = { + accountViewModel.viewModelScope.launch(Dispatchers.IO) { + accountViewModel.toggleDontTranslateFrom( + languageCode, + ) + } + selectedLanguages.remove(languageCode) + expanded = false + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.Close, + contentDescription = "Remove $languageCode", + tint = Color.Red, + modifier = Modifier.size(16.dp), + ) + }, + ) + } + } + } + } + } +} diff --git a/amethyst/src/main/res/values-ar-rSA/strings.xml b/amethyst/src/main/res/values-ar-rSA/strings.xml index 6bbdc431d..20539cee1 100644 --- a/amethyst/src/main/res/values-ar-rSA/strings.xml +++ b/amethyst/src/main/res/values-ar-rSA/strings.xml @@ -274,7 +274,6 @@ الغاء المتابعة متابعة إزالته من المعرض - إزالة هذه الوسيطة من المعرض. طلب حذفها سيطلب Amethyst حذف ملاحظتك من المرحلات المتصل بها حاليا، لا يوجد ضمان لحذفها من هذه المرحلات أو من المرحلات الأخرى التي ربما حفظت فيها. حظر @@ -476,7 +475,6 @@ تسجيل الخروج سوف يحذف معلوماتك من على الجهاز. تأكد من نسخ مفتاحك الخاص لتجنب فقدان الحساب. هل تريد ألاستمرار؟ العلامات المُتابعة مرحلات - مجتمع االدردشات المنشورات الموافق عليها هذه المجموعة ليس لديها وصف أو قواعد. diff --git a/amethyst/src/main/res/values-bn-rBD/strings.xml b/amethyst/src/main/res/values-bn-rBD/strings.xml index 96b1f533e..267350401 100644 --- a/amethyst/src/main/res/values-bn-rBD/strings.xml +++ b/amethyst/src/main/res/values-bn-rBD/strings.xml @@ -417,8 +417,6 @@ লগ আউট করলে আপনার সমস্ত স্থানীয় তথ্য মুছে যাবে। অ্যাকাউন্ট সুরক্ষিত রাখতে আপনার ব্যক্তিগত চাবিটি নিরাপদে সংরক্ষিত আছে কিনা নিশ্চিত হোন। সামনে আগাতে চান? অনুসৃত ট্যাগগুলি রিলেগুলি - লাইভ - কম্যুনিটি বার্তালাপগুলি অনুমোদিত পোস্টগুলি এই দলটির কোনো বিবরণ কিংবা নীতিমালা নেই। এগুলো যুক্ত করতে দলনেতার সাথে কথা বলুন diff --git a/amethyst/src/main/res/values-cs-rCZ/strings.xml b/amethyst/src/main/res/values-cs-rCZ/strings.xml index 80fa7a75d..d7f16e7f3 100644 --- a/amethyst/src/main/res/values-cs-rCZ/strings.xml +++ b/amethyst/src/main/res/values-cs-rCZ/strings.xml @@ -3,9 +3,9 @@ Nasměrujte na QR kód Zobrazit QR kód Profilový obrázek - Profilový obrázek + Váš profilový obrázek Skenovat QR kód - Zobrazit přesto + Přesto zobrazit Tento příspěvek byl skryt, protože zmiňuje vaše skryté uživatele nebo slova Příspěvek byl označen jako nevhodný uživatelem Příspěvek nenalezen @@ -298,7 +298,7 @@ Přestat sledovat Sledovat Odstranit z galerie - Odstraňte tato média z vaší galerie, můžete je přidat později + Odstranit toto médium z vaší galerie. Požadavek na smazání Amethyst požádá o smazání vaší poznámky ze spojek, ke kterým jste v současnosti připojeni. Není zaručeno, že vaše poznámka bude trvale smazána z těchto spojek nebo z dalších spojek, kde může být uložena. Blokovat @@ -559,10 +559,10 @@ Rele Balíčky Sledování Přečtené - Algoritmy kanálu + Algoritmy kanálu Trh - Živě - Komunita + Živé vysílání + Komunity Chaty Schválené příspěvky Tato skupina nemá popis ani pravidla. Promluvte si s majitelem, aby je přidal/a. @@ -614,6 +614,8 @@ Přidá Geohash vaší polohy do příspěvku. Veřejnost bude vědět, že se nacházíte do 5 km od aktuální polohy Lokace-Exkluzívní příspěvek Uvidí to pouze následovníci umístění. Tvoji obecní následovníci to neuvidí. + Hashtag-exkluzivní příspěvek + Uvidí to pouze následovníci hashtagu. Tvůj všeobecní následovníci to neuvidí. Načítání umístění Žádná lokace oprávnění Přidat varování o citlivém obsahu před zobrazením vašeho obsahu. Toto je ideální pro obsah NSFW (nebezpečné pro práci) nebo obsah, který někteří lidé mohou považovat za urážlivý nebo znepokojující @@ -816,6 +818,7 @@ Nové Shorts: obrázky nebo videa Nová poznámka komunity Nový produkt + Nový geoexkluzivní příspěvek Otevřít všechny reakce pro tento příspěvek Zavřít všechny reakce na tento příspěvek Odpověď @@ -968,4 +971,5 @@ Relé chatu Relé, ke kterému se všichni uživatelé tohoto chatu připojují Sdílet obrázek… + Vyhledávání hashtag: #%1$s diff --git a/amethyst/src/main/res/values-cs/strings.xml b/amethyst/src/main/res/values-cs/strings.xml index 02c89a154..fc85f6d27 100644 --- a/amethyst/src/main/res/values-cs/strings.xml +++ b/amethyst/src/main/res/values-cs/strings.xml @@ -286,7 +286,6 @@ Přestat sledovat Sledovat Odstranit z galerie - Odstraňte tato média z vaší galerie, můžete je přidat později Požadavek na smazání Amethyst požádá o smazání vaší poznámky ze spojek, ke kterým jste v současnosti připojeni. Není zaručeno, že vaše poznámka bude trvale smazána z těchto spojek nebo z dalších spojek, kde může být uložena. Blokovat @@ -535,10 +534,7 @@ Odhlášení vymaže všechny vaše místní informace. Ujistěte se, že máte zálohované své privátní klíče, abyste se vyhnuli ztrátě účtu. Chcete pokračovat? Sledované značky Rele - Objevování poznámek Trh - Živě - Komunita Chaty Schválené příspěvky Tato skupina nemá popis ani pravidla. Promluvte si s majitelem, aby je přidal/a. diff --git a/amethyst/src/main/res/values-de-rDE/strings.xml b/amethyst/src/main/res/values-de-rDE/strings.xml index 3249a1b03..6d5baf2b4 100644 --- a/amethyst/src/main/res/values-de-rDE/strings.xml +++ b/amethyst/src/main/res/values-de-rDE/strings.xml @@ -302,7 +302,7 @@ anz der Bedingungen ist erforderlich Entfolgen Folgen Aus Galerie löschen - Entferne diese Medien von deiner Galerie, du kannst sie später hinzufügen + Entferne dieses Medium von deiner Galerie. Löschung anfordern Amethyst wird beantragen, dass Ihre Notiz von den Relays gelöscht wird, mit denen Sie derzeit verbunden sind. Es gibt keine Garantie dafür, dass Ihre Notiz dauerhaft von diesen Relays oder anderen Relays, in denen sie gespeichert sein kann, gelöscht wird. Blockieren @@ -564,10 +564,10 @@ anz der Bedingungen ist erforderlich Relais Folge Paketen Lesungen - Notizen Entdeckung + Feedalgorithmen Marktplatz - Live - Gemeinschaft + Live-Streams + Gemeinschaften Plaudern Genehmigte Beiträge Diese Gruppe hat keine Beschreibung oder Regeln. Sprechen Sie mit dem Eigentümer, um eine hinzuzufügen. @@ -619,6 +619,8 @@ anz der Bedingungen ist erforderlich Fügt dem Beitrag einen Geohash Ihres Standorts hinzu. Die Öffentlichkeit wird wissen, dass Sie sich innerhalb von 5 km (3 mi) vom aktuellen Standort befinden Standort-exklusiver Beitrag Nur Anhänger des Ortes werden es sehen. Deine allgemeinen Anhänger werden es nicht sehen. + Hashtag-exklusive Beitrag + Nur die Anhänger des Hashtags werden ihn sehen. Deine allgemeinen Follower werden ihn nicht sehen. Standort wird geladen Keine Standortberechtigungen Fügt eine Warnung für sensiblen Inhalt hinzu, bevor Ihr Inhalt angezeigt wird. Dies ist ideal für NSFW-Inhalte (nicht sicher für die Arbeit) oder Inhalte, die manche Menschen als anstößig oder verstörend empfinden könnten @@ -821,6 +823,7 @@ anz der Bedingungen ist erforderlich Neue Kurzfilme: Bilder oder Videos Neue Community-Notiz Neues Produkt + Neuer Geo-Exklusiver Beitrag Alle Reaktionen auf diesen Beitrag öffnen Alle Reaktionen auf diesen Beitrag schließen Antworten @@ -973,4 +976,5 @@ anz der Bedingungen ist erforderlich Chat-Relais Das Relais, mit dem sich alle Benutzer dieses Chats verbinden Bild teilen… + Suche Hashtag: #%1$s diff --git a/amethyst/src/main/res/values-de/strings.xml b/amethyst/src/main/res/values-de/strings.xml index 2c0c4ed3b..cabd2af74 100644 --- a/amethyst/src/main/res/values-de/strings.xml +++ b/amethyst/src/main/res/values-de/strings.xml @@ -290,7 +290,6 @@ anz der Bedingungen ist erforderlich Entfolgen Folgen Aus Galerie löschen - Entferne diese Medien von deiner Galerie, du kannst sie später hinzufügen Löschung anfordern Amethyst wird beantragen, dass Ihre Notiz von den Relays gelöscht wird, mit denen Sie derzeit verbunden sind. Es gibt keine Garantie dafür, dass Ihre Notiz dauerhaft von diesen Relays oder anderen Relays, in denen sie gespeichert sein kann, gelöscht wird. Blockieren @@ -540,10 +539,7 @@ anz der Bedingungen ist erforderlich Das Abmelden löscht alle Ihre lokalen Informationen. Stellen Sie sicher, dass Sie Ihre privaten Schlüssel gesichert haben, um einen Kontoverlust zu vermeiden. Möchten Sie fortfahren? Gefolgte Tags Relais - Notizen Entdeckung Marktplatz - Live - Gemeinschaft Plaudern Genehmigte Beiträge Diese Gruppe hat keine Beschreibung oder Regeln. Sprechen Sie mit dem Eigentümer, um eine hinzuzufügen. diff --git a/amethyst/src/main/res/values-el-rGR/strings.xml b/amethyst/src/main/res/values-el-rGR/strings.xml index 73b2a3e0c..9b6fa49fc 100644 --- a/amethyst/src/main/res/values-el-rGR/strings.xml +++ b/amethyst/src/main/res/values-el-rGR/strings.xml @@ -380,8 +380,6 @@ Η Αποσύνδεση διαγράφει όλες τις τοπικές πληροφορίες σας. Βεβαιωθείτε ότι έχετε Αντίγραφο Ασφαλείας από το \"Μυστικό Κλειδί\" σας για να αποφύγετε απώλεια του λογαριασμού σας. Θέλετε να συνεχίσετε? Ετικέτες που Ακολουθώ Διαμοιραστές - Ζωντανά - Κοινότητα Συνομιλίες Εγκεκριμένες Δημοσιεύσεις Αυτή η ομάδα δεν έχει περιγραφή ή κανόνες. Μιλήστε με τον ιδιοκτήτη για να προσθέσετε μία diff --git a/amethyst/src/main/res/values-eo-rUY/strings.xml b/amethyst/src/main/res/values-eo-rUY/strings.xml index e2050b9bf..3fce4d205 100644 --- a/amethyst/src/main/res/values-eo-rUY/strings.xml +++ b/amethyst/src/main/res/values-eo-rUY/strings.xml @@ -379,8 +379,6 @@ Elsaluti forigas ĉiujn viajn lokajn datumojn. Certigi ke vi sekurkopis vian privatan ŝlosilon por eviti perdi vian konton. Ĉu vi volas daŭrigi? Sekvitaj Etikedoj Plusendiloj - Vive - Komunumo Babilejoj Aprobitaj Afiŝoj Ĉi tiu grupo ne havas priskribon aŭ regulojn. Parolu kun la posedanto por aldoni diff --git a/amethyst/src/main/res/values-eo/strings.xml b/amethyst/src/main/res/values-eo/strings.xml index 398deb462..eed86b997 100644 --- a/amethyst/src/main/res/values-eo/strings.xml +++ b/amethyst/src/main/res/values-eo/strings.xml @@ -379,8 +379,6 @@ Elsaluti forigas ĉiujn viajn lokajn datumojn. Certigi ke vi sekurkopis vian privatan ŝlosilon por eviti perdi vian konton. Ĉu vi volas daŭrigi? Sekvitaj Etikedoj Plusendiloj - Vive - Komunumo Babilejoj Aprobitaj Afiŝoj Ĉi tiu grupo ne havas priskribon aŭ regulojn. Parolu kun la posedanto por aldoni diff --git a/amethyst/src/main/res/values-es-rES/strings.xml b/amethyst/src/main/res/values-es-rES/strings.xml index 583235fd7..c0f9ae00b 100644 --- a/amethyst/src/main/res/values-es-rES/strings.xml +++ b/amethyst/src/main/res/values-es-rES/strings.xml @@ -290,7 +290,6 @@ Dejar de seguir Seguir Eliminar de la galería - Elimina este contenido multimedia de la galería, aunque puedes volver a agregarlo luego. Solicitar eliminación 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. Bloquear @@ -540,10 +539,7 @@ 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? Etiquetas seguidas Relés - Descubrimiento de notas Mercado - En vivo - Comunidad Chats Publicaciones aprobadas Este grupo no tiene descripción ni reglas. Habla con el propietario para agregar una. diff --git a/amethyst/src/main/res/values-es-rMX/strings.xml b/amethyst/src/main/res/values-es-rMX/strings.xml index badffaeeb..8498d3866 100644 --- a/amethyst/src/main/res/values-es-rMX/strings.xml +++ b/amethyst/src/main/res/values-es-rMX/strings.xml @@ -290,7 +290,6 @@ Dejar de seguir Seguir Eliminar de la galería - Elimina este contenido multimedia de la galería, aunque puedes volver a agregarlo luego. Solicitar eliminación 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. Bloquear @@ -540,10 +539,7 @@ 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? Etiquetas seguidas Relés - Descubrimiento de notas Mercado - En vivo - Comunidad Chats Publicaciones aprobadas Este grupo no tiene descripción ni reglas. Habla con el propietario para agregar una. diff --git a/amethyst/src/main/res/values-es-rUS/strings.xml b/amethyst/src/main/res/values-es-rUS/strings.xml index 4e111d4cb..e28620633 100644 --- a/amethyst/src/main/res/values-es-rUS/strings.xml +++ b/amethyst/src/main/res/values-es-rUS/strings.xml @@ -290,7 +290,6 @@ Dejar de seguir Seguir Eliminar de la galería - Elimina este contenido multimedia de la galería, aunque puedes volver a agregarlo luego. Solicitar eliminación 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. Bloquear @@ -540,10 +539,7 @@ 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? Etiquetas seguidas Relés - Descubrimiento de notas Mercado - En vivo - Comunidad Chats Publicaciones aprobadas Este grupo no tiene descripción ni reglas. Habla con el propietario para agregar una. diff --git a/amethyst/src/main/res/values-fa-rIR/strings.xml b/amethyst/src/main/res/values-fa-rIR/strings.xml index 0f4165d8c..7ee325eb6 100644 --- a/amethyst/src/main/res/values-fa-rIR/strings.xml +++ b/amethyst/src/main/res/values-fa-rIR/strings.xml @@ -288,7 +288,6 @@ دنبال نکردن دنبال کردن حذف از گالری - حذف این رسانه از گالری، بعدا می توانید آن را بخوانید درخواست حذف آماتیست درخواست می کند که یادداشت شما از رله هایی که درحال حاضر به آن متصل هستید حذف شود. هیچ تضمینی نیست که یادداشت شما برای همیشه از آن رله ها یا از رله های دیگری که ممکن است در آنها ذخیره شده باشد حذف خواهد شد.. بلاک @@ -538,10 +537,7 @@ خروج همه اطلاعات محلی شما را پاک می کند. مطمئن شوید که کلید خصوصی خود را بکاپ گرفته و ذخیره کرده اید تا حساب کاربری تان را از دست ندهید. می خواهید ادامه دهید؟ برچسب های دنبال شده رله ها - اکتشاف یادداشت بازار - زنده - انجمن گپ یادداشت های تایید شده این گروه هیچ توصیف و قوانینی ندارد. با مالک گروه برای افزودن آن صحبت کنید. diff --git a/amethyst/src/main/res/values-fa/strings.xml b/amethyst/src/main/res/values-fa/strings.xml index db3004cc9..0c2e5174b 100644 --- a/amethyst/src/main/res/values-fa/strings.xml +++ b/amethyst/src/main/res/values-fa/strings.xml @@ -270,7 +270,6 @@ دنبال نکردن دنبال کردن حذف از گالری - حذف این رسانه از گالری، بعدا می توانید آن را بخوانید درخواست حذف آماتیست درخواست می کند که یادداشت شما از رله هایی که درحال حاضر به آن متصل هستید حذف شود. هیچ تضمینی نیست که یادداشت شما برای همیشه از آن رله ها یا از رله های دیگری که ممکن است در آنها ذخیره شده باشد حذف خواهد شد.. بلاک @@ -519,10 +518,7 @@ خروج همه اطلاعات محلی شما را پاک می کند. مطمئن شوید که کلید خصوصی خود را بکاپ گرفته و ذخیره کرده اید تا حساب کاربری تان را از دست ندهید. می خواهید ادامه دهید؟ برچسب های دنبال شده رله ها - اکتشاف یادداشت بازار - زنده - انجمن گپ یادداشت های تایید شده این گروه هیچ توصیف و قوانینی ندارد. با مالک گروه برای افزودن آن صحبت کنید. diff --git a/amethyst/src/main/res/values-fi-rFI/strings.xml b/amethyst/src/main/res/values-fi-rFI/strings.xml index 5e3cde15c..72ed45827 100644 --- a/amethyst/src/main/res/values-fi-rFI/strings.xml +++ b/amethyst/src/main/res/values-fi-rFI/strings.xml @@ -391,7 +391,6 @@ Seuratut tagit Releet Markkinapaikka - Yhteisö Keskustelut Hyväksytyt viestit Tällä ryhmällä ei ole kuvausta tai sääntöjä. Keskustele omistajan kanssa sen lisäämiseksi diff --git a/amethyst/src/main/res/values-fr-rFR/strings.xml b/amethyst/src/main/res/values-fr-rFR/strings.xml index 56dcb375f..9487c1c91 100644 --- a/amethyst/src/main/res/values-fr-rFR/strings.xml +++ b/amethyst/src/main/res/values-fr-rFR/strings.xml @@ -290,7 +290,6 @@ Ne plus suivre Suivre Supprimer de la galerie - Retirer ce média de votre galerie, vous pourrez le réajouter plus tard Demande de Suppression Amethyst demandera que votre note soit supprimée des relais auxquels vous êtes actuellement connecté. Il n\'y a aucune garantie que votre note sera définitivement supprimée de ces relais, ou d\'autres relais où elle peut être stockée. Bloquer @@ -540,10 +539,7 @@ Se déconnecter supprime toutes vos informations locales. Assurez-vous d\'avoir vos clés privées sauvegardées pour éviter de perdre votre compte. Voulez-vous continuer ? Tags suivis Relais - Découverte de notes Place de Marché - Direct - Communauté Salons Messages approuvés Ce groupe n\'a pas de description ou de règles. Parlez au propriétaire pour en ajouter une diff --git a/amethyst/src/main/res/values-fr/strings.xml b/amethyst/src/main/res/values-fr/strings.xml index b86bc0499..bb35fd681 100644 --- a/amethyst/src/main/res/values-fr/strings.xml +++ b/amethyst/src/main/res/values-fr/strings.xml @@ -282,7 +282,6 @@ Ne plus suivre Suivre Supprimer de la galerie - Retirer ce média de votre galerie, vous pourrez le réajouter plus tard Demande de Suppression Amethyst demandera que votre note soit supprimée des relais auxquels vous êtes actuellement connecté. Il n\'y a aucune garantie que votre note sera définitivement supprimée de ces relais, ou d\'autres relais où elle peut être stockée. Bloquer @@ -531,10 +530,7 @@ Se déconnecter supprime toutes vos informations locales. Assurez-vous d\'avoir vos clés privées sauvegardées pour éviter de perdre votre compte. Voulez-vous continuer ? Tags suivis Relais - Découverte de notes Place de Marché - Direct - Communauté Salons Messages approuvés Ce groupe n\'a pas de description ou de règles. Parlez au propriétaire pour en ajouter une diff --git a/amethyst/src/main/res/values-hi-rIN/strings.xml b/amethyst/src/main/res/values-hi-rIN/strings.xml index ce10c57e4..06e0fa87e 100644 --- a/amethyst/src/main/res/values-hi-rIN/strings.xml +++ b/amethyst/src/main/res/values-hi-rIN/strings.xml @@ -300,7 +300,7 @@ अनुचरण ना करें अनुचरण करें चित्रालय से मिटाएँ - इस अभिलेख को चित्रालय से हटाएँ। तत्पश्चात कभी भी आप इसे पुनः जोड सकते हैं + इस अभिलेख को आपके चित्रालय से हटाएँ। हटाने की याचना अमेथिस्ट अनुरोध करेगा कि आपका टीका मिटा दिया जाए उन पुनःप्रसारकों से जिनके साथ आप अब जुडे हुए हैं। कोई आश्वासन नहीं कि आपका टीका सर्वदा के लिए मिटा दिया जाएगा उन पुनःप्रसारकों से, अथवा अन्य पुनःप्रसारकों में से जहाँ यह रखा गया हो। बाधित करें @@ -561,10 +561,10 @@ पुनःप्रसारक अनुचरण पोटलियाँ पठितव्य - लेख आविष्करण + सूचनावली विधियाँ पण्यक्षेत्र - तत्क्षणप्रसार - समुदाय + तत्क्षणप्रसार + समुदाय चर्चाएँ अनुमति प्राप्त पत्र इस झुण्ड का कोई विवरण नहीं नियम नहीं। इसके अधिपति से बात करें इनहें जोडने के लिए @@ -616,6 +616,8 @@ आपका भूगोलिक स्थान विभेदक जोडता है पत्र में। जनता जान जाएगी कि आप वर्तमान स्थान से ५ कि॰मे॰ (३ मी॰) की दूरी के अन्दर हैं स्थल विशेष पत्र स्थल के अनुचर ही देखेंगे। आपके सामान्य अनुचर नहीं देखेंगे। + विषयसूचक विशेष पत्र + केवल विषयसूचक के अनुचर इसे देखेंगे। आपके सामान्य अनुचर नहीं देखेंगे। स्थान प्राप्त किया जा रहा है स्थान प्राप्त करने की अनुमति नहीं आपके विषयवस्तु दिखाने से पूर्व संवेदनशील विषयवस्तु चेतावनी जोडता है। यह आदर्श है किसी कार्यालय अनुचित विषयवस्तु के लिए अथवा जो कुछ लोगों के लिए आपत्तिजनक अथवा व्याकुल करनेवाला लग सकता है @@ -818,6 +820,7 @@ नये छोटे : चित्र अथवा चलचित्र नया सामुदायिक टीका नया उत्पाद + नया स्थान विशेष पत्र इस पत्र प्रकाशन के सभी प्रतिक्रियाओं को खोलें इस पत्र प्रकाशन के सभी प्रतिक्रियाओं को अवरोधित करें उत्तर @@ -970,4 +973,5 @@ चर्चा पुनःप्रसारक वह पुनःप्रसारक जिससे इस चर्चा के सभी उपयोगकर्ता जुडते हैं चित्र बाँटें… + विषयसूचक खोज : #%1$s diff --git a/amethyst/src/main/res/values-hu-rHU/strings.xml b/amethyst/src/main/res/values-hu-rHU/strings.xml index b7e533e7a..7b1a5d09a 100644 --- a/amethyst/src/main/res/values-hu-rHU/strings.xml +++ b/amethyst/src/main/res/values-hu-rHU/strings.xml @@ -300,7 +300,7 @@ Követés megszüntetése Követés Törlés a galériából - Távolítsa el ezt a médiát a galériából, később újra hozzáadhatja + Távolítsa el ezt a médiát a galériából. Törlés kérése Az Amethyst kérni fogja, hogy a bejegyzését töröljék azokról az átjátszókról, amelyekhez jelenleg csatlakozik. Nem garantálható, hogy a bejegyzése véglegesen törlődik ezekről az átjátszókról, vagy más átjátszókról, ahol esetleg tárolva van. Letiltás @@ -496,9 +496,18 @@ Az érzékeny tartalmat mindig rejtse el Az érzékeny tartalmat mindig jelenítse meg A tartalomra vonatkozó figyelmeztetéseket mindig jelenítse meg + Elrejtés + Megjelenítés + Figyelmeztetés Ajánlott alkalmazások: Az idegenektől érkező kéretlen tartalmak szűrése Figyelmeztessen amikor a bejegyzések jelentve vannak azok által akiket követek + Kéretlen tartalomszűrő + Elrejti az ismeretlen felhasználók hozzászólásait, amelyek pontosan ugyanazok voltak 5 vagy több alkalommal + Figyelmeztetés a jelentésekre + Figyelmeztető üzenet jelenik meg, ha a bejegyzéseket az Ön által követett felhasználók 5 vagy annál többször jelentették + Érzékeny tartalom megjelenítése + Figyelmeztető üzenet jelenik meg, ha a bejegyzés szerzője érzékenynek jelölte a hozzászólást Új reakció-szimbólum A felhasználó számára nincsenek előre kiválasztott reakciótípusok. Hosszan nyomja meg a szív gombot a módosításhoz Zap-gyűjtés @@ -552,10 +561,10 @@ Átjátszók Követett csomagok Olvasmányok - Bejegyzések felfedezése + Hírforrás-algoritmus Piac - Élő - Közösség + Élő közvetítések + Közösségek Csevegések Elfogadott bejegyzések Ennek a csoportnak nincs leírása vagy szabályai. Kérje meg a tulajdonosát, hogy adjon hozzá egyet @@ -607,6 +616,8 @@ Hozzáadja a helyének geohash-sét a bejegyzéséhez. A nyilvánosság tudni fogja, hogy a jelenlegi helytől 5 km-en (3 mi) belül tertózkodik Helyszín-alapú bejegyzés Csak a helyszín követői láthatják. Az általános követők nem fogják látni. + Hashtag-exkluzív bejegyzés + Csak a hashtag követői fogják látni, de az Ön általános követői viszont nem. Helyszín betöltése… A helyszín-meghatározás nincs engedélyezve Hozzáadja az érzékeny tartalomra vonatkozó figyelmeztetést a tartalom megjelenítése előtt. Ez ideális bármilyen NSFW tartalom vagy olyan tartalom esetén, amelyet egyesek sértőnek vagy zavarónak találhatnak @@ -809,6 +820,7 @@ Új rövidek: képek vagy videók Új közösségi bejegyzés Új termék + Új hely-exkluzív bejegyzés A bejegyzésre adott összes reakció kibontása A bejegyzésre adott összes reakció összecsukása Válasz @@ -960,4 +972,6 @@ Privát üzenet Csevegési átjátszó Az átjátszó, amelyhez a csevegés összes felhasználója csatlakozik + Kép megosztása… + Hashtag keresése: #%1$s diff --git a/amethyst/src/main/res/values-hu/strings.xml b/amethyst/src/main/res/values-hu/strings.xml index 30bfdcb4c..039cf9427 100644 --- a/amethyst/src/main/res/values-hu/strings.xml +++ b/amethyst/src/main/res/values-hu/strings.xml @@ -288,7 +288,6 @@ Követés megszüntetése Követés Törlés a galériából - Távolítsa el ezt a médiát a galériából, később újra hozzáadhatja Törlés kérése Az Amethyst kérni fogja, hogy a bejegyzését töröljék azokról az átjátszókról, amelyekhez jelenleg csatlakozik. Nem garantálható, hogy a bejegyzése véglegesen törlődik ezekről az átjátszókról, vagy más átjátszókról, ahol esetleg tárolva van. Letiltás @@ -537,10 +536,7 @@ A kijelentkezéssel törlődik az összes helyben tárolt adat. Győződjön meg arról, hogy a privát kulcsokról biztonsági mentést készített, hogy elkerülje fiókja elvesztését. Szeretné folytatni? Követett címke Átjátszók - Bejegyzések felfedezése Piac - Élő - Közösség Csevegések Elfogadott bejegyzések Ennek a csoportnak nincs leírása vagy szabályai. Kérje meg a tulajdonosát, hogy adjon hozzá egyet diff --git a/amethyst/src/main/res/values-in-rID/strings.xml b/amethyst/src/main/res/values-in-rID/strings.xml index 20b6d61bd..422033638 100644 --- a/amethyst/src/main/res/values-in-rID/strings.xml +++ b/amethyst/src/main/res/values-in-rID/strings.xml @@ -377,8 +377,6 @@ Keluar akan menghapus semua informasi yang disimpan secara lokal. Pastikan kunci pribadi Anda telah simpan untuk menghindari kehilangan akun Anda. Apakah Anda ingin melanjutkan? Tags yang Diikuti - Langsung - Komunitas Obrolan Post yang disetujui Grup ini tidak memiliki deskripsi atau peraturan. diff --git a/amethyst/src/main/res/values-in/strings.xml b/amethyst/src/main/res/values-in/strings.xml index 188b8672a..00447eb60 100644 --- a/amethyst/src/main/res/values-in/strings.xml +++ b/amethyst/src/main/res/values-in/strings.xml @@ -375,8 +375,6 @@ Keluar akan menghapus semua informasi lokal Anda. Pastikan kunci pribadi Anda dicadangkan untuk menghindari kehilangan akun Anda. Apakah Anda ingin melanjutkan? Tags yg diikuti Relai - Siaran Langsung - Komunitas Percakapan Kiriman yg disetujui Grup ini tidak memiliki deskripsi atau aturan. Bicaralah dengan pemiliknya untuk menambahkannya diff --git a/amethyst/src/main/res/values-it-rIT/strings.xml b/amethyst/src/main/res/values-it-rIT/strings.xml index 60391c7f7..b79e7df3c 100644 --- a/amethyst/src/main/res/values-it-rIT/strings.xml +++ b/amethyst/src/main/res/values-it-rIT/strings.xml @@ -361,8 +361,6 @@ La disconnessione elimina tutte le tue informazioni locali. Assicurati di avere le tue chiavi private salvate per evitare di perdere il tuo account. Vuoi continuare? Tag Seguiti Relè - In diretta - Comunità Chat Post approvati Questo gruppo non ha una descrizione o regole. Parla con il proprietario per aggiungerne una diff --git a/amethyst/src/main/res/values-ja-rJP/strings.xml b/amethyst/src/main/res/values-ja-rJP/strings.xml index ed0a8fe01..21a5107d2 100644 --- a/amethyst/src/main/res/values-ja-rJP/strings.xml +++ b/amethyst/src/main/res/values-ja-rJP/strings.xml @@ -370,8 +370,6 @@ ログアウトするとローカル情報はすべて削除されます。アカウントを紛失しないよう、秘密鍵のバックアップがあることを確認してください。続行しますか? フォロー済みタグ リレー - ライブ - コミュニティ チャット 承認済みの投稿 このグループには説明またはルールがありません。追加するには管理者に相談してください diff --git a/amethyst/src/main/res/values-ja/strings.xml b/amethyst/src/main/res/values-ja/strings.xml index ed0a8fe01..21a5107d2 100644 --- a/amethyst/src/main/res/values-ja/strings.xml +++ b/amethyst/src/main/res/values-ja/strings.xml @@ -370,8 +370,6 @@ ログアウトするとローカル情報はすべて削除されます。アカウントを紛失しないよう、秘密鍵のバックアップがあることを確認してください。続行しますか? フォロー済みタグ リレー - ライブ - コミュニティ チャット 承認済みの投稿 このグループには説明またはルールがありません。追加するには管理者に相談してください diff --git a/amethyst/src/main/res/values-lv-rLV/strings.xml b/amethyst/src/main/res/values-lv-rLV/strings.xml new file mode 100644 index 000000000..107dafa9f --- /dev/null +++ b/amethyst/src/main/res/values-lv-rLV/strings.xml @@ -0,0 +1,118 @@ + + + Profila attēls + Jūsu profila attēls + 👀 + Kanāla attēls + Grupas attēls + Nezināms + Kopēt tekstu + Bloķēt / Sūdzēties + + Skatījumi + rediģēts + Pievienot + " un " + " Seko" + " Sekotāji" + "%1$s seko" + "%1$s sekotāji" + Profils + Maksāt + 😎 + Jauns kanāls + Kanāla nosaukums + Attēla URL + Apraksts + Saglabāt + Izveidot + Atcelt + Baiti + Kļūdas + Par mani + LN adrese + Augšupielādēt attēlu + Augšupielādē… + Bloķētie lietotāji + Piezīmes + Atbildes + Galerija + Sekot + Atbloķēt + Atbloķēt lietotāju + Lietotnes logo + Rādīt paroli + Slēpt paroli + Izveidot kontu + Izveidot jaunu kontu + Ģenerēt jaunu atslēgu + Atsvaidzināt + aprakstu uz + un attēlu uz + Kanāls izveidots + Noņemt + Automātiski + uz + Vienmēr tulkot %1$s + Nostr adrese + nekad + tagad + Kļūda + Pievienot jaunu kontu + Konti + Atlasīt kontu + Pievienot jaunu kontu + Kopēt tekstu + Dzēst + Sekot + @string/block_only + Dzēst + @string/block_only + Dzēst + + Iemesls + Bloķēt un sūdzēties + Bloķēt + Grāmatzīmes + Aizvērt pēc + dienām + Pievienot attēlu + Pievienot video + Pievienot dokumentu + Augšupielādē + Lejupielādē + Kļūda + Tor iestatījumi + + + Noklusējuma ports ir 9050 + Nederīgs porta numurs + Versija + Valstis + Valodas + Birkas + Valoda + Motīvs + Nevar augšupielādēt + Noteikumi + Labi + Meklēt + Profila attēls + Kategorija + Apģērbs + Elektronika + Grāmatas + Mājdzīvnieki + Sports + Māksla + Ēdiens + Augšupielādes kļūda: %1$s + Neizdevās augšupielādēt: %1$s + Meklēt + Paziņojumi + Paldies! + @string/torrent_download + Torrenta datne + Lejupielādēt + Nav uzstādītas torrent lietotnes, kas atvērtu un lejupielādētu datni. + diff --git a/amethyst/src/main/res/values-nl-rNL/strings.xml b/amethyst/src/main/res/values-nl-rNL/strings.xml index af7f64e94..24b0d6576 100644 --- a/amethyst/src/main/res/values-nl-rNL/strings.xml +++ b/amethyst/src/main/res/values-nl-rNL/strings.xml @@ -290,7 +290,6 @@ Ontvolgen Volgen Verwijderen uit galerij - Verwijder deze media uit je galerij, je kunt het terug zien in je feed. Verzoek om te verwijderen 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. Blokkeren @@ -540,10 +539,7 @@ 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? Gevolgde tags Relays - Note ontdekking Marktplaats - Live - Community Chats Goedgekeurde berichten Deze groep heeft geen beschrijving of regels. Praat met de eigenaar om er een toe te voegen diff --git a/amethyst/src/main/res/values-nl/strings.xml b/amethyst/src/main/res/values-nl/strings.xml index 7e7b67332..e68d33635 100644 --- a/amethyst/src/main/res/values-nl/strings.xml +++ b/amethyst/src/main/res/values-nl/strings.xml @@ -281,7 +281,6 @@ Ontvolgen Volgen Verwijderen uit galerij - Verwijder deze media uit je galerij, je kunt het terug zien in je feed. Verzoek om te verwijderen 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. Blokkeren @@ -530,10 +529,7 @@ 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? Gevolgde tags Relays - Note ontdekking Marktplaats - Live - Community Chats Goedgekeurde berichten Deze groep heeft geen beschrijving of regels. Praat met de eigenaar om er een toe te voegen diff --git a/amethyst/src/main/res/values-pl-rPL/strings.xml b/amethyst/src/main/res/values-pl-rPL/strings.xml index b49bdfadc..25aafefe8 100644 --- a/amethyst/src/main/res/values-pl-rPL/strings.xml +++ b/amethyst/src/main/res/values-pl-rPL/strings.xml @@ -297,7 +297,7 @@ Porzuć Śledź Usuń z Galerii - Usuń te media z galerii, możesz dodać je ponownie później + Usuń ten plik z Galerii. Poproś o usunięcie Amethyst poprosi o usunięcie Twojego wpisu z aktualnie podłączonych transmiterów. Nie ma gwarancji, że Twój wpis zostanie trwale usunięty z tych lub z innych transmiterów, gdzie może być przechowywany. Zablokuj @@ -556,10 +556,12 @@ Wylogowanie usuwa wszystkie informacje lokalne. Upewnij się, że masz kopię zapasową kluczy prywatnych, aby uniknąć utraty konta. Czy chcesz kontynuować? Obserwowane tagi Transmitery - Kategorie Wpisów + Obserwowani + Wyświetlenia + Algorytmy kanału Market - Na żywo - Społeczności + Transmisja na żywo + Społeczności Czaty Zatwierdzone posty Ta grupa nie ma opisu ani reguł. Porozmawiaj z właścicielem, aby je dodać @@ -611,6 +613,8 @@ Dodaje Geohash twojej lokalizacji do wpisu. Użytkownicy będą wiedzieli, że jesteś mniej niż 5 km od bieżącej lokalizacji Post ekskluzywny dla lokalizacji Tylko obserwatorzy z twojej lokalizacji zobaczą to. Twoi ogólni obserwatorzy tego nie zobaczą. + Wpis hashtagowy + Tylko obserwujący ten hashtag zobaczą go. Twoi ogólni obserwujący go nie zobaczą. Pobieranie lokalizacji Brak dostępu do lokalizacji Dodaje ostrzeżenie o wrażliwych treściach przed wyświetleniem treści. Jest to idealne dla dowolnych treści NSFW lub treści, które niektóre osoby mogą uznać za obraźliwe lub przeszkadzające @@ -813,6 +817,7 @@ Nowe Króciaki: zdjęcia lub filmiki Nowy wpis w społeczności Nowy produkt + Nowy GEO-ekskluzywny Wpis Otwórz wszystkie odzewy na ten post Zamknij wszystkie odzewy na ten post Odpowiedz @@ -962,6 +967,8 @@ Wybierz listę, aby filtrować kanał Wyloguj się przy blokowaniu urządzenia Wiadomość prywatna + Transmiter Czatu Transmiter, z którym łączą się wszyscy użytkownicy tego czatu Udostępnij zdjęcie… + Szukaj tagu: #%1$s diff --git a/amethyst/src/main/res/values-pt-rBR/strings.xml b/amethyst/src/main/res/values-pt-rBR/strings.xml index 89cb77845..96208a6d2 100644 --- a/amethyst/src/main/res/values-pt-rBR/strings.xml +++ b/amethyst/src/main/res/values-pt-rBR/strings.xml @@ -298,7 +298,7 @@ Remover seguidor Seguir Excluir da Galeria - Remover essa mídia de sua galeria, você pode adicionar mais tarde + Remover essa mídia de sua galeria. Pedir para excluir Amethyst solicitará que sua nota seja excluída dos relays aos quais você está conectado no momento. Não há garantia de que sua nota será excluída permanentemente desses relays ou de outros relays onde possa estar armazenada. Bloquear @@ -559,10 +559,10 @@ Relés Pacotes Seguir Leituras - Descoberta de Notas + Algoritmos de feed Mercado - Ao vivo - Comunidade + Transmissões Ao Vivo + Comunidades Conversas Postagens Aprovadas Este grupo não tem uma descrição ou regras. Fale com o proprietário para adicionar @@ -614,6 +614,8 @@ Adicione um geohash da sua localização à postagem. O público saberá que você está a 5 km (3 milhas) do local atual Postagem exclusiva de localização Somente seguidores da localização verão isso. Seus seguidores gerais não verão isso. + Postagem exclusiva de Hashtag + Somente seguidores da hashtag verão isso. Seus seguidores gerais não verão isso. Carregando localização Sem permissões para localização Adiciona aviso de conteúdo sensível antes de mostrar seu conteúdo. Isso é ideal para qualquer conteúdo NSFW ou conteúdo que algumas pessoas possam considerar ofensivo ou perturbador @@ -816,6 +818,7 @@ Novos Vídeos Curtos: imagens ou vídeos Nova Nota da Comunidade Produto Novo + Nova Postagem Geo-Exclusiva Abrir todas as reações a esta postagem Fechar todas as reações a esta postagem Responder @@ -968,4 +971,5 @@ Relé de chat O relé a qual todos os usuários deste chat se conectam Compartilhar imagem… + Pesquisar hashtag: #%1$s diff --git a/amethyst/src/main/res/values-ru-rRU/strings.xml b/amethyst/src/main/res/values-ru-rRU/strings.xml index bfa9fda6d..2c8f56515 100644 --- a/amethyst/src/main/res/values-ru-rRU/strings.xml +++ b/amethyst/src/main/res/values-ru-rRU/strings.xml @@ -353,8 +353,6 @@ Трансляция выключена Трансляция закончена Рынок - Стримы - Сообщества Чаты У этой группы нет описания или правил. Поговорите с владельцем, чтобы добавить их У этого сообщества нет описания. Поговорите с владельцем, чтобы добавить diff --git a/amethyst/src/main/res/values-ru/strings.xml b/amethyst/src/main/res/values-ru/strings.xml index bfa9fda6d..2c8f56515 100644 --- a/amethyst/src/main/res/values-ru/strings.xml +++ b/amethyst/src/main/res/values-ru/strings.xml @@ -353,8 +353,6 @@ Трансляция выключена Трансляция закончена Рынок - Стримы - Сообщества Чаты У этой группы нет описания или правил. Поговорите с владельцем, чтобы добавить их У этого сообщества нет описания. Поговорите с владельцем, чтобы добавить diff --git a/amethyst/src/main/res/values-sl-rSI/strings.xml b/amethyst/src/main/res/values-sl-rSI/strings.xml index 39d027de1..115c30c60 100644 --- a/amethyst/src/main/res/values-sl-rSI/strings.xml +++ b/amethyst/src/main/res/values-sl-rSI/strings.xml @@ -308,7 +308,6 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov Prenehaj slediti Sledi Izbris iz galerije - Odstrani ta medij iz tvoje galerije, lahko ga dodaš nazaj kasneje. Prošnja za izbris Amethyst bo poslal prošnjo za izbris zapiska vsem relejem na katere ste povezani. Nobenega jamstva ni, da bo vaš zapisek trajno izbrisan iz teh relejev ali iz drugih relejev, kjer je morda shranjen. Blokiraj @@ -569,10 +568,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov Releji Sledi tropu Branje - Odkrivanje zapiskov Tržnica - V živo - Skupnosti Pogovori Odobrene objave Ta skupina nima opisa ali pravil. Obrnite se na lastnika, da jih doda diff --git a/amethyst/src/main/res/values-sv-rSE/strings.xml b/amethyst/src/main/res/values-sv-rSE/strings.xml index 4a4c85806..058c36104 100644 --- a/amethyst/src/main/res/values-sv-rSE/strings.xml +++ b/amethyst/src/main/res/values-sv-rSE/strings.xml @@ -298,7 +298,7 @@ Sluta följa Följ Ta bort från galleriet - Ta bort detta media från ditt galleri, kan du lägga till det senare + Ta bort detta media från ditt galleri. Begär radering Amethyst kommer att begära att din anteckning tas bort från de reläer du för närvarande är ansluten till. Det finns ingen garanti för att din anteckning kommer att raderas permanent från dessa reläer eller från andra reläer där den kan lagras. Blockera @@ -558,10 +558,10 @@ Reläer Följpaket Läsningar - Upptäckt av anteckningar + Feed algoritmer Marknadsplats - Live - Gemenskap + Live-streams + Grupper Chattar Godkända Inlägg Denna grupp har ingen beskrivning eller regler. Prata med ägaren för att lägga till en. @@ -613,6 +613,8 @@ Lägger till en Geohash av din plats i inlägget. Allmänheten kommer att veta att du befinner dig inom 5 km från nuvarande plats Plats-exklusivt inlägg Endast anhängare av platsen kommer att se den. Dina allmänna anhängare kommer inte att se den. + Hashtag-exklusivt inlägg + Endast anhängare av hashtaggen kommer att se den. Dina generella följare kommer inte att se den. Laddar position Inga platsbehörigheter Lägger till en varning för känsligt innehåll innan ditt innehåll visas. Detta är idealiskt för NSFW-innehåll (inte säkert för arbete) eller innehåll som vissa personer kan uppleva som stötande eller störande @@ -815,6 +817,7 @@ Nya kort: bilder eller videor Nytt Community-meddelande Ny produkt + Nytt Geo-Exklusivt inlägg Öppna alla reaktioner på detta inlägg Stäng alla reaktioner på detta inlägg Svara @@ -967,4 +970,5 @@ Chatt Relä Reläet som alla användare av den här chatten ansluter till Dela bild… + Sök hashtag: #%1$s diff --git a/amethyst/src/main/res/values-sw-rKE/strings.xml b/amethyst/src/main/res/values-sw-rKE/strings.xml index 079c33fdf..eaae02bd9 100644 --- a/amethyst/src/main/res/values-sw-rKE/strings.xml +++ b/amethyst/src/main/res/values-sw-rKE/strings.xml @@ -371,8 +371,6 @@ Kutoka kunaondoa taarifa zako za eneo la kuhifadhia data. Hakikisha una nakala za funguo zako binafsi ili kuepuka kupoteza akaunti yako. Je, unataka kuendelea? Mada Zinazofuatwa Usanidi wa Relays - Moja kwa Moja - Jumuiya Mazungumzo Machapisho Yaliyoidhinishwa Kikundi hiki hakitumii maelezo au kanuni. Ongea na mmiliki ili aongeze. diff --git a/amethyst/src/main/res/values-ta-rIN/strings.xml b/amethyst/src/main/res/values-ta-rIN/strings.xml index 761ea3819..5471010d5 100644 --- a/amethyst/src/main/res/values-ta-rIN/strings.xml +++ b/amethyst/src/main/res/values-ta-rIN/strings.xml @@ -365,8 +365,6 @@ வெளியேறுவதல் உங்கள் அனைத்து விவரங்களையும் நீக்கிவிடும். வெளியேறும் முன் உங்கள் கணக்கைத் தொலையாமல் இருக்க ரகசியசாவியை பத்திரமாக பிரதி செய்து சேமிக்கப்பட்டுள்ளதா என்று சரிபார்க்கவும். வெளியேற வேண்டுமா? பின்பற்றப்படும் சிட்டைகள் ரிலேகள் - நேரலை - சமூகம் அரட்டை அங்கீகரிக்கப்பட்ட குறிப்பு இந்த அரட்டைக் குழுவின் விளக்கமும் விதிகளும் இன்னும் சேர்க்கபடவில்லை. உரிமையாளரை அணுகி அவற்றை சேர்க்க கோரவும் diff --git a/amethyst/src/main/res/values-ta/strings.xml b/amethyst/src/main/res/values-ta/strings.xml index 761ea3819..5471010d5 100644 --- a/amethyst/src/main/res/values-ta/strings.xml +++ b/amethyst/src/main/res/values-ta/strings.xml @@ -365,8 +365,6 @@ வெளியேறுவதல் உங்கள் அனைத்து விவரங்களையும் நீக்கிவிடும். வெளியேறும் முன் உங்கள் கணக்கைத் தொலையாமல் இருக்க ரகசியசாவியை பத்திரமாக பிரதி செய்து சேமிக்கப்பட்டுள்ளதா என்று சரிபார்க்கவும். வெளியேற வேண்டுமா? பின்பற்றப்படும் சிட்டைகள் ரிலேகள் - நேரலை - சமூகம் அரட்டை அங்கீகரிக்கப்பட்ட குறிப்பு இந்த அரட்டைக் குழுவின் விளக்கமும் விதிகளும் இன்னும் சேர்க்கபடவில்லை. உரிமையாளரை அணுகி அவற்றை சேர்க்க கோரவும் diff --git a/amethyst/src/main/res/values-th-rTH/strings.xml b/amethyst/src/main/res/values-th-rTH/strings.xml index 90f6d80cf..e03e05281 100644 --- a/amethyst/src/main/res/values-th-rTH/strings.xml +++ b/amethyst/src/main/res/values-th-rTH/strings.xml @@ -258,7 +258,6 @@ เลิกติดตาม ติดตาม ลบออกจากคลังภาพ - เอาออกจากคลังภาพ คุณสามารถเพิ่มใหม่ได้ภายหลัง ส่งคำขอให้ลบ Amethyst จะขอให้ลบโน้ตของคุณออกจากรีเลย์ที่คุณเชื่อมต่ออยู่ ไม่มีการรับประกันว่าโน้ตของคุณจะถูกลบออกอย่างถาวรจากรีเลย์เหล่านั้น หรือ จากรีเลย์อื่น ๆ ที่อาจเก็บไว้ บล๊อก @@ -455,10 +454,7 @@ การออกจากระบบจะลบข้อมูลทั้งหมดของคุณ ตรวจสอบให้แน่ใจว่าได้สํารองข้อมูล private key ไว้เพื่อหลีกเลี่ยงการสูญเสียบัญชีของคุณ คุณต้องการดําเนินการต่อหรือไม่? ติดตามแท็ก รีเลย์ - ค้นหาโน๊ตใหม่ ๆ ตลาด - ถ่ายทอดสด - ชุมชน ช่องสนทนา อนุมัติโพสต์ ชุมชนนี้ไม่มีคำอธิบายหรือกฏ พูดคุยกับเจ้าของเพื่อเพิ่มเติมสิ่งนี้ diff --git a/amethyst/src/main/res/values-th/strings.xml b/amethyst/src/main/res/values-th/strings.xml index 90f6d80cf..e03e05281 100644 --- a/amethyst/src/main/res/values-th/strings.xml +++ b/amethyst/src/main/res/values-th/strings.xml @@ -258,7 +258,6 @@ เลิกติดตาม ติดตาม ลบออกจากคลังภาพ - เอาออกจากคลังภาพ คุณสามารถเพิ่มใหม่ได้ภายหลัง ส่งคำขอให้ลบ Amethyst จะขอให้ลบโน้ตของคุณออกจากรีเลย์ที่คุณเชื่อมต่ออยู่ ไม่มีการรับประกันว่าโน้ตของคุณจะถูกลบออกอย่างถาวรจากรีเลย์เหล่านั้น หรือ จากรีเลย์อื่น ๆ ที่อาจเก็บไว้ บล๊อก @@ -455,10 +454,7 @@ การออกจากระบบจะลบข้อมูลทั้งหมดของคุณ ตรวจสอบให้แน่ใจว่าได้สํารองข้อมูล private key ไว้เพื่อหลีกเลี่ยงการสูญเสียบัญชีของคุณ คุณต้องการดําเนินการต่อหรือไม่? ติดตามแท็ก รีเลย์ - ค้นหาโน๊ตใหม่ ๆ ตลาด - ถ่ายทอดสด - ชุมชน ช่องสนทนา อนุมัติโพสต์ ชุมชนนี้ไม่มีคำอธิบายหรือกฏ พูดคุยกับเจ้าของเพื่อเพิ่มเติมสิ่งนี้ diff --git a/amethyst/src/main/res/values-uk-rUA/strings.xml b/amethyst/src/main/res/values-uk-rUA/strings.xml index b8943d743..3c028d448 100644 --- a/amethyst/src/main/res/values-uk-rUA/strings.xml +++ b/amethyst/src/main/res/values-uk-rUA/strings.xml @@ -381,8 +381,6 @@ Вихід з облікового запису видаляє всю вашу локальну інформацію. Переконайтеся, що ваші особисті ключі були збережені, щоб уникнути втрати вашого облікового запису. Ви хочете продовжити? Відстежувані теги Торгівельний майданчик - Наживо - Спільнота Чати Затверджені публікації Ця група не має опису або правил. Зверніться до автора, щоб додати один diff --git a/amethyst/src/main/res/values-uk/strings.xml b/amethyst/src/main/res/values-uk/strings.xml index b8943d743..3c028d448 100644 --- a/amethyst/src/main/res/values-uk/strings.xml +++ b/amethyst/src/main/res/values-uk/strings.xml @@ -381,8 +381,6 @@ Вихід з облікового запису видаляє всю вашу локальну інформацію. Переконайтеся, що ваші особисті ключі були збережені, щоб уникнути втрати вашого облікового запису. Ви хочете продовжити? Відстежувані теги Торгівельний майданчик - Наживо - Спільнота Чати Затверджені публікації Ця група не має опису або правил. Зверніться до автора, щоб додати один diff --git a/amethyst/src/main/res/values-zh-rCN/strings.xml b/amethyst/src/main/res/values-zh-rCN/strings.xml index 33dc34e17..00c9c31e1 100644 --- a/amethyst/src/main/res/values-zh-rCN/strings.xml +++ b/amethyst/src/main/res/values-zh-rCN/strings.xml @@ -300,7 +300,7 @@ 取关 关注 从相册中删除 - 从相册中删除此媒体,但仍然可供浏览 + 从媒体库中删除此媒体。 请求删贴 Amethyst 将请求你的记录从当前连接的中继器中删除。不能保证你发布的笔记将被永久从那些中继器或其他存储笔记的中继器中删除。 阻止 @@ -561,10 +561,10 @@ 中继器 关注包 次浏览 - 笔记发现 + Feed算法 市场 - 直播 - 社区 + 直播 + 社区 聊天 批准的帖子 此群组没有描述或规则。联系群主来添加 @@ -616,6 +616,8 @@ 将你所在位置的地理位置添加到帖子。公众会知道你在当前位置的5公里之内(3英里) 位置限定帖子 只有处于同一地理位置的关注者才能看到贴文。其他追随者无法看到。 + 话题标签专属帖子 + 只有话题标签的关注者才会看到它。您的一般关注者不会看到它。 加载位置中 没有位置信息权限 在显示你的内容之前添加敏感的内容警告。针对任何 NSFW 内容或一些人可能觉得有冒犯性或令人不安的内容。 @@ -818,6 +820,7 @@ 新短篇媒体:图像或视频 新社区笔记 新产品 + 新建地理位置专属帖子 展开对此帖子的所有回应 收起对此帖子的所有回应 回复 @@ -970,4 +973,5 @@ 聊天中继 此聊天所有用户都连接到的中继 分享图片… + 搜索话题标签:#%1$s diff --git a/amethyst/src/main/res/values-zh-rTW/strings.xml b/amethyst/src/main/res/values-zh-rTW/strings.xml index e2025b372..dc1067744 100644 --- a/amethyst/src/main/res/values-zh-rTW/strings.xml +++ b/amethyst/src/main/res/values-zh-rTW/strings.xml @@ -256,7 +256,6 @@ 取關 關注 從相冊中刪除 - 從相冊中刪除此媒體,但仍然可供瀏覽 請求刪貼 Amethyst 將請求您的記錄從當前連接的中繼器中刪除。不能保證您發佈的筆記將被永久從那些中繼器或其他存儲筆記的中繼器中刪除。 屏蔽 @@ -446,10 +445,7 @@ 登出將刪除你的本地信息。請確保備份你的私鑰以避免失去你的帳戶。你想要繼續嗎? 以關注的標籤 中繼器 - 筆記發現 市場 - 直播 - 社群 聊天 批准的帖子 此群組沒有描述或規則。聯繫群主來添加 diff --git a/amethyst/src/main/res/values/strings.xml b/amethyst/src/main/res/values/strings.xml index 144044dec..2d9b6cdb2 100644 --- a/amethyst/src/main/res/values/strings.xml +++ b/amethyst/src/main/res/values/strings.xml @@ -326,7 +326,7 @@ Unfollow Follow Delete from Gallery - Remove this media from your Gallery. + Remove this media from your Gallery. Request Deletion Amethyst will request that your note be deleted from the relays you are currently connected to. There is no guarantee that your note will be permanently deleted from those relays, or from other relays where it may be stored. Block @@ -661,10 +661,10 @@ Follow Packs Reads - Feed Algorithms + Feed Algorithms Marketplace - Live Streams - Communities + Live Streams + Communities Chats Approved Posts @@ -675,6 +675,7 @@ Adds sensitive content warning before showing this content App Preferences + User Preferences Settings Always @@ -1178,4 +1179,7 @@ Share image… Search hashtag: #%1$s + + Don\'t Translate From + Languages shown here will not be translated. Select a language to remove it and have it translated again. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 258945d5e..ac89c22fb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,11 +1,11 @@ [versions] accompanistAdaptive = "0.37.3" activityCompose = "1.10.1" -agp = "8.10.1" +agp = "8.11.0" android-compileSdk = "35" android-minSdk = "26" android-targetSdk = "35" -androidKotlinGeohash = "1.0" +androidKotlinGeohash = "b481c6a64e" androidxJunit = "1.2.1" appcompat = "1.7.0" audiowaveform = "1.1.1" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 17098b30b..da1d086f4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Jan 04 09:23:50 EST 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/signers/EventTemplate.kt b/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/signers/EventTemplate.kt index 8617b1e61..6b7a0b978 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/signers/EventTemplate.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/signers/EventTemplate.kt @@ -20,19 +20,28 @@ */ package com.vitorpamplona.quartz.nip01Core.signers +import com.fasterxml.jackson.annotation.JsonProperty import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.core.TagArray import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.core.builder import com.vitorpamplona.quartz.nip01Core.core.tagArray +import com.vitorpamplona.quartz.nip01Core.jackson.EventMapper import com.vitorpamplona.quartz.utils.TimeUtils class EventTemplate( + @JsonProperty("created_at") val createdAt: Long, val kind: Int, val tags: TagArray, val content: String, -) +) { + fun toJson(): String = EventMapper.mapper.writeValueAsString(this) + + companion object { + fun fromJson(json: String): EventTemplate = EventTemplateManualDeserializer.fromJson(EventMapper.mapper.readTree(json)) + } +} inline fun eventTemplate( kind: Int, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/signers/EventTemplateDeserializer.kt b/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/signers/EventTemplateDeserializer.kt new file mode 100644 index 000000000..94e69cf39 --- /dev/null +++ b/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/signers/EventTemplateDeserializer.kt @@ -0,0 +1,33 @@ +/** + * 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.quartz.nip01Core.signers + +import com.fasterxml.jackson.core.JsonParser +import com.fasterxml.jackson.databind.DeserializationContext +import com.fasterxml.jackson.databind.deser.std.StdDeserializer +import com.vitorpamplona.quartz.nip01Core.core.Event + +class EventTemplateDeserializer : StdDeserializer>(EventTemplate::class.java) { + override fun deserialize( + jp: JsonParser, + ctxt: DeserializationContext, + ): EventTemplate = EventTemplateManualDeserializer.fromJson(jp.codec.readTree(jp)) +} diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/signers/EventTemplateManualDeserializer.kt b/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/signers/EventTemplateManualDeserializer.kt new file mode 100644 index 000000000..abdded6bd --- /dev/null +++ b/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/signers/EventTemplateManualDeserializer.kt @@ -0,0 +1,40 @@ +/** + * 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.quartz.nip01Core.signers + +import com.fasterxml.jackson.databind.JsonNode +import com.vitorpamplona.quartz.nip01Core.core.Event +import com.vitorpamplona.quartz.nip01Core.jackson.toTypedArray + +class EventTemplateManualDeserializer { + companion object { + fun fromJson(jsonObject: JsonNode): EventTemplate = + EventTemplate( + createdAt = jsonObject.get("created_at").asLong(), + kind = jsonObject.get("kind").asInt(), + tags = + jsonObject.get("tags").toTypedArray { + it.toTypedArray { s -> if (s.isNull) "" else s.asText().intern() } + }, + content = jsonObject.get("content").asText(), + ) + } +} diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/nip46RemoteSigner/BunkerRequestSign.kt b/quartz/src/main/java/com/vitorpamplona/quartz/nip46RemoteSigner/BunkerRequestSign.kt index 8c755f1d3..4629e489b 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/nip46RemoteSigner/BunkerRequestSign.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/nip46RemoteSigner/BunkerRequestSign.kt @@ -21,11 +21,12 @@ package com.vitorpamplona.quartz.nip46RemoteSigner import com.vitorpamplona.quartz.nip01Core.core.Event +import com.vitorpamplona.quartz.nip01Core.signers.EventTemplate import java.util.UUID class BunkerRequestSign( id: String = UUID.randomUUID().toString(), - val event: Event, + val event: EventTemplate, ) : BunkerRequest(id, METHOD_NAME, arrayOf(event.toJson())) { companion object { val METHOD_NAME = "sign_event" @@ -33,6 +34,6 @@ class BunkerRequestSign( fun parse( id: String, params: Array, - ): BunkerRequestSign = BunkerRequestSign(id, Event.fromJson(params[0])) + ): BunkerRequestSign = BunkerRequestSign(id, EventTemplate.fromJson(params[0])) } } diff --git a/quartz/src/test/java/com/vitorpamplona/quartz/nip01Core/jackson/EventDeserializerTest.kt b/quartz/src/test/java/com/vitorpamplona/quartz/nip01Core/jackson/EventDeserializerTest.kt new file mode 100644 index 000000000..cb22c26ba --- /dev/null +++ b/quartz/src/test/java/com/vitorpamplona/quartz/nip01Core/jackson/EventDeserializerTest.kt @@ -0,0 +1,65 @@ +/** + * 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.quartz.nip01Core.jackson + +import com.vitorpamplona.quartz.nip01Core.crypto.KeyPair +import com.vitorpamplona.quartz.nip01Core.signers.EventTemplate +import com.vitorpamplona.quartz.nip01Core.signers.NostrSignerInternal +import com.vitorpamplona.quartz.nip01Core.verify +import org.junit.Test + +class EventDeserializerTest { + @Test + fun testEventTemplateToJson() { + val templateJson = """{"created_at":1234,"kind":1,"tags":[],"content":"This is an unsigned event."}""" + val template = EventTemplate.fromJson(templateJson) + + val json = template.toJson() + + assert(json == templateJson) + } + + @Test + fun testEventTemplate() { + val templateJson = """{"kind":"1","content":"This is an unsigned event.","created_at":1234,"tags":[]}""" + val template = EventTemplate.fromJson(templateJson) + + assert(template.kind == 1) + assert(template.content == "This is an unsigned event.") + assert(template.tags.isEmpty()) + } + + @Test + fun testSignedEvent() { + val keyPair = KeyPair() + val signer = NostrSignerInternal(keyPair) + + val templateJson = """{"kind":"1","content":"This is an unsigned event.","created_at":1234,"tags":[]}""" + val template = EventTemplate.fromJson(templateJson) + + val signedEvent = signer.signerSync.sign(template)!! + + assert(signedEvent.id.isNotEmpty()) + assert(signedEvent.sig.isNotEmpty()) + assert(signedEvent.pubKey.isNotEmpty()) + assert(signedEvent.verify()) + } +} diff --git a/quartz/src/test/java/com/vitorpamplona/quartz/nip46RemoteSigner/BunkerRequestTest.kt b/quartz/src/test/java/com/vitorpamplona/quartz/nip46RemoteSigner/BunkerRequestTest.kt new file mode 100644 index 000000000..3d94e0c4b --- /dev/null +++ b/quartz/src/test/java/com/vitorpamplona/quartz/nip46RemoteSigner/BunkerRequestTest.kt @@ -0,0 +1,35 @@ +/** + * 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.quartz.nip46RemoteSigner + +import com.vitorpamplona.quartz.nip01Core.jackson.EventMapper +import org.junit.Test + +class BunkerRequestTest { + @Test + fun testBunkerRequestDeSerialization() { + val requestJson = """{"id":"123","method":"sign_event","params":["{\"created_at\":1234,\"kind\":1,\"tags\":[],\"content\":\"This is an unsigned event.\"}"]}""" + val bunkerRequest = EventMapper.mapper.readValue(requestJson, BunkerRequest::class.java) + + assert(bunkerRequest is BunkerRequestSign) + assert((bunkerRequest as BunkerRequestSign).event.kind == 1) + } +}