diff --git a/app/build.gradle b/app/build.gradle index 8d3526340b..5d9841d0d7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,8 +77,8 @@ ktlint { version = "0.43.2" } -def canonicalVersionCode = 1136 -def canonicalVersionName = "5.51.7" +def canonicalVersionCode = 1142 +def canonicalVersionName = "5.52.5" def mollyRevision = 0 def postFixSize = 100 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b20c6cfda9..70862ba3c8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -620,6 +620,10 @@ android:theme="@style/Theme.Signal.DayNight.NoActionBar" android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/> + + diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java index 53fcd38366..ffb3c432da 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -65,6 +65,7 @@ import org.thoughtcrime.securesms.database.MediaDatabase.MediaRecord; import org.thoughtcrime.securesms.database.loaders.PagingMediaLoader; import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity; +import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory; import org.thoughtcrime.securesms.mediapreview.MediaPreviewFragment; import org.thoughtcrime.securesms.mediapreview.MediaPreviewViewModel; import org.thoughtcrime.securesms.mediapreview.MediaRailAdapter; @@ -98,18 +99,6 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity private final static String TAG = Log.tag(MediaPreviewActivity.class); - private static final int NOT_IN_A_THREAD = -2; - - public static final String THREAD_ID_EXTRA = "thread_id"; - public static final String DATE_EXTRA = "date"; - public static final String SIZE_EXTRA = "size"; - public static final String CAPTION_EXTRA = "caption"; - public static final String LEFT_IS_RECENT_EXTRA = "left_is_recent"; - public static final String HIDE_ALL_MEDIA_EXTRA = "came_from_all_media"; - public static final String SHOW_THREAD_EXTRA = "show_thread"; - public static final String SORTING_EXTRA = "sorting"; - public static final String IS_VIDEO_GIF = "is_video_gif"; - private ViewPager mediaPager; private View detailsContainer; private TextView caption; @@ -127,7 +116,7 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity private ViewPagerListener viewPagerListener; private int restartItem = -1; - private long threadId = NOT_IN_A_THREAD; + private long threadId = MediaIntentFactory.NOT_IN_A_THREAD; private boolean cameFromAllMedia; private boolean showThread; private MediaDatabase.Sorting sorting; @@ -143,12 +132,12 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity { DatabaseAttachment attachment = Objects.requireNonNull(mediaRecord.getAttachment()); Intent intent = new Intent(context, MediaPreviewActivity.class); - intent.putExtra(MediaPreviewActivity.THREAD_ID_EXTRA, mediaRecord.getThreadId()); - intent.putExtra(MediaPreviewActivity.DATE_EXTRA, mediaRecord.getDate()); - intent.putExtra(MediaPreviewActivity.SIZE_EXTRA, attachment.getSize()); - intent.putExtra(MediaPreviewActivity.CAPTION_EXTRA, attachment.getCaption()); - intent.putExtra(MediaPreviewActivity.LEFT_IS_RECENT_EXTRA, leftIsRecent); - intent.putExtra(MediaPreviewActivity.IS_VIDEO_GIF, attachment.isVideoGif()); + intent.putExtra(MediaIntentFactory.THREAD_ID_EXTRA, mediaRecord.getThreadId()); + intent.putExtra(MediaIntentFactory.DATE_EXTRA, mediaRecord.getDate()); + intent.putExtra(MediaIntentFactory.SIZE_EXTRA, attachment.getSize()); + intent.putExtra(MediaIntentFactory.CAPTION_EXTRA, attachment.getCaption()); + intent.putExtra(MediaIntentFactory.LEFT_IS_RECENT_EXTRA, leftIsRecent); + intent.putExtra(MediaIntentFactory.IS_VIDEO_GIF, attachment.isVideoGif()); intent.setDataAndType(attachment.getUri(), mediaRecord.getContentType()); return intent; } @@ -305,17 +294,17 @@ private void initializeViews() { private void initializeResources() { Intent intent = getIntent(); - threadId = intent.getLongExtra(THREAD_ID_EXTRA, NOT_IN_A_THREAD); - cameFromAllMedia = intent.getBooleanExtra(HIDE_ALL_MEDIA_EXTRA, false); - showThread = intent.getBooleanExtra(SHOW_THREAD_EXTRA, false); - sorting = MediaDatabase.Sorting.values()[intent.getIntExtra(SORTING_EXTRA, 0)]; + threadId = intent.getLongExtra(MediaIntentFactory.THREAD_ID_EXTRA, MediaIntentFactory.NOT_IN_A_THREAD); + cameFromAllMedia = intent.getBooleanExtra(MediaIntentFactory.HIDE_ALL_MEDIA_EXTRA, false); + showThread = intent.getBooleanExtra(MediaIntentFactory.SHOW_THREAD_EXTRA, false); + sorting = MediaDatabase.Sorting.values()[intent.getIntExtra(MediaIntentFactory.SORTING_EXTRA, 0)]; initialMediaUri = intent.getData(); initialMediaType = intent.getType(); - initialMediaSize = intent.getLongExtra(SIZE_EXTRA, 0); - initialCaption = intent.getStringExtra(CAPTION_EXTRA); - leftIsRecent = intent.getBooleanExtra(LEFT_IS_RECENT_EXTRA, false); - initialMediaIsVideoGif = intent.getBooleanExtra(IS_VIDEO_GIF, false); + initialMediaSize = intent.getLongExtra(MediaIntentFactory.SIZE_EXTRA, 0); + initialCaption = intent.getStringExtra(MediaIntentFactory.CAPTION_EXTRA); + leftIsRecent = intent.getBooleanExtra(MediaIntentFactory.LEFT_IS_RECENT_EXTRA, false); + initialMediaIsVideoGif = intent.getBooleanExtra(MediaIntentFactory.IS_VIDEO_GIF, false); restartItem = -1; } @@ -533,7 +522,7 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) { } private boolean isMediaInDb() { - return threadId != NOT_IN_A_THREAD; + return threadId != MediaIntentFactory.NOT_IN_A_THREAD; } private @Nullable MediaItem getCurrentMediaItem() { @@ -789,7 +778,7 @@ public Fragment getItem(int position) { cursor.moveToPosition(cursorPosition); - MediaDatabase.MediaRecord mediaRecord = MediaDatabase.MediaRecord.from(context, cursor); + MediaDatabase.MediaRecord mediaRecord = MediaDatabase.MediaRecord.from(cursor); DatabaseAttachment attachment = Objects.requireNonNull(mediaRecord.getAttachment()); MediaPreviewFragment fragment = MediaPreviewFragment.newInstance(attachment, autoPlay); @@ -819,7 +808,7 @@ public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Obj cursor.moveToPosition(cursorPosition); - MediaRecord mediaRecord = MediaRecord.from(context, cursor); + MediaRecord mediaRecord = MediaRecord.from(cursor); DatabaseAttachment attachment = Objects.requireNonNull(mediaRecord.getAttachment()); RecipientId recipientId = mediaRecord.getRecipientId(); RecipientId threadRecipientId = mediaRecord.getThreadRecipientId(); @@ -890,4 +879,4 @@ interface MediaItemAdapter { @Nullable View getPlaybackControls(int position); boolean hasFragmentFor(int position); } -} +} \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/animation/DepthPageTransformer.java b/app/src/main/java/org/thoughtcrime/securesms/animation/DepthPageTransformer.java index da935281b3..85ca770bfe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/animation/DepthPageTransformer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/animation/DepthPageTransformer.java @@ -4,11 +4,12 @@ import androidx.annotation.NonNull; import androidx.viewpager.widget.ViewPager; +import androidx.viewpager2.widget.ViewPager2; /** * Based on https://developer.android.com/training/animation/screen-slide#depth-page */ -public final class DepthPageTransformer implements ViewPager.PageTransformer { +public final class DepthPageTransformer implements ViewPager.PageTransformer, ViewPager2.PageTransformer { private static final float MIN_SCALE = 0.75f; public void transformPage(@NonNull View view, float position) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/color/ViewColorSet.kt b/app/src/main/java/org/thoughtcrime/securesms/color/ViewColorSet.kt new file mode 100644 index 0000000000..60cfe75996 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/color/ViewColorSet.kt @@ -0,0 +1,55 @@ +package org.thoughtcrime.securesms.color + +import android.content.Context +import android.os.Parcelable +import androidx.annotation.ColorInt +import androidx.annotation.ColorRes +import androidx.core.content.ContextCompat +import kotlinx.parcelize.Parcelize +import org.thoughtcrime.securesms.R + +/** + * Represents a set of colors to be applied to the foreground and background of a view. + * + * Supports mixing color ints and color resource ids. + */ +@Parcelize +data class ViewColorSet( + val foreground: ViewColor, + val background: ViewColor +) : Parcelable { + companion object { + val PRIMARY = ViewColorSet( + foreground = ViewColor.ColorResource(R.color.signal_colorOnPrimary), + background = ViewColor.ColorResource(R.color.signal_colorPrimary) + ) + + fun forCustomColor(@ColorInt customColor: Int): ViewColorSet { + return ViewColorSet( + foreground = ViewColor.ColorResource(R.color.signal_colorOnCustom), + background = ViewColor.ColorValue(customColor) + ) + } + } + + @Parcelize + sealed class ViewColor : Parcelable { + + @ColorInt + abstract fun resolve(context: Context): Int + + @Parcelize + data class ColorValue(@ColorInt val colorInt: Int) : ViewColor() { + override fun resolve(context: Context): Int { + return colorInt + } + } + + @Parcelize + data class ColorResource(@ColorRes val colorRes: Int) : ViewColor() { + override fun resolve(context: Context): Int { + return ContextCompat.getColor(context, colorRes) + } + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/DialogFragmentDisplayManager.kt b/app/src/main/java/org/thoughtcrime/securesms/components/DialogFragmentDisplayManager.kt new file mode 100644 index 0000000000..c6b16998e5 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/DialogFragmentDisplayManager.kt @@ -0,0 +1,35 @@ +package org.thoughtcrime.securesms.components + +import androidx.fragment.app.DialogFragment +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner + +/** + * Manages the lifecycle of displaying a dialog fragment. Will automatically close and nullify the reference + * if the bound lifecycle is destroyed, and handles repeat calls to show such that no more than one dialog is + * displayed. + */ +class DialogFragmentDisplayManager(private val builder: () -> DialogFragment) : DefaultLifecycleObserver { + + private var dialogFragment: DialogFragment? = null + + fun show(lifecycleOwner: LifecycleOwner, fragmentManager: FragmentManager, tag: String? = null) { + val fragment = dialogFragment ?: builder() + if (fragment.dialog?.isShowing != true) { + fragment.show(fragmentManager, tag) + dialogFragment = fragment + lifecycleOwner.lifecycle.addObserver(this) + } + } + + fun hide() { + dialogFragment?.dismissNow() + dialogFragment = null + } + + override fun onDestroy(owner: LifecycleOwner) { + owner.lifecycle.removeObserver(this) + hide() + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java index 42a6f2c930..f16c9a068c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java @@ -11,6 +11,7 @@ import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import org.signal.core.util.BreakIteratorCompat; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.emoji.SimpleEmojiTextView; @@ -19,6 +20,7 @@ import org.thoughtcrime.securesms.util.SpanUtil; import org.thoughtcrime.securesms.util.ViewUtil; +import java.util.Iterator; import java.util.Objects; public class FromTextView extends SimpleEmojiTextView { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ProgressCardDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/ProgressCardDialogFragment.kt new file mode 100644 index 0000000000..41a649a812 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ProgressCardDialogFragment.kt @@ -0,0 +1,20 @@ +package org.thoughtcrime.securesms.components + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import androidx.fragment.app.DialogFragment +import org.thoughtcrime.securesms.R + +/** + * Displays a small progress spinner in a card view, as a non-cancellable dialog fragment. + */ +class ProgressCardDialogFragment : DialogFragment(R.layout.progress_card_dialog) { + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + isCancelable = false + return super.onCreateDialog(savedInstanceState).apply { + this.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java b/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java index 4eb15f6348..f47c66b57d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java @@ -304,12 +304,11 @@ private void setQuoteText(@Nullable CharSequence body, missingStoryReaction.setVisibility(View.GONE); } - boolean isTextStory = !attachments.containsMediaSlide() && isStoryReply(); - + StoryTextPostModel textPostModel = isStoryReply() ? getStoryTextPost(body) : null; if (!TextUtils.isEmpty(body) || !attachments.containsMediaSlide()) { - if (isTextStory && body != null) { + if (textPostModel != null) { try { - bodyView.setText(getStoryTextPost(body).getText()); + bodyView.setText(textPostModel.getText()); } catch (Exception e) { Log.w(TAG, "Could not parse body of text post.", e); bodyView.setText(""); @@ -364,8 +363,8 @@ private void setQuoteAttachment(@NonNull GlideRequests glideRequests, @NonNull C mainView.setMinimumHeight(isStoryReply() && originalMissing ? 0 : thumbHeight); thumbnailView.setPadding(0, 0, 0, 0); - if (!attachments.containsMediaSlide() && isStoryReply()) { - StoryTextPostModel model = getStoryTextPost(body); + StoryTextPostModel model = isStoryReply() ? getStoryTextPost(body) : null; + if (model != null) { attachmentVideoOverlayView.setVisibility(GONE); attachmentContainerView.setVisibility(GONE); thumbnailView.setVisibility(VISIBLE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java index 05d1b56b53..4c09af37ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java @@ -89,7 +89,7 @@ public ThreadPhotoViewHolder onCreateItemViewHolder(ViewGroup parent, int viewTy @Override public void onBindItemViewHolder(ThreadPhotoViewHolder viewHolder, @NonNull Cursor cursor) { ThumbnailView imageView = viewHolder.imageView; - MediaDatabase.MediaRecord mediaRecord = MediaDatabase.MediaRecord.from(getContext(), cursor); + MediaDatabase.MediaRecord mediaRecord = MediaDatabase.MediaRecord.from(cursor); Slide slide = MediaUtil.getSlideForAttachment(getContext(), mediaRecord.getAttachment()); if (slide != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/DSLSettingsText.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/DSLSettingsText.kt index 6c70a78257..3ff3ba08e0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/DSLSettingsText.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/DSLSettingsText.kt @@ -66,6 +66,7 @@ sealed class DSLSettingsText { } object TitleLargeModifier : TextAppearanceModifier(R.style.Signal_Text_TitleLarge) + object TitleMediumModifier : TextAppearanceModifier(R.style.Signal_Text_TitleMedium) object Body1BoldModifier : TextAppearanceModifier(R.style.TextAppearance_Signal_Body1_Bold) open class TextAppearanceModifier(@StyleRes private val textAppearance: Int) : Modifier { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt index 4a557fe414..a0fa37bea2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt @@ -43,6 +43,7 @@ import org.thoughtcrime.securesms.util.navigation.safeNavigate import java.util.Optional import java.util.concurrent.TimeUnit import kotlin.math.max +import kotlin.time.Duration.Companion.seconds class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__internal_preferences) { @@ -190,6 +191,25 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter sectionHeaderPref(R.string.preferences__internal_network) + switchPref( + title = DSLSettingsText.from("Force websocket mode"), + summary = DSLSettingsText.from("Pretend you have no Play Services. Ignores websocket messages and keeps the websocket open in a foreground service. You have to manually force-stop the app for changes to take effect."), + isChecked = state.forceWebsocketMode, + onClick = { + viewModel.setForceWebsocketMode(!state.forceWebsocketMode) + SimpleTask.run({ + val jobState = ApplicationDependencies.getJobManager().runSynchronously(RefreshAttributesJob(), 10.seconds.inWholeMilliseconds) + return@run jobState.isPresent && jobState.get().isComplete + }, { success -> + if (success) { + Toast.makeText(context, "Successfully refreshed attributes. Force-stop the app for changes to take effect.", Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(context, "Failed to refresh attributes.", Toast.LENGTH_SHORT).show() + } + }) + } + ) + switchPref( title = DSLSettingsText.from(R.string.preferences__internal_allow_censorship_toggle), summary = DSLSettingsText.from(R.string.preferences__internal_allow_censorship_toggle_description), diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt index 702042ed2a..0ed5e3225e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt @@ -9,6 +9,7 @@ data class InternalSettingsState( val gv2ignoreServerChanges: Boolean, val gv2ignoreP2PChanges: Boolean, val allowCensorshipSetting: Boolean, + val forceWebsocketMode: Boolean, val callingServer: String, val callingAudioProcessingMethod: CallManager.AudioProcessingMethod, val callingBandwidthMode: CallManager.BandwidthMode, diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt index 1f30e9dbe8..287eacad99 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt @@ -54,6 +54,11 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito refresh() } + fun setForceWebsocketMode(enabled: Boolean) { + preferenceDataStore.putBoolean(InternalValues.FORCE_WEBSOCKET_MODE, enabled) + refresh() + } + fun setUseBuiltInEmoji(enabled: Boolean) { preferenceDataStore.putBoolean(InternalValues.FORCE_BUILT_IN_EMOJI, enabled) refresh() @@ -103,6 +108,7 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito gv2ignoreServerChanges = SignalStore.internalValues().gv2IgnoreServerChanges(), gv2ignoreP2PChanges = SignalStore.internalValues().gv2IgnoreP2PChanges(), allowCensorshipSetting = SignalStore.internalValues().allowChangingCensorshipSetting(), + forceWebsocketMode = SignalStore.internalValues().isWebsocketModeForced, callingServer = SignalStore.internalValues().groupCallingServer(), callingAudioProcessingMethod = SignalStore.internalValues().callingAudioProcessingMethod(), callingBandwidthMode = SignalStore.internalValues().callingBandwidthMode(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/StoryDialogLauncherFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/StoryDialogLauncherFragment.kt index b8946dc4f2..bd90db9c98 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/StoryDialogLauncherFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/StoryDialogLauncherFragment.kt @@ -16,6 +16,15 @@ class StoryDialogLauncherFragment : DSLSettingsFragment(titleId = R.string.prefe private fun getConfiguration(): DSLConfiguration { return configure { + clickPref( + title = DSLSettingsText.from(R.string.preferences__internal_remove_group_story), + onClick = { + StoryDialogs.removeGroupStory(requireContext(), "Family") { + Toast.makeText(requireContext(), R.string.preferences__internal_remove_group_story, Toast.LENGTH_SHORT).show() + } + } + ) + clickPref( title = DSLSettingsText.from(R.string.preferences__internal_retry_send), onClick = { @@ -44,6 +53,33 @@ class StoryDialogLauncherFragment : DSLSettingsFragment(titleId = R.string.prefe } } ) + + clickPref( + title = DSLSettingsText.from(R.string.preferences__internal_turn_off_stories), + onClick = { + StoryDialogs.disableStories(requireContext(), false) { + Toast.makeText(requireContext(), R.string.preferences__internal_turn_off_stories, Toast.LENGTH_SHORT).show() + } + } + ) + + clickPref( + title = DSLSettingsText.from(R.string.preferences__internal_turn_off_stories_with_stories_on_disk), + onClick = { + StoryDialogs.disableStories(requireContext(), true) { + Toast.makeText(requireContext(), R.string.preferences__internal_turn_off_stories_with_stories_on_disk, Toast.LENGTH_SHORT).show() + } + } + ) + + clickPref( + title = DSLSettingsText.from(R.string.preferences__internal_delete_private_story), + onClick = { + StoryDialogs.deleteDistributionList(requireContext(), "Family") { + Toast.makeText(requireContext(), R.string.preferences__internal_delete_private_story, Toast.LENGTH_SHORT).show() + } + } + ) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt index 028de04639..ebcca64af7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt @@ -241,6 +241,18 @@ class PrivacySettingsFragment : DSLSettingsFragment(R.string.preferences__privac ) ) + if (Stories.isFeatureAvailable()) { + dividerPref() + + clickPref( + title = DSLSettingsText.from(R.string.preferences__stories), + summary = DSLSettingsText.from(R.string.PrivacySettingsFragment__manage_your_stories), + onClick = { + findNavController().safeNavigate(PrivacySettingsFragmentDirections.actionPrivacySettingsFragmentToStoryPrivacySettings(R.string.preferences__stories)) + } + ) + } + dividerPref() sectionHeaderPref(R.string.PrivacySettingsFragment__app_security) @@ -278,18 +290,6 @@ class PrivacySettingsFragment : DSLSettingsFragment(R.string.preferences__privac summary = DSLSettingsText.from(incognitoSummary), ) - if (Stories.isFeatureAvailable()) { - dividerPref() - - clickPref( - title = DSLSettingsText.from(R.string.preferences__stories), - summary = DSLSettingsText.from(R.string.PrivacySettingsFragment__manage_your_stories), - onClick = { - findNavController().safeNavigate(PrivacySettingsFragmentDirections.actionPrivacySettingsFragmentToStoryPrivacySettings(R.string.preferences__stories)) - } - ) - } - dividerPref() clickPref( diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsViewModel.kt index 20649663a9..8bea411de3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsViewModel.kt @@ -77,7 +77,7 @@ class AdvancedPrivacySettingsViewModel( fun setCensorshipCircumventionEnabled(enabled: Boolean) { SignalStore.settings().setCensorshipCircumventionEnabled(enabled) SignalStore.misc().isServiceReachableWithoutCircumvention = false - ApplicationDependencies.restartNetworkConnectionsAfterProxyChange() + ApplicationDependencies.restartAllNetworkConnections() refresh() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt index da94949e2b..458ed789fe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt @@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.database.model.RecipientRecord import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -266,17 +267,23 @@ class InternalConversationSettingsFragment : DSLSettingsFragment( } private fun buildCapabilitySpan(recipient: Recipient): CharSequence { - return TextUtils.concat( - colorize("GV1Migration", recipient.groupsV1MigrationCapability), - ", ", - colorize("AnnouncementGroup", recipient.announcementGroupCapability), - ", ", - colorize("SenderKey", recipient.senderKeyCapability), - ", ", - colorize("ChangeNumber", recipient.changeNumberCapability), - ", ", - colorize("Stories", recipient.storiesCapability), - ) + val capabilities: RecipientRecord.Capabilities? = SignalDatabase.recipients.getCapabilities(recipient.id) + + return if (capabilities != null) { + TextUtils.concat( + colorize("GV1Migration", capabilities.groupsV1MigrationCapability), + ", ", + colorize("AnnouncementGroup", capabilities.announcementGroupCapability), + ", ", + colorize("SenderKey", capabilities.senderKeyCapability), + ", ", + colorize("ChangeNumber", capabilities.changeNumberCapability), + ", ", + colorize("Stories", capabilities.storiesCapability), + ) + } else { + "Recipient not found!" + } } private fun colorize(name: String, support: Recipient.Capability): CharSequence { diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactChipViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactChipViewModel.kt index 0cd7ce6d0b..33e9b20b5b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactChipViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactChipViewModel.kt @@ -35,6 +35,7 @@ class ContactChipViewModel : ViewModel() { disposables.clear() disposableMap.values.forEach { it.dispose() } disposableMap.clear() + store.dispose() } fun add(selectedContact: SelectedContact) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchConfiguration.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchConfiguration.kt index 3a743af946..962b6f6d44 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchConfiguration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchConfiguration.kt @@ -52,7 +52,8 @@ class ContactSearchConfiguration private constructor( val includeSelf: Boolean, val transportType: TransportType, override val includeHeader: Boolean, - override val expandConfig: ExpandConfig? = null + override val expandConfig: ExpandConfig? = null, + val includeLetterHeaders: Boolean = false ) : Section(SectionKey.INDIVIDUALS) /** @@ -64,6 +65,7 @@ class ContactSearchConfiguration private constructor( val includeInactive: Boolean = false, val returnAsGroupStories: Boolean = false, val sortOrder: ContactSearchSortOrder = ContactSearchSortOrder.NATURAL, + val shortSummary: Boolean = false, override val includeHeader: Boolean, override val expandConfig: ExpandConfig? = null ) : Section(SectionKey.GROUPS) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchData.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchData.kt index d835ad3c83..f7ba55ba20 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchData.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchData.kt @@ -23,7 +23,11 @@ sealed class ContactSearchData(val contactSearchKey: ContactSearchKey) { /** * A row displaying a known recipient. */ - data class KnownRecipient(val recipient: Recipient) : ContactSearchData(ContactSearchKey.RecipientSearchKey.KnownRecipient(recipient.id)) + data class KnownRecipient( + val recipient: Recipient, + val shortSummary: Boolean = false, + val headerLetter: String? = null + ) : ContactSearchData(ContactSearchKey.RecipientSearchKey.KnownRecipient(recipient.id)) /** * A row containing a title for a given section diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchItems.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchItems.kt index cf60e759aa..c575d72d82 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchItems.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchItems.kt @@ -11,6 +11,7 @@ import org.thoughtcrime.securesms.components.AvatarImageView import org.thoughtcrime.securesms.components.FromTextView import org.thoughtcrime.securesms.components.menu.ActionItem import org.thoughtcrime.securesms.components.menu.SignalContextMenu +import org.thoughtcrime.securesms.contacts.LetterHeaderDecoration import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient @@ -73,7 +74,7 @@ object ContactSearchItems { contactSearchData.filterNotNull().map { when (it) { is ContactSearchData.Story -> StoryModel(it, selection.contains(it.contactSearchKey), SignalStore.storyValues().userHasBeenNotifiedAboutStories) - is ContactSearchData.KnownRecipient -> RecipientModel(it, selection.contains(it.contactSearchKey)) + is ContactSearchData.KnownRecipient -> RecipientModel(it, selection.contains(it.contactSearchKey), it.shortSummary) is ContactSearchData.Expand -> ExpandModel(it) is ContactSearchData.Header -> HeaderModel(it) is ContactSearchData.TestRow -> error("This row exists for testing only.") @@ -207,7 +208,7 @@ object ContactSearchItems { /** * Recipient model */ - private class RecipientModel(val knownRecipient: ContactSearchData.KnownRecipient, val isSelected: Boolean) : MappingModel { + private class RecipientModel(val knownRecipient: ContactSearchData.KnownRecipient, val isSelected: Boolean, val shortSummary: Boolean) : MappingModel { override fun areItemsTheSame(newItem: RecipientModel): Boolean { return newItem.knownRecipient == knownRecipient @@ -226,10 +227,29 @@ object ContactSearchItems { } } - private class KnownRecipientViewHolder(itemView: View, displayCheckBox: Boolean, onClick: RecipientClickListener) : BaseRecipientViewHolder(itemView, displayCheckBox, onClick) { + private class KnownRecipientViewHolder(itemView: View, displayCheckBox: Boolean, onClick: RecipientClickListener) : BaseRecipientViewHolder(itemView, displayCheckBox, onClick), LetterHeaderDecoration.LetterHeaderItem { + + private var headerLetter: String? = null + override fun isSelected(model: RecipientModel): Boolean = model.isSelected override fun getData(model: RecipientModel): ContactSearchData.KnownRecipient = model.knownRecipient override fun getRecipient(model: RecipientModel): Recipient = model.knownRecipient.recipient + override fun bindNumberField(model: RecipientModel) { + val recipient = getRecipient(model) + + if (model.shortSummary && recipient.isGroup) { + val count = recipient.participantIds.size + number.text = context.resources.getQuantityString(R.plurals.ContactSearchItems__group_d_members, count, count) + } else { + super.bindNumberField(model) + } + + headerLetter = model.knownRecipient.headerLetter + } + + override fun getHeaderLetter(): String? { + return headerLetter + } } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt index 16e340da5c..b9cdfe960a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt @@ -12,6 +12,7 @@ import io.reactivex.rxjava3.core.Observable import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.groups.SelectionLimits import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs import org.thoughtcrime.securesms.stories.settings.custom.PrivateStorySettingsFragment import org.thoughtcrime.securesms.stories.settings.my.MyStorySettingsFragment import org.thoughtcrime.securesms.stories.settings.privacy.ChooseInitialMyStoryMembershipBottomSheetDialogFragment @@ -97,6 +98,17 @@ class ContactSearchMediator( } private fun toggleStorySelection(view: View, contactSearchData: ContactSearchData.Story, isSelected: Boolean) { + if (SignalStore.storyValues().userHasSeenBetaDialog) { + performStoryToggle(view, contactSearchData, isSelected) + } else { + StoryDialogs.displayBetaDialog(view.context) { + SignalStore.storyValues().userHasSeenBetaDialog = true + performStoryToggle(view, contactSearchData, isSelected) + } + } + } + + private fun performStoryToggle(view: View, contactSearchData: ContactSearchData.Story, isSelected: Boolean) { if (contactSearchData.recipient.isMyStory && !SignalStore.storyValues().userHasBeenNotifiedAboutStories) { ChooseInitialMyStoryMembershipBottomSheetDialogFragment.show(fragment.childFragmentManager) } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt index 28c4287a94..580cc12d02 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt @@ -11,6 +11,7 @@ import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.keyvalue.StorySend import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.recipients.RecipientId import java.util.concurrent.TimeUnit /** @@ -129,6 +130,13 @@ class ContactSearchPagedDataSource( } } + private fun getNonGroupHeaderLetterMap(section: ContactSearchConfiguration.Section.Individuals, query: String?): Map { + return when (section.transportType) { + ContactSearchConfiguration.TransportType.PUSH -> contactSearchPagedDataSourceRepository.querySignalContactLetterHeaders(query, section.includeSelf) + else -> error("This has only been implemented for push recipients.") + } + } + private fun getStoriesSearchIterator(query: String?): ContactSearchIterator { return CursorSearchIterator(contactSearchPagedDataSourceRepository.getStories(query)) } @@ -193,6 +201,12 @@ class ContactSearchPagedDataSource( } private fun getNonGroupContactsData(section: ContactSearchConfiguration.Section.Individuals, query: String?, startIndex: Int, endIndex: Int): List { + val headerMap: Map = if (section.includeLetterHeaders) { + getNonGroupHeaderLetterMap(section, query) + } else { + emptyMap() + } + return getNonGroupSearchIterator(section, query).use { records -> readContactData( records = records, @@ -201,7 +215,8 @@ class ContactSearchPagedDataSource( startIndex = startIndex, endIndex = endIndex, recordMapper = { - ContactSearchData.KnownRecipient(contactSearchPagedDataSourceRepository.getRecipientFromRecipientCursor(it)) + val recipient = contactSearchPagedDataSourceRepository.getRecipientFromRecipientCursor(it) + ContactSearchData.KnownRecipient(recipient, headerLetter = headerMap[recipient.id]) } ) } @@ -219,7 +234,7 @@ class ContactSearchPagedDataSource( if (section.returnAsGroupStories) { ContactSearchData.Story(contactSearchPagedDataSourceRepository.getRecipientFromGroupRecord(it), 0, DistributionListPrivacyMode.ALL) } else { - ContactSearchData.KnownRecipient(contactSearchPagedDataSourceRepository.getRecipientFromGroupRecord(it)) + ContactSearchData.KnownRecipient(contactSearchPagedDataSourceRepository.getRecipientFromGroupRecord(it), shortSummary = section.shortSummary) } } ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt index e5552ffa54..c84a9efc35 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt @@ -36,6 +36,10 @@ open class ContactSearchPagedDataSourceRepository( return contactRepository.querySignalContacts(query ?: "", includeSelf) } + open fun querySignalContactLetterHeaders(query: String?, includeSelf: Boolean): Map { + return SignalDatabase.recipients.querySignalContactLetterHeaders(query ?: "", includeSelf) + } + open fun queryNonSignalContacts(query: String?): Cursor? { return contactRepository.queryNonSignalContacts(query ?: "") } @@ -107,7 +111,7 @@ open class ContactSearchPagedDataSourceRepository( } open fun recipientNameContainsQuery(recipient: Recipient, query: String?): Boolean { - return query.isNullOrBlank() || recipient.getDisplayName(context).contains(query) + return query.isNullOrBlank() || recipient.getDisplayName(context).contains(query, ignoreCase = true) } open fun myStoryContainsQuery(query: String): Boolean { @@ -116,6 +120,6 @@ open class ContactSearchPagedDataSourceRepository( } val myStory = context.getString(R.string.Recipient_my_story) - return myStory.contains(query) + return myStory.contains(query, ignoreCase = true) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java index f2d120b2cb..42dc29c5e3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java @@ -159,6 +159,12 @@ private int getSizeInternal() { MessageDatabase database = messageId.isMms() ? SignalDatabase.mms() : SignalDatabase.sms(); MessageRecord record = database.getMessageRecordOrNull(messageId.getId()); + if (record instanceof MediaMmsMessageRecord && + ((MediaMmsMessageRecord) record).getParentStoryId() != null && + ((MediaMmsMessageRecord) record).getParentStoryId().isGroupReply()) { + return null; + } + stopwatch.split("message"); try { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index 40e261ec3c..c04be108ea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -20,6 +20,7 @@ import android.animation.ValueAnimator; import android.annotation.SuppressLint; +import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; @@ -95,6 +96,7 @@ import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectCollection; import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart; import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.MediaDatabase; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord; import org.thoughtcrime.securesms.database.model.MessageRecord; @@ -107,6 +109,8 @@ import org.thoughtcrime.securesms.jobs.MmsDownloadJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.linkpreview.LinkPreview; +import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory; +import org.thoughtcrime.securesms.mediapreview.MediaPreviewV2Activity; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.ImageSlide; import org.thoughtcrime.securesms.mms.PartAuthority; @@ -122,6 +126,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.revealable.ViewOnceMessageView; import org.thoughtcrime.securesms.util.DateUtils; +import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.InterceptableLongClickCopyLinkSpan; import org.thoughtcrime.securesms.util.LinkUtil; import org.thoughtcrime.securesms.util.LongClickMovementMethod; @@ -2254,17 +2259,19 @@ public void onClick(final View v, final Slide slide) { } else if (!canPlayContent && mediaItem != null && eventListener != null) { eventListener.onPlayInlineContent(conversationMessage); } else if (MediaPreviewActivity.isContentTypeSupported(slide.getContentType()) && slide.getUri() != null) { - Intent intent = new Intent(context, MediaPreviewActivity.class); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.setDataAndType(slide.getUri(), slide.getContentType()); - intent.putExtra(MediaPreviewActivity.THREAD_ID_EXTRA, messageRecord.getThreadId()); - intent.putExtra(MediaPreviewActivity.DATE_EXTRA, messageRecord.getTimestamp()); - intent.putExtra(MediaPreviewActivity.SIZE_EXTRA, slide.asAttachment().getSize()); - intent.putExtra(MediaPreviewActivity.CAPTION_EXTRA, slide.getCaption().orElse(null)); - intent.putExtra(MediaPreviewActivity.IS_VIDEO_GIF, slide.isVideoGif()); - intent.putExtra(MediaPreviewActivity.LEFT_IS_RECENT_EXTRA, false); - - context.startActivity(intent); + MediaIntentFactory.MediaPreviewArgs args = new MediaIntentFactory.MediaPreviewArgs( + messageRecord.getThreadId(), + messageRecord.getTimestamp(), + slide.getUri(), + slide.getContentType(), + slide.asAttachment().getSize(), + slide.getCaption().orElse(null), + false, + false, + false, + MediaDatabase.Sorting.Newest.ordinal(), + slide.isVideoGif()); + context.startActivity(MediaIntentFactory.create(context, args)); } else if (slide.getUri() != null) { Log.i(TAG, "Clicked: " + slide.getUri() + " , " + slide.getContentType()); Uri publicUri = PartAuthority.getAttachmentPublicUri(slide.getUri()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index 92b39fed06..15e1e61064 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -192,6 +192,7 @@ import org.thoughtcrime.securesms.groups.ui.invitesandrequests.ManagePendingAndRequestingMembersActivity; import org.thoughtcrime.securesms.groups.ui.migration.GroupsV1MigrationInitiationBottomSheetDialogFragment; import org.thoughtcrime.securesms.groups.ui.migration.GroupsV1MigrationSuggestionsDialog; +import org.thoughtcrime.securesms.jobs.ForceUpdateGroupV2Job; import org.thoughtcrime.securesms.jobs.GroupV1MigrationJob; import org.thoughtcrime.securesms.jobs.GroupV2UpdateSelfProfileKeyJob; import org.thoughtcrime.securesms.jobs.RequestGroupV2InfoJob; @@ -580,6 +581,8 @@ public void onResume() { .then(GroupV2UpdateSelfProfileKeyJob.withoutLimits(groupId)) .enqueue(); + ForceUpdateGroupV2Job.enqueueIfNecessary(groupId); + if (viewModel.getArgs().isFirstTimeInSelfCreatedGroup()) { groupViewModel.inviteFriendsOneTimeIfJustSelfInGroup(getChildFragmentManager(), groupId); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java index 3fef0cffc9..bf647aeb25 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java @@ -59,6 +59,7 @@ import io.reactivex.rxjava3.core.Flowable; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.disposables.CompositeDisposable; +import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.processors.PublishProcessor; import io.reactivex.rxjava3.schedulers.Schedulers; import io.reactivex.rxjava3.subjects.BehaviorSubject; @@ -135,10 +136,12 @@ private ConversationViewModel() { .map(Recipient::resolved) .subscribe(recipientCache); - conversationStateStore.update(Observable.combineLatest(recipientId.distinctUntilChanged(), conversationStateTick, (id, tick) -> id) - .switchMap(conversationRepository::getSecurityInfo) - .toFlowable(BackpressureStrategy.LATEST), - (securityInfo, state) -> state.withSecurityInfo(securityInfo)); + Disposable disposable = conversationStateStore.update(Observable.combineLatest(recipientId.distinctUntilChanged(), conversationStateTick, (id, tick) -> id) + .switchMap(conversationRepository::getSecurityInfo) + .toFlowable(BackpressureStrategy.LATEST), + (securityInfo, state) -> state.withSecurityInfo(securityInfo)); + + disposables.add(disposable); BehaviorSubject conversationMetadata = BehaviorSubject.create(); @@ -425,6 +428,7 @@ protected void onCleared() { ApplicationDependencies.getDatabaseObserver().unregisterObserver(messageUpdateObserver); ApplicationDependencies.getDatabaseObserver().unregisterObserver(messageInsertObserver); disposables.clear(); + conversationStateStore.dispose(); EventBus.getDefault().unregister(this); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftViewModel.kt index 41ba3ee6f1..a97b9e7cb0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftViewModel.kt @@ -33,6 +33,10 @@ class DraftViewModel @JvmOverloads constructor( val voiceNoteDraft: Draft? get() = store.state.voiceNoteDraft + override fun onCleared() { + store.dispose() + } + fun setThreadId(threadId: Long) { store.update { it.copy(threadId = threadId) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardActivity.kt index 53b835f989..4d7b72a2bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardActivity.kt @@ -8,6 +8,7 @@ import androidx.activity.result.contract.ActivityResultContract import androidx.appcompat.widget.Toolbar import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment +import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.FragmentWrapperActivity import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey @@ -16,6 +17,7 @@ import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectFor open class MultiselectForwardActivity : FragmentWrapperActivity(), MultiselectForwardFragment.Callback, SearchConfigurationProvider { companion object { + private val TAG = Log.tag(MultiselectForwardActivity::class.java) private const val ARGS = "args" } @@ -32,20 +34,15 @@ open class MultiselectForwardActivity : FragmentWrapperActivity(), MultiselectFo } override fun getFragment(): Fragment { - return MultiselectForwardFragment.create( - args.let { - if (it.sendButtonTint == -1) { - args.withSendButtonTint(ContextCompat.getColor(this, R.color.signal_colorPrimary)) - } else { - args - } - } - ) + return MultiselectForwardFragment.create(args) } - override fun onFinishForwardAction() = Unit + override fun onFinishForwardAction() { + Log.d(TAG, "Completed forward action...") + } override fun exitFlow() { + Log.d(TAG, "Exiting flow...") onBackPressedDispatcher.onBackPressed() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt index 185a084e02..0ce2139e55 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt @@ -29,6 +29,7 @@ import androidx.fragment.app.viewModels import androidx.recyclerview.widget.RecyclerView import com.google.android.material.dialog.MaterialAlertDialogBuilder import org.signal.core.util.DimensionUnit +import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.ContactFilterView import org.thoughtcrime.securesms.components.TooltipPopup @@ -143,9 +144,10 @@ class MultiselectForwardFragment : val sendButton: AppCompatImageView = bottomBar.findViewById(R.id.share_confirm) val backgroundHelper: View = bottomBar.findViewById(R.id.background_helper) - if (args.sendButtonTint != -1) { - sendButton.setColorFilter(ContextCompat.getColor(requireContext(), R.color.signal_colorOnCustom)) - ViewCompat.setBackgroundTintList(sendButton, ColorStateList.valueOf(args.sendButtonTint)) + val sendButtonColors = args.sendButtonColors + if (sendButtonColors != null) { + sendButton.setColorFilter(sendButtonColors.foreground.resolve(requireContext())) + ViewCompat.setBackgroundTintList(sendButton, ColorStateList.valueOf(sendButtonColors.background.resolve(requireContext()))) } FullscreenHelper.configureBottomBarLayout(requireActivity(), bottomBarSpacer, bottomBar) @@ -318,6 +320,8 @@ class MultiselectForwardFragment : } private fun dismissAndShowToast(@PluralsRes toastTextResId: Int) { + Log.d(TAG, "dismissAndShowToast") + val argCount = getMessageCount() callback.onFinishForwardAction() @@ -329,6 +333,8 @@ class MultiselectForwardFragment : private fun getMessageCount(): Int = args.multiShareArgs.size + if (addMessage.text.isNotEmpty()) 1 else 0 private fun handleMessageExpired() { + Log.d(TAG, "handleMessageExpired") + callback.onFinishForwardAction() dismissibleDialog?.dismiss() Toast.makeText(requireContext(), resources.getQuantityString(R.plurals.MultiselectForwardFragment__couldnt_forward_messages, args.multiShareArgs.size), Toast.LENGTH_LONG).show() @@ -336,6 +342,8 @@ class MultiselectForwardFragment : } private fun dismissWithSelection(selectedContacts: Set) { + Log.d(TAG, "dismissWithSelection") + callback.onFinishForwardAction() dismissibleDialog?.dismiss() @@ -451,7 +459,7 @@ class MultiselectForwardFragment : } private fun isSelectedMediaValidForStories(): Boolean { - return args.multiShareArgs.all { it.isValidForStories } + return !args.isViewOnce && args.multiShareArgs.all { it.isValidForStories } } private fun isSelectedMediaValidForNonStories(): Boolean { @@ -486,6 +494,8 @@ class MultiselectForwardFragment : } companion object { + private val TAG = Log.tag(MultiselectForwardActivity::class.java) + const val DIALOG_TITLE = "title" const val ARGS = "args" const val RESULT_KEY = "result_key" diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt index 1d34fa3f30..ec423cfe87 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt @@ -12,6 +12,7 @@ import org.signal.core.util.ThreadUtil import org.signal.core.util.concurrent.SignalExecutors import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.attachments.Attachment +import org.thoughtcrime.securesms.color.ViewColorSet import org.thoughtcrime.securesms.conversation.ConversationMessage import org.thoughtcrime.securesms.conversation.mutiselect.Multiselect import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart @@ -43,12 +44,13 @@ data class MultiselectForwardFragmentArgs @JvmOverloads constructor( val forceDisableAddMessage: Boolean = false, val forceSelectionOnly: Boolean = false, val selectSingleRecipient: Boolean = false, - @ColorInt val sendButtonTint: Int = -1, + val sendButtonColors: ViewColorSet = ViewColorSet.PRIMARY, val storySendRequirements: Stories.MediaTransform.SendRequirements = Stories.MediaTransform.SendRequirements.CAN_NOT_SEND, - val isSearchEnabled: Boolean = true + val isSearchEnabled: Boolean = true, + val isViewOnce: Boolean = false ) : Parcelable { - fun withSendButtonTint(@ColorInt sendButtonTint: Int) = copy(sendButtonTint = sendButtonTint) + fun withSendButtonTint(@ColorInt sendButtonTint: Int) = copy(sendButtonColors = ViewColorSet.forCustomColor(sendButtonTint)) companion object { @JvmStatic @@ -61,9 +63,11 @@ data class MultiselectForwardFragmentArgs @JvmOverloads constructor( .withDataType(mediaType) .build() - val sendButtonTint: Int = threadId.takeIf { it > 0 } - ?.let { SignalDatabase.threads.getRecipientForThreadId(it) }?.chatColors?.asSingleColor() - ?: -1 + val sendButtonColors: ViewColorSet? = threadId.takeIf { it > 0 } + ?.let { SignalDatabase.threads.getRecipientForThreadId(it) } + ?.chatColors + ?.asSingleColor() + ?.let { ViewColorSet.forCustomColor(it) } ThreadUtil.runOnMain { consumer.accept( @@ -71,7 +75,7 @@ data class MultiselectForwardFragmentArgs @JvmOverloads constructor( isMmsSupported, listOf(multiShareArgs), storySendRequirements = Stories.MediaTransform.SendRequirements.CAN_NOT_SEND, - sendButtonTint = sendButtonTint + sendButtonColors = sendButtonColors ?: ViewColorSet.PRIMARY ) ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java index 2e1bfeb1fb..a0a3a44578 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java @@ -17,6 +17,8 @@ import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.BuildConfig; +import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode; import org.thoughtcrime.securesms.keyvalue.CertificateType; import org.thoughtcrime.securesms.keyvalue.PhoneNumberPrivacyValues; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -68,8 +70,8 @@ public static List> getAccessFor(@NonNull Conte } @WorkerThread - public static Map> getAccessMapFor(@NonNull Context context, @NonNull List recipients) { - List> accessList = getAccessFor(context, recipients, true); + public static Map> getAccessMapFor(@NonNull Context context, @NonNull List recipients, boolean isForStory) { + List> accessList = getAccessFor(context, recipients, true, isForStory); Iterator recipientIterator = recipients.iterator(); Iterator> accessIterator = accessList.iterator(); @@ -82,9 +84,14 @@ public static Map> getAccessMapFor return accessMap; } - + @WorkerThread public static List> getAccessFor(@NonNull Context context, @NonNull List recipients, boolean log) { + return getAccessFor(context, recipients, false, log); + } + + @WorkerThread + public static List> getAccessFor(@NonNull Context context, @NonNull List recipients, boolean isForStory, boolean log) { byte[] ourUnidentifiedAccessKey = UnidentifiedAccess.deriveAccessKeyFrom(ProfileKeyUtil.getSelfProfileKey()); if (TextSecurePreferences.isUniversalUnidentifiedAccess(context)) { @@ -96,7 +103,7 @@ public static List> getAccessFor(@NonNull Conte Map typeCounts = new HashMap<>(); for (Recipient recipient : recipients) { - byte[] theirUnidentifiedAccessKey = getTargetUnidentifiedAccessKey(recipient); + byte[] theirUnidentifiedAccessKey = getTargetUnidentifiedAccessKey(recipient, isForStory); CertificateType certificateType = getUnidentifiedAccessCertificateType(recipient); byte[] ourUnidentifiedAccessCertificate = SignalStore.certificateValues().getUnidentifiedAccessCertificate(certificateType); @@ -168,28 +175,40 @@ private static byte[] getUnidentifiedAccessCertificate(@NonNull Recipient recipi .getUnidentifiedAccessCertificate(getUnidentifiedAccessCertificateType(recipient)); } - private static @Nullable byte[] getTargetUnidentifiedAccessKey(@NonNull Recipient recipient) { + private static @Nullable byte[] getTargetUnidentifiedAccessKey(@NonNull Recipient recipient, boolean isForStory) { ProfileKey theirProfileKey = ProfileKeyUtil.profileKeyOrNull(recipient.resolve().getProfileKey()); + byte[] accessKey; + switch (recipient.resolve().getUnidentifiedAccessMode()) { case UNKNOWN: if (theirProfileKey == null) { - return UNRESTRICTED_KEY; + accessKey = UNRESTRICTED_KEY; } else { - return UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey); + accessKey = UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey); } + break; case DISABLED: - return null; + accessKey = null; + break; case ENABLED: if (theirProfileKey == null) { - return null; + accessKey = null; } else { - return UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey); + accessKey = UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey); } + break; case UNRESTRICTED: - return UNRESTRICTED_KEY; + accessKey = UNRESTRICTED_KEY; + break; default: throw new AssertionError("Unknown mode: " + recipient.getUnidentifiedAccessMode().getMode()); } + + if (accessKey == null && isForStory) { + accessKey = UNRESTRICTED_KEY; + } + + return accessKey; } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java index 59a536aa55..8188f61eae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java @@ -739,10 +739,15 @@ public void updateMessageId(@NonNull Collection attachmentIds, lon values.putNull(CAPTION); } + int updatedCount = 0; + int attachmentIdSize = 0; for (AttachmentId attachmentId : attachmentIds) { - db.update(TABLE_NAME, values, PART_ID_WHERE, attachmentId.toStrings()); + attachmentIdSize++; + updatedCount = db.update(TABLE_NAME, values, PART_ID_WHERE, attachmentId.toStrings()); } + Log.d(TAG, "[updateMessageId] Updated " + updatedCount + " out of " + attachmentIdSize + " ids."); + db.setTransactionSuccessful(); } finally { db.endTransaction(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListDatabase.kt index f5cab53979..757b008841 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListDatabase.kt @@ -16,7 +16,6 @@ import org.signal.core.util.requireString import org.signal.core.util.select import org.signal.core.util.withinTransaction import org.thoughtcrime.securesms.database.model.DistributionListId -import org.thoughtcrime.securesms.database.model.DistributionListPartialRecord import org.thoughtcrime.securesms.database.model.DistributionListPrivacyData import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.database.model.DistributionListRecord @@ -99,7 +98,10 @@ class DistributionListDatabase constructor(context: Context?, databaseHelper: Si const val IS_NOT_DELETED = "$DELETION_TIMESTAMP == 0" - val LIST_UI_PROJECTION = arrayOf(ID, NAME, RECIPIENT_ID, ALLOWS_REPLIES, IS_UNKNOWN, PRIVACY_MODE) + val SEARCH_NAME_COLUMN = "search_name" + private val SEARCH_NAME = "LOWER($NAME) AS $SEARCH_NAME_COLUMN" + + val LIST_UI_PROJECTION = arrayOf(ID, NAME, RECIPIENT_ID, ALLOWS_REPLIES, IS_UNKNOWN, PRIVACY_MODE, SEARCH_NAME) } private object MembershipTable { @@ -148,8 +150,8 @@ class DistributionListDatabase constructor(context: Context?, databaseHelper: Si val where = when { query.isNullOrEmpty() && includeMyStory -> ListTable.IS_NOT_DELETED query.isNullOrEmpty() -> "${ListTable.ID} != ? AND ${ListTable.IS_NOT_DELETED}" - includeMyStory -> "(${ListTable.NAME} GLOB ? OR ${ListTable.ID} == ?) AND ${ListTable.IS_NOT_DELETED} AND NOT ${ListTable.IS_UNKNOWN}" - else -> "${ListTable.NAME} GLOB ? AND ${ListTable.ID} != ? AND ${ListTable.IS_NOT_DELETED} AND NOT ${ListTable.IS_UNKNOWN}" + includeMyStory -> "(${ListTable.SEARCH_NAME_COLUMN} GLOB ? OR ${ListTable.ID} == ?) AND ${ListTable.IS_NOT_DELETED} AND NOT ${ListTable.IS_UNKNOWN}" + else -> "${ListTable.SEARCH_NAME_COLUMN} GLOB ? AND ${ListTable.ID} != ? AND ${ListTable.IS_NOT_DELETED} AND NOT ${ListTable.IS_UNKNOWN}" } val whereArgs = when { @@ -169,29 +171,6 @@ class DistributionListDatabase constructor(context: Context?, databaseHelper: Si .readToList { cursor -> RecipientId.from(cursor.requireLong(ListTable.RECIPIENT_ID)) } } - fun getCustomListsForUi(): List { - val db = readableDatabase - val selection = "${ListTable.ID} != ${DistributionListId.MY_STORY_ID} AND ${ListTable.IS_NOT_DELETED}" - - return db.query(ListTable.TABLE_NAME, ListTable.LIST_UI_PROJECTION, selection, null, null, null, null)?.use { cursor -> - val results = mutableListOf() - while (cursor.moveToNext()) { - results.add( - DistributionListPartialRecord( - id = DistributionListId.from(CursorUtil.requireLong(cursor, ListTable.ID)), - name = CursorUtil.requireString(cursor, ListTable.NAME), - allowsReplies = CursorUtil.requireBoolean(cursor, ListTable.ALLOWS_REPLIES), - recipientId = RecipientId.from(CursorUtil.requireLong(cursor, ListTable.RECIPIENT_ID)), - isUnknown = CursorUtil.requireBoolean(cursor, ListTable.IS_UNKNOWN), - privacyMode = cursor.requireObject(ListTable.PRIVACY_MODE, DistributionListPrivacyMode.Serializer) - ) - ) - } - - results - } ?: emptyList() - } - /** * Gets or creates a distribution list for the given id. * diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java index 48bb74436e..7db24f1c8c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java @@ -69,24 +69,25 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere private static final String TAG = Log.tag(GroupDatabase.class); - static final String TABLE_NAME = "groups"; - private static final String ID = "_id"; - static final String GROUP_ID = "group_id"; - public static final String RECIPIENT_ID = "recipient_id"; - private static final String TITLE = "title"; - static final String MEMBERS = "members"; - private static final String AVATAR_ID = "avatar_id"; - private static final String AVATAR_KEY = "avatar_key"; - private static final String AVATAR_CONTENT_TYPE = "avatar_content_type"; - private static final String AVATAR_RELAY = "avatar_relay"; - private static final String AVATAR_DIGEST = "avatar_digest"; - private static final String TIMESTAMP = "timestamp"; - static final String ACTIVE = "active"; - static final String MMS = "mms"; - private static final String EXPECTED_V2_ID = "expected_v2_id"; - private static final String UNMIGRATED_V1_MEMBERS = "former_v1_members"; - private static final String DISTRIBUTION_ID = "distribution_id"; - private static final String SHOW_AS_STORY_STATE = "display_as_story"; + static final String TABLE_NAME = "groups"; + private static final String ID = "_id"; + static final String GROUP_ID = "group_id"; + public static final String RECIPIENT_ID = "recipient_id"; + private static final String TITLE = "title"; + static final String MEMBERS = "members"; + private static final String AVATAR_ID = "avatar_id"; + private static final String AVATAR_KEY = "avatar_key"; + private static final String AVATAR_CONTENT_TYPE = "avatar_content_type"; + private static final String AVATAR_RELAY = "avatar_relay"; + private static final String AVATAR_DIGEST = "avatar_digest"; + private static final String TIMESTAMP = "timestamp"; + static final String ACTIVE = "active"; + static final String MMS = "mms"; + private static final String EXPECTED_V2_ID = "expected_v2_id"; + private static final String UNMIGRATED_V1_MEMBERS = "former_v1_members"; + private static final String DISTRIBUTION_ID = "distribution_id"; + private static final String SHOW_AS_STORY_STATE = "display_as_story"; + private static final String LAST_FORCE_UPDATE_TIMESTAMP = "last_force_update_timestamp"; /** Was temporarily used for PNP accept by pni but is no longer needed/updated */ @Deprecated @@ -101,27 +102,28 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere /** Serialized {@link DecryptedGroup} protobuf */ public static final String V2_DECRYPTED_GROUP = "decrypted_group"; - public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + ID + " INTEGER PRIMARY KEY, " + - GROUP_ID + " TEXT, " + - RECIPIENT_ID + " INTEGER, " + - TITLE + " TEXT, " + - MEMBERS + " TEXT, " + - AVATAR_ID + " INTEGER, " + - AVATAR_KEY + " BLOB, " + - AVATAR_CONTENT_TYPE + " TEXT, " + - AVATAR_RELAY + " TEXT, " + - TIMESTAMP + " INTEGER, " + - ACTIVE + " INTEGER DEFAULT 1, " + - AVATAR_DIGEST + " BLOB, " + - MMS + " INTEGER DEFAULT 0, " + - V2_MASTER_KEY + " BLOB, " + - V2_REVISION + " BLOB, " + - V2_DECRYPTED_GROUP + " BLOB, " + - EXPECTED_V2_ID + " TEXT DEFAULT NULL, " + - UNMIGRATED_V1_MEMBERS + " TEXT DEFAULT NULL, " + - DISTRIBUTION_ID + " TEXT DEFAULT NULL, " + - SHOW_AS_STORY_STATE + " INTEGER DEFAULT 0, " + - AUTH_SERVICE_ID + " TEXT DEFAULT NULL);"; + public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + ID + " INTEGER PRIMARY KEY, " + + GROUP_ID + " TEXT, " + + RECIPIENT_ID + " INTEGER, " + + TITLE + " TEXT, " + + MEMBERS + " TEXT, " + + AVATAR_ID + " INTEGER, " + + AVATAR_KEY + " BLOB, " + + AVATAR_CONTENT_TYPE + " TEXT, " + + AVATAR_RELAY + " TEXT, " + + TIMESTAMP + " INTEGER, " + + ACTIVE + " INTEGER DEFAULT 1, " + + AVATAR_DIGEST + " BLOB, " + + MMS + " INTEGER DEFAULT 0, " + + V2_MASTER_KEY + " BLOB, " + + V2_REVISION + " BLOB, " + + V2_DECRYPTED_GROUP + " BLOB, " + + EXPECTED_V2_ID + " TEXT DEFAULT NULL, " + + UNMIGRATED_V1_MEMBERS + " TEXT DEFAULT NULL, " + + DISTRIBUTION_ID + " TEXT DEFAULT NULL, " + + SHOW_AS_STORY_STATE + " INTEGER DEFAULT 0, " + + AUTH_SERVICE_ID + " TEXT DEFAULT NULL, " + + LAST_FORCE_UPDATE_TIMESTAMP + " INTEGER DEFAULT 0);"; public static final String[] CREATE_INDEXS = { "CREATE UNIQUE INDEX IF NOT EXISTS group_id_index ON " + TABLE_NAME + " (" + GROUP_ID + ");", @@ -132,7 +134,7 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere private static final String[] GROUP_PROJECTION = { GROUP_ID, RECIPIENT_ID, TITLE, MEMBERS, UNMIGRATED_V1_MEMBERS, AVATAR_ID, AVATAR_KEY, AVATAR_CONTENT_TYPE, AVATAR_RELAY, AVATAR_DIGEST, - TIMESTAMP, ACTIVE, MMS, V2_MASTER_KEY, V2_REVISION, V2_DECRYPTED_GROUP + TIMESTAMP, ACTIVE, MMS, V2_MASTER_KEY, V2_REVISION, V2_DECRYPTED_GROUP, LAST_FORCE_UPDATE_TIMESTAMP }; static final List TYPED_GROUP_PROJECTION = Stream.of(GROUP_PROJECTION).map(columnName -> TABLE_NAME + "." + columnName).toList(); @@ -934,6 +936,12 @@ public void setActive(@NonNull GroupId groupId, boolean active) { database.update(TABLE_NAME, values, GROUP_ID + " = ?", new String[] {groupId.toString()}); } + public void setLastForceUpdateTimestamp(@NonNull GroupId groupId, long timestamp) { + ContentValues values = new ContentValues(); + values.put(LAST_FORCE_UPDATE_TIMESTAMP, timestamp); + getWritableDatabase().update(TABLE_NAME, values, GROUP_ID + " = ?", SqlUtil.buildArgs(groupId)); + } + @WorkerThread public boolean isCurrentMember(@NonNull GroupId.Push groupId, @NonNull RecipientId recipientId) { SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); @@ -1093,7 +1101,8 @@ public int getCount() { CursorUtil.requireBlob(cursor, V2_MASTER_KEY), CursorUtil.requireInt(cursor, V2_REVISION), CursorUtil.requireBlob(cursor, V2_DECRYPTED_GROUP), - CursorUtil.getString(cursor, DISTRIBUTION_ID).map(DistributionId::from).orElse(null)); + CursorUtil.getString(cursor, DISTRIBUTION_ID).map(DistributionId::from).orElse(null), + CursorUtil.requireLong(cursor, LAST_FORCE_UPDATE_TIMESTAMP)); } @Override @@ -1134,6 +1143,7 @@ public static class GroupRecord { private final boolean mms; @Nullable private final V2GroupProperties v2GroupProperties; private final DistributionId distributionId; + private final long lastForceUpdateTimestamp; public GroupRecord(@NonNull GroupId id, @NonNull RecipientId recipientId, @@ -1150,19 +1160,21 @@ public GroupRecord(@NonNull GroupId id, @Nullable byte[] groupMasterKeyBytes, int groupRevision, @Nullable byte[] decryptedGroupBytes, - @Nullable DistributionId distributionId) + @Nullable DistributionId distributionId, + long lastForceUpdateTimestamp) { - this.id = id; - this.recipientId = recipientId; - this.title = title; - this.avatarId = avatarId; - this.avatarKey = avatarKey; - this.avatarDigest = avatarDigest; - this.avatarContentType = avatarContentType; - this.relay = relay; - this.active = active; - this.mms = mms; - this.distributionId = distributionId; + this.id = id; + this.recipientId = recipientId; + this.title = title; + this.avatarId = avatarId; + this.avatarKey = avatarKey; + this.avatarDigest = avatarDigest; + this.avatarContentType = avatarContentType; + this.relay = relay; + this.active = active; + this.mms = mms; + this.distributionId = distributionId; + this.lastForceUpdateTimestamp = lastForceUpdateTimestamp; V2GroupProperties v2GroupProperties = null; if (groupMasterKeyBytes != null && decryptedGroupBytes != null) { @@ -1271,6 +1283,10 @@ public boolean isMms() { return distributionId; } + public long getLastForceUpdateTimestamp() { + return lastForceUpdateTimestamp; + } + public boolean isV1Group() { return !mms && !isV2Group(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java index 7a4fd14633..21222545f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java @@ -63,6 +63,7 @@ public class MediaDatabase extends Database { + " FROM " + MmsDatabase.TABLE_NAME + " WHERE " + MmsDatabase.THREAD_ID + " __EQUALITY__ ?) AND (%s) AND " + MmsDatabase.VIEW_ONCE + " = 0 AND " + + MmsDatabase.STORY_TYPE + " = 0 AND " + AttachmentDatabase.DATA + " IS NOT NULL AND " + "(" + AttachmentDatabase.QUOTE + " = 0 OR (" + AttachmentDatabase.QUOTE + " = 1 AND " + AttachmentDatabase.DATA_HASH + " IS NULL)) AND " + AttachmentDatabase.STICKER_PACK_ID + " IS NULL AND " @@ -192,7 +193,7 @@ private MediaRecord(@Nullable DatabaseAttachment attachment, this.outgoing = outgoing; } - public static MediaRecord from(@NonNull Context context, @NonNull Cursor cursor) { + public static MediaRecord from(@NonNull Cursor cursor) { AttachmentDatabase attachmentDatabase = SignalDatabase.attachments(); List attachments = attachmentDatabase.getAttachments(cursor); RecipientId recipientId = RecipientId.from(cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.RECIPIENT_ID))); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java index e5e94405d0..75bc5dd3c1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -988,6 +988,17 @@ public int deleteStoriesOlderThan(long timestamp, boolean hasSeenReleaseChannelS } } + private void disassociateStoryQuotes(long storyId) { + ContentValues contentValues = new ContentValues(2); + contentValues.put(QUOTE_MISSING, 1); + contentValues.putNull(QUOTE_BODY); + + getWritableDatabase().update(TABLE_NAME, + contentValues, + PARENT_STORY_ID + " = ?", + SqlUtil.buildArgs(new ParentStoryId.DirectReply(storyId).serialize())); + } + @Override public boolean isGroupQuitMessage(long messageId) { SQLiteDatabase db = databaseHelper.getSignalReadableDatabase(); @@ -1379,6 +1390,7 @@ public void markAsRemoteDelete(long messageId) { SignalDatabase.messageLog().deleteAllRelatedToMessage(messageId, true); SignalDatabase.reactions().deleteReactions(new MessageId(messageId, true)); deleteGroupStoryReplies(messageId); + disassociateStoryQuotes(messageId); threadId = getThreadIdForMessage(messageId); SignalDatabase.threads().update(threadId, false); @@ -1874,7 +1886,18 @@ private Optional insertMessageInbox(IncomingMediaMessage retrieved return Optional.empty(); } - long messageId = insertMediaMessage(threadId, retrieved.getBody(), retrieved.getAttachments(), quoteAttachments, retrieved.getSharedContacts(), retrieved.getLinkPreviews(), retrieved.getMentions(), retrieved.getMessageRanges(), contentValues, null, true); + boolean updateThread = retrieved.getStoryType() == StoryType.NONE; + long messageId = insertMediaMessage(threadId, + retrieved.getBody(), + retrieved.getAttachments(), + quoteAttachments, + retrieved.getSharedContacts(), + retrieved.getLinkPreviews(), + retrieved.getMentions(), + retrieved.getMessageRanges(), + contentValues, + null, + updateThread); boolean isNotStoryGroupReply = retrieved.getParentStoryId() == null || !retrieved.getParentStoryId().isGroupReply(); if (!Types.isExpirationTimerUpdate(mailbox) && !retrieved.getStoryType().isStory() && isNotStoryGroupReply) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt index eaa4bc5f5d..2f985fe38a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt @@ -924,6 +924,21 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : ApplicationDependencies.getDatabaseObserver().notifyRecipientChanged(recipientId) } + fun markAllSystemContactsNeedsSync() { + writableDatabase.withinTransaction { db -> + db + .select(ID) + .from(TABLE_NAME) + .where("$SYSTEM_CONTACT_URI NOT NULL") + .run() + .use { cursor -> + while (cursor.moveToNext()) { + rotateStorageId(RecipientId.from(cursor.requireLong(ID))) + } + } + } + } + fun applyStorageIdUpdates(storageIds: Map) { val db = writableDatabase db.beginTransaction() @@ -3075,6 +3090,44 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : return readableDatabase.query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy) } + fun querySignalContactLetterHeaders(inputQuery: String, includeSelf: Boolean): Map { + val searchSelection = ContactSearchSelection.Builder() + .withRegistered(true) + .withGroups(false) + .excludeId(if (includeSelf) null else Recipient.self().id) + .withSearchQuery(inputQuery) + .build() + + return readableDatabase.query( + """ + SELECT + _id, + UPPER(SUBSTR($SORT_NAME, 0, 2)) AS letter_header + FROM ( + SELECT ${SEARCH_PROJECTION.joinToString(", ")} + FROM recipient + WHERE ${searchSelection.where} + ORDER BY $SORT_NAME, $SYSTEM_JOINED_NAME, $SEARCH_PROFILE_NAME, $PHONE + ) + GROUP BY letter_header + """.trimIndent(), + searchSelection.args + ).use { cursor -> + if (cursor.count == 0) { + emptyMap() + } else { + val resultsMap = mutableMapOf() + while (cursor.moveToNext()) { + cursor.requireString("letter_header")?.let { + resultsMap[RecipientId.from(cursor.requireLong(ID))] = it + } + } + + resultsMap + } + } + } + fun getNonSignalContacts(): Cursor? { val searchSelection = ContactSearchSelection.Builder().withNonRegistered(true) .withGroups(false) @@ -3394,6 +3447,21 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : updateExtras(recipientId) { b: RecipientExtras.Builder -> b.setManuallyShownAvatar(true) } } + fun getCapabilities(id: RecipientId): RecipientRecord.Capabilities? { + readableDatabase + .select(CAPABILITIES) + .from(TABLE_NAME) + .where("$ID = ?", id) + .run() + .use { cursor -> + return if (cursor.moveToFirst()) { + readCapabilities(cursor) + } else { + null + } + } + } + private fun updateExtras(recipientId: RecipientId, updater: java.util.function.Function) { val db = writableDatabase db.beginTransaction() @@ -3589,7 +3657,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : SYSTEM_PHONE_LABEL to secondaryRecord.systemPhoneLabel, SYSTEM_CONTACT_URI to secondaryRecord.systemContactUri, PROFILE_SHARING to (primaryRecord.profileSharing || secondaryRecord.profileSharing), - CAPABILITIES to max(primaryRecord.rawCapabilities, secondaryRecord.rawCapabilities), + CAPABILITIES to max(primaryRecord.capabilities.rawBits, secondaryRecord.capabilities.rawBits), MENTION_SETTING to if (primaryRecord.mentionSetting != MentionSetting.ALWAYS_NOTIFY) primaryRecord.mentionSetting.id else secondaryRecord.mentionSetting.id ) @@ -3645,8 +3713,9 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : private fun getValuesForStorageContact(contact: SignalContactRecord, isInsert: Boolean): ContentValues { return ContentValues().apply { - val profileName = ProfileName.fromParts(contact.givenName.orElse(null), contact.familyName.orElse(null)) - val username: String? = contact.username.orElse(null) + val profileName = ProfileName.fromParts(contact.profileGivenName.orElse(null), contact.profileFamilyName.orElse(null)) + val systemName = ProfileName.fromParts(contact.systemGivenName.orElse(null), contact.systemFamilyName.orElse(null)) + val username = contact.username.orElse(null) if (contact.serviceId.isValid) { put(SERVICE_ID, contact.serviceId.toString()) @@ -3660,6 +3729,9 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : put(PROFILE_GIVEN_NAME, profileName.givenName) put(PROFILE_FAMILY_NAME, profileName.familyName) put(PROFILE_JOINED_NAME, profileName.toString()) + put(SYSTEM_GIVEN_NAME, systemName.givenName) + put(SYSTEM_FAMILY_NAME, systemName.familyName) + put(SYSTEM_JOINED_NAME, systemName.toString()) put(PROFILE_KEY, contact.profileKey.map { source -> Base64.encodeBytes(source) }.orElse(null)) put(USERNAME, if (TextUtils.isEmpty(username)) null else username) put(PROFILE_SHARING, if (contact.isProfileSharingEnabled) "1" else "0") @@ -3860,7 +3932,6 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : } val recipientId = RecipientId.from(cursor.requireLong(idColumnName)) - val capabilities = cursor.requireLong(CAPABILITIES) val distributionListId: DistributionListId? = DistributionListId.fromNullable(cursor.requireLong(DISTRIBUTION_LIST_ID)) val avatarColor: AvatarColor = if (distributionListId != null) AvatarColor.UNKNOWN else AvatarColor.deserialize(cursor.requireString(AVATAR_COLOR)) @@ -3898,14 +3969,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : notificationChannel = cursor.requireString(NOTIFICATION_CHANNEL), unidentifiedAccessMode = UnidentifiedAccessMode.fromMode(cursor.requireInt(UNIDENTIFIED_ACCESS_MODE)), forceSmsSelection = cursor.requireBoolean(FORCE_SMS_SELECTION), - rawCapabilities = capabilities, - groupsV1MigrationCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.GROUPS_V1_MIGRATION, Capabilities.BIT_LENGTH).toInt()), - senderKeyCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.SENDER_KEY, Capabilities.BIT_LENGTH).toInt()), - announcementGroupCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.ANNOUNCEMENT_GROUPS, Capabilities.BIT_LENGTH).toInt()), - changeNumberCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.CHANGE_NUMBER, Capabilities.BIT_LENGTH).toInt()), - storiesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.STORIES, Capabilities.BIT_LENGTH).toInt()), - giftBadgesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.GIFT_BADGES, Capabilities.BIT_LENGTH).toInt()), - pnpCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.PNP, Capabilities.BIT_LENGTH).toInt()), + capabilities = readCapabilities(cursor), insightsBannerTier = InsightsBannerTier.fromId(cursor.requireInt(SEEN_INVITE_REMINDER)), storageId = Base64.decodeNullableOrThrow(cursor.requireString(STORAGE_SERVICE_ID)), mentionSetting = MentionSetting.fromId(cursor.requireInt(MENTION_SETTING)), @@ -3923,6 +3987,20 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : ) } + private fun readCapabilities(cursor: Cursor): RecipientRecord.Capabilities { + val capabilities = cursor.requireLong(CAPABILITIES) + return RecipientRecord.Capabilities( + rawBits = capabilities, + groupsV1MigrationCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.GROUPS_V1_MIGRATION, Capabilities.BIT_LENGTH).toInt()), + senderKeyCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.SENDER_KEY, Capabilities.BIT_LENGTH).toInt()), + announcementGroupCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.ANNOUNCEMENT_GROUPS, Capabilities.BIT_LENGTH).toInt()), + changeNumberCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.CHANGE_NUMBER, Capabilities.BIT_LENGTH).toInt()), + storiesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.STORIES, Capabilities.BIT_LENGTH).toInt()), + giftBadgesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.GIFT_BADGES, Capabilities.BIT_LENGTH).toInt()), + pnpCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.PNP, Capabilities.BIT_LENGTH).toInt()), + ) + } + private fun parseBadgeList(serializedBadgeList: ByteArray?): List { var badgeList: BadgeList? = null if (serializedBadgeList != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt index 13ba5b9905..960f1b52d0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt @@ -12,13 +12,14 @@ import org.thoughtcrime.securesms.database.helpers.migration.V154_PniSignaturesM import org.thoughtcrime.securesms.database.helpers.migration.V155_SmsExporterMigration import org.thoughtcrime.securesms.database.helpers.migration.V156_RecipientUnregisteredTimestampMigration import org.thoughtcrime.securesms.database.helpers.migration.V157_RecipeintHiddenMigration +import org.thoughtcrime.securesms.database.helpers.migration.V158_GroupsLastForceUpdateTimestampMigration /** * Contains all of the database migrations for [SignalDatabase]. Broken into a separate file for cleanliness. */ object SignalDatabaseMigrations { - const val DATABASE_VERSION = 157 + const val DATABASE_VERSION = 158 @JvmStatic fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { @@ -57,6 +58,10 @@ object SignalDatabaseMigrations { if (oldVersion < 157) { V157_RecipeintHiddenMigration.migrate(context, db, oldVersion, newVersion) } + + if (oldVersion < 158) { + V158_GroupsLastForceUpdateTimestampMigration.migrate(context, db, oldVersion, newVersion) + } } @JvmStatic diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V158_GroupsLastForceUpdateTimestampMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V158_GroupsLastForceUpdateTimestampMigration.kt new file mode 100644 index 0000000000..8cac5cf3ea --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V158_GroupsLastForceUpdateTimestampMigration.kt @@ -0,0 +1,13 @@ +package org.thoughtcrime.securesms.database.helpers.migration + +import android.app.Application +import net.zetetic.database.sqlcipher.SQLiteDatabase + +/** + * Track last time we did a forced sanity check for this group with the server. + */ +object V158_GroupsLastForceUpdateTimestampMigration : SignalDatabaseMigration { + override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { + db.execSQL("ALTER TABLE groups ADD COLUMN last_force_update_timestamp INTEGER DEFAULT 0") + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java index 26da50d088..8b2169ea81 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java @@ -75,7 +75,7 @@ public GroupedThreadMedia loadInBackground() { try (Cursor cursor = ThreadMediaLoader.createThreadMediaCursor(context, threadId, mediaType, sorting)) { while (cursor != null && cursor.moveToNext()) { - mediaGrouping.add(MediaDatabase.MediaRecord.from(context, cursor)); + mediaGrouping.add(MediaDatabase.MediaRecord.from(cursor)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/Quote.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/Quote.java index 795af6af5a..de84d5ee89 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/Quote.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/Quote.java @@ -9,6 +9,7 @@ import org.thoughtcrime.securesms.mms.QuoteModel; import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.recipients.RecipientId; +import org.thoughtcrime.securesms.util.Util; import java.util.List; @@ -37,7 +38,7 @@ public Quote(long id, this.mentions = mentions; this.quoteType = quoteType; - SpannableString spannable = new SpannableString(text); + SpannableString spannable = new SpannableString(Util.emptyIfNull(text)); MentionAnnotation.setMentionAnnotations(spannable, mentions); this.text = spannable; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt index 80a23c8497..118909df9f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt @@ -63,14 +63,7 @@ data class RecipientRecord( val unidentifiedAccessMode: UnidentifiedAccessMode, @get:JvmName("isForceSmsSelection") val forceSmsSelection: Boolean, - val rawCapabilities: Long, - val groupsV1MigrationCapability: Recipient.Capability, - val senderKeyCapability: Recipient.Capability, - val announcementGroupCapability: Recipient.Capability, - val changeNumberCapability: Recipient.Capability, - val storiesCapability: Recipient.Capability, - val giftBadgesCapability: Recipient.Capability, - val pnpCapability: Recipient.Capability, + val capabilities: Capabilities, val insightsBannerTier: InsightsBannerTier, val storageId: ByteArray?, val mentionSetting: MentionSetting, @@ -122,4 +115,29 @@ data class RecipientRecord( val isForcedUnread: Boolean, val unregisteredTimestamp: Long ) + + data class Capabilities( + val rawBits: Long, + val groupsV1MigrationCapability: Recipient.Capability, + val senderKeyCapability: Recipient.Capability, + val announcementGroupCapability: Recipient.Capability, + val changeNumberCapability: Recipient.Capability, + val storiesCapability: Recipient.Capability, + val giftBadgesCapability: Recipient.Capability, + val pnpCapability: Recipient.Capability, + ) { + companion object { + @JvmField + val UNKNOWN = Capabilities( + 0, + Recipient.Capability.UNKNOWN, + Recipient.Capability.UNKNOWN, + Recipient.Capability.UNKNOWN, + Recipient.Capability.UNKNOWN, + Recipient.Capability.UNKNOWN, + Recipient.Capability.UNKNOWN, + Recipient.Capability.UNKNOWN + ) + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java index c1b5a79f87..45278cf467 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java @@ -271,7 +271,7 @@ public static void closeConnections() { } } - public static void restartNetworkConnectionsAfterProxyChange() { + public static void restartAllNetworkConnections() { synchronized (LOCK) { closeConnections(); if (signalWebSocket != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java index cccf2c093f..91dc3222fa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -63,6 +63,7 @@ import org.thoughtcrime.securesms.service.PendingRetryReceiptManager; import org.thoughtcrime.securesms.service.TrimThreadsByDateManager; import org.thoughtcrime.securesms.service.webrtc.SignalCallManager; +import org.thoughtcrime.securesms.stories.Stories; import org.thoughtcrime.securesms.util.AlarmSleepTimer; import org.thoughtcrime.securesms.util.AppForegroundObserver; import org.thoughtcrime.securesms.util.ByteUnit; @@ -283,7 +284,7 @@ public ApplicationDependencyProvider(@NonNull Application context) { @Override public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier signalServiceConfigurationSupplier) { - SleepTimer sleepTimer = SignalStore.account().isFcmEnabled() ? new UptimeSleepTimer() : new AlarmSleepTimer(context); + SleepTimer sleepTimer = !SignalStore.account().isFcmEnabled() || SignalStore.internalValues().isWebsocketModeForced() ? new AlarmSleepTimer(context) : new UptimeSleepTimer() ; SignalWebSocketHealthMonitor healthMonitor = new SignalWebSocketHealthMonitor(context, sleepTimer); SignalWebSocket signalWebSocket = new SignalWebSocket(provideWebSocketFactory(signalServiceConfigurationSupplier, healthMonitor)); @@ -398,7 +399,8 @@ public WebSocketConnection createWebSocket() { signalServiceConfigurationSupplier.get(), Optional.of(new DynamicCredentialsProvider()), BuildConfig.SIGNAL_AGENT, - healthMonitor); + healthMonitor, + Stories.isFeatureEnabled()); } @Override @@ -407,7 +409,8 @@ public WebSocketConnection createUnidentifiedWebSocket() { signalServiceConfigurationSupplier.get(), Optional.empty(), BuildConfig.SIGNAL_AGENT, - healthMonitor); + healthMonitor, + Stories.isFeatureEnabled()); } }; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchManager.kt b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchManager.kt index 3d58e4fbde..fa039b60c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchManager.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchManager.kt @@ -83,7 +83,12 @@ object FcmFetchManager { context.stopService(Intent(context, FcmFetchBackgroundService::class.java)) if (startedForeground) { - context.startService(FcmFetchForegroundService.buildStopIntent(context)) + try { + context.startService(FcmFetchForegroundService.buildStopIntent(context)) + } catch (e: IllegalStateException) { + Log.w(TAG, "Failed to stop the foreground notification!", e) + } + startedForeground = false } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupId.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupId.java index d269665e93..3d4320e090 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupId.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupId.java @@ -3,6 +3,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import org.signal.core.util.DatabaseId; import org.signal.core.util.Hex; import org.signal.libsignal.protocol.kdf.HKDFv3; import org.signal.libsignal.zkgroup.InvalidInputException; @@ -14,7 +15,7 @@ import java.io.IOException; import java.security.SecureRandom; -public abstract class GroupId { +public abstract class GroupId implements DatabaseId { private static final String ENCODED_SIGNAL_GROUP_V1_PREFIX = "__textsecure_group__!"; private static final String ENCODED_SIGNAL_GROUP_V2_PREFIX = "__signal_group__v2__!"; @@ -173,6 +174,11 @@ public int hashCode() { return encodedId; } + @Override + public @NonNull String serialize() { + return encodedId; + } + public abstract boolean isMms(); public abstract boolean isV1(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java index 6bf940b857..f24dd70fb4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java @@ -188,6 +188,17 @@ public static void updateGroupFromServer(@NonNull Context context, } } + @WorkerThread + public static void forceSanityUpdateFromServer(@NonNull Context context, + @NonNull GroupMasterKey groupMasterKey, + long timestamp) + throws GroupChangeBusyException, IOException, GroupNotAMemberException + { + try (GroupManagerV2.GroupUpdater updater = new GroupManagerV2(context).updater(groupMasterKey)) { + updater.forceSanityUpdateFromServer(timestamp); + } + } + @WorkerThread public static V2GroupServerStatus v2GroupStatus(@NonNull Context context, @NonNull ServiceId authServiceId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java index d63949ed00..ff895cb31a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java @@ -798,6 +798,14 @@ void updateLocalToServerRevision(int revision, long timestamp, @Nullable byte[] .updateLocalGroupToRevision(revision, timestamp, getDecryptedGroupChange(signedGroupChange)); } + @WorkerThread + void forceSanityUpdateFromServer(long timestamp) + throws IOException, GroupNotAMemberException + { + new GroupsV2StateProcessor(context).forGroup(serviceIds, groupMasterKey) + .forceSanityUpdateFromServer(timestamp); + } + private DecryptedGroupChange getDecryptedGroupChange(@Nullable byte[] signedGroupChange) { if (signedGroupChange != null) { GroupsV2Operations.GroupOperations groupOperations = groupsV2Operations.forGroup(GroupSecretParams.deriveFromMasterKey(groupMasterKey)); @@ -928,24 +936,6 @@ public GroupManager.GroupActionResult joinGroup(@NonNull DecryptedGroupJoinInfo if (group.isPresent()) { Log.i(TAG, "Group already present locally"); - - DecryptedGroup currentGroupState = group.get() - .requireV2GroupProperties() - .getDecryptedGroup(); - - DecryptedGroup updatedGroup = currentGroupState; - - try { - if (decryptedChange != null) { - updatedGroup = DecryptedGroupUtil.applyWithoutRevisionCheck(updatedGroup, decryptedChange); - } - updatedGroup = resetRevision(updatedGroup, currentGroupState.getRevision()); - } catch (NotAbleToApplyGroupV2ChangeException e) { - Log.w(TAG, e); - updatedGroup = decryptedGroup; - } - - groupDatabase.update(groupId, updatedGroup); } else { groupDatabase.create(groupMasterKey, decryptedGroup); Log.i(TAG, "Created local group with placeholder"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV1MigrationUtil.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV1MigrationUtil.java index e45b76c68e..f6c8fb0c96 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV1MigrationUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV1MigrationUtil.java @@ -88,7 +88,7 @@ public static void migrate(@NonNull Context context, @NonNull RecipientId recipi registeredMembers = Stream.of(registeredMembers).map(Recipient::fresh).toList(); } - List possibleMembers = forced ? getMigratableManualMigrationMembers(registeredMembers) + List possibleMembers = forced ? registeredMembers : getMigratableAutoMigrationMembers(registeredMembers); if (!forced && !groupRecipient.hasName()) { @@ -200,17 +200,8 @@ private static void handleLeftBehind(@NonNull GroupId.V1 gv1Id) { * to consider them migratable in an auto-migration. */ private static @NonNull List getMigratableAutoMigrationMembers(@NonNull List registeredMembers) { - return Stream.of(getMigratableManualMigrationMembers(registeredMembers)) - .filter(r -> r.getProfileKey() != null) - .toList(); - } - - /** - * You can only migrate users that have the required capabilities. - */ - private static @NonNull List getMigratableManualMigrationMembers(@NonNull List registeredMembers) { return Stream.of(registeredMembers) - .filter(r -> r.getGroupsV1MigrationCapability() == Recipient.Capability.SUPPORTED) + .filter(r -> r.getProfileKey() != null) .toList(); } @@ -219,7 +210,6 @@ private static void handleLeftBehind(@NonNull GroupId.V1 gv1Id) { */ public static boolean isAutoMigratable(@NonNull Recipient recipient) { return recipient.hasServiceId() && - recipient.getGroupsV1MigrationCapability() == Recipient.Capability.SUPPORTED && recipient.getRegistered() == RecipientDatabase.RegisteredState.REGISTERED && recipient.getProfileKey() != null; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationRepository.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationRepository.java index 9f827a1199..e813f9270f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationRepository.java @@ -68,19 +68,7 @@ private MigrationState getMigrationState(@NonNull RecipientId groupRecipientId) return new MigrationState(Collections.emptyList(), Collections.emptyList()); } - List members = Recipient.resolvedList(group.getParticipantIds()); - Set needsRefresh = Stream.of(members) - .filter(r -> r.getGroupsV1MigrationCapability() != Recipient.Capability.SUPPORTED) - .map(Recipient::getId) - .collect(Collectors.toSet()); - - List jobs = RetrieveProfileJob.forRecipients(needsRefresh); - - for (Job job : jobs) { - if (!ApplicationDependencies.getJobManager().runSynchronously(job, TimeUnit.SECONDS.toMillis(3)).isPresent()) { - Log.w(TAG, "Failed to refresh capabilities in time!"); - } - } + List members = Recipient.resolvedList(group.getParticipantIds()); try { List registered = Stream.of(members) @@ -95,9 +83,7 @@ private MigrationState getMigrationState(@NonNull RecipientId groupRecipientId) group = group.fresh(); List ineligible = Stream.of(members) - .filter(r -> !r.hasServiceId() || - r.getGroupsV1MigrationCapability() != Recipient.Capability.SUPPORTED || - r.getRegistered() != RecipientDatabase.RegisteredState.REGISTERED) + .filter(r -> !r.hasServiceId() || r.getRegistered() != RecipientDatabase.RegisteredState.REGISTERED) .toList(); List invites = Stream.of(members) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java index 156755bdab..c33164ae16 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java @@ -48,6 +48,7 @@ import org.thoughtcrime.securesms.sms.IncomingTextMessage; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupHistoryEntry; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; +import org.whispersystems.signalservice.api.groupsv2.GroupChangeReconstruct; import org.whispersystems.signalservice.api.groupsv2.GroupHistoryPage; import org.whispersystems.signalservice.api.groupsv2.GroupsV2Api; import org.whispersystems.signalservice.api.groupsv2.InvalidGroupStateException; @@ -170,6 +171,52 @@ public static final class StateProcessorForGroup { this.profileAndMessageHelper = profileAndMessageHelper; } + @WorkerThread + public GroupUpdateResult forceSanityUpdateFromServer(long timestamp) + throws IOException, GroupNotAMemberException + { + Optional localRecord = groupDatabase.getGroup(groupId); + DecryptedGroup localState = localRecord.map(g -> g.requireV2GroupProperties().getDecryptedGroup()).orElse(null); + DecryptedGroup serverState; + + if (localState == null) { + info("No local state to force update"); + return new GroupUpdateResult(GroupState.GROUP_CONSISTENT_OR_AHEAD, null); + } + + try { + serverState = groupsV2Api.getGroup(groupSecretParams, groupsV2Authorization.getAuthorizationForToday(serviceIds, groupSecretParams)); + } catch (NotInGroupException | GroupNotFoundException e) { + throw new GroupNotAMemberException(e); + } catch (VerificationFailedException | InvalidGroupStateException e) { + throw new IOException(e); + } + + DecryptedGroupChange decryptedGroupChange = GroupChangeReconstruct.reconstructGroupChange(localState, serverState); + GlobalGroupState inputGroupState = new GlobalGroupState(localState, Collections.singletonList(new ServerGroupLogEntry(serverState, decryptedGroupChange))); + AdvanceGroupStateResult advanceGroupStateResult = GroupStateMapper.partiallyAdvanceGroupState(inputGroupState, serverState.getRevision()); + DecryptedGroup newLocalState = advanceGroupStateResult.getNewGlobalGroupState().getLocalState(); + + if (newLocalState == null || newLocalState == inputGroupState.getLocalState()) { + info("Local state and server state are equal"); + return new GroupUpdateResult(GroupState.GROUP_CONSISTENT_OR_AHEAD, null); + } else { + info("Local state (revision: " + localState.getRevision() + ") does not match server state (revision: " + serverState.getRevision() + "), updating"); + } + + updateLocalDatabaseGroupState(inputGroupState, newLocalState); + if (localState.getRevision() == GroupsV2StateProcessor.RESTORE_PLACEHOLDER_REVISION) { + info("Inserting single update message for restore placeholder"); + profileAndMessageHelper.insertUpdateMessages(timestamp, null, Collections.singleton(new LocalGroupLogEntry(newLocalState, null))); + } else { + info("Inserting force update messages"); + profileAndMessageHelper.insertUpdateMessages(timestamp, localState, advanceGroupStateResult.getProcessedLogEntries()); + } + profileAndMessageHelper.persistLearnedProfileKeys(inputGroupState); + + return new GroupUpdateResult(GroupState.GROUP_UPDATED, newLocalState); + } + /** * Using network where required, will attempt to bring the local copy of the group up to the revision specified. * @@ -560,10 +607,12 @@ static class ProfileAndMessageHelper { private final Context context; private final ServiceId serviceId; - private final GroupMasterKey masterKey; private final GroupId.V2 groupId; private final RecipientDatabase recipientDatabase; + @VisibleForTesting + GroupMasterKey masterKey; + ProfileAndMessageHelper(@NonNull Context context, @NonNull ServiceId serviceId, @NonNull GroupMasterKey masterKey, @NonNull GroupId.V2 groupId, @NonNull RecipientDatabase recipientDatabase) { this.context = context; this.serviceId = serviceId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt index 90263cc145..eef5f39fd8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt @@ -7,6 +7,7 @@ import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.stories.Stories import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState import org.whispersystems.signalservice.internal.util.StaticCredentialsProvider import org.whispersystems.signalservice.internal.websocket.WebSocketConnection @@ -78,7 +79,8 @@ class CheckServiceReachabilityJob private constructor(params: Parameters) : Base ), BuildConfig.SIGNAL_AGENT, null, - "" + "", + Stories.isFeatureEnabled() ) try { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java new file mode 100644 index 0000000000..0b427c4ee3 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java @@ -0,0 +1,86 @@ +package org.thoughtcrime.securesms.jobs; + +import androidx.annotation.NonNull; + +import org.signal.core.util.concurrent.SignalExecutors; +import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.SignalDatabase; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; +import org.thoughtcrime.securesms.groups.GroupId; +import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.Job; +import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint; + +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +/** + * Schedules a {@link ForceUpdateGroupV2WorkerJob} to happen after message queues are drained. + */ +public final class ForceUpdateGroupV2Job extends BaseJob { + + public static final String KEY = "ForceUpdateGroupV2Job"; + + private static final long FORCE_UPDATE_INTERVAL = TimeUnit.DAYS.toMillis(7); + private static final String KEY_GROUP_ID = "group_id"; + + private final GroupId.V2 groupId; + + public static void enqueueIfNecessary(@NonNull GroupId.V2 groupId) { + SignalExecutors.BOUNDED.execute(() -> { + Optional group = SignalDatabase.groups().getGroup(groupId); + if (group.isPresent() && + group.get().isV2Group() && + group.get().getLastForceUpdateTimestamp() + FORCE_UPDATE_INTERVAL < System.currentTimeMillis() + ) { + ApplicationDependencies.getJobManager().add(new ForceUpdateGroupV2Job(groupId)); + } + }); + } + + private ForceUpdateGroupV2Job(@NonNull GroupId.V2 groupId) { + this(new Parameters.Builder().setQueue("ForceUpdateGroupV2Job_" + groupId) + .setMaxInstancesForQueue(1) + .addConstraint(DecryptionsDrainedConstraint.KEY) + .setMaxAttempts(Parameters.UNLIMITED) + .build(), + groupId); + } + + private ForceUpdateGroupV2Job(@NonNull Parameters parameters, @NonNull GroupId.V2 groupId) { + super(parameters); + this.groupId = groupId; + } + + @Override + public @NonNull Data serialize() { + return new Data.Builder().putString(KEY_GROUP_ID, groupId.toString()).build(); + } + + @Override + public @NonNull String getFactoryKey() { + return KEY; + } + + @Override + public void onRun() { + ApplicationDependencies.getJobManager().add(new ForceUpdateGroupV2WorkerJob(groupId)); + } + + @Override + public boolean onShouldRetry(@NonNull Exception e) { + return false; + } + + @Override + public void onFailure() { + } + + public static final class Factory implements Job.Factory { + + @Override + public @NonNull ForceUpdateGroupV2Job create(@NonNull Parameters parameters, @NonNull Data data) { + return new ForceUpdateGroupV2Job(parameters, GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV2()); + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java new file mode 100644 index 0000000000..b84e5c291c --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java @@ -0,0 +1,103 @@ +package org.thoughtcrime.securesms.jobs; + +import androidx.annotation.NonNull; +import androidx.annotation.WorkerThread; + +import org.signal.core.util.logging.Log; +import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.SignalDatabase; +import org.thoughtcrime.securesms.groups.GroupChangeBusyException; +import org.thoughtcrime.securesms.groups.GroupId; +import org.thoughtcrime.securesms.groups.GroupManager; +import org.thoughtcrime.securesms.groups.GroupNotAMemberException; +import org.thoughtcrime.securesms.groups.v2.processing.GroupsV2StateProcessor; +import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.Job; +import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; +import org.thoughtcrime.securesms.recipients.Recipient; +import org.whispersystems.signalservice.api.groupsv2.NoCredentialForRedemptionTimeException; +import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; + +import java.io.IOException; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +/** + * Scheduled by {@link ForceUpdateGroupV2Job} after message queues are drained. + * + * Forces a sanity check between local state and server state, and updates local state + * as necessary. + */ +final class ForceUpdateGroupV2WorkerJob extends BaseJob { + + public static final String KEY = "ForceUpdateGroupV2WorkerJob"; + + private static final String TAG = Log.tag(ForceUpdateGroupV2WorkerJob.class); + + private static final String KEY_GROUP_ID = "group_id"; + + private final GroupId.V2 groupId; + + ForceUpdateGroupV2WorkerJob(@NonNull GroupId.V2 groupId) { + this(new Parameters.Builder().setQueue(PushProcessMessageJob.getQueueName(Recipient.externalGroupExact(groupId).getId())) + .addConstraint(NetworkConstraint.KEY) + .setMaxAttempts(Parameters.UNLIMITED) + .build(), + groupId); + } + + private ForceUpdateGroupV2WorkerJob(@NonNull Parameters parameters, @NonNull GroupId.V2 groupId) { + super(parameters); + this.groupId = groupId; + } + + @Override + public @NonNull Data serialize() { + return new Data.Builder().putString(KEY_GROUP_ID, groupId.toString()) + .build(); + } + + @Override + public @NonNull String getFactoryKey() { + return KEY; + } + + @Override + public void onRun() throws IOException, GroupNotAMemberException, GroupChangeBusyException { + Optional group = SignalDatabase.groups().getGroup(groupId); + + if (!group.isPresent()) { + Log.w(TAG, "Group not found"); + return; + } + + if (Recipient.externalGroupExact(groupId).isBlocked()) { + Log.i(TAG, "Not fetching group info for blocked group " + groupId); + return; + } + + GroupManager.forceSanityUpdateFromServer(context, group.get().requireV2GroupProperties().getGroupMasterKey(), System.currentTimeMillis()); + + SignalDatabase.groups().setLastForceUpdateTimestamp(group.get().getId(), System.currentTimeMillis()); + } + + @Override + public boolean onShouldRetry(@NonNull Exception e) { + return e instanceof PushNetworkException || + e instanceof NoCredentialForRedemptionTimeException || + e instanceof GroupChangeBusyException; + } + + @Override + public void onFailure() { + } + + public static final class Factory implements Job.Factory { + + @Override + public @NonNull ForceUpdateGroupV2WorkerJob create(@NonNull Parameters parameters, @NonNull Data data) { + return new ForceUpdateGroupV2WorkerJob(parameters, + GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV2()); + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV1MigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV1MigrationJob.java index 2f37c995a8..36e423e441 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV1MigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV1MigrationJob.java @@ -66,49 +66,6 @@ public static void enqueuePossibleAutoMigrate(@NonNull RecipientId recipientId) }); } - public static void enqueueRoutineMigrationsIfNecessary(@NonNull Application application) { - if (!SignalStore.registrationValues().isRegistrationComplete() || - !SignalStore.account().isRegistered() || - SignalStore.account().getAci() == null) - { - Log.i(TAG, "Registration not complete. Skipping."); - return; - } - - long timeSinceRefresh = System.currentTimeMillis() - SignalStore.misc().getLastGv1RoutineMigrationTime(); - - if (timeSinceRefresh < REFRESH_INTERVAL) { - Log.i(TAG, "Too soon to refresh. Did the last refresh " + timeSinceRefresh + " ms ago."); - return; - } - - SignalStore.misc().setLastGv1RoutineMigrationTime(System.currentTimeMillis()); - - SignalExecutors.BOUNDED.execute(() -> { - JobManager jobManager = ApplicationDependencies.getJobManager(); - List threads = SignalDatabase.threads().getRecentV1Groups(ROUTINE_LIMIT); - Set needsRefresh = new HashSet<>(); - - if (threads.size() > 0) { - Log.d(TAG, "About to enqueue refreshes for " + threads.size() + " groups."); - } - - for (ThreadRecord thread : threads) { - jobManager.add(new GroupV1MigrationJob(thread.getRecipient().getId())); - - needsRefresh.addAll(Stream.of(Recipient.resolvedList(thread.getRecipient().getParticipantIds())) - .filter(r -> r.getGroupsV1MigrationCapability() != Recipient.Capability.SUPPORTED) - .map(Recipient::getId) - .toList()); - } - - if (needsRefresh.size() > 0) { - Log.w(TAG, "Enqueuing profile refreshes for " + needsRefresh.size() + " GV1 participants."); - RetrieveProfileJob.enqueue(needsRefresh); - } - }); - } - @Override public @NonNull Data serialize() { return new Data.Builder().putString(KEY_RECIPIENT_ID, recipientId.serialize()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java index a19079649f..7942ad7689 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -59,6 +59,7 @@ import org.thoughtcrime.securesms.migrations.StickerMyDailyLifeMigrationJob; import org.thoughtcrime.securesms.migrations.StorageCapabilityMigrationJob; import org.thoughtcrime.securesms.migrations.StorageServiceMigrationJob; +import org.thoughtcrime.securesms.migrations.StorageServiceSystemNameMigrationJob; import org.thoughtcrime.securesms.migrations.SyncDistributionListsMigrationJob; import org.thoughtcrime.securesms.migrations.TrimByLengthSettingsMigrationJob; import org.thoughtcrime.securesms.migrations.UserNotificationMigrationJob; @@ -94,6 +95,8 @@ public static Map getJobFactories(@NonNull Application appl put(FcmRefreshJob.KEY, new FcmRefreshJob.Factory()); put(FetchRemoteMegaphoneImageJob.KEY, new FetchRemoteMegaphoneImageJob.Factory()); put(FontDownloaderJob.KEY, new FontDownloaderJob.Factory()); + put(ForceUpdateGroupV2Job.KEY, new ForceUpdateGroupV2Job.Factory()); + put(ForceUpdateGroupV2WorkerJob.KEY, new ForceUpdateGroupV2WorkerJob.Factory()); put(GiftSendJob.KEY, new FailingJob.Factory()); put(GroupV1MigrationJob.KEY, new GroupV1MigrationJob.Factory()); put(GroupCallUpdateSendJob.KEY, new GroupCallUpdateSendJob.Factory()); @@ -133,7 +136,7 @@ public static Map getJobFactories(@NonNull Application appl put(PaymentNotificationSendJob.KEY, new PaymentNotificationSendJob.Factory()); put(PaymentSendJob.KEY, new PaymentSendJob.Factory()); put(PaymentTransactionCheckJob.KEY, new PaymentTransactionCheckJob.Factory()); - put(PnpInitializeDevicesJob.KEY, new PnpInitializeDevicesJob.Factory()); + put(PnpInitializeDevicesJob.KEY, new PnpInitializeDevicesJob.Factory()); put(PreKeysSyncJob.KEY, new PreKeysSyncJob.Factory()); put(ProfileKeySendJob.KEY, new ProfileKeySendJob.Factory()); put(ProfileUploadJob.KEY, new ProfileUploadJob.Factory()); @@ -219,6 +222,7 @@ public static Map getJobFactories(@NonNull Application appl put(StickerMyDailyLifeMigrationJob.KEY, new StickerMyDailyLifeMigrationJob.Factory()); put(StorageCapabilityMigrationJob.KEY, new StorageCapabilityMigrationJob.Factory()); put(StorageServiceMigrationJob.KEY, new StorageServiceMigrationJob.Factory()); + put(StorageServiceSystemNameMigrationJob.KEY, new StorageServiceSystemNameMigrationJob.Factory()); put(TrimByLengthSettingsMigrationJob.KEY, new TrimByLengthSettingsMigrationJob.Factory()); put(UserNotificationMigrationJob.KEY, new UserNotificationMigrationJob.Factory()); put(UuidMigrationJob.KEY, new FailingJob.Factory()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java index f563e3d90f..27dc77db5d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java @@ -87,6 +87,11 @@ public void onRun() throws RetryLaterException { List jobs = new LinkedList<>(); DecryptionResult result = MessageDecryptionUtil.decrypt(context, envelope); + if (result.getState() == MessageState.DECRYPTED_OK && envelope.isStory() && !isStoryMessage(result)) { + Log.w(TAG, "Envelope was flagged as a story, but it did not have any story-related content! Dropping."); + return; + } + if (result.getContent() != null) { if (result.getContent().getSenderKeyDistributionMessage().isPresent()) { handleSenderKeyDistributionMessage(result.getContent().getSender(), result.getContent().getSenderDevice(), result.getContent().getSenderKeyDistributionMessage().get()); @@ -157,6 +162,35 @@ private void handlePniSignatureMessage(@NonNull SignalServiceAddress address, in } } + private boolean isStoryMessage(@NonNull DecryptionResult result) { + if (result.getContent() == null) { + return false; + } + + if (result.getContent().getSenderKeyDistributionMessage().isPresent()) { + return true; + } + + if (result.getContent().getStoryMessage().isPresent()) { + return true; + } + + if (result.getContent().getDataMessage().isPresent() && + result.getContent().getDataMessage().get().getStoryContext().isPresent() && + result.getContent().getDataMessage().get().getGroupContext().isPresent()) + { + return true; + } + + if (result.getContent().getDataMessage().isPresent() && + result.getContent().getDataMessage().get().getRemoteDelete().isPresent()) + { + return true; + } + + return false; + } + public static final class Factory implements Job.Factory { @Override public @NonNull PushDecryptMessageJob create(@NonNull Parameters parameters, @NonNull Data data) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index 777c0c3958..52a628fe8b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -296,7 +296,7 @@ private List deliver(OutgoingMediaMessage message, @NonNull R .withExpiration(groupRecipient.getExpiresInSeconds()) .asGroupMessage(group) .build(); - return GroupSendUtil.sendResendableDataMessage(context, groupRecipient.requireGroupId().requireV2(), destinations, isRecipientUpdate, ContentHint.IMPLICIT, new MessageId(messageId, true), groupDataMessage, message.isUrgent()); + return GroupSendUtil.sendResendableDataMessage(context, groupRecipient.requireGroupId().requireV2(), null, destinations, isRecipientUpdate, ContentHint.IMPLICIT, new MessageId(messageId, true), groupDataMessage, message.isUrgent(), false); } else { throw new UndeliverableMessageException("Messages can no longer be sent to V1 groups!"); } @@ -351,12 +351,14 @@ private List deliver(OutgoingMediaMessage message, @NonNull R return GroupSendUtil.sendResendableDataMessage(context, groupRecipient.getGroupId().map(GroupId::requireV2).orElse(null), + null, destinations, isRecipientUpdate, ContentHint.RESENDABLE, new MessageId(messageId, true), groupMessageBuilder.build(), - message.isUrgent()); + message.isUrgent(), + message.getStoryType().isStory() || message.getParentStoryId() != null); } } catch (ServerRejectedException e) { throw new UndeliverableMessageException(e); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java index b8fdfaf52a..167df0923c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java @@ -357,6 +357,8 @@ protected Optional getQuoteFor(OutgoingMediaMess if (quoteAuthorRecipient.isMaybeRegistered()) { return Optional.of(new SignalServiceDataMessage.Quote(quoteId, RecipientUtil.getOrFetchServiceId(context, quoteAuthorRecipient), quoteBody, quoteAttachments, quoteMentions, quoteType.getDataMessageType())); + } else if (quoteAuthorRecipient.hasServiceId()) { + return Optional.of(new SignalServiceDataMessage.Quote(quoteId, quoteAuthorRecipient.requireServiceId(), quoteBody, quoteAttachments, quoteMentions, quoteType.getDataMessageType())); } else { return Optional.empty(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java index bf3ba72e8f..01131cd284 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java @@ -238,12 +238,14 @@ public void onFailure() { boolean includesSelf = nonSelfDestinations.size() != destinations.size(); List results = GroupSendUtil.sendResendableDataMessage(context, conversationRecipient.getGroupId().map(GroupId::requireV2).orElse(null), + null, nonSelfDestinations, false, ContentHint.RESENDABLE, messageId, dataMessage, - true); + true, + false); if (includesSelf) { results.add(ApplicationDependencies.getSignalServiceMessageSender().sendSyncMessage(dataMessage)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java index 58e8a7a7ad..1aec897d6b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java @@ -50,7 +50,7 @@ public RefreshAttributesJob(boolean forced) { .addConstraint(NetworkConstraint.KEY) .setQueue("RefreshAttributesJob") .setMaxInstancesForFactory(2) - .setLifespan(TimeUnit.DAYS.toDays(30)) + .setLifespan(TimeUnit.DAYS.toMillis(30)) .setMaxAttempts(Parameters.UNLIMITED) .build(), forced); @@ -84,7 +84,7 @@ public void onRun() throws IOException { } int registrationId = SignalStore.account().getRegistrationId(); - boolean fetchesMessages = !SignalStore.account().isFcmEnabled(); + boolean fetchesMessages = !SignalStore.account().isFcmEnabled() || SignalStore.internalValues().isWebsocketModeForced(); byte[] unidentifiedAccessKey = UnidentifiedAccess.deriveAccessKeyFrom(ProfileKeyUtil.getSelfProfileKey()); boolean universalUnidentifiedAccess = TextSecurePreferences.isUniversalUnidentifiedAccess(context); String registrationLockV1 = null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java index 04b285d9e9..498cc8d2f5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import com.annimon.stream.Stream; @@ -10,8 +11,11 @@ import org.thoughtcrime.securesms.database.MessageDatabase; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; +import org.thoughtcrime.securesms.database.model.DistributionListId; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.MessageRecord; +import org.thoughtcrime.securesms.database.model.MmsMessageRecord; +import org.thoughtcrime.securesms.database.model.StoryType; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.jobmanager.Data; @@ -29,6 +33,7 @@ import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.messages.SendMessageResult; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; +import org.whispersystems.signalservice.api.push.DistributionId; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; import java.io.IOException; @@ -157,7 +162,10 @@ protected void onRun() throws Exception { List eligible = RecipientUtil.getEligibleForSending(Stream.of(recipients).map(Recipient::resolved).toList()); List skipped = Stream.of(SetUtil.difference(possible, eligible)).map(Recipient::getId).toList(); - GroupSendJobHelper.SendResult sendResult = deliver(conversationRecipient, eligible, targetSentTimestamp); + boolean isForStory = message.isMms() && (((MmsMessageRecord) message).getStoryType().isStory() || ((MmsMessageRecord) message).getParentStoryId() != null); + DistributionListId distributionListId = isForStory ? message.getRecipient().getDistributionListId().orElse(null) : null; + + GroupSendJobHelper.SendResult sendResult = deliver(conversationRecipient, eligible, targetSentTimestamp, isForStory, distributionListId); for (Recipient completion : sendResult.completed) { recipients.remove(completion.getId()); @@ -196,7 +204,11 @@ public void onFailure() { Log.w(TAG, "Failed to send remote delete to all recipients! (" + (initialRecipientCount - recipients.size() + "/" + initialRecipientCount + ")") ); } - private @NonNull GroupSendJobHelper.SendResult deliver(@NonNull Recipient conversationRecipient, @NonNull List destinations, long targetSentTimestamp) + private @NonNull GroupSendJobHelper.SendResult deliver(@NonNull Recipient conversationRecipient, + @NonNull List destinations, + long targetSentTimestamp, + boolean isForStory, + @Nullable DistributionListId distributionListId) throws IOException, UntrustedIdentityException { SignalServiceDataMessage.Builder dataMessageBuilder = SignalServiceDataMessage.newBuilder() @@ -210,12 +222,14 @@ public void onFailure() { SignalServiceDataMessage dataMessage = dataMessageBuilder.build(); List results = GroupSendUtil.sendResendableDataMessage(context, conversationRecipient.getGroupId().map(GroupId::requireV2).orElse(null), + distributionListId, destinations, false, ContentHint.RESENDABLE, new MessageId(messageId, isMms), dataMessage, - true); + true, + isForStory); return GroupSendJobHelper.getCompletedSends(destinations, results); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java index 55a3291003..c0fcaa03f9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java @@ -79,11 +79,6 @@ protected void onRun() throws Exception { Recipient targetRecipient = Recipient.resolved(targetRecipientId); Recipient threadRecipient = Recipient.resolved(threadRecipientId); - if (targetRecipient.getSenderKeyCapability() != Recipient.Capability.SUPPORTED) { - Log.w(TAG, targetRecipientId + " does not support sender key! Not sending."); - return; - } - if (targetRecipient.isUnregistered()) { Log.w(TAG, threadRecipient.getId() + " not registered!"); return; @@ -125,7 +120,7 @@ protected void onRun() throws Exception { SenderKeyDistributionMessage message = messageSender.getOrCreateNewGroupSession(distributionId); List> access = UnidentifiedAccessUtil.getAccessFor(context, Collections.singletonList(targetRecipient)); - SendMessageResult result = messageSender.sendSenderKeyDistributionMessage(distributionId, address, access, message, Optional.ofNullable(groupId).map(GroupId::getDecodedId), false).get(0); + SendMessageResult result = messageSender.sendSenderKeyDistributionMessage(distributionId, address, access, message, Optional.ofNullable(groupId).map(GroupId::getDecodedId), false, false).get(0); if (result.isSuccess()) { List addresses = result.getSuccess() diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java index 3f815ddeee..8be02dbb05 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java @@ -25,6 +25,7 @@ public final class InternalValues extends SignalStoreValues { public static final String CALLING_BANDWIDTH_MODE = "internal.calling_bandwidth_mode"; public static final String CALLING_DISABLE_TELECOM = "internal.calling_disable_telecom"; public static final String DISABLE_STORAGE_SERVICE = "internal.disable_storage_service"; + public static final String FORCE_WEBSOCKET_MODE = "internal.force_websocket_mode"; InternalValues(KeyValueStore store) { super(store); @@ -151,7 +152,18 @@ public synchronized CallManager.BandwidthMode callingBandwidthMode() { */ public synchronized boolean callingDisableTelecom() { if (FeatureFlags.internalUser()) { - return getBoolean(CALLING_DISABLE_TELECOM, false); + return getBoolean(CALLING_DISABLE_TELECOM, true); + } else { + return false; + } + } + + /** + * Whether or not the system is forced to be in 'websocket mode', where FCM is ignored and we use a foreground service to keep the app alive. + */ + public boolean isWebsocketModeForced() { + if (FeatureFlags.internalUser()) { + return getBoolean(FORCE_WEBSOCKET_MODE, false); } else { return false; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.java index 8b35d39b5e..104636d9b9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.java @@ -13,7 +13,6 @@ public final class MiscellaneousValues extends SignalStoreValues { private static final String LAST_PREKEY_REFRESH_TIME = "last_prekey_refresh_time"; private static final String MESSAGE_REQUEST_ENABLE_TIME = "message_request_enable_time"; private static final String LAST_PROFILE_REFRESH_TIME = "misc.last_profile_refresh_time"; - private static final String LAST_GV1_ROUTINE_MIGRATION_TIME = "misc.last_gv1_routine_migration_time"; private static final String USERNAME_SHOW_REMINDER = "username.show.reminder"; private static final String CLIENT_DEPRECATED = "misc.client_deprecated"; private static final String OLD_DEVICE_TRANSFER_LOCKED = "misc.old_device.transfer.locked"; @@ -62,14 +61,6 @@ public void setLastProfileRefreshTime(long time) { putLong(LAST_PROFILE_REFRESH_TIME, time); } - public long getLastGv1RoutineMigrationTime() { - return getLong(LAST_GV1_ROUTINE_MIGRATION_TIME, 0); - } - - public void setLastGv1RoutineMigrationTime(long time) { - putLong(LAST_GV1_ROUTINE_MIGRATION_TIME, time); - } - public void hideUsernameReminder() { putBoolean(USERNAME_SHOW_REMINDER, false); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/PaymentsValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/PaymentsValues.kt index 828f14ce1f..1a5ee87511 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/PaymentsValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/PaymentsValues.kt @@ -53,6 +53,7 @@ internal class PaymentsValues internal constructor(store: KeyValueStore) : Signa const val MOB_PAYMENTS_ENABLED = "mob_payments_enabled" } + @get:JvmName("isPaymentLockEnabled") var paymentLock: Boolean by booleanValue(PAYMENT_LOCK_ENABLED, false) var paymentLockTimestamp: Long by longValue(PAYMENT_LOCK_TIMESTAMP, 0) var paymentLockSkipCount: Int by integerValue(PAYMENT_LOCK_SKIP_COUNT, 0) diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StoryValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StoryValues.kt index 9d55e9a460..072e2351ff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StoryValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StoryValues.kt @@ -39,6 +39,11 @@ internal class StoryValues(store: KeyValueStore) : SignalStoreValues(store) { * Marks whether the user has seen the onboarding story */ private const val USER_HAS_SEEN_ONBOARDING_STORY = "stories.user.has.seen.onboarding" + + /** + * Marks whether the user has seen the beta dialog + */ + private const val USER_HAS_SEEN_BETA_DIALOG = "stories.user.has.seen.beta.dialog" } override fun onFirstEverAppLaunch() = Unit @@ -47,7 +52,8 @@ internal class StoryValues(store: KeyValueStore) : SignalStoreValues(store) { MANUAL_FEATURE_DISABLE, USER_HAS_ADDED_TO_A_STORY, USER_HAS_SEEN_FIRST_NAV_VIEW, - HAS_DOWNLOADED_ONBOARDING_STORY + HAS_DOWNLOADED_ONBOARDING_STORY, + USER_HAS_SEEN_BETA_DIALOG ) var isFeatureDisabled: Boolean by booleanValue(MANUAL_FEATURE_DISABLE, false) @@ -62,6 +68,8 @@ internal class StoryValues(store: KeyValueStore) : SignalStoreValues(store) { var userHasSeenOnboardingStory: Boolean by booleanValue(USER_HAS_SEEN_ONBOARDING_STORY, false) + var userHasSeenBetaDialog: Boolean by booleanValue(USER_HAS_SEEN_BETA_DIALOG, false) + fun setLatestStorySend(storySend: StorySend) { synchronized(this) { val storySends: List = getList(LATEST_STORY_SENDS, StorySendSerializer) diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java index 7f2f2bbf0b..acec125f56 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java @@ -5,6 +5,9 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.AppCapabilities; +import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.SignalDatabase; +import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.whispersystems.signalservice.api.account.AccountAttributes; @@ -28,23 +31,31 @@ public final class LogSectionCapabilities implements LogSection { Recipient self = Recipient.self(); - AccountAttributes.Capabilities capabilities = AppCapabilities.getCapabilities(false); - - return new StringBuilder().append("-- Local").append("\n") - .append("GV2 : ").append(capabilities.isGv2()).append("\n") - .append("GV1 Migration : ").append(capabilities.isGv1Migration()).append("\n") - .append("Sender Key : ").append(capabilities.isSenderKey()).append("\n") - .append("Announcement Groups: ").append(capabilities.isAnnouncementGroup()).append("\n") - .append("Change Number : ").append(capabilities.isChangeNumber()).append("\n") - .append("Stories : ").append(capabilities.isStories()).append("\n") - .append("Gift Badges : ").append(capabilities.isGiftBadges()).append("\n") + AccountAttributes.Capabilities localCapabilities = AppCapabilities.getCapabilities(false); + RecipientRecord.Capabilities globalCapabilities = SignalDatabase.recipients().getCapabilities(self.getId()); + + StringBuilder builder = new StringBuilder().append("-- Local").append("\n") + .append("GV2 : ").append(localCapabilities.isGv2()).append("\n") + .append("GV1 Migration : ").append(localCapabilities.isGv1Migration()).append("\n") + .append("Sender Key : ").append(localCapabilities.isSenderKey()).append("\n") + .append("Announcement Groups: ").append(localCapabilities.isAnnouncementGroup()).append("\n") + .append("Change Number : ").append(localCapabilities.isChangeNumber()).append("\n") + .append("Stories : ").append(localCapabilities.isStories()).append("\n") + .append("Gift Badges : ").append(localCapabilities.isGiftBadges()).append("\n") .append("\n") - .append("-- Global").append("\n") - .append("GV1 Migration : ").append(self.getGroupsV1MigrationCapability()).append("\n") - .append("Sender Key : ").append(self.getSenderKeyCapability()).append("\n") - .append("Announcement Groups: ").append(self.getAnnouncementGroupCapability()).append("\n") - .append("Change Number : ").append(self.getChangeNumberCapability()).append("\n") - .append("Stories : ").append(self.getStoriesCapability()).append("\n") - .append("Gift Badges : ").append(self.getGiftBadgesCapability()).append("\n"); + .append("-- Global").append("\n"); + + if (globalCapabilities != null) { + builder.append("GV1 Migration : ").append(globalCapabilities.getGroupsV1MigrationCapability()).append("\n") + .append("Sender Key : ").append(globalCapabilities.getSenderKeyCapability()).append("\n") + .append("Announcement Groups: ").append(globalCapabilities.getAnnouncementGroupCapability()).append("\n") + .append("Change Number : ").append(globalCapabilities.getChangeNumberCapability()).append("\n") + .append("Stories : ").append(globalCapabilities.getStoriesCapability()).append("\n") + .append("Gift Badges : ").append(globalCapabilities.getGiftBadgesCapability()).append("\n"); + } else { + builder.append("Self not found!"); + } + + return builder; } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java index b1f5a5d8c5..ebc41f7b0e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java @@ -28,7 +28,6 @@ import com.codewaves.stickyheadergrid.StickyHeaderGridLayoutManager; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.MediaPreviewActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.components.menu.ActionItem; @@ -38,6 +37,7 @@ import org.thoughtcrime.securesms.database.MediaDatabase; import org.thoughtcrime.securesms.database.loaders.GroupedThreadMediaLoader; import org.thoughtcrime.securesms.database.loaders.MediaLoader; +import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.util.BottomOffsetDecoration; @@ -46,6 +46,7 @@ import org.thoughtcrime.securesms.util.ViewUtil; import java.util.Arrays; +import java.util.Objects; public final class MediaOverviewPageFragment extends Fragment implements MediaGalleryAllAdapter.ItemClickListener, @@ -236,18 +237,19 @@ private void handleMediaPreviewClick(@NonNull MediaDatabase.MediaRecord mediaRec DatabaseAttachment attachment = mediaRecord.getAttachment(); if (MediaUtil.isVideo(attachment) || MediaUtil.isImage(attachment)) { - Intent intent = new Intent(context, MediaPreviewActivity.class); - intent.putExtra(MediaPreviewActivity.DATE_EXTRA, mediaRecord.getDate()); - intent.putExtra(MediaPreviewActivity.SIZE_EXTRA, mediaRecord.getAttachment().getSize()); - intent.putExtra(MediaPreviewActivity.THREAD_ID_EXTRA, threadId); - intent.putExtra(MediaPreviewActivity.LEFT_IS_RECENT_EXTRA, true); - intent.putExtra(MediaPreviewActivity.HIDE_ALL_MEDIA_EXTRA, true); - intent.putExtra(MediaPreviewActivity.SHOW_THREAD_EXTRA, threadId == MediaDatabase.ALL_THREADS); - intent.putExtra(MediaPreviewActivity.SORTING_EXTRA, sorting.ordinal()); - intent.putExtra(MediaPreviewActivity.IS_VIDEO_GIF, attachment.isVideoGif()); - - intent.setDataAndType(mediaRecord.getAttachment().getUri(), mediaRecord.getContentType()); - context.startActivity(intent); + MediaIntentFactory.MediaPreviewArgs args = new MediaIntentFactory.MediaPreviewArgs( + threadId, + mediaRecord.getDate(), + Objects.requireNonNull(mediaRecord.getAttachment().getUri()), + mediaRecord.getContentType(), + mediaRecord.getAttachment().getSize(), + mediaRecord.getAttachment().getCaption(), + true, + true, + threadId == MediaDatabase.ALL_THREADS, + sorting.ordinal(), + attachment.isVideoGif()); + context.startActivity(MediaIntentFactory.create(context, args)); } else { if (!MediaUtil.isAudio(attachment)) { showFileExternally(context, mediaRecord); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaIntentFactory.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaIntentFactory.kt new file mode 100644 index 0000000000..1ecff88560 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaIntentFactory.kt @@ -0,0 +1,66 @@ +package org.thoughtcrime.securesms.mediapreview + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.os.Parcelable +import kotlinx.parcelize.Parcelize +import org.thoughtcrime.securesms.MediaPreviewActivity +import org.thoughtcrime.securesms.util.FeatureFlags + +object MediaIntentFactory { + private const val ARGS_KEY = "args" + + const val NOT_IN_A_THREAD = -2 + const val UNKNOWN_TIMESTAMP = -2 + const val THREAD_ID_EXTRA = "thread_id" + const val DATE_EXTRA = "date" + const val SIZE_EXTRA = "size" + const val CAPTION_EXTRA = "caption" + const val LEFT_IS_RECENT_EXTRA = "left_is_recent" + const val HIDE_ALL_MEDIA_EXTRA = "came_from_all_media" + const val SHOW_THREAD_EXTRA = "show_thread" + const val SORTING_EXTRA = "sorting" + const val IS_VIDEO_GIF = "is_video_gif" + + @Parcelize + data class MediaPreviewArgs( + val threadId: Long, + val date: Long, + val initialMediaUri: Uri, + val initialMediaType: String, + val initialMediaSize: Long, + val initialCaption: String? = null, + val leftIsRecent: Boolean = false, + val hideAllMedia: Boolean = false, + val showThread: Boolean = false, + val sorting: Int, + val isVideoGif: Boolean + ) : Parcelable + + @JvmStatic + fun requireArguments(bundle: Bundle): MediaPreviewArgs = bundle.getParcelable(ARGS_KEY)!! + + @JvmStatic + fun create(context: Context, args: MediaPreviewArgs): Intent { + + return if (FeatureFlags.mediaPreviewV2()) { + val intent = Intent(context, MediaPreviewV2Activity::class.java) + intent.putExtra(ARGS_KEY, args) + return intent + } else { + val intent = Intent(context, MediaPreviewActivity::class.java).apply { + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + setDataAndType(args.initialMediaUri, args.initialMediaType) + putExtra(THREAD_ID_EXTRA, args.threadId) + putExtra(DATE_EXTRA, args.date) + putExtra(SIZE_EXTRA, args.initialMediaSize) + putExtra(CAPTION_EXTRA, args.initialCaption) + putExtra(IS_VIDEO_GIF, args.isVideoGif) + putExtra(LEFT_IS_RECENT_EXTRA, args.leftIsRecent) + } + return intent + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewRepository.kt new file mode 100644 index 0000000000..25c83262b1 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewRepository.kt @@ -0,0 +1,64 @@ +package org.thoughtcrime.securesms.mediapreview + +import android.net.Uri +import io.reactivex.rxjava3.core.Flowable +import io.reactivex.rxjava3.core.Single +import io.reactivex.rxjava3.schedulers.Schedulers +import org.signal.core.util.logging.Log +import org.signal.core.util.requireLong +import org.thoughtcrime.securesms.attachments.AttachmentId +import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.MediaDatabase +import org.thoughtcrime.securesms.database.MediaDatabase.Sorting +import org.thoughtcrime.securesms.database.SignalDatabase.Companion.media +import org.thoughtcrime.securesms.mms.PartAuthority + +/** + * Repository for accessing the attachments in the encrypted database. + */ +class MediaPreviewRepository { + companion object { + private val TAG: String = Log.tag(MediaPreviewRepository::class.java) + } + + /** + * Accessor for database attachments. + * @param startingUri the initial position to select from + * @param threadId the thread to select from + * @param sorting the ordering of the results + * @param limit the maximum quantity of the results + */ + fun getAttachments(startingUri: Uri, threadId: Long, sorting: Sorting, limit: Int = 500): Flowable> { + return Single.fromCallable { + val cursor = media.getGalleryMediaForThread(threadId, sorting) + + val acc = mutableListOf() + var attachmentUri: Uri? = null + while (cursor.moveToNext()) { + val attachmentId = AttachmentId(cursor.requireLong(AttachmentDatabase.ROW_ID), cursor.requireLong(AttachmentDatabase.UNIQUE_ID)) + attachmentUri = PartAuthority.getAttachmentDataUri(attachmentId) + if (attachmentUri == startingUri) { + break + } + } + + if (attachmentUri == startingUri) { + for (i in 0..limit) { + val element = MediaDatabase.MediaRecord.from(cursor) + if (element != null) { + acc.add(element) + } + if (!cursor.isLast) { + cursor.moveToNext() + } else { + break + } + } + acc.toList() + } else { + Log.e(TAG, "Could not find $startingUri in thread $threadId") + emptyList() + } + }.subscribeOn(Schedulers.io()).toFlowable() + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt new file mode 100644 index 0000000000..3c7640a18d --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt @@ -0,0 +1,34 @@ +package org.thoughtcrime.securesms.mediapreview + +import android.content.Context +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.app.AppCompatDelegate +import androidx.fragment.app.commit +import org.thoughtcrime.securesms.R + +class MediaPreviewV2Activity : AppCompatActivity(R.layout.activity_mediapreview_v2) { + + override fun attachBaseContext(newBase: Context) { + delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES + super.attachBaseContext(newBase) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setTheme(R.style.TextSecure_MediaPreview) + if (savedInstanceState == null) { + val bundle = Bundle() + val args = MediaIntentFactory.requireArguments(intent.extras!!) + bundle.putParcelable(MediaPreviewV2Fragment.ARGS_KEY, args) + supportFragmentManager.commit { + setReorderingAllowed(true) + add(R.id.fragment_container_view, MediaPreviewV2Fragment::class.java, bundle, FRAGMENT_TAG) + } + } + } + + companion object { + private const val FRAGMENT_TAG = "media_preview_fragment_v2" + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Adapter.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Adapter.kt new file mode 100644 index 0000000000..3992b53842 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Adapter.kt @@ -0,0 +1,47 @@ +package org.thoughtcrime.securesms.mediapreview + +import androidx.core.os.bundleOf +import androidx.fragment.app.Fragment +import androidx.viewpager2.adapter.FragmentStateAdapter +import org.thoughtcrime.securesms.attachments.Attachment +import org.thoughtcrime.securesms.util.MediaUtil + +class MediaPreviewV2Adapter(val fragment: Fragment) : FragmentStateAdapter(fragment) { + private var items: List = listOf() + private var autoPlayPosition = -1 + + override fun getItemCount(): Int { + return items.count() + } + + override fun createFragment(position: Int): Fragment { + val attachment: Attachment = items[position] + + val contentType = attachment.contentType + val args = bundleOf( + MediaPreviewFragment.DATA_URI to attachment.uri, + MediaPreviewFragment.DATA_CONTENT_TYPE to contentType, + MediaPreviewFragment.DATA_SIZE to attachment.size, + MediaPreviewFragment.AUTO_PLAY to (position == autoPlayPosition), + MediaPreviewFragment.VIDEO_GIF to attachment.isVideoGif, + ) + val fragment = if (MediaUtil.isVideo(contentType)) { + VideoMediaPreviewFragment() + } else if (MediaUtil.isImageType(contentType)) { + ImageMediaPreviewFragment() + } else { + throw AssertionError("Unexpected media type: $contentType") + } + + fragment.arguments = args + + return fragment + } + + fun updateBackingItems(newItems: Collection) { + if (newItems != items) { + items = newItems.toList() + notifyDataSetChanged() + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt new file mode 100644 index 0000000000..6de23e6eb9 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt @@ -0,0 +1,389 @@ +package org.thoughtcrime.securesms.mediapreview + +import android.Manifest +import android.content.ActivityNotFoundException +import android.content.Context +import android.content.DialogInterface +import android.content.Intent +import android.os.Build +import android.os.Bundle +import android.view.Menu +import android.view.View +import android.view.ViewGroup +import android.view.ViewGroup.MarginLayoutParams +import android.widget.Toast +import androidx.core.app.ShareCompat +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback +import com.google.android.material.appbar.MaterialToolbar +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.snackbar.Snackbar +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import org.signal.core.util.concurrent.SignalExecutors +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.animation.DepthPageTransformer +import org.thoughtcrime.securesms.attachments.DatabaseAttachment +import org.thoughtcrime.securesms.components.ViewBinderDelegate +import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment +import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs +import org.thoughtcrime.securesms.database.MediaDatabase +import org.thoughtcrime.securesms.databinding.FragmentMediaPreviewV2Binding +import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity +import org.thoughtcrime.securesms.mediasend.Media +import org.thoughtcrime.securesms.mms.GlideApp +import org.thoughtcrime.securesms.mms.PartAuthority +import org.thoughtcrime.securesms.permissions.Permissions +import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.util.DateUtils +import org.thoughtcrime.securesms.util.FullscreenHelper +import org.thoughtcrime.securesms.util.LifecycleDisposable +import org.thoughtcrime.securesms.util.MediaUtil +import org.thoughtcrime.securesms.util.SaveAttachmentTask +import org.thoughtcrime.securesms.util.StorageUtil +import java.util.Locale +import java.util.Optional + +class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), MediaPreviewFragment.Events { + private val TAG = Log.tag(MediaPreviewV2Fragment::class.java) + + private val lifecycleDisposable = LifecycleDisposable() + private val binding by ViewBinderDelegate(FragmentMediaPreviewV2Binding::bind) + private val viewModel: MediaPreviewV2ViewModel by viewModels() + + private lateinit var fullscreenHelper: FullscreenHelper + + override fun onAttach(context: Context) { + super.onAttach(context) + fullscreenHelper = FullscreenHelper(requireActivity()) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val args = MediaIntentFactory.requireArguments(requireArguments()) + + initializeViewModel(args) + initializeToolbar(binding.toolbar, args) + binding.mediaPager.offscreenPageLimit = 1 + binding.mediaPager.setPageTransformer(DepthPageTransformer()) + val adapter = MediaPreviewV2Adapter(this) + binding.mediaPager.adapter = adapter + binding.mediaPager.registerOnPageChangeCallback(object : OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + viewModel.setCurrentPage(position) + } + }) + initializeFullScreenUi() + initializeAlbumRail() + anchorMarginsToBottomInsets(binding.mediaPreviewDetailsContainer) + lifecycleDisposable += viewModel.state.distinctUntilChanged().observeOn(AndroidSchedulers.mainThread()).subscribe { + bindCurrentState(it) + } + } + + private fun initializeToolbar(toolbar: MaterialToolbar, args: MediaIntentFactory.MediaPreviewArgs) { + toolbar.setNavigationOnClickListener { + requireActivity().onBackPressed() + } + + binding.toolbar.inflateMenu(R.menu.media_preview) + + // Restricted to API26 because of MemoryFileUtil not supporting lower API levels well + binding.toolbar.menu.findItem(R.id.media_preview__share).isVisible = Build.VERSION.SDK_INT >= 26 + + if (args.hideAllMedia) { + binding.toolbar.menu.findItem(R.id.media_preview__overview).isVisible = false + } + } + + private fun initializeAlbumRail() { + binding.mediaPreviewAlbumRail.itemAnimator = null // Or can crash when set to INVISIBLE while animating by FullscreenHelper https://issuetracker.google.com/issues/148720682 + binding.mediaPreviewAlbumRail.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) + binding.mediaPreviewAlbumRail.adapter = MediaRailAdapter( + GlideApp.with(this), + object : MediaRailAdapter.RailItemListener { + override fun onRailItemClicked(distanceFromActive: Int) { + binding.mediaPager.currentItem += distanceFromActive + } + + override fun onRailItemDeleteClicked(distanceFromActive: Int) { + throw UnsupportedOperationException("Callback unsupported.") + } + }, + false + ) + } + + private fun initializeFullScreenUi() { + fullscreenHelper.configureToolbarLayout(binding.toolbarCutoutSpacer, binding.toolbar) + fullscreenHelper.showAndHideWithSystemUI(requireActivity().window, binding.toolbarLayout, binding.mediaPreviewDetailsContainer) + } + + private fun initializeViewModel(args: MediaIntentFactory.MediaPreviewArgs) { + if (!MediaUtil.isImageType(args.initialMediaType) && !MediaUtil.isVideoType(args.initialMediaType)) { + Log.w(TAG, "Unsupported media type sent to MediaPreviewV2Fragment, finishing.") + Snackbar.make(binding.root, R.string.MediaPreviewActivity_unssuported_media_type, Snackbar.LENGTH_LONG) + .setAction(R.string.MediaPreviewActivity_dismiss_due_to_error) { + requireActivity().finish() + }.show() + } + viewModel.setShowThread(args.showThread) + val sorting = MediaDatabase.Sorting.values()[args.sorting] + viewModel.fetchAttachments(args.initialMediaUri, args.threadId, sorting) + } + + private fun bindCurrentState(currentState: MediaPreviewV2State) { + when (currentState.loadState) { + MediaPreviewV2State.LoadState.READY -> bindReadyState(currentState) + MediaPreviewV2State.LoadState.LOADED -> { + bindReadyState(currentState) + bindLoadedState(currentState) + } + else -> null + } + } + + private fun bindReadyState(currentState: MediaPreviewV2State) { + (binding.mediaPager.adapter as MediaPreviewV2Adapter).updateBackingItems(currentState.mediaRecords.mapNotNull { it.attachment }) + val currentItem: MediaDatabase.MediaRecord = currentState.mediaRecords[currentState.position] + binding.toolbar.title = getTitleText(currentItem, currentState.showThread) + binding.toolbar.subtitle = getSubTitleText(currentItem) + + val menu: Menu = binding.toolbar.menu + if (currentItem.threadId == MediaIntentFactory.NOT_IN_A_THREAD.toLong()) { + menu.findItem(R.id.media_preview__overview).isVisible = false + menu.findItem(R.id.delete).isVisible = false + } + + binding.toolbar.setOnMenuItemClickListener { + when (it.itemId) { + R.id.media_preview__overview -> showOverview(currentItem.threadId) + R.id.media_preview__forward -> forward(currentItem) + R.id.media_preview__share -> share(currentItem) + R.id.save -> saveToDisk(currentItem) + R.id.delete -> deleteMedia(currentItem) + android.R.id.home -> requireActivity().finish() + else -> return@setOnMenuItemClickListener false + } + return@setOnMenuItemClickListener true + } + } + + /** + * These are binding steps that need a reference to the actual fragment within the pager. + * This is not available until after a page has been chosen by the ViewPager, and we receive the + * {@link OnPageChangeCallback}. + */ + private fun bindLoadedState(currentState: MediaPreviewV2State) { + val currentItem: MediaDatabase.MediaRecord = currentState.mediaRecords[currentState.position] + val currentFragment: Fragment? = childFragmentManager.findFragmentByTag("f${currentState.position}") + val playbackControls = (currentFragment as? MediaPreviewFragment)?.playbackControls + val albumThumbnailMedia = currentState.mediaRecords.map { it.toMedia() } + val caption = currentItem.attachment?.caption + if (albumThumbnailMedia.isEmpty() && caption == null && playbackControls == null) { + binding.mediaPreviewDetailsContainer.visibility = View.GONE + } else { + binding.mediaPreviewDetailsContainer.visibility = View.VISIBLE + } + binding.mediaPreviewAlbumRail.visibility = if (albumThumbnailMedia.isEmpty()) View.GONE else View.VISIBLE + (binding.mediaPreviewAlbumRail.adapter as MediaRailAdapter).setMedia(albumThumbnailMedia, currentState.position) + binding.mediaPreviewAlbumRail.smoothScrollToPosition(currentState.position) + + binding.mediaPreviewCaptionContainer.visibility = if (caption == null) View.GONE else View.VISIBLE + binding.mediaPreviewCaption.text = caption + + if (playbackControls != null) { + val params = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + playbackControls.layoutParams = params + binding.mediaPreviewPlaybackControlsContainer.removeAllViews() + binding.mediaPreviewPlaybackControlsContainer.addView(playbackControls) + } else { + binding.mediaPreviewPlaybackControlsContainer.removeAllViews() + } + } + + private fun getTitleText(mediaRecord: MediaDatabase.MediaRecord, showThread: Boolean): String { + val recipient: Recipient = Recipient.live(mediaRecord.recipientId).get() + val defaultFromString: String = if (mediaRecord.isOutgoing) { + getString(R.string.MediaPreviewActivity_you) + } else { + recipient.getDisplayName(requireContext()) + } + if (!showThread) { + return defaultFromString + } + + val threadRecipient = Recipient.live(mediaRecord.threadRecipientId).get() + return if (mediaRecord.isOutgoing) { + if (threadRecipient.isSelf) { + getString(R.string.note_to_self) + } else { + getString(R.string.MediaPreviewActivity_you_to_s, threadRecipient.getDisplayName(requireContext())) + } + } else { + if (threadRecipient.isGroup) { + getString(R.string.MediaPreviewActivity_s_to_s, defaultFromString, threadRecipient.getDisplayName(requireContext())) + } else { + getString(R.string.MediaPreviewActivity_s_to_you, defaultFromString) + } + } + } + + private fun getSubTitleText(mediaRecord: MediaDatabase.MediaRecord): String = + if (mediaRecord.date > 0) { + DateUtils.getExtendedRelativeTimeSpanString(requireContext(), Locale.getDefault(), mediaRecord.date) + } else { + getString(R.string.MediaPreviewActivity_draft) + } + + private fun anchorMarginsToBottomInsets(viewToAnchor: View) { + ViewCompat.setOnApplyWindowInsetsListener(viewToAnchor) { view: View, windowInsetsCompat: WindowInsetsCompat -> + val layoutParams = view.layoutParams as MarginLayoutParams + val systemBarInsets = windowInsetsCompat.getInsets(WindowInsetsCompat.Type.systemBars()) + layoutParams.setMargins( + systemBarInsets.left, + layoutParams.topMargin, + systemBarInsets.right, + systemBarInsets.bottom + ) + view.layoutParams = layoutParams + windowInsetsCompat + } + } + + private fun MediaDatabase.MediaRecord.toMedia(): Media? { + val attachment = this.attachment + val uri = attachment?.uri + if (attachment == null || uri == null) { + return null + } + + return Media( + uri, + this.contentType, + this.date, + attachment.width, + attachment.height, + attachment.size, + 0, + attachment.isBorderless, + attachment.isVideoGif, + Optional.empty(), + Optional.ofNullable(attachment.caption), + Optional.empty() + ) + } + + override fun singleTapOnMedia(): Boolean { + fullscreenHelper.toggleUiVisibility() + return true + } + + override fun mediaNotAvailable() { + Snackbar.make(binding.root, R.string.MediaPreviewActivity_media_no_longer_available, Snackbar.LENGTH_LONG) + .setAction(R.string.MediaPreviewActivity_dismiss_due_to_error) { + requireActivity().finish() + }.show() + } + + override fun onMediaReady() { + Log.d(TAG, "onMediaReady()") + } + + private fun showOverview(threadId: Long) { + val context = requireContext() + context.startActivity(MediaOverviewActivity.forThread(context, threadId)) + } + + private fun forward(mediaItem: MediaDatabase.MediaRecord) { + val attachment = mediaItem.attachment + val uri = attachment?.uri + if (attachment != null && uri != null) { + MultiselectForwardFragmentArgs.create( + requireContext(), + mediaItem.threadId, + uri, + attachment.contentType + ) { args: MultiselectForwardFragmentArgs -> + MultiselectForwardFragment.showBottomSheet(childFragmentManager, args) + } + } + } + + private fun share(mediaItem: MediaDatabase.MediaRecord) { + val attachment = mediaItem.attachment + val uri = attachment?.uri + if (attachment != null && uri != null) { + val publicUri = PartAuthority.getAttachmentPublicUri(uri) + val mimeType = Intent.normalizeMimeType(attachment.contentType) + val shareIntent = ShareCompat.IntentBuilder(requireActivity()) + .setStream(publicUri) + .setType(mimeType) + .createChooserIntent() + .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + + try { + startActivity(shareIntent) + } catch (e: ActivityNotFoundException) { + Log.w(TAG, "No activity existed to share the media.", e) + Toast.makeText(requireContext(), R.string.MediaPreviewActivity_cant_find_an_app_able_to_share_this_media, Toast.LENGTH_LONG).show() + } + } + } + + private fun saveToDisk(mediaItem: MediaDatabase.MediaRecord) { + SaveAttachmentTask.showWarningDialog(requireContext()) { _: DialogInterface?, _: Int -> + if (StorageUtil.canWriteToMediaStore()) { + performSaveToDisk(mediaItem) + return@showWarningDialog + } + Permissions.with(this) + .request(Manifest.permission.WRITE_EXTERNAL_STORAGE) + .ifNecessary() + .withPermanentDenialDialog(getString(R.string.MediaPreviewActivity_signal_needs_the_storage_permission_in_order_to_write_to_external_storage_but_it_has_been_permanently_denied)) + .onAnyDenied { Toast.makeText(requireContext(), R.string.MediaPreviewActivity_unable_to_write_to_external_storage_without_permission, Toast.LENGTH_LONG).show() } + .onAllGranted { performSaveToDisk(mediaItem) } + .execute() + } + } + + fun performSaveToDisk(mediaItem: MediaDatabase.MediaRecord) { + val saveTask = SaveAttachmentTask(requireContext()) + val saveDate = if (mediaItem.date > 0) mediaItem.date else System.currentTimeMillis() + val attachment = mediaItem.attachment + val uri = attachment?.uri + if (attachment != null && uri != null) { + saveTask.executeOnExecutor(SignalExecutors.BOUNDED_IO, SaveAttachmentTask.Attachment(uri, attachment.contentType, saveDate, null)) + } + } + + private fun deleteMedia(mediaItem: MediaDatabase.MediaRecord) { + val attachment: DatabaseAttachment = mediaItem.attachment ?: return + + MaterialAlertDialogBuilder(requireContext()) + .setIcon(R.drawable.ic_warning) + .setTitle(R.string.MediaPreviewActivity_media_delete_confirmation_title) + .setMessage(R.string.MediaPreviewActivity_media_delete_confirmation_message) + .setCancelable(true) + .setPositiveButton(R.string.delete) { _, _ -> + viewModel.deleteItem(requireContext(), attachment, onSuccess = { + requireActivity().finish() + }, onError = { + Log.e(TAG, "Delete failed!", it) + requireActivity().finish() + }) + } + .setNegativeButton(android.R.string.cancel, null) + .show() + } + + companion object { + const val ARGS_KEY: String = "args" + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt new file mode 100644 index 0000000000..bf91f819d0 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt @@ -0,0 +1,12 @@ +package org.thoughtcrime.securesms.mediapreview + +import org.thoughtcrime.securesms.database.MediaDatabase + +data class MediaPreviewV2State( + val mediaRecords: List = emptyList(), + val loadState: LoadState = LoadState.INIT, + val position: Int = 0, + val showThread: Boolean = false +) { + enum class LoadState { INIT, READY, LOADED } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt new file mode 100644 index 0000000000..9f6e776ea5 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt @@ -0,0 +1,60 @@ +package org.thoughtcrime.securesms.mediapreview + +import android.content.Context +import android.net.Uri +import androidx.lifecycle.ViewModel +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Flowable +import io.reactivex.rxjava3.core.Single +import io.reactivex.rxjava3.disposables.CompositeDisposable +import io.reactivex.rxjava3.functions.Consumer +import io.reactivex.rxjava3.kotlin.plusAssign +import io.reactivex.rxjava3.schedulers.Schedulers +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.attachments.DatabaseAttachment +import org.thoughtcrime.securesms.database.MediaDatabase +import org.thoughtcrime.securesms.util.AttachmentUtil +import org.thoughtcrime.securesms.util.rx.RxStore + +class MediaPreviewV2ViewModel : ViewModel() { + private val TAG = Log.tag(MediaPreviewV2ViewModel::class.java) + private val store = RxStore(MediaPreviewV2State()) + private val disposables = CompositeDisposable() + private val repository: MediaPreviewRepository = MediaPreviewRepository() + + val state: Flowable = store.stateFlowable.observeOn(AndroidSchedulers.mainThread()) + + fun fetchAttachments(startingUri: Uri, threadId: Long, sorting: MediaDatabase.Sorting) { + disposables += store.update(repository.getAttachments(startingUri, threadId, sorting)) { + mediaRecords: List, oldState: MediaPreviewV2State -> + oldState.copy( + mediaRecords = mediaRecords, + loadState = MediaPreviewV2State.LoadState.READY + ) + } + } + + fun setShowThread(value: Boolean) { + store.update { oldState -> + oldState.copy(showThread = value) + } + } + + fun setCurrentPage(position: Int) { + store.update { oldState -> + oldState.copy(position = position, loadState = MediaPreviewV2State.LoadState.LOADED) + } + } + + fun deleteItem(context: Context, attachment: DatabaseAttachment, onSuccess: Consumer, onError: Consumer) { + disposables += Single.fromCallable { AttachmentUtil.deleteAttachment(context.applicationContext, attachment) } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(onSuccess, onError) + } + + override fun onCleared() { + disposables.dispose() + store.dispose() + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java index 2ec38b0003..70a9863658 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java @@ -47,14 +47,14 @@ public void setActiveAlbumRailItem(@NonNull Context context, int activePosition) cursor.moveToPosition(activePosition); - MediaRecord activeRecord = MediaRecord.from(context, cursor); + MediaRecord activeRecord = MediaRecord.from(cursor); LinkedList rail = new LinkedList<>(); Media activeMedia = toMedia(activeRecord); if (activeMedia != null) rail.add(activeMedia); while (cursor.moveToPrevious()) { - MediaRecord record = MediaRecord.from(context, cursor); + MediaRecord record = MediaRecord.from(cursor); if (record.getAttachment().getMmsId() == activeRecord.getAttachment().getMmsId()) { Media media = toMedia(record); if (media != null) rail.addFirst(media); @@ -66,7 +66,7 @@ public void setActiveAlbumRailItem(@NonNull Context context, int activePosition) cursor.moveToPosition(activePosition); while (cursor.moveToNext()) { - MediaRecord record = MediaRecord.from(context, cursor); + MediaRecord record = MediaRecord.from(cursor); if (record.getAttachment().getMmsId() == activeRecord.getAttachment().getMmsId()) { Media media = toMedia(record); if (media != null) rail.addLast(media); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java index 1a3f25f7cf..15de7c43bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java @@ -49,6 +49,7 @@ import org.thoughtcrime.securesms.animation.AnimationCompleteListener; import org.thoughtcrime.securesms.components.TooltipPopup; import org.thoughtcrime.securesms.mediasend.camerax.CameraXFlashToggleView; +import org.thoughtcrime.securesms.mediasend.camerax.CameraXModePolicy; import org.thoughtcrime.securesms.mediasend.camerax.CameraXUtil; import org.thoughtcrime.securesms.mediasend.v2.MediaAnimations; import org.thoughtcrime.securesms.mediasend.v2.MediaCountIndicatorButton; @@ -87,6 +88,7 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment { private MemoryFileDescriptor videoFileDescriptor; private LifecycleCameraController cameraController; private Disposable mostRecentItemDisposable = Disposable.disposed(); + private CameraXModePolicy cameraXModePolicy; private boolean isThumbAvailable; private boolean isMediaSelected; @@ -136,13 +138,18 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat this.previewView = view.findViewById(R.id.camerax_camera); this.controlsContainer = view.findViewById(R.id.camerax_controls_container); + this.cameraXModePolicy = CameraXModePolicy.acquire(requireContext(), + controller.getMediaConstraints(), + requireArguments().getBoolean(IS_VIDEO_ENABLED, true)); + + Log.d(TAG, "Starting CameraX with mode policy " + cameraXModePolicy.getClass().getSimpleName()); cameraController = new LifecycleCameraController(requireContext()); cameraController.bindToLifecycle(getViewLifecycleOwner()); cameraController.setCameraSelector(CameraXUtil.toCameraSelector(TextSecurePreferences.getDirectCaptureCameraId(requireContext()))); cameraController.setTapToFocusEnabled(true); cameraController.setImageCaptureMode(CameraXUtil.getOptimalCaptureMode()); - cameraController.setEnabledUseCases(getSupportedUseCases()); + cameraXModePolicy.initialize(cameraController); previewView.setScaleType(PREVIEW_SCALE_TYPE); previewView.setController(cameraController); @@ -335,7 +342,7 @@ private void initControls() { galleryButton.setOnClickListener(v -> controller.onGalleryClicked()); countButton.setOnClickListener(v -> controller.onCameraCountButtonClicked()); - if (isVideoRecordingSupported(requireContext())) { + if (Build.VERSION.SDK_INT >= 26 && cameraXModePolicy.isVideoSupported()) { try { closeVideoFileDescriptor(); videoFileDescriptor = CameraXVideoCaptureHelper.createFileDescriptor(requireContext()); @@ -356,6 +363,7 @@ private void initControls() { cameraController, previewView, videoFileDescriptor, + cameraXModePolicy, maxDuration, new CameraXVideoCaptureHelper.Callback() { @Override @@ -389,23 +397,6 @@ public void onVideoError(@Nullable Throwable cause) { } } - @CameraController.UseCases - private int getSupportedUseCases() { - if (isVideoRecordingSupported(requireContext())) { - return CameraController.IMAGE_CAPTURE | CameraController.VIDEO_CAPTURE; - } else { - return CameraController.IMAGE_CAPTURE; - } - } - - private boolean isVideoRecordingSupported(@NonNull Context context) { - return Build.VERSION.SDK_INT >= 26 && - requireArguments().getBoolean(IS_VIDEO_ENABLED, true) && - MediaConstraints.isVideoTranscodeAvailable() && - CameraXUtil.isMixedModeSupported(context) && - VideoUtil.getMaxVideoRecordDurationInSeconds(context, controller.getMediaConstraints()) > 0; - } - private void displayVideoRecordingTooltipIfNecessary(CameraButtonView captureButton) { if (shouldDisplayVideoRecordingTooltip()) { int displayRotation = requireActivity().getWindowManager().getDefaultDisplay().getRotation(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXVideoCaptureHelper.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXVideoCaptureHelper.java index 56bc38dcf9..4da3e0e3c1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXVideoCaptureHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXVideoCaptureHelper.java @@ -26,6 +26,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.mediasend.camerax.CameraXModePolicy; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.util.Debouncer; import org.thoughtcrime.securesms.util.MemoryFileDescriptor; @@ -51,6 +52,7 @@ class CameraXVideoCaptureHelper implements CameraButtonView.VideoCaptureListener private final @NonNull MemoryFileDescriptor memoryFileDescriptor; private final @NonNull ValueAnimator updateProgressAnimator; private final @NonNull Debouncer debouncer; + private final @NonNull CameraXModePolicy cameraXModePolicy; private ValueAnimator cameraMetricsAnimator; @@ -81,6 +83,7 @@ public void onError(int videoCaptureError, @NonNull String message, @Nullable Th @NonNull CameraController cameraController, @NonNull PreviewView previewView, @NonNull MemoryFileDescriptor memoryFileDescriptor, + @NonNull CameraXModePolicy cameraXModePolicy, int maxVideoDurationSec, @NonNull Callback callback) { @@ -91,6 +94,7 @@ public void onError(int videoCaptureError, @NonNull String message, @Nullable Th this.callback = callback; this.updateProgressAnimator = ValueAnimator.ofFloat(0f, 1f).setDuration(TimeUnit.SECONDS.toMillis(maxVideoDurationSec)); this.debouncer = new Debouncer(TimeUnit.SECONDS.toMillis(maxVideoDurationSec)); + this.cameraXModePolicy = cameraXModePolicy; updateProgressAnimator.setInterpolator(new LinearInterpolator()); updateProgressAnimator.addUpdateListener(anim -> captureButton.setProgress(anim.getAnimatedFraction())); @@ -123,6 +127,7 @@ private void displayAudioRecordingPermissionsDialog() { @SuppressLint("RestrictedApi") private void beginCameraRecording() { + cameraXModePolicy.setToVideo(cameraController); this.cameraController.setZoomRatio(Objects.requireNonNull(this.cameraController.getZoomState().getValue()).getMinZoomRatio()); callback.onVideoRecordStarted(); shrinkCaptureArea(); @@ -196,6 +201,7 @@ public void onVideoCaptureComplete() { updateProgressAnimator.cancel(); debouncer.clear(); + cameraXModePolicy.setToImage(cameraController); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/camerax/CameraXModePolicy.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/camerax/CameraXModePolicy.kt new file mode 100644 index 0000000000..a4bc5d808b --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/camerax/CameraXModePolicy.kt @@ -0,0 +1,92 @@ +package org.thoughtcrime.securesms.mediasend.camerax + +import android.content.Context +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.camera.view.CameraController +import androidx.camera.view.video.ExperimentalVideo +import org.signal.core.util.asListContains +import org.thoughtcrime.securesms.mms.MediaConstraints +import org.thoughtcrime.securesms.util.FeatureFlags +import org.thoughtcrime.securesms.video.VideoUtil + +/** + * Describes device capabilities + */ +@RequiresApi(21) +@ExperimentalVideo +sealed class CameraXModePolicy { + + abstract val isVideoSupported: Boolean + + abstract fun initialize(cameraController: CameraController) + + open fun setToImage(cameraController: CameraController) = Unit + + open fun setToVideo(cameraController: CameraController) = Unit + + /** + * The device supports having Image and Video enabled at the same time + */ + object Mixed : CameraXModePolicy() { + + override val isVideoSupported: Boolean = true + + override fun initialize(cameraController: CameraController) { + cameraController.setEnabledUseCases(CameraController.IMAGE_CAPTURE or CameraController.VIDEO_CAPTURE) + } + } + + /** + * The device supports image and video, but only one mode at a time. + */ + object Single : CameraXModePolicy() { + + override val isVideoSupported: Boolean = true + + override fun initialize(cameraController: CameraController) { + setToImage(cameraController) + } + + override fun setToImage(cameraController: CameraController) { + cameraController.setEnabledUseCases(CameraController.IMAGE_CAPTURE) + } + + override fun setToVideo(cameraController: CameraController) { + cameraController.setEnabledUseCases(CameraController.VIDEO_CAPTURE) + } + } + + /** + * The device supports taking images only. + */ + object ImageOnly : CameraXModePolicy() { + + override val isVideoSupported: Boolean = false + + override fun initialize(cameraController: CameraController) { + cameraController.setEnabledUseCases(CameraController.IMAGE_CAPTURE) + } + } + + companion object { + @JvmStatic + fun acquire(context: Context, mediaConstraints: MediaConstraints, isVideoEnabled: Boolean): CameraXModePolicy { + val isVideoSupported = Build.VERSION.SDK_INT >= 26 && + isVideoEnabled && + MediaConstraints.isVideoTranscodeAvailable() && + VideoUtil.getMaxVideoRecordDurationInSeconds(context, mediaConstraints) > 0 + + val isMixedModeSupported = isVideoSupported && + Build.VERSION.SDK_INT >= 26 && + CameraXUtil.isMixedModeSupported(context) && + !FeatureFlags.cameraXMixedModelBlocklist().asListContains(Build.MODEL) + + return when { + isMixedModeSupported -> Mixed + isVideoSupported -> Single + else -> ImageOnly + } + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt index 40f201d544..564cf727a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt @@ -26,6 +26,10 @@ class MediaCaptureViewModel(private val repository: MediaCaptureRepository) : Vi } } + override fun onCleared() { + store.dispose() + } + fun onImageCaptured(data: ByteArray, width: Int, height: Int) { repository.renderImageToMedia(data, width, height, this::onMediaRendered, this::onMediaRenderFailed) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt index b55934e848..331c8ccfed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt @@ -24,6 +24,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.widget.ViewPager2 import app.cash.exhaustive.Exhaustive import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import org.signal.core.util.concurrent.SimpleTask import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey import org.thoughtcrime.securesms.conversation.MessageSendType @@ -41,6 +42,7 @@ import org.thoughtcrime.securesms.mediasend.v2.stories.StoriesMultiselectForward import org.thoughtcrime.securesms.mms.SentMediaQuality import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.scribbles.ImageEditorFragment import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter @@ -158,17 +160,43 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment) { } sendButton.setOnClickListener { + val viewOnce: Boolean = sharedViewModel.state.value?.viewOnceToggleState == MediaSelectionState.ViewOnceToggleState.ONCE + if (sharedViewModel.isContactSelectionRequired) { val args = MultiselectForwardFragmentArgs( false, title = R.string.MediaReviewFragment__send_to, storySendRequirements = sharedViewModel.getStorySendRequirements(), - isSearchEnabled = !sharedViewModel.isStory() + isSearchEnabled = !sharedViewModel.isStory(), + isViewOnce = viewOnce ) if (sharedViewModel.isStory()) { - val previews = sharedViewModel.state.value?.selectedMedia?.take(2)?.map { it.uri } ?: emptyList() - storiesLauncher.launch(StoriesMultiselectForwardActivity.Args(args, previews)) + val snapshot = sharedViewModel.state.value + + if (snapshot != null) { + sendButton.isEnabled = false + SimpleTask.run(viewLifecycleOwner.lifecycle, { + snapshot.selectedMedia.take(2).map { media -> + val editorData = snapshot.editorStateMap[media.uri] + if (MediaUtil.isImageType(media.mimeType) && editorData != null && editorData is ImageEditorFragment.Data) { + val model = editorData.readModel() + if (model != null) { + ImageEditorFragment.renderToSingleUseBlob(requireContext(), model) + } else { + media.uri + } + } else { + media.uri + } + } + }, { + sendButton.isEnabled = true + storiesLauncher.launch(StoriesMultiselectForwardActivity.Args(args, it)) + }) + } else { + storiesLauncher.launch(StoriesMultiselectForwardActivity.Args(args, emptyList())) + } } else { multiselectLauncher.launch(args) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseGroupStoryBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseGroupStoryBottomSheet.kt index e91ebd9636..e2e7c72ea3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseGroupStoryBottomSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseGroupStoryBottomSheet.kt @@ -32,11 +32,9 @@ class ChooseGroupStoryBottomSheet : FixedRoundedCornerBottomSheetDialogFragment( const val RESULT_SET = "groups" } - private lateinit var confirmButton: View - private lateinit var selectedList: RecyclerView - private lateinit var backgroundHelper: View private lateinit var divider: View private lateinit var mediator: ContactSearchMediator + private lateinit var innerContainer: View private var animatorSet: AnimatorSet? = null @@ -50,14 +48,14 @@ class ChooseGroupStoryBottomSheet : FixedRoundedCornerBottomSheetDialogFragment( val container = view.parent.parent.parent as FrameLayout val bottomBar = LayoutInflater.from(requireContext()).inflate(R.layout.stories_choose_group_bottom_bar, container, true) - confirmButton = bottomBar.findViewById(R.id.share_confirm) - selectedList = bottomBar.findViewById(R.id.selected_list) - backgroundHelper = bottomBar.findViewById(R.id.background_helper) + innerContainer = bottomBar.findViewById(R.id.inner_container) divider = bottomBar.findViewById(R.id.divider) val adapter = ShareSelectionAdapter() + val selectedList: RecyclerView = bottomBar.findViewById(R.id.selected_list) selectedList.adapter = adapter + val confirmButton: View = bottomBar.findViewById(R.id.share_confirm) confirmButton.setOnClickListener { onDone() } @@ -75,7 +73,7 @@ class ChooseGroupStoryBottomSheet : FixedRoundedCornerBottomSheetDialogFragment( addSection( ContactSearchConfiguration.Section.Groups( includeHeader = false, - returnAsGroupStories = true, + shortSummary = true, sortOrder = ContactSearchSortOrder.RECENCY ) ) @@ -86,7 +84,7 @@ class ChooseGroupStoryBottomSheet : FixedRoundedCornerBottomSheetDialogFragment( mediator.getSelectionState().observe(viewLifecycleOwner) { state -> adapter.submitList( - state.filterIsInstance(ContactSearchKey.RecipientSearchKey.Story::class.java) + state.filterIsInstance(ContactSearchKey.RecipientSearchKey.KnownRecipient::class.java) .map { it.recipientId } .mapIndexed { index, recipientId -> ShareSelectionMappingModel( @@ -118,9 +116,7 @@ class ChooseGroupStoryBottomSheet : FixedRoundedCornerBottomSheetDialogFragment( animatorSet?.cancel() animatorSet = AnimatorSet().apply { playTogether( - ObjectAnimator.ofFloat(confirmButton, View.ALPHA, 1f), - ObjectAnimator.ofFloat(selectedList, View.TRANSLATION_Y, 0f), - ObjectAnimator.ofFloat(backgroundHelper, View.TRANSLATION_Y, 0f), + ObjectAnimator.ofFloat(innerContainer, View.TRANSLATION_Y, 0f), ObjectAnimator.ofFloat(divider, View.TRANSLATION_Y, 0f) ) start() @@ -128,14 +124,12 @@ class ChooseGroupStoryBottomSheet : FixedRoundedCornerBottomSheetDialogFragment( } private fun animateOutBottomBar() { - val translationY = DimensionUnit.DP.toPixels(48f) + val translationY = DimensionUnit.SP.toPixels(68f) animatorSet?.cancel() animatorSet = AnimatorSet().apply { playTogether( - ObjectAnimator.ofFloat(confirmButton, View.ALPHA, 0f), - ObjectAnimator.ofFloat(selectedList, View.TRANSLATION_Y, translationY), - ObjectAnimator.ofFloat(backgroundHelper, View.TRANSLATION_Y, translationY), + ObjectAnimator.ofFloat(innerContainer, View.TRANSLATION_Y, translationY), ObjectAnimator.ofFloat(divider, View.TRANSLATION_Y, translationY) ) start() @@ -150,7 +144,7 @@ class ChooseGroupStoryBottomSheet : FixedRoundedCornerBottomSheetDialogFragment( RESULT_SET, ArrayList( mediator.getSelectedContacts() - .filterIsInstance(ContactSearchKey.RecipientSearchKey.Story::class.java) + .filterIsInstance(ContactSearchKey.RecipientSearchKey.KnownRecipient::class.java) .map { it.recipientId } ) ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseStoryTypeBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseStoryTypeBottomSheet.kt index f3e0a7cf33..f5b5e49f34 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseStoryTypeBottomSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseStoryTypeBottomSheet.kt @@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.components.settings.conversation.preferences.L import org.thoughtcrime.securesms.util.fragments.requireListener class ChooseStoryTypeBottomSheet : DSLSettingsBottomSheetFragment( - layoutId = R.layout.dsl_settings_bottom_sheet_no_handle + layoutId = R.layout.dsl_settings_bottom_sheet ) { override fun bindAdapter(adapter: DSLSettingsAdapter) { LargeIconClickPreference.register(adapter) @@ -24,7 +24,7 @@ class ChooseStoryTypeBottomSheet : DSLSettingsBottomSheetFragment( textPref( title = DSLSettingsText.from( stringId = R.string.ChooseStoryTypeBottomSheet__choose_your_story_type, - DSLSettingsText.CenterModifier, DSLSettingsText.Body1BoldModifier, DSLSettingsText.BoldModifier + DSLSettingsText.CenterModifier, DSLSettingsText.TitleMediumModifier ) ) @@ -37,11 +37,11 @@ class ChooseStoryTypeBottomSheet : DSLSettingsBottomSheetFragment( stringId = R.string.ChooseStoryTypeBottomSheet__visible_only_to ), icon = DSLSettingsIcon.from( - R.drawable.ic_plus_24, - R.color.signal_icon_tint_primary, - R.drawable.circle_tintable, - R.color.signal_button_secondary_ripple, - DimensionUnit.DP.toPixels(8f).toInt() + iconId = R.drawable.ic_plus_24, + iconTintId = R.color.signal_colorOnSurface, + backgroundId = R.drawable.circle_tintable, + backgroundTint = R.color.signal_colorSurface5, + insetPx = DimensionUnit.DP.toPixels(8f).toInt() ), onClick = { dismissAllowingStateLoss() @@ -59,11 +59,11 @@ class ChooseStoryTypeBottomSheet : DSLSettingsBottomSheetFragment( stringId = R.string.ChooseStoryTypeBottomSheet__share_to_an_existing_group ), icon = DSLSettingsIcon.from( - R.drawable.ic_group_outline_24, - R.color.signal_icon_tint_primary, - R.drawable.circle_tintable, - R.color.signal_button_secondary_ripple, - DimensionUnit.DP.toPixels(8f).toInt() + iconId = R.drawable.ic_group_outline_24, + iconTintId = R.color.signal_colorOnSurface, + backgroundId = R.drawable.circle_tintable, + backgroundTint = R.color.signal_colorSurface5, + insetPx = DimensionUnit.DP.toPixels(8f).toInt() ), onClick = { dismissAllowingStateLoss() diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetails.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetails.java index cb8b30beec..03d141fac2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetails.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetails.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.TreeSet; -final class MessageDetails { +public final class MessageDetails { private static final Comparator HAS_DISPLAY_NAME = (r1, r2) -> Boolean.compare(r2.getRecipient().hasAUserSetDisplayName(ApplicationDependencies.getApplication()), r1.getRecipient().hasAUserSetDisplayName(ApplicationDependencies.getApplication())); private static final Comparator ALPHABETICAL = (r1, r2) -> r1.getRecipient().getDisplayName(ApplicationDependencies.getApplication()).compareToIgnoreCase(r2.getRecipient().getDisplayName(ApplicationDependencies.getApplication())); private static final Comparator RECIPIENT_COMPARATOR = ComparatorCompat.chain(HAS_DISPLAY_NAME).thenComparing(ALPHABETICAL); @@ -71,33 +71,33 @@ final class MessageDetails { } } - @NonNull ConversationMessage getConversationMessage() { + public @NonNull ConversationMessage getConversationMessage() { return conversationMessage; } - @NonNull Collection getPending() { + public @NonNull Collection getPending() { return pending; } - @NonNull Collection getSent() { + public @NonNull Collection getSent() { return sent; } - @NonNull Collection getSkipped() {return skipped;} + public @NonNull Collection getSkipped() {return skipped;} - @NonNull Collection getDelivered() { + public @NonNull Collection getDelivered() { return delivered; } - @NonNull Collection getRead() { + public @NonNull Collection getRead() { return read; } - @NonNull Collection getNotSent() { + public @NonNull Collection getNotSent() { return notSent; } - @NonNull Collection getViewed() { + public @NonNull Collection getViewed() { return viewed; } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java index 8d92baf1c9..60efc0c5c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java @@ -10,9 +10,11 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory; +import org.thoughtcrime.securesms.database.DatabaseObserver; import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.database.GroupReceiptDatabase; import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; import org.thoughtcrime.securesms.database.documents.NetworkFailure; @@ -24,7 +26,10 @@ import java.util.LinkedList; import java.util.List; -final class MessageDetailsRepository { +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.schedulers.Schedulers; + +public final class MessageDetailsRepository { private final Context context = ApplicationDependencies.getApplication(); @@ -44,11 +49,33 @@ final class MessageDetailsRepository { return liveData; } + public @NonNull Observable getMessageDetails(@NonNull MessageId messageId) { + return Observable.create(emitter -> { + DatabaseObserver.MessageObserver messageObserver = mId -> { + try { + MessageRecord messageRecord = messageId.isMms() ? SignalDatabase.mms().getMessageRecord(messageId.getId()) + : SignalDatabase.sms().getMessageRecord(messageId.getId()); + + MessageDetails messageDetails = getRecipientDeliveryStatusesInternal(messageRecord); + + emitter.onNext(messageDetails); + } catch (NoSuchMessageException e) { + emitter.onError(e); + } + }; + + ApplicationDependencies.getDatabaseObserver().registerMessageUpdateObserver(messageObserver); + emitter.setCancellable(() -> ApplicationDependencies.getDatabaseObserver().unregisterObserver(messageObserver)); + + messageObserver.onMessageChanged(messageId); + }).observeOn(Schedulers.io()); + } + @WorkerThread private @NonNull MessageDetails getRecipientDeliveryStatusesInternal(@NonNull MessageRecord messageRecord) { List recipients = new LinkedList<>(); - if (!messageRecord.getRecipient().isGroup()) { + if (!messageRecord.getRecipient().isGroup() && !messageRecord.getRecipient().isDistributionList()) { recipients.add(new RecipientDeliveryStatus(messageRecord, messageRecord.getRecipient(), getStatusFor(messageRecord), diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientDeliveryStatus.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientDeliveryStatus.java index 1f2d9e247f..baee7b158a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientDeliveryStatus.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/RecipientDeliveryStatus.java @@ -8,7 +8,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.recipients.Recipient; -final class RecipientDeliveryStatus { +public final class RecipientDeliveryStatus { enum Status { UNKNOWN, PENDING, SENT, DELIVERED, READ, VIEWED, SKIPPED, @@ -32,31 +32,31 @@ enum Status { this.keyMismatchFailure = keyMismatchFailure; } - @NonNull MessageRecord getMessageRecord() { + public @NonNull MessageRecord getMessageRecord() { return messageRecord; } - @NonNull Status getDeliveryStatus() { + public @NonNull Status getDeliveryStatus() { return deliveryStatus; } - boolean isUnidentified() { + public boolean isUnidentified() { return isUnidentified; } - long getTimestamp() { + public long getTimestamp() { return timestamp; } - @NonNull Recipient getRecipient() { + public @NonNull Recipient getRecipient() { return recipient; } - @Nullable NetworkFailure getNetworkFailure() { + public @Nullable NetworkFailure getNetworkFailure() { return networkFailure; } - @Nullable IdentityKeyMismatch getKeyMismatchFailure() { + public @Nullable IdentityKeyMismatch getKeyMismatchFailure() { return keyMismatchFailure; } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java index 5b083501ca..60e0438df5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java @@ -45,6 +45,7 @@ import org.whispersystems.signalservice.api.push.DistributionId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.NotFoundException; +import org.whispersystems.signalservice.api.util.Preconditions; import org.whispersystems.signalservice.internal.push.exceptions.InvalidUnidentifiedAccessHeaderException; import org.whispersystems.signalservice.internal.push.http.CancelationSignal; import org.whispersystems.signalservice.internal.push.http.PartialSendCompleteListener; @@ -82,19 +83,41 @@ private GroupSendUtil() {} * * @param groupId The groupId of the group you're sending to, or null if you're sending to a collection of recipients not joined by a group. * @param isRecipientUpdate True if you've already sent this message to some recipients in the past, otherwise false. + * @param isForStory True if the message is related to a story, and should be sent with the story flag on the envelope */ @WorkerThread public static List sendResendableDataMessage(@NonNull Context context, @Nullable GroupId.V2 groupId, + @Nullable DistributionListId distributionListId, @NonNull List allTargets, boolean isRecipientUpdate, ContentHint contentHint, @NonNull MessageId messageId, @NonNull SignalServiceDataMessage message, - boolean urgent) + boolean urgent, + boolean isForStory) throws IOException, UntrustedIdentityException { - return sendMessage(context, groupId, getDistributionId(groupId), messageId, allTargets, isRecipientUpdate, DataSendOperation.resendable(message, contentHint, messageId, urgent), null); + Preconditions.checkArgument(groupId == null || distributionListId == null, "Cannot supply both a groupId and a distributionListId!"); + + DistributionId distributionId = groupId != null ? getDistributionId(groupId) : getDistributionId(distributionListId); + + return sendMessage(context, groupId, distributionId, messageId, allTargets, isRecipientUpdate, isForStory, DataSendOperation.resendable(message, contentHint, messageId, urgent, isForStory), null); + } + + @WorkerThread + public static List sendResendableStoryRelatedMessage(@NonNull Context context, + @Nullable GroupId.V2 groupId, + @NonNull DistributionListId distributionListId, + @NonNull List allTargets, + boolean isRecipientUpdate, + ContentHint contentHint, + @NonNull MessageId messageId, + @NonNull SignalServiceDataMessage message, + boolean urgent) + throws IOException, UntrustedIdentityException + { + return sendMessage(context, groupId, getDistributionId(distributionListId), messageId, allTargets, isRecipientUpdate, true, DataSendOperation.resendable(message, contentHint, messageId, urgent, true), null); } /** @@ -116,7 +139,7 @@ public static List sendUnresendableDataMessage(@NonNull Conte boolean urgent) throws IOException, UntrustedIdentityException { - return sendMessage(context, groupId, getDistributionId(groupId), null, allTargets, isRecipientUpdate, DataSendOperation.unresendable(message, contentHint, urgent), null); + return sendMessage(context, groupId, getDistributionId(groupId), null, allTargets, isRecipientUpdate, false, DataSendOperation.unresendable(message, contentHint, urgent), null); } /** @@ -133,7 +156,7 @@ public static List sendTypingMessage(@NonNull Context context @Nullable CancelationSignal cancelationSignal) throws IOException, UntrustedIdentityException { - return sendMessage(context, groupId, getDistributionId(groupId), null, allTargets, false, new TypingSendOperation(message), cancelationSignal); + return sendMessage(context, groupId, getDistributionId(groupId), null, allTargets, false, false, new TypingSendOperation(message), cancelationSignal); } /** @@ -149,11 +172,11 @@ public static List sendCallMessage(@NonNull Context context, @NonNull SignalServiceCallMessage message) throws IOException, UntrustedIdentityException { - return sendMessage(context, groupId, getDistributionId(groupId), null, allTargets, false, new CallSendOperation(message), null); + return sendMessage(context, groupId, getDistributionId(groupId), null, allTargets, false, false, new CallSendOperation(message), null); } /** - * Handles all of the logic of sending a story to a group. Will do sender key sends and legacy 1:1 sends as-needed, and give you back a list of + * Handles all of the logic of sending a story to a distribution list. Will do sender key sends and legacy 1:1 sends as-needed, and give you back a list of * {@link SendMessageResult}s just like we're used to. * * @param isRecipientUpdate True if you've already sent this message to some recipients in the past, otherwise false. @@ -175,6 +198,7 @@ public static List sendStoryMessage(@NonNull Context context, messageId, allTargets, isRecipientUpdate, + true, new StorySendOperation(messageId, null, sentTimestamp, message, manifest), null); } @@ -201,6 +225,7 @@ public static List sendGroupStoryMessage(@NonNull Context con messageId, allTargets, isRecipientUpdate, + true, new StorySendOperation(messageId, groupId, sentTimestamp, message, Collections.emptySet()), null); } @@ -219,6 +244,7 @@ private static List sendMessage(@NonNull Context context, @Nullable MessageId relatedMessageId, @NonNull List allTargets, boolean isRecipientUpdate, + boolean isStorySend, @NonNull SendOperation sendOperation, @Nullable CancelationSignal cancelationSignal) throws IOException, UntrustedIdentityException @@ -228,7 +254,7 @@ private static List sendMessage(@NonNull Context context, Set unregisteredTargets = allTargets.stream().filter(Recipient::isUnregistered).collect(Collectors.toSet()); List registeredTargets = allTargets.stream().filter(r -> !unregisteredTargets.contains(r)).collect(Collectors.toList()); - RecipientData recipients = new RecipientData(context, registeredTargets); + RecipientData recipients = new RecipientData(context, registeredTargets, isStorySend); Optional groupRecord = groupId != null ? SignalDatabase.groups().getGroup(groupId) : Optional.empty(); List senderKeyTargets = new LinkedList<>(); @@ -242,8 +268,7 @@ private static List sendMessage(@NonNull Context context, validMembership = false; } - if (recipient.getSenderKeyCapability() == Recipient.Capability.SUPPORTED && - recipient.hasServiceId() && + if (recipient.hasServiceId() && access.isPresent() && access.get().getTargetUnidentifiedAccess().isPresent() && validMembership) @@ -258,10 +283,11 @@ private static List sendMessage(@NonNull Context context, Log.i(TAG, "No DistributionId. Using legacy."); legacyTargets.addAll(senderKeyTargets); senderKeyTargets.clear(); - } else if (Recipient.self().getSenderKeyCapability() != Recipient.Capability.SUPPORTED) { - Log.i(TAG, "All of our devices do not support sender key. Using legacy."); - legacyTargets.addAll(senderKeyTargets); + } else if (isStorySend) { + Log.i(TAG, "Sending a story. Using sender key for all " + allTargets.size() + " recipients."); senderKeyTargets.clear(); + senderKeyTargets.addAll(registeredTargets); + legacyTargets.clear(); } else if (SignalStore.internalValues().removeSenderKeyMinimum()) { Log.i(TAG, "Sender key minimum removed. Using for " + senderKeyTargets.size() + " recipients."); } else if (senderKeyTargets.size() < 2) { @@ -438,21 +464,23 @@ private static class DataSendOperation implements SendOperation { private final MessageId relatedMessageId; private final boolean resendable; private final boolean urgent; + private final boolean isForStory; - public static DataSendOperation resendable(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint, @NonNull MessageId relatedMessageId, boolean urgent) { - return new DataSendOperation(message, contentHint, true, relatedMessageId, urgent); + public static DataSendOperation resendable(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint, @NonNull MessageId relatedMessageId, boolean urgent, boolean isForStory) { + return new DataSendOperation(message, contentHint, true, relatedMessageId, urgent, isForStory); } public static DataSendOperation unresendable(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint, boolean urgent) { - return new DataSendOperation(message, contentHint, false, null, urgent); + return new DataSendOperation(message, contentHint, false, null, urgent, false); } - private DataSendOperation(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint, boolean resendable, @Nullable MessageId relatedMessageId, boolean urgent) { + private DataSendOperation(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint, boolean resendable, @Nullable MessageId relatedMessageId, boolean urgent, boolean isForStory) { this.message = message; this.contentHint = contentHint; this.resendable = resendable; this.relatedMessageId = relatedMessageId; this.urgent = urgent; + this.isForStory = isForStory; if (resendable && relatedMessageId == null) { throw new IllegalArgumentException("If a message is resendable, it must have a related message ID!"); @@ -468,7 +496,7 @@ private DataSendOperation(@NonNull SignalServiceDataMessage message, @NonNull Co throws NoSessionException, UntrustedIdentityException, InvalidKeyException, IOException, InvalidRegistrationIdException { SenderKeyGroupEvents listener = relatedMessageId != null ? new SenderKeyMetricEventListener(relatedMessageId.getId()) : SenderKeyGroupEvents.EMPTY; - return messageSender.sendGroupDataMessage(distributionId, targets, access, isRecipientUpdate, contentHint, message, listener, urgent); + return messageSender.sendGroupDataMessage(distributionId, targets, access, isRecipientUpdate, contentHint, message, listener, urgent, isForStory); } @Override @@ -481,6 +509,7 @@ private DataSendOperation(@NonNull SignalServiceDataMessage message, @NonNull Co @Nullable CancelationSignal cancelationSignal) throws IOException, UntrustedIdentityException { + // PniSignatures are only needed for 1:1 messages, but some message jobs use the GroupSendUtil methods to send 1:1 if (targets.size() == 1 && relatedMessageId == null) { Recipient targetRecipient = targetRecipients.get(0); SendMessageResult result = messageSender.sendDataMessage(targets.get(0), access.get(0), contentHint, message, SignalServiceMessageSender.IndividualSendEvents.EMPTY, urgent, targetRecipient.needsPniSignature()); @@ -686,7 +715,14 @@ public StorySendOperation(@NonNull MessageId relatedMessageId, @Nullable CancelationSignal cancelationSignal) throws IOException, UntrustedIdentityException { - return messageSender.sendStory(targets, access, isRecipientUpdate, message, getSentTimestamp(), manifest); + // We only allow legacy sends if you're sending to an empty group and just need to send a sync message. + if (targets.isEmpty()) { + Log.w(TAG, "Only sending a sync message."); + messageSender.sendStorySyncMessage(message, getSentTimestamp(), isRecipientUpdate, manifest); + return Collections.emptyList(); + } else { + throw new UnsupportedOperationException("Stories can only be send via sender key!"); + } } @Override @@ -772,8 +808,8 @@ private static final class RecipientData { private final Map addressById; private final RecipientAccessList accessList; - RecipientData(@NonNull Context context, @NonNull List recipients) throws IOException { - this.accessById = UnidentifiedAccessUtil.getAccessMapFor(context, recipients); + RecipientData(@NonNull Context context, @NonNull List recipients, boolean isForStory) throws IOException { + this.accessById = UnidentifiedAccessUtil.getAccessMapFor(context, recipients, isForStory); this.addressById = mapAddresses(context, recipients); this.accessList = new RecipientAccessList(recipients); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java index 1843fdd71e..9d4fc55b94 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java @@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.service.KeyCachingService; +import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.util.AppForegroundObserver; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.signalservice.api.SignalWebSocket; @@ -77,6 +78,8 @@ public IncomingMessageObserver(@NonNull Application context) { new MessageRetrievalThread().start(); + // MOLLY: Foreground service startup is handled to the connection loop + ApplicationDependencies.getAppForegroundObserver().addListener(new AppForegroundObserver.Listener() { @Override public void onForeground() { @@ -158,13 +161,14 @@ private synchronized boolean isConnectionNecessary() { return false; } - boolean registered = SignalStore.account().isRegistered(); - boolean fcmEnabled = SignalStore.account().isFcmEnabled(); - boolean hasNetwork = NetworkConstraint.isMet(context); - boolean hasProxy = ApplicationDependencies.getNetworkManager().isProxyEnabled(); - long oldRequest = System.currentTimeMillis() - OLD_REQUEST_WINDOW_MS; + boolean registered = SignalStore.account().isRegistered(); + boolean fcmEnabled = SignalStore.account().isFcmEnabled(); + boolean hasNetwork = NetworkConstraint.isMet(context); + boolean hasProxy = ApplicationDependencies.getNetworkManager().isProxyEnabled(); + boolean forceWebsocket = SignalStore.internalValues().isWebsocketModeForced(); + long oldRequest = System.currentTimeMillis() - OLD_REQUEST_WINDOW_MS; - if (!fcmEnabled && registered && !isForegroundService) { + if ((!fcmEnabled || forceWebsocket) && registered && !isForegroundService) { ContextCompat.startForegroundService(context, new Intent(context, ForegroundService.class)); isForegroundService = true; } @@ -174,11 +178,11 @@ private synchronized boolean isConnectionNecessary() { Log.d(TAG, "Removed old keep web socket open requests."); } - Log.d(TAG, String.format("Network: %s, Foreground: %s, FCM: %s, Stay open requests: [%s], Censored: %s, Registered: %s, Proxy: %s", - hasNetwork, appVisible, fcmEnabled, Util.join(keepAliveTokens.entrySet(), ","), networkAccess.isCensored(), registered, hasProxy)); + Log.d(TAG, String.format("Network: %s, Foreground: %s, FCM: %s, Stay open requests: [%s], Censored: %s, Registered: %s, Proxy: %s, Force websocket: %s", + hasNetwork, appVisible, fcmEnabled, Util.join(keepAliveTokens.entrySet(), ","), networkAccess.isCensored(), registered, hasProxy, forceWebsocket)); return registered && - (appVisible || !fcmEnabled || Util.hasItems(keepAliveTokens)) && + (appVisible || !fcmEnabled || forceWebsocket || Util.hasItems(keepAliveTokens)) && hasNetwork && !networkAccess.isCensored(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java index ec0bfdf1cd..4c77d3ecbc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -1641,6 +1641,10 @@ private void handleStoryMessage(@NonNull SignalServiceContent content, @NonNull Recipient threadRecipient = Objects.requireNonNull(SignalDatabase.threads().getRecipientForThreadId(story.getThreadId())); boolean groupStory = threadRecipient.isActiveGroup(); + if (!groupStory) { + threadRecipient = senderRecipient; + } + handlePossibleExpirationUpdate(content, message, threadRecipient.getGroupId(), senderRecipient, threadRecipient, receivedTime); if (message.getGroupContext().isPresent() ) { @@ -1883,7 +1887,7 @@ private long handleSynchronizeSentStoryReply(@NonNull SentTranscriptMessage mess } quoteModel = new QuoteModel(storyContext.getSentTimestamp(), storyAuthorRecipient, quoteBody, false, story.getSlideDeck().asAttachments(), Collections.emptyList(), QuoteModel.Type.NORMAL); - expiresInMillis = TimeUnit.SECONDS.toMillis(message.getExpirationStartTimestamp()); + expiresInMillis = TimeUnit.SECONDS.toMillis(message.getDataMessage().get().getExpiresInSeconds()); } else { warn(envelopeTimestamp, "Story has replies disabled. Dropping reply."); return -1L; @@ -2955,8 +2959,13 @@ private Recipient getSyncMessageDestination(@NonNull SentTranscriptMessage messa } private Recipient getMessageDestination(@NonNull SignalServiceContent content) throws BadGroupIdException { - SignalServiceDataMessage message = content.getDataMessage().orElse(null); - return getGroupRecipient(message != null ? message.getGroupContext() : Optional.empty()).orElseGet(() -> Recipient.externalPush(content.getSender())); + if (content.getStoryMessage().isPresent()) { + SignalServiceStoryMessage message = content.getStoryMessage().get(); + return getGroupRecipient(message.getGroupContext()).orElseGet(() -> Recipient.externalPush(content.getSender())); + } else { + SignalServiceDataMessage message = content.getDataMessage().orElse(null); + return getGroupRecipient(message != null ? message.getGroupContext() : Optional.empty()).orElseGet(() -> Recipient.externalPush(content.getSender())); + } } private Optional getGroupRecipient(Optional message) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java index e97fa69dbf..819a9c9239 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java @@ -127,7 +127,7 @@ private MessageDecryptionUtil() {} Log.w(TAG, String.valueOf(envelope.getTimestamp()), e, true); Recipient sender = Recipient.external(context, e.getSender()); - if (sender.supportsMessageRetries() && Recipient.self().supportsMessageRetries() && FeatureFlags.retryReceipts()) { + if (FeatureFlags.retryReceipts()) { jobs.add(handleRetry(context, sender, envelope, e)); postInternalErrorNotification(context); } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/RestStrategy.java b/app/src/main/java/org/thoughtcrime/securesms/messages/RestStrategy.java index 99333ee060..ac5607c607 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/RestStrategy.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/RestStrategy.java @@ -10,6 +10,8 @@ import org.thoughtcrime.securesms.jobs.MarkerJob; import org.thoughtcrime.securesms.jobs.PushDecryptMessageJob; import org.thoughtcrime.securesms.jobs.PushProcessMessageJob; +import org.thoughtcrime.securesms.keyvalue.SignalStore; +import org.thoughtcrime.securesms.stories.Stories; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import java.io.IOException; @@ -82,7 +84,7 @@ private static int enqueuePushDecryptJobs(IncomingMessageProcessor.Processor pro receiver.setSoTimeoutMillis(timeout); - receiver.retrieveMessages(envelope -> { + receiver.retrieveMessages(Stories.isFeatureEnabled(), envelope -> { Log.i(TAG, "Retrieved an envelope." + timeSuffix(startTime)); String jobId = processor.processEnvelope(envelope); diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java index bd9043c320..3e22c58e84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java @@ -97,9 +97,10 @@ static final class Version { static final int REFRESH_PNI_REGISTRATION_ID = 64; static final int KBS_MIGRATION_2 = 65; static final int PNI_2 = 66; + static final int SYSTEM_NAME_SYNC = 67; } - public static final int CURRENT_VERSION = 66; + public static final int CURRENT_VERSION = 67; /** * This *must* be called after the {@link JobManager} has been instantiated, but *before* the call @@ -421,6 +422,10 @@ private static LinkedHashMap getMigrationJobs(@NonNull Co jobs.put(Version.PNI_2, new PniMigrationJob()); } + if (lastSeenVersion < Version.SYSTEM_NAME_SYNC) { + jobs.put(Version.SYSTEM_NAME_SYNC, new StorageServiceSystemNameMigrationJob()); + } + return jobs; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceSystemNameMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceSystemNameMigrationJob.java new file mode 100644 index 0000000000..4ccf03c0aa --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceSystemNameMigrationJob.java @@ -0,0 +1,56 @@ +package org.thoughtcrime.securesms.migrations; + +import androidx.annotation.NonNull; + +import org.thoughtcrime.securesms.database.SignalDatabase; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; +import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.Job; +import org.thoughtcrime.securesms.jobs.DownloadLatestEmojiDataJob; +import org.thoughtcrime.securesms.jobs.EmojiSearchIndexDownloadJob; +import org.thoughtcrime.securesms.storage.StorageSyncHelper; + +/** + * Added for when we started syncing contact names in storage service. + * Rotates the storageId of every system contact and then schedules a storage sync. + */ +public final class StorageServiceSystemNameMigrationJob extends MigrationJob { + + public static final String KEY = "StorageServiceSystemNameMigrationJob"; + + StorageServiceSystemNameMigrationJob() { + this(new Parameters.Builder().build()); + } + + private StorageServiceSystemNameMigrationJob(@NonNull Parameters parameters) { + super(parameters); + } + + @Override + public boolean isUiBlocking() { + return false; + } + + @Override + public @NonNull String getFactoryKey() { + return KEY; + } + + @Override + public void performMigration() { + SignalDatabase.recipients().markAllSystemContactsNeedsSync(); + StorageSyncHelper.scheduleSyncForDataChange(); + } + + @Override + boolean shouldRetry(@NonNull Exception e) { + return false; + } + + public static class Factory implements Job.Factory { + @Override + public @NonNull StorageServiceSystemNameMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + return new StorageServiceSystemNameMigrationJob(parameters); + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java index 61caa9e94f..2e7adbea06 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -52,8 +52,10 @@ import org.thoughtcrime.securesms.components.location.SignalPlace; import org.thoughtcrime.securesms.conversation.MessageSendType; import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.MediaDatabase; import org.thoughtcrime.securesms.giph.ui.GiphyActivity; import org.thoughtcrime.securesms.maps.PlacePickerActivity; +import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory; import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionActivity; import org.thoughtcrime.securesms.payments.create.CreatePaymentFragmentArgs; import org.thoughtcrime.securesms.payments.preferences.PaymentsActivity; @@ -469,13 +471,19 @@ private boolean areConstraintsSatisfied(final @NonNull Context context, private void previewImageDraft(final @NonNull Slide slide) { if (MediaPreviewActivity.isContentTypeSupported(slide.getContentType()) && slide.getUri() != null) { - Intent intent = new Intent(context, MediaPreviewActivity.class); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.putExtra(MediaPreviewActivity.SIZE_EXTRA, slide.asAttachment().getSize()); - intent.putExtra(MediaPreviewActivity.CAPTION_EXTRA, slide.getCaption().orElse(null)); - intent.setDataAndType(slide.getUri(), slide.getContentType()); - - context.startActivity(intent); + MediaIntentFactory.MediaPreviewArgs args = new MediaIntentFactory.MediaPreviewArgs( + MediaIntentFactory.NOT_IN_A_THREAD, + MediaIntentFactory.UNKNOWN_TIMESTAMP, + slide.getUri(), + slide.getContentType(), + slide.asAttachment().getSize(), + slide.getCaption().orElse(null), + false, + false, + false, + MediaDatabase.Sorting.Newest.ordinal(), + slide.isVideoGif()); + context.startActivity(MediaIntentFactory.create(context, args)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/NetworkManager.java b/app/src/main/java/org/thoughtcrime/securesms/net/NetworkManager.java index dafc3f090f..b27b6c5423 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/NetworkManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/net/NetworkManager.java @@ -164,7 +164,7 @@ public void onEnabled(Intent statusIntent) { if (proxyOrbotPort != socksPort) { if (proxyType == ProxyType.ORBOT) { if (configureProxy(new SocksProxy(OrbotHelper.DEFAULT_PROXY_HOST, socksPort))) { - ApplicationDependencies.restartNetworkConnectionsAfterProxyChange(); + ApplicationDependencies.restartAllNetworkConnections(); } } proxyOrbotPort = socksPort; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/backup/PaymentsRecoveryStartFragment.java b/app/src/main/java/org/thoughtcrime/securesms/payments/backup/PaymentsRecoveryStartFragment.java index 52783129b4..974766248f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/backup/PaymentsRecoveryStartFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/backup/PaymentsRecoveryStartFragment.java @@ -65,7 +65,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat message.setText(getDescription(state)); message.setLink(getString(R.string.PaymentsRecoveryStartFragment__learn_more__view)); startButton.setOnClickListener(v -> { - if (state == RecoveryPhraseStates.FROM_PAYMENTS_MENU_WITH_MNEMONIC_CONFIRMED && ServiceUtil.getKeyguardManager(requireContext()).isKeyguardSecure() && SignalStore.paymentsValues().getPaymentLock()) { + if (state == RecoveryPhraseStates.FROM_PAYMENTS_MENU_WITH_MNEMONIC_CONFIRMED && ServiceUtil.getKeyguardManager(requireContext()).isKeyguardSecure() && SignalStore.paymentsValues().isPaymentLockEnabled()) { BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo .Builder() .setAllowedAuthenticators(BiometricDeviceAuthentication.ALLOWED_AUTHENTICATORS) diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java index bac3bcf42b..2b9acdc058 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java @@ -211,7 +211,7 @@ private static CharSequence mono(Context context, CharSequence address) { private boolean isPaymentLockEnabled(Context context) { - return SignalStore.paymentsValues().getPaymentLock() && ServiceUtil.getKeyguardManager(context).isKeyguardSecure(); + return SignalStore.paymentsValues().isPaymentLockEnabled() && ServiceUtil.getKeyguardManager(context).isKeyguardSecure(); } private class Callbacks implements ConfirmPaymentAdapter.Callbacks { diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeFragment.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeFragment.java index c7788ce644..22e162d937 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeFragment.java @@ -222,6 +222,9 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat }); break; case ACTIVATED: + if (!SignalStore.paymentsValues().isPaymentLockEnabled()) { + SafeNavigation.safeNavigate(NavHostFragment.findNavController(this), R.id.action_paymentsHome_to_securitySetup); + } return; default: throw new IllegalStateException("Unsupported event type: " + paymentStateEvent.name()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeViewModel.java index 7cbde5424f..66bc21d477 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeViewModel.java @@ -203,6 +203,7 @@ public void activatePayments() { @Override public void onComplete(@Nullable Void result) { store.update(state -> state.updatePaymentsEnabled(PaymentsHomeState.PaymentsState.ACTIVATED)); + paymentStateEvents.postValue(PaymentStateEvent.ACTIVATED); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/securitysetup/PaymentsSecuritySetupFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/payments/securitysetup/PaymentsSecuritySetupFragment.kt new file mode 100644 index 0000000000..54f0696449 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/securitysetup/PaymentsSecuritySetupFragment.kt @@ -0,0 +1,46 @@ +package org.thoughtcrime.securesms.payments.securitysetup + +import android.os.Bundle +import android.view.View +import androidx.activity.OnBackPressedCallback +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.databinding.PaymentsSecuritySetupFragmentBinding +import org.thoughtcrime.securesms.payments.preferences.PaymentsHomeFragmentDirections +import org.thoughtcrime.securesms.util.navigation.safeNavigate + +/** + * Fragment to let user know to enable payment lock to protect their funds + */ +class PaymentsSecuritySetupFragment : Fragment(R.layout.payments_security_setup_fragment) { + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + val binding = PaymentsSecuritySetupFragmentBinding.bind(view) + + requireActivity().onBackPressedDispatcher.addCallback( + viewLifecycleOwner, + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + showSkipDialog() + } + } + ) + binding.paymentsSecuritySetupEnableLock.setOnClickListener { + findNavController().safeNavigate(PaymentsHomeFragmentDirections.actionPaymentsHomeToPrivacySettings(true)) + } + binding.paymentsSecuritySetupFragmentNotNow.setOnClickListener { showSkipDialog() } + binding.toolbar.setNavigationOnClickListener { showSkipDialog() } + } + + private fun showSkipDialog() { + MaterialAlertDialogBuilder(requireContext()) + .setTitle(getString(R.string.PaymentsSecuritySetupFragment__skip_this_step)) + .setMessage(getString(R.string.PaymentsSecuritySetupFragment__skipping_this_step)) + .setPositiveButton(R.string.PaymentsSecuritySetupFragment__skip) { _, _ -> findNavController().popBackStack() } + .setNegativeButton(R.string.PaymentsSecuritySetupFragment__cancel) { _, _ -> } + .setCancelable(false) + .show() + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/NetworkPreferenceFragment.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/NetworkPreferenceFragment.java index 1381b9162a..0df80feb0d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/NetworkPreferenceFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/NetworkPreferenceFragment.java @@ -146,7 +146,7 @@ private void applyProxyChanges(boolean alwaysRestart) { final boolean changed = networkManager.applyProxyConfig(); if (changed || alwaysRestart) { networkManager.setNetworkEnabled(true); - ApplicationDependencies.restartNetworkConnectionsAfterProxyChange(); + ApplicationDependencies.restartAllNetworkConnections(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanSeeMyPhoneNumberViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanSeeMyPhoneNumberViewModel.kt index a38c53ba02..0c8735cd49 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanSeeMyPhoneNumberViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanSeeMyPhoneNumberViewModel.kt @@ -29,5 +29,6 @@ class WhoCanSeeMyPhoneNumberViewModel : ViewModel() { override fun onCleared() { disposables.clear() + store.dispose() } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java index ef3b6afec4..68a50a55b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java @@ -65,6 +65,7 @@ private UsernameEditViewModel(boolean isInRegistration) { protected void onCleared() { super.onCleared(); disposables.clear(); + uiState.dispose(); } void onNicknameUpdated(@NonNull String nickname) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java index 17988ae954..e097dec820 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java @@ -36,6 +36,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListId; import org.thoughtcrime.securesms.database.model.ProfileAvatarFileDetails; +import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.database.model.databaseprotos.RecipientExtras; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; @@ -119,13 +120,7 @@ public class Recipient { private final String notificationChannel; private final UnidentifiedAccessMode unidentifiedAccessMode; private final boolean forceSmsSelection; - private final Capability groupsV1MigrationCapability; - private final Capability senderKeyCapability; - private final Capability announcementGroupCapability; - private final Capability changeNumberCapability; - private final Capability storiesCapability; - private final Capability giftBadgesCapability; - private final Capability pnpCapability; + private final RecipientRecord.Capabilities capabilities; private final InsightsBannerTier insightsBannerTier; private final byte[] storageId; private final MentionSetting mentionSetting; @@ -422,13 +417,7 @@ public static boolean isSelfSet() { this.notificationChannel = null; this.unidentifiedAccessMode = UnidentifiedAccessMode.DISABLED; this.forceSmsSelection = false; - this.groupsV1MigrationCapability = Capability.UNKNOWN; - this.senderKeyCapability = Capability.UNKNOWN; - this.announcementGroupCapability = Capability.UNKNOWN; - this.changeNumberCapability = Capability.UNKNOWN; - this.storiesCapability = Capability.UNKNOWN; - this.giftBadgesCapability = Capability.UNKNOWN; - this.pnpCapability = Capability.UNKNOWN; + this.capabilities = RecipientRecord.Capabilities.UNKNOWN; this.storageId = null; this.mentionSetting = MentionSetting.ALWAYS_NOTIFY; this.wallpaper = null; @@ -482,13 +471,7 @@ public Recipient(@NonNull RecipientId id, @NonNull RecipientDetails details, boo this.notificationChannel = details.notificationChannel; this.unidentifiedAccessMode = details.unidentifiedAccessMode; this.forceSmsSelection = details.forceSmsSelection; - this.groupsV1MigrationCapability = details.groupsV1MigrationCapability; - this.senderKeyCapability = details.senderKeyCapability; - this.announcementGroupCapability = details.announcementGroupCapability; - this.changeNumberCapability = details.changeNumberCapability; - this.storiesCapability = details.storiesCapability; - this.giftBadgesCapability = details.giftBadgesCapability; - this.pnpCapability = details.pnpCapability; + this.capabilities = details.capabilities; this.storageId = details.storageId; this.mentionSetting = details.mentionSetting; this.wallpaper = details.wallpaper; @@ -1027,39 +1010,20 @@ public boolean isForceSmsSelection() { return forceSmsSelection; } - public @NonNull Capability getGroupsV1MigrationCapability() { - return groupsV1MigrationCapability; - } - - public @NonNull Capability getSenderKeyCapability() { - return senderKeyCapability; - } - - public @NonNull Capability getAnnouncementGroupCapability() { - return announcementGroupCapability; - } - public @NonNull Capability getChangeNumberCapability() { - return changeNumberCapability; + return capabilities.getChangeNumberCapability(); } public @NonNull Capability getStoriesCapability() { - return storiesCapability; + return capabilities.getStoriesCapability(); } public @NonNull Capability getGiftBadgesCapability() { - return giftBadgesCapability; + return capabilities.getGiftBadgesCapability(); } public @NonNull Capability getPnpCapability() { - return pnpCapability; - } - - /** - * True if this recipient supports the message retry system, or false if we should use the legacy session reset system. - */ - public boolean supportsMessageRetries() { - return getSenderKeyCapability() == Capability.SUPPORTED; + return capabilities.getPnpCapability(); } public @Nullable byte[] getProfileKey() { @@ -1341,7 +1305,6 @@ public boolean hasSameContent(@NonNull Recipient other) { Objects.equals(profileAvatar, other.profileAvatar) && Objects.equals(notificationChannel, other.notificationChannel) && unidentifiedAccessMode == other.unidentifiedAccessMode && - groupsV1MigrationCapability == other.groupsV1MigrationCapability && insightsBannerTier == other.insightsBannerTier && Arrays.equals(storageId, other.storageId) && mentionSetting == other.mentionSetting && diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java index 98be1ce31a..4d854eb464 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java @@ -69,13 +69,7 @@ public class RecipientDetails { final String notificationChannel; final UnidentifiedAccessMode unidentifiedAccessMode; final boolean forceSmsSelection; - final Recipient.Capability groupsV1MigrationCapability; - final Recipient.Capability senderKeyCapability; - final Recipient.Capability announcementGroupCapability; - final Recipient.Capability changeNumberCapability; - final Recipient.Capability storiesCapability; - final Recipient.Capability giftBadgesCapability; - final Recipient.Capability pnpCapability; + final RecipientRecord.Capabilities capabilities; final InsightsBannerTier insightsBannerTier; final byte[] storageId; final MentionSetting mentionSetting; @@ -134,13 +128,7 @@ public RecipientDetails(@Nullable String groupName, this.notificationChannel = record.getNotificationChannel(); this.unidentifiedAccessMode = record.getUnidentifiedAccessMode(); this.forceSmsSelection = record.isForceSmsSelection(); - this.groupsV1MigrationCapability = record.getGroupsV1MigrationCapability(); - this.senderKeyCapability = record.getSenderKeyCapability(); - this.announcementGroupCapability = record.getAnnouncementGroupCapability(); - this.changeNumberCapability = record.getChangeNumberCapability(); - this.storiesCapability = record.getStoriesCapability(); - this.giftBadgesCapability = record.getGiftBadgesCapability(); - this.pnpCapability = record.getPnpCapability(); + this.capabilities = record.getCapabilities(); this.insightsBannerTier = record.getInsightsBannerTier(); this.storageId = record.getStorageId(); this.mentionSetting = record.getMentionSetting(); @@ -195,13 +183,7 @@ private RecipientDetails() { this.unidentifiedAccessMode = UnidentifiedAccessMode.UNKNOWN; this.forceSmsSelection = false; this.groupName = null; - this.groupsV1MigrationCapability = Recipient.Capability.UNKNOWN; - this.senderKeyCapability = Recipient.Capability.UNKNOWN; - this.announcementGroupCapability = Recipient.Capability.UNKNOWN; - this.changeNumberCapability = Recipient.Capability.UNKNOWN; - this.storiesCapability = Recipient.Capability.UNKNOWN; - this.giftBadgesCapability = Recipient.Capability.UNKNOWN; - this.pnpCapability = Recipient.Capability.UNKNOWN; + this.capabilities = RecipientRecord.Capabilities.UNKNOWN; this.storageId = null; this.mentionSetting = MentionSetting.ALWAYS_NOTIFY; this.wallpaper = null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheetViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheetViewModel.kt index 5cbd6847fa..2066277fa9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheetViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheetViewModel.kt @@ -66,6 +66,8 @@ class SafetyNumberBottomSheetViewModel( override fun onCleared() { disposables.clear() + destinationStore.dispose() + store.dispose() } fun getIdentityRecord(recipientId: RecipientId): Maybe { diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java index 10e59e9e8c..17e1974674 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.scribbles; import android.Manifest; +import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Bitmap; @@ -33,10 +34,10 @@ import org.signal.core.util.FontUtil; import org.signal.core.util.concurrent.SignalExecutors; +import org.signal.core.util.concurrent.SimpleTask; import org.signal.core.util.logging.Log; import org.signal.imageeditor.core.Bounds; import org.signal.imageeditor.core.ColorableRenderer; -import org.signal.imageeditor.core.HiddenEditText; import org.signal.imageeditor.core.ImageEditorView; import org.signal.imageeditor.core.Renderer; import org.signal.imageeditor.core.SelectableRenderer; @@ -48,7 +49,6 @@ import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.animation.ResizeAnimation; -import org.thoughtcrime.securesms.components.emoji.EmojiUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.fonts.FontTypefaceProvider; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -66,7 +66,6 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.ThrottledDebouncer; import org.thoughtcrime.securesms.util.ViewUtil; -import org.signal.core.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import java.io.ByteArrayOutputStream; @@ -791,8 +790,13 @@ private void performSaveToDisk() { @WorkerThread public @NonNull Uri renderToSingleUseBlob() { + return renderToSingleUseBlob(requireContext(), imageEditorView.getModel()); + } + + @WorkerThread + public static @NonNull Uri renderToSingleUseBlob(@NonNull Context context, @NonNull EditorModel editorModel) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - Bitmap image = imageEditorView.getModel().render(requireContext(), new FontTypefaceProvider()); + Bitmap image = editorModel.render(context, new FontTypefaceProvider()); image.compress(Bitmap.CompressFormat.JPEG, 80, outputStream); image.recycle(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java index a748a47903..f977dc3599 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java @@ -165,7 +165,7 @@ public ActiveCallActionProcessorDelegate(@NonNull WebRtcInteractor webRtcInterac state = Objects.requireNonNull(ENDED_REMOTE_EVENT_TO_STATE.get(endedRemoteEvent)); } - if (endedRemoteEvent == CallEvent.ENDED_REMOTE_HANGUP) { + if (endedRemoteEvent == CallEvent.ENDED_REMOTE_HANGUP || endedRemoteEvent == CallEvent.ENDED_REMOTE_HANGUP_BUSY) { if (remotePeerIsActive) { state = outgoingBeforeAccept ? WebRtcViewModel.State.RECIPIENT_UNAVAILABLE : WebRtcViewModel.State.CALL_DISCONNECTED; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareArgs.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareArgs.java index 924484bd5b..923dbc5191 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareArgs.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareArgs.java @@ -149,6 +149,10 @@ public long getExpiresAt() { } public boolean isValidForStories() { + if (isViewOnce()) { + return false; + } + return isTextStory || (!media.isEmpty() && media.stream().allMatch(m -> MediaUtil.isStorySupportedType(m.getMimeType()))) || MediaUtil.isStorySupportedType(dataType) || diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/v2/ShareViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/sharing/v2/ShareViewModel.kt index acb5727b7d..95ad1a920b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/v2/ShareViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/v2/ShareViewModel.kt @@ -72,6 +72,7 @@ class ShareViewModel( override fun onCleared() { disposables.clear() + store.dispose() } private fun moveToFailedState(throwable: Throwable? = null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java index d99a20580f..6e55132e7c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java @@ -272,7 +272,7 @@ public static long send(final Context context, sendMediaMessage(context, recipient, forceSms, messageId, Collections.emptyList()); onMessageSent(); - threadDatabase.update(threadId, true); + threadDatabase.update(allocatedThreadId, true); return allocatedThreadId; } catch (MmsException e) { @@ -316,7 +316,7 @@ public static long sendPushWithPreUploadedMedia(final Context context, sendMediaMessage(context, recipient, false, messageId, jobIds); onMessageSent(); - threadDatabase.update(threadId, true); + threadDatabase.update(allocatedThreadId, true); return allocatedThreadId; } catch (MmsException e) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.java index 95f04f6361..4e12945da7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.java @@ -1,7 +1,5 @@ package org.thoughtcrime.securesms.storage; -import android.content.Context; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -17,7 +15,6 @@ import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.PNI; import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.storage.SignalContactRecord; import org.whispersystems.signalservice.api.util.OptionalUtil; import org.whispersystems.signalservice.internal.storage.protos.ContactRecord.IdentityState; @@ -122,15 +119,15 @@ boolean isInvalid(@NonNull SignalContactRecord remote) { remote = remote.withoutPni(); } - String givenName; - String familyName; + String profileGivenName; + String profileFamilyName; - if (remote.getGivenName().isPresent() || remote.getFamilyName().isPresent()) { - givenName = remote.getGivenName().orElse(""); - familyName = remote.getFamilyName().orElse(""); + if (remote.getProfileGivenName().isPresent() || remote.getProfileFamilyName().isPresent()) { + profileGivenName = remote.getProfileGivenName().orElse(""); + profileFamilyName = remote.getProfileFamilyName().orElse(""); } else { - givenName = local.getGivenName().orElse(""); - familyName = local.getFamilyName().orElse(""); + profileGivenName = local.getProfileGivenName().orElse(""); + profileFamilyName = local.getProfileFamilyName().orElse(""); } IdentityState identityState; @@ -198,8 +195,10 @@ boolean isInvalid(@NonNull SignalContactRecord remote) { boolean hideStory = remote.shouldHideStory(); long unregisteredTimestamp = remote.getUnregisteredTimestamp(); boolean hidden = remote.isHidden(); - boolean matchesRemote = doParamsMatch(remote, unknownFields, serviceId, pni, e164, givenName, familyName, profileKey, username, identityState, identityKey, blocked, profileSharing, archived, forcedUnread, muteUntil, hideStory, unregisteredTimestamp, hidden); - boolean matchesLocal = doParamsMatch(local, unknownFields, serviceId, pni, e164, givenName, familyName, profileKey, username, identityState, identityKey, blocked, profileSharing, archived, forcedUnread, muteUntil, hideStory, unregisteredTimestamp, hidden); + String systemGivenName = SignalStore.account().isPrimaryDevice() ? local.getSystemGivenName().orElse("") : remote.getSystemGivenName().orElse(""); + String systemFamilyName = SignalStore.account().isPrimaryDevice() ? local.getSystemFamilyName().orElse("") : remote.getSystemFamilyName().orElse(""); + boolean matchesRemote = doParamsMatch(remote, unknownFields, serviceId, pni, e164, profileGivenName, profileFamilyName, systemGivenName, systemFamilyName, profileKey, username, identityState, identityKey, blocked, profileSharing, archived, forcedUnread, muteUntil, hideStory, unregisteredTimestamp, hidden); + boolean matchesLocal = doParamsMatch(local, unknownFields, serviceId, pni, e164, profileGivenName, profileFamilyName, systemGivenName, systemFamilyName, profileKey, username, identityState, identityKey, blocked, profileSharing, archived, forcedUnread, muteUntil, hideStory, unregisteredTimestamp, hidden); if (matchesRemote) { return remote; @@ -209,8 +208,10 @@ boolean isInvalid(@NonNull SignalContactRecord remote) { return new SignalContactRecord.Builder(keyGenerator.generate(), serviceId, unknownFields) .setE164(e164) .setPni(pni) - .setGivenName(givenName) - .setFamilyName(familyName) + .setProfileGivenName(profileGivenName) + .setProfileFamilyName(profileFamilyName) + .setSystemGivenName(systemGivenName) + .setSystemFamilyName(systemFamilyName) .setProfileKey(profileKey) .setUsername(username) .setIdentityState(identityState) @@ -254,8 +255,10 @@ private static boolean doParamsMatch(@NonNull SignalContactRecord contact, @NonNull ServiceId serviceId, @Nullable PNI pni, @Nullable String e164, - @NonNull String givenName, - @NonNull String familyName, + @NonNull String profileGivenName, + @NonNull String profileFamilyName, + @NonNull String systemGivenName, + @NonNull String systemFamilyName, @Nullable byte[] profileKey, @NonNull String username, @Nullable IdentityState identityState, @@ -269,23 +272,25 @@ private static boolean doParamsMatch(@NonNull SignalContactRecord contact, long unregisteredTimestamp, boolean hidden) { - return Arrays.equals(contact.serializeUnknownFields(), unknownFields) && - Objects.equals(contact.getServiceId(), serviceId) && - Objects.equals(contact.getPni().orElse(null), pni) && - Objects.equals(contact.getNumber().orElse(null), e164) && - Objects.equals(contact.getGivenName().orElse(""), givenName) && - Objects.equals(contact.getFamilyName().orElse(""), familyName) && - Arrays.equals(contact.getProfileKey().orElse(null), profileKey) && - Objects.equals(contact.getUsername().orElse(""), username) && - Objects.equals(contact.getIdentityState(), identityState) && - Arrays.equals(contact.getIdentityKey().orElse(null), identityKey) && - contact.isBlocked() == blocked && - contact.isProfileSharingEnabled() == profileSharing && - contact.isArchived() == archived && - contact.isForcedUnread() == forcedUnread && - contact.getMuteUntil() == muteUntil && - contact.shouldHideStory() == hideStory && - contact.getUnregisteredTimestamp() == unregisteredTimestamp && + return Arrays.equals(contact.serializeUnknownFields(), unknownFields) && + Objects.equals(contact.getServiceId(), serviceId) && + Objects.equals(contact.getPni().orElse(null), pni) && + Objects.equals(contact.getNumber().orElse(null), e164) && + Objects.equals(contact.getProfileGivenName().orElse(""), profileGivenName) && + Objects.equals(contact.getProfileFamilyName().orElse(""), profileFamilyName) && + Objects.equals(contact.getSystemGivenName().orElse(""), systemGivenName) && + Objects.equals(contact.getSystemFamilyName().orElse(""), systemFamilyName) && + Arrays.equals(contact.getProfileKey().orElse(null), profileKey) && + Objects.equals(contact.getUsername().orElse(""), username) && + Objects.equals(contact.getIdentityState(), identityState) && + Arrays.equals(contact.getIdentityKey().orElse(null), identityKey) && + contact.isBlocked() == blocked && + contact.isProfileSharingEnabled() == profileSharing && + contact.isArchived() == archived && + contact.isForcedUnread() == forcedUnread && + contact.getMuteUntil() == muteUntil && + contact.shouldHideStory() == hideStory && + contact.getUnregisteredTimestamp() == unregisteredTimestamp && contact.isHidden() == hidden; } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.java b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.java index 711e116cb2..8100375ce0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.java @@ -11,15 +11,12 @@ import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListId; -import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode; import org.thoughtcrime.securesms.database.model.DistributionListRecord; import org.thoughtcrime.securesms.database.model.RecipientRecord; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.keyvalue.PhoneNumberPrivacyValues; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.subscription.Subscriber; -import org.thoughtcrime.securesms.util.FeatureFlags; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.storage.SignalAccountRecord; @@ -34,7 +31,6 @@ import org.whispersystems.signalservice.internal.storage.protos.ContactRecord.IdentityState; import org.whispersystems.signalservice.internal.storage.protos.GroupV2Record; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -116,8 +112,10 @@ public static List localToRemotePinnedCo .setE164(recipient.getE164()) .setPni(recipient.getPni()) .setProfileKey(recipient.getProfileKey()) - .setGivenName(recipient.getProfileName().getGivenName()) - .setFamilyName(recipient.getProfileName().getFamilyName()) + .setProfileGivenName(recipient.getProfileName().getGivenName()) + .setProfileFamilyName(recipient.getProfileName().getFamilyName()) + .setSystemGivenName(recipient.getSystemProfileName().getGivenName()) + .setSystemFamilyName(recipient.getSystemProfileName().getFamilyName()) .setBlocked(recipient.isBlocked()) .setProfileSharingEnabled(recipient.isProfileSharing() || recipient.getSystemContactUri() != null) .setIdentityKey(recipient.getSyncExtras().getIdentityKey()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt index 27f757bdc0..af68ae11db 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt @@ -11,11 +11,11 @@ import com.google.android.exoplayer2.SimpleExoPlayer import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.ThreadUtil -import org.signal.core.util.isAbsent import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.contacts.HeaderAction import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.database.model.MmsMessageRecord @@ -267,7 +267,7 @@ object Stories { private fun getContentDuration(media: Media): DurationResult { return if (MediaUtil.isVideo(media.mimeType)) { - val mediaDuration = if (media.duration == 0L && media.transformProperties.isAbsent()) { + val mediaDuration = if (media.duration == 0L && media.transformProperties.map(TransformProperties::shouldSkipTransform).orElse(true)) { getVideoDuration(media.uri) } else if (media.transformProperties.map { it.isVideoTrim }.orElse(false)) { TimeUnit.MICROSECONDS.toMillis(media.transformProperties.get().videoTrimEndTimeUs - media.transformProperties.get().videoTrimStartTimeUs) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryContextMenu.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryContextMenu.kt index a0b356ac82..87f3850048 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryContextMenu.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryContextMenu.kt @@ -19,9 +19,11 @@ import org.thoughtcrime.securesms.components.menu.ActionItem import org.thoughtcrime.securesms.components.menu.SignalContextMenu import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord import org.thoughtcrime.securesms.database.model.MessageRecord +import org.thoughtcrime.securesms.database.model.databaseprotos.StoryTextPost import org.thoughtcrime.securesms.stories.landing.StoriesLandingItem import org.thoughtcrime.securesms.stories.viewer.page.StoryPost import org.thoughtcrime.securesms.stories.viewer.page.StoryViewerPageState +import org.thoughtcrime.securesms.util.Base64 import org.thoughtcrime.securesms.util.DeleteDialog import org.thoughtcrime.securesms.util.SaveAttachmentTask @@ -61,12 +63,23 @@ object StoryContextMenu { } fun share(fragment: Fragment, messageRecord: MediaMmsMessageRecord) { - val attachment: Attachment = messageRecord.slideDeck.firstSlide!!.asAttachment() - val intent: Intent = ShareCompat.IntentBuilder(fragment.requireContext()) - .setStream(attachment.publicUri) - .setType(attachment.contentType) - .createChooserIntent() - .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + val intent = if (messageRecord.storyType.isTextStory) { + val textStoryBody = StoryTextPost.parseFrom(Base64.decode(messageRecord.body)).body + val linkUrl = messageRecord.linkPreviews.firstOrNull()?.url ?: "" + val shareText = "$textStoryBody $linkUrl".trim() + + ShareCompat.IntentBuilder(fragment.requireContext()) + .setText(shareText) + .createChooserIntent() + } else { + val attachment: Attachment = messageRecord.slideDeck.firstSlide!!.asAttachment() + + ShareCompat.IntentBuilder(fragment.requireContext()) + .setStream(attachment.publicUri) + .setType(attachment.contentType) + .createChooserIntent() + .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + } try { fragment.startActivity(intent) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryDialogs.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryDialogs.kt index db1c781a55..1844aa3b94 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryDialogs.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryDialogs.kt @@ -10,6 +10,60 @@ import org.thoughtcrime.securesms.R object StoryDialogs { + fun removeGroupStory( + context: Context, + groupName: String, + onConfirmed: () -> Unit + ) { + MaterialAlertDialogBuilder(context) + .setTitle(R.string.StoryDialogs__remove_group_story) + .setMessage(context.getString(R.string.StoryDialogs__s_will_be_removed, groupName)) + .setPositiveButton(R.string.StoryDialogs__remove) { _, _ -> onConfirmed() } + .setNegativeButton(android.R.string.cancel) { _, _ -> } + .show() + } + + fun deleteDistributionList( + context: Context, + distributionListName: String, + onDelete: () -> Unit + ) { + MaterialAlertDialogBuilder(context) + .setTitle(R.string.StoryDialogs__delete_private_story) + .setMessage(context.getString(R.string.StoryDialogs__s_and_updates_shared, distributionListName)) + .setPositiveButton(R.string.StoryDialogs__delete) { _, _ -> onDelete() } + .setNegativeButton(android.R.string.cancel) { _, _ -> } + .show() + } + + fun disableStories( + context: Context, + userHasStories: Boolean, + onDisable: () -> Unit + ) { + val positiveButtonMessage = if (userHasStories) { + R.string.StoryDialogs__turn_off_and_delete + } else { + R.string.StoriesPrivacySettingsFragment__turn_off_stories + } + + MaterialAlertDialogBuilder(context) + .setTitle(R.string.StoriesPrivacySettingsFragment__turn_off_stories_question) + .setMessage(R.string.StoriesPrivacySettingsFragment__you_will_no_longer_be_able_to_share) + .setPositiveButton(positiveButtonMessage) { _, _ -> onDisable() } + .setNegativeButton(android.R.string.cancel) { _, _ -> } + .show() + } + + fun displayBetaDialog(context: Context, onConfirmed: () -> Unit) { + MaterialAlertDialogBuilder(context) + .setTitle(R.string.StoryDialogs__stories_is_available_to) + .setMessage(R.string.StoryDialogs__if_you_share_a_story) + .setPositiveButton(R.string.Permissions_continue) { _, _ -> onConfirmed() } + .setNegativeButton(android.R.string.cancel) { _, _ -> } + .show() + } + fun resendStory(context: Context, onDismiss: () -> Unit = {}, resend: () -> Unit) { MaterialAlertDialogBuilder(context) .setMessage(R.string.StoryDialogs__story_could_not_be_sent) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt index 6f988c9030..577c144bd7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt @@ -167,7 +167,9 @@ class StoriesLandingFragment : DSLSettingsFragment(layoutId = R.layout.stories_l viewLifecycleOwner, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { - tabsViewModel.onChatsSelected() + if (!closeSearchIfOpen()) { + tabsViewModel.onChatsSelected() + } } } ) @@ -350,4 +352,25 @@ class StoriesLandingFragment : DSLSettingsFragment(layoutId = R.layout.stories_l viewModel.isTransitioningToAnotherScreen = true startActivity(intent, options) } + + private fun isSearchOpen(): Boolean { + return isSearchVisible() + } + + private fun isSearchVisible(): Boolean { + return requreSearchBinder().getSearchToolbar().resolved() && requreSearchBinder().getSearchToolbar().get().getVisibility() == View.VISIBLE + } + + private fun closeSearchIfOpen(): Boolean { + if (isSearchOpen()) { + requreSearchBinder().getSearchToolbar().get().collapse() + requreSearchBinder().onSearchClosed() + return true + } + return false + } + + private fun requreSearchBinder(): SearchBinder { + return requireListener() + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesFragment.kt index b5c0a43424..7613294e95 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesFragment.kt @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.stories.my import android.net.Uri import android.view.View -import android.widget.Toast import androidx.activity.OnBackPressedCallback import androidx.core.app.ActivityOptionsCompat import androidx.core.view.ViewCompat @@ -24,7 +23,6 @@ import org.thoughtcrime.securesms.stories.dialogs.StoryContextMenu import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs import org.thoughtcrime.securesms.stories.viewer.StoryViewerActivity import org.thoughtcrime.securesms.util.LifecycleDisposable -import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.visible @@ -80,11 +78,6 @@ class MyStoriesFragment : DSLSettingsFragment( onClick = { it, preview -> openStoryViewer(it, preview, false) }, - onLongClick = { - Util.copyToClipboard(requireContext(), it.distributionStory.messageRecord.timestamp.toString()) - Toast.makeText(requireContext(), R.string.MyStoriesFragment__copied_sent_timestamp_to_clipboard, Toast.LENGTH_SHORT).show() - true - }, onSaveClick = { StoryContextMenu.save(requireContext(), it.distributionStory.messageRecord) }, diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt index 0e6d7240fd..fff8be46c1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt @@ -38,7 +38,6 @@ object MyStoriesItem { class Model( val distributionStory: ConversationMessage, val onClick: (Model, View) -> Unit, - val onLongClick: (Model) -> Boolean, val onSaveClick: (Model) -> Unit, val onDeleteClick: (Model) -> Unit, val onForwardClick: (Model) -> Unit, @@ -106,7 +105,6 @@ object MyStoriesItem { override fun bind(model: Model) { storyPreview.isClickable = false itemView.setOnClickListener { model.onClick(model, storyPreview) } - itemView.setOnLongClickListener { model.onLongClick(model) } downloadTarget.setOnClickListener { model.onSaveClick(model) } moreTarget.setOnClickListener { showContextMenu(model) } presentDateOrStatus(model) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/connections/ViewAllSignalConnectionsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/connections/ViewAllSignalConnectionsFragment.kt new file mode 100644 index 0000000000..e8979c68a5 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/connections/ViewAllSignalConnectionsFragment.kt @@ -0,0 +1,60 @@ +package org.thoughtcrime.securesms.stories.settings.connections + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.components.ViewBinderDelegate +import org.thoughtcrime.securesms.components.WrapperDialogFragment +import org.thoughtcrime.securesms.contacts.LetterHeaderDecoration +import org.thoughtcrime.securesms.contacts.paged.ContactSearchConfiguration +import org.thoughtcrime.securesms.contacts.paged.ContactSearchMediator +import org.thoughtcrime.securesms.databinding.ViewAllSignalConnectionsFragmentBinding +import org.thoughtcrime.securesms.groups.SelectionLimits + +class ViewAllSignalConnectionsFragment : Fragment(R.layout.view_all_signal_connections_fragment) { + + private val binding by ViewBinderDelegate(ViewAllSignalConnectionsFragmentBinding::bind) + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + binding.recycler.addItemDecoration(LetterHeaderDecoration(requireContext()) { false }) + binding.toolbar.setNavigationOnClickListener { + requireActivity().onBackPressedDispatcher.onBackPressed() + } + + ContactSearchMediator( + fragment = this, + recyclerView = binding.recycler, + selectionLimits = SelectionLimits(0, 0), + displayCheckBox = false, + mapStateToConfiguration = { getConfiguration() }, + performSafetyNumberChecks = false + ) + } + + private fun getConfiguration(): ContactSearchConfiguration { + return ContactSearchConfiguration.build { + addSection( + ContactSearchConfiguration.Section.Individuals( + includeHeader = false, + includeSelf = false, + includeLetterHeaders = true, + transportType = ContactSearchConfiguration.TransportType.PUSH + ) + ) + } + } + + class Dialog : WrapperDialogFragment() { + override fun getWrappedFragment(): Fragment { + return ViewAllSignalConnectionsFragment() + } + + companion object { + fun show(fragmentManager: FragmentManager) { + Dialog().show(fragmentManager, null) + } + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsFragment.kt index 89ae68b789..c4aea452bc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsFragment.kt @@ -10,6 +10,8 @@ import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.findNavController import com.google.android.material.dialog.MaterialAlertDialogBuilder import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.components.DialogFragmentDisplayManager +import org.thoughtcrime.securesms.components.ProgressCardDialogFragment import org.thoughtcrime.securesms.components.WrapperDialogFragment import org.thoughtcrime.securesms.components.settings.DSLConfiguration import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment @@ -17,6 +19,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.fragments.findListener @@ -28,6 +31,8 @@ class PrivateStorySettingsFragment : DSLSettingsFragment( menuId = R.menu.story_private_menu ) { + private val progressDisplayManager = DialogFragmentDisplayManager { ProgressCardDialogFragment() } + private val viewModel: PrivateStorySettingsViewModel by viewModels( factoryProducer = { PrivateStorySettingsViewModel.Factory(PrivateStorySettingsFragmentArgs.fromBundle(requireArguments()).distributionListId, PrivateStorySettingsRepository()) @@ -49,6 +54,12 @@ class PrivateStorySettingsFragment : DSLSettingsFragment( val toolbar: Toolbar = requireView().findViewById(R.id.toolbar) viewModel.state.observe(viewLifecycleOwner) { state -> + if (state.isActionInProgress) { + progressDisplayManager.show(viewLifecycleOwner, childFragmentManager) + } else { + progressDisplayManager.hide() + } + toolbar.title = state.privateStory?.name adapter.submitList(getConfiguration(state).toMappingModelList()) } @@ -88,7 +99,8 @@ class PrivateStorySettingsFragment : DSLSettingsFragment( clickPref( title = DSLSettingsText.from(R.string.PrivateStorySettingsFragment__delete_private_story, DSLSettingsText.ColorModifier(ContextCompat.getColor(requireContext(), R.color.signal_alert_primary))), onClick = { - handleDeletePrivateStory() + val privateStoryName = viewModel.state.value?.privateStory?.name + handleDeletePrivateStory(privateStoryName) } ) } @@ -113,13 +125,12 @@ class PrivateStorySettingsFragment : DSLSettingsFragment( .show() } - private fun handleDeletePrivateStory() { - MaterialAlertDialogBuilder(requireContext()) - .setTitle(R.string.PrivateStorySettingsFragment__are_you_sure) - .setMessage(R.string.PrivateStorySettingsFragment__this_action_cannot) - .setNegativeButton(android.R.string.cancel) { _, _ -> } - .setPositiveButton(R.string.delete) { _, _ -> viewModel.delete().subscribe { findNavController().popBackStack() } } - .show() + private fun handleDeletePrivateStory(privateStoryName: String?) { + val name = privateStoryName ?: return + + StoryDialogs.deleteDistributionList(requireContext(), name) { + viewModel.delete().subscribe { findNavController().popBackStack() } + } } override fun onToolbarNavigationClicked() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsRepository.kt index 9a1c5037e6..3d6a9835cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsRepository.kt @@ -7,6 +7,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.database.model.DistributionListRecord import org.thoughtcrime.securesms.recipients.RecipientId +import org.thoughtcrime.securesms.sms.MessageSender import org.thoughtcrime.securesms.stories.Stories class PrivateStorySettingsRepository { @@ -27,6 +28,13 @@ class PrivateStorySettingsRepository { return Completable.fromAction { SignalDatabase.distributionLists.deleteList(distributionListId) Stories.onStorySettingsChanged(distributionListId) + + val recipientId = SignalDatabase.recipients.getOrInsertFromDistributionListId(distributionListId) + SignalDatabase.mms.getAllStoriesFor(recipientId, -1).use { reader -> + for (record in reader) { + MessageSender.sendRemoteDelete(record.id, record.isMms) + } + } }.subscribeOn(Schedulers.io()) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsState.kt index b89926b7a6..44d727242f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsState.kt @@ -4,5 +4,6 @@ import org.thoughtcrime.securesms.database.model.DistributionListRecord data class PrivateStorySettingsState( val privateStory: DistributionListRecord? = null, - val areRepliesAndReactionsEnabled: Boolean = false + val areRepliesAndReactionsEnabled: Boolean = false, + val isActionInProgress: Boolean = false ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsViewModel.kt index c4197bf99c..93e4acbbd1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/custom/PrivateStorySettingsViewModel.kt @@ -52,7 +52,9 @@ class PrivateStorySettingsViewModel(private val distributionListId: Distribution } fun delete(): Completable { - return repository.delete(distributionListId).observeOn(AndroidSchedulers.mainThread()) + return repository.delete(distributionListId) + .doOnSubscribe { store.update { it.copy(isActionInProgress = true) } } + .observeOn(AndroidSchedulers.mainThread()) } class Factory(private val privateStoryItemData: DistributionListId, private val repository: PrivateStorySettingsRepository) : ViewModelProvider.Factory { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/group/GroupStorySettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/group/GroupStorySettingsFragment.kt index f480d213ae..7b11dd9ab5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/group/GroupStorySettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/group/GroupStorySettingsFragment.kt @@ -15,6 +15,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.conversation.ConversationIntents +import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs import org.thoughtcrime.securesms.stories.settings.custom.PrivateStoryItem import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter @@ -94,7 +95,12 @@ class GroupStorySettingsFragment : DSLSettingsFragment(menuId = R.menu.story_gro DSLSettingsText.ColorModifier(ContextCompat.getColor(requireContext(), R.color.signal_colorError)) ), onClick = { - viewModel.doNotDisplayAsStory() + StoryDialogs.removeGroupStory( + requireContext(), + state.name + ) { + viewModel.doNotDisplayAsStory() + } } ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/AllSignalConnectionsRowItem.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/AllSignalConnectionsRowItem.kt new file mode 100644 index 0000000000..3e89bcb97a --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/AllSignalConnectionsRowItem.kt @@ -0,0 +1,70 @@ +package org.thoughtcrime.securesms.stories.settings.my + +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.databinding.AllSignalConnectionsRowItemBinding +import org.thoughtcrime.securesms.util.adapter.mapping.BindingFactory +import org.thoughtcrime.securesms.util.adapter.mapping.BindingViewHolder +import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter +import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel +import org.thoughtcrime.securesms.util.visible + +/** + * AllSignalConnections privacy setting row item with "View" support + */ +object AllSignalConnectionsRowItem { + + private const val IS_CHECKED = 0 + private const val IS_COUNT = 1 + + fun register(mappingAdapter: MappingAdapter) { + mappingAdapter.registerFactory(Model::class.java, BindingFactory(::ViewHolder, AllSignalConnectionsRowItemBinding::inflate)) + } + + class Model( + val isChecked: Boolean, + val count: Int, + val onRowClicked: () -> Unit, + val onViewClicked: () -> Unit + ) : MappingModel { + + override fun areItemsTheSame(newItem: Model): Boolean = true + + override fun areContentsTheSame(newItem: Model): Boolean = isChecked == newItem.isChecked && count == newItem.count + + override fun getChangePayload(newItem: Model): Any? { + val isCheckedDifferent = isChecked != newItem.isChecked + val isCountDifferent = count != newItem.count + + return when { + isCheckedDifferent && !isCountDifferent -> IS_CHECKED + !isCheckedDifferent && isCountDifferent -> IS_COUNT + else -> null + } + } + } + + private class ViewHolder(binding: AllSignalConnectionsRowItemBinding) : BindingViewHolder(binding) { + override fun bind(model: Model) { + binding.root.setOnClickListener { model.onRowClicked() } + binding.view.setOnClickListener { model.onViewClicked() } + + when { + payload.contains(IS_COUNT) -> presentCount(model.count) + payload.contains(IS_CHECKED) -> presentSelected(model.isChecked) + else -> { + presentCount(model.count) + presentSelected(model.isChecked) + } + } + } + + private fun presentCount(count: Int) { + binding.count.visible = count > 0 + binding.count.text = context.resources.getQuantityString(R.plurals.MyStorySettingsFragment__viewers, count, count) + } + + private fun presentSelected(isChecked: Boolean) { + binding.radio.isChecked = isChecked + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsFragment.kt index 984b878b4b..d741d1e749 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsFragment.kt @@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode +import org.thoughtcrime.securesms.stories.settings.connections.ViewAllSignalConnectionsFragment import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.navigation.safeNavigate @@ -38,6 +39,7 @@ class MyStorySettingsFragment : DSLSettingsFragment( } override fun bindAdapter(adapter: MappingAdapter) { + AllSignalConnectionsRowItem.register(adapter) viewModel.state.observe(viewLifecycleOwner) { state -> adapter.submitList(getConfiguration(state).toMappingModelList()) } @@ -47,14 +49,18 @@ class MyStorySettingsFragment : DSLSettingsFragment( return configure { sectionHeaderPref(R.string.MyStorySettingsFragment__who_can_view_this_story) - radioPref( - title = DSLSettingsText.from(R.string.MyStorySettingsFragment__all_signal_connections), - summary = DSLSettingsText.from(R.string.MyStorySettingsFragment__share_with_all_connections), - isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL, - onClick = { - lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ALL) - .subscribe() - } + customPref( + AllSignalConnectionsRowItem.Model( + isChecked = state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL, + count = state.allSignalConnectionsCount, + onRowClicked = { + lifecycleDisposable += viewModel.setMyStoryPrivacyMode(DistributionListPrivacyMode.ALL) + .subscribe() + }, + onViewClicked = { + ViewAllSignalConnectionsFragment.Dialog.show(parentFragmentManager) + } + ) ) val exceptText = if (state.myStoryPrivacyState.privacyMode == DistributionListPrivacyMode.ALL_EXCEPT) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsRepository.kt index 9cc63d3f0e..714f79496a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsRepository.kt @@ -22,11 +22,15 @@ class MyStorySettingsRepository { } fun observeChooseInitialPrivacy(): Observable { - return Single.fromCallable { SignalDatabase.distributionLists.getRecipientId(DistributionListId.MY_STORY)!! } + return Single + .fromCallable { SignalDatabase.distributionLists.getRecipientId(DistributionListId.MY_STORY)!! } .subscribeOn(Schedulers.io()) .flatMapObservable { recipientId -> - Recipient.observable(recipientId) + val allSignalConnectionsCount = getAllSignalConnectionsCount().toObservable() + val stateWithoutCount = Recipient.observable(recipientId) .flatMap { Observable.just(ChooseInitialMyStoryMembershipState(recipientId = recipientId, privacyState = getStoryPrivacyState())) } + + Observable.combineLatest(allSignalConnectionsCount, stateWithoutCount) { count, state -> state.copy(allSignalConnectionsCount = count) } } } @@ -50,6 +54,12 @@ class MyStorySettingsRepository { }.subscribeOn(Schedulers.io()) } + fun getAllSignalConnectionsCount(): Single { + return Single.fromCallable { + SignalDatabase.recipients.getSignalContactsCount(false) + }.subscribeOn(Schedulers.io()) + } + @WorkerThread private fun getStoryPrivacyState(): MyStoryPrivacyState { val privacyData: DistributionListPrivacyData = SignalDatabase.distributionLists.getPrivacyData(DistributionListId.MY_STORY) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsState.kt index 1640e4212c..ef63a19cc7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsState.kt @@ -2,5 +2,6 @@ package org.thoughtcrime.securesms.stories.settings.my data class MyStorySettingsState( val myStoryPrivacyState: MyStoryPrivacyState = MyStoryPrivacyState(), - val areRepliesAndReactionsEnabled: Boolean = false + val areRepliesAndReactionsEnabled: Boolean = false, + val allSignalConnectionsCount: Int = 0 ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsViewModel.kt index cb6060d269..0cbf79d4ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/my/MyStorySettingsViewModel.kt @@ -25,6 +25,8 @@ class MyStorySettingsViewModel @JvmOverloads constructor(private val repository: .subscribe { myStoryPrivacyState -> store.update { it.copy(myStoryPrivacyState = myStoryPrivacyState) } } disposables += repository.getRepliesAndReactionsEnabled() .subscribe { repliesAndReactionsEnabled -> store.update { it.copy(areRepliesAndReactionsEnabled = repliesAndReactionsEnabled) } } + disposables += repository.getAllSignalConnectionsCount() + .subscribe { allSignalConnectionsCount -> store.update { it.copy(allSignalConnectionsCount = allSignalConnectionsCount) } } } fun setRepliesAndReactionsEnabled(repliesAndReactionsEnabled: Boolean) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipBottomSheetDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipBottomSheetDialogFragment.kt index d61caef1ad..a0163fdd97 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipBottomSheetDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipBottomSheetDialogFragment.kt @@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.components.FixedRoundedCornerBottomSheetDialog import org.thoughtcrime.securesms.components.WrapperDialogFragment import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.recipients.RecipientId +import org.thoughtcrime.securesms.stories.settings.connections.ViewAllSignalConnectionsFragment import org.thoughtcrime.securesms.stories.settings.select.BaseStoryRecipientSelectionFragment import org.thoughtcrime.securesms.util.BottomSheetUtil import org.thoughtcrime.securesms.util.LifecycleDisposable @@ -42,9 +43,12 @@ class ChooseInitialMyStoryMembershipBottomSheetDialogFragment : private lateinit var allExceptRadio: MaterialRadioButton private lateinit var onlyWitRadio: MaterialRadioButton + private lateinit var allCount: TextView private lateinit var allExceptCount: TextView private lateinit var onlyWithCount: TextView + private lateinit var allView: View + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.choose_initial_my_story_membership_fragment, container, false) } @@ -58,9 +62,15 @@ class ChooseInitialMyStoryMembershipBottomSheetDialogFragment : allExceptRadio = view.findViewById(R.id.choose_initial_my_story_all_signal_connnections_except_radio) onlyWitRadio = view.findViewById(R.id.choose_initial_my_story_only_share_with_radio) + allCount = view.findViewById(R.id.choose_initial_my_story_all_signal_connnections_count) allExceptCount = view.findViewById(R.id.choose_initial_my_story_all_signal_connnections_except_count) onlyWithCount = view.findViewById(R.id.choose_initial_my_story_only_share_with_count) + allView = view.findViewById(R.id.choose_initial_my_story_all_signal_connnections_view) + allView.setOnClickListener { + ViewAllSignalConnectionsFragment.Dialog.show(parentFragmentManager) + } + val save = view.findViewById(R.id.choose_initial_my_story_save).apply { isEnabled = false } @@ -76,6 +86,9 @@ class ChooseInitialMyStoryMembershipBottomSheetDialogFragment : allExceptCount.visible = allExceptRadio.isChecked onlyWithCount.visible = onlyWitRadio.isChecked + allCount.visible = state.allSignalConnectionsCount > 0 + allCount.text = resources.getQuantityString(R.plurals.MyStorySettingsFragment__viewers, state.allSignalConnectionsCount, state.allSignalConnectionsCount) + when (state.privacyState.privacyMode) { DistributionListPrivacyMode.ALL_EXCEPT -> allExceptCount.text = resources.getQuantityString(R.plurals.MyStorySettingsFragment__d_people_excluded, state.privacyState.connectionCount, state.privacyState.connectionCount) DistributionListPrivacyMode.ONLY_WITH -> onlyWithCount.text = resources.getQuantityString(R.plurals.MyStorySettingsFragment__d_people, state.privacyState.connectionCount, state.privacyState.connectionCount) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipState.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipState.kt index d284a8a103..14ae833224 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipState.kt @@ -3,4 +3,8 @@ package org.thoughtcrime.securesms.stories.settings.privacy import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.stories.settings.my.MyStoryPrivacyState -data class ChooseInitialMyStoryMembershipState(val recipientId: RecipientId? = null, val privacyState: MyStoryPrivacyState = MyStoryPrivacyState()) +data class ChooseInitialMyStoryMembershipState( + val recipientId: RecipientId? = null, + val privacyState: MyStoryPrivacyState = MyStoryPrivacyState(), + val allSignalConnectionsCount: Int = 0 +) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipViewModel.kt index 64ee05a75f..bb0d88f637 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/privacy/ChooseInitialMyStoryMembershipViewModel.kt @@ -31,6 +31,7 @@ class ChooseInitialMyStoryMembershipViewModel @JvmOverloads constructor( override fun onCleared() { disposables.clear() + store.dispose() } fun select(selection: DistributionListPrivacyMode): Single { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionFragment.kt index af56b1d688..560173a029 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionFragment.kt @@ -9,6 +9,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.google.android.material.button.MaterialButton +import org.signal.core.util.dp import org.thoughtcrime.securesms.ContactSelectionListFragment import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.contacts.ContactsCursorLoader @@ -147,8 +148,10 @@ abstract class BaseStoryRecipientSelectionFragment : Fragment(R.layout.stories_b canSelectSelf = false, currentSelection = emptyList(), displaySelectionCount = false, - displayChips = false, - checkboxResource = checkboxResource + displayChips = true, + checkboxResource = checkboxResource, + recyclerPadBottom = 76.dp, + recyclerChildClipping = false ) contactSelectionListFragment.arguments = arguments.toArgumentBundle() diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsFragment.kt index 3070657d06..388793e2a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsFragment.kt @@ -4,9 +4,10 @@ import androidx.core.content.ContextCompat import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.ConcatAdapter -import com.google.android.material.dialog.MaterialAlertDialogBuilder import org.signal.core.util.dp import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.components.DialogFragmentDisplayManager +import org.thoughtcrime.securesms.components.ProgressCardDialogFragment import org.thoughtcrime.securesms.components.settings.DSLConfiguration import org.thoughtcrime.securesms.components.settings.DSLSettingsAdapter import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment @@ -17,6 +18,7 @@ import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey import org.thoughtcrime.securesms.groups.ParcelableGroupId import org.thoughtcrime.securesms.mediasend.v2.stories.ChooseGroupStoryBottomSheet import org.thoughtcrime.securesms.mediasend.v2.stories.ChooseStoryTypeBottomSheet +import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs import org.thoughtcrime.securesms.stories.settings.create.CreateStoryFlowDialogFragment import org.thoughtcrime.securesms.stories.settings.create.CreateStoryWithViewersFragment import org.thoughtcrime.securesms.util.BottomSheetUtil @@ -36,6 +38,7 @@ class StoriesPrivacySettingsFragment : private val viewModel: StoriesPrivacySettingsViewModel by viewModels() private val lifecycleDisposable = LifecycleDisposable() + private val progressDisplayManager = DialogFragmentDisplayManager { ProgressCardDialogFragment() } override fun createAdapters(): Array { return arrayOf(DSLSettingsAdapter(), PagingMappingAdapter(), DSLSettingsAdapter()) @@ -84,6 +87,12 @@ class StoriesPrivacySettingsFragment : } lifecycleDisposable += viewModel.state.subscribe { state -> + if (state.isUpdatingEnabledState) { + progressDisplayManager.show(viewLifecycleOwner, childFragmentManager) + } else { + progressDisplayManager.hide() + } + (top as MappingAdapter).submitList(getTopConfiguration(state).toMappingModelList()) middle.submitList(getMiddleConfiguration(state).toMappingModelList()) (bottom as MappingAdapter).submitList(getBottomConfiguration(state).toMappingModelList()) @@ -144,12 +153,9 @@ class StoriesPrivacySettingsFragment : DSLSettingsText.ColorModifier(ContextCompat.getColor(requireContext(), R.color.signal_colorOnSurfaceVariant)) ), onClick = { - MaterialAlertDialogBuilder(requireContext()) - .setTitle(R.string.StoriesPrivacySettingsFragment__turn_off_stories_question) - .setMessage(R.string.StoriesPrivacySettingsFragment__you_will_no_longer_be_able_to) - .setPositiveButton(R.string.StoriesPrivacySettingsFragment__turn_off_stories) { _, _ -> viewModel.setStoriesEnabled(false) } - .setNegativeButton(android.R.string.cancel) { _, _ -> } - .show() + StoryDialogs.disableStories(requireContext(), viewModel.userHasActiveStories) { + viewModel.setStoriesEnabled(false) + } } ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt index ca97f0616a..6041af8d1c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt @@ -1,12 +1,15 @@ package org.thoughtcrime.securesms.stories.settings.story import io.reactivex.rxjava3.core.Completable +import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers import org.thoughtcrime.securesms.database.GroupDatabase import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId +import org.thoughtcrime.securesms.sms.MessageSender import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.stories.Stories @@ -23,6 +26,21 @@ class StoriesPrivacySettingsRepository { return Completable.fromAction { SignalStore.storyValues().isFeatureDisabled = !isEnabled Stories.onStorySettingsChanged(Recipient.self().id) + ApplicationDependencies.restartAllNetworkConnections() + + SignalDatabase.mms.getAllOutgoingStories(false, -1).use { reader -> + reader.map { record -> record.id } + }.forEach { messageId -> + MessageSender.sendRemoteDelete(messageId, true) + } + }.subscribeOn(Schedulers.io()) + } + + fun userHasOutgoingStories(): Single { + return Single.fromCallable { + SignalDatabase.mms.getAllOutgoingStories(false, -1).use { + it.iterator().hasNext() + } }.subscribeOn(Schedulers.io()) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsState.kt index bc1e0b3b47..74107df974 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsState.kt @@ -5,5 +5,6 @@ import org.thoughtcrime.securesms.contacts.paged.ContactSearchData data class StoriesPrivacySettingsState( val areStoriesEnabled: Boolean, val isUpdatingEnabledState: Boolean = false, - val storyContactItems: List = emptyList() + val storyContactItems: List = emptyList(), + val userHasStories: Boolean = false ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsViewModel.kt index a17d08ed08..be46426b1b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsViewModel.kt @@ -39,6 +39,7 @@ class StoriesPrivacySettingsViewModel : ViewModel() { private val headerActionRequestSubject = PublishSubject.create() val state: Flowable = store.stateFlowable.observeOn(AndroidSchedulers.mainThread()) + val userHasActiveStories: Boolean get() = store.state.userHasStories val pagingController = ProxyPagingController() val headerActionRequests: Observable = headerActionRequestSubject.debounce(100, TimeUnit.MILLISECONDS) @@ -59,13 +60,16 @@ class StoriesPrivacySettingsViewModel : ViewModel() { pagingController.set(observablePagedData.controller) - store.update(observablePagedData.data.toFlowable(BackpressureStrategy.LATEST)) { data, state -> + updateUserHasStories() + + disposables += store.update(observablePagedData.data.toFlowable(BackpressureStrategy.LATEST)) { data, state -> state.copy(storyContactItems = data) } } override fun onCleared() { disposables.clear() + store.dispose() } fun setStoriesEnabled(isEnabled: Boolean) { @@ -77,6 +81,7 @@ class StoriesPrivacySettingsViewModel : ViewModel() { areStoriesEnabled = Stories.isFeatureEnabled() ) } + updateUserHasStories() } } @@ -85,4 +90,10 @@ class StoriesPrivacySettingsViewModel : ViewModel() { pagingController.onDataInvalidated() } } + + private fun updateUserHasStories() { + disposables += repository.userHasOutgoingStories().subscribe { userHasActiveStories -> + store.update { it.copy(userHasStories = userHasActiveStories) } + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerFragment.kt index 6c1201bd6e..e4d355b6fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerFragment.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.stories.viewer import android.os.Bundle import android.view.View +import androidx.core.app.ActivityCompat import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.viewpager2.widget.ViewPager2 @@ -75,7 +76,7 @@ class StoryViewerFragment : lifecycleDisposable.bindTo(viewLifecycleOwner) lifecycleDisposable += viewModel.state.observeOn(AndroidSchedulers.mainThread()).subscribe { state -> if (state.noPosts) { - requireActivity().finish() + ActivityCompat.finishAfterTransition(requireActivity()) } adapter.setPages(state.pages) @@ -86,7 +87,7 @@ class StoryViewerFragment : pagerOnPageSelectedLock = false if (state.page >= state.pages.size) { - requireActivity().onBackPressed() + ActivityCompat.finishAfterTransition(requireActivity()) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerViewModel.kt index db9116615f..b7cd12412e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerViewModel.kt @@ -143,6 +143,7 @@ class StoryViewerViewModel( override fun onCleared() { disposables.clear() + store.dispose() } fun setSelectedPage(page: Int) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryVolumeViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryVolumeViewModel.kt index 8cbfd370d3..3e422577d0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryVolumeViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryVolumeViewModel.kt @@ -10,6 +10,10 @@ class StoryVolumeViewModel : ViewModel() { val state: Flowable = store.stateFlowable val snapshot: StoryVolumeState get() = store.state + override fun onCleared() { + store.dispose() + } + fun mute() { store.update { it.copy(isMuted = true) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoBottomSheetDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoBottomSheetDialogFragment.kt index 3b9b276a2f..1f26a14a34 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoBottomSheetDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoBottomSheetDialogFragment.kt @@ -1,12 +1,14 @@ package org.thoughtcrime.securesms.stories.viewer.info import android.content.DialogInterface +import androidx.annotation.StringRes import androidx.core.os.bundleOf import androidx.fragment.app.viewModels import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.settings.DSLConfiguration import org.thoughtcrime.securesms.components.settings.DSLSettingsAdapter import org.thoughtcrime.securesms.components.settings.DSLSettingsBottomSheetFragment +import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.fragments.findListener @@ -58,23 +60,61 @@ class StoryInfoBottomSheetDialogFragment : DSLSettingsBottomSheetFragment() { ) ) - state.sections.map { (section, recipients) -> - renderSection(section, recipients) + val details = state.messageDetails!! + + if (state.isOutgoing) { + renderSection( + title = R.string.message_details_recipient_header__not_sent, + recipients = details.notSent.map { StoryInfoRecipientRow.Model(it) } + ) + + renderSection( + title = R.string.message_details_recipient_header__viewed, + recipients = details.viewed.map { StoryInfoRecipientRow.Model(it) } + ) + + renderSection( + title = R.string.message_details_recipient_header__read_by, + recipients = details.read.map { StoryInfoRecipientRow.Model(it) } + ) + + renderSection( + title = R.string.message_details_recipient_header__delivered_to, + recipients = details.delivered.map { StoryInfoRecipientRow.Model(it) } + ) + + renderSection( + title = R.string.message_details_recipient_header__sent_to, + recipients = details.sent.map { StoryInfoRecipientRow.Model(it) } + ) + + renderSection( + title = R.string.message_details_recipient_header__pending_send, + recipients = details.pending.map { StoryInfoRecipientRow.Model(it) } + ) + + renderSection( + title = R.string.message_details_recipient_header__skipped, + recipients = details.skipped.map { StoryInfoRecipientRow.Model(it) } + ) + } else { + renderSection( + title = R.string.message_details_recipient_header__sent_from, + recipients = details.sent.map { StoryInfoRecipientRow.Model(it) } + ) } } } - private fun DSLConfiguration.renderSection(sectionKey: StoryInfoState.SectionKey, recipients: List) { - sectionHeaderPref( - title = when (sectionKey) { - StoryInfoState.SectionKey.FAILED -> R.string.StoryInfoBottomSheetDialogFragment__failed - StoryInfoState.SectionKey.SENT_TO -> R.string.StoryInfoBottomSheetDialogFragment__sent_to - StoryInfoState.SectionKey.SENT_FROM -> R.string.StoryInfoBottomSheetDialogFragment__sent_from - } - ) + private fun DSLConfiguration.renderSection(@StringRes title: Int, recipients: List) { + if (recipients.isNotEmpty()) { + sectionHeaderPref( + title = DSLSettingsText.from(title) + ) - recipients.forEach { - customPref(it) + recipients.forEach { + customPref(it) + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoRecipientRow.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoRecipientRow.kt index 00950398c9..0ca8615c03 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoRecipientRow.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoRecipientRow.kt @@ -4,7 +4,7 @@ import android.view.View import android.widget.TextView import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.AvatarImageView -import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.messagedetails.RecipientDeliveryStatus import org.thoughtcrime.securesms.util.DateUtils import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter @@ -21,17 +21,15 @@ object StoryInfoRecipientRow { } class Model( - val recipient: Recipient, - val date: Long, - val status: Int, - val isFailed: Boolean + val recipientDeliveryStatus: RecipientDeliveryStatus ) : MappingModel { override fun areItemsTheSame(newItem: Model): Boolean { - return recipient.id == newItem.recipient.id + return recipientDeliveryStatus.recipient.id == newItem.recipientDeliveryStatus.recipient.id } override fun areContentsTheSame(newItem: Model): Boolean { - return recipient.hasSameContent(newItem.recipient) && date == newItem.date + return recipientDeliveryStatus.recipient.hasSameContent(newItem.recipientDeliveryStatus.recipient) && + recipientDeliveryStatus.timestamp == newItem.recipientDeliveryStatus.timestamp } } @@ -42,9 +40,9 @@ object StoryInfoRecipientRow { private val timestampView: TextView = itemView.findViewById(R.id.story_info_timestamp) override fun bind(model: Model) { - avatarView.setRecipient(model.recipient) - nameView.text = model.recipient.getDisplayName(context) - timestampView.text = DateUtils.getTimeString(context, Locale.getDefault(), model.date) + avatarView.setRecipient(model.recipientDeliveryStatus.recipient) + nameView.text = model.recipientDeliveryStatus.recipient.getDisplayName(context) + timestampView.text = DateUtils.getTimeString(context, Locale.getDefault(), model.recipientDeliveryStatus.timestamp) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoRepository.kt deleted file mode 100644 index 2ad567eac0..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoRepository.kt +++ /dev/null @@ -1,73 +0,0 @@ -package org.thoughtcrime.securesms.stories.viewer.info - -import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.core.Single -import io.reactivex.rxjava3.schedulers.Schedulers -import org.signal.core.util.logging.Log -import org.thoughtcrime.securesms.database.DatabaseObserver -import org.thoughtcrime.securesms.database.GroupReceiptDatabase -import org.thoughtcrime.securesms.database.NoSuchMessageException -import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.database.model.MessageRecord -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies - -/** - * Gathers necessary message record and receipt data for a given story id. - */ -class StoryInfoRepository { - - companion object { - private val TAG = Log.tag(StoryInfoRepository::class.java) - } - - /** - * Retrieves the StoryInfo for a given ID and emits a new item whenever the underlying - * message record changes. - */ - fun getStoryInfo(storyId: Long): Observable { - return observeMessageRecord(storyId) - .switchMap { record -> - getReceiptInfo(storyId).map { receiptInfo -> - StoryInfo(record, receiptInfo) - }.toObservable() - } - .subscribeOn(Schedulers.io()) - } - - private fun observeMessageRecord(storyId: Long): Observable { - return Observable.create { emitter -> - fun refresh() { - try { - emitter.onNext(SignalDatabase.mms.getMessageRecord(storyId)) - } catch (e: NoSuchMessageException) { - Log.w(TAG, "The story message disappeared. Terminating emission.") - emitter.onComplete() - } - } - - val observer = DatabaseObserver.MessageObserver { - if (it.mms && it.id == storyId) { - refresh() - } - } - - ApplicationDependencies.getDatabaseObserver().registerMessageUpdateObserver(observer) - emitter.setCancellable { - ApplicationDependencies.getDatabaseObserver().unregisterObserver(observer) - } - - refresh() - } - } - - private fun getReceiptInfo(storyId: Long): Single> { - return Single.fromCallable { - SignalDatabase.groupReceipts.getGroupReceiptInfo(storyId) - } - } - - /** - * The message record and receipt info for a given story id. - */ - data class StoryInfo(val messageRecord: MessageRecord, val receiptInfo: List) -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoState.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoState.kt index 1d96a19dd8..20cadbd719 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoState.kt @@ -1,19 +1,19 @@ package org.thoughtcrime.securesms.stories.viewer.info +import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord +import org.thoughtcrime.securesms.messagedetails.MessageDetails + /** * Contains the needed information to render the story info sheet. */ data class StoryInfoState( - val sentMillis: Long = -1L, - val receivedMillis: Long = -1L, - val size: Long = -1L, - val isOutgoing: Boolean = false, - val sections: Map> = emptyMap(), - val isLoaded: Boolean = false + val messageDetails: MessageDetails? = null ) { - enum class SectionKey { - FAILED, - SENT_TO, - SENT_FROM - } + private val mediaMessage = messageDetails?.conversationMessage?.messageRecord as? MediaMmsMessageRecord + + val sentMillis: Long = mediaMessage?.dateSent ?: -1L + val receivedMillis: Long = mediaMessage?.dateReceived ?: -1L + val size: Long = mediaMessage?.slideDeck?.thumbnailSlide?.fileSize ?: 0 + val isOutgoing: Boolean = mediaMessage?.isOutgoing ?: false + val isLoaded: Boolean = mediaMessage != null } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoViewModel.kt index c2d9c642a7..22ccc80a14 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoViewModel.kt @@ -7,17 +7,14 @@ import io.reactivex.rxjava3.core.BackpressureStrategy import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign -import org.thoughtcrime.securesms.database.model.MessageRecord -import org.thoughtcrime.securesms.database.model.MmsMessageRecord -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.recipients.Recipient -import org.thoughtcrime.securesms.recipients.RecipientId +import org.thoughtcrime.securesms.database.model.MessageId +import org.thoughtcrime.securesms.messagedetails.MessageDetailsRepository import org.thoughtcrime.securesms.util.rx.RxStore /** * Gathers and stores the StoryInfoState which is used to render the story info sheet. */ -class StoryInfoViewModel(storyId: Long, repository: StoryInfoRepository = StoryInfoRepository()) : ViewModel() { +class StoryInfoViewModel(storyId: Long, repository: MessageDetailsRepository = MessageDetailsRepository()) : ViewModel() { private val store = RxStore(StoryInfoState()) private val disposables = CompositeDisposable() @@ -25,56 +22,16 @@ class StoryInfoViewModel(storyId: Long, repository: StoryInfoRepository = StoryI val state: Flowable = store.stateFlowable.observeOn(AndroidSchedulers.mainThread()) init { - disposables += store.update(repository.getStoryInfo(storyId).toFlowable(BackpressureStrategy.LATEST)) { storyInfo, storyInfoState -> + disposables += store.update(repository.getMessageDetails(MessageId(storyId, true)).toFlowable(BackpressureStrategy.LATEST)) { messageDetails, storyInfoState -> storyInfoState.copy( - isLoaded = true, - sentMillis = storyInfo.messageRecord.dateSent, - receivedMillis = storyInfo.messageRecord.dateReceived, - size = (storyInfo.messageRecord as? MmsMessageRecord)?.let { it.slideDeck.firstSlide?.fileSize } ?: -1L, - isOutgoing = storyInfo.messageRecord.isOutgoing, - sections = buildSections(storyInfo) + messageDetails = messageDetails ) } } - private fun buildSections(storyInfo: StoryInfoRepository.StoryInfo): Map> { - return if (storyInfo.messageRecord.isOutgoing) { - storyInfo.receiptInfo.map { groupReceiptInfo -> - StoryInfoRecipientRow.Model( - recipient = Recipient.resolved(groupReceiptInfo.recipientId), - date = groupReceiptInfo.timestamp, - status = groupReceiptInfo.status, - isFailed = hasFailure(storyInfo.messageRecord, groupReceiptInfo.recipientId) - ) - }.groupBy { - when { - it.isFailed -> StoryInfoState.SectionKey.FAILED - else -> StoryInfoState.SectionKey.SENT_TO - } - } - } else { - mapOf( - StoryInfoState.SectionKey.SENT_FROM to listOf( - StoryInfoRecipientRow.Model( - recipient = storyInfo.messageRecord.individualRecipient, - date = storyInfo.messageRecord.dateSent, - status = -1, - isFailed = false - ) - ) - ) - } - } - - private fun hasFailure(messageRecord: MessageRecord, recipientId: RecipientId): Boolean { - val hasNetworkFailure = messageRecord.networkFailures.any { it.getRecipientId(ApplicationDependencies.getApplication()) == recipientId } - val hasIdentityFailure = messageRecord.identityKeyMismatches.any { it.getRecipientId(ApplicationDependencies.getApplication()) == recipientId } - - return hasNetworkFailure || hasIdentityFailure - } - override fun onCleared() { disposables.clear() + store.dispose() } class Factory(private val storyId: Long) : ViewModelProvider.Factory { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt index 9e43a21628..8993d77d68 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt @@ -111,6 +111,8 @@ class StoryViewerPageFragment : private lateinit var storyCaptionContainer: FrameLayout private lateinit var storyContentContainer: FrameLayout private lateinit var storyFirstTimeNavigationViewStub: StoryFirstNavigationStub + private lateinit var sendingBarTextView: TextView + private lateinit var sendingBar: View private lateinit var callback: Callback @@ -182,6 +184,8 @@ class StoryViewerPageFragment : progressBar = view.findViewById(R.id.progress) viewsAndReplies = view.findViewById(R.id.views_and_replies_bar) storyFirstTimeNavigationViewStub = StoryFirstNavigationStub(view.findViewById(R.id.story_first_time_nav_stub)) + sendingBarTextView = view.findViewById(R.id.sending_text_view) + sendingBar = view.findViewById(R.id.sending_bar) storySlate.callback = this storyFirstTimeNavigationViewStub.setCallback(this) @@ -885,11 +889,7 @@ class StoryViewerPageFragment : } private fun presentDate(date: TextView, storyPost: StoryPost) { - val messageRecord = storyPost.conversationMessage.messageRecord - date.text = when { - messageRecord.isOutgoing && !messageRecord.isSent -> getString(R.string.StoriesLandingItem__sending) - else -> DateUtils.getBriefRelativeTimeSpanString(context, Locale.getDefault(), storyPost.dateInMilliseconds) - } + date.text = DateUtils.getBriefRelativeTimeSpanString(context, Locale.getDefault(), storyPost.dateInMilliseconds) } private fun presentSenderAvatar(senderAvatar: AvatarImageView, post: StoryPost) { @@ -913,6 +913,8 @@ class StoryViewerPageFragment : viewsAndReplies.visible = true } + sendingBar.visible = false + viewsAndReplies.isEnabled = true viewsAndReplies.iconTint = ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.signal_colorOnSurface)) when (replyState) { @@ -934,13 +936,20 @@ class StoryViewerPageFragment : indicatorColors = intArrayOf(ContextCompat.getColor(requireContext(), R.color.signal_dark_colorNeutralInverse)) trackThickness = 2.dp } - ) + ).apply { + setBounds(0, 0, 20.dp, 20.dp) + } } - viewsAndReplies.icon = sendingProgressDrawable - viewsAndReplies.iconGravity = MaterialButton.ICON_GRAVITY_TEXT_START - viewsAndReplies.iconSize = 20.dp - viewsAndReplies.setText(R.string.StoriesLandingItem__sending) + sendingBarTextView.setCompoundDrawablesRelativeWithIntrinsicBounds( + sendingProgressDrawable, + null, + null, + null + ) + + sendingBar.visible = true + viewsAndReplies.isEnabled = false } private fun presentPartialSendBottomBar() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt index 6b0136dc08..0601202476 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt @@ -99,6 +99,7 @@ class StoryViewerPageViewModel( override fun onCleared() { disposables.clear() storyCache.clear() + store.dispose() } fun hideStory(): Completable { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt index 8806782e3c..32a0614b31 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt @@ -16,7 +16,6 @@ import com.google.android.material.bottomsheet.BottomSheetBehaviorHack import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.dialog.MaterialAlertDialogBuilder import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers -import io.reactivex.rxjava3.kotlin.plusAssign import io.reactivex.rxjava3.kotlin.subscribeBy import org.signal.core.util.concurrent.SignalExecutors import org.signal.core.util.logging.Log @@ -146,6 +145,7 @@ class StoryGroupReplyFragment : private lateinit var adapter: PagingMappingAdapter private lateinit var dataObserver: RecyclerView.AdapterDataObserver private lateinit var composer: StoryReplyComposer + private lateinit var notInGroup: View private var markReadHelper: MarkReadHelper? = null @@ -164,6 +164,7 @@ class StoryGroupReplyFragment : recyclerView = view.findViewById(R.id.recycler) composer = view.findViewById(R.id.composer) + notInGroup = view.findViewById(R.id.not_in_group) lifecycleDisposable.bindTo(viewLifecycleOwner) @@ -215,10 +216,7 @@ class StoryGroupReplyFragment : adapter.registerAdapterDataObserver(dataObserver) initializeMentions() - - if (savedInstanceState == null) { - ViewUtil.focusAndShowKeyboard(composer) - } + initializeComposer(savedInstanceState) recyclerView.addOnScrollListener(GroupReplyScrollObserver()) } @@ -360,7 +358,6 @@ class StoryGroupReplyFragment : override fun onReactionSelected(emoji: String) { dialog.dismiss() - findListener()?.onReactionEmojiSelected(emoji) sendReaction(emoji) } @@ -379,6 +376,8 @@ class StoryGroupReplyFragment : } private fun sendReaction(emoji: String) { + findListener()?.onReactionEmojiSelected(emoji) + lifecycleDisposable += StoryGroupReplySender.sendReaction(requireContext(), storyId, emoji) .observeOn(AndroidSchedulers.mainThread()) .subscribeBy( @@ -433,6 +432,22 @@ class StoryGroupReplyFragment : sendReaction(emoji) } + private fun initializeComposer(savedInstanceState: Bundle?) { + val isActiveGroup = Recipient.observable(groupRecipientId).map { it.isActiveGroup } + if (savedInstanceState == null) { + lifecycleDisposable += isActiveGroup.firstOrError().observeOn(AndroidSchedulers.mainThread()).subscribe { active -> + if (active) { + ViewUtil.focusAndShowKeyboard(composer) + } + } + } + + lifecycleDisposable += isActiveGroup.distinctUntilChanged().observeOn(AndroidSchedulers.mainThread()).forEach { active -> + composer.visible = active + notInGroup.visible = !active + } + } + private fun initializeMentions() { inlineQueryResultsController = InlineQueryResultsController( requireContext(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyViewModel.kt index 81fd72e42d..be7861927e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyViewModel.kt @@ -51,6 +51,7 @@ class StoryGroupReplyViewModel(storyId: Long, repository: StoryGroupReplyReposit override fun onCleared() { disposables.clear() + store.dispose() } class Factory(private val storyId: Long, private val repository: StoryGroupReplyRepository) : ViewModelProvider.Factory { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/AlarmSleepTimer.java b/app/src/main/java/org/thoughtcrime/securesms/util/AlarmSleepTimer.java index 70ea8699bc..a50140358d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/AlarmSleepTimer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/AlarmSleepTimer.java @@ -2,10 +2,12 @@ import android.app.AlarmManager; import android.app.PendingIntent; +import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.Build; import android.os.SystemClock; import androidx.core.app.AlarmManagerCompat; @@ -18,13 +20,12 @@ import java.util.concurrent.ConcurrentSkipListSet; /** - * A sleep timer that is based on elapsed realtime, so - * that it works properly, even in low-power sleep modes. - * + * A sleep timer that is based on elapsed realtime, so that it works properly, even in low-power sleep modes. */ public class AlarmSleepTimer implements SleepTimer { private static final String TAG = Log.tag(AlarmSleepTimer.class); - private static ConcurrentSkipListSet actionIdList = new ConcurrentSkipListSet<>(); + + private static final ConcurrentSkipListSet actionIdList = new ConcurrentSkipListSet<>(); private final Context context; @@ -33,23 +34,25 @@ public AlarmSleepTimer(Context context) { } @Override - public void sleep(long millis) { - final AlarmReceiver alarmReceiver = new AlarmSleepTimer.AlarmReceiver(); - int actionId = 0; + public void sleep(long sleepDuration) { + AlarmReceiver alarmReceiver = new AlarmSleepTimer.AlarmReceiver(); + int actionId = 0; + while (!actionIdList.add(actionId)){ actionId++; } + try { - context.registerReceiver(alarmReceiver, - new IntentFilter(AlarmReceiver.WAKE_UP_THREAD_ACTION + "." + actionId)); + String actionName = buildActionName(actionId); + context.registerReceiver(alarmReceiver, new IntentFilter(actionName)); - final long startTime = System.currentTimeMillis(); - alarmReceiver.setAlarm(millis, AlarmReceiver.WAKE_UP_THREAD_ACTION + "." + actionId); + long startTime = System.currentTimeMillis(); + alarmReceiver.setAlarm(sleepDuration, actionName); - while (System.currentTimeMillis() - startTime < millis) { + while (System.currentTimeMillis() - startTime < sleepDuration) { try { synchronized (this) { - wait(millis - System.currentTimeMillis() + startTime); + wait(sleepDuration - (System.currentTimeMillis() - startTime)); } } catch (InterruptedException e) { Log.w(TAG, e); @@ -58,25 +61,35 @@ public void sleep(long millis) { context.unregisterReceiver(alarmReceiver); } catch(Exception e) { Log.w(TAG, "Exception during sleep ...",e); - }finally { + } finally { actionIdList.remove(actionId); } } + private static String buildActionName(int actionId) { + return AlarmReceiver.WAKE_UP_THREAD_ACTION + "." + actionId; + } + private class AlarmReceiver extends BroadcastReceiver { private static final String WAKE_UP_THREAD_ACTION = "org.thoughtcrime.securesms.util.AlarmSleepTimer.AlarmReceiver.WAKE_UP_THREAD"; private void setAlarm(long millis, String action) { final Intent intent = new Intent(action); final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntentFlags.mutable()); - final AlarmManager alarmManager = ContextCompat.getSystemService(context, AlarmManager.class); - - Log.w(TAG, "Setting alarm to wake up in " + millis + "ms."); - - AlarmManagerCompat.setExactAndAllowWhileIdle(alarmManager, - AlarmManager.ELAPSED_REALTIME_WAKEUP, - SystemClock.elapsedRealtime() + millis, - pendingIntent); + final AlarmManager alarmManager = ServiceUtil.getAlarmManager(context); + + if (Build.VERSION.SDK_INT < 31 || alarmManager.canScheduleExactAlarms()) { + Log.d(TAG, "Setting an exact alarm to wake up in " + millis + "ms."); + AlarmManagerCompat.setExactAndAllowWhileIdle(alarmManager, + AlarmManager.ELAPSED_REALTIME_WAKEUP, + SystemClock.elapsedRealtime() + millis, + pendingIntent); + } else { + Log.w(TAG, "Setting an inexact alarm to wake up in " + millis + "ms. CanScheduleAlarms: " + alarmManager.canScheduleExactAlarms()); + alarmManager.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, + SystemClock.elapsedRealtime() + millis, + pendingIntent); + } } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index 1a6925e210..8ed7b58697 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -81,7 +81,7 @@ public final class FeatureFlags { private static final String RETRY_RECEIPTS = "android.retryReceipts"; private static final String MAX_GROUP_CALL_RING_SIZE = "global.calling.maxGroupCallRingSize"; private static final String GROUP_CALL_RINGING = "android.calling.groupCallRinging"; - private static final String STORIES = "android.stories.2"; + private static final String STORIES = "android.stories.3"; private static final String STORIES_TEXT_FUNCTIONS = "android.stories.text.functions"; private static final String HARDWARE_AEC_BLOCKLIST_MODELS = "android.calling.hardwareAecBlockList"; private static final String SOFTWARE_AEC_BLOCKLIST_MODELS = "android.calling.softwareAecBlockList"; @@ -96,12 +96,14 @@ public final class FeatureFlags { private static final String TELECOM_MANUFACTURER_ALLOWLIST = "android.calling.telecomAllowList"; private static final String TELECOM_MODEL_BLOCKLIST = "android.calling.telecomModelBlockList"; private static final String CAMERAX_MODEL_BLOCKLIST = "android.cameraXModelBlockList"; + private static final String CAMERAX_MIXED_MODEL_BLOCKLIST = "android.cameraXMixedModelBlockList"; private static final String RECIPIENT_MERGE_V2 = "android.recipientMergeV2"; private static final String CDS_V2_LOAD_TEST = "android.cdsV2LoadTest"; - private static final String SMS_EXPORTER = "android.sms.exporter"; + private static final String SMS_EXPORTER = "android.sms.exporter.2"; private static final String CDS_V2_COMPAT = "android.cdsV2Compat.4"; public static final String STORIES_LOCALE = "android.stories.locale"; private static final String HIDE_CONTACTS = "android.hide.contacts"; + public static final String MEDIA_PREVIEW_V2 = "android.mediaPreviewV2"; /** * We will only store remote values for flags in this set. If you want a flag to be controllable @@ -150,12 +152,14 @@ public final class FeatureFlags { TELECOM_MANUFACTURER_ALLOWLIST, TELECOM_MODEL_BLOCKLIST, CAMERAX_MODEL_BLOCKLIST, + CAMERAX_MIXED_MODEL_BLOCKLIST, RECIPIENT_MERGE_V2, CDS_V2_LOAD_TEST, SMS_EXPORTER, CDS_V2_COMPAT, STORIES_LOCALE, - HIDE_CONTACTS + HIDE_CONTACTS, + MEDIA_PREVIEW_V2 ); @VisibleForTesting @@ -220,7 +224,8 @@ public final class FeatureFlags { RECIPIENT_MERGE_V2, CDS_V2_LOAD_TEST, CDS_V2_COMPAT, - STORIES + STORIES, + MEDIA_PREVIEW_V2 ); /** @@ -244,7 +249,10 @@ public final class FeatureFlags { */ private static final Map FLAG_CHANGE_LISTENERS = new HashMap() {{ put(MESSAGE_PROCESSOR_ALARM_INTERVAL, change -> MessageProcessReceiver.startOrUpdateAlarm(ApplicationDependencies.getApplication())); - put(STORIES, change -> ApplicationDependencies.getJobManager().startChain(new RefreshAttributesJob()).then(new RefreshOwnProfileJob()).enqueue()); + put(STORIES, change -> { + ApplicationDependencies.getJobManager().startChain(new RefreshAttributesJob()).then(new RefreshOwnProfileJob()).enqueue(); + ApplicationDependencies.restartAllNetworkConnections(); + }); put(GIFT_BADGE_RECEIVE_SUPPORT, change -> ApplicationDependencies.getJobManager().startChain(new RefreshAttributesJob()).then(new RefreshOwnProfileJob()).enqueue()); }}; @@ -489,6 +497,11 @@ public static boolean storiesTextFunctions() { return getString(CAMERAX_MODEL_BLOCKLIST, ""); } + /** A comma-separated list of manufacturers that should *not* use CameraX mixed mode. */ + public static @NonNull String cameraXMixedModelBlocklist() { + return getString(CAMERAX_MIXED_MODEL_BLOCKLIST, ""); + } + /** Whether or not hardware AEC should be used for calling on devices older than API 29. */ public static boolean useHardwareAecIfOlderThanApi29() { return getBoolean(USE_HARDWARE_AEC_IF_OLD, false); @@ -541,6 +554,13 @@ public static boolean hideContacts() { return getBoolean(HIDE_CONTACTS, false); } + /** + * Whether or not we should use the new media preview fragment implementation. + */ + public static boolean mediaPreviewV2() { + return getBoolean(MEDIA_PREVIEW_V2, false); + } + /** Only for rendering debug info. */ public static synchronized @NonNull Map getMemoryValues() { return new TreeMap<>(REMOTE_VALUES); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/Material3OnScrollHelper.kt b/app/src/main/java/org/thoughtcrime/securesms/util/Material3OnScrollHelper.kt index b7254adf5a..eaebd6b857 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/Material3OnScrollHelper.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/Material3OnScrollHelper.kt @@ -7,6 +7,7 @@ import android.view.View import androidx.annotation.ColorInt import androidx.annotation.ColorRes import androidx.core.content.ContextCompat +import androidx.core.widget.NestedScrollView import androidx.recyclerview.widget.RecyclerView import com.google.android.material.animation.ArgbEvaluatorCompat import com.google.android.material.appbar.AppBarLayout @@ -47,6 +48,14 @@ open class Material3OnScrollHelper( private var animator: ValueAnimator? = null private var active: Boolean? = null + fun attach(nestedScrollView: NestedScrollView) { + nestedScrollView.setOnScrollChangeListener( + OnScrollListener().apply { + onScrollChange(nestedScrollView, 0, 0, 0, 0) + } + ) + } + fun attach(recyclerView: RecyclerView) { recyclerView.addOnScrollListener( OnScrollListener().apply { @@ -57,7 +66,7 @@ open class Material3OnScrollHelper( fun attach(appBarLayout: AppBarLayout) { appBarLayout.addOnOffsetChangedListener( - OnOffsetChangedListener().apply { + OnScrollListener().apply { onOffsetChanged(appBarLayout, 0) } ) @@ -119,15 +128,17 @@ open class Material3OnScrollHelper( viewStubs.filter { it.resolved() }.forEach { it.get().setBackgroundColor(color) } } - private inner class OnScrollListener : RecyclerView.OnScrollListener() { + private inner class OnScrollListener : RecyclerView.OnScrollListener(), AppBarLayout.OnOffsetChangedListener, NestedScrollView.OnScrollChangeListener { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { updateActiveState(recyclerView.canScrollVertically(-1)) } - } - private inner class OnOffsetChangedListener : AppBarLayout.OnOffsetChangedListener { override fun onOffsetChanged(appBarLayout: AppBarLayout, verticalOffset: Int) { updateActiveState(verticalOffset != 0) } + + override fun onScrollChange(v: NestedScrollView, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int) { + updateActiveState(v.canScrollVertically(-1)) + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/rx/RxStore.kt b/app/src/main/java/org/thoughtcrime/securesms/util/rx/RxStore.kt index a36ced2e07..bab6d2cefa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/rx/RxStore.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/rx/RxStore.kt @@ -1,8 +1,10 @@ package org.thoughtcrime.securesms.util.rx +import androidx.annotation.CheckResult import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Scheduler import io.reactivex.rxjava3.disposables.Disposable +import io.reactivex.rxjava3.kotlin.plusAssign import io.reactivex.rxjava3.processors.BehaviorProcessor import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.subjects.PublishSubject @@ -10,11 +12,14 @@ import io.reactivex.rxjava3.subjects.PublishSubject /** * Rx replacement for Store. * Actions are run on the computation thread by default. + * + * This class is disposable, and should be explicitly disposed of in a ViewModel's onCleared method + * to prevent memory leaks. Disposing instances of this class is a terminal action. */ class RxStore( defaultValue: T, scheduler: Scheduler = Schedulers.computation() -) { +) : Disposable { private val behaviorProcessor = BehaviorProcessor.createDefault(defaultValue) private val actionSubject = PublishSubject.create<(T) -> T>().toSerialized() @@ -22,20 +27,30 @@ class RxStore( val state: T get() = behaviorProcessor.value!! val stateFlowable: Flowable = behaviorProcessor.onBackpressureLatest() - init { - actionSubject - .observeOn(scheduler) - .scan(defaultValue) { v, f -> f(v) } - .subscribe { behaviorProcessor.onNext(it) } - } + val actionDisposable: Disposable = actionSubject + .observeOn(scheduler) + .scan(defaultValue) { v, f -> f(v) } + .subscribe { behaviorProcessor.onNext(it) } fun update(transformer: (T) -> T) { actionSubject.onNext(transformer) } - fun update(flowable: Flowable, transformer: (U, T) -> T): Disposable { + @CheckResult + fun update(flowable: Flowable, transformer: (U, T) -> T): Disposable { return flowable.subscribe { actionSubject.onNext { t -> transformer(it, t) } } } + + /** + * Dispose of the underlying scan chain. This is terminal. + */ + override fun dispose() { + actionDisposable.dispose() + } + + override fun isDisposed(): Boolean { + return actionDisposable.isDisposed + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallNotificationBuilder.java index d0729570e5..856760d541 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallNotificationBuilder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallNotificationBuilder.java @@ -71,6 +71,7 @@ public static Notification getCallInProgressNotification(Context context, int ty builder.addAction(getServiceNotificationAction(context, WebRtcCallService.hangupIntent(context), R.drawable.ic_call_end_grey600_32dp, R.string.NotificationBarManager__cancel_call)); } else { builder.setContentText(context.getString(R.string.NotificationBarManager_signal_call_in_progress)); + builder.setOnlyAlertOnce(true); builder.addAction(getServiceNotificationAction(context, WebRtcCallService.hangupIntent(context), R.drawable.ic_call_end_grey600_32dp, R.string.NotificationBarManager__end_call)); } diff --git a/app/src/main/res/drawable-night/contact_selection_checkbox_dialog.xml b/app/src/main/res/drawable-night/contact_selection_checkbox_dialog.xml index bc6f9d9588..feb423fdb4 100644 --- a/app/src/main/res/drawable-night/contact_selection_checkbox_dialog.xml +++ b/app/src/main/res/drawable-night/contact_selection_checkbox_dialog.xml @@ -15,7 +15,7 @@ - + diff --git a/app/src/main/res/drawable/contact_selection_checkbox_dialog.xml b/app/src/main/res/drawable/contact_selection_checkbox_dialog.xml index 43f5c486e0..ca684a5346 100644 --- a/app/src/main/res/drawable/contact_selection_checkbox_dialog.xml +++ b/app/src/main/res/drawable/contact_selection_checkbox_dialog.xml @@ -15,7 +15,7 @@ - + diff --git a/app/src/main/res/drawable/ic_payment_security_setup_lock.xml b/app/src/main/res/drawable/ic_payment_security_setup_lock.xml new file mode 100644 index 0000000000..2696890429 --- /dev/null +++ b/app/src/main/res/drawable/ic_payment_security_setup_lock.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable/rounded_rectangle_secondary_22.xml b/app/src/main/res/drawable/rounded_rectangle_secondary_22.xml new file mode 100644 index 0000000000..213e46e417 --- /dev/null +++ b/app/src/main/res/drawable/rounded_rectangle_secondary_22.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_rectangle_variant_22.xml b/app/src/main/res/drawable/rounded_rectangle_variant_22.xml new file mode 100644 index 0000000000..bfb8b1f886 --- /dev/null +++ b/app/src/main/res/drawable/rounded_rectangle_variant_22.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mediapreview_v2.xml b/app/src/main/res/layout/activity_mediapreview_v2.xml new file mode 100644 index 0000000000..fa93ff97d4 --- /dev/null +++ b/app/src/main/res/layout/activity_mediapreview_v2.xml @@ -0,0 +1,7 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/all_signal_connections_row_item.xml b/app/src/main/res/layout/all_signal_connections_row_item.xml new file mode 100644 index 0000000000..dbb652ff9b --- /dev/null +++ b/app/src/main/res/layout/all_signal_connections_row_item.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/choose_a_new_default_sms_app_fragment.xml b/app/src/main/res/layout/choose_a_new_default_sms_app_fragment.xml index 145f3a9c8b..306cb47128 100644 --- a/app/src/main/res/layout/choose_a_new_default_sms_app_fragment.xml +++ b/app/src/main/res/layout/choose_a_new_default_sms_app_fragment.xml @@ -246,8 +246,9 @@ style="@style/Signal.Widget.Button.Large.Tonal" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginTop="48dp" android:layout_marginBottom="44dp" - android:minWidth="221dp" + android:minWidth="220dp" android:text="@string/ChooseANewDefaultSmsAppFragment__continue" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/choose_initial_my_story_membership_fragment.xml b/app/src/main/res/layout/choose_initial_my_story_membership_fragment.xml index 6885439424..ce2b826e01 100644 --- a/app/src/main/res/layout/choose_initial_my_story_membership_fragment.xml +++ b/app/src/main/res/layout/choose_initial_my_story_membership_fragment.xml @@ -1,10 +1,10 @@ + android:layout_height="wrap_content" + tools:viewBindingIgnore="true"> - + android:paddingStart="@dimen/dsl_settings_gutter"> + android:clickable="false" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + android:text="@string/ChooseInitialMyStoryMembershipFragment__all_signal_connections" + app:layout_constrainedWidth="true" + app:layout_constraintBottom_toTopOf="@+id/choose_initial_my_story_all_signal_connnections_count" + app:layout_constraintEnd_toStartOf="@id/choose_initial_my_story_all_signal_connnections_view" + app:layout_constraintStart_toEndOf="@id/choose_initial_my_story_all_signal_connnections_radio" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_chainStyle="packed" /> - + + + + + + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_chainStyle="packed" /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_chainStyle="packed" /> - + android:orientation="vertical"> - - - - - - - - - \ No newline at end of file + android:layout_height="match_parent" + android:fillViewport="true"> + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_media_preview_v2.xml b/app/src/main/res/layout/fragment_media_preview_v2.xml new file mode 100644 index 0000000000..83802f0b53 --- /dev/null +++ b/app/src/main/res/layout/fragment_media_preview_v2.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/payments_security_setup_fragment.xml b/app/src/main/res/layout/payments_security_setup_fragment.xml new file mode 100644 index 0000000000..f28c96d797 --- /dev/null +++ b/app/src/main/res/layout/payments_security_setup_fragment.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/progress_card.xml b/app/src/main/res/layout/progress_card.xml index 0bd315bb58..413df39505 100644 --- a/app/src/main/res/layout/progress_card.xml +++ b/app/src/main/res/layout/progress_card.xml @@ -12,5 +12,6 @@ android:layout_gravity="center" android:layout_margin="24dp" android:indeterminate="true" + android:background="@color/transparent" app:indicatorColor="@color/signal_colorPrimary" /> diff --git a/app/src/main/res/layout/progress_card_dialog.xml b/app/src/main/res/layout/progress_card_dialog.xml new file mode 100644 index 0000000000..2130169a6b --- /dev/null +++ b/app/src/main/res/layout/progress_card_dialog.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/stories_base_recipient_selection_fragment.xml b/app/src/main/res/layout/stories_base_recipient_selection_fragment.xml index bad2a17c19..be1b262828 100644 --- a/app/src/main/res/layout/stories_base_recipient_selection_fragment.xml +++ b/app/src/main/res/layout/stories_base_recipient_selection_fragment.xml @@ -1,10 +1,10 @@ + android:layout_height="match_parent" + tools:viewBindingIgnore="true"> + app:navigationIcon="@drawable/ic_arrow_left_24" + app:titleTextAppearance="@style/Signal.Text.TitleLarge" /> - + android:layout_gravity="bottom" + android:orientation="vertical"> + android:layout_height="4dp" + android:background="@drawable/bottom_toolbar_shadow" + app:layout_constraintTop_toTopOf="parent" /> - + + + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/layout/stories_choose_group_bottom_sheet.xml b/app/src/main/res/layout/stories_choose_group_bottom_sheet.xml index c268f77be7..cedb998b93 100644 --- a/app/src/main/res/layout/stories_choose_group_bottom_sheet.xml +++ b/app/src/main/res/layout/stories_choose_group_bottom_sheet.xml @@ -22,8 +22,7 @@ android:layout_marginTop="12dp" android:gravity="center" android:text="@string/ChooseGroupStoryBottomSheet__choose_groups" - android:textAppearance="@style/Signal.Text.Body" - android:textStyle="bold" /> + android:textAppearance="@style/Signal.Text.TitleMedium" /> + android:textColor="@color/signal_colorOnSurfaceVariant" + app:backgroundTint="@color/signal_colorSurface5" /> + android:layout_height="match_parent" + tools:viewBindingIgnore="true"> + app:title="@string/EditPrivateStoryNameFragment__edit_story_name" + app:titleTextAppearance="@style/Signal.Text.TitleLarge" /> + tools:layout_gravity="bottom" + tools:viewBindingIgnore="true"> - + app:layout_constraintBottom_toBottomOf="parent"> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/stories_viewer_fragment_page.xml b/app/src/main/res/layout/stories_viewer_fragment_page.xml index 0448ad2e6d..2a263b2110 100644 --- a/app/src/main/res/layout/stories_viewer_fragment_page.xml +++ b/app/src/main/res/layout/stories_viewer_fragment_page.xml @@ -84,6 +84,27 @@ tools:icon="@drawable/ic_reply_24_outline" tools:text="6 views 4 replies" /> + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/payments_preferences.xml b/app/src/main/res/navigation/payments_preferences.xml index f052ec26e7..8d0c8798c2 100644 --- a/app/src/main/res/navigation/payments_preferences.xml +++ b/app/src/main/res/navigation/payments_preferences.xml @@ -112,6 +112,14 @@ + + + + + + + + + + + + Netwerk misluk! Nommer nie geregistreer nie! Die nommer wat jy geskakel het, ondersteun nie veilige telefoonoproepe nie! - Het dit + Ek verstaan @@ -1960,6 +1960,7 @@ %1$s aan jou Media nie meer beskikbaar nie. Kan nie \'n toepassing vind wat hierdie media kan deel nie. + Maak toe %1$d nuwe boodskappe in %2$d gesprekke @@ -2748,10 +2749,14 @@ Pasmaak-opsie + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Nie nou nie + + + Sekuriteitsopstelling + + Beskerm jou fondse + + Help om te verhoed dat iemand met jou foon toegang tot jou fondse verkry deur nog \'n vlak van sekuriteit by te voeg. Jy kan hierdie opsie in Instellings deaktiveer. + + Aktiveer betalingsluiting + + Nie nou nie + + Slaan hierdie stap oor? + + As jy hierdie stap oorslaan, kan enigiemand wat fisiese toegang tot jou foon het, toegelaat word om fondse oor te plaas of jou herstelfrase te sien. + + Kanselleer + + Slaan oor + Voeg fondse by Jou beursie-adres @@ -4733,7 +4758,7 @@ Tik om weer te probeer - Versteek storie + Versteek storie? Nuwe storiebywerkings van %1$s sal nie meer boaan die storielys verskyn nie. @@ -4799,6 +4824,8 @@ Verwyder kyker. Nog geen antwoorde nie + + Jy kan nie op hierdie storie antwoord nie, want jy is nie meer \'n lid van hierdie groep nie. Het op die storie gereageer @@ -4817,6 +4844,13 @@ Skrap My Storie + + + %1$d viewer + %1$d viewers + + + View Wie hierdie storie kan sien @@ -4828,7 +4862,7 @@ Almal behalwe… - Versteek jou storie van spesifieke persone + Versteek jou storie vir spesifieke mense %1$d persoon uitgesluit @@ -4851,8 +4885,6 @@ Laat antwoorde &amp toe; reaksies Laat toe dat mense wat na jou storie kan kyk, daarop reageer en antwoord - - Versteek jou storie vir spesifieke mense. By verstek word jou storie met jou %1$s gedeel Signal-verbindings @@ -4911,6 +4943,22 @@ Deel slegs met… Klaar + + Verwyder groepstorie? + + “%1$s” sal verwyder word. + + Verwyder + + Skrap privaatstorie? + + \"%1$s\" en opdaterings wat in hierdie storie gedeel word, sal uitgevee word. + + Skrap + + Stories is slegs vir Signal-beta-gebruikers beskikbaar. + + As jy \'n storie deel, sal dit slegs beskikbaar wees vir mense wat op Signal-beta is. Voeg by jou storie by? @@ -4923,8 +4971,10 @@ Storie kon nie gestuur word nie. Kontroleer jou verbinding en probeer weer. Stuur + + Skakel af en vee uit - Deel & Kyk na stories + Deel & Kyk na Stories Jy sal nie meer stories kan deel of daarna kyk wanneer hierdie opsie afgeskakel is nie. @@ -4939,7 +4989,7 @@ Benoem storie - Storie se naam (vereis) + Storie se naam (word vereis) Kykers @@ -4977,7 +5027,7 @@ Storie gestuur - Kon nie storie stuur nie. + Kon nie storie stuur nie Kyk na storie @@ -5063,14 +5113,19 @@ Deel slegs met - Private storie · %1$d kyker - Privaatstorie · %1$d kykers + Privaatstorie · %1$d kyker + Private storie · %1$d kykers Groepstorie · %1$d kyker Groepstorie · %1$d kykers + + + %1$d lid + %1$d lede + %1$s · %2$d kyker @@ -5139,7 +5194,7 @@ Alle verbindings is nagegaan, tik stuur om voort te gaan. - Jy het %1$d verbindings wat moontlik Signal herinstalleer of van toestelle verander het. Voordat jy jou storie met hulle deel, gaan hulle veiligheidsnommers na of oorweeg dit om hulle uit jou storie te verwyder. + Jy het %1$d konneksies wat moontlik Signal herinstalleer of van toestelle verander het. Voordat jy jou storie met hulle deel, gaan hulle veiligheidsnommers na of oorweeg dit om hulle uit jou storie te verwyder. Verifieer veiligheidsnommer @@ -5206,7 +5261,7 @@ Wil jy stories afskakel? - Jy sal nie meer stories kan deel of kyk nie. Enige stories wat jy onlangs gestuur het, sal steeds vir andere sigbaar wees totdat dit verval. + Jy sal nie meer stories kan deel of sien nie. Storiebywerkings wat jy onlangs gedeel het, sal ook uitgevee word. Storieprivaatheid diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 48ce5ab134..002b56726c 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -197,7 +197,7 @@ تحديث التطبيق لا تقم بالتحديث تحذير - لقد انتهت صلاحية إصدار Signal الخاص بك. يمكنك عرض محفوظات رسائلك ولكنك لن يصبح بإمكانك إرسال أو استلام الرسائل إلى حين قيامك بالتحديث. + لقد انتهت صلاحية إصدار Signal الخاص بك. يُمكنك عرض محفوظات رسائلك ولكنك لن تتمكّن من إرسال أو استلام الرسائل إلى حين قيامك بالتحديث. لم يتم العثور على متصفح للإنترنت. @@ -765,7 +765,7 @@ ما هي المجموعات الجديدة ؟ تحوي المجموعات الجديدة ميزات كـ ‎@mentions‎ والمشرفين على المجموعة، كما ستدعم مستقبلا المزيد من الميزات. - تم الاحتفاظ بكل محفوظات الرسائل والوسائط قبل الترقية. + سيُحتفظ بكل محفوظات الرسائل والوسائط التي كانت قبل الترقية. قبول دعوة الانضمام إلى هذه المجموعة مرة أخرى ضروري، ولن تصلك أي رسائل من المجموعة إلى حين موافقتك علي الانضمام إليها. يحتاج هذا العضو قبول دعوة الانضمام إلى هذه المجموعة مرة أخرى، ولن تصله أي رسائل من المجموعة إلى حين موافقته على الانضمام إليها : @@ -788,7 +788,7 @@ قم بالترقية إلى مجموعة جديدة يُرجى ترقية هذه المجموعة تحوي المجموعات الجديدة ميزات كـ ‎@mentions‎ والمشرفين على المجموعة، كما ستدعم مستقبلا المزيد من الميزات. - ستُحتفَظ كل محفوظات الرسائل والوسائط قبل الترقية. + سيُحتفظ بكل محفوظات الرسائل والوسائط التي كانت قبل الترقية. حدث خطأ في الشبكة. يُرجى المحاولة مرة أخرى لاحقا. فشلت الترقية. @@ -2256,6 +2256,7 @@ %1$s إليك هذه الوسيط لم يعد متاحا. لم يعثر على تطبيق قادر على فتح هذا الملف. + إغلاق %1$d رسائل جديدة في %2$d محادثات @@ -2679,7 +2680,7 @@ لقد نُسخ ثم أُرسل مع التاريخ إلى الحافظة - سوف يظهر تحديث قصتك هنا. + ستظهر تحديثات قصتك هنا. @@ -3009,12 +3010,12 @@ صوت مراجعة سعة التخزين أأحذف الرسائل القديمة ؟ - أأمحو محفوظات الرسائل ؟ - سوف تُحذَف من جهازك كل الملفات الأقدم من %1$s نهائيا، بما في ذلك محفوظات الرسائل والوسائط. + محو محفوظات الرسائل؟ + ستُحذَف جميع محفوظات الرسائل والوسائط الأقدم من %1$s من جهازك بصفة نهائية. سوف يتم تقليم كل المحادثات إلى أحدث %1$s رسالة. - سوف تُحذَف كل محفوظات الرسائل والوسائط نهائيا من جهازك. - أأنت على يقين من نيتك حذف كل محفوظات الرسائل ؟ - ستُزال محفوظات الرسائل نهائيا. لن يتم التراجع عن هذا الإجراء. + ستُحذَف جميع محفوظات الرسائل والوسائط من جهازك بصفة نهائية. + هل أنت متأكد من أنك تريد حذف كل محفوظات الرسائل ؟ + ستُحذف محفوظات الرسائل نهائيًا. لن يتم التراجع عن هذا الإجراء. حذف الكل الآن للأبد عام واحد @@ -3092,10 +3093,14 @@ تخصيص الخيارات + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3248,6 +3253,26 @@ ليس الآن + + + إعداد الأمان + + اِحم أموالك + + ساعد في منع أي شخص يستخدم هاتفكَ من الوصول إلى أموالك عن طريقة إضافة طبقة أخرى من الأمان. يُمكنك تعطيل هذا الخيار في الإعدادات. + + تفعيل قفل عمليات الدفع + + ليس الآن + + تَخَطّ هذه الخطوة + + قد يُؤدي تخطِّي هذه الخطوة إلى السماح لأي شخص يستخدم هاتفك بتحويل الأموال أو الاطّللاع على عبارة الاسترداد الخاصة بك. + + إلغاء + + تخطّي + إضافة مبالغ عنوان محفظتك @@ -4652,7 +4677,7 @@ إضافة نص إعادة توجيه أسرع - سَيتم تجزئة الفيديوهات إلى مقاطع من 30 ثانية وإرسالها كعدة قصص. + سَيتم تجزئة الفيديوهات إلى مقاطع من 30 ثانية وإرسالها كعدة قِصص. لا يمكن أن تتعدى الفيديوهات المرسلة كقِصص 30 ثانية. لقد أُرسِلت اﻵن الرسائل الموجَّهة فورا. @@ -5149,9 +5174,9 @@ يُرجى اللمس لإعادة المحاولة - أأخفي القصة ؟ + إخفاء القصة؟ - إن مستجدات قصص %1$s الحديثة لن تظهر في أعلى لائحة القصص بعد ذلك. + لن تظهر مستجدات قِصص %1$s الجديدة في أعلى لائحة القصص بعد الآن. إخفاء @@ -5172,9 +5197,9 @@ قصص %1$s - أأحذف القصة ؟ + حذف القصة؟ - سوف تُحذَف هذه القصة من عند جميع من استلمها بما، فيهم أنت. + ستُحذَف هذه القصة من عند جميع من استلمها بما فيهم أنت. تعذّر الحفظ @@ -5214,7 +5239,7 @@ لا مشاهدة حاليا - تفعيل إيصالات القراءة لرؤية من شاهد قصصك. + فًعّل إيصالات القراءة لرؤية من شاهد قصصك. الانتقال إلى الإعدادات @@ -5227,6 +5252,8 @@ إزالة المُشاهد؟ لا جواب حاليا + + لا تستطيع الردّ على هذه القصة لأنك لم تعد عضواً في هذه المجموعة. المتفاعلون مع القصة @@ -5234,7 +5261,7 @@ الإجابات - التفاعل مع هذه القصة + تفاعل مع هذه القصة الإجابة بشكل خاص على %1$s @@ -5245,6 +5272,17 @@ حذف قصتي + + + %1$d viewers + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + %1$d viewers + + + View من يُمكنه مُشاهدة هذه القصة @@ -5256,7 +5294,7 @@ الكل إلا… - إخفاء قصتك من أناس مُحددين + إخفاء قصتك عن أناس مُحددين %1$d شخصا مستبعدا @@ -5280,15 +5318,13 @@ %1$d فرد - اختر من يُمكنه رؤية قصتك. لن تؤثر التغييرات على القصص التي أرسلتها من قبل. + اِختر من يُمكنه رؤية قصتك. لن تؤثر التغييرات على القصص التي أرسلتها من قبل. الإجابات وردود الفعل السماح بالإجابات وردود الفعل - تمكين الأفراد الذين يمكنهم مشاهدة قصتك من التفاعل والرد عليها - - إخفاء قصتك عن أفراد محددين. إن قصتك تتم مشاركتها افتراضيا مع %1$s. + تمكين الأفراد الذين يُمكنهم مشاهدة قصتك من التفاعل والرد عليها جهات الاتصال في Signal @@ -5300,7 +5336,7 @@ وجودهم في جهات اتصال نظامك - "يمكنك لمعارفك رؤية اسمك وصورتك، كما يمكنهم الاطلاع على منشوراتك في « قصتي » إلا إذا أخفيتها عنهم." + "يُمكن لِجهات اتصالك رؤية اسمك وصورتك، كما يمكنهم الاطلاع على منشوراتك في \"قصتي\" إلا إذا أخفيتها عنهم." إضافة مُشاهد @@ -5308,7 +5344,7 @@ إزالة %1$s ؟ - لن يتمكن هذا الشخص بعد ذلك من رؤية قصتك. + لن يتمكن هذا الشخص من رؤية قصتك بعد الآن. إزالة @@ -5336,7 +5372,7 @@ يُرجى كتابة أو لصق عنوان الصفحة - مشاركة وصلة مع مشاهدي قصتك + مشاركة رابط مع مشاهدي قصتك البحث @@ -5347,20 +5383,38 @@ مشاركة فقط مع… تمّ + + حذف قصة المجموعة؟ + + سيتم حذف \"%1$s\" + + إزالة + + حذف قصة خاصة؟ + + سيتم حذف \"%1$s\" والتحديثات التي تمت مشاركتها في هذه القصة. + + حذف + + القصص متاحة لمستخدمي الإصدار التجريبي لتطبيق Signal فقط. + + إذا قمت بمشاركة قصة، فلن تكون متاحة إلا للأشخاص الذين يستخدمون الإصدار التجريبي لتطبيق Signal. - أأضيف للقصة ؟ + إضافة للقصة؟ - إن إضافة محتوى لقصتك سوف يمكِّن ‫معارف Signal‬ من مشاهدتها لمدة 24 ساعة. يمكنك تغيير من يمكنه مشاهدة قصصك في الإعدادات. + يَسمح إضافة محتوى لقصتك ل‫جهات اتصال Signal‬ من مشاهدتها لمدة 24 ساعة. يُمكنك تغيير من يمكنه مشاهدة قصصك في الإعدادات. - الإضافة للقصة + إضافة للقصة تحرير المشاهدين لقد تعذر إرسال القصة. يُرجى التحقق من اتصالك ثم المحاولة مرة أخرى. أرسلْ + + إيقاف وحذف - مشاركة أو إظهار القصص + مشاركة و إظهار القصص لن يصبح بإمكانك بعد الآن مشاركة القصص أو مشاهدتها حينما يكون هذا الخيار غير مُشغَّل. @@ -5415,11 +5469,11 @@ لقد تعذر تحميل المحتوى - القصة مُرسَلة + قصة مُرسَلة لقد فشل إرسال القصة - عرض قصة + عرض القصة عرض صورة الحساب الشخصي @@ -5435,9 +5489,9 @@ لقد تفاعلت مع قصة %1$s - التفاعلات مع قصتك + تفاعل مع قصتك - التفاعلات مع قصة + تفاعل مع قصة @@ -5508,20 +5562,29 @@ قصة خاصة · %1$d مشاهد - قصة خاصة · %1$d مشاهد - قصة خاصة · %1$d مشاهدين + قصة خاصة · مشاهد واحد + قصة خاصة · %1$d مشاهدين قصة خاصة · %1$d مشاهدين - قصة خاصة · %1$d مشاهدين - قصة خاصة · %1$d مشاهدين / مشاهد + قصة خاصة · %1$d مشاهدًا + قصة خاصة · %1$d مشاهد قصة جماعية · %1$d مشاهد - قصة جماعية · %1$d مشاهد - قصة جماعية · %1$d مشاهدين + قصة جماعية · مشاهد واحد + قصة جماعية · %1$d مشاهدين قصة جماعية · %1$d مشاهدين - قصة جماعية · %1$d مشاهدين - قصة جماعية · %1$d مشاهدين / مشاهد + قصة جماعية · %1$d مشاهدًا + قصة جماعية · %1$d مشاهد + + + + %1$d عضو + %1$d عضو + %1$d عضوان + %1$d أعضاء + %1$d عضوًا + %1$d عضو @@ -5543,13 +5606,13 @@ حذف قصة المجموعة؟ - سَيتسبب هذا في إزالة القصة من هذه اللائحة. يُمكنك مواصلة مشاهدة هذه القِصص من هذه المجموعة. + سَيتسبب هذا في إزالة القصة من هذه اللائحة. يُمكنك مواصلة مشاهدة القِصص من هذه المجموعة. إزالة - أأحذف القصة ؟ + حذف القصة؟ - حذف القصة الخصوصية \"%1$s\"؟ + حذف القصة الخاصة \"%1$s\"؟ حذف @@ -5589,7 +5652,7 @@ اسحب لليمين للمُغادرة - فهِمت + عُلم فتح قائمة السياق @@ -5607,7 +5670,7 @@ تمت مراجعة كل جهات الاتصال، انقر إرسال للمواصلة. - لديك %1$d جهات اتصال قد يكونوا أعادو تثبيت Signal أو غيّروا أجهزتهم. قبل مشاركة قِصتك معهم، يُرجى مراجعة أرقام الأمان الخاصة بهم أو فكّر في حذفهم من قصتك. + %1$d من جهات اتصالك قد يكونوا أعادو تثبيت Signal أو غيّروا أجهزتهم. قبل مشاركة قِصتك معهم، يُرجى مراجعة أرقام الأمان الخاصة بهم أو فكّر في حذفهم من قصتك. تحقق من رقم اﻷمان @@ -5641,7 +5704,7 @@ خصوصية قصّتي - اختيار من يمكنه رؤية منشورات في قصتي. يمكنك إحداث تغييرات في أي وقت في الإعدادات. + اختيار من يُمكنه رؤية منشورات في قصتي. يُمكنك إحداث تغييرات في أي وقت في الإعدادات. كل معارف ‫Signal‬ @@ -5674,11 +5737,11 @@ تفعيل القِصص - شارك واعرض قِصص الآخرين. تختفي القصص تلقائيًا بعد 24 ساعة. + شارك وشاهد قِصص الآخرين. تختفي القصص تلقائيًا بعد 24 ساعة. إيقاف تشغيل القِصص؟ - لن تتمكن بعد الآن من مشاركة القِصص أو عرضها. ستظل أي قِصص أرسلتها مؤخرًا ظاهرة للآخرين حتى تنتهي صلاحيتها. + لن تتمكن من مشاركة القِصص أو مُشَاهداتها بعد الآن. وسيتم أيضًا حذف تحديثات القصة التي شاركتها مؤخرًا. إعدادات خصوصية القِصة @@ -5686,7 +5749,7 @@ من يُمكنه مشاهدة هذه القصة - "يُمكن لعضو في هذه المجموعة \"%1$s\" مشاهدة هذه القصة و الرّد عليها. يمكنك تحديث العضوية لهذه الدردشة في المجموعة." + "يُمكن لعضو في هذه المجموعة %1$s مشاهدة هذه القصة و الرّد عليها. يمكنك تحديث العضوية لهذه الدردشة في المجموعة." حذف قصة المجموعة diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 7f388c75f3..f9ce481a76 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -688,7 +688,7 @@ Yeni Qrupa yüksəlt Bu qrupu yüksəlt Yeni Qrupların @adçəkmə və qrup adminləri kimi özəllikləri var və gələcəkdə daha çox özəlliyi dəstəkləyəcək. - Bütün mesaj tarixçəsi və media, yüksəldilməzdən əvvəl saxlanılacaq. + Bütün mesaj tarixçəsi və media yenilənmədən əvvəl saxlanılacaq. Şəbəkə xətası ilə qarşılaşıldı. Daha sonra yenidən sınayın. Yüksəldilmədi. @@ -1855,9 +1855,9 @@ Bir hədiyyə nişanı aldınız - Hekayənizə %1$sreaksiyası verdi + Hekayənizə %1$s reaksiyası verdi - Hekayəyə %1$s reaksiyası verdiniz + Onun hekayəsinə %1$s reaksiyası verdiniz Molly yeniləməsi @@ -1960,6 +1960,7 @@ %1$s sizə göndərildi Media artıq mövcud deyil. Bu medianı paylaşmaq üçün bir tətbiq tapıla bilmir. + Bağla %2$d danışıqdan %1$d yeni mesaj @@ -2670,7 +2671,7 @@ Bu, bütün mesajları ən son %1$s mesaja qədər kəsəcək. Bu, bütün mesaj tarixçəsini və mediaları cihazınızdan birdəfəlik siləcək. Bütün mesaj tarixçənizi silmək istədiyinizə əminsiniz? - Bütün mesaj tarixçəniz birdəfəlik silənəcək. Bu əməliyyatın geri dönüşü yoxdur. + Bütün mesaj tarixçəniz birdəfəlik silənəcək. Bu əməliyyat geri qaytarıla bilməz. Hamısını indi sil Həmişəlik 1 il @@ -2748,10 +2749,14 @@ Seçimi özəlləşdir + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ İndi yox + + + Təhlükəsizlik quraşdırması + + Vəsaitlərinizi qoruyun + + Əlavə təhlükəsizlik səviyyəsi ilə başqa bir şəxsin telefonunuzdan vəsaitlərinizə daxil olmasının qarşısnı alın. Parametrlərdən bu seçimi qeyri-aktiv edə bilərsiniz. + + Ödəniş kilidini aktivləşdirin + + İndi yox + + Bu addım ötürülsün? + + Bu addımı ötürməklə telefonunuza fiziki girişi olan hər kəsin vəsaitlərinizi köçürmək və ya bərpa parolunuza baxmaq imkanı olacaq. + + İmtina + + Ötür + Pul əlavə et Pulqabı ünvanınız @@ -4750,11 +4775,11 @@ Yönləndir - %1$s paylaşan hekayə + %1$s hekayə Hekayə silinsin? - Bu hekayə sizin və bunu alan hər kəs üçün silinəcək + Bu hekayə siz və bunu alan hər kəs üçün silinəcək. Yaddaşda saxlamaq mümkün deyil @@ -4799,6 +4824,8 @@ İzləyicini sil Hələ ki, cavab yoxdur + + Artıq bu qrupun üzvü olmadığınız üçün bu hekayəyə cavab verə bilmirsiniz. Hekayəyə reaksiya verildi @@ -4817,6 +4844,13 @@ Sil Hekayəm + + + %1$d viewer + %1$d viewers + + + View Bu hekayəni kimlər görə bilər @@ -4851,8 +4885,6 @@ Cavablara & reaksiyalara icazə ver Hekayələrinizi görən şəxslərin reaksiya və cavab verməsinə icazə verin - - Hekayələrinizi müəyyən şəxslərdən gizlədin. İlkin olaraq hekayələriniz %1$s ilə paylaşılır Signal Bağlantıları @@ -4864,11 +4896,11 @@ Sistem əlaqə kitabçanızda mövcud olan - "Bağlantılarınız, adınızı və fotonuzu görə bilər, onlardan gizlətmədiyiniz müddətcə hekayələrinizdəki göndərişləri də görə bilər." + "Bağlantılarınız adınızı və fotonuzu görə bilər, onlardan gizlətmədiyiniz müddətcə Hekayələrinizdəki göndərişləri də görə bilər." İzləyici əlavə et - Özəl hekayəni sil + Şəxsi hekayəni sil %1$s çıxarılsın? @@ -4900,7 +4932,7 @@ Yazın və ya bir URL yapışdırın - Hekayənizin bir bağlantısını izləyicilərlə paylaşın + Hekayənizin bir keçidini izləyicilərlə paylaşın Axtar @@ -4911,20 +4943,38 @@ Yalnız bunlarla paylaşın… Bitdi + + Qrup hekayəsi silinsin? + + \"%1$s\" silinəcək. + + Çıxart + + Şəxsi hekayə silinsin? + + \"%1$s\" və bu hekayədə paylaşılan yeniləmələr silinəcək. + + Sil + + Hekayələr yalnız Signal beta üzvlərinə açıqdır. + + Bir hekayə paylaşsanız, onu yalnız Signal beta üzvləri görə biləcək. - Bir hekayə əlavə edilsin? + Hekayəyə əlavə edilsin? - Hekayənizə məzmun əlavə etmək, Signal bağlantılarınızın 24 saat ərzində ona baxmasını təmin edir. Hekayələrinizə kimlərin baxa biləcəyini tənzimləmələrdən dəyişdirə bilərsiniz. + Hekayənizə məzmun əlavə etmək, Signal əlaqələrinizin 24 saat ərzində ona baxmasına imkan verir. Hekayələrinizə kimlərin baxa biləcəyini Parametrlərdən dəyişdirə bilərsiniz. Hekayəyə əlavə et İzləyicilərə düzəliş et - Hekayə göndərilə bilmədi. Bağlantınızı yoxlayıb yenidən sınayın. + Hekayə göndərilə bilmədi. Əlaqənizi yoxlayıb yenidən sınayın. Göndər + + Söndür və sil - Hekayələrə bax & onları paylaş + Hekayələrə bax və onları paylaş Bu seçim bağlı olduqda hekayələrə baxa və ya onları paylaşa bilməyəcəksiniz. @@ -4937,7 +4987,7 @@ %1$d izləyici - Hekayə adı + Hekayəni adlandır Hekayə adı (tələb olunur) @@ -4951,7 +5001,7 @@ Hamısını seç - Hekayə növünü seçin + Hekayənizin növünü seçin Yeni özəl hekayə @@ -5060,7 +5110,7 @@ İndi yox - Yalnız bununla paylaş: + Bununla paylaş: Məxfi hekayə · %1$d baxış @@ -5071,6 +5121,11 @@ Qrup hekayəsi · %1$d baxış Qrup hekayəsi · %1$d baxış + + + %1$d üzv + %1$d üzv + %1$s · %2$d baxış @@ -5079,11 +5134,11 @@ İzləyicilərinizi seçmək üçün toxunun - Hekayə tənzimləmələri + Hekayə parametrləri - Hekayəni çıxarın + Hekayəni sil - Hekayəni silin + Hekayəni sil Qrup hekayəsi silinsin? @@ -5139,11 +5194,11 @@ Bütün əlaqələr nəzərdən keçirilib, davam etmək üçün \"Göndər\" düyməsinə toxunun. - %1$d əlaqəniz Signal-ı yenidən quraşdırmış və ya cihazlarını dəyişmiş ola bilər. Hekayənizi onlarla paylaşmazdan əvvəl, onların təhlükəsizlik nömrələrini nəzərdən keçirin və ya onları hekayə izləyiciləri siyahınızdan çıxarın. + %1$d əlaqəniz Signal-ı yenidən quraşdırmış və ya cihazlarını dəyişmiş ola bilər. Hekayənizi onlarla paylaşmazdan əvvəl onların təhlükəsizlik nömrələrini nəzərdən keçirin və ya onları hekayə izləyiciləri siyahınızdan çıxarın. Güvənlik nömrəsini təsdiqlə - Hekayədən çıxarın + Hekayədən çıxart Yenə də göndər @@ -5194,19 +5249,19 @@ - Hekayələr 24 saat sonra avtomatik yox olur. Hekayənizə baxanları seçin, yaxud da konkret istifadəçi və ya qrupu olan yeni hekayələr yaradın. + Hekayələr 24 saat sonra avtomatik yox olur. Hekayənizə baxanları seçin, yaxud da xüsusi istifadəçi və ya qrupu olan yeni hekayələr yaradın. Hekayələr xüsusiyyətini söndür - Hekayələr xüsusiyyətini söndürsəniz, artıq hekayələri paylaşa və ya onlara baxa bilməyəcəksiniz. + Hekayələr xüsusiyyətini söndürsəniz, artıq hekayələri paylaşa və ya aça bilməyəcəksiniz. Hekayələr xüsusiyyətini yandır - Digərlərinin hekayələrinə baxın və onları paylaşın. Hekayələr 24 saat sonra avtomatik yox olur. + Digərlərinin hekayələrini paylaşın və açın. Hekayələr 24 saat sonra avtomatik yox olur. Hekayələr xüsusiyyəti söndürülsün? - Artıq hekayələrə baxa və ya onları paylaşa bilməyəcəksiniz. İstifadəçilər son göndərdiyiniz bütün hekayələri aktivlik müddəti bitənədək görə bilər. + Artıq hekayələri paylaşa və onlara baxa bilməyəcəksiniz. Ən son paylaşdığınız hekayə yeniləmələri də silinəcək. Hekayənin məxfiliyi @@ -5214,7 +5269,7 @@ Bu hekayəni kimlər görə bilər - "\"%1$s\" qrupunun üzvləri bu hekayəni görə və cavablandıra bilər. Qrupda bu çat üzvlüyünü yeniləyə bilərsiniz." + "%1$s qrupunun üzvləri bu hekayəni görə və cavablandıra bilər. Qrupda bu çat üzvlüyünü yeniləyə bilərsiniz." Qrup hekayəsini sil diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 8b82e44831..0089946206 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -673,7 +673,7 @@ Какво представляват Нови групи? Новите групи имат функции като споменавания и администратори и ще поддържат още функции в бъдеще. - Хронологията на разговорите и медиите бяха запазени. + Хронологията на разговорите и медията бяха запазени преди обновяването. Трябва да приемете покана за влизане в групата и няма да получите съобщения от групата преди приемането на поканата. Този член трябва да приеме покана за присъединяване в тази група и няма да получава съобщения от групата, докато не се съгласи: @@ -688,7 +688,7 @@ Обнови групата Обнови тази група Новите групи имат функции като споменавания и администратори и ще поддържат още функции в бъдеще. - Хронологията на разговорите и медиите ще бъдат запазени. + Хронологията на разговорите и медията ще бъдат запазени преди обновяването. Проблем по мрежата. Опитайте отново по-късно. Неуспешен ъпгрейд. @@ -1960,6 +1960,7 @@ От %1$s към вас Тази мултимедия вече не е налична. Не може да бъде намерено приложение, което да може да споделя тази мултимедия. + Затвори %1$d нови съобщения в %2$d чата @@ -2748,10 +2749,14 @@ Опция за персонализиране + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Не сега + + + Настройка на сигурността + + Защитете средствата си + + Предотвратете достъпа на човек с вашия телефон до средствата ви, като добавите още едно ниво на сигурност. Можете да деактивирате тази опция в Настройки. + + Активирайте заключване на плащания + + Не сега + + Пропуснете тази стъпка? + + Пропускането на тази стъпка може да позволи на всеки, който има физически достъп до телефона ви, да прехвърли средства или да види вашата фраза за възстановяване. + + Отказ + + Пропусни + Добавяне на средства Адресът на вашия портфейл @@ -4799,6 +4824,8 @@ Премахване на зрител Все още няма отговори + + Не може да отговорите на тази история, защото вече не сте член на тази група. Реагира на историята @@ -4817,6 +4844,13 @@ Изтриване Моята история + + + %1$d viewer + %1$d viewers + + + View Кой може да вижда тази история @@ -4851,8 +4885,6 @@ Позволяване на отговори и реакции Позволете на хората, които могат да видят историята ви, да реагират и отговарят - - Скриване на историята ви от конкретни хора. По подразбиране историята ви се споделя с вашите %1$s Signal Връзки @@ -4911,6 +4943,22 @@ Споделяне само с… Готово + + Премахване на груповата история? + + „ %1$s “ ще бъде премахнатa. + + Премахни + + Изтриване на частна история? + + „ %1$s “ и актуализациите, споделени за тази история, ще бъдат изтрити. + + Изтрий + + Историите са достъпни само за бета потребители на Signal. + + Ако споделите история, тя ще бъде достъпна само за хора, които използват бета версия на Signal. Добавяне към историята? @@ -4923,6 +4971,8 @@ Историята не можа да бъде изпратена. Проверете връзката си и опитайте отново. Изпращане + + Изключете и изтрийте Споделяне и преглед на истории @@ -5071,6 +5121,11 @@ Групова история · %1$d зрител Групова история · %1$d зрители + + + %1$d член + %1$d членове + %1$s · %2$d зрител @@ -5206,7 +5261,7 @@ Изключване на истории? - Повече няма да можете да споделяте или виждате истории. Историите, които сте изпратили наскоро, все още ще бъдат видими за другите, докато не изтекат. + Повече няма да можете да споделяте или гледате истории. Актуализациите на истории, които сте споделили наскоро, също ще бъдат изтрити. Поверителност на история @@ -5229,7 +5284,7 @@ Направете експорт на вашите SMS съобщения - Можете да експортирате вашите SMS съобщения в базата данни с SMS-и на телефона ви. Това позволява на други приложения за SMS на телефона ви да имат достъп до тях и да ги импортират. Това не създава споделим файл с хронологията на вашите SMS съобщения. + Можете да експортирате вашите SMS съобщения към SMS базата данни на телефона ви. Това позволява на други приложения за SMS на телефона ви да имат достъп до тях и да ги импортират. Това не създава споделим файл с хронологията на вашите SMS съобщения. Продължи diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index f5d6c0f22f..2dc73ef53a 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -193,7 +193,7 @@ আপডেট করুন আপডেট করবেন না সতর্কবার্তা - আপনার Signal-এর সংস্করণটি পুরোনো হয়ে গেছে। যতখন না আপনি আপডেট করছেন, আপনি পুরোনো বার্তাগুলো দেখতে পাবেন, কিন্তু নতুন বার্তা দেখতে বা পাঠাতে পারবেন না। + আপনার Signal-এর সংস্করণটি পুরোনো হয়ে গেছে। আপডেট না করা পর্যন্ত আপনি পুরোনো ম্যাসেজগুলো দেখতে পাবেন, কিন্তু নতুন ম্যাসেজ দেখতে বা পাঠাতে পারবেন না। কোন ওয়েব ব্রাউজার পাওয়া যায়নি। @@ -673,7 +673,7 @@ নতুন গ্রুপগুলো কি? নতুন গ্রুপে @মেনশন এবং গ্রুপ এডমিনের মতো বৈশিষ্ট্য রয়েছে এবং ভবিষ্যতে আরও বৈশিষ্ট্য সমর্থন করবে। - আপগ্রেডের আগের সমস্ত বার্তা ইতিহাস এবং মিডিয়া বিদ্যমান আছে। + আপগ্রেডের আগের সকল ম্যাসেজের ইতিহাস এবং মিডিয়া বিদ্যমান আছে। আপনাকে আবার এই গ্রুপে যোগদানের জন্য একটি আমন্ত্রণ গ্রহণ করতে হবে এবং আপনি গ্রহণ না করা পর্যন্ত গ্রুপের বার্তা পাবেন না। এই ব্যাবহারকারিকে আবার এই গ্রুপে যোগদানের জন্য একটি আমন্ত্রণ গ্রহণ করতে হবে এবং তিনি সেটি গ্রহণ না করা পর্যন্ত গ্রুপের বার্তা পাবেন না। @@ -688,7 +688,7 @@ নতুন গ্রুপে আপগ্রেড করুন এই গ্রুপ আপগ্রেড করুন নতুন গ্রুপে @মেনশন এবং গ্রুপ এডমিনের মতো বৈশিষ্ট্য রয়েছে এবং ভবিষ্যতে আরও বৈশিষ্ট্য সমর্থন করবে। - আপগ্রেডের পূর্বের সমস্ত বার্তার ইতিহাস এবং মিডিয়া বিদ্যমান থাকবে। + আপগ্রেডের পূর্বের সকল ম্যাসেজের ইতিহাস এবং মিডিয়া বিদ্যমান থাকবে। একটি নেটওয়ার্ক ত্রুটির সম্মুখীন হয়েছে। পরে আবার চেষ্টা করুন। আপগ্রেড করতে ব্যর্থ হয়েছে। @@ -1960,6 +1960,7 @@ %1$s-এর কাছ থেকে আপনার কাছে মিডিয়াটি আর উপলভ্য নেই। এই মিডিয়া শেয়ার করার জন্য কোনও অ্যাপ পাওয়া যায়নি। + বন্ধ %1$dটি নতুন বার্তা%2$dটি কথোপকথন @@ -2343,7 +2344,7 @@ ক্লিপবোর্ডে পাঠানো টাইমস্ট্যাম্প কপি করা হয়েছে। - আপনার স্টোরি\'র আপডেট এখানে দেখানো হবে। + আপনার স্টোরি-র আপডেট এখানে দেখানো হবে। @@ -2623,7 +2624,7 @@ পেমেন্ট (বিটা) কথোপকথন দৈর্ঘ্য সীমা মেসেজগুলো রাখুন - মেসেজের ইতিহাস মুছে ফেলুন + ম্যাসেজের ইতিহাস মুছে ফেলুন সংযুক্ত ডিভাইস সমূহ আলো অন্ধকার @@ -2657,7 +2658,7 @@ ওয়াইফাই ব্যবহার করার সময় রোমিং করার সময় মিডিয়া অটো-ডাউনলোড - বার্তার ইতিহাস + ম্যাসেজের ইতিহাস স্টোরেজ ব্যবহার ছবিসমূহ ভিডিওসমূহ @@ -2665,12 +2666,12 @@ শব্দ স্টোরেজ পর্যালোচনা পুরানো বার্তা মুছবেন? - বার্তার ইতিহাস সাফ করবেন? - এটি আপনার ডিভাইস থেকে %1$s পুরানো সমস্ত বার্তার ইতিহাস এবং মিডিয়া স্থায়ীভাবে মুছে ফেলবে। + ম্যাসেজের ইতিহাস মুছে ফেলবেন? + এটি আপনার ডিভাইস থেকে %1$s থেকে পুরনো সকল ম্যাসেজের ইতিহাস ও মিডিয়া স্থায়ীভাবে মুছে ফেলবে। এটি সমস্ত কথোপকথন স্থায়ীভাবে ছাঁটাই করে সর্বশেষ %1$sটি মেসেজে রাখবে। - এটি আপনার ডিভাইস থেকে মেসেজের সমস্ত ইতিহাস এবং মিডিয়া স্থায়ীভাবে মুছে ফেলবে। - আপনি কি নিশ্চিত যে আপনি মেসেজের সমস্ত ইতিহাস মুছতে চান? - মেসেজের সমস্ত ইতিহাস স্থায়ীভাবে মুছে ফেলা হবে। এই কাজটি পূর্বাবস্থায় ফেরানো যাবে না। + এটি আপনার ডিভাইস থেকে ম্যাসেজের সকল ইতিহাস ও মিডিয়া স্থায়ীভাবে মুছে ফেলবে। + আপনি কি ম্যাসেজের সকল ইতিহাস মুছে ফেলার ব্যাপারে নিশ্চিত? + ম্যাসেজের সকল ইতিহাস স্থায়ীভাবে মুছে ফেলা হবে। এই কাজটি পূর্বাবস্থায় ফেরানো যাবে না। এখনই সব মুছুন চিরতরে ১ বছর @@ -2748,10 +2749,14 @@ বিকল্পগুলি কাস্টমাইজ করুন + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ এখন নয় + + + নিরাপত্তা সেটআপ + + আপনার ফান্ড নিরাপদে রাখুন + + নিরাপত্তার আরেকটি স্তর যোগ করে কোনো ব্যক্তিকে আপনার ফোন ব্যবহারের মাধ্যমে আপনার ফান্ড অ্যাক্সেস করা থেকে প্রতিহত করতে সাহায্য করুন। আপনি সেটিংসে এই অপশনটি নিষ্ক্রিয় করতে পারবেন। + + পেমেন্ট লক সচল করুন + + এখন না + + এই ধাপটি বাদ দেবেন? + + এই ধাপটি বাদ দিলে আপনার ফোনে অ্যাক্সেস আছে এমন যে কেউ ফান্ড ট্রান্সফার করতে বা আপনার পুনরুদ্ধার করার বাক্যটি দেখতে পারবেন। + + বাতিল করুন + + বাদ দিয়ে যান + ফান্ড যোগ করুন আপনার ওয়ালেট ঠিকানা @@ -4256,7 +4281,7 @@ বার্তা যোগ করুন দ্রুত ফরোয়ার্ড - ভিডিওগুলোকে 30 সেকেন্ড ক্লিপে কাটা হবে এবং একাধিক স্টোরি হিসাবে পাঠানো হবে৷ + ভিডিওগুলোকে 30 সেকেন্ড ক্লিপে কাটা হবে এবং একাধিক স্টোরি হিসেবে পাঠানো হবে। স্টোরি-তে পাঠানো ভিডিও 30 সেকেন্ডের বেশি হতে পারবে না। ফরোয়ার্ড করা বার্তা এখন অবিলম্বে পাঠানো হয়। @@ -4703,7 +4728,7 @@ 99+ - স্টোরির গোপনীয়তা + স্টোরি-র গোপনীয়তা আমার স্টোরি @@ -4735,7 +4760,7 @@ স্টোরি লুকাবেন? - %1$s থেকে নতুন স্টোরি আপডেটগুলো আর স্টোরি তালিকার শীর্ষে দেখা যাবে না৷ + %1$s থেকে নতুন স্টোরি আপডেটগুলো আর স্টোরি তালিকার শীর্ষে দেখা যাবে না। লুকান @@ -4754,7 +4779,7 @@ স্টোরি মুছে ফেলবেন? - এই স্টোরিটি আপনার এবং যারা এটি পেয়েছেন তাদের জন্য মুছে ফেলা হবে৷ + এই স্টোরিটি আপনার জন্য এবং যারা এটি পেয়েছেন তাদের জন্য মুছে ফেলা হবে। সেভ করা যায়নি @@ -4786,7 +4811,7 @@ এখন পর্যন্ত কোন ভিউ নেই - কে আপনার স্টোরি দেখেছে তা দেখতে রিড রিসিপ্ট চালু করুন৷ + কে আপনার স্টোরি দেখেছে তা দেখতে রিড রিসিপ্ট চালু করুন। সেটিংস-এ যান @@ -4799,6 +4824,8 @@ দর্শককে বাদ দিন এখন পর্যন্ত কোন রিপ্লাই নেই + + আপনি এই স্টোরির উত্তর দিতে পারবেন না, কারণ আপনি আর এই গ্রুপের সদস্য নন। স্টোরি-তে রিঅ্যাক্ট করা হয়েছে @@ -4817,6 +4844,13 @@ মুছুন আমার স্টোরি + + + %1$d viewer + %1$d viewers + + + View যারা এই স্টোরি দেখতে পাবেন @@ -4844,15 +4878,13 @@ %1$d মানুষ - আপনার স্টোরি কে দেখতে পাবে তা নির্ধারণ করুন৷ পরিবর্তনগুলো আপনার ইতোমধ্যে পাঠানো স্টোরিগুলোকে প্রভাবিত করবে না৷ + আপনার স্টোরি কে দেখতে পাবেন তা নির্ধারণ করুন৷ পরিবর্তনগুলো আপনার ইতোমধ্যে পাঠানো স্টোরিগুলোকে প্রভাবিত করবে না। উত্তর & রিঅ্যাকশন উত্তর & রিঅ্যাকশন অনুমোদন করুন - যারা আপনার স্টোরি দেখতে পাবেন তাদের রিঅ্যাক্ট এবং রিপ্লাই দিতে দিন - - নির্দিষ্ট ব্যক্তিদের কাছ থেকে আপনার স্টোরি লুকান। গতানুগতিকভাবে, আপনার স্টোরি আপনার %1$s এর সাথে শেয়ার করা হয় + যারা আপনার স্টোরি দেখতে পাবেন তাদের রিঅ্যাক্ট এবং উত্তর দিতে দিন Signal কানেকশন @@ -4864,7 +4896,7 @@ আপনার সিস্টেম কন্ট্যাক্টে তাদের রাখা - "আপনার কানেকশনরা আপনার নাম এবং ছবি দেখতে পারেন এবং \"আমার স্টোরি\"-এর পোস্টগুলি দেখতে পারেন যদি না আপনি এটি তাদের কাছ থেকে লুকিয়ে রাখেন৷" + "আপনার কানেকশনরা আপনার নাম ও ছবি দেখতে পারবেন এবং \"আমার স্টোরি\"-এর পোস্টগুলো দেখতে পারবেন, যদি আপনি এটি তাদের কাছ থেকে লুকিয়ে না রাখেন।" দর্শক যোগ করুন @@ -4872,7 +4904,7 @@ %1$s মুছবেন? - এই ব্যক্তি আর আপনার স্টোরি দেখতে পাবেন না। + এই ব্যক্তি আর আপনার স্টোরি দেখতে পারবেন না। সরান @@ -4880,9 +4912,9 @@ এই কার্যক্রমটি পূর্বাবস্থায় ফেরানো যাবে না। - স্টোরি\'র নাম এডিট করুন + স্টোরি-র নাম এডিট করুন - স্টোরি\'র নাম + স্টোরি-র নাম সংরক্ষণ করুন @@ -4900,7 +4932,7 @@ URL টাইপ করুন কিংবা পেস্ট করুন - আপনার স্টোরি\'র ভিউয়ারদের সাথে একটি লিংক শেয়ার করুন + আপনার স্টোরি-র দর্শকদের সাথে একটি লিংক শেয়ার করুন খুঁজুন @@ -4911,22 +4943,40 @@ শুধু এর/এদের সাথে শেয়ার করুন… শেষ + + গ্রুপ স্টোরি সরাবেন? + + \"%1$s\"-কে মুছে ফেলা হবে। + + সরান + + ব্যক্তিগত স্টোরি মুছবেন? + + \"%1$s\" এবং এই স্টোরিতে শেয়ার করা আপডেট মুছে ফেলা হবে। + + মুছে দিন + + স্টোরি শুধুমাত্র Signal বিটা ব্যবহারকারীদের জন্য ব্যবহারযোগ্য। + + আপনি যদি একটি স্টোরি শেয়ার করেন, তবে এটি শুধুমাত্র সেই ব্যক্তিরাই দেখতে পাবেন যারা Signal বিটা ব্যবহার করছেন। স্টোরি যোগ করবেন? - আপনার স্টোরি-তে কন্টেন্ট যোগ করলে তা আপনার Signal কানেকশনদের কাছে 24 ঘন্টা দৃশ্যমান থাকে। আপনি সেটিংসে আপনার স্টোরি কে দেখতে পারবে তা পরিবর্তন করতে পারেন। + আপনার স্টোরি-তে কন্টেন্ট যোগ করলে তা আপনার Signal কানেকশনদের কাছে 24 ঘন্টা দৃশ্যমান থাকে। আপনি সেটিংসে আপনার স্টোরি কে দেখতে পারবেন তা পরিবর্তন করতে পারবেন। স্টোরি যোগ করুন ভিউয়ার এডিট করুন - স্টোরি পাঠানো যায়নি। আপনার সংযোগ ঠিক আছে কিনা দেখুন এবং আবার চেষ্টা করুন। + স্টোরি পাঠানো যায়নি। আপনার সংযোগ ঠিক আছে কি না দেখুন এবং আবার চেষ্টা করুন। পাঠান + + বন্ধ করুন এবং মুছে ফেলুন - &amp শেয়ার করুন; স্টোরি দেখুন + শেয়ার করুন এবং স্টোরি দেখুন - এই অপশনটি বন্ধ থাকলে আপনি আর স্টোরি শেয়ার করতে বা দেখতে পাবেন না৷ + এই অপশনটি বন্ধ থাকলে আপনি আর স্টোরি শেয়ার করতে বা দেখতে পাবেন না। দর্শক বেছে নিন @@ -4937,9 +4987,9 @@ %1$d জন দর্শক - স্টোরি\'র নাম দিন + স্টোরি-র নাম দিন - স্টোরি\'র নাম (আবশ্যক) + স্টোরি-র নাম (আবশ্যক) দর্শক @@ -4947,11 +4997,11 @@ এই ঘরটি পূরণ বাঞ্ছনীয় - ইতিমধ্যে এই নামের একটি স্টোরি আছে + ইতোমধ্যে এই নামের একটি স্টোরি আছে। সবগুলো নির্বাচন করুন - আপনার স্টোরি\'র ধরণ বেছে নিন + আপনার স্টোরি-র ধরণ বেছে নিন নতুন ব্যক্তিগত স্টোরি @@ -4969,7 +5019,7 @@ রিপ্লাই পাঠানো হচ্ছে… - এই স্টোরি-টি আর নেই + এই স্টোরিটি আর নেই। ইন্টারনেট সংযোগ নেই @@ -4995,9 +5045,9 @@ আপনি %1$s-এর স্টোরি-তে রিঅ্যাক্ট করেছেন - আপনার স্টোরি-তে রিঅ্যাক্ট করা হয়েছে + আপনার স্টোরি-তে রিঅ্যাক্ট করেছেন - একটি স্টোরি-তে রিঅ্যাক্ট করা হয়েছে + একটি স্টোরি-তে রিঅ্যাক্ট করেছেন @@ -5071,6 +5121,11 @@ গ্ৰুপ স্টোরি · %1$d জন দর্শক গ্ৰুপ স্টোরি · %1$d জন দর্শক + + + %1$d জন সদস্য + %1$d জন সদস্য + %1$s · %2$d দর্শক @@ -5139,7 +5194,7 @@ সকল কানেকশন রিভিউ করা হয়েছে, চালিয়ে যেতে সেন্ডে ট্যাপ করুন। - আপনার %1$d-টি কানেকশন আছে যারা সম্ভবত সিগন্যাল পুনরায় ইনস্টল করেছে বা ডিভাইস পরিবর্তন করেছেন৷ তাদের সাথে আপনার স্টোরি শেয়ার করার আগে তাদের নিরাপত্তা নম্বর রিভিউ করুন বা আপনার স্টোরি দেখা থেকে তাদের বাদ দিন। + আপনার %1$dটি কানেকশন আছে, যারা সম্ভবত Signal পুনরায় ইনস্টল করেছেন বা ডিভাইস পরিবর্তন করেছেন৷ তাদের সাথে আপনার স্টোরি শেয়ার করার আগে তাদের নিরাপত্তা নম্বরগুলো রিভিউ করুন বা আপনার স্টোরি দেখা থেকে তাদের বাদ দিন। নিরাপত্তা নাম্বার যাচাই করুন @@ -5169,7 +5224,7 @@ আমার স্টোরি প্রাইভেসি - আমার স্টোরি পোস্টগুলো কে দেখতে পাবেন তা বেছে নিন৷ আপনি সবসময় সেটিংস পরিবর্তন করতে পারবেন। + আমার স্টোরি পোস্টগুলো কে দেখতে পাবেন তা বেছে নিন। আপনি সবসময় সেটিংস থেকে টা পরিবর্তন করতে পারবেন। সকল Signal কানেকশন @@ -5194,11 +5249,11 @@ - 24 ঘন্টা পর স্টোরি স্বয়ংক্রিয়ভাবে অদৃশ্য হয়ে যায়। আপনার স্টোরি কে দেখতে পারবেন তা নির্বাচন করুন অথবা নির্দিষ্ট দর্শক বা গ্ৰুপের সাথে নতুন স্টোরি তৈরি করুন৷ + 24 ঘন্টা পর স্টোরি স্বয়ংক্রিয়ভাবে অদৃশ্য হয়ে যায়। আপনার স্টোরি কে দেখতে পারবেন তা নির্বাচন করুন অথবা নির্দিষ্ট দর্শক বা গ্ৰুপের সাথে নতুন স্টোরি তৈরি করুন। স্টোরি বন্ধ করুন - স্টোরি বন্ধ করলে আপনি আর স্টোরি শেয়ার করতে কিংবা দেখতে পারবেন না৷ + স্টোরি বন্ধ করলে আপনি আর স্টোরি শেয়ার করতে কিংবা দেখতে পারবেন না। স্টোরি চালু করুন @@ -5206,15 +5261,15 @@ স্টোরি বন্ধ করবেন? - আপনি আর স্টোরি শেয়ার করতে কিংবা দেখতে পারবেন না। আপনার সম্প্রতি পাঠানো যেকোনো স্টোরি-র সময়কাল শেষ না হওয়া পর্যন্ত অন্যরা দেখতে পাবেন। + আপনি আর স্টোরি শেয়ার করতে বা দেখতে পারবেন না। আপনি সম্প্রতি শেয়ার করেছেন এমন স্টোরির আপডেটগুলোও মুছে ফেলা হবে৷ - স্টোরির গোপনীয়তা + স্টোরি-র গোপনীয়তা যারা এই স্টোরি দেখতে পাবেন - "\"%1$s\" গ্রুপের সদস্যরা এই স্টোরি দেখতে এবং উত্তর দিতে পারবেন। আপনি গ্রুপে এই চ্যাটের সদস্যতা আপডেট করতে পারেন।" + "\"%1$s\" গ্রুপের সদস্যরা এই স্টোরি দেখতে এবং উত্তর দিতে পারবেন। আপনি গ্রুপে এই চ্যাটের সদস্যতা আপডেট করতে পারবেন।" গ্ৰুপ স্টোরি সরিয়ে ফেলুন @@ -5229,7 +5284,7 @@ আপনার এসএমএস ম্যাসেজ এক্সপোর্ট করুন - আপনি আপনার ফোনের এসএমএস ডেটাবেজে আপনার এসএমএস ম্যাসেজ স্থানান্তর করতে পারেন৷ এটি আপনার ফোনে থাকা অন্যান্য এসএমএস অ্যাপগুলোকে অ্যাক্সেস এবং স্থানান্তর করার অনুমতি দেয়৷ এটি আপনার এসএমএস ম্যাসেজ ইতিহাসের একটি শেয়ারযোগ্য ফাইল তৈরি করে না৷ + আপনি আপনার ফোনের এসএমএস ডেটাবেজে আপনার এসএমএস ম্যাসেজ স্থানান্তর করতে পারবেন। এটি আপনার ফোনে থাকা অন্যান্য এসএমএস অ্যাপগুলোকে অ্যাক্সেস এবং স্থানান্তর করার অনুমতি দেয়। এটি আপনার এসএমএস ম্যাসেজের ইতিহাসের একটি শেয়ারযোগ্য ফাইল তৈরি করে না। চালিয়ে যান diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml index 8254b1cbad..c6145bb1a9 100644 --- a/app/src/main/res/values-bs/strings.xml +++ b/app/src/main/res/values-bs/strings.xml @@ -1462,7 +1462,7 @@ Sviđa vam se nova funkcija? Podržite Signal jednokratnom donacijom. - Vaša historija razmjenjivanja poruka s korisnikom %1$s i brojem %2$s je spojena. + Vaša historija razmjenjivanja poruka s korisnikom %1$s i njihovim brojem %2$s je spojena. Vaša historija razmjenjivanja poruka s korisnikom %1$s i drugim chatom koji je pripadao toj osobi je spojena. @@ -1674,7 +1674,7 @@ Greška u mreži! Broj nije registrovan! Broj koji ste birali ne podržava sigurne pozive! - Primljeno na znanje + Razumijem @@ -2108,6 +2108,7 @@ %1$s za Vas Datoteka više nije dostupna. Nije pronađena aplikacija koja može podijeliti ovu datoteku. + Zatvori %1$d novih poruka u %2$d konverzacija @@ -2511,7 +2512,7 @@ Vrijeme slanja kopirano u međuspremnik. - Novine u Vašoj priči prikazat će se ovdje. + Ažuriranja u vašoj priči prikazat će se ovdje. @@ -2838,11 +2839,11 @@ Provjerite memoriju Izbrisati starije poruke? Izbrisati historiju poruka? - Ovo će bespovratno izbrisati svu historiju poruka i datoteke s Vašeg uređaja koji su stariji od %1$s. + Ovime će se trajno izbrisati sva historija poruka i datoteke s vašeg uređaja koji su stariji od %1$s. Ovo će bespovratno svesti sve konverzacije na %1$s posljednjih poruka. - Ovo će bespovratno izbrisati svu historiju poruka i datoteke s Vašeg uređaja. + Ovime će se trajno izbrisati sva historija poruka i datoteke s vašeg uređaja. Jeste li sigurni da želite izbrisati historiju poruka? - Cijela historija poruka bit će bespovratno uklonjena. Ova se akcija ne može opozvati. + Cijela historija poruka bit će trajno uklonjena. Ova se radnja ne može poništiti. Izbriši sve odmah Zauvijek 1 godinu @@ -2920,10 +2921,14 @@ Prilagodi + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3076,6 +3081,26 @@ Ne sada + + + Postavljanje sigurnosti + + Zaštitite svoja sredstva + + Spriječite osobu kod koje je vaš telefon da pristupi vašim sredstvima tako što ćete dodati još jedan nivo sigurnosti. Ovu opciju možete onemogućiti u Postavkama. + + Omogućite zaključavanje plaćanja + + Ne sada + + Preskočiti ovaj korak? + + Ako preskočite ovaj korak, možete omogućiti svima koji imaju fizički pristup vašem telefonu da prenesu sredstva ili vide vašu frazu za oporavak. + + Otkaži + + Preskoči + Dodaj sredstva Adresa Vašeg novčanika @@ -4170,7 +4195,7 @@ Predefinisani rok za nove konverzacije Podesite vrijeme za nestajanje poruka koje će se automatski primijeniti na sve nove konverzacije kada ih Vi započnete. - Upravljate pričama i ko može vidjeti vaše priče + Upravljate pričama i ko ih može vidjeti Zahtijevaj zaključavanje ekrana Androida ili otisak prsta za prijenos sredstava Nije moguće omogućiti osiguranje plaćanja @@ -4454,9 +4479,9 @@ Napiši poruku Brža prosljeđivanja - Videozapisi će se skratiti na isječke od 30 s i poslati kao više Priča. + Videozapisi će se skratiti na isječke od 30 s i poslati kao više priča. - Videozapisi koje pošaljete u Priče ne mogu biti duži od 30 s. + Videozapisi koje pošaljete u priče ne mogu biti duži od 30 s. Proslijeđene poruke sada se šalju trenutačno. Pošalji %1$d poruku @@ -4911,7 +4936,7 @@ 99+ - Privatnost priče + Privatnost priča Moje priče @@ -4943,11 +4968,11 @@ Sakriti priču? - Promjene koje %1$s načini u priči neće se više prikazivati u vrhu popisa priča. + Promjene koje %1$s načini u priči neće se više prikazivati na vrhu popisa priča. Sakrij - Priča skrivena + Priča je skrivena Skrivene priče @@ -4960,11 +4985,11 @@ Proslijedi - %1$spriča + Priča korisnika %1$s Izbrisati priču? - Ova priča bit će izbrisana i za Vas i za sve one koji su je primili. + Ova priča će biti izbrisana i za vas i za sve one koji su je primili. Nije moguće spremiti @@ -5000,7 +5025,7 @@ Još nema pregleda - Omogućite potvrde o čitanju da vidite ko je pregledao vaše priče. + Omogućite potvrde o čitanju da vidite ko je pogledao vaše priče. Idi u postavke @@ -5013,8 +5038,10 @@ Ukloni gledaoca Još nema odgovora + + Ne možete odgovoriti na ovu priču jer više niste član ove grupe. - Reagovao/la na priču + Reagovao/la je na priču Pregledi @@ -5031,6 +5058,15 @@ Izbriši Moja priča + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + + + View Ko može vidjeti ovu priču @@ -5042,7 +5078,7 @@ Svi osim… - Sakrijte priču od određenih osoba + Sakrij priču od određenih osoba %1$d izuzeta osoba @@ -5062,15 +5098,13 @@ %1$d osoba - Odaberite ko može pregledati vašu priču. Promjene neće uticati na priče koje ste već poslali. + Odaberite ko može vidjeti vašu priču. Promjene neće uticati na priče koje ste već poslali. Odgovori i reakcije Dopusti odgovore i reakcije - Dopustiti osobama koje mogu vidjeti Vašu priču da reaguju i odgovore - - Sakrijte svoju priču od određenih osoba. Inicijalno, Vaša priča bit će podijeljena sa Vašim %1$s + Dopustite osobama koje mogu vidjeti vašu priču da reaguju i odgovore Signal veze @@ -5082,7 +5116,7 @@ Imate ih u svojim kontaktima na telefonu - "Vaše veze mogu vidjeti Vaše ime i fotografiju, a mogu vidjeti i ono što napišete u \"Moja priča\", izuzev ako to ne sakrijete od njih." + "Vaši kontakti mogu vidjeti vaše ime i fotografiju, a mogu vidjeti i objave u \"Moja priča\", izuzev ako to ne sakrijete od njih." Dodaj posmatrača @@ -5090,7 +5124,7 @@ Ukloniti %1$s? - Ova osoba više neće vidjeti Vašu priču. + Ova osoba više neće vidjeti vašu priču. Ukloni @@ -5118,7 +5152,7 @@ Kucajte ili zalijepite URL - Podijelite link s pratiocima Vaše priče + Podijelite link s pratiocima vaše priče Traži @@ -5129,18 +5163,36 @@ Dijeli samo sa… Uredu + + Ukloni priču grupe? + + \"%1$s\" će biti uklonjena. + + Ukloni + + Izbrisati privatnu priču? + + \"%1$s\" i ažuriranja podijeljena u ovoj priče će se izbrisati. + + Izbriši + + Priče su dostupne samo korisnicima beta verzije Signala. + + Ako podijelite priču, bit će dostupna samo osobama koje su na beta verziji Signala. Dodati u priču? - Dodavši sadržaj svojoj priči omogućavate svojim Signal vezama da ga vide narednih 24 sata. U Podešavanjima možete odrediti ko će vidjeti Vašu priču. + Ako dodate sadržaj svojoj priči, omogućavate svojim Signal kontaktima da ga vide naredna 24 sata. U Postavkama možete odrediti ko će vidjeti vašu priču. Dodaj u priču Sredi posmatrače - Nije bilo moguće poslati priču. Provjerite svoju konekciju i pokušajte ponovo. + Nije bilo moguće poslati priču. Provjerite konekciju i pokušajte ponovo. Šalji + + Isključi i izbriši Podijeli i pogledaj priče @@ -5157,7 +5209,7 @@ %1$d gledaoca - Nazovi priču + Postavi naziv priče Naziv priče (obavezno) @@ -5171,7 +5223,7 @@ Odaberi sve - Odaberite vrstu Vaše priče + Odaberite vrstu priče Nova privatna priča @@ -5215,9 +5267,9 @@ Reagovali ste na priču koju je objavio/la %1$s - Reagovao/la na Vašu priču + Reagovao/la je na vašu priču - Reagovao/la na priču + Reagovao/la je na priču @@ -5282,7 +5334,7 @@ Ne sada - Dijelite samo sa + Dijeli samo sa Privatna priča · %1$d gledalac @@ -5297,6 +5349,13 @@ Grupna priča · %1$d gledaoca Grupna priča · %1$d gledaoca + + + %1$d član + %1$d člana + %1$d članova + %1$d članova + %1$s · %2$d gledalac @@ -5307,7 +5366,7 @@ Dodirnite da odaberete gledaoce - Podešavanja priče + Postavke priče Ukloni priču @@ -5355,7 +5414,7 @@ Prevucite udesno da izađete - Primljeno na znanje + Razumijem Otvorite kontekstni meni @@ -5373,7 +5432,7 @@ Sve veze su pregledane, dodirnite \"Pošalji\" da nastavite. - Imate veze (njih %1$d) koje su možda ponovo instalirale Signal ili su promijenile uređaje. Prije nego podijelite priču s tim osobama, pregledajte njihove sigurnosne brojeve ili razmotrite opciju da ih uklonite iz svoje priče. + Imate kontakte (njih %1$d) koji su možda ponovo instalirali Signal ili su promijenili uređaje. Prije nego podijelite priču s tim osobama, pregledajte njihove sigurnosne brojeve ili razmotrite opciju da ih uklonite iz svoje priče. Provjerite sigurnosni broj @@ -5430,7 +5489,7 @@ - Priče automatski nestaju nakon 24 sata. Odaberite ko može vidjeti vaše priče li kreirajte nove priče s određenim gledaocima ili grupama. + Priče automatski nestaju nakon 24 sata. Odaberite ko može vidjeti vaše priče ili kreirajte nove priče s određenim gledaocima ili grupama. Isključi priče @@ -5442,9 +5501,9 @@ Isključi priče? - Više nećete moći dijeliti ni pregledati priče. Druge osobe će i dalje moći pregledati priče koje ste nedavno poslali sve dok ne isteknu. + Više nećete moći dijeliti niti pregledati priče. Ažuriranja priča koja ste nedavno podijelili će se također izbrisati. - Privatnost priče + Privatnost priča diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 41be026e87..a5ed880a10 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -193,7 +193,7 @@ Actualitza-la No l\'actualitzis Advertiment - La versió del Signal ha vençut. Podeu veure l\'historial de missatges però no podreu enviar-ne ni rebre\'n fins que l\'actualitzeu. + La versió de Signal ha vençut. Podràs veure l\'historial de missatges però no Podràs enviar-ne ni rebre\'n fins que l\'actualitzis. No s\'ha trobat cap navegador web. @@ -1346,7 +1346,7 @@ T\'agrada aquesta nova funció? Ajuda a Signal amb una donació puntual! - El teu historial de missatges amb %1$s i el seu número %2$s s\'han combinat. + El teu historial de missatges amb %1$s i el teu número %2$s s\'han combinat. El teu historial de missatges amb %1$s i un altre xat amb la mateixa persona s\'han combinat. @@ -1960,6 +1960,7 @@ %1$s a vós El contingut ja no està disponible. No es pot trobar cap aplicació que pugui compartir aquest contingut. + Tanca %1$d missatges nous a %2$d converses @@ -2200,7 +2201,7 @@ Història · %1$s - Vós · Història + Tu · Història Ja no està disponible @@ -2665,11 +2666,11 @@ Àudio Revisa l\'emmagatzematge Voleu suprimir els missatges més antics? - Voleu netejar l\'historial dels missatges? + Vols netejar l\'historial dels missatges? Això suprimirà permanentment l\'historial dels missatges i el contingut del dispositiu més antic de %1$s. Això reduirà permanentment totes les converses als %1$s missatges més recents. Això suprimirà permanentment tot l\'historial dels missatges i tot el contingut del dispositiu. - Segur que voleu suprimir tot l\'historial dels missatges? + Segur que vols suprimir tot l\'historial dels missatges? Se suprimirà permanentment tot l\'historial dels missatges. Aquesta acció no es pot desfer. Suprimeix-ho tot ara Per sempre @@ -2748,10 +2749,14 @@ Opció de personalització + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Ara no + + + Configuració de seguretat + + Protegeix els teus fons + + Ajuda a evitar que una persona que tingui el teu telèfon pugui accedir als teus fons afegint una altra capa de seguretat. Pots desactivar aquesta opció a Ajustos. + + Activar el bloqueig de pagament + + Ara no + + Ometre aquest pas? + + Si omets aquest pas, qualsevol persona que tingui accés físic al teu telèfon podrà transferir fons o veure la teva frase de recuperació. + + Cancel·la + + Omet + Afegeix fons La vostra adreça de cartera @@ -4711,7 +4736,7 @@ No hi ha actualitzacions recents per mostrar ara mateix. - Amaga la història + Oculta la història Mostra la història @@ -4733,7 +4758,7 @@ Toqueu aquí per tornar-ho a provar - Voleu amagar la història? + Vols ocultar la història? Les actualitzacions d\'històries noves de %1$s ja no apareixeran al capdamunt de la llista d\'històries. @@ -4752,9 +4777,9 @@ Història de %1$s - Voleu suprimir la història? + Vols suprimir la història? - Aquesta història se suprimirà per a vós i per a tots els que l\'han rebut. + Aquesta història se suprimirà per a tu i per a tots els que l\'han rebut. No s\'ha pogut guardar @@ -4799,6 +4824,8 @@ Eliminar espectador Encara no té respostes + + No pots respondre a aquesta història perquè ja no pertanys a aquest grup. Ha reaccionat a la història @@ -4817,10 +4844,17 @@ Suprimits La meva història + + + %1$d viewer + %1$d viewers + + + View Qui pot veure aquesta història - Amaga la història de + Oculta la història de Tots els contactes de Signal @@ -4850,9 +4884,7 @@ Permet respostes i reaccions - Permeteu que les persones que puguin veure la història hi reaccionin i hi responguin. - - Amagueu la història a persones específiques. De manera predeterminada, la vostra història es comparteix amb %1$s + Permet que les persones que puguin veure la història hi reaccionin i hi responguin. Contactes de Signal @@ -4864,7 +4896,7 @@ tenir-les als contactes del sistema - "Els teus contactes poden veure el vostre nom i la fotografia, i poden veure les publicacions a \"La meva història\" tret que decideixis ocultar-les-hi." + "Els teus contactes poden veure el teu nom i la fotografia, i poden veure les publicacions a \"La meva història\" tret que decideixis ocultar-les-hi." Afegiu-hi un espectador @@ -4872,7 +4904,7 @@ Voleu suprimir %1$s? - Aquesta persona ja no veurà la vostra història. + Aquesta persona ja no veurà la teva història. Suprimeix @@ -4900,7 +4932,7 @@ Escriviu o enganxeu-hi un URL - Compartiu un enllaç amb els espectadors de la història + Comparteix un enllaç amb els espectadors de la història Cerca @@ -4911,6 +4943,22 @@ Compartir només amb… Fet + + Vols esborrar aquesta història de grup? + + S\'eliminarà \"%1$s\". + + Suprimeix + + Eliminar història privada? + + S\'eliminarà \"%1$s\" i totes les actualitzacions compartides en aquesta història. + + Suprimeix + + Les històries només estan disponible per als usuaris de Signal beta. + + Si comparteixes una història, només estarà disponible per als usuaris de Signal beta. Ho voleu afegir a la història? @@ -4920,13 +4968,15 @@ Edita\'n els espectadors - No s\'ha pogut enviar la història. Comproveu la connexió i torneu-ho a provar. + No s\'ha pogut enviar la història. Comprova la connexió i torna-ho a provar. Envia + + Desactivar i eliminar - Compartiu i vegeu històries + Comparteix i mira històries - Ja no podreu compartir ni veure històries quan aquesta opció estigui desactivada. + Ja no podràs compartir ni veure històries quan aquesta opció estigui desactivada. Trieu espectadors @@ -4939,7 +4989,7 @@ Nom de la història - Nom de la història (cal) + Nom de la història (obligatori) Espectadors @@ -4951,7 +5001,7 @@ Selecciona-ho tot - Trieu el tipus d\'història + Tria el tipus d\'història Història privada nova @@ -4977,7 +5027,7 @@ Història enviada - Ha fallat enviar la història. + No s\'ha pogut enviar la història. Mostra la història @@ -4993,9 +5043,9 @@ Desactiva - Heu reaccionat a la història de %1$s + Has reaccionat a la història de %1$s - Ha reaccionat a la vostra història + Ha reaccionat a la teva història Ha reaccionat a una història. @@ -5071,6 +5121,11 @@ Història de grup · %1$d espectador Història de grup · %1$d espectadors + + + %1$d membre + %1$d membres + %1$s · %2$d espectador @@ -5091,7 +5146,7 @@ Suprimeix - Voleu suprimir la història? + Vols suprimir la història? Vols eliminar la història privada \"%1$s\"? @@ -5206,7 +5261,7 @@ Desactivar històries? - Ja no podràs compartir o visualitzar històries. Qualsevol història que hagis enviat recentment continuarà sent visible per als altres usuaris fins que expiri. + Ja no podràs compartir o veure històries. Les històries que hagis compartit recentment també seran eliminades. Privacitat de la història diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index e94f0593a0..d5e5baedce 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -220,7 +220,7 @@ Najít podle uživatelského jména - Mé příběhy + Moje příběhy Nový příběh @@ -719,7 +719,7 @@ Co jsou Nové skupiny? Nové skupiny mají funkce jako @zmínky a správce skupin a v budoucnu budou podporovat další funkce. - Před aktualizací byla uchována veškerá historie zpráv a média. + Veškerá historie zpráv a média byla zachována z doby před aktualizací. Budete muset přijmout pozvánku, abyste se znovu připojili k této skupině, a nebudete přijímat skupinové zprávy, dokud ji nepřijmete. Tento člen bude muset přijmout pozvánku, aby se znovu připojil k této skupině, a dokud ji nepřijme, nebude dostávat skupinové zprávy: @@ -738,7 +738,7 @@ Aktualizovat na novou skupinu Aktualizovat tuto skupinu Nové skupiny mají funkce jako @zmínky a správce skupin, a v budoucnu budou podporovat další funkce. - Před aktualizací bude uchována veškerá historie zpráv a média. + Veškerá historie zpráv a média budou zachována z doby před aktualizací. Došlo k síťové chybě. Zkuste to znovu později. Aktualizace se nezdařila. @@ -2108,6 +2108,7 @@ %1$s pro vás Média již nejsou k dispozici. Nebyla nalezena žádná aplikace pro sdílení tohoto média. + Zavřít %1$d nových zpráv v %2$d konverzacích @@ -2838,10 +2839,10 @@ Zkontrolovat úložiště Smazat starší zprávy? Smazat historii zpráv? - Tímto trvale smažete veškerou historii zpráv a média z vašeho zařízení starší než %1$s. + Tímto trvale smažete veškerou historii zpráv a média z vašeho zařízení starší než %1$s. Tímto trvale zkrátíte všechny konverzace na %1$s nejnovějších zpráv. - Tímto trvale smažete celou historii zpráv a média z vašeho zařízení. - Jste si jistí, že chcete smazat celou historii zpráv? + Tímto trvale smažete celou historii zpráv a média z vašeho zařízení. + Opravdu chcete smazat celou historii zpráv? Celá historie zpráv bude trvale odstraněna. Tuto akci nelze vrátit zpět. Vše nyní smazat Navždy @@ -2920,10 +2921,14 @@ Nastavit předvolbu + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3076,6 +3081,26 @@ Nyní ne + + + Nastavení zabezpečení + + Chraňte své prostředky + + Pomozte zabránit osobě používající váš telefon v přístupu k vašim finančním prostředkům přidáním další úrovně zabezpečení. Tuto možnost můžete vypnout v nastavení. + + Zapnout zámek plateb + + Teď ne + + Přeskočit tenhle krok? + + Přeskočením tohoto kroku můžete komukoli, kdo má fyzický přístup k vašemu telefonu, umožnit provedení převodu finančních prostředků nebo zobrazení vaší fráze pro obnovení. + + Storno + + Přeskočit + Přidat prostředky Adresa vaší peněženky @@ -4170,7 +4195,7 @@ Výchozí časovač pro nové konverzace Nastavení výchozího časovače zmizení zprávy pro všechny vámi zahájené nové konverzace. - Spravujte své příběhy a to, kdo je může zobrazit + Spravujte své příběhy a to, kdo je může zobrazit Vyžadovat při převodu finančních prostředků zámek obrazovky nebo otisk prstu systému Android Zámek plateb nelze aktivovat @@ -4454,9 +4479,9 @@ Přidat zprávu Rychlejší přeposílání - Videa budou zkrácena na 30vteřinové klipy a odeslána jako několik příběhů. + Videa budou zkrácena na 30vteřinové klipy a odeslána jako několik příběhů. - Videa posílaná jako příběhy nesmí být delší než 30 vteřin. + Videa odeslaná do příběhů nesmí být delší než 30 vteřin. Přeposlané zprávy se nyní odesílají okamžitě. Odeslat %1$d zprávu @@ -4913,15 +4938,15 @@ Soukromí příběhů - Mé příběhy + Moje příběhy Klepnutím přidáte příběh Žádné nové aktualizace k zobrazení. - Schovat příběh + Skrýt příběh - Zobrazit příběh + Zrušit skrytí příběhu Přeposlat @@ -4943,7 +4968,7 @@ Skrýt příběh? - Nové aktualizace od %1$s se již neobjeví v horní části seznamu příběhů. + Nové aktualizace příběhu od %1$s se již neobjeví v horní části seznamu příběhů. Skrýt @@ -4964,7 +4989,7 @@ Smazat příběh? - Příběh bude odstraněn pro vás a každého, kdo ho obdržel. + Příběh bude odstraněn pro vás a  pro všechny, kdo ho obdrželi. Nepodařilo se uložit @@ -5000,7 +5025,7 @@ Zatím žádná zobrazení - Povolte potvrzení o přečtení, abyste viděli, kdo si prohlížel vaše příběhy. + Povolte potvrzení o přečtení, abyste viděli, kdo si prohlížel vaše příběhy. Přejít do nastavení @@ -5013,8 +5038,10 @@ Odebrat sledujícího Zatím žádné odpovědi + + Na tento příběh nemůžete reagovat, protože už nejste členem této skupiny. - Reagoval(a) na příběh + Reagoval/a na příběh Zobrazení @@ -5031,10 +5058,19 @@ Smazat Můj příběh + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + + + View Kdo může tento příběh zobrazit - Skrýt příběhy od + Skrýt příběhy před Všechna spojení Signal @@ -5062,15 +5098,13 @@ %1$d lidí - Vyberte, kdo kdo si může váš příběh prohlédnout. Změny se nedotknou příběhů, které jste už sdíleli. + Vyberte, kdo si může váš příběh zobrazit. Změny se nedotknou příběhů, které jste už sdíleli. Odpovědi & reakce Povolit odpovědi & reakce - Nechte lidi, kteří si mohou váš příběh prohlédnout, reagovat a odpovídat - - Skryjte svůj příběh před konkrétními lidmi. Ve výchozím nastavení je váš příběh sdílen s vašimi %1$s + Nechte lidi, kteří si mohou váš příběh zobrazit, reagovat a odpovídat Spojení Signal @@ -5082,7 +5116,7 @@ Uložením do vašeho seznamu kontaktů - "Vaše připojení vidí vaše jméno a fotografii a mohou vidět příspěvky v \"Mém příběhu\", pokud je před nimi neskryjete." + "Vaše spojení vidí vaše jméno a fotografii a mohou vidět příspěvky v Mém příběhu, pokud je před nimi neskryjete." Přidat sledovače @@ -5090,7 +5124,7 @@ Odstranit %1$s? - Tato osoba nadále neuvidí váš příběh. + Tato osoba již váš příběh neuvidí. Odebrat @@ -5098,9 +5132,9 @@ Tuto operaci nelze vzít zpět. - Upravit jméno příběhu + Upravit název příběhu - Jméno příběhu + Název příběhu Uložit @@ -5118,7 +5152,7 @@ Napište nebo vložte URL - Sdílejte odkaz s těmi, kdo si zobrazili váš příběh + Sdílejte odkaz s těmi, kdo si zobrazili váš příběh Vyhledat @@ -5129,20 +5163,38 @@ Sdílet jen s… Hotovo + + Odebrat skupinový příběh? + + „%1$s“ – bude odebrán. + + Odebrat + + Smazat soukromý příběh? + + „%1$s“ a aktualizace sdílené k tomuto příběhu budou smazány. + + Smazat + + Příběhy jsou dostupné jen uživatelům verze Signal beta. + + Pokud sdílíte příběh, bude dostupný jen lidem, kteří používají Signal beta. - Přidat příběh? + Přidat do příběhu? - Přidání obsahu do příběhu umožní vašim připojení k síti Signál jeho zobrazení po dobu 24 hodin. Kdo si může váš příběh prohlížet, můžete změnit v Nastaveních. + Přidáním obsahu do příběhu umožníte svým spojením Signal jeho zobrazení po dobu 24 hodin. V nastavení můžete změnit, kdo si váš příběh může zobrazit. - Přidat příběh + Přidat do příběhu Upravit, kdo si může příběh zobrazit - Příběh se nepodařilo odeslat. Zkontrolujte připojení a zkuste to znovu. + Příběh se nepodařilo odeslat. Zkontrolujte připojení a zkuste to znovu. Odeslat + + Vypnout a smazat - Sdílení & zobrazení příběhů + Sdílení a zobrazování příběhů Po vypnutí této možnosti již nebudete moci sdílet ani zobrazovat příběhy. @@ -5159,7 +5211,7 @@ Pojmenovat příběh - Jméno příběhu (požadováno) + Název příběhu (povinné) Zobrazení @@ -5167,7 +5219,7 @@ Toto pole je povinné. - Příběh se stejným jménem již existuje. + Příběh s tímto názvem již existuje. Vybrat vše @@ -5197,7 +5249,7 @@ Odeslaný příběh - Nepodařilo se odeslat příběh + Příběh se nepodařilo odeslat Zobrazit příběh @@ -5213,11 +5265,11 @@ Vypnout - Reagovali jste na příběh %1$s + Reagovali jste na příběh od %1$s - Reagoval(a) na váš příběh + Reagoval/a na váš příběh - Reakce na příběh + Reagoval/a na příběh @@ -5285,17 +5337,24 @@ Sdílet pouze s - Soukromí příběh · %1$d sledující - Soukromí příběh · %1$d sledující - Soukromí příběh · %1$d sledujících - Soukromý příběh · %1$d zobrazení + Soukromý příběh · %1$d sledující + Soukromý příběh · %1$d sledující + Soukromý příběh · %1$d sledujících + Soukromý příběh · %1$d sledujících Skupinový příběh · %1$d sledující Skupinový příběh · %1$d sledující Skupinový příběh · %1$d sledujících - Skupinový příběh · %1$d zobrazení + Skupinový příběh · %1$d sledujících + + + + %1$d člen + %1$d členové + %1$d členů + %1$d členů @@ -5315,7 +5374,7 @@ Odebrat skupinový příběh? - Tím se příběh z tohoto seznamu odstraní. Stále ale uvidíte příběhy z této skupiny. + Tím se příběh odstraní z tohoto seznamu. Příběhy z této skupiny si budete moci prohlížet i nadále. Odebrat @@ -5373,11 +5432,11 @@ Všechna spojení byla zkontrolována, pokračujte klepnutím na tlačítko odeslat. - Máte %1$d spojení, která si pravděpodobně přeinstalovala aplikaci Signal nebo změnila zařízení. Předtím, než s nimi budete sdílet svůj příběh, zkontrolujte jejich bezpečnostní čísla nebo zvažte jejich odebrání z příběhu. + Máte %1$d spojení, která si pravděpodobně přeinstalovala aplikaci Signal nebo změnila zařízení. Než s nimi budete sdílet svůj příběh, zkontrolujte jejich bezpečnostní čísla nebo zvažte jejich odebrání z příběhu. Ověření bezpečnostního čísla - Odebrat z příběhu + Odebrat z příběhu Přesto poslat @@ -5405,7 +5464,7 @@ Soukromí mého příběhu - Vyberte, kdo může vidět příspěvky k „Mému příběhu“ + Vyberte, kdo uvidí příspěvky v Mém příběhu. V nastavení to můžete kdykoli změnit. Všechna spojení Signal @@ -5430,19 +5489,19 @@ - Příběhy automaticky zmizí po 24 hodinách. Vyberte, kdo si může váš příběh prohlédnout, nebo vytvořte nové příběhy pro konkrétní diváky nebo skupiny. + Příběhy automaticky zmizí po 24 hodinách. Vyberte, kdo může váš příběh zobrazit, nebo vytvořte nové příběhy pro konkrétní diváky nebo skupiny. Vypnout příběhy - Pokud příběhy vypnete, nebudete již moci příběhy sdílet ani zobrazovat. + Pokud příběhy vypnete, už je nebudete moct sdílet ani zobrazovat. Zapnout příběhy - Sdílejte a prohlížejte příběhy ostatních. Příběhy automaticky zmizí po 24 hodinách. + Sdílejte a prohlížejte příběhy ostatních. Příběhy automaticky zmizí po 24 hodinách. Vypnout příběhy? - Příběhy již nebudete moci sdílet ani prohlížet. Všechny příběhy, které jste nedávno odeslali, budou pro ostatní stále viditelné, dokud nevyprší jejich platnost. + Příběhy již nebudete moci sdílet ani zobrazovat. Aktualizace příběhů, které jste nedávno sdíleli, budou také odstraněny. Soukromí příběhů @@ -5450,7 +5509,7 @@ Kdo může tento příběh zobrazit - "Tento příběh mohou zobrazit a odpovídat na něj členové skupiny %1$s. Členství pro tuto konverzaci můžete aktualizovat ve skupině." + "Tento příběh mohou zobrazit a odpovídat na něj členové skupiny %1$s. Členství v této konverzaci můžete aktualizovat ve skupině." Odstranit skupinový příběh @@ -5465,7 +5524,7 @@ Exportujte své SMS zprávy - SMS zprávy můžete exportovat do databáze SMS zpráv svého telefonu. Tím povolíte ostatním SMS aplikacím v telefonu přístup k nim a jejich import. Nevytvoří se tím však sdílený soubor historie SMS zpráv. + SMS zprávy můžete exportovat do databáze SMS zpráv svého telefonu. Tím povolíte ostatním SMS aplikacím v telefonu přístup k nim a jejich import. Nevytvoří se tím však sdílený soubor historie SMS zpráv. Pokračovat diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index b58acb7d06..45f8b86820 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -193,7 +193,7 @@ Opdatér Opdatér ikke Advarsel - Din version af Signal er udløbet. Du kan se din beskedhistorik, men du kan ikke sende eller modtage beskeder, før du opdaterer. + Din Signal-version er udløbet. Du kan se din meddelelseshistorik, men du kan ikke sende eller modtage beskeder, før du opdaterer. Ingen webbrowser fundet. @@ -673,7 +673,7 @@ Hvad er nye grupper? Nye grupper har funktioner som @omtaler og gruppeadministratorer og vil understøtte flere funktioner i fremtiden. - Al beskedhistorik og mediefiler er blevet bevaret fra før opgraderingen. + Al meddelelseshistorik og alle mediefiler fra før opdateringen er blevet gemt. Du skal godkende en invitation for at blive medlem af denne gruppe igen og vil ikke modtage gruppebeskeder indtil da. Dette medlem skal acceptere en invitation til at deltage i gruppen igen og vil ikke modtage gruppebeskeder, før de accepterer: @@ -688,7 +688,7 @@ Opgrader til Ny gruppe Opgradér gruppen Nye grupper har funktioner som @omtaler og gruppeadministratorer og vil understøtte flere funktioner i fremtiden. - Al beskedhistorik og mediefiler vil blive gemt fra før opgraderingen. + Al meddelelseshistorik og alle mediefiler fra før opgraderingen gemmes. Netværksfejl registreret. Prøv igen senere. Opgradering mislykkedes. @@ -1346,9 +1346,9 @@ Kan du lide denne nye funktion? Hjælp med at støtte Signal med en engangsdonation. - Din meddelelseshistorik med %1$s og vedkommendes nummer %2$s er blevet flettet. + Din meddelelseshistorik med %1$s og vedkommendes nummer %2$s er slået sammen. - Din meddelelseshistorik med %1$s og en anden chat, der tilhørte vedkommende, er blevet flettet. + Din meddelelseshistorik med %1$s og en anden chat, der tilhørte vedkommende, er slået sammen. %1$s startede et gruppeopkald · %2$s @@ -1857,7 +1857,7 @@ Reagerede %1$s på din historie - Reagerede %1$s på vedkommendes historie + Reagerede %1$s på deres historie Opdater Molly @@ -1960,6 +1960,7 @@ %1$s til dig Mediefil er ikke længere tilgængelig. Kan ikke finde en app, som kan dele denne mediefil. + Luk %1$d nye beskeder i %2$d samtaler @@ -2623,7 +2624,7 @@ Betalinger (Beta) Grænse for samtalelængde Bevar beskeder - Ryd beskedhistorik + Ryd meddelelseshistorik Forbundne enheder Lyst Mørkt @@ -2657,7 +2658,7 @@ Ved brug af WiFi Ved roaming Automatisk hentning af mediefiler - Beskedhistorik + Meddelelseshistorik Brug af lagerplads Billeder Videoer @@ -2665,12 +2666,12 @@ Lyd Gennemgå lager Slet ældre beskeder? - Ryd beskedhistorik? - Dette vil slette al beskedhistorik og medier permanent fra din enhed, der er ældre end %1$s + Ryd meddelelseshistorik? + Dette sletter permanent al meddelelseshistorik og alle medier, der er ældre end %1$s Dette reducerer alle samtaler permanent til de %1$s seneste beskeder - Dette sletter al beskedhistorik og medier permanent fra din enhed - Er du sikker på, du vil slette al beskedhistorik? - Al beskedhistorik fjernes permanent. Handlingen kan ikke fortrydes + Dette sletter permanent al beskedhistorik og alle medier fra din enhed + Er du sikker på, du vil slette al meddelelseshistorik? + Al meddelelseshistorik fjernes permanent. Handlingen kan ikke fortrydes Slet alt nu For evigt 1 år @@ -2748,10 +2749,14 @@ Tilpas mulighed + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Ikke nu + + + Sikkerhedsindstillinger + + Beskyt dine ressourcer + + Hjælp med at forhindre en person med din telefon i at tilgå dine penge ved at tilføje et ekstra sikkerhedslag. Du kan deaktivere denne mulighed under Indstillinger. + + Aktivér betalingslås + + Ikke nu + + Spring dette trin over? + + Hvis du springer dette trin over, kan alle, der har fysisk adgang til din telefon, overføre penge eller se din gendannelsessætning. + + Annuller + + Spring over + Tilføj midler Din wallet-adresse @@ -4258,7 +4283,7 @@ Videoer vil blive beskåret til klip på 30 sek. og sendt som flere historier. - Videoer, som er sendt til Historier, kan ikke være længere end 30 sek. + Videoer, der er sendt til Historier, kan ikke være længere end 30 sek. Videresendte beskeder sendes nu øjeblikkeligt. Send %1$d besked @@ -4735,7 +4760,7 @@ Skjul historie? - Nye historie-opdateringer fra %1$s vil ikke længere blive vist øverst på listen over historier. + Nye historieopdateringer fra %1$s vil ikke længere blive vist øverst på listen over historier. Skjul @@ -4750,7 +4775,7 @@ Videresend - %1$s\'s historie + Historie fra %1$s Slet historie? @@ -4799,6 +4824,8 @@ Fjern tilskuer Ingen svar endnu + + Du kan ikke svare på denne historie, da du ikke længere er medlem af denne gruppe. Reagerede på historien @@ -4806,7 +4833,7 @@ Svar - Reager på denne historie + Reagér på denne historie Svarer privat til %1$s @@ -4817,6 +4844,13 @@ Slet Min historie + + + %1$d viewer + %1$d viewers + + + View Hvem kan se denne historie? @@ -4828,7 +4862,7 @@ Alle med undtagelse af… - Gem din historie for bestemte personer + Skjul din historie fra bestemte personer %1$d person er ekskluderet @@ -4851,8 +4885,6 @@ Tillad svar & reaktioner Lad folk, der kan se din historie, reagere og svare - - Skjul din historie for bestemte personer. Som standard deles din historie med dine %1$s Signal-forbindelser @@ -4864,7 +4896,7 @@ Have dem i dit systems kontakter - "Dine forbindelser kan se dit navn og billede og kan se indlæg i \"Min historie\", medmindre du skjuler det for dem." + "Dine kontakter kan se dit navn og billede. De kan også se indlæg i \"Min historie\", medmindre du skjuler det for dem." Tilføj seer @@ -4880,7 +4912,7 @@ Denne handling kan ikke fortrydes. - Rediger navn på historie + Redigér navn på historie Navn på historie @@ -4911,20 +4943,38 @@ Del kun med… Udført + + Fjern gruppehistorie? + + \"%1$s\" vil blive fjernet. + + Fjern + + Slet privat historie? + + \"%1$s\" og opdateringer, der deles til denne historie, slettes. + + Slet + + Historier er kun tilgængelige for Signal-betabrugere. + + Hvis du deler en historie, vil den kun være tilgængelig for personer, der bruger betaversionen af Signal. Føj til historie? - Når du tilføjer indhold til din historie, kan dine Signal-forbindelser se det i 24 timer. Du kan ændre, hvem der kan se din historie, i Indstillinger. + Når du føjer indhold til din historie, kan dine Signal-kontakter se det i 24 timer. Du kan ændre, hvem der kan se din historie, under Indstillinger. Føj til historie Rediger seere - Historie kunne ikke sendes. Tjek din forbindelse og prøv igen. + Historie kunne ikke sendes. Tjek din forbindelse, og prøv igen. Send + + Deaktivér og slet - Del & Se historier + Del og se historier Du vil ikke længere kunne dele eller se historier, når denne indstilling er slået fra. @@ -4953,7 +5003,7 @@ Vælg din historietype - Ny privat historie + Ny privat histories Kun synlig for bestemte personer @@ -4993,7 +5043,7 @@ Deaktiver - Du reagerede på historie fra %1$s + Du reagerede på historien fra %1$s Reagerede på din historie @@ -5071,6 +5121,11 @@ Gruppehistorie · %1$d seer Gruppehistorie · %1$d seere + + + %1$d medlem + %1$d medlemmer + %1$s · %2$d seer @@ -5093,7 +5148,7 @@ Slet historie? - Slet denne private historie \"%1$s\"? + Slet den private historie \"%1$s\"? Slet @@ -5139,7 +5194,7 @@ Alle forbindelser er gennemgået. Tryk send for at fortsætte. - Du har %1$d forbindelser, der muligvis har geninstalleret Signal eller skiftet enhed. Gennemgå deres sikkerhedsnummer, eller overvej at fjerne dem fra din historie, inden du deler din historie med dem. + Du har %1$d kontakter, der muligvis har geninstalleret Signal eller skiftet enhed. Gennemgå deres sikkerhedsnummer, eller overvej at fjerne dem fra din historie, inden du deler din historie med dem. Verificer sikkerhedsnummer @@ -5169,7 +5224,7 @@ Privatlivsindstillinger for Min historie - Vælg, hvem der kan se opslag i Min Historie. Du kan altid ændre dette i indstillinger. + Vælg, hvem der kan se opslag i Min historie. Du kan altid ændre dette i indstillinger. Alle Signal-forbindelser @@ -5206,7 +5261,7 @@ Slå historier fra? - Du vil ikke længere kunne dele eller se historier. Alle historier, som du har sendt for nyligt, vil stadig være synlige, indtil de udløber. + Du vil ikke længere kunne dele eller se historier. Historieopdateringer, du for nylig har delt, slettes også. Privatlivsindstillinger for historier @@ -5214,7 +5269,7 @@ Personer, der kan se denne historie - "Medlemmer af gruppen \"%1$s\" kan se og svare på denne historie. Du kan opdatere medlemmerne i denne chat i gruppen." + "Medlemmer af gruppen %1$s kan se og svare på denne historie. Du kan opdatere medlemmerne i denne chat i gruppen." Fjern gruppehistorie @@ -5229,7 +5284,7 @@ Eksportér dine sms\'er - Du kan eksportere dine SMS\'er til din telefons SMS-database. Dette giver andre SMS-apps på din telefon adgang til SMS\'erne og tilladelse til at importere dem. Dette opretter ikke en delbar fil i din SMS-historik. + Du kan eksportere dine sms\'er til din telefons sms-database. Dette giver andre sms-apps på din telefon adgang til sms\'erne og tilladelse til at importere dem. Dette opretter ikke en delbar fil i din sms-historik. Fortsæt diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2859eb0341..282bb2c2a1 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -218,7 +218,7 @@ Nach Nutzernamen suchen - Meine Stories + Meine Storys Neue Story @@ -1960,6 +1960,7 @@ %1$s an dich Medieninhalte nicht mehr verfügbar. Keine App zum Teilen dieser Medieninhalte gefunden. + Schließen %1$d neue Nachrichten in %2$d Unterhaltungen @@ -1982,14 +1983,14 @@ Öffne Molly, um nach neuen Benachrichtigungen zu sehen. %1$s %2$s Kontakt - Hat mit %1$s reagiert auf: »%2$s«. - Hat mit %1$s auf dein Video reagiert. - Hat mit %1$s auf dein Bild reagiert. - Hat mit %1$s auf dein GIF reagiert. - Hat mit %1$s auf deine Datei reagiert. - Hat mit %1$s auf dein Audio reagiert. - Hat mit %1$s auf deine einmalig anzeigbaren Medieninhalte reagiert. - Hat mit %1$s auf deinen Sticker reagiert. + Mit %1$s reagiert auf: »%2$s«. + Mit %1$s auf dein Video reagiert. + Mit %1$s auf dein Bild reagiert. + Mit %1$s auf dein GIF reagiert. + Mit %1$s auf deine Datei reagiert. + Mit %1$s auf dein Audio reagiert. + Mit %1$s auf deine einmalig anzeigbaren Medieninhalte reagiert. + Mit %1$s auf deinen Sticker reagiert. Diese Nachricht wurde gelöscht. Benachrichtigungen über neue Signal-Kontakte ausschalten? Du kannst sie wieder einschalten in Signal → Einstellungen → Benachrichtigungen. @@ -2748,10 +2749,14 @@ Option anpassen + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Jetzt nicht + + + Sicherheitseinstellungen + + Schütze dein Geld + + Verhindere, dass eine Person mit deinem Smartphone auf dein Geld zugreifen kann, indem du eine weitere Sicherheitsebene hinzufügst. Du kannst diese Option in Einstellungen deaktivieren. + + Zahlungssperre aktivieren + + Jetzt nicht + + Diesen Schritt überspringen? + + Wenn du diesen Schritt überspringst, kann jeder, der Zugriff auf dein Smartphone hat, Geld überweisen oder deine Wiederherstellungsphrase einsehen. + + Abbrechen + + Überspringen + Guthaben hinzufügen Deine Wallet-Adresse @@ -4699,13 +4724,13 @@ Unterhaltungen - Stories + Storys 99+ Story-Datenschutz - Meine Stories + Meine Storys Antippen, um eine Story hinzuzufügen @@ -4741,7 +4766,7 @@ Story ausgeblendet - Ausgeblendete Stories + Ausgeblendete Storys %1$d Aufruf @@ -4799,6 +4824,8 @@ Betrachter entfernen Bisher keine Antworten + + Du kannst nicht auf diese Story antworten, weil du nicht mehr Mitglied in dieser Gruppe bist. Auf Story reagiert @@ -4816,7 +4843,14 @@ Löschen - Mein Story + Meine Story + + + %1$d viewer + %1$d viewers + + + View Wer diese Story sehen kann @@ -4851,8 +4885,6 @@ Antworten & Reaktionen erlauben Erlaube Personen, die deine Story sehen können, auf sie zu antworten und zu reagieren - - Verberge deine Story vor bestimmten Personen. Standardmäßig wird deine Story geteilt mit deinen %1$s Signal-Verbindungen @@ -4864,7 +4896,7 @@ Speicherung in den Systemkontakten - "Deine Beziehungen können deinen Namen und dein Foto sowie Beiträge unter »Meine Story« sehen, es sei denn, du verbirgst sie vor ihnen." + "Deine Verbindungen können deinen Namen und dein Foto sowie Beiträge unter »Meine Story« sehen, es sei denn, du verbirgst sie vor ihnen." Betrachter hinzufügen @@ -4911,10 +4943,26 @@ Nur teilen mit … Fertig + + Deine Gruppen-Story entfernen? + + »%1$s« wird entfernt. + + Entfernen + + Private Story löschen? + + »%1$s« und Aktualisierungen, die im Rahmen dieser Story geteilt werden, werden gelöscht. + + Löschen + + Storys ist nur für Signal Beta User verfügbar. + + Wenn du eine Story teilst, ist sie nur für Personen zugänglich, die an Signal Beta teilnehmen. Zu Story hinzufügen? - Wenn du deiner Story Inhalte hinzufügst, können deine Signal-Beziehungen diese 24 Stunden lang ansehen. Du kannst in den Einstellungen ändern, wer deine Story sehen kann. + Wenn du deiner Story Inhalte hinzufügst, können deine Signal-Verbindungen diese 24 Stunden lang ansehen. Du kannst in den Einstellungen ändern, wer deine Story sehen kann. Zu Story hinzufügen @@ -4923,10 +4971,12 @@ Story konnte nicht versendet werden. Überprüfe deine Internetverbindung und versuche es erneut. Senden + + Ausschalten und löschen - Stories teilen & betrachten + Storys teilen und betrachten - Wenn diese Option deaktiviert ist, können keine Stories geteilt und angesehen werden. + Wenn diese Option deaktiviert ist, können keine Storys geteilt und betrachtet werden. Betrachter auswählen @@ -4947,7 +4997,7 @@ Dieses Feld ist erforderlich. - Es existiert bereits eine Story dieses Namens + Es existiert bereits eine Story mit diesem Namen Alle auswählen @@ -5063,13 +5113,18 @@ Nur teilen mit - Private Story · %1$d Ansichten - Private Story · %1$d Ansichten + Private Story · %1$d Betrachter + Private Story · %1$d Betrachter - Gruppen-Story · %1$d Ansichten - Gruppen-Story · %1$d Ansichten + Gruppen-Story · %1$d Betrachter + Gruppen-Story · %1$d Betrachter + + + + %1$d Mitglied + %1$d Mitglieder @@ -5093,7 +5148,7 @@ Story löschen? - Private Story \"%1$s\" löschen? + Private Story »%1$s« löschen? Löschen @@ -5169,7 +5224,7 @@ Meine Story-Datenschutz - Wähle aus, wer Posts zu deiner Story sehen kann. In „Einstellungen“ kannst du jederzeit Änderungen vornehmen. + Wähle aus, wer Posts zu deiner Story sehen kann. In »Einstellungen« kannst du jederzeit Änderungen vornehmen. Alle Signal-Verbindungen @@ -5206,7 +5261,7 @@ Storys ausschalten? - Du kannst dann keine Storys mehr teilen oder ansehen. Alle Storys, die du kürzlich verschickt hast, sind weiterhin für andere sichtbar, bis sie ablaufen. + Du wirst keine Storys mehr teilen oder betrachten können. Story-Updates, die du kürzlich geteilt hast, werden ebenfalls gelöscht. Story-Datenschutz diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index df0430e8be..5516c36e4d 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -193,7 +193,7 @@ Ενημέρωση Να μην αναβαθμιστεί Προσοχή - Η έκδοση του Signal έχει λήξει. Μπορείς να δεις το ιστορικό μηνυμάτων αλλά δεν θα μπορείς να στέλνεις ή να λαβαίνεις μηνύματα μέχρι να κάνεις αναβάθμιση. + Η έκδοση του Signal έχει λήξει. Μπορείς να δεις το ιστορικό μηνυμάτων αλλά δεν θα μπορείς να στέλνεις ή να λαμβάνεις μηνύματα μέχρι να κάνεις αναβάθμιση. Δεν βρέθηκε περιηγητής. @@ -673,7 +673,7 @@ Τι είναι οι Ομάδες νέου τύπου; Οι ομάδες νέου τύπου έχουν δυνατότητες όπως οι @αναφορές και οι διαχειριστές ομάδας, και θα αποκτήσουν παραπάνω δυνατότητες στο μέλλον. - Όλο το ιστορικό της συζήτησης και τα πολυμέσα διατηρήθηκαν ως είχαν πριν την αναβάθμιση. + Όλο το ιστορικό των μηνυμάτων και τα πολυμέσα διατηρήθηκαν ως είχαν πριν από την αναβάθμιση. Θα χρειαστεί να αποδεχτείς πάλι μια πρόσκληση για να μπεις στην ομάδα, και δεν θα λαμβάνεις μηνύματα της ομάδας μέχρι να αποδεχτείς. Αυτό το μέλος θα πρέπει να αποδεχτεί την πρόσκληση να ξαναμπεί στην ομάδα, και δεν θα λαμβάνει τα μηνύματα της ομάδας μέχρι να αποδεχτεί: @@ -688,7 +688,7 @@ Αναβάθμιση σε Ομάδα νέου τύπου Αναβάθμισε την ομάδα Οι ομάδες νέου τύπου έχουν δυνατότητες όπως οι @αναφορές και οι διαχειριστές ομάδας, και θα αποκτήσουν παραπάνω δυνατότητες στο μέλλον. - Όλο το ιστορικό των μηνυμάτων και τα πολυμέσα θα διατηρηθούν ως έχουν πριν την αναβάθμιση. + Όλο το ιστορικό των μηνυμάτων και τα πολυμέσα θα διατηρηθούν ως έχουν πριν από την αναβάθμιση. Υπήρξε σφάλμα δικτύου. Δοκίμασε ξανά αργότερα. Αποτυχία αναβάθμισης. @@ -1855,9 +1855,9 @@ Εξαργύρωσες ένα δώρο έμβλημα - Αντέδρασε/αν με %1$s στην ιστορία σου + Αντέδρασε με %1$s στην ιστορία σου - Αντέδρασες με %1$s στην ιστορία τους + Αντέδρασε με %1$s στην ιστορία τους Αναβάθμιση Molly @@ -1960,6 +1960,7 @@ %1$s προς εσένα Το πολυμέσο δεν είναι πια διαθέσιμο. Δεν βρέθηκε εφαρμογή που να μπορεί να διαμοιραστεί αυτό το πολυμέσο. + Κλείσιμο %1$d νέα μηνύματα σε %2$d συνομιλίες @@ -2666,11 +2667,11 @@ Ανασκόπηση χώρου Διαγραφή παλαιότερων μηνυμάτων; Εκκαθάριση του ιστορικού μηνυμάτων; - Αυτό θα διαγράψει μόνιμα όλο το ιστορικό μηνυμάτων και τα πολυμέσα από τη συσκευή σου, τα οποία είναι παλαιότερα από %1$s. + Με αυτόν τον τρόπο, θα διαγραφεί μόνιμα όλο το ιστορικό μηνυμάτων και τα πολυμέσα από τη συσκευή σου, τα οποία είναι παλαιότερα από %1$s. Αυτό θα περικόψει όλες τις συνομιλίες στα %1$s πιο πρόσφατα μηνύματα. - Αυτό θα διαγράψει μόνιμα όλο το ιστορικό μηνυμάτων και τα πολυμέσα από τη συσκευή σου. - Είσαι σίγουρος/η πως θέλεις να διαγράψεις όλο το ιστορικό των μηνυμάτων; - Όλο το ιστορικό των μηνυμάτων θα σβηστεί μόνιμα. Αυτή η ενέργεια δεν μπορεί να ανακληθεί. + Με αυτόν τον τρόπο, θα διαγραφεί μόνιμα όλο το ιστορικό μηνυμάτων και τα πολυμέσα από τη συσκευή σου. + Θέλεις σίγουρα να διαγράψεις όλο το ιστορικό των μηνυμάτων; + Όλο το ιστορικό των μηνυμάτων θα αφαιρεθεί μόνιμα. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Διαγραφή όλων τώρα Για πάντα 1 έτος @@ -2748,10 +2749,14 @@ Προσαρμογή ρύθμισης + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Όχι τώρα + + + Ρύθμιση ασφάλειας + + Προστάτεψε τα χρήματά σου + + Πρόσθεσε ένα ακόμη επίπεδο ασφάλειας για να αποτρέπεις την πρόσβαση ατόμων στα χρήματα στο τηλέφωνό σου. Μπορείς να απενεργοποιήσεις αυτήν την επιλογή στις Ρυθμίσεις. + + Ενεργοποίηση κλειδώματος πληρωμής + + Όχι τώρα + + Παράλειψη αυτού του βήματος; + + Η παράλειψη αυτού του βήματος μπορεί να επιτρέψει σε οποιοδήποτε άτομο έχει φυσική πρόσβαση στο τηλέφωνό σου να μεταφέρει χρήματα ή να δει τη φράση ανάκτησης. + + Ακύρωση + + Παράλειψη + Προσθήκη χρημάτων Η διεύθυνση πορτοφολιού σας @@ -3976,7 +4001,7 @@ Προκαθορισμένο χρονόμετρο για νέες συνομιλίες Ορισμός ενός προκαθορισμένου χρόνου εξαφάνισης μηνυμάτων για όλες τις συνομιλίες που ξεκινάς εσύ. - Διαχειρίσου τις ιστορίες σου και ποιους μπορούν να τις δουν + Διαχειρίσου τις ιστορίες σου και τα άτομα που μπορούν να τις δουν Απαιτείται κλείδωμα οθόνης Android ή δακτυλικό αποτύπωμα για τη μεταφορά χρημάτων Δεν μπορώ να ενεργοποιήσω το κλείδωμα πληρωμής @@ -4735,7 +4760,7 @@ Απόκρυψη ιστορίας; - Νέες ιστορίες από τον/την %1$s δεν θα εμφανίζονται πλέον στη κορυφή της λίστας ιστοριών. + Νέες ενημερώσεις ιστοριών από τον/την %1$s δεν θα εμφανίζονται πλέον στη κορυφή της λίστας ιστοριών. Απόκρυψη @@ -4754,7 +4779,7 @@ Διαγραφή ιστορίας; - Η ιστορία θα διαγραφτεί για εσένα και όλα τα άτομα που την έχουν λάβει. + Η ιστορία θα διαγραφεί για εσένα και όλα τα άτομα που την έχουν λάβει. Μη δυνατότητα αποθήκευσης @@ -4799,6 +4824,8 @@ Αφαίρεση θεατή Καμία απάντηση ακόμα + + Δεν μπορείς να απαντήσεις σε αυτήν την ιστορία γιατί δεν είσαι πια μέλος της ομάδας. Αντέδρασε στην ιστορία @@ -4817,8 +4844,15 @@ Διαγραφή Η ιστορία μου + + + %1$d viewer + %1$d viewers + + + View - Ποιοι μπορούν να δουν αυτήν την ιστορία + Ποια άτομα μπορούν να δουν αυτήν την ιστορία Απόκρυψη ιστορίας από @@ -4851,8 +4885,6 @@ Να επιτρέπονται απαντήσεις & αντιδράσεις Να επιτρέπεται στα άτομα που μπορούν να δουν τις ιστορίες σου, να αντιδράσουν και να απαντήσουν - - Απόκρυψη της ιστορίας σου από συγκεκριμένα άτομα. Η προεπιλογή είναι η ιστορία σου να μοιράζεται με τις %1$s Επαφές Signal @@ -4880,7 +4912,7 @@ Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. - Επεξεργασία ονόματος ιστορίας. + Επεξεργασία ονόματος ιστορίας Όνομα ιστορίας @@ -4911,22 +4943,40 @@ Κοινοποίηση μόνο σε… Τέλος + + Αφαίρεση ιστορίας ομάδας; + + H ιστορία \"%1$s\" θα αφαιρεθεί. + + Αφαίρεση + + Διαγραφή ιδιωτικής ιστορίας; + + Οι ιστορίες \"%1$s\" και οι ενημερώσεις που κοινοποιούνται σε αυτή θα διαγραφούν. + + Διαγραφή + + Οι ιστορίες είναι διαθέσιμες μόνο στους χρήστες beta του Signal. + + Εάν κοινοποιήσεις μια ιστορία, θα είναι διαθέσιμη μόνο σε άτομα που βρίσκονται σε beta έκδοση του Signal. Προσθήκη στην ιστορία; - Προσθέτοντας περιεχόμενο στην ιστορία σου, επιτρέπεις στις επαφές Signal σου να το δουν για 24 ώρες. Μπορείς επίσης να αλλάξεις το ποιοι μπορούν να δουν την ιστορία σου στις Ρυθμίσεις. + Όταν προσθέτεις περιεχόμενο στην ιστορία σου, επιτρέπεις στις επαφές σου στο Signal να το δουν για 24 ώρες. Μπορείς επίσης να αλλάξεις τα άτομα που μπορούν να δουν την ιστορία σου στις Ρυθμίσεις. Προσθήκη στην ιστορία Επεξεργασία θεατών - Η ιστορία δεν μπόρεσε να σταλθεί. Έλεγξε τη σύνδεσή σου και προσπάθησε ξανά. + Δεν ήταν δυνατή η αποστολή της ιστορίας. Έλεγξε τη σύνδεσή σου και προσπάθησε ξανά. Αποστολή + + Απενεργοποίηση και διαγραφή - Διαμοιρασμός & Προβολή Ιστοριών + Κοινοποίηση και προβολή ιστοριών - Δεν θα μπορείς πια να μοιραστείς ή να δεις Ιστορίες όταν αυτή η επιλογή είναι απενεργοποιημένη. + Δεν θα μπορείς πια να μοιράζεσαι ή να βλέπεις Ιστορίες όταν αυτή η επιλογή είναι απενεργοποιημένη. Επιλογή θεατών @@ -4951,7 +5001,7 @@ Επιλογή όλων - Επέλεξε τον τύπο της ιστορίας σου + Επίλεξε τον τύπο της ιστορίας σου Νέα ιδιωτική ιστορία @@ -4975,7 +5025,7 @@ Αποτυχία φόρτωσης περιεχομένου - Η ιστορία στάλθηκε + Η ιστορία εστάλη Αποτυχία αποστολής ιστορίας @@ -5063,14 +5113,19 @@ Κοινοποίηση μόνο σε - Ιδιωτική ιστορία · %1$d προβολή - Ιδιωτική ιστορία · %1$d προβολές + Ιδιωτική ιστορία · %1$d θεατής + Ιδιωτική ιστορία · %1$d θεατές Ομαδική ιστορία · %1$d προβολή Ομαδική ιστορία · %1$d προβολές + + + %1$d μέλος + %1$d μέλη + %1$s · %2$d θεατής @@ -5167,7 +5222,7 @@ Αφαίρεση - Ιδιωτικότητα της ιστορίας σου + Απόρρητο της ιστορίας σου Επίλεξε ποια άτομα μπορούν να δουν δημοσιεύσεις στην ιστορία σου. Μπορείς πάντα να κάνεις αλλαγές στις ρυθμίσεις. @@ -5194,7 +5249,7 @@ - Οι ιστορίες εξαφανίζονται αυτόματα μετά από 24 ώρες. Διάλεξε ποιοι μπορούν να δουν την ιστορία σου ή δημιούργησε νέες ιστορίες για συγκεκριμένους θεατές ή ομάδες. + Οι ιστορίες εξαφανίζονται αυτόματα μετά από 24 ώρες. Διάλεξε ποια άτομα μπορούν να δουν την ιστορία σου ή δημιούργησε νέες ιστορίες για συγκεκριμένους θεατές ή ομάδες. Απενεργοποίηση ιστοριών @@ -5206,15 +5261,15 @@ Απενεργοποίηση ιστοριών; - Δεν θα μπορείς πλέον να μοιράζεσαι ή να βλέπεις ιστορίες. Οι ιστορίες που έχεις στείλει πρόσφατα θα παραμείνουν ορατές σε άλλους μέχρι να εξαφανιστούν. + Δεν θα μπορείς πλέον να μοιράζεσαι ή να βλέπεις ιστορίες. Οι ενημερώσεις ιστορίας που κοινοποίησες πρόσφατα θα διαγραφούν επίσης. Απόρρητο ιστορίας - Ποιοι μπορούν να δουν αυτή την ιστορία + Ποια άτομα μπορούν να δουν αυτή την ιστορία - "Τα μέλη της ομάδας «%1$s» μπορούν να δουν και να απαντήσουν σε αυτή την ιστορία. Μπορείς να ενημερώσεις τα μέλη για αυτή τη συνομιλία στην ομάδα." + "Τα μέλη της ομάδας %1$s μπορούν να δουν και να απαντήσουν σε αυτή την ιστορία. Μπορείς να ενημερώσεις τα μέλη για αυτή τη συνομιλία στην ομάδα." Αφαίρεση ιστορίας ομάδας diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index fbccbbc087..df595411b7 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1542,7 +1542,7 @@ ¡Fallo de red! ¡Número no registrado! ¡El número marcado no admite llamadas seguras! - Recibido + Entendido @@ -1960,6 +1960,7 @@ De %1$s para ti El adjunto original ya no está disponible. Fallo al encontrar la aplicación para mostrar este adjunto. + Cerrar %1$d mensajes nuevos en %2$d chats @@ -2343,7 +2344,7 @@ Tiempo de envío copiado al portapapeles. - Actualizaciones de tu historia se mostrarán aquí. + Las actualizaciones de tu historia se mostrarán aquí. @@ -2669,7 +2670,7 @@ Esto eliminará permanentemente todos los mensajes y adjuntos de este dispositivo con más antigüedad de %1$s. Esto recortará permanentemente todos los chat y mantendrá los %1$s mensajes más recientes. Esto eliminará permanentemente todos los mensajes y adjuntos de este dispositivo. - ¿Estás segur@ que deseas eliminar todo tu historial de mensajes? + ¿Estás segur@ de que deseas eliminar todo tu historial de mensajes? El historial completo de mensajes se eliminará permanentemente. Esta acción no se puede deshacer. Borrar todos ahora Siempre @@ -2748,10 +2749,14 @@ Personalizar opción + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Ahora no + + + Configuración de seguridad + + Protege tus fondos + + Ayuda a evitar que una persona que tenga tu teléfono pueda accedes a tus fondos añadiendo otra capa de seguridad. Puedes desactivar esta opción en Ajustes. + + Habilitar bloqueo de pago + + Ahora no + + ¿Omitir este paso? + + Omitir este paso podría permitir que cualquier persona que tenga acceso físico a tu teléfono pueda transferir fondos o ver tu frase de recuperación. + + Cancelar + + Omitir + Añadir fondos Dirección de tu cartera @@ -4799,6 +4824,8 @@ Quitar espectador Sin respuestas por ahora + + No puedes responder a esta historia porque ya no perteneces a este grupo. Reaccionó a la historia @@ -4817,6 +4844,13 @@ Eliminar Mi historia + + + %1$d viewer + %1$d viewers + + + View Quién puede ver esta historia @@ -4851,8 +4885,6 @@ Permitir respuestas y reacciones Permite a personas que pueden ver tu historia responder y reaccionar - - Oculta tu historia para personas específicas. Por defecto, tu historia se compartirá con %1$s Contactos de Signal @@ -4900,7 +4932,7 @@ Escribe o añade una URL - Comparte tu historia via enlace con quien tú quieras + Comparte tu historia por un enlace con quien tú quieras Buscar @@ -4911,6 +4943,22 @@ Compartir solo con… Hecho + + ¿Quitar la historia de grupo? + + Se eliminará \"%1$s\". + + Eliminar + + ¿Eliminar historia privada? + + Se eliminará \"%1$s\" y todas las actualizaciones compartidas en esta historia. + + Eliminar + + Las historias solo están disponibles para las personas que tengan la versión beta de Signal. + + Si compartes una historia, solo estará disponible para las personas que tengan la versión beta de Signal. ¿Añadir a la historia? @@ -4923,6 +4971,8 @@ Fallo al enviar la historia. Comprueba tu conexión e inténtalo de nuevo. Enviar + + Desactivar y eliminar Compartir y ver historias @@ -5063,13 +5113,18 @@ Compartir solo con - Historia privada · %1$d vista - Historia privada · %1$d vistas + Historia privada · %1$d persona + Historia privada · %1$d personas - Historia de grupo · %1$d vista - Historia de grupo · %1$d vistas + Historia de grupo · %1$d persona + Historia de grupo · %1$d personas + + + + %1$d participante + %1$d participantes @@ -5202,11 +5257,11 @@ Activar historias - Comparte y visualiza las historias de otros. Las historias desparecerán automáticamente después de 24 horas. + Comparte y visualiza las historias de otras personas. Las historias desparecerán automáticamente después de 24 horas. ¿Desactivar historias? - Ya no podrás compartir o visualizar historias. Cualquier historia que hayas enviado recientemente continuará siendo visible por otros usuarios hasta que expire. + Ya no podrás compartir o ver historias. Las historias que hayas compartido recientemente también serán eliminadas. Privacidad de la historia diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index f18c0ab62e..032c1c5192 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -1960,6 +1960,7 @@ Kasutajalt %1$s sinule Meedia ei ole enam saadaval. Ei leia rakendust, mis oleks võimeline seda meediafaili jagama. + Sulge %1$d uut sõnumit %2$d vestluses @@ -2748,10 +2749,14 @@ Kohanda valikut + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Mitte praegu + + + Turvasätted + + Kaitse oma raha + + Lisa täiendav turvakiht, et keegi sinu rahale ligi ei pääseks, juhul kui su telefon võõrastesse kätesse satub. Saad selle funktsiooni sätete alt välja lülitada. + + Lülita makselukk sisse + + Mitte praegu + + Kas jätta see samm vahele? + + Kui selle sammu vahele jätad, saab igaüks, kellel sinu telefonile ligipääs on, raha üle kanda ja sinu kontroll-lauset vaadata. + + Loobu + + Jäta vahele + Lisa vahendeid Sinu rahakoti aadress @@ -4799,6 +4824,8 @@ Eemalda vaataja Vastuseid veel pole + + Sa ei saa sellele loole vastata, sest sa ei ole enam selle grupi liige. Reageeris loole @@ -4817,6 +4844,13 @@ Kustuta Minu lugu + + + %1$d viewer + %1$d viewers + + + View Kes seda lugu näevad @@ -4851,8 +4885,6 @@ Luba vastuseid & reaktsioone Luba inimestel, kes saavad su lugu vaadata, reageerida ja vastata - - Peida oma lugu konkreetsete inimeste eest. Vaikimisi näevad lugu: %1$s Signali kontaktid @@ -4911,6 +4943,22 @@ Jaga ainult nendega … Tehtud + + Kas eemaldada grupi lugu? + + „%1$s“ eemaldatakse. + + Eemalda + + Kas kustutada privaatne lugu? + + „%1$s“ ja selles loos jagatud uuendused kustutatakse. + + Kustuta + + Lood on kättesaadavad ainult Signali beetakasutajatele. + + Kui lugu jagad, saavad seda vaadata ainult Signali beetakasutajad. Kas lisada loosse? @@ -4923,6 +4971,8 @@ Lugu ei õnnestunud saata. Kontrolli oma internetiühendust ja proovi uuesti. Saada + + Lülita välja ja kustuta Jaga & Vaata lugusid @@ -5071,6 +5121,11 @@ Grupi lugu · %1$d vaataja Grupi lugu · %1$d vaataja + + + %1$d liige + %1$d liiget + %1$s · %2$d vaataja @@ -5206,7 +5261,7 @@ Kas lülitada lood välja? - Sa ei saa enam lugusid jagada ega vaadata. Sinu hiljuti jagatud lood on teistele endiselt nähtavad, kuni need aeguvad. + Sa ei saa enam lugusid jagada ega vaadata. Sinu hiljuti jagatud lugude uuendused kustutatakse samuti. Loo privaatsus diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index c176e9066b..969901a108 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -193,7 +193,7 @@ Eguneratu Ez Eguneratu Markatutako zenbakia ez dago Signalen erregistratuta. SMS bidez gonbidatu nahiko zenuke? - Zure Signal bertsioa iraungi da. Zure mezuen historia ikusi dezakezu, baina ezingo duzu mezuak bidali edo jaso eguneratu arte. + Signal-en bertsio hau iraungi egin da. Zure mezuen historia ikusi dezakezu, baina, aplikazioa eguneratu arte, ezingo duzu mezurik bidali edo jaso. Ezin izan da nabigatzailerik aurkitu. @@ -673,7 +673,7 @@ Zer dira Talde Berriak? Talde Berriek ezaugarri berriak dituzte, hala nola, @aipamenak eta talde administrazaileak; etorkizunean ezaugarri gahiago izango dituzte. - Mezuen historiala eta multimedia eduki guztiak eguneraketa egin baino lehenagoko egoeran mantendu dira. + Eguneratu aurreko mezuen historia eta multimedia-eduki guztiak mantendu dira. Talde honetara berriz sartzeko gonbidapena onartu beharko duzu, eta ez duzu taldeko mezurik jasoko gonbidapen hori onartu arte. Talde honetan berriro sartzeko, kide honek gonbidapena onartu beharko du; ez du talde mezurik jasoko onartu arte: @@ -688,7 +688,7 @@ Eguneratu Talde Berrira Eguneratu talde hau Talde Berriek ezaugarri berriak dituzte, hala nola, @aipamenak eta talde administrazaileak; etorkizunean ezaugarri gahiago izango dituzte. - Mezuen historiala eta multimedia eduki guztiak eguneraketa egin baino lehenagoko egoeran mantenduko dira. + Eguneratu aurreko mezuen historia eta multimedia-eduki guztiak mantenduko dira. Sare errore bat izan da. Saia zaitez beranduago. Ezin izan da eguneratu. @@ -1542,7 +1542,7 @@ Sareak huts egin du! Zenbakia ez da erregistratu! Markatu duzun zenbakiak ez du dei segururik babesten! - Jasota + Ulertu dut @@ -1960,6 +1960,7 @@ %1$s(e)k zuri Medioa jada ez dago eskuragarri. Ez da topatu multimedia eduki hau partekatzeko gai den aplikaziorik. + Itxi %1$d mezu berri %2$d solasalditan @@ -2198,9 +2199,9 @@ Zu Jatorrizko mezua ez da aurkitu - %1$s • Istorioa + %1$s · Istorioa - Zu • Istorioa + Zu · Istorioa Jada ez dago eskuragarri @@ -2665,12 +2666,12 @@ Audioa Berrikusi biltegia Ezabatu mezu zaharragoak? - Ezabatu mezuen historia? - Honek %1$s baino zaharrago diren mezu eta media historia osoa betiko ezabatuko du zure gailutik. + Mezuen historia garbitu nahi duzu? + Betiko ezabatuko dira gailutik %1$s baino zaharragoak diren mezuen historia eta multimedia-edukiak. Honek betiko garbituko ditu solasaldi guztiak, beraietako bakoizean azkenengo %1$s mezuak utziz bakarrik. - Honek betiko ezabatuko du bai zure gailuan dagoen mezuen historiala eta baita berauekin lotutako multimedia artxibo guztiak ere. - Ziur zaude mezuen historia osoa ezabatu nahi izateaz? - Mezuen historia osoa betiko ezabatuko da. Ekintza hau ezin da desegin. + Betiko ezabatuko dira gailutik mezuen historia eta multimedia-edukiak. + Ziur zaude mezuen historia osoa ezabatu nahi duzula? + Betiko ezabatuko da mezuen historia osoa. Ekintza hau ezin da desegin. Ezabatu dena orain Betirako Urte 1 @@ -2748,10 +2749,14 @@ Pertsonalizatu aukera + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Orain ez + + + Segurtasun-konfigurazioa + + Babestu zure funtsak + + Gehitu beste segurtasun-geruza bat eta ekidin zure telefonoa darabilen jendeak zure funtsak ikusi ahal izatea. Aukera hau Ezarpenak atalean desaktibatu dezakezu. + + Gaitu ordainketa-blokeoa + + Orain ez + + Urrats hau saltatu nahi duzu? + + Urrats hau saltatuz gero, zure telefonorako sarbide fisikoa duen edonork funtsak transferitzeko edo berreskuratze-esaldia ikusteko aukera izango du. + + Utzi + + Saltatu + Gehitu funtsak Zure diru-zorroaren helbidea @@ -3976,7 +4001,7 @@ Txat berrietarako tenporizadore lehenetsia Ezarri lehenetsitako desagerpen mezuen tenporizadore bat zuk hasitako txat berri guztientzat. - Kudeatu zure istorioak eta nork ikusi ditzakeen + Kudeatu zure istorioak eta nork ikus ditzakeen Funtsak transferitzeko, Android-eko pantaila-blokeoa edo hatz-marka behar da Ezin da gaitu ordainketen babesa @@ -4256,9 +4281,9 @@ Gehitu mezu bat Aurrera azkarrago - Bideoak 30 s-ko klipetan moztuko dira, eta hainbat istorio gisa bidaliko. + Bideoak 30 s-ko klipetan moztuko dira, eta hainbat istorio gisa bidaliko. - Istorioetara bidalitako bideoek ezin dira 30 s baino luzeagoak izan. + Istorioetara bidalitako bideoak ezin dira 30 s baino luzeagoak izan. Birbidalitako mezuak berehala bidaltzen dira. Bidali mezu %1$d @@ -4699,7 +4724,7 @@ Txatak - Storie-ak + Istorioak 99+ @@ -4711,9 +4736,9 @@ Une honetan ez dago azken eguneratzerik erakusteko. - Ezkutatu storie-ak + Ezkutatu istorioa - Erakutsi storie-a + Erakutsi istorioa Birbidali @@ -4733,15 +4758,15 @@ Sakatu berriro saiatzeko - Ezkutatu storie-a? + Istorioa ezkuratu nahi duzu? - Istorioen eguneratze berriak %1$stik ez dira storie-n zerrendaren goialdean agertuko. + %1$s(r)en istorio-eguneratze berriak ez dira agertuko istorioen zerrendaren goialdean. Ezkutatu - Istorioa ezkutatuta + Istorioa ezkutatuta dago - Ezkutuko storie-ak + Ezkutuko istorioak Ikustaldi %1$d @@ -4750,11 +4775,11 @@ Birbidali - %1$sren storie-a + %1$s(r)en istorioa - Ezabatu storie-a? + Istorioa ezabatu nahi duzu? - Story hau zuretzat eta jaso duten guztientzat ezabatuko da. + Istorio hau ezabatu egingo da zuretzat eta jaso dutenentzat. Ezin izan da gorde @@ -4799,14 +4824,16 @@ Kendu ikuslea Erantzunik ez oraindik + + Ezin diozu erantzun istorio honi, jada ez zarelako talde honetako kidea. - Storie-ari erreakzionatu diozu + Istorioari buruzko erreakzio bat bidali du Ikustaldiak Erantzunak - Erreakzionatu story honi + Bidali istorio honi buruzko erreakzio bat %1$sri modu pribatuan erantzuten @@ -4817,10 +4844,17 @@ Ezabatu Nire istorioa + + + %1$d viewer + %1$d viewers + + + View Nork ikus dezake istorio hau? - Ezkutatu storie-a honi: + Ezkutatu istorioa honi: Signal-eko konexio guztiak @@ -4828,7 +4862,7 @@ Denak hauek izan ezik… - Ezkutatu zure istorioa pertsona jakinei + Ezkutatu istorioa pertsona jakinei pertsona %1$d baztertuta @@ -4844,15 +4878,13 @@ %1$d pertsona - Aukeratu nork ikus dezakeen zure istorioa. Aldaketek ez dute eraginik izango dagoeneko bidali dituzun istorioetan. + Aukeratu nork ikus dezakeen istorioa. Aldaketek ez dute eraginik izango lehenago bidalitako istorioetan. Erantzunak & erreakzioak Baimendu erantzunak & erreakzioak - Utzi zure storie-a ikus dezakeen jendeari erreakzionatzen eta erantzuten - - Ezkutatu zure istorioa pertsona zehatzei. Lehenespenez, zure istorioa zure %1$s(are)kin partekatzen da + Eman istorioa ikus dezaketenei erreakzioak bidaltzeko aukera Signal-eko konexioak @@ -4864,15 +4896,15 @@ Zure sistemako kontaktuetan edukitzen - "Zure konexioek zure izena eta argazkia ikus ditzakete, eta \"Nire Story\"-ko argitalpenak ikus ditzakete horiei ezkutatu ezean." + "Zure konexioek zure izena eta argazkia ikus ditzakete, eta \"Nire istorioa\" ataleko argitalpenak ikus ditzakete (haientzat ezkutatu ezean)." Gehitu ikuslea - Story pribatua ezabatu + Ezabatu istorio pribatua %1$sezabatu? - Pertsona honek ez du gehiago ikusiko zure storie-a. + Aurrerantzean, pertsona honek ez du ikusiko zure istorioa. Ezabatu @@ -4880,9 +4912,9 @@ Ekintza hau ezin da desegin. - Editatu storie-aren izena + Editatu istorioaren izena - Story izena + Istorioaren izena Gorde @@ -4900,7 +4932,7 @@ Idatzi edo itsatsi URL bat - Partekatu esteka bat zure storie-aren ikusleekin + Partekatu esteka bat istorioaren ikusleekin Bilatu @@ -4911,22 +4943,40 @@ Partekatu hauekin bakarrik… Eginda + + Taldeko istorioa kendu nahi duzu? + + \" %1$s \" kendu egingo da. + + Ezabatu + + Istorio pribatua ezabatu nahi duzu? + + \" %1$s \" eta istorio honetan partekatutako eguneratzeak ezabatu egingo dira. + + Ezabatu + + Signal-en beta-bertsioaren erabiltzaileek soilik erabil dezakete Istorioak eginbidea. + + Istorio bat partekatzen baduzu, Signal-en beta-bertsioa dutenek soilik ikusi ahalko dute - Gehitu storie-ra? + Istorioan gehitu nahi duzu? - Zure storie-ari edukia gehitzeak zure Signal konexioei 24 orduz ikusteko aukera ematen die. Zure storie-a nork ikus dezakeen alda dezakezu Ezarpenak atalean. + Zure istorioan edukia gehituta, Signal-eko konexioek 24 orduz ikusi ahalko dute. Istorioa nork ikus dezakeen aldatzeko, joan Ezarpenak atalera. - Gehitu storie-ra + Gehitu istorioan Editatu ikusleak - Ezin izan da storie-a bidali. Egiaztatu konexioa eta saiatu berriro. + Ezin izan da bidali istorioa. Egiaztatu konexioa eta saiatu berriro. Bidali + + Itzali eta ezabatu - Partekatu & Ikusi storie-ak + Partekatu eta ikusi istorioak - Aurrerantzean ezingo dituzu e-ak partekatu edo ikusi aukera hau desaktibatuta dagoenean. + Aurrerantzean, aukera hau desaktibatuta dagoen bitartean, ezingo dituzu partekatu edo ikusi istorioak. Aukeratu ikusleak @@ -4937,9 +4987,9 @@ %1$d ikusle - Izendatu storie-a + Jarri izena istorioari - Story izena (beharrezkoa) + Istorioaren izena (beharrezkoa) Ikusleak @@ -4947,17 +4997,17 @@ Eremu hau beharrezkoa da. - Dagoeneko bada story bat izen honekin. + Lehendik dago izen hori duen istorio bat. Denak hautatu - Aukeratu zure story mota + Aukeratu istorio mota - Story pribatu berria + Istorio pribatu berria Pertsona zehatzentzat bakarrik ikusgai - Taldeko storie-a + Taldeko istorioa Partekatu lehendik dagoen talde batean @@ -4969,17 +5019,17 @@ Erantzuna bidaltzen… - Story hau jada ez dago erabilgarri. + Istorio hau jada ez dago erabilgarri. Ez dago Interneteko konexiorik Ezin izan da edukia kargatu - Story bidalia + Bidali da istorioa - Ezin izan da bidali storie-a + Ezin izan da bidali istorioa - Bistaratu storie-a + Ikusi istorioa Bistaratu profileko argazkia @@ -4993,11 +5043,11 @@ Desaktibatu - %1$sre storie-ari erreakzionatu diozu + %1$s(r)en istorioari buruzko erreakzio bat bidali duzu - Zure storie-ari erreakzionatu dio + Zure istorioari buruzko erreakzio bat bidali du - Storie-ari erreakzionatu dio + Istorio bati buruzko erreakzio bat bidali du @@ -5060,16 +5110,21 @@ Orain ez - Honekin bakarrik partekatu: + Partekatu hauekin: - Istorio pribatua · ikusle %1$d + Istorio pribatua · %1$d ikusle Istorio pribatua · %1$d ikusle - Taldeko Istorioa · ikusle %1$d - Taldeko Istorioa · %1$d ikusle + Taldeko istorioa · %1$d ikusle + Taldeko istorioa · %1$d ikusle + + + + %1$d kide + %1$d kide @@ -5079,7 +5134,7 @@ Sakatu zure ikusleak aukeratzeko - Story ezarpenak + Istorioen ezarpenak Kendu istorioa @@ -5087,11 +5142,11 @@ Taldeko istorioa kendu nahi duzu? - Istorioa zerrenda honetatik kenduko du. Talde honetako istorioak ikusten jarraitu ahalko duzu. + Istorioa zerrenda honetatik kenduko da. Talde honetako istorioak ikusten jarraitu ahalko duzu. Ezabatu - Ezabatu storie-a? + Istorioa ezabatu nahi duzu? \"%1$s\" istorio pribatua ezabatu nahi duzu? @@ -5121,7 +5176,7 @@ Saltatzeko, pasatu hatza eskuinera - Ulertuta + Ulertu dut Ireki laster-menua @@ -5139,7 +5194,7 @@ Konexio guztiak berrikusi dira. Aurrera egiteko, sakatu Bidali. - Agian Signal berriro instalatu duten edo gailuak aldatu dituzten %1$d konexio dituzu. Istorioa haiekin partekatu aurretik, berrikusi haien segurtasun-zenbakiak edo ken itzazu istoriorik. + Agian Signal berriro instalatu duten edo gailuz aldatu diren %1$d konexio dituzu. Istorioa haiekin partekatu aurretik, berrikusi haien segurtasun-zenbakiak edo ken itzazu istoriorik. Segurtasun zenbakia baieztatu @@ -5206,7 +5261,7 @@ Istorioak desaktibatu nahi dituzu? - Aurrerantzean, ezingo duzu istoriorik partekatu edo ikusi. Duela gutxi argitaratutako istorioak iraungi arte ikusi ahalko dituzte beste erabiltzaileek. + Aurrerantzean ezingo dituzu partekatu edo ikusi istorioak. Duela gutxi partekatu dituzun istorio-eguneratzeak ere ezabatuko dira. Istorioen pribatutasuna diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 458441864f..a3b94d2105 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -218,7 +218,7 @@ جستجو با نام کاربری - داستان‌های من + استوری‌های من استوری جدید @@ -673,7 +673,7 @@ گروه‌های جدید چیستند؟ گروه‌های جدید دارای قابلیت‌هایی مانند @اشاره‌ها و مدیران گروه هستند و از قابلیت‌های بیشتری در آینده پشتیبانی خواهند کرد. - تمام تاریخچهٔ گروه و رسانه‌های پیش از ارتقا حفظ شده‌اند. + تمام تاریخچه پیام و رسانه‌های پیش از ارتقا، حفظ شده‌اند. شما به پذیرفتن یک دعوت برای پیوستن دوباره به این گروه نیاز خواهید داشت و پیام‌های گروه را تا زمانی که نپذیرید دریافت نخواهید کرد. این عضو نیاز به پذیرفتن دعوت برای @@ -688,7 +688,7 @@ ارتقا به گروه جدید ارتقا این گروه گروه‌های جدید دارای قابلیت‌هایی مانند @اشاره‌ها و مدیران گروه هستند و از قابلیت‌های بیشتری در آینده پشتیبانی خواهند کرد. - تمام تاریخچهٔ پیام و رسانه از قبل از ارتقا حفظ خواهند شد. + تمام تاریخچهٔ پیام و رسانه‌های پیش از ارتقاء حفظ خواهند شد. خطای شبکه رخ داد. بعداً دوباره امتحان کنید. ارتقا ناموفق بود. @@ -1855,9 +1855,9 @@ یک نشان هدیه آزادسازی کردید - با %1$s به استوری شما واکنش نشان داده شد + با %1$s به استوری شما واکنش نشان داد - با %1$s به استوری او واکنش نشان داده شد + با %1$s به استوری او واکنش نشان داد به‌روزرسانی سیگنال @@ -1960,6 +1960,7 @@ %1$s به شما رسانه دیگر در دسترس نیست. برنامه‌ای برای اشتراک‌گذاری این رسانه پیدا نشد. + بستن %1$d پیام جدید در %2$d مکالمه @@ -2665,12 +2666,12 @@ صوت بازنگری حافظه حذف پیام‌های قدیمی‌تر؟ - پاک کردن تاریخچهٔ پیام‌؟ - این گزینه تمامی تاریخچهٔ پیام و رسانه را که از %1$s قدیمی‌تراند از روی دستگاه شما پاک می‌کند. + تاریخچهٔ پیام پاک شود؟ + این گزینه تمامی تاریخچهٔ پیام و رسانه را که از %1$s قدیمی‌ترند از روی دستگاه شما پاک می‌کند. این گزینه تمامی مکالمه‌ها به جز %1$s پیام آخر را به طور دائم حذف خواهد. این گزینه تمامی تاریخچهٔ پیام و رسانه را از روی دستگاه شما پاک می‌کند. آیا از حذف کل تاریخچهٔ پیام‌ مطمئن هستید؟ - کل تاریخچهٔ پیام‌ به طور دائم پاک خواهد شد. این کار قابل بازگشت نیست. + کل تاریخچهٔ پیام‌ به طور دائم پاک خواهد شد. این کار بازگشت‌پذیر نیست. حذف همه حالا برای همیشه ۱ سال @@ -2748,10 +2749,14 @@ گزینهٔ سفارشی‌سازی + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ حالا نه + + + راه‌اندازی امنیتی + + از سرمایه خود محافظت کنید + + با افزودن یک لایه امنیتی دیگر از دسترسی شخصی که تلفن شما را در دست دارد به سرمایه خود جلوگیری کنید. می‌توانید این حالت را در تنظیمات سیگنال غیرفعال کنید. + + فعال کردن قفل پرداخت + + حالا نه + + گذر از این مرحله؟ + + گذر از این مرحله می‌تواند به هر کسی که به تلفن شما دسترسی فیزیکی دارد اجازه دهد سرمایه را منتقل کند یا عبارت بازیابی شما را مشاهده کند. + + لغو + + رد کردن + افزودن اعتبار نشانی کیف پول شما @@ -4705,7 +4730,7 @@ حریم شخصی استوری - داستان‌های من + استوری‌های من برای افزودن استوری ضربه بزنید @@ -4754,7 +4779,7 @@ حذف استوری؟ - این استوری برای شما و همۀ کسانی که آن را دریافت کرده‌اند حذف می‌گردد. + این استوری برای شما و همۀ کسانی که آن را دریافت کرده‌اند حذف می‌شود. ذخیره نمی‌شود @@ -4799,8 +4824,10 @@ حذف بازدیدکننده هنوز پاسخی داده نشده است + + شما نمی‌توانید به این استوری پاسخ دهید زیرا دیگر عضو این گروه نیستید. - به استوری واکنش نشان داده شد + به استوری واکنش نشان داد بازدیدها @@ -4817,6 +4844,13 @@ حذف استوری من + + + %1$d viewer + %1$d viewers + + + View کسانی که می‌توانند این استوری را مشاهده کنند @@ -4850,9 +4884,7 @@ اجازه پاسخ و واکنش - اجازه واکنش و پاسخ به افرادی که می‌توانند استوری شما را ببینند - - استوری خود را از افراد خاصی پنهان کنید. استوری شما به طور پیش‌فرض با %1$s شما اشتراک‌گذاری می‌شود. + به کسانی که می‌توانند استوری شما را ببینند اجازه واکنش و پاسخ بدهید آشنایان در سیگنال. @@ -4900,7 +4932,7 @@ یک URL را تایپ یا جایگذاری کنید - اشتراک‌گذاری یک پیوند با بازدیدکنندگان استوری خود + همرسانی یک پیوند با بازدیدکنندگان استوری خود جستجو @@ -4911,6 +4943,22 @@ تنها اشتراک‌گذاری شود با… تمام + + استوری گروهی حذف شود؟ + + «%1$s» حذف خواهد شد. + + حذف + + استوری خصوصی حذف شود؟ + + \" %1$s \" و به‌روزرسانی‌های همرسانی شده در این استوری حذف خواهند شد. + + حذف + + استوری‌ها فقط برای کاربران سیگنال بتا قابل دسترسی است. + + اگر یک استوری به اشتراک بگذارید، فقط برای افرادی که در سیگنال بتا هستند در دسترس خواهد بود. افزودن به استوری؟ @@ -4923,10 +4971,12 @@ استوری فرستاده نمی‌شود. اتصال خود را بررسی نموده و دوباره سعی کنید. ارسال + + خاموش و حذف کردن - اشتراک‌گذاری و نمایش استوری‌ها + همرسانی و نمایش استوری‌ها - هنگامی که این گزینه خاموش باشد، شما دیگر نمی‌توانید استوری‌ها را اشتراک‌گذاری یا مشاهده کنید. + هنگامی که این گزینه خاموش باشد، شما دیگر نمی‌توانید استوری‌ها را همرسانی یا مشاهده کنید. انتخاب بازدیدکنندگان @@ -4977,7 +5027,7 @@ استوری ارسال شده - ارسال استوری ناموفق بود + استوری ارسال نشد نمایش استوری @@ -4995,9 +5045,9 @@ شما به استوری %1$s واکنش نشان دادید - به استوری شما واکنش نشان داده شد + به استوری شما واکنش نشان داد - به یک استوری واکنش نشان داده شد + به یک استوری واکنش نشان داد @@ -5071,6 +5121,11 @@ استوری گروهی · %1$d بازدید کننده استوری گروهی · %1$d بازدید کننده + + + %1$d عضو + %1$d عضو + %1$s · %2$d بازدیدکننده @@ -5085,7 +5140,7 @@ حذف استوری - استوری گروه حذف شود؟ + استوری گروهی حذف شود؟ با این کار این استوری از این لیست حذف می‌شود. همچنان می‌توانید استوری‌های این گروه را مشاهده کنید. @@ -5093,7 +5148,7 @@ حذف استوری؟ - استوری خصوصی «%1$s» حذف شود؟ + حذف استوری خصوصی «%1$s»؟ حذف @@ -5139,7 +5194,7 @@ تمام آشنایان بررسی شده‌اند، برای ادامه روی ارسال ضربه بزنید. - شما %1$d آشنا دارید که ممکن است سیگنال را دوباره نصب کرده باشند یا دستگاه خود را تغییر داده باشند. قبل از به اشتراک گذاشتن استوری خود با آنها، شماره ایمنی آنها را بررسی کنید یا آنها را از استوری خود حذف کنید. + شما %1$d آشنا دارید که ممکن است سیگنال را دوباره نصب کرده باشند یا دستگاه خود را تغییر داده باشند. قبل از همرسانی استوری خود با آنها، شماره ایمنی آنها را بررسی کنید یا آنها را از استوری خود حذف کنید. وارسی شمارهٔ ایمنی @@ -5198,15 +5253,15 @@ خاموش کردن استوری‌ها - اگر از استوری‌ها انصراف دهید، دیگر نمی‌توانید استوری‌ها را به اشتراک بگذارید یا مشاهده کنید. + اگر از استوری‌ها انصراف دهید، دیگر نمی‌توانید استوری‌ها را همرسانی یا مشاهده کنید. روشن کردن استوری‌ها - استوری‌های دیگران را به اشتراک بگذارید و مشاهده کنید. استوری‌ها بعد از 24 ساعت به طور خودکار ناپدید می‌شوند. + استوری‌های دیگران را همرسانی و مشاهده کنید. استوری‌ها بعد از 24 ساعت به طور خودکار ناپدید می‌شوند. استوری‌ها خاموش شود؟ - دیگر نخواهید توانست استوری‌ها را به اشتراک بگذارید یا مشاهده کنید. استوری‌هایی که اخیراً ارسال کرده‌اید، تا زمانی که منقضی شوند همچنان توسط دیگران قابل مشاهده خواهند بود. + دیگر نمی‌توانید استوری‌ها را هم‌رسانی یا مشاهده کنید. به‌روزرسانی‌های استوری‌هایی که اخیراً همرسانی کرده‌اید نیز حذف خواهند شد. حریم شخصی استوری diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index d5b0e87f5c..abf300ad10 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -1524,7 +1524,7 @@ Sinä - Omat tarinat + Oma tarina Estä @@ -1960,6 +1960,7 @@ %1$s sinulle Media ei ole enää saatavilla. Mikään sovellus ei tue tämän median jakamista. + Sulje %1$d uutta viestiä %2$d keskustelussa @@ -2666,11 +2667,11 @@ Tarkista tallennustila Poistetaanko vanhemmat viestit? Tyhjennetäänkö viestihistoria? - Tämä poistaa pysyvästi kaikki viestit ja mediatiedostot laitteeltasi, jotka ovat vanhempia kuin %1$s. + Tämä poistaa pysyvästi koko viestihistorian ja mediatiedostot laitteeltasi. Tämä koskee viestejä ja tiedostoja, jotka ovat vanhempia kuin %1$s. Keskustelut rajataan pysyvästi %1$s viimeisimpään viestiin. - Kaikki viestit ja mediatiedostot poistetaan laitteesta. - Haluatko varmasti poistaa kaiken viestihistorian? - Kaikki viestihistoria poistetaan pysyvästi. Toimintoa ei voi kumota. + Koko viestihistoria ja kaikki mediatiedostot poistetaan laitteesta. + Haluatko varmasti poistaa koko viestihistorian? + Koko viestihistoria poistetaan pysyvästi. Toimintoa ei voi kumota. Poista kaikki nyt Pysyvästi 1 vuosi @@ -2748,10 +2749,14 @@ Mukautettu vaihtoehto + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Ei nyt + + + Suojausasetukset + + Varojen suojaaminen + + Ota käyttöön lisäsuojaus, joka estää puhelinta käyttävää henkilöä käyttämästä varojasi luvattomasti. Voit poistaa tämän asetuksen käytöstä asetuksissa. + + Ota maksun lukitus käyttöön + + Ei nyt + + Ohitetaanko tämä vaihe? + + Jos ohitat tämän vaiheen, kuka tahansa puhelintasi käyttävä henkilö voi siirtää varoja tai nähdä palautuslauseesi. + + Peruuta + + Ohita + Lisää varoja Lompakko-osoite @@ -4713,7 +4738,7 @@ Piilota tarina - Peru tarinan piilottaminen + Näytä tarina Välitä @@ -4733,7 +4758,7 @@ Yritä uudelleen napauttamalla - Piilota tarina? + Piilotetaanko tarina? Uudet tarinapäivitykset käyttäjältä %1$s eivät enää ilmesty tarinalistan alkupäähän. @@ -4752,7 +4777,7 @@ Käyttäjän %1$s tarina - Poista tarina? + Poistetaanko tarina? Tämä tarina poistetaan sinulta ja kaikilta sen vastaanottaneilta. @@ -4799,6 +4824,8 @@ Poista katsoja Ei vastauksia vielä + + Et voi vastata tähän tarinaan, koska et ole enää tämän ryhmän jäsen. Lähetti reaktion tarinaan @@ -4816,11 +4843,18 @@ Poista - Minun tarinani + Oma tarina + + + %1$d viewer + %1$d viewers + + + View Kuka voi nähdä tämän tarinan - Piilota tarina näiltä + Piilota tarina seuraavilta Kaikki Signal-kontaktit @@ -4851,8 +4885,6 @@ Salli vastaukset ja reaktiot Anna tarinasi katsoneiden ihmisten reagoida ja vastata - - Piilota tarinasi tietyiltä ihmisiltä. Vakioasetuksena on, että tarinasi jaetaan %1$s Signal-kontaktit @@ -4864,7 +4896,7 @@ Lisäämällä heidät puhelimen järjestelmän yhteystietoihin - "Kontaktisi näkevät nimesi ja valokuvasi, ja näet Omaan tarinaan lisäämäsi päivitykset, ellet piilota niitä heiltä." + "Kontaktisi näkevät nimesi ja valokuvasi sekä Omaan tarinaan lisäämäsi julkaisut, ellet piilota sitä heiltä." Lisää katsoja @@ -4911,8 +4943,24 @@ Jaa vain seuraaville… Valmis + + Poistetaanko ryhmätarina? + + %1$s poistetaan. + + Poista + + Poistetaanko yksityinen tarina? + + %1$s ja tähän tarinaan jaetut päivitykset poistetaan. + + Poista + + Tarinat ovat vain Signalin beetaversion käyttäjien saatavilla. + + Jos jaat tarinan, se on vain Signalin beetaversiota käyttävien henkilöiden saatavilla. - Haluatko lisätä tarinaan? + Lisätäänkö tarinaan? Kun lisäät sisältöä tarinaasi, Signal-kontaktisi näkevät sisällön 24 tunnin ajan. Voit valita asetuksissa, kuka näkee tarinasi. @@ -4923,10 +4971,12 @@ Tarinaa ei voitu lähettää. Tarkista yhteytesi ja yritä uudelleen. Lähetä + + Poista käytöstä ja poista Jaa ja katso tarinoita - Et voi enää jakaa tai katsoa tarinoita, kun tämä valinta on valittuna. + Et voi enää jakaa tai katsoa tarinoita, kun tämä valinta on poistettu käytöstä. Valitse katsojat @@ -4939,7 +4989,7 @@ Nimeä tarina - Tarinan nimi (vaaditaan) + Tarinan nimi (pakollinen) Katsojat @@ -4993,9 +5043,9 @@ Poista käytöstä - Reagoit käyttäjän%1$s tarinaan + Reagoit käyttäjän %1$s tarinaan - lähetti reaktion tarinaasi + Lähetti reaktion tarinaasi Lähetti reaktion tarinaan @@ -5071,6 +5121,11 @@ Ryhmätarina · %1$d katsoja Ryhmätarina · %1$d katsojaa + + + %1$d jäsen + %1$d jäsentä + %1$s · %2$d katsoja @@ -5091,7 +5146,7 @@ Poista - Poista tarina? + Poistetaanko tarina? Poistetaanko yksityinen tarina %1$s? @@ -5206,7 +5261,7 @@ Poistetaanko tarinat käytöstä? - Et voi enää jakaa tai nähdä tarinoita. Viimeksi julkaisemasi tarinat näkyvät edelleen muille, kunnes ne vanhenevat. + Et voi enää jakaa tai nähdä tarinoita. Myös viimeksi jakamasi tarinoiden päivitykset poistetaan. Tarinoiden yksityisyys @@ -5214,7 +5269,7 @@ Kuka voi nähdä tämän tarinan - "Ryhmän \"%1$s\" jäsenet voivat nähdä tarinan ja vastata siihen. Voit päivittää tämän keskustelun jäsenyyden ryhmässä." + "Ryhmän %1$s jäsenet voivat nähdä tarinan ja vastata siihen. Voit päivittää tämän keskustelun jäsenyyden ryhmässä." Poista ryhmätarina diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 1827c7a72a..34a0265139 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1960,6 +1960,7 @@ %1$s à vous Le média n’est plus disponible. Impossible de trouver une appli qui peut partager ce média. + Fermer %1$d nouveaux messages dans %2$d conversations @@ -2748,10 +2749,14 @@ Personnaliser l’option + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Pas maintenant + + + Security setup + + Protect your funds + + Help prevent a person with your phone from accessing your funds by adding another layer of security. You can disable this option in Settings. + + Enable payment lock + + Pas maintenant + + Skip this step? + + Skipping this step could allow anyone who has physical access to your phone to transfer funds or view your recovery phrase. + + Annuler + + Ignorer + Ajouter des fonds L’adresse de votre portefeuille @@ -4799,6 +4824,8 @@ Retirer le spectateur Aucune réponse pour le moment + + You can\'t reply to this story because you\'re no longer a member of this group. A réagi à l’histoire @@ -4817,6 +4844,13 @@ Supprimer Mon histoire + + + %1$d viewer + %1$d viewers + + + View Qui peut voir cette story ? @@ -4851,8 +4885,6 @@ Autoriser les réponses et réactions Laisser les personnes qui peuvent voir votre histoire réagir et y répondre - - Cacher votre histoire pour certaines personnes. Par défaut, votre histoire est partagée avec votre %1$s Connexions Signal @@ -4911,6 +4943,22 @@ Partager uniquement avec… Terminé + + Supprimer l\'histoire de groupe ? + + \"%1$s\" will be removed. + + Supprimer + + Supprimer la Story privée ? + + \"%1$s\" and updates shared to this story will be deleted. + + Supprimer + + Stories is available to Signal beta users only. + + If you share a story, it will only be available to people who are on Signal beta. Ajouter à l’histoire ? @@ -4923,6 +4971,8 @@ L\'histoire n’a pas pu être envoyée. Veuillez vérifier votre connexion et réessayer. Envoyer + + Turn off and delete Partager et voir les histoires @@ -5071,6 +5121,11 @@ Story de groupe · %1$d spectateur Story de groupe · %1$d spectateurs + + + %1$d membre + %1$d membres + %1$s · %2$d spectateur @@ -5206,7 +5261,7 @@ Désactiver les stories ? - Vous ne pourrez plus partager ni consulter de stories. Celles que vous avez récemment partagées restent visibles par vos contacts jusqu\'à leur expiration. + You will no longer be able to share or view stories. Story updates you have recently shared will also be deleted. Confidentialité de la story diff --git a/app/src/main/res/values-ga/strings.xml b/app/src/main/res/values-ga/strings.xml index 976e2389f8..d0745392f2 100644 --- a/app/src/main/res/values-ga/strings.xml +++ b/app/src/main/res/values-ga/strings.xml @@ -1581,11 +1581,11 @@ Ball de %1$s agus %2$s Ball de %1$s, %2$s, agus %3$s - %1$d member - %1$d members - %1$d members - %1$d members - %1$d members + %1$d bhall + %1$d bhall + %1$d bhall + %1$d mball + %1$d ball @@ -2182,6 +2182,7 @@ %1$s to you Níl an meán sin ar fáil a thuilleadh. Can\'t find an app able to share this media. + Dún %1$d dteachtaireacht nua i %2$d gcomhrá @@ -2339,11 +2340,11 @@ Recommended member limit reached Signal groups perform best with %1$d members or fewer. Adding more members will cause delays sending and receiving messages. - %1$d member - %1$d members - %1$d members - %1$d members - %1$d members + %1$d bhall + %1$d bhall + %1$d bhall + %1$d mball + %1$d ball @@ -2352,11 +2353,11 @@ - %1$d member - %1$d members - %1$d members - %1$d members - %1$d members + %1$d bhall + %1$d bhall + %1$d bhall + %1$d mball + %1$d ball @@ -3006,10 +3007,14 @@ Customize option + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3162,6 +3167,26 @@ Ná bac leis anois + + + Socrú slándála + + Cosain do chistí + + Cabhraigh le duine a bhfuil do ghuthán aige nó aici a chosc ó rochtain a fháil ar do chistí trí shraith eile slándála a chur leis. Is féidir leat an rogha seo a dhíchumasú i Socruithe. + + Cumasaigh glas íocaíochtaí + + Ní anois + + An bhfuil fonn ort an chéim seo a scipeáil? + + Má scipeálann tú an chéim seo, bheadh cead ag aon duine ag a bhfuil rochtain fhisiciúil ar do ghuthán cistí a aistriú nó féachaint ar do fhrása athshlánaithe. + + Cuir ar ceal + + Léim thar seo + Add Funds Your Wallet Address @@ -3959,11 +3984,11 @@ Léim thairis seo - %1$d member - %1$d members - %1$d members - %1$d members - %1$d members + %1$d bhall + %1$d bhall + %1$d bhall + %1$d mball + %1$d ball @@ -4078,9 +4103,9 @@ Ligeann do fhrása athshlánaithe duit d\'iarmhéid a aischur sa chás is measa. Molaimid go láidir duit é a shábháil. - Ná bac le Frása Athshlánaithe + Scipeáil Frása Athshlánaithe - Cealaigh + Cuir ar ceal Paste Recovery Phrase @@ -4234,9 +4259,9 @@ Remove SMS messages - Teachtaireachtaí SMS á mbaint de Signal... + Teachtaireachtaí SMS á mbaint ó Signal... - Is féidir leat teachtaireachtaí SMS a bhaint de Signal i Socruithe uair ar bith. + Is féidir leat teachtaireachtaí SMS a bhaint ó Signal sna Socruithe am ar bith. Teachtaireachtaí @@ -4482,27 +4507,27 @@ Teachtaireacht - Glao Fuaime + Guthghlao Físghlao - Bain é + Bain - Bac Nua + Cuir bac air/uirthi Bain %1$s? Ní fheicfidh tú an duine seo agus cuardach á dhéanamh agat. Gheobhaidh tú iarratas teachtaireachta má sheolfaidh an duine sin teachtaireacht chugat amach anseo. - Baineadh %1$s + %1$s bainte - Cuireadh bac ar %1$s + Bac curtha ar %1$s Ní féidir %1$s a bhaint - Tá an duine seo sábháilte i dTeagmhálaithe ar do ghléas. Scrios an duine sin de do Theagmhálaithe agus triail arís. + Tá an duine seo sábháilte i dTeagmhálaithe ar do ghléas. Scrios an duine sin ó do Theagmhálaithe agus triail arís. - Féach an teagmhálaí + Féach ar an teagmhálaí Cuardaigh ainm nó uimhir @@ -5021,7 +5046,7 @@ Tapáil chun scéal a chur leis - Níl aon nuashonruithe le déanaí ann lena dtaispeáint díreach anois. + Níl aon nuashonruithe le déanaí ann le taispeáint díreach anois. Hide Story @@ -5120,6 +5145,8 @@ Bain an t-amharcóir No replies yet + + Ní féidir leat freagairt don scéal seo mar níl tú i do bhall den ghrúpa seo a thuilleadh. Reacted to the story @@ -5138,6 +5165,16 @@ Scrios Mo Scéal + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + %1$d viewers + + + View Who Can View This Story @@ -5178,18 +5215,16 @@ Ceadaigh Freagraí agus Freagairtí Let people who can view your story react and reply - - Hide your story from specific people. By default, your story is shared with your %1$s Teagmhálaithe Signal Signal Connections are people you\'ve chosen to trust, either by: - Starting a conversation + Trí chomhrá a thosú leo - Accepting a message request + Trí iarratas teachtaireachta a ghlacadh - Having them in your system contacts + Trína gcur le do theagmhálaithe córais "Your connections can see your name and photo, and can see posts to My Story unless you hide it from them." @@ -5238,6 +5273,22 @@ Only share with… Déanta + + Remove group story? + + Bainfear \"%1$s\". + + Bain + + Delete private story? + + Scriosfar \"%1$s\" agus nuashonruithe a chomhroinntear chuig an scéal seo. + + Scrios + + Níl fáil ar scéalta ach ag úsáideoirí Signal béite . + + Má chomhroinneann tú scéal, ní bheidh sé ar fáil ach ag daoine atá ar Signal béite. Add to story? @@ -5250,6 +5301,8 @@ Story could not be sent. Check your connection and try again. Seol + + Cas as agus scrios Share & View Stories @@ -5410,6 +5463,14 @@ Group story · %1$d viewers Group story · %1$d viewers + + + %1$d bhall + %1$d bhall + %1$d bhall + %1$d mball + %1$d ball + %1$s · %2$d viewer @@ -5542,7 +5603,7 @@ Seolta ó - Teipthe + Theip air Eolas @@ -5560,7 +5621,7 @@ An bhfuil fonn ort scéalta a chasadh as? - Ní bheidh tú in ann scéalta a chomhroinnt ná féachaint orthu a thuilleadh. Beidh aon scéalta a sheol tú le déanaí infheicthe ag daoine eile go dtí go n-imeoidh siad as feidhm. + Ní bheidh tú in ann féachaint ar scéalta ná iad a chomhroinnt a thuilleadh. Scriosfar na nuashonruithe ar scéal a chomhroinn tú le déanaí freisin. Story Privacy @@ -5583,7 +5644,7 @@ Export your SMS messages - Is féidir leat do theachtaireachtaí SMS a easpórtáil go dtí bunachar sonraí SMS do ghutháin. Ligeann sé seo d\'aipeanna SMS eile ar do ghuthán iad a rochtain agus a iompórtáil. Ní chruthaíonn sé seo comhad inroinnte de stair do theachtaireachtaí SMS. + Is féidir leat do theachtaireachtaí SMS a easpórtáil chuig bunachar sonraí SMS do ghutháin. Ligeann sé seo d\'aipeanna eile SMS ar do ghuthán iad a rochtain agus a iompórtáil. Ní chruthaíonn sé seo comhad in-chomhroinnte de stair do theachtaireachtaí SMS. Ar Aghaidh @@ -5613,13 +5674,13 @@ Roghnaigh \"Aip SMS\" ón liosta - Roghnaigh aip eile chun í a úsáid le haghaidh cur teachtaireachtaí SMS + Roghnaigh aip eile le húsáid le cur teachtaireachtaí SMS Fill ar Signal Oscail aip Socruithe do ghutháin - Téigh go dtí \"Aipeanna\" > \"Aipeanna réamhshocraithe\" > \"Aip SMS\" + Téigh chuig \"Aipeanna\" > \"Aipeanna réamhshocraithe\" > \"Aip SMS\" @@ -5629,7 +5690,7 @@ Remove SMS messages from Signal? - Is féidir leat teachtaireachtaí SMS a bhaint de Signal anois chun spás stórála a ghlanadh. Beidh siad fós ar fáil d\'aipeanna SMS eile ar do ghuthán fiú má bhaineann tú iad. + Is féidir leat teachtaireachtaí SMS a bhaint ó Signal anois chun spás stórála a ghlanadh. Beidh siad fós ar fáil ag aipeanna eile SMS ar do ghuthán fiú má bhaineann tú iad. diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 73cd9410d1..01c19dc078 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -193,7 +193,7 @@ Actualizar Non actualizar Aviso - A túa versión de Signal caducou. Podes ver o historial de mensaxes mais non poderás enviar ou recibir mensaxes ata que a actualices. + A túa versión de Signal caducou. Podes ver o historial de mensaxes, mais non poderás enviar ou recibir mensaxes ata que a actualices. Non se atopou ningún navegador web. @@ -1960,6 +1960,7 @@ %1$s a ti Contido multimedia xa non dispoñible. Non se atopa unha aplicación con que compartir este contido multimedia. + Pechar %1$d novas mensaxes en %2$d conversas @@ -2657,7 +2658,7 @@ Usando conexión wifi En itinerancia Descarga automática multimedia - Historial das mensaxes + Historial de mensaxes Uso do almacenamento Fotografías Vídeos @@ -2666,11 +2667,11 @@ Revisar o almacenamento Eliminar mensaxes antigas? Baleirar o historial de mensaxes? - Esto eliminará permanentemente todo o historial de mensaxes e ficheiros de medios do teu dispositivo que sexan anteriores a %1$s. + Isto eliminará permanentemente todo o historial de mensaxes e multimedia do teu dispositivo que sexan anteriores a %1$s. Esto fará que só se conserven as %1$s mensaxes máis recentes nas conversas. - Esto eliminará permanentemente todo o historial de mensaxes e ficheiros de medios do teu dispositivo. + Isto eliminará permanentemente todo o historial de mensaxes e multimedia do teu dispositivo. Tes a certeza de querer eliminar todo o historial de mensaxes? - Vai ser eliminado todo o historial de mensaxes. Esta acción non ten volta. + Eliminarase todo o historial de mensaxes. Esta acción non se pode desfacer. Borrar todo agora Para sempre 1 ano @@ -2748,10 +2749,14 @@ Personalizar opción + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Agora non + + + Configuración de seguranza + + Protexe os teus fondos + + Axuda a evitar que unha persoa co teu teléfono acceda aos teus fondos engadindo unha capa máis de seguridade. Podes desactivar esta opción en Configuración. + + Activar o bloqueo de pagamento + + Agora non + + Omitir este paso? + + Omitir este paso pode permitir que calquera que teña acceso físico ao teu teléfono poida transferir os teus fondos ou vexa a túa frase de recuperación. + + Cancelar + + Omitir + Engadir fondos Enderezo da túa carteira @@ -4799,6 +4824,8 @@ Eliminar espectador Sen respostas + + Non podes responder a esta historia porque xa non formas parte deste grupo. Reaccionou á túa historia @@ -4817,6 +4844,13 @@ Eliminar A miña historia + + + %1$d viewer + %1$d viewers + + + View Quen pode ver esta historia @@ -4851,8 +4885,6 @@ Permitir respostas & reaccións Permitir ás persoas que ven a túa historia reaccionar e responder - - Ocutar a túa historia a persoas específicas. Por defecto, a túa historia compartirase coas tuas %1$s Conexións de Signal @@ -4872,7 +4904,7 @@ Eliminar %1$s? - Esta persoa xa non pode ver a túa historia. + Esta persoa xa non poderá ver a túa historia. Eliminar @@ -4911,10 +4943,26 @@ Compartir só con… Feito + + Eliminar historia do grupo? + + Eliminarase «%1$s». + + Eliminar + + Eliminar historia privada? + + Eliminaranse «%1$s» e as actualizacións compartidas nesta historia. + + Borrar + + As historias só están dispoñibles para os usuarios da versión beta de Signal. + + Se compartes unha historia, só estará dispoñible para as persoas que teñan a versión beta de Signal. Engadir á historia? - Engadir contido a túa historia permite que as túas conexións de Signal poidan vela durante 24 horas. Podes cambiar quen ve a túa historia en Configuración. + Engadir contido á túa historia permite que as túas conexións de Signal poidan vela durante 24 horas. Podes cambiar quen ve a túa historia en Configuración. Engadir á historia @@ -4923,8 +4971,10 @@ Erro ao enviar a historia. Comproba a túa conexión e inténtao de novo. Enviar + + Desactivar e eliminar - Compartir & Ver historias + Compartir e ver historias Non poderás compartir ou ver historias cando esta opción estea desactivada. @@ -4947,7 +4997,7 @@ Este campo é obrigatorio. - Xa tes unha historia con este nome + Xa tes unha historia con este nome. Seleccionar todo @@ -4957,7 +5007,7 @@ Visible só para xente específica - Historia de grupo + Historia do grupo Compartir nun grupo existente @@ -4995,7 +5045,7 @@ Reaccionaches á historia de %1$s - Reaccionou a túa historia + Reaccionou á túa historia Reaccionou a unha historia @@ -5068,8 +5118,13 @@ - Historia grupal · %1$d espectador - Historia grupal · %1$d espectadores + Historia do grupo · %1$d espectador + Historia do grupo · %1$d espectadores + + + + %1$d membro + %1$d membros @@ -5169,7 +5224,7 @@ Privacidade da miña historia - Elixe quen pode ver as publicacións en A miña historia. Sempre podes cambialo en Configuración. + Elixe quen pode ver as publicacións en «A miña historia». Sempre podes cambialo en Configuración. Todas as conexións de Signal @@ -5206,7 +5261,7 @@ Desactivar historias? - Non poderás ver nin compartir as historias. Calquera historia que enviases recentemente seguirá a ser visible ata que caduque. + Xa non poderás compartir ou ver historias. Eliminaranse tamén as novas historias que compartiches. Privacidade da historia @@ -5216,7 +5271,7 @@ "Os membros do grupo «%1$s» poden ver e responder a esta historia. Podes actualizar a lista de membros desta conversa no grupo." - Eliminar historia de grupo + Eliminar historia do grupo Menú emerxente diff --git a/app/src/main/res/values-gu/strings.xml b/app/src/main/res/values-gu/strings.xml index 6e22d2d6ed..58c5ba61a5 100644 --- a/app/src/main/res/values-gu/strings.xml +++ b/app/src/main/res/values-gu/strings.xml @@ -193,7 +193,7 @@ અપડેટ અપડેટ કરશો નહીં ચેતવણી - તમારી Signal એપ નું વર્ઝન સમાપ્ત થઈ ગયું છે. તમે તમારો મેસેજ હિસ્ટ્રી જોઈ શકો છો પરંતુ તમે અપડેટ ન કરો ત્યાં સુધી તમે મેસેજ મોકલવા અથવા પ્રાપ્ત કરવામાં સમર્થ હશો નહીં. + તમારી Signal ઍપનું વર્ઝન જૂનું થઈ ગયું છે. તમે તમારો મેસેજ હિસ્ટ્રી જોઈ શકો છો પરંતુ તમે અપડેટ ન કરો ત્યાં સુધી તમે મેસેજ મોકલી અથવા પ્રાપ્ત નહીં કરી શકો. કોઈ વેબ બ્રાઉઝર મળ્યું નથી. @@ -218,7 +218,7 @@ ઉપયોગકર્તા નામ દ્વારા શોધો - મારી સ્ટોરી + મારી સ્ટોરીઝ નવી સ્ટોરી @@ -1346,9 +1346,9 @@ આ નવી સુવિધા ગમી? Signalને એક-વખતના યોગદાન સાથે સહયોગ આપવામાં મદદ કરો. - %1$s સાથેનો તમારો મેસેજ ઇતિહાસ અને તેમનો નંબર %2$s ભેગા કરી દેવામાં આવ્યા છે. + %1$s સાથેની તમારી મેસેજ હિસ્ટ્રી અને તેમનો નંબર %2$s ભેગા કરી દેવામાં આવ્યા છે. - %1$s સાથેનો તમારો મેસેજ ઈતિહાસ અને તેમની સાથે જોડાયેલી બીજી ચેટ ભેગા કરી દેવામાં આવ્યા છે. + %1$s સાથેની તમારી મેસેજ હિસ્ટ્રી અને તેમની સાથેની બીજી ચેટને ભેગી કરી દેવામાં આવી છે. %1$s એ ગ્રુપ કૉલ શરૂ કર્યો · %2$s @@ -1542,7 +1542,7 @@ નેટવર્ક નિષ્ફળ થયું! નંબર રજીસ્ટર નથી! તમે ડાયલ કરેલ નંબર સુરક્ષિત ઑડિયોને સપોર્ટ કરતું નથી! - ખબર પડી + સમજાઈ ગયું @@ -1855,9 +1855,9 @@ તમે એક ગિફ્ટ બૅજ રિડિમ કર્યું - તમારી સ્ટોરી પર %1$s પ્રતિક્રિયા આપી + તમારી સ્ટોરી પર %1$s એ પ્રતિક્રિયા આપી - તેમની સ્ટોરી પર %1$s પ્રતિક્રિયા આપી + તેમની સ્ટોરી પર %1$s એ પ્રતિક્રિયા આપી Molly અપડેટ @@ -1960,6 +1960,7 @@ %1$sએ તમને મીડિયા હવે ઉપલબ્ધ નથી. આ મીડિયાને શેર કરવા માટે સક્ષમ એપ્લિકેશન શોધી શકાતી નથી. + બંધ %1$d%2$d સંવાદ માં નવા મેસેજ @@ -2666,10 +2667,10 @@ સ્ટોરેજ રિવ્યુ કરો જૂના મેસેજ કાઢી નાખવા છે? મેસેજની હિસ્ટ્રી દૂર કરવી છે? - આ તમારા ઉપકરણમાંથી તમામ મેસેજ હિસ્ટ્રી અને મીડિયાને કાયમ માટે કાઢી નાખશે જે %1$s થી જૂની છે. + આનાથી તમારા ડિવાઇસમાંથી %1$s પહેલાંની તમામ મેસેજ હિસ્ટ્રી અને મીડિયા કાયમ માટે ડિલીટ થઈ જશે. આ તમામ વાતચીતને %1$s સૌથી તાજેતરના મેસેજ માટે કાયમી રીતે ટ્રિમ કરશે. - આ તમારા ઉપકરણમાંથી તમામ મેસેજ હિસ્ટ્રી અને મીડિયાને કાયમ માટે કાઢી નાખશે. - તમે આ બધી મેસેજ હિસ્ટ્રી કાઢી નાખવા માંગો છો? + આનાથી તમારા ડિવાઇસમાંથી તમામ મેસેજ હિસ્ટ્રી અને મીડિયા કાયમ માટે ડિલીટ થઈ જશે. + તમે ખરેખર આ બધી મેસેજ હિસ્ટ્રી ડિલીટ કરવા માંગો છો? તમામ મેસેજ હિસ્ટ્રી કાયમ માટે દૂર કરવામાં આવશે. આ ક્રિયા પૂર્વવત્ કરી શકાતી નથી. બધુ હમણાં કાઢી નાખો હમેશા @@ -2748,10 +2749,14 @@ કસ્ટમાઇઝ વિકલ્પ + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ અત્યારે નહીં + + + સુરક્ષા સેટઅપ + + તમારા ભંડોળને સુરક્ષિત કરો + + સુરક્ષાનું અન્ય સ્તર ઉમેરીને તમારો ફોન ધરાવતી વ્યક્તિને તમારા ભંડોળને ઍક્સેસ કરવાથી રોકવામાં સહાય કરો. તમે આને સેટિંગ્સમાંથી બદલી શકો છો. + + પેમેન્ટ લૉક ચાલુ કરો + + અત્યારે નહીં + + આ પગલું છોડી દઈએ? + + આ પગલું અવગણવાથી તમારા ફોનની ભૌતિક ઍક્સેસ ધરાવતી કોઈપણ વ્યક્તિને ફંડ ટ્રાન્સફર કરવાની અથવા તમારા રિકવરી ફ્રેઝને જોવાની મંજૂરી મળી શકે છે. + + રદ કરો + + અવગણો + ફંડ ઉમેરો તમારું વૉલેટ સરનામું @@ -4256,7 +4281,7 @@ મેસેજ ઉમેરો વધુ ઝડપી ફોરવર્ડ - વિડીયો 30 સેકન્ડની ક્લિપમાં કાપવામાં આવશે અને મલ્ટિપલ સ્ટોરી તરીકે મોકલવામાં આવશે. + વિડીયો 30 સેકન્ડની ક્લિપમાં કાપવામાં આવશે અને એકથી વધુ સ્ટોરી તરીકે મોકલવામાં આવશે. સ્ટોરી તરીકે મોકલવામાં આવતા વિડીયો 30 સેકન્ડથી વધુ લાંબા ન હોઈ શકે. ફોરવર્ડ કરેલા મેસેજ હવે તાત્કાલિક મોકલવામાં આવે છે. @@ -4703,7 +4728,7 @@ 99+ - સ્ટોરી ગોપનીયતા + સ્ટોરીની ગોપનીયતા મારી સ્ટોરી @@ -4786,7 +4811,7 @@ હજી કોઈ દ્રશ્યો નથી - તમારી સ્ટોરી કોણે જોઈ છે તે જોવા પ્રાપ્ત કર્યાની રસીદ સક્ષમ કરો. + તમારી સ્ટોરી કોણે જોઈ છે તે જોવા વાંચી લીધાનું નિશાન સક્ષમ કરો. સેટિંગ્સ પર જાઓ @@ -4799,6 +4824,8 @@ દર્શકને દૂર કરો હજી કોઈ જવાબો નથી + + તમે આ સ્ટોરીનો જવાબ આપી શકતા નથી કારણ કે તમે હવે આ ગ્રુપના સભ્ય નથી. સ્ટોરી પર પ્રતિક્રિયા આપી @@ -4817,6 +4844,13 @@ કાઢી નાખો મારી સ્ટોરી + + + %1$d viewer + %1$d viewers + + + View આ સ્ટોરી કોણ જોઈ શકે @@ -4851,8 +4885,6 @@ જવાબો અને પ્રતિક્રિયાઓને મંજૂરી આપો જે લોકો તમારી સ્ટોરી જોઈ શકે છે તેમને પ્રતિક્રિયા અને જવાબ આપવા દો - - તમારી સ્ટોરીને ચોક્કસ લોકોથી છુપાવો. ડિફોલ્ટ રૂપે, તમારી સ્ટોરી તમારા %1$s સાથે શેર થયેલ છે Signal કનેક્શન @@ -4880,9 +4912,9 @@ આ ક્રિયાને પૂર્વવત કરી શકાશે નહીં. - સ્ટોરી નામ સંપાદિત કરો + સ્ટોરીનું નામ સંપાદિત કરો - સ્ટોરી નામ + સ્ટોરીનું નામ સેવ કરો @@ -4900,7 +4932,7 @@ URL લખો અથવા પેસ્ટ કરો - તમારી સ્ટોરીના દર્શકો સાથે લિંક શેર કરો + તમારી સ્ટોરીના દર્શકો સાથે એક લિંક શેર કરો શોધો @@ -4911,18 +4943,36 @@ ફક્ત આમની સાથે શેર કરો… થઈ ગયું + + ગ્રુપ સ્ટોરી દૂર કરવી છે? + + \"%1$s\" ને દૂર કરવામાં આવશે. + + દૂર કરો + + ખાનગી સ્ટોરી ડિલીટ કરવી છે? + + \" %1$s \" અને આ સ્ટોરી પર શેર કરેલ અપડેટ ડિલીટ કરવામાં આવશે. + + ડિલીટ કરો + + સ્ટોરી Signal બીટા ઉપયોગકર્તાઓ માટે જ ઉપલબ્ધ છે. + + જો તમે કોઈ સ્ટોરી શેર કરો છો, તો તે ફક્ત Signal બીટા પર હોય તેવા લોકો માટે જ ઉપલબ્ધ હશે. સ્ટોરીમાં ઉમેરવું છે? - તમારી સ્ટોરી પર કન્ટેન્ટ ઉમેરવાથી તમારા Signal સંપર્કોને તેને 24 કલાક સુધી જોવાની મંજૂરી મળે છે. તમારી સ્ટોરી કોણ જોઈ શકે તે તમે સેટિંગ્સમાંથી બદલી શકો છો. + તમારી સ્ટોરી પર કન્ટેન્ટ ઉમેરવાથી તમારા Signal કનેક્શનને તેને 24 કલાક સુધી જોવાની મંજૂરી મળે છે. તમારી સ્ટોરી કોણ જોઈ શકે તે તમે સેટિંગ્સમાંથી બદલી શકો છો. સ્ટોરીમાં ઉમેરો દર્શકો સંપાદિત કરો - સ્ટોરી મોકલી શકાઈ નહીં. તમારું કનેક્શન તપાસો અને ફરી પ્રયાસ કરો. + સ્ટોરી મોકલી શકાઈ નહીં. તમારું જોડાણ તપાસો અને ફરી પ્રયાસ કરો. મોકલો + + બંધ કરો અને ડિલીટ કરો સ્ટોરી શેર કરો અને જુઓ @@ -5060,16 +5110,21 @@ અત્યારે નહીં - ફક્ત આમની સાથે શેર કરો + આમની સાથે જ શેર કરો ખાનગી સ્ટોરી · %1$d દર્શક - ખાનગી સ્ટોરી · %1$d વ્યૂઅર્સ + ખાનગી સ્ટોરી · %1$d દર્શકો ગ્રૂપ સ્ટોરી · %1$d દર્શક - ગ્રુપ સ્ટોરી · %1$d વ્યૂઅર્સ + ગ્રુપ સ્ટોરી · %1$d દર્શકો + + + + %1$d સભ્ય + %1$d સભ્યો @@ -5121,7 +5176,7 @@ બહાર નીકળવા જમણે સ્વાઇપ કરો - ખબર પડી + સમજાઈ ગયું સંદર્ભ મેનૂ ઓપન કરો @@ -5139,7 +5194,7 @@ બધા જ કનેક્શનની સમીક્ષા થઈ ચૂકી છે, ચાલુ રાખવા માટે મોકલો પર ટૅપ કરો. - તમારા %1$d કનેક્શન એવા છે જેમણે Signal ફરીથી ઇન્સ્ટોલ કરેલ અથવા તેમના ડિવાઇસ બદલેલ હોઈ શકે છે. તેમની સાથે તમારી સ્ટોરી શેર કરતાં પહેલાં તેમના સલામતી નંબરની સમીક્ષા કરો અથવા તેમને તમારી સ્ટોરીમાંથી દૂર કરવાનું વિચારો. + તમારા %1$d કનેક્શન એવા છે જેમણે Signal ફરીથી ઇન્સ્ટોલ કરેલ છે અથવા તેમના ડિવાઇસ બદલેલા હોઈ શકે છે. તેમની સાથે તમારી સ્ટોરી શેર કરતાં પહેલાં તેમના સલામતી નંબરની સમીક્ષા કરો અથવા તેમને તમારી સ્ટોરીમાંથી દૂર કરવાનું વિચારો. સલામતી નંબર ચકાસો @@ -5194,7 +5249,7 @@ - સ્ટોરી 24 કલાક પછી આપમેળે ગાયબ થઈ જાય છે. તમારી સ્ટોરી કોણ જોઈ શકે તે પસંદ કરો અથવા ચોક્કસ દર્શકો અથવા ગ્રૂપ સાથે જ સ્ટોરી બનાવો. + સ્ટોરી 24 કલાક પછી આપમેળે ગાયબ થઈ જાય છે. તમારી સ્ટોરી કોણ જોઈ શકે તે પસંદ કરો અથવા ચોક્કસ દર્શકો અથવા ગ્રુપ સાથે જ સ્ટોરી બનાવો. સ્ટોરી બંધ કરો @@ -5206,17 +5261,17 @@ સ્ટોરી બંધ કરવી છે? - તમે હવે સ્ટોરી જોઈ અથવા શેર કરી શકશો નહીં. તમે તાજેતરમાં મોકલેલી કોઈ પણ સ્ટોરી હજી પણ તેનો સમય સમાપ્ત ન થાય ત્યાં સુધી અન્યોને દેખાશે. + તમે હવેથી સ્ટોરી જોઈ કે શેર કરી શકશો નહીં. તમે તાજેતરમાં શેર કરેલા સ્ટોરી અપડેટ પણ ડિલીટ થઈ જશે. - સ્ટોરી ગોપનીયતા + સ્ટોરીની ગોપનીયતા આ સ્ટોરી કોણ જોઈ શકે - "\"%1$s\" ગ્રૂપના સભ્યો આ સ્ટોરી જોઈ શકે છે અને તેનો જવાબ આપી શકે છે. તમે ગ્રૂપમાં આ ચેટ માટેનું સભ્યપદ અપડેટ કરી શકો છો." + "\"%1$s\" ગ્રુપના સભ્યો આ સ્ટોરી જોઈ શકે છે અને તેનો જવાબ આપી શકે છે. તમે ગ્રૂપમાં આ ચેટ માટેનું સભ્યપદ અપડેટ કરી શકો છો." - ગ્રૂપ સ્ટોરી દૂર કરો + ગ્રુપ સ્ટોરી દૂર કરો ઓવરફ્લો મેનૂ diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 988a2062ad..d1ffa66251 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -673,7 +673,7 @@ नए समूह क्या हैं? नए ग्रुप्स में कई फ़ीचर्स हैं जैसे कि @mentions और ग्रुप एडमिन, और भविष्य में और भी कई फ़ीचर्स शामिल किए जाएँगे। - अपग्रेड करने से पहले के सभी मेसेज इतिहास और मीडिया को रख लिया गया है। + अपग्रेड करने से पहले के सभी संदेश इतिहास और मीडिया को रख लिया गया है। इस ग्रुप में दोबारा जुड़ने के लिए बस आपको आमंत्रण को स्वीकार करना होगा, और जब तक आप स्वीकार नहीं कर लेते, आपको ग्रुप के मेसेज प्राप्त नहीं होंगे। इस ग्रुप में दोबारा जुड़ने के लिए इस मेंबर को आमंत्रण को स्वीकार करना होगा, और जब तक वे स्वीकार नहीं कर लेते, उन्हें ग्रुप के मेसेज प्राप्त नहीं होंगे: @@ -688,7 +688,7 @@ नए समूह में अपग्रेड करें इस समूह को अपग्रेड करें नए ग्रुप्स में कई फ़ीचर्स हैं जैसे कि @mentions और ग्रुप एडमिन, और भविष्य में और भी कई फ़ीचर्स शामिल किए जाएँगे। - अपग्रेड करने से पहले के सभी मेसेज इतिहास और मीडिया को रख लिया जाएगा। + अपग्रेड करने से पहले के सभी संदेश इतिहास और मीडिया को रख लिया जाएगा। एक नेटवर्क त्रुटि हो गई। बाद में दोबरा प्रयास करें। अपग्रेड करने में विफल। @@ -1346,9 +1346,9 @@ यह नया फ़ीचर पसंद आया? एक बार दान देकर Signal को सहयोग देने में मदद करें। - %1$s के साथ आपके मेसेज के इतिहास को उनके नंबर %2$s के साथ जोड़ दिया गया है। + %1$s के साथ आपके संदेश इतिहास को उनके नंबर %2$s के साथ जोड़ दिया गया है। - %1$s के साथ आपके मेसेज के इतिहास को उनके साथ ही किसी अन्य चैट के साथ जोड़ दिया गया है। + %1$s के साथ आपके संदेश इतिहास को उनके साथ ही किसी अन्य चैट के साथ जोड़ दिया गया है। %1$s ने एक ग्रुप कॉल शुरू की · %2$s @@ -1960,6 +1960,7 @@ %1$s से आपको मीडिया अब उपलब्ध नहीं है। इस मीडिया को शेयर करने के लिए कोई ऐप नहीं मिल रही। + बंद करो %2$d संवाद में %1$d नए मेसेज @@ -2623,7 +2624,7 @@ भुगतान (बीटा) वार्तालाप लंबाई सीमा मेसेज रखें - मेसेज इतिहास को साफ करें + संदेश इतिहास हटाएँ जुड़े हुए उपकरण रोशनी अँधेरा @@ -2657,7 +2658,7 @@ Wi-Fi का उपयोग करते समय रोमिंग करते समय मीडिया ऑटो डाउनलोड - मेसेज इतिहास + संदेश इतिहास स्टॉरेज का उपयोग तस्वीरें वीडियो @@ -2665,12 +2666,12 @@ ऑडियो स्टॉरेज रिव्यु पुराने मेसेजेस को मिटाना है? - मेसेज इतिहास को साफ करना है? - इससे आपके डिवाइस से वह सारा मेसेज इतिहास और मीडिया स्थाई रूप से मिटा दिया जाएगा जो %1$s से पुराना है। + संदेश इतिहास को हटाना है? + इससे आपके डिवाइस से वह सारा संदेश इतिहास और मीडिया स्थाई रूप से डिलीट कर दिया जाएगा जो %1$s से पुराना है। यह स्थाई रूप से सभी संवाद को हाल ही के %1$s मेसेज में ट्रिम कर देगा। - इससे आपके डिवाइस से सारे मेसेज इतिहास और मीडिया को स्थायी रूप से मिटा दिया जाएगा। - क्या आप वाकई में सारे मेसेज इतिहास को मिटाना चाहते हैं? - सारे मेसेज इतिहास को स्थाई रूप से हटा दिया जाएगा। इस कार्य को अनकिया नहीं किया जा सकता। + इससे आपके डिवाइस से सारा संदेश इतिहास और मीडिया स्थायी रूप से डिलीट कर दिया जाएगा। + क्या आप वाकई में सारे संदेश इतिहास को डिलीट करना चाहते हैं? + सारे संदेश इतिहास को स्थाई रूप से हटा दिया जाएगा। यह कार्रवाई होने के बाद वापस नहीं ली जा सकती। सभी कुछ अभी मिटाएँ हमेशा के लिए 1 वर्ष @@ -2748,10 +2749,14 @@ अनुकूलित करने का विकल्प + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ अभी नहीं + + + सुरक्षा सेटअप + + अपनी निधियों की सुरक्षा करें + + सुरक्षा का एक अतिरिक्त स्तर जोड़कर किसी व्यक्ति को आपके फ़ोन का इस्तेमाल कर आपकी निधियाँ प्राप्त करने से रोकने में मदद करें। आप सेटिंग्स में जा कर इस विकल्प को बंद कर सकते हैं। + + भुगतान लॉक को सक्षम करें + + अभी नहीं + + इस चरण को छोड़ना है? + + इस चरण को छोड़ने से कोई भी ऐसा व्यक्ति जिसके हाथ आपका फ़ोन लग जाए, उसके इस्तेमाल से निधियाँ अंतरित कर सकता है या आपका रिकवरी वाक्य देख सकता है। + + रद्द करें + + छोड़ दे + धन जोड़ें आपका वॉलेट पता @@ -3976,7 +4001,7 @@ नई चैट के लिए डिफ़ॉल्ट टाइमर आपके द्वारा शुरू की गई सभी नई चैट के लिए एक ग़ायब होने वाले संदेशों का समय सेट करें। - अपनी स्टोरीज़ और उन्हें कौन देख सकते हैं, इसे मैनेज करें + अपनी स्टोरीज़ को मैनेज करें और यह कि उन्हें कौन देख सकता है निधियाँ भेजने के लिए ऐंड्रॉयड स्क्रीन लॉक या फिंगरप्रिंट चाहिए भुगतान लॉक सक्षम नहीं किया जा सकता @@ -4256,9 +4281,9 @@ एक मेसेज शामिल करें तेज़ी से फ़ॉरवर्ड करें - वीडियो कटकर 30 सेकंड की क्लिप में बदल जाएंगे और कई स्टोरी के तौर पर भेजे जाएंगे। + वीडियो 30 सेकेंड की क्लिप्स में छांट-छांटकर कई स्टोरीज़ के तौर पर भेजे जाएंगे। - स्टोरी में भेजे जानेवाले वीडियो 30 सेकंड से अधिक के नहीं हो सकते। + स्टोरी में भेजे जानेवाले वीडियो 30 सेकेंड से अधिक के नहीं हो सकते। फ़ॉरवर्ड किए हुए मेसेज अब तुरंत भेजे जाते हैं. %1$d को मेसेज भेजें @@ -4799,6 +4824,8 @@ व्यूअर को हटाएँ कोई जवाब नहीं + + आप इस स्टोरी का जवाब नहीं दे सकते क्योंकि अब आप इस ग्रुप के सदस्य नहीं हैं। स्टोरी पर प्रतिक्रिया दी @@ -4817,6 +4844,13 @@ डिलीट करें मेरी स्टोरी + + + %1$d viewer + %1$d viewers + + + View यह स्टोरी कौन देख सकता है @@ -4851,8 +4885,6 @@ जवाब और प्रतिक्रियाएँ अनुमत करें आपकी स्टोरी देख सकने वाले लोगों को प्रतिक्रिया और जवाब देने दें - - कुछ निश्चित लोगों से अपनी स्टोरी छिपाएँ। डीफॉल्ट रूप से आपकी स्टोरी आपके %1$s के साथ शेयर की जाती है Signal कनेक्शन @@ -4872,7 +4904,7 @@ %1$s को हटाना है? - यह व्यक्ति अब आपको स्टोरी नहीं देख पाएगा। + यह व्यक्ति अब आपकी स्टोरी नहीं देख पाएगा। हटा दें @@ -4911,6 +4943,22 @@ केवल इनके साथ शेयर करें… पूर्ण + + ग्रुप स्टोरी हटानी है? + + \"%1$s\" को हटा दिया जाएगा। + + हटा दें + + निजी स्टोरी डिलीट करनी है? + + \"%1$s\" और इस स्टोरी से शेयर किए गए अपडेट डिलीट कर दिए जाएंगे। + + डिलीट करें + + स्टोरीज़ केवल Signal के बीटा यूज़र्स के लिए उपलब्ध है। + + यदि आप कोई स्टोरी शेयर करते हैं तो वह केवल उन लोगों के लिए उपलब्ध रहेगी जो Signal बीटा पर होंगे। स्टोरी में जोड़ना है? @@ -4923,6 +4971,8 @@ स्टोरी नहीं भेजी जा सकी। अपना कनेक्शन जाँचें और फिर से प्रयास करें। भेजें + + बंद करें और डिलीट करें शेयर करें और स्टोरीज़ देखें @@ -4937,7 +4987,7 @@ %1$d व्यूअर - नाम स्टोरी + नाम वाली स्टोरी स्टोरी नाम (आवश्यक है) @@ -5069,7 +5119,12 @@ ग्रुप स्टोरी · %1$d व्यूअर - ग्रुप स्टोरी · %1$d वयूअर + ग्रुप स्टोरी · %1$d व्यूअर + + + + %1$d सदस्य + %1$d सदस्य @@ -5196,17 +5251,17 @@ 24 घंटे बाद स्टोरीज़ अपने आप गायब हो जाती हैं। चुनें कि आपकी स्टोरी कौन देख सकता है या फिर निश्चित व्यूअर्स या ग्रुप्स के साथ नई स्टोरीज़ बनाएँ। - स्टोरीज़ बंद कर दें + स्टोरीज़ बंद करें स्टोरीज़ बंद करना चुनने पर आप न तो स्टोरीज़ शेयर कर पाएंगे, न ही उन्हें देख पाएंगे। - स्टोरीज़ बंद करें + स्टोरीज़ चालू करें दूसरों की स्टोरीज़ शेयर करें और उन्हें देखें। 24 घंटे बाद स्टोरीज़ अपने आप गायब हो जाती हैं। स्टोरीज़ बंद करनी हैं? - आप स्टोरीज़ न तो शेयर कर पाएंगे, न ही उन्हें देख पाएंगे। फिर भी हाल ही में भेजी गई आपकी कोई भी स्टोरी, समाप्त होने तक दूसरों को दिखेंगी। + अब आप स्टोरीज़ न तो शेयर कर पाएंगे, न ही उन्हें देख पाएंगे। हाल ही में आपका द्वारा शेयर किए गए स्टोरी अपडेट भी डिलीट कर दिए जाएंगे। स्टोरी की निजता @@ -5214,7 +5269,7 @@ इस स्टोरी को कौन देख सकता है - "\"%1$s\" ग्रुप के सदस्य इस स्टोरी को देख सकते हैं और इस पर जवाब दे सकते हैं। आप ग्रुप में इस चैट के लिए सदस्यता अपडेट कर सकते हैं।" + "%1$s ग्रुप के सदस्य इस स्टोरी को देख सकते हैं और इस पर जवाब दे सकते हैं। आप ग्रुप में इस चैट के लिए सदस्यता अपडेट कर सकते हैं।" ग्रुप स्टोरी हटाएँ @@ -5229,7 +5284,7 @@ अपने एसएमएस मेसेज एक्सपोर्ट कर दें - आप अपने SMS मेसेज अपने फ़ोन के SMS डेटाबेस को निर्यात कर सकते हैं। इससे आपके फ़ोन के अन्य SMS ऐप उन्हें ऐक्सेस व उनका आयात कर पाएँगे। इससे आपके SMS मेसेज इतिहास की कोई साझा करने योग्य फ़ाइल नहीं बनती है। + आप अपने SMS संदेश अपने फ़ोन के SMS डेटाबेस को निर्यात कर सकते हैं। इससे आपके फ़ोन के अन्य SMS ऐप उन्हें ऐक्सेस व उनका आयात कर पाएँगे। इससे आपके SMS संदेश इतिहास की कोई साझा करने योग्य फ़ाइल नहीं बनती है। जारी रखें diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 976cc4119b..72456b667a 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -195,7 +195,7 @@ Ažuriraj Ne ažuriraj Upozorenje - Vaša verzija Signala je istekla. Možete pregledati svoju povijest poruka, ali nećete moći slati ili primati poruke dok ne ažurirate. + Vaša verzija Signala je istekla. Možete pregledati svoju povijest poruka, ali nećete moći slati ili primati poruke dok ne ažurirate aplikaciju. Nije pronađen nijedan web preglednik. @@ -719,7 +719,7 @@ Što su Nove grupe? Nove grupe imaju značajke poput @spominjanja i administratora grupa, a ubuduće će podržavati više značajki. - Sva povijest poruka i medijskih zapisa sačuvani su od prije nadogradnje. + Sva povijest poruka i medijski zapisi sačuvani su nakon nadogradnje. Morati će te prihvatiti pozivnicu da se ponovno pridruži ovoj grupi i nećete primati poruke grupe dok ne prihvatite: Ovaj će član morati prihvatiti pozivnicu da bi se ponovno pridružio grupi i neće primati poruke grupe dok ne prihvati: @@ -738,7 +738,7 @@ Nadogradi u Novu grupu. Nadogradi ovu grupu Nove grupe imaju značajke poput @spominjanja i administratora grupa, a ubuduće će podržavati više značajki. - Sva povijest poruka i medijskih zapisa će biti sačuvana od prije nadogradnje. + Sva povijest poruka i medijskih zapisa bit će sačuvana nakon nadogradnje. Došlo je do mrežne pogreške. Pokušajte ponovno kasnije. Ažuriranje nije uspjelo. @@ -2108,6 +2108,7 @@ Poslao korisnik %1$s Medijski zapis više nije dostupan. Nije moguće pronaći aplikaciju za dijeljenje ovog medijskog zapisa. + Zatvori %1$d novih poruka u %2$d razgovora @@ -2842,7 +2843,7 @@ Ovo će trenutno skratiti sve razgovore na %1$s najnovijih poruka. Ovo će trajno izbrisati svu povijest razgovora i medijske zapise s vašeg uređaja. Jeste li sigurni da želite izbrisati svu povijest razgovora? - Sva povijest razgovora će biti trajno izbrisana. Ova se radnja ne može poništiti. + Sva povijest razgovora bit će trajno izbrisana. Ova se radnja ne može poništiti. Izbriši sve sada Zauvijek 1 godina @@ -2920,10 +2921,14 @@ Opcija prilagođavanja + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3076,6 +3081,26 @@ Ne sada + + + Sigurnosne postavke + + Zaštitite svoja sredstva + + Onemogućite pristup vašim sredstvima osobama koje imaju pristup vašem mobilnom uređaju postavljanjem dodane razine sigurnosti. Ovu opciju možete onemogućiti u Postavkama. + + Omogući zaključavanje plaćanja + + Ne sada + + Preskočiti ovaj korak? + + Preskakanje ovog koraka moglo bi omogućiti prijenos vaših sredstava ili pregled vaše fraze za oporavak svakome tko ima fizički pristup vašem telefonu. + + Poništi + + Preskoči + Dodaj sredstva Vaša adresa novčanika @@ -4911,7 +4936,7 @@ 99+ - Privatnost priče + Privatnost priča Moje priče @@ -5013,6 +5038,8 @@ Ukloni gledatelja Još nema odgovora + + Ne možete odgovoriti na ovu priču jer više niste član grupe. Reakcija na priču @@ -5031,6 +5058,15 @@ Izbriši Moja priča + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + + + View Tko može pogledati ovu priču @@ -5069,8 +5105,6 @@ Dopustite odgovore i reakcije Dopustite osobama koje mogu vidjeti vašu priču da reagiraju i odgovaraju - - Sakrij svoju priču od određenih osoba. Prema zadanim postavkama vaša se priča dijeli s vašim %1$s Signal kontakti @@ -5082,7 +5116,7 @@ Spremili ih u kontakte - "Vaši kontakti mogu vidjeti vaše ime i fotografiju te vaše priče osim ako ih od njih ne sakrijete." + "Vaši kontakti mogu vidjeti vaše ime i fotografiju te vaše priče, osim ako ih od njih ne sakrijete." Dodaj gledatelja @@ -5098,7 +5132,7 @@ Ova se radnja ne može poništiti. - Uređivanje naziva priče + Uredi naziv priče Naziv priče @@ -5129,6 +5163,22 @@ Podijeli samo s… Gotovo + + Ukloniti grupnu priču? + + \"%1$s\" bit će uklonjena. + + Ukloni + + Izbrisati privatnu priču? + + \"%1$s\" i ažuriranja podijeljena u ovoj priči bit će izbrisana. + + Izbriši + + Priče su dostupne samo korisnicima beta verzije Signala. + + Ako podijelite priču, ona će biti dostupna samo osobama koje koriste beta verziju Signala. Dodati u priču? @@ -5141,6 +5191,8 @@ Nije moguće poslati priču. Provjerite internetsku vezu i pokušajte ponovo. Pošalji + + Isključi i izbriši Dijelite i gledajte priče @@ -5215,9 +5267,9 @@ Reagirali ste na priču korisnika %1$s - Reagirala je na vašu priču + Reagira na vašu priču - Reakcija na priču + Reagira na priču @@ -5297,6 +5349,13 @@ Grupna priča · %1$d gledatelja Grupna priča · %1$d gledatelja + + + %1$d član + %1$d člana + %1$d članova + %1$d članova + %1$s · %2$d gledatelj @@ -5313,7 +5372,7 @@ Izbriši priču - Ukloni grupnu priču? + Ukloniti grupnu priču? Time će se priča ukloniti s ovog popisa. I dalje ćete moći vidjeti priče iz ove grupe. @@ -5430,7 +5489,7 @@ - Priče automatski nestaju nakon 24 sata. Odaberite tko može vidjeti vašu priču ili kreirajte nove priče s određenim gledateljima ili grupama. + Priče automatski nestaju nakon 24 sata. Odaberite tko može vidjeti vašu priču ili stvorite nove priče s određenim gledateljima ili grupama. Isključi priče @@ -5442,15 +5501,15 @@ Isključiti priče? - Više nećete moći dijeliti niti pregledavati priče. Sve priče koje ste nedavno poslali bit će vidljive drugima dok ne isteknu. + Više nećete moći dijeliti niti pregledavati priče. Ažuriranja priča koja ste nedavno podijelili također će se izbrisati. - Privatnost priče + Privatnost priča Tko može pogledati ovu priču - "Članovi grupe \"%1$s\" mogu pogledati i odgovoriti na ovu priču. Možete ažurirati članstvo za ovaj razgovor u grupi." + "Članovi grupe \"%1$s\" mogu pogledati ovu priču i odgovoriti na nju. Možete ažurirati članstvo za ovaj razgovor u grupi." Ukloni grupnu priču diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index d9243902a7..1f5683a200 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -193,7 +193,7 @@ Frissítés Nincs frissítés Figyelmeztetés - Az általad használt Signal verziója elavult. Megtekintheted a beszélgetés-előzményeket, de frissítésig nem fogsz tudni üzeneteket küldeni és fogadni. + A Signal általad használt verziója elavult. Megtekintheted a beszélgetés-előzményeket, de a frissítésig nem fogsz tudni üzeneteket küldeni és fogadni. Nem található böngésző. @@ -1855,7 +1855,7 @@ Beváltottál egy ajándék jelvényt - Reakció a történetedre: %1$s + Reakció a Történetedre: %1$s Reakció a Történetére: %1$s @@ -1960,6 +1960,7 @@ Feladó: %1$s A médiafájl már nem érhető el Nem található alkalmazás ezen médiafájl megnyitásához. + Bezárás %1$d új üzenet %2$d beszélgetésben @@ -2343,7 +2344,7 @@ Küldés ideje vágólapra másolva - A történeteid itt fognak megjelenni + A Történeteid itt fognak megjelenni. @@ -2748,10 +2749,14 @@ Beállítás testreszabása + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Később + + + Biztonsági beállítás + + Védd meg a pénzed + + Egy másik biztonsági réteg hozzáadásával megakadályozhatod, hogy egy személy hozzáférjen a pénzedhez a telefonodon keresztül. Ezt az opciót a Beállításokban kikapcsolhatod. + + Fizetési zár engedélyezése + + Később + + Kihagyod ezt a lépést? + + Ha kihagyod ezt a lépést, bárki, aki fizikailag hozzáfér a telefonodhoz, átutalhat pénzt az eszközről, illetve megtekintheti a helyreállítási kifejezést is. + + Mégse + + Kihagyás + Feltöltés A tárcád címe @@ -4733,15 +4758,15 @@ Koppints az újrapróbálkozáshoz! - Elrejted a történetet? + Elrejted a Történetet? - A %1$s felhasználótól származó történetek a jövőben nem fognak a lista tetejére kerülni. + A(z) %1$s felhasználótól származó Történetek a jövőben nem fognak a lista tetejére kerülni. Elrejtés Történet elrejtve - Elrejtett történetek + Elrejtett Történetek %1$d megtekintés @@ -4750,11 +4775,11 @@ Továbbítás - %1$s története + %1$s Története - Törlöd a történetet? + Törlöd a Történetet? - A történet nálad és az összes címzettnél törlésre kerül. + A Történet nálad és az összes címzettnél törlésre kerül. Mentés sikertelen @@ -4786,7 +4811,7 @@ Még nem látta senki - Engedélyezd az olvasási értesítéseket, hogy lásd, kik nézték meg a Történeteidet! + Engedélyezd az Olvasási értesítéseket, hogy lásd, kik nézték meg a Történeteidet! Ugrás a Beállításokhoz @@ -4799,14 +4824,16 @@ Néző eltávolítása Még nem érkeztek reakciók + + Nem válaszolhatsz erre a Történetre, mert már nem vagy tagja ennek a csoportnak. - Reakció elküldve a történetre + Reakció elküldve a Történetre Megtekintések Válaszok - Reagálás a történetre + Reagálás a Történetre Privát válasz küldése %1$s részére @@ -4817,6 +4844,13 @@ Törlés Történetem + + + %1$d viewer + %1$d viewers + + + View Ki tekintheti meg ezt a Történetet? @@ -4850,9 +4884,7 @@ Válaszok és reakciók engedélyezése - Reakciók és válaszok engedése azok számára, akik megtekinthetik a történetet - - A történeteket elrejtheted egyes személyek elől. Alapértelmezetten történeteidet a következők tekinthetik meg: %1$s + Reakciók és válaszok engedélyezése azok számára, akik megtekinthetik a Történetet Signal-névjegyek @@ -4864,15 +4896,15 @@ Szerepelnek a telefonkönyvedben - "Kapcsolataid megtekinthetik neved, profilképedet, valamint a \"Történeteim\" szekcióba posztoltakat, kivéve ha kifejezetten elrejtetted azokat előlük." + "A névjegyeid megtekinthetik a neved, a profilképedet, valamint a „Történeteim” szekcióba posztoltakat, kivéve ha kifejezetten elrejtetted azokat előlük." Megtekintő hozzáadása - Privát történet eltávolítása + Privát Történet eltávolítása Eltávolítod %1$s felhasználót? - A felhasználó mostantól nem tudja megtekinteni a történedet. + A felhasználó mostantól nem tudja megtekinteni a Történeted. Eltávolítás @@ -4880,7 +4912,7 @@ Ez a művelet nem vonható vissza - Történet címének megváltoztatása + Történet címének módosítása Történet címe @@ -4900,7 +4932,7 @@ Gépelj vagy másolj be egy URL-t - Hivatkozás megosztása a történet megtekintői számára + Hivatkozás megosztása a Történet megtekintői számára Keresés @@ -4911,22 +4943,40 @@ Megosztás kizárólag a következőkkel… Befejezés + + Csoport Történet eltávolítása? + + „%1$s” eltávolításra kerül. + + Eltávolítás + + Privát Történet törlése? + + „%1$s” és a Történettel kapcsolatos módosítások törlésre kerülnek. + + Törlés + + A Történetek csak a Signal béta felhasználói számára érhetők el. + + Ha megosztasz egy Történetet, az csak azok számára lesz elérhető, akik a Signal béta verziójában vannak. - Hozzáadod a történethez? + Hozzáadod a Történethez? - Ha hozzáadsz egy tartalmat a történetedhez, akkor Signal kapcsolataid 24 órán keresztül megtekinthetik azt. A Beállítások használatával testre szabhatod, hogy pontosan ki férhet hozzá történeteidhez. + Ha hozzáadsz egy tartalmat a Történetedhez, Signal Névjegyeid 24 órán keresztül megtekinthetik. A Beállításokban testre szabhatod, hogy pontosan ki tekintheti meg a Történeteidet. - Hozzáadás a történethez + Hozzáadás a Történethez Megtekintők módosítása - A történetet nem sikerült elküldeni. Ellenőrizd a hálózati kapcsolatot és próbáld újra! + A Történetet nem sikerült elküldeni. Ellenőrizd a hálózati kapcsolatot, és próbáld újra! Küldés + + Kikapcsolás és törlés Történetek megosztása és megtekintése - Ha letiltod ezt a funkciót, akkor nem fogsz tudni új történeteket hozzáadni vagy másokét megtekinteni. + Ha letiltod ezt a funkciót, nem fogsz tudni új Történeteket hozzáadni vagy másokét megtekinteni. Megtekintők kiválasztása @@ -4947,17 +4997,17 @@ A mező kitöltése kötelező. - Már létezik egy történet azonos címmel + Már létezik egy Történet azonos címmel. Összes kiválasztása - Válaszd ki a történet típusát + Válaszd ki a Történet típusát - Új privát történet + Új privát Történet Csak bizonyos személyek számára látható - Csoport-történet + Csoport Történet Megosztás egy meglévő csoporttal @@ -4969,7 +5019,7 @@ Válasz küldése… - A történet már nem érhető el. + A Történet már nem érhető el. Nincs internet kapcsolat @@ -4977,7 +5027,7 @@ Történet elküldve - Nem sikerült elküldeni a történetet + Nem sikerült elküldeni a Történetet Történet megtekintése @@ -4993,11 +5043,11 @@ Kikapcsolás - Reagáltál %1$s történetére + Reagáltál %1$s Történetére - Válasz a történetedre + Reagált a Történetedre - Reagált egy történetre + Reagált egy Történetre @@ -5060,7 +5110,7 @@ Később - Megosztás a következőkkel: + Megosztás kizárólag: Privát Történet · %1$d néző @@ -5071,6 +5121,11 @@ Csoport Történet · %1$d néző Csoport Történet · %1$d néző + + + %1$d tag + %1$d tag + %1$s · %2$d megtekintő @@ -5085,15 +5140,15 @@ Történet törlése - Csoport történet eltávolítása? + Csoport Történet eltávolítása? Ez eltávolítja a Történetet a listából. Továbbra is látni fogod a Történeteket ebből a csoportból. Eltávolítás - Törlöd a történetet? + Törlöd a Történetet? - Törlöd a(z) \"%1$s\" privát Történetet? + Törlöd a privát Történetet („%1$s”)? Törlés @@ -5139,7 +5194,7 @@ Minden névjegy ellenőrzése megtörtént, a folytatáshoz koppints a Küldés gombra. - %1$d olyan névjegyed van, akik vagy újratelepítették a Signalt vagy eszközt cseréltek. Mielőtt megosztanád velük a Történeted, vess egy pillantást a biztonsági számukra, vagy akár ki is zárhatod őket a Történet megtekintéséből. + %1$d olyan névjegyed van, aki újratelepítette a Signalt vagy eszközt cserélt. Mielőtt megosztanád velük a Történeted, vess egy pillantást a biztonsági számukra, vagy akár ki is zárhatod őket a Történet megtekintéséből. Bizt. szám ellenőrzése @@ -5206,7 +5261,7 @@ Történetek kikapcsolása? - Többé nem tudsz majd Történeteket megosztani vagy megtekinteni. A közelmúltban elküldött Történeteket mások továbbra is láthatják, amíg le nem járnak. + Többé nem fogsz tudni megosztani vagy megtekinteni Történeteket. A közelmúltban megosztott Történettel kapcsolatos módosítások is törlődnek. Történet adatvédelmi beállításai @@ -5214,7 +5269,7 @@ Ki tekintheti meg ezt a Történetet? - "A(z) „%1$s”csoport tagjai megtekinthetik ezt a Történetet, és válaszolhatnak rá. A csoportban frissítheted a csevegésre vonatkozó tagságot." + "A(z) „%1$s” csoport tagjai megtekinthetik ezt a Történetet, és válaszolhatnak rá. A csoportban frissítheted a csevegésre vonatkozó tagságot." Csoport Történet eltávolítása @@ -5229,7 +5284,7 @@ SMS-ek exportálása - Exportálhatod SMS-eidet a telefonod SMS-adatbázisába. Ez lehetővé teszi a telefonon lévő többi SMS-alkalmazás számára, hogy hozzáférjenek és importálják őket. Ez nem hoz létre megosztható fájlt az SMS-ek előzményeiből. + Exportálhatod SMS-eidet a telefonod SMS-adatbázisába. Ez lehetővé teszi a telefonon lévő többi SMS-alkalmazás számára, hogy hozzáférjen és importálja őket. Ez nem hoz létre megosztható fájlt az SMS-előzményekből. Folytatás diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index adfc59d404..b355e4c447 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -192,7 +192,7 @@ Perbarui Jangan Perbarui Peringatan - Versi Signal Anda telah kedaluwarsa. Anda dapat melihat riwayat pesan Anda namun Anda tidak dapat mengirim atau menerima pesan sampai Anda memperbaruinya. + Versi Signal Anda telah kedaluwarsa. Anda dapat melihat riwayat pesan Anda tetapi tidak akan dapat mengirim atau menerima pesan sampai Anda memperbaruinya. Peramban web tidak ditemukan. @@ -217,7 +217,7 @@ Cari menurut nama pengguna - Cerita saya + Cerita Saya Cerita baru @@ -650,7 +650,7 @@ Apakah Grup Baru? Grup yang baru akan memiliki fitur seperti @penyebutan dan ketua grup, juga akan mendapat dukungan lebih di masa mendatang. - Setiap riwayat pesan dan media disimpan sebelum pembaruan. + Semua riwayat pesan dan media telah disimpan sebelum pemutakhiran. Anda perlu menerima undangan untuk bergabung ke grup ini lagi, dan tidak akan menerima pesan grup sampai Anda menerimanya. Anggota ini harus menerima undangan bergabung ke grup ini lagi dan tidak akan menerima pesan grup sampai mereka menerimanya: @@ -663,7 +663,7 @@ Perbarui ke Grup Baru Perbarui grup ini Grup yang baru akan memiliki fitur seperti @penyebutan dan ketua grup, juga akan mendapat dukungan lebih di masa mendatang. - Setiap riwayat pesan dan media akan disimpan sebelum pembaruan. + Semua riwayat pesan dan media akan disimpan sebelum pemutakhiran. Terjadi galat jaringan. Coba lagi nanti. Gagal memperbarui. @@ -1458,7 +1458,7 @@ Anda - Cerita saya + Cerita Saya Blokir @@ -1476,7 +1476,7 @@ Jaringan gagal! Nomor tidak terdaftar! Nomor yang Anda panggil tidak mendukung panggilan aman! - Paham + Mengerti @@ -1782,9 +1782,9 @@ Anda telah menebus lencana hadiah - Memberi tanggapan %1$s untuk cerita Anda + Memberi tanggapan %1$s ke cerita Anda - Memberi tanggapan %1$s untuk cerita mereka + Memberi tanggapan %1$s ke cerita mereka Pembaharuan Molly @@ -1886,6 +1886,7 @@ %1$s ke Anda Media tidak tersedia. Tidak dapat menemukan aplikasi untuk berbagi media ini. + Tutup %1$d pesan baru dalam %2$d percakapan @@ -2662,10 +2663,14 @@ Sesuaikan opsi + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ Jangan Sekarang + + + Pengaturan keamanan + + Lindungi dana Anda + + Cegah seseorang yang memegang ponsel Anda mengakses dana Anda dengan menambahkan lapisan keamanan lain. Anda dapat menonaktifkan opsi ini di Pengaturan. + + Aktifkan kunci pembayaran + + Nanti saja + + Lewati langkah ini? + + Jika Anda melewati langkah ini, siapa pun yang memegang ponsel Anda bisa saja mentransfer dana atau melihat frasa pemulihan. + + Batal + + Lewati + Tambahkan dana Alamat Dompet Anda @@ -3879,7 +3904,7 @@ Penghitung waktu bawaan untuk percakapan baru Atur waktu pesan menghilang untuk semua percakapan yang Anda mulai. - Kelola cerita Anda dan siapa yang bisa melihatnya. + Kelola cerita Anda dan siapa yang bisa melihatnya Memerlukan kunci layar Android atau sidik jari untuk mentransfer dana Tidak dapat mengaktifkan kunci pembayaran @@ -4157,7 +4182,7 @@ Tambah pesan Teruskan lebih cepat - Video akan dipangkas menjadi klip 30 dtk dan dikirim sebagai beberapa Cerita. + Video akan dipangkas menjadi klip 30 dtk dan terbagi menjadi beberapa Cerita. Video yang dikirim ke Cerita maksimal berdurasi 30 dtk. Pesan yang diteruskan akan segera dikirimkan sekarang. @@ -4601,7 +4626,7 @@ Privasi cerita - Cerita saya + Cerita Saya Ketuk untuk menambahkan cerita @@ -4609,7 +4634,7 @@ Sembunyikan cerita - Perlihatkan cerita + Tampilkan cerita Teruskan @@ -4631,11 +4656,11 @@ Sembunyikan cerita? - Pembaruan cerita baru dari %1$s tidak akan muncul di atas daftar cerita lagi. + Pembaruan cerita baru dari %1$s tidak akan muncul lagi di bagian atas daftar cerita. Sembunyikan - Cerita telah disembunyikan + Cerita disembunyikan Cerita tersembunyi @@ -4649,7 +4674,7 @@ Hapus cerita? - Cerita ini akan dihapus untuk Anda dan untuk semuanya yang menerimanya. + Cerita ini akan dihapus untuk Anda dan untuk semua yang menerimanya. Tidak dapat menyimpan @@ -4679,7 +4704,7 @@ Belum ada penonton - Aktifkan bukti pesan terbaca untuk melihat siapa yang melihat cerita Anda. + Aktifkan bukti pesan terbaca untuk mengetahui siapa yang melihat cerita Anda. Buka pengaturan @@ -4692,6 +4717,8 @@ Hapus pemirsa Belum ada balasan + + Anda tidak dapat membalas cerita ini karena Anda bukan lagi anggota grup ini. Menanggapi cerita @@ -4710,10 +4737,16 @@ Hapus Cerita saya + + + %1$d viewers + + + View Siapa yang bisa melihat cerita ini - Sembunyikan serita dari + Sembunyikan cerita dari Semua koneksi Signal @@ -4721,7 +4754,7 @@ Semua kecuali… - Sembunyikan Cerita dari orang tertentu + Sembunyikan cerita dari orang tertentu %1$d orang dikecualikan @@ -4742,8 +4775,6 @@ Izinkan balasan & tanggapan Biarkan orang yang bisa melihat cerita Anda menanggapi dan membalas - - Sembunyikan cerita Anda dari orang-orang spesifik. Secara default, cerita Anda dibagikan dengan %1$s Anda Koneksi Signal @@ -4755,7 +4786,7 @@ Memiliki mereka di dalam kontak sistem Anda - "Koneksi Anda bisa melihat nama Anda dan foto, dan bisa melihat post ke \"Cerita Saya\" kecuali Anda menyembunyikannya dari mereka." + "Koneksi Anda bisa melihat nama dan foto Anda, dan bisa melihat postingan di Cerita Saya kecuali Anda menyembunyikannya dari mereka." Tambah penonton @@ -4791,7 +4822,7 @@ Ketik atau tempel sebuah URL - Bagikan sebuah link dengan penonton cerita Anda + Bagikan tautan ke penonton cerita Anda Cari @@ -4802,22 +4833,40 @@ Hanya bagikan dengan… Selesai + + Hapus cerita grup? + + \"%1$s\" akan dihapus. + + Hapus + + Hapus cerita privat? + + \"%1$s\" dan pembaruan yang dibagikan ke cerita ini juga akan dihapus. + + Hapus + + Cerita hanya tersedia bagi pengguna Signal beta. + + Jika Anda membagikan cerita, cerita itu hanya akan tersedia untuk mereka yang menggunakan Signal beta. Tambahkan ke cerita? - Menambahkan konten ke cerita Anda memungkinkan koneksi-koneksi Signal Anda untuk melihatnya untuk 24 jam. Anda bisa mengganti siapa yang dapat melihat cerita Anda dalam Pengaturan. + Menambahkan konten ke cerita memungkinkan koneksi Signal Anda melihatnya selama 24 jam. Anda dapat mengubah siapa saja yang bisa melihat cerita di Pengaturan. Tambahkan ke cerita Edit penonton - Cerita tidak dapat dikirim. Cek koneksi Anda dan coba lagi. + Cerita tidak dapat dikirim. Periksa koneksi Anda dan coba lagi. Kirim + + Nonaktifkan dan hapus - Bagikan & Tampilakan Cerita + Bagikan & Lihat Cerita - Anda tidak akan dapat berbagi atau melihat Cerita saat opsi ini dinonaktifkan. + Anda tidak bisa membagikan atau melihat Cerita bila opsi ini dinonaktifkan. Pilih penonton @@ -4827,9 +4876,9 @@ %1$d peonton - Nama cerita + Beri nama cerita - Nama cerita (diperlukan) + Nama cerita (wajib) Penonton @@ -4859,7 +4908,7 @@ Mengirim balasan… - Cerita ini tidak lagi tersedia. + Cerita ini sudah tidak tersedia. Tidak Ada Sambungan Internet @@ -4867,9 +4916,9 @@ Cerita terkirim - Gagal untuk mengirim cerita + Gagal mengirim cerita - Tampilkan cerita + Lihat cerita Perlihatkan profil foto @@ -4958,6 +5007,10 @@ Cerita grup · %1$d penonton + + + %1$d anggota + %1$s · %2$d penonton @@ -5004,7 +5057,7 @@ Geser kanan untuk keluar - Paham + Mengerti Buka menu konteks @@ -5076,7 +5129,7 @@ - Cerita otomatis dihapus setelah 24 jam. Pilih siapa yang bisa melihat cerita Anda atau buat cerita baru dengan penonton atau grup spesifik. + Cerita otomatis dihapus setelah 24 jam. Pilih siapa yang bisa melihat cerita Anda atau buat cerita baru dengan grup atau penonton spesifik. Nonaktifkan cerita @@ -5088,7 +5141,7 @@ Nonaktifkan cerita? - Anda tidak akan bisa lagi membagikan atau melihat cerita. Cerita apa pun yang baru-baru ini Anda kirim masih bisa terlihat oleh orang lain hingga cerita tersebut kedaluwarsa. + Anda tidak bisa lagi membagikan atau melihat cerita. Pembaruan cerita yang baru-baru ini Anda bagikan juga akan dihapus. Privasi cerita @@ -5111,7 +5164,7 @@ Ekspor pesan SMS Anda - Anda dapat mengekspor pesan SMS ke basis data SMS ponsel Anda. Ini memungkinkan aplikasi SMS lain di ponsel untuk mengakses dan mengimpornya. Tindakan ini tidak menghasilkan file yang bisa dibagikan dari riwayat pesan SMS Anda. + Anda dapat mengekspor pesan SMS ke database SMS ponsel Anda. Ini memungkinkan aplikasi SMS lain di ponsel Anda mengakses dan mengimpornya. Tindakan ini tidak menghasilkan file yang bisa dibagikan dari riwayat pesan SMS Anda. Lanjutkan diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index bea0a57c75..552ee0d297 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -218,7 +218,7 @@ Cerca tramite nome utente - Le mie storie + Le mie Storie Nuova Storia @@ -1524,7 +1524,7 @@ Tu - La mia storia + La mia Storia Blocca @@ -1960,6 +1960,7 @@ %1$s a te Media non più disponibile. Impossibile trovare un\'app per condividere questo media. + Chiudi %1$d nuovi messaggi in %2$d conversazioni @@ -2343,7 +2344,7 @@ Orario di invio copiato negli appunti. - Gli aggiornamenti alla tua storia appariranno qui. + Gli aggiornamenti alla tua Storia appariranno qui. @@ -2666,10 +2667,10 @@ Esamina memoria Eliminare i messaggi più vecchi? Cancellare la cronologia dei messaggi? - Questo eliminerà permanentemente tutta la cronologia dei messaggi e i contenuti multimediali dal tuo dispositivo più vecchi di %1$s. + Questo eliminerà definitivamente tutta la cronologia dei messaggi e i contenuti multimediali più vecchi di %1$s dal tuo dispositivo. Questo ridurrà permanentemente tutte le conversazioni ai %1$s messaggi più recenti. - Questo eliminerà permanentemente tutta la cronologia dei messaggi e i contenuti multimediali dal tuo dispositivo. - Sei sicuro di voler eliminare tutta la cronologia dei messaggi? + Questo eliminerà definitivamente tutta la cronologia dei messaggi e i contenuti multimediali dal tuo dispositivo. + Confermi di voler eliminare tutta la cronologia dei messaggi? Tutta la cronologia dei messaggi verrà rimossa definitivamente. Questa azione non può essere annullata. Elimina tutto ora Per sempre @@ -2748,10 +2749,14 @@ Personalizza opzione + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Non ora + + + Impostazioni di sicurezza + + Proteggi i tuoi fondi + + Rendi più sicuro l\'account per evitare che chiunque abbia accesso al tuo telefono possa accedere ai fondi presenti. Puoi cambiare questa opzione nelle Impostazioni di Signal. + + Attiva la funzione Pagamento sicuro + + Non ora + + Vuoi saltare questo passaggio? + + Se ignori questo passaggio, chiunque abbia accesso al tuo telefono potrebbe trasferire eventuali fondi presenti o vedere la tua frase segreta di recupero. + + Annulla + + Salta + Aggiungi fondi L\'indirizzo del tuo portafoglio @@ -4705,15 +4730,15 @@ Privacy delle Storie - Le mie storie + Le mie Storie Tocca per aggiungere una Storia Nessun aggiornamento recente da mostrare al momento. - Nascondi storia + Nascondi Storia - Non nascondere la storia + Mostra la Storia Inoltra @@ -4733,9 +4758,9 @@ Clicca per riprovare - Nascondere la storia? + Nascondere la Storia? - Gli aggiornamenti delle nuove storie di %1$s non appariranno più in cima alla lista delle storie. + Gli aggiornamenti delle nuove Storie di %1$s non appariranno più in cima alla lista delle Storie. Nascondi @@ -4752,9 +4777,9 @@ Storia di %1$s - Eliminare storia? + Eliminare la Storia? - Questa storia sarà eliminata per te e per tutti quelli che l\'hanno ricevuta. + Questa Storia sarà eliminata per te e per chiunque l\'abbia ricevuta. Salvataggio non riuscito @@ -4799,14 +4824,16 @@ Rimuovi persona Ancora nessuna risposta + + Non puoi rispondere o reagire a questa Storia perché non fai più parte di questo gruppo. - Ha reagito alla storia + Ha reagito alla Storia Visualizzazioni Risposte - Reagisci a questa storia + Reagisci a questa Storia Rispondi privatamente a %1$s @@ -4816,11 +4843,18 @@ Elimina - La mia storia + La mia Storia + + + %1$d viewer + %1$d viewers + + + View Chi può vedere questa Storia - Nascondi storia a + Nascondi Storia a Tutte le Amicizie di Signal @@ -4828,7 +4862,7 @@ Chiunque tranne… - Non mostrare la tua Storia a determinate persone + Nascondi la tua Storia a determinate persone %1$d persona esclusa @@ -4850,9 +4884,7 @@ Permetti risposte & reazioni - Permetti alle persone che possono vedere la tua storia di reagire e rispondere - - Nascondi la tua storia a persone specifiche. Per impostazione predefinita, la tua storia viene condivisa con le tue %1$s + Permetti alle persone che possono vedere la tua Storia di reagire e rispondere Amicizie di Signal @@ -4864,15 +4896,15 @@ Avendole nei tuoi contatti di sistema - "Le tue connessioni possono vedere il tuo nome e la tua foto, e possono vedere i post su \"La mia storia\", a meno che tu non la nasconda loro." + "Le tue connessioni possono vedere il tuo nome e la tua foto, così come i post su \"La mia Storia\", a meno che tu non decida di nasconderli a qualcuno." Aggiungi visualizzatore - Elimina storia privata + Elimina Storia privata Rimuovere %1$s? - Questa persona non vedrà più la tua storia. + Questa persona non vedrà più la tua Storia. Rimuovi @@ -4880,9 +4912,9 @@ Questa azione non può essere annullata. - Modifica nome storia + Modifica nome Storia - Nome storia + Nome Storia Salva @@ -4900,7 +4932,7 @@ Digita o incolla un URL - Condividi un link con i visualizzatori della tua storia + Condividi un link con le persone che hanno visto la tua Storia Cerca @@ -4911,20 +4943,38 @@ Condividi solo con… Fatto + + Vuoi rimuovere la Storia di gruppo? + + La Storia \"%1$s\" verrà rimossa. + + Rimuovi + + Vuoi eliminare la Storia privata? + + La Storia \"%1$s\" e tutti i relativi aggiornamenti verranno rimossi. + + Elimina + + Le Storie sono disponibili solo agli utenti che usano la versione beta di Signal. + + Se condividi una Storia, sarà visibile solamente alle persone che usano la versione beta di Signal. - Aggiungere alla storia? + Aggiungere alla Storia? - L\'aggiunta di contenuti alla tua storia permette alle tue connessioni Signal di vederla per 24 ore. Puoi cambiare chi può vedere la tua storia in Impostazioni. + L\'aggiunta di contenuti alla tua Storia permette alle tue Amicizie di Signal di vederli per 24 ore. Puoi cambiare chi può vedere la tua Storia nelle Impostazioni. - Aggiungi alla storia + Aggiungi alla Storia Modifica visualizzatori - La storia non può essere inviata. Controlla la tua connessione e riprova. + La Storia non può essere inviata. Controlla la tua connessione e riprova. Invia + + Disattiva ed elimina - Condividi & Visualizza storie + Condividi e visualizza le Storie Non sarai più in grado di condividere o visualizzare le Storie quando questa opzione è disattivata. @@ -4937,9 +4987,9 @@ %1$d persone hanno visto la Storia - Nomina storia + Nome Storia - Nome della storia (obbligatorio) + Nome della Storia (obbligatorio) Visualizzatori @@ -4947,13 +4997,13 @@ Questo campo è obbligatorio. - C\'è già una storia con questo nome. + C\'è già una Storia con questo nome. Seleziona tutto - Scegli il tuo tipo della tua storia + Scegli il tipo di Storia - Nuova storia privata + Nuova Storia privata Visibile solo a persone specifiche @@ -4969,7 +5019,7 @@ Invio risposta… - Questa storia non è più disponibile. + Questa Storia non è più disponibile. Nessuna connessione Internet @@ -4977,9 +5027,9 @@ Storia inviata - Invio della storia fallito + Impossibile inviare la Storia - Visualizza storia + Visualizza Storia Visualizza foto profilo @@ -4993,11 +5043,11 @@ Disattiva - Hai reagito alla storia di %1$s + Hai reagito alla Storia di %1$s - Ha reagito alla tua storia + Ha reagito alla tua Storia - Ha reagito alla storia + Ha reagito a una Storia @@ -5071,6 +5121,11 @@ Storia di gruppo · %1$d persona Storia di gruppo · %1$d persone + + + %1$d persona + %1$d persone + %1$s · %2$d persona @@ -5079,7 +5134,7 @@ Tocca per decidere chi potrà vedere la Storia - Impostazioni storia + Impostazioni delle Storie Rimuovi Storia @@ -5091,7 +5146,7 @@ Rimuovi - Eliminare storia? + Eliminare la Storia? Vuoi eliminare la seguente Storia privata: \"%1$s\"? @@ -5206,7 +5261,7 @@ Vuoi disattivare le Storie? - Non potrai né condividere le tue Storie, né vedere quelle di altre persone. Qualsiasi Storia tu abbia già pubblicato sarà visibile fino a 24 ore dalla pubblicazione e poi scomparirà. + Non potrai più condividere o vedere le Storie. Verranno eliminati tutti gli aggiornamenti legati alle Storie che hai pubblicato di recente. Privacy delle Storie diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index fbaf1a58ca..c138728f3e 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -195,7 +195,7 @@ עדכן אל תעדכן אזהרה - גרסת Signal שלך פגה. אתה יכול לצפות בהיסטורית ההודעות שלך אבל לא תוכל לשלוח או לקבל הודעות עד שתעדכן. + גרסת Signal שלך כבר לא בתוקף. אפשר לצפות בהיסטוריית ההודעות שלך אבל לא תהיה לך אפשרות לשלוח או לקבל הודעות עד לעדכון האפליקציה. דפדפן רשת לא נמצא. @@ -220,7 +220,7 @@ מצא לפי שם משתמש - הסיפורים שלי + הסטוריז שלי סטורי חדש @@ -719,7 +719,7 @@ מהן קבוצות חדשות? לקבוצות חדשות יש מאפיינים כמו @אזכורים ומנהלני קבוצה, ויתמכו במאפיינים נוספים בעתיד. - כל היסטורית ההודעות וכל המדיה נשמרו מלפני השדרוג. + כל היסטוריית ההודעות והמדיה נשמרו מלפני השדרוג. תצטרך לאשר הזמנה כדי להצטרף אל קבוצה זו שוב, ולא תקבל הודעות קבוצה עד שתאשר: חבר קבוצה זה יצטרך לאשר הזמנה כדי להצטרף אל קבוצה זו שוב והוא לא יקבל הודעות קבוצה עד שהוא יאשר: @@ -738,7 +738,7 @@ שדרג אל קבוצה חדשה שדרג קבוצה זו לקבוצות חדשות יש מאפיינים כמו @אזכורים ומנהלני קבוצה, ויתמכו במאפיינים נוספים בעתיד. - כל היסטורית ההודעות והמדיה יישמרו מלפני השדרוג. + כל היסטוריית ההודעות והמדיה יישמרו מלפני השדרוג. היישום נתקל בשגיאת רשת. נסה שוב מאוחר יותר. נכשל לשדרג. @@ -1656,7 +1656,7 @@ את/ה - הסיפור שלי + הסטורי שלי חסום @@ -2108,6 +2108,7 @@ %1$s אליך מדיה אינה זמינה יותר. לא ניתן למצוא יישום שמסוגל לשתף מדיה זו. + סגור %1$d הודעות חדשות ב־%2$d שיחות @@ -2186,7 +2187,7 @@ בקשת הודעה את/ה - %1$s • סיפור + %1$s • סטורי נגן סרטון @@ -2354,9 +2355,9 @@ את/ה הודעה מקורית לא נמצאה - %1$s · סיפור + %1$s · סטורי - את/ה · סיפור + את/ה · סטורי לא זמין יותר @@ -2511,7 +2512,7 @@ חותמת זמן של שליחה הועתקה ללוח. - עדכונים אל הסיפור שלך יופיעו כאן. + עדכונים לסטורי שלך יופיעו כאן. @@ -2795,7 +2796,7 @@ תשלומים (בטא) מגבלת אורך שיחה שמור הודעות - נקה היסטורית הודעות + ניקוי היסטוריית הודעות מכשירים מקושרים בהירה כהה @@ -2829,7 +2830,7 @@ בעת שימוש ב־Wi-Fi בעת נדידה הורדה אוטומטית של מדיה - היסטורית הודעות + היסטוריית הודעות שימוש באחסון תמונות סרטונים @@ -2837,12 +2838,12 @@ שמע סקור אחסון למחוק הודעות ישנות יותר? - לנקות היסטורית הודעות? - זה ימחק לצמיתות את כל היסטורית ההודעות והמדיה מהמכשיר שלך אשר ישנים יותר מן %1$s. + לנקות היסטוריית הודעות? + זה ימחק לצמיתות את כל היסטוריית ההודעות והמדיה מהמכשיר שלך שישנים יותר מ%1$s. זה יקצץ לצמיתות את כל השיחות שלך אל %1$s ההודעות האחרונות. - זה ימחק לצמיתות את כל היסטורית ההודעות והמדיה מהמכשיר שלך. - האם אתה בטוח שאתה רוצה למחוק את כל היסטורית ההודעות? - כל היסטורית ההודעות תימחק לצמיתות. פעולה זו אינה ניתנת לביטול. + זה ימחק לצמיתות את כל היסטוריית ההודעות והמדיה מהמכשיר שלך. + בטוח שבא לך למחוק את כל היסטוריית ההודעות? + כל היסטוריית ההודעות תימחק לצמיתות. פעולה זו אינה ניתנת לביטול. מחק הכול עכשיו לנצח שנה 1 @@ -2920,10 +2921,14 @@ התאם אישית אפשרות + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3076,6 +3081,26 @@ לא עכשיו + + + הגדרות אבטחה + + כדאי להגן על הכספים שלך + + אפשר לעזור למנוע מאדם שמחזיק במכשיר הטלפון שלך לגשת לכספים שלך באמצעות הוספת עוד שכבה של בטיחות. אפשר לכבות את האפשרות הזו בהגדרות. + + הפעלת נעילת אבטחה לתשלום + + לא עכשיו + + לדלג על שלב זה? + + דילוג על שלב זה יאפשר לכל אדם עם גישה פיזית למכשיר הטלפון שלך להעביר כספים או לצפות במשפט שחזור הסיסמה שלך. + + בטל + + דלג + הוסף כספים כתובת הארנק שלך @@ -4907,21 +4932,21 @@ התכתבויות - סיפורים + סטוריז 99+ פרטיות של סטורי - הסיפורים שלי + הסטוריז שלי - אפשר ללחוץ כדי להוסיף סטוריז + יש ללחוץ כדי להוסיף סטורי אין עדכונים אחרונים להראות כרגע. - הסתר סיפור + הסתרת סטורי - בטל הסתרת סיפור + ביטול הסתרת סטורי העבר הלאה @@ -4941,15 +4966,15 @@ הקש כדי לנסות שוב - להסתיר סיפור? + להסתיר סטורי? - עדכוני סיפור חדש מאת %1$s לא יופיעו יותר בראש רשימת הסיפורים. + עדכוני סטורי חדשים מאת %1$s לא יופיעו יותר בראש רשימת הסטוריז. הסתר - סיפור הוסתר + סטורי הוסתר - סיפורים מוסתרים + סטוריז מוסתרים צפייה %1$d @@ -4960,11 +4985,11 @@ העבר הלאה - הסיפור של %1$s + הסטורי של %1$s - למחוק סיפור? + למחוק סטורי? - הסיפור הזה יימחק עבורך ועבור כל מי שקיבל אותו. + הסטורי הזה יימחק עבורך ועבור כל מי שקיבל אותו. לא ניתן לשמור @@ -5013,14 +5038,16 @@ הסרת צופה אין תשובות עדין + + אין לך אפשרות להשיב לסטורי הזה בגלל שאינך חלק מהקבוצה הזו יותר. - הגיב/ה אל סיפור + הגיב/ה לסטורי צפיות תשובות - הגב אל הסיפור הזה + תגובה לסטורי הזה משיב באופן פרטי אל %1$s @@ -5030,11 +5057,20 @@ מחק - הסיפור שלי + הסטורי שלי + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + + + View מי יכול לצפות בסטורי הזה - הסתר סיפור מפני + הסתרת סטורי מ כל חברי ה-Signal @@ -5068,9 +5104,7 @@ התר תשובות ותגובות - תן לאנשים שיכולים לצפות בסיפור שלך להגיב ולהשיב - - הסתר את הסיפור שלך מפני אנשים מסוימים. כברירת מחדל, הסיפור שלך משותף עם %1$s + אפשר לתת לאנשים שיכולים לצפות בסטורי שלך להגיב ולהשיב חברי Signal @@ -5082,15 +5116,15 @@ שמירה באנשי הקשר שלך - "החיבורים שלך יכולים לראות את השם והתמונה שלך, והם יכולים לראות רשומות אל \"הסיפור שלי\" אלא אם תסתיר אותן מפניהם." + "חברי ה–Signal שלך יכולים לראות את השם והתמונה שלך, והם יכולים לראות פוסטים של \"הסטורי שלי\" אלא אם הסתרת אותם מהם." הוסף צופה - מחק סיפור פרטי + מחיקת סטורי פרטי להסיר את %1$s? - האיש הזה לא יראה יותר את הסיפור שלך. + האדם הזה לא יראה יותר את הסטורי שלך. הסר @@ -5098,9 +5132,9 @@ פעולה זו אינה ניתנת לביטול. - ערוך שם סיפור + עריכת שם סטורי - שם סיפור + שם סטורי שמור @@ -5118,7 +5152,7 @@ הקלד או הדבק מען - שתף קישור עם צופים של הסיפור שלך + שיתוף לינק עם צופי הסטורי שלך חפש @@ -5129,22 +5163,40 @@ שיתוף רק עם… סיים + + להסיר סטורי קבוצתי? + + \"%1$s\" will be removed. + + הסר + + למחוק סטורי פרטי? + + \"%1$s\" and updates shared to this story will be deleted. + + מחק + + סטוריז זמינים למשתמשי גרסת הבטא של Signal בלבד. + + אם משתפים סטורי, הוא יהיה זמין רק לאנשים שמשתמשים בגרסת הבטא של Signal. - להוסיף אל סיפור? + להוסיף לסטורי? - הוספת תוכן אל הסיפור שלך מתירה אל חיבורי Signal שלך לצפות בסיפור למשך 24 שעות. אתה יכול לשנות מי יכול לצפות בסיפור שלך בהגדרות. + הוספת תוכן לסטורי שלך מאפשרת לחברי Signal שלך לצפות בסטורי למשך 24 שעות. אפשר לשנות את מי שיכול לצפות בסטורי שלך בהגדרות. - הוסף אל סיפור + הוספה לסטורי ערוך צופים - סיפור לא היה יכול להישלח. בדוק את החיבור שלך ונסה שוב. + סטורי לא הצליח להישלח. כדאי לבדוק את החיבור שלך ולנסות שוב. שלח + + כיבוי ומחיקה - שתף וצפה בסיפורים + שיתוף וצפיה בסטוריז - לא תוכל יותר לשתף סיפורים או לצפות בסיפורים כאשר האפשרות הזאת כבויה. + לא תהיה לך יותר אפשרות לשתף או לצפות בסטוריז כשאפשרות זו כבויה. בחר צופים @@ -5157,9 +5209,9 @@ %1$d צופים - תן שם אל סיפור + מתן שם לסטורי - שם סיפור (דרוש) + שם סטורי (חובה) צופים @@ -5167,17 +5219,17 @@ שדה זה דרוש. - יש כבר סיפור עם השם הזה. + יש כבר סטורי עם השם הזה. בחר הכול - בחר את סוג הסיפור שלך + בחירת סוג הסטורי שלך - סיפור פרטי חדש + סטורי פרטי חדש גלוי רק אל אנשים מסוימים - סיפור קבוצתי + סטורי קבוצתי שתף אל קבוצה קיימת @@ -5189,17 +5241,17 @@ שולח תשובה… - הסיפור הזה אינו זמין יותר. + הסטורי הזה אינו זמין יותר. אין חיבור אינטרנט לא היה ניתן לטעון תוכן - סיפור נשלח + סטורי נשלח - נכשל בשליחת סיפור + לא הצלחנו לשלוח את הסטורי - הצג סיפור + צפיה בסטורי הצג תמונת פרופיל @@ -5213,11 +5265,11 @@ כבה - הגבת אל הסיפור של %1$s + הגבת לסטורי של %1$s - הגיב/ה אל הסיפור שלך + הגיב/ה לסטורי שלך - הגיב/ה אל סיפור + הגיב/ה לסטורי @@ -5297,6 +5349,13 @@ סטורי קבוצתי · %1$d צופים סטורי קבוצתי · %1$d צופים + + + חבר/ה %1$d + %1$d חברים + %1$d חברים + %1$d חברים + %1$s· צופה %2$d @@ -5307,7 +5366,7 @@ יש ללחוץ כדי לבחור את הצופים שלך - הגדרות סיפור + הגדרות סטורי הסרת סטורי @@ -5315,11 +5374,11 @@ להסיר סטורי קבוצתי? - פעולה זו תסיר את הסטורי מהרשימה הזו. עדיין תהיה לך אפשרות לצפות בסיפורים מקבוצה זו. + פעולה זו תסיר את הסטורי מהרשימה הזו. עדיין תהיה לך אפשרות לצפות בסטוריז מקבוצה זו. הסר - למחוק סיפור? + למחוק סטורי? למחוק את הסטורי הפרטי ״%1$s״? @@ -5405,7 +5464,7 @@ פרטיות הסטורי שלי - ניתן לבחור מי יראה את הפוסטים ב״סטורי שלי״. גם אחרי שבוחרים, תמיד אפשר לשנות את ההגדרות. + ניתן לבחור מי יראה את הפוסטים של ״הסטורי שלי״. גם אחרי שבוחרים, תמיד אפשר לשנות את ההגדרות. כל חברי ה-Signal @@ -5442,7 +5501,7 @@ לכבות את סטוריז? - לא תהיה לך אפשרות לשתף או לצפות בסטוריז יותר. סטוריז ששלחת לאחרונה עדיין יהיו זמינים לצפיה לאחרים עד שהתוקף שלהם יפוג. + לא תהיה לך יותר אפשרות לשתף או לצפות בסטוריז. עדכוני סטורי ששיתפת לאחרונה ימחקו גם הם. פרטיות של סטורי @@ -5450,7 +5509,7 @@ מי יכול לצפות בסטורי הזה - "חברי הקבוצה ״%1$s״ יכולים לצפות ולהשיב לסטורי הזה. יש לך אפשרות לעדכן את החברות לצ׳אט הזה בתוך הקבוצה." + "חברי הקבוצה %1$s יכולים לצפות ולהשיב לסטורי הזה. יש לך אפשרות לעדכן את החברות לצ׳אט הזה בתוך הקבוצה." הסרת סטורי קבוצתי @@ -5465,7 +5524,7 @@ ייצוא הודעות ה-SMS שלך - יש לך אפשרות לייבא את הודעות ה–SMS שלך למסד נתוני ה–SMS של הטלפון שלך. זה מאפשר לאפליקציות SMS אחרות בטלפון שלך לגשת אליהן ולייבא אותן. זה לא יוצר קובץ ניתן לשיתוף של היסטוריית הודעות ה–SMS שלך. + יש לך אפשרות לייצא את הודעות ה–SMS שלך למסד נתוני ה–SMS של הטלפון שלך. זה מאפשר לאפליקציות SMS אחרות בטלפון שלך לגשת אליהן ולייבא אותן. זה לא יוצר קובץ ניתן לשיתוף של היסטוריית הודעות ה–SMS שלך. המשך diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index b8e699ea7d..fa2d28536e 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1476,7 +1476,7 @@ ネットワークエラー! 未登録番号です! ダイヤル先は安全な音声通話をサポートしていません! - 分かりました + わかりました @@ -1886,6 +1886,7 @@ %1$s からあなた メディアが存在しません。 このメディアを共有できるアプリが見つかりません。 + 閉じる %2$d個のチャットに%1$d件の新着メッセージ @@ -2662,10 +2663,14 @@ オプションのカスタマイズ + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ 今はしない + + + セキュリティ設定 + + 資金の保護 + + セキュリティを強化することで、第三者があなたの携帯電話を使用して資金にアクセスすることを防ぎます。このオプションは設定で無効にできます。 + + 決済機能のロックを有効にする + + 今はしない + + この手順をスキップしますか? + + この手順をスキップすると、第三者があなたの携帯電話を使用して資金の送金やリカバリーフレーズを閲覧できる可能性があります。 + + キャンセル + + スキップ + 入金 あなたのウォレットアドレス @@ -4679,7 +4704,7 @@ 閲覧 なし - 既読を有効にすると、誰があなたのストーリーズを見たのかがわかります。 + 既読を有効にすると、誰があなたのストーリーを見たのかがわかります。 設定へ @@ -4692,6 +4717,8 @@ 閲覧者を削除 返信 なし + + このグループのメンバーではなくなったので、このストーリーに返信することはできません。 ストーリーにリアクションがありました @@ -4710,6 +4737,12 @@ 削除 マイストーリー + + + %1$d viewers + + + View ストーリーを閲覧できる人 @@ -4735,15 +4768,13 @@ %1$d人 - ストーリーを閲覧できるユーザーを選択してください。 変更は、すでに送信したストーリーには影響しません。 + ストーリーを閲覧できるユーザーを選択してください。変更は、すでに送信したストーリーには影響しません。 返信とリアクション 返信とリアクションを許可する あなたのストーリーを閲覧可能なユーザーに返信とリアクションを許可します - - 特定の人にあなたのストーリーを非表示にします。 デフォルトでは、ストーリーはあなたの%1$sと共有されます。 Signalコネクション @@ -4802,6 +4833,22 @@ 共有するのは… 完了 + + グループストーリーを削除しますか? + + 「%1$s」は削除されます。 + + 削除 + + プライベートストーリーを削除しますか? + + ストーリーで共有された「 %1$s」と更新情報は削除されます。 + + 削除 + + ストーリーはSignalのベータ版ユーザーのみ利用可能です。 + + ストーリーを共有した場合Signalのベータ版ユーザーのみに公開されます。 ストーリーに追加しますか? @@ -4814,6 +4861,8 @@ ストーリーを送信できませんでした。接続を確認し、再度試してください。 送信する + + 非表示にして削除する ストーリーの共有と閲覧 @@ -4958,6 +5007,10 @@ グループストーリー · 閲覧 %1$d人 + + + メンバー %1$d人 + %1$s• %2$d 人の閲覧者 @@ -5022,7 +5075,7 @@ すべてのコネクションが確認されました。続行するには送信をタップしてください。 - %1$d人のコネクションがSignalを再インストールしたか、端末を変更した可能性があります。 ストーリーを彼らと共有する前に、彼らの安全番号を確認するか、あなたのストーリーから彼らを削除することを検討してください。 + %1$d人のコネクションがSignalを再インストールしたか、端末を変更した可能性があります。ストーリーを彼らと共有する前に、彼らの安全番号を確認するか、あなたのストーリーから彼らを削除することを検討してください。 安全番号を確認 @@ -5088,7 +5141,7 @@ ストーリーを非表示にしますか? - ストーリーの共有や閲覧ができなくなります。最近送信したストーリーは、有効期限が切れるまでは他のユーザーに表示されます。 + ストーリーを共有したり閲覧したりできなくなります。最近共有したストーリーの更新情報も削除されます。 ストーリープライバシー diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 8a72eb3a8a..1b6c8b97af 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -193,7 +193,7 @@ განახლება არ განაახლო გაფრთხილება - Signal-ის შენს ვერსიას ვადა გაუვიდა. შეგიძლია ნახო შენი შეტყობინებების ისტორია, მაგრამ ვერ შეძლებ შეტყობინებების გაგზავნას ან მიღებას, სანამ აპს არ განაახლებ. + Signal-ის შენს ვერსიას ვადა გაუვიდა. შეგიძლია ნახო შენი შეტყობინებების ისტორია, მაგრამ სანამ აპს არ განაახლებ შეტყობინებების გაგზავნას ან მიღებას ვერ შეძლებ. ვებ ბრაუზერი ვერ მოიძებნა. @@ -218,7 +218,7 @@ ძებნა მომხმარებლის სახელით - ჩემი Story-ები + ჩემი Stories-ები ახალი Story-ი @@ -1542,7 +1542,7 @@ ქსელი ჩავარდა! ნომერი არ არის რეგისტრირებული! შენ მიერ აკრეფილ ნომერს არ აქვს ხმის უსაფრთხო მხარდაჭერა! - Got it + გასაგებია @@ -1855,9 +1855,9 @@ შენ გამოიყენე სასაჩუქრე ემბლემა - %1$s-ი შენს Story-ის გამოეხმაურა + %1$s შენს Story-ის გამოეხმაურა - %1$s-ი შენს Story-ის გამოეხმაურა + %1$s მის Story-ის გამოეხმაურა Molly-ის განახლება @@ -1960,6 +1960,7 @@ %1$s შენ მედია-ფაილი აღარაა ხელმისაწვდომი. ვერ მოიძებნა აპი, რომელსაც შეუძლია ამ მედია-ფაილის გაზიარება. + Close %1$d ახალი შეტყობინება %2$d მიმოწერაში @@ -2623,7 +2624,7 @@ ტრანზაქციები (ბეტა) მიმოწერის სიგრძის ლიმიტი შეტყობინებების შენახვა - მიმოწერის ისტორიის გასუფთავება + შეტყობინებების ისტორიის გასუფთავება დაკავშირებული მოწყობილობები ღია მუქი @@ -2657,7 +2658,7 @@ Wi-Fi-ის გამოყენებისას როუმინგში მედია-ფაილების ავტომატური ჩამოტვირთვა - შეტყობინების ისტორია + შეტყობინებების ისტორია მეხსიერების ათვისება ფოტოები ვიდეოები @@ -2666,10 +2667,10 @@ მეხსიერების გადახედვა წავშალოთ ძველი შეტყობინებები? გავასუფთავოთ შეტყობინებების ისტორია? - ეს შენი მოწყობილობიდან სამუდამოდ წაშლის მიმოწერის მთელ ისტორიას, რომელიც %1$s-მდე გქონდათ. + ეს შენი მოწყობილობიდან სამუდამოდ წაშლის შეტყობინებების მთელ ისტორიას, რომელიც %1$s-მდე გქონდათ. ეს სამუდამოდ წაშლის ყველა მიმოწერას %1$s უახლეს შეტყობინებებამდე. ეს სამუდამოდ წაშლის შეტყობინებების მთელ ისტორიას და მედია-ფაილებს შენი მოწყობილობიდან. - დარწმუნებული ხარ, რომ გსურს წაშალო შეტყობინებების მთელი ისტორია? + დარწმუნებული ხარ, რომ შეტყობინებების მთელი ისტორიის წაშლა გსურს? შეტყობინებების მთელი ისტორია სამუდამოდ წაიშლება. ამ მოქმედების გაუქმება შეუძლებელია. ყველას წაშლა ახლავე სამუდამოდ @@ -2748,10 +2749,14 @@ ვარიანტის მორგება + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ ახლა არა + + + უსაფრთხოების პარამეტრების დაყენება + + დაიცავი შენი სახსრები + + დაგვეხმარე, უსაფრთხოების კიდევ ერთი საფარის დამატებით, შენს თანხებზე წვდომა შევუზღუდოთ მას, ვისაც შენი ტელეფონი ექნება. ამ ოფციის გამორთვა პარამეტრებიდან შეგიძლია. + + გადახდის დაბლოკვის ჩართვა + + ახლა არა + + გამოვტოვოთ ეს ნაბიჯი? + + ამ ნაბიჯის გამოტოვება საშუალებას მისცემს ნებისმიერს, ვისაც აქვს ფიზიკური წვდომა შენს ტელეფონზე, გადარიცხოს თანხები ან ნახოს შენი აღდგენის ფრაზა. + + გაუქმება + + გამოტოვება + თანხის დამატება შენი საფულის მისამართი @@ -3976,7 +4001,7 @@ ნაგულისხმევი ტაიმერი ახალი ჩატებისთვის დააყენე გაქრობადი შეტყობინებებისთვის ნაგულისხმევი ტაიმერი შენს მიერ დაწყებული ყველა ახალი ჩატისთვის. - მართე შენი Stories-ები და ვის შეუძლია მათი ნახვა + მართე შენი Stories-ები და ის, თუ ვის შეუძლია მათი ნახვა მოითხოვე Android-ის ეკრანის დაბლოკვა ან თითის ანაბეჭდი თანხის გადასატანად ტრანზაქციის უზრუნველყოფის ჩართვა ვერ მოხერხდა @@ -4256,9 +4281,9 @@ შეტყობინების დამატება უფრო სწრაფი გადაგზავნები - ვიდეოები დიჭრება 30 წმ კლიპებად და გაიგზავნება რამოდენიმე Story-ის სახით. + ვიდეოები 30 წამიან კლიპებად დაიჭრება და რამოდენიმე Story-ის სახით გაიგზავნება. - Stories-ში გაგზავნილი ვიდეოები არ შეიძლება იყოს 30 წმ-ზე მეტი. + Stories-ში გაგზავნილი ვიდეოები 30 წმ-ზე მეტი ვერ იქნება. გადაგზავნილი შეტყობინებები ახლა დაუყოვნებლივ იგზავნება. %1$d შეტყობინების გაგზავნა @@ -4699,13 +4724,13 @@ ჩატები - Story-ები + Stories-ები 99+ Story-ის კონფიდენციალურობა - ჩემი Story-ები + ჩემი Stories-ები დააჭირე Story-ის დასამატებლად @@ -4786,7 +4811,7 @@ ნახვები ჯერ არაა - ჩართე წაკითხვის დასტური, რომ გამოგიჩნდეს ვინ ნახა შენი Stories-ები. + ჩართე წაკითხვის დადასტურება, რომ გამოგიჩნდეს ვინ ნახა შენი Stories-ები. შედი პარამეტრებში @@ -4799,8 +4824,10 @@ მნახველის ამოშლა პასუხები ჯერ არაა + + ამ Story-ის ვერ გამოეხმაურები, რადგან ამ ჯგუფის წევრი აღარ ხარ. - Story-იზე გამოხმაურება + Story-ის გამოეხმაურა ნახვები @@ -4817,6 +4844,13 @@ წაშლა ჩემი Story-ი + + + %1$d viewer + %1$d viewers + + + View ვის შეუძლია ამ Story-ის ნახვა @@ -4850,9 +4884,7 @@ პასუხებისა & გამოხმაურებების დაშვება - ნება მიეცი ადამიანებს, რომლებსაც შეუძლიათ შენი Story-ის ნახვა, გამოხმაურება და პასუხის დაბრუნება - - დამალე შენი Story-ი კონკრეტული ადამიანებისგან. ნაგულისხმევად, შენი Story-ი გაზიარებულია შენს %1$s-თან + ნება მიეცი ადამიანებს, რომლებსაც შეუძლიათ შენი Story-ის ნახვა, მას გამოეხმაურონ Signal-ის კონტაქტები @@ -4864,7 +4896,7 @@ შენი სისტემის კონტაქტებში მათი არსებობა - "შენს კონტაქტებს შეუძლიათ დაინახონ შენი სახელი და ფოტო და დაინახონ რას პოსტავ \"ჩემს Story-ში\", თუ ამას მათგან არ დამალავ." + "შენს კონტაქტებს შეუძლიათ ნახონ შენი სახელი და ფოტო და დაინახონ რას პოსტავ \"ჩემი Story-ი\"-ში, თუ ამას მათგან არ დამალავ." მნახველის დამატება @@ -4911,10 +4943,26 @@ გაუზიარე მხოლოდ… შესრულებულია + + წავშალოთ ჯგუფის Story-ი? + + \"%1$s\" წაიშლება. + + წაშლა + + წავშალოთ პირადი Story-ი? + + \"%1$s\" და ამ Story-ში გაზიარებული განახლებები წაიშლება. + + წაშლა + + Stories-ები მხოლოდ Signal-ის ბეტა ვერსიის მომხმარებლებისთვისაა ხელმისაწვდომი. + + თუ Story-ის გააზიარებ, ის ხელმისაწვდომი მხოლოდ Signal-ის ბეტა ვერსიაზე მყოფებისთვის იქნება. დავამატოთ Story-ში? - შენს Story-ში კონტენტის დამატება საშუალებას აძლევს Signal-ის შენს კონტაქტებს, ნახონ იგი 24 საათის განმავლობაში. პარამეტრებიდან შეგიძლია შეცვალო, თუ ვის შეუძლია შენი Story-ის ნახვა . + შენი Story-ის დამატებით, საშუალებას აძლევს Signal-ის შენს კონტაქტებს, ნახონ იგი 24 საათის განმავლობაში. პარამეტრებიდან შეგიძლია შეცვალო, თუ ვის შეუძლია შენი Story-ის ნახვა. Story-ში დამატება @@ -4923,6 +4971,8 @@ Story-ი ვერ გაიგზავნა. შეამოწმე შენი ინტერნეტ-კავშირი და ისევ სცადე. გაგზავნა + + გამორთვა და წაშლა გააზიარე & ნახე Stories-ები @@ -5071,6 +5121,11 @@ ჯგუფის Story-ი · %1$d მნახველი ჯგუფის Story-ი · %1$d მნახველი + + + %1$d წევრი + %1$d წევრი + %1$s · %2$d მნახველი @@ -5121,7 +5176,7 @@ გასასვლელად გაწიე მარჯვნივ - Got it + გასაგებია გახსენი კონტექსტური მენიუ @@ -5167,9 +5222,9 @@ წაშლა - ჩემი Story-ის კონფიდენციალურობა + \"ჩემი Story-ი\"-ს კონფიდენციალურობა - აირჩიე, ვინ შეძლებს My Story-ზე დაპოსტილის ნახვას. პარამეტრებში ცვლილებების შეტანა ყოველთვის შეგიძლია. + აირჩიე, ვინ შეძლებს \"ჩემი Story-ი\"-ზე დაპოსტილის ნახვას. პარამეტრებში ცვლილებების შეტანა ყოველთვის შეგიძლია. Signal-ის ყველა კონტაქტი @@ -5194,7 +5249,7 @@ - Stories-ები ავტომატურად ქრება 24 საათის შემდეგ. აირჩიე, ვის შეუძლია შენი Story-ის ნახვა ან შექმენი ახალი Stories-ები კონკრეტულ მნახველებისთვის ან ჯგუფებისთვის. + Stories-ები ავტომატურად ქრება 24 საათის შემდეგ. აირჩიე, ვის შეუძლია შენი Story-ის ნახვა ან შექმენი ახალი Stories-ები კონკრეტული მნახველებისთვის ან ჯგუფებისთვის. Stories-ების გამორთვა @@ -5206,7 +5261,7 @@ გამოვრთოთ Stories-ები? - Stories-ების გაზიარებას ან ნახვას ვეღარ შეძლებ. შენ მიერ ახლახან გაგზავნილი ნებისმიერი Story-ი კვლავ ხილული იქნება სხვებისთვის, სანამ ვადა არ ამოიწურება. + You will no longer be able to share or view stories. Story updates you have recently shared will also be deleted. Story-ის კონფიდენციალურობა @@ -5214,7 +5269,7 @@ ვის შეუძლია ამ Story-ის ნახვა - "\"%1$s“ ჯგუფის წევრებს ამ Story-ის ნახვა და მასზე პასუხის გაცემა შეუძლიათ. ამ ჩატის წევრობის განახლება ჯგუფში შეგიძლია." + "\"%1$s“ ჯგუფის წევრებს შეუძლიათ ამ Story-ის ნახვა და მასზე გამოხმაურება. ამ ჩატის წევრობის განახლება ჯგუფში შეგიძლია." ჯგუფის Story-ის წაშლა diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index 6343117b71..fce92af789 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -218,7 +218,7 @@ Пайдаланушы аты бойынша іздеу - Менің сторилерім + Менің стористерім Жаңа сторис @@ -673,7 +673,7 @@ Жаңа топтар деген не? Жаңа топтарда @атап өту және топ әкімшілері сияқты функциялар бар және болашақта басқа функциялар да қосылады. - Жаңартылғанға дейінгі барлық хат тарихы және мультимедиа сақталды. + Жаңартылғанға дейінгі барлық хаттар тарихы және мультимедиа сақталды. Осы топқа қосылуға жіберілген шақыруды қайта қабылдауыңыз керек. Оны қабылдамайынша, топтағы хаттарды ала алмайсыз. Бұл топ мүшесі топқа қосылуға жіберілген шақыруды қайта қабылдауы керек. Оны қабылдамайынша, топтағы хаттарды ала алмайды. @@ -1346,7 +1346,7 @@ Бұл жаңа функция ұнады ма? Бір реттік демеу жіберіп, Signal-ға қолдау көрсетіңіз. - %1$s чаты және оның %2$s нөмірінен тұратын хаттар тарихы біріктірілді. + %1$s деген кісімен жазған хаттарыңыз және оның %2$s деген нөмірі біріктірілді. %1$s чаты бар хаттар тарихы мен оған тиесілі тағы бір чат біріктірілді. @@ -1524,7 +1524,7 @@ Сіз - Менің сториім + Менің сторисім Бұғаттау @@ -1960,6 +1960,7 @@ %1$s – сіз Мультимедиа қолжетімді емес. Бұл мультимедиа файлын бөлісе алатын қолданба табылмады. + Close %2$d әңгімеде %1$d жаңа хат бар @@ -2343,7 +2344,7 @@ Жіберілген уақыт белгісі буферге көшірілді. - Сториіңізде жаңартулар осы жерде көрініс табады. + Сторисіңізде жаңартулар осы жерде көрсетіледі. @@ -2748,10 +2749,14 @@ Бейімдеу опциясы + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Қазір емес + + + Қауіпсіздік параметрлерін реттеу + + Қаражатыңызды қорғаңыз + + Қосымша қауіпсіздік шарасын қосу арқылы телефоныңызды ұстап отырған адамның қаражатыңызды пайдаланбауын қадағалаңыз. Бұл опцияны \"Параметрлер\" бөлімінен өшіріп қоюыңызға болады. + + Төлем құлпын қосу + + Кейін + + Осы қадамды өткізіп жіберу керек пе? + + Бұл қадамды өткізіп жіберсеңіз, телефоныңызды ұстап отырған кез келген адам ақша аудара алады немесе қалпына келтіру сөйлеміңізді көре алады. + + Болдырмау + + Өткізіп жіберу + Қаражат қосу Әмияныңыздың мекенжайы @@ -4258,7 +4283,7 @@ Видеолар 30 секундтық клиптерге бөлінеді және бірнеше сторис ретінде жіберіледі. - Сториске жіберілетін видеолардың ұзақтығы 30 секундтан аспау керек. + Сториске жіберілетін видеолардың ұзақтығы 30 секундтан аспауы керек. Басқаға жіберілген хаттар енді дереу кетеді. %1$d хат жіберу @@ -4699,13 +4724,13 @@ Чаттар - Сторилер + Стористер 99+ - Сторис құпиялығы + Сторис құпиялылығы - Менің сторилерім + Менің стористерім Сторис қосу үшін түртіңіз @@ -4799,6 +4824,8 @@ Көрерменді өшіру Ешкім жауап жазбаған + + Бұл сториске жауап бере алмайсыз, себебі сіз ендігәрі бұл топтың мүшесі емессіз. Осы сториске реакция қалдырды @@ -4816,7 +4843,14 @@ Жою - Менің сториім + Менің сторисім + + + %1$d viewer + %1$d viewers + + + View Бұл стористі кім көре алады @@ -4828,7 +4862,7 @@ Мыналардан басқалары… - Белгілі бір адамдардан стористеріңізді жасыру + Кейбір адамдардан стористеріңізді жасыру %1$d адам шығарылды @@ -4851,8 +4885,6 @@ Жауаптар мен реакцияларға рұқсат ету Сторисіңізді көре алатын адамдарға реакция қалдыруға және жауап жазуға рұқсат ету - - Стористеріңізді белгілі бір адамдардан жасырыңыз. Әдепкіде сторисіңізді %1$s көре алады Signal байланыстары @@ -4911,10 +4943,26 @@ Тек мына адамдармен бөлісу… Дайын + + Топтағы стористі өшіру керек пе? + + \"%1$s\" өшіп қалады. + + Жою + + Жеке стористі жою керек пе? + + \"%1$s\" және осы сториске салынған жаңартулар жойылады. + + Жою + + Сторис тек Signal-дың бета нұсқасын пайдаланатындарға ғана қолжетімді. + + Сторис бөліссеңіз, оны Signal-дың бета нұсқасын пайдаланатындар көре алады. Сторис қосу керек пе? - Сторисіңізге контент қоссаңыз, Signal-дағы контактілеріңіз оны 24 сағат көре алады. Параметрлер бөліміне кіріп, стористеріңізді кім көре алатынын өзгертуіңізге болады. + Сторис салсаңыз, Signal-дағы контактілеріңіз оны 24 сағат ішінде көре алады. Параметрлер бөліміне кіріп, стористеріңізді кім көре алатынын өзгертуіңізге болады. Сторис қосу @@ -4923,6 +4971,8 @@ Стористі жіберу мүмкін болмады. Байланысты тексеріп, қайталап көріңіз. Жіберу + + Өшіру және жою Стористерді бөлісу және көру @@ -5060,7 +5110,7 @@ Кейін - Тек мына көрермендермен бөлісу + Көре алатындар Жеке стористе · %1$d көрермен @@ -5071,6 +5121,11 @@ Топтық стористе · %1$d көрермен Топтық стористе · %1$d көрермен + + + %1$d мүше + %1$d мүше + %1$s · %2$d көрермен @@ -5091,9 +5146,9 @@ Өшіру - Стористі жою керек пе + Стористі жою керек пе? - \"%1$s\" жеке сторисін өшіру керек пе? + \"%1$s\" жеке сторисін жою керек пе? Жою @@ -5194,9 +5249,9 @@ - Сторис 24 сағаттан кейін өшіп қалады. Сторисіңізді кім көре алатынын таңдаңыз немесе белгілі бір көрермендер немесе топтар ғана көре алатын жаңа стористер жасаңыз. + Сторис 24 сағаттан кейін өшіп қалады. Сторисіңізді кім көре алатынын таңдаңыз немесе кейбір көрермендер немесе топтар ғана көре алатын жаңа стористер жасаңыз. - Стористерді өшіру + Стористерді өшіріп қою Стористерді өшіріп қойсаңыз, бұдан былай стористерді бөлісе немесе көре алмайтын боласыз. @@ -5206,7 +5261,7 @@ Стористерді өшіру керек пе? - Бұдан былай стористерді бөлісе немесе көре алмайсыз. Соңғы жіберген стористеріңіздің мерзімі өткенге дейін, оларды басқа адамдар көре алады. + Ендігәрі стористерді бөлісе немесе көре алмайсыз. Жақында бөліскен сторис жаңалықтары да жойылады. Сторис құпиялылығы @@ -5214,7 +5269,7 @@ Бұл стористі кім көре алады - "\"%1$s\" тобының мүшелері бұл стористі көре алады және оған жауап бере алады. Топтағы осы чат үшін мүшелік параметрлерін өзгерте аласыз." + "%1$s тобының мүшелері бұл стористі көре алады және оған жауап бере алады. Топтағы осы чат үшін мүшелік параметрлерін өзгерте аласыз." Топтық стористі өшіріп тастау diff --git a/app/src/main/res/values-km/strings.xml b/app/src/main/res/values-km/strings.xml index 471d96c019..c24cc13288 100644 --- a/app/src/main/res/values-km/strings.xml +++ b/app/src/main/res/values-km/strings.xml @@ -192,7 +192,7 @@ បច្ចុប្បន្នភាព កុំធ្វើបច្ចុប្បន្នភាព ព្រមាន - Signal របស់អ្នកបានផុតកំណត់ហើយ។ អ្នកអាចមើលប្រវត្តិសាររបស់អ្នកប៉ុន្តែអ្នកនឹងមិនអាចផ្ញើរឬទទួលសាររហូតដល់អ្នកធ្វើបច្ចុប្បន្នភាព។ + កំណែ Signal របស់អ្នកបានផុតកំណត់ហើយ។ អ្នកអាចមើលប្រវត្តិសាររបស់អ្នកបាន ប៉ុន្តែអ្នកនឹងមិនអាចផ្ញើ ឬទទួលសារបានទេ រហូតទាល់តែអ្នកដំឡើងកំណែសិន។ ទំព័រវែបសាយរកមិនឃើញ. @@ -650,7 +650,7 @@ តើអ្វីជាក្រុមថ្មី? ក្រុមថ្មី មានមុខងារដូចជា @mentions និងអ្នកគ្រប់គ្រងក្រុម ហើយនឹងគាំទ្រមុខងារបន្ថែមនៅពេលអនាគត។ - ប្រវត្តិសារ​ និងឯកសារមេឌាទាំងអស់ ត្រូវបានរក្សាទុកមុនពេលដំឡើង។ + ប្រវត្តិសារ និងឯកសារមេឌៀទាំងអស់ត្រូវបានរក្សាទុកមុនពេលដំឡើងកម្រិត។ អ្នកនឹងត្រូវយល់ព្រមការអញ្ជើញចួលរួមក្រុមនេះម្តងទៀត ហើយនឹងមិនអាចទទួលសារក្នុងក្រុម រហូតដល់អ្នកយល់ព្រម។ សមាជិកទាំងនេះ នឹងត្រូវយល់ព្រមការអញ្ជើញចួលរួមក្រុមនេះម្តងទៀត ហើយនឹងមិនអាចទទួលសារក្នុងក្រុម រហូតដល់ពួកគេយល់ព្រម៖ @@ -663,7 +663,7 @@ ដំឡើងទៅក្រុមថ្មី ដំឡើងក្រុមនេះ ក្រុមថ្មី មានមុខងារដូចជា @mentions និងអ្នកគ្រប់គ្រងក្រុម ហើយនឹងគាំទ្រមុខងារបន្ថែមនៅពេលអនាគត។ - ប្រវត្តិសារ​ និងឯកសារមេឌាទាំងអស់ នឹងត្រូវរក្សាទុកមុនពេលដំឡើង។ + ប្រវត្តិសារ និងឯកសារមេឌៀទាំងអស់នឹងត្រូវបានរក្សាទុកមុនពេលដំឡើងកម្រិត។ បានជួបប្រទះបញ្ហាបណ្តាញ។ សាកល្បងម្តងទៀតពេលក្រោយ។ បរាជ័យក្នុងការដំឡើង។ @@ -1476,7 +1476,7 @@ បណ្តាញបរាជ័យ! លេខមិនទាន់ចុះឈ្មោះ! លេខដែលអ្នកកំពុងហៅ មិនគាំទ្រសំឡេងសុវត្ថិភាពទេ! - ទទួលបាន + យល់ហើយ @@ -1886,6 +1886,7 @@ %1$s ទៅអ្នក ឯកសារមេឌៀលែងមានទៀតហើយ។ មិនអាចស្វែងរកកម្មវិធីដែលអាចចែករំលែកឯកសារមេឌៀនេះ។ + បិទ %1$d សារថ្មីក្នុង %2$d ការសន្ទនា @@ -2259,7 +2260,7 @@ បាន​ចម្លង​ត្រា​ពេល​វេលាដែលបាន​​ផ្ញើ ទៅឃ្លីបបត។ - ការធ្វើបច្ចុប្បន្នភាពចំពោះរឿងរ៉ាវរបស់អ្នកនឹងបង្ហាញនៅទីនេះ។ + បច្ចុប្បន្នភាពចំពោះរឿងរ៉ាវរបស់អ្នកនឹងបង្ហាញនៅទីនេះ។ @@ -2537,7 +2538,7 @@ ការទូទាត់ (បេតា) ប្រវែងការសន្ទនាមានកំណត់ រក្សាសារ - សំអាតប្រវត្តិសារ + លុបប្រវត្តិសារ ភ្ជាប់ឧបករណ៍ ភ្លឺ ងងឹត @@ -2579,12 +2580,12 @@ សំឡេង បង្ហាញឧបករណ៍ផ្ទុក លុបសារចាស់ៗ? - សំអាតប្រវត្តិសារ? - នេះនឹងលុបប្រវត្តិសារ និងឯកសារមេឌៀទាំងអស់ចោលរហូត ចេញពីឧបករណ៍របស់អ្នក ដែលចាស់ជាង %1$s។ + លុបប្រវត្តិសារឬ? + ការធ្វើបែបនេះនឹងលុបប្រវត្តិសារ និងឯកសារមេឌៀទាំងអស់ជាអចិន្ត្រៃយ៍ ពីឧបករណ៍របស់អ្នក ដែលមានរយៈពេលលើសពី %1$s។ នេះ នឹងតម្រឹមការសន្ទនាទាំងអស់ទៅ %1$s សារថ្មីៗបំផុត។ - នេះនឹងលុបប្រវត្តិសារ និងឯកសារមេឌៀទាំងអស់ចោលរហូត។ - តើអ្នកប្រាកដថាចង់លុបប្រវត្តិសារទាំងអស់? - ប្រវត្តិសារទាំងអស់នឹងត្រូវលុបចោលរហូត។ សកម្មភាពនេះ មិនអាចត្រឡប់ក្រោយទេ។ + ការធ្វើបែបនេះនឹងលុបប្រវត្តិសារ និងឯកសារមេឌៀទាំងអស់ពីឧបករណ៍របស់អ្នកជាអចិន្ត្រៃយ៍។ + តើអ្នកប្រាកដថាចង់លុបប្រវត្តិសារទាំងអស់ឬ? + ប្រវត្តិសារទាំងអស់នឹងត្រូវលុបចោលជាអចិន្ត្រៃយ៍។ សកម្មភាពនេះមិនអាចត្រឡប់ក្រោយទេ។ លុបទាំងអស់ឥឡូវនេះ ជារៀងរហូត 1 ឆ្នាំ @@ -2662,10 +2663,14 @@ ជម្រើសធ្វើផ្សេង + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ កុំទាន់ + + + ការរៀបចំប្រព័ន្ធសុវត្ថិភាព + + ការពារប្រាក់របស់អ្នក + + បន្ថែមស្រទាប់សុវត្ថិភាពមួយទៀត ដើម្បីជួយការពារកុំឲ្យនរណាម្នាក់ដែលមានទូរសព្ទរបស់អ្នកចូលប្រើប្រាស់នូវប្រាក់របស់អ្នកបាន។ អ្នកអាចបិទជម្រើសនេះនៅក្នុងការកំណត់។ + + បើកការចាក់សោការទូទាត់ + + ពេលក្រោយ + + រំលងជំហាននេះឬ? + + ការរំលងជំហាននេះអាចអនុញ្ញាតឲ្យនរណាម្នាក់ដែលមានសិទ្ធិចូលប្រើទូរសព្ទរបស់អ្នក ផ្ទេរប្រាក់ ឬមើលឃ្លាស្តាររបស់អ្នកបាន។ + + បោះបង់ + + រំលង + បន្ថែមថវិកា អាសយដ្ឋានកាបូបរបស់អ្នក @@ -3879,7 +3904,7 @@ ពេលវេលាតាមលំនាំដើមសម្រាប់ការសន្ទនាថ្មីៗ កំណត់ថេរវេលានៃការលុបសារសម្រាប់រាល់ការសន្ទនាថ្មីៗដែលចាប់ផ្ដើមដោយអ្នក - គ្រប់គ្រងរឿងរ៉ាវរបស់អ្នក និងអ្នកដែលអាចមើលពួកវា + គ្រប់គ្រងរឿងរ៉ាវរបស់អ្នក និងអ្នកដែលអាចមើលវាបាន តម្រូវឲ្យចាក់សោអេក្រង់ Android ឬប្រើស្នាមម្រាមដៃដើម្បីផ្ទេរប្រាក់ មិនអាចបើកមុខងារចាក់សោការបង់ប្រាក់បាន @@ -4157,7 +4182,7 @@ បន្ថែមសារ ការបញ្ជូនសារបន្តលឿនជាងមុន - វីដេអូ​នឹង​ត្រូវ​បានកាត់​តម្រឹមជាឃ្លីបខ្លី​ៗដែលមានរយៈពេល 30 វិនាទី ហើយ​ផ្ញើ​ទៅជា​រឿងរ៉ាវជា​ច្រើន។ + វីដេអូនឹងត្រូវបានតម្រឹមជាឃ្លីបដែលមានរយៈពេល 30 វិនាទី ហើយផ្ញើជារឿងរ៉ាវជាច្រើន។ វីដេអូដែលបានផ្ញើទៅរឿងរ៉ាវមិនអាចវែងជាង 30 វិនាទីទេ។ ការបញ្ជូនសារបន្តនឹងផ្ញើចេញទៅភ្លាមៗ @@ -4631,7 +4656,7 @@ លាក់រឿងរ៉ាវឬ? - បច្ចុប្បន្នភាពអំពីរឿងរ៉ាវថ្មីៗពី %1$s នឹងមិនបង្ហាញនៅផ្នែកខាងលើបំផុតនៃបញ្ជីរឿងរ៉ាវ​ទៀតទេ។ + បច្ចុប្បន្នភាពរឿងរ៉ាវថ្មីៗពី %1$s នឹងមិនបង្ហាញនៅផ្នែកខាងលើបំផុតនៃបញ្ជីរឿងរ៉ាវទៀតទេ។ លាក់ @@ -4649,7 +4674,7 @@ លុបរឿងរ៉ាវឬ? - រឿង​រ៉ាវនេះ​នឹង​ត្រូវ​លុប​ចេញសម្រាប់​អ្នក និង​អ្នក​រាល់​គ្នា​ដែល​បាន​ទទួល​វា។ + រឿងរ៉ាវនេះនឹងត្រូវបានលុបចោលសម្រាប់អ្នក និងមនុស្សគ្រប់គ្នាដែលបានទទួលវា។ មិនអាចរក្សាទុក @@ -4692,6 +4717,8 @@ ដកអ្នកមើលចេញ មិនទាន់មានការឆ្លើយតបទេ + + អ្នកមិនអាចឆ្លើយតបទៅនឹងរឿងរ៉ាវនេះទេ ដោយសារអ្នកលែងជាសមាជិកនៃក្រុមនេះទៀតហើយ។ បានប្រតិកម្មនឹងរឿងរ៉ាវ @@ -4710,6 +4737,12 @@ លុប រឿងរ៉ាវរបស់ខ្ញុំ + + + %1$d viewers + + + View អ្នកដែលអាចមើលរឿងរ៉ាវនេះបាន @@ -4741,9 +4774,7 @@ អនុញ្ញាតការឆ្លើយតប និងការប្រតិកម្ម - អនុញ្ញាតឲ្យមនុស្សដែលអាចមើលរឿងរបស់អ្នកប្រតិកម្ម និងឆ្លើយតប - - លាក់រឿងរ៉ាវរបស់អ្នកពីមនុស្សជាក់លាក់។ តាមលំនាំដើម រឿងរ៉ាវរបស់អ្នកត្រូវបានចែករំលែកជាមួយ %1$s របស់អ្នក + អនុញ្ញាតឲ្យមនុស្សដែលអាចមើលរឿងរ៉ាវរបស់អ្នក ប្រតិកម្ម និងឆ្លើយតបបាន អ្នកភ្ជាប់ទំនាក់ទំនងក្នុង Signal @@ -4755,7 +4786,7 @@ មានពួកគេនៅក្នុងប្រព័ន្ធទំនាក់ទំនងរបស់អ្នក - "មនុស្សដែលអ្នកភ្ជាប់ជាមួយអាចមើលឃើញឈ្មោះ និងរូបថតរបស់អ្នក ហើយអាចមើលឃើញការបង្ហោះទៅកាន់ \"រឿងរ៉ាវរបស់ខ្ញុំ\" លុះត្រាតែអ្នកលាក់វាពីពួកគេ។" + "អ្នកភ្ជាប់ទំនាក់ទំនងជាមួយអ្នកអាចមើលឃើញឈ្មោះ និងរូបថតរបស់អ្នក ហើយអាចមើលឃើញសារបង្ហោះទៅកាន់រឿងរ៉ាវរបស់ខ្ញុំ លើកលែងតែអ្នកលាក់វាមិនឲ្យពួកគេឃើញ។" បញ្ចូលអ្នកមើល @@ -4802,18 +4833,36 @@ គ្រាន់តែចែករំលែកជាមួយ… បញ្ចប់ + + ដករឿងរ៉ាវក្រុមចេញឬ? + + \"%1$s\" នឹងត្រូវបានដកចេញ។ + + លុបចេញ + + លុបរឿងរ៉ាវឯកជនឬ? + + \"%1$s\" និងបច្ចុប្បន្នភាពដែលបានចែករំលែកចំពោះរឿងរ៉ាវនេះនឹងត្រូវបានលុប។ + + លុប + + រឿងរ៉ាវមានសម្រាប់តែអ្នកប្រើ Signal Beta ប៉ុណ្ណោះ។ + + ប្រសិនបើអ្នកចែករំលែករឿងរ៉ាវមួយ វានឹងអាចមើលឃើញដោយមនុស្សដែលនៅលើ Signal Beta ប៉ុណ្ណោះ។ បញ្ចូលទៅក្នុងរឿងរ៉ាវឬទេ? - ការបញ្ចូលខ្លឹមសារទៅក្នុងរឿងរ៉ាវរបស់អ្នកអនុញ្ញាតឲ្យមនុស្សដែលអ្នកបានភ្ជាប់ជាមួយក្នុង Signal មើលវារយៈពេល 24 ម៉ោង។ អ្នកអាចផ្លាស់ប្តូរនៅក្នុងការកំណត់បាន ដើម្បីកំណត់ថាតើនរណាខ្លះដែលអាចមើល​រឿងរ៉ាវរបស់អ្នកបាន។ + ការបញ្ចូលខ្លឹមសារទៅក្នុងរឿងរ៉ាវរបស់អ្នកអនុញ្ញាតឲ្យអ្នកភ្ជាប់ទំនាក់ទំនងក្នុង Signal អាចមើលវាបានរយៈពេល 24 ម៉ោង។ អ្នកអាចផ្លាស់ប្តូរអ្នកដែលអាចមើលរឿងរ៉ាវរបស់អ្នកនៅក្នុងការកំណត់។ បញ្ចូលទៅរឿងរ៉ាវ កែអ្នកមើល - មិនអាចផ្ញើរឿងរ៉ាវទេ។ សូមពិនិត្យមើលសេវាអ៊ីនធឺណិតរបស់អ្នក ហើយព្យាយាមម្តងទៀត។ + មិនអាចផ្ញើរឿងរ៉ាវបានទេ។ សូមពិនិត្យមើលសេវាអ៊ីនធឺណិតរបស់អ្នក រួចព្យាយាមម្តងទៀត។ ផ្ញើ + + បិទ និងលុប ចែករំលែក និងមើលរឿងរ៉ាវ @@ -4958,6 +5007,10 @@ រឿងរ៉ាវក្រុម · អ្នកមើល %1$d នាក់ + + + សមាជិក %1$d នាក់ + %1$s · អ្នកមើល %2$d នាក់ @@ -5004,7 +5057,7 @@ អូសទៅស្តាំដើម្បីចាកចេញ - ទទួលបាន + យល់ហើយ បើកម៉ឺនុយបរិបទ @@ -5088,7 +5141,7 @@ បិទរឿងរ៉ាវឬ? - អ្នកនឹងមិនអាចចែករំលែក ឬមើលរឿងរ៉ាវទៀតទេ។ រឿងរ៉ាវទាំងឡាយដែលអ្នកបានផ្ញើនាពេលថ្មីៗនេះនឹងនៅតែអាចមើលឃើញដោយអ្នកដទៃ រហូតដល់ពួកវាផុតកំណត់។ + អ្នកនឹងមិនអាចចែករំលែក ឬមើលរឿងរ៉ាវបានទៀតទេ។ បច្ចុប្បន្នភាពរឿងរ៉ាវដែលអ្នកបានចែករំលែកនាពេលថ្មីៗនេះក៏នឹងត្រូវបានលុបចោលផងដែរ។ ឯកជនភាពនៃរឿងរ៉ាវ diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index 1fff308a7b..a3ee146701 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -673,7 +673,7 @@ ಹೊಸ ಗುಂಪುಗಳೆಂದರೇನು? ಹೊಸ ಗುಂಪುಗಳು @ಉಲ್ಲೇಖಗಳು ಮತ್ತು ಗುಂಪು ನಿರ್ವಾಹಕರಂತಹ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಹೊಂದಿವೆ, ಮತ್ತು ಭವಿಷ್ಯದಲ್ಲಿ ಹೆಚ್ಚಿನ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ. - ಎಲ್ಲಾ ಸಂದೇಶ ಇತಿಹಾಸ ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ನವೀಕರಣದ ಮೊದಲು ಇರಿಸಲಾಗಿದೆ. + ಎಲ್ಲಾ ಸಂದೇಶ ಇತಿಹಾಸ ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ನವೀಕರಣದ ಮೊದಲಿನಿಂದಲೂ ಇರಿಸಲಾಗಿದೆ. ಈ ಗುಂಪಿಗೆ ಮತ್ತೆ ಸೇರಲು ನೀವು ಆಹ್ವಾನವನ್ನು ಸ್ವೀಕರಿಸುವ ಅಗತ್ಯವಿದೆ, ಮತ್ತು ನೀವು ಸ್ವೀಕರಿಸುವವರೆಗೆ ಗುಂಪು ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ. ಈ ಸದಸ್ಯರು ಮತ್ತೆ ಈ ಗುಂಪಿಗೆ ಸೇರಲು ಆಹ್ವಾನವನ್ನು ಸ್ವೀಕರಿಸುವ ಅಗತ್ಯವಿದೆ ಮತ್ತು ಅವರು ಸ್ವೀಕರಿಸುವವರೆಗೆ ಗುಂಪು ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ: @@ -688,7 +688,7 @@ ಹೊಸ ಗುಂಪಿಗೆ ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡಿ ಈ ಗುಂಪನ್ನು ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡಿ ಹೊಸ ಗುಂಪುಗಳು @ಉಲ್ಲೇಖಗಳು ಮತ್ತು ಗುಂಪು ನಿರ್ವಾಹಕರಂತಹ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಹೊಂದಿವೆ, ಮತ್ತು ಭವಿಷ್ಯದಲ್ಲಿ ಹೆಚ್ಚಿನ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ. - ಅಪ್‌ಗ್ರೇಡ್‌ಗೂ ಮೊದಲಿನ ಎಲ್ಲಾ ಸಂದೇಶ ಇತಿಹಾಸ ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ಇಡಲಾಗಿದೆ. + ಎಲ್ಲಾ ಸಂದೇಶ ಇತಿಹಾಸ ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ನವೀಕರಣದ ಮೊದಲಿನಿಂದಲೂ ಇರಿಸಲಾಗುತ್ತದೆ. ತಾತ್ಕಾಲಿಕ ನೆಟ್ವರ್ಕ್ ತೊಂದರೆ ಉಂಟಾಯಿತು . ನಂತರ ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ . ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. @@ -1346,9 +1346,9 @@ ಹೊಸ ಫೀಚರ್ ಇಷ್ಟವಾಯಿತೇ? ಒಂದು ಬಾರಿಯ ದೇಣಿಗೆಯೊಂದಿಗೆ Signal ಬೆಂಬಲಿಸಿ ನೆರವಾಗಿ. - %1$s ನೊಂದಿಗಿನ ನಿಮ್ಮ ಮೆಸೇಜ್ ಇತಿಹಾಸ ಮತ್ತು %2$s ಅವರ ನಂಬರ್ ಅನ್ನು ವಿಲೀನಗೊಳಿಸಲಾಗಿದೆ. + %1$s ಅವರೊಂದಿಗಿನ ನಿಮ್ಮ ಮೆಸೇಜ್ ಇತಿಹಾಸ ಮತ್ತು ಅವರ ನಂಬರ್ %2$s ಅನ್ನು ವಿಲೀನಗೊಳಿಸಲಾಗಿದೆ. - %1$s ಮತ್ತು ಅವರಿಗೆ ಸೇರಿದ ಬೇರೊಂದು ಚಾಟ್ ನೊಂದಿಗಿನ ನಿಮ್ಮ ಮೆಸೇಜ್ ಇತಿಹಾಸವನ್ನು ವಿಲೀನಗೊಳಿಸಲಾಗಿದೆ. + %1$s ಅವರೊಂದಿಗಿನ ನಿಮ್ಮ ಮೆಸೇಜ್ ಇತಿಹಾಸ ಮತ್ತು ಅವರಿಗೆ ಸೇರಿದ ಬೇರೊಂದು ಚಾಟ್ ಅನ್ನು ವಿಲೀನಗೊಳಿಸಲಾಗಿದೆ. %1$s ಅವರು ಗ್ರೂಪ್ ಕಾಲ್ ಆರಂಭಿಸಿದ್ದಾರೆ · %2$s @@ -1857,7 +1857,7 @@ ನಿಮ್ಮ ಸ್ಟೋರಿಗೆ %1$s ಪ್ರತಿಕ್ರಿಯಿಸಿದ್ದಾರೆ - ತಮ್ಮ ಸ್ಟೋರಿಗೆ %1$s ಪ್ರತಿಕ್ರಿಯಿಸಿದ್ದಾರೆ + ಅವರ ಸ್ಟೋರಿಗೆ %1$s ಪ್ರತಿಕ್ರಿಯಿಸಿದ್ದಾರೆ Molly ನವೀಕರಿಸಿ @@ -1960,6 +1960,7 @@ %1$s ಅವರಿಂದ ನಿಮಗೆ ಮೀಡಿಯಾ ಇನ್ನು ಲಭ್ಯವಿಲ್ಲ. ಈ ಮೀಡಿಯಾ ಹಂಚಿಕೊಳ್ಳಲು ಒಂದು ಆಪ್ ಕಂಡುಕೊಳ್ಳಲಾಗುತ್ತಿಲ್ಲ. + ಮುಚ್ಚಿ %2$dಸಂಭಾಷಣೆಗಳಲ್ಲಿ %1$d ಹೊಸ ಸಂದೇಶಗಳು @@ -2666,10 +2667,10 @@ ಸ್ಟೊರೇಜ್ ಪರಿಶೀಲಿಸಿ ಹಳೆಯ ಸಂದೇಶವನ್ನು ಅಳಿಸುವುದೇ? ಸಂದೇಶ ಇತಿಹಾಸವನ್ನು ತೆರವುಗೊಳಿಸುವುದೇ? - ಇದು ನಿಮ್ಮ ಸಾಧನದಿಂದ %1$s ಗಿಂತ ಹಳೆಯದಾಗಿರುವ ಎಲ್ಲಾ ಸಂದೇಶಗಳ ಇತಿಹಾಸ ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುತ್ತದೆ. + %1$s ಗಿಂತ ಹಳೆಯದಾಗಿರುವ ಎಲ್ಲಾ ಸಂದೇಶಗಳ ಇತಿಹಾಸ ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ಇದು ನಿಮ್ಮ ಸಾಧನದಿಂದ ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಿಹಾಕುತ್ತದೆ. ಇದು ಎಲ್ಲಾ ಸಂಭಾಷಣೆಗಳನ್ನು %1$s ಇತ್ತೀಚಿನ ಸಂದೇಶಗಳಿಗೆ ಶಾಶ್ವತವಾಗಿ ಟ್ರಿಮ್ ಮಾಡುತ್ತದೆ. - ಇದು ನಿಮ್ಮ ಸಾಧನದಿಂದ ಎಲ್ಲಾ ಸಂದೇಶಗಳ ಇತಿಹಾಸ ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುತ್ತದೆ. - ಎಲ್ಲಾ ಸಂದೇಶ ಇತಿಹಾಸವನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? + ಎಲ್ಲಾ ಸಂದೇಶಗಳ ಇತಿಹಾಸ ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ಇದು ನಿಮ್ಮ ಸಾಧನದಿಂದ ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಿಹಾಕುತ್ತದೆ. + ಎಲ್ಲಾ ಸಂದೇಶ ಇತಿಹಾಸವನ್ನು ನೀವು ಖಚಿತವಾಗಿ ಅಳಿಸಿಹಾಕಲು ಬಯಸುವಿರಾ? ಎಲ್ಲಾ ಸಂದೇಶ ಇತಿಹಾಸವನ್ನು ಶಾಶ್ವತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ. ಎಲ್ಲವನ್ನು ಈಗಲೇ ಅಳಿಸಿ ಎಂದೆಂದಿಗೂ @@ -2748,10 +2749,14 @@ ಆಯ್ಕೆಯನ್ನು ಅಗತ್ಯಾನುಗುಣಗೊಳಿಸಿರಿ + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ ಈಗಲ್ಲ + + + ಭದ್ರತಾ ಸೆಟ್ ಅಪ್ + + ನಿಮ್ಮ ಹಣವನ್ನು ರಕ್ಷಿಸಿಕೊಳ್ಳಿರಿ + + ಭದ್ರತೆಯ ಮತ್ತೊಂದು ಮಟ್ಟವನ್ನು ಸೇರಿಸುವ ಮೂಲಕ ನಿಮ್ಮ ಫೋನ್ ಹೊಂದಿರುವ ವ್ಯಕ್ತಿಯು ನಿಮ್ಮ ಹಣ ಮುಟ್ಟುವುದನ್ನು ತಡೆಯಲು ಸಹಾಯ ಮಾಡಿ. ಈ ಆಯ್ಕೆಯನ್ನು ನೀವು ಸೆಟ್ಟಿಂಗ್ ಗಳಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು. + + ಪಾವತಿ ಲಾಕ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ + + ಈಗಲ್ಲ + + ಈ ಹಂತವನ್ನು ಬಿಟ್ಟುಬಿಡಲೇ? + + ಈ ಹಂತವನ್ನು ಬಿಟ್ಟುಬಿಡುವುದರಿಂದ ನಿಮ್ಮ ಫೋನ್ ಮುಟ್ಟಲು ಸಾಧ್ಯವಿರುವ ಯಾರಾದರೂ ಹಣವನ್ನು ವರ್ಗಾಯಿಸಬಹುದು ಅಥಾ ನಿಮ್ಮ ರಿಕವರಿ ಪದಗುಚ್ಛವನ್ನು ವೀಕ್ಷಿಸಬಹುದು. + + ರದ್ದುಮಾಡಿ + + ಬಿಟ್ಟು ಮುಂದುವರಿ + ಫಂಡ್‌ಗಳನ್ನು ಸೇರಿಸಿ ನಿಮ್ಮ ವಾಲೆಟ್ ವಿಳಾಸ @@ -4256,9 +4281,9 @@ ಮೆಸೇಜ್ ಸೇರಿಸಿ ಫಾಸ್ಟರ್ ಫಾರ್ವರ್ಡ್‌ಗಳು - ವಿಡಿಯೋಗಳನ್ನು 30s ಕ್ಲಿಪ್‌ಗಳಿಗೆ ಟ್ರಿಮ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಅನೇಕ ಸ್ಟೋರೀಸ್ ಆಗಿ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. + ವಿಡಿಯೋಗಳನ್ನು 30s ಕ್ಲಿಪ್ ಗಳಾಗಿ ಟ್ರಿಮ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಅನೇಕ ಸ್ಟೋರೀಸ್ ಆಗಿ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. - ಸ್ಟೋರೀಸ್‌ಗೆ ಕಳುಹಿಸಿದ ವಿಡಿಯೋಗಳು 30s ಗಿಂತ ದೀರ್ಘವಾಗಿರುವಂತಿಲ್ಲ. + ಸ್ಟೋರೀಸ್ ಗೆ ಕಳುಹಿಸಿದ ವಿಡಿಯೋಗಳು 30s ಗಿಂತ ದೀರ್ಘವಾಗಿರುವಂತಿಲ್ಲ. ಫಾರ್ವರ್ಡ್ ಮಾಡಲಾದ ಮೆಸೇಜ್‌ಗಳನ್ನು ಈಗ ತಕ್ಷಣವೇ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. %1$d ಮೆಸೇಜ್‌ಗಳನ್ನು ಕಳುಹಿಸಿ @@ -4733,9 +4758,9 @@ ಮರುಪ್ರಯತ್ನಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ - ಸ್ಟೋರಿ ಮರೆ ಮಾಡಲೇ? + ಸ್ಟೋರಿ ಮರೆ ಮಾಡಬೇಕೇ? - %1$s ಅವರಿಂದ ಹೊಸ ಸ್ಟೋರ್ ಅಪ್ಡೇಟ್‌ಗಳು ಇನ್ನುಮುಂದೆ ಸ್ಟೋರೀಸ್‌ ಲಿಸ್ಟ್‌ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಕಾಣಿಸುವುದಿಲ್ಲ. + %1$s ಅವರಿಂದ ಸ್ಟೋರೀ ಅಪ್ಡೇಟ್ ಗಳು ಇನ್ನುಮುಂದೆ ಸ್ಟೋರೀಸ್ ಲಿಸ್ಟ್ ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಕಾಣಿಸುವುದಿಲ್ಲ. ಅಡಗಿಸು @@ -4752,9 +4777,9 @@ %1$s ಅವರ ಸ್ಟೋರಿ - ಸ್ಟೋರಿ ಅಳಿಸುವುದೇ? + ಸ್ಟೋರಿ ಅಳಿಸಿಹಾಕಬೇಕೇ? - ಈ ಸ್ಟೋರಿಯನ್ನು ನಿಮಗೆ ಹಾಗೂ ಇದನ್ನು ಸ್ವೀಕರಿಸಿದ ಎಲ್ಲರಿಗೂ ಅಳಿಸಲಾಗುತ್ತದೆ. + ಈ ಸ್ಟೋರಿಯನ್ನು ನಿಮಗೂ ಹಾಗು ಇದನ್ನು ಸ್ವೀಕರಿಸಿದ ಎಲ್ಲರಿಗೂ ಅಳಿಸಿಹಾಕಲಾಗುತ್ತದೆ. ಉಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ @@ -4799,6 +4824,8 @@ ವೀಕ್ಷಕರನ್ನು ತೆಗೆದುಹಾಕಿ ಇನ್ನೂ ಯಾವುದೇ ಪ್ರತ್ಯುತ್ತರವಿಲ್ಲ + + ಈ ಸ್ಟೋರಿಗೆ ನೀವು ಉತ್ತರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಯಾಕೆಂದರೆ ನೀವೀಗ ಈ ಗ್ರೂಪ್ ನ ಸದಸ್ಯರಾಗಿ ಉಳಿದಿಲ್ಲ. ಸ್ಟೋರಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸಲಾಗಿದೆ @@ -4817,6 +4844,13 @@ ಅಳಿಸು ನನ್ನ ಸ್ಟೋರಿ + + + %1$d viewer + %1$d viewers + + + View ಈ ಸ್ಟೋರಿಯನ್ನು ಯಾರು ವೀಕ್ಷಿಸಬಹುದು @@ -4851,8 +4885,6 @@ ಉತ್ತರಗಳು & ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಅನುಮತಿಸಿ ನಿಮ್ಮ ಸ್ಟೋರಿಯನ್ನು ವೀಕ್ಷಿಸಬಹುದಾದ ಜನರು ಪ್ರತಿಕ್ರಿಯಿಸಲಿ ಮತ್ತು ಉತ್ತರಿಸಲಿ - - ನಿರ್ದಿಷ್ಟ ಜನರಿಂದ ನಿಮ್ಮ ಸ್ಟೋರಿಯನ್ನು ಮರೆಮಾಡಿ. ಡೀಫಾಲ್ಟ್ ಆಗಿ, ನಿಮ್ಮ ಸ್ಟೋರಿಯನ್ನು ನಿಮ್ಮ %1$s ಅವರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ Signal ಸಂಪರ್ಕಗಳು @@ -4864,11 +4896,11 @@ ನಿಮ್ಮ ಸಿಸ್ಟಮ್ ಸಂಪರ್ಕಗಳಲ್ಲಿ ಅವರನ್ನು ಹೊಂದಲಾಗುತ್ತಿದೆ - "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ನಿಮ್ಮ ಹೆಸರು ಮತ್ತು ಫೊಟೋವನ್ನು ನೋಡಬಹುದು ಮತ್ತು ನೀವು ಮರೆಮಾಡದ ಹೊರತಾಗಿ \"ನನ್ನ ಸ್ಟೋರಿ\" ಯ ಪೋಸ್ಟ್‌ಗಳನ್ನು ನೋಡಬಹುದು" + "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ನಿಮ್ಮ ಹೆಸರು ಮತ್ತು ಫೊಟೋವನ್ನು ನೋಡಬಹುದು ಮತ್ತು ನೀವು ಮರೆಮಾಡದ ಹೊರತಾಗಿ \"ನನ್ನ ಸ್ಟೋರಿ\" ಯ ಪೋಸ್ಟ್ ಗಳನ್ನು ನೋಡಬಹುದು" ವೀಕ್ಷಕರನ್ನು ಸೇರಿಸಿ - ಖಾಸಗಿ ಸ್ಟೋರಿ ಅಳಿಸಿ + ಖಾಸಗಿ ಸ್ಟೋರಿ ಅಳಿಸಿಹಾಕಿರಿ %1$s ತೆಗೆದುಹಾಕಲೇ? @@ -4911,10 +4943,26 @@ ಇವರೊಂದಿಗೆ ಮಾತ್ರ ಹಂಚಿಕೊಳ್ಳಿ… ಮುಗಿದಿದೆ + + ಗ್ರೂಪ್ ಸ್ಟೋರಿ ತೆಗೆದುಹಾಕೋಣವೇ? + + \"%1$s\" ಅವರನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. + + ತೆಗೆದುಹಾಕಿ + + ಖಾಸಗಿ ಸ್ಟೋರಿ ಅಳಿಸಿಹಾಕುವುದೇ? + + \"%1$s\" ಮತ್ತು ಈ ಸ್ಟೋರಿಗೆ ಹಂಚಿಕೊಂಡ ಅಪ್ಡೇಟ್ ಗಳನ್ನು ಅಳಿಸಿಹಾಕಲಾಗುತ್ತದೆ. + + ಅಳಿಸು + + Signal ಬೀಟಾ ಬಳಕೆದಾರರಿಗೆ ಮಾತ್ರ ಸ್ಟೋರೀಸ್ ಲಭ್ಯ ಇವೆ. + + ನೀವೊಂದು ಸ್ಟೋರಿ ಹಂಚಿಕೊಂಡರೆ, Signal ಬೀಟಾದಲ್ಲಿರುವ ಜನರಿಗೆ ಮಾತ್ರ ಅದು ಲಭ್ಯವಾಗಲಿದೆ. ಸ್ಟೋರಿಗೆ ಸೇರಿಸುವುದೇ? - ನಿಮ್ಮ ಸ್ಟೋರಿಗೆ ವಿಷಯ ಸೇರಿಸುವುದು 24 ಗಂಟೆಗಳ ಕಾಲ ನಿಮ್ಮ Signal ಸಂಪರ್ಕಗಳು ಅದನ್ನು ವೀಕ್ಷಿಸಲು ಅನುಮತಿಸುತ್ತವೆ. ನಿಮ್ಮ ಸ್ಟೋರಿಯನ್ನು ಯಾರು ವೀಕ್ಷಿಸಬಹುದು ಎಂಬುದನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳು ನಲ್ಲಿ ನೀವು ಬದಲಾಯಿಸಬಹುದು. + ನಿಮ್ಮ ಸ್ಟೋರಿಗೆ ವಿಷಯಗಳನ್ನು ಸೇರಿಸಿದಾಗ 24 ಗಂಟೆಗಳ ಕಾಲ ನಿಮ್ಮ Signal ಸಂಪರ್ಕಗಳು ಅದನ್ನು ವೀಕ್ಷಿಸಲು ಅನುಮತಿ ಇರುತ್ತದೆ. ನಿಮ್ಮ ಸ್ಟೋರಿಯನ್ನು ಯಾರು ವೀಕ್ಷಿಸಬಹುದು ಎಂಬುದನ್ನುಸೆಟ್ಟಿಂಗ್ ಗಳಲ್ಲಿ ನೀವು ಬದಲಾಯಿಸಬಹುದು. ಸ್ಟೋರಿಗೆ ಸೇರಿಸಿ @@ -4923,8 +4971,10 @@ ಸ್ಟೋರಿ ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಿಮ್ಮ ಸಂಪರ್ಕ ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ. ಕಳುಹಿಸು + + ಆಫ್ ಮಾಡಿ ಮತ್ತು ಅಳಿಸಿಹಾಕಿರಿ - ಸ್ಟೋರೀಸ್ ಹಂಚಿಕೊಳ್ಳಿ & ವೀಕ್ಷಿಸಿ + ಸ್ಟೋರೀಸ್ ಹಂಚಿಕೊಳ್ಳಿ ಮತ್ತು ವೀಕ್ಷಿಸಿ ಈ ಆಯ್ಕೆಯನ್ನು ಆಫ್ ಮಾಡಿದಾಗ ಸ್ಟೋರೀಸ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ವೀಕ್ಷಿಸಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. @@ -4997,7 +5047,7 @@ ನಿಮ್ಮ ಸ್ಟೋರಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸಿದ್ದಾರೆ - ಸ್ಟೋರಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸಲಾಗಿದೆ + ಒಂದು ಸ್ಟೋರಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸಲಾಗಿದೆ @@ -5060,17 +5110,22 @@ ಈಗಲ್ಲ - ಇವರೊಂದಿಗೆ ಮಾತ್ರ ಹಂಚಿಕೊಳ್ಳಿ + ಇವರಿಗಷ್ಟೇ ಶೇರ್ ಮಾಡಿ - Private story · %1$d viewer + ಖಾಸಗಿ ಸ್ಟೋರಿ · %1$d ವೀಕ್ಷಕ ಖಾಸಗಿ ಸ್ಟೋರಿ · %1$d ವೀಕ್ಷಕರು - Group story · %1$d viewer + ಗ್ರೂಪ್ ಸ್ಟೋರಿ · %1$d ವೀಕ್ಷಕ ಗ್ರೂಪ್ ಸ್ಟೋರಿ · %1$d ವೀಕ್ಷಕರು + + + %1$d ಸದಸ್ಯ + %1$d ಸದಸ್ಯರು + %1$s · %2$d viewer @@ -5079,11 +5134,11 @@ ನಿಮ್ಮ ವೀಕ್ಷಕರನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ - ಸ್ಟೋರಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು + ಸ್ಟೋರಿ ಸೆಟ್ಟಿಂಗ್‌ ಗಳು ಸ್ಟೋರಿ ತೆಗೆದುಹಾಕಿ - ಸ್ಟೋರಿ ಅಳಿಸಿ + ಸ್ಟೋರಿ ಅಳಿಸಿಹಾಕಿರಿ ಗ್ರೂಪ್ ಸ್ಟೋರಿ ತೆಗೆದುಹಾಕೋಣವೇ? @@ -5091,9 +5146,9 @@ ತೆಗೆದುಹಾಕಿ - ಸ್ಟೋರಿ ಅಳಿಸುವುದೇ? + ಸ್ಟೋರಿ ಅಳಿಸಿಹಾಕಬೇಕೇ? - ಖಾಸಗಿ ಸ್ಟೋರಿ \"%1$s\" ಅಳಿಸುವುದೇ? + ಖಾಸಗಿ ಸ್ಟೋರಿ \"%1$s\" ಅಳಿಸಿಹಾಕಬೇಕೇ? ಅಳಿಸು @@ -5169,7 +5224,7 @@ ನನ್ನ ಸ್ಟೋರಿ ಗೌಪ್ಯತೆ - ಮೈ ಸ್ಟೋರಿ ಪೋಸ್ಟ್‌ಗಳನ್ನು ಯಾರು ನೋಡಬಹುದು ಎಂದು ಆಯ್ಕೆ ಮಾಡಿರಿ. ನೀವು ಸೆಟ್ಟಿಂಗ್‌‍ ಗಳಲ್ಲಿ ಯಾವಾಗ ಬೇಕಾದರೂ ಬದಲಾವಣೆ ಮಾಡಬಹುದು. + ಮೈ ಸ್ಟೋರಿ ಪೋಸ್ಟ್ ಗಳನ್ನು ಯಾರು ನೋಡಬಹುದು ಎಂದು ಆಯ್ಕೆ ಮಾಡಿರಿ. ನೀವು ಸೆಟ್ಟಿಂಗ್ ಗಳಲ್ಲಿ ಯಾವಾಗ ಬೇಕಾದರೂ ಬದಲಾವಣೆ ಮಾಡಬಹುದು. ಎಲ್ಲಾ Signal ಸಂಪರ್ಕಗಳು @@ -5194,11 +5249,11 @@ - 24 ಗಂಟೆಗಳ ನಂತರ ಸ್ಟೋರೀಸ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮರೆಯಾಗುತ್ತವೆ. ನಿಮ್ಮ ಸ್ಟೋರಿಯನ್ನು ಯಾರು ವೀಕ್ಷಿಸಬಹುದು ಎಂದು ಆಯ್ಕೆ ಮಾಡಿ ಅಥವಾ ನಿರ್ದಿಷ್ಟ ವೀಕ್ಷಕರು ಅಥವಾ ಗ್ರೂಪ್‌ಗಳೊಂದಿಗೆ ಹೊಸ ಸ್ಟೋರೀಸ್ ರಚಿಸಿ. + 24 ಗಂಟೆಗಳ ನಂತರ ಸ್ಟೋರೀಸ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮರೆಯಾಗುತ್ತವೆ. ನಿಮ್ಮ ಸ್ಟೋರಿಯನ್ನು ಯಾರು ವೀಕ್ಷಿಸಬಹುದು ಎಂದು ಆಯ್ಕೆ ಮಾಡಿ ಅಥವಾ ನಿರ್ದಿಷ್ಟ ವೀಕ್ಷಕರು ಅಥವಾ ಗ್ರೂಪ್ ಗಳೊಂದಿಗೆ ಹೊಸ ಸ್ಟೋರೀಸ್ ರಚಿಸಿ. ಸ್ಟೋರೀಸ್ ಆಫ್ ಮಾಡಿ - ಸ್ಟೋರೀಸ್‌ನಿಂದ ಹೊರಗುಳಿಯಲು ನೀವು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ನಿಮಗೆ ಇನ್ನು ಸ್ಟೋರೀಸ್ ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ವೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. + ಸ್ಟೋರೀಸ್ ನಿಂದ ಹೊರಗುಳಿಯಲು ನೀವು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ಇನ್ನು ನಿಮಗೆ ಸ್ಟೋರೀಸ್ ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ವೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಸ್ಟೋರೀಸ್ ಆನ್ ಮಾಡಿ @@ -5206,7 +5261,7 @@ ಸ್ಟೋರೀಸ್ ಆಫ್ ಮಾಡಬಹುದೇ? - ನಿಮಗಿನ್ನು ಸ್ಟೋರೀಸ್ ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ವೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ನೀವು ಇತ್ತೀಚೆಗೆ ಕಳುಹಿಸಿದ ಯಾವುದೇ ಸ್ಟೋರೀಗಳ‌ ಅವಧಿ ಮುಗಿಯುವ ತನಕ ಇತತರತು ಅದನ್ನು ವೀಕ್ಷಿಸಬಹುದಾಗಿದೆ. + ಸ್ಟೋರೀಸ್ ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ವೀಕ್ಷಿಸಲು ನಿಮಗೆ ಇನ್ನು ಸಾಧ್ಯವಿಲ್ಲ. ನೀವು ಇತ್ತೀಚೆಗೆ ಹಂಚಿಕೊಂಡ ಸ್ಟೋರಿ ಅಪ್ಡೇಟ್ ಗಳನ್ನು ಕೂಡಾ ಅಳಿಸಿಹಾಕಲಾಗುತ್ತದೆ. ಸ್ಟೋರಿ ಗೌಪ್ಯತೆ @@ -5214,7 +5269,7 @@ ಈ ಸ್ಟೋರಿಯನ್ನು ಯಾರು ವೀಕ್ಷಿಸಬಹುದು - "ಗ್ರೂಪ್ \"%1$s\" ನ ಸದಸ್ಯರು ಈ ಸ್ಟೋರಿಯನ್ನು ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ಉತ್ತರಿಸಬಹುದು. ಈ ಗ್ರೂಪ್‌ನಲ್ಲಿನ ಈ ಚಾಟ್‌ಗೆ ನೀವು ಸದಸ್ಯತ್ವವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಬಹುದು." + "ಗ್ರೂಪ್ %1$s ನ ಸದಸ್ಯರು ಈ ಸ್ಟೋರಿಯನ್ನು ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ಉತ್ತರಿಸಬಹುದು. ಈ ಗ್ರೂಪ್ ನಲ್ಲಿನ ಈ ಚಾಟ್ ಗೆ ನೀವು ಸದಸ್ಯತ್ವವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಬಹುದು." ಗ್ರೂಪ್ ಸ್ಟೋರಿ ತೆಗೆದುಹಾಕಿ diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index ce58b2d9b0..31390b3260 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -192,7 +192,7 @@ 업데이트 업데이트하지 않음 경고 - Signal 버전이 만료되었습니다. 지금까지의 메세지를 읽을 수는 있지만 업데이트 하기 전까지 메세지를 보내거나 받을 수 없습니다. + Signal 버전이 만료되었습니다. 이전 메세지 기록은 읽을 수 있지만 업데이트하기 전까지 메세지를 보내거나 받을 수 없습니다. 웹 브라우저를 찾을 수 없습니다. @@ -650,7 +650,7 @@ 새 그룹이 무엇인가요? 새 그룹에는 @멘션 및 그룹 관리자와 같은 기능이 있으며 향후 더 많은 기능을 지원할 예정입니다. - 모든 메시지 기록 및 미디어는 업그레이드 전에 보관되었습니다. + 모든 업그레이드 전 메시지 기록과 미디어를 보관했습니다. 그룹에 다시 가입하려면 초대를 수락해야 하며 수락할 때까지 그룹 메시지를 받지 않습니다. 이 멤버들이 그룹에 다시 가입하려면 초대를 수락해야 하며 수락할 때까지 그룹 메시지를 받지 않습니다. @@ -663,7 +663,7 @@ 새 그룹으로 업그레이드 그룹 업그레이드 새 그룹에는 @멘션 및 그룹 관리자와 같은 기능이 있으며 향후 더 많은 기능을 지원할 예정입니다. - 모든 메시지 기록 및 미디어는 업그레이드 전에 보관됩니다. + 모든 업그레이드 전 메시지 기록과 미디어를 보관합니다. 네트워크 오류가 발생했습니다. 나중에 다시 시도하세요. 업그레이드하지 못했습니다. @@ -1288,9 +1288,9 @@ 새로운 기능이 마음에 드시나요? 1회성 기부로 Signal을 지원해 주세요. - %1$s 님과 해당 사용자 번호 %2$s의 메시지 기록이 병합되었습니다. + %1$s 님과 해당 사용자 번호 %2$s의 메시지 기록을 병합했습니다. - %1$s 님 및 해당 사용자에게 속하는 다른 채팅이 병합되었습니다. + %1$s 님과의 메시지 기록과 해당 사용자가 속하는 다른 채팅의 메시지 기록을 병합했습니다. %1$s 님이 그룹 통화를 시작했습니다(%2$s). @@ -1886,6 +1886,7 @@ 보낸 사람: %1$s 님, 받는 사람: 나 미디어를 더 이상 이용할 수 없습니다. 미디어를 공유할 수 있는 앱을 찾을 수 없습니다. + 닫기 대화 %2$d개 내 새 메시지 %1$d개 @@ -2579,12 +2580,12 @@ 오디오 저장 공간 검토 오래된 메시지를 삭제하시겠습니까? - 메시기 기록을 지우시겠습니까? - 이를 통해 %1$s보다 오래된 모든 메시지 기록과 미디어가 기기에서 영구적으로 삭제됩니다. + 메시기 기록을 삭제할까요? + %1$s보다 오래된 모든 메시지 기록과 미디어를 기기에서 영구적으로 삭제합니다. 이를 통해 모든 대화가 %1$s개의 가장 최근 메시지만 제외하고 영구적으로 삭제됩니다. - 이 대화의 모든 메시지와 미디어가 영구 삭제됩니다. - 모든 메시지 기록을 삭제하시겠습니까? - 모든 메시지 기록이 영구 삭제됩니다. 다시 되돌릴 수 없습니다. + 이 기기의 모든 메시지 기록과 미디어를 영구 삭제합니다. + 모든 메시지 기록을 삭제할까요? + 모든 메시지 기록을 영구 삭제합니다. 이 작업은 다시 되돌릴 수 없습니다. 모두 지우기 영원히 1년 @@ -2662,10 +2663,14 @@ 옵션 설정하기 + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ 나중에 + + + 보안 설정 + + 자금 보호 + + 사용자의 휴대폰을 손에 넣은 사람이 자금에 액세스할 수 없도록 보안을 한층 강화하세요. 이 옵션은 설정에서 비활성화 할 수 있습니다. + + 결제 잠금 사용 + + 나중에 + + 이 단계를 건너뛸까요? + + 이 단계를 건너 뛰면 사용자의 휴대폰 기기를 손에 넣은 사람이 자금을 이체하거나 복구 단계를 볼 수 있습니다. + + 취소 + + 건너뛰기 + 자금 추가 지갑 주소 @@ -4649,7 +4674,7 @@ 스토리를 삭제할까요? - 나를 포함해 이 스토리를 받은 모든 사람에게서 해당 스토리가 삭제됩니다. + 나를 포함해 이 스토리를 받은 모든 사람에게서 해당 스토리를 삭제합니다. 저장할 수 없음 @@ -4692,6 +4717,8 @@ 볼 수 있는 사람 제거 답장 없음 + + 더 이상 이 그룹의 멤버가 아니므로 이 스토리에 답장할 수 없습니다. 스토리에 반응함 @@ -4710,10 +4737,16 @@ 삭제 내 스토리 + + + %1$d viewers + + + View 이 스토리를 볼 수 있는 사람 - 스토리 숨길 대상 + 다음 사용자에게서 스토리 숨기기 모든 Signal 커넥션 @@ -4742,8 +4775,6 @@ 답장 및 반응 허용 스토리를 볼 수 있는 사용자의 반응 및 답장 허용 - - 특정 사용자에게 내 스토리가 표시되지 않습니다. 내 스토리는 기본적으로 %1$s와(과) 공유됩니다. Signal 커넥션 @@ -4763,7 +4794,7 @@ %1$s 님을 제거할까요? - 이 사용자는 더 이상 내 스토리를 볼 수 없게 됩니다. + 이 사용자는 더 이상 내 스토리를 볼 수 없습니다. 삭제 @@ -4791,7 +4822,7 @@ URL 입력 또는 붙여넣기 - 스토리를 볼 수 있도록 링크 공유 + 내 스토리를 볼 수 있는 사람과 링크 공유 검색 @@ -4802,6 +4833,22 @@ 다음 사용자와만 공유… 확인 + + 그룹 스토리를 제거할까요? + + \'%1$s\'을(를) 제거합니다. + + 삭제 + + 비공개 스토리를 삭제할까요? + + \'%1$s\' 및 이 스토리에 공유된 업데이트를 삭제합니다. + + 삭제 + + 스토리는 Signal 베타 사용자에게만 제공됩니다. + + 스토리를 공유하면 Signal 베타를 사용 중인 사용자에게만 스토리가 제공됩니다. 스토리에 추가할까요? @@ -4814,6 +4861,8 @@ 스토리를 보낼 수 없습니다. 연결을 확인하고 다시 시도하세요. 보내기 + + 끄기 및 삭제 스토리 공유 및 보기 @@ -4827,7 +4876,7 @@ 볼 수 있는 사람 %1$d명 - 스토리 이름 짓기 + 스토리 이름 지정 스토리 이름(필수) @@ -4887,7 +4936,7 @@ 내 스토리에 반응함 - 스토리에 반응했습니다. + 스토리에 반응함 @@ -4958,6 +5007,10 @@ 그룹 스토리 · 볼 수 있는 사람 %1$d명 + + + 멤버 %1$d명 + %1$s · 볼 수 있는 사람 %2$d명 @@ -4973,7 +5026,7 @@ 그룹 스토리를 제거할까요? - 이 목록에서 스토리를 지웁니다. 이 그룹의 스토리는 계속 볼 수 있습니다. + 이 목록에서 스토리를 제거합니다. 이 그룹의 스토리는 계속 볼 수 있습니다. 삭제 @@ -5022,7 +5075,7 @@ 모든 커넥션을 검토했습니다. 보내기를 탭하여 계속하세요. - Signal을 다시 설치했거나 기기를 변경했을 수 있는 커넥션이 %1$d개 있습니다. 스토리를 공유하기 전에 해당 사용자의 안전 번호를 검토하거나 스토리에서 이들을 제거하세요. + Signal을 다시 설치하거나 기기를 변경했을 수 있는 커넥션이 %1$d개 있습니다. 스토리를 공유하기 전에 해당 사용자의 안전 번호를 검토하거나 스토리에서 이들을 제거하세요. 안전 번호 확인 @@ -5076,11 +5129,11 @@ - 스토리는 24시간이 지나면 자동으로 사라집니다. 스토리를 볼 수 있는 사람을 선택하거나, 스토리룰 볼 수 있는 사람이나 그룹을 지정하여 새 스토리를 만드세요. + 스토리는 24시간이 지나면 자동으로 사라집니다. 스토리를 볼 수 있는 사람을 선택하거나, 스토리를 볼 수 있는 사람이나 그룹을 지정하여 새 스토리를 만드세요. 스토리 끄기 - 스토리 기능을 끄면 더 이상 스토리를 보거나 공유할 수 없게 됩니다. + 스토리 기능을 끄면 더 이상 스토리를 보거나 공유할 수 없습니다. 스토리 켜기 @@ -5088,7 +5141,7 @@ 스토리를 끌까요? - 더 이상 스토리를 공유하거나 볼 수 없게 됩니다. 최근 공유한 스토리는 24시간 후 자동 삭제될 때까지 스토리를 받은 모든 사람에게 표시됩니다. + 더 이상 스토리를 공유하거나 볼 수 없습니다. 최근 공유한 스토리 업데이트도 삭제합니다. 스토리 개인정보보호 @@ -5096,7 +5149,7 @@ 이 스토리를 볼 수 있는 사람 - "\"%1$s\" 그룹 멤버는 이 스토리를 보고 답장할 수 있습니다. 그룹에서 이 채팅에 대한 멤버십을 업데이트할 수 있습니다." + "'%1$s' 그룹 멤버는 이 스토리를 보고 여기에 답장할 수 있습니다. 그룹에서 이 채팅에 대한 멤버십을 업데이트할 수 있습니다." 그룹 스토리 제거 diff --git a/app/src/main/res/values-ky/strings.xml b/app/src/main/res/values-ky/strings.xml index e849dcfc3e..6fbd3509f9 100644 --- a/app/src/main/res/values-ky/strings.xml +++ b/app/src/main/res/values-ky/strings.xml @@ -1782,9 +1782,9 @@ Белекке төшбелги алдыңыз - Окуяңызга %1$s деген сезимин билдирди + Окуяңызга %1$s деген реакция кылды - Окуясына %1$s деген сезимин билдирди + Окуясына %1$s деген реакция кылды Molly\'ды жаңыртуу @@ -1886,6 +1886,7 @@ %1$s сизге Мындай медиафайл жок. Ушул медиафайлды бөлүшө турган колдонмо табылган жок. + Жабуу %2$d сүйлөшүүдө %1$d жаңы билдирүү @@ -2571,7 +2572,7 @@ Wi-Fi колдонууда Роуминг колдонууда Медианы авто-жүктөө - Билдирүү таржымалы + Билдирүүлөр таржымалы Сактагычтын колдонулушу Сүрөттөр Видеолор @@ -2579,12 +2580,12 @@ Аудио Сактагычты карап көрүү Эски билдирүүлөрдү өчүрөсүзбү? - Билдирүү таржымалы тазалансынбы? - Түзмөгүңүздөн %1$s эскирген бардык билдирүү таржымалы жана медиа биротоло жок кылынат. + Билдирүүлөр таржымалын тазалайсызбы? + Түзмөгүңүздөн %1$s эскирген бардык билдирүүлөр жана медиа файлдар өчүрүлөт. Бул аракет эң акыркы билдирүүлөрүн бардык сүйлөшүүлөрүн %1$s чейин биротоло кыскартат. - Түзмөгүңүздөн бардык билдирүү таржымалы жана медиа биротоло жок кылынат. - Бардык билдирүү таржымалын чын эле өчүргүңүз келеби? - Бардык билдирүү таржымалы биротоло өчүрүлөт. Бул аракетти артка кайтаруу мүмкүн эмес. + Түзмөгүңүздөн бардык билдирүүлөр жана медиа файлдар биротоло өчүрүлөт. + Бардык билдирүүлөрдү чын эле өчүрөсүзбү? + Бардык билдирүүлөр биротоло өчүп, аларды кайра калыбына келтире албайсыз. Бардыгын өчүрүү Биротоло 1 жылга @@ -2662,10 +2663,14 @@ Ыңгайлаштыруу опциясы + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ Азыр эмес + + + Коопсуздук параметрлери + + Каражаттарыңызды коргоңуз + + Дагы бир коргоо этабы менен телефонуңуздагы каражаттарыңызды бекемирээк коргоңуз. Бул параметрди Тууралоо бөлүмүнөн өчүрүп койсоңуз болот. + + Төлөмдү кулпулоону иштетүү + + Азыр эмес + + Бул кадамды өткөрүп жибересизби? + + Бул кадамды өткөрүп жиберсеңиз, телефонуңузга каалаган адам кирип, каражаттарыңызды өткөрүп алышы же калыбына келтирүүчү сүйлөмдү көрүшү мүмкүн. + + Жокко чыгаруу + + Өткөрүп жиберүү + Каражат кошуу Капчыгыңыздын дареги @@ -3879,7 +3904,7 @@ Жаңы маектер үчүн демейки таймер Сиз баштаган бардык жаңы маектер үчүн демейки жоголуп кетүүчү билдирүүлөр таймерин коюңуз. - Окуяларыңызды тескеп, кимдер көрө ала турганын чечиңиз + Окуяларыңызды тескеп, аларды кимдер көрө ала турганын чечиңиз Акча жөнөтүү үчүн Android түзмөгүнүн экран кулпусун же манжа изин талап кылуу Төлөм кулпусу иштебей жатат @@ -4157,7 +4182,7 @@ Билдирүү кошуу Тезирээк багытоо - Видеолор 30 секунддук клиптер түрүндө кесилип, бир нече окуялар түрүндө жөнөтүлөт. + Видеолор 30 секунддук клиптерге ажыратылып, бир нече окуя түрүндө жөнөтүлөт. Окуялар түрүндө жөнөтүлүүчү видеолор 30 секунддан ашпашы керек. Багытталган билдирүүлөр азыр дароо жөнөтүлөт. @@ -4631,13 +4656,13 @@ Окуя жашырылсынбы? - %1$s жаңыртуулары мындан ары окуялар тизмесинин башында көрүнбөйт. + %1$s бөлүшкөн жаңы окуялар мындан ары окуялардын башында көрүнбөйт. Жашыруу Окуя жашырылган - Жашыруун окуялар + Жашырылган окуялар %1$d көрүү @@ -4692,6 +4717,8 @@ Көрүүчүнү алып салуу Азырынча жооп жок + + Бул топтон чыгып кеткениңизден улам, бул окуяга жооп бере албайсыз. Окуяга реакция кылды @@ -4710,6 +4737,12 @@ Өчүрүү Менин окуям + + + %1$d viewers + + + View Бул окуяны кимдер көрө алат @@ -4741,9 +4774,7 @@ Жоопторго жана реакцияларга уруксат берүү - Окуяңызды көрө алган адамдарга жооп берип, реакция кылууга мүмкүнчүлүк берүү - - Окуяңызды белгилүү бир адамдардан жашырып койсоңуз болот. Демейки боюнча, окуяңыз %1$s менен бөлүшүлөт + Окуяңызды көрө алган адамдарга жооп берип, реакция кылуу үчүн мүмкүнчүлүк бериңиз Signal байланыштары @@ -4755,7 +4786,7 @@ Алардын тутумдук байланыштарыңызда болушу - "Сиздин байланыштарыңыз аты-жөнүңүздү жана сүрөтүңүздү көрө алат жана алардан жашырбасаңыз, \"Менин окуям\" постторун көрө алышат." + "Байланыштарыңыз аты-жөнүңүз менен сүрөтүңүздү көрүп, алардан жашырбасаңыз, \"Менин окуям\" бөлүмүндөгү постторду көрө алышат." Көрүүчү кошуу @@ -4771,7 +4802,7 @@ Бул аракетти артка кайтарууга болбойт. - Окуянын атын түзөтүү + Окуянын аталышын түзөтүү Окуянын аталышы @@ -4791,7 +4822,7 @@ URL дарегин териңиз же чаптаңыз - Окуяңызды көрүүчүлөр менен шилтемени бөлүшүңүз + Окуяңыздын көүүчүлөрү менен шилтемени бөлүшүңүз Издөө @@ -4802,18 +4833,36 @@ Ушул адамдарга гана көрүнсүн… Бүттү + + Топтогу окуяны алып саласызбы? + + \"%1$s\" өчүрүлөт. + + Өчүрүү + + Жеке окуяны өчүрөсүзбү? + + \"%1$s\" жана ушул окуяда бөлүшүлгөн жаңылыктар да өчүп калат. + + Өчүрүү + + Окуяларды Signal\'дын бета версиясынын колдонуучулары гана көрө алышат. + + Окуя бөлүшсөңүз, Signal\'дын бета версиясындагы адамдарга гана көрүнөт. Окуяга кошулсунбу? - Окуяңызга мазмун кошуу Signal байланыштарыңызга аны 24 саат бою көрүүгө мүмкүнчүлүк берет. Окуяңызды ким көрө аларын \"Тууралоодон\" өзгөртө аласыз. + Окуяңызга ар кандай нерселерди кошуп турсаңыз, ал Signal байланыштарыңызга 24 саат бою көрүнүп турат. Окуяңызды кимдер көрө аларын \"Тууралоо\" бөлүмүнөн өзгөртө аласыз. Окуяга кошуу Көрүүчүлөрдү түзөтүү - Окуя жөнөтүлбөй койду. Туташууңузду текшерип, кайра аракет кылыңыз. + Окуя жөнөтүлгөн жок. Байланышты текшерип, кайталап көрүңүз. Жөнөтүү + + Өчүрүү жана жок кылуу Окуяларды бөлүшүү жана көрүү @@ -4837,7 +4886,7 @@ Бул жер бош калбашы керек. - Бул аталыштагы окуя бар. + Мындай аталыштагы окуя бар. Баарын тандоо @@ -4949,7 +4998,7 @@ Азыр эмес - Ушул адамдар менен гана бөлүшүү: + Ким менен бөлүшөсүз: Жеке окуя · %1$d жолу көрүлдү @@ -4958,6 +5007,10 @@ Топтук окуя · %1$d жолу көрүлдү + + + %1$d мүчө + %1$s · %2$d жолу көрүлдү @@ -4965,7 +5018,7 @@ Кимдер көрө ала турганын тандоо үчүн басыңыз - Окуя тууралоо + Окуяны тууралоо Окуяны алып салуу @@ -5088,7 +5141,7 @@ Окуяларды өчүрөсүзбү? - Окуяларды бөлүшө да, көрө да албай каласыз. Буга чейин жөнөткөн соңку окуялар мөөнөтү бүткөнгө чейин башкаларга көрүнө берет. + Окуяларды бөлүшө албай же көрө албай каласыз. Окуяларда жакында бөлүшүлгөн жаңылыктар да өчүп калат. Окуянын купуялыгы diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index db3be4443d..b0a27e0cb2 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -2108,6 +2108,7 @@ %1$s siuntė jums Medija daugiau nebeprieinama. Nepavyksta rasti programėlės, galinčios bendrinti šią mediją. + Užverti %1$d naujų(-os) žinutės(-ių) %2$d pokalbyje(-iuose) @@ -2920,10 +2921,14 @@ Tinkinti parinktį + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3076,6 +3081,26 @@ Ne dabar + + + Saugumo konfigūracija + + Apsaugok savo pinigus + + Pridėk papildomą saugumo lygmenį, kad kitam žmogui perėmus tavo telefoną apsaugotum savo pinigus. Šią parinktį gali išjungti nustatymuose. + + Įjunk mokėjimo užraktą + + Ne dabar + + Praleisti šį žingsnį? + + Praleidus šį žingsnį yra rizika, kad kitas žmogus, turėdamas tavo telefoną, galės pervesti pinigus ar pažiūrėti tavo atkūrimo frazę. + + Atsisakyti + + Praleisti + Pridėti lėšų Jūsų piniginės adresas @@ -5013,6 +5038,8 @@ Pašalinti žiūrovą Atsakymų kol kas nėra + + Negali atsakyti į šią istoriją, nes nebesi šios grupės narys. Sureagavo į istoriją @@ -5031,6 +5058,15 @@ Ištrinti Mano istorija + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + + + View Kas gali žiūrėti šią istoriją @@ -5069,8 +5105,6 @@ Leisti atsakymus ir reakcijas Leisti žmonėms, kurie gali peržiūrėti jūsų istoriją, reaguoti ir atsakyti - - Slėpkite savo istoriją nuo konkrečių žmonių. Pagal numatymą, jūsų istorija yra bendrinama su jūsų %1$s „Signal“ kontaktai @@ -5129,6 +5163,22 @@ Bendrinti tik su… Atlikta + + Pašalinti grupės istoriją? + + „%1$s“ bus pašalinta. + + Šalinti + + Ištrinti privačią istoriją? + + „%1$s“ ir šios istorijos atnaujinimai bus ištrinti. + + Ištrinti + + Istorijos prieinamos tik „Signal“ beta versijos naudotojams. + + Jei pasidalinsi istorija, ją matys tik „Signal“ beta versiją naudojantys žmonės. Pridėti į istoriją? @@ -5141,6 +5191,8 @@ Nepavyko išsiųsti istorijos. Patikrinkite interneto ryšį ir bandykite dar kartą. Siųsti + + Išjungti ir ištrinti Bendrinti ir žiūrėti istorijas @@ -5297,6 +5349,13 @@ Grupės istorija · žiūrovų: %1$d Grupės istorija · žiūrovų: %1$d + + + %1$d narys + %1$d nariai + %1$d nario + %1$d narių + %1$s · Peržiūrėjo: %2$d @@ -5442,7 +5501,7 @@ Išjungti Istorijas? - Nebegalėsi nei bendrinti, nei žiūrėti istorijų. Visos neseniai tavo nusiųstos istorijos tebebus matomos kitiems tol, kol galios. + Nebegalėsi nei bendrinti, nei žiūrėti istorijų. Tai, ką pastaruoju metu bendrinai šioje istorijoje, taip pat bus ištrinta. Istorijų privatumas diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index f21f69992d..962c1a375a 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -696,7 +696,7 @@ Kas ir \"Jaunās grupas\" Jaunajām grupām ir funkcijas kā @pieminēšana un grupu administratori, un nākotnē atbalstīs papildus funkcijas. - Visa ziņu vēsure un faili tika paturēti. + Visa ziņu vēsure un faili tika saglabāta pirms atjaunināšanas. Jums būs jāpieņem uzaicinājums vēlreiz pievienoties šai grupai un nesaņemsiet šīs grupas ziņas, kamēr uzaicinājumu nepieņemsiet. Šim dalībniekam būs jāpieņem uzaicinājums vēlreiz pievienoties šai grupai, un dalībnieks nesaņems šīs grupas ziņas, kamēr nepieņems uzaicinājumu: @@ -713,7 +713,7 @@ Pārveidot par jauno grupu Pārveidot šo grupu Jaunajām grupām ir funkcijas kā @pieminēšana un grupu administratori, un nākotnē atbalstīs papildus funkcijas. - Visa ziņu vēsture un multivide tiks saglabāta kā bija pirms pārveidošanas. + Visa ziņu vēsture un multivide tiks saglabāta pirms atjaunināšanas. Radās tīkla kļūda. Vēlāk mēģiniet vēlreiz. Neizdevās jaunināt. @@ -2034,6 +2034,7 @@ %1$s jums Mediju fails vairs nav pieejams Nevar atrast lietotni, kas varētu kopīgot šo multivides saturu. + Aizvērt %1$d jaunas ziņas %2$dsarunās @@ -2743,7 +2744,7 @@ Izmantojot Wi-Fi Izmantojot viesabonēšanau Multivides automātiskā lejupielāde - Ziņas vēsture + Ziņu vēsture Krātuves lietojums Attēli Video @@ -2834,10 +2835,14 @@ Pielāgot opciju + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2990,6 +2995,26 @@ Ne tagad + + + Drošības iestatījumi + + Aizsargājiet savu naudu + + Palīdziet nepieļaut, lai cita persona ar jūsu tālruni piekļūtu jūsu naudas līdzekļiem, pievienojot vēl vienu drošības līmeni. Šo opciju varat izslēgt iestatījumos. + + Ieslēgt maksājumu bloķēšanu + + Ne tagad + + Vai izlaist šo darbību? + + Izlaižot šo darbību, ikviens, kam ir fiziska piekļuve jūsu tālrunim, var pārskaitīt naudas līdzekļus vai skatīt jūsu atgūšanas frāzi. + + Atcelt + + Izlaist + Papildināt līdzekļus Jūsu maciņa adrese @@ -4837,9 +4862,9 @@ Pieskarieties, lai mēģinātu vēlreiz - Paslēpt stāstu? + Vai paslēpt stāstu? - Stāstu atjauninājumi no %1$s vairs neparādīsies stāstu saraktsta augšgalā. + %1$s stāstu atjauninājumi vairs neparādīsies stāstu saraksta augšgalā. Slēpt @@ -4893,7 +4918,7 @@ Vēl nav skatījumu - Iespējojiet skatīšanas apliecinājumus, lai uzzinātu, kuri lietotāji ir redzējuši jūsu stāstus. + Ieslēdziet lasīšanas apliecinājumus, lai uzzinātu, kuri lietotāji ir redzējuši jūsu stāstus. Atvērt iestatījumus @@ -4906,6 +4931,8 @@ Noņemt skatītāju Vēl nav atbilžu + + Jūs nevarat atbildēt uz šo stāstu, jo vairs neesat šīs grupas dalībnieks. Reaģēja uz stāstu @@ -4924,6 +4951,14 @@ Dzēst Mans stāsts + + + %1$d viewers + %1$d viewer + %1$d viewers + + + View Kas var skatīt šo stāstu @@ -4959,9 +4994,7 @@ Atļaut atbildes un reakcijas - Ļaut cilvēkiem, kuri var skatīt jūsu stāstu, reaģēt un atbildēt - - Paslēpt jūsu stāstu no specifiskiem cilvēkiem. Pēc noklusējuma, jūsu stāsts ir kopīgots ar jūsu %1$s + Ļaut reaģēt un atbildēt tiem cilvēkiem, kuri var skatīt jūsu stāstu Signal draugi @@ -4973,7 +5006,7 @@ Pievienošanas savā kontaktu sarakstā - "Jūsu pazīstamie var redzēt jūsu vārdu un bildi, un var redzēt jaunumus \"Mani stāsti\" sadaļā, ja vien jūs to neesat paslēpis no viņiem." + "Jūsu kontakti var redzēt jūsu vārdu un attēlu, un var redzēt jaunumus \"Mani stāsti\" sadaļā, ja vien jūs to neesat paslēpis no viņiem." Pievienot skatītāju @@ -5020,22 +5053,40 @@ Kopīgot tikai ar… Darīts + + Vai noņemt grupas stāstu? + + \"%1$s\" tiks noņemts. + + Noņemt + + Vai dzēst privāto stāstu? + + \"%1$s\" un ar šo stāstu saistītie ieraksti tiks dzēsti. + + Dzēst + + Stāsti ir pieejami tikai Signal beta lietotājiem. + + Ja kopīgosiet stāstu, tas būs pieejams tikai personām, kuras izmanto Signal beta versiju. Pievienot stāstam? - Pievienojot saturu jūsu stāstam ļauj Signal pazīstamajiem to apskatīt 24 stundas. Iestatījumos jūs varat mainīt to, kurš var apskatīt jūsu stāstu. + Satura pievienošana jūsu stāstam ļauj Signal kontaktiem to apskatīt 24 stundas. Iestatījumos varat mainīt to, kas var apskatīt jūsu stāstu. Pievienot stāstam Rediģēt skatītājus - Stāstu nevarēja nosūtīt. Pārbaudiet jūsu pieslēgumu un mēģiniet vēlreiz. + Stāstu nevarēja nosūtīt. Pārbaudiet pieslēgumu un mēģiniet vēlreiz. Sūtīt + + Izslēgt un izdzēst - Kopīgot & skatīt stāstus + Kopīgot un skatīt stāstus - Jūs vairs nevarēsiet kopīgot un skatīt stāstus, kad šī opcija ir izslēgta. + Jūs vairs nevarēsiet kopīgot un skatīt stāstus, ja šī opcija būs izslēgta. Izvēlēties skatītājus @@ -5049,7 +5100,7 @@ Stāsta nosaukums - Stāsta nosaukums (nepieciešams) + Stāsta nosaukums (obligāts) Skatītāji @@ -5174,16 +5225,22 @@ Kopīgot tikai ar - Privāts stāsts · %1$d skatītājs + Privāts stāsts · %1$d skatītāji Privāts stāsts · %1$d skatītājs Privāts stāsts · %1$d skatītāji - Grupas stāsts · %1$d skatītājs + Grupas stāsts · %1$d skatītāji Grupas stāsts · %1$d skatītājs Grupas stāsts · %1$d skatītāji + + + %1$d dalībnieki + %1$d dalībnieks + %1$d dalībnieki + %1$s · %2$d skatītāji @@ -5324,7 +5381,7 @@ Vai izslēgt stāstus? - Jūs nevarēsiet kopīgot vai skatīt stāstus. Citi lietotāji varēs redzēt visus jūsu nesen nosūtītos stāstus līdz to termiņa beigām. + Jūs nevarēsiet kopīgot vai skatīt stāstus. Tiks dzēsti arī jūsu nesen veiktie ar stāstu saistītie ieraksti. Stāsta privātums @@ -5347,7 +5404,7 @@ Eksportējiet SMS ziņas - Varat eksportēt SMS ziņas uz tālruņa SMS datu bāzi. Tas ļauj citām jūsu tālruņa SMS lietotnēm piekļūt tām un importēt tās. Tādējādi netiek izveidots koplietojams SMS ziņu vēstures fails. + Varat eksportēt SMS ziņas uz tālruņa SMS datu bāzi. Tas ļauj citām jūsu tālruņa SMS lietotnēm tām piekļūt un importēt. Tādējādi netiek izveidots koplietojams SMS ziņu vēstures fails. Turpināt diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 4201aa7500..43a96ad0f1 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -193,7 +193,7 @@ Aжурирај Не ажурирај Предупредување - Вашата верзија на Signal е истечена. Можете да ја видите историјата на пораки, но нема да можете да испраќате и примате пораки додека не ажурирате. + Вашата верзија на Signal е застарена. Можете да ја видите историјата на вашите пораки, но нема да можете да испраќате или примате пораки сè додека не ја ажурирате апликацијата. Не е пронајден веб прелистувач. @@ -1960,6 +1960,7 @@ %1$s до Вас Медијата повеќе не е достапна. Не е пронајдена апликација која може да го сподели овој тип на медија. + Затвори %1$d нови пораки во %2$d разговори @@ -2343,7 +2344,7 @@ Времето на испраќање е копирано во таблата со исечоци. - Новостите за Вашата приказна ќе бидат прикажани овде. + Новостите на вашата приказна ќе бидат прикажани овде. @@ -2665,10 +2666,10 @@ Аудио Прегледај склад Да ги отстранам старите пораки? - Да ја избришам историјата на пораки? - Ова трајно ќе ја избрише цела историја на разговори и медија од Вашиот уред постари од %1$s. + Сакате да ја исчистите историјата на пораки? + Ова трајно ќе ја избрише цела историја на пораки и медија од вашиот уред постари од %1$s. Ова трајно ќе ги скрати сите разговори до %1$s најскорешни пораки. - Ова трајно ќе ја избрише цела историја на пораки и медија од Вашиот уред. + Ова трајно ќе ја избрише цела историја на пораки и медија од вашиот уред. Дали сте сигурни дека сакате да ја избришете цела историја на пораки? Целата историја на пораки ќе биде трајно отстранета. Ова дејство е неповратно. Избриши сѐ веднаш @@ -2748,10 +2749,14 @@ Сопствена опција + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Не сега + + + Поставувања за безбедност + + Заштитете ги вашите средства + + Додајте дополнително ниво на безбедност за да спречите личност со вашиот телефон да има пристап до вашите средства. Можете да ја оневозможите оваа опција во Поставувањата. + + Овозможете заклучување за плаќање + + Не сега + + Сакате да го прескокнете овој чекор? + + Прескокнувањето на овој чекор овозможува секој што има физички пристап до вашиот телефон да префрла средства или да ја види вашата резервна фраза. + + Откажи + + Прескокни + Додај средства Адреса на Вашиот паричник @@ -3976,7 +4001,7 @@ Стандарден тајмер за нови разговори Поставете стандарден тајмер за пораки што исчезнуваат за сите нови разговори започнати од Вас. - Смени ги поставувањата за приказните и одреди кој може да ги види + Сменете ги поставувањата за приказните и одредете кој може да ги види Барајте заклучување на екранот на Android или отпечаток од прст за префрлање средства. Не може да се овозможи заклучување за плаќање @@ -4711,9 +4736,9 @@ Нема скорешни ажурирања за прикажување во моментов. - Сокриј приказна + Скријте ја приказна - Врати приказна + Вратете ја видливоста на приказната Препрати @@ -4733,9 +4758,9 @@ Допрете за да се обидете повторно - Да се сокрие приказната? + Сакате да ја скриете приказната? - Новите ажурирања на приказната од %1$s повеќе нема да се појавуваат на врвот на листата со приказни. + Новостите на приказната од %1$s повеќе нема да се појавуваат на врвот на листата со приказни. Сокриј @@ -4752,9 +4777,9 @@ Приказна на %1$s - Да се избрише приказната? + Сакате да ја избришете приказната? - Оваа приказна ќе биде избришана за Вас и сите кои ја примиле. + Оваа приказна ќе биде избришана за вас и сите кои ја примиле. Неуспешно зачувување @@ -4799,6 +4824,8 @@ Отстрани го гледачот Сè уште нема одговори + + Не можете да одговорите на приказната бидејќи повеќе не сте член на оваа група. Реагираше на приказната @@ -4817,10 +4844,17 @@ Избриши Моја приказна + + + %1$d viewer + %1$d viewers + + + View Кој може да ја види оваа приказна - Сокриј приказна од + Скријте ја приказната од Сите Signal врски @@ -4850,9 +4884,7 @@ Дозволи одговори и реакции - Дозволете им на луѓето кои можат да ја видат Вашата приказна да реагираат и одговорат - - Сокриј ја приказната од одредени луѓе. Стандардно, Вашата приказна се споделува со Вашите %1$s + Дозволете им на луѓето кои можат да ја видат вашата приказна да реагираат и одговорат Signal врски @@ -4864,7 +4896,7 @@ Ги имате во контактите на телефонот - "Вашите врски можат да го видат Вашето име и слика и да ги гледаат објавите во „Моја приказна”, освен ако не го сокриете тоа од нив." + "Вашите врски можат да ги видат вашето име и слика и да ги гледаат објавите во „Моја приказна”, освен ако не ги скриете од нив." Додај гледач @@ -4872,7 +4904,7 @@ Да се отстрани %1$s? - Оваа личност повеќе нема да ја види Вашата приказна. + Оваа личност повеќе нема да ја гледа вашата приказна. Отстрани @@ -4900,7 +4932,7 @@ Внеси или залепи URL - Споделете линк со гледачите на Вашата приказна + Споделете линк со гледачите на вашата приказна Барај @@ -4911,20 +4943,38 @@ Споделете само со… Готово + + Дали сакате да ја отстраните групната приказна? + + „%1$s“ ќе се отстрани. + + Отстрани + + Сакате да ја избришете приватната приказна? + + „%1$s“ и новостите споделени на оваа приказна ќе бидат избришани. + + Избриши + + Приказните се достапни само за бета корисниците на Signal. + + Ако споделите приказна, таа ќе биде достапна само за корисниците на Signal бета. - Да се додаде во приказната? + Сакате да се додаде на приказна? - Со додавање содржина во Вашата приказна им овозможувате на Вашите Signal врски да ја гледаат следните 24 часа. Можете да промените кој може да ја гледа Вашата приказна во поставките. + Со додавање содржина на вашата приказна им овозможувате на вашите Signal врски да ја гледаат следните 24 часа. Можете да промените кој може да ја гледа вашата приказна во поставувањата. - Додај во приказна + Додајте како приказна Уреди гледачи - Приказната не може да се испрати. Проверете ја Вашата интернет конекција и обидете се повторно. + Приказната не можеше да се испрати. Проверете ја интернет врската и обидете се повторно. Испрати + + Исклучи и избриши - Сподели и гледај приказни + Споделувајте и гледајте приказни Кога оваа опција е исклучена нема да можете да споделувате и гледате приказни. @@ -4937,7 +4987,7 @@ %1$d гледачи - Именувај ја приказната + Именувајте ја приказната Име на приказна (задолжително) @@ -4951,7 +5001,7 @@ Избери сѐ - Изберете го Вашиот тип на приказна + Изберете го типот на вашата приказна Нова приватна приказна @@ -4977,9 +5027,9 @@ Приказната е испратена - Не успеа да се испрати приказната + Испраќањето на приказната е неуспешно - Види приказна + Видете ја приказната Види профилна слика @@ -4995,7 +5045,7 @@ Реагиравте на приказната на %1$s - Реагираше на Вашата приказна + Реагираше на вашата приказна Реагираше на приказна @@ -5060,10 +5110,10 @@ Не сега - Споделете само со… + Споделете само со - Приватна приказна · %1$dгледач + Приватна приказна · %1$d гледач Приватна приказна · %1$d гледачи @@ -5071,6 +5121,11 @@ Групна приказна · %1$d гледач Групна приказна · %1$d гледачи + + + %1$d член + %1$d членови + %1$s · %2$d гледач @@ -5085,13 +5140,13 @@ Избришете ја приказната - Дали сакате да ја отстраните приказната на групата? + Дали сакате да ја отстраните групната приказна? - Со ова ќе се отстрани приказната од оваа листа. Ќе можете сè уште да ги видите приказните од оваа група. + Со ова ќе се отстрани приказната од оваа листа. Ќе можете сè уште да ги гледате приказните од оваа група. Отстрани - Да се избрише приказната? + Сакате да ја избришете приказната? Дали сакате да ја избришете приватната приказна „%1$s“? @@ -5206,7 +5261,7 @@ Дали сакате да ги исклучите приказните? - Повеќе нема да можете да споделувате или гледате приказни. Приказните кои сте ги испратиле неодамна ќе им бидат видливи на останатите сè додека не истечат. + Повеќе нема да можете да споделувате или гледате приказни. Неодамна споделените новости на приказната исто така ќе бидат избришани. Приватност на приказна diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 3d1c827f62..1a491474cc 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -218,7 +218,7 @@ ഉപയോക്തൃനാമം ഉപയോഗിച്ച് കണ്ടെത്തുക - എന്റെ സ്റ്റോറീസ് + എന്റെ സ്റ്റോറികൾ പുതിയ സ്റ്റോറി @@ -673,7 +673,7 @@ പുതിയ ഗ്രൂപ്പുകൾ എന്താണ്? പുതിയ ഗ്രൂപ്പുകൾക്ക് @സൂചനകള്‍, ഗ്രൂപ്പ് അഡ്മിനുകൾ എന്നിവ പോലുള്ള സവിശേഷതകളുണ്ട്, മാത്രമല്ല ഭാവിയിൽ കൂടുതൽ സവിശേഷതകളെ പിന്തുണയ്ക്കുകയും ചെയ്യും. - എല്ലാ സന്ദേശ ചരിത്രവും മീഡിയയും നവീകരിക്കുന്നതിന് മുമ്പായി സൂക്ഷിച്ചിരിക്കുന്നു. + അപ്‌ഗ്രേഡിന് മുമ്പുള്ള എല്ലാ സന്ദേശ ചരിത്രവും മീഡിയയും സൂക്ഷിച്ചിരിക്കുന്നു. ഈ ഗ്രൂപ്പിൽ വീണ്ടും ചേരുന്നതിനുള്ള ഒരു ക്ഷണം നിങ്ങൾ സ്വീകരിക്കേണ്ടതുണ്ട്, നിങ്ങൾ സ്വീകരിക്കുന്നതുവരെ ഗ്രൂപ്പ് സന്ദേശങ്ങൾ ലഭിക്കില്ല. ഈ അംഗത്തിന് ഈ ഗ്രൂപ്പിൽ വീണ്ടും ചേരുന്നതിനുള്ള ക്ഷണം സ്വീകരിക്കേണ്ടതുണ്ട്, മാത്രമല്ല അവർ അംഗീകരിക്കുന്നതുവരെ ഗ്രൂപ്പ് സന്ദേശങ്ങൾ ലഭിക്കുകയുമില്ല: @@ -688,7 +688,7 @@ പുതിയ ഗ്രൂപ്പിലേക്ക് അപ്‌ഗ്രേഡുചെയ്യുക ഈ ഗ്രൂപ്പ് അപ്‌ഗ്രേഡുചെയ്യുക പുതിയ ഗ്രൂപ്പുകൾക്ക് @സൂചനകള്‍, ഗ്രൂപ്പ് അഡ്മിനുകൾ എന്നിവ പോലുള്ള സവിശേഷതകളുണ്ട്, മാത്രമല്ല ഭാവിയിൽ കൂടുതൽ സവിശേഷതകളെ പിന്തുണയ്ക്കുകയും ചെയ്യും. - എല്ലാ സന്ദേശ ചരിത്രവും മീഡിയയും നവീകരിക്കുന്നതിന് മുമ്പായി സൂക്ഷിച്ച് വയ്ക്കും. + അപ്‌ഗ്രേഡിന് മുമ്പുള്ള എല്ലാ സന്ദേശ ചരിത്രവും മീഡിയയും സൂക്ഷിച്ച് വയ്ക്കുന്നതാണ്. ഒരു നെറ്റ്‌വർക്ക് പിശക് നേരിട്ടു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക. അപ്‌ഗ്രേഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു @@ -1524,7 +1524,7 @@ നിങ്ങൾ - എന്റെ കഥ + എന്റെ സ്റ്റോറി തടയുക @@ -1960,6 +1960,7 @@ %1$s എന്നയാൾ നിങ്ങൾക്ക് അയച്ചത് മീഡിയ ഇനി ലഭ്യമല്ല. ഈ മീഡിയ പങ്കിടാൻ കഴിയുന്ന ഒരു അപ്ലിക്കേഷൻ കണ്ടെത്താനായില്ല. + അടയ്ക്കുക %2$d സംഭാഷണങ്ങളിൽ %1$d പുതിയ സന്ദേശങ്ങൾ @@ -2200,7 +2201,7 @@ %1$s · സ്റ്റോറി - നിങ്ങൾ · സ്റ്റോറി + നിങ്ങളുടെ · സ്റ്റോറി ഇനി ലഭ്യമല്ല @@ -2605,7 +2606,7 @@ ഒറ്റത്തവണ സംഭാവന സ്വകാര്യത - സ്റ്റോറീസ് + സ്റ്റോറികൾ MMS യൂസർ ഏജൻറ് സ്വമേധയാലുള്ള MMS ക്രമീകരണങ്ങൾ MMSC URL @@ -2666,11 +2667,11 @@ സ്റ്റോറജ് അവലോകനം ചെയ്യുക പഴയ സന്ദേശങ്ങൾ ഇല്ലാതാക്കണോ? സന്ദേശ ചരിത്രം മായ്‌ക്കണോ? - നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്നുള്ള %1$s-നേക്കാൾ പഴയ എല്ലാ സന്ദേശ ചരിത്രവും മീഡിയയും ഇത് ശാശ്വതമായി ഇല്ലാതാക്കും. + നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്നുള്ള %1$s എന്നതിൽ കൂടുതൽ പഴക്കമുള്ള എല്ലാ സന്ദേശ ചരിത്രവും മീഡിയയും ഇത് ശാശ്വതമായി ഇല്ലാതാക്കും. ഇത് ഏറ്റവും പുതിയ %1$s സന്ദേശങ്ങളിലേക്ക് എല്ലാ സംഭാഷണങ്ങളും ശാശ്വതമായി കുറയ്ക്കും (ട്രിം ചെയ്യും). ഇത് നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് എല്ലാ സന്ദേശ ചരിത്രവും മീഡിയയും ശാശ്വതമായി ഇല്ലാതാക്കും - എല്ലാ സന്ദേശ ചരിത്രവും നീക്കംചെയ്യണം എന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? - എല്ലാ സന്ദേശ ചരിത്രവും ശാശ്വതമായി നീക്കംചെയ്യപ്പെടും. പിന്നെ ഇത് പഴയപടിയാക്കാൻ കഴിയില്ല. + എല്ലാ സന്ദേശ ചരിത്രവും നീക്കം ചെയ്യണം എന്ന് നിങ്ങൾക്ക് തീർച്ചയാണോ? + എല്ലാ സന്ദേശ ചരിത്രവും ശാശ്വതമായി നീക്കം ചെയ്യപ്പെടും. പിന്നെ ഇത് പഴയപടിയാക്കാൻ കഴിയില്ല. എല്ലാം ഇപ്പോൾ ഇല്ലാതാക്കുക എന്നേക്കും 1 വർഷം @@ -2748,10 +2749,14 @@ ഓപ്ഷൻ ഇച്ഛാനുസൃതമാക്കുക + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ ഇപ്പോൾ വേണ്ട + + + സുരക്ഷാ സജ്ജീകരണം + + നിങ്ങളുടെ ഫണ്ടുകൾ സംരക്ഷിക്കുക + + സുരക്ഷയുടെ മറ്റൊരു തലം ചേർത്തുകൊണ്ട് നിങ്ങളുടെ ഫണ്ട് ആക്‌സസ് ചെയ്യുന്നതിൽ നിന്നും നിങ്ങളുടെ ഫോൺ കൈവശമുള്ള ഒരു വ്യക്തിയെ തടയുക. നിങ്ങൾ ഈ ഓപ്‌ഷൻ ക്രമീകരണങ്ങളിൽ പ്രവർത്തനരഹിതമാക്കാൻ കഴിയുന്നതാണ്. + + പേയ്‌മെന്റ് ലോക്ക് പ്രവർത്തനക്ഷമമാക്കുക + + ഇപ്പോൾ വേണ്ട + + ഈ ഘട്ടം ഒഴിവാക്കണോ? + + ഈ ഘട്ടം ഒഴിവാക്കിയാൽ, നിങ്ങളുടെ ഫോണിലേക്ക് നേരിട്ട് ആക്‌സസ് ഉള്ള ആർക്കും ഫണ്ട് കൈമാറ്റം ചെയ്യാനോ നിങ്ങളുടെ വീണ്ടെടുക്കൽ പദം കാണാനോ കഴിഞ്ഞേക്കാം. + + റദ്ദാക്കുക + + ഒഴിവാക്കുക + ഫണ്ടുകൾ ചേർക്കുക നിങ്ങളുടെ വാലറ്റ് വിലാസം @@ -4256,7 +4281,7 @@ ഒരു സന്ദേശം ചേര്‍ക്കുക അതിവേഗ ഫോര്‍വേഡുകള്‍ - വീഡിയോകൾ 30 സെക്കൻഡ് ദൈർഘ്യമുള്ള ക്ലിപ്പുകളായി ട്രിം ചെയ്ത് ഒന്നിലധികം സ്റ്റോറീസായി അയയ്‌ക്കും. + വീഡിയോകൾ 30 സെക്കൻഡ് ദൈർഘ്യമുള്ള ക്ലിപ്പുകളായി ട്രിം ചെയ്‌ത് ഒന്നിലധികം സ്റ്റോറീസായി അയയ്‌ക്കും. സ്‌റ്റോറികളിലേക്ക് അയയ്‌ക്കുന്ന വീഡിയോകളുടെ ദൈർഘ്യം 30 സെക്കൻഡിൽ കൂടരുത്. കൈമാറിയ സന്ദേശങ്ങള്‍ ഇപ്പോൾ ഉടനടി അയയ്‌ക്കുന്നു. @@ -4699,13 +4724,13 @@ ചാറ്റുകൾ - സ്റ്റോറീസ് + സ്റ്റോറികൾ 99+ - സ്റ്റോറി സ്വകാര്യത + സ്റ്റോറിയുടെ സ്വകാര്യത - എന്റെ കഥകള്‍ + എന്റെ സ്റ്റോറികൾ ഒരു സ്റ്റോറി ചേർക്കാൻ ടാപ്പ് ചെയ്യുക @@ -4735,13 +4760,13 @@ സ്റ്റോറി മറയ്ക്കണോ? - %1$s എന്നയാളിൽ നിന്നുള്ള പുതിയ സ്റ്റോറി അപ്ഡേറ്റുകൾ ഇനി സ്റ്റോറീസ് ലിസ്റ്റിന്‍റെ മുകളിൽ വരില്ല. + %1$s എന്നയാളിൽ നിന്നുള്ള പുതിയ സ്റ്റോറി അപ്ഡേറ്റുകൾ ഇനിമുതൽ സ്റ്റോറീസ് ലിസ്റ്റിന്റെ മുകളിൽ ദൃശ്യമാകുന്നതല്ല. മറയ്ക്കുക സ്റ്റോറി മറച്ചു - മറച്ച സ്റ്റോറീസ് + മറച്ച സ്റ്റോറികൾ %1$d കാഴ്‌ച @@ -4754,7 +4779,7 @@ സ്റ്റോറി ഇല്ലാതാക്കണോ? - നിങ്ങൾക്കും ഇത് ലഭിച്ച എല്ലാവർക്കുമായി ഈ സ്റ്റോറി ഇല്ലാതാക്കപ്പെടും. + നിങ്ങൾക്കും ഇത് ലഭിച്ച എല്ലാവർക്കും ഈ സ്റ്റോറി ഇല്ലാതാക്കപ്പെടും. സംരക്ഷിക്കാനായില്ല @@ -4799,6 +4824,8 @@ കാണുന്നയാളെ നീക്കം ചെയ്യുക ഇതുവരെ മറുപടികളൊന്നുമില്ല + + നിങ്ങൾ നിലവിൽ ഈ ഗ്രൂപ്പിൽ അംഗമല്ലാത്തതിനാൽ, നിങ്ങൾക്ക് ഈ സ്റ്റോറിക്ക് മറുപടി അയയ്‌ക്കാൻ കഴിയില്ല. സ്റ്റോറിയോട് പ്രതികരിച്ചു @@ -4806,7 +4833,7 @@ മറുപടികൾ - ഈ സ്റ്റോറിയോട് പ്രതികരിച്ചു + ഈ സ്റ്റോറിയോട് പ്രതികരിക്കുക %1$s എന്നയാൾക്ക് സ്വകാര്യമായി മറുപടി നൽകുന്നു @@ -4816,7 +4843,14 @@ ഇല്ലാതാക്കൂ - എന്റെ കഥ + എന്റെ സ്റ്റോറി + + + %1$d viewer + %1$d viewers + + + View ആർക്കൊക്കെ ഈ സ്റ്റോറി കാണാനാകും @@ -4828,7 +4862,7 @@ ഇനിപ്പറയുന്നവര്‍ ഒഴികെ എല്ലാവരും… - നിർദ്ദിഷ്‌ട ആളുകളിൽ നിന്ന് നിങ്ങളുടെ സ്റ്റോറി മറയ്ക്കുക + കുറച്ച് ആളുകളിൽ നിന്ന് നിങ്ങളുടെ സ്റ്റോറി മറയ്ക്കുക %1$d ആളെ ഒഴിവാക്കി @@ -4851,8 +4885,6 @@ മറുപടികളും പ്രതികരണങ്ങളും അനുവദിക്കുക നിങ്ങളുടെ സ്റ്റോറി കാണാൻ കഴിയുന്ന ആളുകളെ പ്രതികരിക്കാനും മറുപടി നൽകാനും അനുവദിക്കുക - - നിർദ്ദിഷ്ട ആളുകളിൽ നിന്ന് നിങ്ങളുടെ സ്റ്റോറി മറയ്ക്കുക. ഡിഫോൾട്ടായി നിങ്ങളുടെ സ്റ്റോറി നിങ്ങളുടെ %1$s എന്നതുമായി പങ്കിട്ട നിലയിലായിരിക്കും Signal കണക്ഷനുകൾ @@ -4864,7 +4896,7 @@ നിങ്ങളുടെ സിസ്റ്റം കോൺടാക്റ്റുകളിൽ ചേർത്ത് - "നിങ്ങളുടെ കണക്ഷനുകൾക്ക് നിങ്ങളുടെ പേരും ഫോട്ടോയും കാണാനാകും, നിങ്ങൾ മറയ്ക്കാത്ത പക്ഷം അവർക്ക് നിങ്ങൾ \"എന്‍റെ സ്റ്റോറിയിൽ\" ചേർക്കുന്ന പോസ്റ്റുകളും കാണാനാകും." + "നിങ്ങളുടെ കണക്ഷനുകൾക്ക് നിങ്ങളുടെ പേരും ഫോട്ടോയും കാണാനാകും, മാത്രമല്ല നിങ്ങൾ മറയ്ക്കാത്ത പക്ഷം അവർക്ക് നിങ്ങൾ \"എന്‍റെ സ്റ്റോറിയിൽ\" ചേർക്കുന്ന പോസ്റ്റുകളും കാണാനാകും." കാഴ്ച്ചക്കാരെ ചേർക്കുക @@ -4872,7 +4904,7 @@ %1$sഎന്നയാളെ നീക്കം ചെയ്യണോ? - ഈ വ്യക്തിക്ക് ഇനി നിങ്ങളുടെ സ്റ്റോറി കാണാനാകില്ല. + ഈ വ്യക്തിക്ക് ഇനിമുതൽ നിങ്ങളുടെ സ്റ്റോറി കാണാൻ കഴിയുന്നതല്ല. നീക്കംചെയ്യൂ @@ -4900,7 +4932,7 @@ ഒരു യുആർഎൽ ടൈപ്പ് ചെയ്യുകയോ ഒട്ടിക്കുകയോ ചെയ്യുക - നിങ്ങളുടെ സ്റ്റോറിയുടെ കാഴ്ച്ചക്കാർക്കായി ഒരു ലിങ്ക് പങ്കിടുക + നിങ്ങളുടെ സ്റ്റോറിയുടെ കാഴ്ച്ചക്കാരുമായി ഒരു ലിങ്ക് പങ്കിടുക തിരയുക @@ -4911,22 +4943,40 @@ ഇനിപ്പറയുന്നവരുമായി മാത്രം പങ്കിടുക… ചെയ്‌തു + + ഗ്രൂപ്പ് സ്റ്റോറി ഇല്ലാതാക്കണോ? + + \"%1$s\" നീക്കം ചെയ്യപ്പെടും. + + നീക്കംചെയ്യൂ + + സ്വകാര്യ സ്റ്റോറി ഇല്ലാതാക്കണോ? + + ഈ സ്റ്റോറിയിലേക്ക് പങ്കിട്ട \"%1$s\" എന്നതും അപ്‌ഡേറ്റുകളും ഇല്ലാതാക്കപ്പെടും. + + ഇല്ലാതാക്കൂ + + Signal ബീറ്റ ഉപയോക്താക്കൾക്ക് മാത്രമേ സ്റ്റോറികൾ ലഭ്യമാകൂ. + + നിങ്ങൾ ഒരു സ്റ്റോറി പങ്കിടുകയാണെങ്കിൽ, അത് Signal ബീറ്റയിലുള്ള ആളുകൾക്ക് മാത്രമേ ലഭ്യമാകൂ. സ്റ്റോറിയിലേക്ക് ചേർക്കണോ? - നിങ്ങളുടെ സ്റ്റോറിയിലേക്ക് ഉള്ളടക്കം ചേർക്കുന്നതിലൂടെ നിങ്ങളുടെ Signal കണക്ഷനുകളെ നിങ്ങൾ 24 മണിക്കൂർ നേരത്തേക്ക് അത് കാണാൻ അനുവദിക്കുന്നു. നിങ്ങളുടെ സ്റ്റോറി ആർക്കൊക്കെ കാണാമെന്നത് നിങ്ങൾക്ക് ക്രമീകരണങ്ങളിൽ നിന്ന് എഡിറ്റ് ചെയ്യാം. + നിങ്ങളുടെ സ്റ്റോറിയിലേക്ക് ഉള്ളടക്കം ചേർക്കുന്നതിലൂടെ നിങ്ങളുടെ Signal കണക്ഷനുകളെ 24 മണിക്കൂർ നേരത്തേക്ക് അത് കാണാൻ നിങ്ങൾ അനുവദിക്കുന്നു. നിങ്ങളുടെ സ്റ്റോറി ആർക്കൊക്കെ കാണാമെന്ന് നിങ്ങൾക്ക് ക്രമീകരണങ്ങളിൽ മാറ്റാൻ കഴിയുന്നതാണ്. സ്റ്റോറിയിലേക്ക് ചേർക്കുക കാഴ്ച്ചക്കാരെ എഡിറ്റ് ചെയ്യുക - സ്റ്റോറി അയയ്ക്കാനായില്ല. നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച ശേഷം വീണ്ടും ശ്രമിക്കുക. + സ്റ്റോറി അയയ്ക്കാൻ കഴിഞ്ഞില്ല. നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച ശേഷം വീണ്ടും ശ്രമിക്കുക. അയയ്‌ക്കുക + + ഓഫ് ചെയ്‌ത ശേഷം ഇല്ലാതാക്കുക - സ്റ്റോറീസ് പങ്കിടുകയും കാണുകയും ചെയ്യുക + സ്റ്റോറികൾ പങ്കിടുകയും കാണുകയും ചെയ്യുക - ഈ ഓപ്ഷൻ ഓഫായിരിക്കുമ്പോൾ നിങ്ങൾക്ക് സ്റ്റോറീസ് കാണാനോ അത് പങ്കിടാനോ കഴിയില്ല. + ഈ ഓപ്ഷൻ ഓഫായിരിക്കുമ്പോൾ നിങ്ങൾക്ക് സ്റ്റോറികൾ കാണാനോ അത് പങ്കിടാനോ കഴിയില്ല. കാഴ്ച്ചക്കാരെ തിരഞ്ഞെടുക്കുക @@ -4977,7 +5027,7 @@ അയച്ച സ്റ്റോറി - സ്റ്റോറി അയയ്ക്കാനായില്ല + സ്റ്റോറി അയയ്ക്കാൻ കഴിഞ്ഞില്ല സ്റ്റോറി കാണുക @@ -5060,7 +5110,7 @@ ഇപ്പോൾ വേണ്ട - ഇനിപ്പറയുന്നവരുമായി മാത്രം പങ്കിടുക + ഇവർക്ക് പങ്കിടൂ സ്വകാര്യ സ്റ്റോറി · %1$d ആൾ കണ്ടു @@ -5071,6 +5121,11 @@ ഗ്രൂപ്പ് സ്റ്റോറി · %1$d ആൾ കണ്ടു ഗ്രൂപ്പ് സ്റ്റോറി · %1$d കാഴ്‌ചക്കാർ + + + %1$d അംഗം + %1$d അംഗങ്ങൾ + %1$s · %2$d ആൾ കണ്ടു @@ -5087,7 +5142,7 @@ ഗ്രൂപ്പ് സ്റ്റോറി ഇല്ലാതാക്കണോ? - ഇത് ഈ ലിസ്റ്റിൽ നിന്ന് സ്റ്റോറി നീക്കം ചെയ്യും. എന്നിരുന്നാലും, ഈ ഗ്രൂപ്പിൽ നിന്നുള്ള സ്റ്റോറികൾ നിങ്ങൾക്ക് തുടർന്നും കാണാനാകും. + ഇത് ഈ ലിസ്റ്റിൽ നിന്ന് സ്റ്റോറി നീക്കം ചെയ്യും. എന്നിരുന്നാലും, ഈ ഗ്രൂപ്പിൽ നിന്നുള്ള സ്റ്റോറികൾ നിങ്ങൾക്ക് തുടർന്നും കാണാൻ കഴിയും. നീക്കം ചെയ്യുക @@ -5139,7 +5194,7 @@ എല്ലാ കണക്ഷനുകളും അവലോകനം ചെയ്‌തു, തുടരുന്നതിന് അയയ്ക്കുക എന്നതിൽ ടാപ്പ് ചെയ്യുക. - Signal വീണ്ടും ഇൻസ്റ്റാൾ ചെയ്യുകയോ ഉപകരണങ്ങൾ മാറുകയോ ചെയ്‌തിട്ടുണ്ടാകാവുന്ന %1$d കണക്ഷനുകൾ നിങ്ങൾക്കുണ്ട്. നിങ്ങളുടെ സ്റ്റോറി അവരുമായി പങ്കിടുന്നതിന് മുമ്പ് അവരുടെ സുരക്ഷാ നമ്പറുകൾ അവലോകനം ചെയ്യുകയോ അവരെ നിങ്ങളുടെ സ്റ്റോറിയിൽ നിന്ന് നീക്കം ചെയ്യുന്നത് പരിഗണിക്കുകയോ ചെയ്യുക. + Signal വീണ്ടും ഇൻസ്റ്റാൾ ചെയ്യുകയോ ഉപകരണങ്ങൾ മാറുകയോ ചെയ്‌തിട്ടുണ്ടാകാവുന്ന %1$d കണക്ഷനുകൾ നിങ്ങൾക്കുണ്ട്. നിങ്ങളുടെ സ്റ്റോറി അവരുമായി പങ്കിടുന്നതിന് മുമ്പ് അവരുടെ സുരക്ഷാ നമ്പറുകൾ അവലോകനം ചെയ്യുകയോ അവരെ നിങ്ങളുടെ സ്റ്റോറിയിൽ നിന്ന് നീക്കം ചെയ്യുന്നതിനെ കുറിച്ച് ചിന്തിക്കുകയോ ചെയ്യുക. സുരക്ഷാ നമ്പർ ഉറപ്പാക്കു @@ -5169,7 +5224,7 @@ എന്‍റെ സ്റ്റോറിയുടെ സ്വകാര്യത - എന്‍റെ സ്റ്റോറിയിലേക്കുള്ള പോസ്റ്റുകൾ ആർക്കൊക്കെ കാണാനാകും എന്ന് തിരഞ്ഞെടുക്കുക. നിങ്ങൾക്ക് എപ്പോൾ വേണമെങ്കിലും ക്രമീകരണങ്ങളിൽ മാറ്റം വരുത്താവുന്നതാണ്. + എന്‍റെ സ്റ്റോറിയിലേക്കുള്ള പോസ്റ്റുകൾ ആർക്കൊക്കെ കാണാൻ കഴിയുമെന്ന് തിരഞ്ഞെടുക്കുക. നിങ്ങൾക്ക് എപ്പോൾ വേണമെങ്കിലും ക്രമീകരണങ്ങളിൽ മാറ്റം വരുത്താവുന്നതാണ്. എല്ലാ Signal കണക്ഷനുകളും @@ -5194,7 +5249,7 @@ - 24 മണിക്കൂറിന് ശേഷം സ്റ്റോറികൾ സ്വയമേവ അപ്രത്യക്ഷമാകും. നിങ്ങളുടെ സ്റ്റോറി ആർക്കൊക്കെ കാണാനാകുമെന്ന് തിരഞ്ഞെടുക്കുകയോ നിർദ്ദിഷ്‌ട കാഴ്‌ചക്കാരെയോ ഗ്രൂപ്പുകളെയോ ഉപയോഗിച്ച് പുതിയ സ്റ്റോറികൾ സൃഷ്‌ടിക്കുകയോ ചെയ്യുക. + 24 മണിക്കൂറിന് ശേഷം സ്റ്റോറികൾ സ്വയമേവ അപ്രത്യക്ഷമാകും. നിങ്ങളുടെ സ്റ്റോറി ആർക്കൊക്കെ കാണാൻ കഴിയുമെന്ന് തീരുമാനിക്കുകയോ കുറച്ച് കാഴ്‌ചക്കാരെയോ ഗ്രൂപ്പുകളെയോ ഉപയോഗിച്ച് പുതിയ സ്റ്റോറികൾ സൃഷ്‌ടിക്കുകയോ ചെയ്യുക. സ്റ്റോറികൾ ഓഫാക്കുക @@ -5206,9 +5261,9 @@ സ്റ്റോറികൾ ഓഫാക്കണോ? - നിങ്ങൾക്ക് ഇനിമുതൽ സ്റ്റോറികൾ പങ്കിടാനോ കാണാനോ കഴിയില്ല. നിങ്ങൾ അടുത്തിടെ അയച്ച എല്ലാ സ്റ്റോറികളും കാലഹരണപ്പെടുന്നതുവരെ മറ്റുള്ളവർക്ക് തുടർന്നും ദൃശ്യമാകും. + നിങ്ങൾക്ക് ഇനിമുതൽ സ്റ്റോറികൾ പങ്കിടാനോ കാണാനോ കഴിയില്ല. നിങ്ങൾ അടുത്തിടെ പങ്കിട്ട സ്റ്റോറി അപ്‌ഡേറ്റുകളും ഇല്ലാതാക്കപ്പെടും. - സ്റ്റോറി സ്വകാര്യത + സ്റ്റോറിയുടെ സ്വകാര്യത diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index e56dd2085d..e5caf5ab22 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -358,8 +358,8 @@ संचयनमध्ये जतन करायचे? - हा मिडिया संचयनामध्ये जतन केल्याने आपल्या डिव्हाईस वरील इतर ॲप्सना त्यात प्रवेश करण्याची अनुमती मिळेल.\n\nसुरू ठेवायचे? - सर्व %1$d मिडिया संचयन मध्ये जतन केल्याने आपल्या डिव्हाईस वरील इतर ॲप्सना त्यात प्रवेश करण्याची अनुमती मिळेल.\n\nसुरू ठेवायचे? + हा मिडिया संग्रहणामध्ये जतन केल्याने आपल्या डिव्हाईस वरील इतर ॲप्सना त्यात प्रवेश करण्याची अनुमती मिळेल.\n\nसुरू ठेवायचे? + सर्व %1$d मिडिया संग्रहणामध्ये जतन केल्याने आपल्या डिव्हाईस वरील इतर ॲप्सना त्यात प्रवेश करण्याची अनुमती मिळेल.\n\nसुरू ठेवायचे? संचयनमध्ये संलग्न जतन करण्यात त्रुटी! @@ -367,12 +367,12 @@ संचयनमध्ये लिहिण्यात अक्षम! - संलग्न जतन करत आहे + संलग्नक जतन करत आहे %1$d संलग्नके जतन करत आहे - संलग्न संचयनमध्ये जतन करत आहे… - %1$d संलग्नके संचयनामध्ये जतन करत आहे… + संलग्नक संग्रहणामध्ये जतन करत आहे… + %1$d संलग्नके संग्रहणामध्ये जतन करत आहे… प्रलंबित… डेटा (Signal) @@ -418,14 +418,14 @@ निवडलेले संभाषणे हटवायचे? - हे निवडलेले संभाषणे कायमचे हटवेल. - हे निवडलेले %1$d संभाषणे कायमचे हटवेल. + हे निवडलेले संभाषण कायमचे हटवेल. + हे निवडलेली %1$d संभाषणे कायमची हटवेल. हटवत आहे निवडलेले संभाषण हटवत आहे… - संभाषण आर्काईव्ह केले - %1$d संभाषणे आर्काईव्ह केली + संभाषण संग्रहित केले + %1$d संभाषणे संग्रहित केली अनडू करा @@ -673,7 +673,7 @@ नवीन गट काय आहेत? नवीन गटांमध्ये @उल्लेख आणि गट अॅडमिन सारखे वैशिष्ट्ये आहेत, आणि भविष्यात आम्ही अधिक वैशिष्ट्यांना समर्थन देऊ. - सर्व संदेश इतिहास आणि मिडिया श्रेणीसुधारणेपूर्वी ठेवले जातात. + सर्व संदेश इतिहास आणि मिडिया श्रेणीसुधारणेपूर्वी ठेवण्यात आले आहेत. या गटात पुन्हा सामील होण्यासाठी आपल्याला आमंत्रण स्वीकार करावे लागेल, आणि आपण स्वीकार करेपर्यंत आपल्याला गट संदेश प्राप्त होणार नाहीत. या गटात पुन्हा सामील होण्यासाठी या सदस्याला आमंत्रण स्वीकार करावे लागेल, आणि स्वीकार करेपर्यंत त्याला गट संदेश प्राप्त होणार नाहीत: @@ -887,7 +887,7 @@ - %1$s ने व्यक्ती आमंत्रित केली + %1$s ने 1 व्यक्तीला आमंत्रित केले %1$s ने %2$d व्यक्तींना आमंत्रित केले @@ -926,8 +926,8 @@ आपण %1$s ला पाठवलेले आमंत्रण रद्द करू इच्छिता? - %1$s द्वारा पाठवलेले आमंत्रण आपण मागे घेऊ इच्छिता? - %1$s द्वारा पाठवलेली %2$d आमंत्रणे मागे घेऊ इच्छिता? + आपण %1$s द्वारे पाठवलेले आमंत्रण मागे घेऊ इच्छिता? + %1$s द्वारे पाठवलेली %2$d आमंत्रणे मागे घेऊ इच्छिता? @@ -1035,8 +1035,8 @@ निवडलेले आयटम हटवायचे? - हे निवडलेली फाईल कायमची हटवेल. या आयटम सोबत संबंधित कुठलाही संदेश मजकूर देखील हटविला जाईल. - हे निवडलेल्या सर्व %1$d फायली कायमच्या हटवेल. या आयटम सोबत संबंधित कुठलाही संदेश मजकूर देखील हटविला जाईल. + हे निवडलेली फाईल कायमची हटवेल. या घटकाशी संबंधित कुठलाही संदेश मजकूर देखील हटविला जाईल. + हे निवडलेल्या सर्व %1$d फायली कायमच्या हटवेल. या घटकांशी संबंधित कुठलाही संदेश मजकूर देखील हटविला जाईल. हटवत आहे संदेश हटवत आहे… @@ -1168,13 +1168,13 @@ आपण नवीन गटात जोडले जाऊ शकले नाही आणि त्यात सामील होण्यासाठी आपणास आमंत्रित केले गेले आहे. चॅट सत्र ताजेतवाने झाले - सदस्य नवीन गटात जोडला जाऊ शकत नाही आणि त्यात सामील होण्यासाठी आमंत्रित केले गेले आहे. - %1$s सदस्य नवीन गटात जोडले जाऊ शकले नाही आणि त्यात सामील होण्यासाठी आमंत्रित केले गेले आहे. + नवीन गटात सदस्य जोडला जाऊ शकत नाही आणि त्याला सामील होण्यासाठी आमंत्रित केले गेले आहे. + %1$s सदस्य नवीन गटात जोडले जाऊ शकत नाहीत आणि त्यांना सामील होण्यासाठी आमंत्रित केले गेले आहे. - सदस्य नवीन गटात जोडला जाऊ शकत नाही आणि त्यातून तो काढला गेला आहे. - %1$s सदस्य नवीन गटात जोडले जाऊ शकले नाही आणि त्यातून ते काढले गेले आहेत. + सदस्य नवीन गटात जोडला जाऊ शकत नाही आणि त्यातून त्याला काढून टाकले आहे. + %1$s सदस्य नवीन गटात जोडले जाऊ शकत नाहीत आणि त्यातून त्यांना काढून टाकले आहे. @@ -1219,23 +1219,23 @@ आपण %1$s ला गटात आमंत्रित केले. %1$s ने आपल्याला गटात आमंत्रित केले. - %1$s ने 1 व्यक्तींला गटात आमंत्रित केले. - %1$s ने %2$d व्यक्तींना गटात आमंत्रित केले. + %1$s ने 1 व्यक्तीला ग्रुपमध्ये आमंत्रित केले. + %1$s ने %2$d व्यक्तींना ग्रुपमध्ये आमंत्रित केले. आपल्याला गटात निमंत्रित केले गेले होते. - 1 व्यक्ती गटात आमंत्रित केली गेली होती. - %1$d व्यक्तीना गटात आमंत्रित केले गेले होते. + 1 व्यक्तीला ग्रुपमध्ये आमंत्रित केले गेले होते. + %1$d व्यक्तींना गटात आमंत्रित केले गेले होते. - आपण गटाचे आमंत्रण मागे घेतले. - आपण गटाची %1$d आमंत्रणे मागे घेतली. + आपण ग्रुपचे आमंत्रण मागे घेतले. + आपण ग्रुपची %1$d आमंत्रणे मागे घेतली. - %1$s ने गटाचे आमंत्रण मागे घेतले. - %1$s ने गटाची %2$d आमंत्रणे मागे घेतली. + %1$s ने ग्रुपचे आमंत्रण मागे घेतले. + %1$s ने ग्रुपची %2$d आमंत्रणे मागे घेतली. कुणीतरी गटाचे आमंत्रण रद्द केले. आपण गटाचे आमंत्रण रद्द केले. @@ -1316,8 +1316,8 @@ %1$s ने गट लिंक द्वारे सामिल होण्यासाठी विनंती केली. - %1$s ने गट लिंकद्वारे सामील होण्यासाठी विनंती केली आणि त्यांची विनंती रद्द केली. - %1$s ने गट लिंकद्वारे सामील होण्यासाठी विनंती केली आणि त्यांच्या %2$d विनंत्या रद्द केल्या. + %1$s ने विनंती केली आणि ग्रुप लिंकद्वारे सामील होण्यासाठी त्यांची विनंती रद्द केली. + %1$s ने विनंती केली आणि ग्रुप लिंकद्वारे सामील होण्याच्या %2$d विनंत्या रद्द केल्या. @@ -1524,7 +1524,7 @@ आपण - माझ्या स्टोरी + माझी स्टोरी अवरोधित करा @@ -1960,6 +1960,7 @@ %1$s कडून आपणाला मिडिया आता उपलब्ध नाही. हे मिडिया शेअर करण्यासाठी सक्षम असे अॅप सापडू शकले नाही. + बंद करा %2$d संभाषणांमध्ये %1$d नवीन संदेश @@ -2198,9 +2199,9 @@ आपण मूळ संदेश आढळला नाही - %1$s . स्टोरी + %1$s स्टोरी - आपण . स्टोरी + तुमची · स्टोरी आता उपलब्ध नाही @@ -2343,7 +2344,7 @@ क्लिपबोर्डवर पाठवलेला टाइमस्टॅम्प कॉपी केला. - आपल्या स्टोरीचे अपडेट्स येथे दाखवले जातील. + आपल्या स्टोरीची अद्यतने येथे दाखवली जातील. @@ -2669,7 +2670,7 @@ हे आपल्या डिव्हाईसवरून %1$s पेक्षा जुने सर्व संदेश इतिहास आणि मिडिया कायमचे हटवेल. हे सर्व संभाषणे %1$s सर्वात अलीकडील संदेश वर कायमचे ट्रिम करेल. हे आपल्या डिव्हाईसवरून सर्व संदेश इतिहास आणि मिडिया कायमचे हटवेल. - सर्व संदेश इतिहास हटवायची आपणास खात्री आहे का? + आपण खात्रीने सर्व संदेश इतिहास हटवू इच्छिता? सर्व संदेश इतिहास कायमचा हटवला जाईल. ही क्रिया मागे घेतली जाऊ शकत नाही. सर्व आता हटवा नेहमीसाठी @@ -2748,10 +2749,14 @@ पर्याय सानुकूलित करा + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ आता नाही + + + सुरक्षितता सेटअप + + आपल्या निधीचे संरक्षण करा + + सुरक्षिततेचा आणखी एक स्तर जोडून आपल्या फोनसह आपल्या निधीमध्ये प्रवेश करण्यापासून रोखण्यास मदत करा. आपण सेटिंग्ज मध्ये हा पर्याय अक्षम करू शकता. + + पेमेंट लॉक सक्षम करा + + आता नाही + + ही पायरी वगळायची? + + ही पायरी वगळल्यास आपल्या फोनचा भौतिक अ‍ॅक्सेस असलेल्या कोणालाही निधी हस्तांतरित करण्यास किंवा आपला पुर्नप्राप्ती वाक्यांश पाहू शकण्याची अनुमती मिळू शकते. + + रद्द करा + + वगळा + फंड जोडा आपला वॉलेट पत्ता @@ -4735,7 +4760,7 @@ स्टोरी लपवायची? - %1$s कडील नवीन स्टोरी अपडेट्स यापुढे सूचीच्या शीर्षस्थानी दिसणार नाहीत. + %1$s कडील नवीन स्टोरी अपडेट्स यापुढे स्टोरीज सूचीच्या शीर्षस्थानी दिसणार नाहीत. लपवा @@ -4750,9 +4775,9 @@ फॉर्वर्ड करा - %1$s\'च्या स्टोरीज + %1$s\'च्या स्टोरी - स्टोरी हटवायची ? + स्टोरी हटवायची? ही स्टोरी तुमच्यासाठी आणि ती प्राप्त झालेल्या प्रत्येकासाठी हटवली जाईल. @@ -4786,7 +4811,7 @@ अद्याप कोणतीही दृश्ये नाहीत - आपल्या स्टोरीज कोणी पाहिल्या आहेत ते पाहण्यासाठी पोच वाचा ला सक्षम करा. + आपल्या स्टोरीज कोणी पाहिल्या आहेत ते पाहण्यासाठी वाचल्याची पोच सक्षम करा. सेटिंग्ज वर जा @@ -4799,6 +4824,8 @@ दर्शकाला हटवा अद्याप कोणतीही प्रत्युत्तरे नाहीत + + आपण या स्टोरीज ला उत्तर देऊ शकणार नाही कारण आपण यापुढे या ग्रुपचे सदस्य नाही. स्टोरीला प्रतिक्रिया दिली @@ -4817,6 +4844,13 @@ हटवा माझी स्टोरी + + + %1$d viewer + %1$d viewers + + + View ही स्टोरी कोण पाहू शकतात @@ -4850,9 +4884,7 @@ प्रत्त्युत्तरे & प्रतिक्रिया अनुमती द्या - जे लोक तुमची कथा पाहू शकतात त्यांना प्रतिक्रिया द्या आणि उत्तर द्या - - विशिष्ट लोकांपासून आपली स्टोरी लपवा. पूर्वनिर्धारितपणे, आपली स्टोरी आपल्या %1$sसह शेअर करा + जे लोक तुमची स्टोरी पाहू शकतात त्यांना प्रतिक्रिया द्या आणि उत्तर द्या Signal कनेक्शन्स @@ -4864,7 +4896,7 @@ ते आपल्या सिस्टम संपर्कांमध्ये असणे - "आपले कनेक्शन आपले नाव आणि फोटो पाहू शकतात आणि \"माझी स्टोरी\" वरील पोस्ट पाहू शकतात जोपर्यंत आपण ते त्यांच्यापासून लपवत नाही." + "आपले कनेक्शन्स आपले नाव आणि फोटो पाहू शकतात, आणि जोपर्यंत आपण ते त्यांच्यापासून लपवत नाही तोपर्यंत \"माझी स्टोरी\" वरील पोस्ट पाहू शकतात." दर्शक जोडा @@ -4900,7 +4932,7 @@ URL टाइप करा किंवा पेस्ट करा - आपल्या स्टोरी दर्शकांसह लिंक शेअर करा + आपल्या स्टोरीच्या दर्शकांसह लिंक शेअर करा शोध @@ -4911,10 +4943,26 @@ फक्त …सोबत शेअर करा ठीक + + ग्रुप स्टोरी काढायची? + + \"%1$s\" ला हटवण्यात येईल. + + काढा + + खाजगी स्टोरी हटवायची? + + \"%1$s\" आणि या स्टोरीजला शेअर केलेली अद्यतने हटवली जातील. + + काढून टाका + + स्टोरीज या फक्त Signal बिटा वापरकर्त्यांना उपलब्ध असतील. + + आपण स्टोरीज शेअर केल्यास, ती केवळ Signal बिटा वरील लोकांना उपलब्ध असेल. - स्टोरीत जोडायचे? + स्टोरी मध्ये जोडायचे? - आपल्या स्टोरी मध्‍ये काही जोडल्‍याने आपल्या Signal कनेक्‍शन्सला २४ तास ते पाहण्‍याची अनुमती मिळते. आपली स्टोरी कोण पाहू शकते हे आपण सेटिंग्जमध्ये बदलू शकता. + आपल्या स्टोरी मध्‍ये अतिरिक्त मजकूर जोडल्‍याने आपल्या Signal कनेक्‍शन्सला 24 तास ते पाहण्‍याची अनुमती मिळते. आपली स्टोरी कोण पाहू शकते हे आपण सेटिंग्जमध्ये बदलू शकता. स्टोरीत जोडा @@ -4923,8 +4971,10 @@ स्टोरी पाठवता आली नाही. आपले कनेक्शन तपासा आणि पुन्हा प्रयत्न करा. पाठवा + + बंद करा आणि हटवा - स्टोरीज पहा & शेअर करा + स्टोरीज शेअर करा व पहा हा पर्याय बंद असताना आपण यापुढे स्टोरीज शेअर करू किंवा पाहू शकणार नाही. @@ -4937,7 +4987,7 @@ %1$d दर्शक - स्टोरी नाव + स्टोरीला नाव द्या स्टोरी नाव (आवश्यक) @@ -4953,11 +5003,11 @@ आपल्या स्टोरीचा प्रकार निवडा - नविन खाजगी स्टोरी + नवीन खाजगी स्टोरी केवळ विशिष्ट लोकांसाठी दृश्यमान - गट स्टोरी + ग्रुप स्टोरी विद्यमान गटामध्ये शेअर करा @@ -4969,7 +5019,7 @@ उत्तर पाठवत आहे… - ही स्टोरी आता उपलब्ध नाही. + ही स्टोरी यापुढे उपलब्ध नाही. इंटरनेट कनेक्शन नाही @@ -4993,7 +5043,7 @@ बंद करा - आपण %1$sच्या स्टोरीवर प्रतिक्रिया दिली आहे + आपण %1$s च्या स्टोरीवर प्रतिक्रिया दिली आपल्या स्टोरीवर प्रतिक्रिया दिली @@ -5071,6 +5121,11 @@ ग्रुप स्टोरी · %1$d दर्शक ग्रुप स्टोरी · %1$d दर्शक + + + %1$d सदस्य + %1$d सदस्य + %1$s · %2$d दर्शक @@ -5085,13 +5140,13 @@ स्टोरी हटवा - गट स्टोरी काढायची? + ग्रुप स्टोरी काढायची? - हे स्टोरीला या यादीतून काढून टाकेल. आपण अद्याप या गटातून स्टोरीज पाहू शकाल. + हे या यादीतून ही स्टोरी काढून टाकेल. आपण अद्याप या ग्रुपमधून स्टोरीज पाहू शकाल. काढा - स्टोरी हटवायची ? + स्टोरी हटवायची? \"%1$s\" खाजगी स्टोरी हटवायची? @@ -5139,7 +5194,7 @@ सर्व कनेक्शन्सचे पुनरावलोकन करण्यात आले आहे, पुढे सुरू ठेवण्यासाठी टॅप करा. - ज्यांनी कदाचित Signal पुन्हा इन्स्टॉल केले आहे किंवा उपकरणे बदलली आहेत अशी आपणाकडे %1$d कनेक्शन्स आहेत. आपली स्टोरी त्याच्या सोबत शेअर करण्यापूर्वी त्यांच्या सुरक्षितता क्रमांकांचे पुनरावलोकन करा किंवा त्यांना आपल्या स्टोरीमधून हटवण्याचा विचार करा. + ज्यांनी कदाचित Signal पुन्हा इन्स्टॉल केले आहे किंवा उपकरणे बदलली आहेत अशी आपणाकडे %1$d कनेक्शन्स आहेत. आपली स्टोरी त्यांच्या सोबत शेअर करण्यापूर्वी त्यांच्या सुरक्षितता क्रमांकांचे पुनरावलोकन करा किंवा त्यांना आपल्या स्टोरीमधून हटवण्याचा विचार करा. सुरक्षितता नंबर सत्यापित करा @@ -5169,7 +5224,7 @@ माझ्या स्टोरीची गोपनीयता - माझ्या स्टोरीवरील पोस्ट्स कोण पाहू शकतात ते निवडा. आपण सेटिंग्जमध्ये बदल करू शकता. + माझ्या स्टोरीवरील पोस्ट्स कोण पाहू शकतात ते निवडा. आपण नेहमी सेटिंग्जमध्ये बदल करू शकता. सर्व Signal कनेक्शन्स @@ -5202,11 +5257,11 @@ स्टोरीज सुरु करा - इतरांकडील स्टोरीज पहा आणि शेअर करा, 24 तासांनंतर स्टोरीज आपोआप अदृश्य होतील. + इतरांकडील स्टोरीज पहा आणि शेअर करा, 24 तासांनंतर स्टोरीज आपोआप अदृश्य होतात. - स्टोरीज बंद करा? + स्टोरीज बंद करायच्या? - आपण यापुढे स्टोरीज पाहू किंवा शेअर करु शकणार नाही. आपण अलिकडेच पाठविलेल्या स्टोरीज कालबाह्य होत नाहीत तोपर्यंत इतरांना अद्याप दृश्यमान असतील. + आपण यापुढे स्टोरीज शेअर किंवा पाहू शकणार नाही. आपण अलिकडेच शेअर केलेले स्टोरीज अद्यतने देखील हटवली जातील. स्टोरी गोपनीयता @@ -5214,7 +5269,7 @@ ही स्टोरी कोण पाहू शकतात - "\"%1$s\" ग्रुपचे सदस्य ही स्टोरी पाहू आणि उत्तर देऊ शकतात. या चॅटसाठी आपण ग्रुपमध्ये सदस्यत्व अद्ययावत करु शकता." + "%1$s गटाचे सदस्य ही स्टोरी पाहू आणि उत्तर देऊ शकतात. या चॅटसाठी आपण गटामध्ये सदस्यत्व अद्ययावत करु शकता." ग्रुप स्टोरी हटवा diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 2c65a0c183..2f72e90ce9 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -192,7 +192,7 @@ Kemas Kini Jangan Update Amaran - Versi aplikasi Signal anda telah tamat tempoh. Anda boleh melihat sejarah mesej anda tetapi anda tidak boleh untuk menghantar dan menerima mesej sehinggalah anda update. + Versi aplikasi Signal anda telah tamat tempoh. Anda boleh melihat sejarah mesej anda tetapi tidak boleh menghantar dan menerima mesej sehinggalah anda mengemas kini. Pelayar web tidak dijumpai. @@ -650,7 +650,7 @@ Apakah Kumpulan Baru? Kumpulan Baharu mempunyai ciri-ciri seperti @sebutan dan pentadbir kumpulan, dan akan menyokong lebih banyak ciri pada masa akan datang. - Semua sejarah mesej dan media telah disimpan sebelum penaiktarafan. + Semua sejarah mesej dan media telah disimpan sebelum naik taraf dibuat. Anda perlu menerima jemputan untuk menyertai kumpulan ini sekali lagi dan tidak akan mendapat mesej kumpulan sehingga anda menerimanya. Ahli-ahli ini perlu menerima jemputan untuk menyertai kumpulan ini sekali lagi dan tidak akan mendapat mesej kumpulan sehingga mereka menerimanya: @@ -663,7 +663,7 @@ Naik taraf ke Group Baru Upgrade group ini Kumpulan Baharu mempunyai ciri-ciri seperti @sebutan dan pentadbir kumpulan, dan akan menyokong lebih banyak ciri pada masa akan datang. - Semua sejarah mesej dan media akan disimpan sebelum penaiktarafan. + Semua sejarah mesej dan media akan disimpan sebelum naik taraf dibuat. Menghadapi ralat network. Cuba lagi kemudian. Gagal menaik taraf @@ -1886,6 +1886,7 @@ %1$s kepada anda Media tidak lagi tersedia. Tidak menemui aplikasi yang dapat kongsikan media ini. + Tutup %1$d mesej baru dalam %2$d perbualan @@ -2120,9 +2121,9 @@ Anda Mesej asal tidak dijumpai - %1$s . Cerita + %1$s · Cerita - Anda . Cerita + Anda · Cerita Tiada lagi @@ -2580,11 +2581,11 @@ Semak simpanan Padamkan mesej lama? Kosongkan sejarah mesej? - Tindakan ini akan memadamkan semua sejarah mesej dan media daripada peranti anda yang lebih lama dari %1$s. + Ini akan memadam semua sejarah mesej dan media daripada peranti anda yang lebih daripada %1$s. Tindakan ini akan memotong semua perbualan sehingga %1$s mesej terkini secara kekal. - Tindakan ini akan memadamkan semua sejarah mesej dan media daripada peranti anda secara kekal. - Adakah anda pasti mahu memadamkan semua sejarah mesej? - Semua sejarah mesej akan dialih keluar secara kekal. Tindakan ini tidak dapat dibuat asal. + Ini akan memadam semua sejarah mesej dan media daripada peranti anda secara kekal. + Adakah anda pasti mahu memadam semua sejarah mesej? + Semua sejarah mesej akan dialih keluar secara kekal. Tindakan ini tidak boleh diulang. Padamkan semua sekarang Selama-lamanya 1 tahun @@ -2662,10 +2663,14 @@ Sesuaikan pilihan + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ Bukan Sekarang + + + Persediaan keselamatan + + Lindungi dana anda + + Bantu menghalang seseorang yang mempunyai telefon anda daripada mengakses dana anda dengan menambah satu lagi lapisan keselamatan. Anda boleh nyahdayakan pilihan ini dalam Tetapan. + + Dayakan kunci pembayaran + + Bukan sekarang + + Langkau langkah ini? + + Melangkau langkah ini boleh membenarkan sesiapa sahaja yang mempunyai akses fizikal kepada telefon anda untuk memindahkan dana atau melihat frasa pemulihan anda. + + Batal + + Langkau + Tambah dana Alamat Dompet Anda @@ -4157,7 +4182,7 @@ Tambah mesej Ciri ajuan lebih pantas - Video akan dipotong kepada klip 30s dan dihantar sebagai Cerita pelbagai. + Video akan dipotong kepada klip 30s dan dihantar sebagai beberapa Cerita. Video yang dihantar ke Cerita tidak boleh melebihi 30s. Mesej dimajukan kini dihantar serta-merta. @@ -4631,7 +4656,7 @@ Sembunyikan cerita? - Kemas kini cerita terbaru daripada %1$s tidak akan muncul di bahagian atas senarai cerita lagi. + Kemas kini cerita terbaru daripada %1$s tidak akan muncul dalam senarai teratas cerita lagi. Sembunyikan @@ -4649,7 +4674,7 @@ Padam cerita? - Cerita ini akan dipadamkan untuk anda dan semua orang yang telah menerimanya. + Cerita ini akan dipadam untuk anda dan semua orang yang telah menerimanya. Tidak boleh menyimpan @@ -4692,14 +4717,16 @@ Alih keluar penonton Tiada balasan lagi + + Anda tidak boleh membalas cerita ini kerana anda bukan lagi ahli kumpulan ini. - Telah bereaksi kepada cerita + Telah menghantar reaksi kepada cerita Tontonan Balasan - Bereaksi kepada cerita ini + Telah menghantar reaksi kepada cerita ini Balas secara peribadi kepada %1$s @@ -4710,8 +4737,14 @@ Padam Cerita Saya + + + %1$d viewers + + + View - Siapa yang boleh tonton cerita ini + Siapa boleh tonton cerita ini Sembunyikan cerita daripada @@ -4735,15 +4768,13 @@ %1$d orang - Pilih siapa yang boleh lihat cerita anda. Perubahan tidak akan mempengaruhi cerita yang anda telah hantar. + Pilih siapa yang boleh tonton cerita anda. Perubahan tidak akan mempengaruhi cerita yang anda telah hantar. Balasan & reaksi Benarkan balasan & reaksi - Benarkan orang yang boleh melihat cerita anda bereaksi dan balas - - Sembunyikan cerita anda daripada orang tertentu. Dengan lalai, cerita anda dikongsikan dengan %1$s anda + Benarkan orang yang boleh menonton cerita anda menghantar reaksi dan membalas Hubungan Signal @@ -4763,7 +4794,7 @@ Alih keluar %1$s? - Orang ini tidak lagi akan dapat melihat cerita anda. + Orang ini tidak lagi dapat melihat cerita anda. Alih keluar @@ -4791,7 +4822,7 @@ Taip atau tampal URL - Kongsi pautan dengan tontonan cerita anda + Kongsi pautan dengan penonton cerita anda Cari @@ -4802,10 +4833,26 @@ Hanya berkongsi dengan… Selesai + + Alih keluar cerita kumpulan? + + \" %1$s \" akan dialih keluar. + + Alih keluar + + Padam cerita peribadi? + + \" %1$s \" dan kemas kini yang dikongsi kepada cerita ini akan dipadamkan. + + Padam + + Cerita tersedia untuk pengguna beta Signal sahaja. + + Jika anda berkongsi cerita, ia hanya akan tersedia kepada orang yang menggunakan Signal beta. Tambah ke cerita? - Menambah kandungan ke cerita anda membenarkan hubungan Signal melihat ia selama 24 jam. Anda boleg menukar siapa yang boleh melihat cerita anda dalam Tetapan. + Menambah kandungan ke cerita membenarkan hubungan Signal anda melihatnya selama 24 jam. Anda boleh menukar siapa yang boleh menonton cerita anda dalam Tetapan. Tambah ke cerita @@ -4814,10 +4861,12 @@ Cerita tidak boleh dihantar. Periksa sambungan anda dan cuba lagi. Hantar + + Matikan dan padam Kongsi & Lihat Cerita - Anda tidak lagi dapat berkongsi atau melihat Cerita apabila pilihan ini dimatikan. + Anda tidak lagi dapat berkongsi atau menonton Cerita apabila pilihan ini dimatikan. Pilih penonton @@ -4859,7 +4908,7 @@ Menghantar balasan… - Cerita ini tidak tersedia lagi. + Cerita ini tidak lagi tersedia. Tiada Sambungan Internet @@ -4867,7 +4916,7 @@ Hantar cerita - Gagal untuk menghantar cerita + Gagal menghantar cerita Lihat cerita @@ -4883,11 +4932,11 @@ Matikan - Anda bereaksi kepada cerita %1$s + Anda menghantar reaksi kepada cerita %1$s - Bereaksi kepada cerita anda + Menghantar reaksi kepada cerita anda - Bereaksi kepada cerita + Menghantar reaksi kepada cerita @@ -4952,11 +5001,15 @@ Hanya kongsi dengan - Cerita peribadi . %1$d tontonan + Cerita peribadi · %1$d penonton - Cerita kumpulan . %1$d tontonan + Cerita kumpulan · %1$d penonton + + + + %1$d ahli @@ -5088,15 +5141,15 @@ Matikan cerita? - Anda tidak lagi boleh berkongsi atau melihat cerita. Sebarang cerita yang anda hantar baru-baru ini masih boleh dilihat oleh orang lain sehingga ia tamat tempoh. + Anda tidak lagi boleh berkongsi atau menonton cerita. Cerita yang anda hantar baru-baru ini juga akan dipadam. Privasi cerita - Siapa yang boleh tonton cerita ini + Siapa boleh tonton cerita ini - "Ahli kumpulan \"%1$s\" boleh menonton dan membalas cerita ini. Anda boleh kemas kini keahlian untuk sembang ini dalam kumpulan." + "Ahli kumpulan %1$s boleh menonton dan membalas cerita ini. Anda boleh kemas kini keahlian untuk sembang ini dalam kumpulan." Alih keluar cerita kumpulan diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml index 7d8e0d8749..2347568266 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -192,7 +192,7 @@ အပ်ဒိတ် လုပ် အပ်ဒိတ် မလုပ် သတိပေးချက် - သင်၏ Signal ဗားရှင်း သက်တမ်းကုန်သွားပြီ။ သင်၏ မက်ဆေ့ခ်ျမှတ်တမ်းကို သင်ကြည့်နိုင်သည်။ သို့သော် အပ်ဒိတ် မလုပ်မချင်း မက်ဆေ့ခ်ျများပို့ခြင်း သို့မဟုတ် လက်ခံခြင်း မလုပ်နိုင်ပါ။ + သင်၏ Signal ဗားရှင်း သက်တမ်းကုန်သွားပြီ။ သင်၏ မက်ဆေ့ချ်မှတ်တမ်းကို သင်ကြည့်နိုင်သော်လည်း အပ်ဒိတ် မလုပ်မချင်း မက်ဆေ့ချ်များပို့ခြင်း သို့မဟုတ် လက်ခံခြင်း မလုပ်နိုင်ပါ။ Web browser ကိုရှာမတွေ့ပါ @@ -650,7 +650,7 @@ အဖွဲ့အသစ်များ ဆိုတာဘာလဲ။ အဖွဲ့အသစ်များတွင် @mentions နှင့် အုပ်စု အက်မင်များ ကဲ့သို့သော အင်္ဂါရပ်များရှိသည်။ နောင်တွင်လည်း ပို၍ များပြားသော အင်္ဂါရပ်များကို ထောက်ပံ့လိမ့်မည်။ - မက်ဆေ့ခ်ျ သမိုင်းနှင့် မီဒီယာ အားလုံးကို အဆင့်မြှင့်တင်ခြင်း မပြုမီ သိမ်းဆည်းထားသည်။ + မက်ဆေ့ချ်မှတ်တမ်းနှင့် မီဒီယာ အားလုံးကို အဆင့်မြှင့်တင်ခြင်း မပြုမီ သိမ်းဆည်းထားပါသည်။ သင် ဤအုပ်စုထဲသို့ ပြန်ဝင်ရန် ဖိတ်ကြားချက်ကို လက်ခံရန် လိုလိမ့်မည်။ သင်လက်ခံပြီးမှ အဖွဲ့လိုက် မက်ဆေ့ခ်ျများကို ရရှိမည် ဖြစ်သည်။ အဖွဲ့ဝင်များသည် ဤအုပ်စုထဲသို့ ပြန်ဝင်ရန် ဖိတ်ကြားချက်ကိုလက်ခံရန်လိုလိမ့်မည်။ ထိုသူတို့ လက်ခံပြီးမှ အဖွဲ့လိုက် မက်ဆေ့ခ်ျများကို ရရှိမည် ဖြစ်သည်။ @@ -663,7 +663,7 @@ အုပ်စု အသစ်သို့ အဆင့်မြှင့်တင်ပါ။ ဤအုပ်စုကို အဆင့်မြှင့်တင်ပါ။ အဖွဲ့အသစ်များတွင် @mentions နှင့် အုပ်စု အက်မင်များ ကဲ့သို့သော အင်္ဂါရပ်များရှိသည်။ နောင်တွင်လည်း ပို၍ များပြားသော အင်္ဂါရပ်များကို ထောက်ပံ့လိမ့်မည်။ - မက်ဆေ့ခ်ျ သမိုင်းနှင့် မီဒီယာ အားလုံးကို အဆင့်မြှင့်ခြင်း မပြုမီ သိမ်းဆည်းထားသည်။ + မက်ဆေ့ချ်မှတ်တမ်းနှင့် မီဒီယာ အားလုံးကို အဆင့်မြှင့်တင်ခြင်း မပြုမီ သိမ်းဆည်းသွားပါမည်။ ကွန်ယက် အမှားတစ်ခုနှင့် ကြုံတွေ့ခဲ့သည်။ နောက်မှ ပြန်လည် ကြိုးစားပါ။ အဆင့်မြှင့်ခြင်း မအောင်မြင်ပါ။ @@ -1886,6 +1886,7 @@ %1$s ထံမှ မီဒီယာမရှိတော့ပါ ဤမီဒီယာကို ဝေမျှနိုင်သော အပ္ပလီကေးရှင်း မတွေ့ရှိပါ။ + ပိတ်မယ် စကားဝိုင်း %2$d တွင် စာပေါင်း %1$d ရှိသည်။ @@ -2537,7 +2538,7 @@ ငွေပေးချေမှုများ (စမ်းသပ်သည့် Beta ဗားရှင်း) စာလုံးရေ အကန့်အသတ် မက်ဆေ့များကို သိမ်းထားပါ - မက်ဆေ့ရာဇဝင်ရှင်းလင်းမယ် + မက်ဆေ့ချ်မှတ်တမ်း ရှင်းလင်းရန် ချိတ်ဆက်ထားသော စက်ပစ္စည်းများ အလင်း အမှောင် @@ -2571,7 +2572,7 @@ ဝိုင်ဖိုင်ကို အသုံးပြုသည့်အခါ Roaming လုပ်သည့်အခါ ရုပ်/သံ/ပုံကို အလိုအလျောက် ဒေါင်းလုတ်လုပ်ပါ - မက်ဆေ့ခ်ျရာဇဝင် + မက်ဆေ့ချ်မှတ်တမ်း သိုလှောင်မှုအသုံးပြုမှု ဓါတ်ပုံများ ဗီဒီယိုများ @@ -2579,12 +2580,12 @@ အသံ သိုလှောင်မှုကို ပြန်သုံးသပ်မယ် မက်ဆေ့ခ်ျအဟောင်းများကို ဖျက်မည်လား? - မက်ဆေ့ရာဇဝင်ကို ရှင်းလင်းမည်လား? - ၎င်းလုပ်ဆောင်ချက်သည် သင့်စက်ပေါ်ရှိ %1$s ထက်ကြာသော မက်ဆေ့ချ်ရာဇဝင် နှင့် မီဒီယာများကို ဖျက်သိမ်းလိုက်ပါမည်။ + မက်ဆေ့ချ်မှတ်တမ်းကို ရှင်းလင်းမည်လား။ + ၎င်းသည် သင့်စက်ရှိ %1$s ထက်ကြာသော မက်ဆေ့ချ်မှတ်တမ်းနှင့် မီဒီယာများကို အပြီးဖျက်ပစ်လိုက်ပါမည်။ ၎င်းလုပ်ဆောင်ချက်သည် သင်၏ စကားပြောဆိုမှုများအားလုံးကို နောက်ဆုံးမက်ဆေ့ချ် %1$s ခုထိ ဖြတ်လိုက်ပါမည်။ - ၎င်းလုပ်ဆောင်ချက်သည် သင့်စက်ပေါ်ရှိ မက်ဆေ့ချ်ရာဇဝင် နှင့် မီဒီယာများ အားလုံးကို ဖျက်သိမ်းလိုက်ပါမည်။ - သင်မှ မက်ဆေ့ချ်ရာဇဝင် များအားလုံးကို ဖျက်မည်ဆိုတာ သေချာပါသလား? - မက်ဆေ့ချ်ရာဇဝင်များအားလုံးကို အမြဲတမ်းဖျက်သိမ်းလုပ်ပါမည်။ ၎င်းလုပ်ဆောင်ချက်ကို ပြန်ရုပ်သိမ်းလို့် မရပါ။ + ၎င်းသည် သင့်စက်ရှိ မက်ဆေ့ချ်မှတ်တမ်းနှင့် မီဒီယာများ အားလုံးကို အပြီးဖျက်ပစ်လိုက်ပါမည်။ + မက်ဆေ့ချ်မှတ်တမ်းများ အားလုံးကို ဖျက်လိုသည်မှာ သေချာပါသလား။ + မက်ဆေ့ချ်မှတ်တမ်းများ အားလုံးကို အပြီးဖယ်ရှားလိုက်ပါမည်။ ဤလုပ်ဆောင်ချက်ကို ပြန်ရုပ်သိမ်း၍ မရပါ။ အားလုံးကို ယခု ဖျက်သိမ်းမယ် အမြဲတမ်း 1 နှစ် @@ -2662,10 +2663,14 @@ ရွေးချယ်မှုကို စိတ်ကြိုက်ပြင်ဆင်မယ် + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ ယခု မလုပ်ပါ + + + လုံခြုံရေး သတ်မှတ်ချိန်ညှိမှု + + သင်၏ ငွေကြေးကို ကာကွယ်ပါ + + နောက်ထပ် လုံခြုံရေးအလွှာ ပေါင်းထည့်ခြင်းဖြင့် သင်၏ငွေကြေးကို အခြားတစ်ယောက်က ရယူသုံးစွဲခြင်းအား ကူညီတားဆီးပေးပါသည်။ ဤသည်ကို ဆက်တင်တွင် ပိတ်နိုင်ပါသည်။ + + ငွေပေးချေမှုလော့ခ်ကို ဖွင့်ရန် + + ယခု မလုပ်ဆောင်သေးပါ။ + + ဤအဆင့်ကို ကျော်မည်လား။ + + ဤအဆင့်ကို ကျော်လိုက်ခြင်းဖြင့် သင့်ဖုန်းကို ဝင်ရောက်ကြည့်ရှုခွင့်ရှိသည့် မည်သူမဆိုအား ငွေလွှဲရန် သို့မဟုတ် သင်၏ ပြန်လည်ရယူရေး စကားစုကို ကြည့်ရန် ခွင့်ပြုပေးပါသည်။ + + မလုပ်တော့ပါ + + ကျော်ပါ။ + ငွေဖြည့်မယ် သင့် ပိုက်ဆံအိတ် Wallet လိပ်စာ @@ -4679,7 +4704,7 @@ ကြည့်ရှုမှုများ မရှိသေးပါ - သင့်စတိုရီများအား မည်သူ ကြည့်ပြီးပြီလဲကို မြင်နိုင်ရန် ဖတ်ပြီးကြောင်းညွှန်ပြမှုကို ဖွင့်ပါ။ + သင့်စတိုရီများအား ကြည့်ပြီးသူများကို မြင်နိုင်ရန် ဖတ်ပြီးကြောင်းညွှန်ပြမှုကို ဖွင့်ပါ။ ဆက်တင်သို့ သွားရန် @@ -4692,6 +4717,8 @@ ကြည့်ရှုသူအား ဖယ်ရှားရန် ပြန်စာများ မရှိသေးပါ + + သင်သည် ဤအဖွဲ့ဝင် မဟုတ်တော့သောကြောင့် ဤစတိုရီကို စာပြန်နိုင်တော့မည် မဟုတ်ပါ။ စတိုရီကို တုံ့ပြန်မှု ပေးခဲ့ပါသည် @@ -4710,6 +4737,12 @@ ဖျက်မယ် ကျွန်ုပ်၏ စတိုရီ + + + %1$d viewers + + + View ဤစတိုရီကို ကြည့်နိုင်မည့်သူများ @@ -4742,8 +4775,6 @@ ပြန်စာများနှင့် တုံ့ပြန်မှုများကို ခွင့်ပြုရန် သင့်စတိုရီကို ကြည့်နိုင်သူများအား တုံ့ပြန်မှု ပေးရန်နှင့် ပြန်စာပို့ရန် ခွင့်ပြုပါ - - သင့်စတိုရီကို အချို့သူများအတွက် ဝှက်ပါ။ ပုံသေအားဖြင့် သင့်စတိုရီကို သင့် %1$s နှင့် မျှဝေပါသည် Signal အဆက်အသွယ်များ @@ -4802,10 +4833,26 @@ ဖော်ပြထားသူများထံသာ ဝေမျှရန်… ပြီးပါပြီ + + အဖွဲ့ စတိုရီကို ဖယ်ရှားမည်လား။ + + \"%1$s\" ကို ဖယ်ရှားသွားပါမည်။ + + ဖယ်ရှားမယ် + + သီးသန့် စတိုရီကို ဖျက်မည်လား။ + + \"%1$s\" နှင့် ဤစတိုရီအတွက် ဝေမျှထားသည့် အပ်ဒိတ်များကို ဖျက်သွားပါမည်။ + + ဖျက်ပါ + + စတိုရီများကို Signal Beta သုံးစွဲသူများအတွက်သာ ရရှိနိုင်ပါသည်။ + + သင်သည် စတိုရီတစ်ခုကို ဝေမျှပါက Signal Beta ရှိ လူများသည် ၎င်းကို မြင်ရပါမည်။ စတိုရီတွင် ပေါင်းထည့်မည်လား။ - သင့်စတိုရီတွင် အကြောင်းအရာ ထည့်ခြင်းဖြင့် သင်၏ Signal အဆက်အသွယ်များအား ၎င်းကို ၂၄ နာရီ ကြည့်ရှုခွင့်ပြုပါသည်။ သင့်စတိုရီအား ကြည့်ရှုနိုင်သူများကို ဆက်တင်တွင် ပြောင်းနိုင်ပါသည်။ + သင့်စတိုရီတွင် ပေါင်းထည့်လိုက်သော အကြောင်းအရာကို သင်၏ Signal အဆက်အသွယ်များအား ၂၄ နာရီ ကြည့်ရှုခွင့်ပြုပါသည်။ သင့်စတိုရီအား ကြည့်ရှုနိုင်သူများကို ဆက်တင်တွင် ပြောင်းနိုင်ပါသည်။ စတိုရီတွင် ပေါင်းထည့်ရန် @@ -4814,6 +4861,8 @@ စတိုရီကို ပို့၍ မရနိုင်ပါ။ သင့်ချိတ်ဆက်မှုကို စစ်ဆေးပြီး ထပ်ကြိုးစားပါ။ ပေးပို့မယ် + + ပိတ်ပြီး ဖျက်ရန် စတိုရီများကို မျှဝေကြည့်ရှုရန် @@ -4949,7 +4998,7 @@ ယခု မလုပ်ဆောင်သေးပါ။ - ဖော်ပြထားသူများထံသာ ဝေမျှရန် + ဖော်ပြပါထံသာဝေမျှရန် သီးသန့် စတိုရီ · ကြည့်ရှုသူ · %1$d ဦး @@ -4958,6 +5007,10 @@ အဖွဲ့ စတိုရီ · ကြည့်ရှုသူ · %1$d ဦး + + + %1$d အဖွဲ့ဝင်များ + %1$s · ကြည့်ရှုသူ %2$d ဦး @@ -5088,7 +5141,7 @@ စတိုရီများကို ပိတ်မည်လား။ - စတိုရီများ ဝေမျှခြင်း သို့မဟုတ် ကြည့်ခြင်းများ လုပ်နိုင်တော့မည် မဟုတ်ပါ။ မကြာသေးမီက ပို့ထားသော စတိုရီများကို သက်တမ်းမကုန်မချင်း အခြားသူများက ဆက်လက်မြင်နိုင်ပါမည်။ + သင်သည် စတိုရီများ ဝေမျှရန် သို့မဟုတ် ကြည့်ရန် လုပ်ဆောင်နိုင်တော့မည် မဟုတ်ပါ။ မကြာသေးမီက သင် ဝေမျှထားသည့် အပ်ဒိတ်များကိုလည်း ဖျက်ပစ်ပါမည်။ စတိုရီ ကိုယ်ပိုင်အချက်အလက် @@ -5096,7 +5149,7 @@ ဤစတိုရီကို ကြည့်နိုင်မည့်သူများ - "\"%1$s\" အဖွဲ့ဝင်များသည် ဤစတိုရီကို ကြည့်ခြင်း၊ အကြောင်းပြန်ခြင်းများ လုပ်နိုင်ပါသည်။ အဖွဲ့အတွင်းရှိ ဤချက်(တ်)အတွက် မန်ဘာပလန်ကို အပ်ဒိတ်လုပ်နိုင်ပါသည်။" + "%1$s အဖွဲ့ဝင်များသည် ဤစတိုရီကို ကြည့်ခြင်း၊ အကြောင်းပြန်ခြင်းများ လုပ်နိုင်ပါသည်။ အဖွဲ့အတွင်းရှိ ဤချက်(တ်)အတွက် မန်ဘာပလန်ကို အပ်ဒိတ်လုပ်နိုင်ပါသည်။" အဖွဲ့စတိုရီကို ဖယ်ရှားရန် diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 23d09eb663..4cc90864ca 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -218,7 +218,7 @@ Søk på brukernavn - Mine stories + Mine storyer Ny story @@ -673,7 +673,7 @@ Hva er en \"ny\" gruppe? Nye grupper har funksjoner som @mentions og gruppeadministratorer, og vil støtte enda flere i fremtiden. - All meldingshistorikk og alle mediefiler fra før oppgradering har blitt tatt vare på. + Alle meldingslogger og mediefiler fra før oppgraderingen, har blitt tatt vare på. Du må akseptere en invitasjon for å bli med i gruppen igjen, og vil ikke få gruppemeldinger før du har akseptert. Dette medlemmet må akseptere en invitasjon for å bli med i gruppen igjen, og vil ikke få gruppemeldinger før det har akseptert: @@ -688,7 +688,7 @@ Oppgrader til \"ny\" gruppe Oppgrader denne gruppen Nye grupper har funksjoner som @mentions og gruppeadministratorer, og vil støtte enda flere i fremtiden. - All meldingshistorikk og alle mediefiler fra før oppgraderingen blir tatt vare på. + Alle meldingslogger og mediefiler fra før oppgraderingen, blir tatt vare på. Det oppstod en nettverksfeil. Prøv igjen senere. Kunne ikke oppgradere. @@ -1542,7 +1542,7 @@ Nettverk mislyktes. Nummer ikke registrert. Nummeret du ringte støtter ikke krypterte samtaler. - Ålreit + Skjønner @@ -1960,6 +1960,7 @@ Fra %1$s til deg Media er ikke lenger tilgjengelig. Kan ikke finne app som er i stand til å dele dette mediet. + Lukk %1$d nye meldinger i %2$d samtaler @@ -2343,7 +2344,7 @@ Tidsstempelet er kopiert til utklippstavlen. - Varsler om storyen din vil vises her. + Oppdateringer av storyen din vises her. @@ -2605,7 +2606,7 @@ Engangsbeløp Personvern - Stories + Storyer MMS-brukeragent Manuelt MMS-oppsett MMSC-adresse @@ -2623,7 +2624,7 @@ Betalinger (Beta) Lengdegrense for samtaler Behold meldinger - Slett meldingshistorikk + Slett meldingslogg Koblede enheter Lys Mørk @@ -2657,7 +2658,7 @@ Ved bruk av Wi-Fi Ved bruk av dataroaming Automatisk nedlasting av medier - Meldingshistorikk + Meldingslogg Lagringsbruk Bilder Videoer @@ -2665,12 +2666,12 @@ Lyd Se gjennom lagring Slett eldre meldinger? - Slett meldingshistorikk? - Dette vil permanent slette all meldingshistorikk og media som er eldre enn %1$sfra denne din enhet. + Vil du slette meldingsloggen? + Dette vil permanent slette alle meldingslogger og mediefiler som er eldre enn %1$s fra denne enheten. Dette vil umiddelbart forkorte alle samtaler til de %1$s siste meldingene. - Dette vil permanent slette all meldingshistorikk og media fra denne din enhet. - Er du sikker på at du vil slette all meldingshistorikk? - All meldingshistorikk vil bli permanent slettet. Denne handlingen kan ikke angres. + Dette vil permanent slette alle meldingslogger og mediefiler fra denne enheten. + Er du sikker på at du vil slette alle meldingslogger? + Alle meldingslogger slettes permanent. Denne handlingen kan ikke angres. Slett alt nå For alltid 1 år @@ -2748,10 +2749,14 @@ Tilpass opsjon + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Ikke nå + + + Sikkerhetsoppsett + + Beskytt pengene dine + + Legg til ekstra sikkerhetstiltak for å forhindre at uvedkommende som får tak i telefonen din, får tilgang til pengene dine. Du kan slå dette av i innstillingene. + + Aktiver betalingslås + + Ikke nå + + Vil du hoppe over dette trinnet? + + Hvis du hopper over dette trinnet, kan alle som har fysisk tilgang til telefonen din overføre penger og se gjenopprettingsfrasen din. + + Avbryt + + Hopp over + Legg til penger Lommebokadressen din @@ -3976,7 +4001,7 @@ Standard nedtelling for nye samtaler Sett standard utløpstid for tidsavgrensede meldinger, for nye samtaler startet av deg. - Styr storiesene dine og hvem som kan se dem + Administrer storyene dine og hvem som kan se dem Sett opp krav om Android-skjermlås eller fingeravtrykk for å overføre penger Kan ikke slå på betalingslås @@ -4256,9 +4281,9 @@ Legg til en melding Raskere videresending - Videoene vil kuttes ned til klipp på 30 sekunder og sendes som flere stories. + Videoene trimmes ned til klipp på 30 sekunder og sendes som flere storyer. - Videoer som legges ut på stories kan ikke være lengre enn 30 sekunder. + Videoer som legges ut på Storyer kan ikke være lenger enn 30 sekunder. Videresendte meldinger sendes nå umiddelbart. Send %1$d melding @@ -4699,15 +4724,15 @@ Samtaler - Stories + Storyer 99+ - Personvern for stories + Personvern for storyer - Mine stories + Mine storyer - Trykk for å legge til en ny story + Trykk for å legge til en story Ingen nylige oppdateringer å vise. @@ -4733,9 +4758,9 @@ Trykk for å prøve igjen - Skjule storyen? + Vil du skjule storyen? - Nye oppdateringer fra %1$s vises ikke øverst på listen over storyer lenger. + Nye oppdateringer av storyer fra %1$s vises ikke øverst på listen over storyer lenger. Skjul @@ -4752,7 +4777,7 @@ Story fra %1$s - Slette storyen? + Vil du slette storyen? Dette vil slette storyen for deg og alle du har delt den med. @@ -4799,6 +4824,8 @@ Fjern seer Ingen svar ennå + + Du kan ikke svare på denne storyen fordi du ikke er medlem av denne gruppen lenger. Reagerte på storyen @@ -4817,6 +4844,13 @@ Slett Min story + + + %1$d viewer + %1$d viewers + + + View Disse kan se denne storyen @@ -4844,15 +4878,13 @@ %1$d personer - Velg ut hvem som kan se storyen din. Dette vil ikke påvirke stories som du allerede har delt. + Velg hvem som kan se storyen din. Dette vil ikke påvirke storyer som du allerede har delt. Svar og reaksjoner Tillat svar og reaksjoner Gjør det mulig for de som kan se storyen din å reagere og svare - - Skjul storyen din fra utvalgte personer. Storyen din deles automatisk med dine %1$s Signal-kontakter @@ -4872,7 +4904,7 @@ Vil du fjerne %1$s? - Denne personen vil ikke kunne se storyen din lenger. + Denne personen kan ikke lenger se storyen din. Fjern @@ -4880,7 +4912,7 @@ Dette kan ikke gjøres om. - Endre navn på story + Endre navnet på storyen Navn på story @@ -4900,7 +4932,7 @@ Skriv eller lim inn en nettadresse - Del en link med de som ser storyen din + Del en lenke med de som ser storyen din Søk @@ -4911,18 +4943,36 @@ Del kun med … Ferdig + + Vil du fjerne gruppestoryen? + + «%1$s» fjernes. + + Fjern + + Vil du slette den private storyen? + + «%1$s» slettes, sammen med alle tilknyttede oppdateringer. + + Slett + + Storyer er kun tilgjengelig for Signal beta-brukere. + + Hvis du deler en story, vises den kun for personer som bruker Signal beta. - Legge til i story? + Vil du legge til i storyen? - Signal-kontaktene dine kan se det du legger til i story i 24 timer. Du kan velge hvem som kan se storyen din i Innstillinger. + Signal-kontaktene dine kan se det du legger til i storyen din i 24 timer. Du kan velge hvem som kan se storyen din, i Innstillinger. Legg til i story Rediger seerlisten - Storyen kunne ikke sendes. Sjekk internettilkoblingen din og prøv igjen. + Storyen kunne ikke sendes. Sjekk internettilkoblingen og prøv igjen. Send + + Slå av og slett Del og se storyer @@ -5060,7 +5110,7 @@ Ikke nå - Del storyen kun med + Del kun med Privat story · Sett av %1$d @@ -5071,6 +5121,11 @@ Gruppestory · Sett av %1$d Gruppestory · Sett av %1$d + + + %1$d medlem + %1$d medlemmer + %1$s · Sett av %2$d @@ -5087,11 +5142,11 @@ Vil du fjerne gruppestoryen? - Dette vil fjerne storyen fra listen. Du vil fremdeles se de andre storyene fra denne gruppen. + Dette vil fjerne storyen fra listen. Du kan fremdeles se de andre storyene fra denne gruppen. Fjern - Slette storyen? + Vil du slette storyen? Vil du slette den private storyen «%1$s»? @@ -5139,7 +5194,7 @@ Alle kontaktene er gjennomgått, trykk på Send for å fortsette. - Du har %1$d kontakter som kan ha installert Signal på nytt eller byttet enhet. Sjekk sikkerhetsnumrene deres eller fjern dem fra storyen din før du deler storyen din med dem. + Du har %1$d kontakter som kan ha installert Signal på nytt eller byttet enhet. Du bør sjekke sikkerhetsnumrene deres eller fjern dem fra storyen din før du eventuelt deler den med dem. Bekreft sikkerhetsnummer @@ -5194,27 +5249,27 @@ - Stories forsvinner automatisk etter 24 timer. Velg hvem som kan se storyen din, eller del nye stories med utvalgte personer og grupper. + Storyer forsvinner automatisk etter 24 timer. Velg hvem som kan se storyen din, eller del nye storyer med utvalgte personer og grupper. - Skru av stories + Slå av storyer - Hvis du velger å skru av stories, kan du verken se eller dele stories. + Hvis du velger å slå av storyer, kan du verken se eller dele storyer. - Skru på stories + Slå på storyer - Del dine egne og se andre personers stories. De forsvinner automatisk etter 24 timer. + Del dine egne og se andre personers storyer. De forsvinner automatisk etter 24 timer. - Vil du skru av stories? + Vil du slå av storyer? - Du vil ikke lenger kunne se og dele stories. Storiesene du har delt vil fortsatt være synlige for kontaktene dine til de utløper. + Du kan ikke lenger dele eller se storyer. Oppdateringer av storyer som du nylig har delt, slettes også. - Personvern for stories + Personvern for storyer Disse kan se denne storyen - "Medlemmene av %1$s kan se og svare på denne storyen. Du kan endre hvem som er med i denne samtalen inne i gruppen." + "Medlemmene av %1$s kan se og svare på denne storyen. Du kan endre hvem som er med i denne samtalen, inne i gruppen." Fjern gruppestoryen @@ -5229,7 +5284,7 @@ Overfør SMS-meldingene dine - Du kan eksportere SMS-meldingene dine til minnet på telefonen din. Dette gir andre SMS-apper på telefonen din tilgang til og mulighet til å importere dem. Dette oppretter ikke en delbar fil av SMS-meldingsloggen din. + Du kan eksportere SMS-meldingene dine til minnet på telefonen din. Dette gir andre SMS-apper på telefonen din tilgang til og mulighet til å importere dem. Det oppretter ikke en delbar fil av SMS-meldingsloggen din. Fortsett diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index d6f0d54a91..7b3d656db5 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1960,6 +1960,7 @@ %1$s naar jou Media niet langer beschikbaar. Geen app gevonden waarmee dit bestand met anderen gedeeld kan worden. + Sluiten %1$d nieuwe berichten in %2$d gesprekken @@ -2666,11 +2667,11 @@ Alle bestanden weergeven Oude berichten wissen? Berichtengeschiedenis wissen? - Dit zal pertinent alle gespreksgeschiedenis en media ouder dan %1$s van dit apparaat wissen. + Dit zal alle gespreksgeschiedenis en media ouder dan %1$s permanent van dit apparaat wissen. Dit zal direct alle gesprekken inkorten tot de %1$s meest recente berichten. - Dit zal pertinent al je gespreksgeschiedenis en media van dit apparaat wissen. + Dit zal al je gespreksgeschiedenis en media van dit apparaat permanent wissen. Weet je zeker dat je alle gespreksgeschiedenis wilt wissen? - Alle gespreksgeschiedenis zal pertinent worden gewist. Dit kan niet ongedaan worden gemaakt. + Alle gespreksgeschiedenis zal permanent worden gewist. Dit kan niet ongedaan worden gemaakt. Nu alles wissen Voor altijd 1 jaar @@ -2748,10 +2749,14 @@ Instelling personaliseren + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Niet nu + + + Veiligheidsinstellingen + + Bescherm je geld + + Voorkom met een extra beveiligingslaag dat iemand anders dan jij via jouw telefoon toegang heeft tot je geld. In instellingen kun je deze optie uitschakelen. + + Betalingsvergrendeling inschakelen + + Niet nu + + Deze stap overslaan? + + Als je deze stap overslaat, kan iemand met fysieke toegang tot je telefoon geld overmaken of je herstelzin bekijken. + + Annuleren + + Overslaan + Krediet toevoegen Het adres van je portemonnee @@ -4799,6 +4824,8 @@ Gebruiker verwijderen Nog geen reacties + + Je kunt niet reageren op dit verhaal, omdat je geen lid van deze groep meer bent. Reageerde op dit verhaal @@ -4817,6 +4844,13 @@ Wissen Mijn verhaal + + + %1$d viewer + %1$d viewers + + + View Wie kan dit verhaal bekijken @@ -4851,8 +4885,6 @@ Reacties toelaten Sta personen die je verhaal mogen zien ook toe om te reageren - - Met deze optie kun je je verhaal voor specifieke personen verbergen. Je verhaal is standaard zichtbaar voor al je %1$s Signal-contacten @@ -4864,7 +4896,7 @@ Hem of haar in je systeemcontactenlijst te hebben staan - "Je Signal-kennissen kunnen jouw profielnaam en -foto zien en kunnen je “Mijn verhaal”-plaatsingen zien tenzij je die specifiek voor hem of haar verbergt." + "Je Signal-contacten kunnen jouw profielnaam en -foto zien en kunnen je “Mijn verhaal”-plaatsingen zien tenzij je die specifiek voor hem of haar verbergt." Persoon toevoegen @@ -4911,10 +4943,26 @@ Deel alleen met… Klaar + + Verhaal verwijderen? + + \"%1$s\" wordt verwijderd. + + Overschrijvingsdetails wissen + + Privéverhaal verwijderen? + + \"%1$s\" en updates die op dit verhaal zijn gedeeld, worden verwijderd. + + Wissen + + Verhalen is alleen beschikbaar voor Signal-beta-gebruikers. + + Als je een verhaal deelt, is dit alleen beschikbaar voor mensen die op Signal-beta zitten. Toevoegen aan verhaal? - Wanneer je een nieuw deel aan je verhaal toevoegt dan kunnen je Signal-kennissen dat deel van je verhaal voor de komende 24 uur bekijken. Je kunt in de instellingen aanpassen welke personen je verhaal kunnen bekijken. + Wanneer je een nieuw deel aan je verhaal toevoegt dan kunnen je Signal-contacten dat deel van je verhaal voor de komende 24 uur bekijken. Je kunt in de instellingen aanpassen welke personen je verhaal kunnen bekijken. Een verhaal toevoegen @@ -4923,6 +4971,8 @@ Je verhaal kan niet worden geüpload. Ga na dat je apparaat met het internet is verbonden en probeer het opnieuw. Uploaden + + Uitschakelen en verwijderen Verhaal weergeven & doorsturen @@ -5071,6 +5121,11 @@ Groepsverhaal · door %1$d persoon gezien Groepsverhaal · door %1$d personen gezien + + + %1$d persoon + %1$d personen + %1$s · %2$d keer bekeken. @@ -5206,7 +5261,7 @@ Verhalen uitzetten? - Je zult niet langer verhalen kunnen delen of bekijken. Verhalen die je recent verzonden hebt zullen nog steeds zichtbaar zijn tot deze verlopen. + Je kunt geen verhalen meer delen of bekijken. Updates die je recent op je verhaal hebt gedeeld, worden ook gewist. Verhaalprivacy diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index bafad4b706..13852a61b1 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -193,7 +193,7 @@ ਅੱਪਡੇਟ ਕਰੋ ਅੱਪਡੇਟ ਨਾ ਕਰੋ ਚੇਤਾਵਨੀ - Signal ਦੇ ਤੁਹਾਡੇ ਸੰਸਕਰਣ ਦੀ ਮਿਆਦ ਮੁੱਕ ਗਈ ਹੈ। ਤੁਸੀਂ ਆਪਣਾ ਸੁਨੇਹਾ ਇਤਿਹਾਸ ਵੇਖ ਸਕਦੇ ਹੋ ਪਰ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਅੱਪਡੇਟ ਨਹੀਂ ਕਰਦੇ ਉਦੋਂ ਤੱਕ ਤੁਸੀਂ ਸੁਨੇਹੇ ਭੇਜ ਜਾਂ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰ ਸਕੋਗੇ। + ਤੁਹਾਡੇ Signal ਦੇ ਵਰਜ਼ਨ ਦੀ ਮਿਆਦ ਪੁੱਗ ਗਈ ਹੈ। ਤੁਸੀਂ ਆਪਣੇ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਦੇਖ ਸਕਦੇ ਹੋ ਪਰ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਆਪਣਾ ਵਰਜ਼ਨ ਅੱਪਡੇਟ ਨਹੀਂ ਕਰਦੇ ਉਦੋਂ ਤੱਕ ਤੁਸੀਂ ਨਾ ਹੀ ਸੁਨੇਹੇ ਭੇਜ ਸਕੋਗੇ ਅਤੇ ਨਾ ਹੀ ਪ੍ਰਾਪਤ ਕਰ ਸਕੋਗੇ। ਕੋਈ ਵੈੱਬ ਬਰਾਊਜ਼ਰ ਨਹੀਂ ਲੱਭਿਆ। @@ -218,7 +218,7 @@ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਨਾਲ ਲੱਭੋ - ਮੇਰੀਆਂ ਕਹਾਣੀਆਂ + ਮੇਰੀਆਂ ਸਟੋਰੀਆਂ ਨਵੀਂ ਸਟੋਰੀ @@ -673,7 +673,7 @@ ਨਵੇਂ ਗਰੁੱਪ ਕੀ ਹਨ? ਨਵੇਂ ਗਰੁੱਪਾਂ ਵਿੱਚ @mentions ਅਤੇ ਗਰੁੱਪ ਐਡਮਿਨ ਵਰਗੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਹਨ, ਅਤੇ ਭਵਿੱਖ ਵਿੱਚ ਹੋਰ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦਾ ਸਮਰਥਨ ਕਰਨਗੇ। - ਸੁਨੇਹਿਆਂ ਦੇ ਸਾਰੇ ਪਿਛੋਕੜ ਅਤੇ ਮੀਡੀਆ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਰੱਖ ਲਿਆ ਗਿਆ ਹੈ। + ਸਾਰੇ ਪੁਰਾਣੇ ਸੁਨੇਹਿਆਂ ਅਤੇ ਮੀਡੀਆ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਸੰਭਾਲ ਕੇ ਰੱਖ ਲਿਆ ਗਿਆ ਹੈ। ਤੁਹਾਨੂੰ ਇਸ ਗਰੁੱਪ ਵਿੱਚ ਦੁਬਾਰਾ ਸ਼ਾਮਲ ਹੋਣ ਦੇ ਸੱਦੇ ਨੂੰ ਮਨਜ਼ੂਰ ਕਰਨਾ ਪਵੇਗਾ, ਅਤੇ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਮਨਜ਼ੂਰ ਨਹੀਂ ਕਰਦੇ ਉਦੋਂ ਤੱਕ ਗਰੁੱਪ ਦੇ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਨਹੀਂ ਹੋਣਗੇ। ਇਸ ਮੈਂਬਰ ਨੂੰ ਇਸ ਗਰੁੱਪ ਵਿੱਚ ਦੁਬਾਰਾ ਸ਼ਾਮਲ ਹੋਣ ਦੇ ਸੱਦੇ ਨੂੰ ਮਨਜ਼ੂਰ ਕਰਨਾ ਪਵੇਗਾ, ਅਤੇ ਜਦੋਂ ਤਕ ਉਹ ਸਵੀਕਾਰ ਨਹੀਂ ਕਰਦਾ ਉਦੋਂ ਤੱਕ ਉਸ ਨੂੰ ਗਰੁੱਪ ਦੇ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਨਹੀਂ ਹੋਣਗੇ। @@ -688,7 +688,7 @@ ਨਵੇਂ ਗਰੁੱਪ ਵਿੱਚ ਅੱਪਗ੍ਰੇਡ ਕਰੋ ਇਸ ਗਰੁੱਪ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਕਰੋ ਨਵੇਂ ਗਰੁੱਪਾਂ ਵਿੱਚ @mentions ਅਤੇ ਗਰੁੱਪ ਐਡਮਿਨ ਵਰਗੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਹਨ, ਅਤੇ ਭਵਿੱਖ ਵਿੱਚ ਹੋਰ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦਾ ਸਮਰਥਨ ਕਰਨਗੇ। - ਸੁਨੇਹਿਆਂ ਦੇ ਸਾਰੇ ਪਿਛੋਕੜ ਅਤੇ ਮੀਡੀਆ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਰੱਖ ਲਿਆ ਜਾਵੇਗਾ। + ਸਾਰੇ ਪੁਰਾਣੇ ਸੁਨੇਹਿਆਂ ਅਤੇ ਮੀਡੀਆ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਸੰਭਾਲ ਕੇ ਰੱਖ ਲਿਆ ਜਾਵੇਗਾ। ਨੈੱਟਵਰਕ ਤਰੁੱਟੀ ਹੋਈ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਅੱਪਗ੍ਰੇਡ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ। @@ -1524,7 +1524,7 @@ ਤੁਸੀਂ - ਮੇਰੀ ਕਹਾਣੀ + ਮੇਰੀ ਸਟੋਰੀ ਪਾਬੰਦੀ ਲਾਓ @@ -1542,7 +1542,7 @@ ਨੈੱਟਵਰਕ ਅਸਫ਼ਲ! ਨੰਬਰ ਰਜਿਸਟਰ ਨਹੀਂ! ਜੋ ਨੰਬਰ ਤੁਸੀਂ ਡਾਇਲ ਕੀਤਾ ਸੀ ਉਹ ਸੁਰੱਖਿਅਤ ਆਵਾਜ਼ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ! - ਮਿਲ ਗਿਆ + ਸਮਝ ਗਏ @@ -1960,6 +1960,7 @@ %1$s ਨੇ ਤੁਹਾਨੂੰ ਮੀਡੀਆ ਹੁਣ ਉਪਲਬਧ ਨਹੀਂ ਹੈ। ਇਸ ਮੀਡੀਆ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਦੇ ਯੋਗ ਕੋਈ ਐਪ ਨਹੀਂ ਹੈ। + ਬੰਦ ਕਰੋ %2$d ਗੱਲਬਾਤਾਂ ਵਿੱਚ %1$d ਨਵੇਂ ਸੁਨੇਹੇ @@ -2198,9 +2199,9 @@ ਤੁਸੀਂ ਅਸਲ ਸੁਨੇਹਾ ਨਹੀਂ ਲੱਭਿਆ - %1$s ਕਹਾਣੀ + %1$s · ਸਟੋਰੀ - ਤੁਹਾਡੀ ਕਹਾਣੀ + ਤੁਹਾਡੀ ਸਟੋਰੀ ਹੁਣ ਮੌਜੂਦ ਨਹੀਂ ਹੈ @@ -2605,7 +2606,7 @@ ਇੱਕ ਵਾਰ ਦਾਨ ਪਰਦੇਦਾਰੀ - ਕਹਾਣੀਆਂ + ਸਟੋਰੀਆਂ  MMS ਯੂਜ਼ਰ ਏਜੰਟ ਦਸਤੀ MMS ਸੈਟਿੰਗਾਂ MMSC URL @@ -2623,7 +2624,7 @@ ਭੁਗਤਾਨ (ਬੀਟਾ) ਗੱਲਬਾਤ ਦੀ ਲੰਬਾਈ ਸੀਮਾ ਸੁਨੇਹੇ ਰੱਖੋ - ਸੁਨੇਹਾ ਅਤੀਤ ਮਿਟਾਓ + ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਮਿਟਾਓ ਲਿੰਕ ਕੀਤੀਆਂ ਡਿਵਾਈਸਾਂ ਲਾਈਟ ਹਨੇਰਾ @@ -2657,7 +2658,7 @@ ਵਾਈ-ਫਾਈ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਰੋਮਿੰਗ ਸਮੇਂ ਮੀਡੀਆ ਆਟੋ-ਡਾਊਨਲੋਡ - ਸੁਨੇਹੇ ਦਾ ਅਤੀਤ + ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਸਟੋਰੇਜ਼ ਦੀ ਵਰਤੋਂ ਫ਼ੋਟੋ ਵੀਡੀਓ @@ -2665,12 +2666,12 @@ ਆਡੀਓ ਸਟੋਰੇਜ਼ ਦੀ ਝਲਕ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਹਟਾਉਣੇ ਹਨ? - ਸੁਨੇਹਾ ਅਤੀਤ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ? - ਇਹ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਤੋਂ ਸਾਰੇ ਉਹਨਾਂ ਸੁਨੇਹਿਆਂ ਦਾ ਪਿਛੋਕੜ ਅਤੇ ਮੀਡੀਆ ਸਥਾਈ ਤੌਰ ਉੱਤੇ ਹਟਾ ਦੇਵੇਗਾ ਜੋ %1$s ਤੋਂ ਪੁਰਾਣੇ ਹਨ। + ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਮਿਟਾਉਣੇ ਹਨ? + ਅਜਿਹਾ ਕਰਨ \'ਤੇ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਵਿੱਚੋਂ ਉਹ ਸਾਰੇ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਅਤੇ ਮੀਡੀਆ ਸਥਾਈ ਤੌਰ \'ਤੇ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ ਜੋ %1$s ਤੋਂ ਪੁਰਾਣਾ ਹੈ। ਉਹ %1$s ਸਭ ਤੋ ਤਾਜ਼ਾ ਸੁਨੇਹਿਆਂ ਲਈ ਸਾਰੀਆਂ ਗੱਲਬਾਤਾਂ ਦੀ ਸਥਾਈ ਤੌਰ ’ਤੇ ਕਾਂਟ-ਛਾਂਟ ਕਰ ਦੇਵੇਗਾ। - ਇਹ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਤੋਂ ਸਾਰੇ ਸੁਨੇਹੇ ਅਤੀਤ ਤੇ ਮੀਡੀਏ ਨੂੰ ਪੱਕੇ ਤੌਰ ਉੱਤੇ ਹਟਾ ਦੇਵੇਗਾ। - ਕੀ ਤੁਸੀਂ ਸਾਰੇ ਸੁਨੇਹੇ ਅਤੀਤ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ? - ਸਾਰੇ ਸੁਨੇਹਾ ਅਤੀਤ ਨੂੰ ਪੱਕੇ ਤੌਰ ਉੱਤੇ ਹਟਾਇਆ ਜਾਵੇਗਾ। ਇਸ ਕਾਰਵਾਈ ਨੂੰ ਵਾਪਸ ਪਰਤਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ। + ਅਜਿਹਾ ਕਰਨ \'ਤੇ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਵਿੱਚੋਂ ਸਾਰੇ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਅਤੇ ਮੀਡੀਆ ਸਥਾਈ ਤੌਰ \'ਤੇ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ। + ਕੀ ਤੁਸੀਂ ਸਾਰੇ ਪੁਰਾਣੇ ਸੁਨੇਹਿਆਂ ਨੂੰ ਮਿਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ? + ਸਾਰੇ ਪੁਰਾਣੇ ਸੁਨੇਹਿਆਂ ਨੂੰ ਸਥਾਈ ਤੌਰ \'ਤੇ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਇਸ ਕਾਰਵਾਈ ਨੂੰ ਤੁਸੀਂ ਅਣ-ਕੀਤਾ ਨਹੀਂ ਕਰ ਸਕੋਗੇ। ਹੁਣੇ ਸਾਰੇ ਹਟਾਓ ਹਮੇਸ਼ਾਂ 1 ਸਾਲ @@ -2748,10 +2749,14 @@ ਕਸਟਮਾਈਜ਼ ਚੋਣ + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ ਹਾਲੇ ਨਹੀਂ + + + ਸੁਰੱਖਿਆ ਸੈੱਟਅੱਪ + + ਆਪਣੇ ਫੰਡ ਦੀ ਰੱਖਿਆ ਕਰੋ + + ਸੁਰੱਖਿਆ ਦੀ ਇੱਕ ਵਾਧੂ ਪਰਤ ਜੋੜ ਕੇ ਕਿਸੇ ਵੀ ਵਿਅਕਤੀ ਨੂੰ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਤੁਹਾਡੇ ਫੰਡ ਪ੍ਰਾਪਤ ਕਰਨ ਤੋਂ ਰੋਕਣ ਵਿੱਚ ਮਦਦ ਕਰੋ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਇਸ ਵਿਕਲਪ ਨੂੰ ਅਸਮਰੱਥ ਕਰ ਸਕਦੇ ਹੋ। + + ਭੁਗਤਾਨ ਲਾਕ ਨੂੰ ਸਮਰੱਥ ਕਰੋ + + ਹੁਣੇ ਨਹੀਂ + + ਕੀ ਇਸ ਕਦਮ ਨੂੰ ਛੱਡਣਾ ਹੈ? + + ਜੇ ਤੁਸੀਂ ਇਸ ਕਦਮ ਨੂੰ ਛੱਡ ਦਿੰਦੇ ਹੋ, ਤਾਂ ਕੋਈ ਵੀ ਵਿਅਕਤੀ ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਚੁੱਕ ਕੇ ਫੰਡ ਟ੍ਰਾਂਸਫਰ ਕਰ ਸਕਦਾ ਹੈ ਜਾਂ ਤੁਹਾਡੇ ਰਿਕਵਰੀ ਵਾਕ ਨੂੰ ਦੇਖ ਸਕਦਾ ਹੈ। + + ਰੱਦ ਕਰੋ + + ਛੱਡੋ + ਫੰਡ ਸ਼ਾਮਲ ਕਰੋ ਤੁਹਾਡੇ ਵਾਲਟ ਦਾ ਸਿਰਨਾਵਾਂ @@ -3976,7 +4001,7 @@ ਨਵੀਆਂ ਚੈਟਾਂ ਲਈ ਡਿਫੌਲਟ ਟਾਈਮਰ ਤੁਹਾਡੇ ਦੁਆਰਾ ਸ਼ੁਰੂ ਕੀਤੀਆਂ ਸਾਰੀਆਂ ਨਵੀਆਂ ਚੈਟਾਂ ਲਈ ਅਲੋਪ ਹੋਣ ਵਾਲੇ ਸੁਨੇਹੇ ਦਾ ਡਿਫੌਲਟ ਟਾਈਮਰ ਤੈਅ ਕਰੋ। - ਆਪਣੀਆਂ ਸਟੋਰੀਆਂ ਨੂੰ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਕੌਣ ਦੇਖ ਸਕਦਾ ਹੈ, ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਪ੍ਰਬੰਧਿਤ ਕਰੋ + ਆਪਣੀਆਂ ਸਟੋਰੀਆਂ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਕੌਣ ਦੇਖ ਸਕਦਾ ਹੈ, ਇਹ ਪ੍ਰਬੰਧਿਤ ਕਰੋ ਫੰਡ ਟ੍ਰਾਂਸਫਰ ਕਰਨ ਲਈ Android ਸਕ੍ਰੀਨ ਲਾਕ ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਨੂੰ ਲਾਜ਼ਮੀ ਬਣਾਓ। ਭੁਗਤਾਨ ਲਾਕ ਨੂੰ ਸਮਰੱਥ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ @@ -4258,7 +4283,7 @@ ਵੀਡੀਓ ਨੂੰ ਕੱਟ ਕੇ 30 ਸਕਿੰਟ ਦੀਆਂ ਕਲਿੱਪਾਂ ਬਣਾਈਆਂ ਜਾਣਗੀਆਂ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਕਈ ਸਟੋਰੀਆਂ ਦੇ ਰੂਪ ਵਿੱਚ ਭੇਜਿਆ ਜਾਵੇਗਾ। - ਸਟੋਰੀ ਵਿੱਚ ਭੇਜੇ ਗਏ ਵੀਡੀਓ 30 ਸਕਿੰਟ ਤੋਂ ਲੰਮੇ ਨਹੀਂ ਹੋਣੇ ਚਾਹੀਦੇ। + ਸਟੋਰੀ ਵਿੱਚ ਭੇਜੇ ਗਏ ਵੀਡੀਓ 30 ਸਕਿੰਟ ਤੋਂ ਲੰਮੇ ਨਹੀਂ ਹੋ ਸਕਦੇ। ਅੱਗੇ ਭੇਜੇ ਸੁਨੇਹੇ ਹੁਣ ਫ਼ੌਰਨ ਭੇਜੇ ਜਾਂਦੇ ਹਨ। %1$dਸੁਨੇਹਾ ਭੇਜੋ @@ -4699,13 +4724,13 @@ ਚੈਟਾਂ - ਕਹਾਣੀਆਂ + ਸਟੋਰੀਆਂ 99+ ਸਟੋਰੀ ਦੀ ਪਰਦੇਦਾਰੀ - ਮੇਰੀਆਂ ਕਹਾਣੀਆਂ + ਮੇਰੀਆਂ ਸਟੋਰੀਆਂ ਸਟੋਰੀ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ @@ -4752,9 +4777,9 @@ %1$s ਦੀ ਸਟੋਰੀ - ਕੀ ਸਟੋਰੀ ਨੂੰ ਹਟਾਉਣਾ ਹੈ? + ਕੀ ਸਟੋਰੀ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ? - ਇਹ ਸਟੋਰੀ ਤੁਹਾਡੇ ਲਈ ਅਤੇ ਜਿਸ ਨੂੰ ਵੀ ਪ੍ਰਾਪਤ ਹੋਈ ਹੈ, ਉਹਨਾਂ ਸਭ ਲਈ ਹਟਾ ਦਿੱਤੀ ਜਾਵੇਗੀ। + ਇਹ ਸਟੋਰੀ ਤੁਹਾਡੇ ਅਤੇ ਉਹਨਾਂ ਸਭ ਲਈ ਮਿਟਾ ਦਿੱਤੀ ਜਾਵੇਗੀ, ਜਿਹਨਾਂ ਨੂੰ ਵੀ ਇਹ ਪ੍ਰਾਪਤ ਹੋਈ ਹੈ। ਸੇਵ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ ਰਹੇ @@ -4799,6 +4824,8 @@ ਦਰਸ਼ਕ ਨੂੰ ਹਟਾਓ ਅਜੇ ਤੱਕ ਕਿਸੇ ਨੇ ਜਵਾਬ ਨਹੀਂ ਦਿੱਤਾ + + ਤੁਸੀਂ ਇਸ ਸਟੋਰੀ ਦਾ ਜਵਾਬ ਨਹੀਂ ਦੇ ਸਕਦੇ ਕਿਉਂਕਿ ਹੁਣ ਤੁਸੀਂ ਇਸ ਗਰੁੱਪ ਦੇ ਮੈਂਬਰ ਨਹੀਂ ਹੋ। ਸਟੋਰੀ ਉੱਤੇ ਰਿਐਕਸ਼ਨ ਦਿੱਤਾ @@ -4816,7 +4843,14 @@ ਹਟਾਓ - ਮੇਰੀ ਕਹਾਣੀ + ਮੇਰੀ ਸਟੋਰੀ + + + %1$d viewer + %1$d viewers + + + View ਇਸ ਸਟੋਰੀ ਨੂੰ ਕੌਣ ਦੇਖ ਸਕਦਾ ਹੈ @@ -4851,8 +4885,6 @@ ਜਵਾਬ ਅਤੇ ਰਿਐਕਸ਼ਨ ਭੇਜਣ ਦੀ ਮਨਜ਼ੂਰੀ ਦਿਓ ਜਿਹੜੇ ਲੋਕ ਤੁਹਾਡੀ ਸਟੋਰੀ ਦੇਖ ਸਕਦੇ ਹਨ, ਉਹਨਾਂ ਨੂੰ ਜਵਾਬ ਅਤੇ ਰਿਐਕਸ਼ਨ ਭੇਜਣ ਦੀ ਸਹੂਲਤ ਦਿਓ - - ਆਪਣੀ ਸਟੋਰੀ ਨੂੰ ਕੁਝ ਖਾਸ ਲੋਕਾਂ ਤੋਂ ਲੁਕਾਓ। ਡਿਫਾਲਟ ਰੂਪ ਵਿੱਚ, ਤੁਹਾਡੀ ਸਟੋਰੀ ਤੁਹਾਡੇ %1$s ਨਾਲ ਸਾਂਝੀ ਕੀਤੀ ਜਾਂਦੀ ਹੈ Signal ਕਨੈਕਸ਼ਨ @@ -4868,7 +4900,7 @@ ਦਰਸ਼ਕ ਸ਼ਾਮਲ ਕਰੋ - ਨਿੱਜੀ ਸਟੋਰੀ ਹਟਾਓ + ਨਿੱਜੀ ਸਟੋਰੀ ਮਿਟਾਓ ਕੀ %1$s ਨੂੰ ਹਟਾਉਣਾ ਹੈ? @@ -4911,10 +4943,26 @@ ਸਿਰਫ਼ ਇਹਨਾਂ ਨਾਲ ਸਾਂਝਾ ਕਰੋ… ਮੁਕੰਮਲ + + ਕੀ ਗਰੁੱਪ ਸਟੋਰੀ ਨੂੰ ਹਟਾਉਣਾ ਹੈ? + + \"%1$s\" ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ। + + ਹਟਾਓ + + ਕੀ ਨਿੱਜੀ ਸਟੋਰੀ ਮਿਟਾਉਣੀ ਹੈ? + + \"%1$s\" ਅਤੇ ਇਸ ਸਟੋਰੀ ਨਾਲ ਸਾਂਝੇ ਕੀਤੇ ਅੱਪਡੇਟ ਮਿਟਾ ਦਿੱਤੇ ਜਾਣਗੇ। + + ਹਟਾਓ + + ਸਟੋਰੀਆਂ ਸਿਰਫ਼ Signal ਬੀਟਾ ਵਰਤੋਂਕਾਰਾਂ ਲਈ ਉਪਲਬਧ ਹਨ। + + ਜੇਕਰ ਤੁਸੀਂ ਕੋਈ ਸਟੋਰੀ ਸਾਂਝੀ ਕਰਦੇ ਹੋ, ਤਾਂ ਇਹ ਸਿਰਫ਼ ਉਹਨਾਂ ਲੋਕਾਂ ਲਈ ਉਪਲਬਧ ਹੋਵੇਗੀ ਜਿਹਨਾਂ ਕੋਲ Signal ਬੀਟਾ ਹੈ। - ਕੀ ਤੁਸੀਂ ਸਟੋਰੀ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? + ਕੀ ਸਟੋਰੀ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? - ਜੇ ਤੁਸੀਂ ਆਪਣੀ ਸਟੋਰੀ ਵਿੱਚ ਕੁਝ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ ਤਾਂ ਤੁਹਾਡੇ Signal ਕਨੈਕਸ਼ਨ 24 ਘੰਟਿਆਂ ਤੱਕ ਉਸ ਨੂੰ ਦੇਖ ਸਕਦੇ ਹਨ। ਤੁਹਾਡੀ ਸਟੋਰੀ ਕੌਣ ਦੇਖ ਸਕਦਾ ਹੈ ਇਹ ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਬਦਲ ਸਕਦੇ ਹੋ। + ਜੇ ਤੁਸੀਂ ਆਪਣੀ ਸਟੋਰੀ ਵਿੱਚ ਕੁਝ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ ਤਾਂ ਤੁਹਾਡੇ Signal ਕਨੈਕਸ਼ਨ 24 ਘੰਟਿਆਂ ਤੱਕ ਉਸ ਨੂੰ ਦੇਖ ਸਕਦੇ ਹਨ। ਤੁਹਾਡੀ ਸਟੋਰੀ ਕੌਣ ਦੇਖ ਸਕਦਾ ਹੈ, ਇਹ ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਬਦਲ ਸਕਦੇ ਹੋ। ਸਟੋਰੀ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ @@ -4923,6 +4971,8 @@ ਸਟੋਰੀ ਭੇਜ ਨਹੀਂ ਸਕੇ। ਆਪਣੇ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਭੇਜੋ + + ਬੰਦ ਕਰੋ ਅਤੇ ਮਿਟਾਓ ਸਟੋਰੀਆਂ ਨੂੰ ਸਾਂਝਾ ਕਰੋ ਅਤੇ ਦੇਖੋ @@ -4979,7 +5029,7 @@ ਸਟੋਰੀ ਭੇਜਣ ਵਿੱਚ ਅਸਫਲ ਰਹੇ - ਸਟੋਰੀ ਭੇਜੋ + ਸਟੋਰੀ ਦੇਖੋ ਪ੍ਰੋਫਾਈਲ ਫ਼ੋਟੋ ਦੇਖੋ @@ -5060,7 +5110,7 @@ ਹੁਣੇ ਨਹੀਂ - ਸਿਰਫ਼ ਇਹਨਾਂ ਨਾਲ ਸਾਂਝਾ ਕਰੋ + ਇਹਨਾਂ ਨਾਲ ਸਾਂਝਾ ਕਰੋ ਨਿੱਜੀ ਸਟੋਰੀ · %1$d ਦਰਸ਼ਕ @@ -5071,6 +5121,11 @@ ਗਰੁੱਪ ਸਟੋਰੀ · %1$d ਦਰਸ਼ਕ ਗਰੁੱਪ ਸਟੋਰੀ · %1$d ਦਰਸ਼ਕ + + + %1$d ਮੈਂਬਰ + %1$d ਮੈਂਬਰ + %1$s · %2$d ਦਰਸ਼ਕ @@ -5083,7 +5138,7 @@ ਸਟੋਰੀ ਹਟਾਓ - ਕਹਾਣੀ ਮਿਟਾਓ + ਸਟੋਰੀ ਮਿਟਾਓ ਕੀ ਗਰੁੱਪ ਸਟੋਰੀ ਨੂੰ ਹਟਾਉਣਾ ਹੈ? @@ -5091,9 +5146,9 @@ ਹਟਾਓ - ਕੀ ਸਟੋਰੀ ਨੂੰ ਹਟਾਉਣਾ ਹੈ? + ਕੀ ਸਟੋਰੀ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ? - ਕੀ \"%1$s\" ਨਿੱਜੀ ਸਟੋਰੀ ਨੂੰ ਹਟਾਉਣਾ ਹੈ? + ਕੀ \"%1$s\" ਨਿੱਜੀ ਸਟੋਰੀ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ? ਹਟਾਓ @@ -5139,7 +5194,7 @@ ਸਾਰੇ ਕਨੈਕਸ਼ਨਾਂ ਦੀ ਸਮੀਖਿਆ ਹੋ ਗਈ ਹੈ, ਅੱਗੇ ਜਾਰੀ ਰੱਖਣ ਲਈ \"ਭੇਜੋ\" \'ਤੇ ਟੈਪ ਕਰੋ। - ਤੁਹਾਡੇ %1$d ਕਨੈਕਸ਼ਨਾਂ ਨੇ ਸ਼ਾਇਦ Signal ਨੂੰ ਮੁੜ-ਇੰਸਟਾਲ ਕੀਤਾ ਹੈ ਜਾਂ ਆਪਣੀਆਂ ਡਿਵਾਈਸਾਂ ਨੂੰ ਬਦਲਿਆ ਹੈ। ਉਹਨਾਂ ਨਾਲ ਆਪਣੀ ਸਟੋਰੀ ਸਾਂਝੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹਨਾਂ ਦੇ ਸੁਰੱਖਿਆ ਨੰਬਰ ਦੀ ਸਮੀਖਿਆ ਕਰੋ ਜਾਂ ਉਹਨਾਂ ਨੂੰ ਆਪਣੀ ਸਟੋਰੀ ਵਿੱਚੋਂ ਹਟਾਉਣ ਬਾਰੇ ਵਿਚਾਰ ਕਰੋ। + ਤੁਹਾਡੇ %1$d ਕਨੈਕਸ਼ਨਾਂ ਨੇ ਸ਼ਾਇਦ Signal ਨੂੰ ਮੁੜ-ਇੰਸਟਾਲ ਕੀਤਾ ਹੈ ਜਾਂ ਆਪਣੇ ਡਿਵਾਈਸਾਂ ਨੂੰ ਬਦਲਿਆ ਹੈ। ਉਹਨਾਂ ਨਾਲ ਆਪਣੀ ਸਟੋਰੀ ਸਾਂਝੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹਨਾਂ ਦੇ ਸੁਰੱਖਿਆ ਨੰਬਰ ਦੀ ਸਮੀਖਿਆ ਕਰੋ ਜਾਂ ਉਹਨਾਂ ਨੂੰ ਆਪਣੀ ਸਟੋਰੀ ਤੋਂ ਹਟਾਉਣ ਬਾਰੇ ਵਿਚਾਰ ਕਰੋ। ਸੁਰੱਖਿਆ ਨੰਬਰ ਦੀ ਤਸਦੀਕ ਕਰੋ @@ -5206,7 +5261,7 @@ ਕੀ ਸਟੋਰੀਆਂ ਨੂੰ ਬੰਦ ਕਰਨਾ ਹੈ? - ਹੁਣ ਤੁਸੀਂ ਸਟੋਰੀਆਂ ਨੂੰ ਨਾ ਹੀ ਸਾਂਝਾ ਕਰ ਸਕੋਗੇ ਅਤੇ ਨਾ ਹੀ ਦੇਖ ਸਕੋਗੇ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਹਾਲ ਹੀ ਵਿੱਚ ਭੇਜੀਆਂ ਗਈਆਂ ਸਟੋਰੀਆਂ ਦੀ ਮਿਆਦ ਪੁੱਗਣ ਤੱਕ ਉਹ ਦੂਜਿਆਂ ਨੂੰ ਦਿਖਾਈ ਦਿੰਦੀਆਂ ਰਹਿਣਗੀਆਂ। + ਹੁਣ ਤੁਸੀਂ ਨਾ ਹੀ ਸਟੋਰੀਆਂ ਨੂੰ ਸਾਂਝਾ ਕਰ ਸਕੋਗੇ ਅਤੇ ਨਾ ਹੀ ਦੇਖ ਸਕੋਗੇ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਹਾਲ ਹੀ ਵਿੱਚ ਸਾਂਝੇ ਕੀਤੇ ਗਏ ਸਟੋਰੀ ਅੱਪਡੇਟ ਵੀ ਮਿਟਾ ਦਿੱਤੇ ਜਾਣਗੇ। ਸਟੋਰੀ ਦੀ ਪਰਦੇਦਾਰੀ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index aacfdbd63c..22c1af9d32 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -195,7 +195,7 @@ Uaktualnij Nie aktualizuj Uwaga - Twoja wersja Signal wygasła. Możesz przeglądać swoją historię wiadomości, ale nie będziesz móc wysyłać, ani dobierać wiadomości, dopóki go nie zaktualizujesz. + Twoja wersja Signal wygasła. Możesz przeglądać swoją historię wiadomości, ale nie będziesz móc wysyłać ani odbierać wiadomości, dopóki jej nie zaktualizujesz. Nie znaleziono przeglądarki internetowej. @@ -220,7 +220,7 @@ Znajdź po nazwie użytkownika - Moje historie + Moje relacje Nowa relacja @@ -1656,7 +1656,7 @@ Ty - Moja historia + Moja relacja Zablokuj @@ -2108,6 +2108,7 @@ %1$s do Ciebie Multimedia nie są już dostępne. Nie można znaleźć aplikacji, aby udostępnić te multimedia. + Zamknij %1$d nowych wiadomości w %2$d rozmowach @@ -2186,7 +2187,7 @@ Prośba o kontakt Ty - %1$s • Historia + %1$s • Relacja Odtwórz wideo @@ -2354,9 +2355,9 @@ Ty Nie znaleziono oryginalnej wiadomości - %1$s · Historia + %1$s · Relacja - Ty · Historia + Ty · Relacja Historia nie jest już dostępna @@ -2511,7 +2512,7 @@ Skopiowano stempel czasowy do schowka. - Tutaj pojawią się aktualizacje Twojej historii. + Tutaj pojawią się aktualizacje Twojej relacji. @@ -2777,7 +2778,7 @@ Datek jednorazowy Prywatność - Historie + Relacje MMS User Agent Manualne ustawienia MMS MMSC URL @@ -2838,7 +2839,7 @@ Przejrzyj pamięć Usunąć starsze wiadomości? Wyczyścić historię wiadomości? - To spowoduje trwałe usunięcie z Twojego urządzenia całej historii wiadomości i multimediów, starszych niż %1$s. + To spowoduje trwałe usunięcie z Twojego urządzenia całej historii wiadomości i multimediów starszych niż %1$s. To spowoduje trwałe przycięcie wszystkich konwersacji do %1$s najnowszych wiadomości. To spowoduje trwałe usunięcie z Twojego urządzenia całej historii wiadomości i multimediów. Czy na pewno chcesz usunąć całą historię wiadomości? @@ -2920,10 +2921,14 @@ Dostosuj opcję + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3076,6 +3081,26 @@ Nie teraz + + + Konfiguracja bezpieczeństwa + + Chroń swoje środki + + Dodaj kolejną warstwę zabezpieczeń, która uniemożliwi osobom korzystającym z Twojego telefonu dostęp do Twoich środków. Możesz wyłączyć tę opcję w Ustawieniach. + + Włącz zabezpieczenie płatności + + Nie teraz + + Pominąć ten krok? + + Pominięcie tego kroku może umożliwić każdemu, kto ma fizyczny dostęp do Twojego telefonu, przelanie środków lub wyświetlenie frazy odzyskiwania. + + Anuluj + + Pomiń + Dodaj środki Adres Twojego portfela @@ -4489,7 +4514,7 @@ Dodaj wiadomość Dodaj odpowiedź - Wysłano do + Wyślij do Wiadomość jednorazowa Co najmniej jeden element był zbyt duży Co najmniej jeden element był nieprawidłowy @@ -4907,21 +4932,21 @@ Rozmowy - Historie + Relacje 99+ Prywatność relacji - Moje historie + Moje relacje Stuknij, by dodać relację W tej chwili nie ma nowych aktualizacji do pokazania - Ukryj historię + Ukryj relację - Ujawnij historię + Ujawnij relację Przekaż @@ -4941,15 +4966,15 @@ Stuknij, aby spróbować ponownie - Ukryć historię? + Ukryć relację? - Nowe aktualizacje historii od %1$s nie będzie się już pojawiać na szczycie listy historii. + Nowe aktualizacje relacji od %1$s nie będą się już pojawiać na szczycie listy relacji. Ukryj - Historia ukryta + Relacja ukryta - Ukryte historie + Ukryte relacje %1$d odsłona @@ -4960,11 +4985,11 @@ Przekaż - Historia %1$s + Relacja od %1$s - Usunąć historię? + Usunąć relację? - Ta historia zostanie usunięta u Ciebie i wszystkich, którzy ją otrzymali + Ta relacja zostanie usunięta u Ciebie i wszystkich, którzy ją otrzymali Nie udało się zapisać @@ -5013,14 +5038,16 @@ Usuń widza Brak odpowiedzi + + Nie możesz wysyłać wiadomości w odpowiedzi na tę relację, ponieważ nie jesteś już członkiem tej grupy. - Zareagowano na historię + Zareagowano na relację Odsłony Odpowiedzi - Zareaguj na tę historię + Zareaguj na tę relację Prywatna odpowiedź na %1$s @@ -5030,11 +5057,20 @@ Usuń - Moja historia + Moja relacja + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + + + View Kto może wyświetlać tę relację - Ukryj historię przed + Ukryj relację przed Wszystkie kontakty Signal @@ -5068,9 +5104,7 @@ Pozwalaj na odpowiedzi i reakcje - Pozwól ludziom, oglądającym Twoją historię zareagować i odpowiedzieć - - Ukryj swoją historię przed określonymi osobami. Domyślnie Twoją historię widzą %1$s + Pozwól ludziom, oglądającym Twoją relację, zareagować i odpowiedzieć Kontakty Signal @@ -5082,15 +5116,15 @@ Posiadanie ich w systemowej książce kontaktów - "Twoje kontakty widzą Twoje imię i zdjęcie, i widzą posty w \"Moja historia\", chyba, że je przed nimi ukryjesz." + "Twoje kontakty widzą Twoje imię i zdjęcie, a także widzą posty w „Moja relacja”, chyba że je przed nimi ukryjesz." Dodaj widza - Usuń prywatną historię + Usuń prywatną relację Usunąć %1$s? - Ta osoba nie będzie już widzieć Twojej historii. + Ta osoba nie będzie już widzieć Twojej relacji. Usuń @@ -5098,9 +5132,9 @@ Tego działania nie można cofnąć. - Edytuj tytuł historii + Edytuj tytuł relacji - Tytuł historii + Tytuł relacji Zapisz @@ -5118,7 +5152,7 @@ Napisz coś albo wklej link - Udostępnij link widzom swojej historii + Udostępnij link widzom swojej relacji Szukaj @@ -5129,22 +5163,40 @@ Udostępnij tylko… Gotowe + + Usunąć relację grupową? + + Relacja „%1$s” zostanie usunięta. + + Usuń + + Usunąć relację prywatną? + + „%1$s” oraz wszelkie aktualizacje tej relacji zostaną usunięte. + + Usuń + + Relacje są dostępne tylko dla użytkowników Signal beta. + + Jeśli opublikujesz relację, będzie ona dostępna tylko dla osób korzystających z Signal beta. - Dodać do historii? + Dodać do relacji? - Dodanie treści do Twojej historii pozwoli Twoim kontaktom widzieć ją przez 24 godziny. Możesz zmienić, kto może zobaczyć Twoją historię w Ustawieniach. + Dodanie treści do Twojej relacji pozwoli Twoim kontaktom Signal widzieć ją przez 24 godziny. Możesz zmienić w Ustawieniach, kto może zobaczyć Twoją relację. - Dodaj do historii + Dodaj do relacji Edytuj widzów - Nie udało się wysłać historii. Sprawdź połączenie z internetem i spróbuj ponownie. + Nie udało się wysłać relacji. Sprawdź połączenie z internetem i spróbuj ponownie. Wyślij + + Wyłącz i usuń - Udostępniaj i oglądaj historie + Udostępniaj i oglądaj relacje - Gdy ta opcja jest wyłączona, nie będziesz w stanie udostępniać, ani oglądać historii. + Gdy ta opcja jest wyłączona, nie będziesz w stanie udostępniać ani oglądać relacji. Wybierz widzów @@ -5157,9 +5209,9 @@ %1$d widzów - Nazwij historię + Nazwij relację - Tytuł historii (wymagane) + Tytuł relacji (wymagane) Widzowie @@ -5167,17 +5219,17 @@ To pole jest wymagane. - Już istnieje historia o takiej nazwie. + Już istnieje relacja o takim tytule. Zaznacz wszystko - Wybierz rodzaj historii + Wybierz rodzaj relacji - Nowa, prywatna historia + Nowa prywatna relacja Widoczna tylko dla określonych osób - Historia grupowa + Relacja grupowa Udostępnij istniejącej grupie @@ -5189,17 +5241,17 @@ Wysyłanie odpowiedzi… - Ta historia nie jest już dostępna. + Ta relacja nie jest już dostępna. Brak połączenia z internetem Nie można załadować zawartości - Wysłano historię + Wysłano relację - Nie udało się wysłać historii + Nie udało się wysłać relacji - Obejrzyj historię + Obejrzyj relację Zobacz zdjęcie profilowe @@ -5213,11 +5265,11 @@ Wyłącz - Zareagowałeś(aś) na historię %1$s + Zareagowałeś(aś) na relację od %1$s - Zareagowano na Twoją historię + Zareagowano na Twoją relację - Zareagowano na historię + Zareagowano na relację @@ -5292,11 +5344,18 @@ - Historia grupowa · %1$d odbiorca - Historia grupowa · %1$d odbiorców - Historia grupowa · %1$d odbiorców + Relacja grupowa · %1$d odbiorca + Relacja grupowa · %1$d odbiorców + Relacja grupowa · %1$d odbiorców Relacja grupowa · %1$d odbiorców + + + %1$d członek + %1$d członków + %1$d członków + %1$d członków + %1$s · %2$d widz @@ -5307,7 +5366,7 @@ Stuknij, by wybrać widzów - Ustawienia historii + Ustawienia relacji Usuń relację @@ -5319,7 +5378,7 @@ Usuń - Usunąć historię? + Usunąć relację? Usunąć prywatną relację „%1$s”? @@ -5442,7 +5501,7 @@ Wyłączyć relacje? - Stracisz możliwość udostępniania i wyświetlania relacji. Relacje przesłane przez Ciebie w ostatnich godzinach pozostaną widoczne dla innych użytkowników do momentu ich wygaśnięcia. + Stracisz możliwość udostępniania i wyświetlania relacji. Relacje udostępnione przez Ciebie w ostatnich godzinach również zostaną usunięte. Prywatność relacji @@ -5450,7 +5509,7 @@ Kto może wyświetlać tę relację - "Wyświetlać tę relację i na nią odpowiadać mogą członkowie grupy „%1$s”. Listę członków grupy możesz edytować." + "Członkowie grupy „%1$s” mogą wyświetlać tę relację i na nią odpowiadać. Listę członków grupy możesz edytować." Usuń relację grupową diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index a5346a8172..e1d2a808da 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -193,7 +193,7 @@ Atualizar Não atualizar Cuidado - Sua versão do Signal não é mais suportada. Você pode ver seu histórico de mensagens, mas não poderá enviar ou receber mensagens até baixar a nova atualização. + Sua versão do Signal não é mais compatível. Você pode ver seu histórico de mensagens, mas não poderá enviar ou receber mensagens até baixar a nova atualização. Nenhum navegador encontrado. @@ -441,8 +441,8 @@ Não lidas - Fixada - Fixadas + Fixar + Fixar Desafixada @@ -1960,6 +1960,7 @@ %1$s para você A mídia não está mais disponível. Não foi possível encontrar um aplicativo capaz de compartilhar esta mídia. + Fechar %1$d mensagens novas em %2$d conversas @@ -2666,7 +2667,7 @@ Checar armazenamento Apagar as mensagens mais antigas? Excluir o histórico de mensagens? - Todo o histórico de mensagens e mídias do seu dispositivo que são mais antigos que %1$s serão excluídos permanentemente. + Todo o histórico de mensagens e mídias do seu dispositivo que sejam mais antigos que %1$s serão excluídos permanentemente. Todas as conversas serão excluídas permanentemente, exceto %1$s mensagens mais recentes. Todo o histórico de mensagens e mídias do seu dispositivo serão excluídos permanentemente. Tem certeza que quer apagar todo o histórico de mensagens? @@ -2748,10 +2749,14 @@ Opção para personalizar + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Agora não + + + Configuração de segurança + + Proteja seus fundos + + Evite que alguém com seu telefone acesse seus fundos ao adicionar uma camada extra de segurança. É possível desativar esta opção nas Configurações. + + Ativar bloqueio de pagamento + + Agora não + + Pular esta etapa? + + Se você pular esta etapa, qualquer pessoa em posse do seu telefone poderá transferir fundos ou ver a sua frase de recuperação. + + Cancelar + + Pular + Adicionar fundos Endereço da sua carteira @@ -4713,7 +4738,7 @@ Ocultar story - Reexibir story + Mostrar story Encaminhar @@ -4799,6 +4824,8 @@ Remover visualizador Ainda não há respostas + + Você não pode responder a este story porque não faz mais parte do grupo. Reagiu ao story @@ -4817,6 +4844,13 @@ Excluir Meu Story + + + %1$d viewer + %1$d viewers + + + View Quem pode ver esse story? @@ -4850,9 +4884,7 @@ Permitir respostas & reações - Permitir que as pessoas capazes de ver o seu story possam reagir e responder - - Ocultar o seu story de pessoas específicas. Por padrão, seu story é compartilhado com os seus %1$s + Permitir que as pessoas que podem ver o seu story possam reagir e responder Contatos do Signal @@ -4864,7 +4896,7 @@ Tê-los em seus contatos do sistema - "Seus contatos conseguem ver: o seu nome, sua foto e seus conteúdos publicados no seu Story, a menos que você oculte o seu Story dessas pessoas." + "Seus contatos conseguem ver: seu nome, foto e conteúdos publicados no seu Story, a menos que você oculte seu Story dessas pessoas." Adicionar visualizador @@ -4911,10 +4943,26 @@ Compartilhar apenas com… Pronto + + Remover story do grupo? + + \"%1$s\" será removido. + + Remover + + Excluir story privado? + + \"%1$s\" e atualizações compartilhadas nesse story serão excluídos. + + Excluir + + O Stories está disponível no Signal apenas para usuários beta. + + Se você compartilhar um story, ele ficará disponível apenas para usuários da versão beta do Signal. Adicionar ao story? - Adicionar conteúdo ao seu story permitirá que os seus contatos do Signal o visualizem por 24 horas. Escolha nas Configurações quem é capaz de ver o seu story. + Adicionar conteúdo ao seu story permitirá que os seus contatos do Signal o visualizem por 24 horas. Escolha nas Configurações quem pode ver o seu story. Adicionar ao story @@ -4923,10 +4971,12 @@ O Story não pôde ser enviado. Verifique sua conexão e tente novamente. Enviar + + Desativar e excluir - Compartilhar & ver Stories + Compartilhar e ver stories - Você não poderá compartilhar ou visualizar Stories quando essa opção estiver desabilitada. + Você não poderá compartilhar ou ver stories quando essa opção estiver desativada. Escolher visualizadores @@ -4979,7 +5029,7 @@ Falha ao enviar o Story - Ver o Story + Ver story Ver a foto do perfil @@ -5060,7 +5110,7 @@ Agora não - Compartilhar apenas com… + Compartilhar só com… Story privado · %1$d visualizador @@ -5071,6 +5121,11 @@ Story do grupo · %1$d visualizador Story do grupo · %1$d visualizadores + + + %1$d membro + %1$d membros + %1$s · %2$d visualizador @@ -5079,7 +5134,7 @@ Toque para escolher quem pode ver - Configurações do Story + Configurações do story Remover story @@ -5139,7 +5194,7 @@ Todos os contatos foram analisados, toque em enviar para continuar. - Você tem %1$d contatos que talvez tenham reinstalado o Signal ou trocado de aparelho. Antes de compartilhar o story com eles, verifique os números de segurança ou pense em removê-los do seu story. + Você tem %1$d contatos que talvez tenham reinstalado o Signal ou trocado de aparelho. Antes de compartilhar o story com eles, verifique os números de segurança ou considere removê-los do seu story. Verificar número de segurança @@ -5169,7 +5224,7 @@ Privacidade do meu story - Escolha quem pode ver publicações no Meu story. Você pode fazer alterações nas configurações. + Escolha quem pode ver publicações no Meu Story. Você pode fazer alterações nas configurações. Todos os contatos do Signal @@ -5198,7 +5253,7 @@ Desativar stories - Se você desativar os stories, não poderá mais compartilhar ou visualizar stories + Se você desativar os stories, não poderá mais compartilhar ou visualizar stories. Ativar stories @@ -5206,7 +5261,7 @@ Deseja desativar os stories? - Você não poderá mais compartilhar ou visualizar stories. Todos os stories que você enviou recentemente ainda estarão visíveis para outras pessoas até que expirem. + Você não poderá mais compartilhar ou ver stories. As atualizações de stories que você compartilhou recentemente também serão excluídas. Privacidade do story diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index c004ac3fcb..9f4b3207e4 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -673,7 +673,7 @@ O que são os \'Novos grupos\'? Os \'Novos grupos\' têm recursos como @menções e administradores de grupos e oferecerão futuramente suporte para mais recursos. - Todo o histórico de mensagens e média foi mantido para antes do upgrade. + Todo o histórico de mensagens e multimédia foi mantido para antes do upgrade. Você necessitará de aceitar um convite para se juntar novamente a este grupo e não receberá mensagens de grupo até que aceite. Este membro necessitará de aceitar um convite para se juntar novamente a este grupo e não receberá mensagens do grupo até aceitar: @@ -688,7 +688,7 @@ Upgrade para \'Novo grupo\' Fazer o upgrade deste grupo Os \'Novos grupos\' têm recursos como @menções e administradores de grupos e oferecerão futuramente suporte para mais recursos. - Todo o histórico de mensagens e média será mantido para antes do upgrade. + Todo o histórico de mensagens e multimédia será mantido para antes do upgrade. Foi encontrado um erro de rede. Por favor, tete novamente mais tarde. Ocorreu um erro ao tentar fazer o upgrade. @@ -1524,7 +1524,7 @@ Você - A minha história + A Minha História Bloquear @@ -1855,9 +1855,9 @@ Resgatou um crachá de oferta - Reagiu %1$s à sua história + Reagiu com %1$s à sua história - Reagiu %1$s à sua história + Reagiu com %1$s à sua história Atualização do Molly @@ -1960,6 +1960,7 @@ De %1$s para si Multimédia atualmente indisponível. Não foi possível encontrar uma aplicação capaz de partilhar este média. + Fechar %1$d novas mensagens em %2$d conversas @@ -2200,7 +2201,7 @@ %1$s · História - A sua história + Você · História Já não se encontra disponível @@ -2666,11 +2667,11 @@ Rever armazenamento Eliminar mensagens antigas? Eliminar histórico de mensagens? - Isto irá eliminar permanentemente do seu dispositivo todo o histórico de mensagens e multimédia que sejam mais velhos que %1$s. + Isto irá eliminar permanentemente do seu dispositivo todo o histórico de mensagens e multimédia que sejam mais antigos que %1$s. Isto irá reduzir automaticamente todas as conversas para as %1$s mensagens mais recentes. - Isto irá eliminar permanentemente do seu dispositivo todo o histórico de mensagens e multimédia, + Isto irá eliminar permanentemente do seu dispositivo todo o histórico de mensagens e multimédia. Tem a certeza que deseja eliminar todo o histórico de mensagens? - Todo o histórico de mensagens será eliminado permanentemente. Esta ação não poderá ser desfeita. + Todo o histórico de mensagens será eliminado permanentemente. Esta ação não poderá ser revertida. Eliminar tudo agora Para sempre 1 ano @@ -2748,10 +2749,14 @@ Personalizar opção + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Agora não + + + Configuração de segurança + + Proteja os seus fundos + + Adicione outra camada de segurança para ajudar a impedir que uma pessoa com o seu telemóvel aceda aos seus fundos. Pode desativar esta opção nas Definições. + + Ativar bloqueio de pagamento + + Agora não + + Saltar este passo? + + Saltar este passo pode eventualmente permitir a qualquer pessoa que tenha acesso físico ao seu telefone transferir fundos ou ver a sua frase de recuperação. + + Cancelar + + Saltar + Adicionar fundos O endereço da sua carteira @@ -4256,9 +4281,9 @@ Adicionar uma mensagem Reencaminhar mais rapidamente - Os vídeos serão reduzidos para clipes de 30 segundos e enviados em várias Histórias. + Os vídeos serão reduzidos para clipes de 30 segundos e enviados em várias histórias. - Os vídeos enviados para as Histórias não podem ter mais do que 30 segundos. + Os vídeos enviados para as histórias não podem ter mais do que 30 segundos. As mensagens reencaminhadas agora são enviadas imediatamente. Enviar %1$d mensagem @@ -4799,6 +4824,8 @@ Remover visualizador Ainda não existem respostas + + Não pode responder a esta história porque já não é membro deste grupo. Reagiu à história @@ -4817,6 +4844,13 @@ Eliminar A minha história + + + %1$d viewer + %1$d viewers + + + View Quem pode ver esta história @@ -4851,8 +4885,6 @@ Permitir respostas e reações Permitir que as pessoas que podem ver a sua história possam reagir e responder - - Oculte a sua história a pessoas específicas. Por padrão, a sua história é partilhada com os seus %1$s Contactos do Signal @@ -4911,6 +4943,22 @@ Partilhar apenas com… Concluir + + Remover história de grupo? + + \"%1$s\" será removida + + Remover + + Eliminar história privada? + + \"%1$s\" e atualizações partilhadas com esta história serão removidos. + + Eliminar + + As histórias estão disponíveis apenas para os utilizadores do Signal versão beta. + + Se partilhar uma história, ela só estará disponível para pessoas que estejam na versão beta do Signal. Adicionar à história? @@ -4923,10 +4971,12 @@ A história não pode ser enviada. Verifique a sua ligação e tente novamente. Enviar + + Desativar e eliminar Partilhar e ver histórias - Deixará de ser capaz de partilhar ou ver \'Histórias\' quando esta opção se encontrar desativada. + Deixará de ser capaz de partilhar ou ver histórias quando esta opção se encontrar desativada. Escolher visualizadores @@ -5071,6 +5121,11 @@ História de grupo · %1$d visualizador História de grupo · %1$d visualizadores + + + %1$d membro + %1$d membros + %1$s · %2$d visualizador @@ -5206,7 +5261,7 @@ Desativar histórias? - Já não poderá partilhar ou ver histórias. Quaisquer histórias que tenha recentemente enviado ainda estarão visíveis até expirarem. + Já não poderá partilhar ou ver histórias. As atualizações de histórias que tenha partilhado recentemente também serão apagadas. Privacidade da história @@ -5214,7 +5269,7 @@ Quem pode ver esta história - "Os membros do grupo \"%1$s\" podem ver e responder a esta história. Pode atualizar os membros desta conversa no grupo." + "Os membros do grupo %1$s podem ver e responder a esta história. Pode atualizar os membros desta conversa no grupo." Remover história de grupo diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 1a525f715d..83226b5f1f 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1590,7 +1590,7 @@ Tu - Povestea mea + Povestea Mea Blochează @@ -2034,6 +2034,7 @@ %1$s către tine Media nu mai este disponibilă. Nu pot găsi o aplicație pentru a distribui acest tip media. + Închide %1$d mesaje noi în %2$d conversații @@ -2743,7 +2744,7 @@ Când se utilizează Wi-Fi Când se utilizează roaming-ul Descărcare automată Media - Istoric mesaje + Istoricul mesajelor Utilizare spațiu stocare Poze Video @@ -2834,10 +2835,14 @@ Personalizează opțiunea + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2990,6 +2995,26 @@ Nu Acum + + + Configurarea securității + + Protejează-ți fondurile + + Ajută-ne să împiedicăm o persoană care are telefonul tău să-ți acceseze fondurile adăugând un alt nivel de securitate. Poți să dezactivezi această opțiune din Setări. + + Activează protecția plăților + + Nu acum + + Sari peste acest pas? + + Dacă sari peste acest pas, oricine care are acces fizic la telefonul tău poate să-și transfere fonduri sau să vadă fraza de recuperare. + + Anulează + + Omite + Adaugă fonduri Adresa Portofelului Tău @@ -4357,7 +4382,7 @@ Videoclipurile vor fi scurtate la clipuri de 30 de secunde și trimise ca Povești multiple. - Videoclipurile trimise către Povești nu pot fi mai lungi de 30 de secunde. + Videoclipurile trimise către povești nu pot fi mai lungi de 30 de secunde. Mesajele redirecționate sunt acum trimise imediat. Trimite %1$d mesaj @@ -4839,7 +4864,7 @@ Ascunzi povestea? - Actualizări despre povești noi de la %1$s nu vor mai fi afișate la începutul listei. + Actualizările despre povești noi de la %1$s nu vor mai fi afișate la începutul listei. Ascunde @@ -4906,6 +4931,8 @@ Elimină vizualizatorul Niciun răspuns încă + + Nu poți răspunde la această poveste pentru că nu mai ești membru al acestui grup. Ai reacționat la poveste @@ -4924,6 +4951,14 @@ Șterge Povestea Mea + + + %1$d viewer + %1$d viewers + %1$d viewers + + + View Cine poate vedea această poveste @@ -4960,8 +4995,6 @@ Permite răspunsuri & reacții Permite oamenilor care îți pot vedea povestea să reacționeze și să răspundă - - Ascunde-ți povestea de anumite persoane. În mod implicit povestea ta este distribuită %1$s Conexiunile Signal @@ -4973,7 +5006,7 @@ Să îi ai în contactele tale de sistem - "Conexiunile tale îți pot vedea numele, fotografia și pot vedea postările în \"Povestea Mea\" dacă nu le ascundeți." + "Conexiunile tale îți pot vedea numele, fotografia și pot vedea postările în \"Povestea Mea\" dacă nu le ascunzi." Adaugă spectator @@ -5020,6 +5053,22 @@ Distribuie doar către… Gata + + Elimini povestea de grup? + + Se va elimina „%1$s“. + + Elimină + + Ștergi povestea privată? + + „%1$s“ și actualizările trimise către această poveste vor fi șterse. + + Șterge + + Poveștile sunt disponibile doar pentru utilizatorii Signal beta. + + Dacă distribui o poveste, va fi disponibilă doar pentru persoanele care se află în Signal beta. Adaugi la poveste? @@ -5032,10 +5081,12 @@ Povestea nu a putut fi trimisă. Verifică-ți conexiunea și încearcă din nou. Trimite + + Dezactivează și șterge - Distribuie & vezi povești + Distribuie & Vezi Povești - Nu vei mai putea să distribui sau să vezi Povești atunci când această opțiune este dezactivată. + Nu vei mai putea să distribui sau să vezi povești atunci când această opțiune este dezactivată. Alege spectatorii @@ -5087,7 +5138,7 @@ Poveste trimisă - Trimiterea poveștii a eșuat. + Trimiterea poveștii a eșuat Arată povestea @@ -5171,7 +5222,7 @@ Nu acum - Distribuie doar către + Distribuie doar cu Poveste privată · %1$d vizualizator @@ -5184,6 +5235,12 @@ Poveste de grup · %1$d vizualizatori Poveste de grup · %1$d de vizualizatori + + + %1$d membru + %1$d membri + %1$d de membri + %1$s · %2$d vizualizator @@ -5287,7 +5344,7 @@ Confidențialitatea Poveștii Mele - Alege cine poate vedea postările la Povestea Mea. Poți oricând să faci schimbări în setări. + Alege cine poate vedea postările la povestea mea. Poți oricând să faci schimbări în setări. Toate conexiunile Signal @@ -5324,7 +5381,7 @@ Dezactivezi poveștile? - Nu vei mai putea să distribui sau să vezi povești. Orice povești ai trimis recent vor fi încă vizibile pentru alte persoane până ce expiră. + Nu vei mai putea să distribui sau să vezi povești. Actualizările poveștilor pe care le-ai distribuit recent vor fi și ele șterse. Confidențialitatea poveștilor diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e781b397c6..25776b5c22 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -195,7 +195,7 @@ Обновить Не обновлять Предупреждение - Ваша версия Signal устарела. Вы можете просматривать свою историю сообщений, но не сможете отправлять или получать сообщения, пока не обновитесь. + Ваша версия Signal устарела. Вы можете просматривать свою историю сообщений, но не сможете отправлять или получать сообщения, пока не обновите версию Signal. Браузер не найден. @@ -2108,6 +2108,7 @@ %1$s отправил(-а) вам Медиафайл больше не доступен. Не найдено приложение, в котором можно поделиться этим медиафайлом. + Закрыть %1$d новых сообщений в %2$d разговорах @@ -2838,7 +2839,7 @@ Просмотреть содержимое Удалить старые сообщения? Очистить историю сообщений? - Все сообщения и медиа, которые старее, чем %1$s, будут безвозвратно удалены с вашего устройства. + Все сообщения и медиафайлы, которые старее, чем %1$s, будут безвозвратно удалены с вашего устройства. Все разговоры будут безвозвратно обрезаны до %1$s самых новых сообщений. Все сообщения и медиафайлы будут безвозвратно удалены с вашего устройства. Вы действительно хотите удалить всю историю сообщений? @@ -2920,10 +2921,14 @@ Настроить опцию + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3076,6 +3081,26 @@ Не сейчас + + + Настройки безопасности + + Защитите свои средства + + Предотвратите доступ человека, завладевшего вашим телефоном, к вашим денежным средствам, добавив ещё один уровень безопасности. Вы можете отключить эту опцию в настройках. + + Включить блокировку платежа + + Не сейчас + + Пропустить этот шаг? + + Пропуск этого шага может позволить любому, кто имеет физический доступ к вашему телефону, перевести средства или узнать вашу фразу восстановления. + + Отменить + + Пропустить + Пополнить Адрес вашего кошелька @@ -5013,6 +5038,8 @@ Удалить зрителя Ещё нет ответов + + Вы не можете отвечать на эту историю, потому что уже не являетесь участником группы. Отреагировал(-а) на историю @@ -5031,6 +5058,15 @@ Удалить Моя история + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + + + View Кто может просматривать эту историю @@ -5069,8 +5105,6 @@ Разрешить ответы и реакции Разрешить людям, которые могут видеть вашу историю, реагировать и отвечать - - Скрыть вашу историю от определённых людей. По умолчанию ваша история видна вашим %1$s Контакты Signal @@ -5082,7 +5116,7 @@ Имея их в своих системных контактах - "Ваши связи могут видеть ваше имя и фото, а также обновления истории «Моя история», если вы не скроете её от них." + "Ваши контакты могут видеть ваше имя и фото, а также обновления истории «Моя история», если вы не скроете её от них." Добавить зрителя @@ -5129,10 +5163,26 @@ Поделиться только с… Готово + + Удалить историю группы? + + «%1$s» будет удалена. + + Удалить + + Удалить частную историю? + + «%1$s» и её обновления будут удалены. + + Удалить + + Истории доступны только для пользователей бета-версии Signal. + + Если вы поделитесь историей, она будет доступна только тем, кто пользуется бета-версией Signal. Добавить в историю? - Добавление содержимого в историю позволит вашим связям Signal просматривать её в течение 24 часов. Вы можете изменить, кто может видеть вашу историю, в настройках. + Добавление содержимого в историю позволит вашим контактам Signal просматривать её в течение 24 часов. Вы можете изменить, кто может видеть вашу историю, в настройках. Добавить в историю @@ -5141,6 +5191,8 @@ Не удалось отправить историю. Проверьте ваше подключение к интернету и попробуйте ещё раз. Отправить + + Отключить и удалить Делиться историями и просматривать их @@ -5297,6 +5349,13 @@ История группы · %1$d зрителей История группы · %1$d зрителя + + + %1$d участник + %1$d участника + %1$d участников + %1$d участника + %1$s · %2$d зритель @@ -5313,7 +5372,7 @@ Удалить историю - Удалить групповую историю? + Удалить историю группы? Это приведет к удалению истории из этого списка. Вы по-прежнему сможете просматривать истории этой группы. @@ -5442,7 +5501,7 @@ Отключить истории? - Вы больше не сможете делиться историями или просматривать их. Все недавно отправленные вами истории будут по-прежнему видны другим пользователям до истечения срока их действия. + Вы больше не сможете делиться историями или просматривать их. Все истории, которыми вы недавно поделились, будут также удалены. Настройки приватности историй diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index ac4656144a..34aee0ac40 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -2108,6 +2108,7 @@ %1$s vám Médiá už nie sú dostupné. Nepodarilo sa nájsť aplikáciu schopnú zdieľať tento typ súboru. + Zatvoriť %1$d nové správy v %2$d konverzáciách @@ -2920,10 +2921,14 @@ Prispôsobiť nastavenie + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3076,6 +3081,26 @@ Teraz nie + + + Nastavenie zabezpečenia + + Chráňte svoje prostriedky + + Zvýšte úroveň zabezpečenia a zabráňte tak osobe, ktorá používa váš telefón, pristupovať k vašim finančným prostriedkom. Túto možnosť môžete vypnúť v Nastaveniach. + + Aktivovať platobný zámok + + Teraz nie + + Preskočiť tento krok? + + Preskočením tohto kroku umožníte komukoľvek, kto má fyzický prístup k vášmu telefónu, previesť prostriedky alebo pozrieť si vašu frázu na obnovenie. + + Zrušiť + + Preskočiť + Pridať prostriedky Adresa vašej peňaženky @@ -5013,6 +5038,8 @@ Odstrániť sledovateľa Zatiaľ žiadne odpovede + + Na tento príbeh nemôžete odpovedať, pretože už nie ste členom tejto skupiny. Reagoval na príbeh @@ -5031,6 +5058,15 @@ Odstrániť Môj príbeh + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + + + View Kto môže vidieť tento príbeh @@ -5069,8 +5105,6 @@ Povoliť odpovede a reakcie Umožnite ľuďom, ktorí si môžu zobraziť váš príbeh, reagovať a odpovedať - - Skryte svoj príbeh pred konkrétnymi ľuďmi. V predvolenom nastavení sa váš príbeh zdieľa s vaším %1$s Signal spojenia @@ -5129,6 +5163,22 @@ Zdieľať iba s… Hotovo + + Chcete odstrániť skupinový príbeh? + + „%1$s“ bude odstránený. + + Odstrániť + + Vymazať súkromný príbeh? + + „%1$s“ a aktualizácie zdieľané s týmto príbehom budú odstránené. + + Vymazať + + Príbehy sú k dispozícii iba pre používateľov beta verzie Signal. + + Ak zdieľate príbeh, zobrazí sa iba ľuďom, ktorí používajú beta verziu Signal. Pridať do príbehu? @@ -5141,6 +5191,8 @@ Príbeh sa nepodarilo odoslať. Skontrolujte pripojenie a skúste to znova. Poslať + + Vypnúť a odstrániť Zdieľajte a zobrazujte príbehy @@ -5297,6 +5349,13 @@ Skupinový príbeh · %1$d sledovateľov Skupinový príbeh · %1$d sledovateľov + + + %1$d člen + %1$d členovia + %1$d člena + %1$d členov + %1$s · %2$d sledovateľ @@ -5442,7 +5501,7 @@ Vypnúť príbehy? - Už nebudete môcť zdieľať ani prezerať príbehy. Všetky príbehy, ktoré ste nedávno uverejnili, sa budú naďalej zobrazovať ostatným, až kým nevyprší ich platnosť. + Už nebudete môcť zdieľať ani prezerať príbehy. Budú tiež odstránené aktualizácie príbehov, ktoré ste nedávno zdieľali. Súkromie príbehu diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 04e1075b07..4a854d5efd 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -195,7 +195,7 @@ Posodobitev Ne nadgradi Opozorilo - Različica aplikacije Signal na vaši napravi je potekla. Še vedno lahko pregledujete zgodovino svojih sporočil, ne morete pa jih pošiljati ali prejemati dokler je ne nadgradite. + Različica aplikacije Signal na vaši napravi je potekla. Še vedno lahko pregledujete zgodovino svojih sporočil, ne morete pa jih pošiljati ali prejemati dokler je ne posodobite. Spletnega brskalnika ni bilo mogoče najti. @@ -719,7 +719,7 @@ Kaj so Nove skupine? Nove skupine omogočajo napredne funkcije kot so @omembe in skrbniki_ce skupin, ter v prihodnosti še veliko novih funkcij. - Zgodovina pogovorov in medijskih datotek je bila ohranjena in nadgrajena. + Zgodovina pogovorov in medijskih datotek je bila ohranjena pred nadgradnjo. Za ponovno pridružitev skupini morate najprej potrditi vabilo. Do takrat ne boste mogli prejemati sporočil skupine. Ta član_ica bo moral_a potrditi vabilo za ponovno pridružitev skupini in do takrat ne bo mogel_la prejemati novih sporočil skupine: @@ -738,7 +738,7 @@ Nadgradi v Novo skupino Nadgradi to skupino Nove skupine omogočajo napredne funkcije kot so @omembe in skrbniki_ce skupin, ter v prihodnosti še veliko novih funkcij. - Zgodovina pogovorov in medijskih datotek bo ohranjena. + Zgodovina pogovorov in medijskih datotek bo ohranjena pred nadgradnjo. Prišlo je do napake na omrežju. Poskusite spet kasneje. Nadgradnja ni bila uspešna. @@ -2001,7 +2001,7 @@ Vnovčili ste darilni bedž - Odziv na vašo zgodbo: %1$s + Na vašo zgodbo se je odzval_a: %1$s Vaš odziv na zgodbo: %1$s @@ -2108,6 +2108,7 @@ %1$s za vas Medijsko sporočilo ni več na voljo. Ne najdem ustrezne aplikacije za delitev tega medija. + Zapri Novih sporočil: %1$d, pogovorov: %2$d @@ -2356,7 +2357,7 @@ %1$s · zgodba - Vi - zgodba + Vi · zgodba Ni več na voljo @@ -2837,12 +2838,12 @@ Zvok Pregled porabe pomnilnika Želite izbrisati starejša sporočila? - Želite izbrisati zgodovino sporočil? - S tem boste nepovratno izbrisali celotno zgodovino sporočil in medijskih datotek starejših od %1$sz vaše naprave. + Želite izbrisati zgodovino pogovorov? + S tem boste nepovratno izbrisali celotno zgodovino pogovorov in medijskih datotek, starejših od %1$s, z vaše naprave. S temo boste nepovratno obrezali vse vaše pogovore na %1$s zadnjih sporočil. - S tem boste nepovratno izbrisali celotno zgodovino sporočil in medijskih datotek z vaše naprave. - Ste prepričani, da želite izbrisati celotno zgodovino sporočil? - Celotna zgodovina vaših sporočil bo za vedno izbrisana. Ta korak je nepovraten. + S tem boste nepovratno izbrisali celotno zgodovino pogovorov in medijskih datotek z vaše naprave. + Ali ste prepričani, da želite izbrisati celotno zgodovino pogovorov? + Celotna zgodovina vaših pogovorov bo za vedno izbrisana. Ta korak je nepovraten. Izbriši vse zdaj! Za vedno 1 leto @@ -2920,10 +2921,14 @@ Nastavitve po meri + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3076,6 +3081,26 @@ Ne zdaj + + + Nastavitev varnosti + + Zaščitite svoja sredstva + + Pomagajte osebi z vašim telefonom preprečiti dostop do vaših sredstev, tako da dodate še eno raven varnosti. To možnost lahko onemogočite v nastavitvah. + + Omogoči zaklepanje plačil + + Ne zdaj + + Želite preskočiti ta korak? + + Če preskočite ta korak, lahko vsakomur, ki ima fizični dostop do vašega telefona, omogočite prenos sredstev ali ogled vaše obnovitvene fraze. + + Prekliči + + Preskoči + Dodaj sredstva Naslov vaše denarnice @@ -4170,7 +4195,7 @@ Privzet odštevalnik za nove pogovore Nastavite privzet čas poteka sporočil za vse nove pogovore, ki jih začnete sami. - Upravljajte svoje Zgodbe in kdo si jih lahko ogleda + Upravljajte svoje zgodbe in kdo si jih lahko ogleda Za prenos sredstev zahtevajte zaklepanje zaslona Android ali prstni odtis Omogočanje potrjevanja plačila ni uspelo @@ -4454,9 +4479,9 @@ Dodaj sporočilo Hitrejše posredovanje - Videi bodo obrezani na 30-sekundne posnetke in poslani kot več Zgodb. + Videoposnetki bodo obrezani na 30-sekundne posnetke in poslani kot več zgodb. - Videi, poslani v Zgodbe, ne smejo biti daljši od 30 s. + Videoposnetki, poslani v zgodbe, ne smejo biti daljši od 30 s. Posredovana sporočila so zdaj poslana v trenutku. Pošlji %1$d sporočilo @@ -4911,17 +4936,17 @@ 99+ - Zasebnost Zgodb + Zasebnost zgodb Moje zgodbe - Tapnite za dodajanje Zgodbe + Tapnite za dodajanje zgodbe Trenutno ni nobenih posodobitev. Skrij zgodbo - Ponovno prikazuj zgodbo + Ponovno prikaži zgodbo Posreduj @@ -4943,7 +4968,7 @@ Želite skriti zgodbo? - Nove posodobitve uporabnika_ce%1$s ne bodo več vidne na vrhu seznama zgodb. + Nove posodobitve uporabnika_ce %1$s ne bodo več vidne na vrhu seznama zgodb. Skrij @@ -5013,14 +5038,16 @@ Odstrani gledalca_ko Brez odgovorov + + Na to zgodbo ne morete odgovoriti, ker niste več član_ica te skupine. - Reakcije na zgodbo + Odzivi na zgodbo Ogledi Odgovori - Reagiraj na zgodbo + Odzovite se na zgodbo Zaseben odgovor za %1$s @@ -5031,8 +5058,17 @@ Izbriši Moja zgodba + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + + + View - Kdo si lahko ogleda to Zgodbo + Kdo si lahko ogleda to zgodbo Skrij zgodbo pred @@ -5068,9 +5104,7 @@ Dovoli odgovore & odzive - Dovoli ljudem, ki lahko vidijo vašo zgodbo, odgovore in reakcije - - Skrijte svojo zgodbo pred določenimi ljudmi. Privzeto je vaša zgodba deljena z %1$s + Dovolite ljudem, ki lahko vidijo vašo zgodbo, odgovore in odzive Signal povezave @@ -5082,7 +5116,7 @@ jih imeli med svojimi stiki - "Povezani lahko vidijo veše ime in fotografijo, ter vaše objave pod \"Moja zgodba\", razen če jih skrijete pred njimi." + "Vaše povezave lahko vidijo vaše ime in fotografijo ter objave pod \"Moja zgodba\", razen če jih skrijete pred njimi." Dodaj gledalca_ko @@ -5090,7 +5124,7 @@ Želite izbrisati %1$s? - Oseba ne bo več videla vaše zgodbe. + Ta oseba ne bo več videla vaše zgodbe. Odstrani @@ -5129,10 +5163,26 @@ Deli le s/z … OK + + Želite odstraniti skupinsko zgodbo? + + »%1$s« bo odstranjena. + + Odstrani + + Želite izbrisati zasebno zgodbo? + + »%1$s« in posodobitve v skupni rabi te zgodbe bodo izbrisane. + + Izbriši + + Zgodbe so na voljo samo uporabnikom_cam beta različice Signala. + + Če delite zgodbo, bo na voljo samo ljudem, ki uporabljajo Signal beta. Želite dodati k zgodbi? - Dodajanje vsebine k vaši zgodbi bo omogočalo Signal povezanim, da si jo ogledujejo 24 ur. V nastavitvah lahko spreminjate, kdo lahko gleda vašo zgodbo. + Dodajanje vsebine k vaši zgodbi bo omogočalo Signal povezavam, da si jo ogledujejo 24 ur. V nastavitvah lahko spreminjate, kdo lahko gleda vašo zgodbo. Dodaj k zgodbi @@ -5141,10 +5191,12 @@ Zgodba ni mogla biti poslana. Preverite svojo povezavo in poskusite znova. Pošlji + + Izklopi in izbriši - Deljenje & Ogled zgodb + Deljenje in ogled zgodb - Če je ta nastavitev izklopljena, ne boste več mogli deliti ali gledati zgodb. + Ko je ta možnost izklopljena, ne boste mogli več deliti ali gledati zgodb. Izberi gledalce @@ -5197,7 +5249,7 @@ Poslana zgodba - Pošiljanje zgodbe neuspešno + Pošiljanje zgodbe ni uspelo Ogled zgodbe @@ -5215,9 +5267,9 @@ Reagirali ste na zgodbo uporabnika_ce %1$s - Reakcije na zgodbo + Reakcije na vašo zgodbo - Reakcija na zgodbo + Reakcije na zgodbo @@ -5285,9 +5337,9 @@ Deli le s/z - Zasebna Zgodba · %1$d gledalec_ka - Zasebna Zgodba · %1$d gledalca_ki - Zasebna Zgodba · %1$d gledalci_ke + Zasebna zgodba · %1$d gledalec_ka + Zasebna zgodba · %1$d gledalca_ki + Zasebna zgodba · %1$d gledalci_ke Zasebna zgodba · %1$d gledalcev_k @@ -5297,6 +5349,13 @@ Skupinska zgodba · %1$d gledalci_ke Skupinska zgodba · %1$d gledalcev_k + + + %1$d član_ica + %1$d člana_ici + %1$d člani_ce + %1$d članov_ic + %1$s · %2$d gledalec @@ -5307,13 +5366,13 @@ Tapnite za izbiro gledalcev - Nastavitve zgodbe + Nastavitve zgodb Odstrani zgodbo Izbriši zgodbo - Želite odstraniti zgodbo skupine? + Želite odstraniti skupinsko zgodbo? To bo odstranilo zgodbo iz tega seznama. Še vedno boste lahko videli zgodbe iz te skupine. @@ -5373,7 +5432,7 @@ Vse povezave so bile pregledane, tapnite pošlji za nadaljevanje. - Imate %1$d povezav, ki so morda znova namestile Signal ali zamenjale napravo. Preden z njimi delite svojo zgodbo, preglejte njihove varnostne številke ali razmislite o njihovi odstranitvi iz ogleda zgodbe. + Imate %1$d povezav_e, ki so morda znova namestile Signal ali zamenjale napravo. Preden z njimi delite svojo zgodbo, preglejte njihove varnostne številke ali razmislite o njihovi odstranitvi iz ogleda zgodbe. Preglej varnostno število @@ -5430,29 +5489,29 @@ - Zgodbe samodejno izginejo po 24 urah. Izberite, kdo si lahko ogleda vašo Zgodbo, ali ustvarite nove z določenimi gledalci ali skupinami. + Zgodbe samodejno izginejo po 24 urah. Izberite, kdo si lahko ogleda vašo zgodbo, ali ustvarite nove z določenimi gledalci ali skupinami. - Izklopite Zgodbe + Izklopite zgodbe - Če se odjavite od Zgodb, jih ne boste mogli več deliti ali gledati. + Če se odjavite od zgodb, jih ne boste mogli več deliti ali gledati. - Vklopite Zgodbe + Vklopite zgodbe - Delite in si oglejte Zgodbe drugih. Zgodbe samodejno izginejo po 24 urah. + Delite in si oglejte zgodbe drugih. Zgodbe samodejno izginejo po 24 urah. - Želite izklopiti Zgodbe? + Želite izklopiti zgodbe? - Zgodb ne boste mogli več deliti ali si jih ogledovati. Vse Zgodbe, ki ste jih nedavno poslali, bodo še vedno vidne drugim, dokler ne potečejo. + Zgodb ne boste mogli več deliti ali si jih ogledovati. Izbrisane bodo tudi posodobitve zgodb, ki ste jih nedavno delili. - Zasebnost Zgodb + Zasebnost zgodb - Kdo lahko vidi to Zgodbo + Kdo lahko vidi to zgodbo - "Člani skupine »%1$s« si lahko ogledajo to Zgodbo in odgovorijo nanjo. Članstvo za ta klepet lahko posodobite v skupini." + "Člani skupine »%1$s« si lahko ogledajo to zgodbo in odgovorijo nanjo. Članstvo za ta klepet lahko posodobite v skupini." - Odstrani skupinsko Zgodbo + Odstrani skupinsko zgodbo Prelivni meni diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 4b8b5beaff..3534739d13 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -193,7 +193,7 @@ Përditësoje Mos e përditëso Paralajmërim - Versioni juaj i Signal ka skaduar. Ju mund të shikoni historikun tuaj të mesazheve, por nuk do të mund të dërgoni ose merrni mesazhe derisa ta përditësoni atë. + Versioni yt i Signal ka skaduar. Mund të shikosh historikun e mesazheve, por nuk do të mund të dërgosh ose marrësh mesazhe, derisa ta përditësosh. Nuk u gjet asnjë shfletues ueb. @@ -218,7 +218,7 @@ Gjeni sipas emri përdoruesi - Story-t e mia + Postimet e mia të përkohshme Postim i përkohshëm i ri @@ -673,7 +673,7 @@ Ç\\’janë Grupet e Reja? Grupet e Reja kanë veçori të tilla si @përmendje dhe përgjegjës grupi, dhe në të ardhmen do të mbulojnë më tepër veçori. - Krejt historiku i mesazhe dhe mediat janë mbajtur prej kohës para përmirësimit. + Do të ruhet i gjithë historiku i mesazheve dhe media para përditësimit. Do t\\’ju duhet të pranoni një ftesë, ta të ribëheni pjesë e këtij grupi, dhe s\\’do të merrni mesazhe grupi, pa e pranuar. Ky anëtar do të duhet të pranojë një ftesë për t\\’u bërë pjesë e grupit dhe s\\’do të marrë mesazhe grupi përpara se ta pranojë: @@ -688,7 +688,7 @@ Përmirësoje si Grup të Ri Përpunojeni këtë grup Grupet e Reja kanë veçori të tilla si @përmendje dhe përgjegjës grupi, dhe në të ardhmen do të mbulojnë më tepër veçori. - Krejt historiku i mesazheve dhe mediat do të mbahen prej kohës para përmirësimit. + Do të ruhet i gjithë historiku i mesazheve dhe media para përditësimit. U has një gabim rrjeti. Riprovoni më vonë. S\\’u arrit të përmirësohej. @@ -1524,7 +1524,7 @@ Ju - Historia Ime + Postimi im i përkohshëm Bllokoje @@ -1542,7 +1542,7 @@ Dështoi rrjeti! Numër i paregjistruar! Numri që thirrët nuk mbulon thirrje me zë të sigurta! - E mora + E kuptova @@ -1855,9 +1855,9 @@ Ju përdorët një distinktiv dhuratë - Reagoi me %1$s ndaj postimit të përkohshëm + Reagoi me %1$s ndaj postimit tënd të përkohshëm - Reagoi me %1$s ndaj postimit të përkohshëm + Reagoi me %1$s ndaj postimit të tyre të përkohshëm Përditësim i Molly-it @@ -1960,6 +1960,7 @@ %1$s për ju Media s\\’është më e passhme. S\\’gjendet dot një aplikacion për të ndarë me të tjerët këtë media. + Mbylle %1$d mesazhe të reja në %2$d biseda @@ -2038,7 +2039,7 @@ Kërkesë mesazhi Ju - %1$s • Story + %1$s • Postim i përkohshëm Luaje videon @@ -2198,9 +2199,9 @@ Ju S\\’u gjet mesazhi origjinal - %1$s · Histori + %1$s · Postim i përkohshëm - Ju · Histori + Ti · Postim i përkohshëm S’mund të kihet më @@ -2343,7 +2344,7 @@ U kopjua në të papastër vulë kohore dërgimi. - Këtu do të shfaqen përditësime te historia juaj. + Përditësimet e postimit tënd të përkohshëm do të shfaqen këtu. @@ -2623,7 +2624,7 @@ Pagesa (Beta) Kufi gjatësie bisedash Mbaji mesazhet - Spastro historik mesazhesh + Pastro historikun e mesazheve Pajisje të lidhura E çelët E errët @@ -2657,7 +2658,7 @@ Kur përdoret Wi-Fi Nën roaming Vetëshkarkim mediash - Historik mesazhesh + Historiku i mesazheve Përdorim hapësire Foto Video @@ -2665,12 +2666,12 @@ Audio Shqyrtoni hapësirën Të fshihen mesazhet e vjetër? - Të spastrohet historiku i mesazheve? - Kjo do të sjellë fshirjen përgjithmonë nga pajisja juaj të krejt historikut dhe mediave të mesazheve që janë më të vjetër se %1$s. + Të pastrohet historiku i mesazheve? + Kjo do të fshijë përgjithmonë të gjithë historikun e mesazheve dhe mediat nga pajisja jote, që janë më të vjetër se %1$s. Kjo do të qethë përgjithnjë krejt bisedat sa %1$s mesazhet më të freskët. - Kjo do të sjellë fshirjen përgjithmonë nga pajisja juaj të krejt historikut dhe mediave të mesazheve. - Jeni i sigurt se doni të fshihet krejt historiku i mesazheve? - Do të hiqet përgjithnjë krejt historiku i mesazheve. Ky veprim s\\’mund të zhbëhet. + Kjo do të fshijë përgjithmonë të gjithë historikun e mesazheve dhe mediat nga pajisja jote. + Je i sigurt se dëshiron të fshihesh krejt historikun e mesazheve? + I gjithë historiku i mesazheve do të hiqet përgjithmonë. Ky veprim nuk mund të zhbëhet. Fshije krejt tani Përgjithmonë 1 vit @@ -2748,10 +2749,14 @@ Përshtatë një mundësi + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Jo tani + + + Konfigurimi i sigurisë + + Mbro fondet e tua + + Parandalo që një person, i cili mund të ketë telefonin tënd, të mund të hyjë te fondet e tua, duke shtuar një shtresë tjetër sigurie. Mund ta çaktivizosh këtë opsion te \"Parametrat\". + + Aktivizo kyçjen e pagesës + + Jo tani + + Do ta kalosh këtë hap? + + Kapërcimi i këtij hapi mund të lejojë këdo që ka qasje fizike në telefonin tënd të transferojë fonde ose të shikojë fjalinë tënde të rimarrjes së kontrollit. + + Anuloje + + Anashkaloje + Shtoni fonde Portofol @@ -3976,7 +4001,7 @@ Kohëmatës parazgjedhje për fjalosje të reja Ujdisni një kohëmatës tretjeje mesazhesh për krejt fjalosjet e reja të nisura nga ju. - Menaxho postimet e përkohshme dhe se kush mund t\'i shohë ato + Menaxho postimet e tua të përkohshme dhe se cili mund t\'i shohë ato Kërko kyçje të ekranit nga Android ose gjurmën e gishtit për të transferuar fondet Kyçja e pagesës nuk mund të aktivizohet @@ -4699,21 +4724,21 @@ Fjalosje - Histori + Postime të përkohshme 99+ Privatësia e postimit të përkohshëm - Historitë e Mia + Postimet e mia të përkohshme Kliko për të shtuar një postim të përkohshëm S’ka përditësime së fundi për shfaqje tani. - Fshihe historinë + Fshihe postimin e përkohshëm - Shfshihe historinë + Shfaq postimin e përkohshëm Përcjellje @@ -4733,15 +4758,15 @@ Prekeni që të riprovohet - Të fshihet historia? + Të fshihet postimi i përkohshëm? - Përditësime të reja historie nga %1$s s’do të shfaqen më në krye të listës së historive. + Përditësimet e reja të postimeve të përkohshme nga %1$s nuk do të shfaqen më në krye të listës së postimeve të përkohshme. Fshihe - Histori e fshehur + Postim i përkohshëm i fshehur - Histori të fshehura + Postime të përkohshme të fshehura %1$d parje @@ -4750,11 +4775,11 @@ Përcjellje - Historia e %1$s + Postim i përkohshëm i %1$s - Të fshihet historia? + Të fshihet postimi i përkohshëm? - Kjo histori do të fshihet për ju dhe këdo që e ka marrë. + Ky postim i përkohshëm do të fshihet për ty dhe për të gjithë ata që e kanë marrë. Nuk mund të ruhet @@ -4799,14 +4824,16 @@ Hiqe shikuesin Ende pa përgjigje + + Nuk mund t\'i përgjigjesh këtij postimi të përkohshëm, sepse nuk je më anëtar i këtij grupi. - Reagoi ndaj historisë + Reagoi ndaj postimit të përkohshëm Parje Përgjigje - Reagoni ndaj kësaj historie + Reago ndaj këtij postimi të përkohshëm Përgjigje privatisht për %1$s @@ -4816,11 +4843,18 @@ Fshiji - Historia ime + Postimi im i përkohshëm + + + %1$d viewer + %1$d viewers + + + View Kush mund ta shikojë këtë postim të përkohshëm - Fshihe historinë nga + Fshihe postimin e përkohshëm nga Të gjitha kontaktet e Signal @@ -4828,7 +4862,7 @@ Të gjithë përveç… - Fshih postimin e përkohshëm nga persona të caktuar + Fshihe postimin e përkohshëm nga persona të caktuar %1$d persona të përjashtuar @@ -4844,15 +4878,13 @@ %1$d persona - Zgjidh personat që mund ta shohin postimin e përkohshëm. Ndryshimet nuk zbatohen te postimet e përkohshëm që tashmë i ke dërguar. + Zgjidh personat që mund ta shohin postimin e përkohshëm. Ndryshimet nuk zbatohen te postimet e përkohshme që tashmë i ke dërguar. Përgjigje & reagime Lejo përgjigje & reagime - Lërini njerëzit që mund të shohin historinë tuaj të reagojnë dhe përgjigjen - - Fshiheni historinë tuaj për persona të caktuar. Si parazgjedhje, historia juaj ndahet me %1$s tuaj + Lëri njerëzit që mund të shohin postimin tënd të përkohshëm të reagojnë dhe të përgjigjen Kontaktet e Signal @@ -4864,15 +4896,15 @@ Pasjen e tyre te kontaktet tuaja të sistemit - "Lidhjet tuaja mund të shohin emrin dhe foton tuaj dhe mund të shohin postime te “Historia Ime”, veç në u fshefshi." + "Kontaktet e tua mund të shohin emrin dhe foton tënde dhe mund të shohin postime te “Postimi im i përkohshëm”, veç nëse e fshihni nga të tjerët." Shtoni shikues - Fshi histori private + Fshi postimin privat të përkohshëm Të hiqet %1$s? - Ky person s’do ta shohë më historinë tuaj. + Ky person nuk do ta shohë më postimin të përkohshëm. Hiqe @@ -4880,9 +4912,9 @@ Ky veprim s’mund të zhbëhet. - Përpunoni emër historie + Përpuno emrin e postimit të përkohshëm - Emër historie + Emri i postimit të përkohshëm Ruaji @@ -4900,7 +4932,7 @@ Shtypni pse hidhni një URL - Ndajeni shembullin tuaj me shikuesit përmes një lidhjeje + Shpërndaj një link me shikuesit e postimit tënd të përkohshëm Kërko @@ -4911,22 +4943,40 @@ Shpërndaj vetëm me… U bë + + Të hiqet postimi i përkohshëm i grupit? + + \"%1$s\" do të hiqet. + + Fshije + + Të fshihet postimi privat i përkohshëm? + + \" %1$s \" dhe përditësimet e ndara në këtë postim të përkohshëm do të fshihen. + + Fshije + + Postimet e përkohshme ofrohen vetëm për përdoruesit e Signal beta. + + Nëse shpërndan një postim të përkohshëm, ai do të jetë i disponueshëm vetëm për njerëzit që janë në Signal beta. - Të shtohet te histori? + Të shtohet te postimi i përkohshëm? - Shtimi i lëndës te historia juaj u lejon lidhjeve tuaja Signal ta shohin për 24 orë. Se cilët mund ta shohin historinë tuaj mund ta ndryshoni te Rregullimet. + Shtimi i përmbajtjes në postimin tënd të përkohshëm lejon që kontaktet e tua të Signal ta shohin atë për 24 orë. Ti mund ta ndryshosh se kush mund ta shikojë postimin tënd të përkohshëm te \"Parametrat\". - Shtoje në histori + Shto në postimin e përkohshëm Përpunoni shikues - S\\’u dërgua dot histori. Kontrolloni lidhjen tuaj në internet dhe riprovoni. + Postimi i përkohshëm nuk u dërgua dot. Kontrollo lidhjen e internetit dhe provo sërish. Dërgoje + + Çaktivizo dhe fshij - Ndajeni me të tjerë & Shihni Histori + Shpërndaj dhe shiko postimin e përkohshëm - S’do të jeni më në gjendje të ndani me të tjerë apo të shihni Histori, kur kjo mundësi të çaktivizohet. + Nuk do të jesh më në gjendje të ndash apo shikosh postime të përkohshme, kur ky opsion të çaktivizohet. Zgjidhni shikues @@ -4937,9 +4987,9 @@ %1$d shikues - Emërtoni historinë + Emërto postimin e përkohshëm - Emër historie (I domosdoshëm) + Emri i postimit të përkohshëm ( i domosdoshëm) Shikues @@ -4947,17 +4997,17 @@ Kjo fushë është e domosdoshme. - Ka tashmë një histori me këtë emër. + Ka tashmë një postim të përkohshëm me këtë emër. Përzgjidhi krejt - Zgjidhni llojin e historisë tuaj + Zgjidh llojin e postimit tënd të përkohshëm - Histori e re private + Postim privat i përkohshëm i ri E dukshme vetëm për persona specifikë - Histori grupi + Postim i përkohshëm grupi Ndajeni me një grup ekzistues @@ -4969,17 +5019,17 @@ Po dërgohet përgjigje… - Kjo story nuk është më e disponueshme. + Ky postim i përkohshëm nuk është më i disponueshëm. Nuk ka lidhje interneti Përmbajtja nuk u ngarkua - Story u dërgua + Postimi i përkohshëm u dërgua - Dërgimi i story-t dështoi + Dërgimi i postimit të përkohshëm dështoi - Shihni story-n + Shih postimin e përkohshëm Shihni foton e profilit @@ -4993,11 +5043,11 @@ Çaktivizoje - Reaguat ndaj historisë nga %1$s + Ti reagove ndaj postimit të përkohshëm të %1$s - Reagoi ndaj story-t tuaj + Reagoi ndaj postimit tënd të përkohshëm - Reagoi te një story + Reagoi te një postim i përkohshëm @@ -5063,13 +5113,18 @@ Shpërndaje vetëm me - Histori private · %1$d parës + Postim i përkohshëm privat · %1$d shikues Postim i përkohshëm privat · %1$d shikues - Histori grupi · %1$d parës - Postim i përkohshëm grupi · %1$d shikues + Postim i përkohshëm grupi · %1$d shikues + Postim i përkohshëm grupi · %1$d shikuesa + + + + %1$d anëtar + %1$d anëtarë @@ -5079,7 +5134,7 @@ Kliko për të zgjedhur shikuesit - Rregullime historie + Parametrat e postimit të përkohshëm Hiq postimin e përkohshëm @@ -5087,11 +5142,11 @@ Të hiqet postimi i përkohshëm i grupit? - Postimi i përkohshëm do të fshihet nga lista. Postimet e përkohshme të këtij grupi do të mund t\'i shohësh ende. + Kjo do të fshijë postimin e përkohshëm nga lista. Postimet e përkohshme të këtij grupi do të mund t\'i shohësh ende. Fshije - Të fshihet historia? + Të fshihet postimi i përkohshëm? Të fshihet postimi privat i përkohshëm \"%1$s\"? @@ -5121,7 +5176,7 @@ Shfleto djathtas për të dalë - U mor + E kuptova Hap menynë e kontekstit @@ -5139,7 +5194,7 @@ Të gjitha kontaktet janë shqyrtuar; kliko dërgo për të vazhduar. - Ke %1$d kontakte që mund të kenë riinstaluar Signal ose të kenë ndryshuar pajisje. Para se të shpërndash postimin e përkohshëm me ta, rishiko numrat e tyre të sigurisë ose shih mundësinë e heqjes së tyre nga postimi i përkohshëm. + Ke %1$d kontakte që mund të kenë instaluar sërish Signal ose të kenë ndryshuar pajisje. Para se të shpërndash postimin e përkohshëm me ta, rishiko numrat e tyre të sigurisë ose shih mundësinë e heqjes së tyre nga postimi i përkohshëm. Verifiko numër siguri @@ -5169,7 +5224,7 @@ Privatësia e postimit tim të përkohshëm - Zgjidh personat që mund t\'i shikojë postimet te \"Postimet e mia të përkohshme\". Ndryshimet mund të bëhen gjithmonë te cilësimet. + Zgjidh personat që mund t\'i shikojë postimet te \"Postimet e mia të përkohshme\". Ndryshimet mund të bëhen gjithmonë te parametrat. Të gjitha lidhjet e Signalit @@ -5194,7 +5249,7 @@ - Postimet e përkohshme zhduken automatikisht pas 24 orësh. Zgjidh kush mund të shohë postimet e tua të përkohshme ose krijo postime të reja të përkohshme për shikues ose grupe të veçanta. + Postimet e përkohshme zhduken automatikisht pas 24 orësh. Zgjidh cili mund të shohë postimet e tua të përkohshme ose krijo postime të reja të përkohshme për shikues ose grupe të veçanta. Çaktivizo postimet e përkohshme @@ -5202,11 +5257,11 @@ Aktivizo postimet e përkohshme - Shpërndaj dhe shiko postimet e përkohshme të të tjerëve. Postimet e përkohshme zhduken automatikisht pas 24 orësh. + Shpërnda dhe shiko postimet e përkohshme të të tjerëve. Postimet e përkohshme zhduken automatikisht pas 24 orësh. Do t\'i çaktivizosh postimet e përkohshme? - Nuk mund të ndash apo shikosh më postimet e përkohshme. Çdo postim i përkohshëm që ke dërguar së fundi do të shihet ende nga të tjerët, derisa t\'i mbarojë koha. + Nuk do të mund të ndash apo shikosh më postime të përkohshme. Përditësimet e postimeve të përkohshme që ke ndarë së fundi do të fshihen gjithashtu. Privatësia e postimit të përkohshëm @@ -5214,7 +5269,7 @@ Kush mund ta shikojë këtë postim të përkohshëm - "Anëtarët e grupit \"%1$s\" mund ta shikojnë këtë postim të përkohshëm dhe t'i përgjigjen. Ti mund të përditësosh anëtarësimin për këtë bisedë në grup." + "Anëtarët e grupit \"%1$s\" mund ta shikojnë këtë postim të përkohshëm dhe t'i përgjigjen. Mund të përditësosh anëtarësimin për këtë bisedë në grup." Hiq postimin e përkohshëm të grupit @@ -5229,7 +5284,7 @@ Eksporto mesazhet e tua SMS - Ti mund të eksportosh mesazhet e tua SMS në bazën e të dhënave SMS të telefonit tënd. Kjo lejon që aplikacionet e tjera SMS në telefonin tënd të hyjnë dhe t\'i importojnë ato. Kjo nuk krijon një skedar të ndashëm të historikut të mesazheve SMS. + Mund të eksportosh mesazhet e tua SMS në bazën e të dhënave SMS të telefonit tënd. Kjo lejon që aplikacionet e tjera SMS në telefonin tënd të hyjnë dhe t\'i importojnë ato. Kjo nuk krijon një skedar të ndashëm të historikut të mesazheve SMS. Vazhdo diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index eedda75afb..3ce4de6d7e 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -193,7 +193,7 @@ Сачувај Немој да ажурираш Упозорење - Верзија апликације Signal је истекла. Можете да прикажете Вашу историју порука али нећете моћи да шаљете и примате поруке док не ажурирате апликацију. + Ваша верзија Signal-а је истекла. Можете да видите историју порука али нећете моћи да шаљете и примате поруке док не ажурирате апликацију. На вашем уређају нема Веб прегледача. @@ -220,7 +220,7 @@ Моје приче - Nova priča + Нова прича Порука за %1$s @@ -673,7 +673,7 @@ Шта су нове групе? Нове групе имају функције попут @помињања и администратора групе и подржаваће више функција у будућности. - Сва историја порука и медији су сачувани од пре надоградње. + Целокупна историја порука и медијски садржаји од пре надоградње су сачувани. Мораћете да прихватите позивницу да бисте се поново придружили овој групи. Нећете примати нове групне поруке док не прихватите. This member will need to accept an invite to join this group again and will not receive group messages until they accept: @@ -688,7 +688,7 @@ Надогради у нову групу Надогради ову групу Нове групе имају функције попут @помињања и администратора групе и подржаваће више функција у будућности. - Сва историја порука и медији ће бити сачувани од пре надоградње. + Целокупна историја порука и медијски садржаји од пре надоградње биће сачувани. Дошло је до грешке мреже. Покушајте поново касније. Надоградња није успела. @@ -1346,9 +1346,9 @@ Sviđa vam se ova nova funkcija? Podržite Signal jednokratnom donacijom. - Istorija poruka koje ste razmenili vi i %1$s, i broj tog korisnika %2$s sada su spojeni. + Историја порука које сте разменили ви и %1$s и број тог корисника %2$s сада су спојени. - Istorija poruka koje ste razmenili vi i %1$s, i drugo ćaskanje koje je pripadalo tom korisniku sada su spojeni. + Историја порука које сте разменили ви и %1$s и друго ћаскање које је припадало том кориснику сада су спојени. %1$s покренуо/ла групни позив · %2$s @@ -1542,7 +1542,7 @@ Неуспех мреже! Број није пријављен! Број који сте бирали не подржава обезбеђене позиве! - Важи + Разумем @@ -1855,9 +1855,9 @@ Искористили сте поклон значку - Dobili ste reakciju %1$s na priču. + Реаговао/ла је %1$s на вашу причу. - Poslali ste reakciju %1$s na priču. + Реаговао/ла је %1$s на причу. Надоградња Molly-a @@ -1960,6 +1960,7 @@ %1$s за вас Медијуч више није доступан. Нема апликације која може да подели овај медијум. + Затвори %1$d нових порука у %2$d преписки @@ -2343,7 +2344,7 @@ Копирана послата временска ознака у остави. - Ажурирања ваше приче ће се појавити овде. + Измене ваше приче биће приказане овде. @@ -2623,7 +2624,7 @@ Уплате (Beta) Ограничење дужине преписке Задржити поруке - Очисти историју поруке + Избриши историју порука Повезани уређаји Светла Тамна @@ -2657,7 +2658,7 @@ На бежичној У ромингу Ауто-преузимање медија - Историјат поруке + Историја порука Употреба складиште Слике Видео @@ -2665,12 +2666,12 @@ Звук Прегледајте складиште Брисати старе поруке? - Очистити историју поруке? - Овим ћете трајно избрисати сву историју порука и медије са уређаја старије од %1$s. + Желите ли да избришете историју порука? + Овим ћете са уређаја трајно избрисати целокупну историју порука и медијске садржаје који су старији од %1$s. Ово ће трајно да скрати све преписке на %1$s најскоријих порука. - Овим ћете трајно избрисати сву историју порука и медије са уређаја. - Да ли заиста желите да избришете сву историју порука? - Сва историја порука биће трајно уклоњена. Ова радња се не може опозвати. + Овим ћете са уређаја трајно избрисати целокупну историју порука и медијске садржаје. + Желите ли сигурно да избришете целокупну историју порука? + Целокупна историја порука биће трајно уклоњена. Та радња се не може опозвати. Избриши све сада Заувек 1 година @@ -2748,10 +2749,14 @@ Прилагодите опцију + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Ne sada + + + Security setup + + Protect your funds + + Help prevent a person with your phone from accessing your funds by adding another layer of security. You can disable this option in Settings. + + Enable payment lock + + Не сада + + Skip this step? + + Skipping this step could allow anyone who has physical access to your phone to transfer funds or view your recovery phrase. + + Одустани + + Прескочи + Додај средства Адреса Вашег новчаника @@ -3743,10 +3768,10 @@ Сакрити ову картицу? Сакриј - Sačuvajte frazu za oporavak + Сачувајте фразу за опоравак Ваша фраза за опоравак вам даје други начин да вратите свој налог за исплату. - Sačuvajte frazu + Сачувајте фразу Ажурирати PIN Са високим салдом, можда ћете желети да ажурирате на алфанумерички ПИН да бисте додали више заштите на свој рачун. Ажурирати PIN @@ -3771,25 +3796,25 @@ Фраза опоравка Прегледати фразу опоравка - Sačuvajte frazu za oporavak + Сачувајте фразу за опоравак Унети фразу опоравка Ваш салдо ће се аутоматски вратити када поново инсталирате Signal ако потврдите свој ПИН Signal-а. Такође можете да вратите салдо користећи фразу за опоравак, која је јединствена%1$d-речи фраза. Запишите је и чувајте га на сигурном месту. - Imate novac na nalogu! Vreme je da sačuvate frazu za oporavak – ključ od 24 reči koji ćete koristiti da povratite novac sa naloga. + Имате новац на налогу! Време је да сачувате фразу за опоравак – кључ од 24 речи који ћете користити да повратите новац са налога. - Vreme je da sačuvate frazu za oporavak – ključ od 24 reči koji ćete koristiti da povratite novac sa naloga. Saznajte više + Време је да сачувате фразу за опоравак – кључ од 24 речи који ћете користити да повратите новац са налога. Сазнајте више Ваша фраза опоравка је %1$d-речи фраза јединствена за вас. Користите ову фразу да бисте вратили салто. Започни Унесите ручно Прилепи из оставе - Želite li da nastavite bez čuvanja? + Желите ли да наставите без чувања? - Fraza za oporavak vam omogućava da povratite novac sa naloga u najgorem scenariju. Preporučujemo vam da je sačuvate. + Фраза за опоравак вам омогућава да повратите новац са налога у најгорем сценарију. Препоручујемо вам да је сачувате. - Preskoči frazu za oporavak + Прескочи фразу за опоравак - Одустани + Откажи Прилепи фразу опоравка @@ -3943,9 +3968,9 @@ Uklonite SMS poruke - Uklanjamo SMS poruke iz Signala… + Уклањамо SMS поруке из Signal-а… - U podešavanjima u svakom trenutku možete da uklonite SMS poruke iz Signala. + У подешавањима у сваком тренутку можете да уклоните SMS поруке из Signal-а. Поруке @@ -3976,7 +4001,7 @@ Подразумевани тајмер за нове преписке Подесите подразумевани тајмер нестајања поруке за све нове преписке које сте започели. - Upravljajte pričama i kontrolišite ko može da ih vidi + Управљајте причама и контролишите ко може да их види Za plaćanja zahtevajte zaključavanje ekrana ili otisak prsta na Android uređaju Ne možemo da aktiviramo zaključavanje plaćanja @@ -4193,19 +4218,19 @@ Блокирај - Уклонити %1$s? + Желите ли да уклоните %1$s? - Nećete videti ovu osobu prilikom pretraživanja. Dobićete zahtev za poruku ako vam u budućnosti pošalje poruku. + Нећете видети ову особу приликом претраживања. Добићете захтев за поруку ако вам у будућности пошаље поруку. - Uklonjen je korisnik (%1$s) + %1$s је уклољен(а) - Blokiran je korisnik (%1$s) + %1$s је блокиран(а) - Nismo uspeli da uklonimo korisnika (%1$s) + Нисмо успели да уклонимо корисника (%1$s) - Ova osoba je sačuvana u vašim kontaktima na uređaju. Izbrišite je iz kontakata i probajte ponovo. + Ова особа је сачувана у вашим контактима на уређају. Избришите је из контаката и пробајте поново. - Prikaži kontakt + Прикажи контакт Претрага имена или броја @@ -4256,9 +4281,9 @@ Додати поруку Убрзавање прослеђивање - Video snimci će biti skraćeni na klipove od 30 sekundi i poslati kao više priča. + Видео снимци ће бити скраћени на клипове од 30 секунди и послати као више прича. - Video snimci koji se šalju u pričama ne mogu biti duži od 30 sekundi. + Видео снимци који се шаљу у причама не могу бити дужи од 30 секунди. Прослеђивање поруке је сада урађено сместа. Send %1$d message @@ -4703,17 +4728,17 @@ 99+ - Privatnost priča + Приватност прича Моје приче - Dodirnite da dodate priču + Додирните да додате причу - Тренутно нема недавних ажурирања за приказ. + Тренутно нема најновијих ажурирања за приказ. Сакриј причу - Поново покажи причу + Поново прикажи причу Проследи @@ -4733,15 +4758,15 @@ Пипнути да се понови - Сакрити причу? + Желите ли да сакријете причу? - ва ажурирања приче од %1$s ​​више се неће појављивати на врху листе прича. + Нове промене приче корисника (%1$s) више се неће појављивати на врху листе прича. Сакриј - Сакривена прича + Прича је скривена - Сакривене приче + Скривене приче %1$d view @@ -4750,11 +4775,11 @@ Проследи - Прича од %1$s + Прича корисника (%1$s) - Обрисати причу? + Желите ли да избришете причу? - Ова прича ће бити избрисана за вас и све који су је примили. + Ова прича ће бити избрисана и вама и свима који су је примили. Nije moguće sačuvati @@ -4778,15 +4803,15 @@ Одговори - Delimično poslato. Dodirnite da vidite detalje + Делимично је послато. Додирните да видите детаље - Slanje nije uspelo Dodirnite da ponovite + Слање није успело. Додирните да поновите Одговорити групи Без прегледа - Aktivirajte potvrde o čitanju da biste znali ko je video vaše priče. + Активирајте потврде о читању да бисте знали ко је видео ваше приче. Idite na podešavanja @@ -4799,14 +4824,16 @@ Ukloni gledaoca Без одговора + + You can\'t reply to this story because you\'re no longer a member of this group. - Реаговано на причу + Реаговао/ла је на причу Прегледа Одговора - Реаговати на причу + Реагујте на ову причу Приватно одговорити %1$s @@ -4817,8 +4844,15 @@ Избриши Моја прича + + + %1$d viewer + %1$d viewers + + + View - Ko može da vidi ovu priču + Ко може да види ову причу Сакриј причу од @@ -4828,7 +4862,7 @@ Svi osim… - Sakrijite priču od određenih ljudi + Сакријте причу од одређених људи %1$d person excluded @@ -4844,15 +4878,13 @@ %1$d people - Birajte ko može da vidi vašu priču. Promene neće uticati na priče koje ste već poslali. + Бирајте ко може да види вашу причу. Промене неће утицати на приче које сте већ послали. Одговори & реакције Дозволи одговоре & реакције - Нека људи који могу да виде вашу причу реагују и одговоре - - Сакријте своју причу од одређених људи. Подразумевано, ваша прича се дели са вашим %1$s + Дозволите људима који могу да виде вашу причу да реагују и одговоре на њу Signal veze @@ -4864,11 +4896,11 @@ Имајући их у системским контактима - "Ваше везе могу да виде ваше име и фотографију и могу да виде постове у „Мојој причи“ осим ако то не сакријете од њих." + "Ваше везе могу да виде ваше име и фотографију, као и објаве у „Мојој причи“, осим ако је не сакријете од њих." Dodajte gledaoca - Обрисати приватну причу + Избриши приватну причу Уклонити %1$s? @@ -4880,9 +4912,9 @@ Ова радња се не може опозвати. - Прменити име приче + Промените назив приче - Име приче + Назив приче Сачувај @@ -4900,7 +4932,7 @@ Унети или прилепити УРЛ - Podelite link sa gledaocima vaše priče + Поделите линк са гледаоцима ваше приче Претрага @@ -4911,22 +4943,40 @@ Samo podeli sa… Готово + + Желите ли да уклоните групну причу? + + \"%1$s\" will be removed. + + Уклони + + Желите ли да избришете приватну причу? + + \"%1$s\" and updates shared to this story will be deleted. + + Обриши + + Stories is available to Signal beta users only. + + If you share a story, it will only be available to people who are on Signal beta. - Додати причу? + Желите ли да додате садржај у причу? - Додавање садржаја вашој причи омогућава вашим везама да је виде 24 сата. Можете да промените ко може да види вашу причу у подешавањима. + Додавање садржаја у причу омогућава вашим Signal везама да је виде 24 сата. Можете да промените ко може да види вашу причу у подешавањима. - Додати причу + Додај садржај у причу Izmenite gledaoce - Није могуће послати причу. Проверите своју везу и покушајте поново. + Прича није послата. Проверите да ли сте повезани и пробајте поново. Пошаљи + + Turn off and delete - Делити & Преглед приче + Поделите и видите приче - Више нећете моћи да делите или гледате Приче када је ова опција искључена. + Више нећете моћи да делите или видите приче ако је ова опција искључена. Izaberite gledaoce @@ -4937,9 +4987,9 @@ %1$d viewers - Име приче + Дајте назив причи - Име приче (потребно) + Назив приче (обавезно) Gledaoci @@ -4947,13 +4997,13 @@ Ово поље је обавезно. - Ова прича већ постоји + Прича са овим називом већ постоји. Изабери све - Одаберите тип приче + Изаберите тип приче - Нова приватна приче + Нова приватна прича Видљиво само одређеним људима @@ -4969,17 +5019,17 @@ Слање одговора… - Ова прича више није доступна + Ова прича више није доступна. Нисте привезани Погрешно учитаање садржаја - Послати причу + Послата прича - Неуспешно слање приче + Слање приче није успело - Видети причу + Прикажи причу Видети слику профила @@ -4993,11 +5043,11 @@ Искључи - Реаговали сте на причу од %1$s + Реаговали сте на причу корисника (%1$s) - Реаговано на причу + Реаговао/ла је на вашу причу - Реакција на причу + Реаговао/ла је на причу @@ -5060,7 +5110,7 @@ Не сада - Samo podeli sa + Само подели са Private story · %1$d viewer @@ -5071,6 +5121,11 @@ Group story · %1$d viewer Group story · %1$d viewers + + + %1$d member + %1$d members + %1$s · %2$d viewer @@ -5081,19 +5136,19 @@ Подешавања приче - Ukloni priču + Уклони причу - Izbriši priču + Избриши причу - Ukloni grupnu priču? + Желите ли да уклоните групну причу? - Ovim ćete ukloniti priču sa liste. I dalje ćete moći da vidite priče iz ove grupe. + Овим ћете уклонити причу са листе. И даље ћете моћи да видите приче из ове групе. Уклони - Обрисати причу? + Желите ли да избришете причу? - Želite li da izbrišete privatnu priču „%1$s“? + Желите ли да избришете приватну причу „%1$s“? Избриши @@ -5121,7 +5176,7 @@ Prevucite nadesno da izađete - У реду + Разумем Otvorite kontekstualni meni @@ -5139,11 +5194,11 @@ Sve veze su pregledane, dodirnite „Pošalji“ da nastavite. - Njih %1$d je možda ponovo instaliralo Signal ili promenilo uređaj. Pre nego što podelite priču sa tim vezama, pregledajte njihove sigurnosne brojeve ili razmislite o tome da ih uklonite iz priče. + Њих %1$d је можда поново инсталирало Signal или променило уређај. Пре него што поделите причу са тим везама, прегледајте њихове сигурносне бројеве или размислите о томе да их уклоните из приче. Овери безбедносни број - Ukloni iz priče + Уклони из приче Нема везе, пошаљи @@ -5167,9 +5222,9 @@ Уклони - Moja priča – privatnost + Моја прича – приватност - Birajte ko može da vidi objave u „Mojoj priči“. Uvek možete da promenite podešavanja. + Бирајте ко може да види објаве у „Мојој причи“. Увек можете да промените подешавања. Sve Signal veze @@ -5188,35 +5243,35 @@ Послао - Неуспешно + Није успело Инфо - Priče automatski nestaju nakon 24 sata. Odaberite ko može da vidi vašu priču ili da kreira nove priče sa određenim gledaocima ili grupama. + Приче аутоматски нестају након 24 сата. Одаберите ко може да види вашу причу или да креира нове приче са одређеним гледаоцима или групама. - Isključi priče + Искључи приче - Ako isključite priče, više nećete moći da delite ili vidite priče. + Ако искључите приче, више нећете моћи да их делите или видите. - Uključi priče + Укључи приче - Delite priče sa drugima i gledajte priče drugih. Priče automatski nestaju nakon 24 sata. + Делите приче са другима и видите приче других. Приче аутоматски нестају након 24 сата. - Želite li da isključite priče? + Желите ли да искључите приче? - Više nećete moći da delite ili vidite priče. Priče koje ste nedavno poslali će i dalje biti vidljive drugima sve dok ne isteknu. + You will no longer be able to share or view stories. Story updates you have recently shared will also be deleted. - Privatnost priča + Приватност прича - Ko može da vidi ovu priču + Ко може да види ову причу - "Članovi grupe „%1$s“ mogu da vide ovu priču i odgovore na nju. Možete da izmenite članove ovog ćaskanja u grupi." + "Чланови групе „%1$s“ могу да виде ову причу и одговоре на њу. Можете да измените чланове овог ћаскања у групи." - Ukloni grupnu priču + Уклони групну причу Meni „Prekoračenje“ @@ -5229,7 +5284,7 @@ Izvezite SMS poruke - Možete da izvezete SMS poruke u bazu SMS poruka u vašem telefonu. Na taj način omogućavate drugim aplikacijama za SMS na telefonu da im pristupe i uvezu ih. Time ne kreirate istoriju vaših SMS poruka u obliku fajla koji se može deliti. + Можете да извезете SMS поруке у базу SMS порука на вашем телефону. На тај начин омогућавате другим апликацијама за SMS на телефону да им приступе и увезу их. Тиме не креирате историју ваших SMS порука у облику фајла који се може делити. Nastavi @@ -5255,17 +5310,17 @@ 4 - Dodirnite „Nastavi“ da otvorite ekran „Podrazumevane aplikacije“ u podešavanjima + Додирните „Настави“ да отворите екран „Подразумеване апликације“ у подешавањима - Izaberite „aplikacija za SMS“ sa liste + Изаберите опцију „Апликација за SMS“ са листе - Izaberite drugu aplikaciju koju želite da koristite za SMS poruke + Изаберите другу апликацију коју желите да користите за SMS поруке - Vratite se na Signal + Вратите се на Signal - Otvorite podešavanja telefona + Отворите подешавања телефона - Idite na „Aplikacije“ > „Podrazumevane aplikacije“ > „Aplikacija za SMS “ + Идите на „Апликације“ > „Подразумеване апликације“ > „Апликација за SMS“ @@ -5275,13 +5330,13 @@ Želite li da uklonite SMS poruke iz Signala? - Sada u svakom trenutku možete da uklonite SMS poruke iz Signala da biste oslobodili prostor za skladištenje. One će i dalje biti dostupne drugim aplikacijama za SMS na telefonu čak i ako ih uklonite. + Сада у сваком тренутку можете да уклоните SMS поруке из Signal-а да бисте ослободили простор. Оне ће и даље бити доступне другим апликацијама за SMS на телефону чак и ако их уклоните. - Podesite Signal kao podrazumevanu aplikaciju za SMS + Подесите Signal као подразумевану апликацију за SMS - Da biste izvezli SMS poruke, potrebno je da podesite Signal kao podrazumevanu aplikaciju za SMS. + Да бисте извезли SMS поруке, потребно је да подесите Signal као подразумевану апликацију за SMS. Даље diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 7193e3026b..47c566b95a 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1960,6 +1960,7 @@ %1$s till dig Media är inte längre tillgängligt. Det går inte att hitta en app som kan dela detta medium. + Stäng %1$d nya meddelanden i %2$d konversationer @@ -2748,10 +2749,14 @@ Anpassa alternativet + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Inte nu + + + Säkerhetsinställning + + Skydda dina pengar + + Förhindra att en person med din telefon får åtkomst till dina pengar genom att lägga till ytterligare ett säkerhetslager. Du kan inaktivera det här alternativet i Inställningar. + + Aktivera betalningslås + + Inte nu + + Hoppa över det här steget? + + Om du hoppar över det här steget kan alla som har fysisk åtkomst till din telefon överföra pengar eller se din återställningsfras. + + Avbryt + + Hoppa över + Lägg till pengar Din plånboksadress @@ -4256,9 +4281,9 @@ Lägg till ett meddelande Snabbare vidarebefordringar - Videor kommer kortas ner till klipp på 30 s och skickas som flera berättelser. + Videor kommer kortas ner till klipp på 30 sek och skickas som flera berättelser. - Videor som skickas till berättelser kan inte vara längre än 30 s. + Videor som skickas till berättelser kan inte vara längre än 30 sek. Vidarebefordrade meddelanden skickas nu omedelbart. Skicka %1$d meddelande @@ -4735,7 +4760,7 @@ Dölj berättelse? - Nya berättelse uppdateringar från %1$s kommer inte att visas först i berättelse listan längre. + Nya berättelseuppdateringar från %1$s kommer inte att visas först i berättelse listan längre. Dölj @@ -4750,7 +4775,7 @@ Vidarebefordra - %1$ss berättelse + Berättelse från %1$s Ta bort berättelse? @@ -4786,7 +4811,7 @@ Inga visningar ännu - Aktivera läskvitton för att se vem som har sett din berättelse. + Aktivera läskvitton för att se vem som har visat din berättelse. Gå till inställningar @@ -4799,6 +4824,8 @@ Ta bort tittare Inga svar ännu + + Du kan inte svara på den här berättelsen eftersom du inte längre är medlem i den här gruppen. Reagerade på berättelsen @@ -4817,6 +4844,13 @@ Ta bort Min berättelse + + + %1$d viewer + %1$d viewers + + + View Vem kan visa den här berättelsen @@ -4851,8 +4885,6 @@ Tillåt svar & reaktioner Låt personer som kan se din berättelse reagera och svara - - Dölj din berättelse från specifika personer. Som standard delas din berättelse med dina %1$s Signal-förbindelser @@ -4864,7 +4896,7 @@ Ha dem i dina systemkontakter - "Dina förbindelser kan se ditt namn och foto, och kan se inlägg på \"Din berättelse\" om du inte döljer den från dem." + "Dina förbindelser kan se ditt namn och foto, och kan se inlägg på \"Min berättelse\" om du inte döljer den från dem." Lägg till tittare @@ -4911,10 +4943,26 @@ Dela endast med … Klar + + Ta bort gruppberättelse? + + %1$s kommer att tas bort. + + Ta bort + + Ta bort privat berättelse? + + %1$s och uppdateringar som delas till den här historien kommer att raderas. + + Ta bort + + Berättelser är endast tillgängligt för beta-användare av Signal. + + Om du delar en berättelse kommer den bara att vara tillgänglig för personer som använder betaversionen av Signal. Lägg till i berättelse? - Att lägga till innehåll på din berättelse tillåter dina Signal-förbindelser att se det i 24 timmar. Du kan ändra vem som kan se din berättelse i Inställningar. + Att lägga till innehåll i din berättelse tillåter dina Signal-förbindelser att se det i 24 timmar. Du kan ändra vem som kan se din berättelse i Inställningar. Lägg till i berättelse @@ -4923,10 +4971,12 @@ Berättelse kunde inte skickas. Kontrollera din anslutning och försök igen. Skicka + + Stäng av och radera - Dela & visa berättelser + Dela och visa berättelser - Du kommer inte längre kunna dela eller se berättelser när denna inställning är av. + Du kommer inte längre kunna dela eller visa berättelser när denna inställning är av. Välj tittare @@ -4951,7 +5001,7 @@ Välj alla - Välj din berättelse typ + Välj din berättelsetyp Ny privat berättelse @@ -4993,7 +5043,7 @@ Slå av - Du reagerade på %1$ss berättelse + Du reagerade på berättelsen från %1$s Reagerade på din berättelse @@ -5071,6 +5121,11 @@ Gruppberättelse · %1$d tittare Gruppberättelse · %1$d tittare + + + %1$d medlem + %1$d medlemmar + %1$s · %2$d tittare @@ -5079,7 +5134,7 @@ Tryck för att välja dina tittare - Berättelse inställningar + Berättelseinställningar Ta bort berättelse @@ -5200,13 +5255,13 @@ Du kommer inte längre kunna dela eller visa berättelser om du stänger av dem. - Slå på berättelser + Aktivera berättelser Dela och visa berättelser från andra. Berättelser försvinner automatiskt efter 24 timmar. Stänga av berättelser? - Du kommer inte längre att kunna dela eller visa berättelser. Alla berättelser som du nyligen har skickat kommer att fortsätta kunna visas tills tiden går ut för den. + Du kommer inte längre att kunna dela eller visa berättelser. Berättelseuppdateringar som du nyligen har delat kommer också att raderas. Berättelseintegritet diff --git a/app/src/main/res/values-sw/strings.xml b/app/src/main/res/values-sw/strings.xml index ee2e5b19cc..0214e4a011 100644 --- a/app/src/main/res/values-sw/strings.xml +++ b/app/src/main/res/values-sw/strings.xml @@ -193,7 +193,7 @@ Sasisha Usisasishe Onyo - Muda wa toleo lako la Signal umekwisha. Unaweza kuona historia ya ujumbe wako lakini hutaweza kutuma au kupokea ujumbe hadi usasishe. + Toleo lako la Signal limekwisha muda wake. Unaweza kuangalia historia ya jumbe zako lakini hutaweza kutuma au kupokea ujumbe hadi usasishe. Hakuna kivinjari kilichopatikana. @@ -673,7 +673,7 @@ Vikundi Vipya ni Nini? Vikundi Vipya vina vipengele kama vile @kutajwa na kuteua wasimamizi wa vikundi, na vitatumia vipengele zaidi katika siku zijazo. - Historia yote ya ujumbe na media zimehifadhiwa kutoka kabla ya usasishaji. + Historia zote za jumbe na media zimehifadhiwa kabla ya usasishaji. Utahitaji kukubali mwaliko ili ujiunge na kikundi hiki tena, na hutapokea ujumbe wa kikundi hadi ukubali. Mwanachama huyu hahitaji kukubali mwaliko ili kujiunga na kikundi hiki tena, na hatapokea jumbe za kikundi hadi akubali: @@ -688,7 +688,7 @@ Boresha kiwe Kikundi Kipya Boresha kikundi hiki Vikundi Vipya vina vipengele kama vile @kutajwa na kuteua wasimamizi wa vikundi, na vitatumia vipengele zaidi katika siku zijazo. - Historia yote ya ujumbe na media zitahifadhiwa kutoka kabla ya sasisho. + Historia zote za jumbe na media zitahifadhiwa kabla ya sasisho. Imekumbana na hitilafu ya mtandao. Jaribu tena baadae. Imeshindwa kusasisha. @@ -1346,9 +1346,9 @@ Umependelea kipengele hiki kipya? Saidia kuiunga mkono Signal na mchango wa mara moja. - Historia ya jumbe zako na %1$s na nambari zao %2$s zimekunganishwa. + Historia ya jumbe zako na %1$s na nambari zao %2$s zimeunganishwa. - Historia ya jumbe zako na %1$s na gumzo jingine ambalo ni la kwao zimeunganishwa. + Historia ya jumbe zako na %1$s na gumzo lao lingine zimeunganishwa. %1$s ameanzisha mazungumzo ya simu ya kikundi · %2$s @@ -1855,9 +1855,9 @@ Umepokea beji ya zawadi - Ame-react %1$s kwa stori yako + %1$s ame-react kwa stori yako - Ame-react %1$s kwa stori yao + %1$s ame-react kwa stori yake Sasisho ya Molly @@ -1960,6 +1960,7 @@ %1$s kwako Media haipatikani tena. Hatujapata programu inayoweza kushiriki media hii. + Funga %1$d ujumbe mpya kwa %2$d mazungumzo @@ -2038,7 +2039,7 @@ Ombi la ujumbe Wewe - %1$s Stori + %1$s • Stori Cheza video @@ -2198,9 +2199,9 @@ Wewe Ujumbe asili haupatikani - %1$s . Stori + %1$s · Stori - Wewe. Stori + Wewe · Stori Haipatikani tena @@ -2343,7 +2344,7 @@ Nakili muda uliotumwa kwenye ubao wa kunakili - Sasisho kwa stori yako zitaonekana hapa. + Sasisho za stori yako zitaonekana hapa. @@ -2623,7 +2624,7 @@ Malipo (Beta) Upeo wa maongezi Hifadhi ujumbe - Futa historia ya ujumbe + Futa historia ya jumbe Vifaa vilivyounganishwa Mwanga Giza @@ -2657,7 +2658,7 @@ Wakati unatumia WiFi Wakati unarandaranda Media kupakua kiotomatiki - Historia ya ujumbe + Historia ya jumbe Matumizi ya hifadhi Picha Video @@ -2665,12 +2666,12 @@ Sauti Pitia tena hifadhi Ungependa kufuta jumbe za awali? - Ungependa kufuta historia ya ujumbe? - Hatua hii itafuta kabisa historia yote ya ujumbe na media kwenye kifaa chako za kabla ya %1$s. + Ungependa kufuta historia ya jumbe? + Hii itafuta kabisa historia yote ya jumbe na media za zaidi ya %1$s kwenye kifaa chako. Hatua hii itapunguza mazungumzo yote yawe jumbe %1$s mpya zaidi. - Hatua hii itafuta kabisa historia yote ya ujumbe na media kwenye kifaa chako. - Una uhakika unataka kufuta historia yote ya ujumbe? - Historia yote ya ujumbe itaondolewa kabisa. Kitendo hiki hakiwezi kutenduliwa. + Hii itafuta kabisa historia yote ya jumbe na media kwenye kifaa chako. + Una uhakika unataka kufuta historia yote ya jumbe? + Historia yote ya jumbe itaondolewa kabisa. Kitendo hiki hakiwezi kutenguliwa. Futa zote sasa Daima Mwaka 1 @@ -2748,10 +2749,14 @@ Badilisha chaguo likufae + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Sio kwa Sasa + + + Mfumo wa usalama + + Linda fedha zako + + Saidia kumzuia mtu aliye na simu yako kupata fedha zako kwa kuongeza hatua nyingine ya ulinzi. Pia unaweza kuzima chaguo hili kwenye Mipangilio. + + Wezesha payment lock + + Sio sasa + + Ruka hatua hii? + + Kuruka hatua hii kuna weza mwezesha yeyote mwenye uwezo wa kuipata simu yako kuhamisha fedha au kutazama neno lako la urejesho. + + Ghairi + + Ruka + Ongeza fedha Anwani ya Mkoba Wako @@ -4256,7 +4281,7 @@ Ongeza ujumbe Shiriki kwa kasi - Video zitapunguzwa kuwa dakika 30 kisha kutumwa kama Stori kadhaa. + Video zitapunguzwa kuwa sekunde 30 kisha kutumwa kama Stori kadhaa. Video zinazotumwa kwa Stori haziwezi kuwa zaidi ya sekunde 30. Jumbe zilizoshirikishwa zinatumwa mara moja. @@ -4705,7 +4730,7 @@ Faragha ya stori - Stori zangu + Stori Zangu Bonyeza kuongeza stori @@ -4735,7 +4760,7 @@ Ficha stori? - Sasisho za stori mpya kutoka kwa %1$s hazitatokea tena katika orodha ya juu ya stori. + Sasisho za stori mpya kutoka kwa %1$s hazitatokea tena juu katika orodha ya stori. Ficha @@ -4750,9 +4775,9 @@ Shiriki kwa - Stori za %1$s + Stori ya %1$s - Futa stori + Futa stori? Stori hii itafutwa kwako na kwa kila mtu aliyeipata. @@ -4786,7 +4811,7 @@ Hakuna watazamaji bado - Wezesha read receipts kuona nani amengalia stori zako + Wezesha risiti za kusoma kuona nani ameangalia stori zako. Nenda kwenye mipangilio @@ -4799,6 +4824,8 @@ Muondoe mtazamaji Hakuna majibu bado + + Huwezi kujibu stori hii kwa sababu wewe si mwanachama tena wa kikundi hiki. Ame-react kwa stori @@ -4817,8 +4844,15 @@ Futa Stori Yangu + + + %1$d viewer + %1$d viewers + + + View - Nani anaweza tazama stori hii + Nani anaweza kutazama stori hii Ficha stori kutoka kwa @@ -4851,8 +4885,6 @@ Ruhusu majibu &amo; reactions Waruhusu watu wanaoweza kuona stori yako ku-react na kujibu - - Ficha stori yako kutoka kwa watu fulani. Kwa chaguo msingi, stori yako inashirikishwa na %1$s wako Signal Connections @@ -4864,7 +4896,7 @@ Kuwa nao kwenye mfumo wako wa wawasiliani - "Connections wako wanaweza kuona jina lako na picha yako, na wanaweza pia kuona posts za \"Stori Yangu\" ila pale utakawapowaficha." + "Connections wako wanaweza kuona jina lako na picha yako, na wanaweza pia kuona post za Stori Yangu labda kama utawaficha." Ongeza mtazamaji @@ -4911,6 +4943,22 @@ Shirikisha pekee na… Imekamilika + + Ondoa stori ya kikundi? + + \"%1$s\" atatolewa. + + Ondoa + + Futa stori binafsi? + + \"%1$s\" na masasisho yaliyoshirikishwa kwenye stori hii yatafutwa. + + Futa + + Stori zinapatikana kwa watumiaji wa Signal beta tu. + + Kama ukishiriki stori, itapatikana kwa watu walio kwenye Signal beta. Ongeza kwenye stori? @@ -4920,11 +4968,13 @@ Hariri watazamaji - Stori haingeweza kutumwa. Tazama muunganisho wa mtandao wako kisha ujaribu tena. + Stori haingeweza kutumwa. Tazama muunganisho wa mtandao wako na kisha ujaribu tena. Tuma + + Zima na futa - Shirikisha $amp; Tazama Stori + Shirikisha & Tazama Stori Hutoweza tena kushirikisha wengine au kutazama stori wakati ambapo chaguo hili limezimwa. @@ -5063,13 +5113,18 @@ Shiriki peke yake na - Stori binafsi · mtazamaji %1$d - Stori binafsi · watazamaji %1$d + Stori binafsi · Mtazamaji %1$d + Stori binafsi · Watazamaji %1$d - Stori ya kikundi · mtazamaji %1$d - Stori ya kikundi · watazamaji %1$d + Stori ya kikundi · Mtazamaji %1$d + Stori ya kikundi · Watazamaji %1$d + + + + Mwanachama %1$d + Wanachama %1$d @@ -5087,11 +5142,11 @@ Ondoa stori ya kikundi? - Hii itaondoa stori kutoka kwenye orodha. Bado utaweza kutazama stori kutoka kwa kikundi hiki. + Hii itaondoa stori kutoka kwenye orodha. Bado utaweza kutazama stori kutoka kwenye kikundi hiki. Ondoa - Futa stori + Futa stori? Futa stori ya binafsi \"%1$s\"? @@ -5206,15 +5261,15 @@ Zima stori? - Hutaweza tena kushiriki au kuangalia stori. Stori zozote ulizotuma hivi karibuni bado zitaonekana na wengine mpaka muda wake utakapoisha. + Hutaweza tena kushiriki au kutazama stori. Masasisho ya stori uliyoshiriki hivi karibuni pia yatafutwa. Faragha ya stori - Nani anaweza kuangalia stori hii? + Nani anaweza kutazama stori hii - "Wanachama wa kikundi cha \"%1$s\" wanaweza kutazama na kujibu kwenye stori hii. Unaweza kusasisha uanachama wa gumzo hili kwenye kikundi." + "Wanachama wa kikundi cha %1$s wanaweza kutazama na kujibu stori hii. Unaweza kusasisha uanachama wa gumzo hili kwenye kikundi." Ondoa stori ya kikundi @@ -5229,7 +5284,7 @@ Hamisha jumbe zako za SMS - Unaweza kuhamisha jumbe zako za SMS katika hifadhidata ya SMS ya simu yako. Hii inawezesha programu zingine za SMS kwenye simu yako kuzipata na kuzihamisha. Hii haitengenezi faili la kusambaza kwenye historia ya jumbe zako za SMS zako. + Unaweza kuhamisha jumbe zako za SMS katika hifadhidata ya SMS ya simu yako. Hii inawezesha programu zingine za SMS kwenye simu yako kuzipata na kuzihamisha. Hii haitengenezi faili la kusambaza kwenye historia ya jumbe zako za SMS. Endelea diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 22502cc253..ea3524cb0f 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -193,7 +193,7 @@ புதுப்பிக்கப்பட்டது புதுப்பிக்க வேண்டாம் எச்சரிக்கை - Signal லின் உங்கள் பதிப்பு காலாவதியானது. உங்கள் செய்தி வரலாற்றை நீங்கள் காணலாம், ஆனால் நீங்கள் புதுப்பிக்கும் வரை செய்திகளை அனுப்பவோ பெறவோ முடியாது. + உங்கள் சிக்னலின் பதிப்பு காலாவதியானது. உங்கள் செய்தி வரலாற்றை நீங்கள் காணலாம், ஆனால் நீங்கள் புதுப்பிக்கும் வரை செய்திகளை அனுப்பவோ பெறவோ முடியாது. இணைய உலாவி இல்லை. @@ -673,7 +673,7 @@ புதிய குழுக்கள் என்றால் என்ன? புதிய குழுக்களில் @குறிப்புகள் மற்றும் குழு நிர்வாகிகள் போன்ற அம்சங்கள் உள்ளன. எதிர்காலத்தில் கூடுதல் அம்சங்கள் இருக்கும். - மேம்படுத்தலுக்கு முன்பிருந்தே அனைத்து செய்தி வரலாறும் ஊடகமும் தக்கவைக்கப்பட்டுள்ளன. + அனைத்து செய்தி வரலாறும் மீடியாவும் மேம்படுத்தப்படுவதற்கு முன்பிருந்தே வைக்கப்பட்டுள்ளன. இந்த குழுவில் மீண்டும் சேர நீங்கள் அழைப்பை ஏற்க வேண்டும், நீங்கள் ஏற்றுக்கொள்ளும் வரை குழு செய்திகளைப் பெற மாட்டீர்கள். இந்த உறுப்பினர் மீண்டும் இந்த குழுவில் சேர அழைப்பை ஏற்க வேண்டும், அவர்கள் ஏற்றுக்கொள்ளும் வரை குழு செய்திகளைப் பெற மாட்டார்கள்: @@ -688,7 +688,7 @@ புதிய குழுவிற்கு மேம்படுத்தவும் இந்த குழுவைப் புதுப்பிக்கவும் புதிய குழுக்களில் @குறிப்புகள் மற்றும் குழு நிர்வாகிகள் போன்ற அம்சங்கள் உள்ளன. எதிர்காலத்தில் கூடுதல் அம்சங்கள் இருக்கும். - மேம்படுத்தலுக்கு முன்பிருந்தே அனைத்து செய்தி வரலாறும் ஊடகமும் தக்கவைக்கப்பட்டுள்ளன. + அனைத்து செய்தி வரலாறும் மீடியாவும் மேம்படுத்தப்படுவதற்கு முன்பிருந்தே வைக்கப்படும். பிணைய பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும். மேம்பாடு தோல்வியடைந்தது @@ -1346,9 +1346,9 @@ இந்த புதிய அம்சம் பிடித்திருக்கிறதா? ஒரு முறைக்கான நன்கொடை மூலம் சிக்னலை ஆதரிக்க உதவுங்கள். - %1$s உடனான உங்கள் செய்தி வரலாறு மற்றும் அவற்றின் எண் %2$s இணைக்கப்பட்டது. + %1$s உடனான உங்கள் செய்தி வரலாறு மற்றும் அவர்களின் எண் %2$s இணைக்கப்பட்டது. - %1$s உடனான உங்கள் செய்தி வரலாறும் அவர்களுக்குச் சொந்தமான மற்றொரு அரட்டையும் இணைக்கப்பட்டது. + %1$s உடனான உங்கள் செய்தி வரலாறும் அவர்களுக்குச் சொந்தமான மற்றொரு சாட்டும் இணைக்கப்பட்டது. %1$sகுழு அழைப்பைத் தொடங்கினார்%2$s @@ -1542,7 +1542,7 @@ பிணையம் தோல்வியுற்றது! எண் பதிவிலில்லை. நீங்கள் டயல் செய்த எண் பாதுகாப்பான குரலை ஆதரிக்காது! - அறிந்துகொண்டேன் . + அறிந்துகொண்டேன் @@ -1855,9 +1855,9 @@ நீங்கள் ஒரு பரிசு பேட்ஜை மீட்டெடுத்துள்ளீர்கள் - உங்கள் ஸ்டோரி-க்கு %1$s என்று பதிலளித்துள்ளார் + உங்கள் ஸ்டோரிக்கு %1$s என்று எதிர்வினையாற்றினார் - அவர்கள் ஸ்டோரி-க்கு %1$s என்று பதிலளித்துள்ளீர்கள் + அவர்கள் ஸ்டோரிக்கு %1$s என்று எதிர்வினையாற்றி உள்ளீர்கள் Molly புதுப்பிப்பு @@ -1960,6 +1960,7 @@ %1$s இடமிருந்து உங்களுக்கு இந்த ஊடகம் சேமிப்பகத்தில் இல்லை. இந்த மீடியாவைப் பகிரக்கூடிய பயன்பாட்டைக் கண்டுபிடிக்க முடியவில்லை. + நெருக்கமான %2$d உரையாடல்களில் %1$d புதிய செய்திகள் @@ -2665,12 +2666,12 @@ ஒலி விமர்சனம் சேமிப்பு பழைய செய்திகளை நீக்கவா? - செய்தி வரலாற்றை அழிக்கவா? - இது உங்கள் சாதனத்திலிருந்து %1$s விட பழைய செய்தி மற்றும் ஊடகங்களை நிரந்தரமாக நீக்கும். + செய்தி வரலாற்றை அழிப்பதா? + இது உங்கள் டிவைஸில் இருந்து %1$s ஐ விட பழையதாக உள்ள அனைத்து செய்தி வரலாறு மற்றும் மீடியாவை நிரந்தரமாக நீக்கும். இது எல்லா உரையாடல்களையும் மிக சமீபத்திய %1$s செய்திகளுக்கு நிரந்தரமாக நேர்த்தி செய்யும். - இது உங்கள் சாதனத்திலிருந்து எல்லா செய்தி வரலாற்றையும் ஊடகத்தையும் நிரந்தரமாக நீக்கும். - எல்லா செய்தி வரலாற்றையும் நீக்க விரும்புகிறீர்களா? - அனைத்து செய்தி வரலாறும் நிரந்தரமாக அகற்றப்படும். பின்னர், இந்த செயலைச் செயல்தவிர்க்க முடியாது. + இது உங்கள் டிவைஸில் இருந்து அனைத்து செய்தி வரலாறு மற்றும் மீடியாவை நிரந்தரமாக நீக்கும். + அனைத்து செய்தி வரலாற்றையும் நீக்க விரும்புகிறீர்களா? + அனைத்து செய்தி வரலாறும் நிரந்தரமாக அகற்றப்படும். இந்த செயலைச் செயல்தவிர்க்க முடியாது. அனைத்தையும் இப்போது நீக்கு என்றென்றும் 1 வருடம் @@ -2748,10 +2749,14 @@ விருப்ப அமைப்பைத் தனிப்பயனாக்கவும் + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ இப்போது வேண்டாம் + + + பாதுகாப்பு அமைப்பு + + உங்கள் நிதியைப் பாதுகாக்கவும் + + மற்றொரு பாதுகாப்பு அடுக்கைச் சேர்ப்பதன் மூலம், உங்கள் மொபைலைக் கொண்டுள்ள நபர் உங்கள் நிதியை அணுகுவதைத் தடுக்க உதவுங்கள். இந்த விருப்பத்தை அமைப்புகளில் முடக்கலாம். + + கட்டண பூட்டை இயக்கவும் + + இப்போது இல்லை + + இந்த படிநிலையைத் தவிர்ப்பதா? + + இந்தப் படிநிலையைத் தவிர்த்தால், உங்கள் மொபைலுக்கான அணுகல் உள்ள எவரும் நிதியை மாற்ற அல்லது உங்கள் மீட்பு சொற்றொடரைப் பார்க்க அனுமதிக்கப்படலாம். + + ரத்து + + தவிர் + கூட்டு நிதி உங்கள் Wallet முகவரி @@ -3976,7 +4001,7 @@ இயல்புநிலை நேரக்குறிப்பான் புதிய அரட்டைகளுக்கு நீங்கள் தொடங்கும் அனைத்து புதிய அரட்டைகளுக்கும் இயல்புநிலை காணாமல் போகும் செய்திகள் நேரக்குறிப்பானை அமைக்கவும். - உங்கள் ஸ்டோரீக்கள் மற்றும் அவற்றை யார் பார்க்கலாம் என்பதை நிர்வகிக்கவும் + உங்கள் ஸ்டோரீக்களையும் மற்றும் அவற்றை யார் பார்வையிடலாம் என்பதையும் நிர்வகிக்கவும் நிதியை மாற்ற ஆண்ட்ராய்டு திரைப் பூட்டு அல்லது கைரேகை தேவை கட்டண பூட்டை இயக்க முடியவில்லை @@ -4735,7 +4760,7 @@ ஸ்டோரியை மறைப்பதா? - %1$s-இடமிருந்து புதிய ஸ்டோரி புதுப்பிப்புகள் இனி ஸ்டோரீக்கள் பட்டியலின் மேலே தோன்றாது. + %1$s -இடமிருந்து புதிய ஸ்டோரி புதுப்பிப்புகள் இனி ஸ்டோரீக்கள் பட்டியலின் மேலே தோன்றாது. மறை @@ -4786,7 +4811,7 @@ இதுவரை பார்வைகள் ஏதுமில்லை - உங்கள் ஸ்டோரீஸ்-ஐ யார் பார்த்தார்கள் என்பதைக் காண, வாசித்ததற்கான அறிவிப்புகளை இயக்கவும். + உங்கள் ஸ்டோரீஸ் -ஐ யார் பார்வையிட்டனர் என்பதைக் காண, வாசித்ததற்கான அறிவிப்புகளை இயக்கவும். அமைப்புகளுக்குச் செல் @@ -4799,14 +4824,16 @@ பார்வையாளரை அகற்று இதுவரை பதில்கள் ஏதுமில்லை + + இந்த குழுவில் உறுப்பினராக இல்லாததால் உங்களால் இந்த ஸ்டோரிக்கு பதிலளிக்க முடியாது. - ஸ்டோரிக்கு பதிலளிக்கப்பட்டது + ஸ்டோரிக்கு எதிர்வினையாற்றப்பட்டது பார்வைகள் பதில்கள் - இந்த ஸ்டோரிக்கு பதிலளிக்கவும் + இந்த ஸ்டோரிக்கு எதிர்வினையாற்றவும் %1$s-க்கு தனிப்பட்ட முறையில் பதிலளிக்கிறது @@ -4817,8 +4844,15 @@ நீக்கு எனது ஸ்டோரி + + + %1$d viewer + %1$d viewers + + + View - இந்த ஸ்டோரியை யார் பார்க்க முடியும் + இந்த ஸ்டோரியை யார் பார்வையிட முடியும் -இடமிருந்து ஸ்டோரியை மறைக்கவும் @@ -4844,15 +4878,13 @@ %1$d நபர்கள் - உங்கள் ஸ்டோரியை யார் பார்க்கலாம் என்பதைத் தேர்வுசெய்யவும். நீங்கள் ஏற்கனவே அனுப்பிய ஸ்டோரீக்களை மாற்றங்கள் பாதிக்காது. + உங்கள் ஸ்டோரியை யார் பார்வையிடலாம் என்பதைத் தேர்வுசெய்யவும். நீங்கள் ஏற்கனவே அனுப்பிய ஸ்டோரீக்களை மாற்றங்கள் பாதிக்காது. பதில்கள் &ஆம்ப்; எதிர்வினைகள் பதில்களை அனுமதிக்கவும் &ஆம்ப்; எதிர்வினைகள் உங்கள் ஸ்டோரியைப் பார்க்கக்கூடியவர்கள் எதிர்வினையாற்றி பதிலளிக்கட்டும் - - குறிப்பிட்ட நபர்களிடமிருந்து உங்கள் ஸ்டோரியை மறைக்கவும். இயல்பாக, உங்கள் ஸ்டோரி உங்கள் %1$s உடன் பகிரப்படும் சிக்னல் இணைப்புகள் @@ -4911,10 +4943,26 @@ இவர்களுடன் மட்டும் பகிரவும்… முடிந்தது + + குழு ஸ்டோரியை அகற்றுவதா? + + \"%1$s\" அகற்றப்படும். + + நீக்கு + + தனிப்பட்ட ஸ்டோரியை நீக்குவதா? + + \"%1$s\" மற்றும் இந்த ஸ்டோரிக்கு பகிரப்பட்ட புதுப்பிப்புகள் நீக்கப்படும். + + அழி + + சிக்னல் பீட்டா பயனர்களுக்கு மட்டுமே ஸ்டோரீஸ் கிடைக்கின்றன. + + நீங்கள் ஒரு ஸ்டோரியைப் பகிர்ந்தால், அது சிக்னல் பீட்டாவில் உள்ளவர்களுக்கு மட்டுமே கிடைக்கும். ஸ்டோரியில் சேர்ப்பதா? - உங்கள் ஸ்டோரியில் பொருளடக்கத்தைச் சேர்ப்பதன் மூலம் உங்கள் சிக்னல் இணைப்புகளை 24 மணிநேரம் அதைப் பார்க்க அனுமதிக்கிறது. உங்கள் ஸ்டோரியை யார் பார்க்கலாம் என்பதை அமைப்புகளில் மாற்றலாம். + உங்கள் ஸ்டோரியில் பொருளடக்கத்தைச் சேர்ப்பதன் மூலம் 24 மணிநேரம் அதைப் பார்வையிட உங்கள் சிக்னல் இணைப்புகளுக்கு அனுமதிக்கிறது. உங்கள் ஸ்டோரியை யார் பார்வையிடலாம் என்பதை அமைப்புகளில் மாற்றலாம். ஸ்டோரியில் சேர்க்கவும் @@ -4923,10 +4971,12 @@ ஸ்டோரியை அனுப்ப முடியவில்லை. உங்கள் இணைப்பைச் சரிபார்த்து மீண்டும் முயற்சிக்கவும். அனுப்புக + + ஆஃப் செய்துவிட்டு நீக்கவும் - பகிரவும் &ஆம்ப்; ஸ்டோரீக்களை காணவும் + ஸ்டோரீக்களை பகிரவும் மற்றும் பார்வையிடவும் - இந்த விருப்பத்தேர்வு முடக்கப்பட்டிருக்கும் போது உங்களால் இனி ஸ்டோரீக்களைப் பகிரவோ பார்க்கவோ முடியாது. + இந்த விருப்பத்தேர்வு முடக்கப்பட்டிருக்கும் போது உங்களால் இனி ஸ்டோரீக்களைப் பகிரவும் பார்வையிடவும் முடியாது. பார்வையாளர்களைத் தேர்ந்தெடுக்கவும் @@ -4977,9 +5027,9 @@ ஸ்டோரி அனுப்பப்பட்டது - ஸ்டோரியை அனுப்புவதில் தோல்வி + ஸ்டோரியை அனுப்புவது தோல்வியுற்றது - ஸ்டோரியைக் காணவும் + ஸ்டோரியை பார்வையிடவும் சுயவிவர புகைப்படத்தைக் காணவும் @@ -4993,11 +5043,11 @@ அணைக்க - %1$s-யின் ஸ்டோரிக்கு நீங்கள் பதிலளித்துள்ளீர்கள் + %1$s-யின் ஸ்டோரிக்கு நீங்கள் எதிர்வினையாற்றி உள்ளீர்கள் - உங்கள் ஸ்டோரிக்கு பதிலளித்துள்ளார் + உங்கள் ஸ்டோரிக்கு எதிர்வினையாற்றினார் - ஒரு ஸ்டோரிக்கு பதிலளித்துள்ளார் + ஒரு ஸ்டோரிக்கு எதிர்வினையாற்றப்பட்டது @@ -5060,7 +5110,7 @@ இப்போது இல்லை - - உடன் மட்டும் பகிரவும் + -உடன் மட்டும் பகிர்க தனிப்பட்ட ஸ்டோரி · %1$d பார்வையாளர் @@ -5071,6 +5121,11 @@ குழு ஸ்டோரி · %1$d பார்வையாளர் குழு ஸ்டோரி · %1$d பார்வையாளர்கள் + + + %1$d உறுப்பினர் + %1$d உறுப்பினர்கள் + %1$s · %2$d பார்வையாளர் @@ -5087,13 +5142,13 @@ குழு ஸ்டோரியை அகற்றுவதா? - இது இந்த பட்டியலிலிருந்து ஸ்டோரியை அகற்றும். இந்தக் குழுவின் ஸ்டோரீக்களை நீங்கள் இன்னும் பார்க்க முடியும். + இது இந்த பட்டியலிலிருந்து ஸ்டோரியை அகற்றும். இந்தக் குழுவின் ஸ்டோரீக்களை நீங்கள் இன்னும் பார்வையிடவும் முடியும். நீக்கு ஸ்டோரியை நீக்குவதா? - \"%1$s\" தனிப்பட்ட ஸ்டோரியை நீக்குவதா? + தனிப்பட்ட ஸ்டோரியை நீக்குவதா \"%1$s\"? நீக்கு @@ -5121,7 +5176,7 @@ வெளியேற வலதுபுறமாக ஸ்வைப் செய்யவும் - அறிந்துகொண்டேன் + அறிந்துகொண்டேன் சூழல் மெனுவைத் திறக்கவும் @@ -5139,11 +5194,11 @@ அனைத்து இணைப்புகளும் மதிப்பாய்வு செய்யப்பட்டுள்ளன, தொடர அனுப்பு என்பதைத் தட்டவும். - சிக்னலை மீண்டும் நிறுவிய அல்லது சாதனங்களை மாற்றிய %1$d இணைப்புகள் உங்களிடம் உள்ளன. உங்கள் ஸ்டோரியை அவர்களுடன் பகிர்ந்து கொள்வதற்கு முன் அவர்களது பாதுகாப்பு எண்களை மதிப்பாய்வு செய்யவும் அல்லது உங்கள் ஸ்டோரியிலிருந்து அவற்றை அகற்றவும். + சிக்னலை மீண்டும் நிறுவிய அல்லது டிவைஸ்களை மாற்றிய %1$d இணைப்புகள் உங்களிடம் உள்ளன. உங்கள் ஸ்டோரியை அவர்களுடன் பகிர்ந்து கொள்வதற்கு முன் அவர்களது பாதுகாப்பு எண்களை மதிப்பாய்வு செய்யவும் அல்லது உங்கள் ஸ்டோரியிலிருந்து அவர்களை அகற்றவும். பாதுகாப்பு எண்ணைச் சரிபார்க்கவும் - ஸ்டோரியிலிருந்து அகற்று + ஸ்டோரியிலிருந்து அகற்றவும் இருந்தாலும் அனுப்பு @@ -5169,7 +5224,7 @@ எனது ஸ்டோரி தனியுரிமை - எனது ஸ்டோரிக்கான போஸ்டுகளை யார் பார்க்கலாம் என்பதைத் தேர்ந்தெடுக்கவும். நீங்கள் எப்போதும் அமைப்புகளில் மாற்றங்களைச் செய்யலாம். + எனது ஸ்டோரிக்கான இடுகைகளை யார் பார்க்கலாம் என்பதைத் தேர்ந்தெடுக்கவும். நீங்கள் எப்போதும் அமைப்புகளில் மாற்றங்களைச் செய்யலாம். அனைத்து சிக்னல் இணைப்புகள் @@ -5194,29 +5249,29 @@ - 24 மணிநேரத்திற்குப் பிறகு ஸ்டோரீஸ் தானாகவே மறைந்துவிடும். உங்கள் ஸ்டோரியை யார் பார்க்கலாம் அல்லது குறிப்பிட்ட பார்வையாளர்கள் அல்லது குழுக்களுடன் புதிய ஸ்டோரீக்களை உருவாக்கலாம் என்பதைத் தேர்வுசெய்யவும். + 24 மணிநேரத்திற்குப் பிறகு ஸ்டோரீக்கள் தானாகவே மறைந்துவிடும். உங்கள் ஸ்டோரியை யார் பார்வையிடலாம் அல்லது குறிப்பிட்ட பார்வையாளர்கள் அல்லது குழுக்களுடன் புதிய கதைகளை உருவாக்கவும். - ஸ்டோரீக்களை முடக்கு + ஸ்டோரீக்களை முடக்கவும் நீங்கள் ஸ்டோரீக்களில் இருந்து விலகினால், இனி உங்களால் ஸ்டோரீக்களைப் பகிரவோ அல்லது பார்க்கவோ முடியாது. ஸ்டோரீக்களை இயக்கவும் - மற்றவர்களின் ஸ்டோரீக்களைப் பகிரவும் மற்றும் பார்க்கவும். 24 மணிநேரத்திற்குப் பிறகு ஸ்டோரீக்கள் தானாகவே மறைந்துவிடும். + மற்றவர்களின் ஸ்டோரீக்களைப் பகிரவும் மற்றும் பார்வையிடவும். 24 மணிநேரத்திற்குப் பிறகு ஸ்டோரீக்கள் தானாகவே மறைந்துவிடும். ஸ்டோரீக்களை முடக்குவதா? - இனி உங்களால் ஸ்டோரீக்களைப் பகிரவோ பார்க்கவோ முடியாது. நீங்கள் சமீபத்தில் அனுப்பிய ஸ்டோரீக்கள் அனைத்தும் காலாவதியாகும் வரை பிறரால் பார்க்கப்படும். + இனி உங்களால் ஸ்டோரீக்களைப் பகிரவோ பார்க்கவோ முடியாது. சமீபத்தில் நீங்கள் பகிர்ந்த ஸ்டோரி புதுப்பிப்புகளும் நீக்கப்படும். ஸ்டோரி தனியுரிமை - இந்த ஸ்டோரியை யார் பார்க்க முடியும் + இந்த ஸ்டோரியை யார் பார்வையிட முடியும் - "\"%1$s\" குழுவின் உறுப்பினர்கள் இந்த ஸ்டோரியைப் பார்த்து பதிலளிக்கலாம். இந்த சாட்டிற்க்கான உறுப்பினர் உரிமையை குழுவில் நீங்கள் புதுப்பிக்கலாம்." + "%1$s குழுவின் உறுப்பினர்கள் இந்த ஸ்டோரியைப் பார்த்து பதிலளிக்கலாம். இந்த சாட்டிற்க்கான உறுப்பினர் உரிமையை குழுவில் நீங்கள் புதுப்பிக்கலாம்." - குழு ஸ்டோரியை அகற்று + குழு ஸ்டோரியை அகற்றவும் ஓவர்ஃப்ளோ மெனு @@ -5229,7 +5284,7 @@ உங்கள் எஸ்.எம்.எஸ் செய்திகளை ஏற்றுமதி செய்யுங்கள் - உங்கள் எஸ்.எம்.எஸ் செய்திகளை உங்கள் தொலைபேசியின் எஸ்.எம்.எஸ் தரவுத்தளத்திற்கு ஏற்றுமதி செய்யலாம். இது உங்கள் மொபைலில் உள்ள பிற எஸ்.எம்.எஸ் பயன்பாடுகளை அணுகவும் அவற்றை இறக்குமதி செய்யவும் அனுமதிக்கிறது. இது உங்கள் எஸ்.எம்.எஸ் செய்தி வரலாற்றின் பகிரக்கூடிய கோப்பை உருவாக்காது. + உங்கள் எஸ்.எம்.எஸ் செய்திகளை உங்கள் தொலைபேசியின் எஸ்.எம்.எஸ் தரவுத்தளத்திற்கு ஏற்றுமதி செய்யலாம். இது உங்கள் மொபைலில் உள்ள பிற எஸ்.எம்.எஸ் ஆப்புகளை அணுகவும் அவற்றை இறக்குமதி செய்யவும் அனுமதிக்கிறது. இது உங்கள் எஸ்.எம்.எஸ் செய்தி வரலாற்றின் பகிரக்கூடிய கோப்பை உருவாக்காது. தொடரவும் diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index ab117c2443..2647a18c2e 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -193,7 +193,7 @@ నవీకరణ నవీకరణ ఆపివేయుము హెచ్చరిక - మీ Signal వెర్షన్ గడువు ముగిసింది. మీరు మీ సందేశ చరిత్రను చూడవచ్చు కాని మీరు నవీకరించే వరకు సందేశాలను పంపలేరు లేదా స్వీకరించలేరు. + మీ Signal వెర్షన్ గడువు ముగిసింది. మీరు మీ సందేశ చరిత్రను చూడవచ్చు, కానీ మీరు అప్‌డేట్ చేసే వరకు మీరు సందేశాలను పంపలేరు లేదా అందుకోలేరు. వెబ్ బ్రౌజర్ కనుగొనబడలేదు. @@ -218,7 +218,7 @@ యూజర్‌నేమ్ ద్వారా కనుగొనండి - నా స్టోరీలు + నా కథలు కొత్త కథ @@ -673,7 +673,7 @@ కొత్త గుంపులు అంటే ఏమిటి? క్రొత్త గుంపులు ప్రస్తావనలు మరియు సమూహ నిర్వాహకులు వంటి లక్షణాలను కలిగి ఉంటాయి మరియు భవిష్యత్తులో మరిన్ని లక్షణాలకు మద్దతు ఇస్తాయి. - అన్ని సందేశ చరిత్ర మరియు మీడియా అప్‌గ్రేడ్ చేయడానికి ముందు నుండి ఉంచబడ్డాయి. + సందేశ చరిత్ర మరియు మీడియా అంతా అప్‌గ్రేడ్ చేయడానికి ముందు నుండి ఉంచబడింది. ఈ గుంపులో మళ్లీ చేరడానికి మీరు ఆహ్వానాన్ని అంగీకరించాలి మరియు మీరు అంగీకరించే వరకు సమూహ సందేశాలను స్వీకరించరు. ఈ సభ్యుడు మళ్ళీ ఈ గుంపులో చేరడానికి ఆహ్వానాన్ని అంగీకరించాలి మరియు వారు అంగీకరించే వరకు సమూహ సందేశాలను అందుకోరు: @@ -688,7 +688,7 @@ క్రొత్త సమూహానికి అప్‌గ్రేడ్ చేయండి ఈ సమూహాన్ని అప్‌గ్రేడ్ చేయండి క్రొత్త గుంపులు ప్రస్తావనలు మరియు సమూహ నిర్వాహకులు వంటి లక్షణాలను కలిగి ఉంటాయి మరియు భవిష్యత్తులో మరిన్ని లక్షణాలకు మద్దతు ఇస్తాయి. - అన్ని సందేశ చరిత్ర మరియు మీడియా అప్‌గ్రేడ్ చేయడానికి ముందు నుండి ఉంచబడతాయి. + సందేశ చరిత్ర మరియు మీడియా అంతా అప్‌గ్రేడ్ చేయడానికి ముందు నుండి ఉంచబడుతుంది. నెట్‌వర్క్ లోపాన్ని ఎదుర్కొంది. తరువాత మళ్ళీ ప్రయత్నించండి. అప్‌గ్రేడ్ చేయడంలో విఫలమైంది. @@ -1524,7 +1524,7 @@ మీరు - నా స్టోరీ + నా కథ నిరోధించు @@ -1542,7 +1542,7 @@ నెట్వర్క్ విఫలమైంది నమోదు చేయని సంఖ్య! మీరు డయల్ సంఖ్య సురక్షిత గాత్రం మద్దతు లేదు! - దొరికింది + అర్థమైంది @@ -1855,9 +1855,9 @@ మీరు ఒక గిఫ్ట్ బ్యాడ్జీని రీడిమ్ చేసుకున్నారు - మీ స్టోరీకి %1$s ప్రతిస్పందించారు + మీ కథకు %1$s ప్రతిస్పందించారు - వారి స్టోరీకి %1$s ప్రతిస్పందించారు + వారి కథకు %1$s ప్రతిస్పందించారు Molly నవీకరణ @@ -1960,6 +1960,7 @@ %1$s నుంచి మీకు మీడియా ఇకపై అందుబాటులో లేదు. ఈ మీడియాను భాగస్వామ్యం చేయగల అనువర్తనాన్ని కనుగొనలేకపోయాము. + మూసివెయ్యి %2$d సంభాషణలొ కొత్త %1$d సందేశాలు @@ -2038,7 +2039,7 @@ సందేశ అభ్యర్థన మీరు - %1$s • స్టోరీ + %1$s • కథ వీడియో ప్లే చేయండి @@ -2198,9 +2199,9 @@ మీరు అసలు సందేశం కనుగొనబడలేదు - %1$s · స్టోరీ + %1$s · కథ - మీ స్టోరీ + మీ కథ ఇక ఏమాత్రం లభ్యం కాదు @@ -2343,7 +2344,7 @@ పంపిన టైమ్‌స్టాంప్ క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది. - మీ స్టోరీకి అప్‌డేట్‌లు ఇక్కడ కనిపిస్తాయి. + మీ కథకు అప్‌డేట్స్ ఇక్కడ కనిపిస్తాయి. @@ -2623,7 +2624,7 @@ చెల్లింపులు (Beta) సంభాషణ విస్తృతికి పరిమితి సందేశాలను ఉంచు - సందేశ చరిత్రను తొలగించు + సందేశ చరిత్రను తొలగించండి పరికరాలు అనుసంధానించు లైటు గుప్తమైన @@ -2665,12 +2666,12 @@ ఆడియో నిల్వను సమీక్షించండి పాత సందేశాలను తొలగించాలా? - సందేశ చరిత్రను తొలగించాలా? - ఇది మీ పరికరం నుండి %1$s కంటే పాత అన్ని సందేశ చరిత్ర మరియు మీడియాను శాశ్వతంగా తొలగిస్తుంది. + సందేశ చరిత్రను తొలగించేదా? + ఇది మీ పరికరం నుండి %1$s కంటే పాత సందేశ చరిత్ర మరియు మీడియాను అంతటిని శాశ్వతంగా తొలగిస్తుంది. ఇది ఇటీవలి %1$s సందేశాలకు అన్ని సంభాషణలను శాశ్వతంగా ట్రిమ్ చేస్తుంది. - ఇది మీ పరికరం నుండి అన్ని సందేశ చరిత్ర మరియు మీడియాను శాశ్వతంగా తొలగిస్తుంది. - మీరు ఖచ్చితంగా అన్ని సందేశ చరిత్రను తొలగించాలనుకుంటున్నారా? - అన్ని సందేశ చరిత్ర శాశ్వతంగా తొలగించబడుతుంది. ఈ చర్య రద్దు చేయబడదు. + ఇది మీ పరికరం నుండి సందేశ చరిత్ర మరియు మీడియాను అంతటిని శాశ్వతంగా తొలగిస్తుంది. + మీరు ఖచ్చితంగా సందేశ చరిత్ర అంతటిని తొలగించాలని అనుకుంటున్నారా? + సందేశ చరిత్ర అంతా శాశ్వతంగా తొలగించబడుతుంది. ఈ చర్య రద్దు చేయబడదు. ఇప్పుడు అన్నీ తొలిగించు ఎప్పటికీ 1 సంవత్సరం @@ -2748,10 +2749,14 @@ అనుకూలీకరించు ఎంపిక + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ ఇప్పుడు కాదు + + + భద్రతా సెటప్ + + మీ నిధులను రక్షించండి + + మరో అంచె భద్రతను జోడించడం ద్వారా, మీ నిధులను యాక్సెస్ చేయకుండా మీ ఫోన్ ద్వారా ఒక వ్యక్తిని నిరోధించడంలో సహాయపడండి. సెట్టింగ్‌లలో ఈ వికల్పాన్ని మీరు నిలిపివేయవచ్చు. + + చెల్లింపు లాక్‌ను ప్రారంభించండి + + ఇప్పుడు కాదు + + ఈ దశను దాటవేసేదా? + + ఈ దశను దాటవేయడం వల్ల మీ ఫోన్‌‌కు భౌతికంగా యాక్సెస్ ఉన్న ఏ వ్యక్తి అయినా నిధులను బదిలీ చేయడానికి లేదా మీ రికవరీ పదబంధాన్ని వీక్షించడానికి అనుమతించబడవచ్చు. + + రద్దు + + దాటవేయి + ఫండ్స్ జోడించండి మీ వాలెట్ చిరునామా @@ -4256,9 +4281,9 @@ ఒక సందేశాన్ని జోడించండి వేగవంతమైన ఫార్వర్డ్‌లు - వీడియోలు 30 సెకండ్ల క్లిప్ వలే ట్రిమ్ చేసి, అనేక స్టోరీల వలే పంపబడతాయి. + వీడియోలు 30 సెకండ్ల క్లిప్‌లకు ట్రిమ్ చేయబడి, అనేక కథల లాగా పంపబడతాయి. - స్టోరీలకు పంపే వీడియోలు 30 సెకండ్లు మించి ఉండరాదు. + కథలకు పంపబడిన వీడియోలు 30 సెకండ్లు మించి ఉండరాదు. ఫార్వర్డ్ చేయబడ్డ సందేశాలు ఇప్పుడు వెంటనే పంపబడతాయి. %1$d సందేశం పంపండి @@ -4699,21 +4724,21 @@ మాటామంతి - స్టోరీలు + కథలు 99+ కథ గోప్యత - నా స్టోరీలు + నా కథలు ఒక కథను జోడించేందుకు తట్టండి ప్రస్తుతం చూపించడానికి ఇటీవల అప్‌డేట్‌లు ఏవీ లేవు. - స్టోరీని దాచిపెట్టండి + కథను దాయండి - స్టోరిని అన్‌హైడ్ చేయండి + కథను దాయకుండా ఉండండి బదలాయించు @@ -4733,15 +4758,15 @@ మళ్లీ ప్రయత్నించడానికి తట్టండి - స్టోరీని దాచిపెట్టాలా? + కథను దాచేదా? - %1$s నుంచి కొత్త స్టోరీ అప్‌డేట్‌లు స్టోరీల లిస్ట్‌పై ఇక ఏమాత్రం కనిపించవు. + %1$s నుంచి కొత్త కథ అప్‌డేట్స్ కథల జాబితాలో పైన ఇక ఏమాత్రం కనిపించవు. దాచు - స్టోరీ దాచిపెట్టబడింది + కథ దాయబడింది - దాచిపెట్టబడ్డ స్టోరీలు + దాయబడిన కథలు %1$d వీక్షణ @@ -4750,11 +4775,11 @@ బదలాయించు - %1$s యొక్క స్టోరీ + %1$s యొక్క కథ - స్టోరీని డిలీట్ చేయాలా? + కథను తొలగించేదా? - ఈ స్టోరీ మీకు మరియు దీనిని అందుకున్న ప్రతిఒక్కరికి డిలీట్ చేయబడుతుంది. + ఈ కథ మీకు మరియు దీనిని అందుకున్న ప్రతిఒక్కరికి తొలగించబడుతుంది. సేవ్ చేయలేకపోయింది @@ -4786,7 +4811,7 @@ ఇంకా ఎలాంటి వీక్షణలు లేవు - మీ స్టోరీస్ ఎవరు చూశారనేది చూడటానికి రీడ్ రిసిప్ట్‌లు ప్రారంభించండి. + మీ కథలను ఎవరు వీక్షించారనేది చూడటానికి రీడ్ రిసిప్ట్స్ ప్రారంభించండి. సెట్టింగ్‌లకు వెళ్లండి @@ -4799,14 +4824,16 @@ వీక్షకుడిని తొలగించండి ఇంకా ఎలాంటి రిప్లైలు లేవు + + ఈ గ్రూప్‌లో మీరు ఇక ఏమాత్రం సభ్యులు కానందు వల్ల, ఈ కథకు మీరు బదులివ్వలేరు. - స్టోరీకి రియాక్ట్ అయ్యారు + కథకు ప్రతిస్పందించారు వీక్షణలు రిప్లైలు - ఈ స్టోరీకి రియాక్ట్ కావడం + ఈ కథకు ప్రతిస్పందించండి %1$sకు ప్రైవేట్‌గా బదులివ్వడం @@ -4816,11 +4843,18 @@ తొలగించండి - నా స్టోరీ + నా కథ + + + %1$d viewer + %1$d viewers + + + View ఈ కథను ఎవరు వీక్షించవచ్చు - దీని నుంచి స్టోరీని దాచిపెట్టండి + వీరి నుంచి కథను దాయండి అన్ని Signal కనెక్షన్‌లు @@ -4828,7 +4862,7 @@ వీరు తప్ప అందరూ… - నిర్ధిష్ట వ్యక్తి నుంచి మీ స్టోరీని దాచిపెట్టండి + నిర్ధిష్ట వ్యక్తుల నుంచి మీ కథను దాయండి %1$d వ్యక్తులు మినహాయించబడ్డారు @@ -4844,15 +4878,13 @@ %1$dవ్యక్తులు - మీ స్టోరీని ఎవరు చూడవచ్చు అనేది ఎంచుకోండి. మీరు ఇప్పటికే పంపిన స్టోరీలకు మార్పులు వర్తించవు. + మీ కథను ఎవరు చూడవచ్చు అనేది ఎంచుకోండి. మీరు ఇప్పటికే పంపిన కథలను మార్పులు ప్రభావితం చేయవు. రిప్లైలు & రియాక్షన్‌లు రిప్లైలు & రియాక్షన్‌లు అనుమతించండి - మీ స్టోరీని చూసే వ్యక్తులను రియాక్ట్ అయ్యేందుకు మరియు రిప్లై ఇచ్చేందుకు అనుమతించండి - - నిర్ధిష్ట వ్యక్తుల నుంచి మీ స్టోరీని దాచిపెట్టండి. డిఫాల్ట్‌గా, మీ స్టోరీ మీ %1$sతో పంచుకోబడుతుంది. + మీ కథను వీక్షించగల వ్యక్తులను ప్రతిస్పందించడానికి మరియు ప్రత్యుత్తరం ఇచ్చేందుకు అనుమతించండి Signal కనెక్షన్‌లు @@ -4864,15 +4896,15 @@ మీ సిస్టమ్ కాంటాక్ట్‌ల్లో వారు ఉండటం - "మీ కనెక్షన్‌లు మీ పేరు మరియు ఫోటోని చూడవచ్చు, మరియు వారి నుంచి దాచిపెట్టినట్లయితే తప్ప, ‘‘మై స్టోరి’’కి పోస్ట్‌లను చూడవచ్చు." + "మీ కనెక్షన్స్ మీ పేరు మరియు ఫోటోను చూడవచ్చు, మరియు వారి నుంచి మీరు దాచిపెడితే తప్ప నా కథకు పోస్ట్‌లను చూడవచ్చు." వీక్షకుడిని జోడించండి - ప్రైవేట్ స్టోరీని డిలీట్ చేయండి + ప్రైవేట్ కథను తొలగించండి %1$s తొలగించాలా? - ఈ వ్యక్తి మీ స్టోరీని ఇక ఏమాత్రం చూడలేడు. + ఈ వ్యక్తి మీ కథను ఇక ఏమాత్రం చూడలేరు. తొలగించు @@ -4880,9 +4912,9 @@ ఈ యాక్షన్‌ని అన్‌డ్యూ చేయలేం. - స్టోరీ పేరును ఎడిట్ చేయండి + కథ పేరును సవరించండి - స్టోరీ పేరు + కథ పేరు భద్రపరుచు @@ -4900,7 +4932,7 @@ URLని టైప్ చేయండి లేదా పేస్ట్ చేయండి - మీ స్టోరీ వీక్షకులతో లింక్‌ని పంచుకోండి + మీ కథ యొక్క వీక్షకులతో లింక్‌ను పంచుకోండి వెతకండి @@ -4911,22 +4943,40 @@ కేవలం వీరితో పంచుకోండి… పూర్తయింది + + గ్రూప్ కథను తొలగించేదా? + + \"%1$s\" తొలగించబడుతుంది. + + తొలగించు + + ప్రైవేట్ కథను తొలగించేదా? + + ఈ కథకు పంచుకోబడ్డ \"%1$s\" మరియు అప్‌డేట్స్ తొలగించబడతాయి. + + తొలగించండి + + కథలు Signal బీటా యూజర్లకు మాత్రమే లభ్యమౌతుంది. + + ఒకవేళ మీరు ఒక కథను పంచుకున్నట్లయితే, Signal బీటా ఉన్న వ్యక్తులకు మాత్రమే అది లభ్యమౌతుంది. - స్టోరీని జోడించాలా? + కథకు జోడించేదా? - మీ స్టోరీకి కంటెంట్‌ని జోడించడం వల్ల మీ Signal కనెక్షన్‌లు దానిని 24 గంటలపాటు చూడటానికి అనుమతిస్తుంది. మీ స్టోరీని ఎవరు చూడవచ్చు అనేదానిని మీరు సెట్టింగ్‌ల్లో మార్చవచ్చు. + మీ కథకు విషయాన్ని జోడించడం వల్ల మీ Signal కనెక్షన్స్ దానిని 24 గంటలపాటు చూడటానికి అనుమతిస్తుంది. మీ కథను ఎవరు చూడవచ్చు అనేదానిని మీరు సెట్టింగ్‌లలో మార్చవచ్చు. - స్టోరీకి జోడించండి + కథకు జోడించండి వీక్షకులను ఎడిట్ చేయండి - స్టోరీని పంపలేరు. మీ కనెక్షన్ చెక్ చేసి, మళ్లీ ప్రయత్నించండి. + కథను పంపడం వీలుకాలేదు. మీ కనెక్షన్ తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి. పంపు + + ఆఫ్ చేయండి మరియు తొలగించండి - పంచుకోండి & స్టోరీలను వీక్షించండి + కథలను పంచుకోండి & వీక్షించండి - ఈ ఆప్షన్‌ను ఆఫ్ చేసినప్పుడు, మీరు స్టోరీలను పంచుకోలేరు లేదా వీక్షించలేరు. + ఈ వికల్పం ఆఫ్ చేయబడినప్పుడు, మీరు ఇక ఏమాత్రం కథలను పంచుకోలేరు లేదా వీక్షించలేరు. వీక్షకులను ఎంచుకోండి @@ -4937,9 +4987,9 @@ %1$d వీక్షకులు - స్టోరీకి పేరుపెట్టండి + కథకు పేరుపెట్టండి - స్టోరీ పేరు (అవసరం) + కథ పేరు (అవసరం) వీక్షకులు @@ -4947,17 +4997,17 @@ ఈ ఖాళీని తప్పనిసరిగా పూరించవలెను. - ఈ పేరుతో ఇప్పటికే ఒక స్టోరీ ఉంది. + ఈ పేరుతో ఇప్పటికే ఒక కథ ఉంది. అన్నీ ఎంచుకో - మీ స్టోరీ రకాన్ని ఎంచుకోండి + మీ కథ రకాన్ని ఎంచుకోండి - కొత్త ప్రైవేట్ స్టోరీ + కొత్త ప్రైవేట్ కథ నిర్ధిష్ట వ్యక్తులకు మాత్రమే కనిపిస్తుంది - గ్రూపు స్టోరీ + గ్రూప్ కథ ఇప్పటికే ఉన్న గ్రూపుతో పంచుకోండి @@ -4969,17 +5019,17 @@ రిప్లై పంపుతోంది… - ఈ స్టోరీ ఇక ఏమాత్రం లభ్యం కాదు. + ఈ కథ ఇక ఏమాత్రం అందుబాటులో లేదు. ఇంటర్నెట్ కనెక్షన్ లేదు కంటెంట్‌ని లోడ్ చేయలేకపోయింది - స్టోరీని పంపారు + కథను పంపారు - స్టోరీని పంపడం విఫలమైంది + కథను పంపడం విఫలమైంది - స్టోరీని వీక్షించండి + కథను వీక్షించండి ప్రొఫైల్ ఫోటోని వీక్షించండి @@ -4993,11 +5043,11 @@ తీసివేయు - మీరు %1$sస్టోరీకి ప్రతిస్పందించారు + మీరు %1$s యొక్క కథకు ప్రతిస్పందించారు - మీ స్టోరీకి ప్రతిస్పందించారు + మీ కథకు ప్రతిస్పందించారు - ఒక స్టోరీకి రియాక్ట్ అయ్యారు + ఒక కథకు ప్రతిస్పందించారు @@ -5060,17 +5110,22 @@ ఇప్పుడు కాదు - వీరితో మాత్రమే పంచుకోండి + వీరితోనే పంచుకోండి - ప్రైవేట్ స్టోరీ · %1$d వీక్షకుడు + ప్రైవేట్ కథ · %1$d వీక్షకుడు ప్రైవేట్ కథ · %1$d వీక్షకులు - గ్రూపు స్టోరీ· %1$d వీక్షకుడు + గ్రూప్ కథ· %1$d వీక్షకుడు గ్రూప్ కథ · %1$d వీక్షకులు + + + %1$d సభ్యుడు + %1$dసభ్యులు + %1$s · %2$d వీక్షకుడు @@ -5079,21 +5134,21 @@ మీ వీక్షకులను ఎంచుకోవడానికి తట్టండి - స్టోరీ సెట్టింగ్‌లు + కథ సెట్టింగ్స్ - స్టోరీని తొలగించండి + కథను తొలగించండి - స్టోరీని డిలీట్ చేయండి + కథను తొలగించండి - గ్రూపు స్టోరీని తొలగించాలా? + గ్రూప్ కథను తొలగించేదా? - ఇది ఈ లిస్ట్ నుంచి స్టోరీని తొలగిస్తుంది. మీరు ఇంకా ఈ గ్రూపు నుంచి స్టోరీలను వీక్షించగలుగుతారు. + ఇది ఈ జాబితా నుంచి కథను తొలగిస్తుంది. మీరు ఇంకా ఈ గ్రూప్ నుంచి కథలను వీక్షించగలుగుతారు. తొలగించు - స్టోరీని డిలీట్ చేయాలా? + కథను తొలగించేదా? - ప్రైవేట్ స్టోరీ \"%1$s\"ని తొలగించాలా? + ప్రైవేట్ కథ \"%1$s\" ను తొలగించేదా? తొలగించండి @@ -5121,7 +5176,7 @@ నిష్క్రమించడానికి కుడివైపుకు స్వైప్ చేయండి - దొరికింది + అర్థమైంది సందర్భోచిత మెనూ ఓపెన్ చేయండి @@ -5139,11 +5194,11 @@ అన్ని కనెక్షన్‌లు సమీక్షించబడ్డాయి, కొనసాగడానికి పంపండి మీద తట్టండి. - Signal తిరిగి ఇన్‌స్టాల్ చేసిన లేదా పరికరాలను మార్చిన %1$d కనెక్షన్‌లు మీకు ఉన్నాయి. వారితో మీ స్టోరీని పంచుకోవడానికి ముందు వారి భద్రతా సంఖ్యలను సమీక్షించండి లేదా వారిని మీ స్టోరీ నుంచి తొలగించడానికి పరిగణించండి. + Signal ను తిరిగి ఇన్‌స్టాల్ చేసిన లేదా పరికరాలను మార్చిన %1$d కనెక్షన్స్ మీకు ఉన్నాయి. వారితో మీ కథను పంచుకోవడానికి ముందు వారి భద్రతా సంఖ్యలను సమీక్షించండి లేదా వారిని మీ కథ నుంచి తొలగించడానికి పరిగణించండి. భద్రత సంఖ్యను ధృవీకరించండి - స్టోరీ నుంచి తొలగించడం + కథ నుంచి తొలగించండి ఏదేమైనా పంపు @@ -5167,9 +5222,9 @@ తొలగించు - నా స్టోరీ గోప్యత + నా కథ గోప్యత - నా స్టోరీని ఎవరు చూడవచ్చు అనేది ఎంచుకోండి. మీరు ఎల్లప్పుడూ సెట్టింగ్‌ల్లో మార్పులు చేయవచ్చు. + నా కథకు పోస్ట్‌లను ఎవరు చూడవచ్చ అనేది ఎంచుకోండి. మీరు ఎల్లప్పుడూ సెట్టింగ్‌లలో మార్పులు చేయవచ్చు. అన్ని Signal కనెక్షన్‌లు @@ -5194,19 +5249,19 @@ - 24 గంటల తరువాత కథలు ఆటోమేటిక్‌గా అదృశ్యమౌతాయి. మీ కథను ఎవరు వీక్షించవచ్చు లేదా నిర్దిష్ట వీక్షకులు లేదా గ్రూప్‌లతో ఎవరు కొత్త కథలను సృష్టించవచ్చు అనేది ఎంచుకోండి. + 24 గంటల తరువాత కథలు ఆటోమేటిక్‌గా అదృశ్యమౌతాయి. నిర్దిష్ట వీక్షకులు లేదా గ్రూప్‌లతో మీ కథను ఎవరు వీక్షించవచ్చు లేదా ఎవరు కొత్త కథలను సృష్టించవచ్చ అనేది ఎంచుకోండి. కథలను ఆఫ్ చేయండి - ఒకవేళ మీరు కథలను నిలిపివేస్తే, మీరు ఇక ఏమాత్రం కథలను పంచుకోలేరు లేదా వీక్షించలేరు. + మీరు కథలను వద్దని ఎంచుకుంటే, మీరు ఇక ఏమాత్రం కథలను పంచుకోలేరు లేదా వీక్షించలేరు. కథలను ఆన్ చేయండి - ఇతరుల నుంచి కథలను వీక్షించండి మరియు పంచుకోండి. 24 గంటల తరువాత కథలు ఆటోమేటిక్‌గా అదృశ్యమౌతాయి. + ఇతరుల నుంచి కథలను పంచుకోండి మరియు వీక్షించండి. 24 గంటల తరువాత కథలు ఆటోమేటిక్‌గా అదృశ్యమౌతాయి. కథలను ఆఫ్ చేసేదా? - మీరు కథలను ఇక ఏమాత్రం వీక్షించలేరు లేదా పంచుకోలేరు. మీరు ఇటీవల పంపిన కథలు ఏవైనా, అవి గడువు ముగిసే వరకు ఇతరులకు ఇంకనూ కనిపిస్తాయి. + మీరు ఇక ఏమాత్రం కథలను పంచుకోలేరు లేదా వీక్షించలేరు. మీరు ఇటీవల పంచుకున్న కథ అప్‌డేట్స్ కూడా తొలగించబడతాయి. కథ గోప్యత @@ -5214,7 +5269,7 @@ ఈ కథను ఎవరు వీక్షించవచ్చు - "\"%1$s\" గ్రూప్‌ యొక్క సభ్యులు ఈ కథను వీక్షించవచ్చు మరియు బదులు ఇవ్వవచ్చు. గ్రూప్‌లో ఈ చాట్ కొరకు సభ్యత్వాన్ని మీరు అప్‌డేట్ చేయవచ్చు." + "%1$s గ్రూప్ సభ్యులు ఈ కథను వీక్షించవచ్చు మరియు ప్రత్యుత్తరం ఇవ్వవచ్చు. గ్రూప్‌లో ఈ చాట్ కొరకు మీరు సభ్యత్వాన్ని అప్‌డేట్ చేయవచ్చు." గ్రూప్ కథను తొలగించండి diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index c51218da0e..70bcf5fb7f 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -192,7 +192,7 @@ ปรับรุ่น ไม่ปรับรุ่น คำเตือน - Signal รุ่นที่คุณใช้อยู่หมดอายุแล้ว คุณสามารถดูประวัติข้อความของคุณได้ แต่จะไม่สามารถส่งหรือรับข้อความได้อีก จนกว่าคุณจะปรับรุ่นแอป + Signal เวอร์ชันที่คุณใช้อยู่หมดอายุแล้ว คุณสามารถดูประวัติการส่งข้อความได้ แต่จะไม่สามารถส่งหรือรับข้อความได้อีกจนกว่าจะอัปเดต ไม่เจอเว็บเบราว์เซอร์ @@ -650,7 +650,7 @@ อะไรคือกลุ่มแบบใหม่? กลุ่มแบบใหม่มีความสามารถเช่นการ @กล่าวถึง และระบบผู้ดูแลกลุ่ม และจะมีความสามารถเพิ่มเติมในอนาคต - ประวัติข้อความและสื่อทั้งหมดได้ถูกรักษาไว้ก่อนการปรับรุ่น + ประวัติการส่งข้อความและสื่อทั้งหมดได้ถูกบันทึกไว้ก่อนการอัปเกรด คุณต้องตอบรับคำเชิญเข้ากลุ่มนี้อีกครั้ง และคุณจะไม่ได้รับข้อความในกลุ่มจนกว่าคุณจะตอบรับ สมาชิกเหล่านี้จะต้องตอบรับคำเชิญเข้ากลุ่มนี้อีกครั้ง และพวกเขาจะไม่ได้รับข้อความในกลุ่มจนกว่าพวกเขาจะตอบรับ: @@ -663,7 +663,7 @@ ปรับรุ่นเป็นกลุ่มแบบใหม่ ปรับรุ่นกลุ่มนี้ กลุ่มแบบใหม่มีความสามารถเช่นการ @กล่าวถึง และระบบผู้ดูแลกลุ่ม และจะมีความสามารถเพิ่มเติมในอนาคต - ประวัติข้อความและสื่อทั้งหมดจะถูกรักษาไว้ก่อนการปรับรุ่น + ประวัติการส่งข้อความและสื่อทั้งหมดจะได้รับการบันทึกไว้ก่อนการอัปเกรด พบความผิดพลาดของเครือข่าย ลองอีกครั้งในภายหลัง ไม่สามารถปรับรุ่น @@ -1886,6 +1886,7 @@ %1$s ถึงคุณ สื่อตัวนี้ไม่มีอยู่แล้ว ไม่พบแอปที่แบ่งปันสื่อนี้ได้ + ปิด มี %1$d ข้อความใหม่ใน %2$d การสนทนา @@ -2537,7 +2538,7 @@ การชำระเงิน (รุ่นทดสอบ) ขีดจำกัดความยาวของการสนทนา เก็บข้อความ - ล้างประวัติข้อความ + ล้างประวัติการส่งข้อความ อุปกรณ์ที่เชื่อมโยงอยู่ สว่าง มืด @@ -2579,12 +2580,12 @@ เสียง ดูพื้นที่จัดเก็บ ลบข้อความเก่าหรือไม่? - ล้างประวัติข้อความหรือไม่? - การกระทำนี้จะทำให้ประวัติการส่งข้อความและสื่อในอุปกรณ์ของคุณซึ่งเก่ากว่า %1$s ถูกลบอย่างถาวร + ล้างประวัติการส่งข้อความหรือไม่ + การดำเนินการนี้จะทำให้ประวัติการส่งข้อความและสื่อในอุปกรณ์ของคุณซึ่งเก่ากว่า %1$s ถูกลบอย่างถาวร นี่จะตัดการสนทนาทั้งหมดให้เหลือแค่ %1$s ข้อความล่าสุดโดยทันที - การกระทำนี้จะทำให้ประวัติการส่งข้อความและสื่อในอุปกรณ์ของคุณถูกลบอย่างถาวร - คุณแน่ใจหรือไม่ว่าคุณต้องการลบประวัติการส่งข้อความทั้งหมด? - ประวัติการส่งข้อความทั้งหมดจะถูกลบอย่างถาวร การกระทำนี้ไม่สามารถเลิกทำได้ + การดำเนินการนี้จะทำให้ประวัติการส่งข้อความและสื่อในอุปกรณ์ของคุณถูกลบอย่างถาวร + คุณแน่ใจหรือไม่ว่าคุณต้องการลบประวัติการส่งข้อความทั้งหมด + ประวัติการส่งข้อความทั้งหมดจะถูกลบอย่างถาวร การดำเนินการนี้ไม่สามารถยกเลิกได้ ลบทั้งหมดเดี๋ยวนี้ ตลอดไป 1 ปี @@ -2662,10 +2663,14 @@ กำหนดการตั้งค่า + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ ไม่ใช่ตอนนี้ + + + การตั้งค่าความปลอดภัย + + ปกป้องเงินของคุณ + + ช่วยป้องกันไม่ให้ผู้อื่นใช้โทรศัพท์คุณเข้าถึงเงินของคุณ ด้วยการยกระดับการรักษาความปลอดภัยขึ้นอีกขั้น คุณสามารถปิดใช้งานตัวเลือกนี้ได้ในการตั้งค่า + + เปิดใช้การล็อกการชำระเงิน + + ไม่ใช่ตอนนี้ + + ต้องการข้ามขั้นตอนนี้ใช่หรือไม่ + + การข้ามขั้นตอนนี้จะทำให้ผู้อื่นสามารถใช้โทรศัพท์ของคุณในการโอนเงินหรือดูวลีกู้คืนของคุณได้ + + ยกเลิก + + ข้าม + เพิ่มเงิน ที่อยู่กระเป๋าเงินของคุณ @@ -4629,13 +4654,13 @@ แตะเพื่อลองใหม่ - ซ่อนสตอรี่ + ซ่อนสตอรี่ใช่หรือไม่ - สตอรี่อัปเดตใหม่จาก %1$s จะไม่ปรากฎที่ด้านบนของรายการสตอรี่อีกต่อไป + สตอรี่อัปเดตใหม่จาก %1$s จะไม่ปรากฏที่ด้านบนของรายการสตอรี่อีกต่อไป ซ่อน - สตอรี่ที่ซ่อนอยู่ + ซ่อนสตอรี่แล้ว สตอรี่ที่ซ่อนไว้ @@ -4647,7 +4672,7 @@ สตอรี่ของ %1$s - ลบสตอรี่ + ลบสตอรี่ใช่หรือไม่ สตอรี่จะถูกลบสำหรับคุณและทุกคนที่ได้รับ @@ -4692,14 +4717,16 @@ ลบผู้ชม ยังไม่มีการตอบกลับ + + คุณไม่สามารถตอบกลับสตอรี่นี้ได้ เนื่องจากคุณไม่ได้เป็นสมาชิกในกลุ่มนี้แล้ว - ตอบสนองสตอรี่ของคุณ + แสดงความรู้สึกต่อสตอรี่ รับชม ตอบกลับ - ตอบสนองสตอรี่นี้ + แสดงความรู้สึกต่อสตอรี่นี้ ตอบกลับเป็นการส่วนตัวกับ %1$s @@ -4710,6 +4737,12 @@ ลบ สตอรี่ของฉัน + + + %1$d viewers + + + View ใครเห็นสตอรี่นี้บ้าง @@ -4741,9 +4774,7 @@ อนุญาตการตอบกลับ & การตอบสนอง - ให้คนที่ดูสตอรี่คุณตอบสนองและตอบกลับ - - ซ่อนสตอรี่จากคนบางคน ในค่าเริ่มต้น สตอรี่ของคุณจะถูกแชร์กับ %1$s ของคุณ + ให้คนที่ดูสตอรี่ของคุณแสดงความรู้สึกและตอบกลับได้ เครือข่าย Signal @@ -4755,7 +4786,7 @@ มีรายชื่ออยู่ในระบบผู้ติดต่อของคุณ - "เครือข่ายของคุณจะสามารถมองเห็นชื่อและรูปภาพของคุณ รวมถึงโพสต์ใน \"สตอรี่ของฉัน\" เว้นแต่ว่าคุณจะซ่อนสตอรี่นั้นจากพวกเขา" + "เครือข่ายของคุณจะเห็นชื่อและรูปภาพของคุณ รวมถึงโพสต์ใน \"สตอรี่ของฉัน\" เว้นแต่ว่าคุณจะซ่อนสตอรี่นั้นจากพวกเขา" เพิ่มผู้ชม @@ -4763,7 +4794,7 @@ ลบ %1$sหรือไม่ - คนคนนี้จะไม่เห็นสตอรี่ของคุณอีกต่อไป + บุคคลนี้จะไม่เห็นสตอรี่ของคุณอีกต่อไป ลบ @@ -4791,7 +4822,7 @@ พิมพ์หรือวาง URL - แชร์ลิงก์กับผู้ที่รับชมสตอรี่ของคุณ + แชร์ลิงก์กับผู้ที่ชมสตอรี่ของคุณ ค้นหา @@ -4802,22 +4833,40 @@ แชร์ให้เฉพาะ… เสร็จสิ้น + + ลบสตอรี่กลุ่มใช่หรือไม่ + + \"%1$s\" จะถูกลบ + + ลบ + + ลบสตอรี่ส่วนตัวใช่หรือไม่ + + \"%1$s\" และการอัปเดตต่างๆ ที่แชร์ในสตอรี่นี้จะถูกลบ + + ลบ + + เฉพาะผู้ใช้ Signal รุ่นเบต้าเท่านั้นที่สามารถใช้งานสตอรี่ได้ + + หากคุณแชร์สตอรี่ จะมีเฉพาะผู้ใช้ Signal รุ่นเบต้าเท่านั้นที่เห็น เพิ่มไปยังสตอรี่หรือไม่ - การเพิ่มเนื้อหาไปยังสตอรี่ของคุณจะช่วยให้สายสัมพันธ์ Signal ได้ดูเนื้อหานั้น 24 ชั่วโมง คุณสามารถเปลี่ยนผู้ที่สามารถรับชมสตอรี่ของคุณได้ในการตั้งค่า + การเพิ่มเนื้อหาไปยังสตอรี่ของคุณจะช่วยให้เครือข่าย Signal ได้ดูเนื้อหานั้น 24 ชั่วโมง คุณสามารถเปลี่ยนผู้ที่สามารถดูสตอรี่ของคุณได้ในการตั้งค่า เพิ่มไปยังสตอรี่ แก้ไขผู้ชม - ไม่สามารถส่งสตอรี่ได้ ตรวจสอบการเชื่อมต่อแล้วลองอีกครั้ง + ไม่สามารถส่งสตอรี่ได้ ตรวจสอบการเชื่อมต่อของคุณแล้วลองอีกครั้ง ส่ง + + ปิดใช้งานและลบ - แชร์ & ดูสตอรี่ + แชร์และดูสตอรี่ - คุณจะไม่สามารถแชร์หรือรับชมสตอรี่ได้อีกต่อไป ถ้าตัวเลือกนี้ถูกปิด + คุณจะไม่สามารถแชร์หรือดูสตอรี่ได้อีกต่อไป ถ้าตัวเลือกนี้ถูกปิด เลือกผู้ชม @@ -4829,7 +4878,7 @@ ตั้งชื่อสตอรี่ - ชื่อสตอรี่ (ต้องมี) + ชื่อสตอรี่ (ต้องระบุ) ผู้ชม @@ -4867,7 +4916,7 @@ ส่งสตอรี่แล้ว - การส่งสตอรี่ล้มเหลว + ส่งสตอรี่ไม่สำเร็จ ดูสตอรี่ @@ -4883,11 +4932,11 @@ ปิด - คุณตอบสนองกับสตอรี่ของ %1$s + คุณแสดงความรู้สึกต่อสตอรี่ของ %1$s - ตอบสนองกับสตอรี่ของคุณ + แสดงความรู้สึกต่อสตอรี่ของคุณ - ตอบสนองกับสตอรี่ + แสดงความรู้สึกต่อสตอรี่ @@ -4958,6 +5007,10 @@ สตอรี่กลุ่ม · ผู้ชม %1$d คน + + + สมาชิก %1$d คน + %1$s · ผู้ชม %2$d คน @@ -4973,11 +5026,11 @@ ลบสตอรี่กลุ่มใช่หรือไม่ - สตอรี่จะถูกลบออกจากรายการนี้ คุณจะยังสามารถรับชมสตอรี่จากกลุ่มนี้ได้ + สตอรี่จะถูกลบออกจากรายการนี้ คุณจะยังสามารถดูสตอรี่จากกลุ่มนี้ได้ ลบ - ลบสตอรี่ + ลบสตอรี่ใช่หรือไม่ ลบสตอรี่ส่วนตัว \"%1$s\" ใช่หรือไม่ @@ -5022,7 +5075,7 @@ ตรวจสอบผู้ติดต่อทั้งหมดแล้ว แตะส่งเพื่อดำเนินการต่อ - คุณมีผู้ติดต่อ %1$d คน ที่อาจติดตั้ง Signal ใหม่หรือเปลี่ยนอุปกรณ์ ก่อนที่คุณจะแบ่งปันสตอรี่กับผู้ติดต่อดังกล่าว ลองตรวจสอบหมายเลขความปลอดภัยหรือลบผู้ติดต่อออกจากสตอรี่ของคุณ + คุณมีเครือข่าย %1$d คน ที่อาจติดตั้ง Signal ใหม่หรือเปลี่ยนอุปกรณ์ ก่อนที่จะแชร์สตอรี่กับเครือข่ายคนดังกล่าว ลองตรวจสอบหมายเลขความปลอดภัยหรือลบเครือข่ายคนนั้นออกจากสตอรี่ของคุณ ตรวจยืนยันหมายเลขความปลอดภัย @@ -5076,19 +5129,19 @@ - สตอรี่จะหายไปอัตโนมัติภายใน 24 ชั่วโมง เลือกได้ว่าจะให้ใครเห็นสตอรี่ของคุณ หรือสร้างสตอรี่ใหม่พร้อมกำหนดผู้ชมหรือกลุ่มเฉพาะ + สตอรี่จะหายไปโดยอัตโนมัติหลังจากครบ 24 ชั่วโมง เลือกได้ว่าจะให้ใครเห็นสตอรี่ของคุณ หรือสร้างสตอรี่ใหม่พร้อมกำหนดผู้ชมหรือกลุ่มเฉพาะ - ปิดสตอรี่ + ปิดใช้งานสตอรี่ - หากคุณปิดใช้งานสตอรี่ คุณจะไม่สามารถแชร์หรือรับชมสตอรี่ได้อีกต่อไป + หากปิดใช้งานสตอรี่ คุณจะไม่สามารถแชร์หรือดูสตอรี่ได้อีกต่อไป - เปิดสตอรี่ + เปิดใช้งานสตอรี่ แชร์และดูสตอรี่ของผู้อื่น สตอรี่จะหายไปโดยอัตโนมัติภายใน 24 ชั่วโมง - ปิดสตอรี่ใช่ไหม + ปิดใช้งานสตอรี่ใช่ไหม - คุณจะไม่สามารถแชร์หรือดูสตอรี่ได้อีกต่อไป สตอรี่ที่คุณเพิ่งส่งจะยังปรากฏให้เห็นตามปกติจนกว่าสตอรี่นั้นจะหมดอายุ + คุณจะไม่สามารถแชร์หรือดูสตอรี่ได้อีกต่อไป การอัปเดตสตอรี่ที่คุณเพิ่งแชร์จะถูกลบด้วยเช่นกัน ความเป็นส่วนตัวของสตอรี่ @@ -5096,7 +5149,7 @@ ใครเห็นสตอรี่นี้บ้าง - "สมาชิกในกลุ่ม \"%1$s\" จะดูและตอบกลับสตอรี่นี้ได้ คุณสามารถปรับเปลี่ยนการเป็นสมาชิกของแชทนี้ภายในกลุ่มได้" + "สมาชิกในกลุ่ม %1$s จะดูและตอบกลับสตอรี่นี้ได้ คุณสามารถอัปเดตการเป็นสมาชิกของแชทนี้ได้ภายในกลุ่ม" ลบสตอรี่กลุ่ม diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index b49cd781c9..70e76be0cf 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -193,7 +193,7 @@ I-update Huwag I-update Babala - Ang iyong version ng Signal ay expired na. Pwede mong makita ang iyong message history pero hindi ka na maaaring makapag-send o maka-receive ng messages hanggang sa i-update mo ito. + Expired na ang iyong version ng Signal. Pwede mong makita ang iyong message history pero hindi ka na maaaring makapag-send o maka-receive ng messages hangga\'t hindi mo ito ina-update. Walang mahanap na web browser. @@ -673,7 +673,7 @@ Ano ang mga New Groups? Ang Bagong Groups ay may features tulad ng @mentions at group admins, at magdadagdagan pa ito ng ibang features sa hinaharap. - Lahat ng message history at media ay naingatan bago mangyari ang upgrade. + Naingatan ang lahat ng message history at media bago nangyari ang upgrade. Kinakailangan mong mag-accept ng invite para maka-join ulit sa group na ito, at hindi ka makakatanggap ng group messages hanggang i-accept mo ito. Ang member na ito\'y kinakailangang mag-accept ng invite para maka-join ulit sa group na ito at hindi siya makakatanggap ng group messages hanggang i-accept niya ito. @@ -688,7 +688,7 @@ Mag-upgrade sa New Group I-upgrade ang group na ito Ang Bagong Groups ay may features tulad ng @mentions at group admins, at magdadagdagan pa ito ng ibang features sa hinaharap. - Lahat ng message history at media ay iingatan bago mangyari ang upgrade. + Iingatan ang lahat ng message history at media bago mangyari ang upgrade. Encountered a network error. Subukan ulit mamaya. Failed to upgrade. @@ -1346,7 +1346,7 @@ Like this new feature? Suportahan ang Signal sa pamamagitan ng one-time donation. - Pinagsama na ang iyong message history ni %1$s at ang kanyang number na %2$s. + Pinagsama na ang inyong message history ni %1$s at ang kanyang number na %2$s. Pinagsama na ang iyong message history ni %1$s at isa pa niyang chat. @@ -1960,6 +1960,7 @@ %1$s to you Hindi na available ang media. Walang makitang app na pwedeng mag-share ng media na ito. + Isara %1$d bagong mensahe sa %2$d pag-uusap @@ -2343,7 +2344,7 @@ Copied sent timestamp to clipboard. - Lalabas dito ang mga update sa story mo. + Lalabas dito ang updates sa story mo. @@ -2605,7 +2606,7 @@ One-time Donation Pagkapribado - Mga Story + Stories MMS User Agent Manwal na settings ng MMS MMSC URL @@ -2666,11 +2667,11 @@ Suriin ang storage Gusto mo bang i-delete ang older messages? Gusto mo bang i-clear ang message history? - This will permanently delete all message history and media that are older than %1$s mula sa device mo. + Permanente nitong ide-delete ang lahat ng message history at media na humigit %1$s mula sa device mo. This will permanently trim all conversations sa %1$s na most recent messages. - This will permanently delete all message history and media mula sa device mo. + Permanente nitong ide-delete ang lahat ng message history at media mula sa device mo. Sigurado ka bang gusto mong i-delete ang buong message history? - All message history will be permanently removed. This action cannot be undone. + Ang buong message history ay permanenteng mawawala. Hindi na pwedeng bawiin ang action na ito. Delete all now Forever 1 year @@ -2748,10 +2749,14 @@ I-customize ang option + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Hindi na Muna + + + Security setup + + Protektahan ang pera mo + + Pigilang ma-access ng ibang taong may hawak ng phone mo ang pera mo gamit ang karagdagang layer ng seguridad. Pwede mong i-disable ang option na ito sa Settings. + + I-enable ang payment lock + + Hindi ngayon + + Gusto mo bang i-skip ang step na ito? + + Kapag ini-skip mo ang step na ito, pwedeng makapag-transfer ng pera o makita ang iyong recovery phrase ng taong may hawak ng phone mo. + + Kanselahin + + Laktawan + Mag-add ng funds Your Wallet Address @@ -3976,7 +4001,7 @@ Default timer para sa new chats Mag-set ng default disappearing message timer para sa lahat ng new chats na sinimulan mo. - I-manage ang stories mo at kung sinong makakakita nito + I-manage ang iyong stories at kung sinong makakakita nito Hingin ang Android screen lock o fingerprint para makapagpadala ng pera Hindi ma-on ang seguridad sa pagbayad @@ -4256,7 +4281,7 @@ Mag-add ng message Faster towards - Ang videos ay naka-trim sa 30s clips at ise-send as multiple Stories. + Hahatiin ang videos bilang tig-30s na clips at ise-send bilang multiple Stories. Ang videos na ise-send sa Stories ay hindi pwedeng lumagpas ng 30s. Forwarded messages are now sent immediately. @@ -4703,7 +4728,7 @@ 99+ - Pagkapribado ng story + Story privacy Stories Ko @@ -4713,7 +4738,7 @@ I-hide ang story - Unhide story + I-unhide story Ipasa @@ -4733,15 +4758,15 @@ Tap to retry - Gusto mo bang i-hide ang story na ito? + I-hide ang story na ito? - Ang new story updates mula kay %1$s ay hindi na lalabas sa top part ng stories list. + Ang bagong story updates mula kay %1$s ay hindi na lalabas sa taas ng stories list. I-hide - Story hidden + Naka-hide ang story - Hidden stories + Mga nakatagong stories %1$d view @@ -4750,9 +4775,9 @@ Ipasa - %1$s\'s Story + Story ni %1$s - Gusto mo bang i-delete ang story na ito? + I-delete ang story na ito? Ang story na ito\'y made-delete sa\'yo at sa lahat ng naka-receive nito. @@ -4799,14 +4824,16 @@ Tanggalin ang viewer Wala pang replies + + Hindi ka pwedeng mag-reply sa story na ito dahil hindi ka na member ng group. - Reacted to the story + Nag-react sa story Views Replies - React to this story + Mag-react sa story na ito Replying privately to %1$s @@ -4817,6 +4844,13 @@ Burahin Story Ko + + + %1$d viewer + %1$d viewers + + + View Sinong pwedeng makakita ng story na ito @@ -4828,7 +4862,7 @@ Lahat maliban kay… - I-hide ang iyong story mula sa specific na tao + I-hide ang iyong story mula sa specific na mga tao %1$d person excluded @@ -4844,15 +4878,13 @@ %1$d people - Piliin kung sinong makakapag-view ng story mo. Ang changes dito ay hindi makakaapekto sa stories na na-send mo na. + Piliin kung sinong makakapag-view ng story mo. Hindi makakaapekto sa stories na na-send mo na ang mga pagbabago dito. Replies & reactions Allow replies & reactions - Let people who can view your story react and reply - - I-hide ang iyong story mula sa specific people. By default, ang story mo ay naka-share sa iyong %1$s + Payagang mag-react at mag-reply ang mga taong nag-view ng story mo Signal Connections @@ -4864,7 +4896,7 @@ Having them in your system contacts - "Makikita ng iyong connections ang name at photo mo, pati na rin ang iyong posts sa \"My Story\" maliban na lang kung i-hide mo ito sa kanila." + "Makikita ng iyong connections ang pangalan at photo mo, pati na rin ang iyong posts sa My Story maliban na lang kung i-hide mo ito sa kanila." Mag-add ng viewer @@ -4872,7 +4904,7 @@ Remove %1$s? - Hindi na niya makikita ang story mo. + Hindi na makikita ng taong ito ang story mo. Tanggalin @@ -4880,7 +4912,7 @@ This action cannot be undone. - Edit story name + I-edit ang story name Story name @@ -4900,7 +4932,7 @@ Type or paste a URL - Mag-share ng link ng iyong story with viewers + Mag-share ng link ng iyong story sa viewers Maghanap @@ -4911,10 +4943,26 @@ Only share with… Tapos na + + Gusto mo bang tanggalin ang group story? + + Matatanggal ang \"%1$s\". + + Tanggalin + + Gusto mo bang i-delete ang private story na ito? + + Made-delete ang \"%1$s\" at ang updates na naka-share sa story na ito. + + Burahin + + Ang Stories ay available lang sa Signal beta users. + + Kapag mag-share ka ng story, makikita lang ito ng iba pang Signal beta users. - I-add ito sa story? + I-add ito sa story mo? - Ang pag-add ng content sa iyong story ay naga-allow sa Signal connections mo na i-view ito sa loob ng 24 hours. Pwede mong baguhin kung sinong makakapag-view ng iyong story sa Settings. + Kapag nag-add ka ng content sa story mo, makikita ito ng Signal connections mo sa loob ng 24 oras. Pwede mong baguhin sa Settings kung sinong makakakita ng iyong story. I-add sa story @@ -4923,10 +4971,12 @@ Hindi ma-send ang story. I-check ang iyong internet connection at subukan ulit. Ipadala + + I-off at i-delete Pag-share at Pag-view ng Stories - Hindi ka na pwedeng mag-share o mag-view ng Stories kapag naka-turn off ang option na ito. + Hindi ka na pwedeng mag-share o mag-view ng Stories kapag naka-off ang option na ito. Pumili ng viewers @@ -4937,9 +4987,9 @@ %1$d viewers - Name story + Bigyang pangalan ang story - Story name (required) + Pangalan ng story (required) Viewers @@ -4953,7 +5003,7 @@ Pumili ng iyong story type - New private story + Bagong private story Visible lang sa specific users @@ -4969,15 +5019,15 @@ Sending reply… - Ang story na ito\'y hindi na available. + Hindi na available ang story na ito. Walang Internet Connection Couldn\'t Load Content - Sent story + Sinend na story - Failed to send story + Hindi ma-send ang story I-view ang story @@ -5060,7 +5110,7 @@ Hindi ngayon - I-share lang sa… + I-share lang sa Private story · %1$d viewer @@ -5071,6 +5121,11 @@ Group story · %1$d viewer Group story · %1$d viewers + + + %1$d member + %1$d members + %1$s · %2$d viewer @@ -5081,7 +5136,7 @@ Story settings - I-remove ang story + Tanggalin ang story I-delete ang story @@ -5091,7 +5146,7 @@ Tanggalin - Gusto mo bang i-delete ang story na ito? + I-delete ang story na ito? Gusto mo bang i-delete ang private story \"%1$s\"? @@ -5139,7 +5194,7 @@ Na-review na ang lahat ng connections, i-tap ang send para magpatuloy. - Mayroon kang %1$d connections na maaaring nag-reinstall ng Signal o nagpalit ng devices. Reviewhin muna ang kanilang safety numbers bago mo i-share sa kanila ang story mo. Maaari mo rin silang tanggalin sa story mo. + Mayroon kang %1$d connections na maaaring nag-reinstall ng Signal o nagpalit ng device. Reviewhin muna ang kanilang safety numbers bago mo i-share sa kanila ang story mo. Maaari mo rin silang tanggalin sa story mo. Beripikahin ang numerong pangkaligtasan @@ -5167,9 +5222,9 @@ Tanggalin - Pagkapribado ng Story Ko + Story Privacy Ko - Piliin kung sinong makakakita ng posts sa Story Ko. Pwede mo itong baguhin anumang oras sa settings. + Piliin kung sinong makakakita ng posts sa Story Ko. Pwede mo itong baguhin sa settings anumang oras. All Signal connections @@ -5194,7 +5249,7 @@ - Automatic na maglalaho ang stories pagkatapos ng 24 oras. Piliin kung sinong makakakita ng iyong story o gumawa ng bagong stories na may partikular na viewers o groups. + Automatic na mawawala ang stories pagkatapos ng 24 oras. Piliin kung sinong makakakita ng iyong story o gumawa ng bagong stories na may specific na viewers o groups. I-off ang stories @@ -5202,19 +5257,19 @@ I-on ang stories - Mag-share at tingnan ang stories ng iba. Ang stories ay automatic na maglalaho pagkatapos ng 24 oras. + Mag-share at mag-view ng stories mula sa ibang mga tao. Ang stories ay automatic na nawawala pagkatapos ng 24 oras. Gusto mo bang i-off ang stories? - Hindi ka na makakapag-share o makakakita ng stories. Makikita pa rin ng iba ang anumang stories na na-send mo kamakailan hanggang sa mag-expire ang mga ito. + Hindi ka na pwedeng mag-share o mag-view ng stories. Made-delete rin ang story updates na shinare mo. - Pagkapribado ng story + Story privacy Sinong makakakita ng story na ito - "Makikita at masasagot ang story na ito ang members ng group na \"%1$s\". Pwede mong i-update sa group ang membership ng chat na ito." + "Ang members ng group na \"%1$s\" ay pwedeng mag-view at mag-reply sa story na ito. Pwede mong i-update ang membership ng chat na ito sa loob ng group." Tanggalin ang group story diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index c4a0a0b410..a2c7f72939 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -193,7 +193,7 @@ Güncelle Güncelleme Uyarı - Sinyal sürümünüz kullanım dışı kaldı. İleti geçmişinizi görüntüleyebilirsiniz, ancak güncelleyene kadar ileti gönderemez veya alamazsınız. + Sinyal sürümün kullanım dışı kaldı. İleti geçmişini görüntüleyebilirsin ancak sürümünü güncelleyene kadar ileti gönderemez veya alamazsın. Hiçbir web tarayıcısı bulunamadı. @@ -673,7 +673,7 @@ Yeni Gruplar nedir? Yeni Gruplar @bahsetmeler ve grup yöneticileri gibi özellikleri içeriyor ve gelecekte daha fazla özellik destekleyecektir. - Yükseltme öncesi tüm ileti geçmişi ve içerik saklandı. + Sürüm yükseltme öncesi tüm ileti geçmişi ve içerik saklandı. Bu gruba tekrar katılmak için bir daveti kabul etmeniz gerekecek ve kabul edene kadar grup iletilerini almayacaksınız. Bu üyenin bu gruba tekrar katılmak için bir daveti kabul etmesi gerekecek ve kabul edene kadar grup iletilerini alamayacak: @@ -688,7 +688,7 @@ Yeni Gruba Yükselt Bu grubu yükseltin Yeni Gruplar @bahsetmeler ve grup yöneticileri gibi özellikleri içeriyor ve gelecekte daha fazla özellik destekleyecektir. - Yükseltme öncesi tüm ileti geçmişi ve içerik saklanacak. + Sürüm yükseltme öncesi tüm ileti geçmişi ve içerik saklanacak. Bir ağ hatasıyla karşılaşıldı. Daha sonra tekrar deneyin. Yükseltme başarısız oldu. @@ -1960,6 +1960,7 @@ %1$s\'den sana İçerik artık mevcut değil. Bu içeriği paylaşabilen bir uygulama bulunamadı. + Kapat %2$d konuşmadan %1$d yeni ileti @@ -2200,7 +2201,7 @@ %1$s · Hikaye - Siz · Hikaye + Sen · Hikaye Artık mevcut değil. @@ -2343,7 +2344,7 @@ Gönderi zaman damgası panoya kopyalandı. - Hikayenizin güncellemeleri burada gösterilecek. + Hikayenin güncellemeleri burada gösterilecek. @@ -2666,10 +2667,10 @@ Depolamayı incele Daha eski iletiler silinsin mi? İleti geçmişi temizlensin mi? - Bu işlem %1$s tarihinden daha eski tüm geçmişi ve ortamı aygıtınızdan kalıcı olarak silecektir. + Bu işlem %1$s tarihinden daha eski tüm geçmişi ve ortamı aygıtından kalıcı olarak silecektir. Bu işlem tüm konuşmaları en yeni %1$s iletiye kadar kırpacaktır. - Bu işlem tüm ileti geçmişini ve ortamı aygıtınızdan kalıcı olarak silecektir. - Tüm ileti geçmişini silmek istediğinizden emin misiniz? + Bu işlem tüm ileti geçmişini ve ortamı aygıtından kalıcı olarak silecektir. + Tüm ileti geçmişini silmek istediğinden emin misin? Tüm ileti geçmişi kalıcı olarak kaldırılacaktır. Bu işlem geri alınamaz. Tümünü hemen sil Daima @@ -2748,10 +2749,14 @@ Seçeneği düzenle + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ Şimdi Değil + + + Güvenlik kurulumu + + Paranı koru + + Bir güvenlik katmanı daha ekleyerek, telefonunu alan bir kişinin parana erişmesini önle. Bu seçeneği Ayarlar\'da devre dışı bırakabilirsin. + + Ödeme kilidini etkinleştir + + Şimdi değil + + Bu adım atlansın mı? + + Bu adımı atlamak, telefonuna fiziksel erişimi olan herkesin para transfer etmesine veya kurtarma ifadeni görüntülemesine izin verebilir. + + İptal + + Atla + Para ekle Cüzdan Adresiniz @@ -4735,7 +4760,7 @@ Hikaye gizlensin mi? - %1$s\'ten yeni hikaye güncellemeleri artık hikaye listesinin en üstünde görünmeyecek. + %1$s adlı kullanıcının yeni hikaye güncellemeleri artık hikaye listesinin en üstünde görünmeyecek. Gizle @@ -4750,7 +4775,7 @@ Yönlendir - %1$s\'nin Hikayesi + %1$s Adlı Kişinin Hikayesi Hikaye silinsin mi? @@ -4799,6 +4824,8 @@ Görüntüleyeni kaldır Henüz yanıt yok + + Artık bu grubun bir üyesi olmadığın için bu hikayeye yanıt veremezsin. Hikayeye tepki verildi @@ -4817,8 +4844,15 @@ Sil Hikayem + + + %1$d viewer + %1$d viewers + + + View - Bu hikayeyi kimler görüntüleyebilir? + Bu hikayeyi kimler görüntüleyebilir Hikayeyi gizle @@ -4850,9 +4884,7 @@ Yanıtlar & tepkilere izin ver - Hikayenizi görebilecek kişilerin tepki ve yanıt vermesine izin verin - - Hikayenizi belirli kişilerden gizleyin. Varsayılan olarak, hikayeniz %1$s\'inizle paylaşılır + Hikayeni görebilecek kişilerin tepki ve yanıt vermesine izin ver Signal Bağlantıları @@ -4864,7 +4896,7 @@ Bunları sistem bağlantılarınızda bulundurmak - "Bağlantılarınız, adınızı ve fotoğrafınızı görebilir ve onlardan gizlemediğiniz sürece \"Hikayem\"deki gönderileri görebilir." + "Bağlantıların, adını ve fotoğrafını görebilir ve onlardan gizlemediğin sürece \"Hikayem\" kısmındaki gönderileri görüntüleyebilir." Görüntüleyen ekle @@ -4872,7 +4904,7 @@ %1$s\'yi kaldır? - Bu kişi artık hikayelerinizi göremeyecek. + Bu kişi artık hikayelerini göremeyecek. Kaldır @@ -4900,7 +4932,7 @@ Yaz veya bir URL yapıştır - Hikayeni görüntüleyenler ile bir bağlantı paylaş. + Hikayeni görüntüleyenler ile bir bağlantı paylaş Konuşmada Ara @@ -4911,22 +4943,40 @@ Sadece ….. ile paylaş Tamam + + Grup hikayesi kaldırılsın mı? + + \"%1$s\" kaldırılacak. + + Kaldır + + Gizli hikaye silinsin mi? + + \"%1$s\" ve bu hikayede paylaşılan güncellemeler silinecek. + + Sil + + Hikayeler yalnızca Signal beta kullanıcıları tarafından kullanılabilir. + + Bir hikaye paylaştığında, yalnızca Signal beta sürümünde olan kişiler tarafından görüntülenebilir. Hikayeye ekle? - Hikayenize içerik eklemek, Signal bağlantılarınızın onu 24 saat boyunca görüntülemesini sağlar. Hikayenizi kimlerin görebileceğini Ayarlar\'da değiştirebilirsiniz. + Hikayene içerik eklediğinde, Signal bağlantıların onu 24 saat boyunca görüntüler. Hikayeni kimlerin görebileceğini Ayarlar\'da değiştirebilirsin. Hikayeye ekle Görüntüleyenleri düzenle - Hikaye gönderilemedi. Bağlantınızı kontrol edip tekrar deneyiniz. + Hikaye gönderilemedi. Bağlantını kontrol edip tekrar dene. Gönder + + Kapat ve sil - Paylaş & Hikayeleri Görüntüle + Paylaş ve Hikayeleri Görüntüle - Bu seçenek kapatıldığında artık Hikayeleri paylaşamayacak veya görüntüleyemeyeceksiniz. + Bu seçenek kapatıldığında artık Hikayeleri paylaşamayacak veya görüntüleyemeyeceksin. Görüntüleyenleri seç @@ -4947,11 +4997,11 @@ Bu alanın doldurulması gereklidir. - Bu isimli bir hikaye zaten var. + Bu ada sahip bir hikaye zaten var. Hepsini seç - Hikaye türünüzü seçin + Hikaye türünü seç Yeni özel hikaye @@ -4993,7 +5043,7 @@ Kapat - %1$s\'nin hikayesine tepki verdin + %1$s adlı kişinin hikayesine tepki verdin Hikayene tepki verildi @@ -5060,7 +5110,7 @@ Şimdi değil - Yalnızca şu kişilerle paylaş + Şu kişilerle paylaş Gizli hikaye · %1$d görüntüleyen @@ -5071,6 +5121,11 @@ Grup hikayesi · %1$d görüntüleyen Grup hikayesi · %1$d görüntüleyen + + + %1$d üye + %1$d üye + %1$s · %2$d görüntüleyen @@ -5206,13 +5261,13 @@ Hikayeler kapatılsın mı? - Artık hikayeleri paylaşamayacak veya görüntüleyemeyeceksin. Yakın zamanda paylaştığın tüm hikayeler, süresi dolana kadar başkaları tarafından görüntülenmeye devam edecek. + Artık hikaye paylaşamayacak veya görüntüleyemeyeceksin. Yakın zamanda paylaştığın hikaye güncellemeleri de silinecek. Hikaye gizliliği - Bu hikayeyi kimler görüntüleyebilir? + Bu hikayeyi kimler görüntüleyebilir "\"%1$s\" grubunun üyeleri bu hikayeyi görüntüleyebilir ve yanıtlayabilir. Gruptaki bu sohbet için üyeliği güncelleyebilirsin." diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index f8b1a2bbf5..b70c345d98 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -220,7 +220,7 @@ Пошук за ім\'ям користувача - Мої історії + Мої сторіз Нова сторі @@ -719,7 +719,7 @@ Що таке Нові Групи? Нові групи мають такі можливості як @згадки, адміністраторів груп, та підтримуватимуть більше можливостей у майбутньому. - Уся історія повідомлень та медіа були збережені під час оновлення. + Уся історія повідомлень і медіа були збережені під час оновлення. Вам потрібно прийняти запит, щоб приєднатись до цієї групи знов. Ви не отримуватимете повідомлень від групи поки не приймете запит. Цьому користувачу потрібно прийняти запит, щоб приєднатись до цієї групи знов. Він не отримуватиме повідомлень від групи поки не прийме запит: @@ -738,7 +738,7 @@ Оновити до Нової групи Оновити цю групу Нові групи мають такі можливості як @згадки, адміністраторів груп, та підтримуватимуть більше можливостей у майбутньому. - Уся історія повідомлень та медіа будуть збережені під час оновлення. + Уся історія повідомлень і медіа будуть збережені під час оновлення. Виникла помилка мережі. Спробуйте пізніше. Помилка оновлення. @@ -1656,7 +1656,7 @@ Ви - Моя історія + Моя сторі Заблокувати @@ -2003,7 +2003,7 @@ Реакція %1$s на вашу сторі - Реакція %1$s на їхню сторі + Реакція %1$s на сторі Оновлення Molly @@ -2108,6 +2108,7 @@ %1$s надіслав вам Мультимедійний більше не доступний. Неможливо знайти програму для того щоб поділитись цим медіафайлом. + Закрити %1$d нових повідомлень у %2$d розмовах @@ -2186,7 +2187,7 @@ Запит на листування Ви - %1$s • Історія + %1$s • Сторі Відтворити відео @@ -2354,7 +2355,7 @@ Ви Оригінальне повідомлення не знайдено - %1$s · Історія + %1$s · Сторі Ви · Сторі @@ -2511,7 +2512,7 @@ Часовий відбиток скопійовано до буфера обміну. - Оновлення вашої історії показуватимуться тут. + Оновлення вашої сторі показуватимуться тут. @@ -2838,11 +2839,11 @@ Переглянути сховище файлів Видаляти старіші повідомлення? Очистити історію повідомлень? - Всі повідомлення і медіа, які старіші ніж %1$s, будуть безповоротно видалені з вашого пристрою. + Усі повідомлення і медіа, які старіші ніж %1$s, будуть безповоротно видалені з вашого пристрою. Це назавжди скоротить всі розмови до %1$s останніх повідомлень - Всі повідомлення та медіа файли будуть безповоротно видалені з вашого пристрою. - Ви дійсно хочете видалити вcю історію повідомлень? - Вся історію повідомлень буде безповоротно видалено. Цю дію неможливо скасувати. + Усі повідомлення та медіа будуть безповоротно видалені з вашого пристрою. + Ви дійсно хочете видалити всю історію повідомлень? + Усю історію повідомлень буде безповоротно видалено. Цю дію неможливо скасувати. Видалити усе негайно Назавжди 1 рік @@ -2920,10 +2921,14 @@ Налаштувати опцію + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -3076,6 +3081,26 @@ Не зараз + + + Налаштування безпеки + + Захистіть свої кошти + + Додайте ще один рівень безпеки, щоб людина з вашим телефоном не змогла отримати доступ до ваших коштів. Цей параметр можна вимкнути в Налаштуваннях. + + Увімкнути захист платежів + + Не зараз + + Пропустити цей крок? + + Якщо пропустити цей крок, будь-яка людина з доступом до вашого телефону зможе перевести кошти чи переглянути вашу кодову фразу. + + Скасувати + + Пропустити + Додати кошти Адреса вашого гаманця @@ -3937,7 +3962,7 @@ Сховати цю картку? Сховати - Збережіть кодову фразу + Зберегти кодову фразу Кодова фраза надає ще один спосіб відновлення вашого платіжного облікового запису. Збережіть свою фразу @@ -4454,9 +4479,9 @@ Додати повідомлення Швидше пересилання - Відео обріжеться до 30-секундних кліпів і опублікуються як декілька сторіз. + Відео обріжеться до 30-секундних кліпів і опублікуються як декілька Сторіз. - Відео в сторіз не може тривати довше 30 сек. + Відео в Сторіз не може тривати довше 30 сек. Переслані повідомлення тепер відправляються миттєво. Відправити повідомлення %1$d @@ -4907,21 +4932,21 @@ Чати - Історії + Сторіз 99+ Конфіденційність сторіз - Мої історії + Мої сторіз Торкніться, щоб додати сторі Немає оновлень для показу. - Сховати історію + Приховати сторі - Показати історію + Показати сторі Переслати @@ -4941,15 +4966,15 @@ Натисніть, щоб повторити - Сховати історію? + Приховати сторі? - Нові історії від %1$s більше не з\'являтимуться нагорі переліку історій. + Нові сторіз від користувача %1$s більше не з\'являтимуться вгорі переліку сторіз. Сховати - Історію приховано + Сторі приховано - Приховані історії + Приховані сторіз %1$d перегляд @@ -4960,11 +4985,11 @@ Переслати - Історія %1$s + Сторі користувача %1$s - Видалити історію? + Видалити сторі? - Цю історію буде видалено для вас і усіх, хто її отримав. + Цю сторі буде видалено для вас і усіх, хто її отримав. Не вдалося зберегти @@ -5013,14 +5038,16 @@ Вилучити глядача Ще немає відповідей + + Ви не можете відповісти на цю сторі, тому що ви більше не є учасником цієї групи. - Відреагував на історію + Реагує на сторі Перегляди Відповіді - Відреагувати на історію + Реагувати на сторі Особисто відповісти %1$s @@ -5030,11 +5057,20 @@ Видалити - Моя історія + Моя сторі + + + %1$d viewer + %1$d viewers + %1$d viewers + %1$d viewers + + + View Хто може бачити цю сторі - Сховати історію від + Приховати сторі від Усі контакти в Signal @@ -5068,9 +5104,7 @@ Дозволити відповіді & реакції - Дозволити тим, хто бачить вашу історію, реагувати та відповідати - - Приховати історію від певних осіб. За замовчуванням вашу історію побачать %1$s + Дозвольте тим, хто бачить вашу сторі, реагувати та відповідати на неї Контакти в Signal @@ -5082,15 +5116,15 @@ Вони є у ваших контактах - "Ваші знайомі можуть бачити ваше ім'я та фото, а також публікації у розділі «Мої історії», якщо ви не сховаєте їх від них." + "Ваші контакти можуть бачити ваше ім'я та фото, а також публікації у розділі «Мої сторіз», якщо ви їх не приховали." Додати глядача - Видалити приватну історію + Видалити приватну сторі Видалити %1$s? - Ця особа більше не бачитиме ваших історій. + Ця людина більше не бачитиме вашу сторі. Видалити @@ -5098,9 +5132,9 @@ Цю дію не можна скасувати. - Редагувати назву історії + Редагувати назву сторі - Назва історії + Назва сторі Зберегти @@ -5118,7 +5152,7 @@ Надрукувати або вставити URL - Поділитись посиланням з глядачами вашої історії + Поділіться посиланням з глядачами вашої сторі Пошук @@ -5129,22 +5163,40 @@ Ділитися тільки з… Готово + + Вилучити групову сторі? + + «%1$s» буде вилучено. + + Вилучити + + Видалити приватну сторі? + + «%1$s» і оновлення до цієї сторі будуть видалені. + + Видалити + + Сторіз доступні лише для користувачів бета-версії Signal. + + Якщо ви поділитеся сторі, її побачать лише користувачі бета-версії Signal. - Додати до історії? + Додати до сторі? - Додання вмісту до вашої історії дозволить вашим знайомим Signal переглядати її упродовж 24 годин. У налаштуваннях можна змінити, хто зможе переглядати вашу історію. + Додання вмісту до вашої сторі дозволить вашим контактам Signal переглядати її упродовж 24 годин. У налаштуваннях можна змінити, хто зможе переглядати вашу сторі. - Додати до історії + Додати до сторі Редагувати список глядачів Не вдалося надіслати сторі. Перевірте підключення до мережі і спробуйте знову. Відправити + + Вимкнути і видалити - Поділитись & Переглянути історії + Ділитися і переглядати сторіз - Ви не зможете ділитись або переглядати історії, якщо це налаштування вимкнено. + Ви не зможете ділитися чи переглядати Сторіз, якщо це налаштування вимкнено. Обрати глядачів @@ -5213,7 +5265,7 @@ Відключити - Ви відреагували на сторі %1$s + Ви відреагували на сторі користувача %1$s Реакції на вашу сторі @@ -5297,6 +5349,13 @@ Групова сторі · %1$d глядачів Групова сторі · %1$d глядача + + + %1$d учасник + %1$d учасники + %1$d учасників + %1$d учасника + %1$s · %2$d глядач @@ -5307,7 +5366,7 @@ Торкніться, щоби вибрати глядачів - Налаштування історії + Налаштування сторі Вилучити сторі @@ -5405,7 +5464,7 @@ Конфіденційність сторіз - Оберіть, хто може переглядати пости в розділі «Мої сторі». Вибір можна змінити в налаштуваннях у будь-який час. + Оберіть, хто може переглядати дописи в розділі «Мої сторіз». Вибір можна змінити в налаштуваннях у будь-який час. Усі знайомі в Signal @@ -5442,7 +5501,7 @@ Вимкнути сторіз? - Ви більше не зможете ділитися сторіз чи переглядати їх. Якщо ви нещодавно публікували сторіз, вони будуть видимі, доки не закінчиться їхній термін дії. + Ви більше не зможете публікувати чи переглядати сторіз. Оновлення сторі, які ви нещодавно публікували, також будуть видалені. Конфіденційність сторіз diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 783aeb6427..01990ff52c 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -193,7 +193,7 @@ اَپ ڈیٹ اپ ڈیٹ مت کریں انتباہ - آپ کے Signal کا ورژن ختم ہوچکا ہے۔ آپ اپنے میسج کی تاریخ دیکھ سکتے ہیں لیکن جب تک آپ اپ ڈیٹ نہیں ہوتے تب تک آپ میسجز بھیج یا وصول نہیں کرسکیں گے۔ + آپ کے Signal ورژن کی میعاد ختم ہو چکی ہے۔ آپ اپنے میسج کی ہسٹری دیکھ سکتے ہیں لیکن جب تک آپ اپ ڈیٹ نہیں کرتے تب تک آپ میسجز بھیج یا وصول نہیں کر پائیں گے۔ کوئی ویب براؤزر نہیں ملا۔ @@ -218,7 +218,7 @@ صارفی نام سے تلاش کریں - میری اسٹوریز + میری سٹوریز نئی سٹوری @@ -673,7 +673,7 @@ نئے گروپس کیا ہیں؟ نئے گروپس میں @ ذکر اور گروپ منتظمین کی طرح کی خصوصیات ہیں ، اور آئندہ وہ مزید خصوصیات کی حمایت کریں گی۔ - اپ ڈیٹ کرنے سے پہلے ہی پیغام کی تمام تاریخ اور میڈیا کو رکھا گیا ہے۔ + اپ ڈیٹ کرنے سے پہلے میسج کی تمام ہسٹری اور میڈیا کو رکھا گیا ہے۔ آپ کو دوبارہ اس گروپ میں شامل ہونے کے لئے دعوت نامہ قبول کرنے کی ضرورت ہوگی ، اور جب تک آپ قبول نہ کریں گروپ پیغامات موصول نہیں ہوں گے۔ اس ممبر کو دوبارہ اس گروپ میں شامل ہونے کے لئے ایک دعوت نامہ قبول کرنے کی ضرورت ہوگی اور وہ گروپ پیغامات وصول نہیں کریں گے جب تک کہ وہ قبول نہ کریں: @@ -688,7 +688,7 @@ نئے گروپ میں اپ گریڈ کریں اس گروپ کو اپ گریڈ کریں نئے گروپس میں @ ذکر اور گروپ منتظمین کی طرح کی خصوصیات ہیں ، اور آئندہ وہ مزید خصوصیات کی حمایت کریں گی۔ - اپ گریڈ کرنے سے پہلے ہی پیغام کی تمام تاریخ اور میڈیا کو رکھا جائے گا۔ + اپ گریڈ کرنے سے پہلے میسج کی تمام ہسٹری اور میڈیا کو محفوظ رکھا جائے گا۔ نیٹ ورک کی خرابی کا سامنا کرنا پڑا۔ بعد میں دوبارہ کوشش کریں۔ اپ گریڈ کرنے میں ناکام۔ @@ -1524,7 +1524,7 @@ آپ - میری اسٹوری + میری سٹوری بلاک @@ -1542,7 +1542,7 @@ نیٹ ورک ناکام ہوگیا! نمبر رجسٹر نہیں ہے! جو نمبر آپ نے ڈائل کیا ہے محفوظ آواز سپورٹ نہیں کر رہا! - یہ مل گیا + سمجھ گیا @@ -1855,9 +1855,9 @@ آپ نے گفٹ بیج ریڈیم کیا - %1$s نے آپ کی اسٹوری پر ردعمل دیا + آپ کی سٹوری پر %1$s ردعمل دیا - %1$s نے ان کی اسٹوری پر ردعمل دیا + ان کی سٹوری پر %1$s ردعمل دیا Molly اپ ڈیٹ @@ -1960,6 +1960,7 @@ %1$s کی طرف سے آپ کے لیے میڈیا اب دستیاب نہیں ہے۔ کوئی ایپ اس میڈیا کو شیئر کرنے کے قابل نہیں پاسکتی ہے۔ + بند کریں %1$dنئے پیغامات %2$dگفتگو میں @@ -2038,7 +2039,7 @@ پیغام کی درخواست آپ - %1$s • اسٹوری + %1$s • سٹوری ویڈیو چلائیں @@ -2198,9 +2199,9 @@ تم اصل میسج نہیں ملا - %1$s · اسٹوری + %1$s · سٹوری - آپ · اسٹوری + آپ · سٹوری مزید دستیاب نہیں @@ -2343,7 +2344,7 @@ بھیجا گیا ٹائم اسٹیمپ کلپ بورڈ پر کاپی کر دیا گیا۔ - آپ کی اسٹوری کی اپ ڈیٹس یہاں دکھائی جائیں گی۔ + آپ کی سٹوری کی اپ ڈیٹس یہاں دکھائی جائیں گی۔ @@ -2605,7 +2606,7 @@ ایک وقتی عطیہ رازداری - اسٹوریز + سٹوریز ایم ایم ایس صارف ایجنٹ مختصر ایم ایم ایس کی ترتیبات ایم ایم ایس سی یو آر ایل @@ -2623,7 +2624,7 @@ ادائیگی (بیٹا) گفتگو کی لمبائی کی حد پیغامات رکھیں - پیغام کی تاریخ صاف کریں + میسج کی ہسٹری صاف کریں منسلک مشینیں روشنی اندھیرا @@ -2657,7 +2658,7 @@ جب وائی فائی استعمال کریں جب رومنگ ہو رہی ہو میڈیا آٹو ڈاون لوڈ - پیغام کی تاریخ + میسج کی ہسٹری اسٹوریج استعمال فوٹوز ویڈیوز @@ -2665,12 +2666,12 @@ آڈیو اسٹورج جائزہ پرانے پیغامات کو حذف کریں؟ - پیغام کی تاریخ صاف کریں؟ - یہ آپ کے آلے سے پیغام کی تاریخ اور میڈیا کو مستقل طور پر حذف کردے گا جو %1$s سے زیادہ پرانے ہیں۔ + میسج کی ہسٹری صاف کریں؟ + یہ آپ کی ڈیوائس سے میسج کی تمام ہسٹری اور میڈیا کو مستقل طور پر ڈیلیٹ کر دے گا جو %1$s سے زیادہ پرانے ہیں۔ اس سے تمام مکالموں کو %1$s حالیہ پیغامات میں مستقل طور پر ٹرم کیا جائے گا۔ - یہ آپ کے آلے سے پیغام کی تمام تاریخ اور میڈیا کو مستقل طور پر حذف کردے گا۔ - کیا آپ واقعی پیغام کی پوری تاریخ کو حذف کرنا چاہتے ہیں؟ - پیغام کی تمام تاریخ کو مستقل طور پر ختم کردیا جائے گا۔ اس کارروائی کو کالعدم نہیں کیا جاسکتا۔ + یہ آپ کی ڈیوائس سے میسج کی تمام ہسٹری اور میڈیا کو مستقل طور پر ڈیلیٹ کردے گا۔ + کیا آپ واقعی میسج کی ساری ہسٹری کو ڈیلیٹ کرنا چاہتے ہیں؟ + میسج کی ساری ہسٹری کو مستقل طور پر ختم کر دیا جائے گا۔ اس کارروائی کو کالعدم نہیں کیا جا سکتا۔ اب سب کو حذف کریں ہمیشہ کے لئے 1 سال @@ -2748,10 +2749,14 @@ آپشن کو کسٹمائز کریں + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2904,6 +2909,26 @@ ابھی نہیں + + + سکیورٹی سیٹ اپ + + اپنے فنڈز کی حفاظت کریں + + سکیورٹی کی ایک اور تہہ شامل کر کے اپنا فون استعمال کرنے والے فرد کو اپنے فنڈز تک رسائی کرنے سے روکنے میں مدد کریں۔ آپ اس آپشن کو سیٹنگز میں غیر فعال کر سکتے ہیں۔ + + پیمنٹ لاک کو فعال کریں + + ابھی نہیں + + اس اقدام کو موخر کریں؟ + + اس اقدام کو موخر کرنا آپ کے فون تک طبعی رسائی رکھنے والے کسی بھی فرد کو فنڈز ٹرانسفر کرنے یا اہنی بحالی کی عبارت ملاحظہ کرنے کی اجازت دے سکتا ہے۔ + + منسوخ کریں + + چھوڑ دو + فنڈز شامل کریں آپ کا Wallet کا پتہ @@ -4256,9 +4281,9 @@ پیغام شامل کریں زیادہ تیز فارورڈز - ویڈیوز کو کاٹ کر 30 سیکنڈ کے کلپس بنا دیے جائیں گے اور متعدد اسٹوریز کے طور پر بھیجا جائے گا۔ + ویڈیوز کو کاٹ کر 30 سیکنڈ کے کلپس بنا دیے جائیں گے اور متعدد سٹوریز کے طور پر بھیجا جائے گا۔ - اسٹوریز پر بھیجی جانے والی ویڈیوز 30 سیکنڈ سے لمبی نہیں ہو سکتیں۔ + سٹوریز پر بھیجی جانے والی ویڈیوز 30 سیکنڈ سے لمبی نہیں ہو سکتیں۔ فارورڈ کردہ پیغامات اب فوری طور پر بھیجے جاتے ہیں۔ %1$d پیغام بھیجیں @@ -4699,21 +4724,21 @@ باتیں - اسٹوریز + سٹوریز 99+ سٹوری کی پرائیویسی - میری اسٹوریز + میری سٹوریز سٹوری شامل کرنے کے لیے ٹیپ کریں فی الوقت دکھانے کے لیے کوئی حالیہ اپ ڈیٹس نہیں ہیں۔ - اسٹوری مخفی کریں + سٹوری مخفی کریں - اسٹوری غیر مخفی کریں + سٹوری غیر مخفی کریں آگے @@ -4733,15 +4758,15 @@ دوبارہ کوشش کرنے کے لیے ٹیپ کریں - اسٹوری مخفی کریں؟ + سٹوری مخفی کریں؟ - %1$s سے نئی اسٹوری کی اپ ڈیٹس اسٹوریز کی فہرست کے بالائی حصے میں ظاہر نہیں ہوں گی۔ + %1$s کی سٹوری کی نئی اپ ڈیٹس سٹوریز کی فہرست کے بالائی حصے میں ظاہر نہیں ہوں گی۔ پوشیدہ کریں - اسٹوری مخفی ہے + سٹوری مخفی ہے - مخفی اسٹوریز + مخفی سٹوریز %1$d ویو @@ -4750,11 +4775,11 @@ آگے - %1$s کی اسٹوری + %1$s کی سٹوری - اسٹوری حذف کریں؟ + سٹوری ڈیلیٹ کریں؟ - یہ اسٹوری آپ اور اسے وصول کرنے والے ہر ایک کے لیے حذف کر دی جائے گی۔ + یہ سٹوری آپ اور اسے وصول کرنے والے ہر ایک کے لیے ڈیلیٹ کر دی جائے گی۔ محفوظ کرنے سے قاصر ہیں @@ -4786,7 +4811,7 @@ ابھی تک کوئی ویوز نہیں - میسج پڑھنے کا ثبوت فعال کریں تاکہ دیکھ سکیں کہ کس نے آپ کی اسٹوریز دیکھی ہیں۔ + میسج پڑھنے کا ثبوت فعال کریں تاکہ دیکھ سکیں کہ کس نے آپ کی سٹوریز دیکھی ہیں۔ سیٹنگز پر جائیں @@ -4799,14 +4824,16 @@ ناظر کو ہٹائیں ابھی تک کوئی جوابات نہیں + + آپ اس سٹوری کا جواب نہیں دے سکتے کیونکہ آپ اس گروپ کے ممبر نہیں رہے۔ - اسٹوری پر ردعمل دیا + سٹوری پر ردعمل دیا ویوز جوابات - اس اسٹوری پر ردعمل دیں + اس سٹوری پر ردعمل دیں %1$s کو نجی طور پر جواب دینا @@ -4816,11 +4843,18 @@ حذف کریں - میری اسٹوری + میری سٹوری + + + %1$d viewer + %1$d viewers + + + View کون یہ سٹوری دیکھ سکتا ہے - اس سے اسٹوری مخفی کریں + اس سے سٹوری مخفی کریں تمام Signal کنکشنز @@ -4828,7 +4862,7 @@ تمام ماسوائے… - منتخب لوگوں کو اپنی سٹوری مت دکھائیں + منتخب لوگوں سے اپنی سٹوری مخفی کریں %1$d فرد خارج کر دیا گیا @@ -4844,15 +4878,13 @@ %1$d افراد - انتخاب کریں کہ کون آپ کی اسٹوری دیکھ سکتا ہے۔ تبدیلیاں ان اسٹوریز کو متاثر نہیں کریں گی جو آپ پہلے ہی بھیج چکے ہیں۔ + انتخاب کریں کہ کون آپ کی سٹوری دیکھ سکتا ہے۔ تبدیلیاں ان سٹوریز کو متاثر نہیں کریں گی جو آپ پہلے ہی بھیج چکے ہیں۔ جوابات & ردعمل جوابات &ردعمل کو اجازت دیں - اپنی اسٹوری دیکھنے والے لوگوں کو ردعمل اور جواب دینے کی اجازت دیں - - مخصوص لوگوں سے اپنی اسٹوری مخفی کریں۔ ڈیفالٹ کے طور پر، آپ کی اسٹوری آپ کے %1$s کے ساتھ شیئر کی جاتی ہے + اپنی سٹوری دیکھنے والے لوگوں کو ردعمل اور جواب دینے کی اجازت دیں Signal کنکشنز @@ -4864,15 +4896,15 @@ اپنے سسٹم کے روابط میں انہیں رکھنے سے - "آپ کے کنکشنز آپ کا نام اور تصویر دیکھ سکتے ہیں، اور \"میری اسٹوری\" پر پوسٹس کو دیکھ سکتے ہیں تاوقتیکہ آپ ان سے مخفی کریں۔" + "آپ کے کنکشنز آپ کا نام اور تصویر دیکھ سکتے ہیں، اور \"میری سٹوری\" پر پوسٹس کو دیکھ سکتے ہیں تاوقتیکہ آپ ان سے مخفی کریں۔" ناظر شامل کریں - نجی اسٹوری حذف کریں + نجی سٹوری ڈیلیٹ کریں %1$s ہٹائیں؟ - یہ فرد مزید آپ کی اسٹوری نہیں دیکھے گا۔ + یہ فرد مزید آپ کی سٹوری نہیں دیکھے گا۔ ہٹا دیں @@ -4880,9 +4912,9 @@ یہ ایکشن کالعدم نہیں کیا جا سکتا۔ - اسٹوری کے نام میں ترمیم کریں + سٹوری کے نام میں ترمیم کریں - اسٹوری کا نام + سٹوری کا نام محفوظ کریں @@ -4900,7 +4932,7 @@ URL ٹائپ یا پیسٹ کریں - ناظرین کے ساتھ اپنی اسٹوری کا لنک شیئر کریں + ناظرین کے ساتھ اپنی سٹوری کا لنک شیئر کریں تلاش کریں @@ -4911,22 +4943,40 @@ صرف ان کے ساتھ شیئر کریں… ہو گیا + + گروپ سٹوری ہٹائیں؟ + + \"%1$s\" کو ہٹا دیا جائے گا۔ + + ہٹا دیں + + پرائیویٹ سٹوری ڈیلیٹ کرنی ہے؟ + + \"%1$s\" اور اس سٹوری پر شیئر کردہ اپ ڈیٹس ڈیلیٹ کر دی جائیں گی۔ + + حذف کریں + + سٹوریز صرف Signal بی ٹا صارفین کے لیے دستیاب ہیں۔ + + اگر آپ سٹوری شیئر کرتے ہیں، تو یہ صرف Signal بی ٹا پر موجود لوگوں کو دستیاب ہو گی۔ - اسٹوری میں شامل کریں؟ + سٹوری میں شامل کریں؟ - اپنی اسٹوری میں مواد شامل کرنا آپ کے Signal کنکشنز کو 24 گھنٹوں کے لیے اسے دیکھنے کی اجازت دیتا ہے۔ آپ ترتیبات میں یہ تبدیل کر سکتے ہیں کہ آپ کی اسٹوری کون دیکھ سکتا ہے۔ + اپنی سٹوری میں مواد شامل کرنا آپ کے Signal کنکشنز کو 24 گھنٹوں کے لیے اسے دیکھنے کی اجازت دیتا ہے۔ آپ سیٹنگز میں یہ تبدیل کر سکتے ہیں کہ آپ کی سٹوری کون دیکھ سکتا ہے۔ - اسٹوری میں شامل کریں + سٹوری میں شامل کریں ناظرین میں ترمیم کریں - اسٹوری بھیجی نہیں جا سکی۔ اپنا کنکشن چیک کریں اور دوبارہ کوشش کریں۔ + سٹوری بھیجی نہیں جا سکی۔ اپنا انٹرنیٹ چیک کریں اور دوبارہ کوشش کریں۔ بھیجیں + + آف اور ڈیلیٹ کریں - اسٹوریز شیئر کریں & دیکھیں + سٹوریز شیئر کریں اور دیکھیں - آپ اس آپشن کے آف ہوتے ہوئے اسٹوریز شیئر کرنے یا دیکھنے کے مزید قابل نہیں ہوں گے۔ + آپ اس آپشن کے آف ہوتے ہوئے مزید سٹوریز شیئر کرنے یا دیکھنے کے قابل نہیں ہوں گے۔ ناظرین کا انتخاب کریں @@ -4937,9 +4987,9 @@ %1$d ناظرین - اسٹوری کو نام دیں + سٹوری کو نام دیں - اسٹوری کا نام (درکار ہے) + سٹوری کا نام (درکار ہے) ناظرین @@ -4947,17 +4997,17 @@ اس کو پر کرنا ضروری ہے. - اس نام کے ساتھ ایک اسٹوری پہلے سے موجود ہے۔ + اس نام کے ساتھ ایک سٹوری پہلے سے موجود ہے۔ تمام منتخب کریں - اپنی اسٹوری کی قسم منتخب کریں + اپنی سٹوری کی قسم منتخب کریں - نئی نجی اسٹوری + نئی نجی سٹوری صرف مخصوص لوگوں کو دکھائی دیتی ہے - گروپ اسٹوری + گروپ سٹوری موجودہ گروپ پر شیئر کریں @@ -4969,17 +5019,17 @@ جواب بھیجا جا رہا ہے… - یہ اسٹوری مزید دستیاب نہیں۔ + یہ سٹوری مزید دستیاب نہیں۔ کوئی انٹرنیٹ کنکشن نہیں مواد لوڈ نہیں کر سکے - اسٹوری بھیج دی گئی + سٹوری بھیج دی گئی - اسٹوری بھیجنے میں ناکامی ہوئی + سٹوری بھیجنے میں ناکامی ہوئی - اسٹوری دیکھیں + سٹوری دیکھیں پروفائل تصویر دیکھیں @@ -4993,11 +5043,11 @@ بند کریں - آپ نے %1$s کی اسٹوری پر ردعمل دیا + آپ نے %1$s کی سٹوری پر ردعمل دیا - آپ کی اسٹوری پر ردعمل دیا + آپ کی سٹوری پر ردعمل دیا - اسٹوری پر ردعمل دیا + سٹوری پر ردعمل دیا @@ -5060,16 +5110,21 @@ ابھی نہیں - صرف ان کے ساتھ شیئر کریں + صرف ان سے شیئر کریں - نجی اسٹوری · %1$d ویور - نجی سٹوری · %1$d ویورز + نجی سٹوری · %1$d ناظر + نجی سٹوری · %1$d ناظرین - گروپ اسٹوری · %1$d ویور - گروپ سٹوری · %1$d ویورز + گروپ سٹوری · %1$d ناظر + گروپ سٹوری · %1$d ناظرین + + + + %1$dممبر + %1$dممبروں @@ -5079,21 +5134,21 @@ اپنے ناظرین کے انتخاب کے لیے ٹیپ کریں - اسٹوری کی ترتیبات + سٹوری کی سیٹنگز - اسٹوری ہٹائیں + سٹوری ہٹائیں - اسٹوری ڈیلیٹ کریں + سٹوری ڈیلیٹ کریں - گروپ اسٹوری ہٹائیں؟ + گروپ سٹوری ہٹائیں؟ - اس سے سٹوری آپ کی فہرست سے ہٹ جائے گی۔ آپ پھر بھی اس گروپ سے اسٹوریز دیکھنے سکیں گے۔ + اس سے سٹوری اس فہرست سے ہٹ جائے گی۔ آپ پھر بھی اس گروپ سے سٹوریز دیکھ سکیں گے۔ ہٹا دیں - اسٹوری حذف کریں؟ + سٹوری ڈیلیٹ کریں؟ - پرائیویٹ اسٹوری \"%1$s\" ڈیلیٹ کریں؟ + پرائیویٹ سٹوری \"%1$s\" ڈیلیٹ کریں؟ حذف کریں @@ -5121,7 +5176,7 @@ اخراج کے لیے دائیں سوائپ کریں - یہ مل گیا + سمجھ گیا عبارتی مینو کھولیں @@ -5139,11 +5194,11 @@ تمام کنکشنز کا جائزہ لیا گیا ہے، جاری رکھنے کے لیے بھیجیں پر ٹیپ کریں۔ - آپ کے %1$d کنکشنز نے شاید Signal کو دوبارہ انسٹال یا ڈیوائسز کو تبدیل کیا ہو گا۔ ان کے ساتھ اپنی اسٹوری شیئر کرنے سے پہلے ان کے حفاظتی نمبرز کا جائزہ لیں یا انہیں اپنی اسٹوری سے ہٹانے پر غور کریں۔ + آپ کے %1$d کنکشنز نے شاید Signal کو دوبارہ انسٹال یا ڈیوائسزکو تبدیل کیا ہو گا۔ ان کے ساتھ اپنی سٹوری شیئر کرنے سے پہلے ان کے حفاظتی نمبرز کا جائزہ لیں یا انہیں اپنی سٹوری سے ہٹانے پر غور کریں۔ حفاظتی نمبر کی تصدیق کریں - اسٹوری سے ہٹائیں + سٹوری سے ہٹائیں بہر حال بھیجیں @@ -5167,9 +5222,9 @@ ہٹا دیں - میری اسٹوری کی پرائیویسی + میری سٹوری کی پرائیویسی - ان کا انتخاب کریں جو میری اسٹوری پر پوسٹس دیکھ سکتے ہیں۔ آپ سیٹنگز میں ہمیشہ تبدیلیاں کر سکتے ہیں۔ + ان کا انتخاب کریں جو میری سٹوری پر پوسٹس دیکھ سکتے ہیں۔ آپ سیٹنگز میں ہمیشہ تبدیلیاں کر سکتے ہیں۔ تمام Signal کنکشنز @@ -5206,7 +5261,7 @@ سٹوریز آف کریں؟ - آپ سٹوریز مزید شیئر کرنے یا دیکھنے سے قاصر ہوں گے۔ آپ کی جانب سے حال ہی میں بھیجی گی سٹوریز اپنی میعاد پوری ہونے تک دوسروں کو نظر آئیں گی۔ + آپ مزید سٹوریز شیئر کرنے یا دیکھنے سے قاصر ہوں گے۔ آپ کی طرف سے حالیہ شیئر کردہ سٹوری اپ ڈیٹس بھی ڈیلیٹ ہو جائیں گی۔ سٹوری کی پرائیویسی diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 00ba7eee09..2a2711490c 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1476,7 +1476,7 @@ Lỗi mạng! Số điện thoại chưa đăng ký! Số điện thoại vừa rồi không hỗ trợ cuộc gọi bảo mật! - Đã rõ + Đã hiểu @@ -1886,6 +1886,7 @@ %1$s gửi đến bạn Tệp đa phương tiện không còn khả dụng. Không thể tìm được ứng dụng có thể chia sẻ tệp đa phương tiện này. + Đóng %1$d tin nhắn mới trong %2$d cuộc trò chuyện @@ -2662,10 +2663,14 @@ Sửa cài đặt + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ Để sau + + + Thiết lập bảo mật + + Bảo vệ tài khoản thanh toán của bạn + + Giúp ngăn việc người khác sử dụng điện thoại của bạn và truy cập tài khoản thanh toán bằng cách thêm một lớp bảo mật. Bạn có thể tắt tùy chọn này trong mục Cài đặt. + + Bật khóa thanh toán + + Để sau + + Bỏ qua bước này? + + Nếu bạn bỏ qua bước này, bất kỳ ai sử dụng điện thoại của bạn cũng có thể thực hiện việc thanh toán hoặc xem cụm từ khôi phục của bạn. + + Hủy + + Bỏ qua + Thêm quỹ Địa chỉ Ví của bạn @@ -4692,6 +4717,8 @@ Gỡ người xem Chưa có phản hồi + + Bạn không thể trả lời story này vì bạn không còn là thành viên của nhóm này. Đã bày tỏ cảm xúc với story @@ -4710,6 +4737,12 @@ Xóa Story của tôi + + + %1$d viewers + + + View Ai có thể xem story này @@ -4742,8 +4775,6 @@ Cho phép trả lời & bày tỏ cảm xúc Cho phép những người có thể xem story của bạn bày tỏ cảm xúc và trả lời - - Ẩn story của bạn với một số người nhất định. Theo mặc định, story của bạn được chia sẻ với %1$s của bạn Các Liên hệ Signal @@ -4802,6 +4833,22 @@ Chỉ chia sẻ với… Xong + + Gỡ story nhóm? + + \"%1$s\" sẽ được xóa. + + Xóa + + Xóa story riêng tư? + + \"%1$s\" và các cập nhật cho story này sẽ được xóa. + + Xóa + + Story chỉ khả dụng cho những người sử dụng phiên bản beta của Signal. + + Nếu bạn chia sẻ một story, story đó sẽ chỉ có thể được xem bởi những người sử dụng phiên bản beta của Signal. Thêm vào story? @@ -4811,9 +4858,11 @@ Chỉnh người xem - Không thể gửi story. Hãy kiểm tra kết nối và thử lại. + Không thể gửi story. Kiểm tra kết nối và thử lại. Gửi + + Tắt và xóa Chia sẻ & Xem Story @@ -4958,6 +5007,10 @@ Story nhóm · %1$d người xem + + + %1$d thành viên + %1$s · %2$d người xem @@ -5004,7 +5057,7 @@ Vuốt phải để thoát - Đã cài đặt xong + Đã hiểu Mở menu chuột phải @@ -5051,7 +5104,7 @@ Sự Riêng tư của Story của tôi - Chọn người có thể xem bài đăng trong mục Story Của Tôi. Bạn luôn có thể thay đổi trong mục cài đặt. + Chọn người có thể xem bài đăng trong mục Story của tôi. Bạn luôn có thể thay đổi trong mục cài đặt. Tất cả liên hệ Signal @@ -5088,7 +5141,7 @@ Tắt story? - Bạn sẽ không thể tiếp tục chia sẻ hoặc xem story. Bất kỳ story nào bạn đã gửi gần đây vẫn có thể được xem bởi các người dùng khác cho đến khi story hết hạn. + Bạn sẽ không thể tiếp tục chia sẻ hoặc xem story. Các cập nhật story gần đây của bạn cũng sẽ được xóa. Sự Riêng tư của Story diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index a2fa506d0e..0c6576469e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -192,7 +192,7 @@ 更新 不要更新 警告 - 您的 Signal 版本已过期,目前您只能查看历史消息,只有升级后才能收发消息。 + 您的 Signal 版本已过期,目前您只能查看消息记录,并且在升级 Signal 后才能收发消息。 未找到网页浏览器。 @@ -650,7 +650,7 @@ 什么是新版群组? 新版群组支持@提醒和群管理员的功能,未来还将支持更多功能。 - 升级前已保留聊天和媒体记录。 + 升级前已保存消息记录和媒体文件。 您需要再次同意入群邀请。同意邀请之前,您将不会收到群组消息。 这些成员需要再次同意入群邀请来加入群组,其同意前不会收到群组消息: @@ -663,7 +663,7 @@ 升级到新版群组 升级此群组 新版群组支持@提醒和群管理员的功能,未来还将支持更多功能。 - 升级前将保留现有的聊天和媒体记录。 + 升级前将保存消息记录和媒体文件。 网络错误,请稍候重试。 升级失败 @@ -1288,9 +1288,9 @@ 喜欢这个新功能吗?请通过单次捐款支持 Signal 吧。 - 您与%1$s的消息历史记录和对方的号码 %2$s 已合并。 + 您与%1$s的消息记录和对方的号码 %2$s 已合并。 - 您与%1$s的消息历史记录和属于对方的其他聊天已合并。 + 您与%1$s的消息记录和属于对方的其他聊天信息已合并。 %1$s发起了群组通话 · %2$s @@ -1886,6 +1886,7 @@ %1$s发送给您 媒体已失效。 未找到可分享此媒体的应用。 + 关闭 %2$d 个对话中有 %1$d 条新消息 @@ -2579,12 +2580,12 @@ 音频 查看存储 删除更早消息? - 清除消息记录? - 这将从您的设备中,永久删除所有早于%1$s的聊天记录和媒体。 + 要清除消息记录吗? + 这将从您的设备中永久删除所有早于 %1$s的消息记录和媒体文件。 这将删减对话使之仅保留最近%1$s条消息。 - 这将从您的设备中,永久删除所有聊天记录和媒体。 - 您要删除所有聊天记录吗? - 将清空所有聊天记录,此操作无法撤销。 + 这将从您的设备中永久删除所有消息记录和媒体文件。 + 您确定要删除所有消息记录吗? + 所有消息记录将会被永久删除。此操作无法撤销。 马上删除所有 永久 1 年 @@ -2662,10 +2663,14 @@ 自定义选项 + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ 以后再说 + + + 安全设置 + + 保护您的资金 + + 额外增加一层保护,防止接触到您手机的人获取您的资金。您可以在设置中禁用该选项。 + + 启用付款锁 + + 稍后再说 + + 要跳过这一步吗? + + 如果您跳过这一步,接触您手机的任何人均可以转移您的资金或查看您的恢复短语。 + + 取消 + + 跳过 + 添加资金 您的钱包地址 @@ -4649,7 +4674,7 @@ 要删除动态吗? - 您和收到此动态的所有人将看不到此动态 。 + 您和收到此动态的所有人将看不到此动态。 无法保存 @@ -4692,6 +4717,8 @@ 移除访客 未有回复 + + 您已不是此群组的成员,因此不能回复此动态。 已回应此动态 @@ -4710,10 +4737,16 @@ 删除 我的动态 + + + %1$d viewers + + + View 谁可以看到此动态 - 隐藏动态的对象 + 隐藏动态: 所有 Signal 联系人 @@ -4741,9 +4774,7 @@ 允许回复和反应 - 让能够看到您的动态的人回应和回复 - - 对特定用户隐藏您的动态。您的动态默认与%1$s分享 + 让您的动态的可见对象回应和回复 Signal 联系人 @@ -4755,7 +4786,7 @@ 对方在您的系统通讯录中 - "您的熟人能看到您的名称和照片,还能看到您在“我的动态”中发布的帖子,除非您向对方隐藏动态。" + "您的密友能看到您的名称和照片,还能看到您在“我的动态”中发布的帖子,除非您向对方隐藏动态。" 添加访客 @@ -4802,10 +4833,26 @@ 只分享给…… 完成 + + 要移除群组动态吗? + + “%1$s”将被移除。 + + 删除 + + 要删除私密动态吗? + + 分享到此动态的“%1$s”和更新将被移除。 + + 删除 + + 动态仅对 Signal 测试版用户开放。 + + 如果您分享动态,此动态仅对 Signal 测试版用户可见。 要添加到动态吗? - 在您的动态中添加内容可供您的 Signal 熟人浏览 24 小时。您可以在设置中更改谁可以看您的动态。 + 在您的动态中添加内容可供您的 Signal 密友浏览 24 小时。您可以在设置中更改动态的可见对象。 添加到动态 @@ -4814,6 +4861,8 @@ 动态无法发送。请检查您的网络连接并重试。 发送 + + 关闭和删除 分享和浏览动态 @@ -4837,7 +4886,7 @@ 必须填写此项。 - 以此命名的动态已存在。 + 此动态名称已被使用。 选择全部 @@ -4859,7 +4908,7 @@ 正在发送回复…… - 此动态已不存在 + 此动态已不存在。 无可用的互联网连接 @@ -4887,7 +4936,7 @@ 已回应您的动态 - 对动态有回应 + 已回应动态 @@ -4958,6 +5007,10 @@ 群组动态 · %1$d 位访客 + + + %1$d 位成员 + %1$s · %2$d 位访客 @@ -5022,7 +5075,7 @@ 已检查所有联系人,请点击发送以继续操作。 - 您有 %1$d 个联系人可能已重新安装 Signal 或更改设备。在与他们分享您的动态之前,请检查对方的安全码或考虑将他们从您的动态中移除。 + 您有 %1$d 位密友可能已重新安装 Signal 或更改设备。在与他们分享您的动态之前,请检查对方的安全码或考虑将他们从您的动态中移除。 验证安全代码 @@ -5051,7 +5104,7 @@ 我的动态隐私 - 选择谁可以查看“我的动态”中的贴文。您可以随时在设置中更改。 + 选择谁可以查看“我的动态”帖子。您可以随时在设置中更改。 所有 Signal 熟人 @@ -5088,7 +5141,7 @@ 要关闭动态吗? - 您将无法再分享或浏览动态。您最近发布的任何动态在到期之前仍然对其他人可见。 + 您将无法再分享或浏览动态。您最近发布的动态更新也将会被删除。 动态隐私 @@ -5096,7 +5149,7 @@ 谁可以看到此动态 - "“%1$s” 群组的成员可以浏览和回复此动态。您可以更新此群组聊天的成员资格。" + "“%1$s”群组的成员可以浏览和回复此动态。您可以更新此群组聊天的成员资格。" 移除群组动态 @@ -5111,7 +5164,7 @@ 导出您的短信消息 - 您可以将您的短信消息导出到您手机的短信数据库中。这样一来您手机上的其他短信应用就可以访问和导入这些消息。此操作不会为您的短信消息历史记录创建共享文件。 + 您可以将您的短信消息导出到您手机的短信数据库中。这样一来您手机上的其他短信应用就可以访问和导入这些消息。此操作不会为您的短信消息记录创建共享文件。 继续 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 3d7f59f5d6..025fa5549a 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -192,7 +192,7 @@ 更新 不要更新 警告 - 您的 Signal 版本已過期。您可查看您的訊息歷程記錄,惟無法傳送或接收訊息,直到您更新為止。 + 你的 Signal 版本已過期。你可以瀏覽訊息紀錄,但無法傳送或接收訊息,直到你更新版本為止。 找不到網頁瀏覽器 @@ -650,7 +650,7 @@ 「新版群組」是甚麼? 「新版群組」備有諸如 @提及 和群組管理員功能,日後亦會支援更多功能。 - 升級前的所有訊息歷程記錄和媒體均已保留。 + 升級前的所有訊息紀錄和媒體均已保留。 您將需要接受邀請才可再次加入此群組,而且在您接受之前,將不會接收群組訊息。 這些成員將需要接受邀請才可再次加入此群組,而且各人在接受之前,將不會接收群組訊息: @@ -663,7 +663,7 @@ 升級至新版群組 升級此群組 「新版群組」備有諸如 @提及 和群組管理員功能,日後亦會支援更多功能。 - 升級前的所有訊息歷程記錄和媒體均會保留。 + 升級前的所有訊息紀錄和媒體均會保留。 遇到網絡問題。請稍後再試。 升級失敗。 @@ -1886,6 +1886,7 @@ %1$s 給您 媒體不再可用。 找不到能夠分享此媒體的應用程式。 + 關閉 來自 %2$d 個對話的 %1$d 則新訊息 @@ -2122,7 +2123,7 @@ %1$s · 限時動態 - 您 · 限時動態 + 你 · 限時動態 不再可用 @@ -2537,7 +2538,7 @@ 付款 (測試版) 對話長度上限 保留訊息 - 清除訊息歷程記錄 + 清除訊息紀錄 已連結的裝置 淺色 深色 @@ -2571,7 +2572,7 @@ 當使用 Wi-Fi 時 當漫遊時 媒體自動下載 - 訊息歷程記錄 + 訊息紀錄 儲存空間用量 相片 影片 @@ -2579,12 +2580,12 @@ 音訊 檢閱儲存空間 要刪除較舊的訊息嗎? - 要清除訊息歷程記錄嗎? - 這將會從您的裝置上永久刪除所有 %1$s之前的訊息歷程記錄和媒體。 + 要清除訊息紀錄嗎? + 這操作將會從你的裝置永久刪除 %1$s 之前的所有訊息紀錄和媒體。 這將會永久刪減所有對話至最近 %1$s 則訊息。 - 這將會從您的裝置上永久刪除所有訊息歷程記錄和媒體。 - 您確定要刪除所有訊息歷程記錄嗎? - 所有訊息歷程記錄將會永久移除。此動作無從復原。 + 這操作將會從你的裝置永久刪除所有訊息紀錄和媒體。 + 你確定要刪除所有訊息紀錄嗎? + 所有訊息紀錄將會被永久移除。此動作將無法復原。 立即全部刪除 永久 1 年 @@ -2662,10 +2663,14 @@ 自訂選項 + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ 暫時不要 + + + 安全設定 + + 保護你的資金 + + 多加一重安全保障,防止有人使用你的手機存取你的資金。你可以在「設定」中停用此選項。 + + 啟用付款鎖定 + + 現在不要 + + 要跳過此步驟嗎? + + 跳過此步驟會讓實際使用你手機的任何人轉移資金或查看你的恢復片語。 + + 取消 + + 略過 + 增加款項 您的錢包位址 @@ -4157,7 +4182,7 @@ 新增訊息 轉寄更快速 - 影片會被修剪成 30 秒,並作為多個限時動態傳送。 + 影片會被剪輯成 30 秒,並作為多則限時動態發送。 發送到限時動態的影片不得超過 30 秒。 訊息轉寄現將立即傳送。 @@ -4599,7 +4624,7 @@ 99+ - 限時動態私隱 + 限時動態隱私 我的限時動態 @@ -4631,11 +4656,11 @@ 要隱藏限時動態嗎? - 來自 %1$s 新的限時動態更新將不再出現於限時動態清單之頂。 + 來自 %1$s 的新限時動態更新將不會再出現在限時動態清單的頂部。 隱藏 - 限時動態已隱藏 + 已隱藏限時動態 已隱藏的限時動態 @@ -4649,7 +4674,7 @@ 要刪除限時動態嗎? - 此限時動態將為您以及已接收的所有人刪除。 + 系統將為你和所有接收者刪除此限時動態。 無法儲存 @@ -4692,8 +4717,10 @@ 移除瀏覽者 未有回覆 + + 由於你不再是這群組的成員,因此你無法回覆此限時動態。 - 對此限時動態表達了心情 + 對限時動態表達了心情 觀看 @@ -4710,8 +4737,14 @@ 刪除 我的限時動態 + + + %1$d viewers + + + View - 誰可以看到此限時動態 + 誰可以瀏覽此限時動態 對這些人隱藏限時動態 @@ -4721,7 +4754,7 @@ 所有人,除了… - 對特定的人隱藏您的限時動態 + 對特定的人隱藏限時動態 排除了 %1$d 個人 @@ -4735,15 +4768,13 @@ %1$d 人 - 選擇誰可以觀看您的限時動態。這不會影響您在更改前發送的限時動態。 + 選擇誰可以瀏覽你的限時動態。這不會影響你在更改前發送的限時動態。 回覆和心情 允許回覆和表達心情 - 誰可檢視您的限時動態也可表達心情和回覆 - - 對特定人士隱藏您的限時動態。您的限時動態預設與您的 %1$s分享。 + 讓瀏覽限時動態的人表達心情和回覆 Signal 的人脈 @@ -4755,15 +4786,15 @@ 系統聯絡人中存在對方 - "您的人脈可以看見您的名稱和照片。除非您對他們隱藏,否則亦可看見「我的限時動態」中的帖文。" + "你的人脈可以看見你的名稱和照片。除非你對他們隱藏,否則他們亦可看見「我的限時動態」中的貼文。" 新增瀏覽者 - 刪除個人限時動態 + 刪除私人限時動態 要移除 %1$s 嗎? - 此人將不再看見您的限時動態。 + 此人將無法再看見你的限時動態。 移除 @@ -4802,22 +4833,40 @@ 只分享給… 完成 + + 要移除群組限時動態嗎? + + 「%1$s」將會被移除。 + + 移除 + + 要刪除私人限時動態嗎? + + 「%1$s」和分享到此限時動態的更新將會被刪除。 + + 刪除 + + 限時動態僅適用於 Signal 測試版用戶。 + + 只有使用 Signal 測試版的用戶能看到你分享的限時動態。 要新增至限時動態嗎? - 新增內容至您的限時動態,讓您的 Signal 人脈觀看 24 小時。您可在設定中變更誰可以觀看您的限時動態。 + 新增內容至你的限時動態,讓你的 Signal 人脈瀏覽 24 小時。你可以在「設定」中更改誰可以瀏覽你的限時動態。 新增至限時動態 編輯瀏覽者 - 限時動態無法傳送。請檢查您的連線,然後再試一次。 + 無法發送限時動態。請檢查你的網路連線,然後再試一次。 傳送 + + 關閉並刪除 - 分享與觀看限時動態 + 分享與瀏覽限時動態 - 關閉此選項時,您將無法再分享或觀看限時動態。 + 關閉此選項時,你將無法再分享或瀏覽限時動態。 選擇瀏覽者 @@ -4837,13 +4886,13 @@ 此欄位必填。 - 已有以此為名的限時動態。 + 同名的限時動態已經存在。 全選 - 選擇您的限時動態類型 + 選擇你的限時動態類型 - 新增個人限時動態 + 新增私人限時動態 僅限特定人士看得見 @@ -4859,17 +4908,17 @@ 正在傳送回覆… - 限時動態不再可用。 + 此限時動態不再適用。 無互聯網連線 無法載入內容 - 已傳送限時動態 + 已發送限時動態 - 限時動態傳送失敗 + 無法發送限時動態 - 檢視限時動態 + 瀏覽限時動態 檢視個人資料照片 @@ -4883,9 +4932,9 @@ 關閉 - 您對 %1$s 的限時動態表達了心情 + 你對 %1$s 的限時動態表達了心情 - 對您的限時動態表達了心情 + 對你的限時動態表達了心情 對一則限時動態表達了心情 @@ -4952,12 +5001,16 @@ 只分享給 - 個人限時動態 · %1$d 位瀏覽者 + 私人限時動態 · %1$d 位瀏覽者 群組限時動態 · %1$d 位瀏覽者 + + + %1$d 個成員 + %1$s · %2$d 位瀏覽者 @@ -4973,7 +5026,7 @@ 要移除群組限時動態嗎? - 這樣會從清單中移除限時動態。您仍然可以觀看此群組的限時動態。 + 這操作會從清單中移除限時動態。你仍然可以瀏覽此群組的限時動態。 移除 @@ -5049,9 +5102,9 @@ 移除 - 「我的限時動態」私隱設定 + 「我的限時動態」隱私設定 - 選擇誰可以看到「我的限時動態」的貼文。你可以隨時在設定中作出變更。 + 選擇誰可以看到「我的限時動態」貼文。你可以隨時在設定中作出更改。 所有 Signal 的人脈 @@ -5080,7 +5133,7 @@ 關閉限時動態 - 如果你選擇關閉限時動態,將無法再分享或瀏覽限時動態。 + 如果選擇關閉限時動態,你將無法再分享或瀏覽限時動態。 開啟限時動態 @@ -5088,15 +5141,15 @@ 要關閉限時動態嗎? - 你將無法再分享或瀏覽限時動態。其他人在限時內仍可看到你最近發佈的限時動態。 + 你將無法再分享或瀏覽限時動態。你最近分享的限時動態更新也將會被刪除。 - 限時動態私隱 + 限時動態隱私 - 誰可以看到此限時動態 + 誰可以瀏覽此限時動態 - "「%1$s」群組的成員均可瀏覽和回覆此限時動態。你可以更新此群組聊天的成員資格。" + "「%1$s」群組的成員可以瀏覽和回覆此限時動態。你可以更新此群組聊天的成員資格。" 移除群組限時動態 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 4ebe96e990..563bebbc97 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1886,6 +1886,7 @@ %1$s 給你 媒體已不存在。 找不到能夠分享此媒體檔案的應用程式。 + 關閉 %1$d 則新訊息在 %2$d 的對話中 @@ -2662,10 +2663,14 @@ 自定義選項 + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2818,6 +2823,26 @@ 暫時不要 + + + 安全設定 + + 保護你的資金 + + 多加一重安全保障,防止有人使用你的手機存取你的資金。你可以在「設定」中停用此選項。 + + 啟用付款鎖定 + + 稍後 + + 要跳過此步驟嗎? + + 跳過此步驟會讓實際使用你手機的任何人轉移資金或查看你的恢復片語。 + + 取消 + + 略過 + 增加資金 你的錢包位址 @@ -4692,6 +4717,8 @@ 移除瀏覽者 未有回覆 + + 由於你不再是這群組的成員,因此你無法回覆此限時動態。 以對此限時動態做出回應 @@ -4710,6 +4737,12 @@ 刪除 我的限時動態 + + + %1$d viewers + + + View 誰能瀏覽此限動 @@ -4742,8 +4775,6 @@ 允許回覆& 回應 誰可檢視你的限時動態也可表達心情和回覆 - - 對特定人士隱藏您的限時動態。你的限時動態預設與你的 %1$s分享。 Signal 聯絡人 @@ -4802,6 +4833,22 @@ 僅分享給… 完成 + + 要移除群組限動嗎? + + 「%1$s」將會被移除。 + + 移除 + + 要刪除私人限動? + + 「%1$s」和分享到此限時動態的更新將會被刪除。 + + 刪除 + + 限時動態僅適用於 Signal 測試版用戶。 + + 只有使用 Signal 測試版的用戶能看到你分享的限時動態。 要新增至限時動態嗎? @@ -4814,6 +4861,8 @@ 限時動態無法傳送。 檢查你的連接,然後重試。 傳送 + + 關閉並刪除 分享與觀看限時動態 @@ -4958,6 +5007,10 @@ 群組限動 · %1$d 位瀏覽者 + + + %1$d 個成員 + %1$s · %2$d 位瀏覽者 @@ -5088,7 +5141,7 @@ 要關閉限動嗎? - 你將無法再分享或瀏覽限動。任何你近期傳送給他人的限動,在到期之前仍可瀏覽。 + 你將無法再分享或瀏覽限時動態。你最近分享的限時動態更新也將會被刪除。 限動隱私 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d5fede91a2..4457e10baf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1965,6 +1965,7 @@ %1$s to you Media no longer available. Can\'t find an app able to share this media. + Close %1$d new messages in %2$d conversations @@ -2751,10 +2752,14 @@ Customize option + Turn off stories (with stories on disk) + Turn off stories + Delete private story Hide story Story or profile selector Stories dialog launcher Retry send + Remove group story Clear onboarding state Clears onboarding flag and triggers download of onboarding stories. Internal Preferences @@ -2907,6 +2912,26 @@ Not Now + + + Security setup + + Protect your funds + + Help prevent a person with your phone from accessing your funds by adding another layer of security. You can disable this option in Settings. + + Enable payment lock + + Not now + + Skip this step? + + Skipping this step could allow anyone who has physical access to your phone to transfer funds or view your recovery phrase. + + Cancel + + Skip + Add funds Your Wallet Address @@ -4802,6 +4827,8 @@ Remove viewer No replies yet + + You can\'t reply to this story because you\'re no longer a member of this group. Reacted to the story @@ -4820,6 +4847,13 @@ Delete My Story + + + %1$d viewer + %1$d viewers + + + View Who can view this story @@ -4854,8 +4888,6 @@ Allow replies & reactions Let people who can view your story react and reply - - Hide your story from specific people. By default, your story is shared with your %1$s Signal Connections @@ -4914,6 +4946,22 @@ Only share with… Done + + Remove group story? + + \"%1$s\" will be removed. + + Remove + + Delete private story? + + \"%1$s\" and updates shared to this story will be deleted. + + Delete + + Stories is available to Signal beta users only. + + If you share a story, it will only be available to people who are on Signal beta. Add to story? @@ -4926,6 +4974,8 @@ Story could not be sent. Check your connection and try again. Send + + Turn off and delete Share & View Stories @@ -5074,6 +5124,11 @@ Group story · %1$d viewer Group story · %1$d viewers + + + %1$d member + %1$d members + %1$s · %2$d viewer @@ -5209,7 +5264,7 @@ Turn off stories? - You will no longer be able to share or view stories. Any stories you have recently sent will still be visible by others until they expire. + You will no longer be able to share or view stories. Story updates you have recently shared will also be deleted. Story privacy diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index fdae29578f..eb8f9a48ea 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -17,6 +17,11 @@ + +