mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-21 15:05:19 +00:00
Performed a PR pass to fix up anything obvious - there's still a few things left TODO
This commit is contained in:
parent
53978f818d
commit
404fb8001c
@ -225,7 +225,7 @@ dependencies {
|
||||
|
||||
ksp("androidx.hilt:hilt-compiler:$jetpackHiltVersion")
|
||||
ksp("com.google.dagger:hilt-compiler:$daggerHiltVersion")
|
||||
ksp "com.github.bumptech.glide:ksp:$glideVersion"
|
||||
ksp("com.github.bumptech.glide:ksp:$glideVersion")
|
||||
|
||||
implementation 'androidx.compose.material3:material3-android:1.2.1'
|
||||
implementation("com.google.dagger:hilt-android:$daggerHiltVersion")
|
||||
@ -273,7 +273,6 @@ dependencies {
|
||||
implementation 'com.github.chrisbanes:PhotoView:2.1.3'
|
||||
implementation "com.github.bumptech.glide:glide:$glideVersion"
|
||||
implementation "com.github.bumptech.glide:compose:1.0.0-beta01"
|
||||
ksp "com.github.bumptech.glide:ksp:$glideVersion"
|
||||
implementation 'com.makeramen:roundedimageview:2.1.0'
|
||||
implementation 'com.pnikosis:materialish-progress:1.5'
|
||||
implementation 'org.greenrobot:eventbus:3.0.0'
|
||||
|
@ -268,13 +268,6 @@
|
||||
android:theme="@style/Theme.Session.DayNight.NoActionBar"
|
||||
android:launchMode="singleTask"
|
||||
android:windowSoftInputMode="stateHidden" />
|
||||
<activity
|
||||
android:name="org.thoughtcrime.securesms.MediaOverviewActivity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Theme.Session.DayNight.NoActionBar"
|
||||
android:windowSoftInputMode="stateHidden" />
|
||||
<activity
|
||||
android:name="org.thoughtcrime.securesms.DummyActivity"
|
||||
android:allowTaskReparenting="true"
|
||||
|
@ -405,7 +405,6 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
|
||||
@SuppressWarnings("CodeBlock2Expr")
|
||||
@SuppressLint("InlinedApi")
|
||||
private void saveToDisk() {
|
||||
Log.w("ACL", "Asked to save to disk!");
|
||||
MediaItem mediaItem = getCurrentMediaItem();
|
||||
if (mediaItem == null) return;
|
||||
|
||||
@ -487,6 +486,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
|
||||
super.onOptionsItemSelected(item);
|
||||
|
||||
switch (item.getItemId()) {
|
||||
// TODO / WARNING: R.id values are NON-CONSTANT in Gradle 8.0+ - what would be the best way to address this?! -AL 2024/08/26
|
||||
case R.id.media_preview__overview: showOverview(); return true;
|
||||
case R.id.media_preview__forward: forward(); return true;
|
||||
case R.id.save: saveToDisk(); return true;
|
||||
@ -537,15 +537,11 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
|
||||
throw new RuntimeException("restartItem = " + restartItem + ", data.second = " + data.second + " leftIsRecent = " + leftIsRecent, e);
|
||||
}
|
||||
|
||||
if (item == 0) {
|
||||
viewPagerListener.onPageSelected(0);
|
||||
}
|
||||
if (item == 0) { viewPagerListener.onPageSelected(0); }
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(@NonNull Loader<Pair<Cursor, Integer>> loader) {
|
||||
|
||||
}
|
||||
public void onLoaderReset(@NonNull Loader<Pair<Cursor, Integer>> loader) { /* Do nothing */ }
|
||||
|
||||
private class ViewPagerListener implements ViewPager.OnPageChangeListener {
|
||||
|
||||
@ -580,13 +576,11 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
|
||||
/* Do nothing */
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
|
||||
}
|
||||
public void onPageScrollStateChanged(int state) { /* Do nothing */ }
|
||||
}
|
||||
|
||||
private static class SingleItemPagerAdapter extends MediaItemAdapter {
|
||||
@ -651,9 +645,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pause(int position) {
|
||||
|
||||
}
|
||||
public void pause(int position) { /* Do nothing */ }
|
||||
|
||||
@Override
|
||||
public @Nullable View getPlaybackControls(int position) {
|
||||
|
@ -29,12 +29,14 @@ import android.provider.OpenableColumns;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import network.loki.messenger.R;
|
||||
import org.session.libsession.utilities.Address;
|
||||
import org.session.libsession.utilities.DistributionTypes;
|
||||
import org.session.libsession.utilities.ViewUtil;
|
||||
@ -49,12 +51,6 @@ import org.thoughtcrime.securesms.mms.PartAuthority;
|
||||
import org.thoughtcrime.securesms.providers.BlobProvider;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import network.loki.messenger.R;
|
||||
|
||||
/**
|
||||
* An activity to quickly share content with contacts
|
||||
*
|
||||
@ -69,7 +65,6 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity
|
||||
public static final String EXTRA_ADDRESS_MARSHALLED = "address_marshalled";
|
||||
public static final String EXTRA_DISTRIBUTION_TYPE = "distribution_type";
|
||||
|
||||
|
||||
private ContactSelectionListFragment contactsFragment;
|
||||
private SearchToolbar searchToolbar;
|
||||
private ImageView searchAction;
|
||||
|
@ -167,7 +167,6 @@ public class AudioSlidePlayer implements SensorEventListener {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onPlayerError(PlaybackException error) {
|
||||
Log.w(TAG, "MediaPlayer Error: " + error);
|
||||
@ -206,9 +205,7 @@ public class AudioSlidePlayer implements SensorEventListener {
|
||||
this.mediaPlayer.release();
|
||||
}
|
||||
|
||||
if (this.audioAttachmentServer != null) {
|
||||
this.audioAttachmentServer.stop();
|
||||
}
|
||||
if (this.audioAttachmentServer != null) { this.audioAttachmentServer.stop(); }
|
||||
|
||||
sensorManager.unregisterListener(AudioSlidePlayer.this);
|
||||
|
||||
@ -217,9 +214,7 @@ public class AudioSlidePlayer implements SensorEventListener {
|
||||
}
|
||||
|
||||
public synchronized static void stopAll() {
|
||||
if (playing.isPresent()) {
|
||||
playing.get().stop();
|
||||
}
|
||||
if (playing.isPresent()) { playing.get().stop(); }
|
||||
}
|
||||
|
||||
public synchronized boolean isReady() {
|
||||
@ -361,9 +356,8 @@ public class AudioSlidePlayer implements SensorEventListener {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
||||
public void onAccuracyChanged(Sensor sensor, int accuracy) { /* Do nothing */ }
|
||||
|
||||
}
|
||||
|
||||
public interface Listener {
|
||||
void onPlayerStart(@NonNull AudioSlidePlayer player);
|
||||
|
@ -44,7 +44,7 @@ public class SwitchPreferenceCompat extends CheckBoxPreference {
|
||||
// Substitute app name into lockscreen preference summary
|
||||
if (key.equalsIgnoreCase(LOCK_SCREEN_KEY)) {
|
||||
Context c = getContext();
|
||||
CharSequence substitutedSummaryCS = Phrase.from(c, R.string.lockAppDescriptionAndroid)
|
||||
CharSequence substitutedSummaryCS = Phrase.from(c, R.string.lockAppDescription)
|
||||
.put(APP_NAME_KEY, c.getString(R.string.app_name))
|
||||
.format();
|
||||
this.setSummary(substitutedSummaryCS);
|
||||
|
@ -14,7 +14,6 @@ import com.bumptech.glide.RequestManager
|
||||
|
||||
class UserView : LinearLayout {
|
||||
private lateinit var binding: ViewUserBinding
|
||||
var openGroupThreadID: Long = -1L // FIXME: This is a bit ugly
|
||||
|
||||
enum class ActionIndicator {
|
||||
None,
|
||||
@ -86,8 +85,6 @@ class UserView : LinearLayout {
|
||||
}
|
||||
}
|
||||
|
||||
fun unbind() {
|
||||
binding.profilePictureView.recycle()
|
||||
}
|
||||
fun unbind() { binding.profilePictureView.recycle() }
|
||||
// endregion
|
||||
}
|
||||
|
@ -41,7 +41,6 @@ internal class NewMessageViewModel @Inject constructor(
|
||||
override fun onChange(value: String) {
|
||||
loadOnsJob?.cancel()
|
||||
loadOnsJob = null
|
||||
|
||||
_state.update { it.copy(newMessageIdOrOns = value, isTextErrorColor = false, loading = false) }
|
||||
}
|
||||
|
||||
@ -112,4 +111,4 @@ internal data class State(
|
||||
val isNextButtonEnabled: Boolean get() = newMessageIdOrOns.isNotBlank()
|
||||
}
|
||||
|
||||
internal data class Success(val publicKey: String)
|
||||
internal data class Success(val publicKey: String)
|
@ -1368,7 +1368,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
||||
return false
|
||||
} else {
|
||||
// ..otherwise if the earliest emoji reaction was more than a minute ago we'll
|
||||
// remove that early reaction to move the timestamp at index 1 into index 0,, add
|
||||
// remove that early reaction to move the timestamp at index 1 into index 0, add
|
||||
// our new timestamp and return true to accept the emoji reaction.
|
||||
emojiRateLimiterQueue.removeFirst()
|
||||
emojiRateLimiterQueue.addLast(timestamp)
|
||||
@ -1843,7 +1843,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
||||
|
||||
// ..otherwise we can attempt to send the attachment(s).
|
||||
// Note: The only multi-attachment message type is when sending images - all others
|
||||
// attempt send on initial attachment selection.
|
||||
// attempt send the attachment immediately upon file selection.
|
||||
sendAttachments(attachmentManager.buildSlideDeck().asAttachments(), null)
|
||||
}
|
||||
|
||||
@ -1931,8 +1931,8 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
||||
} else {
|
||||
Permissions.with(this)
|
||||
.request(Manifest.permission.RECORD_AUDIO)
|
||||
.withRationaleDialog(getString(R.string.permissionsMicrophoneAccessRequiredAndroid), R.drawable.ic_baseline_mic_48)
|
||||
.withPermanentDenialDialog(Phrase.from(applicationContext, R.string.permissionsMicrophoneAccessRequiredAndroid)
|
||||
.withRationaleDialog(getString(R.string.permissionsMicrophoneAccessRequired), R.drawable.ic_baseline_mic_48)
|
||||
.withPermanentDenialDialog(Phrase.from(applicationContext, R.string.permissionsMicrophoneAccessRequired)
|
||||
.put(APP_NAME_KEY, getString(R.string.app_name))
|
||||
.format().toString())
|
||||
.execute()
|
||||
@ -2119,7 +2119,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
||||
override fun banUser(messages: Set<MessageRecord>) {
|
||||
showSessionDialog {
|
||||
title(R.string.banUser)
|
||||
// ACL TODO - We need a string for the below `text` element
|
||||
// ACL TODO - We need a string for the below `text` element - have asked Lucy about this 2024/08/26 -AL
|
||||
text("This will ban the selected user from this room. It won't ban them from other rooms.")
|
||||
button(R.string.banUser) { viewModel.banUser(messages.first().individualRecipient); endActionMode() }
|
||||
cancelButton(::endActionMode)
|
||||
@ -2129,7 +2129,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
||||
override fun banAndDeleteAll(messages: Set<MessageRecord>) {
|
||||
showSessionDialog {
|
||||
title(R.string.banUser)
|
||||
// ACL TODO - We need a string for the below `text` element
|
||||
// ACL TODO - We need a string for the below `text` element - have asked Lucy about this 2024/08/26 -AL
|
||||
text("This will ban the selected user from this room and delete all messages sent by them. It won't ban them from other rooms or delete the messages they sent there.")
|
||||
button(R.string.banUser) { viewModel.banAndDeleteAll(messages.first()); endActionMode() }
|
||||
cancelButton(::endActionMode)
|
||||
|
@ -33,7 +33,7 @@ class BlockedDialog(private val recipient: Recipient, private val context: Conte
|
||||
|
||||
title(resources.getString(R.string.blockUnblock))
|
||||
text(spannable)
|
||||
dangerButton(R.string.blockUnblock,R.string.AccessibilityId_unblockConfirm) { unblock() }
|
||||
dangerButton(R.string.blockUnblock, R.string.AccessibilityId_unblockConfirm) { unblock() }
|
||||
cancelButton { dismiss() }
|
||||
}
|
||||
|
||||
|
@ -634,7 +634,7 @@ open class Storage(
|
||||
val threadID = getOrCreateThreadIdFor(Address.fromSerialized(groupId))
|
||||
threadDb.setDate(threadID, formationTimestamp)
|
||||
|
||||
// ACL Note: Commenting out this line prevents the timestamp of room creation being added to a new closed group,
|
||||
// Note: Commenting out this line prevents the timestamp of room creation being added to a new closed group,
|
||||
// which in turn allows us to show the `groupNoMessages` control message text.
|
||||
//insertOutgoingInfoMessage(context, groupId, SignalServiceGroup.Type.CREATION, title, members.map { it.serialize() }, admins.map { it.serialize() }, threadID, formationTimestamp)
|
||||
|
||||
|
@ -6,17 +6,15 @@ import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import com.squareup.phrase.Phrase;
|
||||
|
||||
import java.io.File;
|
||||
import net.zetetic.database.sqlcipher.SQLiteConnection;
|
||||
import net.zetetic.database.sqlcipher.SQLiteDatabase;
|
||||
import net.zetetic.database.sqlcipher.SQLiteDatabaseHook;
|
||||
import net.zetetic.database.sqlcipher.SQLiteOpenHelper;
|
||||
|
||||
import network.loki.messenger.R;
|
||||
import org.session.libsession.utilities.TextSecurePreferences;
|
||||
import org.session.libsignal.utilities.Log;
|
||||
import org.thoughtcrime.securesms.crypto.DatabaseSecret;
|
||||
@ -43,13 +41,8 @@ import org.thoughtcrime.securesms.database.SessionContactDatabase;
|
||||
import org.thoughtcrime.securesms.database.SessionJobDatabase;
|
||||
import org.thoughtcrime.securesms.database.SmsDatabase;
|
||||
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
||||
import org.thoughtcrime.securesms.notifications.NotificationChannels;
|
||||
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import network.loki.messenger.R;
|
||||
|
||||
public class SQLCipherOpenHelper extends SQLiteOpenHelper {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
|
@ -156,123 +156,10 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
|
||||
private val isFromOnboarding: Boolean get() = intent.getBooleanExtra(FROM_ONBOARDING, false)
|
||||
private val isNewAccount: Boolean get() = intent.getBooleanExtra(NEW_ACCOUNT, false)
|
||||
|
||||
// ACL REMOVE BLOCK START
|
||||
|
||||
fun getRelativeTimeLocalized(timestampMS: Long): String {
|
||||
// Get the current system time
|
||||
val nowMS = System.currentTimeMillis()
|
||||
|
||||
// Calculate the time difference in milliseconds - this value will be negative if it's in the
|
||||
// future or positive if it's in the past.
|
||||
val timeDifferenceMS = nowMS - timestampMS
|
||||
|
||||
// Choose a desired time resolution based on the time difference.
|
||||
// Note: We do this against the absolute time difference so this function can still work for
|
||||
// both future/past times without having separate future/past cases.
|
||||
val desiredResolution = when (abs(timeDifferenceMS)) {
|
||||
in 0..DateUtils.MINUTE_IN_MILLIS -> DateUtils.SECOND_IN_MILLIS
|
||||
in DateUtils.MINUTE_IN_MILLIS..DateUtils.HOUR_IN_MILLIS -> DateUtils.MINUTE_IN_MILLIS
|
||||
in DateUtils.HOUR_IN_MILLIS..DateUtils.DAY_IN_MILLIS -> DateUtils.HOUR_IN_MILLIS
|
||||
in DateUtils.DAY_IN_MILLIS..DateUtils.WEEK_IN_MILLIS -> DateUtils.DAY_IN_MILLIS
|
||||
|
||||
// We don't do months or years, so if the result is 53 weeks then so be it - also, the
|
||||
// getRelativeTimeSpanString method's resolution maxes out at weeks!
|
||||
else -> DateUtils.WEEK_IN_MILLIS
|
||||
}
|
||||
|
||||
// Use DateUtils to get the relative time span string
|
||||
return DateUtils.getRelativeTimeSpanString(
|
||||
timestampMS,
|
||||
nowMS,
|
||||
desiredResolution,
|
||||
DateUtils.FORMAT_ABBREV_RELATIVE
|
||||
// Using either DateUtils.FORMAT_ABBREV_RELATIVE or DateUtils.FORMAT_ABBREV_ALL gives:
|
||||
// - 1 sec. ago / 2 sec. ago
|
||||
// - 1 min. ago / 2 min. ago
|
||||
// - 1 hr. ago / 2 hr. ago
|
||||
// - Yesterday / 2 days ago
|
||||
// - August 2 / 2 wk. ago / 14 wk. ago <-- Note: Date running this test is August 9th.
|
||||
|
||||
// Using either 0 or DateUtils.FORMAT_ABBREV_TIME gives:
|
||||
// - 1 second ago / 2 seconds ago
|
||||
// - 1 minute ago / 2 minutes ago
|
||||
// - 1 hour ago / 2 hours ago
|
||||
// - Yesterday / 2 days ago
|
||||
// - August 2nd / 2 weeks ago / 14 weeks ago <-- Note: Date running this test is August 9th.
|
||||
).toString()
|
||||
}
|
||||
|
||||
fun testRelativeTimes(op: (Long, Long) -> Long) {
|
||||
var t = 0L
|
||||
|
||||
// 1 and 2 seconds
|
||||
t = op(System.currentTimeMillis(), 1.seconds.inWholeMilliseconds)
|
||||
Log.w("ACL", "1s -> ${getRelativeTimeLocalized(t)}")
|
||||
t = op(System.currentTimeMillis(), 2.seconds.inWholeMilliseconds)
|
||||
Log.w("ACL", "2s -> ${getRelativeTimeLocalized(t)}")
|
||||
|
||||
// 1 and 2 minutes
|
||||
t = op(System.currentTimeMillis(), 1.minutes.inWholeMilliseconds)
|
||||
Log.w("ACL", "1m -> ${getRelativeTimeLocalized(t)}")
|
||||
t = op(System.currentTimeMillis(), 2.minutes.inWholeMilliseconds)
|
||||
Log.w("ACL", "2m -> ${getRelativeTimeLocalized(t)}")
|
||||
|
||||
// 1 and 2 hours
|
||||
t = op(System.currentTimeMillis(), 1.hours.inWholeMilliseconds)
|
||||
Log.w("ACL", "1h -> ${getRelativeTimeLocalized(t)}")
|
||||
t = op(System.currentTimeMillis(), 2.hours.inWholeMilliseconds)
|
||||
Log.w("ACL", "2h -> ${getRelativeTimeLocalized(t)}")
|
||||
|
||||
// 1 and 2 days
|
||||
t = op(System.currentTimeMillis(), 1.days.inWholeMilliseconds)
|
||||
Log.w("ACL", "1d -> ${getRelativeTimeLocalized(t)}")
|
||||
t = op(System.currentTimeMillis(), 2.days.inWholeMilliseconds)
|
||||
Log.w("ACL", "2d -> ${getRelativeTimeLocalized(t)}")
|
||||
|
||||
// 1 week, 2 weeks, and 100 days (14.285 weeks)
|
||||
t = op(System.currentTimeMillis(), 7.days.inWholeMilliseconds)
|
||||
Log.w("ACL", "1w -> ${getRelativeTimeLocalized(t)}")
|
||||
t = op(System.currentTimeMillis(), 14.days.inWholeMilliseconds)
|
||||
Log.w("ACL", "2w -> ${getRelativeTimeLocalized(t)}")
|
||||
t = op(System.currentTimeMillis(), 100.days.inWholeMilliseconds)
|
||||
Log.w("ACL", "100d -> ${getRelativeTimeLocalized(t)}")
|
||||
}
|
||||
|
||||
fun testSystemGeneratedRelativeTimes() {
|
||||
// Print relative times in the past
|
||||
var op: (Long, Long) -> Long = Long::minus
|
||||
testRelativeTimes(op)
|
||||
|
||||
// Print relative times in the future
|
||||
op = Long::plus
|
||||
testRelativeTimes(op)
|
||||
}
|
||||
|
||||
// ACL REMOVE BLOCK END
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// region Lifecycle
|
||||
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
|
||||
super.onCreate(savedInstanceState, isReady)
|
||||
|
||||
// ACL REMOVE THIS WHEN UNIT TESTS ARE FIXED
|
||||
//Locale.setDefault(Locale.FRENCH)
|
||||
//testSystemGeneratedRelativeTimes()
|
||||
|
||||
// Set content view
|
||||
binding = ActivityHomeBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
|
@ -53,7 +53,7 @@ class PathActivity : PassphraseRequiredActionBarActivity() {
|
||||
setContentView(binding.root)
|
||||
supportActionBar!!.title = resources.getString(R.string.onionRoutingPath)
|
||||
|
||||
// Substitute the localised version of "Session" into the layout
|
||||
// Substitute "Session" into the path description. Note: This is a non-translatable string.
|
||||
val appName = applicationContext.getString(R.string.app_name)
|
||||
val txt = Phrase.from(applicationContext, R.string.onionRoutingPathDescription).put(APP_NAME_KEY, appName).format().toString()
|
||||
binding.pathDescription.text = txt
|
||||
|
@ -1,10 +1,5 @@
|
||||
package org.thoughtcrime.securesms.linkpreview;
|
||||
|
||||
import static org.thoughtcrime.securesms.giph.util.InfiniteScrollListener.TAG;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Build;
|
||||
import android.text.Html;
|
||||
@ -12,15 +7,9 @@ import android.text.SpannableString;
|
||||
import android.text.TextUtils;
|
||||
import android.text.style.URLSpan;
|
||||
import android.text.util.Linkify;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.session.libsignal.utilities.Log;
|
||||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
import org.session.libsignal.utilities.guava.Optional;
|
||||
|
||||
import org.session.libsession.utilities.Util;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Collections;
|
||||
@ -30,10 +19,10 @@ import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import android.text.format.DateFormat;
|
||||
|
||||
|
||||
import okhttp3.HttpUrl;
|
||||
import org.session.libsession.utilities.Util;
|
||||
import org.session.libsignal.utilities.Log;
|
||||
import org.session.libsignal.utilities.guava.Optional;
|
||||
|
||||
public final class LinkPreviewUtil {
|
||||
|
||||
@ -71,9 +60,9 @@ public final class LinkPreviewUtil {
|
||||
if (linkUrl == null) return false;
|
||||
|
||||
HttpUrl url = HttpUrl.parse(linkUrl);
|
||||
return url != null &&
|
||||
!TextUtils.isEmpty(url.scheme()) &&
|
||||
"https".equals(url.scheme()) &&
|
||||
return url != null &&
|
||||
!TextUtils.isEmpty(url.scheme()) &&
|
||||
"https".equals(url.scheme()) &&
|
||||
isLegalUrl(linkUrl);
|
||||
}
|
||||
|
||||
@ -84,9 +73,9 @@ public final class LinkPreviewUtil {
|
||||
if (mediaUrl == null) return false;
|
||||
|
||||
HttpUrl url = HttpUrl.parse(mediaUrl);
|
||||
return url != null &&
|
||||
!TextUtils.isEmpty(url.scheme()) &&
|
||||
"https".equals(url.scheme()) &&
|
||||
return url != null &&
|
||||
!TextUtils.isEmpty(url.scheme()) &&
|
||||
"https".equals(url.scheme()) &&
|
||||
isLegalUrl(mediaUrl);
|
||||
}
|
||||
|
||||
|
@ -35,9 +35,9 @@ class FixedTimeBuckets(
|
||||
@StringRes
|
||||
fun getBucketText(time: ZonedDateTime): Int? {
|
||||
return when {
|
||||
time >= startOfToday -> R.string.BucketedThreadMedia_Today // Should be replaced with call to getLocalisedRelativeDayString
|
||||
time >= startOfYesterday -> R.string.BucketedThreadMedia_Yesterday // Should be replaced with call to getLocalisedRelativeDayString
|
||||
time >= startOfThisWeek -> R.string.attachmentsThisWeek
|
||||
time >= startOfToday -> R.string.BucketedThreadMedia_Today
|
||||
time >= startOfYesterday -> R.string.BucketedThreadMedia_Yesterday
|
||||
time >= startOfThisWeek -> R.string.attachmentsThisWeek
|
||||
time >= startOfThisMonth -> R.string.attachmentsThisMonth
|
||||
else -> null
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ import android.database.Cursor
|
||||
import android.os.AsyncTask
|
||||
import android.os.Build
|
||||
import android.text.TextUtils
|
||||
import android.widget.Toast
|
||||
import androidx.camera.core.impl.utils.ContextUtil.getApplicationContext
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
@ -45,6 +47,7 @@ import org.session.libsession.messaging.utilities.AccountId
|
||||
import org.session.libsession.messaging.utilities.SodiumUtilities.blindedKeyPair
|
||||
import org.session.libsession.utilities.Address.Companion.fromSerialized
|
||||
import org.session.libsession.utilities.ServiceUtil
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.APP_NAME_KEY
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.EMOJI_KEY
|
||||
import org.session.libsession.utilities.TextSecurePreferences.Companion.getLocalNumber
|
||||
import org.session.libsession.utilities.TextSecurePreferences.Companion.getNotificationPrivacy
|
||||
@ -67,6 +70,8 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord
|
||||
import org.thoughtcrime.securesms.database.model.ReactionRecord
|
||||
import org.thoughtcrime.securesms.dependencies.DatabaseComponent.Companion.get
|
||||
import org.thoughtcrime.securesms.mms.SlideDeck
|
||||
import org.thoughtcrime.securesms.permissions.Permissions
|
||||
import org.thoughtcrime.securesms.preferences.ShareLogsDialog
|
||||
import org.thoughtcrime.securesms.service.KeyCachingService
|
||||
import org.thoughtcrime.securesms.util.SessionMetaProtocol.canUserReplyToNotification
|
||||
import org.thoughtcrime.securesms.util.SpanUtil
|
||||
@ -209,7 +214,6 @@ class DefaultMessageNotifier : MessageNotifier {
|
||||
return
|
||||
}
|
||||
|
||||
//var notificationState: NotificationState
|
||||
try {
|
||||
val notificationState = constructNotificationState(context, telcoCursor)
|
||||
|
||||
@ -353,7 +357,7 @@ class DefaultMessageNotifier : MessageNotifier {
|
||||
|
||||
val notification = builder.build()
|
||||
|
||||
// ACL FIX THIS PROPERLY
|
||||
// TODO - ACL to fix this properly & will do on 2024-08-26, but just skipping for now so review can start
|
||||
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
|
||||
// TODO: Consider calling
|
||||
// ActivityCompat#requestPermissions
|
||||
@ -435,7 +439,7 @@ class DefaultMessageNotifier : MessageNotifier {
|
||||
|
||||
builder.putStringExtra(LATEST_MESSAGE_ID_TAG, messageIdTag)
|
||||
|
||||
// ACL FIX THIS PROPERLY
|
||||
// TODO - ACL to fix this properly & will do on 2024-08-26, but just skipping for now so review can start
|
||||
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
|
||||
// TODO: Consider calling
|
||||
// ActivityCompat#requestPermissions
|
||||
@ -463,7 +467,7 @@ class DefaultMessageNotifier : MessageNotifier {
|
||||
val threadDatabase = get(context).threadDatabase()
|
||||
val cache: MutableMap<Long, String?> = HashMap()
|
||||
|
||||
// CAREFUL: Do not put this loop back as `while ((reader.next.also { record = it }) != null) {` because it breaks with a Null Pointer Exception - you have been warned.
|
||||
// CAREFUL: Do not put this loop back as `while ((reader.next.also { record = it }) != null) {` because it breaks with a Null Pointer Exception!
|
||||
var record: MessageRecord? = null
|
||||
do {
|
||||
record = reader.next
|
||||
@ -587,7 +591,6 @@ class DefaultMessageNotifier : MessageNotifier {
|
||||
if (count == 0) ShortcutBadger.removeCount(context)
|
||||
else ShortcutBadger.applyCount(context, count)
|
||||
} catch (t: Throwable) {
|
||||
// NOTE :: I don't totally trust this thing, so I'm catching everything.
|
||||
Log.w("MessageNotifier", t)
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,6 @@ import java.util.List;
|
||||
import network.loki.messenger.R;
|
||||
import org.session.libsession.messaging.contacts.Contact;
|
||||
import org.session.libsession.utilities.NotificationPrivacyPreference;
|
||||
import org.session.libsession.utilities.TextSecurePreferences;
|
||||
import org.session.libsession.utilities.Util;
|
||||
import org.session.libsession.utilities.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.database.SessionContactDatabase;
|
||||
@ -41,12 +40,15 @@ public class MultipleRecipientNotificationBuilder extends AbstractNotificationBu
|
||||
}
|
||||
|
||||
public void setMessageCount(int messageCount, int threadCount) {
|
||||
String txt = Phrase.from(context, R.string.notificationsAndroidSystem)
|
||||
String txt = Phrase.from(context, R.string.notificationsSystem)
|
||||
.put(MESSAGE_COUNT_KEY, messageCount)
|
||||
.put(CONVERSATION_COUNT_KEY, threadCount)
|
||||
.format().toString();
|
||||
setSubText(txt);
|
||||
setContentInfo(String.valueOf(messageCount)); // Note: `setContentInfo` details are only visible in Android API 24 and below - remove when min. API is upgraded.
|
||||
|
||||
// Note: `setContentInfo` details are only visible in Android API 24 and below - as our minimum is now API 26 this can be skipped.
|
||||
//setContentInfo(String.valueOf(messageCount));
|
||||
|
||||
setNumber(messageCount);
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,7 @@ internal fun MessageNotificationsScreen(
|
||||
|
||||
NotificationRadioButton(
|
||||
R.string.notificationsFastMode,
|
||||
R.string.notificationsFastModeDescriptionAndroid,
|
||||
R.string.notificationsFastModeDescription,
|
||||
modifier = Modifier.contentDescription(R.string.AccessibilityId_notificationsFastMode),
|
||||
tag = R.string.recommended,
|
||||
checked = state.pushEnabled,
|
||||
|
@ -1,41 +0,0 @@
|
||||
package org.thoughtcrime.securesms.preferences
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import network.loki.messenger.R
|
||||
import org.session.libsignal.crypto.MnemonicCodec
|
||||
import org.session.libsignal.utilities.hexEncodedPrivateKey
|
||||
import org.thoughtcrime.securesms.createSessionDialog
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
|
||||
import org.thoughtcrime.securesms.crypto.MnemonicUtilities
|
||||
|
||||
class SeedDialog: DialogFragment() {
|
||||
private val seed by lazy {
|
||||
val hexEncodedSeed = IdentityKeyUtil.retrieve(requireContext(), IdentityKeyUtil.LOKI_SEED)
|
||||
?: IdentityKeyUtil.getIdentityKeyPair(requireContext()).hexEncodedPrivateKey // Legacy account
|
||||
|
||||
MnemonicCodec { fileName -> MnemonicUtilities.loadFileContents(requireContext(), fileName) }
|
||||
.encode(hexEncodedSeed, MnemonicCodec.Language.Configuration.english)
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = createSessionDialog {
|
||||
title(R.string.sessionRecoveryPassword)
|
||||
text(R.string.recoveryPasswordDescription)
|
||||
text(seed, R.style.AccountIdTextView)
|
||||
button(R.string.copy, R.string.AccessibilityId_sessionRecoveryPasswordCopy) { copySeed() }
|
||||
button(R.string.close) { dismiss() }
|
||||
}
|
||||
|
||||
private fun copySeed() {
|
||||
val clipboard = requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
val clip = ClipData.newPlainText("Seed", seed)
|
||||
clipboard.setPrimaryClip(clip)
|
||||
Toast.makeText(requireContext(), R.string.copied, Toast.LENGTH_SHORT).show()
|
||||
dismiss()
|
||||
}
|
||||
}
|
@ -15,6 +15,11 @@ import android.widget.Toast
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.squareup.phrase.Phrase
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
import java.util.Objects
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Dispatchers.Main
|
||||
import kotlinx.coroutines.Job
|
||||
@ -29,11 +34,6 @@ import org.thoughtcrime.securesms.ApplicationContext
|
||||
import org.thoughtcrime.securesms.createSessionDialog
|
||||
import org.thoughtcrime.securesms.util.FileProviderUtil
|
||||
import org.thoughtcrime.securesms.util.StreamUtil
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
import java.util.Objects
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class ShareLogsDialog(private val updateCallback: (Boolean)->Unit): DialogFragment() {
|
||||
|
||||
|
@ -54,7 +54,7 @@ import org.thoughtcrime.securesms.notifications.NotificationChannels;
|
||||
*
|
||||
* @author Moxie Marlinspike
|
||||
*/
|
||||
//TODO AC: This service does only serve one purpose now - to track the screen lock state and handle the timer.
|
||||
// TODO: This service does only serve one purpose now - to track the screen lock state and handle the timer.
|
||||
// We need to refactor it and cleanup from all the old Signal code.
|
||||
public class KeyCachingService extends Service {
|
||||
|
||||
@ -70,7 +70,7 @@ public class KeyCachingService extends Service {
|
||||
|
||||
private final IBinder binder = new KeySetBinder();
|
||||
|
||||
// AC: This is a temporal drop off replacement for the refactoring time being.
|
||||
// This is a temporal drop off replacement for the refactoring time being.
|
||||
// This field only indicates if the app was unlocked or not (null means locked).
|
||||
private static Object masterSecret = null;
|
||||
|
||||
|
@ -8,21 +8,17 @@ import android.content.Intent;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.text.TextUtils;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.squareup.phrase.Phrase;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URLDecoder;
|
||||
import network.loki.messenger.R;
|
||||
|
||||
import org.session.libsession.messaging.messages.visible.VisibleMessage;
|
||||
import org.session.libsession.messaging.sending_receiving.MessageSender;
|
||||
import org.session.libsession.snode.SnodeAPI;
|
||||
import org.session.libsession.utilities.Address;
|
||||
import org.session.libsignal.utilities.Log;
|
||||
import org.session.libsession.messaging.sending_receiving.MessageSender;
|
||||
import org.thoughtcrime.securesms.util.Rfc5724Uri;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URLDecoder;
|
||||
|
||||
public class QuickResponseService extends IntentService {
|
||||
|
||||
private static final String TAG = QuickResponseService.class.getSimpleName();
|
||||
|
@ -10,12 +10,14 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import com.squareup.phrase.Phrase;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.security.MessageDigest;
|
||||
import network.loki.messenger.R;
|
||||
import org.session.libsession.utilities.FileUtils;
|
||||
import org.session.libsession.utilities.ServiceUtil;
|
||||
import org.session.libsession.utilities.TextSecurePreferences;
|
||||
@ -24,13 +26,6 @@ import org.session.libsignal.utilities.Log;
|
||||
import org.thoughtcrime.securesms.notifications.NotificationChannels;
|
||||
import org.thoughtcrime.securesms.util.FileProviderUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.security.MessageDigest;
|
||||
|
||||
import network.loki.messenger.R;
|
||||
|
||||
public class UpdateApkReadyListener extends BroadcastReceiver {
|
||||
|
||||
private static final String TAG = UpdateApkReadyListener.class.getSimpleName();
|
||||
@ -128,4 +123,4 @@ public class UpdateApkReadyListener extends BroadcastReceiver {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -31,7 +31,7 @@ import java.util.Locale
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
// Enums used to get the locale-aware String for one of the three relative days
|
||||
public enum class RelativeDay { TODAY, YESTERDAY, TOMORROW }
|
||||
enum class RelativeDay { TODAY, YESTERDAY, TOMORROW }
|
||||
|
||||
/**
|
||||
* Utility methods to help display dates in a nice, easily readable way.
|
||||
@ -81,30 +81,6 @@ object DateUtils : android.text.format.DateUtils() {
|
||||
FORMAT_SHOW_DATE).toString()
|
||||
}
|
||||
|
||||
// Method to get the locale-aware String for the word "Now"
|
||||
// public fun getLocalisedNowString(): String {
|
||||
// val now = Calendar.getInstance().timeInMillis
|
||||
// return getRelativeTimeSpanString(now, now,MINUTE_IN_MILLIS, FORMAT_SHOW_TIME).toString()
|
||||
// }
|
||||
|
||||
// THIS DOES NOT WORK
|
||||
public fun getLocalisedNowString(): String {
|
||||
|
||||
val now = Calendar.getInstance().timeInMillis
|
||||
val relativeTime = getRelativeTimeSpanString(now, now, MINUTE_IN_MILLIS, FORMAT_SHOW_TIME).toString()
|
||||
|
||||
// Create a DateFormat instance for the current time
|
||||
val timeFormat = getTimeInstance(SHORT, Locale.getDefault())
|
||||
val formattedTime = timeFormat.format(Calendar.getInstance().time)
|
||||
|
||||
// Check if the relative time indicates "0 minutes ago" or similar and replace it with the formatted time
|
||||
return if (relativeTime == "0 minutes ago" || relativeTime == "in 0 minutes") {
|
||||
formattedTime
|
||||
} else {
|
||||
relativeTime
|
||||
}
|
||||
}
|
||||
|
||||
fun getFormattedDateTime(time: Long, template: String, locale: Locale): String {
|
||||
val localizedPattern = getLocalizedPattern(template, locale)
|
||||
return SimpleDateFormat(localizedPattern, locale).format(Date(time))
|
||||
@ -117,8 +93,9 @@ object DateUtils : android.text.format.DateUtils() {
|
||||
fun getDisplayFormattedTimeSpanString(c: Context, locale: Locale, timestamp: Long): String {
|
||||
// If the timestamp is invalid (ie. 0) then assume we're waiting on data and just use the 'Now' copy
|
||||
return if (timestamp == 0L || isWithin(timestamp, 1, TimeUnit.MINUTES)) {
|
||||
getLocalisedNowString()
|
||||
//c.getString(R.string.DateUtils_just_now) // ACL REMOVE WHEN HAPPY
|
||||
// TODO ACL: We need a string for "Now" because I can't seem to coax a localised version from DateUtils -
|
||||
// TODO: although anyone seeing is this is more than welcome to try! - 2024-08-26
|
||||
"Now"
|
||||
} else if (isToday(timestamp)) {
|
||||
getFormattedDateTime(timestamp, getHourFormat(c), locale)
|
||||
} else if (isWithin(timestamp, 6, TimeUnit.DAYS)) {
|
||||
|
@ -133,15 +133,9 @@ class SaveAttachmentTask @JvmOverloads constructor(context: Context, count: Int
|
||||
|
||||
private fun createOutputUri(context: Context, outputUri: Uri, contentType: String, fileName: String): Uri? {
|
||||
|
||||
if (fileName == null)
|
||||
{
|
||||
Log.w("ACL", "Filename is null - wtf!")
|
||||
}
|
||||
|
||||
if (fileName != null && fileName.isEmpty())
|
||||
{
|
||||
Log.w("ACL", "Filename is empty - wtf!")
|
||||
}
|
||||
// TODO: This method may pass an empty string as the filename in Android API 28 and below. This requires
|
||||
// TODO: follow-up investigation, but has temporarily been worked around, see:
|
||||
// TODO: https://github.com/oxen-io/session-android/commit/afbb71351a74220c312a09c25cc1c79738453c12
|
||||
|
||||
val fileParts: Array<String> = getFileNameParts(fileName)
|
||||
val base = fileParts[0]
|
||||
|
@ -7,7 +7,7 @@
|
||||
<org.thoughtcrime.securesms.components.SwitchPreferenceCompat
|
||||
android:key="pref_key_use_fcm"
|
||||
android:title="@string/useFastMode"
|
||||
android:summary="@string/notificationsFastModeDescriptionAndroid"
|
||||
android:summary="@string/notificationsFastModeDescription"
|
||||
android:defaultValue="false" />
|
||||
|
||||
<Preference android:title="@string/notificationsGoToDevice"
|
||||
|
@ -9,7 +9,7 @@
|
||||
android:key="pref_android_screen_lock"
|
||||
android:defaultValue="false"
|
||||
android:title="@string/lockApp"
|
||||
android:summary="@string/lockAppDescriptionAndroid" />
|
||||
android:summary="@string/lockAppDescription" />
|
||||
|
||||
<org.thoughtcrime.securesms.components.SwitchPreferenceCompat
|
||||
android:defaultValue="@bool/screen_security_default"
|
||||
|
@ -20,7 +20,6 @@ import org.session.libsignal.utilities.Log
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.COUNT_KEY
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.DISAPPEARING_MESSAGES_TYPE_KEY
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.GROUP_NAME_KEY
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.MEMBERS_KEY
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.NAME_KEY
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.OTHER_NAME_KEY
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.TIME_KEY
|
||||
@ -65,8 +64,6 @@ object UpdateMessageBuilder {
|
||||
|
||||
val newMemberCount = updateData.updatedMembers.size
|
||||
|
||||
//val members = updateData.updatedMembers.joinToString(", ", transform = ::getSenderName)
|
||||
|
||||
// We previously differentiated between members added by us Vs. members added by someone
|
||||
// else via checking against `isOutgoing` - but now we use the same strings regardless.
|
||||
when (newMemberCount) {
|
||||
@ -101,8 +98,8 @@ object UpdateMessageBuilder {
|
||||
|
||||
// 1st case: you are part of the removed members
|
||||
return if (userPublicKey in updateData.updatedMembers) {
|
||||
if (isOutgoing) context.getString(R.string.groupMemberYouLeft) // You chose to leave
|
||||
else Phrase.from(context, R.string.groupRemovedYou) // You were forced to leave
|
||||
if (isOutgoing) context.getString(R.string.groupMemberYouLeft) // You chose to leave
|
||||
else Phrase.from(context, R.string.groupRemovedYou) // You were forced to leave
|
||||
.put(GROUP_NAME_KEY, updateData.groupName)
|
||||
.format().toString()
|
||||
}
|
||||
@ -132,9 +129,6 @@ object UpdateMessageBuilder {
|
||||
}
|
||||
else // b.) Someone else is the person doing the removing of one or more members
|
||||
{
|
||||
// ACL TODO: Remove below line when confirmed that we aren't mentioning WHO removed anyone anymore.. or don't if we still are!
|
||||
//context.getString(R.string.MessageRecord_s_removed_s_from_the_group, senderName, members)
|
||||
|
||||
// Note: I don't think we're doing "Alice removed Bob from the group"-type
|
||||
// messages anymore - just "Bob was removed from the group" - so this block
|
||||
// is identical to the one above, but I'll leave it like this until I can
|
||||
@ -190,7 +184,7 @@ object UpdateMessageBuilder {
|
||||
fun buildExpirationTimerMessage(
|
||||
context: Context,
|
||||
duration: Long,
|
||||
isGroup: Boolean, // ACL TODO: Does this include communities? (i.e., open groups)?
|
||||
isGroup: Boolean, // Note: isGroup should cover both closed groups AND communities
|
||||
senderId: String? = null,
|
||||
isOutgoing: Boolean = false,
|
||||
timestamp: Long,
|
||||
@ -228,8 +222,8 @@ object UpdateMessageBuilder {
|
||||
.put(TIME_KEY, time)
|
||||
.put(DISAPPEARING_MESSAGES_TYPE_KEY, action)
|
||||
.format().toString()
|
||||
} else // 1-on-1 conversation
|
||||
{
|
||||
} else {
|
||||
// 1-on-1 conversation
|
||||
Phrase.from(context, R.string.disappearingMessagesSetYou)
|
||||
.put(TIME_KEY, time)
|
||||
.put(DISAPPEARING_MESSAGES_TYPE_KEY, action)
|
||||
|
@ -302,9 +302,8 @@ interface TextSecurePreferences {
|
||||
const val ALLOW_MESSAGE_REQUESTS = "libsession.ALLOW_MESSAGE_REQUESTS"
|
||||
|
||||
// Key name for if we've warned the user that saving attachments will allow other apps to access them.
|
||||
// Note: This is only a concern on Android API 30+ which does not have the WRITE_EXTERNAL_STORAGE permission
|
||||
// for us to check against - and we only display this once, or until the user consents to this and continues
|
||||
// to save the attachment(s).
|
||||
// Note: We only ever display this once - and when the user has accepted the warning we never show it again
|
||||
// for the lifetime of the Session installation.
|
||||
const val HAVE_WARNED_USER_ABOUT_SAVING_ATTACHMENTS = "libsession.HAVE_WARNED_USER_ABOUT_SAVING_ATTACHMENTS"
|
||||
|
||||
@JvmStatic
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">أو انضم إلى واحدة من…</string>
|
||||
<string name="notificationsFastMode">الوضع السريع</string>
|
||||
<string name="notificationsSlowMode">الوضع البطيء</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">سوف يتم إشعارك بالرسائل بشكل موثوق و فوري بإستخدام خوادم جوجل للإشعارات.</string>
|
||||
<string name="notificationsFastModeDescription">سوف يتم إشعارك بالرسائل بشكل موثوق و فوري بإستخدام خوادم جوجل للإشعارات.</string>
|
||||
<string name="notificationsSlowModeDescription">سيقوم سيشن بالتحقق من وجود رسائل جديدة بشكل دوري في الخلفية.</string>
|
||||
<string name="open">اِفتح</string>
|
||||
<string name="urlCopy">انسخ الرابط</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">أو انضم إلى واحدة من…</string>
|
||||
<string name="notificationsFastMode">الوضع السريع</string>
|
||||
<string name="notificationsSlowMode">الوضع البطيء</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">سوف يتم إشعارك بالرسائل بشكل موثوق و فوري بإستخدام خوادم جوجل للإشعارات.</string>
|
||||
<string name="notificationsFastModeDescription">سوف يتم إشعارك بالرسائل بشكل موثوق و فوري بإستخدام خوادم جوجل للإشعارات.</string>
|
||||
<string name="notificationsSlowModeDescription">سيقوم سيشن بالتحقق من وجود رسائل جديدة بشكل دوري في الخلفية.</string>
|
||||
<string name="open">اِفتح</string>
|
||||
<string name="urlCopy">انسخ الرابط</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Və ya bunlardan birinə qoşulun…</string>
|
||||
<string name="notificationsFastMode">Sürətli rejim</string>
|
||||
<string name="notificationsSlowMode">Yavaş rejim</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Google-un bildiriş serverlərini istifadə edərək yeni mesajlardan dərhal və etibarlı şəkildə xəbərdar olacaqsınız.</string>
|
||||
<string name="notificationsFastModeDescription">Google-un bildiriş serverlərini istifadə edərək yeni mesajlardan dərhal və etibarlı şəkildə xəbərdar olacaqsınız.</string>
|
||||
<string name="notificationsSlowModeDescription">Session, arada arxaplanda yeni mesajları yoxlayacaq.</string>
|
||||
<string name="open">Aç</string>
|
||||
<string name="urlCopy">URL-ni kopyala</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Və ya bunlardan birinə qoşulun…</string>
|
||||
<string name="notificationsFastMode">Sürətli rejim</string>
|
||||
<string name="notificationsSlowMode">Yavaş rejim</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Google-un bildiriş serverlərini istifadə edərək yeni mesajlardan dərhal və etibarlı şəkildə xəbərdar olacaqsınız.</string>
|
||||
<string name="notificationsFastModeDescription">Google-un bildiriş serverlərini istifadə edərək yeni mesajlardan dərhal və etibarlı şəkildə xəbərdar olacaqsınız.</string>
|
||||
<string name="notificationsSlowModeDescription">Session, arada arxaplanda yeni mesajları yoxlayacaq.</string>
|
||||
<string name="open">Aç</string>
|
||||
<string name="urlCopy">URL-ni kopyala</string>
|
||||
|
@ -188,6 +188,6 @@
|
||||
<string name="communityJoinOfficial">O uneix-te a alguns d\'aquests…</string>
|
||||
<string name="notificationsFastMode">Mode ràpid</string>
|
||||
<string name="notificationsSlowMode">Mode lent</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Es notificaran els missatges de forma immediata i fiable fent servir els servidors de notificació de Google.</string>
|
||||
<string name="notificationsFastModeDescription">Es notificaran els missatges de forma immediata i fiable fent servir els servidors de notificació de Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session ocasionalment comprovarà en pla secundari si hi ha nous missatges.</string>
|
||||
</resources>
|
||||
|
@ -188,6 +188,6 @@
|
||||
<string name="communityJoinOfficial">O uneix-te a alguns d\'aquests…</string>
|
||||
<string name="notificationsFastMode">Mode ràpid</string>
|
||||
<string name="notificationsSlowMode">Mode lent</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Es notificaran els missatges de forma immediata i fiable fent servir els servidors de notificació de Google.</string>
|
||||
<string name="notificationsFastModeDescription">Es notificaran els missatges de forma immediata i fiable fent servir els servidors de notificació de Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session ocasionalment comprovarà en pla secundari si hi ha nous missatges.</string>
|
||||
</resources>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Nebo se připojte k jedné z těchto…</string>
|
||||
<string name="notificationsFastMode">Rychlý režim</string>
|
||||
<string name="notificationsSlowMode">Pomalý režim</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Budete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.</string>
|
||||
<string name="notificationsFastModeDescription">Budete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session občas zkontroluje nové zprávy na pozadí.</string>
|
||||
<string name="open">Otevřít</string>
|
||||
<string name="urlCopy">Zkopírovat URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Nebo se připojte k jedné z těchto…</string>
|
||||
<string name="notificationsFastMode">Rychlý režim</string>
|
||||
<string name="notificationsSlowMode">Pomalý režim</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Budete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.</string>
|
||||
<string name="notificationsFastModeDescription">Budete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session občas zkontroluje nové zprávy na pozadí.</string>
|
||||
<string name="open">Otevřít</string>
|
||||
<string name="urlCopy">Zkopírovat URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Oder tritt diesen bei…</string>
|
||||
<string name="notificationsFastMode">Schneller Modus</string>
|
||||
<string name="notificationsSlowMode">Langsamer Modus</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Du wirst über neue Nachrichten zuverlässig und sofort über Google\'s Server benachrichtigt.</string>
|
||||
<string name="notificationsFastModeDescription">Du wirst über neue Nachrichten zuverlässig und sofort über Google\'s Server benachrichtigt.</string>
|
||||
<string name="notificationsSlowModeDescription">Session sucht gelegentlich nach neuen Nachrichten im Hintergrund.</string>
|
||||
<string name="open">Öffnen</string>
|
||||
<string name="urlCopy">Link kopieren</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Oder tritt diesen bei…</string>
|
||||
<string name="notificationsFastMode">Schneller Modus</string>
|
||||
<string name="notificationsSlowMode">Langsamer Modus</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Du wirst über neue Nachrichten zuverlässig und sofort über Google\'s Server benachrichtigt.</string>
|
||||
<string name="notificationsFastModeDescription">Du wirst über neue Nachrichten zuverlässig und sofort über Google\'s Server benachrichtigt.</string>
|
||||
<string name="notificationsSlowModeDescription">Session sucht gelegentlich nach neuen Nachrichten im Hintergrund.</string>
|
||||
<string name="open">Öffnen</string>
|
||||
<string name="urlCopy">Link kopieren</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Ή συνδεθείτε σε ένα από αυτά…</string>
|
||||
<string name="notificationsFastMode">Γρήγορη Επιλογή</string>
|
||||
<string name="notificationsSlowMode">Αργή Επιλογή</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.</string>
|
||||
<string name="notificationsFastModeDescription">Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Το Session θα ελέγχει κατά καιρούς για νέα μηνύματα στο παρασκήνιο.</string>
|
||||
<string name="open">Άνοιγμα</string>
|
||||
<string name="urlCopy">Αντιγραφή URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Ή συνδεθείτε σε ένα από αυτά…</string>
|
||||
<string name="notificationsFastMode">Γρήγορη Επιλογή</string>
|
||||
<string name="notificationsSlowMode">Αργή Επιλογή</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.</string>
|
||||
<string name="notificationsFastModeDescription">Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Το Session θα ελέγχει κατά καιρούς για νέα μηνύματα στο παρασκήνιο.</string>
|
||||
<string name="open">Άνοιγμα</string>
|
||||
<string name="urlCopy">Αντιγραφή URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">O únete a uno de estos…</string>
|
||||
<string name="notificationsFastMode">Modo Rápido</string>
|
||||
<string name="notificationsSlowMode">Modo Lento</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Se le notificará de los nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.</string>
|
||||
<string name="notificationsFastModeDescription">Se le notificará de los nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session comprobará ocasionalmente si hay nuevos mensajes en segundo plano.</string>
|
||||
<string name="open">Abrir</string>
|
||||
<string name="urlCopy">Copiar la dirección URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">O únete a uno de estos…</string>
|
||||
<string name="notificationsFastMode">Modo Rápido</string>
|
||||
<string name="notificationsSlowMode">Modo Lento</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Se le notificará de los nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.</string>
|
||||
<string name="notificationsFastModeDescription">Se le notificará de los nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session comprobará ocasionalmente si hay nuevos mensajes en segundo plano.</string>
|
||||
<string name="open">Abrir</string>
|
||||
<string name="urlCopy">Copiar la dirección URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="messageVoice">پیام صوتی</string>
|
||||
<string name="communityJoinOfficial">یا به یکی از اینها بپیوندید…</string>
|
||||
<string name="notificationsFastMode">حالت سریع</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">با استفاده از سرورهای گوگل، شما به صورت سریع و مطمئن از پیامهای جدید مطلع میشوید.</string>
|
||||
<string name="notificationsFastModeDescription">با استفاده از سرورهای گوگل، شما به صورت سریع و مطمئن از پیامهای جدید مطلع میشوید.</string>
|
||||
<string name="notificationsSlowModeDescription">Session هرازگاهی در پس زمینه وجود پیامهای جدید را بررسی میکند.</string>
|
||||
<string name="open">باز کردن</string>
|
||||
<string name="urlCopy">کپی URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">یا به یکی از اینها بپیوندید…</string>
|
||||
<string name="notificationsFastMode">حالت سریع</string>
|
||||
<string name="notificationsSlowMode">حالت آهسته</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">شما سریع و مطمئن با استفاده از سرورهای اطلاعرسانی گوگل از پیامهای جدید مطلع میشوید.</string>
|
||||
<string name="notificationsFastModeDescription">شما سریع و مطمئن با استفاده از سرورهای اطلاعرسانی گوگل از پیامهای جدید مطلع میشوید.</string>
|
||||
<string name="notificationsSlowModeDescription">نشست هرازگاهی در پس زمینه وجود پیامهای جدید را بررسی میکند.</string>
|
||||
<string name="open">باز کردن</string>
|
||||
<string name="urlCopy">کپی URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Tai liity johonkin näistä…</string>
|
||||
<string name="notificationsFastMode">Nopea tila</string>
|
||||
<string name="notificationsSlowMode">Hidastila</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Sinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.</string>
|
||||
<string name="notificationsFastModeDescription">Sinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.</string>
|
||||
<string name="notificationsSlowModeDescription">Session tarkistaa taustalla ajoittain uudet viestit.</string>
|
||||
<string name="open">Avaa</string>
|
||||
<string name="urlCopy">Kopioi URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Tai liity johonkin näistä…</string>
|
||||
<string name="notificationsFastMode">Nopea tila</string>
|
||||
<string name="notificationsSlowMode">Hidastila</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Sinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.</string>
|
||||
<string name="notificationsFastModeDescription">Sinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.</string>
|
||||
<string name="notificationsSlowModeDescription">Session tarkistaa taustalla ajoittain uudet viestit.</string>
|
||||
<string name="open">Avaa</string>
|
||||
<string name="urlCopy">Kopioi URL</string>
|
||||
|
@ -202,7 +202,7 @@
|
||||
<string name="communityJoinOfficial">Ou rejoignez l\'un(e) de ceux-ci…</string>
|
||||
<string name="notificationsFastMode">Mode rapide</string>
|
||||
<string name="notificationsSlowMode">Mode lent</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Vous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.</string>
|
||||
<string name="notificationsFastModeDescription">Vous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session vérifiera occasionnellement la présence de nouveaux messages en tâche de fond.</string>
|
||||
<string name="open">Ouvrir</string>
|
||||
<string name="urlCopy">Copier l\'adresse URL</string>
|
||||
|
@ -201,7 +201,7 @@
|
||||
<string name="communityJoinOfficial">Ou rejoignez l\'un(e) de ceux-ci…</string>
|
||||
<string name="notificationsFastMode">Mode rapide</string>
|
||||
<string name="notificationsSlowMode">Mode lent</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Vous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.</string>
|
||||
<string name="notificationsFastModeDescription">Vous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session vérifiera occasionnellement la présence de nouveaux messages en tâche de fond.</string>
|
||||
<string name="open">Ouvrir</string>
|
||||
<string name="urlCopy">Copier l\'adresse URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">या इनमें से एक को जोड़ें...</string>
|
||||
<string name="notificationsFastMode">फास्ट मोड</string>
|
||||
<string name="notificationsSlowMode">स्लो मोड</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।</string>
|
||||
<string name="notificationsFastModeDescription">आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।</string>
|
||||
<string name="notificationsSlowModeDescription">Session कभी-कभी पृष्ठभूमि में नए संदेशों की जांच करेगा।</string>
|
||||
<string name="open">खोलें</string>
|
||||
<string name="urlCopy">यूआरएल कॉपी करें</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">या इनमें से एक को जोड़ें...</string>
|
||||
<string name="notificationsFastMode">फास्ट मोड</string>
|
||||
<string name="notificationsSlowMode">स्लो मोड</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।</string>
|
||||
<string name="notificationsFastModeDescription">आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।</string>
|
||||
<string name="notificationsSlowModeDescription">Session कभी-कभी पृष्ठभूमि में नए संदेशों की जांच करेगा।</string>
|
||||
<string name="open">खोलें</string>
|
||||
<string name="urlCopy">यूआरएल कॉपी करें</string>
|
||||
|
@ -194,7 +194,7 @@
|
||||
<string name="communityJoinOfficial">Vagy csatlakozz ezekhez…</string>
|
||||
<string name="notificationsFastMode">Gyorsított mód</string>
|
||||
<string name="notificationsSlowMode">Lassított mód</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">A Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kapsz az új üzenetekről.</string>
|
||||
<string name="notificationsFastModeDescription">A Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kapsz az új üzenetekről.</string>
|
||||
<string name="notificationsSlowModeDescription">A Session alkalmanként, az új üzeneteket a háttérben fogja ellenőrizni.</string>
|
||||
<string name="open">Megnyit</string>
|
||||
<string name="urlCopy">URL másolása</string>
|
||||
|
@ -194,7 +194,7 @@
|
||||
<string name="communityJoinOfficial">Vagy csatlakozz ezekhez…</string>
|
||||
<string name="notificationsFastMode">Gyorsított mód</string>
|
||||
<string name="notificationsSlowMode">Lassított mód</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">A Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kapsz az új üzenetekről.</string>
|
||||
<string name="notificationsFastModeDescription">A Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kapsz az új üzenetekről.</string>
|
||||
<string name="notificationsSlowModeDescription">A Session alkalmanként, az új üzeneteket a háttérben fogja ellenőrizni.</string>
|
||||
<string name="open">Megnyit</string>
|
||||
<string name="urlCopy">URL másolása</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Կամ միացե՛ք սրանցից մեկին…</string>
|
||||
<string name="notificationsFastMode">Արագ ռեժիմ</string>
|
||||
<string name="notificationsSlowMode">Դանդաղ ռեժիմ</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:</string>
|
||||
<string name="notificationsFastModeDescription">Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:</string>
|
||||
<string name="notificationsSlowModeDescription">Session-ը երբեմն, ֆոնային կստուգի նոր հաղորդագրությունների առկայությունը:</string>
|
||||
<string name="open">Բացել</string>
|
||||
<string name="urlCopy">Պատճենել հղումը</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Կամ միացե՛ք սրանցից մեկին…</string>
|
||||
<string name="notificationsFastMode">Արագ ռեժիմ</string>
|
||||
<string name="notificationsSlowMode">Դանդաղ ռեժիմ</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:</string>
|
||||
<string name="notificationsFastModeDescription">Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:</string>
|
||||
<string name="notificationsSlowModeDescription">Session-ը երբեմն, ֆոնային կստուգի նոր հաղորդագրությունների առկայությունը:</string>
|
||||
<string name="open">Բացել</string>
|
||||
<string name="urlCopy">Պատճենել հղումը</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Oppure unisciti a uno di questi…</string>
|
||||
<string name="notificationsFastMode">Modalità Veloce</string>
|
||||
<string name="notificationsSlowMode">Modalità Lenta</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Riceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.</string>
|
||||
<string name="notificationsFastModeDescription">Riceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session controllerà di tanto in tanto la presenza di nuovi messaggi in background.</string>
|
||||
<string name="open">Apri</string>
|
||||
<string name="urlCopy">Copia l\'URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Oppure unisciti a uno di questi…</string>
|
||||
<string name="notificationsFastMode">Modalità Veloce</string>
|
||||
<string name="notificationsSlowMode">Modalità Lenta</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Riceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.</string>
|
||||
<string name="notificationsFastModeDescription">Riceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session controllerà di tanto in tanto la presenza di nuovi messaggi in background.</string>
|
||||
<string name="open">Apri</string>
|
||||
<string name="urlCopy">Copia l\'URL</string>
|
||||
|
@ -187,7 +187,7 @@
|
||||
<string name="communityJoinOfficial">Arba prisijunkite prie vienos iš šių…</string>
|
||||
<string name="notificationsFastMode">Greita veiksena</string>
|
||||
<string name="notificationsSlowMode">Lėta veiksena</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Jums bus nedelsiant ir patikimai pranešama apie naujas žinutes, naudojant „Google“ pranešimų serverius.</string>
|
||||
<string name="notificationsFastModeDescription">Jums bus nedelsiant ir patikimai pranešama apie naujas žinutes, naudojant „Google“ pranešimų serverius.</string>
|
||||
<string name="notificationsSlowModeDescription">Session programėlė retkarčiais fone tikrins, ar yra naujų žinučių.</string>
|
||||
<string name="open">Atverti</string>
|
||||
<string name="enable">Įjungti</string>
|
||||
|
@ -187,7 +187,7 @@
|
||||
<string name="communityJoinOfficial">Arba prisijunkite prie vienos iš šių…</string>
|
||||
<string name="notificationsFastMode">Greita veiksena</string>
|
||||
<string name="notificationsSlowMode">Lėta veiksena</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Jums bus nedelsiant ir patikimai pranešama apie naujas žinutes, naudojant „Google“ pranešimų serverius.</string>
|
||||
<string name="notificationsFastModeDescription">Jums bus nedelsiant ir patikimai pranešama apie naujas žinutes, naudojant „Google“ pranešimų serverius.</string>
|
||||
<string name="notificationsSlowModeDescription">Session programėlė retkarčiais fone tikrins, ar yra naujų žinučių.</string>
|
||||
<string name="open">Atverti</string>
|
||||
<string name="enable">Įjungti</string>
|
||||
|
@ -123,7 +123,7 @@
|
||||
<string name="messageVoice">Balss ziņojums</string>
|
||||
<string name="notificationsFastMode">Ātrais režīms</string>
|
||||
<string name="notificationsSlowMode">Lēnais režīms</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Jūs saņemsiet paziņojumus par jauniem ziņojumiem droši un nekavējoties, izmantojot Google paziņojumu serverus.</string>
|
||||
<string name="notificationsFastModeDescription">Jūs saņemsiet paziņojumus par jauniem ziņojumiem droši un nekavējoties, izmantojot Google paziņojumu serverus.</string>
|
||||
<string name="notificationsSlowModeDescription">Session laiku pa laikam fonā pārbaudīs, vai nav jaunu ziņojumu.</string>
|
||||
<string name="open">Atvērt</string>
|
||||
<string name="urlCopy">Nokopēt URL</string>
|
||||
|
@ -123,7 +123,7 @@
|
||||
<string name="messageVoice">Balss ziņojums</string>
|
||||
<string name="notificationsFastMode">Ātrais režīms</string>
|
||||
<string name="notificationsSlowMode">Lēnais režīms</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Jūs saņemsiet paziņojumus par jauniem ziņojumiem droši un nekavējoties, izmantojot Google paziņojumu serverus.</string>
|
||||
<string name="notificationsFastModeDescription">Jūs saņemsiet paziņojumus par jauniem ziņojumiem droši un nekavējoties, izmantojot Google paziņojumu serverus.</string>
|
||||
<string name="notificationsSlowModeDescription">Session laiku pa laikam fonā pārbaudīs, vai nav jaunu ziņojumu.</string>
|
||||
<string name="open">Atvērt</string>
|
||||
<string name="urlCopy">Nokopēt URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Eller bli med i en av disse…</string>
|
||||
<string name="notificationsFastMode">Rask modus</string>
|
||||
<string name="notificationsSlowMode">Langsom Modus</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Du vil bli varslet om nye meldinger på en pålitelig måte, og umiddelbart ved hjelp av Googles varslingsservere.</string>
|
||||
<string name="notificationsFastModeDescription">Du vil bli varslet om nye meldinger på en pålitelig måte, og umiddelbart ved hjelp av Googles varslingsservere.</string>
|
||||
<string name="notificationsSlowModeDescription">Session vil av og til sjekke nye meldinger i bakgrunnen.</string>
|
||||
<string name="open">Åpne</string>
|
||||
<string name="urlCopy">Kopier URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Eller bli med i en av disse…</string>
|
||||
<string name="notificationsFastMode">Rask modus</string>
|
||||
<string name="notificationsSlowMode">Langsom Modus</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Du vil bli varslet om nye meldinger på en pålitelig måte, og umiddelbart ved hjelp av Googles varslingsservere.</string>
|
||||
<string name="notificationsFastModeDescription">Du vil bli varslet om nye meldinger på en pålitelig måte, og umiddelbart ved hjelp av Googles varslingsservere.</string>
|
||||
<string name="notificationsSlowModeDescription">Session vil av og til sjekke nye meldinger i bakgrunnen.</string>
|
||||
<string name="open">Åpne</string>
|
||||
<string name="urlCopy">Kopier URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Of neem deel aan een van deze...</string>
|
||||
<string name="notificationsFastMode">Snelle modus</string>
|
||||
<string name="notificationsSlowMode">Langzame modus</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">U wordt op een betrouwbare en directe manier op de hoogte gebracht van nieuwe berichten via Googles notificatieservers.</string>
|
||||
<string name="notificationsFastModeDescription">U wordt op een betrouwbare en directe manier op de hoogte gebracht van nieuwe berichten via Googles notificatieservers.</string>
|
||||
<string name="notificationsSlowModeDescription">Sessie controleert af en toe op nieuwe berichten op de achtergrond.</string>
|
||||
<string name="open">Open</string>
|
||||
<string name="urlCopy">Kopieer URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Of neem deel aan een van deze...</string>
|
||||
<string name="notificationsFastMode">Snelle modus</string>
|
||||
<string name="notificationsSlowMode">Langzame modus</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">U wordt op een betrouwbare en directe manier op de hoogte gebracht van nieuwe berichten via Googles notificatieservers.</string>
|
||||
<string name="notificationsFastModeDescription">U wordt op een betrouwbare en directe manier op de hoogte gebracht van nieuwe berichten via Googles notificatieservers.</string>
|
||||
<string name="notificationsSlowModeDescription">Sessie controleert af en toe op nieuwe berichten op de achtergrond.</string>
|
||||
<string name="open">Open</string>
|
||||
<string name="urlCopy">Kopieer URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Lub dołącz do jednego z tych…</string>
|
||||
<string name="notificationsFastMode">Tryb szybki</string>
|
||||
<string name="notificationsSlowMode">Tryb wolny</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Zostaniesz natychmiast powiadomiony o nowych wiadomościach w niezawodny sposób przy użyciu serwerów powiadomień Google.</string>
|
||||
<string name="notificationsFastModeDescription">Zostaniesz natychmiast powiadomiony o nowych wiadomościach w niezawodny sposób przy użyciu serwerów powiadomień Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session będzie czasami sprawdzać w tle czy są nowe wiadomości.</string>
|
||||
<string name="open">Otwórz</string>
|
||||
<string name="urlCopy">Skopiuj URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Lub dołącz do jednego z tych…</string>
|
||||
<string name="notificationsFastMode">Tryb szybki</string>
|
||||
<string name="notificationsSlowMode">Tryb wolny</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Zostaniesz natychmiast powiadomiony o nowych wiadomościach w niezawodny sposób przy użyciu serwerów powiadomień Google.</string>
|
||||
<string name="notificationsFastModeDescription">Zostaniesz natychmiast powiadomiony o nowych wiadomościach w niezawodny sposób przy użyciu serwerów powiadomień Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session będzie czasami sprawdzać w tle czy są nowe wiadomości.</string>
|
||||
<string name="open">Otwórz</string>
|
||||
<string name="urlCopy">Skopiuj URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Ou junte-se a um desses…</string>
|
||||
<string name="notificationsFastMode">Modo Rápido</string>
|
||||
<string name="notificationsSlowMode">Modo Lento</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Você será notificado de forma confiável e imediata sobre novas mensagens usando os servidores de notificação da Google.</string>
|
||||
<string name="notificationsFastModeDescription">Você será notificado de forma confiável e imediata sobre novas mensagens usando os servidores de notificação da Google.</string>
|
||||
<string name="notificationsSlowModeDescription">O session verificará ocasionalmente por novas mensagens em segundo plano.</string>
|
||||
<string name="open">Abrir</string>
|
||||
<string name="urlCopy">Copiar URLs</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Ou junte-se a um desses…</string>
|
||||
<string name="notificationsFastMode">Modo Rápido</string>
|
||||
<string name="notificationsSlowMode">Modo Lento</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Você será notificado de forma confiável e imediata sobre novas mensagens usando os servidores de notificação da Google.</string>
|
||||
<string name="notificationsFastModeDescription">Você será notificado de forma confiável e imediata sobre novas mensagens usando os servidores de notificação da Google.</string>
|
||||
<string name="notificationsSlowModeDescription">O session verificará ocasionalmente por novas mensagens em segundo plano.</string>
|
||||
<string name="open">Abrir</string>
|
||||
<string name="urlCopy">Copiar URLs</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Или присоединитесь к одной из этих…</string>
|
||||
<string name="notificationsFastMode">Ускоренный режим</string>
|
||||
<string name="notificationsSlowMode">Медленный режим</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Вы будете получать уведомления о новых сообщениях надежно и сразу же с помощью серверов уведомлений Google.</string>
|
||||
<string name="notificationsFastModeDescription">Вы будете получать уведомления о новых сообщениях надежно и сразу же с помощью серверов уведомлений Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session время от времени в фоновом режиме будeт проверять и получать новые сообщения.</string>
|
||||
<string name="open">Открыть</string>
|
||||
<string name="urlCopy">Копировать ссылку</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Или присоединитесь к одной из этих…</string>
|
||||
<string name="notificationsFastMode">Ускоренный режим</string>
|
||||
<string name="notificationsSlowMode">Медленный режим</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Вы будете получать уведомления о новых сообщениях надежно и сразу же с помощью серверов уведомлений Google.</string>
|
||||
<string name="notificationsFastModeDescription">Вы будете получать уведомления о новых сообщениях надежно и сразу же с помощью серверов уведомлений Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session время от времени в фоновом режиме будeт проверять и получать новые сообщения.</string>
|
||||
<string name="open">Открыть</string>
|
||||
<string name="urlCopy">Копировать ссылку</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Eller gå med i en av dessa…</string>
|
||||
<string name="notificationsFastMode">Snabbläge</string>
|
||||
<string name="notificationsSlowMode">Långsamt läge</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Du kommer att meddelas om nya meddelanden på ett tillförlitligt sätt och omedelbart genom att använda Googles aviseringsservrar.</string>
|
||||
<string name="notificationsFastModeDescription">Du kommer att meddelas om nya meddelanden på ett tillförlitligt sätt och omedelbart genom att använda Googles aviseringsservrar.</string>
|
||||
<string name="notificationsSlowModeDescription">Session kommer då och då att leta efter nya meddelanden i bakgrunden.</string>
|
||||
<string name="open">Öppna</string>
|
||||
<string name="urlCopy">&Kopiera webbadress</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Eller gå med i en av dessa…</string>
|
||||
<string name="notificationsFastMode">Snabbläge</string>
|
||||
<string name="notificationsSlowMode">Långsamt läge</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Du kommer att meddelas om nya meddelanden på ett tillförlitligt sätt och omedelbart genom att använda Googles aviseringsservrar.</string>
|
||||
<string name="notificationsFastModeDescription">Du kommer att meddelas om nya meddelanden på ett tillförlitligt sätt och omedelbart genom att använda Googles aviseringsservrar.</string>
|
||||
<string name="notificationsSlowModeDescription">Session kommer då och då att leta efter nya meddelanden i bakgrunden.</string>
|
||||
<string name="open">Öppna</string>
|
||||
<string name="urlCopy">&Kopiera webbadress</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Veya bunlardan birine katılın…</string>
|
||||
<string name="notificationsFastMode">Hızlı Mod</string>
|
||||
<string name="notificationsSlowMode">Yavaş Mod</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Google\'ın bildirim sunucularını kullanarak yeni iletilerden güvenilir ve anında haberdar olacaksınız.</string>
|
||||
<string name="notificationsFastModeDescription">Google\'ın bildirim sunucularını kullanarak yeni iletilerden güvenilir ve anında haberdar olacaksınız.</string>
|
||||
<string name="notificationsSlowModeDescription">Session ara sıra arka planda yeni mesajları kontrol eder.</string>
|
||||
<string name="open">Aç</string>
|
||||
<string name="urlCopy">Bağlantıyı kopyala</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">Veya bunlardan birine katılın…</string>
|
||||
<string name="notificationsFastMode">Hızlı Mod</string>
|
||||
<string name="notificationsSlowMode">Yavaş Mod</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Google\'ın bildirim sunucularını kullanarak yeni iletilerden güvenilir ve anında haberdar olacaksınız.</string>
|
||||
<string name="notificationsFastModeDescription">Google\'ın bildirim sunucularını kullanarak yeni iletilerden güvenilir ve anında haberdar olacaksınız.</string>
|
||||
<string name="notificationsSlowModeDescription">Session ara sıra arka planda yeni mesajları kontrol eder.</string>
|
||||
<string name="open">Aç</string>
|
||||
<string name="urlCopy">Bağlantıyı kopyala</string>
|
||||
|
@ -194,7 +194,7 @@
|
||||
<string name="communityJoinOfficial">Або приєднуйтесь до одного з цих…</string>
|
||||
<string name="notificationsFastMode">Швидкий режим</string>
|
||||
<string name="notificationsSlowMode">Медленний режим</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Вас надійно повідомлятимуть про нові сповіщщеня негайно, використовуючи сервери сповіщень Google.</string>
|
||||
<string name="notificationsFastModeDescription">Вас надійно повідомлятимуть про нові сповіщщеня негайно, використовуючи сервери сповіщень Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session буде періодично перевіряти наявність нових повідомлень у фоновому режимі.</string>
|
||||
<string name="open">Відкрити</string>
|
||||
<string name="urlCopy">Копіювати URL</string>
|
||||
|
@ -194,7 +194,7 @@
|
||||
<string name="communityJoinOfficial">Або приєднуйтесь до одного з цих…</string>
|
||||
<string name="notificationsFastMode">Швидкий режим</string>
|
||||
<string name="notificationsSlowMode">Медленний режим</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">Вас надійно повідомлятимуть про нові сповіщщеня негайно, використовуючи сервери сповіщень Google.</string>
|
||||
<string name="notificationsFastModeDescription">Вас надійно повідомлятимуть про нові сповіщщеня негайно, використовуючи сервери сповіщень Google.</string>
|
||||
<string name="notificationsSlowModeDescription">Session буде періодично перевіряти наявність нових повідомлень у фоновому режимі.</string>
|
||||
<string name="open">Відкрити</string>
|
||||
<string name="urlCopy">Копіювати URL</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">或加入下列群组…</string>
|
||||
<string name="notificationsFastMode">快速模式</string>
|
||||
<string name="notificationsSlowMode">慢速模式</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">新消息将通过 Google 通知服务器即时可靠地发送</string>
|
||||
<string name="notificationsFastModeDescription">新消息将通过 Google 通知服务器即时可靠地发送</string>
|
||||
<string name="notificationsSlowModeDescription">Session 将不时在后台获取新消息</string>
|
||||
<string name="open">打开</string>
|
||||
<string name="urlCopy">复制链接</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">或加入這些群組⋯</string>
|
||||
<string name="notificationsFastMode">快速模式</string>
|
||||
<string name="notificationsSlowMode">慢速模式</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">您將會透過 Google 的通知服務可靠且迅速的收到通知。</string>
|
||||
<string name="notificationsFastModeDescription">您將會透過 Google 的通知服務可靠且迅速的收到通知。</string>
|
||||
<string name="notificationsSlowModeDescription">Session 會偶爾在背景執行時檢查新訊息。</string>
|
||||
<string name="open">開啟</string>
|
||||
<string name="urlCopy">複製網址</string>
|
||||
|
@ -193,7 +193,7 @@
|
||||
<string name="communityJoinOfficial">或加入下列群组…</string>
|
||||
<string name="notificationsFastMode">快速模式</string>
|
||||
<string name="notificationsSlowMode">慢速模式</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">新消息将通过 Google 通知服务器即时可靠地发送。</string>
|
||||
<string name="notificationsFastModeDescription">新消息将通过 Google 通知服务器即时可靠地发送。</string>
|
||||
<string name="notificationsSlowModeDescription">Session 将不时在后台获取新消息。</string>
|
||||
<string name="open">打开</string>
|
||||
<string name="urlCopy">复制链接</string>
|
||||
|
@ -1,748 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
NOTE: The massive block of commented out strings below are the OG strings project strings - these
|
||||
have been replaced with a CrowdIn export (hundreds of lines below) - but I'm leaving these in just
|
||||
in case for the time being while we bed things in. -AL 2024-08-22
|
||||
-->
|
||||
|
||||
<!--<resources>-->
|
||||
<!-- <!– Plurals sections –>-->
|
||||
<!-- <plurals name="members">-->
|
||||
<!-- <item quantity="one">%1$d member</item>-->
|
||||
<!-- <item quantity="other">%1$d members</item>-->
|
||||
<!-- </plurals>-->
|
||||
|
||||
<!-- <plurals name="membersActive">-->
|
||||
<!-- <item quantity="one">%1$d active member</item>-->
|
||||
<!-- <item quantity="other">%1$d active members</item>-->
|
||||
<!-- </plurals>-->
|
||||
|
||||
<!-- <plurals name="searchMatches">-->
|
||||
<!-- <item quantity="one">%1$d of %2$d match</item>-->
|
||||
<!-- <item quantity="other">%1$d of %2$d matches</item>-->
|
||||
<!-- </plurals>-->
|
||||
|
||||
<!-- <plurals name="messageNewYouveGot">-->
|
||||
<!-- <item quantity="one">You\'ve got a new message.</item>-->
|
||||
<!-- <item quantity="other">You\'ve got %1$d new messages.</item>-->
|
||||
<!-- </plurals>-->
|
||||
|
||||
<!-- <plurals name="emojiReactsCountOthers">-->
|
||||
<!-- <item quantity="one">And %1$d other has reacted %2$s to this message.</item>-->
|
||||
<!-- <item quantity="other">And %1$d others have reacted %2$s to this message.</item>-->
|
||||
<!-- </plurals>-->
|
||||
|
||||
<!-- <!– Note: Currently unused and no 'old' string for this as of 2024/08/19 –>-->
|
||||
<!-- <plurals name="deleteMessagesFailed">-->
|
||||
<!-- <item quantity="one">Failed to delete message</item>-->
|
||||
<!-- <item quantity="other">Failed to delete messages</item>-->
|
||||
<!-- </plurals>-->
|
||||
|
||||
<!-- <!– Note: Currently unused and no 'old' string for this as of 2024/08/19 –>-->
|
||||
<!-- <plurals name="clearDataErrorDescription">-->
|
||||
<!-- <item quantity="one">Data not deleted by %1$d Service Node. Service Node ID: %2$s.</item>-->
|
||||
<!-- <item quantity="other">Data not deleted by %1$d Service Nodes. Service Node IDs: %2$s.</item>-->
|
||||
<!-- </plurals>-->
|
||||
|
||||
<!-- <!–-->
|
||||
<!-- Need a plural for searches I guess - see: https://discord.com/channels/408081923835953153/1274899391207047269-->
|
||||
<!-- OLD-->
|
||||
<!-- • One: {count} of {total_count} match-->
|
||||
<!-- • Other: {count} of {total_count} matches-->
|
||||
|
||||
<!-- NEW-->
|
||||
<!-- • One: {found_count} of {count} match-->
|
||||
<!-- • Other: {found_count} of {count} matches-->
|
||||
<!-- –>-->
|
||||
|
||||
<!-- <!– ========== STRAGGLERS SECTION ========== –>-->
|
||||
|
||||
<!-- <!– USED as title on media picker when you go to send an image - this can be either to a specific-->
|
||||
<!-- Button on the `Set Display Picture` dialog used to instigate choosing a profile picture to set,-->
|
||||
<!-- sending to a single person, to a closed group, or to a community (in the latter two cases it-->
|
||||
<!-- will show the group name).-->
|
||||
<!-- Figma: Unable to locate usage in Figma.-->
|
||||
<!-- Morgan 2024/07/31: "Added to Crowdin as `attachmentsSendTo` (not yet exported)" - leaving for now until I know the exact string substitution key -AL 2024/08/02-->
|
||||
<!-- –>-->
|
||||
<!-- <string name="MediaPickerActivity_send_to">Send to %s</string>-->
|
||||
|
||||
|
||||
|
||||
<!-- <!– ========== END OF STRAGGLERS SECTION ========== –>-->
|
||||
|
||||
<!-- <!– Strings with modern names and {braced} substitution markers –>-->
|
||||
<!-- <string name="about">About</string>-->
|
||||
<!-- <string name="accept">Accept</string>-->
|
||||
<!-- <string name="accountIdCopy">Copy Account ID</string>-->
|
||||
<!-- <string name="accountIdEnter">Enter Account ID</string>-->
|
||||
<!-- <string name="accountIdErrorInvalid">This Account ID is invalid. Please check and try again.</string>-->
|
||||
<!-- <string name="accountIdOrOnsEnter">Enter Account ID or ONS</string>-->
|
||||
<!-- <string name="accountIdOrOnsInvite">Invite Account ID or ONS</string>-->
|
||||
<!-- <string name="accountIdShare">Hey, I\'ve been using {app_name} to chat with complete privacy and security. Come join me!\n\nMy Account ID is\n{account_id}\n\nDownload it at\n{download_url}</string>-->
|
||||
<!-- <string name="accountIdYours">Your Account ID</string>-->
|
||||
<!-- <string name="accountIdYoursDescription">This is your Account ID. Other users can scan it to start a conversation with you.</string>-->
|
||||
<!-- <string name="actualSize">Actual Size</string>-->
|
||||
<!-- <string name="add">Add</string>-->
|
||||
<!-- <string name="adminCannotBeRemoved">Admins cannot be removed.</string>-->
|
||||
<!-- <string name="adminMorePromotedToAdmin"><b>{name}</b> and <b>{count} others</b> were promoted to Admin.</string>-->
|
||||
<!-- <string name="adminPromote">Promote Admins</string>-->
|
||||
<!-- <string name="adminPromoteDescription">Are you sure you want to promote <b>{name}</b> to admin? Admins cannot be removed.</string>-->
|
||||
<!-- <string name="adminPromoteMoreDescription">Are you sure you want to promote <b>{name}</b> and <b>{count} others</b> to admin? Admins cannot be removed.</string>-->
|
||||
<!-- <string name="adminPromoteToAdmin">Promote to Admin</string>-->
|
||||
<!-- <string name="adminPromoteTwoDescription">Are you sure you want to promote <b>{name}</b> and <b>{other_name}</b> to admin? Admins cannot be removed.</string>-->
|
||||
<!-- <string name="adminPromotedToAdmin"><b>{name}</b> was promoted to Admin.</string>-->
|
||||
<!-- <string name="adminPromotionFailed">Admin promotion failed</string>-->
|
||||
<!-- <string name="adminPromotionFailedDescription">Failed to promote {name} in {group_name}</string>-->
|
||||
<!-- <string name="adminPromotionFailedDescriptionMany">Failed to promote {name} and {count} others in {group_name}</string>-->
|
||||
<!-- <string name="adminPromotionFailedDescriptionMore">Failed to promote {name} and {other_name} in {group_name}</string>-->
|
||||
<!-- <string name="adminPromotionSent">Admin promotion sent</string>-->
|
||||
<!-- <string name="adminRemove">Remove Admins</string>-->
|
||||
<!-- <string name="adminRemoveAsAdmin">Remove as Admin</string>-->
|
||||
<!-- <string name="adminRemoveCommunityNone">There are no Admins in this Community.</string>-->
|
||||
<!-- <string name="adminRemoveFailed">Failed to remove {name} as Admin.</string>-->
|
||||
<!-- <string name="adminSendingPromotion">Sending admin promotion</string>-->
|
||||
<!-- <string name="adminSettings">Admin Settings</string>-->
|
||||
<!-- <string name="adminTwoPromotedToAdmin"><b>{name}</b> and <b>{other_name}</b> were promoted to Admin.</string>-->
|
||||
<!-- <string name="andMore">+{count}</string>-->
|
||||
<!-- <string name="anonymous">Anonymous</string>-->
|
||||
<!-- <string name="app_name" translatable="false">Session</string>-->
|
||||
<!-- <string name="appearanceAutoDarkMode">Auto dark-mode</string>-->
|
||||
<!-- <string name="appearanceHideMenuBar">Hide Menu Bar</string>-->
|
||||
<!-- <string name="appearancePreview1">How are you?</string>-->
|
||||
<!-- <string name="appearancePreview2">I\'m good thanks, you?</string>-->
|
||||
<!-- <string name="appearancePreview3">I\'m doing great, thanks.</string>-->
|
||||
<!-- <string name="appearancePrimaryColor">Primary Color</string>-->
|
||||
<!-- <string name="appearanceThemes">Themes</string>-->
|
||||
<!-- <string name="appearanceThemesClassicDark">Classic Dark</string>-->
|
||||
<!-- <string name="appearanceThemesClassicLight">Classic Light</string>-->
|
||||
<!-- <string name="appearanceThemesOceanDark">Ocean Dark</string>-->
|
||||
<!-- <string name="appearanceThemesOceanLight">Ocean Light</string>-->
|
||||
<!-- <string name="appearanceZoom">Zoom</string>-->
|
||||
<!-- <string name="attachment">Attachment</string>-->
|
||||
<!-- <string name="attachmentsAdd">Add attachment</string>-->
|
||||
<!-- <string name="attachmentsAlbumUnnamed">Unnamed Album</string>-->
|
||||
<!-- <string name="attachmentsAutoDownload">Auto-download Attachments</string>-->
|
||||
<!-- <string name="attachmentsAutoDownloadDescription">Automatically download media and files from this chat.</string>-->
|
||||
<!-- <string name="attachmentsAutoDownloadModalDescription">Would you like to automatically download all files from <b>{conversation_name}</b>?</string>-->
|
||||
<!-- <string name="attachmentsAutoDownloadModalTitle">Auto Download</string>-->
|
||||
<!-- <string name="attachmentsClearAll">Clear All Attachments</string>-->
|
||||
<!-- <string name="attachmentsClearAllDescription">Are you sure you want to clear all attachments? Messages with attachments will also be deleted.</string>-->
|
||||
<!-- <string name="attachmentsCollapseOptions">Collapse attachment options</string>-->
|
||||
<!-- <string name="attachmentsCollecting">Collecting attachments...</string>-->
|
||||
<!-- <string name="attachmentsDownload">Download Attachment</string>-->
|
||||
<!-- <string name="attachmentsDuration">Duration:</string>-->
|
||||
<!-- <string name="attachmentsErrorLoad">Error attaching file</string>-->
|
||||
<!-- <string name="attachmentsErrorNoApp">Can\'t find an app to select media.</string>-->
|
||||
<!-- <string name="attachmentsErrorNotSupported">This file type is not supported.</string>-->
|
||||
<!-- <string name="attachmentsErrorNumber">Unable to send more than 32 image and video files at once.</string>-->
|
||||
<!-- <string name="attachmentsErrorOpen">Unable to open file.</string>-->
|
||||
<!-- <string name="attachmentsErrorSending">Error sending file</string>-->
|
||||
<!-- <string name="attachmentsErrorSeparate">Please send files as separate messages.</string>-->
|
||||
<!-- <string name="attachmentsErrorSize">Files must be less than 10MB</string>-->
|
||||
<!-- <string name="attachmentsErrorTypes">Cannot attach images and video with other file types. Try sending other files in a separate message.</string>-->
|
||||
<!-- <string name="attachmentsExpired">Attachment expired</string>-->
|
||||
<!-- <string name="attachmentsFileId">File ID:</string>-->
|
||||
<!-- <string name="attachmentsFileSize">File Size:</string>-->
|
||||
<!-- <string name="attachmentsFileType">File Type:</string>-->
|
||||
<!-- <string name="attachmentsFilesEmpty">You don\'t have any files in this conversation.</string>-->
|
||||
<!-- <string name="attachmentsImageErrorMetadata">Unable to remove metadata from file.</string>-->
|
||||
<!-- <string name="attachmentsMediaEmpty">You don\'t have any media in this conversation.</string>-->
|
||||
<!-- <string name="attachmentsMediaSaved">Media saved by {name}</string>-->
|
||||
<!-- <string name="attachmentsNotification">{emoji} Attachment</string>-->
|
||||
<!-- <string name="attachmentsResolution">Resolution:</string>-->
|
||||
<!-- <string name="attachmentsSaveError">Unable to save file.</string>-->
|
||||
<!-- <string name="attachmentsTapToDownload">Tap to download {file_type}</string>-->
|
||||
<!-- <string name="attachmentsThisMonth">This Month</string>-->
|
||||
<!-- <string name="attachmentsThisWeek">This Week</string>-->
|
||||
<!-- <string name="attachmentsWarning">Attachments you save can be accessed by other apps on your device.</string>-->
|
||||
<!-- <string name="audio">Audio</string>-->
|
||||
<!-- <string name="audioNoInput">No audio input found</string>-->
|
||||
<!-- <string name="audioNoOutput">No audio output found</string>-->
|
||||
<!-- <string name="audioUnableToPlay">Unable to play audio file.</string>-->
|
||||
<!-- <string name="audioUnableToRecord">Unable to record audio.</string>-->
|
||||
<!-- <string name="authenticateFailed">Authentication Failed</string>-->
|
||||
<!-- <string name="authenticateFailedTooManyAttempts">Too many failed authentication attempts. Please try again later.</string>-->
|
||||
<!-- <string name="authenticateNotAccessed">Authentication could not be accessed.</string>-->
|
||||
<!-- <string name="authenticateToOpen">Authenticate to open {app_name}.</string>-->
|
||||
<!-- <string name="back">Back</string>-->
|
||||
<!-- <string name="banDeleteAll">Ban and Delete All</string>-->
|
||||
<!-- <string name="banErrorFailed">Ban failed</string>-->
|
||||
<!-- <string name="banUnbanErrorFailed">Unban failed</string>-->
|
||||
<!-- <string name="banUnbanUser">Unban User</string>-->
|
||||
<!-- <string name="banUser">Ban User</string>-->
|
||||
<!-- <string name="banUserBanned">User banned</string>-->
|
||||
<!-- <string name="block">Block</string>-->
|
||||
<!-- <string name="blockBlockedDescription">Unblock this contact to send a message.</string>-->
|
||||
<!-- <string name="blockBlockedNone">No blocked contacts</string>-->
|
||||
<!-- <string name="blockBlockedUser">Blocked {name}</string>-->
|
||||
<!-- <string name="blockDescription">Are you sure you want to block <b>{name}</b>? Blocked users cannot send you message requests, group invites or call you.</string>-->
|
||||
<!-- <string name="blockUnblock">Unblock</string>-->
|
||||
<!-- <string name="blockUnblockName">Are you sure you want to unblock {name}?</string>-->
|
||||
<!-- <string name="blockUnblockNameMultiple">Are you sure you want to unblock {name} and {count} others?</string>-->
|
||||
<!-- <string name="blockUnblockNameTwo">Are you sure you want to unblock {name} and 1 other?</string>-->
|
||||
<!-- <string name="blockUnblockedUser">Unblocked {name}</string>-->
|
||||
<!-- <string name="call">Call</string>-->
|
||||
<!-- <string name="callsCalledYou">{name} called you</string>-->
|
||||
<!-- <string name="callsCannotStart">You cannot start a new call. Finish your current call first.</string>-->
|
||||
<!-- <string name="callsConnecting">Connecting...</string>-->
|
||||
<!-- <string name="callsEnd">End call</string>-->
|
||||
<!-- <string name="callsErrorAnswer">Failed to answer call</string>-->
|
||||
<!-- <string name="callsErrorStart">Failed to start call</string>-->
|
||||
<!-- <string name="callsInProgress">Call in progress</string>-->
|
||||
<!-- <string name="callsIncoming">Incoming call from {name}</string>-->
|
||||
<!-- <string name="callsMissed">Missed Call</string>-->
|
||||
<!-- <string name="callsMissedCallFrom">Missed call from {name}</string>-->
|
||||
<!-- <string name="callsNotificationsRequired">Voice and Video Calls require notifications to be enabled in your device system settings. </string>-->
|
||||
<!-- <string name="callsPermissionsRequired">Call Permissions Required</string>-->
|
||||
<!-- <string name="callsPermissionsRequiredDescription">You can enable the \"Voice and Video Calls\" permission in Privacy Settings.</string>-->
|
||||
<!-- <string name="callsReconnecting">Reconnecting…</string>-->
|
||||
<!-- <string name="callsRinging">Ringing...</string>-->
|
||||
<!-- <string name="callsSessionCall">{app_name} Call</string>-->
|
||||
<!-- <string name="callsSettings">Calls (Beta)</string>-->
|
||||
<!-- <string name="callsVoiceAndVideo">Voice and Video Calls</string>-->
|
||||
<!-- <string name="callsVoiceAndVideoBeta">Voice and Video Calls (Beta)</string>-->
|
||||
<!-- <string name="callsVoiceAndVideoModalDescription">Your IP is visible to your call partner and an Oxen Foundation server while using beta calls.</string>-->
|
||||
<!-- <string name="callsVoiceAndVideoToggleDescription">Enables voice and video calls to and from other users</string>-->
|
||||
<!-- <string name="callsYouCalled">You called {name}</string>-->
|
||||
<!-- <string name="callsYouMissedCallPermissions">You missed a call from <b>{name}</b> because you haven\'t enabled <b>Voice and Video Calls</b> in Privacy Settings.</string>-->
|
||||
<!-- <string name="cameraErrorNotFound">No camera found</string>-->
|
||||
<!-- <string name="cameraErrorUnavailable">Camera unavailable.</string>-->
|
||||
<!-- <string name="cameraGrantAccess">Grant Camera Access</string>-->
|
||||
<!-- <string name="cameraGrantAccessDenied">{app_name} needs camera access to take photos and videos, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Camera\".</string>-->
|
||||
<!-- <string name="cameraGrantAccessDescription">{app_name} needs camera access to take photos and videos, or scan QR codes.</string>-->
|
||||
<!-- <string name="cameraGrantAccessQr">{app_name} needs camera access to scan QR codes</string>-->
|
||||
<!-- <string name="cancel">Cancel</string>-->
|
||||
<!-- <string name="clear">Clear</string>-->
|
||||
<!-- <string name="clearAll">Clear All</string>-->
|
||||
<!-- <string name="clearDataAll">Clear All Data</string>-->
|
||||
<!-- <string name="clearDataAllDescription">This will permanently delete your messages and contacts. Would you like to clear this device only, or delete your data from the network as well?</string>-->
|
||||
<!-- <string name="clearDataError">Data Not Deleted</string>-->
|
||||
<!-- <string name="clearDataErrorDescriptionGeneric">An unknown error occurred and your data was not deleted. Do you want to delete your data from just this device instead?</string>-->
|
||||
<!-- <string name="clearDevice">Clear Device</string>-->
|
||||
<!-- <string name="clearDeviceAndNetwork">Clear device and network</string>-->
|
||||
<!-- <string name="clearDeviceAndNetworkConfirm">Are you sure you want to delete your data from the network? If you continue, you will not be able to restore your messages or contacts.</string>-->
|
||||
<!-- <string name="clearDeviceDescription">Are you sure you want to clear your device?</string>-->
|
||||
<!-- <string name="clearDeviceOnly">Clear device only</string>-->
|
||||
<!-- <string name="clearMessages">Clear All Messages</string>-->
|
||||
<!-- <string name="clearMessagesChatDescription">Are you sure you want to clear all messages from your conversation with <b>{name}</b> from your device?</string>-->
|
||||
<!-- <string name="clearMessagesCommunity">Are you sure you want to clear all <b>{community_name}</b> messages from your device?</string>-->
|
||||
<!-- <string name="clearMessagesForEveryone">Clear for everyone</string>-->
|
||||
<!-- <string name="clearMessagesForMe">Clear for me</string>-->
|
||||
<!-- <string name="clearMessagesGroupAdminDescription">Are you sure you want to clear all <b>{group_name}</b> messages?</string>-->
|
||||
<!-- <string name="clearMessagesGroupDescription">Are you sure you want to clear all <b>{group_name}</b> messages from your device?</string>-->
|
||||
<!-- <string name="clearMessagesNoteToSelfDescription">Are you sure you want to clear all Note to Self messages from your device?</string>-->
|
||||
<!-- <string name="close">Close</string>-->
|
||||
<!-- <string name="communityEnterUrl">Enter Community URL</string>-->
|
||||
<!-- <string name="communityEnterUrlErrorInvalid">Invalid URL</string>-->
|
||||
<!-- <string name="communityEnterUrlErrorInvalidDescription">Please check the Community URL and try again.</string>-->
|
||||
<!-- <string name="communityError">Community Error</string>-->
|
||||
<!-- <string name="communityErrorDescription">Oops, an error occurred. Please try again later.</string>-->
|
||||
<!-- <string name="communityInvitation">Community Invitation</string>-->
|
||||
<!-- <string name="communityJoin">Join Community</string>-->
|
||||
<!-- <string name="communityJoinDescription">Are you sure you want to join {community_name}?</string>-->
|
||||
<!-- <string name="communityJoinError">Failed to join {community_name}</string>-->
|
||||
<!-- <string name="communityJoinOfficial">Or join one of these...</string>-->
|
||||
<!-- <string name="communityJoined">Joined Community</string>-->
|
||||
<!-- <string name="communityJoinedAlready">You are already a member of this community.</string>-->
|
||||
<!-- <string name="communityLeave">Leave Community</string>-->
|
||||
<!-- <string name="communityLeaveError">Failed to leave {community_name}</string>-->
|
||||
<!-- <string name="communityUnknown">Unknown Community</string>-->
|
||||
<!-- <string name="communityUrl">Community URL</string>-->
|
||||
<!-- <string name="communityUrlCopy">Copy Community URL</string>-->
|
||||
<!-- <string name="confirm">Confirm</string>-->
|
||||
<!-- <string name="contactContacts">Contacts</string>-->
|
||||
<!-- <string name="contactDelete">Delete Contact</string>-->
|
||||
<!-- <string name="contactDeleteDescription">Are you sure you want to delete <b>{name}</b> from your contacts? New messages from <b>{name}</b> will arrive as a message request.</string>-->
|
||||
<!-- <string name="contactNone">You don\'t have any contacts yet</string>-->
|
||||
<!-- <string name="contactSelect">Select Contacts</string>-->
|
||||
<!-- <string name="contactUserDetails">User Details</string>-->
|
||||
<!-- <string name="conversationsAddToHome">Add to home screen</string>-->
|
||||
<!-- <string name="conversationsAddedToHome">Added to home screen</string>-->
|
||||
<!-- <string name="conversationsAudioMessages">Audio Messages</string>-->
|
||||
<!-- <string name="conversationsAutoplayAudioMessage">Autoplay Audio Messages</string>-->
|
||||
<!-- <string name="conversationsAutoplayAudioMessageDescription">Autoplay consecutively sent audio messages</string>-->
|
||||
<!-- <string name="conversationsBlockedContacts">Blocked Contacts</string>-->
|
||||
<!-- <string name="conversationsCommunities">Communities</string>-->
|
||||
<!-- <string name="conversationsDelete">Delete Conversation</string>-->
|
||||
<!-- <string name="conversationsDeleteDescription">Are you sure you want to delete your conversation with <b>{name}</b>? New messages from <b>{name}</b> will start a new conversation.</string>-->
|
||||
<!-- <string name="conversationsDeleted">Conversation deleted</string>-->
|
||||
<!-- <string name="conversationsEmpty">There are no messages in {conversation_name}.</string>-->
|
||||
<!-- <string name="conversationsGroups">Groups</string>-->
|
||||
<!-- <string name="conversationsMessageTrimming">Message Trimming</string>-->
|
||||
<!-- <string name="conversationsMessageTrimmingTrimCommunities">Trim Communities</string>-->
|
||||
<!-- <string name="conversationsMessageTrimmingTrimCommunitiesDescription">Delete messages from Community conversations older than 6 months, and where there are over 2,000 messages.</string>-->
|
||||
<!-- <string name="conversationsNew">New Conversation</string>-->
|
||||
<!-- <string name="conversationsNone">You don\'t have any conversations yet</string>-->
|
||||
<!-- <string name="conversationsSendWithEnterKey">Send with Enter Key</string>-->
|
||||
<!-- <string name="conversationsSendWithEnterKeyDescription">Tapping the Enter Key will send message instead of starting a new line.</string>-->
|
||||
<!-- <string name="conversationsSettingsAllMedia">All Media</string>-->
|
||||
<!-- <string name="conversationsSpellCheck">Spell Check</string>-->
|
||||
<!-- <string name="conversationsSpellCheckDescription">Enable spell check when typing messages</string>-->
|
||||
<!-- <string name="conversationsStart">Start Conversation</string>-->
|
||||
<!-- <string name="copied">Copied</string>-->
|
||||
<!-- <string name="copy">Copy</string>-->
|
||||
<!-- <string name="create">Create</string>-->
|
||||
<!-- <string name="cut">Cut</string>-->
|
||||
<!-- <string name="databaseErrorGeneric">A database error occurred.\n\nExport your application logs to share for troubleshooting. If this is unsuccessful, reinstall {app_name} and restore your account.\n\nWarning: This will result in loss of all messages, attachments, and account data older than two weeks.</string>-->
|
||||
<!-- <string name="databaseOptimizing">Optimizing Database</string>-->
|
||||
<!-- <string name="decline">Decline</string>-->
|
||||
<!-- <string name="delete">Delete</string>-->
|
||||
<!-- <string name="deleteAfterGroupFirstReleaseConfigOutdated">Some of your devices are using outdated versions. Syncing may be unreliable until they are updated.</string>-->
|
||||
<!-- <string name="deleteAfterGroupPR3DeleteMessagesConfirmation">Permanently delete the messages in this conversation?</string>-->
|
||||
<!-- <string name="deleteAfterLegacyDisappearingMessagesLegacy">Legacy</string>-->
|
||||
<!-- <string name="deleteAfterLegacyDisappearingMessagesOriginal">Original version of disappearing messages.</string>-->
|
||||
<!-- <string name="deleteAfterLegacyDisappearingMessagesTheyChangedTimer"><b>{name}</b> set the disappearing message timer to <b>{time}</b></string>-->
|
||||
<!-- <string name="deleteMessage">Delete Message</string>-->
|
||||
<!-- <string name="deleteMessageConfirm">Are you sure you want to delete this message?</string>-->
|
||||
<!-- <string name="deleteMessageDeleted">Message deleted</string>-->
|
||||
<!-- <string name="deleteMessageDescriptionDevice">Are you sure you want to delete these messages from this device only?</string>-->
|
||||
<!-- <string name="deleteMessageDescriptionEveryone">Are you sure you want to delete this message for everyone?</string>-->
|
||||
<!-- <string name="deleteMessageDeviceOnly">Delete on this device only</string>-->
|
||||
<!-- <string name="deleteMessageEveryone">Delete for everyone</string>-->
|
||||
<!-- <string name="deleteMessages">Delete Messages</string>-->
|
||||
<!-- <string name="deleteMessagesConfirm">Are you sure you want to delete these messages?</string>-->
|
||||
<!-- <string name="deleteMessagesDeleted">Messages deleted</string>-->
|
||||
<!-- <string name="deleteMessagesDescriptionDevice">Are you sure you want to delete these messages from your device?</string>-->
|
||||
<!-- <string name="deleteMessagesDescriptionEveryone">Are you sure you want to delete these messages for everyone?</string>-->
|
||||
<!-- <string name="deleting">Deleting</string>-->
|
||||
<!-- <string name="developerToolsToggle">Toggle Developer Tools</string>-->
|
||||
<!-- <string name="disappearingMessages">Disappearing Messages</string>-->
|
||||
<!-- <string name="disappearingMessagesCountdownBigMobile">Auto-deletes in {time_large}</string>-->
|
||||
<!-- <string name="disappearingMessagesCountdownBigSmallMobile">Auto-deletes in {time_large} {time_small}</string>-->
|
||||
<!-- <string name="disappearingMessagesDeleteType">Delete Type</string>-->
|
||||
<!-- <string name="disappearingMessagesDescription">This setting applies to everyone in this conversation.</string>-->
|
||||
<!-- <string name="disappearingMessagesDescription1">This setting applies to messages you send in this conversation.</string>-->
|
||||
<!-- <string name="disappearingMessagesDisappear">Disappear After {disappearing_messages_type} - {time}</string>-->
|
||||
<!-- <string name="disappearingMessagesDisappearAfterRead">Disappear After Read</string>-->
|
||||
<!-- <string name="disappearingMessagesDisappearAfterReadDescription">Messages delete after they have been read.</string>-->
|
||||
<!-- <string name="disappearingMessagesDisappearAfterSend">Disappear After Send</string>-->
|
||||
<!-- <string name="disappearingMessagesDisappearAfterSendDescription">Messages delete after they have been sent.</string>-->
|
||||
<!-- <string name="disappearingMessagesFollowSetting">Follow Setting</string>-->
|
||||
<!-- <string name="disappearingMessagesFollowSettingOff">Set your messages to disappear <b>{time}</b> after they have been <b>{disappearing_messages_type}</b>?</string>-->
|
||||
<!-- <string name="disappearingMessagesFollowSettingOn">Set your messages to disappear <b>{time}</b> after they have been <b>{disappearing_messages_type}</b>?</string>-->
|
||||
<!-- <string name="disappearingMessagesLegacy">{name} is using an outdated client. Disappearing messages may not work as expected.</string>-->
|
||||
<!-- <string name="disappearingMessagesOnlyAdmins">Only group admins can change this setting.</string>-->
|
||||
<!-- <string name="disappearingMessagesSent">Sent</string>-->
|
||||
<!-- <string name="disappearingMessagesSet"><b>{name}</b> has set messages to disappear {time} after they have been {disappearing_messages_type}.</string>-->
|
||||
<!-- <string name="disappearingMessagesSetYou"><b>You</b> set messages to disappear {time} after they have been {disappearing_messages_type}.</string>-->
|
||||
<!-- <string name="disappearingMessagesTimer">Timer</string>-->
|
||||
<!-- <string name="disappearingMessagesTurnedOff"><b>{name}</b> has turned disappearing messages off. Messages they send will no longer disappear.</string>-->
|
||||
<!-- <string name="disappearingMessagesTurnedOffYou"><b>You</b> turned <b>off</b> disappearing messages. Messages you send will no longer disappear.</string>-->
|
||||
<!-- <string name="disappearingMessagesTypeRead">read</string>-->
|
||||
<!-- <string name="disappearingMessagesTypeSent">sent</string>-->
|
||||
<!-- <string name="disappearingMessagesUpdated"><b>{admin_name}</b> updated disappearing message settings.</string>-->
|
||||
<!-- <string name="disappearingMessagesUpdatedYou"><b>You</b> updated disappearing message settings.</string>-->
|
||||
<!-- <string name="dismiss">Dismiss</string>-->
|
||||
<!-- <string name="displayNameDescription">It can be your real name, an alias, or anything else you like — and you can change it at any time.</string>-->
|
||||
<!-- <string name="displayNameEnter">Enter your display name</string>-->
|
||||
<!-- <string name="displayNameErrorDescription">Please enter a display name</string>-->
|
||||
<!-- <string name="displayNameErrorDescriptionShorter">Please enter a shorter display name</string>-->
|
||||
<!-- <string name="displayNameErrorNew">We were unable to load your display name. Please enter a new display name to continue.</string>-->
|
||||
<!-- <string name="displayNameNew">Pick a new display name</string>-->
|
||||
<!-- <string name="displayNamePick">Pick your display name</string>-->
|
||||
<!-- <string name="displayNameSet">Set Display Name</string>-->
|
||||
<!-- <string name="document">Document</string>-->
|
||||
<!-- <string name="done">Done</string>-->
|
||||
<!-- <string name="download">Download</string>-->
|
||||
<!-- <string name="downloading">Downloading...</string>-->
|
||||
<!-- <string name="draft">Draft</string>-->
|
||||
<!-- <string name="edit">Edit</string>-->
|
||||
<!-- <string name="emojiAndSymbols">Emoji & Symbols</string>-->
|
||||
<!-- <string name="emojiCategoryActivities">Activities</string>-->
|
||||
<!-- <string name="emojiCategoryAnimals">Animals & Nature</string>-->
|
||||
<!-- <string name="emojiCategoryFlags">Flags</string>-->
|
||||
<!-- <string name="emojiCategoryFood">Food & Drink</string>-->
|
||||
<!-- <string name="emojiCategoryObjects">Objects</string>-->
|
||||
<!-- <string name="emojiCategoryRecentlyUsed">Recently Used</string>-->
|
||||
<!-- <string name="emojiCategorySmileys">Smileys & People</string>-->
|
||||
<!-- <string name="emojiCategorySymbols">Symbols</string>-->
|
||||
<!-- <string name="emojiCategoryTravel">Travel & Places</string>-->
|
||||
<!-- <string name="emojiReactsCoolDown">Slow down! You\'ve sent too many emoji reacts. Try again soon</string>-->
|
||||
<!-- <string name="emojiReactsNotification">Reacted to your message {emoji}</string>-->
|
||||
<!-- <string name="enable">Enable</string>-->
|
||||
<!-- <string name="errorConnection">Please check your internet connection and try again.</string>-->
|
||||
<!-- <string name="errorCopyAndQuit">Copy Error and Quit</string>-->
|
||||
<!-- <string name="errorDatabase">Database Error</string>-->
|
||||
<!-- <string name="errorUnknown">An unknown error occurred.</string>-->
|
||||
<!-- <string name="failures">Failures</string>-->
|
||||
<!-- <string name="file">File</string>-->
|
||||
<!-- <string name="files">Files</string>-->
|
||||
<!-- <string name="followSystemSettings">Follow system settings</string>-->
|
||||
<!-- <string name="from">From:</string>-->
|
||||
<!-- <string name="fullScreenToggle">Toggle Full Screen</string>-->
|
||||
<!-- <string name="gif">GIF</string>-->
|
||||
<!-- <string name="giphyWarning">Giphy</string>-->
|
||||
<!-- <string name="giphyWarningDescription">{app_name} will connect to Giphy to provide search results. You will not have full metadata protection when sending GIFs.</string>-->
|
||||
<!-- <string name="groupAddMemberMaximum">Groups have a maximum of 100 members</string>-->
|
||||
<!-- <string name="groupCreate">Create Group</string>-->
|
||||
<!-- <string name="groupCreateErrorNoMembers">Please pick at least one other group member.</string>-->
|
||||
<!-- <string name="groupDelete">Delete Group</string>-->
|
||||
<!-- <string name="groupDeleteDescription">Are you sure you want to delete <b>{group_name}</b>? This will remove all members and delete all group content.</string>-->
|
||||
<!-- <string name="groupDescriptionEnter">Enter a group description</string>-->
|
||||
<!-- <string name="groupDisplayPictureUpdated">Group display picture updated.</string>-->
|
||||
<!-- <string name="groupEdit">Edit Group</string>-->
|
||||
<!-- <string name="groupError">Group Error</string>-->
|
||||
<!-- <string name="groupErrorCreate">Failed to create group. Please check your internet connection and try again.</string>-->
|
||||
<!-- <string name="groupErrorJoin">Failed to join {group_name}</string>-->
|
||||
<!-- <string name="groupInformationSet">Set Group Information</string>-->
|
||||
<!-- <string name="groupInviteDelete">Are you sure you want to delete this group invite?</string>-->
|
||||
<!-- <string name="groupInviteFailed">Invite failed</string>-->
|
||||
<!-- <string name="groupInviteFailedMore">Failed to invite {name} and {count} others to {group_name}</string>-->
|
||||
<!-- <string name="groupInviteFailedTwo">Failed to invite {name} and {other_name} to {group_name}</string>-->
|
||||
<!-- <string name="groupInviteFailedUser">Failed to invite {name} to {group_name}</string>-->
|
||||
<!-- <string name="groupInviteSending">Sending invite</string>-->
|
||||
<!-- <string name="groupInviteSent">Invite sent</string>-->
|
||||
<!-- <string name="groupInviteVersion">Users must have version {version} or higher to receive invitations</string>-->
|
||||
<!-- <string name="groupInviteYou"><b>You</b> were invited to join the group.</string>-->
|
||||
<!-- <string name="groupLeave">Leave Group</string>-->
|
||||
<!-- <string name="groupLeaveDescription">Are you sure you want to leave {group_name}?</string>-->
|
||||
<!-- <string name="groupLeaveDescriptionAdmin">Are you sure you want to leave {group_name}? This will deactivate the group for all members.</string>-->
|
||||
<!-- <string name="groupLeaveErrorFailed">Failed to leave {group_name}</string>-->
|
||||
<!-- <string name="groupLegacyBanner">Groups have been upgraded, create a new group to upgrade. Old group functionality will be degraded from {date}.</string>-->
|
||||
<!-- <string name="groupMemberLeft"><b>{name}</b> left the group.</string>-->
|
||||
<!-- <string name="groupMemberLeftMore"><b>{name}</b> and <b>{count} others</b> left the group.</string>-->
|
||||
<!-- <string name="groupMemberLeftTwo"><b>{name}</b> and <b>{other_name}</b> left the group.</string>-->
|
||||
<!-- <string name="groupMemberMoreNew"><b>{name}</b> and <b>{count} others</b> joined the group.</string>-->
|
||||
<!-- <string name="groupMemberNew"><b>{name}</b> joined the group.</string>-->
|
||||
<!-- <string name="groupMemberTwoNew"><b>{name}</b> and <b>{other_name}</b> joined the group.</string>-->
|
||||
<!-- <string name="groupMemberYouLeft"><b>You</b> left the group.</string>-->
|
||||
<!-- <string name="groupMembers">Group Members</string>-->
|
||||
<!-- <string name="groupMembersNone">There are no other members in this group.</string>-->
|
||||
<!-- <string name="groupName">Group Name</string>-->
|
||||
<!-- <string name="groupNameEnter">Enter a group name</string>-->
|
||||
<!-- <string name="groupNameEnterPlease">Please enter a group name.</string>-->
|
||||
<!-- <string name="groupNameEnterShorter">Please enter a shorter group name.</string>-->
|
||||
<!-- <string name="groupNameNew">Group name is now {group_name}.</string>-->
|
||||
<!-- <string name="groupNameUpdated">Group name updated.</string>-->
|
||||
<!-- <string name="groupNoMessages">You have no messages from <b>{group_name}</b>. Send a message to start the conversation!</string>-->
|
||||
<!-- <string name="groupOnlyAdmin">You are the only admin in <b>{group_name}</b>.\nGroup members and settings cannot be changed without an admin.</string>-->
|
||||
<!-- <string name="groupPromotedYou"><b>You</b> were promoted to Admin.</string>-->
|
||||
<!-- <string name="groupRemoveDescription">Would you like to remove <b>{name}</b> from <b>{group_name}</b>?</string>-->
|
||||
<!-- <string name="groupRemoveMessages">Remove user and their messages</string>-->
|
||||
<!-- <string name="groupRemoveMoreDescription">Would you like to remove <b>{name}</b> and <b>{count} others</b> from <b>{group_name}</b>?</string>-->
|
||||
<!-- <string name="groupRemoveTwoDescription">Would you like to remove <b>{name}</b> and <b>{other_name}</b> from <b>{group_name}</b>?</string>-->
|
||||
<!-- <string name="groupRemoveUserOnly">Remove user</string>-->
|
||||
<!-- <string name="groupRemoveUsersMessages">Remove users and their messages</string>-->
|
||||
<!-- <string name="groupRemoveUsersOnly">Remove users</string>-->
|
||||
<!-- <string name="groupRemoved"><b>{name}</b> was removed from the group.</string>-->
|
||||
<!-- <string name="groupRemovedMore"><b>{name}</b> and <b>{count}</b> others were removed from the group.</string>-->
|
||||
<!-- <string name="groupRemovedTwo"><b>{name}</b> and <b>{other_name}</b> were removed from the group.</string>-->
|
||||
<!-- <string name="groupRemovedYou">You were removed from <b>{group_name}</b>.</string>-->
|
||||
<!-- <string name="groupSetDisplayPicture">Set Group Display Picture</string>-->
|
||||
<!-- <string name="groupUnknown">Unknown Group</string>-->
|
||||
<!-- <string name="groupUpdated">Group updated</string>-->
|
||||
<!-- <string name="helpFAQ">FAQ</string>-->
|
||||
<!-- <string name="helpHelpUsTranslateSession">Help us translate {app_name}</string>-->
|
||||
<!-- <string name="helpReportABug">Report a bug</string>-->
|
||||
<!-- <string name="helpReportABugDescription">Share some details to help us resolve your issue. Export your logs, then upload the file through {app_name}\'s Help Desk.</string>-->
|
||||
<!-- <string name="helpReportABugExportLogs">Export Logs</string>-->
|
||||
<!-- <string name="helpReportABugExportLogsDescription">Export your logs, then upload the file through {app_name}\'s Help Desk.</string>-->
|
||||
<!-- <string name="helpSupport">Support</string>-->
|
||||
<!-- <string name="helpWedLoveYourFeedback">We\'d love your feedback</string>-->
|
||||
<!-- <string name="hide">Hide</string>-->
|
||||
<!-- <string name="hideOthers">Hide Others</string>-->
|
||||
<!-- <string name="image">Image</string>-->
|
||||
<!-- <string name="incognitoKeyboard">Incognito Keyboard</string>-->
|
||||
<!-- <string name="incognitoKeyboardDescription">Request incognito mode if available. Depending on the keyboard you are using, your keyboard may ignore this request.</string>-->
|
||||
<!-- <string name="info">Info</string>-->
|
||||
<!-- <string name="invalidShortcut">Invalid shortcut</string>-->
|
||||
<!-- <string name="join">Join</string>-->
|
||||
<!-- <string name="later">Later</string>-->
|
||||
<!-- <string name="learnMore">Learn More</string>-->
|
||||
<!-- <string name="leave">Leave</string>-->
|
||||
<!-- <string name="leaving">Leaving...</string>-->
|
||||
<!-- <string name="linkPreviews">Link Previews</string>-->
|
||||
<!-- <string name="linkPreviewsDescription">Show link previews for supported URLs.</string>-->
|
||||
<!-- <string name="linkPreviewsEnable">Enable Link Previews</string>-->
|
||||
<!-- <string name="linkPreviewsErrorLoad">Unable to load link preview</string>-->
|
||||
<!-- <string name="linkPreviewsErrorUnsecure">Preview not loaded for unsecure link</string>-->
|
||||
<!-- <string name="linkPreviewsFirstDescription">Display previews for URLs you send and receive. This can be useful, however {app_name} must contact linked websites to generate previews. You can always turn off link previews in {app_name}\'s settings.</string>-->
|
||||
<!-- <string name="linkPreviewsSend">Send Link Previews</string>-->
|
||||
<!-- <string name="linkPreviewsSendModalDescription">You will not have full metadata protection when sending link previews.</string>-->
|
||||
<!-- <string name="loadAccount">Load Account</string>-->
|
||||
<!-- <string name="loadAccountProgressMessage">Loading your account</string>-->
|
||||
<!-- <string name="lockApp">Lock App</string>-->
|
||||
<!-- <string name="lockAppDescriptionAndroid">Require fingerprint, PIN, pattern or password to unlock {app_name}.</string>-->
|
||||
<!-- <string name="lockAppEnablePasscode">You must enable a passcode in your iOS Settings in order to use Screen Lock.</string>-->
|
||||
<!-- <string name="lockAppLocked">{app_name} is locked</string>-->
|
||||
<!-- <string name="lockAppQuickResponse">Quick response unavailable when {app_name} is locked!</string>-->
|
||||
<!-- <string name="lockAppStatus">Lock status</string>-->
|
||||
<!-- <string name="lockAppUnlock">Tap to unlock</string>-->
|
||||
<!-- <string name="lockAppUnlocked">{app_name} is unlocked</string>-->
|
||||
<!-- <string name="max">Max</string>-->
|
||||
<!-- <string name="media">Media</string>-->
|
||||
<!-- <string name="membersAddAccountIdOrOns">Add Account ID or ONS</string>-->
|
||||
<!-- <string name="membersInvite">Invite Contacts</string>-->
|
||||
<!-- <string name="membersInviteSend">Send Invite</string>-->
|
||||
<!-- <string name="membersInviteSendMultiple">Send Invites</string>-->
|
||||
<!-- <string name="membersInviteShareDescription">Would you like to share group message history with <b>{name}</b>?</string>-->
|
||||
<!-- <string name="membersInviteShareMessageHistory">Share message history</string>-->
|
||||
<!-- <string name="membersInviteShareMoreDescription">Would you like to share group message history with <b>{name}</b> and <b>{count} others</b>?</string>-->
|
||||
<!-- <string name="membersInviteShareNewMessagesOnly">Share new messages only</string>-->
|
||||
<!-- <string name="membersInviteShareTwoDescription">Would you like to share group message history with <b>{name}</b> and <b>{other_name}</b>?</string>-->
|
||||
<!-- <string name="membersInviteTitle">Invite</string>-->
|
||||
<!-- <string name="message">Message</string>-->
|
||||
<!-- <string name="messageEmpty">This message is empty.</string>-->
|
||||
<!-- <string name="messageErrorDelivery">Message delivery failed</string>-->
|
||||
<!-- <string name="messageErrorLimit">Message limit reached</string>-->
|
||||
<!-- <string name="messageErrorOld">Received a message encrypted using an old version of {app_name} that is no longer supported. Please ask the sender to update to the most recent version and resend the message.</string>-->
|
||||
<!-- <string name="messageErrorOriginal">Original message not found</string>-->
|
||||
<!-- <string name="messageInfo">Message Info</string>-->
|
||||
<!-- <string name="messageMarkRead">Mark read</string>-->
|
||||
<!-- <string name="messageMarkUnread">Mark unread</string>-->
|
||||
<!-- <string name="messageNew">New Message</string>-->
|
||||
<!-- <string name="messageNewDescriptionMobile">Start a new conversation by entering your friend\'s Account ID, ONS or scanning their QR code.</string>-->
|
||||
<!-- <string name="messageNewMessages">New Messages</string>-->
|
||||
<!-- <string name="messageNewYouveGotA">You\'ve got a new message</string>-->
|
||||
<!-- <string name="messageNewYouveGotMany">You\'ve got {count} new messages.</string>-->
|
||||
<!-- <string name="messageReplyingTo">Replying to</string>-->
|
||||
<!-- <string name="messageRequestGroupInvite"><b>{name}</b> invited you to join <b>{group_name}</b>.</string>-->
|
||||
<!-- <string name="messageRequestGroupInviteDescription">Sending a message to this group will automatically accept the group invite.</string>-->
|
||||
<!-- <string name="messageRequestPending">Your message request is currently pending.</string>-->
|
||||
<!-- <string name="messageRequestPendingDescription">You will be able to send voice messages and attachments once the recipient has approved this message request.</string>-->
|
||||
<!-- <string name="messageRequestYouHaveAccepted">You have accepted the message request from <b>{name}</b>.</string>-->
|
||||
<!-- <string name="messageRequestsAcceptDescription">Sending a message to this user will automatically accept their message request and reveal your Account ID.</string>-->
|
||||
<!-- <string name="messageRequestsAccepted">Your message request has been accepted.</string>-->
|
||||
<!-- <string name="messageRequestsClearAllExplanation">Are you sure you want to clear all message and group invites?</string>-->
|
||||
<!-- <string name="messageRequestsCommunities">Community Message Requests</string>-->
|
||||
<!-- <string name="messageRequestsCommunitiesDescription">Allow message requests from Community conversations.</string>-->
|
||||
<!-- <string name="messageRequestsDelete">Are you sure you want to delete this message request?</string>-->
|
||||
<!-- <string name="messageRequestsNew">You have a new message request</string>-->
|
||||
<!-- <string name="messageRequestsNonePending">No pending message requests</string>-->
|
||||
<!-- <string name="messageRequestsTurnedOff"><b>{name}</b> has message requests from Community conversations turned off, so you cannot send them a message.</string>-->
|
||||
<!-- <string name="messageSelect">Select Message</string>-->
|
||||
<!-- <string name="messageStatusFailedToSend">Failed to send</string>-->
|
||||
<!-- <string name="messageStatusFailedToSync">Failed to sync</string>-->
|
||||
<!-- <string name="messageStatusSyncing">Syncing</string>-->
|
||||
<!-- <string name="messageStatusUploading">Uploading</string>-->
|
||||
<!-- <string name="messageUnread">Unread messages</string>-->
|
||||
<!-- <string name="messageVoice">Voice Message</string>-->
|
||||
<!-- <string name="messageVoiceErrorShort">Hold to record a voice message</string>-->
|
||||
<!-- <string name="messageVoiceSlideToCancel">Slide to Cancel</string>-->
|
||||
<!-- <string name="messages">Messages</string>-->
|
||||
<!-- <string name="minimize">Minimize</string>-->
|
||||
<!-- <string name="next">Next</string>-->
|
||||
<!-- <string name="nicknameDescription">Choose a nickname for {name}. This will appear to you in your one-to-one and group conversations.</string>-->
|
||||
<!-- <string name="nicknameEnter">Enter nickname</string>-->
|
||||
<!-- <string name="nicknameSet">Set Nickname</string>-->
|
||||
<!-- <string name="no">No</string>-->
|
||||
<!-- <string name="noSuggestions">No Suggestions</string>-->
|
||||
<!-- <string name="none">None</string>-->
|
||||
<!-- <string name="notNow">Not now</string>-->
|
||||
<!-- <string name="noteToSelf">Note to Self</string>-->
|
||||
<!-- <string name="noteToSelfEmpty">You have no messages in Note to Self.</string>-->
|
||||
<!-- <string name="noteToSelfHide">Hide Note to Self</string>-->
|
||||
<!-- <string name="noteToSelfHideDescription">Are you sure you want to hide Note to Self?</string>-->
|
||||
<!-- <string name="notificationsAllMessages">All Messages</string>-->
|
||||
<!-- <string name="notificationsAndroidSystem">{message_count} new messages in {conversation_count} conversations</string>-->
|
||||
<!-- <string name="notificationsContent">Notification Content</string>-->
|
||||
<!-- <string name="notificationsContentDescription">The information shown in notifications.</string>-->
|
||||
<!-- <string name="notificationsContentShowNameAndContent">Name and Content</string>-->
|
||||
<!-- <string name="notificationsContentShowNameOnly">Name Only</string>-->
|
||||
<!-- <string name="notificationsContentShowNoNameOrContent">No Name or Content</string>-->
|
||||
<!-- <string name="notificationsFastMode">Fast Mode</string>-->
|
||||
<!-- <string name="notificationsFastModeDescriptionAndroid">You\'ll be notified of new messages reliably and immediately using Google\'s notification Servers.</string>-->
|
||||
<!-- <string name="notificationsGoToDevice">Go to device notification settings</string>-->
|
||||
<!-- <string name="notificationsLedColor">LED color</string>-->
|
||||
<!-- <string name="notificationsMentionsOnly">Mentions Only</string>-->
|
||||
<!-- <string name="notificationsMessage">Message notifications</string>-->
|
||||
<!-- <string name="notificationsMostRecent">Most recent from {name}</string>-->
|
||||
<!-- <string name="notificationsMute">Mute</string>-->
|
||||
<!-- <string name="notificationsMuteFor">Mute for {time_large}</string>-->
|
||||
<!-- <string name="notificationsMuteUnmute">Unmute</string>-->
|
||||
<!-- <string name="notificationsMuted">Muted</string>-->
|
||||
<!-- <string name="notificationsSlowMode">Slow Mode</string>-->
|
||||
<!-- <string name="notificationsSlowModeDescription">{app_name} will occasionally check for new messages in the background.</string>-->
|
||||
<!-- <string name="notificationsSound">Sound</string>-->
|
||||
<!-- <string name="notificationsSoundDescription">Sound when App is open</string>-->
|
||||
<!-- <string name="notificationsStrategy">Notification Strategy</string>-->
|
||||
<!-- <string name="notificationsStyle">Notification Style</string>-->
|
||||
<!-- <string name="notificationsVibrate">Vibrate</string>-->
|
||||
<!-- <string name="off">Off</string>-->
|
||||
<!-- <string name="onboardingAccountCreate">Create account</string>-->
|
||||
<!-- <string name="onboardingAccountCreated">Account Created</string>-->
|
||||
<!-- <string name="onboardingAccountExists">I have an account</string>-->
|
||||
<!-- <string name="onboardingBackAccountCreation">You cannot go back further. In order to cancel your account creation, {app_name} needs to quit.</string>-->
|
||||
<!-- <string name="onboardingBubbleCreatingAnAccountIsEasy">Creating an account is instant, free, and anonymous</string>-->
|
||||
<!-- <string name="onboardingBubbleNoPhoneNumber">You don\'t even need a phone number to sign up.</string>-->
|
||||
<!-- <string name="onboardingBubblePrivacyInYourPocket">Privacy in your pocket.</string>-->
|
||||
<!-- <string name="onboardingBubbleSessionIsEngineered">{app_name} is engineered to protect your privacy.</string>-->
|
||||
<!-- <string name="onboardingBubbleWelcomeToSession">Welcome to {app_name}</string>-->
|
||||
<!-- <string name="onboardingHitThePlusButton">Hit the plus button to start a chat, create a group, or join an official community!</string>-->
|
||||
<!-- <string name="onboardingMessageNotificationExplanation">There are two ways {app_name} can notify you of new messages.</string>-->
|
||||
<!-- <string name="onboardingPrivacy">Privacy Policy</string>-->
|
||||
<!-- <string name="onboardingTos">Terms of Service</string>-->
|
||||
<!-- <string name="onboardingTosPrivacy">By using this service, you agree to our <b>Terms of Service</b> and <b>Privacy Policy</b></string>-->
|
||||
<!-- <string name="onionRoutingPath">Path</string>-->
|
||||
<!-- <string name="onionRoutingPathDescription">{app_name} hides your IP by routing your messages through multiple service nodes in {app_name}\'s decentralized network. This is your current path:</string>-->
|
||||
<!-- <string name="onionRoutingPathDestination">Destination</string>-->
|
||||
<!-- <string name="onionRoutingPathEntryNode">Entry Node</string>-->
|
||||
<!-- <string name="onionRoutingPathServiceNode">Service Node</string>-->
|
||||
<!-- <string name="onionRoutingPathUnknownCountry">Unknown Country</string>-->
|
||||
<!-- <string name="onsErrorNotRecognized">We couldn\'t recognize this ONS. Please check it and try again.</string>-->
|
||||
<!-- <string name="onsErrorUnableToSearch">We were unable to search for this ONS. Please try again later.</string>-->
|
||||
<!-- <string name="open">Open</string>-->
|
||||
<!-- <string name="other">Other</string>-->
|
||||
<!-- <string name="passwordChange">Change Password</string>-->
|
||||
<!-- <string name="passwordChangeDescription">Change the password required to unlock {app_name}.</string>-->
|
||||
<!-- <string name="passwordChangedDescription">Your password has been changed. Please keep it safe.</string>-->
|
||||
<!-- <string name="passwordConfirm">Confirm password</string>-->
|
||||
<!-- <string name="passwordCreate">Create your password</string>-->
|
||||
<!-- <string name="passwordCurrentIncorrect">Your current password is incorrect.</string>-->
|
||||
<!-- <string name="passwordDescription">Require password to unlock {app_name}.</string>-->
|
||||
<!-- <string name="passwordEnterCurrent">Please enter your current password.</string>-->
|
||||
<!-- <string name="passwordEnterNew">Please enter your new password</string>-->
|
||||
<!-- <string name="passwordError">Password must only contain letters, numbers and symbols</string>-->
|
||||
<!-- <string name="passwordErrorLength">Password must be between 6 and 64 characters long</string>-->
|
||||
<!-- <string name="passwordErrorMatch">Passwords do not match</string>-->
|
||||
<!-- <string name="passwordFailed">Failed to set password</string>-->
|
||||
<!-- <string name="passwordIncorrect">Incorrect password</string>-->
|
||||
<!-- <string name="passwordRemove">Remove Password</string>-->
|
||||
<!-- <string name="passwordRemoveDescription">Remove the password required to unlock Session.</string>-->
|
||||
<!-- <string name="passwordRemovedDescription">Your password has been removed.</string>-->
|
||||
<!-- <string name="passwordSet">Set Password</string>-->
|
||||
<!-- <string name="passwordSetDescription">Your password has been set. Please keep it safe.</string>-->
|
||||
<!-- <string name="paste">Paste</string>-->
|
||||
<!-- <string name="permissionsAutoUpdate">Auto Update</string>-->
|
||||
<!-- <string name="permissionsAutoUpdateDescription">Automatically check for updates on startup</string>-->
|
||||
<!-- <string name="permissionsKeepInSystemTray">Keep in System Tray</string>-->
|
||||
<!-- <string name="permissionsMicrophone">Microphone</string>-->
|
||||
<!-- <string name="permissionsMicrophoneAccessRequired">Microphone Access Required</string>-->
|
||||
<!-- <string name="permissionsMicrophoneAccessRequiredAndroid">{app_name} needs microphone access to send audio messages, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\".</string>-->
|
||||
<!-- <string name="permissionsMicrophoneDescription">Allow access to microphone</string>-->
|
||||
<!-- <string name="permissionsRequired">Permission required</string>-->
|
||||
<!-- <string name="permissionsStorageSaveDenied">{app_name} needs storage access in order to save to external storage, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Storage\".</string>-->
|
||||
<!-- <string name="permissionsStorageSend">{app_name} needs storage access to send photos and videos.</string>-->
|
||||
<!-- <string name="photo">Photo</string>-->
|
||||
<!-- <string name="pin">Pin</string>-->
|
||||
<!-- <string name="pinConversation">Pin Conversation</string>-->
|
||||
<!-- <string name="pinUnpin">Unpin</string>-->
|
||||
<!-- <string name="pinUnpinConversation">Unpin Conversation</string>-->
|
||||
<!-- <string name="preview">Preview</string>-->
|
||||
<!-- <string name="profile">Profile</string>-->
|
||||
<!-- <string name="profileDisplayPicture">Display Picture</string>-->
|
||||
<!-- <string name="profileDisplayPictureRemoveError">Failed to remove display picture.</string>-->
|
||||
<!-- <string name="profileDisplayPictureSet">Set Display Picture</string>-->
|
||||
<!-- <string name="profileErrorUpdate">Failed to update profile.</string>-->
|
||||
<!-- <string name="promote">Promote</string>-->
|
||||
<!-- <string name="qrCode">QR Code</string>-->
|
||||
<!-- <string name="qrNotAccountId">This QR code does not contain an Account ID</string>-->
|
||||
<!-- <string name="qrNotRecoveryPassword">This QR code does not contain a Recovery Password</string>-->
|
||||
<!-- <string name="qrScan">Scan QR Code</string>-->
|
||||
<!-- <string name="qrView">View QR</string>-->
|
||||
<!-- <string name="qrYoursDescription">Friends can message you by scanning your QR code.</string>-->
|
||||
<!-- <string name="quit">Quit</string>-->
|
||||
<!-- <string name="read">Read</string>-->
|
||||
<!-- <string name="readReceipts">Read Receipts</string>-->
|
||||
<!-- <string name="readReceiptsDescription">Show read receipts for all messages you send and receive.</string>-->
|
||||
<!-- <string name="received">Received:</string>-->
|
||||
<!-- <string name="recommended">Recommended</string>-->
|
||||
<!-- <string name="recoveryPasswordBannerDescription">Save your recovery password to make sure you don\'t lose access to your account.</string>-->
|
||||
<!-- <string name="recoveryPasswordBannerTitle">Save your recovery password</string>-->
|
||||
<!-- <string name="recoveryPasswordDescription">Use your recovery password to load your account on new devices. Your account cannot be recovered without your recovery password. Make sure it\'s stored somewhere safe and secure — and don\'t share it with anyone.</string>-->
|
||||
<!-- <string name="recoveryPasswordEnter">Enter your recovery password</string>-->
|
||||
<!-- <string name="recoveryPasswordErrorMessageGeneric">Please check your recovery password and try again.</string>-->
|
||||
<!-- <string name="recoveryPasswordErrorMessageIncorrect">Some of the words in your Recovery Password are incorrect. Please check and try again.</string>-->
|
||||
<!-- <string name="recoveryPasswordErrorMessageShort">The Recovery Password you entered is not long enough. Please check and try again.</string>-->
|
||||
<!-- <string name="recoveryPasswordErrorTitle">Incorrect Recovery Password</string>-->
|
||||
<!-- <string name="recoveryPasswordExplanation">To load your account, enter your recovery password.</string>-->
|
||||
<!-- <string name="recoveryPasswordHidePermanently">Hide Recovery Password Permanently</string>-->
|
||||
<!-- <string name="recoveryPasswordHidePermanentlyDescription1">Without your recovery password, you cannot load your account on new devices. We strongly recommend you save your recovery password in a safe and secure place before continuing.</string>-->
|
||||
<!-- <string name="recoveryPasswordHidePermanentlyDescription2">Are you sure you want to permanently hide your recovery password on this device? This cannot be undone.</string>-->
|
||||
<!-- <string name="recoveryPasswordHideRecoveryPassword">Hide Recovery Password</string>-->
|
||||
<!-- <string name="recoveryPasswordHideRecoveryPasswordDescription">Permanently hide your recovery password on this device.</string>-->
|
||||
<!-- <string name="recoveryPasswordRestoreDescription">Enter your recovery password to load your account. If you haven\'t saved it, you can find it in your app settings.</string>-->
|
||||
<!-- <string name="recoveryPasswordView">View Password</string>-->
|
||||
<!-- <string name="recoveryPasswordWarningSendDescription">This is your recovery password. If you send it to someone they\'ll have full access to your account.</string>-->
|
||||
<!-- <string name="redo">Redo</string>-->
|
||||
<!-- <string name="remove">Remove</string>-->
|
||||
<!-- <string name="reply">Reply</string>-->
|
||||
<!-- <string name="resend">Resend</string>-->
|
||||
<!-- <string name="resolving">Loading country information...</string>-->
|
||||
<!-- <string name="restart">Restart</string>-->
|
||||
<!-- <string name="resync">Resync</string>-->
|
||||
<!-- <string name="retry">Retry</string>-->
|
||||
<!-- <string name="save">Save</string>-->
|
||||
<!-- <string name="saved">Saved</string>-->
|
||||
<!-- <string name="savedMessages">Saved messages</string>-->
|
||||
<!-- <string name="saving">Saving...</string>-->
|
||||
<!-- <string name="scan">Scan</string>-->
|
||||
<!-- <string name="screenSecurity">Screen Security</string>-->
|
||||
<!-- <string name="screenshotNotifications">Screenshot Notifications</string>-->
|
||||
<!-- <string name="screenshotNotificationsDescription">Require a notification when a contact takes a screenshot of a one-to-one chat.</string>-->
|
||||
<!-- <string name="screenshotTaken"><b>{name}</b> took a screenshot.</string>-->
|
||||
<!-- <string name="search">Search</string>-->
|
||||
<!-- <string name="searchContacts">Search Contacts</string>-->
|
||||
<!-- <string name="searchConversation">Search Conversation</string>-->
|
||||
<!-- <string name="searchEnter">Please enter your search.</string>-->
|
||||
<!-- <string name="searchMatchesNone">No results found.</string>-->
|
||||
<!-- <string name="searchMatchesNoneSpecific">No results found for {query}</string>-->
|
||||
<!-- <string name="searchMembers">Search Members</string>-->
|
||||
<!-- <string name="searchSearching">Searching...</string>-->
|
||||
<!-- <string name="select">Select</string>-->
|
||||
<!-- <string name="selectAll">Select All</string>-->
|
||||
<!-- <string name="send">Send</string>-->
|
||||
<!-- <string name="sending">Sending</string>-->
|
||||
<!-- <string name="sent">Sent:</string>-->
|
||||
<!-- <string name="sessionAppearance">Appearance</string>-->
|
||||
<!-- <string name="sessionClearData">Clear Data</string>-->
|
||||
<!-- <string name="sessionConversations">Conversations</string>-->
|
||||
<!-- <string name="sessionHelp">Help</string>-->
|
||||
<!-- <string name="sessionInviteAFriend">Invite a Friend</string>-->
|
||||
<!-- <string name="sessionMessageRequests">Message Requests</string>-->
|
||||
<!-- <string name="sessionNotifications">Notifications</string>-->
|
||||
<!-- <string name="sessionPermissions">Permissions</string>-->
|
||||
<!-- <string name="sessionPrivacy">Privacy</string>-->
|
||||
<!-- <string name="sessionRecoveryPassword">Recovery Password</string>-->
|
||||
<!-- <string name="sessionSettings">Settings</string>-->
|
||||
<!-- <string name="set">Set</string>-->
|
||||
<!-- <string name="settingsRestartDescription">You must restart {app_name} to apply your new settings.</string>-->
|
||||
<!-- <string name="share">Share</string>-->
|
||||
<!-- <string name="shareAccountIdDescription">Invite your friend to chat with you on {app_name} by sharing your Account ID with them.</string>-->
|
||||
<!-- <string name="shareToSession">Share to {app_name}</string>-->
|
||||
<!-- <string name="show">Show</string>-->
|
||||
<!-- <string name="showAll">Show All</string>-->
|
||||
<!-- <string name="showLess">Show Less</string>-->
|
||||
<!-- <string name="stickers">Stickers</string>-->
|
||||
<!-- <string name="supportGoTo">Go to Support Page</string>-->
|
||||
<!-- <string name="theContinue">Continue</string>-->
|
||||
<!-- <string name="theDefault">Default</string>-->
|
||||
<!-- <string name="theError">Error</string>-->
|
||||
<!-- <string name="tryAgain">Try Again</string>-->
|
||||
<!-- <string name="typingIndicators">Typing Indicators</string>-->
|
||||
<!-- <string name="typingIndicatorsDescription">See and share typing indicators (...)</string>-->
|
||||
<!-- <string name="undo">Undo</string>-->
|
||||
<!-- <string name="unknown">Unknown</string>-->
|
||||
<!-- <string name="updateApp">App updates</string>-->
|
||||
<!-- <string name="updateDownloaded">Updated installed, click to restart</string>-->
|
||||
<!-- <string name="updateError">Cannot Update</string>-->
|
||||
<!-- <string name="updateNewVersion">A new version of {app_name} is available, tap to update</string>-->
|
||||
<!-- <string name="updateNewVersionDescription">There is a new version of {app_name} available.</string>-->
|
||||
<!-- <string name="updateReleaseNotes">Go to Release Notes</string>-->
|
||||
<!-- <string name="updateSession">{app_name} Update</string>-->
|
||||
<!-- <string name="updateVersion">Version {version}</string>-->
|
||||
<!-- <string name="urlCopy">Copy URL</string>-->
|
||||
<!-- <string name="urlOpen">Open URL</string>-->
|
||||
<!-- <string name="urlOpenBrowser">This will open in your browser.</string>-->
|
||||
<!-- <string name="urlOpenDescription">Are you sure you want to open this URL in your browser?\n\n{url}</string>-->
|
||||
<!-- <string name="useFastMode">Use Fast Mode</string>-->
|
||||
<!-- <string name="video">Video</string>-->
|
||||
<!-- <string name="videoErrorPlay">Unable to play video.</string>-->
|
||||
<!-- <string name="view">View</string>-->
|
||||
<!-- <string name="waitFewMinutes">This can take a few minutes.</string>-->
|
||||
<!-- <string name="waitOneMoment">One moment please...</string>-->
|
||||
<!-- <string name="warning">Warning</string>-->
|
||||
<!-- <string name="window">Window</string>-->
|
||||
<!-- <string name="yes">Yes</string>-->
|
||||
<!-- <string name="you">You</string>-->
|
||||
<!--</resources>-->
|
||||
|
||||
<!--
|
||||
Crowdin strings circa 2024-08-22
|
||||
NOTE: Strings with blank lines have manually been replaced with '\n\n' - this will be fixed in the Android export script in the future
|
||||
-->
|
||||
<resources>
|
||||
<!-- We need a non-translatable app_name string because we cannot get the NonTranslatableStringConstants.APP_NAME
|
||||
value for use in the AndroidManifest to name the app! -->
|
||||
<string name="app_name" translatable="false">Session</string>
|
||||
|
||||
<string name="about">About</string>
|
||||
<string name="accept">Accept</string>
|
||||
<string name="accountIDCopy">Copy Account ID</string>
|
||||
@ -1233,7 +498,7 @@ NOTE: Strings with blank lines have manually been replaced with '\n\n' - this wi
|
||||
<string name="loadAccountProgressMessage">Loading your account</string>
|
||||
<string name="loading">Loading...</string>
|
||||
<string name="lockApp">Lock App</string>
|
||||
<string name="lockAppDescriptionAndroid">Require fingerprint, PIN, pattern or password to unlock {app_name}.</string>
|
||||
<string name="lockAppDescription">Require fingerprint, PIN, pattern or password to unlock {app_name}.</string>
|
||||
<string name="lockAppDescriptionIos">Require Touch ID, Face ID or your passcode to unlock {app_name}.</string>
|
||||
<string name="lockAppEnablePasscode">You must enable a passcode in your iOS Settings in order to use Screen Lock.</string>
|
||||
<string name="lockAppLocked">{app_name} is locked</string>
|
||||
@ -1317,14 +582,14 @@ NOTE: Strings with blank lines have manually been replaced with '\n\n' - this wi
|
||||
<string name="noteToSelfHide">Hide Note to Self</string>
|
||||
<string name="noteToSelfHideDescription">Are you sure you want to hide Note to Self?</string>
|
||||
<string name="notificationsAllMessages">All Messages</string>
|
||||
<string name="notificationsAndroidSystem">{message_count} new messages in {conversation_count} conversations</string>
|
||||
<string name="notificationsSystem">{message_count} new messages in {conversation_count} conversations</string>
|
||||
<string name="notificationsContent">Notification Content</string>
|
||||
<string name="notificationsContentDescription">The information shown in notifications.</string>
|
||||
<string name="notificationsContentShowNameAndContent">Name and Content</string>
|
||||
<string name="notificationsContentShowNameOnly">Name Only</string>
|
||||
<string name="notificationsContentShowNoNameOrContent">No Name or Content</string>
|
||||
<string name="notificationsFastMode">Fast Mode</string>
|
||||
<string name="notificationsFastModeDescriptionAndroid">You\'ll be notified of new messages reliably and immediately using Google\'s notification Servers.</string>
|
||||
<string name="notificationsFastModeDescription">You\'ll be notified of new messages reliably and immediately using Google\'s notification Servers.</string>
|
||||
<string name="notificationsFastModeDescriptionIos">You\'ll be notified of new messages reliably and immediately using Apple\'s notification Servers.</string>
|
||||
<string name="notificationsGoToDevice">Go to device notification settings</string>
|
||||
<string name="notificationsIosGroup">{name} to {conversation_name}</string>
|
||||
@ -1402,7 +667,7 @@ NOTE: Strings with blank lines have manually been replaced with '\n\n' - this wi
|
||||
<string name="permissionsKeepInSystemTrayDescription">{app_name} continues running in the background when you close the window</string>
|
||||
<string name="permissionsLibrary">{app_name} needs photo library access to continue. You can enable access in the iOS settings.</string>
|
||||
<string name="permissionsMicrophone">Microphone</string>
|
||||
<string name="permissionsMicrophoneAccessRequiredAndroid">{app_name} needs microphone access to send audio messages, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\".</string>
|
||||
<string name="permissionsMicrophoneAccessRequired">{app_name} needs microphone access to send audio messages, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\".</string>
|
||||
<string name="permissionsMicrophoneDescription">Allow access to microphone</string>
|
||||
<string name="permissionsRequired">Permission required</string>
|
||||
<string name="permissionsStorageSave">{app_name} needs storage access to save attachments and media.</string>
|
||||
@ -1556,8 +821,4 @@ NOTE: Strings with blank lines have manually been replaced with '\n\n' - this wi
|
||||
<!-- Missing from CrowdIn circa 2024-08-22 -->
|
||||
<string name="messageStatusUploading">Uploading</string>
|
||||
|
||||
<!-- We need a non-translatable app_name string because we cannot get the NonTranslatableStringConstants.APP_NAME
|
||||
value for use in the AndroidManifest to name the app! -->
|
||||
<string name="app_name" translatable="false">Session</string>
|
||||
|
||||
</resources>
|
Loading…
Reference in New Issue
Block a user