Compare commits

..

13 Commits

Author SHA1 Message Date
spaced4ndy
061d2c25ed core: clean up file descriptions older than server expiration 2023-04-20 17:05:02 +04:00
spaced4ndy
4d700d113d core, ios: mark files to receive from NSE, receive marked files on chat start (#2218) 2023-04-20 16:52:55 +04:00
Stanislav Dmitrenko
17bdd2a1d2 android: different icons for attachments (#2219)
* android: different icons for attachments

* icon

* change color

* changes

* strings

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-04-20 13:27:27 +01:00
Evgeny Poberezkin
80a68012a2 website: translations (#2217)
* Added translation using Weblate (Polish)

* Added translation using Weblate (Polish)

* Translated using Weblate (Polish)

Currently translated at 33.1% (70 of 211 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/pl/

---------

Co-authored-by: Display Name <ptrumtine@proton.me>
2023-04-20 11:56:53 +01:00
Evgeny Poberezkin
3742906f75 mobile: translations (#2216)
* Translated using Weblate (Spanish)

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1043 of 1043 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/

* Translated using Weblate (Czech)

Currently translated at 99.8% (1123 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Czech)

Currently translated at 100.0% (1043 of 1043 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/

* Translated using Weblate (French)

Currently translated at 100.0% (1123 of 1123 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/

* Translated using Weblate (French)

Currently translated at 100.0% (1042 of 1042 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1123 of 1123 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1042 of 1042 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 98.7% (1029 of 1042 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1042 of 1042 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1043 of 1043 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/

* Translated using Weblate (Czech)

Currently translated at 99.8% (1123 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Czech)

Currently translated at 100.0% (1043 of 1043 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/

* Translated using Weblate (French)

Currently translated at 100.0% (1123 of 1123 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/

* Translated using Weblate (French)

Currently translated at 100.0% (1042 of 1042 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1123 of 1123 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1042 of 1042 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 98.7% (1029 of 1042 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1042 of 1042 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/

* Translated using Weblate (German)

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (German)

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (German)

Currently translated at 100.0% (1042 of 1042 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (French)

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1125 of 1125 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/

* ios: import/export localizations

---------

Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: random r <epsilin@yopmail.com>
Co-authored-by: Float <float.hu+@gmail.com>
Co-authored-by: sith-on-mars <groguko36@pm.me>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: B.O.S.S <BxOxSxS@protonmail.com>
2023-04-20 11:55:04 +01:00
Stanislav Dmitrenko
ae90edcdb5 android: moved to BasicTextField in some places (#2215)
* adnroid: moved to BasicTextField in some places

* field height

* field height 2

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-04-20 11:29:50 +01:00
Evgeny Poberezkin
9e76aadb0f Merge branch 'stable' 2023-04-19 18:09:57 +01:00
Evgeny Poberezkin
043544d7ec readme: new users group 2023-04-19 18:09:05 +01:00
Evgeny Poberezkin
2bf7d1dddc android: share video as video (#2214) 2023-04-19 17:39:31 +01:00
Evgeny Poberezkin
e1741118ce android: fix profile string (#2213) 2023-04-19 15:52:33 +01:00
spaced4ndy
58fb3f7f2d android: fix onboarding fonts, paddings (#2212) 2023-04-19 18:48:00 +04:00
spaced4ndy
48e92a7e9b android: don't show button to hide user if authentication is not configured (#2211) 2023-04-19 18:16:26 +04:00
spaced4ndy
5bf16da09d core, mobile: prohibit to change chat item expiration when chat is stopped (#2210) 2023-04-19 15:21:28 +04:00
58 changed files with 1022 additions and 138 deletions

View File

@@ -48,7 +48,7 @@
## Join user groups
You can join an English-speaking users group if you want to ask any questions: [#SimpleX-Group-2](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FQP8zaGjjmlXV-ix_Er4JgJ0lNPYGS1KX%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEApAgBkRZ3x12ayZ7sHrjHQWNMvqzZpWUgM_fFCUdLXwo%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xWpPXEZZsQp_F7vwAcAYDw%3D%3D%22%7D)
You can join an English-speaking users group if you want to ask any questions: [#SimpleX-Group-3](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FeDEgekVhh0zIBYvUupGWZ96kiBEMbXwK%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAS7Z3zQyOhZ9o1qzI9OTZRySpkFTagdLMa6Rc7opuNh4%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22cG3W1qxZGzyrvHTugx16bg%3D%3D%22%7D)
There are groups in other languages, that we have the apps interface translated into. These groups are for testing, and asking questions to other SimpleX Chat users:

View File

@@ -1,6 +1,5 @@
package chat.simplex.app
import SectionItemView
import android.app.Application
import android.content.Intent
import android.net.Uri
@@ -21,7 +20,6 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.fragment.app.FragmentActivity
@@ -584,14 +582,23 @@ fun processExternalIntent(intent: Intent?, chatModel: ChatModel) {
chatModel.chatId.value = null
chatModel.clearOverlays.value = true
when {
"text/plain" == intent.type -> intent.getStringExtra(Intent.EXTRA_TEXT)?.let {
chatModel.sharedContent.value = SharedContent.Text(it)
intent.type == "text/plain" -> {
val text = intent.getStringExtra(Intent.EXTRA_TEXT)
if (text != null) {
chatModel.sharedContent.value = SharedContent.Text(text)
}
}
intent.type?.startsWith("image/") == true -> (intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri)?.let {
chatModel.sharedContent.value = SharedContent.Images(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", listOf(it))
} // All other mime types
else -> (intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri)?.let {
chatModel.sharedContent.value = SharedContent.File(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", it)
isMediaIntent(intent) -> {
val uri = intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri
if (uri != null) {
chatModel.sharedContent.value = SharedContent.Media(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", listOf(uri))
} // All other mime types
}
else -> {
val uri = intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri
if (uri != null) {
chatModel.sharedContent.value = SharedContent.File(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", uri)
}
}
}
}
@@ -599,16 +606,23 @@ fun processExternalIntent(intent: Intent?, chatModel: ChatModel) {
// Close active chat and show a list of chats
chatModel.chatId.value = null
chatModel.clearOverlays.value = true
Log.e(TAG, "ACTION_SEND_MULTIPLE ${intent.type}")
when {
intent.type?.startsWith("image/") == true -> (intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM) as? List<Uri>)?.let {
chatModel.sharedContent.value = SharedContent.Images(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", it)
} // All other mime types
isMediaIntent(intent) -> {
val uris = intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM) as? List<Uri>
if (uris != null) {
chatModel.sharedContent.value = SharedContent.Media(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", uris)
} // All other mime types
}
else -> {}
}
}
}
}
fun isMediaIntent(intent: Intent): Boolean =
intent.type?.startsWith("image/") == true || intent.type?.startsWith("video/") == true
fun connectIfOpenedViaUri(uri: Uri, chatModel: ChatModel) {
Log.d(TAG, "connectIfOpenedViaUri: opened via link")
if (chatModel.currentUser.value == null) {

View File

@@ -3,6 +3,7 @@ package chat.simplex.app.views
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.*
import androidx.compose.material.MaterialTheme.colors
@@ -15,6 +16,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.*
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
@@ -33,7 +35,6 @@ import chat.simplex.app.views.onboarding.ReadableText
import com.google.accompanist.insets.navigationBarsWithImePadding
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.launch
fun isValidDisplayName(name: String) : Boolean {
return (name.firstOrNull { it.isWhitespace() }) == null && !name.startsWith("@") && !name.startsWith("#")
@@ -90,7 +91,7 @@ fun CreateProfilePanel(chatModel: ChatModel, close: () -> Unit) {
text = stringResource(R.string.about_simplex),
icon = Icons.Outlined.ArrowBackIosNew,
textDecoration = TextDecoration.None,
fontWeight = FontWeight.Bold
fontWeight = FontWeight.Medium
) { chatModel.onboardingStage.value = OnboardingStage.Step1_SimpleXInfo }
}
Spacer(Modifier.fillMaxWidth().weight(1f))
@@ -157,33 +158,29 @@ fun ProfileNameField(name: MutableState<String>, placeholder: String = "", isVal
}
val modifier = Modifier
.fillMaxWidth()
.height(55.dp)
.border(border = BorderStroke(1.dp, strokeColor), shape = RoundedCornerShape(50))
.padding(horizontal = 8.dp)
.padding(horizontal = DEFAULT_PADDING)
.navigationBarsWithImePadding()
.onFocusChanged { focused = it.isFocused }
TextField(
value = name.value,
onValueChange = { name.value = it },
modifier = if (focusRequester == null) modifier else modifier.focusRequester(focusRequester),
textStyle = TextStyle(fontSize = 18.sp, color = colors.onBackground),
keyboardOptions = KeyboardOptions(
capitalization = KeyboardCapitalization.None,
autoCorrect = false
),
singleLine = true,
isError = !valid,
placeholder = { Text(placeholder, fontSize = 18.sp, color = HighOrLowlight.copy(alpha = 0.3f)) },
shape = RoundedCornerShape(50),
colors = TextFieldDefaults.textFieldColors(
backgroundColor = Color.Unspecified,
textColor = MaterialTheme.colors.onBackground,
focusedIndicatorColor = Color.Unspecified,
unfocusedIndicatorColor = Color.Unspecified,
cursorColor = HighOrLowlight,
errorIndicatorColor = Color.Unspecified
)
Box(
Modifier
.fillMaxWidth()
.height(52.dp)
.border(border = BorderStroke(1.dp, strokeColor), shape = RoundedCornerShape(50)),
contentAlignment = Alignment.Center
) {
BasicTextField(
value = name.value,
onValueChange = { name.value = it },
modifier = if (focusRequester == null) modifier else modifier.focusRequester(focusRequester),
textStyle = TextStyle(fontSize = 18.sp, color = colors.onBackground),
keyboardOptions = KeyboardOptions(
capitalization = KeyboardCapitalization.None,
autoCorrect = false
),
singleLine = true,
cursorBrush = SolidColor(HighOrLowlight)
)
}
LaunchedEffect(Unit) {
snapshotFlow { name.value }
.distinctUntilChanged()

View File

@@ -667,7 +667,7 @@ fun ComposeView(
when (val shared = chatModel.sharedContent.value) {
is SharedContent.Text -> onMessageChange(shared.text)
is SharedContent.Images -> processPickedMedia(shared.uris, shared.text)
is SharedContent.Media -> processPickedMedia(shared.uris, shared.text)
is SharedContent.File -> processPickedFile(shared.uri, shared.text)
null -> {}
}

View File

@@ -225,7 +225,7 @@ private fun NativeKeyboard(
} catch (e: Exception) {
return@OnCommitContentListener false
}
SimplexApp.context.chatModel.sharedContent.value = SharedContent.Images("", listOf(inputContentInfo.contentUri))
SimplexApp.context.chatModel.sharedContent.value = SharedContent.Media("", listOf(inputContentInfo.contentUri))
true
}
return InputConnectionCompat.createWrapper(connection, editorInfo, onCommit)

View File

@@ -114,7 +114,7 @@ private fun ShareListToolbar(chatModel: ChatModel, userPickerState: MutableState
Text(
when (chatModel.sharedContent.value) {
is SharedContent.Text -> stringResource(R.string.share_message)
is SharedContent.Images -> stringResource(R.string.share_image)
is SharedContent.Media -> stringResource(R.string.share_image)
is SharedContent.File -> stringResource(R.string.share_file)
else -> stringResource(R.string.share_message)
},

View File

@@ -160,7 +160,7 @@ fun DatabaseLayout(
AppBarTitle(stringResource(R.string.your_chat_database))
SectionView(stringResource(R.string.messages_section_title).uppercase()) {
SectionItemView { TtlOptions(chatItemTTL, enabled = rememberUpdatedState(!progressIndicator && !chatDbChanged), onChatItemTTLSelected) }
SectionItemView { TtlOptions(chatItemTTL, enabled = rememberUpdatedState(!stopped && !progressIndicator), onChatItemTTLSelected) }
}
SectionTextFooter(
remember(currentUser?.displayName) {

View File

@@ -1,12 +1,16 @@
package chat.simplex.app.views.helpers
import androidx.compose.foundation.layout.*
import androidx.compose.material.MaterialTheme
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import chat.simplex.app.R
@@ -38,19 +42,19 @@ fun ChooseAttachmentView(
.padding(horizontal = 8.dp, vertical = 30.dp),
horizontalArrangement = Arrangement.SpaceEvenly
) {
ActionButton(null, stringResource(R.string.use_camera_button), icon = Icons.Outlined.PhotoCamera) {
ActionButton(Modifier.fillMaxWidth(0.25f), null, stringResource(R.string.use_camera_button), icon = painterResource(R.drawable.ic_camera_enhance)) {
attachmentOption.value = AttachmentOption.CameraPhoto
hide()
}
ActionButton(null, stringResource(R.string.gallery_image_button), icon = Icons.Outlined.Image) {
ActionButton(Modifier.fillMaxWidth(0.33f), null, stringResource(R.string.gallery_image_button), icon = painterResource(R.drawable.ic_add_photo)) {
attachmentOption.value = AttachmentOption.GalleryImage
hide()
}
ActionButton(null, stringResource(R.string.gallery_video_button), icon = Icons.Outlined.SmartDisplay) {
ActionButton(Modifier.fillMaxWidth(0.50f), null, stringResource(R.string.gallery_video_button), icon = painterResource(R.drawable.ic_smart_display)) {
attachmentOption.value = AttachmentOption.GalleryVideo
hide()
}
ActionButton(null, stringResource(R.string.choose_file), icon = Icons.Outlined.InsertDriveFile) {
ActionButton(Modifier.fillMaxWidth(1f), null, stringResource(R.string.choose_file), icon = painterResource(R.drawable.ic_note_add)) {
attachmentOption.value = AttachmentOption.File
hide()
}

View File

@@ -11,7 +11,7 @@ import kotlinx.serialization.encoding.Encoder
sealed class SharedContent {
data class Text(val text: String): SharedContent()
data class Images(val text: String, val uris: List<Uri>): SharedContent()
data class Media(val text: String, val uris: List<Uri>): SharedContent()
data class File(val text: String, val uri: Uri): SharedContent()
}

View File

@@ -18,6 +18,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.graphics.*
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.*
import androidx.compose.ui.res.stringResource
@@ -211,6 +212,52 @@ fun ActionButton(
}
}
@Composable
fun ActionButton(
modifier: Modifier,
text: String?,
comment: String?,
icon: Painter,
tint: Color = MaterialTheme.colors.primary,
disabled: Boolean = false,
click: () -> Unit = {}
) {
Surface(modifier, shape = RoundedCornerShape(18.dp)) {
Column(
Modifier
.fillMaxWidth()
.clickable(onClick = click)
.padding(8.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
val tint = if (disabled) HighOrLowlight else tint
Icon(
icon, text,
tint = tint,
modifier = Modifier
.size(40.dp)
.padding(bottom = 8.dp)
)
if (text != null) {
Text(
text,
textAlign = TextAlign.Center,
fontWeight = FontWeight.Bold,
color = tint,
modifier = Modifier.padding(bottom = 4.dp)
)
}
if (comment != null) {
Text(
comment,
textAlign = TextAlign.Center,
style = MaterialTheme.typography.body2
)
}
}
}
}
@Preview
@Composable
private fun PreviewNewChatSheet() {

View File

@@ -26,7 +26,10 @@ import chat.simplex.app.views.usersettings.changeNotificationsMode
@Composable
fun SetNotificationsMode(m: ChatModel) {
Column(
modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(vertical = 14.dp)
) {
//CloseSheetBar(null)
AppBarTitleCentered(stringResource(R.string.onboarding_notifications_mode_title))
@@ -55,13 +58,13 @@ private fun NotificationButton(currentMode: MutableState<NotificationsMode>, mod
border = BorderStroke(1.dp, color = if (currentMode.value == mode) MaterialTheme.colors.primary else HighOrLowlight.copy(alpha = 0.5f)),
shape = RoundedCornerShape(35.dp),
) {
Column(Modifier.padding(14.dp)) {
Column(Modifier.padding(horizontal = 14.dp).padding(top = 4.dp, bottom = 8.dp)) {
Text(
stringResource(title),
style = MaterialTheme.typography.h2,
fontWeight = FontWeight.Medium,
color = if (currentMode.value == mode) MaterialTheme.colors.primary else HighOrLowlight,
modifier = Modifier.padding(bottom = 14.dp).align(Alignment.CenterHorizontally),
modifier = Modifier.padding(bottom = 8.dp).align(Alignment.CenterHorizontally),
textAlign = TextAlign.Center
)
Text(annotatedStringResource(description),

View File

@@ -103,13 +103,7 @@ fun UserProfileLayout(
horizontalAlignment = Alignment.Start
) {
AppBarTitleCentered(stringResource(R.string.your_current_profile))
val text = remember {
var t = generalGetString(R.string.your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it)
val index = t.indexOfFirst { it == '\n' }
if (index != -1) t = t.removeRange(index..index + 2)
t
}
ReadableText(text, TextAlign.Center)
ReadableText(generalGetString(R.string.your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it), TextAlign.Center)
Column(
Modifier
.fillMaxWidth()

View File

@@ -45,6 +45,7 @@ fun UserProfilesView(m: ChatModel, search: MutableState<String>, profileHidden:
searchTextOrPassword = searchTextOrPassword,
showHiddenProfilesNotice = m.controller.appPrefs.showHiddenProfilesNotice,
visibleUsersCount = visibleUsersCount(m),
prefPerformLA = m.controller.appPrefs.performLA.get(),
addUser = {
ModalManager.shared.showModalCloseable { close ->
CreateProfile(m, close)
@@ -142,6 +143,7 @@ private fun UserProfilesView(
searchTextOrPassword: MutableState<String>,
profileHidden: MutableState<Boolean>,
visibleUsersCount: Int,
prefPerformLA: Boolean,
showHiddenProfilesNotice: SharedPreference<Boolean>,
addUser: () -> Unit,
activateUser: (User) -> Unit,
@@ -170,7 +172,7 @@ private fun UserProfilesView(
SectionView {
for (user in filteredUsers) {
UserView(user, users, visibleUsersCount, activateUser, removeUser, unhideUser, muteUser, unmuteUser, showHiddenProfile)
UserView(user, users, visibleUsersCount, prefPerformLA, activateUser, removeUser, unhideUser, muteUser, unmuteUser, showHiddenProfile)
SectionDivider()
}
if (searchTextOrPassword.value.trim().isEmpty()) {
@@ -203,6 +205,7 @@ private fun UserView(
user: User,
users: List<User>,
visibleUsersCount: Int,
prefPerformLA: Boolean,
activateUser: (User) -> Unit,
removeUser: (User) -> Unit,
unhideUser: (User) -> Unit,
@@ -222,7 +225,7 @@ private fun UserView(
unhideUser(user)
})
} else {
if (visibleUsersCount > 1) {
if (visibleUsersCount > 1 && prefPerformLA) {
ItemAction(stringResource(R.string.user_hide), Icons.Outlined.Lock, onClick = {
showMenu.value = false
showHiddenProfile(user)

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#FF000000"
android:pathData="M181.5,835q-22.97,0 -40.23,-17.27Q124,800.47 124,777.5L124,182q0,-22.97 17.27,-40.23Q158.53,124.5 181.5,124.5L561,124.5q12.25,0 20.63,8.46T590,153.18q0,12.32 -8.38,20.58T561,182L181.5,182v595.5L777,777.5L777,399q0,-12.25 8.43,-20.63 8.43,-8.38 20.5,-8.38 12.07,0 20.33,8.38T834.5,399v378.5q0,22.97 -17.27,40.23Q799.97,835 777,835L181.5,835ZM727.83,341.5q-12.32,0 -20.58,-8.38T699,312.5L699,261h-51.5q-12.25,0 -20.63,-8.43 -8.38,-8.43 -8.38,-20.5 0,-12.07 8.38,-20.33t20.63,-8.25L699,203.5v-52q0,-11.68 8.43,-20.09 8.43,-8.41 20.5,-8.41 12.07,0 20.33,8.41 8.25,8.41 8.25,20.09v52h52q11.68,0 20.09,8.46Q837,220.43 837,232.17q0,12.32 -8.41,20.58Q820.17,261 808.5,261h-52v51.5q0,12.25 -8.46,20.63t-20.21,8.38ZM273,676.5h413.17q9.82,0 13.82,-7.75T698,653L585.58,503.6q-4.7,-6.1 -11.46,-6.1 -6.76,0 -11.61,6L448,653.5l-81.46,-106.39q-4.69,-5.61 -11.5,-5.61 -6.81,0 -11.72,5.58L261.57,653.02q-5.07,7.98 -0.95,15.73T273,676.5ZM181.5,399v378.5L181.5,182v217Z"/>
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#FF000000"
android:pathData="M480.03,697Q551,697 602.75,645.94t51.75,-122.5Q654.5,452 602.72,400q-51.78,-52 -122.75,-52Q408,348 356.75,400.06t-51.25,123.5Q305.5,595 356.78,646q51.28,51 123.25,51ZM435.5,482.5l31,-71.42Q470,402.5 480,403t13.5,9.08l30.16,70.42 65.92,27.58q9.42,4.16 9.42,13.79t-9.42,13.05L523.5,564l-30,69.92Q490,643 480,643.5t-13.5,-8.58L435.5,564l-65.58,-27.08Q360,533.5 360,523.87t9.92,-13.79L435.5,482.5ZM142.5,835.5q-22.97,0 -40.23,-17.27Q85,800.97 85,778L85,268.5q0,-21.97 17.27,-39.73Q119.53,211 142.5,211h147l54.91,-66.5q7.59,-10 19.11,-15 11.52,-5 24.98,-5h183q13.47,0 24.98,5 11.52,5 19.52,15l54.5,66.5h147q21.97,0 39.73,17.77Q875,246.53 875,268.5L875,778q0,22.97 -17.77,40.23Q839.47,835.5 817.5,835.5h-675ZM817.5,778L817.5,268.5h-675L142.5,778h675ZM480,522.5Z"/>
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#FF000000"
android:pathData="M255.69,838.85q-22.26,0 -38.46,-16.2 -16.2,-16.2 -16.2,-38.44L201.04,175.79q0,-22.24 16.2,-38.44 16.2,-16.2 38.61,-16.2h333.61l169.5,169v493.89q0,22.41 -16.2,38.61 -16.2,16.2 -38.46,16.2L255.69,838.85ZM574.42,304.23L574.42,151.35L255.85,151.35q-9.23,0 -16.92,7.69 -7.69,7.69 -7.69,16.92v608.08q0,9.23 7.69,16.92 7.69,7.69 16.92,7.69h448.31q9.23,0 16.92,-7.69 7.69,-7.69 7.69,-16.92L728.77,304.23L574.42,304.23ZM231.23,151.35v152.88,-152.88 657.31,-657.31Z"/>
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#FF000000"
android:pathData="M451.5,595v99q0,12.25 8.43,20.63 8.43,8.38 20.5,8.38 12.07,0 20.33,-8.38T509,694v-99h100.5q11.68,0 20.09,-8.43 8.41,-8.43 8.41,-20.5 0,-12.07 -8.41,-20.33 -8.41,-8.25 -20.09,-8.25L509,537.5L509,437q0,-11.68 -8.46,-20.09 -8.46,-8.41 -20.21,-8.41 -12.32,0 -20.58,8.41 -8.25,8.41 -8.25,20.09v100.5h-100q-12.25,0 -20.63,8.46t-8.38,20.21q0,12.32 8.38,20.58T351.5,595h100ZM222,875q-22.97,0 -40.23,-17.27Q164.5,840.47 164.5,817.5v-675q0,-22.97 17.27,-40.23Q199.03,85 222,85h335q11.91,0 22.71,4.75 10.79,4.75 18.91,12.34l179.26,179.31Q786,289.5 790.75,300.29q4.75,10.8 4.75,22.71v494.5q0,22.97 -17.27,40.23Q760.97,875 738,875L222,875ZM552.5,296L552.5,142.5L222,142.5v675h516L738,325L581.5,325q-12.25,0 -20.63,-8.38T552.5,296ZM222,142.5L222,325 222,142.5v675,-675Z"/>
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#FF000000"
android:pathData="m436.5,615.5 l175.5,-114q13,-8.5 13,-23.51T612,454L436.5,340q-14.5,-9.5 -29,-1.27Q393,346.96 393,364v227.5q0,17.76 14.5,25.88 14.5,8.12 29,-1.88ZM142.5,795.5q-22.97,0 -40.23,-17.27Q85,760.97 85,738L85,222q0,-22.97 17.27,-40.23Q119.53,164.5 142.5,164.5h675q23.72,0 40.61,17.27Q875,199.03 875,222v516q0,22.97 -16.89,40.23Q841.22,795.5 817.5,795.5h-675ZM142.5,738L142.5,222v516ZM142.5,738h675L817.5,222h-675v516Z"/>
</vector>

View File

@@ -11,7 +11,7 @@
<string name="smp_servers_add">Přidat server…</string>
<string name="network_enable_socks_info">Přistupovat k serverům přes SOCKS proxy na portu 9050\? Před povolením této možnosti musí být spuštěna proxy.</string>
<string name="accept_feature">Přijmout</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Umožněte svým kontaktům odesílat mizící zprávy.</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Povolte svým kontaktům odesílat mizící zprávy.</string>
<string name="about_simplex_chat">O <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="smp_servers_add_to_another_device">Přidat do jiného zařízení</string>
<string name="accept_requests">Přijímat žádosti</string>
@@ -661,9 +661,7 @@
<string name="all_your_contacts_will_remain_connected">Všechny vaše kontakty zůstanou připojeny.</string>
<string name="contact_requests">Žádosti o kontakt</string>
<string name="display_name__field">Zobrazované jméno:</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Váš profil je uložen v zařízení a je sdílen pouze s vašimi kontakty.
\n
\n<xliff:g id="appName">SimpleX</xliff:g> servery váš profil vidět nemohou.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Váš profil je uložen v zařízení a je sdílen pouze s vašimi kontakty. <xliff:g id="appName">SimpleX</xliff:g> servery váš profil vidět nemohou.</string>
<string name="save_preferences_question">Uložit předvolby\?</string>
<string name="save_and_notify_contact">Uložit a upozornit kontakt</string>
<string name="save_and_notify_contacts">Uložit a upozornit kontakty</string>
@@ -1114,4 +1112,31 @@
<string name="alert_text_fragment_please_report_to_developers">Nahlaste to prosím vývojářům.</string>
<string name="alert_text_fragment_permanent_error_reconnect">Tato chyba je pro toto připojení trvalá, připojte se znovu.</string>
<string name="alert_text_fragment_encryption_out_of_sync_old_database">Může se to stát, když vy nebo vaše připojení použijete starou zálohu databáze.</string>
<string name="no_spaces">Žádné mezery!</string>
<string name="revoke_file__message">Soubor bude smazán ze serverů.</string>
<string name="stop_rcv_file__message">Příjem souboru bude zastaven.</string>
<string name="allow_calls_only_if">Povolte hovory, pouze pokud je váš kontakt povolí.</string>
<string name="allow_your_contacts_to_call">Povolte svým kontaktům vám volat.</string>
<string name="audio_video_calls">Audio/video hovory</string>
<string name="available_in_v51">"
\nDostupné ve verzi 5.1"</string>
<string name="both_you_and_your_contact_can_make_calls">Volat můžete vy i váš kontakt.</string>
<string name="only_you_can_make_calls">Volat můžete pouze vy.</string>
<string name="prohibit_calls">Zákaz audio/video hovorů.</string>
<string name="calls_prohibited_with_this_contact">Audio/video hovory jsou zakázány.</string>
<string name="only_your_contact_can_make_calls">Volat může pouze váš kontakt.</string>
<string name="v5_0_app_passcode">Heslo aplikace</string>
<string name="v5_0_large_files_support_descr">Rychle a bez čekání, než bude odesílatel online!</string>
<string name="v5_0_polish_interface">Polské rozhraní</string>
<string name="v5_0_app_passcode_descr">Nastavte jej namísto ověřování systému.</string>
<string name="v5_0_large_files_support">Videa a soubory až do velikosti 1 gb</string>
<string name="v5_0_polish_interface_descr">Díky uživatelům - překládejte prostřednictvím Weblate!</string>
<string name="revoke_file__title">Odvolat soubor\?</string>
<string name="revoke_file__confirm">Odvolat</string>
<string name="revoke_file__action">Odvolat soubor</string>
<string name="stop_snd_file__message">Odesílání souboru bude zastaveno.</string>
<string name="stop_file__confirm">Zastavit</string>
<string name="stop_file__action">Zastavit soubor</string>
<string name="stop_snd_file__title">Zastavit odesílání souboru\?</string>
<string name="stop_rcv_file__title">Zastavit příjem souboru\?</string>
</resources>

View File

@@ -180,7 +180,7 @@
<string name="you_have_no_chats">Sie haben keine Chats</string>
<!-- ShareListView.kt -->
<string name="share_message">Nachricht teilen…</string>
<string name="share_image">Bild teilen…</string>
<string name="share_image">Medien teilen…</string>
<string name="share_file">Datei teilen…</string>
<!-- ComposeView.kt, helpers -->
<string name="attach">Anhängen</string>
@@ -430,7 +430,7 @@
<string name="display_name__field">Angezeigter Name:</string>
<string name="full_name__field">"Vollständiger Name:</string>
<string name="your_current_profile">Mein aktuelles Chat-Profil</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Ihr Profil wird auf Ihrem Gerät gespeichert und nur mit Ihren Kontakten geteilt.\n\n<xliff:g id="appName">SimpleX</xliff:g>-Server können Ihr Profil nicht sehen.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Ihr Profil wird auf Ihrem Gerät gespeichert und nur mit Ihren Kontakten geteilt. <xliff:g id="appName">SimpleX</xliff:g>-Server können Ihr Profil nicht sehen.</string>
<string name="edit_image">Bild bearbeiten</string>
<string name="delete_image">Bild löschen</string>
<string name="save_preferences_question">Präferenzen speichern?</string>
@@ -1196,4 +1196,29 @@
<string name="alert_text_decryption_error_too_many_skipped"><xliff:g id="message count" example="1">%1$d</xliff:g> Nachrichten übersprungen.</string>
<string name="allow_calls_only_if">Anrufe sind nur erlaubt, wenn Ihr Kontakt das ebenfalls erlaubt.</string>
<string name="allow_your_contacts_to_call">Erlaubt Ihren Kontakten Sie anzurufen.</string>
<string name="audio_video_calls">Audio/Video Anrufe</string>
<string name="available_in_v51">"
\nVerfügbar in v5.1"</string>
<string name="both_you_and_your_contact_can_make_calls">Sowohl Sie, als auch Ihr Kontakt können Anrufe tätigen.</string>
<string name="only_you_can_make_calls">Nur Sie können Anrufe tätigen.</string>
<string name="prohibit_calls">Audio/Video Anrufe nicht erlauben.</string>
<string name="stop_rcv_file__title">Den Empfang der Datei beenden\?</string>
<string name="stop_snd_file__title">Das Senden der Datei beenden\?</string>
<string name="stop_rcv_file__message">Der Empfang der Datei wird beendet.</string>
<string name="stop_snd_file__message">Das Senden der Datei wird beendet.</string>
<string name="stop_file__action">Datei beenden</string>
<string name="revoke_file__message">Die Datei wird von den Servern gelöscht.</string>
<string name="no_spaces">Keine Leerzeichen!</string>
<string name="revoke_file__confirm">Widerrufen</string>
<string name="revoke_file__action">Datei widerrufen</string>
<string name="revoke_file__title">Datei widerrufen\?</string>
<string name="stop_file__confirm">Beenden</string>
<string name="v5_0_large_files_support">Videos und Dateien bis zu 1GB</string>
<string name="v5_0_large_files_support_descr">Schnell und ohne warten auf den Absender, bis er online ist!</string>
<string name="v5_0_polish_interface">Polnische Bedienoberfläche</string>
<string name="v5_0_app_passcode_descr">Anstelle der System-Authentifizierung festlegen.</string>
<string name="v5_0_polish_interface_descr">Dank der Nutzer - Tragen Sie per Weblate bei!</string>
<string name="only_your_contact_can_make_calls">Nur Ihr Kontakt kann Anrufe tätigen.</string>
<string name="v5_0_app_passcode">App Passwort</string>
<string name="calls_prohibited_with_this_contact">Audio/Video Anrufe sind nicht erlaubt.</string>
</resources>

View File

@@ -811,7 +811,7 @@
<string name="is_not_verified">%s no está verificado</string>
<string name="smp_servers_test_server">Probar servidor</string>
<string name="smp_servers_test_servers">Probar servidores</string>
<string name="star_on_github">Dar Estrella en GitHub</string>
<string name="star_on_github">Estrella en GitHub</string>
<string name="smp_servers_per_user">Los servidores para nuevas conexiones de tu perfil de Chat actual</string>
<string name="network_disable_socks">¿Usar conexión directa a Internet\?</string>
<string name="update_onion_hosts_settings_question">¿Actualizar la configuración de los hosts .onion\?</string>
@@ -841,7 +841,7 @@
<string name="error_smp_test_failed_at_step">Prueba fallida en el paso %s.</string>
<string name="tap_to_start_new_chat">Pulsa para iniciar chat nuevo</string>
<string name="share_message">Compartir mensaje…</string>
<string name="share_image">Compartir imagen</string>
<string name="share_image">Compartir medios</string>
<string name="show_call_on_lock_screen">Mostrar</string>
<string name="unknown_database_error_with_info">Error desconocido en la base de datos: %s</string>
<string name="database_backup_can_be_restored">El intento de cambiar la contraseña de la base de datos no se ha completado.</string>
@@ -974,9 +974,7 @@
<string name="smp_servers_your_server_address">Dirección de tu servidor</string>
<string name="section_title_welcome_message">MENSAJE DE BIENVENIDA</string>
<string name="your_current_profile">Tu perfil actual</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Tu perfil se almacena en tu dispositivo y sólo se comparte con tus contactos.
\n
\nLos servidores <xliff:g id="appName">SimpleX</xliff:g> no pueden ver tu perfil.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Tu perfil se almacena en tu dispositivo y sólo se comparte con tus contactos. Los servidores <xliff:g id="appName">SimpleX</xliff:g> no pueden ver tu perfil.</string>
<string name="language_system">Sistema</string>
<string name="button_add_welcome_message">Agregar mensaje de bienvenida</string>
<string name="v4_6_audio_video_calls">Llamadas y videollamadas</string>
@@ -1115,4 +1113,31 @@
<string name="alert_text_msg_bad_hash">El hash del mensaje anterior es diferente.</string>
<string name="alert_text_fragment_permanent_error_reconnect">El error es permanente para esta conexión, por favor vuelve a conectarte.</string>
<string name="alert_text_decryption_error_header"><xliff:g id="message count" example="1">%1$d</xliff:g> mensajes no pudieron ser descifrados.</string>
<string name="no_spaces">¡Sin espacios!</string>
<string name="stop_file__action">Detener archivo</string>
<string name="revoke_file__message">El archivo será eliminado de los servidores.</string>
<string name="stop_rcv_file__message">Se detendrá la recepción del archivo.</string>
<string name="revoke_file__confirm">Revocar</string>
<string name="revoke_file__action">Revocar archivo</string>
<string name="revoke_file__title">¿Revocar archivo\?</string>
<string name="stop_snd_file__message">Se detendrá el envío del archivo.</string>
<string name="stop_file__confirm">Detener</string>
<string name="stop_rcv_file__title">¿Dejar de recibir el archivo\?</string>
<string name="stop_snd_file__title">¿Dejar de enviar el archivo\?</string>
<string name="allow_calls_only_if">Se permiten llamadas sólo si tu contacto también las permite.</string>
<string name="allow_your_contacts_to_call">Permites que tus contactos puedan llamarte.</string>
<string name="audio_video_calls">Llamadas/Videollamadas</string>
<string name="calls_prohibited_with_this_contact">Las llamadas/videollamadas no están permitidas.</string>
<string name="available_in_v51">"
\nDisponible en v5.1"</string>
<string name="both_you_and_your_contact_can_make_calls">Tanto tú como tu contacto podéis realizar llamadas.</string>
<string name="only_you_can_make_calls">Solo tú puedes realizar llamadas.</string>
<string name="only_your_contact_can_make_calls">Sólo tu contacto puede realizar llamadas.</string>
<string name="prohibit_calls">Prohibir las llamadas/videollamadas.</string>
<string name="v5_0_app_passcode">Código de acceso a la aplicación</string>
<string name="v5_0_polish_interface">Interfaz polaco</string>
<string name="v5_0_app_passcode_descr">Úsalo en lugar de la autenticación del sistema.</string>
<string name="v5_0_polish_interface_descr">Agradecimientos a los usuarios. ¡Contribuye a través de Weblate!</string>
<string name="v5_0_large_files_support">Vídeos y archivos de hasta 1Gb</string>
<string name="v5_0_large_files_support_descr">¡Rápido y sin tener que esperar a que el remitente esté en línea!</string>
</resources>

View File

@@ -156,7 +156,7 @@
<string name="contact_connection_pending">connexion…</string>
<string name="group_connection_pending">connexion…</string>
<string name="share_message">Partager le message…</string>
<string name="share_image">Partager limage</string>
<string name="share_image">Partager le média</string>
<string name="images_limit_desc">Envoi de 10 images en même temps maximum</string>
<string name="personal_welcome">Bienvenue <xliff:g>%1$s</xliff:g> !</string>
<string name="notifications_mode_periodic_desc">Vérifie les nouveaux messages toutes les 10 minutes pendant 1 minute au maximum.</string>
@@ -439,9 +439,7 @@
<string name="section_title_welcome_message">MESSAGE DE BIENVENUE</string>
<string name="display_name__field">Nom affiché :</string>
<string name="full_name__field">Nom complet :</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Votre profil est stocké sur votre appareil et partagé uniquement avec vos contacts.
\n
\nLes serveurs <xliff:g id="appName">SimpleX</xliff:g> ne peuvent pas voir votre profil.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Votre profil est stocké sur votre appareil et partagé uniquement avec vos contacts. Les serveurs <xliff:g id="appName">SimpleX</xliff:g> ne peuvent pas voir votre profil.</string>
<string name="delete_image">Supprimer l\'image</string>
<string name="save_preferences_question">Sauvegarder les préférences \?</string>
<string name="you_control_your_chat">Vous maîtrisez vos discussions !</string>
@@ -1135,4 +1133,10 @@
<string name="alert_text_decryption_error_header"><xliff:g id="message count" example="1">%1$d</xliff:g> messages n\'ont pas pu être déchiffrés.</string>
<string name="alert_text_decryption_error_too_many_skipped"><xliff:g id="message count" example="1">%1$d</xliff:g> messages sautés.</string>
<string name="you_can_turn_on_lock">Vous pouvez activer SimpleX Lock dans les Paramètres.</string>
<string name="v5_0_polish_interface_descr">Merci aux utilisateurs - contribuez via Weblate !</string>
<string name="v5_0_large_files_support">Vidéos et fichiers jusqu\'à 1Go</string>
<string name="v5_0_app_passcode">Code d\'accès à l\'app</string>
<string name="v5_0_large_files_support_descr">Rapide et ne nécessitant pas d\'attendre que l\'expéditeur soit en ligne !</string>
<string name="v5_0_polish_interface">Interface en polonais</string>
<string name="v5_0_app_passcode_descr">Il permet de remplacer l\'authentification du système.</string>
</resources>

View File

@@ -152,7 +152,7 @@
<string name="tap_to_start_new_chat">Tocca per iniziare una conversazione</string>
<string name="chat_with_developers">Scrivi agli sviluppatori</string>
<string name="you_have_no_chats">Non hai chat</string>
<string name="share_image">Condividi immagine…</string>
<string name="share_image">Condividi multimediale…</string>
<string name="share_file">Condividi file…</string>
<string name="icon_descr_context">Icona contestuale</string>
<string name="icon_descr_cancel_file_preview">Annulla anteprima file</string>
@@ -667,9 +667,7 @@
<string name="you_control_your_chat">Sei tu a controllare la tua chat!</string>
<string name="your_current_profile">Il tuo profilo attuale</string>
<string name="your_profile_is_stored_on_your_device">Il tuo profilo, i contatti e i messaggi recapitati sono memorizzati sul tuo dispositivo.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Il tuo profilo è memorizzato sul tuo dispositivo e condiviso solo con i tuoi contatti.
\n
\nI server di <xliff:g id="appName">SimpleX</xliff:g> non possono vedere il tuo profilo.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Il tuo profilo è memorizzato sul tuo dispositivo e condiviso solo con i tuoi contatti. I server di <xliff:g id="appName">SimpleX</xliff:g> non possono vedere il tuo profilo.</string>
<string name="ignore">Ignora</string>
<string name="immune_to_spam_and_abuse">Immune a spam e abusi</string>
<string name="incoming_audio_call">Chiamata in arrivo</string>
@@ -1135,4 +1133,10 @@
<string name="available_in_v51">"
\nDisponibile nella v5.1"</string>
<string name="allow_your_contacts_to_call">Consenti ai tuoi contatti di chiamarti.</string>
<string name="v5_0_app_passcode">Codice di accesso dell\'app</string>
<string name="v5_0_large_files_support_descr">Veloce e senza aspettare che il mittente sia in linea!</string>
<string name="v5_0_polish_interface">Interfaccia polacca</string>
<string name="v5_0_app_passcode_descr">Impostala al posto dell\'autenticazione di sistema.</string>
<string name="v5_0_polish_interface_descr">Grazie agli utenti contribuite via Weblate!</string>
<string name="v5_0_large_files_support">Video e file fino a 1 GB</string>
</resources>

View File

@@ -842,9 +842,7 @@
<string name="this_string_is_not_a_connection_link">このストリングは接続リンクではありません!</string>
<string name="chat_with_the_founder">質問やアイデアを送る</string>
<string name="star_on_github">GithubでStar</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">あなたのプロフィールはご自分の端末に保存され、あなたの連絡先のみに共有されます。
\n
\n<xliff:g id="appName">SimpleX</xliff:g>のサーバには開示されません。</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">あなたのプロフィールはご自分の端末に保存され、あなたの連絡先のみに共有されます。 <xliff:g id="appName">SimpleX</xliff:g>のサーバには開示されません。</string>
<string name="your_calls">あなたの通話</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g>飛ばしたメッセージ</string>
<string name="send_link_previews">リンクのプレビューを送信</string>

View File

@@ -331,9 +331,7 @@
<string name="using_simplex_chat_servers">Naudojami <xliff:g id="appNameFull">SimpleX Chat</xliff:g> serveriai.</string>
<string name="network_settings">Išplėstiniai tinklo nustatymai</string>
<string name="your_current_profile">Jūsų dabartinis profilis</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Jūsų profilis yra saugomas jūsų įrenginyje ir bendrinamas tik su jūsų adresatais.
\n
\n<xliff:g id="appName">SimpleX</xliff:g> serveriai negali matyti jūsų profilio.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Jūsų profilis yra saugomas jūsų įrenginyje ir bendrinamas tik su jūsų adresatais. <xliff:g id="appName">SimpleX</xliff:g> serveriai negali matyti jūsų profilio.</string>
<string name="icon_descr_video_call">vaizdo skambutis</string>
<string name="your_calls">Jūsų skambučiai</string>
<string name="webrtc_ice_servers">WebRTC ICE serveriai</string>

View File

@@ -935,9 +935,7 @@
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Uw huidige chatdatabase wordt VERWIJDERD en VERVANGEN door de geïmporteerde.
\nDeze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren.</string>
<string name="invite_prohibited_description">Je probeert een contact met wie je een incognito profiel hebt gedeeld, uit te nodigen voor de groep waarin je je hoofdprofiel gebruikt</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Uw profiel wordt op uw apparaat opgeslagen en alleen gedeeld met uw contacten.
\n
\n<xliff:g id="appName">SimpleX</xliff:g> servers kunnen uw profiel niet zien.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Uw profiel wordt op uw apparaat opgeslagen en alleen gedeeld met uw contacten. <xliff:g id="appName">SimpleX</xliff:g> servers kunnen uw profiel niet zien.</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">U moet zich authenticeren wanneer u de app na 30 seconden op de achtergrond start of hervat.</string>
<string name="images_limit_title">Te veel afbeeldingen!</string>
<string name="icon_descr_speaker_off">Luidspreker uit</string>

View File

@@ -146,7 +146,7 @@
<string name="icon_descr_sent_msg_status_send_failed">wysyłanie nie powiodło się</string>
<string name="icon_descr_sent_msg_status_sent">wyślij</string>
<string name="share_file">Udostępnij plik…</string>
<string name="share_image">Udostępnij obraz</string>
<string name="share_image">Udostępnij media</string>
<string name="tap_to_start_new_chat">Dotknij, aby rozpocząć nowy czat</string>
<string name="moderate_message_will_be_deleted_warning">Wiadomość zostanie usunięta dla wszystkich członków.</string>
<string name="this_text_is_available_in_settings">Ten tekst jest dostępny w ustawieniach</string>
@@ -1048,9 +1048,7 @@
\nTej czynności nie można cofnąć - Twój profil, kontakty, wiadomości i pliki zostaną nieodwracalnie utracone.</string>
<string name="contact_sent_large_file">Twój kontakt wysłał plik, który jest większy niż obecnie obsługiwany maksymalny rozmiar (<xliff:g id="maxFileSize">%1$s</xliff:g>).</string>
<string name="snd_group_event_member_deleted">usunąłeś <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Twój profil jest przechowywany na Twoim urządzeniu i udostępniany tylko Twoim kontaktom.
\n
\nSerwery <xliff:g id="appName">SimpleX</xliff:g> nie widzą Twojego profilu.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Twój profil jest przechowywany na Twoim urządzeniu i udostępniany tylko Twoim kontaktom. Serwery <xliff:g id="appName">SimpleX</xliff:g> nie widzą Twojego profilu.</string>
<string name="description_you_shared_one_time_link_incognito">udostępniłeś jednorazowy link incognito</string>
<string name="you_will_join_group">Dołączysz do grupy, do której odnosi się ten link i połączysz się z jej członkami.</string>
<string name="your_SMP_servers">Twoje serwery SMP</string>

View File

@@ -833,9 +833,7 @@
<string name="network_use_onion_hosts_no">Não</string>
<string name="network_disable_socks">Usar conexão direta com a internet\?</string>
<string name="hide_dev_options">Ocultar:</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Seu perfil é guardado no seu diapositivo e é compartilhado somente com seus contatos.
\n
\n<xliff:g id="appName">Servidores</xliff:g> SimpleX não podem ver seu perfil.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Seu perfil é guardado no seu diapositivo e é compartilhado somente com seus contatos. <xliff:g id="appName">Servidores</xliff:g> SimpleX não podem ver seu perfil.</string>
<string name="save_preferences_question">Salvar preferências\?</string>
<string name="save_and_notify_group_members">Salvar e notificar membros do grupo</string>
<string name="error_saving_user_password">Erro ao salvar a senha do usuário</string>

View File

@@ -258,7 +258,7 @@
<string name="toast_permission_denied">Разрешение не получено!</string>
<string name="use_camera_button">Камера</string>
<string name="from_gallery_button">Галерея</string>
<string name="gallery_image_button">Изображение</string>
<string name="gallery_image_button">Фото</string>
<string name="gallery_video_button">Видео</string>
<string name="choose_file">Файл</string>
<!-- help - ChatHelpView.kt -->
@@ -429,9 +429,7 @@
<string name="display_name__field">Имя профиля:</string>
<string name="full_name__field">"Полное имя:</string>
<string name="your_current_profile">Ваш активный профиль</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Ваш профиль хранится на Вашем устройстве и отправляется только Вашим контактам.
\n
\n<xliff:g id="appName">SimpleX</xliff:g> серверы не могут получить доступ к Вашему профилю.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Ваш профиль хранится на Вашем устройстве и отправляется только Вашим контактам. <xliff:g id="appName">SimpleX</xliff:g> серверы не могут получить доступ к Вашему профилю.</string>
<string name="edit_image">Поменять аватар</string>
<string name="delete_image">Удалить аватар</string>
<string name="save_preferences_question">Сохранить предпочтения?</string>

View File

@@ -501,7 +501,7 @@
\n在启用此功能之前系统将提示您完成身份验证。</string>
<string name="your_chats">您的聊天</string>
<string name="share_file">分享文件……</string>
<string name="share_image">分享图片……</string>
<string name="share_image">分享媒体……</string>
<string name="share_message">分享消息……</string>
<string name="text_field_set_contact_placeholder">设置联系人姓名……</string>
<string name="callstate_received_answer">已收到回复……</string>
@@ -621,9 +621,7 @@
<string name="icon_descr_profile_image_placeholder">资料图片占位符</string>
<string name="smp_servers_per_user">您当前聊天资料的新连接服务器</string>
<string name="your_current_profile">您当前的资料</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">您的资料存储在您的设备上并且仅与您的联系人共享。
\n
\n<xliff:g id="appName">SimpleX</xliff:g> 服务器无法看见您的资料。</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">您的资料存储在您的设备上并且仅与您的联系人共享。<xliff:g id="appName">SimpleX</xliff:g> 服务器无法看见您的资料。</string>
<string name="your_profile_is_stored_on_your_device">您的资料、联系人和发送的消息存储在您的设备上。</string>
<string name="profile_is_only_shared_with_your_contacts">该资料仅与您的联系人共享。</string>
<string name="chat_preferences_on">开启</string>
@@ -1117,4 +1115,30 @@
\n它可能是由于某些错误或连接被破坏才发生。</string>
<string name="alert_text_decryption_error_earlier"><xliff:g id="message count" example="1">%1$d</xliff:g> 消息解密失败并且不会显示。</string>
<string name="no_spaces">没有空格!</string>
<string name="stop_file__action">停止文件</string>
<string name="stop_snd_file__title">停止发送文件?</string>
<string name="stop_snd_file__message">即将停止发送文件。</string>
<string name="stop_rcv_file__title">停止接收文件?</string>
<string name="stop_rcv_file__message">即将停止接收文件。</string>
<string name="stop_file__confirm">Stop</string>
<string name="revoke_file__action">撤销文件</string>
<string name="revoke_file__title">撤销文件?</string>
<string name="revoke_file__message">文件将从服务器中删除。</string>
<string name="revoke_file__confirm">撤销</string>
<string name="audio_video_calls">音频/视频通话</string>
<string name="available_in_v51">"
\n在 v5.1 中可用"</string>
<string name="v5_0_app_passcode">应用程序密码</string>
<string name="v5_0_polish_interface">波兰语界面</string>
<string name="v5_0_polish_interface_descr">感谢用户——通过 Weblate 做出贡献!</string>
<string name="v5_0_app_passcode_descr">设置它以代替系统身份验证。</string>
<string name="v5_0_large_files_support">最大 1gb 的视频和文件</string>
<string name="v5_0_large_files_support_descr">快速且无需等待发件人在线!</string>
<string name="prohibit_calls">禁止音频/视频通话。</string>
<string name="both_you_and_your_contact_can_make_calls">您和您的联系人都可以拨打电话。</string>
<string name="only_you_can_make_calls">只有您可以拨打电话。</string>
<string name="only_your_contact_can_make_calls">只有您的联系人可以拨打电话。</string>
<string name="allow_your_contacts_to_call">允许您的联系人给您打电话。</string>
<string name="allow_calls_only_if">仅当您的联系人允许时才允许呼叫。</string>
<string name="calls_prohibited_with_this_contact">禁止音频/视频通话。</string>
</resources>

View File

@@ -512,9 +512,7 @@
<string name="network_use_onion_hosts_required_desc_in_alert">連接時將需要 Onion 主機</string>
<string name="delete_address__question">刪除地址?</string>
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">你可以使用連結或二維碼分享你的地址 - 任何人也可以和你連線。如果你不主動刪除你的聯絡人,你並不會遺失你的聯絡人</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">你的個人檔案只會儲存於你的裝置和只會分享給你的聯絡人。
\n
\n<xliff:g id="appName">SimpleX</xliff:g> 伺服器並不會看到你的個人檔案。</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">你的個人檔案只會儲存於你的裝置和只會分享給你的聯絡人。 <xliff:g id="appName">SimpleX</xliff:g> 伺服器並不會看到你的個人檔案。</string>
<string name="save_and_notify_contact">儲存並通知你的聯絡人</string>
<string name="save_and_notify_contacts">儲存並通知你的多個聯絡人</string>
<string name="your_profile_is_stored_on_your_device">你的個人檔案,聯絡人和傳送的訊息只會儲存於你的個人裝置內。</string>

View File

@@ -253,7 +253,7 @@
<!-- ShareListView.kt -->
<string name="share_message">Share message…</string>
<string name="share_image">Share image</string>
<string name="share_image">Share media</string>
<string name="share_file">Share file…</string>
<!-- ComposeView.kt, helpers -->
@@ -591,7 +591,7 @@
<string name="display_name__field">Display name:</string>
<string name="full_name__field">"Full name:</string>
<string name="your_current_profile">Your current profile</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Your profile is stored on your device and shared only with your contacts.\n\n<xliff:g id="appName">SimpleX</xliff:g> servers cannot see your profile.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Your profile is stored on your device and shared only with your contacts. <xliff:g id="appName">SimpleX</xliff:g> servers cannot see your profile.</string>
<string name="edit_image">Edit image</string>
<string name="delete_image">Delete image</string>
<string name="save_preferences_question">Save preferences?</string>
@@ -600,7 +600,6 @@
<string name="save_and_notify_group_members">Save and notify group members</string>
<string name="exit_without_saving">Exit without saving</string>
<!-- HiddenProfileView.kt -->
<string name="hide_profile">Hide profile</string>
<string name="password_to_show">Password to show</string>

View File

@@ -1324,6 +1324,8 @@ func processReceivedMsg(_ res: ChatResponse) async {
if active(user) {
m.updateGroup(groupInfo)
}
case let .rcvFileAccepted(user, aChatItem): // usually rcvFileAccepted is a response, but it's also an event for XFTP files auto-accepted from NSE
chatItemSimpleUpdate(user, aChatItem)
case let .rcvFileStart(user, aChatItem):
chatItemSimpleUpdate(user, aChatItem)
case let .rcvFileComplete(user, aChatItem):

View File

@@ -77,7 +77,7 @@ struct DatabaseView: View {
}
}
.frame(height: 36)
.disabled(m.chatDbChanged || progressIndicator)
.disabled(stopped || progressIndicator)
} header: {
Text("Messages")
} footer: {

View File

@@ -15,6 +15,8 @@
<trans-unit id="&#10;Available in v5.1" xml:space="preserve">
<source>
Available in v5.1</source>
<target>
Dostupné ve verzi 5.1</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
@@ -199,10 +201,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="%u messages failed to decrypt." xml:space="preserve">
<source>%u messages failed to decrypt.</source>
<target>%u zpráv se nepodařilo dešifrovat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%u messages skipped." xml:space="preserve">
<source>%u messages skipped.</source>
<target>%u zpráv přeskočeno.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(" xml:space="preserve">
@@ -455,6 +459,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Allow calls only if your contact allows them." xml:space="preserve">
<source>Allow calls only if your contact allows them.</source>
<target>Povolte hovory, pouze pokud je váš kontakt povolí.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow disappearing messages only if your contact allows it to you." xml:space="preserve">
@@ -499,6 +504,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Allow your contacts to call you." xml:space="preserve">
<source>Allow your contacts to call you.</source>
<target>Povolte svým kontaktům vám volat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
@@ -543,6 +549,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="App passcode" xml:space="preserve">
<source>App passcode</source>
<target>Heslo aplikace</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App version" xml:space="preserve">
@@ -577,10 +584,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Audio/video calls" xml:space="preserve">
<source>Audio/video calls</source>
<target>Audio/video hovory</target>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Audio/video calls are prohibited." xml:space="preserve">
<source>Audio/video calls are prohibited.</source>
<target>Audio/video hovory jsou zakázány.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
@@ -640,6 +649,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
<source>Both you and your contact can make calls.</source>
<target>Volat můžete vy i váš kontakt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can send disappearing messages." xml:space="preserve">
@@ -1837,10 +1847,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Fast and no wait until the sender is online!" xml:space="preserve">
<source>Fast and no wait until the sender is online!</source>
<target>Rychle a bez čekání, než bude odesílatel online!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>Soubor bude smazán ze serverů.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be received when your contact completes uploading it." xml:space="preserve">
@@ -2722,6 +2734,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
<source>Only you can make calls.</source>
<target>Volat můžete pouze vy.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can send disappearing messages." xml:space="preserve">
@@ -2741,6 +2754,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
<source>Only your contact can make calls.</source>
<target>Volat může pouze váš kontakt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can send disappearing messages." xml:space="preserve">
@@ -2920,6 +2934,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Polish interface" xml:space="preserve">
<source>Polish interface</source>
<target>Polské rozhraní</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve">
@@ -2974,6 +2989,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Prohibit audio/video calls." xml:space="preserve">
<source>Prohibit audio/video calls.</source>
<target>Zákaz audio/video hovorů.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Prohibit irreversible message deletion." xml:space="preserve">
@@ -3043,6 +3059,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>Příjem souboru bude zastaven.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving via" xml:space="preserve">
@@ -3172,14 +3189,17 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Revoke" xml:space="preserve">
<source>Revoke</source>
<target>Odvolat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Revoke file" xml:space="preserve">
<source>Revoke file</source>
<target>Odvolat soubor</target>
<note>cancel file action</note>
</trans-unit>
<trans-unit id="Revoke file?" xml:space="preserve">
<source>Revoke file?</source>
<target>Odvolat soubor?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Role" xml:space="preserve">
@@ -3369,6 +3389,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Sending file will be stopped." xml:space="preserve">
<source>Sending file will be stopped.</source>
<target>Odesílání souboru bude zastaveno.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sending via" xml:space="preserve">
@@ -3423,6 +3444,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Set it instead of system authentication." xml:space="preserve">
<source>Set it instead of system authentication.</source>
<target>Nastavte jej namísto ověřování systému.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
@@ -3597,14 +3619,17 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Stop file" xml:space="preserve">
<source>Stop file</source>
<target>Zastavit soubor</target>
<note>cancel file action</note>
</trans-unit>
<trans-unit id="Stop receiving file?" xml:space="preserve">
<source>Stop receiving file?</source>
<target>Zastavit příjem souboru?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop sending file?" xml:space="preserve">
<source>Stop sending file?</source>
<target>Zastavit odesílání souboru?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
@@ -4125,6 +4150,7 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
</trans-unit>
<trans-unit id="Videos and files up to 1gb" xml:space="preserve">
<source>Videos and files up to 1gb</source>
<target>Videa a soubory až do velikosti 1 gb</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">

View File

@@ -15,6 +15,8 @@
<trans-unit id="&#10;Available in v5.1" xml:space="preserve">
<source>
Available in v5.1</source>
<target>
Verfügbar ab v5.1</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
@@ -199,10 +201,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="%u messages failed to decrypt." xml:space="preserve">
<source>%u messages failed to decrypt.</source>
<target>%u Nachrichten konnten nicht entschlüsselt werden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%u messages skipped." xml:space="preserve">
<source>%u messages skipped.</source>
<target>%u übersprungene Nachrichten.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(" xml:space="preserve">
@@ -455,6 +459,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Allow calls only if your contact allows them." xml:space="preserve">
<source>Allow calls only if your contact allows them.</source>
<target>Anrufe sind nur erlaubt, wenn Ihr Kontakt das ebenfalls erlaubt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow disappearing messages only if your contact allows it to you." xml:space="preserve">
@@ -499,6 +504,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Allow your contacts to call you." xml:space="preserve">
<source>Allow your contacts to call you.</source>
<target>Erlaubt Ihren Kontakten Sie anzurufen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
@@ -543,6 +549,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="App passcode" xml:space="preserve">
<source>App passcode</source>
<target>App Passwort</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App version" xml:space="preserve">
@@ -577,10 +584,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Audio/video calls" xml:space="preserve">
<source>Audio/video calls</source>
<target>Audio/Video Anrufe</target>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Audio/video calls are prohibited." xml:space="preserve">
<source>Audio/video calls are prohibited.</source>
<target>Audio/Video Anrufe sind nicht erlaubt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
@@ -640,6 +649,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
<source>Both you and your contact can make calls.</source>
<target>Sowohl Sie, als auch Ihr Kontakt können Anrufe tätigen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can send disappearing messages." xml:space="preserve">
@@ -1837,10 +1847,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Fast and no wait until the sender is online!" xml:space="preserve">
<source>Fast and no wait until the sender is online!</source>
<target>Schnell und ohne warten auf den Absender, bis er online ist!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>Die Datei wird von den Servern gelöscht.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be received when your contact completes uploading it." xml:space="preserve">
@@ -2722,6 +2734,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
<source>Only you can make calls.</source>
<target>Nur Sie können Anrufe tätigen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can send disappearing messages." xml:space="preserve">
@@ -2741,6 +2754,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
<source>Only your contact can make calls.</source>
<target>Nur Ihr Kontakt kann Anrufe tätigen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can send disappearing messages." xml:space="preserve">
@@ -2920,6 +2934,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Polish interface" xml:space="preserve">
<source>Polish interface</source>
<target>Polnische Bedienoberfläche</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve">
@@ -2974,6 +2989,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Prohibit audio/video calls." xml:space="preserve">
<source>Prohibit audio/video calls.</source>
<target>Audio/Video Anrufe nicht erlauben.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Prohibit irreversible message deletion." xml:space="preserve">
@@ -3043,6 +3059,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>Der Empfang der Datei wird beendet.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving via" xml:space="preserve">
@@ -3172,14 +3189,17 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Revoke" xml:space="preserve">
<source>Revoke</source>
<target>Widerrufen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Revoke file" xml:space="preserve">
<source>Revoke file</source>
<target>Datei widerrufen</target>
<note>cancel file action</note>
</trans-unit>
<trans-unit id="Revoke file?" xml:space="preserve">
<source>Revoke file?</source>
<target>Datei widerrufen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Role" xml:space="preserve">
@@ -3369,6 +3389,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Sending file will be stopped." xml:space="preserve">
<source>Sending file will be stopped.</source>
<target>Das Senden der Datei wird beendet.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sending via" xml:space="preserve">
@@ -3423,6 +3444,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Set it instead of system authentication." xml:space="preserve">
<source>Set it instead of system authentication.</source>
<target>Anstelle der System-Authentifizierung festlegen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
@@ -3597,14 +3619,17 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Stop file" xml:space="preserve">
<source>Stop file</source>
<target>Datei beenden</target>
<note>cancel file action</note>
</trans-unit>
<trans-unit id="Stop receiving file?" xml:space="preserve">
<source>Stop receiving file?</source>
<target>Den Empfang der Datei beenden?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop sending file?" xml:space="preserve">
<source>Stop sending file?</source>
<target>Das Senden der Datei beenden?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
@@ -4125,6 +4150,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
</trans-unit>
<trans-unit id="Videos and files up to 1gb" xml:space="preserve">
<source>Videos and files up to 1gb</source>
<target>Videos und Dateien bis zu 1GB</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">

View File

@@ -15,6 +15,8 @@
<trans-unit id="&#10;Available in v5.1" xml:space="preserve">
<source>
Available in v5.1</source>
<target>
Disponible en v5.1</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
@@ -199,10 +201,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="%u messages failed to decrypt." xml:space="preserve">
<source>%u messages failed to decrypt.</source>
<target>%u mensajes no pudieron ser descifrados.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%u messages skipped." xml:space="preserve">
<source>%u messages skipped.</source>
<target>%u mensajes omitidos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(" xml:space="preserve">
@@ -455,6 +459,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Allow calls only if your contact allows them." xml:space="preserve">
<source>Allow calls only if your contact allows them.</source>
<target>Se permiten llamadas sólo si tu contacto también las permite.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow disappearing messages only if your contact allows it to you." xml:space="preserve">
@@ -499,6 +504,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Allow your contacts to call you." xml:space="preserve">
<source>Allow your contacts to call you.</source>
<target>Permites que tus contactos puedan llamarte.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
@@ -543,6 +549,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="App passcode" xml:space="preserve">
<source>App passcode</source>
<target>Código de acceso a la aplicación</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App version" xml:space="preserve">
@@ -577,10 +584,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Audio/video calls" xml:space="preserve">
<source>Audio/video calls</source>
<target>Llamadas/Videollamadas</target>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Audio/video calls are prohibited." xml:space="preserve">
<source>Audio/video calls are prohibited.</source>
<target>Las llamadas/videollamadas no están permitidas.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
@@ -640,6 +649,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
<source>Both you and your contact can make calls.</source>
<target>Tanto tú como tu contacto podéis realizar llamadas.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can send disappearing messages." xml:space="preserve">
@@ -1837,10 +1847,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Fast and no wait until the sender is online!" xml:space="preserve">
<source>Fast and no wait until the sender is online!</source>
<target>¡Rápido y sin tener que esperar a que el remitente esté en línea!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>El archivo será eliminado de los servidores.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be received when your contact completes uploading it." xml:space="preserve">
@@ -2722,6 +2734,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
<source>Only you can make calls.</source>
<target>Solo tú puedes realizar llamadas.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can send disappearing messages." xml:space="preserve">
@@ -2741,6 +2754,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
<source>Only your contact can make calls.</source>
<target>Sólo tu contacto puede realizar llamadas.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can send disappearing messages." xml:space="preserve">
@@ -2920,6 +2934,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Polish interface" xml:space="preserve">
<source>Polish interface</source>
<target>Interfaz en polaco</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve">
@@ -2974,6 +2989,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Prohibit audio/video calls." xml:space="preserve">
<source>Prohibit audio/video calls.</source>
<target>Prohibir las llamadas/videollamadas.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Prohibit irreversible message deletion." xml:space="preserve">
@@ -3043,6 +3059,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>Se detendrá la recepción del archivo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving via" xml:space="preserve">
@@ -3172,14 +3189,17 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Revoke" xml:space="preserve">
<source>Revoke</source>
<target>Revocar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Revoke file" xml:space="preserve">
<source>Revoke file</source>
<target>Revocar archivo</target>
<note>cancel file action</note>
</trans-unit>
<trans-unit id="Revoke file?" xml:space="preserve">
<source>Revoke file?</source>
<target>¿Revocar archivo?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Role" xml:space="preserve">
@@ -3369,6 +3389,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Sending file will be stopped." xml:space="preserve">
<source>Sending file will be stopped.</source>
<target>Se detendrá el envío del archivo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sending via" xml:space="preserve">
@@ -3423,6 +3444,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Set it instead of system authentication." xml:space="preserve">
<source>Set it instead of system authentication.</source>
<target>Úsalo en lugar de la autenticación del sistema.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
@@ -3597,14 +3619,17 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Stop file" xml:space="preserve">
<source>Stop file</source>
<target>Detener archivo</target>
<note>cancel file action</note>
</trans-unit>
<trans-unit id="Stop receiving file?" xml:space="preserve">
<source>Stop receiving file?</source>
<target>¿Dejar de recibir el archivo?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop sending file?" xml:space="preserve">
<source>Stop sending file?</source>
<target>¿Dejar de enviar el archivo?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
@@ -4126,6 +4151,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
</trans-unit>
<trans-unit id="Videos and files up to 1gb" xml:space="preserve">
<source>Videos and files up to 1gb</source>
<target>Vídeos y archivos de hasta 1Gb</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">
@@ -4576,7 +4602,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" xml:space="preserve">
<source>[Star on GitHub](https://github.com/simplex-chat/simplex-chat)</source>
<target>[Dar Estrella en GitHub] (https://github.com/simplex-chat/simplex-chat)</target>
<target>[Estrella en GitHub] (https://github.com/simplex-chat/simplex-chat)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="_italic_" xml:space="preserve">

View File

@@ -15,6 +15,8 @@
<trans-unit id="&#10;Available in v5.1" xml:space="preserve">
<source>
Available in v5.1</source>
<target>
Disponible dans la v5.1</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
@@ -199,10 +201,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="%u messages failed to decrypt." xml:space="preserve">
<source>%u messages failed to decrypt.</source>
<target>%u messages n'ont pas pu être déchiffrés.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%u messages skipped." xml:space="preserve">
<source>%u messages skipped.</source>
<target>%u messages sautés.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(" xml:space="preserve">
@@ -545,6 +549,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="App passcode" xml:space="preserve">
<source>App passcode</source>
<target>Code d'accès à l'app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App version" xml:space="preserve">
@@ -1842,6 +1847,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Fast and no wait until the sender is online!" xml:space="preserve">
<source>Fast and no wait until the sender is online!</source>
<target>Rapide et ne nécessitant pas d'attendre que l'expéditeur soit en ligne !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
@@ -2928,6 +2934,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Polish interface" xml:space="preserve">
<source>Polish interface</source>
<target>Interface en polonais</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve">
@@ -3437,6 +3444,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Set it instead of system authentication." xml:space="preserve">
<source>Set it instead of system authentication.</source>
<target>Il permet de remplacer l'authentification du système.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
@@ -4142,6 +4150,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
</trans-unit>
<trans-unit id="Videos and files up to 1gb" xml:space="preserve">
<source>Videos and files up to 1gb</source>
<target>Vidéos et fichiers jusqu'à 1Go</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">

View File

@@ -15,6 +15,8 @@
<trans-unit id="&#10;Available in v5.1" xml:space="preserve">
<source>
Available in v5.1</source>
<target>
Disponibile nella v5.1</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
@@ -199,10 +201,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="%u messages failed to decrypt." xml:space="preserve">
<source>%u messages failed to decrypt.</source>
<target>%u messaggi non sono stati decifrati.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%u messages skipped." xml:space="preserve">
<source>%u messages skipped.</source>
<target>%u messaggi saltati.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(" xml:space="preserve">
@@ -545,6 +549,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="App passcode" xml:space="preserve">
<source>App passcode</source>
<target>Codice di accesso dell'app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App version" xml:space="preserve">
@@ -1842,6 +1847,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Fast and no wait until the sender is online!" xml:space="preserve">
<source>Fast and no wait until the sender is online!</source>
<target>Veloce e senza aspettare che il mittente sia in linea!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
@@ -2928,6 +2934,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Polish interface" xml:space="preserve">
<source>Polish interface</source>
<target>Interfaccia polacca</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve">
@@ -3437,6 +3444,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Set it instead of system authentication." xml:space="preserve">
<source>Set it instead of system authentication.</source>
<target>Impostala al posto dell'autenticazione di sistema.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
@@ -4142,6 +4150,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
</trans-unit>
<trans-unit id="Videos and files up to 1gb" xml:space="preserve">
<source>Videos and files up to 1gb</source>
<target>Video e file fino a 1 GB</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">

View File

@@ -15,6 +15,8 @@
<trans-unit id="&#10;Available in v5.1" xml:space="preserve">
<source>
Available in v5.1</source>
<target>
在 v5.1 中可用</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
@@ -199,10 +201,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="%u messages failed to decrypt." xml:space="preserve">
<source>%u messages failed to decrypt.</source>
<target>%u 消息解密失败。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%u messages skipped." xml:space="preserve">
<source>%u messages skipped.</source>
<target>已跳过 %u 条消息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(" xml:space="preserve">
@@ -455,6 +459,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Allow calls only if your contact allows them." xml:space="preserve">
<source>Allow calls only if your contact allows them.</source>
<target>仅当您的联系人允许时才允许呼叫。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow disappearing messages only if your contact allows it to you." xml:space="preserve">
@@ -499,6 +504,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Allow your contacts to call you." xml:space="preserve">
<source>Allow your contacts to call you.</source>
<target>允许您的联系人给您打电话。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
@@ -543,6 +549,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="App passcode" xml:space="preserve">
<source>App passcode</source>
<target>应用程序密码</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App version" xml:space="preserve">
@@ -577,10 +584,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Audio/video calls" xml:space="preserve">
<source>Audio/video calls</source>
<target>音频/视频通话</target>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Audio/video calls are prohibited." xml:space="preserve">
<source>Audio/video calls are prohibited.</source>
<target>禁止音频/视频通话。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
@@ -640,6 +649,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
<source>Both you and your contact can make calls.</source>
<target>您和您的联系人都可以拨打电话。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can send disappearing messages." xml:space="preserve">
@@ -1837,10 +1847,12 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Fast and no wait until the sender is online!" xml:space="preserve">
<source>Fast and no wait until the sender is online!</source>
<target>快速且无需等待发件人在线!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>文件将从服务器中删除。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be received when your contact completes uploading it." xml:space="preserve">
@@ -2722,6 +2734,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
<source>Only you can make calls.</source>
<target>只有您可以拨打电话。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can send disappearing messages." xml:space="preserve">
@@ -2741,6 +2754,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
<source>Only your contact can make calls.</source>
<target>只有您的联系人可以拨打电话。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can send disappearing messages." xml:space="preserve">
@@ -2920,6 +2934,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Polish interface" xml:space="preserve">
<source>Polish interface</source>
<target>波兰语界面</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve">
@@ -2974,6 +2989,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Prohibit audio/video calls." xml:space="preserve">
<source>Prohibit audio/video calls.</source>
<target>禁止音频/视频通话。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Prohibit irreversible message deletion." xml:space="preserve">
@@ -3043,6 +3059,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>即将停止接收文件。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving via" xml:space="preserve">
@@ -3172,14 +3189,17 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Revoke" xml:space="preserve">
<source>Revoke</source>
<target>撤销</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Revoke file" xml:space="preserve">
<source>Revoke file</source>
<target>撤销文件</target>
<note>cancel file action</note>
</trans-unit>
<trans-unit id="Revoke file?" xml:space="preserve">
<source>Revoke file?</source>
<target>撤销文件?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Role" xml:space="preserve">
@@ -3369,6 +3389,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Sending file will be stopped." xml:space="preserve">
<source>Sending file will be stopped.</source>
<target>即将停止发送文件。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sending via" xml:space="preserve">
@@ -3423,6 +3444,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Set it instead of system authentication." xml:space="preserve">
<source>Set it instead of system authentication.</source>
<target>设置它以代替系统身份验证。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
@@ -3597,14 +3619,17 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Stop file" xml:space="preserve">
<source>Stop file</source>
<target>停止文件</target>
<note>cancel file action</note>
</trans-unit>
<trans-unit id="Stop receiving file?" xml:space="preserve">
<source>Stop receiving file?</source>
<target>停止接收文件?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop sending file?" xml:space="preserve">
<source>Stop sending file?</source>
<target>停止发送文件?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
@@ -4125,6 +4150,7 @@ To connect, please ask your contact to create another connection link and check
</trans-unit>
<trans-unit id="Videos and files up to 1gb" xml:space="preserve">
<source>Videos and files up to 1gb</source>
<target>最大 1gb 的视频和文件</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">

View File

@@ -272,28 +272,25 @@ func receivedMsgNtf(_ res: ChatResponse) async -> (String, NSENotification)? {
ntfBadgeCountGroupDefault.set(max(0, ntfBadgeCountGroupDefault.get() - 1))
}
if case .image = cItem.content.msgContent {
if let file = cItem.file,
file.fileProtocol == .smp,
file.fileSize <= MAX_IMAGE_SIZE_AUTO_RCV,
privacyAcceptImagesGroupDefault.get() {
cItem = apiReceiveFile(fileId: file.fileId)?.chatItem ?? cItem
}
if let file = cItem.file,
file.fileSize <= MAX_IMAGE_SIZE_AUTO_RCV,
privacyAcceptImagesGroupDefault.get() {
cItem = autoReceiveFile(file) ?? cItem
}
} else if case .video = cItem.content.msgContent {
if let file = cItem.file,
file.fileProtocol == .smp,
file.fileSize <= MAX_VIDEO_SIZE_AUTO_RCV,
privacyAcceptImagesGroupDefault.get() {
cItem = apiReceiveFile(fileId: file.fileId)?.chatItem ?? cItem
cItem = autoReceiveFile(file) ?? cItem
}
} else if case .voice = cItem.content.msgContent { // TODO check inlineFileMode != IFMSent
if let file = cItem.file,
file.fileProtocol == .smp,
file.fileSize <= MAX_IMAGE_SIZE,
file.fileSize > MAX_VOICE_MESSAGE_SIZE_INLINE_SEND,
privacyAcceptImagesGroupDefault.get() {
cItem = apiReceiveFile(fileId: file.fileId)?.chatItem ?? cItem
cItem = autoReceiveFile(file) ?? cItem
}
}
}
let ntf: NSENotification = cInfo.ntfsEnabled ? .nse(notification: createMessageReceivedNtf(user, cInfo, cItem)) : .empty
return cItem.showMutableNotification ? (aChatItem.chatId, ntf) : nil
case let .rcvFileSndCancelled(_, aChatItem, _):
@@ -401,6 +398,22 @@ func apiReceiveFile(fileId: Int64, inline: Bool? = nil) -> AChatItem? {
return nil
}
func apiSetFileToReceive(fileId: Int64) {
let r = sendSimpleXCmd(.setFileToReceive(fileId: fileId))
if case .cmdOk = r { return }
logger.error("setFileToReceive error: \(responseError(r))")
}
func autoReceiveFile(_ file: CIFile) -> ChatItem? {
switch file.fileProtocol {
case .smp:
return apiReceiveFile(fileId: file.fileId)?.chatItem
case .xftp:
apiSetFileToReceive(fileId: file.fileId)
return nil
}
}
func setNetworkConfig(_ cfg: NetCfg) throws {
let r = sendSimpleXCmd(.apiSetNetworkConfig(networkConfig: cfg))
if case .cmdOk = r { return }

View File

@@ -100,6 +100,7 @@ public enum ChatCommand {
case apiChatRead(type: ChatType, id: Int64, itemRange: (Int64, Int64))
case apiChatUnread(type: ChatType, id: Int64, unreadChat: Bool)
case receiveFile(fileId: Int64, inline: Bool?)
case setFileToReceive(fileId: Int64)
case cancelFile(fileId: Int64)
case showVersion
case string(String)
@@ -206,6 +207,7 @@ public enum ChatCommand {
return "/freceive \(fileId) inline=\(onOff(inline))"
}
return "/freceive \(fileId)"
case let .setFileToReceive(fileId): return "/_set_file_to_receive \(fileId)"
case let .cancelFile(fileId): return "/fcancel \(fileId)"
case .showVersion: return "/version"
case let .string(str): return str
@@ -302,6 +304,7 @@ public enum ChatCommand {
case .apiChatRead: return "apiChatRead"
case .apiChatUnread: return "apiChatUnread"
case .receiveFile: return "receiveFile"
case .setFileToReceive: return "setFileToReceive"
case .cancelFile: return "cancelFile"
case .showVersion: return "showVersion"
case .string: return "console command"

View File

@@ -1,6 +1,9 @@
/* No comment provided by engineer. */
"\n" = "\n";
/* No comment provided by engineer. */
"\nAvailable in v5.1" = "\nDostupné ve verzi 5.1";
/* No comment provided by engineer. */
" " = " ";
@@ -172,6 +175,12 @@
/* No comment provided by engineer. */
"%lldw" = "%lldw";
/* No comment provided by engineer. */
"%u messages failed to decrypt." = "%u zpráv se nepodařilo dešifrovat.";
/* No comment provided by engineer. */
"%u messages skipped." = "%u zpráv přeskočeno.";
/* No comment provided by engineer. */
"`a + b`" = "\\`a + b`";
@@ -284,6 +293,9 @@
/* No comment provided by engineer. */
"Allow" = "Povolit";
/* No comment provided by engineer. */
"Allow calls only if your contact allows them." = "Povolte hovory, pouze pokud je váš kontakt povolí.";
/* No comment provided by engineer. */
"Allow disappearing messages only if your contact allows it to you." = "Povolte mizící zprávy, pouze pokud vám to váš kontakt dovolí.";
@@ -308,6 +320,9 @@
/* No comment provided by engineer. */
"Allow voice messages?" = "Povolit hlasové zprávy?";
/* No comment provided by engineer. */
"Allow your contacts to call you." = "Povolte svým kontaktům vám volat.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Umožněte svým kontaktům nevratně odstranit odeslané zprávy.";
@@ -335,6 +350,9 @@
/* No comment provided by engineer. */
"App icon" = "Ikona aplikace";
/* No comment provided by engineer. */
"App passcode" = "Heslo aplikace";
/* No comment provided by engineer. */
"App version" = "Verze aplikace";
@@ -356,6 +374,12 @@
/* No comment provided by engineer. */
"audio call (not e2e encrypted)" = "zvukový hovor (nešifrovaný e2e)";
/* chat feature */
"Audio/video calls" = "Audio/video hovory";
/* No comment provided by engineer. */
"Audio/video calls are prohibited." = "Audio/video hovory jsou zakázány.";
/* PIN entry */
"Authentication cancelled" = "Ověření zrušeno";
@@ -398,6 +422,9 @@
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Vy i váš kontakt můžete nevratně mazat odeslané zprávy.";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Volat můžete vy i váš kontakt.";
/* No comment provided by engineer. */
"Both you and your contact can send disappearing messages." = "Vy i váš kontakt můžete posílat mizící zprávy.";
@@ -1226,6 +1253,12 @@
/* No comment provided by engineer. */
"Failed to remove passphrase" = "Přístupovou frázi se nepodařilo odstranit";
/* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "Rychle a bez čekání, než bude odesílatel online!";
/* No comment provided by engineer. */
"File will be deleted from servers." = "Soubor bude smazán ze serverů.";
/* No comment provided by engineer. */
"File will be received when your contact completes uploading it." = "Soubor bude přijat, jakmile váš kontakt dokončí nahrávání.";
@@ -1851,6 +1884,9 @@
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání).";
/* No comment provided by engineer. */
"Only you can make calls." = "Volat můžete pouze vy.";
/* No comment provided by engineer. */
"Only you can send disappearing messages." = "Mizící zprávy můžete odesílat pouze vy.";
@@ -1860,6 +1896,9 @@
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání).";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Volat může pouze váš kontakt.";
/* No comment provided by engineer. */
"Only your contact can send disappearing messages." = "Zmizelé zprávy může odesílat pouze váš kontakt.";
@@ -1974,6 +2013,9 @@
/* No comment provided by engineer. */
"Please store passphrase securely, you will NOT be able to change it if you lose it." = "Heslo uložte bezpečně, v případě jeho ztráty jej NEBUDE možné změnit.";
/* No comment provided by engineer. */
"Polish interface" = "Polské rozhraní";
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Je možné, že otisk certifikátu v adrese serveru je nesprávný";
@@ -2004,6 +2046,9 @@
/* No comment provided by engineer. */
"Profile password" = "Heslo profilu";
/* No comment provided by engineer. */
"Prohibit audio/video calls." = "Zákaz audio/video hovorů.";
/* No comment provided by engineer. */
"Prohibit irreversible message deletion." = "Zakázat nevratné mazání zpráv.";
@@ -2049,6 +2094,9 @@
/* notification */
"Received file event" = "Událost přijatého souboru";
/* No comment provided by engineer. */
"Receiving file will be stopped." = "Příjem souboru bude zastaven.";
/* No comment provided by engineer. */
"Receiving via" = "Příjem přes";
@@ -2136,6 +2184,15 @@
/* No comment provided by engineer. */
"Revert" = "Vrátit";
/* No comment provided by engineer. */
"Revoke" = "Odvolat";
/* cancel file action */
"Revoke file" = "Odvolat soubor";
/* No comment provided by engineer. */
"Revoke file?" = "Odvolat soubor?";
/* No comment provided by engineer. */
"Role" = "Role";
@@ -2250,6 +2307,9 @@
/* No comment provided by engineer. */
"Sender may have deleted the connection request." = "Odesílatel možná smazal požadavek připojení.";
/* No comment provided by engineer. */
"Sending file will be stopped." = "Odesílání souboru bude zastaveno.";
/* No comment provided by engineer. */
"Sending via" = "Odesílání přes";
@@ -2280,6 +2340,9 @@
/* No comment provided by engineer. */
"Set group preferences" = "Nastavení skupinových předvoleb";
/* No comment provided by engineer. */
"Set it instead of system authentication." = "Nastavte jej namísto ověřování systému.";
/* No comment provided by engineer. */
"Set passphrase to export" = "Nastavení přístupové fráze pro export";
@@ -2385,6 +2448,15 @@
/* No comment provided by engineer. */
"Stop chat?" = "Zastavit chat?";
/* cancel file action */
"Stop file" = "Zastavit soubor";
/* No comment provided by engineer. */
"Stop receiving file?" = "Zastavit příjem souboru?";
/* No comment provided by engineer. */
"Stop sending file?" = "Zastavit odesílání souboru?";
/* authentication reason */
"Stop SimpleX" = "Zastavit SimpleX";
@@ -2724,6 +2796,9 @@
/* No comment provided by engineer. */
"Video will be received when your contact is online, please wait or check later!" = "Video obdržíte, až bude váš kontakt online, vyčkejte prosím nebo zkontrolujte později!";
/* No comment provided by engineer. */
"Videos and files up to 1gb" = "Videa a soubory až do velikosti 1 gb";
/* No comment provided by engineer. */
"View security code" = "Zobrazení bezpečnostního kódu";

View File

@@ -1,6 +1,9 @@
/* No comment provided by engineer. */
"\n" = "\n";
/* No comment provided by engineer. */
"\nAvailable in v5.1" = "\nVerfügbar ab v5.1";
/* No comment provided by engineer. */
" " = " ";
@@ -172,6 +175,12 @@
/* No comment provided by engineer. */
"%lldw" = "%lldW";
/* No comment provided by engineer. */
"%u messages failed to decrypt." = "%u Nachrichten konnten nicht entschlüsselt werden.";
/* No comment provided by engineer. */
"%u messages skipped." = "%u übersprungene Nachrichten.";
/* No comment provided by engineer. */
"`a + b`" = "\\`a + b`";
@@ -284,6 +293,9 @@
/* No comment provided by engineer. */
"Allow" = "Erlauben";
/* No comment provided by engineer. */
"Allow calls only if your contact allows them." = "Anrufe sind nur erlaubt, wenn Ihr Kontakt das ebenfalls erlaubt.";
/* No comment provided by engineer. */
"Allow disappearing messages only if your contact allows it to you." = "Verschwindende Nachrichten nur erlauben, wenn Ihr Kontakt das ebenfalls erlaubt.";
@@ -308,6 +320,9 @@
/* No comment provided by engineer. */
"Allow voice messages?" = "Sprachnachricht erlauben?";
/* No comment provided by engineer. */
"Allow your contacts to call you." = "Erlaubt Ihren Kontakten Sie anzurufen.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Erlauben Sie Ihren Kontakten gesendete Nachrichten unwiederbringlich zu löschen.";
@@ -335,6 +350,9 @@
/* No comment provided by engineer. */
"App icon" = "App Icon";
/* No comment provided by engineer. */
"App passcode" = "App Passwort";
/* No comment provided by engineer. */
"App version" = "App Version";
@@ -356,6 +374,12 @@
/* No comment provided by engineer. */
"audio call (not e2e encrypted)" = "Audioanruf (nicht E2E verschlüsselt)";
/* chat feature */
"Audio/video calls" = "Audio/Video Anrufe";
/* No comment provided by engineer. */
"Audio/video calls are prohibited." = "Audio/Video Anrufe sind nicht erlaubt.";
/* PIN entry */
"Authentication cancelled" = "Authentifizierung abgebrochen";
@@ -398,6 +422,9 @@
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Sowohl Ihr Kontakt, als auch Sie können gesendete Nachrichten unwiederbringlich löschen.";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Sowohl Sie, als auch Ihr Kontakt können Anrufe tätigen.";
/* No comment provided by engineer. */
"Both you and your contact can send disappearing messages." = "Ihr Kontakt und Sie können beide verschwindende Nachrichten senden.";
@@ -1226,6 +1253,12 @@
/* No comment provided by engineer. */
"Failed to remove passphrase" = "Das Entfernen des Passworts ist fehlgeschlagen";
/* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "Schnell und ohne warten auf den Absender, bis er online ist!";
/* No comment provided by engineer. */
"File will be deleted from servers." = "Die Datei wird von den Servern gelöscht.";
/* No comment provided by engineer. */
"File will be received when your contact completes uploading it." = "Die Datei wird empfangen, sobald das Hochladen durch ihren Kontakt abgeschlossen ist.";
@@ -1851,6 +1884,9 @@
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Nur Sie können Nachrichten unwiederbringlich löschen (Ihr Kontakt kann sie zum Löschen markieren).";
/* No comment provided by engineer. */
"Only you can make calls." = "Nur Sie können Anrufe tätigen.";
/* No comment provided by engineer. */
"Only you can send disappearing messages." = "Nur Sie können verschwindende Nachrichten senden.";
@@ -1860,6 +1896,9 @@
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Nur Ihr Kontakt kann Nachrichten unwiederbringlich löschen (Sie können sie zum Löschen markieren).";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Nur Ihr Kontakt kann Anrufe tätigen.";
/* No comment provided by engineer. */
"Only your contact can send disappearing messages." = "Nur Ihr Kontakt kann verschwindende Nachrichten senden.";
@@ -1974,6 +2013,9 @@
/* No comment provided by engineer. */
"Please store passphrase securely, you will NOT be able to change it if you lose it." = "Bitte bewahren Sie das Passwort sicher auf, Sie können es NICHT mehr ändern, wenn Sie es vergessen haben oder verlieren.";
/* No comment provided by engineer. */
"Polish interface" = "Polnische Bedienoberfläche";
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Der Fingerabdruck des Zertifikats in der Serveradresse ist wahrscheinlich ungültig";
@@ -2004,6 +2046,9 @@
/* No comment provided by engineer. */
"Profile password" = "Passwort für Profil";
/* No comment provided by engineer. */
"Prohibit audio/video calls." = "Audio/Video Anrufe nicht erlauben.";
/* No comment provided by engineer. */
"Prohibit irreversible message deletion." = "Unwiederbringliches löschen von Nachrichten nicht erlauben.";
@@ -2049,6 +2094,9 @@
/* notification */
"Received file event" = "Datei-Ereignis empfangen";
/* No comment provided by engineer. */
"Receiving file will be stopped." = "Der Empfang der Datei wird beendet.";
/* No comment provided by engineer. */
"Receiving via" = "Empfangen über";
@@ -2136,6 +2184,15 @@
/* No comment provided by engineer. */
"Revert" = "Zurückkehren";
/* No comment provided by engineer. */
"Revoke" = "Widerrufen";
/* cancel file action */
"Revoke file" = "Datei widerrufen";
/* No comment provided by engineer. */
"Revoke file?" = "Datei widerrufen?";
/* No comment provided by engineer. */
"Role" = "Rolle";
@@ -2250,6 +2307,9 @@
/* No comment provided by engineer. */
"Sender may have deleted the connection request." = "Der Absender hat möglicherweise die Verbindungsanfrage gelöscht.";
/* No comment provided by engineer. */
"Sending file will be stopped." = "Das Senden der Datei wird beendet.";
/* No comment provided by engineer. */
"Sending via" = "Senden über";
@@ -2280,6 +2340,9 @@
/* No comment provided by engineer. */
"Set group preferences" = "Gruppenpräferenzen einstellen";
/* No comment provided by engineer. */
"Set it instead of system authentication." = "Anstelle der System-Authentifizierung festlegen.";
/* No comment provided by engineer. */
"Set passphrase to export" = "Passwort für den Export festlegen";
@@ -2385,6 +2448,15 @@
/* No comment provided by engineer. */
"Stop chat?" = "Chat beenden?";
/* cancel file action */
"Stop file" = "Datei beenden";
/* No comment provided by engineer. */
"Stop receiving file?" = "Den Empfang der Datei beenden?";
/* No comment provided by engineer. */
"Stop sending file?" = "Das Senden der Datei beenden?";
/* authentication reason */
"Stop SimpleX" = "Stoppen Sie SimpleX";
@@ -2724,6 +2796,9 @@
/* No comment provided by engineer. */
"Video will be received when your contact is online, please wait or check later!" = "Das Video wird empfangen, wenn Ihr Kontakt online ist. Bitte warten oder überprüfen Sie es später!";
/* No comment provided by engineer. */
"Videos and files up to 1gb" = "Videos und Dateien bis zu 1GB";
/* No comment provided by engineer. */
"View security code" = "Schauen Sie sich den Sicherheitscode an";

View File

@@ -1,6 +1,9 @@
/* No comment provided by engineer. */
"\n" = "\n";
/* No comment provided by engineer. */
"\nAvailable in v5.1" = "\nDisponible en v5.1";
/* No comment provided by engineer. */
" " = " ";
@@ -44,7 +47,7 @@
"[Send us email](mailto:chat@simplex.chat)" = "[Contacta por email](mailto:chat@simplex.chat)";
/* No comment provided by engineer. */
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Dar Estrella en GitHub] (https://github.com/simplex-chat/simplex-chat)";
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Estrella en GitHub] (https://github.com/simplex-chat/simplex-chat)";
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Añadir nuevo contacto**: para crear tu código QR o enlace de un uso para tu contacto.";
@@ -172,6 +175,12 @@
/* No comment provided by engineer. */
"%lldw" = "%lldw";
/* No comment provided by engineer. */
"%u messages failed to decrypt." = "%u mensajes no pudieron ser descifrados.";
/* No comment provided by engineer. */
"%u messages skipped." = "%u mensajes omitidos.";
/* No comment provided by engineer. */
"`a + b`" = "\\`a + b`";
@@ -284,6 +293,9 @@
/* No comment provided by engineer. */
"Allow" = "Permitir";
/* No comment provided by engineer. */
"Allow calls only if your contact allows them." = "Se permiten llamadas sólo si tu contacto también las permite.";
/* No comment provided by engineer. */
"Allow disappearing messages only if your contact allows it to you." = "Se permiten mensajes temporales sólo si tu contacto también los permite para tí.";
@@ -308,6 +320,9 @@
/* No comment provided by engineer. */
"Allow voice messages?" = "¿Permites los mensajes de voz?";
/* No comment provided by engineer. */
"Allow your contacts to call you." = "Permites que tus contactos puedan llamarte.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Permites a tus contactos eliminar irreversiblemente los mensajes enviados.";
@@ -335,6 +350,9 @@
/* No comment provided by engineer. */
"App icon" = "Icono app";
/* No comment provided by engineer. */
"App passcode" = "Código de acceso a la aplicación";
/* No comment provided by engineer. */
"App version" = "Versión de la aplicación";
@@ -356,6 +374,12 @@
/* No comment provided by engineer. */
"audio call (not e2e encrypted)" = "llamada de audio (sin cifrado e2e)";
/* chat feature */
"Audio/video calls" = "Llamadas/Videollamadas";
/* No comment provided by engineer. */
"Audio/video calls are prohibited." = "Las llamadas/videollamadas no están permitidas.";
/* PIN entry */
"Authentication cancelled" = "Autenticación cancelada";
@@ -398,6 +422,9 @@
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados.";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Tanto tú como tu contacto podéis realizar llamadas.";
/* No comment provided by engineer. */
"Both you and your contact can send disappearing messages." = "Tanto tú como tu contacto podéis enviar mensajes temporales.";
@@ -1226,6 +1253,12 @@
/* No comment provided by engineer. */
"Failed to remove passphrase" = "Error eliminando la contraseña";
/* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "¡Rápido y sin tener que esperar a que el remitente esté en línea!";
/* No comment provided by engineer. */
"File will be deleted from servers." = "El archivo será eliminado de los servidores.";
/* No comment provided by engineer. */
"File will be received when your contact completes uploading it." = "El archivo se recibirá cuando tu contacto termine de subirlo.";
@@ -1851,6 +1884,9 @@
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcarlos para eliminar).";
/* No comment provided by engineer. */
"Only you can make calls." = "Solo tú puedes realizar llamadas.";
/* No comment provided by engineer. */
"Only you can send disappearing messages." = "Sólo tú puedes enviar mensajes temporales.";
@@ -1860,6 +1896,9 @@
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Sólo tu contacto puede eliminar mensajes de forma irreversible (tu puedes marcarlos para eliminar).";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Sólo tu contacto puede realizar llamadas.";
/* No comment provided by engineer. */
"Only your contact can send disappearing messages." = "Sólo tu contacto puede enviar mensajes temporales.";
@@ -1974,6 +2013,9 @@
/* No comment provided by engineer. */
"Please store passphrase securely, you will NOT be able to change it if you lose it." = "Guarda la contraseña de forma segura, NO podrás cambiarla si la pierdes.";
/* No comment provided by engineer. */
"Polish interface" = "Interfaz en polaco";
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta";
@@ -2004,6 +2046,9 @@
/* No comment provided by engineer. */
"Profile password" = "Contraseña del perfil";
/* No comment provided by engineer. */
"Prohibit audio/video calls." = "Prohibir las llamadas/videollamadas.";
/* No comment provided by engineer. */
"Prohibit irreversible message deletion." = "Prohibir la eliminación irreversible de mensajes.";
@@ -2049,6 +2094,9 @@
/* notification */
"Received file event" = "Evento de archivo recibido";
/* No comment provided by engineer. */
"Receiving file will be stopped." = "Se detendrá la recepción del archivo.";
/* No comment provided by engineer. */
"Receiving via" = "Recibiendo mediante";
@@ -2136,6 +2184,15 @@
/* No comment provided by engineer. */
"Revert" = "Revertir";
/* No comment provided by engineer. */
"Revoke" = "Revocar";
/* cancel file action */
"Revoke file" = "Revocar archivo";
/* No comment provided by engineer. */
"Revoke file?" = "¿Revocar archivo?";
/* No comment provided by engineer. */
"Role" = "Rol";
@@ -2250,6 +2307,9 @@
/* No comment provided by engineer. */
"Sender may have deleted the connection request." = "El remitente puede haber eliminado la solicitud de conexión.";
/* No comment provided by engineer. */
"Sending file will be stopped." = "Se detendrá el envío del archivo.";
/* No comment provided by engineer. */
"Sending via" = "Envando mediante";
@@ -2280,6 +2340,9 @@
/* No comment provided by engineer. */
"Set group preferences" = "Establecer preferencias de grupo";
/* No comment provided by engineer. */
"Set it instead of system authentication." = "Úsalo en lugar de la autenticación del sistema.";
/* No comment provided by engineer. */
"Set passphrase to export" = "Escribe la contraseña para exportar";
@@ -2385,6 +2448,15 @@
/* No comment provided by engineer. */
"Stop chat?" = "¿Detener Chat?";
/* cancel file action */
"Stop file" = "Detener archivo";
/* No comment provided by engineer. */
"Stop receiving file?" = "¿Dejar de recibir el archivo?";
/* No comment provided by engineer. */
"Stop sending file?" = "¿Dejar de enviar el archivo?";
/* authentication reason */
"Stop SimpleX" = "Detener SimpleX";
@@ -2724,6 +2796,9 @@
/* No comment provided by engineer. */
"Video will be received when your contact is online, please wait or check later!" = "El vídeo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde.";
/* No comment provided by engineer. */
"Videos and files up to 1gb" = "Vídeos y archivos de hasta 1Gb";
/* No comment provided by engineer. */
"View security code" = "Ver código de seguridad";

View File

@@ -1,6 +1,9 @@
/* No comment provided by engineer. */
"\n" = "\n";
/* No comment provided by engineer. */
"\nAvailable in v5.1" = "\nDisponible dans la v5.1";
/* No comment provided by engineer. */
" " = " ";
@@ -172,6 +175,12 @@
/* No comment provided by engineer. */
"%lldw" = "%lldsmn";
/* No comment provided by engineer. */
"%u messages failed to decrypt." = "%u messages n'ont pas pu être déchiffrés.";
/* No comment provided by engineer. */
"%u messages skipped." = "%u messages sautés.";
/* No comment provided by engineer. */
"`a + b`" = "\\`a + b`";
@@ -341,6 +350,9 @@
/* No comment provided by engineer. */
"App icon" = "Icône de l'app";
/* No comment provided by engineer. */
"App passcode" = "Code d'accès à l'app";
/* No comment provided by engineer. */
"App version" = "Version de l'app";
@@ -1241,6 +1253,9 @@
/* No comment provided by engineer. */
"Failed to remove passphrase" = "Échec de la suppression de la phrase secrète";
/* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "Rapide et ne nécessitant pas d'attendre que l'expéditeur soit en ligne !";
/* No comment provided by engineer. */
"File will be deleted from servers." = "Le fichier sera supprimé des serveurs.";
@@ -1998,6 +2013,9 @@
/* No comment provided by engineer. */
"Please store passphrase securely, you will NOT be able to change it if you lose it." = "Veuillez conserver votre phrase secrète en lieu sûr, vous NE pourrez PAS la changer si vous la perdez.";
/* No comment provided by engineer. */
"Polish interface" = "Interface en polonais";
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Il est possible que l'empreinte du certificat dans l'adresse du serveur soit incorrecte";
@@ -2322,6 +2340,9 @@
/* No comment provided by engineer. */
"Set group preferences" = "Définir les préférences du groupe";
/* No comment provided by engineer. */
"Set it instead of system authentication." = "Il permet de remplacer l'authentification du système.";
/* No comment provided by engineer. */
"Set passphrase to export" = "Définir la phrase secrète pour l'export";
@@ -2775,6 +2796,9 @@
/* No comment provided by engineer. */
"Video will be received when your contact is online, please wait or check later!" = "La vidéo ne sera reçue que lorsque votre contact sera en ligne. Veuillez patienter ou vérifier plus tard !";
/* No comment provided by engineer. */
"Videos and files up to 1gb" = "Vidéos et fichiers jusqu'à 1Go";
/* No comment provided by engineer. */
"View security code" = "Afficher le code de sécurité";

View File

@@ -1,6 +1,9 @@
/* No comment provided by engineer. */
"\n" = "\n";
/* No comment provided by engineer. */
"\nAvailable in v5.1" = "\nDisponibile nella v5.1";
/* No comment provided by engineer. */
" " = " ";
@@ -172,6 +175,12 @@
/* No comment provided by engineer. */
"%lldw" = "%lldset";
/* No comment provided by engineer. */
"%u messages failed to decrypt." = "%u messaggi non sono stati decifrati.";
/* No comment provided by engineer. */
"%u messages skipped." = "%u messaggi saltati.";
/* No comment provided by engineer. */
"`a + b`" = "\\`a + b`";
@@ -341,6 +350,9 @@
/* No comment provided by engineer. */
"App icon" = "Icona app";
/* No comment provided by engineer. */
"App passcode" = "Codice di accesso dell'app";
/* No comment provided by engineer. */
"App version" = "Versione dell'app";
@@ -1241,6 +1253,9 @@
/* No comment provided by engineer. */
"Failed to remove passphrase" = "Rimozione della password fallita";
/* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "Veloce e senza aspettare che il mittente sia in linea!";
/* No comment provided by engineer. */
"File will be deleted from servers." = "Il file verrà eliminato dai server.";
@@ -1998,6 +2013,9 @@
/* No comment provided by engineer. */
"Please store passphrase securely, you will NOT be able to change it if you lose it." = "Conserva la password in modo sicuro, NON potrai cambiarla se la perdi.";
/* No comment provided by engineer. */
"Polish interface" = "Interfaccia polacca";
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Probabilmente l'impronta del certificato nell'indirizzo del server è sbagliata";
@@ -2322,6 +2340,9 @@
/* No comment provided by engineer. */
"Set group preferences" = "Imposta le preferenze del gruppo";
/* No comment provided by engineer. */
"Set it instead of system authentication." = "Impostala al posto dell'autenticazione di sistema.";
/* No comment provided by engineer. */
"Set passphrase to export" = "Imposta la password per esportare";
@@ -2775,6 +2796,9 @@
/* No comment provided by engineer. */
"Video will be received when your contact is online, please wait or check later!" = "Il video verrà ricevuto quando il tuo contatto sarà in linea, attendi o controlla più tardi!";
/* No comment provided by engineer. */
"Videos and files up to 1gb" = "Video e file fino a 1 GB";
/* No comment provided by engineer. */
"View security code" = "Vedi codice di sicurezza";

View File

@@ -1,6 +1,9 @@
/* No comment provided by engineer. */
"\n" = "\n";
/* No comment provided by engineer. */
"\nAvailable in v5.1" = "\n在 v5.1 中可用";
/* No comment provided by engineer. */
" " = " ";
@@ -172,6 +175,12 @@
/* No comment provided by engineer. */
"%lldw" = "%lldw";
/* No comment provided by engineer. */
"%u messages failed to decrypt." = "%u 消息解密失败。";
/* No comment provided by engineer. */
"%u messages skipped." = "已跳过 %u 条消息。";
/* No comment provided by engineer. */
"`a + b`" = "\\`a + b`";
@@ -284,6 +293,9 @@
/* No comment provided by engineer. */
"Allow" = "允许";
/* No comment provided by engineer. */
"Allow calls only if your contact allows them." = "仅当您的联系人允许时才允许呼叫。";
/* No comment provided by engineer. */
"Allow disappearing messages only if your contact allows it to you." = "仅当您的联系人允许时才允许限时消息。";
@@ -308,6 +320,9 @@
/* No comment provided by engineer. */
"Allow voice messages?" = "允许语音消息?";
/* No comment provided by engineer. */
"Allow your contacts to call you." = "允许您的联系人给您打电话。";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "允许您的联系人不可撤回地删除已发送消息。";
@@ -335,6 +350,9 @@
/* No comment provided by engineer. */
"App icon" = "应用程序图标";
/* No comment provided by engineer. */
"App passcode" = "应用程序密码";
/* No comment provided by engineer. */
"App version" = "应用程序版本";
@@ -356,6 +374,12 @@
/* No comment provided by engineer. */
"audio call (not e2e encrypted)" = "语音通话(非端到端加密)";
/* chat feature */
"Audio/video calls" = "音频/视频通话";
/* No comment provided by engineer. */
"Audio/video calls are prohibited." = "禁止音频/视频通话。";
/* PIN entry */
"Authentication cancelled" = "身份验证已取消";
@@ -398,6 +422,9 @@
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "您和您的联系人都可以不可逆转地删除已发送的消息。";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "您和您的联系人都可以拨打电话。";
/* No comment provided by engineer. */
"Both you and your contact can send disappearing messages." = "您和您的联系人都可以发送限时消息。";
@@ -1226,6 +1253,12 @@
/* No comment provided by engineer. */
"Failed to remove passphrase" = "移除密码失败";
/* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "快速且无需等待发件人在线!";
/* No comment provided by engineer. */
"File will be deleted from servers." = "文件将从服务器中删除。";
/* No comment provided by engineer. */
"File will be received when your contact completes uploading it." = "文件将在您的联系人完成上传后收到。";
@@ -1851,6 +1884,9 @@
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。";
/* No comment provided by engineer. */
"Only you can make calls." = "只有您可以拨打电话。";
/* No comment provided by engineer. */
"Only you can send disappearing messages." = "只有您可以发送限时消息。";
@@ -1860,6 +1896,9 @@
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "只有您的联系人才能不可撤回地删除消息(您可以将它们标记为删除)。";
/* No comment provided by engineer. */
"Only your contact can make calls." = "只有您的联系人可以拨打电话。";
/* No comment provided by engineer. */
"Only your contact can send disappearing messages." = "只有您的联系人才可以发送限时消息。";
@@ -1974,6 +2013,9 @@
/* No comment provided by engineer. */
"Please store passphrase securely, you will NOT be able to change it if you lose it." = "请安全地保存密码,如果您丢失了密码,您将无法更改它。";
/* No comment provided by engineer. */
"Polish interface" = "波兰语界面";
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "服务器地址中的证书指纹可能不正确";
@@ -2004,6 +2046,9 @@
/* No comment provided by engineer. */
"Profile password" = "个人资料密码";
/* No comment provided by engineer. */
"Prohibit audio/video calls." = "禁止音频/视频通话。";
/* No comment provided by engineer. */
"Prohibit irreversible message deletion." = "禁止不可撤回消息删除。";
@@ -2049,6 +2094,9 @@
/* notification */
"Received file event" = "收到文件项目";
/* No comment provided by engineer. */
"Receiving file will be stopped." = "即将停止接收文件。";
/* No comment provided by engineer. */
"Receiving via" = "接收通过";
@@ -2136,6 +2184,15 @@
/* No comment provided by engineer. */
"Revert" = "恢复";
/* No comment provided by engineer. */
"Revoke" = "撤销";
/* cancel file action */
"Revoke file" = "撤销文件";
/* No comment provided by engineer. */
"Revoke file?" = "撤销文件?";
/* No comment provided by engineer. */
"Role" = "角色";
@@ -2250,6 +2307,9 @@
/* No comment provided by engineer. */
"Sender may have deleted the connection request." = "发送人可能已删除连接请求。";
/* No comment provided by engineer. */
"Sending file will be stopped." = "即将停止发送文件。";
/* No comment provided by engineer. */
"Sending via" = "发送通过";
@@ -2280,6 +2340,9 @@
/* No comment provided by engineer. */
"Set group preferences" = "设置群组偏好设置";
/* No comment provided by engineer. */
"Set it instead of system authentication." = "设置它以代替系统身份验证。";
/* No comment provided by engineer. */
"Set passphrase to export" = "设置密码来导出";
@@ -2385,6 +2448,15 @@
/* No comment provided by engineer. */
"Stop chat?" = "停止聊天程序?";
/* cancel file action */
"Stop file" = "停止文件";
/* No comment provided by engineer. */
"Stop receiving file?" = "停止接收文件?";
/* No comment provided by engineer. */
"Stop sending file?" = "停止发送文件?";
/* authentication reason */
"Stop SimpleX" = "停止 SimpleX";
@@ -2724,6 +2796,9 @@
/* No comment provided by engineer. */
"Video will be received when your contact is online, please wait or check later!" = "视频将在您的联系人在线时收到,请稍等或稍后查看!";
/* No comment provided by engineer. */
"Videos and files up to 1gb" = "最大 1gb 的视频和文件";
/* No comment provided by engineer. */
"View security code" = "查看安全码";

View File

@@ -2,7 +2,7 @@
set -e
langs=( cs de es fr it nl pl ru zh-Hans )
langs=( en cs de es fr it nl pl ru zh-Hans )
for lang in "${langs[@]}"; do
echo "***"

View File

@@ -2,7 +2,7 @@
set -e
langs=( cs de es fr it nl pl ru zh-Hans )
langs=( en cs de es fr it nl pl ru zh-Hans )
for lang in "${langs[@]}"; do
echo "***"

View File

@@ -91,6 +91,7 @@ library
Simplex.Chat.Migrations.M20230328_files_protocol
Simplex.Chat.Migrations.M20230402_protocol_servers
Simplex.Chat.Migrations.M20230411_extra_xftp_file_descriptions
Simplex.Chat.Migrations.M20230420_rcv_files_to_receive
Simplex.Chat.Mobile
Simplex.Chat.Mobile.WebRTC
Simplex.Chat.Options

View File

@@ -225,7 +225,9 @@ startChatController subConns enableExpireCIs startXFTPWorkers = do
then Just <$> async (subscribeUsers users)
else pure Nothing
atomically . writeTVar s $ Just (a1, a2)
when startXFTPWorkers startXFTP
when startXFTPWorkers $ do
startXFTP
void $ forkIO $ startFilesToReceive users
startCleanupManager
when enableExpireCIs $ startExpireCIs users
pure a1
@@ -257,6 +259,22 @@ subscribeUsers users = do
subscribe :: [User] -> m ()
subscribe = mapM_ $ runExceptT . subscribeUserConnections Agent.subscribeConnections
startFilesToReceive :: forall m. ChatMonad' m => [User] -> m ()
startFilesToReceive users = do
let (us, us') = partition activeUser users
startReceive us
startReceive us'
where
startReceive :: [User] -> m ()
startReceive = mapM_ $ runExceptT . startReceiveUserFiles
startReceiveUserFiles :: forall m. ChatMonad m => User -> m ()
startReceiveUserFiles user = do
filesToReceive <- withStore' (`getRcvFilesToReceive` user)
forM_ filesToReceive $ \ft ->
flip catchError (toView . CRChatError (Just user)) $
toView =<< receiveFile' user ft Nothing Nothing
restoreCalls :: ChatMonad' m => m ()
restoreCalls = do
savedCalls <- fromRight [] <$> runExceptT (withStore' $ \db -> getCalls db)
@@ -939,7 +957,7 @@ processChatCommand = \case
CRServerTestResult user srv <$> withAgent (\a -> testProtocolServer a (aUserId user) server)
TestProtoServer srv -> withUser $ \User {userId} ->
processChatCommand $ APITestProtoServer userId srv
APISetChatItemTTL userId newTTL_ -> withUser' $ \user -> do
APISetChatItemTTL userId newTTL_ -> withUser $ \user -> do
checkSameUser userId user
checkStoreNotChanged $
withChatLock "setChatItemTTL" $ do
@@ -1385,13 +1403,11 @@ processChatCommand = \case
ReceiveFile fileId rcvInline_ filePath_ -> withUser $ \_ ->
withChatLock "receiveFile" . procCmd $ do
(user, ft) <- withStore $ \db -> getRcvFileTransferById db fileId
(CRRcvFileAccepted user <$> acceptFileReceive user ft rcvInline_ filePath_) `catchError` processError user ft
where
processError user ft = \case
-- TODO AChatItem in Cancelled events
ChatErrorAgent (SMP SMP.AUTH) _ -> pure $ CRRcvFileAcceptedSndCancelled user ft
ChatErrorAgent (CONN DUPLICATE) _ -> pure $ CRRcvFileAcceptedSndCancelled user ft
e -> throwError e
receiveFile' user ft rcvInline_ filePath_
SetFileToReceive fileId -> withUser $ \_ -> do
withChatLock "setFileToReceive" . procCmd $ do
withStore' (`setRcvFileToReceive` fileId)
ok_
CancelFile fileId -> withUser $ \user@User {userId} ->
withChatLock "cancelFile" . procCmd $
withStore (\db -> getFileTransfer db user fileId) >>= \case
@@ -1904,6 +1920,16 @@ toFSFilePath :: ChatMonad m => FilePath -> m FilePath
toFSFilePath f =
maybe f (</> f) <$> (readTVarIO =<< asks filesFolder)
receiveFile' :: ChatMonad m => User -> RcvFileTransfer -> Maybe Bool -> Maybe FilePath -> m ChatResponse
receiveFile' user ft rcvInline_ filePath_ = do
(CRRcvFileAccepted user <$> acceptFileReceive user ft rcvInline_ filePath_) `catchError` processError
where
processError = \case
-- TODO AChatItem in Cancelled events
ChatErrorAgent (SMP SMP.AUTH) _ -> pure $ CRRcvFileAcceptedSndCancelled user ft
ChatErrorAgent (CONN DUPLICATE) _ -> pure $ CRRcvFileAcceptedSndCancelled user ft
e -> throwError e
acceptFileReceive :: forall m. ChatMonad m => User -> RcvFileTransfer -> Maybe Bool -> Maybe FilePath -> m AChatItem
acceptFileReceive user@User {userId} RcvFileTransfer {fileId, xftpRcvFile, fileInvitation = FileInvitation {fileName = fName, fileConnReq, fileInline, fileSize}, fileStatus, grpMemberId} rcvInline_ filePath_ = do
unless (fileStatus == RFSNew) $ case fileStatus of
@@ -2212,13 +2238,16 @@ cleanupManager = do
forM_ us' cleanupUser
liftIO $ threadDelay' $ cleanupManagerInterval * 1000000
where
cleanupUser user =
cleanupUser user = do
cleanupTimedItems user `catchError` (toView . CRChatError (Just user))
cleanupFileDescriptions user `catchError` (toView . CRChatError (Just user))
cleanupTimedItems user = do
ts <- liftIO getCurrentTime
let startTimedThreadCutoff = addUTCTime (realToFrac cleanupManagerInterval) ts
timedItems <- withStore' $ \db -> getTimedItems db user startTimedThreadCutoff
forM_ timedItems $ uncurry (startTimedItemThread user)
cleanupFileDescriptions user =
withStore' (`cleanupXFTPFileDescrs` user)
startProximateTimedItemThread :: ChatMonad m => User -> (ChatRef, ChatItemId) -> UTCTime -> m ()
startProximateTimedItemThread user itemRef deleteAt = do
@@ -4668,6 +4697,7 @@ chatCommandP =
("/image_forward " <|> "/imgf ") *> (ForwardImage <$> chatNameP' <* A.space <*> A.decimal),
("/fdescription " <|> "/fd") *> (SendFileDescription <$> chatNameP' <* A.space <*> filePath),
("/freceive " <|> "/fr ") *> (ReceiveFile <$> A.decimal <*> optional (" inline=" *> onOffP) <*> optional (A.space *> filePath)),
"/_set_file_to_receive " *> (SetFileToReceive <$> A.decimal),
("/fcancel " <|> "/fc ") *> (CancelFile <$> A.decimal),
("/fstatus " <|> "/fs ") *> (FileStatus <$> A.decimal),
"/simplex" $> ConnectSimplex,

View File

@@ -346,6 +346,7 @@ data ChatCommand
| ForwardImage ChatName FileTransferId
| SendFileDescription ChatName FilePath
| ReceiveFile {fileId :: FileTransferId, fileInline :: Maybe Bool, filePath :: Maybe FilePath}
| SetFileToReceive FileTransferId
| CancelFile FileTransferId
| FileStatus FileTransferId
| ShowProfile -- UserId (not used in UI)

View File

@@ -0,0 +1,18 @@
{-# LANGUAGE QuasiQuotes #-}
module Simplex.Chat.Migrations.M20230420_rcv_files_to_receive where
import Database.SQLite.Simple (Query)
import Database.SQLite.Simple.QQ (sql)
m20230420_rcv_files_to_receive :: Query
m20230420_rcv_files_to_receive =
[sql|
ALTER TABLE rcv_files ADD COLUMN to_receive INTEGER;
|]
down_m20230420_rcv_files_to_receive :: Query
down_m20230420_rcv_files_to_receive =
[sql|
ALTER TABLE rcv_files DROP COLUMN to_receive;
|]

View File

@@ -229,7 +229,8 @@ CREATE TABLE rcv_files(
file_descr_id INTEGER NULL
REFERENCES xftp_file_descriptions ON DELETE SET NULL,
agent_rcv_file_id BLOB NULL,
agent_rcv_file_deleted INTEGER DEFAULT 0 CHECK(agent_rcv_file_deleted NOT NULL)
agent_rcv_file_deleted INTEGER DEFAULT 0 CHECK(agent_rcv_file_deleted NOT NULL),
to_receive INTEGER
);
CREATE TABLE snd_file_chunks(
file_id INTEGER NOT NULL,

View File

@@ -182,6 +182,7 @@ module Simplex.Chat.Store
createRcvGroupFileTransfer,
appendRcvFD,
getRcvFileDescrByFileId,
cleanupXFTPFileDescrs,
updateRcvFileAgentId,
getRcvFileTransferById,
getRcvFileTransfer,
@@ -190,6 +191,8 @@ module Simplex.Chat.Store
acceptRcvInlineFT,
startRcvInlineFT,
xftpAcceptRcvFT,
setRcvFileToReceive,
getRcvFilesToReceive,
setRcvFTAgentDeleted,
updateRcvFileStatus,
createRcvFileChunk,
@@ -302,7 +305,7 @@ import Data.Text (Text)
import qualified Data.Text as T
import Data.Text.Encoding (decodeLatin1, encodeUtf8)
import Data.Time (addUTCTime)
import Data.Time.Clock (UTCTime (..), getCurrentTime)
import Data.Time.Clock (UTCTime (..), getCurrentTime, nominalDay)
import Data.Time.LocalTime (TimeZone, getCurrentTimeZone)
import Data.Type.Equality
import Database.SQLite.Simple (NamedParam (..), Only (..), Query (..), SQLError, (:.) (..))
@@ -370,6 +373,7 @@ import Simplex.Chat.Migrations.M20230321_agent_file_deleted
import Simplex.Chat.Migrations.M20230328_files_protocol
import Simplex.Chat.Migrations.M20230402_protocol_servers
import Simplex.Chat.Migrations.M20230411_extra_xftp_file_descriptions
import Simplex.Chat.Migrations.M20230420_rcv_files_to_receive
import Simplex.Chat.Protocol
import Simplex.Chat.Types
import Simplex.Chat.Util (week)
@@ -443,7 +447,8 @@ schemaMigrations =
("20230321_agent_file_deleted", m20230321_agent_file_deleted, Just down_m20230321_agent_file_deleted),
("20230328_files_protocol", m20230328_files_protocol, Just down_m20230328_files_protocol),
("20230402_protocol_servers", m20230402_protocol_servers, Just down_m20230402_protocol_servers),
("20230411_extra_xftp_file_descriptions", m20230411_extra_xftp_file_descriptions, Just down_m20230411_extra_xftp_file_descriptions)
("20230411_extra_xftp_file_descriptions", m20230411_extra_xftp_file_descriptions, Just down_m20230411_extra_xftp_file_descriptions),
("20230420_rcv_files_to_receive", m20230420_rcv_files_to_receive, Just down_m20230420_rcv_files_to_receive)
]
-- | The list of migrations in ascending order by date
@@ -3114,6 +3119,13 @@ getRcvFileDescrByFileId_ db fileId =
toRcvFileDescr (fileDescrId, fileDescrText, fileDescrPartNo, fileDescrComplete) =
RcvFileDescr {fileDescrId, fileDescrText, fileDescrPartNo, fileDescrComplete}
cleanupXFTPFileDescrs :: DB.Connection -> User -> IO ()
cleanupXFTPFileDescrs db User {userId} = do
cutoffTs <- addUTCTime (- (2 * nominalDay)) <$> getCurrentTime
-- TODO delete
DB.execute db "UPDATE xftp_file_descriptions SET file_descr_text = '' WHERE user_id = ? AND created_at <= ?" (userId, cutoffTs)
DB.execute db "DELETE FROM extra_xftp_file_descriptions WHERE user_id = ? AND created_at <= ?" (userId, cutoffTs)
updateRcvFileAgentId :: DB.Connection -> FileTransferId -> Maybe AgentRcvFileId -> IO ()
updateRcvFileAgentId db fileId aFileId = do
currentTs <- getCurrentTime
@@ -3216,6 +3228,31 @@ acceptRcvFT_ db User {userId} fileId filePath rcvFileInline currentTs = do
"UPDATE rcv_files SET rcv_file_inline = ?, file_status = ?, updated_at = ? WHERE file_id = ?"
(rcvFileInline, FSAccepted, currentTs, fileId)
setRcvFileToReceive :: DB.Connection -> FileTransferId -> IO ()
setRcvFileToReceive db fileId = do
currentTs <- getCurrentTime
DB.execute
db
"UPDATE rcv_files SET to_receive = 1, updated_at = ? WHERE file_id = ?"
(currentTs, fileId)
getRcvFilesToReceive :: DB.Connection -> User -> IO [RcvFileTransfer]
getRcvFilesToReceive db user@User {userId} = do
cutoffTs <- addUTCTime (- (2 * nominalDay)) <$> getCurrentTime
fileIds :: [Int64] <-
map fromOnly
<$> DB.query
db
[sql|
SELECT r.file_id
FROM rcv_files r
JOIN files f ON f.file_id = r.file_id
WHERE f.user_id = ? AND r.file_status = ?
AND r.to_receive = 1 AND r.created_at > ?
|]
(userId, FSNew, cutoffTs)
rights <$> mapM (runExceptT . getRcvFileTransfer db user) fileIds
setRcvFTAgentDeleted :: DB.Connection -> FileTransferId -> IO ()
setRcvFTAgentDeleted db fileId = do
currentTs <- getCurrentTime

View File

@@ -65,6 +65,7 @@ chatFileTests = do
it "with changed XFTP config: send and receive file" testXFTPWithChangedConfig
it "with relative paths: send and receive file" testXFTPWithRelativePaths
xit' "continue receiving file after restart" testXFTPContinueRcv
it "receive file marked to receive on chat start" testXFTPMarkToReceive
it "error receiving file" testXFTPRcvError
it "cancel receiving file, repeat receive" testXFTPCancelRcvRepeat
@@ -1233,6 +1234,40 @@ testXFTPContinueRcv tmp = do
where
cfg = testCfg {xftpFileConfig = Just $ XFTPFileConfig {minFileSize = 0}, tempDir = Just "./tests/tmp"}
testXFTPMarkToReceive :: HasCallStack => FilePath -> IO ()
testXFTPMarkToReceive = do
testChatCfg2 cfg aliceProfile bobProfile $ \alice bob -> do
withXFTPServer $ do
connectUsers alice bob
alice #> "/f @bob ./tests/fixtures/test.pdf"
alice <## "use /fc 1 to cancel sending"
bob <# "alice> sends file test.pdf (266.0 KiB / 272376 bytes)"
bob <## "use /fr 1 [<dir>/ | <path>] to receive it"
-- alice <## "started sending file 1 (test.pdf) to bob" -- TODO "started uploading" ?
alice <## "completed uploading file 1 (test.pdf) for bob"
bob #$> ("/_set_file_to_receive 1", id, "ok")
bob ##> "/_stop"
bob <## "chat stopped"
bob #$> ("/_files_folder ./tests/tmp/bob_files", id, "ok")
bob #$> ("/_temp_folder ./tests/tmp/bob_xftp", id, "ok")
bob ##> "/_start"
bob <## "chat started"
bob
<### [ "1 contacts connected (use /cs for the list)",
"started receiving file 1 (test.pdf) from alice",
"saving file 1 from alice to test.pdf"
]
bob <## "completed receiving file 1 (test.pdf) from alice"
src <- B.readFile "./tests/fixtures/test.pdf"
dest <- B.readFile "./tests/tmp/bob_files/test.pdf"
dest `shouldBe` src
where
cfg = testCfg {xftpFileConfig = Just $ XFTPFileConfig {minFileSize = 0}}
testXFTPRcvError :: HasCallStack => FilePath -> IO ()
testXFTPRcvError tmp = do
withXFTPServer $ do

74
website/langs/pl.json Normal file
View File

@@ -0,0 +1,74 @@
{
"reference": "Odnośnik",
"blog": "Blog",
"features": "Funkcje",
"why-simplex": "Dlaczego SimpleX",
"simplex-network": "Sieć SimpleX",
"simplex-explained": "Wyjaśnienie SimpleX",
"simplex-explained-tab-2-text": "2. Jak to działa",
"simplex-explained-tab-3-text": "3. Co widzą serwery",
"simplex-explained-tab-1-p-2": "Jak może to działać z jednokierunkowymi kolejkami i bez identyfikatorów profili użytkowników?",
"simplex-explained-tab-2-p-1": "Dla każdego połączenia używasz dwóch oddzielnych kolejek komunikatów do wysyłania i odbierania wiadomości przez różne serwery.",
"simplex-explained-tab-3-p-1": "Serwery mają osobne anonimowe poświadczenia dla każdej kolejki i nie wiedzą do jakich użytkowników one należą.",
"simplex-privacy": "Prywatność w SimpleX",
"chat-bot-example": "Przykładowy chat bot",
"smp-protocol": "Protokół SMP",
"chat-protocol": "Protokół czatu",
"donate": "Darowizna",
"copyright-label": "© 2020-2023 SimpleX | Projekt Open-Source",
"simplex-chat-protocol": "Protokół SimpleX Chat",
"terminal-cli": "Terminal CLI",
"terms-and-privacy-policy": "Warunki i polityka prywatności",
"hero-header": "Prywatność zdefiniowana na nowo",
"hero-subheader": "Pierwszy komunikator<br>bez identyfikatorów użytkowników",
"hero-overlay-1-textlink": "Dlaczego identyfikatory użytkowników są złe dla prywatności?",
"hero-overlay-2-textlink": "Jak działa SimpleX?",
"hero-2-header-desc": "Film pokazuje, jak połączyć się ze znajomym za pomocą jego jednorazowego kodu QR, osobiście lub przez łącze wideo. Możesz również połączyć się poprzez udostępnienie linku do zaproszenia.",
"hero-overlay-1-title": "Jak działa SimpleX?",
"hero-overlay-2-title": "Dlaczego identyfikatory użytkowników są złe dla prywatności?",
"feature-1-title": "Wiadomości szyfrowane E2E ze składnią markdown i edycją",
"feature-3-title": "Zdecentralizowane tajne grupy &mdash;<br>tylko użytkownicy wiedzą, że istnieją",
"feature-4-title": "Wiadomości głosowe zaszyfrowane przez E2E",
"feature-5-title": "Znikające wiadomości",
"feature-6-title": "Szyfrowane metodą E2E<br>rozmowy audio i wideo",
"feature-7-title": "Przenośna zaszyfrowana baza danych &mdash; przenieś swój profil na inne urządzenie",
"simplex-private-4-title": "Opcjonalnie<br>dostęp przez Tor",
"simplex-private-5-title": "Wielowarstwowe wyściełanie treścią",
"simplex-private-6-title": "Wymiana kluczy<br>poza pasmem",
"simplex-private-7-title": "Weryfikacja<br>integralności wiadomości",
"simplex-private-card-9-point-1": "Każda kolejka komunikatów przekazuje wiadomości w jednym kierunku, z różnymi adresami wysyłania i odbierania.",
"simplex-private-card-9-point-2": "Zmniejsza wektory ataku, w porównaniu do tradycyjnych brokerów wiadomości, oraz dostępne meta-dane.",
"simplex-private-card-10-point-1": "SimpleX używa tymczasowych anonimowych adresów par i poświadczeń dla każdego kontaktu użytkownika lub członka grupy.",
"simplex-private-card-10-point-2": "Pozwala na dostarczanie wiadomości bez identyfikatorów profilu użytkownika, zapewniając lepszą prywatność metadanych niż rozwiązania alternatywne.",
"privacy-matters-1-overlay-1-title": "Prywatność to oszczędność pieniędzy",
"privacy-matters-1-overlay-1-linkText": "Prywatność to oszczędność pieniędzy",
"home": "Strona główna",
"developers": "Deweloperzy",
"simplex-explained-tab-1-text": "1. Czego doświadczają użytkownicy",
"simplex-explained-tab-1-p-1": "Można tworzyć kontakty i grupy oraz prowadzić dwukierunkowe rozmowy, jak w każdym innym komunikatorze.",
"simplex-explained-tab-2-p-2": "Serwery przekazują wiadomości tylko w jedną stronę, nie mając pełnego obrazu konwersacji i połączeń użytkownika.",
"simplex-explained-tab-3-p-2": "Użytkownicy mogą jeszcze bardziej zwiększyć prywatność metadanych, używając Tor do uzyskania dostępu do serwerów, co zapobiega korelacji na podstawie adresu IP.",
"hero-p-1": "Inne aplikacje mają identyfikatory użytkowników: Signal, Matrix, Session, Briar, Jami, Cwtch itp.<br> SimpleX nie, <strong>nie ma nawet losowych numerów</strong>.<br> To radykalnie poprawia Twoją prywatność.",
"feature-2-title": "<br>Obrazy i pliki zaszyfrowane metodą E2E",
"feature-8-title": "Tryb incognito &mdash;<br>unikalny dla SimpleX Chat",
"simplex-network-overlay-1-title": "Porównanie z protokołami komunikacyjnymi P2P",
"simplex-private-1-title": "2 warstwy<br>szyfrowania typu end-to-end",
"simplex-private-2-title": "Dodatkowa warstwa<br>szyfrowania serwera",
"simplex-private-3-title": "Bezpieczny uwierzytelniony<br>transport TLS",
"simplex-private-card-3-point-1": "Do połączeń klient-serwer używany jest tylko TLS 1.2/1.3 z silnymi algorytmami.",
"simplex-private-8-title": "Mieszanie wiadomości<br>w celu zmniejszenia korelacji",
"simplex-private-9-title": "Jednokierunkowe<br>kolejki wiadomości",
"simplex-private-card-1-point-2": "NaCL cryptobox w każdej kolejce, aby zapobiec korelacji ruchu między kolejkami wiadomości, jeśli TLS jest zagrożony.",
"simplex-private-card-2-point-1": "NaCL cryptobox w każdej kolejce, aby zapobiec korelacji ruchu między kolejkami wiadomości, jeśli TLS jest skompromitowany.",
"simplex-private-card-3-point-2": "Odcisk palca serwera i wiązanie kanałów zapobiegają atakom MITM i replay.",
"simplex-private-card-3-point-3": "Wznowienie połączenia jest wyłączone, aby zapobiec atakom na sesje.",
"simplex-private-card-4-point-1": "Aby chronić swój adres IP, możesz uzyskać dostęp do serwerów przez Tor lub inną sieć nakładki transportowej.",
"simplex-private-card-6-point-1": "Wiele platform komunikacyjnych jest podatnych na ataki MITM ze strony serwerów lub dostawców sieci.",
"simplex-private-card-6-point-2": "Aby temu zapobiec aplikacje SimpleX przekazują klucze jednorazowe poza pasmem, gdy udostępniasz adres jako link lub kod QR.",
"simplex-private-card-7-point-1": "Aby zagwarantować integralność, wiadomości są kolejno numerowane i zawierają hash poprzedniej wiadomości.",
"simplex-private-card-7-point-2": "Jeśli jakaś wiadomość zostanie dodana, usunięta lub zmieniona, odbiorca zostanie o tym powiadomiony.",
"simplex-private-card-4-point-2": "Aby użyć SimpleX przez Tor zainstaluj <a href=\"https://guardianproject.info/apps/org.torproject.android/\" target=\"_blank\">aplikację Orbot</a> i włącz proxy SOCKS5 (lub VPN <a href=\"https://apps.apple.com/us/app/orbot/id1609461599?platform=iphone\" target=\"_blank\">na iOS</a>).",
"simplex-private-card-5-point-1": "SimpleX używa paddingu treści dla każdej warstwy szyfrowania, aby udaremnić ataki na rozmiar wiadomości.",
"simplex-private-card-5-point-2": "Dzięki temu wiadomości o różnych rozmiarach wyglądają tak samo dla serwerów i obserwatorów sieci.",
"simplex-private-card-8-point-1": "Serwery SimpleX działają jak węzły mieszania o niskiej latencji &mdash; wiadomości przychodzące i wychodzące mają inną kolejność."
}